gASVKQABAAAAAACMEnNwaGlueC5lbnZpcm9ubWVudJSMEEJ1aWxkRW52aXJvbm1lbnSUk5QpgZR9lCiMA2FwcJROjApkb2N0cmVlZGlylIxjL3Vzci9sb2NhbC9nb29nbGUvaG9tZS9ydXdhbmcvcmVsZWFzZS9iZWFtX3JlbGVhc2UvZG9jL2JlYW0vc2Rrcy9weXRob24vdGFyZ2V0L2RvY3MvX2J1aWxkL2RvY3RyZWVzlIwGc3JjZGlylIxaL3Vzci9sb2NhbC9nb29nbGUvaG9tZS9ydXdhbmcvcmVsZWFzZS9iZWFtX3JlbGVhc2UvZG9jL2JlYW0vc2Rrcy9weXRob24vdGFyZ2V0L2RvY3Mvc291cmNllIwGY29uZmlnlIwNc3BoaW54LmNvbmZpZ5SMBkNvbmZpZ5STlCmBlH2UKIwJb3ZlcnJpZGVzlH2UjAVzZXR1cJROjApleHRlbnNpb25zlF2UKIwSc3BoaW54LmV4dC5hdXRvZG9jlIwSc3BoaW54LmV4dC5kb2N0ZXN0lIwWc3BoaW54LmV4dC5pbnRlcnNwaGlueJSME3NwaGlueC5leHQubmFwb2xlb26UjBNzcGhpbnguZXh0LnZpZXdjb2RllGWMEGV4Y2x1ZGVfcGF0dGVybnOUXZQojAZfYnVpbGSUjA9hcGFjaGVfYmVhbS5yc3SUZYwKbWFzdGVyX2RvY5SMBWluZGV4lIwKaHRtbF90aGVtZZSMEHNwaGlueF9ydGRfdGhlbWWUjA9odG1sX3RoZW1lX3BhdGiUXZSMeS91c3IvbG9jYWwvZ29vZ2xlL2hvbWUvcnV3YW5nL3JlbGVhc2UvYmVhbV9yZWxlYXNlL2RvYy9iZWFtL3Nka3MvcHl0aG9uL3RhcmdldC8udG94L3B5MzctZG9jcy9saWIvcHl0aG9uMy43L3NpdGUtcGFja2FnZXOUYYwHcHJvamVjdJSMC0FwYWNoZSBCZWFtlIwRYXV0b2NsYXNzX2NvbnRlbnSUjARib3RolIwaYXV0b2RvY19pbmhlcml0X2RvY3N0cmluZ3OUiYwUYXV0b2RvY19tZW1iZXJfb3JkZXKUjAhieXNvdXJjZZSMFGRvY3Rlc3RfZ2xvYmFsX3NldHVwlIwcCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCpSME2ludGVyc3BoaW54X21hcHBpbmeUfZQojAZweXRob26UjBlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zlE6GlIwIaGFtY3Jlc3SUjCxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL5ROhpSMFmdvb2dsZS1jbG91ZC1kYXRhc3RvcmWUjC9odHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L5ROhpR1jAhuaXRwaWNreZSIjA5uaXRwaWNrX2lnbm9yZZRdlCiMCHB5OmNsYXNzlIwAlIaUaDyMA0FueZSGlGg8jAREaWN0lIaUaDyMCEl0ZXJhYmxllIaUaDyMBExpc3SUhpRoPIwDU2V0lIaUaDyMBVR1cGxllIaUaDyMBXR1cGxllIaUaDyMIGZ1dHVyZS50eXBlcy5uZXdvYmplY3QubmV3b2JqZWN0lIaUaDyMKmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuX1BpY2tsZUNvZGVyQmFzZZSGlGg8jCNhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RDb2RlcpSGlGg8jBphcGFjaGVfYmVhbS5pby5fQXZyb1NvdXJjZZSGlGg8jC5hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuUm93QXNEaWN0SnNvbkNvZGVylIaUaDyMM2FwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW8uX011dGF0ZZSGlGg8jDZhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvLl9NdXRhdGWUhpRoPIxAYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVpby5EYXRhc3RvcmVNdXRhdGVGbpSGlGg8jE1hcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cy5iaWdxdWVyeS5iaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYZSGlGg8jCBhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU291cmNlQmFzZZSGlGg8jDVhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscy5FeHBlY3RlZFNwbGl0T3V0Y29tZZSGlGg8jChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNSZXN1bHRzlIaUaDyMJGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lVmlzaXRvcpSGlGg8jCdhcGFjaGVfYmVhbS5waXBlbGluZS5QVHJhbnNmb3JtT3ZlcnJpZGWUhpRoPIwtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnNjaGVtYV9wYjIuU2NoZW1hlIaUaDyMHmFwYWNoZV9iZWFtLnB2YWx1ZS5Bc1NpZGVJbnB1dJSGlGg8jCFhcGFjaGVfYmVhbS5wdmFsdWUuRG9PdXRwdXRzVHVwbGWUhpRoPIwZYXBhY2hlX2JlYW0ucHZhbHVlLlBWYWx1ZZSGlGg8jDBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5DYWxsYWJsZVRhc2uUhpRoPIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNhbGxhYmxlV3JhcHBlckNvbWJpbmVGbpSGlGg8jDphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzlIaUaDyMMWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5fUGFyYWxsZWxUcmlnZ2VyRm6UhpRoPIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkluTWVtb3J5VW5tZXJnZWRTdGF0ZZSGlGg8jDFhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLkFueVR5cGVDb25zdHJhaW50lIaUaDyMMWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuQ29tcG9zaXRlVHlwZUhpbnSUhpRoPIwuYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlQ29uc3RyYWludJSGlGg8jD9hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLnZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKCmUhpRoPIw0YXBhY2hlX2JlYW0udXRpbHMud2luZG93ZWRfdmFsdWUuX0ludGVydmFsV2luZG93QmFzZZSGlGg8jDBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3QuUGF5bG9hZEJhc2WUhpRoPIw2YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5XaW5kb3dlZFR5cGVDb25zdHJhaW50lIaUaDyMFnVuaXR0ZXN0LmNhc2UuVGVzdENhc2WUhpRoPIwPX1N0YXRlRG9GblBhcmFtlIaUaDyMD19UaW1lckRvRm5QYXJhbZSGlGg8jBVfQnVuZGxlRmluYWxpemVyUGFyYW2UhpRoPIwVX1Jlc3RyaWN0aW9uRG9GblBhcmFtlIaUaDyMGF9XYXRlcm1hcmtFc3RpbWF0b3JQYXJhbZSGlGg8jAhjYWxsYWJsZZSGlGg8jBJ0eXBlcy5GdW5jdGlvblR5cGWUhpRoPIwOdHlwaW5nLkdlbmVyaWOUhpRoPIwhY29uY3VycmVudC5mdXR1cmVzLl9iYXNlLkV4ZWN1dG9ylIaUaDyMBHV1aWSUhpRoPIweZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5lIaUaDyMJGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuZW50aXR5LkVudGl0eZSGlGg8jCJnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmJhdGNoLkJhdGNolIaUaDyMDWlzX2luX2lweXRob26UhpSMBnB5Om9iapRoPYaUaKdoP4aUaKdoQYaUaKdoQ4aUaKdoRYaUaKdoR4aUaKdoSYaUaKdoS4aUaKdoTYaUaKdoT4aUaKdoUYaUaKdoU4aUaKdoVYaUaKdoV4aUaKdoWYaUaKdoW4aUaKdoXYaUaKdoX4aUaKdoYYaUaKdoY4aUaKdoZYaUaKdoZ4aUaKdoaYaUaKdoa4aUaKdobYaUaKdob4aUaKdocYaUaKdoc4aUaKdodYaUaKdod4aUaKdoeYaUaKdoe4aUaKdofYaUaKdof4aUaKdogYaUaKdog4aUaKdohYaUaKdoh4aUaKdoiYaUaKdoi4aUaKdojYaUaKdoj4aUaKdokYaUaKdok4aUaKdolYaUaKdol4aUaKdomYaUaKdom4aUaKdonYaUaKdon4aUaKdooYaUaKdoo4aUaKdopYaUjAZweTpleGOUjAtCZWFtSU9FcnJvcpSGlGjdjAlIdHRwRXJyb3KUhpRo3YwKVmFsdWVFcnJvcpSGlGWMDmh0bWxfY3NzX2ZpbGVzlF2UjA1odG1sX2pzX2ZpbGVzlF2UjA5lcHViX2Nzc19maWxlc5RdlIwNc291cmNlX3N1ZmZpeJSMC2NvbGxlY3Rpb25zlIwLT3JkZXJlZERpY3SUk5QpUpSMBC5yc3SUjBByZXN0cnVjdHVyZWR0ZXh0lHOMDW51bWZpZ19mb3JtYXSUfZQojAdzZWN0aW9ulIwKU2VjdGlvbiAlc5SMBmZpZ3VyZZSMB0ZpZy4gJXOUjAV0YWJsZZSMCFRhYmxlICVzlIwKY29kZS1ibG9ja5SMCkxpc3RpbmcgJXOUdYwGdmFsdWVzlH2UKGglaCaMA2VudpROh5SMBmF1dGhvcpSMB3Vua25vd26UaP1Oh5SMCWNvcHlyaWdodJRoPYwEaHRtbJROh5SMB3ZlcnNpb26UaD1o/U6HlIwHcmVsZWFzZZRoPWj9ToeUjAV0b2RheZRoPWj9ToeUjAl0b2RheV9mbXSUTmj9ToeUjAhsYW5ndWFnZZROaP1Oh5SMC2xvY2FsZV9kaXJzlF2UjAdsb2NhbGVzlGFo/U6HlIwYZmlndXJlX2xhbmd1YWdlX2ZpbGVuYW1llIwWe3Jvb3R9LntsYW5ndWFnZX17ZXh0fZRo/U6HlGgeaB9o/U6HlGjqaO5o/U6HlIwPc291cmNlX2VuY29kaW5nlIwJdXRmLTgtc2lnlGj9ToeUjA5zb3VyY2VfcGFyc2Vyc5R9lGj9ToeUaBpoG2j9ToeUjAxkZWZhdWx0X3JvbGWUTmj9ToeUjBhhZGRfZnVuY3Rpb25fcGFyZW50aGVzZXOUiGj9ToeUjBBhZGRfbW9kdWxlX25hbWVzlIho/U6HlIwddHJpbV9mb290bm90ZV9yZWZlcmVuY2Vfc3BhY2WUiWj9ToeUjAxzaG93X2F1dGhvcnOUiWj9ToeUjA5weWdtZW50c19zdHlsZZROagMBAABOh5SMEmhpZ2hsaWdodF9sYW5ndWFnZZSMB2RlZmF1bHSUaP1Oh5SMEWhpZ2hsaWdodF9vcHRpb25zlH2UaP1Oh5SMDnRlbXBsYXRlc19wYXRolF2UagMBAABOh5SMD3RlbXBsYXRlX2JyaWRnZZROagMBAABOh5SMDWtlZXBfd2FybmluZ3OUiWj9ToeUjBFzdXBwcmVzc193YXJuaW5nc5RdlGj9ToeUjBZtb2RpbmRleF9jb21tb25fcHJlZml4lF2UagMBAABOh5SMCnJzdF9lcGlsb2eUTmj9ToeUjApyc3RfcHJvbG9nlE5o/U6HlIwSdHJpbV9kb2N0ZXN0X2ZsYWdzlIho/U6HlIwOcHJpbWFyeV9kb21haW6UjAJweZRo/U6HlIwMbmVlZHNfc3BoaW54lE5OToeUjBBuZWVkc19leHRlbnNpb25zlH2UTk6HlIwMbWFucGFnZXNfdXJslE5o/U6HlGg5iE5Oh5RoOmg7Tk6HlIwGbnVtZmlnlIlo/U6HlIwTbnVtZmlnX3NlY251bV9kZXB0aJRLAWj9ToeUaPFo8mj9ToeUjA9tYXRoX251bWJlcl9hbGyUiWj9ToeUjBFtYXRoX2VxcmVmX2Zvcm1hdJROaP1Oh5SMC21hdGhfbnVtZmlnlIho/U6HlIwKdGxzX3ZlcmlmeZSIaP1Oh5SMC3Rsc19jYWNlcnRzlE5o/U6HlIwLc21hcnRxdW90ZXOUiGj9ToeUjBJzbWFydHF1b3Rlc19hY3Rpb26UjANxRGWUaP1Oh5SMFHNtYXJ0cXVvdGVzX2V4Y2x1ZGVzlH2UKIwJbGFuZ3VhZ2VzlF2UjAJqYZRhjAhidWlsZGVyc5RdlCiMA21hbpSMBHRleHSUZXVo/U6HlGggaCFqAwEAAE6HlGgiaCNqAwEAAE6HlIwSaHRtbF90aGVtZV9vcHRpb25zlH2UagMBAABOh5SMCmh0bWxfdGl0bGWUjBpBcGFjaGUgQmVhbSAgZG9jdW1lbnRhdGlvbpRqAwEAAE6HlIwQaHRtbF9zaG9ydF90aXRsZZSMGkFwYWNoZSBCZWFtICBkb2N1bWVudGF0aW9ulGoDAQAAToeUjApodG1sX3N0eWxllE5qAwEAAE6HlIwJaHRtbF9sb2dvlE5qAwEAAE6HlIwMaHRtbF9mYXZpY29ulE5qAwEAAE6HlGjkaOVqAwEAAE6HlGjmaOdqAwEAAE6HlIwQaHRtbF9zdGF0aWNfcGF0aJRdlGoDAQAAToeUjA9odG1sX2V4dHJhX3BhdGiUXZRqAwEAAE6HlIwVaHRtbF9sYXN0X3VwZGF0ZWRfZm10lE5qAwEAAE6HlIwNaHRtbF9zaWRlYmFyc5R9lGoDAQAAToeUjBVodG1sX2FkZGl0aW9uYWxfcGFnZXOUfZRqAwEAAE6HlIwTaHRtbF9kb21haW5faW5kaWNlc5SIagMBAABOh5SME2h0bWxfYWRkX3Blcm1hbGlua3OUjALCtpRqAwEAAE6HlIwOaHRtbF91c2VfaW5kZXiUiGoDAQAAToeUjBBodG1sX3NwbGl0X2luZGV4lIlqAwEAAE6HlIwQaHRtbF9jb3B5X3NvdXJjZZSIagMBAABOh5SMFGh0bWxfc2hvd19zb3VyY2VsaW5rlIhqAwEAAE6HlIwWaHRtbF9zb3VyY2VsaW5rX3N1ZmZpeJSMBC50eHSUagMBAABOh5SME2h0bWxfdXNlX29wZW5zZWFyY2iUaD1qAwEAAE6HlIwQaHRtbF9maWxlX3N1ZmZpeJROagMBAABOh5SMEGh0bWxfbGlua19zdWZmaXiUTmoDAQAAToeUjBNodG1sX3Nob3dfY29weXJpZ2h0lIhqAwEAAE6HlIwQaHRtbF9zaG93X3NwaGlueJSIagMBAABOh5SMDGh0bWxfY29udGV4dJR9lGoDAQAAToeUjBRodG1sX291dHB1dF9lbmNvZGluZ5SMBXV0Zi04lGoDAQAAToeUjBJodG1sX2NvbXBhY3RfbGlzdHOUiGoDAQAAToeUjBVodG1sX3NlY251bWJlcl9zdWZmaXiUjAIuIJRqAwEAAE6HlIwUaHRtbF9zZWFyY2hfbGFuZ3VhZ2WUTmoDAQAAToeUjBNodG1sX3NlYXJjaF9vcHRpb25zlH2UagMBAABOh5SMEmh0bWxfc2VhcmNoX3Njb3JlcpRoPU5Oh5SMFmh0bWxfc2NhbGVkX2ltYWdlX2xpbmuUiGoDAQAAToeUjB5odG1sX2V4cGVyaW1lbnRhbF9odG1sNV93cml0ZXKUTmoDAQAAToeUjAxodG1sX2Jhc2V1cmyUaD1qAwEAAE6HlIwSaHRtbF9tYXRoX3JlbmRlcmVylE5o/U6HlIwTc2luZ2xlaHRtbF9zaWRlYmFyc5RqigEAAGoDAQAAToeUjAxtYXRoamF4X3BhdGiUjFtodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9tYXRoamF4LzIuNy41L2xhdGVzdC5qcz9jb25maWc9VGVYLUFNUy1NTUxfSFRNTG9yTU1MlGoDAQAAToeUjA9tYXRoamF4X29wdGlvbnOUfZRqAwEAAE6HlIwObWF0aGpheF9pbmxpbmWUXZQojAJcKJSMAlwplGVqAwEAAE6HlIwPbWF0aGpheF9kaXNwbGF5lF2UKIwCXFuUjAJcXZRlagMBAABOh5SMDm1hdGhqYXhfY29uZmlnlE5qAwEAAE6HlIwVYXBwbGVoZWxwX2J1bmRsZV9uYW1llIwKQXBhY2hlQmVhbZSMCWFwcGxlaGVscJROh5SME2FwcGxlaGVscF9idW5kbGVfaWSUTmrZAQAAToeUjBRhcHBsZWhlbHBfZGV2X3JlZ2lvbpSMBWVuLXVzlGrZAQAAToeUjBhhcHBsZWhlbHBfYnVuZGxlX3ZlcnNpb26UjAExlGrZAQAAToeUjA5hcHBsZWhlbHBfaWNvbpROatkBAABOh5SMFGFwcGxlaGVscF9rYl9wcm9kdWN0lIwLQXBhY2hlQmVhbS2UatkBAABOh5SMEGFwcGxlaGVscF9rYl91cmyUTmrZAQAAToeUjBRhcHBsZWhlbHBfcmVtb3RlX3VybJROatkBAABOh5SMF2FwcGxlaGVscF9pbmRleF9hbmNob3JzlIlq2QEAAE6HlIwZYXBwbGVoZWxwX21pbl90ZXJtX2xlbmd0aJROatkBAABOh5SME2FwcGxlaGVscF9zdG9wd29yZHOUjAJlbpRq2QEAAE6HlIwQYXBwbGVoZWxwX2xvY2FsZZRq8QEAAGrZAQAAToeUjA9hcHBsZWhlbHBfdGl0bGWUjBBBcGFjaGUgQmVhbSBIZWxwlGrZAQAAToeUjBthcHBsZWhlbHBfY29kZXNpZ25faWRlbnRpdHmUTmrZAQAAToeUjBhhcHBsZWhlbHBfY29kZXNpZ25fZmxhZ3OUXZRq2QEAAE6HlIwWYXBwbGVoZWxwX2luZGV4ZXJfcGF0aJSMDy91c3IvYmluL2hpdXRpbJRq2QEAAE6HlIwXYXBwbGVoZWxwX2NvZGVzaWduX3BhdGiUjBEvdXNyL2Jpbi9jb2Rlc2lnbpRq2QEAAE6HlIwgYXBwbGVoZWxwX2Rpc2FibGVfZXh0ZXJuYWxfdG9vbHOUiU5Oh5SMDWVwdWJfYmFzZW5hbWWUjApBcGFjaGVCZWFtlE5Oh5SMDGVwdWJfdmVyc2lvbpRHQAgAAAAAAACMBGVwdWKUToeUjAplcHViX3RoZW1llGoJAgAAagkCAABOh5SMEmVwdWJfdGhlbWVfb3B0aW9uc5R9lGoJAgAAToeUjAplcHViX3RpdGxllIwaQXBhY2hlIEJlYW0gIGRvY3VtZW50YXRpb26UagkCAABOh5SMC2VwdWJfYXV0aG9ylGoAAQAAagkCAABOh5SMDWVwdWJfbGFuZ3VhZ2WUavEBAABqCQIAAE6HlIwOZXB1Yl9wdWJsaXNoZXKUagABAABqCQIAAE6HlIwOZXB1Yl9jb3B5cmlnaHSUaD1qCQIAAE6HlIwPZXB1Yl9pZGVudGlmaWVylGoAAQAAagkCAABOh5SMC2VwdWJfc2NoZW1llGoAAQAAagkCAABOh5SMCGVwdWJfdWlklGoAAQAAaP1Oh5SMCmVwdWJfY292ZXKUKWj9ToeUjAplcHViX2d1aWRllClo/U6HlIwOZXB1Yl9wcmVfZmlsZXOUXZRo/U6HlIwPZXB1Yl9wb3N0X2ZpbGVzlF2UaP1Oh5Ro6GjpagkCAABOh5SMEmVwdWJfZXhjbHVkZV9maWxlc5RdlGj9ToeUjA1lcHViX3RvY2RlcHRolEsDaP1Oh5SMC2VwdWJfdG9jZHVwlIho/U6HlIwNZXB1Yl90b2NzY29wZZRqLAEAAGj9ToeUjA9lcHViX2ZpeF9pbWFnZXOUiWj9ToeUjBRlcHViX21heF9pbWFnZV93aWR0aJRLAGj9ToeUjA5lcHViX3Nob3dfdXJsc5SMBmlubGluZZRqCQIAAE6HlIwOZXB1Yl91c2VfaW5kZXiUiGoJAgAAToeUjBBlcHViX2Rlc2NyaXB0aW9ulGoAAQAAagkCAABOh5SMEGVwdWJfY29udHJpYnV0b3KUagABAABqCQIAAE6HlIwRZXB1Yl93cml0aW5nX21vZGWUjApob3Jpem9udGFslGoJAgAAToeUjBBkZXZoZWxwX2Jhc2VuYW1llIwKQXBhY2hlQmVhbZROToeUjA9nZXR0ZXh0X2NvbXBhY3SUiIwHZ2V0dGV4dJROh5SMEGdldHRleHRfbG9jYXRpb26UiGpJAgAAToeUjAxnZXR0ZXh0X3V1aWSUiWpJAgAAToeUjBJnZXR0ZXh0X2F1dG9fYnVpbGSUiGj9ToeUjBpnZXR0ZXh0X2FkZGl0aW9uYWxfdGFyZ2V0c5RdlGj9ToeUjBFodG1saGVscF9iYXNlbmFtZZSMCkFwYWNoZUJlYW2UTk6HlIwMbGF0ZXhfZW5naW5llIwIcGRmbGF0ZXiUTk6HlIwPbGF0ZXhfZG9jdW1lbnRzlF2UKGgfjA5BcGFjaGVCZWFtLnRleJRoJmg9jAZtYW51YWyUdJRhTk6HlIwKbGF0ZXhfbG9nb5ROTk6HlIwQbGF0ZXhfYXBwZW5kaWNlc5RdlE5Oh5SMG2xhdGV4X3VzZV9sYXRleF9tdWx0aWNvbHVtbpSJTk6HlIwPbGF0ZXhfdXNlX3hpbmR5lIlOToeUjBlsYXRleF90b3BsZXZlbF9zZWN0aW9uaW5nlE5OToeUjBRsYXRleF9kb21haW5faW5kaWNlc5SITk6HlIwPbGF0ZXhfc2hvd191cmxzlIwCbm+UTk6HlIwTbGF0ZXhfc2hvd19wYWdlcmVmc5SJTk6HlIwObGF0ZXhfZWxlbWVudHOUfZROToeUjBZsYXRleF9hZGRpdGlvbmFsX2ZpbGVzlF2UTk6HlIwObGF0ZXhfZG9jY2xhc3OUfZROToeUjBBsaW5rY2hlY2tfaWdub3JllF2UTk6HlIwRbGlua2NoZWNrX3JldHJpZXOUSwFOToeUjBFsaW5rY2hlY2tfdGltZW91dJROTk6HlIwRbGlua2NoZWNrX3dvcmtlcnOUSwVOToeUjBFsaW5rY2hlY2tfYW5jaG9yc5SITk6HlIwYbGlua2NoZWNrX2FuY2hvcnNfaWdub3JllF2UjAJeIZRhTk6HlIwJbWFuX3BhZ2VzlF2UKGgfjAphcGFjaGViZWFtlIwMQXBhY2hlIEJlYW0glF2USwF0lGFOToeUjA1tYW5fc2hvd191cmxzlIlOToeUjA9xdGhlbHBfYmFzZW5hbWWUjApBcGFjaGVCZWFtlE5Oh5SMEHF0aGVscF9uYW1lc3BhY2WUTmoDAQAAToeUjAxxdGhlbHBfdGhlbWWUjAVub25hdpRqAwEAAE6HlIwUcXRoZWxwX3RoZW1lX29wdGlvbnOUfZRqAwEAAE6HlIwRdGV4aW5mb19kb2N1bWVudHOUXZQoaB+MCmFwYWNoZWJlYW2UaCZoPYwKQXBhY2hlQmVhbZSMIFRoZSBBcGFjaGVCZWFtIHJlZmVyZW5jZSBtYW51YWwulIwGUHl0aG9ulHSUYU5Oh5SMEnRleGluZm9fYXBwZW5kaWNlc5RdlE5Oh5SMEHRleGluZm9fZWxlbWVudHOUfZROToeUjBZ0ZXhpbmZvX2RvbWFpbl9pbmRpY2VzlIhOToeUjBF0ZXhpbmZvX3Nob3dfdXJsc5SMCGZvb3Rub3RllE5Oh5SMFXRleGluZm9fbm9fZGV0YWlsbWVudZSJTk6HlIwRdGV4dF9zZWN0aW9uY2hhcnOUjAcqPS1+IitglGj9ToeUjA10ZXh0X25ld2xpbmVzlIwEdW5peJRo/U6HlIwTdGV4dF9hZGRfc2VjbnVtYmVyc5SIaP1Oh5SMFXRleHRfc2VjbnVtYmVyX3N1ZmZpeJSMAi4glGj9ToeUjAp4bWxfcHJldHR5lIho/U6HlIwXY3BwX2luZGV4X2NvbW1vbl9wcmVmaXiUXZRo/U6HlIwRY3BwX2lkX2F0dHJpYnV0ZXOUXZRo/U6HlIwUY3BwX3BhcmVuX2F0dHJpYnV0ZXOUXZRo/U6HlGgnaCho/U6HlGgqaCto/U6HlIwVYXV0b2RvY19kZWZhdWx0X2ZsYWdzlF2UaP1Oh5SMF2F1dG9kb2NfZGVmYXVsdF9vcHRpb25zlH2UaP1Oh5SMG2F1dG9kb2NfZG9jc3RyaW5nX3NpZ25hdHVyZZSIaP1Oh5SMFGF1dG9kb2NfbW9ja19pbXBvcnRzlF2UaP1Oh5SMFmF1dG9kb2Nfd2FybmluZ2lzZXJyb3KUiGj9ToeUaCmJaP1Oh5SMDGRvY3Rlc3RfcGF0aJRdlGg9ToeUjBtkb2N0ZXN0X3Rlc3RfZG9jdGVzdF9ibG9ja3OUaiwBAABoPU6HlGgsaC1oPU6HlIwWZG9jdGVzdF9nbG9iYWxfY2xlYW51cJRoPWg9ToeUjBVkb2N0ZXN0X2RlZmF1bHRfZmxhZ3OUSyloPU6HlGguaC9o/U6HlIwXaW50ZXJzcGhpbnhfY2FjaGVfbGltaXSUSwVoPU6HlIwTaW50ZXJzcGhpbnhfdGltZW91dJROaD1Oh5SMGW5hcG9sZW9uX2dvb2dsZV9kb2NzdHJpbmeUiGj9ToeUjBhuYXBvbGVvbl9udW1weV9kb2NzdHJpbmeUiGj9ToeUjB5uYXBvbGVvbl9pbmNsdWRlX2luaXRfd2l0aF9kb2OUiWj9ToeUjCFuYXBvbGVvbl9pbmNsdWRlX3ByaXZhdGVfd2l0aF9kb2OUiWj9ToeUjCFuYXBvbGVvbl9pbmNsdWRlX3NwZWNpYWxfd2l0aF9kb2OUiWj9ToeUjCRuYXBvbGVvbl91c2VfYWRtb25pdGlvbl9mb3JfZXhhbXBsZXOUiWj9ToeUjCFuYXBvbGVvbl91c2VfYWRtb25pdGlvbl9mb3Jfbm90ZXOUiWj9ToeUjCZuYXBvbGVvbl91c2VfYWRtb25pdGlvbl9mb3JfcmVmZXJlbmNlc5SJaP1Oh5SMEW5hcG9sZW9uX3VzZV9pdmFylIlo/U6HlIwSbmFwb2xlb25fdXNlX3BhcmFtlIho/U6HlIwSbmFwb2xlb25fdXNlX3J0eXBllIho/U6HlIwUbmFwb2xlb25fdXNlX2tleXdvcmSUiGj9ToeUjBhuYXBvbGVvbl9jdXN0b21fc2VjdGlvbnOUTmj9ToeUjA92aWV3Y29kZV9pbXBvcnSUTmg9ToeUjBR2aWV3Y29kZV9lbmFibGVfZXB1YpSJaD1Oh5SMIHZpZXdjb2RlX2ZvbGxvd19pbXBvcnRlZF9tZW1iZXJzlIhoPU6HlHV1YowNY29uZmlnX3N0YXR1c5RLAWoFAQAAfZQojBBzcGhpbnguZG9tYWlucy5jlEsBjBhzcGhpbnguZG9tYWlucy5jaGFuZ2VzZXSUSwGMEnNwaGlueC5kb21haW5zLmNwcJRLAYwZc3BoaW54LmRvbWFpbnMuamF2YXNjcmlwdJRLAYwTc3BoaW54LmRvbWFpbnMubWF0aJRLAowVc3BoaW54LmRvbWFpbnMucHl0aG9ulEsBjBJzcGhpbnguZG9tYWlucy5yc3SUSwGMEnNwaGlueC5kb21haW5zLnN0ZJRLAWgXSwFoGUsBjAZzcGhpbniUSzd1jBR2ZXJzaW9uaW5nX2NvbmRpdGlvbpSJjBJ2ZXJzaW9uaW5nX2NvbXBhcmWUiYwHZG9tYWluc5R9lIwIc2V0dGluZ3OUfZQojBBlbWJlZF9zdHlsZXNoZWV0lImMFWNsb2FrX2VtYWlsX2FkZHJlc3Nlc5SIjAxwZXBfYmFzZV91cmyUjCBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL5SMDnBlcF9yZWZlcmVuY2VzlE6MDHJmY19iYXNlX3VybJSMHGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC+UjA5yZmNfcmVmZXJlbmNlc5ROjA5pbnB1dF9lbmNvZGluZ5RqGQEAAIwOZG9jdGl0bGVfeGZvcm2UiYwSc2VjdHN1YnRpdGxlX3hmb3JtlImMCmhhbHRfbGV2ZWyUSwWMFmZpbGVfaW5zZXJ0aW9uX2VuYWJsZWSUiIwTc21hcnRxdW90ZXNfbG9jYWxlc5RdlGj9aANqJQEAAImMDWxhbmd1YWdlX2NvZGWUavEBAACMDHNtYXJ0X3F1b3Rlc5SIdYwJX3dhcm5mdW5jlE6MCmZvdW5kX2RvY3OUj5QojBthcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW+UjCdhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtX3NlcnZpY2WUjD9hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXKUjCxhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJuc5SMN2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5jYXB0dXJlX2NvbnRyb2yUjClhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljc5SMHmFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0c5SMEmFwYWNoZV9iZWFtLnB2YWx1ZZSME2FwYWNoZV9iZWFtLm9wdGlvbnOUjCBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc5SMGWFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHOUjBRhcGFjaGVfYmVhbS5waXBlbGluZZSMG2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbJSMGmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVylIwrYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudGVzdF9zdHJlYW1faW1wbJSMHmFwYWNoZV9iZWFtLmNvZGVycy5hdnJvX3JlY29yZJSMM2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudJSMEmFwYWNoZV9iZWFtLmlvLmF3c5SMG2FwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbJSMNmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfdXJuc5SMH2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2uUjCZhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlc5SMG2FwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcJSMJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUudGVzdGluZ5SMN2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnSUjA5hcGFjaGVfYmVhbS5pb5SMN2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5kaXNwbGF5X21hbmFnZXKUjBdhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eZSMH2FwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXKUjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcpSMN2FwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXKUjBdhcGFjaGVfYmVhbS5pby5hd3MuczNpb5SMI2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzlIwcYXBhY2hlX2JlYW0ubWwuZ2NwLmNsb3VkX2RscJSMFWFwYWNoZV9iZWFtLmlvLmF2cm9pb5SMIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrlIwZYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyc5SMLmFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXOUjCRhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnOUjB9hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZllIwlYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yl9pdF9waXBlbGluZZSME2FwYWNoZV9iZWFtLnZlcnNpb26UjD5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZZSMHmFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlsc5SMHWFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzlIwSYXBhY2hlX2JlYW0ubWwuZ2NwlIw7YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBjb2xsX3Zpc3VhbGl6YXRpb26UjEhhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMuc3RyZWFtaW5nLmdyb3VwX2J5X2tleV9zdHJlYW1pbmdfcGlwZWxpbmWUjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtc5SMKGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5zdHJlYW1pbmeUjCZhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVyc5SMJmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvlIwdYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3eUjClhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlcpSMM2FwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZZSMMWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXOUjB9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlslIwuYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvcpSMN2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2V4cGFuc2lvbl9hcGlfcGIyX2dycGOUjCFhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmWUjCNhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5jb21tb25fdXJuc5SMGmFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVylIwqYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuYm90bzNfY2xpZW50lIw0YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJuc5SMHWFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxllIwtYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzlIwdYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXOUjCRhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHSUjCZhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFya5SMNmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaJSMG2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeZSMF2FwYWNoZV9iZWFtLnV0aWxzLnJldHJ5lIwtYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzlIwcYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZZSMJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheZSMG2FwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlc5SMLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljc5SMNWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkylIwuYXBhY2hlX2JlYW0udG9vbHMuZm5fYXBpX3J1bm5lcl9taWNyb2JlbmNobWFya5SMSWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2Vfc3RyZWFtaW5nX21ldHJpY3NfcGlwZWxpbmWUjB9hcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtlIwiYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvX292ZXJyaWRlc5SMI2FwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVylIwTYXBhY2hlX2JlYW0udGVzdGluZ5SMGmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zlIwoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c190ZXN0X3B5M5SMLGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbF90ZXN0X2l0lIwgYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW2UjCphcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmuUjDNhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWyUjEJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGiUjBhhcGFjaGVfYmVhbS51dGlscy5wbHVnaW6UjB5hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2WUjA5hcGFjaGVfYmVhbS5tbJSMLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VylIwjYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3KUjC9hcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eZSMNGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdfcXVlcnlfcXVlcnlfdG9fdGFibGVfcGlwZWxpbmWUjBFhcGFjaGVfYmVhbS51dGlsc5SMNGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGOUjDZhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHOUjBhhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW+UjBhhcGFjaGVfYmVhbS5pby5tb25nb2RiaW+UjClhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5M5SMI2FwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzlIw1YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTGUjCthcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc2NoZW1hX3BiMl9ncnBjlIwTYXBhY2hlX2JlYW0ucnVubmVyc5SMMmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVylIwpYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnmUjBphcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50c5SMJmFwYWNoZV9iZWFtLm1sLmdjcC52aWRlb2ludGVsbGlnZW5jZW1slIwWYXBhY2hlX2JlYW0udXRpbHMudXJuc5SMFmFwYWNoZV9iZWFtLnRyYW5zZm9ybXOUjB1hcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi51dGlsc5SMBWluZGV4lIwSYXBhY2hlX2JlYW0uaW8uZ2NwlIwpYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2VuZXJhdGVfc2VxdWVuY2WUjCRhcGFjaGVfYmVhbS5tbC5nY3AubmF0dXJhbGxhbmd1YWdlbWyUjBhhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3CUjDFhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnF1ZXJ5X3NwbGl0dGVylIwmYXBhY2hlX2JlYW0udXRpbHMudGhyZWFkX3Bvb2xfZXhlY3V0b3KUjBxhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93lIwbYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBplIwmYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHOUjB5hcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW2UjBxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzlIwbYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wlIwnYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNllIw0YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLm1vY2tfaXB5dGhvbpSMGWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW2UjB9hcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtlIwnYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrlIwsYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2lvX3JlYWRfcGlwZWxpbmWUjDlhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9pbnRlcmFjdGl2ZV9hcGlfcGIyX2dycGOUjBdhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYpSMJGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvc5SMEmFwYWNoZV9iZWFtLmNvZGVyc5SMK2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGWUjChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzlIwcYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZZSMI2FwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVllIwYYXBhY2hlX2JlYW0udGVzdGluZy51dGlslIwdYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHOUjBhhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW+UjClhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzN5SMKmFwYWNoZV9iZWFtLnRlc3RpbmcubWV0cmljX3Jlc3VsdF9tYXRjaGVyc5SMGWFwYWNoZV9iZWFtLmludGVybmFsLnV0aWyUjBVhcGFjaGVfYmVhbS50eXBlaGludHOUjDBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGOUjDFhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVylIwtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VylIw3YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoaW5nLnN0cmVhbWluZ19jYWNoZZSMI2FwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzlIwdYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnOUjDhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfZ3JwY5SMImFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXKUjDFhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2ZyYWdtZW50lIwfYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c5SMHWFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzlIwmYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmWUjCBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVyc5SMIWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybZSMFGFwYWNoZV9iZWFtLmlvLnV0aWxzlIwdYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2GUjB5hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3OUjCdhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLm9wdGlvbnOUjBFhcGFjaGVfYmVhbS5lcnJvcpSMFWFwYWNoZV9iZWFtLmlvLmlvYmFzZZSMMGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZV90ZXN0X3B5M5SMNmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwY5SMHWFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRolIwkYXBhY2hlX2JlYW0udGVzdGluZy5leHRyYV9hc3NlcnRpb25zlIw8YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmFuc2Zvcm1zX2tleXdvcmRfb25seV9hcmdzX3Rlc3RfcHkzlIwgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnOUjD1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9ylIwjYXBhY2hlX2JlYW0udXRpbHMuaW50ZXJhY3RpdmVfdXRpbHOUjC5hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuZW5kcG9pbnRzX3BiMl9ncnBjlIwiYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ld5SMIWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29sc5SMH2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWyUjDZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2KUjB5hcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW2UjC5hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9ylIwUYXBhY2hlX2JlYW0uaW8udmNmaW+UjC1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2WUjB1hcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlc5SMKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTOUjBFhcGFjaGVfYmVhbS50b29sc5SMH2FwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWyUjCFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHOUjDFhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjlIwpYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnSUjCRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX2phdmGUjBxhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rlIw1YXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmuUjBthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmWUjCNhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5weXRob25fdXJuc5SMHWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LnV0aWxzlIwVYXBhY2hlX2JlYW0uaW8udGV4dGlvlIwmYXBhY2hlX2JlYW0udGVzdGluZy5kYXRhdHlwZV9pbmZlcmVuY2WUjC1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHSUjChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVylIwgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGWUjB1hcGFjaGVfYmVhbS5jb2RlcnMudHlwZWNvZGVyc5SMLGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl9ncnBjlIwXYXBhY2hlX2JlYW0udG9vbHMudXRpbHOUjBVhcGFjaGVfYmVhbS5pby5maWxlaW+UjDphcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnRlc3RpbmcucGlwZWxpbmVfYXNzZXJ0aW9ulIwZYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YpSMHmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZZSMMWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXKUjBdhcGFjaGVfYmVhbS5pby5leHRlcm5hbJSMHGFwYWNoZV9iZWFtLmNvZGVycy5yb3dfY29kZXKUjBRhcGFjaGVfYmVhbS5pbnRlcm5hbJSMHmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheZSMHmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcpSMGWFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW+UjDdhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjlIwaYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3SUjBphcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY5SMJGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3JlYXRlX3NvdXJjZZSMFGFwYWNoZV9iZWFtLmlvLmZsaW5rlIwcYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcm5hbJSMH2FwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW2UjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcpSMJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGluZ5SMH2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWyUjDhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJuc5SMOGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5leHRlcm5hbF90cmFuc2Zvcm1zX3BiMl9ncnBjlIwcYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcpSMImFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWKUjB1hcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vyc5SMHWFwYWNoZV9iZWFtLmlvLmdjcC5iaWd0YWJsZWlvlIwiYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcm5hbC5uYW1lc5SMKWFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvlIw7YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmludGVyYWN0aXZlX29wdGlvbnOUjCBhcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudJSMNWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkwlIwTYXBhY2hlX2JlYW0ubWV0cmljc5SMLmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlaW+UjD9hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX21ldHJpY3NfcGlwZWxpbmWUjC1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXKUjDBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2JlYW2UjDthcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbJSQjAhhbGxfZG9jc5R9lChqtgMAAEdB16E69CT9Emo8AwAAR0HXoTr0JW0ralEDAABHQdehOvQsUqJqbQMAAEdB16E69C0bNGoCBAAAR0HXoTr0LfQTauMDAABHQdehOvQwNj1q+QMAAEdB16E69DQ7UmrUAwAAR0HXoTr0NR90agMEAABHQdehOvQ1fO1qpAMAAEdB16E69DXWd2rYAwAAR0HXoTr0O7cEaroDAABHQdehOvQ9acZqGgQAAEdB16E69D4c2moTBAAAR0HXoTr0P17jasADAABHQdehOvRGtd5qRgMAAEdB16E69FPZjWpPAwAAR0HXoTr0WTkWaj4DAABHQdehOvRZoWtqmwMAAEdB16E69Fnq92rMAwAAR0HXoTr0WkRyamsDAABHQdehOvRcNnBq7QMAAEdB16E69F4dWWpCAwAAR0HXoTr0X/JMag0EAABHQdehOvRi4n1qTAMAAEdB16E69Gfh+2q5AwAAR0HXoTr0ajGIagEEAABHQdehOvRqnUBqQwMAAEdB16E69Gro5WoUBAAAR0HXoTr0bkqkaqIDAABHQdehOvRzIm5q0QMAAEdB16E69HU1iGrvAwAAR0HXoTr0dm+caokDAABHQdehOvR44oVq/AMAAEdB16E69HxYtWqvAwAAR0HXoTr0guw6ai0DAABHQdehOvSF+GVqgQMAAEdB16E69I3EjWoLBAAAR0HXoTr0ji44amMDAABHQdehOvSYHhdqoQMAAEdB16E69JiL3GqOAwAAR0HXoTr0m5RnanMDAABHQdehOvShcORqqQMAAEdB16E69Ks8KGqyAwAAR0HXoTr0rDHAauADAABHQdehOvSzfvlqFgQAAEdB16E69LWTJWp2AwAAR0HXoTr0tfYpat8DAABHQdehOvS2RbhqVwMAAEdB16E69Lm4IGodBAAAR0HXoTr0uwfWamIDAABHQdehOvS7ysVqpQMAAEdB16E69L0HRWq4AwAAR0HXoTr0vvRvauoDAABHQdehOvS/kbNqGAQAAEdB16E69MxtKGqEAwAAR0HXoTr0z758apIDAABHQdehOvTTjI5qfgMAAEdB16E69NSs7Gr+AwAAR0HXoTr01jWQalUDAABHQdehOvTW0CFqfQMAAEdB16E69Nl/dmrVAwAAR0HXoTr04mZlaqoDAABHQdehOvTq4aZqkwMAAEdB16E69Oxsfmq9AwAAR0HXoTr07zqtahUEAABHQdehOvTx+wRqxgMAAEdB16E69PORG2o2AwAAR0HXoTr09zbaavQDAABHQdehOvT53mVqBgQAAEdB16E69Pr/mGrQAwAAR0HXoTr0+81HauUDAABHQdehOvT/EdFqlQMAAEdB16E69QG3wGocBAAAR0HXoTr1AhwaajcDAABHQdehOvUJ1xJqCQQAAEdB16E69QunpWr/AwAAR0HXoTr1DT8narUDAABHQdehOvUQ9ltqigMAAEdB16E69RFzfWpaAwAAR0HXoTr1EcXhak4DAABHQdehOvUUHrlqowMAAEdB16E69RXY02qDAwAAR0HXoTr1Fv0napwDAABHQdehOvUYvORqPwMAAEdB16E69Rs3qGo1AwAAR0HXoTr1G5b5alMDAABHQdehOvUfK9tqZgMAAEdB16E69SHbY2rJAwAAR0HXoTr1KTXnajgDAABHQdehOvUt6bJqSAMAAEdB16E69S5bemqoAwAAR0HXoTr1LrN3atcDAABHQdehOvUwPlJqQAMAAEdB16E69TDlPWpnAwAAR0HXoTr1MbFmasIDAABHQdehOvU0wYpqswMAAEdB16E69TUbiWrsAwAAR0HXoTr1NvVmagcEAABHQdehOvU3xJ9qkAMAAEdB16E69TiLqWpsAwAAR0HXoTr1PkHtat4DAABHQdehOvU+uoBqEgQAAEdB16E69T8DFWr6AwAAR0HXoTr1P0cbajADAABHQdehOvVBh51qlwMAAEdB16E69UHYbGrIAwAAR0HXoTr1Qh3dahEEAABHQdehOvVDWmZqaQMAAEdB16E69UP1EmryAwAAR0HXoTr1RE1navMDAABHQdehOvVE9DxqNAMAAEdB16E69UfvyGqYAwAAR0HXoTr1VO7RaqcDAABHQdehOvVVXOdqHgQAAEdB16E69VebbWp8AwAAR0HXoTr1WIHYankDAABHQdehOvVeCMRqDgQAAEdB16E69WDHeWpgAwAAR0HXoTr1YTUuauYDAABHQdehOvVk4VJqZAMAAEdB16E69WXiwmoABAAAR0HXoTr1ZnbWaggEAABHQdehOvVm4F1qmgMAAEdB16E69Wi0m2pQAwAAR0HXoTr1aahcatwDAABHQdehOvVqalFqMgMAAEdB16E69WvYk2r3AwAAR0HXoTr1bK6qarcDAABHQdehOvVu+qlq9gMAAEdB16E69X5DR2qMAwAAR0HXoTr1gPmhal0DAABHQdehOvWCV7ZqSgMAAEdB16E69Y1oKGofBAAAR0HXoTr1jfiGajsDAABHQdehOvWPn8Bq5AMAAEdB16E69ZW2GWrhAwAAR0HXoTr1llEYaosDAABHQdehOvWXK0dqVAMAAEdB16E69ZeMyWriAwAAR0HXoTr1mXYuasQDAABHQdehOvWcV91qDwQAAEdB16E69Z0UR2rFAwAAR0HXoTr1nbagancDAABHQdehOvWeGIRqRwMAAEdB16E69aAfnGqHAwAAR0HXoTr1oT/walsDAABHQdehOvW4zzBqcgMAAEdB16E69boufGovAwAAR0HXoTr1u+aOaiAEAABHQdehOvW9TR1qRQMAAEdB16E69cA41GqZAwAAR0HXoTr1wiJqatMDAABHQdehOvXCfWFqMQMAAEdB16E69cM01moZBAAAR0HXoTr1w7MmasMDAABHQdehOvXGUthqygMAAEdB16E69ceUBmo9AwAAR0HXoTr1ypsoakQDAABHQdehOvXLAVlqrgMAAEdB16E69ctv9Gr9AwAAR0HXoTr1zCCKagwEAABHQdehOvXMc/pqFwQAAEdB16E69czDmmq0AwAAR0HXoTr1zR+takkDAABHQdehOvXU4k5qnwMAAEdB16E69dVauWpwAwAAR0HXoTr11sMPajoDAABHQdehOvXZYvJqWQMAAEdB16E69duSfmqAAwAAR0HXoTr12/83atIDAABHQdehOvXcX6dqcQMAAEdB16E69dy5gGp1AwAAR0HXoTr13QjlaiEEAABHQdehOvXd4fBqSwMAAEdB16E69d+2DWqGAwAAR0HXoTr14IuPalIDAABHQdehOvXg3q9qGwQAAEdB16E69eFF9GqWAwAAR0HXoTr14bjyanoDAABHQdehOvXiNAZq9QMAAEdB16E69eNsemrZAwAAR0HXoTr15AfRajMDAABHQdehOvXkbv9qkQMAAEdB16E69ets9WpeAwAAR0HXoTr16+3WalwDAABHQdehOvXslcFqvwMAAEdB16E69e2R32pfAwAAR0HXoTr17uEuas0DAABHQdehOvX0SuVqaAMAAEdB16E69fW23mqwAwAAR0HXoTr191vYai4DAABHQdehOvX4oqNqWAMAAEdB16E69glTQWq7AwAAR0HXoTr2C35WaukDAABHQdehOvYL5ptqsQMAAEdB16E69g4iMmrwAwAAR0HXoTr2Ds2RansDAABHQdehOvYX2rZqhQMAAEdB16E69hmT3mr7AwAAR0HXoTr2GxD6ap4DAABHQdehOvYiiKpqzgMAAEdB16E69ijvjGrxAwAAR0HXoTr2QD96agoEAABHQdehOvZBamNqBAQAAEdB16E69kOEF2pNAwAAR0HXoTr2R4zhahAEAABHQdehOvZJ+l5q7gMAAEdB16E69ksvEWroAwAAR0HXoTr2TPV2ar4DAABHQdehOvZN0TtqzwMAAEdB16E69k/rT2rrAwAAR0HXoTr2UMyoaqsDAABHQdehOvZSa05qZQMAAEdB16E69lMfzWraAwAAR0HXoTr2VDiRagUEAABHQdehOvZZw1xq+AMAAEdB16E69lzDJWo5AwAAR0HXoTr2a6P9amEDAABHQdehOvZwHzVqwQMAAEdB16E69nCwFmrbAwAAR0HXoTr2cnqqapQDAABHQdehOvZ0Rh9qjQMAAEdB16E69nZhyWrnAwAAR0HXoTr2fbqPam8DAABHQdehOvZ/RsJqrQMAAEdB16E69oFfMWrWAwAAR0HXoTr2gh7lakEDAABHQdehOvaEiF1qbgMAAEdB16E69ofNbWrLAwAAR0HXoTr2iLkzaoIDAABHQdehOvaJa8xqjwMAAEdB16E69onN+GrHAwAAR0HXoTr2jUyZat0DAABHQdehOvaOEj5qiAMAAEdB16E69o6opGp4AwAAR0HXoTr2k722amoDAABHQdehOvaVNPpqvAMAAEdB16E69pZDYWp0AwAAR0HXoTr2mE3can8DAABHQdehOvaaWdVqpgMAAEdB16E69ptLdGqsAwAAR0HXoTr2qN/lap0DAABHQdehOvapyfBqVgMAAEdB16E69qoq9WqgAwAAR0HXoTr2q2EudYwMZGVwZW5kZW5jaWVzlGjrjAtkZWZhdWx0ZGljdJSTlIwIYnVpbHRpbnOUjANzZXSUk5SFlFKUKGq2AwAAj5QojCguLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvcm93X2NvZGVyLnB5lIwlLi4vLi4vLi4vYXBhY2hlX2JlYW0vY29kZXJzL2NvZGVycy5weZSMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL2NvZGVycy9fX2luaXRfXy5weZSQajwDAACPlCiMKi4uLy4uLy4uL2FwYWNoZV9iZWFtL2NvZGVycy9hdnJvX3JlY29yZC5weZSQalEDAACPlCiMJS4uLy4uLy4uL2FwYWNoZV9iZWFtL2NvZGVycy9jb2RlcnMucHmUkGptAwAAj5QojCkuLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvb2JzZXJ2YWJsZS5weZSQagIEAACPlCiMKC4uLy4uLy4uL2FwYWNoZV9iZWFtL2NvZGVycy9yb3dfY29kZXIucHmUkGrjAwAAj5QojCouLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvc2xvd19zdHJlYW0ucHmUkGr5AwAAj5QojCkuLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvdHlwZWNvZGVycy5weZSQatQDAACPlCiMHS4uLy4uLy4uL2FwYWNoZV9iZWFtL2Vycm9yLnB5lJBqAwQAAI+UKIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW50ZXJuYWwvX19pbml0X18ucHmUkGqkAwAAj5QojC0uLi8uLi8uLi9hcGFjaGVfYmVhbS9pbnRlcm5hbC9nY3AvX19pbml0X18ucHmUkGrYAwAAj5QojCkuLi8uLi8uLi9hcGFjaGVfYmVhbS9pbnRlcm5hbC9nY3AvYXV0aC5weZSMRy4uLy4uLy50b3gvcHkzNy1kb2NzL2xpYi9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9vYXV0aDJjbGllbnQvY2xpZW50LnB5lIxULi4vLi4vLnRveC9weTM3LWRvY3MvbGliL3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL2FwaXRvb2xzL2Jhc2UvcHkvY3JlZGVudGlhbHNfbGliLnB5lJBqugMAAI+UKIwuLi4vLi4vLi4vYXBhY2hlX2JlYW0vb3B0aW9ucy92YWx1ZV9wcm92aWRlci5weZSMLy4uLy4uLy4uL2FwYWNoZV9iZWFtL2ludGVybmFsL2djcC9qc29uX3ZhbHVlLnB5lJBqGgQAAI+UKIwsLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW50ZXJuYWwvaHR0cF9jbGllbnQucHmUkGoTBAAAj5QojCguLi8uLi8uLi9hcGFjaGVfYmVhbS9pbnRlcm5hbC9waWNrbGVyLnB5lJBqwAMAAI+UKIw+Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3B5dGhvbjMuNy90eXBpbmcucHmUjCUuLi8uLi8uLi9hcGFjaGVfYmVhbS9pbnRlcm5hbC91dGlsLnB5lIxMLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3B5dGhvbjMuNy9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weZSQakYDAACPlCiMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9iaWdxdWVyeS5weZSMIS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2lvYmFzZS5weZSMIy4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL19faW5pdF9fLnB5lIwlLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL3B1YnN1Yi5weZSMJS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3RmcmVjb3JkaW8ucHmUjCQuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9wYXJxdWV0aW8ucHmUjCQuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9tb25nb2RiaW8ucHmUjCEuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby90ZXh0aW8ucHmUjCkuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9yYW5nZV90cmFja2Vycy5weZSMIS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2F2cm9pby5weZSMKC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2ZpbGViYXNlZHNpbmsucHmUkGpPAwAAj5QojCEuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9hdnJvaW8ucHmUkGo+AwAAj5QojCcuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9hd3MvX19pbml0X18ucHmUkGqbAwAAj5QojC8uLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9hd3MvY2xpZW50cy9fX2luaXRfXy5weZSQaswDAACPlCiMMi4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2F3cy9jbGllbnRzL3MzL19faW5pdF9fLnB5lJBqawMAAI+UKIw2Li4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vYXdzL2NsaWVudHMvczMvYm90bzNfY2xpZW50LnB5lJBq7QMAAI+UKIw1Li4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vYXdzL2NsaWVudHMvczMvZmFrZV9jbGllbnQucHmUkGpCAwAAj5QojDIuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9hd3MvY2xpZW50cy9zMy9tZXNzYWdlcy5weZSQag0EAACPlCiMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2F3cy9zM2ZpbGVzeXN0ZW0ucHmUkGpMAwAAj5QojCcuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9maWxlc3lzdGVtaW8ucHmUjCMuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9hd3MvczNpby5weZSQarkDAACPlCiMKC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2NvbmNhdF9zb3VyY2UucHmUkGoBBAAAj5QojCwuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9leHRlcm5hbC9fX2luaXRfXy5weZSQakMDAACPlCiMMC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2V4dGVybmFsL2djcC9fX2luaXRfXy5weZSQahQEAACPlCiMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvZXh0ZXJuYWwucHmUjC4uLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9leHRlcm5hbC9nY3AvcHVic3ViLnB5lJBqogMAAI+UKIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9leHRlcm5hbC5weZSMNS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2V4dGVybmFsL2dlbmVyYXRlX3NlcXVlbmNlLnB5lJBq0QMAAI+UKIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9leHRlcm5hbC5weZSMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2V4dGVybmFsL2thZmthLnB5lJBq7wMAAI+UKIwoLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZWJhc2Vkc2luay5weZSQaokDAACPlCiMKi4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2ZpbGViYXNlZHNvdXJjZS5weZSQavwDAACPlCiMIS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2ZpbGVpby5weZSQaq8DAACPlCiMJS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2ZpbGVzeXN0ZW0ucHmUkGotAwAAj5QojCcuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9maWxlc3lzdGVtaW8ucHmUkGqBAwAAj5QojCYuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9maWxlc3lzdGVtcy5weZSQagsEAACPlCiMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2ZsaW5rL19faW5pdF9fLnB5lJBqYwMAAI+UKIwnLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9jb3JlLnB5lIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy93aW5kb3cucHmUjC0uLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3B0cmFuc2Zvcm0ucHmUjD8uLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9mbGluay9mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UucHmUkGqhAwAAj5QojCcuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvX19pbml0X18ucHmUkGqOAwAAj5QojC0uLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL3Rlc3RfcGlwZWxpbmUucHmUjEAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvYmlnX3F1ZXJ5X3F1ZXJ5X3RvX3RhYmxlX3BpcGVsaW5lLnB5lIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vb3B0aW9ucy9waXBlbGluZV9vcHRpb25zLnB5lJBqcwMAAI+UKIwnLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2JpZ3F1ZXJ5LnB5lJBqqQMAAI+UKIwyLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2JpZ3F1ZXJ5X2ZpbGVfbG9hZHMucHmUjCkuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3dpbmRvdy5weZSMMC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weZSQarIDAACPlCiMLS4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF9waXBlbGluZS5weZSMMC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weZSMOC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lLnB5lJBq4AMAAI+UKIwtLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2JpZ3F1ZXJ5X3Rvb2xzLnB5lIwnLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9jb3JlLnB5lIxPLi4vLi4vLnRveC9weTM3LWRvY3MvbGliL3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL2FwaXRvb2xzL2Jhc2UvcHkvZXhjZXB0aW9ucy5weZSMMC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weZSQahYEAACPlCiMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9iaWd0YWJsZWlvLnB5lJBqdgMAAI+UKIwxLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2RhdGFzdG9yZS9fX2luaXRfXy5weZSQat8DAACPlCiMNy4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjFuZXcvX19pbml0X18ucHmUkGpXAwAAj5QojEouLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvZGF0YXN0b3JlL3YxbmV3L2RhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZS5weZSMLS4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF9waXBlbGluZS5weZSMOi4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjFuZXcvZGF0YXN0b3JlaW8ucHmUjDQuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvZGF0YXN0b3JlL3YxbmV3L3R5cGVzLnB5lIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vb3B0aW9ucy9waXBlbGluZV9vcHRpb25zLnB5lJBqHQQAAI+UKIw6Li4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2RhdGFzdG9yZS92MW5ldy9kYXRhc3RvcmVpby5weZSQamIDAACPlCiMNS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjFuZXcvaGVscGVyLnB5lJBqpQMAAI+UKIw9Li4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2RhdGFzdG9yZS92MW5ldy9xdWVyeV9zcGxpdHRlci5weZSQargDAACPlCiMNC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9kYXRhc3RvcmUvdjFuZXcvdHlwZXMucHmUkGrqAwAAj5QojDQuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvZXhwZXJpbWVudGFsL19faW5pdF9fLnB5lJBqGAQAAI+UKIw1Li4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZ2NwL2V4cGVyaW1lbnRhbC9zcGFubmVyaW8ucHmUkGqEAwAAj5QojCwuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvZ2NzZmlsZXN5c3RlbS5weZSQapIDAACPlCiMJC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9nY3Npby5weZSQan4DAACPlCiMLi4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9nY3Npb19vdmVycmlkZXMucHmUjCYuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21ldHJpYy5weZSQav4DAACPlCiMJS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9wdWJzdWIucHmUkGpVAwAAj5QojDEuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvcHVic3ViX2l0X3BpcGVsaW5lLnB5lIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vb3B0aW9ucy9waXBlbGluZV9vcHRpb25zLnB5lJBqfQMAAI+UKIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vaGFkb29wZmlsZXN5c3RlbS5weZSQatUDAACPlCiMIS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2lvYmFzZS5weZSQaqoDAACPlCiMKi4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2xvY2FsZmlsZXN5c3RlbS5weZSQapMDAACPlCiMJC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL21vbmdvZGJpby5weZSQar0DAACPlCiMJC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3BhcnF1ZXRpby5weZSQahUEAACPlCiMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3JhbmdlX3RyYWNrZXJzLnB5lJBqxgMAAI+UKIwvLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vcmVzdHJpY3Rpb25fdHJhY2tlcnMucHmUjCkuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9yYW5nZV90cmFja2Vycy5weZSMIS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2lvYmFzZS5weZSQajYDAACPlCiMLC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3NvdXJjZV90ZXN0X3V0aWxzLnB5lJBq9AMAAI+UKIwhLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vdGV4dGlvLnB5lJBqBgQAAI+UKIwlLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vdGZyZWNvcmRpby5weZSQatADAACPlCiMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3JhbmdlX3RyYWNrZXJzLnB5lIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9tZXRyaWMucHmUjCAuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby91dGlscy5weZSQauUDAACPlCiMIC4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3ZjZmlvLnB5lJBqlQMAAI+UKIwhLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vaW9iYXNlLnB5lIwnLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9jb3JlLnB5lIwvLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vd2F0ZXJtYXJrX2VzdGltYXRvcnMucHmUjCcuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy90aW1lc3RhbXAucHmUkGocBAAAj5QojCguLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL19faW5pdF9fLnB5lIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9tZXRyaWMucHmUkGo3AwAAj5QojCUuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL2NlbGxzLnB5lJBqCQQAAI+UKIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9tZXRyaWMucHmUkGr/AwAAj5QojCouLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21ldHJpY2Jhc2UucHmUkGq1AwAAj5QojCUuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL2NlbGxzLnB5lIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9tb25pdG9yaW5nX2luZm9zLnB5lJBqigMAAI+UKIwjLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWwvX19pbml0X18ucHmUkGpaAwAAj5QojCcuLi8uLi8uLi9hcGFjaGVfYmVhbS9tbC9nY3AvX19pbml0X18ucHmUkGpOAwAAj5QojCguLi8uLi8uLi9hcGFjaGVfYmVhbS9tbC9nY3AvY2xvdWRfZGxwLnB5lJBqowMAAI+UKIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWwvZ2NwL25hdHVyYWxsYW5ndWFnZW1sLnB5lJBqgwMAAI+UKIwtLi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy90ZXN0X3BpcGVsaW5lLnB5lIw4Li4vLi4vLi4vYXBhY2hlX2JlYW0vbWwvZ2NwL25hdHVyYWxsYW5ndWFnZW1sX3Rlc3RfaXQucHmUjDAuLi8uLi8uLi9hcGFjaGVfYmVhbS9tbC9nY3AvbmF0dXJhbGxhbmd1YWdlbWwucHmUkGqcAwAAj5QojDIuLi8uLi8uLi9hcGFjaGVfYmVhbS9tbC9nY3AvdmlkZW9pbnRlbGxpZ2VuY2VtbC5weZSQaj8DAACPlCiMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL21sL2djcC92aXNpb25tbC5weZSQajUDAACPlCiMKC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvX19pbml0X18ucHmUkGpTAwAAj5QojDAuLi8uLi8uLi9hcGFjaGVfYmVhbS9vcHRpb25zL3BpcGVsaW5lX29wdGlvbnMucHmUkGpmAwAAj5QojDouLi8uLi8uLi9hcGFjaGVfYmVhbS9vcHRpb25zL3BpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLnB5lIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vb3B0aW9ucy9waXBlbGluZV9vcHRpb25zLnB5lJBqyQMAAI+UKIwuLi4vLi4vLi4vYXBhY2hlX2JlYW0vb3B0aW9ucy92YWx1ZV9wcm92aWRlci5weZSQajgDAACPlCiMIC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BpcGVsaW5lLnB5lJBqSAMAAI+UKIwsLi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvX19pbml0X18ucHmUkGqoAwAAj5QojDAuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvX19pbml0X18ucHmUkGrXAwAAj5QojEIuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMucHmUkGpAAwAAj5QojEIuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvYmVhbV9hcnRpZmFjdF9hcGlfcGIyX3VybnMucHmUjCkuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS91dGlscy5weZSQamcDAACPlCiMQy4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9iZWFtX2V4cGFuc2lvbl9hcGlfcGIyX2dycGMucHmUkGrCAwAAj5QojDwuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvYmVhbV9mbl9hcGlfcGIyX2dycGMucHmUkGqzAwAAj5QojEUuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvYmVhbV9pbnRlcmFjdGl2ZV9hcGlfcGIyX2dycGMucHmUkGrsAwAAj5QojD0uLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvYmVhbV9qb2JfYXBpX3BiMl9ncnBjLnB5lJBqBwQAAI+UKIxDLi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL2JlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYy5weZSQapADAACPlCiMQC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGMucHmUkGpsAwAAj5QojCkuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS91dGlscy5weZSMQC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMucHmUkGreAwAAj5QojDouLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvZW5kcG9pbnRzX3BiMl9ncnBjLnB5lJBqEgQAAI+UKIxELi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL2V4dGVybmFsX3RyYW5zZm9ybXNfcGIyX2dycGMucHmUkGr6AwAAj5QojDguLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvbWV0cmljc19wYjJfZ3JwYy5weZSQajADAACPlCiMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L3V0aWxzLnB5lIw4Li4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL21ldHJpY3NfcGIyX3VybnMucHmUkGqXAwAAj5QojDcuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvc2NoZW1hX3BiMl9ncnBjLnB5lJBqyAMAAI+UKIxELi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL3N0YW5kYXJkX3dpbmRvd19mbnNfcGIyX2dycGMucHmUkGoRBAAAj5QojCkuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS91dGlscy5weZSMRC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2FwaS9zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zLnB5lJBqaQMAAI+UKIxELi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL3N0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMucHmUjDguLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvbWV0cmljc19wYjJfdXJucy5weZSMLy4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L2NvbW1vbl91cm5zLnB5lIxALi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvYXBpL2JlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5weZSQavIDAACPlCiMLy4uLy4uLy4uL2FwYWNoZV9iZWFtL3BvcnRhYmlsaXR5L3B5dGhvbl91cm5zLnB5lJBq8wMAAI+UKIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vcG9ydGFiaWxpdHkvdXRpbHMucHmUjD4uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHl0aG9uMy43L3R5cGluZy5weZSQajQDAACPlCiMHi4uLy4uLy4uL2FwYWNoZV9iZWFtL3B2YWx1ZS5weZSQapgDAACPlCiMOC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvZGF0YWZsb3dfcnVubmVyLnB5lIw0Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvZGlyZWN0X3J1bm5lci5weZSMKC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvX19pbml0X18ucHmUjD0uLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L3Rlc3RfZGF0YWZsb3dfcnVubmVyLnB5lIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9ydW5uZXIucHmUjDkuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC90ZXN0X2RpcmVjdF9ydW5uZXIucHmUkGqnAwAAj5QojDguLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L2RhdGFmbG93X3J1bm5lci5weZSMMS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvX19pbml0X18ucHmUjD0uLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L3Rlc3RfZGF0YWZsb3dfcnVubmVyLnB5lJBqHgQAAI+UKIw2Li4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9tZXRyaWNfcmVzdWx0X21hdGNoZXJzLnB5lIxLLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy9kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5lLnB5lIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9tZXRyaWMucHmUkGp8AwAAj5QojCYuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21ldHJpYy5weZSMMC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weZSMVS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvZGF0YWZsb3dfZXhlcmNpc2Vfc3RyZWFtaW5nX21ldHJpY3NfcGlwZWxpbmUucHmUkGp5AwAAj5QojCUuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL2NlbGxzLnB5lIw5Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy9kYXRhZmxvd19tZXRyaWNzLnB5lIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9leGVjdXRpb24ucHmUjCYuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21ldHJpYy5weZSMKi4uLy4uLy4uL2FwYWNoZV9iZWFtL21ldHJpY3MvbWV0cmljYmFzZS5weZSMTC4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9weXRob24zLjcvY29sbGVjdGlvbnMvX19pbml0X18ucHmUjDAuLi8uLi8uLi9hcGFjaGVfYmVhbS9vcHRpb25zL3BpcGVsaW5lX29wdGlvbnMucHmUkGoOBAAAj5QojDguLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L2RhdGFmbG93X3J1bm5lci5weZSMPS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvcHRyYW5zZm9ybV9vdmVycmlkZXMucHmUkGpgAwAAj5QojDsuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RhdGFmbG93L25hdGl2ZV9pby9fX2luaXRfXy5weZSQauYDAACPlCiMOS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvbmF0aXZlX2lvL2lvYmFzZS5weZSMKi4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvZGlzcGxheS5weZSQamQDAACPlCiMIC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BpcGVsaW5lLnB5lIw9Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kYXRhZmxvdy9wdHJhbnNmb3JtX292ZXJyaWRlcy5weZSQagAEAACPlCiMPS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGF0YWZsb3cvdGVzdF9kYXRhZmxvd19ydW5uZXIucHmUkGoIBAAAj5QojDQuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9kaXJlY3RfcnVubmVyLnB5lIwvLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvX19pbml0X18ucHmUkGqaAwAAj5QojCwuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy93aW5kb3dlZF92YWx1ZS5weZSMNS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2J1bmRsZV9mYWN0b3J5LnB5lJBqUAMAAI+UKIwsLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvY2xvY2sucHmUkGrcAwAAj5QojEkuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yLnB5lIwgLi4vLi4vLi4vYXBhY2hlX2JlYW0vcGlwZWxpbmUucHmUkGoyAwAAj5QojCUuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL2NlbGxzLnB5lIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9leGVjdXRpb24ucHmUjCYuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21ldHJpYy5weZSMTC4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9weXRob24zLjcvY29sbGVjdGlvbnMvX19pbml0X18ucHmUjDUuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9kaXJlY3RfbWV0cmljcy5weZSQavcDAACPlCiMNC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2RpcmVjdF9ydW5uZXIucHmUkGq3AwAAj5QojDcuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9kaXJlY3RfdXNlcnN0YXRlLnB5lJBq9gMAAI+UKIwqLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy90cmlnZ2VyLnB5lIw4Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3Qvd2F0ZXJtYXJrX21hbmFnZXIucHmUjDkuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9ldmFsdWF0aW9uX2NvbnRleHQucHmUjC8uLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9leGVjdXRvci5weZSMNS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2RpcmVjdF9tZXRyaWNzLnB5lJBqjAMAAI+UKIw/Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3B5dGhvbjMuNy93ZWFrcmVmLnB5lIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vbWV0cmljcy9leGVjdXRpb24ucHmUjC8uLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9leGVjdXRvci5weZSQal0DAACPlCiMLC4uLy4uLy4uL2FwYWNoZV9iZWFtL3V0aWxzL3dpbmRvd2VkX3ZhbHVlLnB5lIwlLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW50ZXJuYWwvdXRpbC5weZSMOC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2hlbHBlcl90cmFuc2Zvcm1zLnB5lJBqSgMAAI+UKIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9zZGZfdXRpbHMucHmUjEEuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHl0aG9uMy43L3RocmVhZGluZy5weZSMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3V0aWwucHmUjDguLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC93YXRlcm1hcmtfbWFuYWdlci5weZSMJi4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvY29tbW9uLnB5lIwsLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvd2luZG93ZWRfdmFsdWUucHmUjCcuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2NvcmUucHmUjDguLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC9zZGZfZGlyZWN0X3J1bm5lci5weZSMOS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L2V2YWx1YXRpb25fY29udGV4dC5weZSMIC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BpcGVsaW5lLnB5lIwhLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vaW9iYXNlLnB5lIwtLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9wdHJhbnNmb3JtLnB5lIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy90aW1ldXRpbC5weZSQah8EAACPlCiMOS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3Rlc3RfZGlyZWN0X3J1bm5lci5weZSQajsDAACPlCiMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvY29yZS5weZSMLS4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvcHRyYW5zZm9ybS5weZSMNy4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3Rlc3Rfc3RyZWFtX2ltcGwucHmUjCsuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL3Rlc3Rfc3RyZWFtLnB5lJBq5AMAAI+UKIwqLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy90cmlnZ2VyLnB5lIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvdXRpbC5weZSMOC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3dhdGVybWFya19tYW5hZ2VyLnB5lIw3Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvZGlyZWN0X3VzZXJzdGF0ZS5weZSMJi4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvY29tbW9uLnB5lIwsLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvd2luZG93ZWRfdmFsdWUucHmUjCkuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3dpbmRvdy5weZSMOC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3NkZl9kaXJlY3RfcnVubmVyLnB5lIwnLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvdGltZXN0YW1wLnB5lIw6Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvdHJhbnNmb3JtX2V2YWx1YXRvci5weZSMLC4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy9kZWNvcmF0b3JzLnB5lIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy90aW1ldXRpbC5weZSMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF9zdHJlYW0ucHmUkGrhAwAAj5QojCsuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2RpcmVjdC91dGlsLnB5lJBqiwMAAI+UKIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9kaXJlY3QvdXRpbC5weZSMOC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvZGlyZWN0L3dhdGVybWFya19tYW5hZ2VyLnB5lJBqVAMAAI+UKIw0Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9fX2luaXRfXy5weZSQauIDAACPlCiMJi4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvcnVubmVyLnB5lIxCLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9iYWNrZ3JvdW5kX2NhY2hpbmdfam9iLnB5lJBqxAMAAI+UKIw5Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9jYWNoZV9tYW5hZ2VyLnB5lJBqDwQAAI+UKIxDLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9jYWNoaW5nL3N0cmVhbWluZ19jYWNoZS5weZSMPC4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvaW50ZXJhY3RpdmUvY2FjaGluZy9fX2luaXRfXy5weZSQasUDAACPlCiMQy4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvaW50ZXJhY3RpdmUvY2FjaGluZy9zdHJlYW1pbmdfY2FjaGUucHmUkGp3AwAAj5QojDwuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVyYWN0aXZlL2Rpc3BsYXkvX19pbml0X18ucHmUkGpHAwAAj5QojEMuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVyYWN0aXZlL2Rpc3BsYXkvZGlzcGxheV9tYW5hZ2VyLnB5lJBqhwMAAI+UKIxOLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9kaXNwbGF5L2ludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoLnB5lJBqWwMAAI+UKIxALi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3B5dGhvbjMuNy9kYXRldGltZS5weZSMQC4uLy4uLy50b3gvcHkzNy1kb2NzL2xpYi9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy90aW1lbG9vcC9hcHAucHmUjEcuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVyYWN0aXZlL2Rpc3BsYXkvcGNvbGxfdmlzdWFsaXphdGlvbi5weZSMaC4uLy4uLy50b3gvcHkzNy1kb2NzL2xpYi9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9mYWNldHNfb3ZlcnZpZXcvZ2VuZXJpY19mZWF0dXJlX3N0YXRpc3RpY3NfZ2VuZXJhdG9yLnB5lIxILi4vLi4vLnRveC9weTM3LWRvY3MvbGliL3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL0lQeXRob24vY29yZS9kaXNwbGF5LnB5lJBqcgMAAI+UKIxCLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9kaXNwbGF5L3BpcGVsaW5lX2dyYXBoLnB5lJBqLwMAAI+UKIxLLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9kaXNwbGF5L3BpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLnB5lIwkLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvcGx1Z2luLnB5lJBqIAQAAI+UKIw8Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9pbnRlcmFjdGl2ZV9iZWFtLnB5lJBqRQMAAI+UKIxDLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5weZSQapkDAACPlCiMMC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weZSMPi4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvaW50ZXJhY3RpdmUvaW50ZXJhY3RpdmVfcnVubmVyLnB5lJBq0wMAAI+UKIw8Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9vcHRpb25zL19faW5pdF9fLnB5lJBqMQMAAI+UKIxDLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9vcHRpb25zL2NhcHR1cmVfY29udHJvbC5weZSMQC4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9weXRob24zLjcvZGF0ZXRpbWUucHmUjCUuLi8uLi8uLi9hcGFjaGVfYmVhbS9pby9nY3AvcHVic3ViLnB5lJBqGQQAAI+UKIxHLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9vcHRpb25zL2ludGVyYWN0aXZlX29wdGlvbnMucHmUkGrDAwAAj5QojD0uLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVyYWN0aXZlL3BpcGVsaW5lX2FuYWx5emVyLnB5lJBqygMAAI+UKIw9Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS9waXBlbGluZV9mcmFnbWVudC5weZSMIC4uLy4uLy4uL2FwYWNoZV9iZWFtL3BpcGVsaW5lLnB5lJBqPQMAAI+UKIwgLi4vLi4vLi4vYXBhY2hlX2JlYW0vcGlwZWxpbmUucHmUjD8uLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVyYWN0aXZlL3BpcGVsaW5lX2luc3RydW1lbnQucHmUkGpEAwAAj5QojDwuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVyYWN0aXZlL3Rlc3RpbmcvX19pbml0X18ucHmUkGquAwAAj5QojEAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVyYWN0aXZlL3Rlc3RpbmcvbW9ja19pcHl0aG9uLnB5lJBq/QMAAI+UKIxGLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9pbnRlcmFjdGl2ZS90ZXN0aW5nL3BpcGVsaW5lX2Fzc2VydGlvbi5weZSQagwEAACPlCiMMS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvaW50ZXJuYWwvX19pbml0X18ucHmUkGoXBAAAj5QojC4uLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2ludGVybmFsL25hbWVzLnB5lJBqtAMAAI+UKIwsLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9qb2IvX19pbml0X18ucHmUkGpJAwAAj5QojCsuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL2pvYi9tYW5hZ2VyLnB5lJBqnwMAAI+UKIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy9qb2IvdXRpbHMucHmUkGpwAwAAj5QojDAuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL3BpcGVsaW5lX2NvbnRleHQucHmUkGo6AwAAj5QojCYuLi8uLi8uLi9hcGFjaGVfYmVhbS9ydW5uZXJzL3J1bm5lci5weZSQalkDAACPlCiMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvc2RmX3V0aWxzLnB5lIwsLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvd2luZG93ZWRfdmFsdWUucHmUjCcuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2NvcmUucHmUjCcuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy90aW1lc3RhbXAucHmUjD4uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHl0aG9uMy43L3R5cGluZy5weZSQaoADAACPlCiMKC4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvX19pbml0X18ucHmUkGrSAwAAj5QojDMuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2JlbmNobWFya3MvX19pbml0X18ucHmUkGpxAwAAj5QojDsuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2JlbmNobWFya3MvbmV4bWFyay9fX2luaXRfXy5weZSQanUDAACPlCiMQi4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL21vZGVscy9fX2luaXRfXy5weZSQaiEEAACPlCiMRy4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL21vZGVscy9uZXhtYXJrX21vZGVsLnB5lJBqSwMAAI+UKIxDLi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9iZW5jaG1hcmtzL25leG1hcmsvbmV4bWFya19sYXVuY2hlci5weZSMPy4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL25leG1hcmtfdXRpbC5weZSMMC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weZSQaoYDAACPlCiMPy4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL25leG1hcmtfdXRpbC5weZSQalIDAACPlCiMQy4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL3F1ZXJpZXMvX19pbml0X18ucHmUkGobBAAAj5QojD8uLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2JlbmNobWFya3MvbmV4bWFyay9uZXhtYXJrX3V0aWwucHmUjEEuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2JlbmNobWFya3MvbmV4bWFyay9xdWVyaWVzL3F1ZXJ5MC5weZSQapYDAACPlCiMPy4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL25leG1hcmtfdXRpbC5weZSMQS4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvYmVuY2htYXJrcy9uZXhtYXJrL3F1ZXJpZXMvcXVlcnkxLnB5lJBqegMAAI+UKIw/Li4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9iZW5jaG1hcmtzL25leG1hcmsvbmV4bWFya191dGlsLnB5lIxBLi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9iZW5jaG1hcmtzL25leG1hcmsvcXVlcmllcy9xdWVyeTIucHmUkGr1AwAAj5QojEwuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHl0aG9uMy43L2NvbGxlY3Rpb25zL19faW5pdF9fLnB5lIwyLi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9kYXRhdHlwZV9pbmZlcmVuY2UucHmUkGrZAwAAj5QojDAuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2V4dHJhX2Fzc2VydGlvbnMucHmUkGozAwAAj5QojDMuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2xvYWRfdGVzdHMvX19pbml0X18ucHmUkGqRAwAAj5QojEIuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2xvYWRfdGVzdHMvbG9hZF90ZXN0X21ldHJpY3NfdXRpbHMucHmUjE4uLi8uLi8udG94L3B5MzctZG9jcy9saWIvcHl0aG9uMy43L3NpdGUtcGFja2FnZXMvZ29vZ2xlL2FwaV9jb3JlL2V4Y2VwdGlvbnMucHmUjCYuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL21ldHJpYy5weZSMUC4uLy4uLy50b3gvcHkzNy1kb2NzL2xpYi9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9nb29nbGUvY2xvdWQvYmlncXVlcnkvc2NoZW1hLnB5lJBqXgMAAI+UKIw9Li4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9sb2FkX3Rlc3RzL3N0cmVhbWluZy9fX2luaXRfXy5weZSQalwDAACPlCiMQi4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvbG9hZF90ZXN0cy9sb2FkX3Rlc3RfbWV0cmljc191dGlscy5weZSMJS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2djcC9wdWJzdWIucHmUjDAuLi8uLi8uLi9hcGFjaGVfYmVhbS9vcHRpb25zL3BpcGVsaW5lX29wdGlvbnMucHmUjFQuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL2xvYWRfdGVzdHMvc3RyZWFtaW5nL2dyb3VwX2J5X2tleV9zdHJlYW1pbmdfcGlwZWxpbmUucHmUkGq/AwAAj5QojCUuLi8uLi8uLi9hcGFjaGVfYmVhbS9tZXRyaWNzL2NlbGxzLnB5lIxOLi4vLi4vLnRveC9weTM3LWRvY3MvbGliL3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL2hhbWNyZXN0L2NvcmUvYmFzZV9tYXRjaGVyLnB5lIw2Li4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy9tZXRyaWNfcmVzdWx0X21hdGNoZXJzLnB5lIxJLi4vLi4vLnRveC9weTM3LWRvY3MvbGliL3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL2hhbWNyZXN0L2NvcmUvbWF0Y2hlci5weZSQal8DAACPlCiMMi4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvcGlwZWxpbmVfdmVyaWZpZXJzLnB5lJBqzQMAAI+UKIwvLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vcmVzdHJpY3Rpb25fdHJhY2tlcnMucHmUjCcuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2NvcmUucHmUjDIuLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL3N5bnRoZXRpY19waXBlbGluZS5weZSMLS4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF9waXBlbGluZS5weZSMIS4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL3RleHRpby5weZSMMC4uLy4uLy4uL2FwYWNoZV9iZWFtL29wdGlvbnMvcGlwZWxpbmVfb3B0aW9ucy5weZSQamgDAACPlCiMLS4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF9waXBlbGluZS5weZSQarADAACPlCiMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rlc3RpbmcvdGVzdF9zdHJlYW0ucHmUkGouAwAAj5QojEAuLi8uLi8uLi9hcGFjaGVfYmVhbS9wb3J0YWJpbGl0eS9hcGkvYmVhbV9ydW5uZXJfYXBpX3BiMl9ncnBjLnB5lIwzLi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy90ZXN0X3N0cmVhbV9zZXJ2aWNlLnB5lIxRLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3B5dGhvbjMuNy9jb25jdXJyZW50L2Z1dHVyZXMvdGhyZWFkLnB5lJBqWAMAAI+UKIwqLi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy90ZXN0X3V0aWxzLnB5lIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZXN5c3RlbXMucHmUjD0uLi8uLi8udG94L3B5MzctZG9jcy9saWIvcHl0aG9uMy43L3NpdGUtcGFja2FnZXMvbW9jay9tb2NrLnB5lJBquwMAAI+UKIwkLi4vLi4vLi4vYXBhY2hlX2JlYW0vdGVzdGluZy91dGlsLnB5lJBq6QMAAI+UKIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vdG9vbHMvX19pbml0X18ucHmUkGqxAwAAj5QojDMuLi8uLi8uLi9hcGFjaGVfYmVhbS90b29scy9jb2RlcnNfbWljcm9iZW5jaG1hcmsucHmUkGrwAwAAj5QojEEuLi8uLi8uLi9hcGFjaGVfYmVhbS90b29scy9kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFyay5weZSQansDAACPlCiMOS4uLy4uLy4uL2FwYWNoZV9iZWFtL3J1bm5lcnMvcG9ydGFiaWxpdHkvZm5fYXBpX3J1bm5lci5weZSMJS4uLy4uLy4uL2FwYWNoZV9iZWFtL2NvZGVycy9jb2RlcnMucHmUjCwuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3VzZXJzdGF0ZS5weZSMOi4uLy4uLy4uL2FwYWNoZV9iZWFtL3Rvb2xzL2ZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmsucHmUjCsuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3RpbWV1dGlsLnB5lJBqhQMAAI+UKIw2Li4vLi4vLi4vYXBhY2hlX2JlYW0vdG9vbHMvc2lkZWlucHV0X21pY3JvYmVuY2htYXJrLnB5lIw2Li4vLi4vLi4vYXBhY2hlX2JlYW0vcnVubmVycy93b3JrZXIvc2lkZWlucHV0c190ZXN0LnB5lIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvY291bnRlcnMucHmUkGr7AwAAj5QojCMuLi8uLi8uLi9hcGFjaGVfYmVhbS90b29scy91dGlscy5weZSQap4DAACPlCiMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvY29yZS5weZSMQy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvcHlfZGF0YWZsb3dfZGlzdHJpYnV0aW9uX2NvdW50ZXIucHmUjCguLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3N0YXRzLnB5lIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9fX2luaXRfXy5weZSMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvZXh0ZXJuYWwucHmUjCsuLi8uLi8uLi9hcGFjaGVfYmVhbS90eXBlaGludHMvdHlwZWhpbnRzLnB5lIwnLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy91dGlsLnB5lIwtLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9wdHJhbnNmb3JtLnB5lIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy90aW1ldXRpbC5weZSQas4DAACPlCiMLC4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvY29tYmluZXJzLnB5lJBq8QMAAI+UKIwnLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9jb3JlLnB5lJBqCgQAAI+UKIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9jcmVhdGVfc291cmNlLnB5lIwnLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9jb3JlLnB5lJBqBAQAAI+UKIwqLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9kaXNwbGF5LnB5lJBqTQMAAI+UKIwvLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9lbnZpcm9ubWVudHMucHmUkGoQBAAAj5QojCsuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2V4dGVybmFsLnB5lIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3R5cGVoaW50cy5weZSQau4DAACPlCiMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvZXh0ZXJuYWwucHmUjC0uLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL3Rlc3RfcGlwZWxpbmUucHmUjDAuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2V4dGVybmFsX2phdmEucHmUjDAuLi8uLi8uLi9hcGFjaGVfYmVhbS9vcHRpb25zL3BpcGVsaW5lX29wdGlvbnMucHmUkGroAwAAj5QojCsuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2V4dGVybmFsLnB5lIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9leHRlcm5hbF90ZXN0LnB5lIw0Li4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9leHRlcm5hbF90ZXN0X3B5My5weZSQar4DAACPlCiMNS4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvZXh0ZXJuYWxfdGVzdF9weTM3LnB5lIwwLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9leHRlcm5hbF90ZXN0LnB5lJBqzwMAAI+UKIwtLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9wdHJhbnNmb3JtLnB5lJBq6wMAAI+UKIwtLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9zaWRlaW5wdXRzLnB5lJBqqwMAAI+UKIwoLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9zdGF0cy5weZSQamUDAACPlCiMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvdGltZXV0aWwucHmUkGraAwAAj5QojC0uLi8uLi8uLi9hcGFjaGVfYmVhbS90ZXN0aW5nL3Rlc3RfcGlwZWxpbmUucHmUjEguLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3RyYW5zZm9ybXNfa2V5d29yZF9vbmx5X2FyZ3NfdGVzdF9weTMucHmUkGoFBAAAj5QojCouLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3RyaWdnZXIucHmUkGr4AwAAj5QojCUuLi8uLi8uLi9hcGFjaGVfYmVhbS9jb2RlcnMvY29kZXJzLnB5lIw+Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3B5dGhvbjMuNy90eXBpbmcucHmUjCwuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3VzZXJzdGF0ZS5weZSMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvdGltZXV0aWwucHmUkGo5AwAAj5QojCcuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3V0aWwucHmUkGphAwAAj5QojCkuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3dpbmRvdy5weZSQasEDAACPlCiMKi4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy9fX2luaXRfXy5weZSMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy90eXBlaGludHMucHmUjCwuLi8uLi8uLi9hcGFjaGVfYmVhbS90eXBlaGludHMvZGVjb3JhdG9ycy5weZSQatsDAACPlCiMLC4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy9kZWNvcmF0b3JzLnB5lJBqlAMAAI+UKIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3R5cGVoaW50cy5weZSMNS4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy9kZWNvcmF0b3JzX3Rlc3RfcHkzLnB5lIwsLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL2RlY29yYXRvcnMucHmUkGqNAwAAj5QojDsuLi8uLi8uLi9hcGFjaGVfYmVhbS90eXBlaGludHMvbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5weZSQaucDAACPlCiMMy4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy90cml2aWFsX2luZmVyZW5jZS5weZSMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy9vcGNvZGVzLnB5lJBqbwMAAI+UKIwpLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3NjaGVtYXMucHmUjD4uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHl0aG9uMy43L3R5cGluZy5weZSQaq0DAACPlCiMMy4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy90cml2aWFsX2luZmVyZW5jZS5weZSQatYDAACPlCiMPC4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy90cml2aWFsX2luZmVyZW5jZV90ZXN0X3B5My5weZSQakEDAACPlCiMHi4uLy4uLy4uL2FwYWNoZV9iZWFtL3B2YWx1ZS5weZSMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy90eXBlY2hlY2sucHmUjCwuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy93aW5kb3dlZF92YWx1ZS5weZSMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvY29yZS5weZSMLC4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy9kZWNvcmF0b3JzLnB5lIwrLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHlwZWhpbnRzL3R5cGVoaW50cy5weZSQam4DAACPlCiMOS4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy90eXBlZF9waXBlbGluZV90ZXN0X3B5My5weZSQassDAACPlCiMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3R5cGVoaW50cy90eXBlaGludHMucHmUkGqCAwAAj5QojCcuLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL2NvcmUucHmUjDQuLi8uLi8uLi9hcGFjaGVfYmVhbS90eXBlaGludHMvdHlwZWhpbnRzX3Rlc3RfcHkzLnB5lJBqjwMAAI+UKIwmLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvX19pbml0X18ucHmUkGrHAwAAj5QojEEuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHl0aG9uMy43L2Z1bmN0b29scy5weZSMKS4uLy4uLy4uL2FwYWNoZV9iZWFtL3V0aWxzL2Fubm90YXRpb25zLnB5lJBq3QMAAI+UKIwvLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvaW50ZXJhY3RpdmVfdXRpbHMucHmUkGqIAwAAj5QojCQuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wbHVnaW4ucHmUkGp4AwAAj5QojEIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHl0aG9uMy43L3N1YnByb2Nlc3MucHmUjCcuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wcm9jZXNzZXMucHmUkGpqAwAAj5QojCYuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wcm9maWxlci5weZSMQS4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9weXRob24zLjcvdGhyZWFkaW5nLnB5lJBqvAMAAI+UKIw+Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3B5dGhvbjMuNy90eXBpbmcucHmUjCkuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9wcm90b191dGlscy5weZSQanQDAACPlCiMMi4uLy4uLy4uL2FwYWNoZV9iZWFtL2lvL2F3cy9jbGllbnRzL3MzL21lc3NhZ2VzLnB5lIwlLi4vLi4vLi4vYXBhY2hlX2JlYW0vaW8vZmlsZXN5c3RlbS5weZSMTy4uLy4uLy50b3gvcHkzNy1kb2NzL2xpYi9weXRob24zLjcvc2l0ZS1wYWNrYWdlcy9hcGl0b29scy9iYXNlL3B5L2V4Y2VwdGlvbnMucHmUjCMuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy9yZXRyeS5weZSQan8DAACPlCiMLy4uLy4uLy4uL2FwYWNoZV9iZWFtL3V0aWxzL3N1YnByb2Nlc3Nfc2VydmVyLnB5lIxELi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3B5dGhvbjMuNy91cmxsaWIvZXJyb3IucHmUkGqmAwAAj5QojDIuLi8uLi8uLi9hcGFjaGVfYmVhbS91dGlscy90aHJlYWRfcG9vbF9leGVjdXRvci5weZSQaqwDAACPlCiMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL3V0aWxzL3RpbWVzdGFtcC5weZSQap0DAACPlCiMPi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9weXRob24zLjcvdHlwaW5nLnB5lIwiLi4vLi4vLi4vYXBhY2hlX2JlYW0vdXRpbHMvdXJucy5weZSQalYDAACPlCiMHy4uLy4uLy4uL2FwYWNoZV9iZWFtL3ZlcnNpb24ucHmUkGqgAwAAj5QojCsuLi8uLi8uLi9hcGFjaGVfYmVhbS90eXBlaGludHMvdHlwZWhpbnRzLnB5lIwgLi4vLi4vLi4vYXBhY2hlX2JlYW0vX19pbml0X18ucHmUjCguLi8uLi8uLi9hcGFjaGVfYmVhbS90cmFuc2Zvcm1zL3N0YXRzLnB5lIxDLi4vLi4vLi4vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy9weV9kYXRhZmxvd19kaXN0cmlidXRpb25fY291bnRlci5weZSMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvY29yZS5weZSMD2FwYWNoZV9iZWFtLnJzdJSMKy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvZXh0ZXJuYWwucHmUjCAuLi8uLi8uLi9hcGFjaGVfYmVhbS9waXBlbGluZS5weZSMJy4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvdXRpbC5weZSMLS4uLy4uLy4uL2FwYWNoZV9iZWFtL3RyYW5zZm9ybXMvcHRy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jD5hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjIG1vZHVsZZSFlIGUfZQoavkHAACMQ2FwYWNoZVxfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbVxfZXhwYW5zaW9uXF9hcGlcX3BiMlxfZ3JwYyBtb2R1bGWUagMIAABqJw0AAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABq9QcAAHViasIDAABq9gcAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMN2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYyBtb2R1bGWUhZSBlH2UKGr5BwAAjDxhcGFjaGVcX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1cX2ZuXF9hcGlcX3BiMlxfZ3JwYyBtb2R1bGWUagMIAABqNQ0AAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABq9QcAAHViarMDAABq9gcAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMQGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ludGVyYWN0aXZlX2FwaV9wYjJfZ3JwYyBtb2R1bGWUhZSBlH2UKGr5BwAAjEVhcGFjaGVcX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1cX2ludGVyYWN0aXZlXF9hcGlcX3BiMlxfZ3JwYyBtb2R1bGWUagMIAABqQw0AAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABq9QcAAHViauwDAABq9gcAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMOGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMgbW9kdWxllIWUgZR9lChq+QcAAIw9YXBhY2hlXF9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtXF9qb2JcX2FwaVxfcGIyXF9ncnBjIG1vZHVsZZRqAwgAAGpRDQAAdWJhagQIAAB9lChq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ahAIAABq9QcAAHViah4EAABq9gcAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMRmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2VfbWV0cmljc19waXBlbGluZSBtb2R1bGWUhZSBlH2UKGr5BwAAjEphcGFjaGVcX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd1xfZXhlcmNpc2VcX21ldHJpY3NcX3BpcGVsaW5lIG1vZHVsZZRqAwgAAGo/DgAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGr1BwAAdWJqfAMAAGr2BwAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIxQYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9zdHJlYW1pbmdfbWV0cmljc19waXBlbGluZSBtb2R1bGWUhZSBlH2UKGr5BwAAjFVhcGFjaGVcX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd1xfZXhlcmNpc2VcX3N0cmVhbWluZ1xfbWV0cmljc1xfcGlwZWxpbmUgbW9kdWxllGoDCAAAak0OAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAavUHAAB1Ymp5AwAAavYHAAApgZR9lChq+QcAAGg9avoHAABdlGr9BwAAjDRhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MgbW9kdWxllIWUgZR9lChq+QcAAIw2YXBhY2hlXF9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dcX21ldHJpY3MgbW9kdWxllGoDCAAAalsOAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAavUHAAB1YmoOBAAAavYHAAApgZR9lChq+QcAAGg9avoHAABdlGr9BwAAjDNhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lciBtb2R1bGWUhZSBlH2UKGr5BwAAjDVhcGFj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YXBhY2hlXF9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZVxfcGlwZWxpbmVcX2dyYXBoIG1vZHVsZZRqAwgAAGrxDwAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGr1BwAAdWJqWwMAAGr2BwAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIxCYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBjb2xsX3Zpc3VhbGl6YXRpb24gbW9kdWxllIWUgZR9lChq+QcAAIxEYXBhY2hlXF9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5wY29sbFxfdmlzdWFsaXphdGlvbiBtb2R1bGWUagMIAABq/w8AAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABq9QcAAHVianIDAABq9gcAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMPWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaCBtb2R1bGWUhZSBlH2UKGr5BwAAjD9hcGFjaGVcX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lXF9ncmFwaCBtb2R1bGWUagMIAABqDRAAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABq9QcAAHViai8DAABq9gcAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMRmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlciBtb2R1bGWUhZSBlH2UKGr5BwAAjElhcGFjaGVcX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lXF9ncmFwaFxfcmVuZGVyZXIgbW9kdWxllGoDCAAAahsQAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAavUHAAB1YmogBAAAavYHAAApgZR9lChq+QcAAGg9avoHAABdlGr9BwAAjDdhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2JlYW0gbW9kdWxllIWUgZR9lChq+QcAAIw5YXBhY2hlXF9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVcX2JlYW0gbW9kdWxllGoDCAAAaikQAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAavUHAAB1YmpFAwAAavYHAAApgZR9lChq+QcAAGg9avoHAABdlGr9BwAAjD5hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50IG1vZHVsZZSFlIGUfZQoavkHAACMQGFwYWNoZVxfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlXF9lbnZpcm9ubWVudCBtb2R1bGWUagMIAABqNxAAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABq9QcAAHViapkDAABq9gcAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMOWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyIG1vZHVsZZSFlIGUfZQoavkHAACMO2FwYWNoZVxfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlXF9ydW5uZXIgbW9kdWxllGoDCAAAakUQAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAavUHAAB1YmrTAwAAavYHAAApgZR9lChq+QcAAGg9avoHAABdlGr9BwAAjC9hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLm9wdGlvbnMgcGFja2FnZZSFlIGUfZQoavkHAACMMGFwYWNoZVxfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLm9wdGlvbnMgcGFja2FnZZRqAwgAAGpTEAAAdWJhagQIAAB9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avwDAABq0QkAAGqvAwAAat8JAABqLQMAAGrtCQAAaoEDAABq+wkAAGoLBAAAagkKAABqYwMAAGoXCgAAaqEDAABqJQoAAGqOAwAAajMKAABqcwMAAGpBCgAAaqkDAABqTwoAAGqyAwAAal0KAABq4AMAAGprCgAAahYEAABqeQoAAGp2AwAAaocKAABq3wMAAGqVCgAAalcDAABqowoAAGodBAAAarEKAABqYgMAAGq/CgAAaqUDAABqzQoAAGq4AwAAatsKAABq6gMAAGrpCgAAahgEAABq9woAAGqEAwAAagULAABqkgMAAGoTCwAAan4DAABqIQsAAGr+AwAAai8LAABqVQMAAGo9CwAAan0DAABqSwsAAGrVAwAAalkLAABqqgMAAGpnCwAAapMDAABqdQsAAGq9AwAAaoMLAABqFQQAAGqRCwAAasYDAABqnwsAAGo2AwAAaq0LAABq9AMAAGq7CwAAagYEAABqyQsAAGrQAwAAatcLAABq5QMAAGrlCwAAapUDAABq8wsAAGocBAAAagEMAABqNwMAAGoPDAAAagkEAABqHQwAAGr/AwAAaisMAABqtQMAAGo5DAAAaooDAABqRwwAAGpaAwAAalUMAABqTgMAAGpjDAAAaqMDAABqcQwAAGqDAwAAan8MAABqnAMAAGqNDAAAaj8DAABqmwwAAGo1AwAAaqkMAABqUwMAAGq3DAAAamYDAABqxQwAAGrJAwAAatMMAABqOAMAAGrhDAAAakgDAABq7wwAAGqoAwAAav0MAABq1wMAAGoLDQAAakADAABqGQ0AAGpnAwAAaicNAABqwgMAAGo1DQAAarMDAABqQw0AAGrsAwAAalENAABqBwQAAGpfDQAAapADAABqbQ0AAGpsAwAAansNAABq3gMAAGqJDQAAahIEAABqlw0AAGr6AwAAaqUNAABqMAMAAGqzDQAAapcDAABqwQ0AAGrIAwAAas8NAABqEQQAAGrdDQAAamkDAABq6w0AAGryAwAAavkNAABq8wMAAGoHDgAAajQDAABqFQ4AAGqYAwAAaiMOAABqpwMAAGoxDgAAah4EAABqPw4AAGp8AwAAak0OAABqeQMAAGpbDgAAag4EAABqaQ4AAGpgAwAAancOAABq5gMAAGqFDgAAamQDAABqkw4AAGoABAAAaqEOAABqCAQAAGqvDgAAapoDAABqvQ4AAGpQAwAAassOAABq3AMAAGrZDgAAajIDAABq5w4AAGr3AwAAavUOAABqtwMAAGoDDwAAavYDAABqEQ8AAGqMAwAAah8PAABqXQMAAGotDwAAakoDAABqOw8AAGofBAAAakkPAABqOwMAAGpXDwAAauQDAABqZQ8AAGrhAwAAanMPAABqiwMAAGqBDwAAalQDAABqjw8AAGriAwAAap0PAABqxAMAAGqrDwAAag8EAABquQ8AAGrFAwAAascPAABqdwMAAGrVDwAAakcDAABq4w8AAGqHAwAAavEPAABqWwMAAGr/DwAAanIDAABqDRAAAGovAwAAahsQAABqIAQAAGopEAAAakUDAABqNxAAAGqZAwAAakUQAABq0wMAAGpTEAAAajEDAABqYRAAAGoZBAAAam8QAABqwwMAAGp9EAAAasoDAABqixAAAGo9AwAAapkQAABqRAMAAGqnEAAAaq4DAABqtRAAAGr9AwAAasMQAABqDAQAAGrREAAAahcEAABq3xAAAGq0AwAAau0QAABqSQMAAGr7EAAAap8DAABqCREAAGpwAwAAahcRAABqOgMAAGolEQAAalkDAABqMxEAAGqAAwAAakERAABq0gMAAGpPEQAAanEDAABqXREAAGp1AwAAamsRAABqIQQAAGp5EQAAaksDAABqhxEAAGqGAwAAapURAABqUgMAAGqjEQAAahsEAABqsREAAGqWAwAAar8RAABqegMAAGrNEQAAavUDAABq2xEAAGrZAwAAaukRAABqMwMAAGr3EQAAapEDAABqBRIAAGpeAwAAahMSAABqXAMAAGohEgAAar8DAABqLxIAAGpfAwAAaj0SAABqzQMAAGpLEgAAamgDAABqWRIAAGqwAwAAamcSAABqLgMAAGp1EgAAalgDAABqgxIAAGq7AwAAapESAABq6QMAAGqfEgAAarEDAABqrRIAAGrwAwAAarsSAABqewMAAGrJEgAAaoUDAABq1xIAAGr7AwAAauUSAABqngMAAGrzEgAAas4DAABqARMAAGrxAwAAag8TAABqCgQAAGodEwAAagQEAABqKxMAAGpNAwAAajkTAABqEAQAAGpHEwAAau4DAABqVRMAAGroAwAAamMTAABqvgMAAGpxEwAAas8DAABqfxMAAGrrAwAAao0TAABqqwMAAGqbEwAA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ZXN5c3RlbWlvlIaUTowaYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXOUhpROjB9hcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtlIaUTowVYXBhY2hlX2JlYW0uaW8uaW9iYXNllIaUToweYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtlIaUTowYYXBhY2hlX2JlYW0uaW8ubW9uZ29kYmlvlIaUTowYYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvlIaUTowdYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnOUhpROjCNhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vyc5SGlE6MIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzlIaUTowVYXBhY2hlX2JlYW0uaW8udGV4dGlvlIaUTowZYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpb5SGlE6MFGFwYWNoZV9iZWFtLmlvLnV0aWxzlIaUTowUYXBhY2hlX2JlYW0uaW8udmNmaW+UhpROjCNhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9yc5SGlGWMDGluY2x1ZGVmaWxlc5RdlChq1xkAAGrZGQAAatsZAABq3RkAAGrfGQAAauEZAABq4xkAAGrlGQAAaucZAABq6RkAAGrrGQAAau0ZAABq7xkAAGrxGQAAavMZAABq9RkAAGr3GQAAavkZAABq+xkAAGr9GQAAav8ZAABljAhtYXhkZXB0aJRK/////4wHY2FwdGlvbpROjARnbG9ilImMBmhpZGRlbpSJjA1pbmNsdWRlaGlkZGVulImMCG51bWJlcmVklEsAjAp0aXRsZXNvbmx5lIl1ahAIAABquRUAAGrcFQAAap0ZAABq3hUAAEsWagMIAABqyBkAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqbRUAAGoDCAAAaqoZAAB1YmVqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAanIVAABqAwgAAGpcGQAAdWJlagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABd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aG9ybmFtZZSMCyNzdWJtb2R1bGVzlHVqEAgAAGp9FQAAagMIAABqUyEAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqeBUAAGoDCAAAalAhAAB1YmpuFQAAKYGUfZQoavkHAABoPWr6BwAAXZRquhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlIwGcGFyZW50lGqhAwAAjAdlbnRyaWVzlF2UKE6MNGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdfcXVlcnlfcXVlcnlfdG9fdGFibGVfcGlwZWxpbmWUhpROjBthcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnmUhpROjCZhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkc5SGlE6MLGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5llIaUTowhYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzlIaUTowdYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3RhYmxlaW+UhpROjCBhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbZSGlE6MGGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npb5SGlE6MImFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npb19vdmVycmlkZXOUhpROjBlhcGFjaGVfYmVhbS5pby5nY3AucHVic3VilIaUTowlYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yl9pdF9waXBlbGluZZSGlGWMDGluY2x1ZGVmaWxlc5RdlChqfSEAAGp/IQAAaoEhAABqgyEAAGqFIQAAaochAABqiSEAAGqLIQAAao0hAABqjyEAAGqRIQAAZYwIbWF4ZGVwdGiUSv////+MB2NhcHRpb26UTowEZ2xvYpSJjAZoaWRkZW6UiYwNaW5jbHVkZWhpZGRlbpSJjAhudW1iZXJlZJRLAIwKdGl0bGVzb25seZSJdWoQCAAAarkVAABq3BUAAGpDIQAAat4VAABLFGoDCAAAam4hAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAam0VAABqAwgAAGpQIQAAdWJlagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGpyFQAAagMIAABqBiEAAHViZWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqbRUAAGoDCAAAauogAAB1YmVqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAanIVAABqAwgAAGrnIAAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGptFQAAdWJqjgMAAGpuFQAAKYGUfZQoavkHAABoPWr6BwAAXZRqcxUAACmBlH2UKGr5BwAAaD1q+gcAAF2UankVAAApgZR9lChq+QcAAGg9avoHAABdlGp+FQAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIw7YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ19xdWVyeV9xdWVyeV90b190YWJsZV9waXBlbGluZSBtb2R1bGWUhZSBlH2UKGr5BwAAajoKAABqAwgAAGrDIQAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlIwIaW50ZXJuYWyUiIwGcmVmdXJplGqOAwAAjAphbmNob3JuYW1llGg9dWoQCAAAan0VAABqAwgAAGrAIQAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGp4FQAAagMIAABqvSEAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqchUAAGoDCAAAarohAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAam0VAAB1YmpzAwAAam4VAAApgZR9lChq+QcAAGg9avoHAABdlGpzFQAAKYGUfZQoavkHAABoPWr6BwAAXZQoankVAAApgZR9lChq+QcAAGg9avoHAABdlGp+FQAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIwiYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5IG1vZHVsZZSFlIGUfZQoavkHAABqSAoAAGoDCAAAau4hAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UjAhpbnRlcm5hbJSIjAZyZWZ1cmmUanMDAACMCmFuY2hvcm5hbWWUaD11ahAIAABqfRUAAGoDCAAAaushAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAangVAABqAwgAAGroIQAAdWJqbhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UanMVAAApgZR9lChq+QcAAGg9avoHAABdlChqeRUAACmBlH2UKGr5BwAAaD1q+gcAAF2Uan4VAAApgZR9lChq+QcAAGg9avoHAABdlGr9BwAAjBhXcml0aW5nIERhdGEgdG8gQmlnUXVlcnmUhZSBlH2UKGr5BwAAjBhXcml0aW5nIERhdGEgdG8gQmlnUXVlcnmUagMIAABqDSIAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMCGludGVybmFslIiMBnJlZnVyaZRqcwMAAIwKYW5jaG9ybmFtZZSMGSN3cml0aW5nLWRhdGEtdG8tYmlncXVlcnmUdWoQCAAAan0VAABqAwgAAGoKIgAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGp4FQAAagMIAABqByIAAHViam4VAAApgZR9lChq+QcAAGg9avoHAABdlChqcxUAACmBlH2UKGr5BwAAaD1q+gcAAF2UankVAAApgZR9lChq+QcAAGg9avoHAABdlGp+FQAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIwQVGFibGUgUmVmZXJlbmNlc5SFlIGUfZQoavkHAACMEFRhYmxlIFJlZmVyZW5jZXOUagMIAABqLiIAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMCGludGVybmFslIiMBnJlZnVyaZRqcwMAAIwKYW5jaG9ybmFtZZSMESN0YWJsZS1yZWZlcmVuY2VzlHVqEAgAAGp9FQAAagMIAABqKyIAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqeBUAAGoDCAAAaigiAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAanIVAABqAwgAAGolIgAAdWJqcxUAACmBlH2UKGr5BwAAaD1q+gcAAF2UankVAAApgZR9lChq+QcAAGg9avoHAABdlGp+FQAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIwHU2NoZW1hc5SFlIGUfZQoavkHAACMB1NjaGVtYXOUagMIAABqUiIAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMCGludGVybmFslIiMBnJlZnVyaZRqcwMAAIwKYW5jaG9ybmFtZZSMCCNzY2hlbWFzlHVqEAgAAGp9FQAAagMIAABqTyIAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqeBUAAGoDCAAAakwiAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAanIVAABqAwgAAGolIgAAdWJqcxUAACmBlH2UKGr5BwAAaD1q+gcAAF2UankVAAApgZR9lChq+QcAAGg9avoHAABdlGp+FQAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIwpQWRkaXRpb25hbCBQYXJhbWV0ZXJzIGZvciBCaWdRdWVyeSBUYWJsZXOUhZSBlH2UKGr5BwAAjClBZGRpdGlvbmFsIFBhcmFtZXRlcnMgZm9yIEJpZ1F1ZXJ5IFRhYmxlc5RqAwgAAGp2IgAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlIwIaW50ZXJuYWyUiIwGcmVmdXJplGpzAwAAjAphbmNob3JuYW1llIwqI2FkZGl0aW9uYWwtcGFyYW1ldGVycy1mb3ItYmlncXVlcnktdGFibGVzlHVqEAgAAGp9FQAAagMIAABqcyIAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqeBUAAGoDCAAAanAiAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAanIVAABqAwgAAGolIgAAdWJlagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGptFQAAagMIAABqByIAAHViZWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqchUAAGoDCAAAagQiAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAam0VAABqAwgAAGroIQAAdWJlagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGpyFQAAagMIAABq5SEAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqbRUAAHViaqkDAABqbhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UanMVAAApgZR9lChq+QcAAGg9avoHAABdlGp5FQAAKYGUfZQoavkHAABoPWr6BwAAXZRqfhUAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMLWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzIG1vZHVsZZSFlIGUfZQoavkHAABqVgoAAGoDCAAAarsiAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UjAhpbnRlcm5hbJSIjAZyZWZ1cmmUaqkDAACMCmFuY2hvcm5hbWWUaD11ahAIAABqfRUAAGoDCAAAargiAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAangVAABqAwgAAGq1IgAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGpyFQAAagMIAABqsiIAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqbRUAAHViarIDAABqbhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UanMVAAApgZR9lChq+QcAAGg9avoHAABdlGp5FQAAKYGUfZQoavkHAABoPWr6BwAAXZRqfhUAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMM2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lIG1vZHVsZZSFlIGUfZQoavkHAABqZAoAAGoDCAAAauYiAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UjAhpbnRlcm5hbJSIjAZyZWZ1cmmUarIDAACMCmFuY2hvcm5hbWWUaD11ahAIAABqfRUAAGoDCAAAauMiAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAangVAABqAwgAAGrgIgAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGpyFQAAagMIAABq3SIAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqbRUAAHViauADAABqbhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UanMVAAApgZR9lChq+QcAAGg9avoHAABdlGp5FQAAKYGUfZQoavkHAABoPWr6BwAAXZRqfhUAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scyBtb2R1bGWUhZSBlH2UKGr5BwAAanIKAABqAwgAAGoRIwAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlIwIaW50ZXJuYWyUiIwGcmVmdXJplGrgAwAAjAphbmNob3JuYW1llGg9dWoQCAAAan0VAABqAwgAAGoOIwAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGp4FQAAagMIAABqCyMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqchUAAGoDCAAAaggjAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAam0VAAB1YmoWBAAAam4VAAApgZR9lChq+QcAAGg9avoHAABdlGpzFQAAKYGUfZQoavkHAABoPWr6BwAAXZRqeRUAACmBlH2UKGr5BwAAaD1q+gcAAF2Uan4VAAApgZR9lChq+QcAAGg9avoHAABdlGr9BwAAjCRhcGFjaGVfYmVhbS5pby5nY3AuYmlndGFibGVpbyBtb2R1bGWUhZSBlH2UKGr5BwAAaoAKAABqAwgAAGo8IwAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlIwIaW50ZXJuYWyUiIwGcmVmdXJplGoWBAAAjAphbmNob3JuYW1llGg9dWoQCAAAan0VAABqAwgAAGo5IwAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGp4FQAAagMIAABqNiMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqchUAAGoDCAAAajMjAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAam0VAAB1Ymp2AwAAam4VAAApgZR9lChq+QcAAGg9avoHAABdlGpzFQAAKYGUfZQoavkHAABoPWr6BwAAXZQoankVAAApgZR9lChq+QcAAGg9avoHAABdlGp+FQAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIwkYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZSBwYWNrYWdllIWUgZR9lChq+QcAAGqOCgAAagMIAABqZyMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMCGludGVybmFslIiMBnJlZnVyaZRqdgMAAIwKYW5jaG9ybmFtZZRoPXVqEAgAAGp9FQAAagMIAABqZCMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqeBUAAGoDCAAAamEjAAB1YmpuFQAAKYGUfZQoavkHAABoPWr6BwAAXZRqcxUAACmBlH2UKGr5BwAAaD1q+gcAAF2UKGp5FQAAKYGUfZQoavkHAABoPWr6BwAAXZRqfhUAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMC1N1YnBhY2thZ2VzlIWUgZR9lChq+QcAAIwLU3VicGFja2FnZXOUagMIAABqhiMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMCGludGVybmFslIiMBnJlZnVyaZRqdgMAAIwKYW5jaG9ybmFtZZSMDCNzdWJwYWNrYWdlc5R1ahAIAABqfRUAAGoDCAAAaoMjAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAangVAABqAwgAAGqAIwAAdWJqbhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UaroVAAApgZR9lChq+QcAAGg9avoHAABdlGoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMBnBhcmVudJRqdgMAAIwHZW50cmllc5RdlE6MImFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXeUhpRhjAxpbmNsdWRlZmlsZXOUXZRqrSMAAGGMCG1heGRlcHRolEr/////jAdjYXB0aW9ulE6MBGdsb2KUiYwGaGlkZGVulImMDWluY2x1ZGVoaWRkZW6UiYwIbnVtYmVyZWSUSwCMCnRpdGxlc29ubHmUiXVqEAgAAGq5FQAAatwVAACMey91c3IvbG9jYWwvZ29vZ2xlL2hvbWUvcnV3YW5nL3JlbGVhc2UvYmVhbV9yZWxlYXNlL2RvYy9iZWFtL3Nka3MvcHl0aG9uL3RhcmdldC9kb2NzL3NvdXJjZS9hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnJzdJRq3hUAAEsMagMIAABqniMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqbRUAAGoDCAAAaoAjAAB1YmVqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAanIVAABqAwgAAGp9IwAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGptFQAAagMIAABqYSMAAHViZWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqchUAAGoDCAAAal4jAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAam0VAAB1YmrfAwAAam4VAAApgZR9lChq+QcAAGg9avoHAABdlGpzFQAAKYGUfZQoavkHAABoPWr6BwAAXZQoankVAAApgZR9lChq+QcAAGg9avoHAABdlGp+FQAAKYGUfZQoavkHAABoPWr6BwAAXZRq/QcAAIwqYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldyBwYWNrYWdllIWUgZR9lChq+QcAAGqcCgAAagMIAABq4CMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMCGludGVybmFslIiMBnJlZnVyaZRq3wMAAIwKYW5jaG9ybmFtZZRoPXVqEAgAAGp9FQAAagMIAABq3SMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqeBUAAGoDCAAAatojAAB1YmpuFQAAKYGUfZQoavkHAABoPWr6BwAAXZRqcxUAACmBlH2UKGr5BwAAaD1q+gcAAF2UKGp5FQAAKYGUfZQoavkHAABoPWr6BwAAXZRqfhUAACmBlH2UKGr5BwAAaD1q+gcAAF2Uav0HAACMClN1Ym1vZHVsZXOUhZSBlH2UKGr5BwAAjApTdWJtb2R1bGVzlGoDCAAAav8jAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UjAhpbnRlcm5hbJSIjAZyZWZ1cmmUat8DAACMCmFuY2hvcm5hbWWUjAsjc3VibW9kdWxlc5R1ahAIAABqfRUAAGoDCAAAavwjAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAangVAABqAwgAAGr5IwAAdWJqbhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UaroVAAApgZR9lChq+QcAAGg9avoHAABdlGoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMBnBhcmVudJRq3wMAAIwHZW50cmllc5RdlChOjD5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZZSGlE6MLmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlaW+UhpROjClhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlcpSGlE6MMWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcucXVlcnlfc3BsaXR0ZXKUhpROjChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzlIaUZYwMaW5jbHVkZWZpbGVzlF2UKGomJAAAaigkAABqKiQAAGosJAAAai4kAABljAhtYXhkZXB0aJRK/////4wHY2FwdGlvbpROjARnbG9ilImMBmhpZGRlbpSJjA1pbmNsdWRlaGlkZGVulImMCG51bWJlcmVklEsAjAp0aXRsZXNvbmx5lIl1ahAIAABquRUAAGrcFQAAjIEvdXNyL2xvY2FsL2dvb2dsZS9ob21lL3J1d2FuZy9yZWxlYXNlL2JlYW1fcmVsZWFzZS9kb2MvYmVhbS9zZGtzL3B5dGhvbi90YXJnZXQvZG9jcy9zb3VyY2UvYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5yc3SUat4VAABLDGoDCAAAahckAAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAam0VAABqAwgAAGr5IwAAdWJlagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGpyFQAAagMIAABq9iMAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABd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YmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjlIaUTowwYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjlIaUTow5YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1faW50ZXJhY3RpdmVfYXBpX3BiMl9ncnBjlIaUTowxYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwY5SGlE6MN2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGOUhpROjDRhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl9ncnBjlIaUTow0YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJuc5SGlE6MLmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5lbmRwb2ludHNfcGIyX2dycGOUhpROjDhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuZXh0ZXJuYWxfdHJhbnNmb3Jtc19wYjJfZ3JwY5SGlE6MLGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl9ncnBjlIaUTowsYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnOUhpROjCthcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc2NoZW1hX3BiMl9ncnBjlIaUTow4YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX2dycGOUhpROjDhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJuc5SGlGWMDGluY2x1ZGVmaWxlc5RdlChqXy4AAGphLgAAamMuAABqZS4AAGpnLgAAamkuAABqay4AAGptLgAAam8uAABqcS4AAGpzLgAAanUuAABqdy4AAGp5LgAAansuAABqfS4AAGWMCG1heGRlcHRolEr/////jAdjYXB0aW9ulE6MBGdsb2KU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dJSGlE6MI2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9ylIaUTowsYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXOUhpROjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcpSGlE6MLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3RfZGlyZWN0X3J1bm5lcpSGlE6MK2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3Rfc3RyZWFtX2ltcGyUhpROjC5hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9ylIaUTowfYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbJSGlE6MLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VylIaUZYwMaW5jbHVkZWZpbGVzlF2UKGqINQAAaoo1AABqjDUAAGqONQAAapA1AABqkjUAAGqUNQAAapY1AABqmDUAAGqaNQAAapw1AABqnjUAAGqgNQAAaqI1AABqpDUAAGWMCG1heGRlcHRolEr/////jAdjYXB0aW9ulE6MBGdsb2KUiYwGaGlkZGVulImMDWluY2x1ZGVoaWRkZW6UiYwIbnVtYmVyZWSUSwCMCnRpdGxlc29ubHmUiXVqEAgAAGq5FQAAatwVAACMeS91c3IvbG9jYWwvZ29vZ2xlL2hvbWUvcnV3YW5nL3JlbGVhc2UvYmVhbV9yZWxlYXNlL2RvYy9iZWFtL3Nka3MvcHl0aG9uL3RhcmdldC9kb2NzL3NvdXJjZS9hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5yc3SUat4VAABLDGoDCAAAank1AAB1YmFqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UdWoQCAAAam0VAABqAwgAAGpbNQAAdWJlagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGpyFQAAagMIAABqWDUAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoO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avkHAABoPWr6BwAAXZRq/QcAAIwKU3VibW9kdWxlc5SFlIGUfZQoavkHAACMClN1Ym1vZHVsZXOUagMIAABqxjgAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMCGludGVybmFslIiMBnJlZnVyaZRqVAMAAIwKYW5jaG9ybmFtZZSMCyNzdWJtb2R1bGVzlHVqEAgAAGp9FQAAagMIAABqwzgAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqeBUAAGoDCAAAasA4AAB1YmpuFQAAKYGUfZQoavkHAABoPWr6BwAAXZRquhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlIwGcGFyZW50lGpUAwAAjAdlbnRyaWVzlF2UKE6MNmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYpSGlE6MLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcpSGlE6MMGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfYmVhbZSGlE6MN2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnSUhpROjDJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lcpSGlE6MMWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXKUhpROjDFhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2ZyYWdtZW50lIaUTowzYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50lIaUZYwMaW5jbHVkZWZpbGVzlF2UKGrtOAAAau84AABq8TgAAGrzOAAAavU4AABq9zgAAGr5OAAAavs4AABljAhtYXhkZXB0aJRK////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AACMClN1Ym1vZHVsZXOUagMIAABqzUgAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZSMCGludGVybmFslIiMBnJlZnVyaZRqngMAAIwKYW5jaG9ybmFtZZSMCyNzdWJtb2R1bGVzlHVqEAgAAGp9FQAAagMIAABqykgAAHViYWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqeBUAAGoDCAAAasdIAAB1YmpuFQAAKYGUfZQoavkHAABoPWr6BwAAXZRquhUAACmBlH2UKGr5BwAAaD1q+gcAAF2UagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlIwGcGFyZW50lGqeAwAAjAdlbnRyaWVzlF2UKE6MIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzlIaUTowbYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JllIaUTowkYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jcmVhdGVfc291cmNllIaUToweYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5lIaUTowjYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHOUhpROjB9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFslIaUTowkYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhlIaUTowoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0X3B5M5SGlE6MKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTM3lIaUTowhYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtlIaUTowhYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzlIaUTowcYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0c5SGlE6MH2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWyUhpROjDxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyYW5zZm9ybXNfa2V5d29yZF9vbmx5X2FyZ3Nf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AABdlChqeRUAACmBlH2UKGr5BwAAaD1q+gcAAF2Uan4VAAApgZR9lChq+QcAAGg9avoHAABdlGr9BwAAjApTdWJtb2R1bGVzlIWUgZR9lChq+QcAAIwKU3VibW9kdWxlc5RqAwgAAGpuTAAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlIwIaW50ZXJuYWyUiIwGcmVmdXJplGrBAwAAjAphbmNob3JuYW1llIwLI3N1Ym1vZHVsZXOUdWoQCAAAan0VAABqAwgAAGprTAAAdWJhagQIAAB9lChqBggAAF2UaggIAABdlGoKCAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGp4FQAAagMIAABqaEwAAHViam4VAAApgZR9lChq+QcAAGg9avoHAABdlGq6FQAAKYGUfZQoavkHAABoPWr6BwAAXZRqBAgAAH2UKGoGCAAAXZRqCAgAAF2UagoIAABdlGoMCAAAXZRqDggAAF2UjAZwYXJlbnSUasEDAACMB2VudHJpZXOUXZQoTowgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnOUhpROjClhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5M5SGlE6ML2FwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5lIaUTowdYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXOUhpROjB1hcGFjaGVfYmVhbS50eXBlaGludHMuc2NoZW1hc5SGlE6MJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZZSGlE6MMGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZV90ZXN0X3B5M5SGlE6MH2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2uUhpROjC1hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTOUhpROjB9hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzlIaUTowoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c190ZXN0X3B5M5SGlGWMDGlu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CAAAXZRqDAgAAF2Uag4IAABdlHVqEAgAAGpyFQAAagMIAABqPVEAAHViZWoECAAAfZQoagYIAABdlGoICAAAXZRqCggAAF2UagwIAABdlGoOCAAAXZR1ahAIAABqbRUAAHVidYwPdG9jX251bV9lbnRyaWVzlH2UKGq2AwAASwJqPAMAAEsBalEDAABLAWptAwAASwFqAgQAAEsBauMDAABLAWr5AwAASwFq1AMAAEsBagMEAABLA2qkAwAASwJq2AMAAEsBaroDAABLAWoaBAAASwFqEwQAAEsBasADAABLAWpGAwAASwNqTwMAAEsBaj4DAABLA2qbAwAASwJqzAMAAEsCamsDAABLAWrtAwAASwFqQgMAAEsBag0EAABLAWpMAwAASwFquQMAAEsBagEEAABLA2pDAwAASwJqFAQAAEsBaqIDAABLAWrRAwAASwFq7wMAAEsBaokDAABLAWr8AwAASwRqrwMAAEsBai0DAABLAWqBAwAASwFqCwQAAEsCamMDAABLAWqhAwAASwNqjgMAAEsBanMDAABLBWqpAwAASwFqsgMAAEsBauADAABLAWoWBAAASwFqdgMAAEsCat8DAABLAmpXAwAASwFqHQQAAEsBamIDAABLAWqlAwAASwFquAMAAEsBauoDAABLAmoYBAAASwFqhAMAAEsBapIDAABLAWp+AwAASwFq/gMAAEsBalUDAABLAWp9AwAASwFq1QMAAEsBaqoDAABLAWqTAwAASwNqvQMAAEsBahUEAABLAWrGAwAASwFqNgMAAEsBavQDAABLAWoGBAAASwFq0AMAAEsBauUDAABLAWqVAwAASwFqHAQAAEsCajcDAABLAWoJBAAASwFq/wMAAEsBarUDAABLAWqKAwAASwJqWgMAAEsCak4DAABLAWqjAwAASwFqgwMAAEsBapwDAABLAWo/AwAASwFqNQMAAEsCalMDAABLAWpmAwAASwFqyQMAAEsBajgDAABLAWpIAwAASwNqqAMAAEsCatcDAABLAWpAAwAASwFqZwMAAEsBasIDAABLAWqzAwAASwFq7AMAAEsBagcEAABLAWqQAwAASwFqbAMAAEsBat4DAABLAWoSBAAASwFq+gMAAEsBajADAABLAWqXAwAASwFqyAMAAEsBahEEAABLAWppAwAASwFq8gMAAEsBavMDAABLAWo0AwAASwFqmAMAAEsDaqcDAABLA2oeBAAASwFqfAMAAEsBankDAABLAWoOBAAASwFqYAMAAEsCauYDAABLAWpkAwAASwFqAAQAAEsBaggEAABLAmqaAwAASwFqUAMAAEsBatwDAABLAWoyAwAASwFq9wMAAEsBarcDAABLAWr2AwAASwFqjAMAAEsBal0DAABLAWpKAwAASwFqHwQAAEsBajsDAABLAWrkAwAASwFq4QMAAEsBaosDAABLAWpUAwAASwNq4gMAAEsBasQDAABLAWoPBAAASwJqxQMAAEsBancDAABLAmpHAwAASwFqhwMAAEsBalsDAABLAWpyAwAASwFqLwMAAEsBaiAEAABLAWpFAwAASwFqmQMAAEsBatMDAABLAmoxAwAASwFqGQQAAEsBasMDAABLAWrKAwAASwFqPQMAAEsBakQDAABLAmquAwAASwFq/QMAAEsBagwEAABLAmoXBAAASwFqtAMAAEsCakkDAABLAWqfAwAASwFqcAMAAEsBajoDAABLAWpZAwAASwFqgAMAAEsDatIDAABLAmpxAwAASwNqdQMAAEsCaiEEAABLAWpLAwAASwFqhgMAAEsBalIDAABLAmobBAAASwFqlgMAAEsBanoDAABLAWr1AwAASwFq2QMAAEsBajMDAABLA2qRAwAASwFqXgMAAEsCalwDAABLAWq/AwAASwFqXwMAAEsBas0DAABLAWpoAwAASwFqsAMAAEsBai4DAABLAWpYAwAASwFquwMAAEsBaukDAABLAmqxAwAASwFq8AMAAEsBansDAABLAWqFAwAASwFq+wMAAEsBap4DAABLAmrOAwAASwFq8QMAAEsBagoEAABLAWoEBAAASwFqTQMAAEsBahAEAABLAWruAwAASwFq6AMAAEsBar4DAABLAWrPAwAASwFq6wMAAEsBaqsDAABLAWplAwAASwFq2gMAAEsBagUEAABLAWr4AwAASwFqOQMAAEsBamEDAABLAWrBAwAASwJq2wMAAEsBapQDAABLAWqNAwAASwFq5wMAAEsBam8DAABLAWqtAwAASwFq1gMAAEsBakEDAABLAWpuAwAASwFqywMAAEsBaoIDAABLAWqPAwAASwJqxwMAAEsBat0DAABLAWqIAwAASwFqeAMAAEsBamoDAABLAWq8AwAASwFqdAMAAEsBan8DAABLAWqmAwAASwFqrAMAAEsBap0DAABLAWpWAwAASwFqoAMAAEsGdYwOdG9jX3NlY251bWJlcnOUfZSMDnRvY19maWdudW1iZXJzlH2UjBB0b2N0cmVlX2luY2x1ZGVzlH2UKGq2AwAAXZQoascVAABqyRUAAGrLFQAAas0VAABqzxUAAGrRFQAAZWoDBAAAXZQoankXAABqvhcAAGrAFwAAasIXAABlaqQDAABdlChqOhgAAGo8GAAAZWpGAwAAXZQoaowZAABqjhkAAGqQGQAAapIZAABq1xkAAGrZGQAAatsZAABq3RkAAGrfGQAAauEZAABq4xkAAGrlGQAAaucZAABq6RkAAGrrGQAAau0ZAABq7xkAAGrxGQAAavMZAABq9RkAAGr3GQAAavkZAABq+xkAAGr9GQAAav8ZAABlaj4DAABdlChqohoAAGrnGgAAaukaAABlapsDAABdlGphGwAAYWrMAwAAXZQoatobAABq3BsAAGreGwAAZWoBBAAAXZQoalkdAABqnh0AAGqgHQAAZWpDAwAAXZRqGB4AAGFqCwQAAF2UapIgAABhaqEDAABdlChqNiEAAGo4IQAAan0hAABqfyEAAGqBIQAAaoMhAABqhSEAAGqHIQAAaokhAABqiyEAAGqNIQAAao8hAABqkSEAAGVqdgMAAF2Uaq0jAABhat8DAABdlChqJiQAAGooJAAAaiokAABqLCQAAGouJAAAZWrqAwAAXZRqfiUAAGFqHAQAAF2UKGp5KQAAanspAABqfSkAAGp/KQAAZWqKAwAAXZRqpCoAAGFqWgMAAF2UKGodKwAAah8rAABqISsAAGojKwAAaiUrAABlajUDAABdlChqdSwAAGp3LAAAanksAABlakgDAABdlChqni0AAGrjLQAAauUtAABq5y0AAGVqqAMAAF2UKGpfLgAAamEuAABqYy4AAGplLgAAamcuAABqaS4AAGprLgAAam0uAABqby4AAGpxLgAAanMuAABqdS4AAGp3LgAAankuAABqey4AAGp9LgAAZWqYAwAAXZQoalIyAABqVDIAAGpWMgAAalgyAABqWjIAAGqfMgAAaqEyAABqozIAAGVqpwMAAF2UKGobMwAAamAzAABqYjMAAGpkMwAAamYzAABqaDMAAGpqMwAAZWpgAwAAXZRqjjQAAGFqCAQAAF2UKGqINQAAaoo1AABqjDUAAGqONQAAapA1AABqkjUAAGqUNQAAapY1AABqmDUAAGqaNQAAapw1AABqnjUAAGqgNQAAaqI1AABqpDUAAGVqVAMAAF2UKGqiOAAAaqQ4AABqpjgAAGqoOAAAau04AABq7zgAAGrxOAAAavM4AABq9TgAAGr3OAAAavk4AABq+zgAAGVqDwQAAF2Uask5AABhancDAABdlChqbToAAGpvOgAAanE6AABqczoAAGp1OgAAZWrTAwAAXZQoakY8AABqSDwAAGVqRAMAAF2UKGqYPQAAapo9AABlagwEAABdlGppPgAAYWq0AwAAXZQoag0/AABqDz8AAGVqgAMAAF2UKGpfQAAAamFAAABqpkAAAGqoQAAAaqpAAABqrEAAAGquQAAAarBAAABqskAAAGq0QAAAarZAAABquEAAAGVq0gMAAF2UajBBAABhanEDAABdlChqqUEAAGqrQQAAavBBAABq8kEAAGVqdQMAAF2UampCAABhalIDAABdlChqZEMAAGpmQwAAamhDAABlajMDAABdlChquEQAAGr9RAAAZWpeAwAAXZRqoEUAAGFq6QMAAF2UKGqcRwAAap5HAABqoEcAAGqiRwAAaqRHAABlap4DAABdlChq9EgAAGr2SAAAavhIAABq+kgAAGr8SAAAav5IAABqAEkAAGoCSQAAagRJAABqBkkAAGoISQAAagpJAABqDEkAAGoOSQAAahBJAABqEkkAAGoUSQAAahZJAABlasEDAABdlChqlUwAAGqXTAAAaplMAABqm0wAAGqdTAAAap9MAABqoUwAAGqjTAAAaqVMAABqp0wAAGqpTAAAZWqPAwAAXZQoavtOAABq/U4AAGr/TgAAagFPAABqA08AAGoFTwAAagdPAABqCU8AAGoLTwAAag1PAABqD08AAGVqoAMAAF2UKGoEUgAAagZSAABqCFIAAGoKUgAAagxSAABqDlIAAGoQUgAAahJSAABqFFIAAGoWUgAAahhSAABqGlIAAGocUgAAamFSAABqY1IAAGplUgAAamdSAABldYwQZmlsZXNfdG9fcmVidWlsZJR9lChqxxUAAI+UKGq2AwAAkGrJFQAAj5QoarYDAACQassVAACPlChqtgMAAJBqzRUAAI+UKGq2AwAAkGrPFQAAj5QoarYDAACQatEVAACPlChqtgMAAJBq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YW0uY29kZXJzLmNvZGVycy5Db2RlcpRqUQMAAIwFY2xhc3OUhpSMJmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZW5jb2RllGpRAwAAjAZtZXRob2SUhpSMJmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZGVjb2RllGpRAwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZW5jb2RlX25lc3RlZJRqUQMAAIwGbWV0aG9klIaUjC1hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmRlY29kZV9uZXN0ZWSUalEDAACMBm1ldGhvZJSGlIwwYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjAZtZXRob2SUhpSMNmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqUQMAAIwGbWV0aG9klIaUjC1hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmVzdGltYXRlX3NpemWUalEDAACMBm1ldGhvZJSGlIwoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5nZXRfaW1wbJRqUQMAAIwGbWV0aG9klIaUjCxhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmZyb21fdHlwZV9oaW50lGpRAwAAjAtjbGFzc21ldGhvZJSGlIwrYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci5pc19rdl9jb2RlcpRqUQMAAIwGbWV0aG9klIaUjClhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLmtleV9jb2RlcpRqUQMAAIwGbWV0aG9klIaUjCthcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLnZhbHVlX2NvZGVylGpRAwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuYXNfY2xvdWRfb2JqZWN0lGpRAwAAjAZtZXRob2SUhpSMLGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIucmVnaXN0ZXJfdXJulGpRAwAAjAtjbGFzc21ldGhvZJSGlIwtYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci50b19ydW5uZXJfYXBplGpRAwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIuZnJvbV9ydW5uZXJfYXBplGpRAwAAjAtjbGFzc21ldGhvZJSGlIw3YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqUQMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJulGpRAwAAjAxzdGF0aWNtZXRob2SUhpSMJmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVylGpRAwAAjAVjbGFzc5SGlIwtYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TdHJVdGY4Q29kZXIuZW5jb2RllGpRAwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyLmRlY29kZZRqUQMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlN0clV0ZjhDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwGbWV0aG9klIaUjD5hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlN0clV0ZjhDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqUQMAAIwGbWV0aG9klIaUjCRhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJ5dGVzQ29kZXKUalEDAACMBWNsYXNzlIaUjDVhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJ5dGVzQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqUQMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJ5dGVzQ29kZXIudG9fdHlwZV9oaW50lGpRAwAAjAZtZXRob2SUhpSMNGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQnl0ZXNDb2Rlci5hc19jbG91ZF9vYmplY3SUalEDAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5CeXRlc0NvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpRAwAAjAZtZXRob2SUhpSMJmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQm9vbGVhbkNvZGVylGpRAwAAjAVjbGFzc5SGlIw3YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Cb29sZWFuQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqUQMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJvb2xlYW5Db2Rlci50b190eXBlX2hpbnSUalEDAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Cb29sZWFuQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalEDAACMBm1ldGhvZJSGlIwlYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5WYXJJbnRDb2RlcpRqUQMAAIwFY2xhc3OUhpSMNmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqUQMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlZhckludENvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlZhckludENvZGVyLmFzX2Nsb3VkX29iamVjdJRqUQMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlZhckludENvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpRAwAAjAZtZXRob2SUhpSMJGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmxvYXRDb2RlcpRqUQMAAIwFY2xhc3OUhpSMNWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmxvYXRDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmxvYXRDb2Rlci50b190eXBlX2hpbnSUalEDAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GbG9hdENvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpRAwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVGltZXN0YW1wQ29kZXKUalEDAACMBWNsYXNzlIaUjDlhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlRpbWVzdGFtcENvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMBm1ldGhvZJSGlIwoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TaW5nbGV0b25Db2RlcpRqUQMAAIwFY2xhc3OUhpSMOWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU2luZ2xldG9uQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqUQMAAIwGbWV0aG9klIaUjCVhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlBpY2tsZUNvZGVylGpRAwAAjAVjbGFzc5SGlIw8YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5QaWNrbGVDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVylGpRAwAAjAZtZXRob2SUhpSMMmFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUGlja2xlQ29kZXIudG9fdHlwZV9oaW50lGpRAwAAjAZtZXRob2SUhpSMI2FwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRGlsbENvZGVylGpRAwAAjAVjbGFzc5SGlIwtYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVylGpRAwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMBm1ldGhvZJSGlIxEYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXKUalEDAACMBm1ldGhvZJSGlIw6YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIuYXNfY2xvdWRfb2JqZWN0lGpRAwAAjAZtZXRob2SUhpSMOWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2Rlci5pc19rdl9jb2RlcpRqUQMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIua2V5X2NvZGVylGpRAwAAjAZtZXRob2SUhpSMOWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2Rlci52YWx1ZV9jb2RlcpRqUQMAAIwGbWV0aG9klIaUjCRhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXKUalEDAACMBWNsYXNzlIaUjDVhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqUQMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqUQMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXIuZnJvbV90eXBlX2hpbnSUalEDAACMDHN0YXRpY21ldGhvZJSGlIwqYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5BdnJvR2VuZXJpY0NvZGVylGpRAwAAjAVjbGFzc5SGlIw7YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5BdnJvR2VuZXJpY0NvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5BdnJvR2VuZXJpY0NvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwGbWV0aG9klIaUjEJhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkF2cm9HZW5lcmljQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalEDAACMBm1ldGhvZJSGlIxEYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5BdnJvR2VuZXJpY0NvZGVyLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalEDAACMDHN0YXRpY21ldGhvZJSGlIwkYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVylGpRAwAAjAVjbGFzc5SGlIw1YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXKUalEDAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIuZnJvbV90eXBlX2hpbnSUalEDAACMDHN0YXRpY21ldGhvZJSGlIw0YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmFzX2Nsb3VkX29iamVjdJRqUQMAAIwGbWV0aG9klIaUjCthcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIuY29kZXJzlGpRAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2Rlci5pc19rdl9jb2RlcpRqUQMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIua2V5X2NvZGVylGpRAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2Rlci52YWx1ZV9jb2RlcpRqUQMAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalEDAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalEDAACMDHN0YXRpY21ldGhvZJSGlIwsYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXKUalEDAACMBWNsYXNzlIaUjDhhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2Rlci52YWx1ZV9jb2RlcpRqUQMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjAZtZXRob2SUhpSMQ2FwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVTZXF1ZW5jZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXKUalEDAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXIuZnJvbV90eXBlX2hpbnSUalEDAACMDHN0YXRpY21ldGhvZJSGlIwnYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVylGpRAwAAjAVjbGFzc5SGlIw4YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXKUalEDAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLmFzX2Nsb3VkX29iamVjdJRqUQMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIudmFsdWVfY29kZXKUalEDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwGbWV0aG9klIaUjDZhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIuZnJvbV90eXBlX2hpbnSUalEDAACMDHN0YXRpY21ldGhvZJSGlIw/YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpRAwAAjAZtZXRob2SUhpSMLGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVylGpRAwAAjAVjbGFzc5SGlIw9YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqUQMAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2Rlci5hc19jbG91ZF9vYmplY3SUalEDAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIuaXNfa3ZfY29kZXKUalEDAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIua2V5X2NvZGVylGpRAwAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLnZhbHVlX2NvZGVylGpRAwAAjAZtZXRob2SUhpSMRGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpRAwAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXKUalEDAACMBWNsYXNzlIaUjEJhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlBhcmFtV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5QYXJhbVdpbmRvd2VkVmFsdWVDb2Rlci5hc19jbG91ZF9vYmplY3SUalEDAACMBm1ldGhvZJSGlIxLYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5QYXJhbVdpbmRvd2VkVmFsdWVDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpRAwAAjAxzdGF0aWNtZXRob2SUhpSMSWFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalEDAACMBm1ldGhvZJSGlIwdYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGWUam0DAABq2lMAAIaUjC1hcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZS5PYnNlcnZhYmxlTWl4aW6Uam0DAACMBWNsYXNzlIaUjD9hcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZS5PYnNlcnZhYmxlTWl4aW4ucmVnaXN0ZXJfb2JzZXJ2ZXKUam0DAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGUuT2JzZXJ2YWJsZU1peGluLm5vdGlmeV9vYnNlcnZlcnOUam0DAACMBm1ldGhvZJSGlIwcYXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2RlcpRqAgQAAGraUwAAhpSMJWFwYWNoZV9iZWFtLmNvZGVycy5yb3dfY29kZXIuUm93Q29kZXKUagIEAACMBWNsYXNzlIaUjDZhcGFjaGVfYmVhbS5jb2RlcnMucm93X2NvZGVyLlJvd0NvZGVyLmlzX2RldGVybWluaXN0aWOUagIEAACMBm1ldGhvZJSGlIwyYXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2Rlci5Sb3dDb2Rlci50b190eXBlX2hpbnSUagIEAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2Rlci5Sb3dDb2Rlci5hc19jbG91ZF9vYmplY3SUagIEAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2Rlci5Sb3dDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqAgQAAIwGbWV0aG9klIaUjD9hcGFjaGVfYmVhbS5jb2RlcnMucm93X2NvZGVyLlJvd0NvZGVyLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUagIEAACMDHN0YXRpY21ldGhvZJSGlIw0YXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2Rlci5Sb3dDb2Rlci5mcm9tX3R5cGVfaGludJRqAgQAAIwMc3RhdGljbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5jb2RlcnMucm93X2NvZGVyLlJvd0NvZGVyLmNvZGVyX2Zyb21fdHlwZZRqAgQAAIwMc3RhdGljbWV0aG9klIaUjB5hcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW2UauMDAABq2lMAAIaUjCthcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtlGrjAwAAjAVjbGFzc5SGlIwxYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS53cml0ZZRq4wMAAIwGbWV0aG9klIaUjDZhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLndyaXRlX2J5dGWUauMDAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS53cml0ZV92YXJfaW50NjSUauMDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5faW50NjSUauMDAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5fdWludDY0lGrjAwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX2ludDMylGrjAwAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX2RvdWJsZZRq4wMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLmdldJRq4wMAAIwGbWV0aG9klIaUjDBhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtLnNpemWUauMDAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbZRq4wMAAIwFY2xhc3OUhpSMPWFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0ud3JpdGWUauMDAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS53cml0ZV9ieXRllGrjAwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uZ2V0X2NvdW50lGrjAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uZ2V0lGrjAwAAjAZtZXRob2SUhpSMKmFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbZRq4wMAAIwFY2xhc3OUhpSML2FwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5zaXpllGrjAwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFklGrjAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFkX2FsbJRq4wMAAIwGbWV0aG9klIaUjDhhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF9ieXRlX3B5MpRq4wMAAIwGbWV0aG9klIaUjDhhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF9ieXRlX3B5M5Rq4wMAAIwGbWV0aG9klIaUjDlhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0ucmVhZF92YXJfaW50NjSUauMDAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX2ludDY0lGrjAwAAjAZtZXRob2SUhpSMQGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl91aW50NjSUauMDAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX2ludDMylGrjAwAAjAZtZXRob2SUhpSMQGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9kb3VibGWUauMDAACMBm1ldGhvZJSGlIwuYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLmdldF92YXJpbnRfc2l6ZZRq4wMAAIwIZnVuY3Rpb26UhpSMHWFwYWNoZV9iZWFtLmNvZGVycy50eXBlY29kZXJzlGr5AwAAatpTAACGlIwRYXBhY2hlX2JlYW0uZXJyb3KUatQDAABq2lMAAIaUjBthcGFjaGVfYmVhbS5lcnJvci5CZWFtRXJyb3KUatQDAACMCWV4Y2VwdGlvbpSGlIwfYXBhY2hlX2JlYW0uZXJyb3IuUGlwZWxpbmVFcnJvcpRq1AMAAIwJZXhjZXB0aW9ulIaUjB1hcGFjaGVfYmVhbS5lcnJvci5QVmFsdWVFcnJvcpRq1AMAAIwJZXhjZXB0aW9ulIaUjB1hcGFjaGVfYmVhbS5lcnJvci5SdW5uZXJFcnJvcpRq1AMAAIwJZXhjZXB0aW9ulIaUjCthcGFjaGVfYmVhbS5lcnJvci5SdW50aW1lVmFsdWVQcm92aWRlckVycm9ylGrUAwAAjAlleGNlcHRpb26UhpSMIGFwYWNoZV9iZWFtLmVycm9yLlNpZGVJbnB1dEVycm9ylGrUAwAAjAlleGNlcHRpb26UhpSMIGFwYWNoZV9iZWFtLmVycm9yLlRyYW5zZm9ybUVycm9ylGrUAwAAjAlleGNlcHRpb26UhpSMFGFwYWNoZV9iZWFtLmludGVybmFslGoDBAAAatpTAACGlIwYYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwlGqkAwAAatpTAACGlIwdYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGiUatgDAABq2lMAAIaUjDBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aC5zZXRfcnVubmluZ19pbl9nY2WUatgDAACMCGZ1bmN0aW9ulIaUjDVhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aC5nZXRfc2VydmljZV9jcmVkZW50aWFsc5Rq2AMAAIwIZnVuY3Rpb26UhpSMI2FwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVllGq6AwAAatpTAACGlIw+YXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUuZ2V0X3R5cGVkX3ZhbHVlX2Rlc2NyaXB0b3KUaroDAACMCGZ1bmN0aW9ulIaUjDFhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZS50b19qc29uX3ZhbHVllGq6AwAAjAhmdW5jdGlvbpSGlIwzYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUuZnJvbV9qc29uX3ZhbHVllGq6AwAAjAhmdW5jdGlvbpSGlIwgYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnSUahoEAABq2lMAAIaUjEBhcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudC5wcm94eV9pbmZvX2Zyb21fZW52aXJvbm1lbnRfdmFylGoaBAAAjAhmdW5jdGlvbpSGlIwtYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnQuZ2V0X25ld19odHRwlGoaBAAAjAhmdW5jdGlvbpSGlIwcYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcpRqEwQAAGraUwAAhpSMKGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIuc2F2ZV9tb2R1bGWUahMEAACMCGZ1bmN0aW9ulIaUjDFhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyLm5ld19zYXZlX21vZHVsZV9kaWN0lGoTBAAAjAhmdW5jdGlvbpSGlIwiYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlci5kdW1wc5RqEwQAAIwIZnVuY3Rpb26UhpSMImFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIubG9hZHOUahMEAACMCGZ1bmN0aW9ulIaUjClhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyLmR1bXBfc2Vzc2lvbpRqEwQAAIwIZnVuY3Rpb26UhpSMKWFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIubG9hZF9zZXNzaW9ulGoTBAAAjAhmdW5jdGlvbpSGlIwZYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbJRqwAMAAGraUwAAhpSMLWFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwuQXJndW1lbnRQbGFjZWhvbGRlcpRqwAMAAIwFY2xhc3OUhpSMMmFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwucmVtb3ZlX29iamVjdHNfZnJvbV9hcmdzlGrAAwAAjAhmdW5jdGlvbpSGlIwvYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbC5pbnNlcnRfdmFsdWVzX2luX2FyZ3OUasADAACMCGZ1bmN0aW9ulIaUjC5hcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsLnJ1bl91c2luZ190aHJlYWRwb29slGrAAwAAjAhmdW5jdGlvbpSGlIwOYXBhY2hlX2JlYW0uaW+UakYDAABq2lMAAIaUjBVhcGFjaGVfYmVhbS5pby5hdnJvaW+Uak8DAABq2lMAAIaUjCJhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEZyb21BdnJvlGpPAwAAjAVjbGFzc5SGlIwpYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRGcm9tQXZyby5leHBhbmSUak8DAACMBm1ldGhvZJSGlIwvYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRGcm9tQXZyby5kaXNwbGF5X2RhdGGUak8DAACMBm1ldGhvZJSGlIwlYXBhY2hlX2JlYW0uaW8uYXZyb2lvLlJlYWRBbGxGcm9tQXZyb5RqTwMAAIwFY2xhc3OUhpSMQWFwYWNoZV9iZWFtLmlvLmF2cm9pby5SZWFkQWxsRnJvbUF2cm8uREVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFlGpPAwAAjAlhdHRyaWJ1dGWUhpSMLGFwYWNoZV9iZWFtLmlvLmF2cm9pby5SZWFkQWxsRnJvbUF2cm8uZXhwYW5klGpPAwAAjAZtZXRob2SUhpSMIWFwYWNoZV9iZWFtLmlvLmF2cm9pby5Xcml0ZVRvQXZyb5RqTwMAAIwFY2xhc3OUhpSMKGFwYWNoZV9iZWFtLmlvLmF2cm9pby5Xcml0ZVRvQXZyby5leHBhbmSUak8DAACMBm1ldGhvZJSGlIwuYXBhY2hlX2JlYW0uaW8uYXZyb2lvLldyaXRlVG9BdnJvLmRpc3BsYXlfZGF0YZRqTwMAAIwGbWV0aG9klIaUjBJhcGFjaGVfYmVhbS5pby5hd3OUaj4DAABq2lMAAIaUjBphcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50c5RqmwMAAGraUwAAhpSMHWFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzlGrMAwAAatpTAACGlIwqYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuYm90bzNfY2xpZW50lGprAwAAatpTAACGlIwxYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuYm90bzNfY2xpZW50LkNsaWVudJRqawMAAIwFY2xhc3OUhpSMRWFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmJvdG8zX2NsaWVudC5DbGllbnQuZ2V0X29iamVjdF9tZXRhZGF0YZRqawMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50LmdldF9yYW5nZZRqawMAAIwGbWV0aG9klIaUjDZhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50Lmxpc3SUamsDAACMBm1ldGhvZJSGlIxJYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuYm90bzNfY2xpZW50LkNsaWVudC5jcmVhdGVfbXVsdGlwYXJ0X3VwbG9hZJRqawMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50LnVwbG9hZF9wYXJ0lGprAwAAjAZtZXRob2SUhpSMS2FwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmJvdG8zX2NsaWVudC5DbGllbnQuY29tcGxldGVfbXVsdGlwYXJ0X3VwbG9hZJRqawMAAIwGbWV0aG9klIaUjDhhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50LmRlbGV0ZZRqawMAAIwGbWV0aG9klIaUjD5hcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50LmRlbGV0ZV9iYXRjaJRqawMAAIwGbWV0aG9klIaUjDZhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50LmNvcHmUamsDAACMBm1ldGhvZJSGlIwpYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnSUau0DAABq2lMAAIaUjDJhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlRmlsZZRq7QMAAIwFY2xhc3OUhpSMP2FwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmZha2VfY2xpZW50LkZha2VGaWxlLmdldF9tZXRhZGF0YZRq7QMAAIwGbWV0aG9klIaUjDZhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnSUau0DAACMBWNsYXNzlIaUjD9hcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQuYWRkX2ZpbGWUau0DAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50LmdldF9maWxllGrtAwAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmZha2VfY2xpZW50LkZha2VTM0NsaWVudC5kZWxldGVfZmlsZZRq7QMAAIwGbWV0aG9klIaUjEphcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQuZ2V0X29iamVjdF9tZXRhZGF0YZRq7QMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQubGlzdJRq7QMAAIwGbWV0aG9klIaUjEBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQuZ2V0X3JhbmdllGrtAwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmZha2VfY2xpZW50LkZha2VTM0NsaWVudC5kZWxldGWUau0DAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50LmRlbGV0ZV9iYXRjaJRq7QMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQuY29weZRq7QMAAIwGbWV0aG9klIaUjE5hcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQuY3JlYXRlX211bHRpcGFydF91cGxvYWSUau0DAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50LnVwbG9hZF9wYXJ0lGrtAwAAjAZtZXRob2SUhpSMUGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmZha2VfY2xpZW50LkZha2VTM0NsaWVudC5jb21wbGV0ZV9tdWx0aXBhcnRfdXBsb2FklGrtAwAAjAZtZXRob2SUhpSMJmFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzlGpCAwAAatpTAACGlIwxYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMuR2V0UmVxdWVzdJRqQgMAAIwFY2xhc3OUhpSMNWFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzLlVwbG9hZFJlc3BvbnNllGpCAwAAjAVjbGFzc5SGlIw0YXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMuVXBsb2FkUmVxdWVzdJRqQgMAAIwFY2xhc3OUhpSMOGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzLlVwbG9hZFBhcnRSZXF1ZXN0lGpCAwAAjAVjbGFzc5SGlIw5YXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMuVXBsb2FkUGFydFJlc3BvbnNllGpCAwAAjAVjbGFzc5SGlIxFYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMuQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRSZXF1ZXN0lGpCAwAAjAVjbGFzc5SGlIwyYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMuTGlzdFJlcXVlc3SUakIDAACMBWNsYXNzlIaUjDNhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcy5MaXN0UmVzcG9uc2WUakIDAACMBWNsYXNzlIaUjCthcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcy5JdGVtlGpCAwAAjAVjbGFzc5SGlIw0YXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMuRGVsZXRlUmVxdWVzdJRqQgMAAIwFY2xhc3OUhpSMOWFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzLkRlbGV0ZUJhdGNoUmVxdWVzdJRqQgMAAIwFY2xhc3OUhpSMOmFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzLkRlbGV0ZUJhdGNoUmVzcG9uc2WUakIDAACMBWNsYXNzlIaUjDJhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcy5Db3B5UmVxdWVzdJRqQgMAAIwFY2xhc3OUhpSMNGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzLlMzQ2xpZW50RXJyb3KUakIDAACMCWV4Y2VwdGlvbpSGlIwfYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbZRqDQQAAGraUwAAhpSMLGFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtlGoNBAAAjAVjbGFzc5SGlIw3YXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0uQ0hVTktfU0laRZRqDQQAAIwJYXR0cmlidXRllIaUjDZhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbS5TM19QUkVGSViUag0EAACMCWF0dHJpYnV0ZZSGlIwzYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0uc2NoZW1llGoNBAAAjAtjbGFzc21ldGhvZJSGlIwxYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0uam9pbpRqDQQAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbS5zcGxpdJRqDQQAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbS5ta2RpcnOUag0EAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0uaGFzX2RpcnOUag0EAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0uY3JlYXRllGoNBAAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtLm9wZW6Uag0EAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0uY29weZRqDQQAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbS5yZW5hbWWUag0EAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0uZXhpc3RzlGoNBAAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtLnNpemWUag0EAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0ubGFzdF91cGRhdGVklGoNBAAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtLmNoZWNrc3VtlGoNBAAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtLmRlbGV0ZZRqDQQAAIwGbWV0aG9klIaUjBdhcGFjaGVfYmVhbS5pby5hd3MuczNpb5RqTAMAAGraUwAAhpSMJWFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLnBhcnNlX3MzX3BhdGiUakwDAACMCGZ1bmN0aW9ulIaUjBxhcGFjaGVfYmVhbS5pby5hd3MuczNpby5TM0lPlGpMAwAAjAVjbGFzc5SGlIwhYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTy5vcGVulGpMAwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8ubGlzdF9wcmVmaXiUakwDAACMBm1ldGhvZJSGlIwlYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTy5jaGVja3N1bZRqTAMAAIwGbWV0aG9klIaUjCFhcGFjaGVfYmVhbS5pby5hd3MuczNpby5TM0lPLmNvcHmUakwDAACMBm1ldGhvZJSGlIwnYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTy5jb3B5X3BhdGhzlGpMAwAAjAZtZXRob2SUhpSMJmFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8uY29weV90cmVllGpMAwAAjAZtZXRob2SUhpSMI2FwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8uZGVsZXRllGpMAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8uZGVsZXRlX3BhdGhzlGpMAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8uZGVsZXRlX2ZpbGVzlGpMAwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8uZGVsZXRlX3RyZWWUakwDAACMBm1ldGhvZJSGlIwhYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTy5zaXpllGpMAwAAjAZtZXRob2SUhpSMI2FwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8ucmVuYW1llGpMAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8ubGFzdF91cGRhdGVklGpMAwAAjAZtZXRob2SUhpSMI2FwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8uZXhpc3RzlGpMAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8ucmVuYW1lX2ZpbGVzlGpMAwAAjAZtZXRob2SUhpSMJGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzRG93bmxvYWRlcpRqTAMAAIwFY2xhc3OUhpSMKWFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzRG93bmxvYWRlci5zaXpllGpMAwAAjAlhdHRyaWJ1dGWUhpSMLmFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzRG93bmxvYWRlci5nZXRfcmFuZ2WUakwDAACMBm1ldGhvZJSGlIwiYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNVcGxvYWRlcpRqTAMAAIwFY2xhc3OUhpSMJmFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzVXBsb2FkZXIucHV0lGpMAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzVXBsb2FkZXIuZmluaXNolGpMAwAAjAZtZXRob2SUhpSMHGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2WUarkDAABq2lMAAIaUjClhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZZRquQMAAIwFY2xhc3OUhpSMMWFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlLnNvdXJjZXOUarkDAACMCWF0dHJpYnV0ZZSGlIw3YXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UuZXN0aW1hdGVfc2l6ZZRquQMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZS5zcGxpdJRquQMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcpRquQMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZS5yZWFklGq5AwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVylGq5AwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VylGq5AwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb26UarkDAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbpRquQMAAIwGbWV0aG9klIaUjDlhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlci50cnlfY2xhaW2UarkDAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0lGq5AwAAjAZtZXRob2SUhpSMRGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ulGq5AwAAjAZtZXRob2SUhpSMRGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9ulGq5AwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVklGq5AwAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyLmxvY2FsX3RvX2dsb2JhbJRquQMAAIwGbWV0aG9klIaUjD9hcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlci5nbG9iYWxfdG9fbG9jYWyUarkDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIuc3ViX3JhbmdlX3RyYWNrZXKUarkDAACMBm1ldGhvZJSGlIwXYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWyUagEEAABq2lMAAIaUjBthcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3CUakMDAABq2lMAAIaUjCJhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3VilGoUBAAAatpTAACGlIw3YXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YnN1YlNjaGVtYZRqFAQAAIwFY2xhc3OUhpSMQGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIuUmVhZEZyb21QdWJzdWJTY2hlbWEuaWRfbGFiZWyUahQEAACMCWF0dHJpYnV0ZZSGlIxEYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YnN1YlNjaGVtYS5zdWJzY3JpcHRpb26UahQEAACMCWF0dHJpYnV0ZZSGlIxLYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YnN1YlNjaGVtYS50aW1lc3RhbXBfYXR0cmlidXRllGoUBAAAjAlhdHRyaWJ1dGWUhpSMPWFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIuUmVhZEZyb21QdWJzdWJTY2hlbWEudG9waWOUahQEAACMCWF0dHJpYnV0ZZSGlIxHYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YnN1YlNjaGVtYS53aXRoX2F0dHJpYnV0ZXOUahQEAACMCWF0dHJpYnV0ZZSGlIwxYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YlN1YpRqFAQAAIwFY2xhc3OUhpSMNWFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIuUmVhZEZyb21QdWJTdWIuVVJOlGoUBAAAjAlhdHRyaWJ1dGWUhpSMOGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIuUmVhZEZyb21QdWJTdWIuZXhwYW5klGoUBAAAjAZtZXRob2SUhpSMNmFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIuV3JpdGVUb1B1YnN1YlNjaGVtYZRqFAQAAIwFY2xhc3OUhpSMP2FwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIuV3JpdGVUb1B1YnN1YlNjaGVtYS5pZF9sYWJlbJRqFAQAAIwJYXR0cmlidXRllIaUjEphcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViLldyaXRlVG9QdWJzdWJTY2hlbWEudGltZXN0YW1wX2F0dHJpYnV0ZZRqFAQAAIwJYXR0cmlidXRllIaUjDxhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViLldyaXRlVG9QdWJzdWJTY2hlbWEudG9waWOUahQEAACMCWF0dHJpYnV0ZZSGlIwwYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5Xcml0ZVRvUHViU3VilGoUBAAAjAVjbGFzc5SGlIw0YXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5Xcml0ZVRvUHViU3ViLlVSTpRqFAQAAIwJYXR0cmlidXRllIaUjDdhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViLldyaXRlVG9QdWJTdWIuZXhwYW5klGoUBAAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdlbmVyYXRlX3NlcXVlbmNllGqiAwAAatpTAACGlIw6YXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2VuZXJhdGVfc2VxdWVuY2UuR2VuZXJhdGVTZXF1ZW5jZZRqogMAAIwFY2xhc3OUhpSMPmFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdlbmVyYXRlX3NlcXVlbmNlLkdlbmVyYXRlU2VxdWVuY2UuVVJOlGqiAwAAjAlhdHRyaWJ1dGWUhpSMHWFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthlGrRAwAAatpTAACGlIwxYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuUmVhZEZyb21LYWZrYVNjaGVtYZRq0QMAAIwFY2xhc3OUhpSMQWFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthLlJlYWRGcm9tS2Fma2FTY2hlbWEuY29uc3VtZXJfY29uZmlnlGrRAwAAjAlhdHRyaWJ1dGWUhpSMQmFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthLlJlYWRGcm9tS2Fma2FTY2hlbWEua2V5X2Rlc2VyaWFsaXplcpRq0QMAAIwJYXR0cmlidXRllIaUjDhhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5SZWFkRnJvbUthZmthU2NoZW1hLnRvcGljc5Rq0QMAAIwJYXR0cmlidXRllIaUjERhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5SZWFkRnJvbUthZmthU2NoZW1hLnZhbHVlX2Rlc2VyaWFsaXplcpRq0QMAAIwJYXR0cmlidXRllIaUjCthcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5SZWFkRnJvbUthZmthlGrRAwAAjAVjbGFzc5SGlIxDYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuUmVhZEZyb21LYWZrYS5ieXRlX2FycmF5X2Rlc2VyaWFsaXplcpRq0QMAAIwJYXR0cmlidXRllIaUjC9hcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5SZWFkRnJvbUthZmthLlVSTpRq0QMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5Xcml0ZVRvS2Fma2FTY2hlbWGUatEDAACMBWNsYXNzlIaUjD9hcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5Xcml0ZVRvS2Fma2FTY2hlbWEua2V5X3NlcmlhbGl6ZXKUatEDAACMCWF0dHJpYnV0ZZSGlIxAYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuV3JpdGVUb0thZmthU2NoZW1hLnByb2R1Y2VyX2NvbmZpZ5Rq0QMAAIwJYXR0cmlidXRllIaUjDZhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5Xcml0ZVRvS2Fma2FTY2hlbWEudG9waWOUatEDAACMCWF0dHJpYnV0ZZSGlIxBYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuV3JpdGVUb0thZmthU2NoZW1hLnZhbHVlX3NlcmlhbGl6ZXKUatEDAACMCWF0dHJpYnV0ZZSGlIwqYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuV3JpdGVUb0thZmthlGrRAwAAjAVjbGFzc5SGlIxAYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuV3JpdGVUb0thZmthLmJ5dGVfYXJyYXlfc2VyaWFsaXplcpRq0QMAAIwJYXR0cmlidXRllIaUjC5hcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5Xcml0ZVRvS2Fma2EuVVJOlGrRAwAAjAlhdHRyaWJ1dGWUhpSMHGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmuUau8DAABq2lMAAIaUjCphcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmuUau8DAACMBWNsYXNzlIaUjDdhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsuZGlzcGxheV9kYXRhlGrvAwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luay5vcGVulGrvAwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luay53cml0ZV9yZWNvcmSUau8DAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rLndyaXRlX2VuY29kZWRfcmVjb3JklGrvAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luay5jbG9zZZRq7wMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsuaW5pdGlhbGl6ZV93cml0ZZRq7wMAAIwGbWV0aG9klIaUjDZhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsub3Blbl93cml0ZXKUau8DAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rLnByZV9maW5hbGl6ZZRq7wMAAIwGbWV0aG9klIaUjDlhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmsuZmluYWxpemVfd3JpdGWUau8DAACMBm1ldGhvZJSGlIweYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNllGqJAwAAatpTAACGlIwuYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZZRqiQMAAIwFY2xhc3OUhpSMSmFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UuTUlOX05VTUJFUl9PRl9GSUxFU19UT19TVEFUlGqJAwAAjAlhdHRyaWJ1dGWUhpSMTGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UuTUlOX0ZSQUNUSU9OX09GX0ZJTEVTX1RPX1NUQVSUaokDAACMCWF0dHJpYnV0ZZSGlIw7YXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5kaXNwbGF5X2RhdGGUaokDAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5vcGVuX2ZpbGWUaokDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5zcGxpdJRqiQMAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlLmVzdGltYXRlX3NpemWUaokDAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5yZWFklGqJAwAAjAZtZXRob2SUhpSMQGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXKUaokDAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5yZWFkX3JlY29yZHOUaokDAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZS5zcGxpdHRhYmxllGqJAwAAjAlhdHRyaWJ1dGWUhpSMFWFwYWNoZV9iZWFtLmlvLmZpbGVpb5Rq/AMAAGraUwAAhpSMKWFwYWNoZV9iZWFtLmlvLmZpbGVpby5FbXB0eU1hdGNoVHJlYXRtZW50lGr8AwAAjAVjbGFzc5SGlIwvYXBhY2hlX2JlYW0uaW8uZmlsZWlvLkVtcHR5TWF0Y2hUcmVhdG1lbnQuQUxMT1eUavwDAACMCWF0dHJpYnV0ZZSGlIwyYXBhY2hlX2JlYW0uaW8uZmlsZWlvLkVtcHR5TWF0Y2hUcmVhdG1lbnQuRElTQUxMT1eUavwDAACMCWF0dHJpYnV0ZZSGlIw7YXBhY2hlX2JlYW0uaW8uZmlsZWlvLkVtcHR5TWF0Y2hUcmVhdG1lbnQuQUxMT1dfSUZfV0lMRENBUkSUavwDAACMCWF0dHJpYnV0ZZSGlIw7YXBhY2hlX2JlYW0uaW8uZmlsZWlvLkVtcHR5TWF0Y2hUcmVhdG1lbnQuYWxsb3dfZW1wdHlfbWF0Y2iUavwDAACMDHN0YXRpY21ldGhvZJSGlIwgYXBhY2hlX2JlYW0uaW8uZmlsZWlvLk1hdGNoRmlsZXOUavwDAACMBWNsYXNzlIaUjCdhcGFjaGVfYmVhbS5pby5maWxlaW8uTWF0Y2hGaWxlcy5leHBhbmSUavwDAACMBm1ldGhvZJSGlIweYXBhY2hlX2JlYW0uaW8uZmlsZWlvLk1hdGNoQWxslGr8AwAAjAVjbGFzc5SGlIwlYXBhY2hlX2JlYW0uaW8uZmlsZWlvLk1hdGNoQWxsLmV4cGFuZJRq/AMAAIwGbWV0aG9klIaUjCJhcGFjaGVfYmVhbS5pby5maWxlaW8uUmVhZGFibGVGaWxllGr8AwAAjAVjbGFzc5SGlIwnYXBhY2hlX2JlYW0uaW8uZmlsZWlvLlJlYWRhYmxlRmlsZS5vcGVulGr8AwAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLmlvLmZpbGVpby5SZWFkYWJsZUZpbGUucmVhZJRq/AMAAIwGbWV0aG9klIaUjCxhcGFjaGVfYmVhbS5pby5maWxlaW8uUmVhZGFibGVGaWxlLnJlYWRfdXRmOJRq/AMAAIwGbWV0aG9klIaUjCFhcGFjaGVfYmVhbS5pby5maWxlaW8uUmVhZE1hdGNoZXOUavwDAACMBWNsYXNzlIaUjChhcGFjaGVfYmVhbS5pby5maWxlaW8uUmVhZE1hdGNoZXMuZXhwYW5klGr8AwAAjAZtZXRob2SUhpSMGWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW2Uaq8DAABq2lMAAIaUjCphcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXOUaq8DAACMBWNsYXNzlIaUjC9hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuQVVUT5RqrwMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuQlpJUDKUaq8DAACMCWF0dHJpYnV0ZZSGlIwyYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkRFRkxBVEWUaq8DAACMCWF0dHJpYnV0ZZSGlIwvYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkdaSVCUaq8DAACMCWF0dHJpYnV0ZZSGlIw3YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRJRqrwMAAIwJYXR0cmlidXRllIaUjERhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuaXNfdmFsaWRfY29tcHJlc3Npb25fdHlwZZRqrwMAAIwLY2xhc3NtZXRob2SUhpSMNGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcy5taW1lX3R5cGWUaq8DAACMC2NsYXNzbWV0aG9klIaUjEJhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGWUaq8DAACMC2NsYXNzbWV0aG9klIaUjChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxllGqvAwAAjAVjbGFzc5SGlIwxYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZS5yZWFkYWJsZZRqrwMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLndyaXRlYWJsZZRqrwMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLndyaXRllGqvAwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUucmVhZJRqrwMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLnJlYWRsaW5llGqvAwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUuY2xvc2VklGqvAwAAjAZtZXRob2SUhpSMLmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUuY2xvc2WUaq8DAACMBm1ldGhvZJSGlJU6AAEAAAAAAIwuYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZS5mbHVzaJRqrwMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLnNlZWthYmxllGqvAwAAjAlhdHRyaWJ1dGWUhpSMLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUuc2Vla5RqrwMAAIwGbWV0aG9klIaUjC1hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlLnRlbGyUaq8DAACMBm1ldGhvZJSGlIwmYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlTWV0YWRhdGGUaq8DAACMBWNsYXNzlIaUjCVhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLk1hdGNoUmVzdWx0lGqvAwAAjAVjbGFzc5SGlIwkYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtlGqvAwAAjAVjbGFzc5SGlIwvYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLkNIVU5LX1NJWkWUaq8DAACMCWF0dHJpYnV0ZZSGlIwrYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLnNjaGVtZZRqrwMAAIwLY2xhc3NtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5qb2lulGqvAwAAjAZtZXRob2SUhpSMKmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5zcGxpdJRqrwMAAIwGbWV0aG9klIaUjCthcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ubWtkaXJzlGqvAwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5oYXNfZGlyc5RqrwMAAIwGbWV0aG9klIaUjDBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ubWF0Y2hfZmlsZXOUaq8DAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLnRyYW5zbGF0ZV9wYXR0ZXJulGqvAwAAjAxzdGF0aWNtZXRob2SUhpSMKmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5tYXRjaJRqrwMAAIwGbWV0aG9klIaUjCthcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uY3JlYXRllGqvAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5vcGVulGqvAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5jb3B5lGqvAwAAjAZtZXRob2SUhpSMK2FwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5yZW5hbWWUaq8DAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtLmV4aXN0c5RqrwMAAIwGbWV0aG9klIaUjClhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uc2l6ZZRqrwMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ubGFzdF91cGRhdGVklGqvAwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbS5jaGVja3N1bZRqrwMAAIwGbWV0aG9klIaUjCthcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0uZGVsZXRllGqvAwAAjAZtZXRob2SUhpSMG2FwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pb5RqLQMAAGraUwAAhpSMJmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVylGotAwAAjAVjbGFzc5SGlIwrYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXIuc2l6ZZRqLQMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uRG93bmxvYWRlci5nZXRfcmFuZ2WUai0DAACMBm1ldGhvZJSGlIwkYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVylGotAwAAjAVjbGFzc5SGlIwoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVyLnB1dJRqLQMAAIwGbWV0aG9klIaUjCthcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uVXBsb2FkZXIuZmluaXNolGotAwAAjAZtZXRob2SUhpSMLGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtlGotAwAAjAVjbGFzc5SGlIw1YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW0ucmVhZGludG+Uai0DAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW0uc2Vla5RqLQMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uRG93bmxvYWRlclN0cmVhbS50ZWxslGotAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtLnNlZWthYmxllGotAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtLnJlYWRhYmxllGotAwAAjAZtZXRob2SUhpSMNGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtLnJlYWRhbGyUai0DAACMBm1ldGhvZJSGlIwqYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVyU3RyZWFtlGotAwAAjAVjbGFzc5SGlIwvYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVyU3RyZWFtLnRlbGyUai0DAACMBm1ldGhvZJSGlIwwYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVyU3RyZWFtLndyaXRllGotAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlclN0cmVhbS5jbG9zZZRqLQMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uVXBsb2FkZXJTdHJlYW0ud3JpdGFibGWUai0DAACMBm1ldGhvZJSGlIwmYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlBpcGVTdHJlYW2Uai0DAACMBWNsYXNzlIaUjCthcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uUGlwZVN0cmVhbS5yZWFklGotAwAAjAZtZXRob2SUhpSMK2FwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5QaXBlU3RyZWFtLnRlbGyUai0DAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlBpcGVTdHJlYW0uc2Vla5RqLQMAAIwGbWV0aG9klIaUjBphcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtc5RqgQMAAGraUwAAhpSMJmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zlGqBAwAAjAVjbGFzc5SGlIw5YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuVVJJX1NDSEVNQV9QQVRURVJOlGqBAwAAjAlhdHRyaWJ1dGWUhpSMMmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLnNldF9vcHRpb25zlGqBAwAAjAtjbGFzc21ldGhvZJSGlIwxYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZ2V0X3NjaGVtZZRqgQMAAIwMc3RhdGljbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbZRqgQMAAIwMc3RhdGljbWV0aG9klIaUjCthcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5qb2lulGqBAwAAjAxzdGF0aWNtZXRob2SUhpSMLGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLnNwbGl0lGqBAwAAjAxzdGF0aWNtZXRob2SUhpSMLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLm1rZGlyc5RqgQMAAIwMc3RhdGljbWV0aG9klIaUjCxhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5tYXRjaJRqgQMAAIwMc3RhdGljbWV0aG9klIaUjC1hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5jcmVhdGWUaoEDAACMDHN0YXRpY21ldGhvZJSGlIwrYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMub3BlbpRqgQMAAIwMc3RhdGljbWV0aG9klIaUjCthcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5jb3B5lGqBAwAAjAxzdGF0aWNtZXRob2SUhpSMLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLnJlbmFtZZRqgQMAAIwMc3RhdGljbWV0aG9klIaUjC1hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5leGlzdHOUaoEDAACMDHN0YXRpY21ldGhvZJSGlIwzYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMubGFzdF91cGRhdGVklGqBAwAAjAxzdGF0aWNtZXRob2SUhpSML2FwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmNoZWNrc3VtlGqBAwAAjAxzdGF0aWNtZXRob2SUhpSMLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmRlbGV0ZZRqgQMAAIwMc3RhdGljbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5nZXRfY2h1bmtfc2l6ZZRqgQMAAIwMc3RhdGljbWV0aG9klIaUjBRhcGFjaGVfYmVhbS5pby5mbGlua5RqCwQAAGraUwAAhpSMM2FwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZZRqYwMAAGraUwAAhpSMT2FwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2WUamMDAACMBWNsYXNzlIaUjFNhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLlVSTpRqYwMAAIwJYXR0cmlidXRllIaUjFZhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmNvbmZpZ5RqYwMAAIwJYXR0cmlidXRllIaUjFZhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmV4cGFuZJRqYwMAAIwGbWV0aG9klIaUjF1hcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmdldF93aW5kb3dpbmeUamMDAACMBm1ldGhvZJSGlIxhYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5pbmZlcl9vdXRwdXRfdHlwZZRqYwMAAIwGbWV0aG9klIaUjGdhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpjAwAAjAZtZXRob2SUhpSMX2FwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Uuc2V0X2ludGVydmFsX21zlGpjAwAAjAZtZXRob2SUhpSMYWFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Uuc2V0X21lc3NhZ2VfY291bnSUamMDAACMBm1ldGhvZJSGlIxpYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpjAwAAjAxzdGF0aWNtZXRob2SUhpSMEmFwYWNoZV9iZWFtLmlvLmdjcJRqoQMAAGraUwAAhpSMNGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdfcXVlcnlfcXVlcnlfdG9fdGFibGVfcGlwZWxpbmWUao4DAABq2lMAAIaUjERhcGFjaGVfYmVhbS5pby5nY3AuYmlnX3F1ZXJ5X3F1ZXJ5X3RvX3RhYmxlX3BpcGVsaW5lLnJ1bl9icV9waXBlbGluZZRqjgMAAIwIZnVuY3Rpb26UhpSMG2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeZRqcwMAAGraUwAAhpSMLWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5UYWJsZVJvd0pzb25Db2RlcpRqcwMAAIwFY2xhc3OUhpSMNGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5UYWJsZVJvd0pzb25Db2Rlci5lbmNvZGWUanMDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LlRhYmxlUm93SnNvbkNvZGVyLmRlY29kZZRqcwMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbpRqcwMAAIwFY2xhc3OUhpSMPGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uLkNSRUFURV9ORVZFUpRqcwMAAIwJYXR0cmlidXRllIaUjEBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVElGpzAwAAjAlhdHRyaWJ1dGWUhpSMPmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX1RSVU5DQVRFlGpzAwAAjAlhdHRyaWJ1dGWUhpSMPGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORJRqcwMAAIwJYXR0cmlidXRllIaUjDthcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9FTVBUWZRqcwMAAIwJYXR0cmlidXRllIaUjD9hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbi52YWxpZGF0ZV9jcmVhdGWUanMDAACMDHN0YXRpY21ldGhvZJSGlIw+YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24udmFsaWRhdGVfd3JpdGWUanMDAACMDHN0YXRpY21ldGhvZJSGlIwqYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U291cmNllGpzAwAAjAVjbGFzc5SGlIw3YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U291cmNlLmRpc3BsYXlfZGF0YZRqcwMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlTb3VyY2UuZm9ybWF0lGpzAwAAjAlhdHRyaWJ1dGWUhpSMMWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNvdXJjZS5yZWFkZXKUanMDAACMBm1ldGhvZJSGlIwoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2lua5RqcwMAAIwFY2xhc3OUhpSMNWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmsuZGlzcGxheV9kYXRhlGpzAwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmsuc2NoZW1hX2FzX2pzb26UanMDAACMBm1ldGhvZJSGlIwvYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2luay5mb3JtYXSUanMDAACMCWF0dHJpYnV0ZZSGlIwvYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2luay53cml0ZXKUanMDAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeZRqcwMAAIwFY2xhc3OUhpSMMmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuTWV0aG9klGpzAwAAjAVjbGFzc5SGlIw6YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeS5NZXRob2QuREVGQVVMVJRqcwMAAIwJYXR0cmlidXRllIaUjERhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5Lk1ldGhvZC5TVFJFQU1JTkdfSU5TRVJUU5RqcwMAAIwJYXR0cmlidXRllIaUjD1hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5Lk1ldGhvZC5GSUxFX0xPQURTlGpzAwAAjAlhdHRyaWJ1dGWUhpSMSGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZ5RqcwMAAIwMc3RhdGljbWV0aG9klIaUjEBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0lGpzAwAAjAxzdGF0aWNtZXRob2SUhpSMQWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuZ2V0X2RpY3RfdGFibGVfc2NoZW1hlGpzAwAAjAxzdGF0aWNtZXRob2SUhpSMMmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuZXhwYW5klGpzAwAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuZGlzcGxheV9kYXRhlGpzAwAAjAZtZXRob2SUhpSMJmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzlGqpAwAAatpTAACGlIw8YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuZmlsZV9wcmVmaXhfZ2VuZXJhdG9ylGqpAwAAjAhmdW5jdGlvbpSGlIw5YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuV3JpdGVSZWNvcmRzVG9GaWxllGqpAwAAjAVjbGFzc5SGlIxOYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuV3JpdGVSZWNvcmRzVG9GaWxlLlVOV1JJVFRFTl9SRUNPUkRfVEFHlGqpAwAAjAlhdHRyaWJ1dGWUhpSMSmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLldyaXRlUmVjb3Jkc1RvRmlsZS5XUklUVEVOX0ZJTEVfVEFHlGqpAwAAjAlhdHRyaWJ1dGWUhpSMRmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLldyaXRlUmVjb3Jkc1RvRmlsZS5kaXNwbGF5X2RhdGGUaqkDAACMBm1ldGhvZJSGlIxGYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuV3JpdGVSZWNvcmRzVG9GaWxlLnN0YXJ0X2J1bmRsZZRqqQMAAIwGbWV0aG9klIaUjEFhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5Xcml0ZVJlY29yZHNUb0ZpbGUucHJvY2Vzc5RqqQMAAIwGbWV0aG9klIaUjEdhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5Xcml0ZVJlY29yZHNUb0ZpbGUuZmluaXNoX2J1bmRsZZRqqQMAAIwGbWV0aG9klIaUjEBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5Xcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxllGqpAwAAjAVjbGFzc5SGlIxIYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuV3JpdGVHcm91cGVkUmVjb3Jkc1RvRmlsZS5wcm9jZXNzlGqpAwAAjAZtZXRob2SUhpSMNmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlRyaWdnZXJDb3B5Sm9ic5RqqQMAAIwFY2xhc3OUhpSMQ2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlRyaWdnZXJDb3B5Sm9icy5zdGFydF9idW5kbGWUaqkDAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuVHJpZ2dlckNvcHlKb2JzLnByb2Nlc3OUaqkDAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuVHJpZ2dlckxvYWRKb2JzlGqpAwAAjAVjbGFzc5SGlIxCYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuVHJpZ2dlckxvYWRKb2JzLlRFTVBfVEFCTEVTlGqpAwAAjAlhdHRyaWJ1dGWUhpSMQ2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlRyaWdnZXJMb2FkSm9icy5kaXNwbGF5X2RhdGGUaqkDAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuVHJpZ2dlckxvYWRKb2JzLnN0YXJ0X2J1bmRsZZRqqQMAAIwGbWV0aG9klIaUjD5hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5UcmlnZ2VyTG9hZEpvYnMucHJvY2Vzc5RqqQMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5QYXJ0aXRpb25GaWxlc5RqqQMAAIwFY2xhc3OUhpSMTWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlBhcnRpdGlvbkZpbGVzLk1VTFRJUExFX1BBUlRJVElPTlNfVEFHlGqpAwAAjAlhdHRyaWJ1dGWUhpSMSmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlBhcnRpdGlvbkZpbGVzLlNJTkdMRV9QQVJUSVRJT05fVEFHlGqpAwAAjAlhdHRyaWJ1dGWUhpSMP2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbpRqqQMAAIwFY2xhc3OUhpSMSmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbi5jYW5fYWNjZXB0lGqpAwAAjAZtZXRob2SUhpSMQ2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbi5hZGSUaqkDAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuUGFydGl0aW9uRmlsZXMucHJvY2Vzc5RqqQMAAIwGbWV0aG9klIaUjDRhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5XYWl0Rm9yQlFKb2JzlGqpAwAAjAVjbGFzc5SGlIxBYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuV2FpdEZvckJRSm9icy5zdGFydF9idW5kbGWUaqkDAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuV2FpdEZvckJRSm9icy5wcm9jZXNzlGqpAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLkRlbGV0ZVRhYmxlc0ZulGqpAwAAjAVjbGFzc5SGlIxCYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuRGVsZXRlVGFibGVzRm4uc3RhcnRfYnVuZGxllGqpAwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLkRlbGV0ZVRhYmxlc0ZuLnByb2Nlc3OUaqkDAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuQmlnUXVlcnlCYXRjaEZpbGVMb2Fkc5RqqQMAAIwFY2xhc3OUhpSMVWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLkJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHMuREVTVElOQVRJT05fSk9CSURfUEFJUlOUaqkDAACMCWF0dHJpYnV0ZZSGlIxUYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuQmlnUXVlcnlCYXRjaEZpbGVMb2Fkcy5ERVNUSU5BVElPTl9GSUxFX1BBSVJTlGqpAwAAjAlhdHRyaWJ1dGWUhpSMWmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLkJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHMuREVTVElOQVRJT05fQ09QWV9KT0JJRF9QQUlSU5RqqQMAAIwJYXR0cmlidXRllIaUjERhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5CaWdRdWVyeUJhdGNoRmlsZUxvYWRzLnZlcmlmeZRqqQMAAIwGbWV0aG9klIaUjERhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5CaWdRdWVyeUJhdGNoRmlsZUxvYWRzLmV4cGFuZJRqqQMAAIwGbWV0aG9klIaUjCxhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfaW9fcmVhZF9waXBlbGluZZRqsgMAAGraUwAAhpSMRGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lLlJvd1RvU3RyaW5nV2l0aFNsb3dEb3dulGqyAwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2lvX3JlYWRfcGlwZWxpbmUuUm93VG9TdHJpbmdXaXRoU2xvd0Rvd24ucHJvY2Vzc5RqsgMAAIwGbWV0aG9klIaUjDBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfaW9fcmVhZF9waXBlbGluZS5ydW6UarIDAACMCGZ1bmN0aW9ulIaUjCFhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHOUauADAABq2lMAAIaUjDJhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuRXhwb3J0RmlsZUZvcm1hdJRq4AMAAIwFY2xhc3OUhpSMNmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5FeHBvcnRGaWxlRm9ybWF0LkNTVpRq4AMAAIwJYXR0cmlidXRllIaUjDdhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuRXhwb3J0RmlsZUZvcm1hdC5KU09OlGrgAwAAjAlhdHRyaWJ1dGWUhpSMN2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5FeHBvcnRGaWxlRm9ybWF0LkFWUk+UauADAACMCWF0dHJpYnV0ZZSGlIwzYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkV4cG9ydENvbXByZXNzaW9ulGrgAwAAjAVjbGFzc5SGlIw4YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkV4cG9ydENvbXByZXNzaW9uLkdaSVCUauADAACMCWF0dHJpYnV0ZZSGlIw7YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkV4cG9ydENvbXByZXNzaW9uLkRFRkxBVEWUauADAACMCWF0dHJpYnV0ZZSGlIw6YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkV4cG9ydENvbXByZXNzaW9uLlNOQVBQWZRq4AMAAIwJYXR0cmlidXRllIaUjDhhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuRXhwb3J0Q29tcHJlc3Npb24uTk9ORZRq4AMAAIwJYXR0cmlidXRllIaUjDFhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuZGVmYXVsdF9lbmNvZGVylGrgAwAAjAhmdW5jdGlvbpSGlIw6YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLmdldF9oYXNoYWJsZV9kZXN0aW5hdGlvbpRq4AMAAIwIZnVuY3Rpb26UhpSMPmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5wYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29ulGrgAwAAjAhmdW5jdGlvbpSGlIw3YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLnBhcnNlX3RhYmxlX3JlZmVyZW5jZZRq4AMAAIwIZnVuY3Rpb26UhpSMMWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXKUauADAACMBWNsYXNzlIaUjDxhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyLlRFTVBfVEFCTEWUauADAACMCWF0dHJpYnV0ZZSGlIw+YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlci5URU1QX0RBVEFTRVSUauADAACMCWF0dHJpYnV0ZZSGlIw/YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlci51bmlxdWVfcm93X2lklGrgAwAAjAlhdHRyaWJ1dGWUhpSMRGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIuZ2V0X3F1ZXJ5X2xvY2F0aW9ulGrgAwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIud2FpdF9mb3JfYnFfam9ilGrgAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIuZ2V0X3RhYmxllGrgAwAAjAZtZXRob2SUhpSMR2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIuZ2V0X29yX2NyZWF0ZV9kYXRhc2V0lGrgAwAAjAZtZXRob2SUhpSMRGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIuZ2V0X3RhYmxlX2xvY2F0aW9ulGrgAwAAjAZtZXRob2SUhpSMSmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIuY3JlYXRlX3RlbXBvcmFyeV9kYXRhc2V0lGrgAwAAjAZtZXRob2SUhpSMTGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIuY2xlYW5fdXBfdGVtcG9yYXJ5X2RhdGFzZXSUauADAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlci5nZXRfam9ilGrgAwAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIucGVyZm9ybV9sb2FkX2pvYpRq4AMAAIwGbWV0aG9klIaUjEVhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyLnBlcmZvcm1fZXh0cmFjdF9qb2KUauADAACMBm1ldGhvZJSGlIxFYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlci5nZXRfb3JfY3JlYXRlX3RhYmxllGrgAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIucnVuX3F1ZXJ5lGrgAwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIuaW5zZXJ0X3Jvd3OUauADAACMBm1ldGhvZJSGlIxFYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlci5jb252ZXJ0X3Jvd190b19kaWN0lGrgAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVJlYWRlcpRq4AMAAIwFY2xhc3OUhpSMMGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyaXRlcpRq4AMAAIwFY2xhc3OUhpSMNmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyaXRlci5Xcml0ZZRq4AMAAIwGbWV0aG9klIaUjDRhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuUm93QXNEaWN0SnNvbkNvZGVylGrgAwAAjAVjbGFzc5SGlIw7YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJvd0FzRGljdEpzb25Db2Rlci5lbmNvZGWUauADAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJvd0FzRGljdEpzb25Db2Rlci5kZWNvZGWUauADAACMBm1ldGhvZJSGlIwvYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJldHJ5U3RyYXRlZ3mUauADAACMBWNsYXNzlIaUjDxhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuUmV0cnlTdHJhdGVneS5SRVRSWV9BTFdBWVOUauADAACMCWF0dHJpYnV0ZZSGlIw7YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJldHJ5U3RyYXRlZ3kuUkVUUllfTkVWRVKUauADAACMCWF0dHJpYnV0ZZSGlIxIYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJldHJ5U3RyYXRlZ3kuUkVUUllfT05fVFJBTlNJRU5UX0VSUk9SlGrgAwAAjAlhdHRyaWJ1dGWUhpSMPGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5SZXRyeVN0cmF0ZWd5LnNob3VsZF9yZXRyeZRq4AMAAIwMc3RhdGljbWV0aG9klIaUjDZhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQXBwZW5kRGVzdGluYXRpb25zRm6UauADAACMBWNsYXNzlIaUjD5hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQXBwZW5kRGVzdGluYXRpb25zRm4ucHJvY2Vzc5Rq4AMAAIwGbWV0aG9klIaUjB1hcGFjaGVfYmVhbS5pby5nY3AuYmlndGFibGVpb5RqFgQAAGraUwAAhpSMLWFwYWNoZV9iZWFtLmlvLmdjcC5iaWd0YWJsZWlvLldyaXRlVG9CaWdUYWJsZZRqFgQAAIwFY2xhc3OUhpSMNGFwYWNoZV9iZWFtLmlvLmdjcC5iaWd0YWJsZWlvLldyaXRlVG9CaWdUYWJsZS5leHBhbmSUahYEAACMBm1ldGhvZJSGlIwcYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZZRqdgMAAGraUwAAhpSMImFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXeUat8DAABq2lMAAIaUjD5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZZRqVwMAAGraUwAAhpSMWWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lLm5ld19waXBlbGluZV93aXRoX2pvYl9uYW1llGpXAwAAjAhmdW5jdGlvbpSGlIxMYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmUuRW50aXR5V3JhcHBlcpRqVwMAAIwFY2xhc3OUhpSMWGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lLkVudGl0eVdyYXBwZXIubWFrZV9lbnRpdHmUalcDAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmUucnVulGpXAwAAjAhmdW5jdGlvbpSGlIwuYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVpb5RqHQQAAGraUwAAhpSMQGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmWUah0EAACMBWNsYXNzlIaUjEdhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLmV4cGFuZJRqHQQAAIwGbWV0aG9klIaUjE1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvLlJlYWRGcm9tRGF0YXN0b3JlLmRpc3BsYXlfZGF0YZRqHQQAAIwGbWV0aG9klIaUjD9hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvLldyaXRlVG9EYXRhc3RvcmWUah0EAACMBWNsYXNzlIaUjEJhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvLkRlbGV0ZUZyb21EYXRhc3RvcmWUah0EAACMBWNsYXNzlIaUjClhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlcpRqYgMAAGraUwAAhpSMNGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuaGVscGVyLmdldF9jbGllbnSUamIDAACMCGZ1bmN0aW9ulIaUjDxhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlci5yZXRyeV9vbl9ycGNfZXJyb3KUamIDAACMCGZ1bmN0aW9ulIaUjDlhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlci5jcmVhdGVfZW50aXRpZXOUamIDAACMCGZ1bmN0aW9ulIaUjEBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlci5jcmVhdGVfY2xpZW50X2VudGl0aWVzlGpiAwAAjAhmdW5jdGlvbpSGlIwxYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5xdWVyeV9zcGxpdHRlcpRqpQMAAGraUwAAhpSMRGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcucXVlcnlfc3BsaXR0ZXIuUXVlcnlTcGxpdHRlckVycm9ylGqlAwAAjAlleGNlcHRpb26UhpSMR2FwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcucXVlcnlfc3BsaXR0ZXIuU3BsaXROb3RQb3NzaWJsZUVycm9ylGqlAwAAjAlleGNlcHRpb26UhpSMPGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcucXVlcnlfc3BsaXR0ZXIuZ2V0X3NwbGl0c5RqpQMAAIwIZnVuY3Rpb26UhpSMKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcudHlwZXOUargDAABq2lMAAIaUjC5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzLlF1ZXJ5lGq4AwAAjAVjbGFzc5SGlIw0YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5RdWVyeS5jbG9uZZRquAMAAIwGbWV0aG9klIaUjCxhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzLktleZRquAMAAIwFY2xhc3OUhpSMPGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcudHlwZXMuS2V5LmZyb21fY2xpZW50X2tleZRquAMAAIwMc3RhdGljbWV0aG9klIaUjDphcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzLktleS50b19jbGllbnRfa2V5lGq4AwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcudHlwZXMuRW50aXR5lGq4AwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5FbnRpdHkuc2V0X3Byb3BlcnRpZXOUargDAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5FbnRpdHkuZnJvbV9jbGllbnRfZW50aXR5lGq4AwAAjAxzdGF0aWNtZXRob2SUhpSMQGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcudHlwZXMuRW50aXR5LnRvX2NsaWVudF9lbnRpdHmUargDAACMBm1ldGhvZJSGlIwfYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbJRq6gMAAGraUwAAhpSMKWFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvlGoYBAAAatpTAACGlIw3YXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uUmVhZE9wZXJhdGlvbpRqGAQAAIwFY2xhc3OUhpSMPWFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLlJlYWRPcGVyYXRpb24ucXVlcnmUahgEAACMC2NsYXNzbWV0aG9klIaUjD1hcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5SZWFkT3BlcmF0aW9uLnRhYmxllGoYBAAAjAtjbGFzc21ldGhvZJSGlIw8YXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uY3JlYXRlX3RyYW5zYWN0aW9ulGoYBAAAjAhmdW5jdGlvbpSGlIw5YXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uUmVhZEZyb21TcGFubmVylGoYBAAAjAVjbGFzc5SGlIxAYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uUmVhZEZyb21TcGFubmVyLmV4cGFuZJRqGAQAAIwGbWV0aG9klIaUjEZhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5SZWFkRnJvbVNwYW5uZXIuZGlzcGxheV9kYXRhlGoYBAAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLldyaXRlVG9TcGFubmVylGoYBAAAjAVjbGFzc5SGlIxFYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uV3JpdGVUb1NwYW5uZXIuZGlzcGxheV9kYXRhlGoYBAAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLldyaXRlVG9TcGFubmVyLmV4cGFuZJRqGAQAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5NdXRhdGlvbkdyb3VwlGoYBAAAjAVjbGFzc5SGlIw8YXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uTXV0YXRpb25Hcm91cC5pbmZvlGoYBAAAjAlhdHRyaWJ1dGWUhpSMP2FwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLk11dGF0aW9uR3JvdXAucHJpbWFyeZRqGAQAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5Xcml0ZU11dGF0aW9ulGoYBAAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uV3JpdGVNdXRhdGlvbi5pbnNlcnSUahgEAACMDHN0YXRpY21ldGhvZJSGlIw+YXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uV3JpdGVNdXRhdGlvbi51cGRhdGWUahgEAACMDHN0YXRpY21ldGhvZJSGlIxIYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uV3JpdGVNdXRhdGlvbi5pbnNlcnRfb3JfdXBkYXRllGoYBAAAjAxzdGF0aWNtZXRob2SUhpSMP2FwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLldyaXRlTXV0YXRpb24ucmVwbGFjZZRqGAQAAIwMc3RhdGljbWV0aG9klIaUjD5hcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5Xcml0ZU11dGF0aW9uLmRlbGV0ZZRqGAQAAIwMc3RhdGljbWV0aG9klIaUjCBhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbZRqhAMAAGraUwAAhpSMLmFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW2UaoQDAACMBWNsYXNzlIaUjDlhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLkNIVU5LX1NJWkWUaoQDAACMCWF0dHJpYnV0ZZSGlIw5YXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5HQ1NfUFJFRklYlGqEAwAAjAlhdHRyaWJ1dGWUhpSMNWFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uc2NoZW1llGqEAwAAjAtjbGFzc21ldGhvZJSGlIwzYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5qb2lulGqEAwAAjAZtZXRob2SUhpSMNGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uc3BsaXSUaoQDAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5ta2RpcnOUaoQDAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5oYXNfZGlyc5RqhAMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLmNyZWF0ZZRqhAMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLm9wZW6UaoQDAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbS5jb3B5lGqEAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0ucmVuYW1llGqEAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uZXhpc3RzlGqEAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uc2l6ZZRqhAMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZJRqhAMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtLmNoZWNrc3VtlGqEAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0uZGVsZXRllGqEAwAAjAZtZXRob2SUhpSMGGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npb5RqkgMAAGraUwAAhpSMHmFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJT5RqkgMAAIwFY2xhc3OUhpSMI2FwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5vcGVulGqSAwAAjAZtZXRob2SUhpSMJWFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5kZWxldGWUapIDAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLmRlbGV0ZV9iYXRjaJRqkgMAAIwGbWV0aG9klIaUjCNhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uY29weZRqkgMAAIwGbWV0aG9klIaUjClhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uY29weV9iYXRjaJRqkgMAAIwGbWV0aG9klIaUjCdhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uY29weXRyZWWUapIDAACMBm1ldGhvZJSGlIwlYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPLnJlbmFtZZRqkgMAAIwGbWV0aG9klIaUjCVhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uZXhpc3RzlGqSAwAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5jaGVja3N1bZRqkgMAAIwGbWV0aG9klIaUjCNhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8uc2l6ZZRqkgMAAIwGbWV0aG9klIaUjCZhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8ua21zX2tleZRqkgMAAIwGbWV0aG9klIaUjCthcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8ubGFzdF91cGRhdGVklGqSAwAAjAZtZXRob2SUhpSMKmFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTy5saXN0X3ByZWZpeJRqkgMAAIwGbWV0aG9klIaUjCJhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9fb3ZlcnJpZGVzlGp+AwAAatpTAACGlIwxYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvX292ZXJyaWRlcy5HY3NJT092ZXJyaWRlc5RqfgMAAIwFY2xhc3OUhpSMPGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npb19vdmVycmlkZXMuR2NzSU9PdmVycmlkZXMucmV0cnlfZnVuY5RqfgMAAIwLY2xhc3NtZXRob2SUhpSMGWFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWKUav4DAABq2lMAAIaUjCdhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlB1YnN1Yk1lc3NhZ2WUav4DAACMBWNsYXNzlIaUjCxhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlB1YnN1Yk1lc3NhZ2UuZGF0YZRq/gMAAIwJYXR0cmlidXRllIaUjDJhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlB1YnN1Yk1lc3NhZ2UuYXR0cmlidXRlc5Rq/gMAAIwJYXR0cmlidXRllIaUjChhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRGcm9tUHViU3VilGr+AwAAjAVjbGFzc5SGlIwvYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YlN1Yi5leHBhbmSUav4DAACMBm1ldGhvZJSGlIxAYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YlN1Yi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRq/gMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRTdHJpbmdzRnJvbVB1YlN1YpRq/gMAAIwIZnVuY3Rpb26UhpSMLmFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuV3JpdGVTdHJpbmdzVG9QdWJTdWKUav4DAACMCGZ1bmN0aW9ulIaUjCdhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLldyaXRlVG9QdWJTdWKUav4DAACMBWNsYXNzlIaUjDRhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLldyaXRlVG9QdWJTdWIudG9fcHJvdG9fc3RylGr+AwAAjAxzdGF0aWNtZXRob2SUhpSMLmFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuV3JpdGVUb1B1YlN1Yi5leHBhbmSUav4DAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5Xcml0ZVRvUHViU3ViLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGr+AwAAjAZtZXRob2SUhpSMJWFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJfaXRfcGlwZWxpbmWUalUDAABq2lMAAIaUjDJhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViX2l0X3BpcGVsaW5lLnJ1bl9waXBlbGluZZRqVQMAAIwIZnVuY3Rpb26UhpSMH2FwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW2Uan0DAABq2lMAAIaUjDBhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW2Uan0DAACMBWNsYXNzlIaUjDdhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0uc2NoZW1llGp9AwAAjAtjbGFzc21ldGhvZJSGlIw1YXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmpvaW6Uan0DAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLnNwbGl0lGp9AwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5ta2RpcnOUan0DAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmhhc19kaXJzlGp9AwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5jcmVhdGWUan0DAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLm9wZW6Uan0DAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmNvcHmUan0DAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLnJlbmFtZZRqfQMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0uZXhpc3RzlGp9AwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5zaXpllGp9AwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5sYXN0X3VwZGF0ZWSUan0DAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtLmNoZWNrc3VtlGp9AwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbS5kZWxldGWUan0DAACMBm1ldGhvZJSGlIwVYXBhY2hlX2JlYW0uaW8uaW9iYXNllGrVAwAAatpTAACGlIwjYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2WUatUDAACMBWNsYXNzlIaUjDFhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZS5lc3RpbWF0ZV9zaXpllGrVAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLnNwbGl0lGrVAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLmdldF9yYW5nZV90cmFja2VylGrVAwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLnJlYWSUatUDAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXKUatUDAACMBm1ldGhvZJSGlIwuYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UuaXNfYm91bmRlZJRq1QMAAIwGbWV0aG9klIaUjCJhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VylGrVAwAAjAVjbGFzc5SGlIw3YXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTpRq1QMAAIwJYXR0cmlidXRllIaUjDFhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGrVAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbpRq1QMAAIwGbWV0aG9klIaUjCxhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnRyeV9jbGFpbZRq1QMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ulGrVAwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb26UatUDAACMBm1ldGhvZJSGlIwsYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlci50cnlfc3BsaXSUatUDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZJRq1QMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c5Rq1QMAAIwGbWV0aG9klIaUjEZhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrlGrVAwAAjAZtZXRob2SUhpSMGmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rlGrVAwAAjAVjbGFzc5SGlIwrYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNpbmsuaW5pdGlhbGl6ZV93cml0ZZRq1QMAAIwGbWV0aG9klIaUjCZhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU2luay5vcGVuX3dyaXRlcpRq1QMAAIwGbWV0aG9klIaUjCdhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU2luay5wcmVfZmluYWxpemWUatUDAACMBm1ldGhvZJSGlIwpYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNpbmsuZmluYWxpemVfd3JpdGWUatUDAACMBm1ldGhvZJSGlIwcYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlcpRq1QMAAIwFY2xhc3OUhpSMImFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZXIud3JpdGWUatUDAACMBm1ldGhvZJSGlIwiYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlci5jbG9zZZRq1QMAAIwGbWV0aG9klIaUjBphcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVhZJRq1QMAAIwFY2xhc3OUhpSMMWFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkLmdldF9kZXNpcmVkX2NodW5rX3NpemWUatUDAACMDHN0YXRpY21ldGhvZJSGlIwhYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQuZXhwYW5klGrVAwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkLmdldF93aW5kb3dpbmeUatUDAACMBm1ldGhvZJSGlIwnYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQuZGlzcGxheV9kYXRhlGrVAwAAjAZtZXRob2SUhpSMMmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGrVAwAAjAZtZXRob2SUhpSMNGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUatUDAACMDHN0YXRpY21ldGhvZJSGlIwbYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRllGrVAwAAjAVjbGFzc5SGlIwoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlLmRpc3BsYXlfZGF0YZRq1QMAAIwGbWV0aG9klIaUjCJhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV3JpdGUuZXhwYW5klGrVAwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXKUatUDAACMBWNsYXNzlIaUjDxhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb26UatUDAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlci5jdXJyZW50X3Byb2dyZXNzlGrVAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXIuY2hlY2tfZG9uZZRq1QMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyLnRyeV9zcGxpdJRq1QMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyLnRyeV9jbGFpbZRq1QMAAIwGbWV0aG9klIaUjChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV2F0ZXJtYXJrRXN0aW1hdG9ylGrVAwAAjAVjbGFzc5SGlIw8YXBhY2hlX2JlYW0uaW8uaW9iYXNlLldhdGVybWFya0VzdGltYXRvci5nZXRfZXN0aW1hdG9yX3N0YXRllGrVAwAAjAZtZXRob2SUhpSMOmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5XYXRlcm1hcmtFc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmuUatUDAACMBm1ldGhvZJSGlIw6YXBhY2hlX2JlYW0uaW8uaW9iYXNlLldhdGVybWFya0VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcJRq1QMAAIwGbWV0aG9klIaUjB5hcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW2UaqoDAABq2lMAAIaUjC5hcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtlGqqAwAAjAVjbGFzc5SGlIw1YXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5zY2hlbWWUaqoDAACMC2NsYXNzbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLmpvaW6UaqoDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5zcGxpdJRqqgMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLm1rZGlyc5RqqgMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLmhhc19kaXJzlGqqAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uY3JlYXRllGqqAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0ub3BlbpRqqgMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtLmNvcHmUaqoDAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5yZW5hbWWUaqoDAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5leGlzdHOUaqoDAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5zaXpllGqqAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0ubGFzdF91cGRhdGVklGqqAwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0uY2hlY2tzdW2UaqoDAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbS5kZWxldGWUaqoDAACMBm1ldGhvZJSGlIwYYXBhY2hlX2JlYW0uaW8ubW9uZ29kYmlvlGqTAwAAatpTAACGlIwoYXBhY2hlX2JlYW0uaW8ubW9uZ29kYmlvLlJlYWRGcm9tTW9uZ29EQpRqkwMAAIwFY2xhc3OUhpSML2FwYWNoZV9iZWFtLmlvLm1vbmdvZGJpby5SZWFkRnJvbU1vbmdvREIuZXhwYW5klGqTAwAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLmlvLm1vbmdvZGJpby5Xcml0ZVRvTW9uZ29EQpRqkwMAAIwFY2xhc3OUhpSMLmFwYWNoZV9iZWFtLmlvLm1vbmdvZGJpby5Xcml0ZVRvTW9uZ29EQi5leHBhbmSUapMDAACMBm1ldGhvZJSGlIwYYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvlGq9AwAAatpTAACGlIwvYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRGcm9tUGFycXVldEJhdGNoZWSUar0DAACMBWNsYXNzlIaUjDZhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uUmVhZEZyb21QYXJxdWV0QmF0Y2hlZC5leHBhbmSUar0DAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRGcm9tUGFycXVldEJhdGNoZWQuZGlzcGxheV9kYXRhlGq9AwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkRnJvbVBhcnF1ZXSUar0DAACMBWNsYXNzlIaUjC9hcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uUmVhZEZyb21QYXJxdWV0LmV4cGFuZJRqvQMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uUmVhZEZyb21QYXJxdWV0LmRpc3BsYXlfZGF0YZRqvQMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uUmVhZEFsbEZyb21QYXJxdWV0QmF0Y2hlZJRqvQMAAIwFY2xhc3OUhpSMTmFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkQWxsRnJvbVBhcnF1ZXRCYXRjaGVkLkRFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRZRqvQMAAIwJYXR0cmlidXRllIaUjDlhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uUmVhZEFsbEZyb21QYXJxdWV0QmF0Y2hlZC5leHBhbmSUar0DAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRBbGxGcm9tUGFycXVldJRqvQMAAIwFY2xhc3OUhpSMMmFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkQWxsRnJvbVBhcnF1ZXQuZXhwYW5klGq9AwAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5Xcml0ZVRvUGFycXVldJRqvQMAAIwFY2xhc3OUhpSMLmFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5Xcml0ZVRvUGFycXVldC5leHBhbmSUar0DAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLldyaXRlVG9QYXJxdWV0LmRpc3BsYXlfZGF0YZRqvQMAAIwGbWV0aG9klIaUjB1hcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vyc5RqFQQAAGraUwAAhpSMMGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlcpRqFQQAAIwFY2xhc3OUhpSMQGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5PRkZTRVRfSU5GSU5JVFmUahUEAACMCWF0dHJpYnV0ZZSGlIw/YXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGoVBAAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9ulGoVBAAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5sYXN0X3JlY29yZF9zdGFydJRqFQQAAIwJYXR0cmlidXRllIaUjExhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIubGFzdF9hdHRlbXB0ZWRfcmVjb3JkX3N0YXJ0lGoVBAAAjAlhdHRyaWJ1dGWUhpSMOmFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci50cnlfY2xhaW2UahUEAACMBm1ldGhvZJSGlIxFYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ulGoVBAAAjAZtZXRob2SUhpSMOmFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci50cnlfc3BsaXSUahUEAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVklGoVBAAAjAZtZXRob2SUhpSMRWFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5wb3NpdGlvbl90b19mcmFjdGlvbpRqFQQAAIwGbWV0aG9klIaUjEVhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb26UahUEAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c5RqFQQAAIwGbWV0aG9klIaUjFRhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2uUahUEAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VylGoVBAAAjAVjbGFzc5SGlIxDYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLlVOU1RBUlRFRJRqFQQAAIwJYXR0cmlidXRllIaUjEhhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb26UahUEAACMBm1ldGhvZJSGlIxHYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb26UahUEAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnRyeV9jbGFpbZRqFQQAAIwGbWV0aG9klIaUjE5hcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb26UahUEAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnRyeV9zcGxpdJRqFQQAAIwGbWV0aG9klIaUjEthcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWSUahUEAACMBm1ldGhvZJSGlIxOYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLmZyYWN0aW9uX3RvX3Bvc2l0aW9ulGoVBAAAjAZtZXRob2SUhpSMNmFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlcpRqFQQAAIwFY2xhc3OUhpSMRWFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbpRqFQQAAIwGbWV0aG9klIaUjERhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbpRqFQQAAIwGbWV0aG9klIaUjEthcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb26UahUEAACMBm1ldGhvZJSGlIxAYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnRyeV9jbGFpbZRqFQQAAIwGbWV0aG9klIaUjEBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X3NwbGl0lGoVBAAAjAZtZXRob2SUhpSMS2FwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvbpRqFQQAAIwGbWV0aG9klIaUjEhhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWSUahUEAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c5RqFQQAAIwGbWV0aG9klIaUjFphcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2uUahUEAACMBm1ldGhvZJSGlIw6YXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlcpRqFQQAAIwFY2xhc3OUhpSMT2FwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLkxleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIuZnJhY3Rpb25fdG9fcG9zaXRpb26UahUEAACMC2NsYXNzbWV0aG9klIaUjE9hcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5MZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyLnBvc2l0aW9uX3RvX2ZyYWN0aW9ulGoVBAAAjAtjbGFzc21ldGhvZJSGlIwjYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnOUasYDAABq2lMAAIaUjC9hcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSYW5nZZRqxgMAAIwFY2xhc3OUhpSMNWFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlLnNwbGl0lGrGAwAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlLnNwbGl0X2F0lGrGAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlLm5ld190cmFja2VylGrGAwAAjAZtZXRob2SUhpSMNGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlLnNpemWUasYDAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VylGrGAwAAjAVjbGFzc5SGlIxHYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmWUasYDAACMBm1ldGhvZJSGlIxQYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb26UasYDAACMBm1ldGhvZJSGlIxNYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcHJvZ3Jlc3OUasYDAACMBm1ldGhvZJSGlIxLYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGrGAwAAjAZtZXRob2SUhpSMSmFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5zdG9wX3Bvc2l0aW9ulGrGAwAAjAZtZXRob2SUhpSMRmFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci50cnlfY2xhaW2UasYDAACMBm1ldGhvZJSGlIxGYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnRyeV9zcGxpdJRqxgMAAIwGbWV0aG9klIaUjCBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc5RqNgMAAGraUwAAhpSMMWFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLnJlYWRfZnJvbV9zb3VyY2WUajYDAACMCGZ1bmN0aW9ulIaUjEZhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscy5hc3NlcnRfc291cmNlc19lcXVhbF9yZWZlcmVuY2Vfc291cmNllGo2AwAAjAhmdW5jdGlvbpSGlIw/YXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3JlZW50cmFudF9yZWFkc19zdWNjZWVklGo2AwAAjAhmdW5jdGlvbpSGlIxCYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9ylGo2AwAAjAhmdW5jdGlvbpSGlIxRYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50lGo2AwAAjAhmdW5jdGlvbpSGlIw/YXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2ZhaWxzlGo2AwAAjAhmdW5jdGlvbpSGlIxAYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMuYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeZRqNgMAAIwIZnVuY3Rpb26UhpSMRGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLmFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9leGhhdXN0aXZllGo2AwAAjAhmdW5jdGlvbpSGlIwVYXBhY2hlX2JlYW0uaW8udGV4dGlvlGr0AwAAatpTAACGlIwlYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRBbGxGcm9tVGV4dJRq9AMAAIwFY2xhc3OUhpSMQWFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkQWxsRnJvbVRleHQuREVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFlGr0AwAAjAlhdHRyaWJ1dGWUhpSMLGFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkQWxsRnJvbVRleHQuZXhwYW5klGr0AwAAjAZtZXRob2SUhpSMImFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkRnJvbVRleHSUavQDAACMBWNsYXNzlIaUjClhcGFjaGVfYmVhbS5pby50ZXh0aW8uUmVhZEZyb21UZXh0LmV4cGFuZJRq9AMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS5pby50ZXh0aW8uUmVhZEZyb21UZXh0V2l0aEZpbGVuYW1llGr0AwAAjAVjbGFzc5SGlIwhYXBhY2hlX2JlYW0uaW8udGV4dGlvLldyaXRlVG9UZXh0lGr0AwAAjAVjbGFzc5SGlIwoYXBhY2hlX2JlYW0uaW8udGV4dGlvLldyaXRlVG9UZXh0LmV4cGFuZJRq9AMAAIwGbWV0aG9klIaUjBlhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvlGoGBAAAatpTAACGlIwqYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpby5SZWFkRnJvbVRGUmVjb3JklGoGBAAAjAVjbGFzc5SGlIwxYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpby5SZWFkRnJvbVRGUmVjb3JkLmV4cGFuZJRqBgQAAIwGbWV0aG9klIaUjClhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvLldyaXRlVG9URlJlY29yZJRqBgQAAIwFY2xhc3OUhpSMMGFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW8uV3JpdGVUb1RGUmVjb3JkLmV4cGFuZJRqBgQAAIwGbWV0aG9klIaUjBRhcGFjaGVfYmVhbS5pby51dGlsc5Rq0AMAAGraUwAAhpSMI2FwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNllGrQAwAAjAVjbGFzc5SGlIwxYXBhY2hlX2JlYW0uaW8udXRpbHMuQ291bnRpbmdTb3VyY2UuZXN0aW1hdGVfc2l6ZZRq0AMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5pby51dGlscy5Db3VudGluZ1NvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcpRq0AMAAIwGbWV0aG9klIaUjChhcGFjaGVfYmVhbS5pby51dGlscy5Db3VudGluZ1NvdXJjZS5yZWFklGrQAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNlLnNwbGl0lGrQAwAAjAZtZXRob2SUhpSMFGFwYWNoZV9iZWFtLmlvLnZjZmlvlGrlAwAAatpTAACGlIwgYXBhY2hlX2JlYW0uaW8udmNmaW8uVmFyaWFudEluZm+UauUDAACMBWNsYXNzlIaUjCVhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mby5kYXRhlGrlAwAAjAlhdHRyaWJ1dGWUhpSMLGFwYWNoZV9iZWFtLmlvLnZjZmlvLlZhcmlhbnRJbmZvLmZpZWxkX2NvdW50lGrlAwAAjAlhdHRyaWJ1dGWUhpSMJ2FwYWNoZV9iZWFtLmlvLnZjZmlvLk1hbGZvcm1lZFZjZlJlY29yZJRq5QMAAIwFY2xhc3OUhpSMMWFwYWNoZV9iZWFtLmlvLnZjZmlvLk1hbGZvcm1lZFZjZlJlY29yZC5maWxlX25hbWWUauUDAACMCWF0dHJpYnV0ZZSGlIwsYXBhY2hlX2JlYW0uaW8udmNmaW8uTWFsZm9ybWVkVmNmUmVjb3JkLmxpbmWUauUDAACMCWF0dHJpYnV0ZZSGlIwcYXBhY2hlX2JlYW0uaW8udmNmaW8uVmFyaWFudJRq5QMAAIwFY2xhc3OUhpSMIGFwYWNoZV9iZWFtLmlvLnZjZmlvLlZhcmlhbnRDYWxslGrlAwAAjAVjbGFzc5SGlIwgYXBhY2hlX2JlYW0uaW8udmNmaW8uUmVhZEZyb21WY2aUauUDAACMBWNsYXNzlIaUjCdhcGFjaGVfYmVhbS5pby52Y2Zpby5SZWFkRnJvbVZjZi5leHBhbmSUauUDAACMBm1ldGhvZJSGlIwjYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnOUapUDAABq2lMAAIaUjD9hcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5Nb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3KUapUDAACMBWNsYXNzlIaUjFFhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5Nb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3Iub2JzZXJ2ZV90aW1lc3RhbXCUapUDAACMBm1ldGhvZJSGlIxRYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yLmN1cnJlbnRfd2F0ZXJtYXJrlGqVAwAAjAZtZXRob2SUhpSMU2FwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLk1vbm90b25pY1dhdGVybWFya0VzdGltYXRvci5nZXRfZXN0aW1hdG9yX3N0YXRllGqVAwAAjAZtZXRob2SUhpSMUGFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLk1vbm90b25pY1dhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVylGqVAwAAjAxzdGF0aWNtZXRob2SUhpSMPmFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLldhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9ylGqVAwAAjAVjbGFzc5SGlIxQYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3Iub2JzZXJ2ZV90aW1lc3RhbXCUapUDAACMBm1ldGhvZJSGlIxQYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmuUapUDAACMBm1ldGhvZJSGlIxSYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IuZ2V0X2VzdGltYXRvcl9zdGF0ZZRqlQMAAIwGbWV0aG9klIaUjE9hcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5XYWxsdGltZVdhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVylGqVAwAAjAxzdGF0aWNtZXRob2SUhpSMPGFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLk1hbnVhbFdhdGVybWFya0VzdGltYXRvcpRqlQMAAIwFY2xhc3OUhpSMTmFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLk1hbnVhbFdhdGVybWFya0VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcJRqlQMAAIwGbWV0aG9klIaUjE5hcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5NYW51YWxXYXRlcm1hcmtFc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmuUapUDAACMBm1ldGhvZJSGlIxQYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yLmdldF9lc3RpbWF0b3Jfc3RhdGWUapUDAACMBm1ldGhvZJSGlIxKYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yLnNldF93YXRlcm1hcmuUapUDAACMBm1ldGhvZJSGlIxNYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yLmRlZmF1bHRfcHJvdmlkZXKUapUDAACMDHN0YXRpY21ldGhvZJSGlIwTYXBhY2hlX2JlYW0ubWV0cmljc5RqHAQAAGraUwAAhpSMGWFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHOUajcDAABq2lMAAIaUjCxhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdJRqNwMAAIwFY2xhc3OUhpSMMGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0Lm1heJRqNwMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdC5taW6UajcDAACMCWF0dHJpYnV0ZZSGlIwyYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5EaXN0cmlidXRpb25SZXN1bHQuY291bnSUajcDAACMCWF0dHJpYnV0ZZSGlIwwYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5EaXN0cmlidXRpb25SZXN1bHQuc3VtlGo3AwAAjAlhdHRyaWJ1dGWUhpSMMWFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0Lm1lYW6UajcDAACMCWF0dHJpYnV0ZZSGlIwlYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5HYXVnZVJlc3VsdJRqNwMAAIwFY2xhc3OUhpSMK2FwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuR2F1Z2VSZXN1bHQudmFsdWWUajcDAACMCWF0dHJpYnV0ZZSGlIwvYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5HYXVnZVJlc3VsdC50aW1lc3RhbXCUajcDAACMCWF0dHJpYnV0ZZSGlIwaYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWOUagkEAABq2lMAAIaUjCJhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzlGoJBAAAjAVjbGFzc5SGlIwwYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcy5nZXRfbmFtZXNwYWNllGoJBAAAjAxzdGF0aWNtZXRob2SUhpSMKmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuY291bnRlcpRqCQQAAIwMc3RhdGljbWV0aG9klIaUjC9hcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLmRpc3RyaWJ1dGlvbpRqCQQAAIwMc3RhdGljbWV0aG9klIaUjChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLmdhdWdllGoJBAAAjAxzdGF0aWNtZXRob2SUhpSMNGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXKUagkEAACMBWNsYXNzlIaUjDlhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLkRlbGVnYXRpbmdEaXN0cmlidXRpb26UagkEAACMBWNsYXNzlIaUjDJhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzLkRlbGVnYXRpbmdHYXVnZZRqCQQAAIwFY2xhc3OUhpSMKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXKUagkEAACMBWNsYXNzlIaUjC5hcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyLnN0ZXBzlGoJBAAAjAlhdHRyaWJ1dGWUhpSMLmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIubmFtZXOUagkEAACMCWF0dHJpYnV0ZZSGlIwzYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlci5uYW1lc3BhY2VzlGoJBAAAjAlhdHRyaWJ1dGWUhpSMMmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9uYW1llGoJBAAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc5RqCQQAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyLndpdGhfbmFtZXNwYWNllGoJBAAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2VzlGoJBAAAjAZtZXRob2SUhpSMMmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9zdGVwlGoJBAAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIud2l0aF9zdGVwc5RqCQQAAIwGbWV0aG9klIaUjB5hcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2WUav8DAABq2lMAAIaUjClhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuTWV0cmljTmFtZZRq/wMAAIwFY2xhc3OUhpSMN2FwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5NZXRyaWNOYW1lLnRvX3J1bm5lcl9hcGmUav8DAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLk1ldHJpY05hbWUuZnJvbV9ydW5uZXJfYXBplGr/AwAAjAxzdGF0aWNtZXRob2SUhpSMJWFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5NZXRyaWOUav8DAACMBWNsYXNzlIaUjCZhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlcpRq/wMAAIwFY2xhc3OUhpSMKmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5Db3VudGVyLmluY5Rq/wMAAIwGbWV0aG9klIaUjCphcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuQ291bnRlci5kZWOUav8DAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLkRpc3RyaWJ1dGlvbpRq/wMAAIwFY2xhc3OUhpSMMmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5EaXN0cmlidXRpb24udXBkYXRllGr/AwAAjAZtZXRob2SUhpSMJGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5HYXVnZZRq/wMAAIwFY2xhc3OUhpSMKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5HYXVnZS5zZXSUav8DAACMBm1ldGhvZJSGlIwkYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zlGq1AwAAatpTAACGlIw3YXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLnRvX3RpbWVzdGFtcF9wcm90b5RqtQMAAIwIZnVuY3Rpb26UhpSMNmFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy50b190aW1lc3RhbXBfc2Vjc5RqtQMAAIwIZnVuY3Rpb26UhpSMOmFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5leHRyYWN0X2NvdW50ZXJfdmFsdWWUarUDAACMCGZ1bmN0aW9ulIaUjDlhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MuZXh0cmFjdF9kaXN0cmlidXRpb26UarUDAACMCGZ1bmN0aW9ulIaUjDJhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MuY3JlYXRlX2xhYmVsc5RqtQMAAIwIZnVuY3Rpb26UhpSMN2FwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5pbnQ2NF91c2VyX2NvdW50ZXKUarUDAACMCGZ1bmN0aW9ulIaUjDJhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MuaW50NjRfY291bnRlcpRqtQMAAIwIZnVuY3Rpb26UhpSMPGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5pbnQ2NF91c2VyX2Rpc3RyaWJ1dGlvbpRqtQMAAIwIZnVuY3Rpb26UhpSMN2FwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5pbnQ2NF9kaXN0cmlidXRpb26UarUDAACMCGZ1bmN0aW9ulIaUjDVhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MuaW50NjRfdXNlcl9nYXVnZZRqtQMAAIwIZnVuY3Rpb26UhpSMMGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5pbnQ2NF9nYXVnZZRqtQMAAIwIZnVuY3Rpb26UhpSMO2FwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5jcmVhdGVfbW9uaXRvcmluZ19pbmZvlGq1AwAAjAhmdW5jdGlvbpSGlIwvYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmlzX2NvdW50ZXKUarUDAACMCGZ1bmN0aW9ulIaUjDRhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MuaXNfZGlzdHJpYnV0aW9ulGq1AwAAjAhmdW5jdGlvbpSGlIwtYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmlzX2dhdWdllGq1AwAAjAhmdW5jdGlvbpSGlIw8YXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmlzX3VzZXJfbW9uaXRvcmluZ19pbmZvlGq1AwAAjAhmdW5jdGlvbpSGlIxEYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmV4dHJhY3RfbWV0cmljX3Jlc3VsdF9tYXBfdmFsdWWUarUDAACMCGZ1bmN0aW9ulIaUjD1hcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MucGFyc2VfbmFtZXNwYWNlX2FuZF9uYW1llGq1AwAAjAhmdW5jdGlvbpSGlIwyYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmdldF9zdGVwX25hbWWUarUDAACMCGZ1bmN0aW9ulIaUjCthcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MudG9fa2V5lGq1AwAAjAhmdW5jdGlvbpSGlIw6YXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmRpc3RyaWJ1dGlvbl9jb21iaW5lcpRqtQMAAIwIZnVuY3Rpb26UhpSMMmFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcy5tYXhfdGltZXN0YW1wlGq1AwAAjAhmdW5jdGlvbpSGlIwwYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zLmNvbnNvbGlkYXRllGq1AwAAjAhmdW5jdGlvbpSGlIwOYXBhY2hlX2JlYW0ubWyUaooDAABq2lMAAIaUjBJhcGFjaGVfYmVhbS5tbC5nY3CUaloDAABq2lMAAIaUjBxhcGFjaGVfYmVhbS5tbC5nY3AuY2xvdWRfZGxwlGpOAwAAatpTAACGlIwwYXBhY2hlX2JlYW0ubWwuZ2NwLmNsb3VkX2RscC5NYXNrRGV0ZWN0ZWREZXRhaWxzlGpOAwAAjAVjbGFzc5SGlIw3YXBhY2hlX2JlYW0ubWwuZ2NwLmNsb3VkX2RscC5NYXNrRGV0ZWN0ZWREZXRhaWxzLmV4cGFuZJRqTgMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS5tbC5nY3AuY2xvdWRfZGxwLkluc3BlY3RGb3JEZXRhaWxzlGpOAwAAjAVjbGFzc5SGlIw1YXBhY2hlX2JlYW0ubWwuZ2NwLmNsb3VkX2RscC5JbnNwZWN0Rm9yRGV0YWlscy5leHBhbmSUak4DAACMBm1ldGhvZJSGlIwkYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1slGqjAwAAatpTAACGlIwtYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sLkRvY3VtZW50lGqjAwAAjAVjbGFzc5SGlIw1YXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sLkRvY3VtZW50LnRvX2RpY3SUaqMDAACMDHN0YXRpY21ldGhvZJSGlIwxYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sLkFubm90YXRlVGV4dJRqowMAAIwIZnVuY3Rpb26UhpSMLGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbF90ZXN0X2l0lGqDAwAAatpTAACGlIw0YXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sX3Rlc3RfaXQuZXh0cmFjdJRqgwMAAIwIZnVuY3Rpb26UhpSMRGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbF90ZXN0X2l0Lk5hdHVyYWxMYW5ndWFnZU1sVGVzdElUlGqDAwAAjAVjbGFzc5SGlIxaYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sX3Rlc3RfaXQuTmF0dXJhbExhbmd1YWdlTWxUZXN0SVQudGVzdF9hbmFseXppbmdfc3ludGF4lGqDAwAAjAZtZXRob2SUhpSMR2FwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbF90ZXN0X2l0Lk5hdHVyYWxMYW5ndWFnZU1sVGVzdElULklUlGqDAwAAjAlhdHRyaWJ1dGWUhpSMJmFwYWNoZV9iZWFtLm1sLmdjcC52aWRlb2ludGVsbGlnZW5jZW1slGqcAwAAatpTAACGlIw0YXBhY2hlX2JlYW0ubWwuZ2NwLnZpZGVvaW50ZWxsaWdlbmNlbWwuQW5ub3RhdGVWaWRlb5RqnAMAAIwFY2xhc3OUhpSMO2FwYWNoZV9iZWFtLm1sLmdjcC52aWRlb2ludGVsbGlnZW5jZW1sLkFubm90YXRlVmlkZW8uZXhwYW5klGqcAwAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLm1sLmdjcC52aWRlb2ludGVsbGlnZW5jZW1sLkFubm90YXRlVmlkZW9XaXRoQ29udGV4dJRqnAMAAIwFY2xhc3OUhpSMRmFwYWNoZV9iZWFtLm1sLmdjcC52aWRlb2ludGVsbGlnZW5jZW1sLkFubm90YXRlVmlkZW9XaXRoQ29udGV4dC5leHBhbmSUapwDAACMBm1ldGhvZJSGlIwbYXBhY2hlX2JlYW0ubWwuZ2NwLnZpc2lvbm1slGo/AwAAatpTAACGlIwpYXBhY2hlX2JlYW0ubWwuZ2NwLnZpc2lvbm1sLkFubm90YXRlSW1hZ2WUaj8DAACMBWNsYXNzlIaUdSiMOGFwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbC5Bbm5vdGF0ZUltYWdlLk1BWF9CQVRDSF9TSVpFlGo/AwAAjAlhdHRyaWJ1dGWUhpSMOGFwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbC5Bbm5vdGF0ZUltYWdlLk1JTl9CQVRDSF9TSVpFlGo/AwAAjAlhdHRyaWJ1dGWUhpSMMGFwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbC5Bbm5vdGF0ZUltYWdlLmV4cGFuZJRqPwMAAIwGbWV0aG9klIaUjDRhcGFjaGVfYmVhbS5tbC5nY3AudmlzaW9ubWwuQW5ub3RhdGVJbWFnZVdpdGhDb250ZXh0lGo/AwAAjAVjbGFzc5SGlIw7YXBhY2hlX2JlYW0ubWwuZ2NwLnZpc2lvbm1sLkFubm90YXRlSW1hZ2VXaXRoQ29udGV4dC5leHBhbmSUaj8DAACMBm1ldGhvZJSGlIwTYXBhY2hlX2JlYW0ub3B0aW9uc5RqNQMAAGraUwAAhpSMJGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc5RqUwMAAGraUwAAhpSMNGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnOUalMDAACMBWNsYXNzlIaUjERhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zLmZyb21fZGljdGlvbmFyeZRqUwMAAIwLY2xhc3NtZXRob2SUhpSMRGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMuZ2V0X2FsbF9vcHRpb25zlGpTAwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMuZGlzcGxheV9kYXRhlGpTAwAAjAZtZXRob2SUhpSMPGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMudmlld19hc5RqUwMAAIwGbWV0aG9klIaUjDRhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuU3RhbmRhcmRPcHRpb25zlGpTAwAAjAVjbGFzc5SGlIxDYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlN0YW5kYXJkT3B0aW9ucy5ERUZBVUxUX1JVTk5FUpRqUwMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuVHlwZU9wdGlvbnOUalMDAACMBWNsYXNzlIaUjDJhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuRGlyZWN0T3B0aW9uc5RqUwMAAIwFY2xhc3OUhpSMN2FwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnOUalMDAACMBWNsYXNzlIaUjExhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zLkJJR1FVRVJZX0FQSV9TRVJWSUNFlGpTAwAAjAlhdHRyaWJ1dGWUhpSMS2FwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMuQ09NUFVURV9BUElfU0VSVklDRZRqUwMAAIwJYXR0cmlidXRllIaUjEthcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zLlNUT1JBR0VfQVBJX1NFUlZJQ0WUalMDAACMCWF0dHJpYnV0ZZSGlIxJYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkdvb2dsZUNsb3VkT3B0aW9ucy5EQVRBRkxPV19FTkRQT0lOVJRqUwMAAIwJYXR0cmlidXRllIaUjEBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zLnZhbGlkYXRllGpTAwAAjAZtZXRob2SUhpSMPGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5IYWRvb3BGaWxlU3lzdGVtT3B0aW9uc5RqUwMAAIwFY2xhc3OUhpSMRWFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5IYWRvb3BGaWxlU3lzdGVtT3B0aW9ucy52YWxpZGF0ZZRqUwMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuV29ya2VyT3B0aW9uc5RqUwMAAIwFY2xhc3OUhpSMO2FwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Xb3JrZXJPcHRpb25zLnZhbGlkYXRllGpTAwAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5EZWJ1Z09wdGlvbnOUalMDAACMBWNsYXNzlIaUjEBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuRGVidWdPcHRpb25zLmFkZF9leHBlcmltZW50lGpTAwAAjAZtZXRob2SUhpSMQ2FwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5EZWJ1Z09wdGlvbnMubG9va3VwX2V4cGVyaW1lbnSUalMDAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlByb2ZpbGluZ09wdGlvbnOUalMDAACMBWNsYXNzlIaUjDFhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuU2V0dXBPcHRpb25zlGpTAwAAjAVjbGFzc5SGlIwwYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlRlc3RPcHRpb25zlGpTAwAAjAVjbGFzc5SGlIw5YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlRlc3RPcHRpb25zLnZhbGlkYXRllGpTAwAAjAZtZXRob2SUhpSMLmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3KUamYDAABq2lMAAIaUjEdhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvcpRqZgMAAIwFY2xhc3OUhpSMT2FwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLk9QVElPTlOUamYDAACMCWF0dHJpYnV0ZZSGlIxaYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX01JU1NJTkdfT1BUSU9OlGpmAwAAjAlhdHRyaWJ1dGWUhpSMXGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9NSVNTSU5HX0dDU19QQVRIlGpmAwAAjAlhdHRyaWJ1dGWUhpSMXGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9JTlZBTElEX0dDU19QQVRIlGpmAwAAjAlhdHRyaWJ1dGWUhpSMXmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9JTlZBTElEX0dDU19CVUNLRVSUamYDAACMCWF0dHJpYnV0ZZSGlIxeYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfR0NTX09CSkVDVJRqZgMAAIwJYXR0cmlidXRllIaUjFxhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9KT0JfTkFNRZRqZgMAAIwJYXR0cmlidXRllIaUjGJhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9QUk9KRUNUX05VTUJFUpRqZgMAAIwJYXR0cmlidXRllIaUjF5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9QUk9KRUNUX0lElGpmAwAAjAlhdHRyaWJ1dGWUhpSMYGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkVSUl9JTlZBTElEX05PVF9QT1NJVElWRZRqZgMAAIwJYXR0cmlidXRllIaUjGVhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9URVNUX01BVENIRVJfVFlQRZRqZgMAAIwJYXR0cmlidXRllIaUjGxhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FUlJfSU5WQUxJRF9URVNUX01BVENIRVJfVU5QSUNLTEFCTEWUamYDAACMCWF0dHJpYnV0ZZSGlIxqYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuRVJSX0lOVkFMSURfVFJBTlNGT1JNX05BTUVfTUFQUElOR5RqZgMAAIwJYXR0cmlidXRllIaUjE9hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5HQ1NfVVJJlGpmAwAAjAlhdHRyaWJ1dGWUhpSMUmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLkdDU19CVUNLRVSUamYDAACMCWF0dHJpYnV0ZZSGlIxSYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuR0NTX1NDSEVNRZRqZgMAAIwJYXR0cmlidXRllIaUjFNhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5KT0JfUEFUVEVSTpRqZgMAAIwJYXR0cmlidXRllIaUjFphcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5QUk9KRUNUX0lEX1BBVFRFUk6UamYDAACMCWF0dHJpYnV0ZZSGlIxeYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuUFJPSkVDVF9OVU1CRVJfUEFUVEVSTpRqZgMAAIwJYXR0cmlidXRllIaUjFhhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5FTkRQT0lOVF9QQVRURVJOlGpmAwAAjAlhdHRyaWJ1dGWUhpSMUGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRllGpmAwAAjAZtZXRob2SUhpSMWWFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX3NlcnZpY2VfcnVubmVylGpmAwAAjAZtZXRob2SUhpSMXGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX2Z1bGxfc3RyaW5nX21hdGNolGpmAwAAjAZtZXRob2SUhpSMWWFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRolGpmAwAAjAZtZXRob2SUhpSMXmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX2Nsb3VkX29wdGlvbnOUamYDAACMBm1ldGhvZJSGlIxjYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfd29ya2VyX3JlZ2lvbl96b25llGpmAwAAjAZtZXRob2SUhpSMa2FwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX29wdGlvbmFsX2FyZ3VtZW50X3Bvc2l0aXZllGpmAwAAjAZtZXRob2SUhpSMXWFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX3Rlc3RfbWF0Y2hlcpRqZgMAAIwGbWV0aG9klIaUjCJhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVylGrJAwAAatpTAACGlIwwYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVylGrJAwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVyLmlzX2FjY2Vzc2libGWUaskDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVyLmdldJRqyQMAAIwGbWV0aG9klIaUjDZhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlN0YXRpY1ZhbHVlUHJvdmlkZXKUaskDAACMBWNsYXNzlIaUjERhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlN0YXRpY1ZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZZRqyQMAAIwGbWV0aG9klIaUjDphcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlN0YXRpY1ZhbHVlUHJvdmlkZXIuZ2V0lGrJAwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXKUaskDAACMBWNsYXNzlIaUjEdhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9uc5RqyQMAAIwJYXR0cmlidXRllIaUjENhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmV4cGVyaW1lbnRzlGrJAwAAjAlhdHRyaWJ1dGWUhpSMRWFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZZRqyQMAAIwGbWV0aG9klIaUjEFhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmdldF92YWx1ZZRqyQMAAIwLY2xhc3NtZXRob2SUhpSMO2FwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIuZ2V0lGrJAwAAjAZtZXRob2SUhpSMS2FwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIuc2V0X3J1bnRpbWVfb3B0aW9uc5RqyQMAAIwLY2xhc3NtZXRob2SUhpSMM2FwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuY2hlY2tfYWNjZXNzaWJsZZRqyQMAAIwIZnVuY3Rpb26UhpSMFGFwYWNoZV9iZWFtLnBpcGVsaW5llGo4AwAAatpTAACGlIwdYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmWUajgDAACMBWNsYXNzlIaUjD1hcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZS5zZGtfdHJhbnNmb3Jtc193aXRoX2Vudmlyb25tZW50lGo4AwAAjAtjbGFzc21ldGhvZJSGlIwlYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUub3B0aW9uc5RqOAMAAIwJYXR0cmlidXRllIaUjClhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZS5yZXBsYWNlX2FsbJRqOAMAAIwGbWV0aG9klIaUjCFhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZS5ydW6UajgDAACMBm1ldGhvZJSGlIwjYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUudmlzaXSUajgDAACMBm1ldGhvZJSGlIwjYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUuYXBwbHmUajgDAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUudG9fcnVubmVyX2FwaZRqOAMAAIwGbWV0aG9klIaUjC1hcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZS5mcm9tX3J1bm5lcl9hcGmUajgDAACMDHN0YXRpY21ldGhvZJSGlIwnYXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRllGo4AwAAjAVjbGFzc5SGlIwvYXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRlLm1hdGNoZXOUajgDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm2UajgDAACMBm1ldGhvZJSGlIwXYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHmUakgDAABq2lMAAIaUjBthcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGmUaqgDAABq2lMAAIaUjDZhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGOUatcDAABq2lMAAIaUjFFhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWKUatcDAACMBWNsYXNzlIaUjFVhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VylGrXAwAAjAVjbGFzc5SGlIxhYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlci5QdXRBcnRpZmFjdJRq1wMAAIwGbWV0aG9klIaUjGRhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyLkNvbW1pdE1hbmlmZXN0lGrXAwAAjAZtZXRob2SUhpSMY2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5hZGRfQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcpRq1wMAAIwIZnVuY3Rpb26UhpSMU2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTdHVilGrXAwAAjAVjbGFzc5SGlIxXYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VylGrXAwAAjAVjbGFzc5SGlIxjYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjLkFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyLkdldE1hbmlmZXN0lGrXAwAAjAZtZXRob2SUhpSMY2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlci5HZXRBcnRpZmFjdJRq1wMAAIwGbWV0aG9klIaUjGVhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuYWRkX0FydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcpRq1wMAAIwIZnVuY3Rpb26UhpSMNmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfdXJuc5RqQAMAAGraUwAAhpSMTWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfdXJucy5Db21taXRNYW5pZmVzdFJlc3BvbnNllGpAAwAAjAVjbGFzc5SGlIxXYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl91cm5zLkNvbW1pdE1hbmlmZXN0UmVzcG9uc2UuQ29uc3RhbnRzlGpAAwAAjAVjbGFzc5SGlIxxYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl91cm5zLkNvbW1pdE1hbmlmZXN0UmVzcG9uc2UuQ29uc3RhbnRzLk5PX0FSVElGQUNUU19TVEFHRURfVE9LRU6UakADAACMCWF0dHJpYnV0ZZSGlIw3YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZXhwYW5zaW9uX2FwaV9wYjJfZ3JwY5RqZwMAAGraUwAAhpSMTGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2V4cGFuc2lvbl9hcGlfcGIyX2dycGMuRXhwYW5zaW9uU2VydmljZVN0dWKUamcDAACMBWNsYXNzlIaUjFBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjLkV4cGFuc2lvblNlcnZpY2VTZXJ2aWNlcpRqZwMAAIwFY2xhc3OUhpSMV2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2V4cGFuc2lvbl9hcGlfcGIyX2dycGMuRXhwYW5zaW9uU2VydmljZVNlcnZpY2VyLkV4cGFuZJRqZwMAAIwGbWV0aG9klIaUjF5hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjLmFkZF9FeHBhbnNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGpnAwAAjAhmdW5jdGlvbpSGlIwwYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjlGrCAwAAatpTAACGlIxCYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkNvbnRyb2xTdHVilGrCAwAAjAVjbGFzc5SGlIxGYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkNvbnRyb2xTZXJ2aWNlcpRqwgMAAIwFY2xhc3OUhpSMTmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5Db250cm9sU2VydmljZXIuQ29udHJvbJRqwgMAAIwGbWV0aG9klIaUjFRhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuYWRkX0JlYW1GbkNvbnRyb2xTZXJ2aWNlcl90b19zZXJ2ZXKUasIDAACMCGZ1bmN0aW9ulIaUjD9hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuRGF0YVN0dWKUasIDAACMBWNsYXNzlIaUjENhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuRGF0YVNlcnZpY2VylGrCAwAAjAVjbGFzc5SGlIxIYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkRhdGFTZXJ2aWNlci5EYXRhlGrCAwAAjAZtZXRob2SUhpSMUWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5hZGRfQmVhbUZuRGF0YVNlcnZpY2VyX3RvX3NlcnZlcpRqwgMAAIwIZnVuY3Rpb26UhpSMQGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5TdGF0ZVN0dWKUasIDAACMBWNsYXNzlIaUjERhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuU3RhdGVTZXJ2aWNlcpRqwgMAAIwFY2xhc3OUhpSMSmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5TdGF0ZVNlcnZpY2VyLlN0YXRllGrCAwAAjAZtZXRob2SUhpSMUmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5hZGRfQmVhbUZuU3RhdGVTZXJ2aWNlcl90b19zZXJ2ZXKUasIDAACMCGZ1bmN0aW9ulIaUjEJhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuTG9nZ2luZ1N0dWKUasIDAACMBWNsYXNzlIaUjEZhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuTG9nZ2luZ1NlcnZpY2VylGrCAwAAjAVjbGFzc5SGlIxOYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkxvZ2dpbmdTZXJ2aWNlci5Mb2dnaW5nlGrCAwAAjAZtZXRob2SUhpSMVGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5hZGRfQmVhbUZuTG9nZ2luZ1NlcnZpY2VyX3RvX3NlcnZlcpRqwgMAAIwIZnVuY3Rpb26UhpSMTWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTdHVilGrCAwAAjAVjbGFzc5SGlIxRYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkV4dGVybmFsV29ya2VyUG9vbFNlcnZpY2VylGrCAwAAjAVjbGFzc5SGlIxdYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkV4dGVybmFsV29ya2VyUG9vbFNlcnZpY2VyLlN0YXJ0V29ya2VylGrCAwAAjAZtZXRob2SUhpSMXGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlci5TdG9wV29ya2VylGrCAwAAjAZtZXRob2SUhpSMX2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5hZGRfQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU2VydmljZXJfdG9fc2VydmVylGrCAwAAjAhmdW5jdGlvbpSGlIxHYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbldvcmtlclN0YXR1c1N0dWKUasIDAACMBWNsYXNzlIaUjEthcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuV29ya2VyU3RhdHVzU2VydmljZXKUasIDAACMBWNsYXNzlIaUjFhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuV29ya2VyU3RhdHVzU2VydmljZXIuV29ya2VyU3RhdHVzlGrCAwAAjAZtZXRob2SUhpSMWWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5hZGRfQmVhbUZuV29ya2VyU3RhdHVzU2VydmljZXJfdG9fc2VydmVylGrCAwAAjAhmdW5jdGlvbpSGlIw5YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1faW50ZXJhY3RpdmVfYXBpX3BiMl9ncnBjlGqzAwAAatpTAACGlIwxYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwY5Rq7AMAAGraUwAAhpSMQGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVN0dWKUauwDAACMBWNsYXNzlIaUjERhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlcpRq7AMAAIwFY2xhc3OUhpSMTGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyLlByZXBhcmWUauwDAACMBm1ldGhvZJSGlIxIYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIuUnVulGrsAwAAjAZtZXRob2SUhpSMTGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyLkdldEpvYnOUauwDAACMBm1ldGhvZJSGlIxNYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIuR2V0U3RhdGWUauwDAACMBm1ldGhvZJSGlIxQYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIuR2V0UGlwZWxpbmWUauwDAACMBm1ldGhvZJSGlIxLYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIuQ2FuY2VslGrsAwAAjAZtZXRob2SUhpSMU2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyLkdldFN0YXRlU3RyZWFtlGrsAwAAjAZtZXRob2SUhpSMVWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyLkdldE1lc3NhZ2VTdHJlYW2UauwDAACMBm1ldGhvZJSGlIxSYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIuR2V0Sm9iTWV0cmljc5Rq7AMAAIwGbWV0aG9klIaUjFxhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlci5EZXNjcmliZVBpcGVsaW5lT3B0aW9uc5Rq7AMAAIwGbWV0aG9klIaUjFJhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLmFkZF9Kb2JTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGrsAwAAjAhmdW5jdGlvbpSGlIw3YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY5RqBwQAAGraUwAAhpSMTGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMuUHJvdmlzaW9uU2VydmljZVN0dWKUagcEAACMBWNsYXNzlIaUjFBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjLlByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlcpRqBwQAAIwFY2xhc3OUhpSMYWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMuUHJvdmlzaW9uU2VydmljZVNlcnZpY2VyLkdldFByb3Zpc2lvbkluZm+UagcEAACMBm1ldGhvZJSGlIxeYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYy5hZGRfUHJvdmlzaW9uU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcpRqBwQAAIwIZnVuY3Rpb26UhpSMNGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGOUapADAABq2lMAAIaUjEphcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl9ncnBjLlRlc3RTdHJlYW1TZXJ2aWNlU3R1YpRqkAMAAIwFY2xhc3OUhpSMTmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGMuVGVzdFN0cmVhbVNlcnZpY2VTZXJ2aWNlcpRqkAMAAIwFY2xhc3OUhpSMVWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGMuVGVzdFN0cmVhbVNlcnZpY2VTZXJ2aWNlci5FdmVudHOUapADAACMBm1ldGhvZJSGlIxcYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwYy5hZGRfVGVzdFN0cmVhbVNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXKUapADAACMCGZ1bmN0aW9ulIaUjDRhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zlGpsAwAAatpTAACGlIxCYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5CZWFtQ29uc3RhbnRzlGpsAwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5CZWFtQ29uc3RhbnRzLkNvbnN0YW50c5RqbAMAAIwFY2xhc3OUhpSMYWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuQmVhbUNvbnN0YW50cy5Db25zdGFudHMuTUlOX1RJTUVTVEFNUF9NSUxMSVOUamwDAACMCWF0dHJpYnV0ZZSGlIxhYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5CZWFtQ29uc3RhbnRzLkNvbnN0YW50cy5NQVhfVElNRVNUQU1QX01JTExJU5RqbAMAAIwJYXR0cmlidXRllIaUjG9hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLkJlYW1Db25zdGFudHMuQ29uc3RhbnRzLkdMT0JBTF9XSU5ET1dfTUFYX1RJTUVTVEFNUF9NSUxMSVOUamwDAACMCWF0dHJpYnV0ZZSGlIxGYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEFydGlmYWN0c5RqbAMAAIwFY2xhc3OUhpSMTGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRBcnRpZmFjdHMuUm9sZXOUamwDAACMBWNsYXNzlIaUjFdhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQXJ0aWZhY3RzLlJvbGVzLlNUQUdJTkdfVE+UamwDAACMCWF0dHJpYnV0ZZSGlIxMYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEFydGlmYWN0cy5UeXBlc5RqbAMAAIwFY2xhc3OUhpSMUWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRBcnRpZmFjdHMuVHlwZXMuRklMRZRqbAMAAIwJYXR0cmlidXRllIaUjFBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQXJ0aWZhY3RzLlR5cGVzLlVSTJRqbAMAAIwJYXR0cmlidXRllIaUjFVhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQXJ0aWZhY3RzLlR5cGVzLkVNQkVEREVElGpsAwAAjAlhdHRyaWJ1dGWUhpSMUWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRBcnRpZmFjdHMuVHlwZXMuUFlQSZRqbAMAAIwJYXR0cmlidXRllIaUjFJhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQXJ0aWZhY3RzLlR5cGVzLk1BVkVOlGpsAwAAjAlhdHRyaWJ1dGWUhpSMQ2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnOUamwDAACMBWNsYXNzlIaUjEhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW2UamwDAACMBWNsYXNzlIaUjE5hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0uQllURVOUamwDAACMCWF0dHJpYnV0ZZSGlIxUYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtLlNUUklOR19VVEY4lGpsAwAAjAlhdHRyaWJ1dGWUhpSMS2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bS5LVpRqbAMAAIwJYXR0cmlidXRllIaUjE1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0uQk9PTJRqbAMAAIwJYXR0cmlidXRllIaUjE9hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0uVkFSSU5UlGpsAwAAjAlhdHRyaWJ1dGWUhpSMT2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bS5ET1VCTEWUamwDAACMCWF0dHJpYnV0ZZSGlIxRYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtLklURVJBQkxFlGpsAwAAjAlhdHRyaWJ1dGWUhpSMTmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bS5USU1FUpRqbAMAAIwJYXR0cmlidXRllIaUjFhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0uSU5URVJWQUxfV0lORE9XlGpsAwAAjAlhdHRyaWJ1dGWUhpSMVmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bS5MRU5HVEhfUFJFRklYlGpsAwAAjAlhdHRyaWJ1dGWUhpSMVmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bS5HTE9CQUxfV0lORE9XlGpsAwAAjAlhdHRyaWJ1dGWUhpSMV2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bS5XSU5ET1dFRF9WQUxVRZRqbAMAAIwJYXR0cmlidXRllIaUjF1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0uUEFSQU1fV0lORE9XRURfVkFMVUWUamwDAACMCWF0dHJpYnV0ZZSGlIxeYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtLlNUQVRFX0JBQ0tFRF9JVEVSQUJMRZRqbAMAAIwJYXR0cmlidXRllIaUjExhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0uUk9XlGpsAwAAjAlhdHRyaWJ1dGWUhpSMSGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmREaXNwbGF5RGF0YZRqbAMAAIwFY2xhc3OUhpSMVGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmREaXNwbGF5RGF0YS5EaXNwbGF5RGF0YZRqbAMAAIwFY2xhc3OUhpSMZGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmREaXNwbGF5RGF0YS5EaXNwbGF5RGF0YS5MQUJFTExFRF9TVFJJTkeUamwDAACMCWF0dHJpYnV0ZZSGlIxJYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEVudmlyb25tZW50c5RqbAMAAIwFY2xhc3OUhpSMVmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRFbnZpcm9ubWVudHMuRW52aXJvbm1lbnRzlGpsAwAAjAVjbGFzc5SGlIxdYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEVudmlyb25tZW50cy5FbnZpcm9ubWVudHMuRE9DS0VSlGpsAwAAjAlhdHRyaWJ1dGWUhpSMXmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRFbnZpcm9ubWVudHMuRW52aXJvbm1lbnRzLlBST0NFU1OUamwDAACMCWF0dHJpYnV0ZZSGlIxfYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEVudmlyb25tZW50cy5FbnZpcm9ubWVudHMuRVhURVJOQUyUamwDAACMCWF0dHJpYnV0ZZSGlIxIYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zlGpsAwAAjAVjbGFzc5SGlIxaYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbWJpbmVDb21wb25lbnRzlGpsAwAAjAVjbGFzc5SGlIx1YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbWJpbmVDb21wb25lbnRzLkNPTUJJTkVfUEVSX0tFWV9QUkVDT01CSU5FlGpsAwAAjAlhdHRyaWJ1dGWUhpSMfWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21iaW5lQ29tcG9uZW50cy5DT01CSU5FX1BFUl9LRVlfTUVSR0VfQUNDVU1VTEFUT1JTlGpsAwAAjAlhdHRyaWJ1dGWUhpSMemFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21iaW5lQ29tcG9uZW50cy5DT01CSU5FX1BFUl9LRVlfRVhUUkFDVF9PVVRQVVRTlGpsAwAAjAlhdHRyaWJ1dGWUhpSMcWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21iaW5lQ29tcG9uZW50cy5DT01CSU5FX0dST1VQRURfVkFMVUVTlGpsAwAAjAlhdHRyaWJ1dGWUhpSMU2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21wb3NpdGVzlGpsAwAAjAVjbGFzc5SGlIxjYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbXBvc2l0ZXMuQ09NQklORV9QRVJfS0VZlGpsAwAAjAlhdHRyaWJ1dGWUhpSMZGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21wb3NpdGVzLkNPTUJJTkVfR0xPQkFMTFmUamwDAACMCWF0dHJpYnV0ZZSGlIxdYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbXBvc2l0ZXMuUkVTSFVGRkxFlGpsAwAAjAlhdHRyaWJ1dGWUhpSMX2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21wb3NpdGVzLldSSVRFX0ZJTEVTlGpsAwAAjAlhdHRyaWJ1dGWUhpSMXWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5EZXByZWNhdGVkUHJpbWl0aXZlc5RqbAMAAIwFY2xhc3OUhpSMYmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5EZXByZWNhdGVkUHJpbWl0aXZlcy5SRUFElGpsAwAAjAlhdHRyaWJ1dGWUhpSMaWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5EZXByZWNhdGVkUHJpbWl0aXZlcy5DUkVBVEVfVklFV5RqbAMAAIwJYXR0cmlidXRllIaUjFNhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuUHJpbWl0aXZlc5RqbAMAAIwFY2xhc3OUhpSMWmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzLlBBUl9ET5RqbAMAAIwJYXR0cmlidXRllIaUjFthcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuUHJpbWl0aXZlcy5GTEFUVEVOlGpsAwAAjAlhdHRyaWJ1dGWUhpSMYGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzLkdST1VQX0JZX0tFWZRqbAMAAIwJYXR0cmlidXRllIaUjFthcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuUHJpbWl0aXZlcy5JTVBVTFNFlGpsAwAAjAlhdHRyaWJ1dGWUhpSMYmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzLkFTU0lHTl9XSU5ET1dTlGpsAwAAjAlhdHRyaWJ1dGWUhpSMX2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzLlRFU1RfU1RSRUFNlGpsAwAAjAlhdHRyaWJ1dGWUhpSMX2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzLk1BUF9XSU5ET1dTlGpsAwAAjAlhdHRyaWJ1dGWUhpSMYWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzLk1FUkdFX1dJTkRPV1OUamwDAACMCWF0dHJpYnV0ZZSGlIxiYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLlNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHOUlQgAAQAAAAAAamwDAACMBWNsYXNzlIaUjHhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuU3BsaXR0YWJsZVBhckRvQ29tcG9uZW50cy5QQUlSX1dJVEhfUkVTVFJJQ1RJT06UamwDAACMCWF0dHJpYnV0ZZSGlIx0YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLlNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHMuU1BMSVRfUkVTVFJJQ1RJT06UamwDAACMCWF0dHJpYnV0ZZSGlIx5YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLlNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHMuUFJPQ0VTU19LRVlFRF9FTEVNRU5UU5RqbAMAAIwJYXR0cmlidXRllIaUjHNhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuU3BsaXR0YWJsZVBhckRvQ29tcG9uZW50cy5QUk9DRVNTX0VMRU1FTlRTlGpsAwAAjAlhdHRyaWJ1dGWUhpSMfmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5TcGxpdHRhYmxlUGFyRG9Db21wb25lbnRzLlNQTElUX0FORF9TSVpFX1JFU1RSSUNUSU9OU5RqbAMAAIwJYXR0cmlidXRllIaUjIphcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuU3BsaXR0YWJsZVBhckRvQ29tcG9uZW50cy5QUk9DRVNTX1NJWkVEX0VMRU1FTlRTX0FORF9SRVNUUklDVElPTlOUamwDAACMCWF0dHJpYnV0ZZSGlIxGYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFByb3RvY29sc5RqbAMAAIwFY2xhc3OUhpSMS2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQcm90b2NvbHMuRW51bZRqbAMAAIwFY2xhc3OUhpSMZWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQcm90b2NvbHMuRW51bS5MRUdBQ1lfUFJPR1JFU1NfUkVQT1JUSU5HlGpsAwAAjAlhdHRyaWJ1dGWUhpSMXmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQcm90b2NvbHMuRW51bS5QUk9HUkVTU19SRVBPUlRJTkeUamwDAACMCWF0dHJpYnV0ZZSGlIxZYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFByb3RvY29scy5FbnVtLldPUktFUl9TVEFUVVOUamwDAACMCWF0dHJpYnV0ZZSGlIxoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFByb3RvY29scy5FbnVtLk1VTFRJX0NPUkVfQlVORExFX1BST0NFU1NJTkeUamwDAACMCWF0dHJpYnV0ZZSGlIxJYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFJlcXVpcmVtZW50c5RqbAMAAIwFY2xhc3OUhpSMTmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRSZXF1aXJlbWVudHMuRW51bZRqbAMAAIwFY2xhc3OUhpSMa2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRSZXF1aXJlbWVudHMuRW51bS5SRVFVSVJFU19TVEFURUZVTF9QUk9DRVNTSU5HlGpsAwAAjAlhdHRyaWJ1dGWUhpSMa2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRSZXF1aXJlbWVudHMuRW51bS5SRVFVSVJFU19CVU5ETEVfRklOQUxJWkFUSU9OlGpsAwAAjAlhdHRyaWJ1dGWUhpSMZGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRSZXF1aXJlbWVudHMuRW51bS5SRVFVSVJFU19TVEFCTEVfSU5QVVSUamwDAACMCWF0dHJpYnV0ZZSGlIxpYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFJlcXVpcmVtZW50cy5FbnVtLlJFUVVJUkVTX1RJTUVfU09SVEVEX0lOUFVUlGpsAwAAjAlhdHRyaWJ1dGWUhpSMS2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRTaWRlSW5wdXRUeXBlc5RqbAMAAIwFY2xhc3OUhpSMUGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRTaWRlSW5wdXRUeXBlcy5FbnVtlGpsAwAAjAVjbGFzc5SGlIxZYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFNpZGVJbnB1dFR5cGVzLkVudW0uSVRFUkFCTEWUamwDAACMCWF0dHJpYnV0ZZSGlIxZYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFNpZGVJbnB1dFR5cGVzLkVudW0uTVVMVElNQVCUamwDAACMCWF0dHJpYnV0ZZSGlIwuYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmVuZHBvaW50c19wYjJfZ3JwY5Rq3gMAAGraUwAAhpSMOGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5leHRlcm5hbF90cmFuc2Zvcm1zX3BiMl9ncnBjlGoSBAAAatpTAACGlIwsYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX2dycGOUavoDAABq2lMAAIaUjCxhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJuc5RqMAMAAGraUwAAhpSMO2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvlGowAwAAjAVjbGFzc5SGlIxQYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm8uTW9uaXRvcmluZ0luZm9MYWJlbHOUajADAACMBWNsYXNzlIaUjFphcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mby5Nb25pdG9yaW5nSW5mb0xhYmVscy5UUkFOU0ZPUk2UajADAACMCWF0dHJpYnV0ZZSGlIxcYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm8uTW9uaXRvcmluZ0luZm9MYWJlbHMuUENPTExFQ1RJT06UajADAACMCWF0dHJpYnV0ZZSGlIxjYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm8uTW9uaXRvcmluZ0luZm9MYWJlbHMuV0lORE9XSU5HX1NUUkFURUdZlGowAwAAjAlhdHRyaWJ1dGWUhpSMVmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvLk1vbml0b3JpbmdJbmZvTGFiZWxzLkNPREVSlGowAwAAjAlhdHRyaWJ1dGWUhpSMXGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvLk1vbml0b3JpbmdJbmZvTGFiZWxzLkVOVklST05NRU5UlGowAwAAjAlhdHRyaWJ1dGWUhpSMWmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvLk1vbml0b3JpbmdJbmZvTGFiZWxzLk5BTUVTUEFDRZRqMAMAAIwJYXR0cmlidXRllIaUjFVhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mby5Nb25pdG9yaW5nSW5mb0xhYmVscy5OQU1FlGowAwAAjAlhdHRyaWJ1dGWUhpSMQGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3OUajADAACMBWNsYXNzlIaUjEVhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW2UajADAACMBWNsYXNzlIaUjFJhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW0uVVNFUl9DT1VOVEVSlGowAwAAjAlhdHRyaWJ1dGWUhpSMU2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3MuRW51bS5FTEVNRU5UX0NPVU5UlGowAwAAjAlhdHRyaWJ1dGWUhpSMV2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3MuRW51bS5TQU1QTEVEX0JZVEVfU0laRZRqMAMAAIwJYXR0cmlidXRllIaUjFhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW0uU1RBUlRfQlVORExFX01TRUNTlGowAwAAjAlhdHRyaWJ1dGWUhpSMWmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3MuRW51bS5QUk9DRVNTX0JVTkRMRV9NU0VDU5RqMAMAAIwJYXR0cmlidXRllIaUjFlhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW0uRklOSVNIX0JVTkRMRV9NU0VDU5RqMAMAAIwJYXR0cmlidXRllIaUjFFhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW0uVE9UQUxfTVNFQ1OUajADAACMCWF0dHJpYnV0ZZSGlIxfYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9TcGVjcy5FbnVtLlVTRVJfRElTVFJJQlVUSU9OX0NPVU5URVKUajADAACMCWF0dHJpYnV0ZZSGlIxUYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9TcGVjcy5FbnVtLldPUktfUkVNQUlOSU5HlGowAwAAjAlhdHRyaWJ1dGWUhpSMVGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3MuRW51bS5XT1JLX0NPTVBMRVRFRJRqMAMAAIwJYXR0cmlidXRllIaUjENhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1R5cGVVcm5zlGowAwAAjAVjbGFzc5SGlIxIYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9UeXBlVXJucy5FbnVtlGowAwAAjAVjbGFzc5SGlIxXYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9UeXBlVXJucy5FbnVtLlNVTV9JTlQ2NF9UWVBFlGowAwAAjAlhdHRyaWJ1dGWUhpSMYGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvVHlwZVVybnMuRW51bS5ESVNUUklCVVRJT05fSU5UNjRfVFlQRZRqMAMAAIwJYXR0cmlidXRllIaUjFphcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1R5cGVVcm5zLkVudW0uTEFURVNUX0lOVDY0X1RZUEWUajADAACMCWF0dHJpYnV0ZZSGlIxcYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9UeXBlVXJucy5FbnVtLkxBVEVTVF9ET1VCTEVTX1RZUEWUajADAACMCWF0dHJpYnV0ZZSGlIwrYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnNjaGVtYV9wYjJfZ3JwY5RqlwMAAGraUwAAhpSMOGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl9ncnBjlGrIAwAAatpTAACGlIw4YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnOUahEEAABq2lMAAIaUjExhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJucy5GaXhlZFdpbmRvd3NQYXlsb2FklGoRBAAAjAVjbGFzc5SGlIxRYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMuRml4ZWRXaW5kb3dzUGF5bG9hZC5FbnVtlGoRBAAAjAVjbGFzc5SGlIxcYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMuRml4ZWRXaW5kb3dzUGF5bG9hZC5FbnVtLlBST1BFUlRJRVOUahEEAACMCWF0dHJpYnV0ZZSGlIxNYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMuR2xvYmFsV2luZG93c1BheWxvYWSUahEEAACMBWNsYXNzlIaUjFJhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJucy5HbG9iYWxXaW5kb3dzUGF5bG9hZC5FbnVtlGoRBAAAjAVjbGFzc5SGlIxdYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMuR2xvYmFsV2luZG93c1BheWxvYWQuRW51bS5QUk9QRVJUSUVTlGoRBAAAjAlhdHRyaWJ1dGWUhpSMTmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zLlNlc3Npb25XaW5kb3dzUGF5bG9hZJRqEQQAAIwFY2xhc3OUhpSMU2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zLlNlc3Npb25XaW5kb3dzUGF5bG9hZC5FbnVtlGoRBAAAjAVjbGFzc5SGlIxeYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMuU2Vzc2lvbldpbmRvd3NQYXlsb2FkLkVudW0uUFJPUEVSVElFU5RqEQQAAIwJYXR0cmlidXRllIaUjE5hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJucy5TbGlkaW5nV2luZG93c1BheWxvYWSUahEEAACMBWNsYXNzlIaUjFNhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJucy5TbGlkaW5nV2luZG93c1BheWxvYWQuRW51bZRqEQQAAIwFY2xhc3OUhpSMXmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zLlNsaWRpbmdXaW5kb3dzUGF5bG9hZC5FbnVtLlBST1BFUlRJRVOUahEEAACMCWF0dHJpYnV0ZZSGlIwjYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuY29tbW9uX3VybnOUamkDAABq2lMAAIaUjCNhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5weXRob25fdXJuc5Rq8gMAAGraUwAAhpSMHWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LnV0aWxzlGrzAwAAatpTAACGlIw1YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkudXRpbHMuUHJvcGVydGllc0Zyb21FbnVtVmFsdWWUavMDAACMBWNsYXNzlIaUjD5hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS51dGlscy5Qcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZS5jb25zdGFudJRq8wMAAIwJYXR0cmlidXRllIaUjEFhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS51dGlscy5Qcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZS5sYWJlbF9wcm9wc5Rq8wMAAIwJYXR0cmlidXRllIaUjDphcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS51dGlscy5Qcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZS5zcGVjlGrzAwAAjAlhdHRyaWJ1dGWUhpSMOWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LnV0aWxzLlByb3BlcnRpZXNGcm9tRW51bVZhbHVlLnVybpRq8wMAAIwJYXR0cmlidXRllIaUjBJhcGFjaGVfYmVhbS5wdmFsdWWUajQDAABq2lMAAIaUjB5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb26UajQDAACMBWNsYXNzlIaUjChhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24ud2luZG93aW5nlGo0AwAAjAlhdHRyaWJ1dGWUhpSMJGFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbi5mcm9tX5RqNAMAAIwMc3RhdGljbWV0aG9klIaUjCxhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24udG9fcnVubmVyX2FwaZRqNAMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24uZnJvbV9ydW5uZXJfYXBplGo0AwAAjAxzdGF0aWNtZXRob2SUhpSMH2FwYWNoZV9iZWFtLnB2YWx1ZS5UYWdnZWRPdXRwdXSUajQDAACMBWNsYXNzlIaUjB5hcGFjaGVfYmVhbS5wdmFsdWUuQXNTaW5nbGV0b26UajQDAACMBWNsYXNzlIaUjCthcGFjaGVfYmVhbS5wdmFsdWUuQXNTaW5nbGV0b24uZWxlbWVudF90eXBllGo0AwAAjAlhdHRyaWJ1dGWUhpSMGWFwYWNoZV9iZWFtLnB2YWx1ZS5Bc0l0ZXKUajQDAACMBWNsYXNzlIaUjCZhcGFjaGVfYmVhbS5wdmFsdWUuQXNJdGVyLmVsZW1lbnRfdHlwZZRqNAMAAIwJYXR0cmlidXRllIaUjBlhcGFjaGVfYmVhbS5wdmFsdWUuQXNMaXN0lGo0AwAAjAVjbGFzc5SGlIwZYXBhY2hlX2JlYW0ucHZhbHVlLkFzRGljdJRqNAMAAIwFY2xhc3OUhpSMIWFwYWNoZV9iZWFtLnB2YWx1ZS5FbXB0eVNpZGVJbnB1dJRqNAMAAIwFY2xhc3OUhpSME2FwYWNoZV9iZWFtLnJ1bm5lcnOUapgDAABq2lMAAIaUjBxhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93lGqnAwAAatpTAACGlIw/YXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5llGoeBAAAatpTAACGlIxPYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5lLm1ldHJpY19tYXRjaGVyc5RqHgQAAIwIZnVuY3Rpb26UhpSMT2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2VfbWV0cmljc19waXBlbGluZS5Vc2VyTWV0cmljc0RvRm6Uah4EAACMBWNsYXNzlIaUjFxhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX21ldHJpY3NfcGlwZWxpbmUuVXNlck1ldHJpY3NEb0ZuLnN0YXJ0X2J1bmRsZZRqHgQAAIwGbWV0aG9klIaUjFdhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX21ldHJpY3NfcGlwZWxpbmUuVXNlck1ldHJpY3NEb0ZuLnByb2Nlc3OUah4EAACMBm1ldGhvZJSGlIxdYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5lLlVzZXJNZXRyaWNzRG9Gbi5maW5pc2hfYnVuZGxllGoeBAAAjAZtZXRob2SUhpSMTWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2VfbWV0cmljc19waXBlbGluZS5hcHBseV9hbmRfcnVulGoeBAAAjAhmdW5jdGlvbpSGlIxJYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9zdHJlYW1pbmdfbWV0cmljc19waXBlbGluZZRqfAMAAGraUwAAhpSMYmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2Vfc3RyZWFtaW5nX21ldHJpY3NfcGlwZWxpbmUuU3RyZWFtaW5nVXNlck1ldHJpY3NEb0ZulGp8AwAAjAVjbGFzc5SGlIxvYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9zdHJlYW1pbmdfbWV0cmljc19waXBlbGluZS5TdHJlYW1pbmdVc2VyTWV0cmljc0RvRm4uc3RhcnRfYnVuZGxllGp8AwAAjAZtZXRob2SUhpSMamFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2Vfc3RyZWFtaW5nX21ldHJpY3NfcGlwZWxpbmUuU3RyZWFtaW5nVXNlck1ldHJpY3NEb0ZuLnByb2Nlc3OUanwDAACMBm1ldGhvZJSGlIxwYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9zdHJlYW1pbmdfbWV0cmljc19waXBlbGluZS5TdHJlYW1pbmdVc2VyTWV0cmljc0RvRm4uZmluaXNoX2J1bmRsZZRqfAMAAIwGbWV0aG9klIaUjE1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX3N0cmVhbWluZ19tZXRyaWNzX3BpcGVsaW5lLnJ1bpRqfAMAAIwIZnVuY3Rpb26UhpSMLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljc5RqeQMAAGraUwAAhpSMPWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljcy5EYXRhZmxvd01ldHJpY3OUankDAACMBWNsYXNzlIaUjElhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MuRGF0YWZsb3dNZXRyaWNzLmFsbF9tZXRyaWNzlGp5AwAAjAZtZXRob2SUhpSMQ2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljcy5EYXRhZmxvd01ldHJpY3MucXVlcnmUankDAACMBm1ldGhvZJSGlIwyYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzLm1haW6UankDAACMCGZ1bmN0aW9ulIaUjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcpRqDgQAAGraUwAAhpSMO2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVylGoOBAAAjAVjbGFzc5SGlIxPYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuaXNfZm5hcGlfY29tcGF0aWJsZZRqDgQAAIwGbWV0aG9klIaUjFNhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5wb2xsX2Zvcl9qb2JfY29tcGxldGlvbpRqDgQAAIwMc3RhdGljbWV0aG9klIaUjFZhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvcpRqDgQAAIwMc3RhdGljbWV0aG9klIaUjE5hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5zaWRlX2lucHV0X3Zpc2l0b3KUag4EAACMDHN0YXRpY21ldGhvZJSGlIxRYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuZmxhdHRlbl9pbnB1dF92aXNpdG9ylGoOBAAAjAxzdGF0aWNtZXRob2SUhpSMSGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnJ1bl9waXBlbGluZZRqDgQAAIwGbWV0aG9klIaUjEdhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fSW1wdWxzZZRqDgQAAIwGbWV0aG9klIaUjEdhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fRmxhdHRlbpRqDgQAAIwGbWV0aG9klIaUjFFhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5hcHBseV9Xcml0ZVRvQmlnUXVlcnmUag4EAACMBm1ldGhvZJSGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuYXBwbHlfR3JvdXBCeUtleZRqDgQAAIwGbWV0aG9klIaUjEphcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fR3JvdXBCeUtleZRqDgQAAIwGbWV0aG9klIaUjFlhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fUnVubmVyQVBJUFRyYW5zZm9ybUhvbGRlcpRqDgQAAIwGbWV0aG9klIaUjEVhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fUGFyRG+Uag4EAACMBm1ldGhvZJSGlIxPYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuYXBwbHlfQ29tYmluZVZhbHVlc5RqDgQAAIwGbWV0aG9klIaUjE1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5ydW5fQ29tYmluZVZhbHVlc5RqDgQAAIwGbWV0aG9klIaUjEZhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5hcHBseV9SZWFklGoOBAAAjAZtZXRob2SUhpSMRGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnJ1bl9SZWFklGoOBAAAjAZtZXRob2SUhpSMTGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLnJ1bl9fTmF0aXZlV3JpdGWUag4EAACMBm1ldGhvZJSGlIxKYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIucnVuX1Rlc3RTdHJlYW2Uag4EAACMBm1ldGhvZJSGlIxYYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneZRqDgQAAIwLY2xhc3NtZXRob2SUhpSMWmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmRlc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneZRqDgQAAIwLY2xhc3NtZXRob2SUhpSMVWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLmJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmeUag4EAACMDHN0YXRpY21ldGhvZJSGlIxVYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuanNvbl9zdHJpbmdfdG9fYnl0ZV9hcnJheZRqDgQAAIwMc3RhdGljbWV0aG9klIaUjFRhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGWUag4EAACMBWNsYXNzlIaUjG5hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqDgQAAIwGbWV0aG9klIaUjFxhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc5RqDgQAAIwGbWV0aG9klIaUjFVhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5KcmhSZWFkUFRyYW5zZm9ybU92ZXJyaWRllGoOBAAAjAVjbGFzc5SGlIxvYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuSnJoUmVhZFBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtlGoOBAAAjAZtZXRob2SUhpSMXWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc5RqDgQAAIwGbWV0aG9klIaUjFJhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5SZWFkUFRyYW5zZm9ybU92ZXJyaWRllGoOBAAAjAVjbGFzc5SGlIxsYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIuUmVhZFBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtlGoOBAAAjAZtZXRob2SUhpSMWmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLlJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc5RqDgQAAIwGbWV0aG9klIaUjCZhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pb5RqYAMAAGraUwAAhpSMLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZZRq5gMAAGraUwAAhpSMOmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2WUauYDAACMBWNsYXNzlIaUjEBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlLmNvZGVylGrmAwAAjAlhdHRyaWJ1dGWUhpSMQWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2UucmVhZGVylGrmAwAAjAZtZXRob2SUhpSMRWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2UuaXNfYm91bmRlZJRq5gMAAIwGbWV0aG9klIaUjEBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVylGrmAwAAjAVjbGFzc5SGlIxYYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZVJlYWRlci5yZXR1cm5zX3dpbmRvd2VkX3ZhbHVlc5Rq5gMAAIwJYXR0cmlidXRllIaUjE1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVyLmdldF9wcm9ncmVzc5Rq5gMAAIwGbWV0aG9klIaUjFZhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVyLnJlcXVlc3RfZHluYW1pY19zcGxpdJRq5gMAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3OUauYDAACMBWNsYXNzlIaUjEVhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MucG9zaXRpb26UauYDAACMCWF0dHJpYnV0ZZSGlIxNYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzLnBlcmNlbnRfY29tcGxldGWUauYDAACMCWF0dHJpYnV0ZZSGlIxLYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzLnJlbWFpbmluZ190aW1llGrmAwAAjAlhdHRyaWJ1dGWUhpSMUmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5SZWFkZXJQcm9ncmVzcy5jb25zdW1lZF9zcGxpdF9wb2ludHOUauYDAACMCWF0dHJpYnV0ZZSGlIxTYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclByb2dyZXNzLnJlbWFpbmluZ19zcGxpdF9wb2ludHOUauYDAACMCWF0dHJpYnV0ZZSGlIw8YXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLlJlYWRlclBvc2l0aW9ulGrmAwAAjAVjbGFzc5SGlIw8YXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLkNvbmNhdFBvc2l0aW9ulGrmAwAAjAVjbGFzc5SGlIxBYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLkR5bmFtaWNTcGxpdFJlcXVlc3SUauYDAACMBWNsYXNzlIaUjEBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuRHluYW1pY1NwbGl0UmVzdWx0lGrmAwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLkR5bmFtaWNTcGxpdFJlc3VsdFdpdGhQb3NpdGlvbpRq5gMAAIwFY2xhc3OUhpSMOGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rlGrmAwAAjAVjbGFzc5SGlIw/YXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNpbmsud3JpdGVylGrmAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rV3JpdGVylGrmAwAAjAVjbGFzc5SGlIxUYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNpbmtXcml0ZXIudGFrZXNfd2luZG93ZWRfdmFsdWVzlGrmAwAAjAlhdHRyaWJ1dGWUhpSMRGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rV3JpdGVyLldyaXRllGrmAwAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXOUamQDAABq2lMAAIaUjEphcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZZRqZAMAAIwFY2xhc3OUhpSMUmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLm1hdGNoZXOUamQDAACMBm1ldGhvZJSGlIxkYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcy5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqZAMAAIwGbWV0aG9klIaUjEhhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLlJlYWRQVHJhbnNmb3JtT3ZlcnJpZGWUamQDAACMBWNsYXNzlIaUjFBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLlJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc5RqZAMAAIwGbWV0aG9klIaUjGJhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLlJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqZAMAAIwGbWV0aG9klIaUjEthcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGWUamQDAACMBWNsYXNzlIaUjFNhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc5RqZAMAAIwGbWV0aG9klIaUjGVhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqZAMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVylGoABAAAatpTAACGlIxEYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lci5UZXN0RGF0YWZsb3dSdW5uZXKUagAEAACMBWNsYXNzlIaUjFFhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyLlRlc3REYXRhZmxvd1J1bm5lci5ydW5fcGlwZWxpbmWUagAEAACMBm1ldGhvZJSGlIxWYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lci5UZXN0RGF0YWZsb3dSdW5uZXIuYnVpbGRfY29uc29sZV91cmyUagAEAACMBm1ldGhvZJSGlIxYYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lci5UZXN0RGF0YWZsb3dSdW5uZXIud2FpdF91bnRpbF9pbl9zdGF0ZZRqAAQAAIwGbWV0aG9klIaUjBphcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdJRqCAQAAGraUwAAhpSMKWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5lGqaAwAAatpTAACGlIw3YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkuQnVuZGxlRmFjdG9yeZRqmgMAAIwFY2xhc3OUhpSMRWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5LkJ1bmRsZUZhY3RvcnkuY3JlYXRlX2J1bmRsZZRqmgMAAIwGbWV0aG9klIaUjFVhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeS5CdW5kbGVGYWN0b3J5LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxllGqaAwAAjAZtZXRob2SUhpSMIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrlGpQAwAAatpTAACGlIwmYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suQ2xvY2uUalADAACMBWNsYXNzlIaUjCthcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5DbG9jay50aW1llGpQAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNsb2NrLkNsb2NrLmFkdmFuY2VfdGltZZRqUAMAAIwGbWV0aG9klIaUjCphcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5SZWFsQ2xvY2uUalADAACMBWNsYXNzlIaUjC9hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5SZWFsQ2xvY2sudGltZZRqUAMAAIwGbWV0aG9klIaUjCphcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5UZXN0Q2xvY2uUalADAACMBWNsYXNzlIaUjC9hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5UZXN0Q2xvY2sudGltZZRqUAMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5UZXN0Q2xvY2suYWR2YW5jZV90aW1llGpQAwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3KUatwDAABq2lMAAIaUjF1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yLkNvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3KUatwDAACMBWNsYXNzlIaUjGNhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yLkNvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3Iudmlld3OUatwDAACMCWF0dHJpYnV0ZZSGlIxtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvci5Db25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRq3AMAAIwGbWV0aG9klIaUjClhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljc5RqMgMAAGraUwAAhpSMN2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3OUajIDAACMBWNsYXNzlIaUjEZhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWNzLmNvbW1pdF9sb2dpY2FslGoyAwAAjAZtZXRob2SUhpSMR2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3MuY29tbWl0X3BoeXNpY2FslGoyAwAAjAZtZXRob2SUhpSMR2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3MudXBkYXRlX3BoeXNpY2FslGoyAwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3MucXVlcnmUajIDAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljlGoyAwAAjAVjbGFzc5SGlIxFYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljLmNvbW1pdF9sb2dpY2FslGoyAwAAjAZtZXRob2SUhpSMRmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYy5jb21taXRfcGh5c2ljYWyUajIDAACMBm1ldGhvZJSGlIxGYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljLnVwZGF0ZV9waHlzaWNhbJRqMgMAAIwGbWV0aG9klIaUjEhhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWMuZXh0cmFjdF9jb21taXR0ZWSUajIDAACMBm1ldGhvZJSGlIxPYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljLmV4dHJhY3RfbGF0ZXN0X2F0dGVtcHRlZJRqMgMAAIwGbWV0aG9klIaUjChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVylGr3AwAAatpTAACGlIw+YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5Td2l0Y2hpbmdEaXJlY3RSdW5uZXKUavcDAACMBWNsYXNzlIaUjFJhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLlN3aXRjaGluZ0RpcmVjdFJ1bm5lci5pc19mbmFwaV9jb21wYXRpYmxllGr3AwAAjAZtZXRob2SUhpSMS2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuU3dpdGNoaW5nRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZZRq9wMAAIwGbWV0aG9klIaUjEBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkJ1bmRsZUJhc2VkRGlyZWN0UnVubmVylGr3AwAAjAVjbGFzc5SGlIxUYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5CdW5kbGVCYXNlZERpcmVjdFJ1bm5lci5pc19mbmFwaV9jb21wYXRpYmxllGr3AwAAjAxzdGF0aWNtZXRob2SUhpSMTWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuQnVuZGxlQmFzZWREaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5llGr3AwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVylGr3AwAAjAlhdHRyaWJ1dGWUhpSMK2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGWUarcDAABq2lMAAIaUjD5hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkRpcmVjdFJ1bnRpbWVTdGF0ZZRqtwMAAIwFY2xhc3OUhpSMR2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuRGlyZWN0UnVudGltZVN0YXRlLmZvcl9zcGVjlGq3AwAAjAxzdGF0aWNtZXRob2SUhpSMO2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuQmFnUnVudGltZVN0YXRllGq3AwAAjAVjbGFzc5SGlIxAYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5CYWdSdW50aW1lU3RhdGUucmVhZJRqtwMAAIwGbWV0aG9klIaUjD9hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkJhZ1J1bnRpbWVTdGF0ZS5hZGSUarcDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5CYWdSdW50aW1lU3RhdGUuY2xlYXKUarcDAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5TZXRSdW50aW1lU3RhdGWUarcDAACMBWNsYXNzlIaUjEBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLlNldFJ1bnRpbWVTdGF0ZS5yZWFklGq3AwAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuU2V0UnVudGltZVN0YXRlLmFkZJRqtwMAAIwGbWV0aG9klIaUjEFhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLlNldFJ1bnRpbWVTdGF0ZS5jbGVhcpRqtwMAAIwGbWV0aG9klIaUjEdhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLlNldFJ1bnRpbWVTdGF0ZS5pc19tb2RpZmllZJRqtwMAAIwGbWV0aG9klIaUjEZhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkNvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRllGq3AwAAjAVjbGFzc5SGlIxLYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZS5yZWFklGq3AwAAjAZtZXRob2SUhpSMSmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUuYWRklGq3AwAAjAZtZXRob2SUhpSMTGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUuY2xlYXKUarcDAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5EaXJlY3RVc2VyU3RhdGVDb250ZXh0lGq3AwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5EaXJlY3RVc2VyU3RhdGVDb250ZXh0LmdldF90aW1lcpRqtwMAAIwGbWV0aG9klIaUjExhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkRpcmVjdFVzZXJTdGF0ZUNvbnRleHQuZ2V0X3N0YXRllGq3AwAAjAZtZXRob2SUhpSMSWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuRGlyZWN0VXNlclN0YXRlQ29udGV4dC5jb21taXSUarcDAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0lGr2AwAAatpTAACGlIw/YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0lGr2AwAAjAVjbGFzc5SGlIxHYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0Lm1ldHJpY3OUavYDAACMBm1ldGhvZJSGlIxRYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmlzX3Jvb3RfdHJhbnNmb3JtlGr2AwAAjAZtZXRob2SUhpSMTWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5oYW5kbGVfcmVzdWx0lGr2AwAAjAZtZXRob2SUhpSMVWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5nZXRfYWdncmVnYXRvcl92YWx1ZXOUavYDAACMBm1ldGhvZJSGlIxgYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LnNjaGVkdWxlX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzlGr2AwAAjAZtZXRob2SUhpSMVWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5nZXRfZXhlY3V0aW9uX2NvbnRleHSUavYDAACMBm1ldGhvZJSGlIxNYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmNyZWF0ZV9idW5kbGWUavYDAACMBm1ldGhvZJSGlIxdYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxllGr2AwAAjAZtZXRob2SUhpSMUmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dC5leHRyYWN0X2FsbF90aW1lcnOUavYDAACMBm1ldGhvZJSGlIxHYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmlzX2RvbmWUavYDAACMBm1ldGhvZJSGlIxeYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0LmdldF92YWx1ZV9vcl9ibG9ja191bnRpbF9yZWFkeZRq9gMAAIwGbWV0aG9klIaUjEFhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRGlyZWN0VW5tZXJnZWRTdGF0ZZRq9gMAAIwFY2xhc3OUhpSMP2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5EaXJlY3RTdGVwQ29udGV4dJRq9gMAAIwFY2xhc3OUhpSMT2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5EaXJlY3RTdGVwQ29udGV4dC5nZXRfa2V5ZWRfc3RhdGWUavYDAACMBm1ldGhvZJSGlIwjYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3KUaowDAABq2lMAAIaUjDVhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5UcmFuc2Zvcm1FeGVjdXRvcpRqjAMAAIwFY2xhc3OUhpSMOmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLlRyYW5zZm9ybUV4ZWN1dG9yLmNhbGyUaowDAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuVHJhbnNmb3JtRXhlY3V0b3IuYXR0ZW1wdF9jYWxslGqMAwAAjAZtZXRob2SUhpSMLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLkV4ZWN1dG9ylGqMAwAAjAVjbGFzc5SGlIwyYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuRXhlY3V0b3Iuc3RhcnSUaowDAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuRXhlY3V0b3IuYXdhaXRfY29tcGxldGlvbpRqjAMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5FeGVjdXRvci5zaHV0ZG93bpRqjAMAAIwGbWV0aG9klIaUjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtc5RqXQMAAGraUwAAhpSMQGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLkxpZnRlZENvbWJpbmVQZXJLZXmUal0DAACMBWNsYXNzlIaUjEdhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5MaWZ0ZWRDb21iaW5lUGVyS2V5LmV4cGFuZJRqXQMAAIwGbWV0aG9klIaUjE1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlc5RqXQMAAIwFY2xhc3OUhpSMWmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLnN0YXJ0X2J1bmRsZZRqXQMAAIwGbWV0aG9klIaUjFVhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5wcm9jZXNzlGpdAwAAjAZtZXRob2SUhpSMW2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLmZpbmlzaF9idW5kbGWUal0DAACMBm1ldGhvZJSGlIxgYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuZGVmYXVsdF90eXBlX2hpbnRzlGpdAwAAjAZtZXRob2SUhpSMOmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLkZpbmlzaENvbWJpbmWUal0DAACMBWNsYXNzlIaUjEJhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5GaW5pc2hDb21iaW5lLnByb2Nlc3OUal0DAACMBm1ldGhvZJSGlIxNYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuRmluaXNoQ29tYmluZS5kZWZhdWx0X3R5cGVfaGludHOUal0DAACMBm1ldGhvZJSGlIwsYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXKUakoDAABq2lMAAIaUjERhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TcGxpdHRhYmxlUGFyRG9PdmVycmlkZZRqSgMAAIwFY2xhc3OUhpSMTGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNwbGl0dGFibGVQYXJEb092ZXJyaWRlLm1hdGNoZXOUakoDAACMBm1ldGhvZJSGlIxeYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqSgMAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TcGxpdHRhYmxlUGFyRG+UakoDAACMBWNsYXNzlIaUjENhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TcGxpdHRhYmxlUGFyRG8uZXhwYW5klGpKAwAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLkVsZW1lbnRBbmRSZXN0cmljdGlvbpRqSgMAAIwFY2xhc3OUhpSMQmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlBhaXJXaXRoUmVzdHJpY3Rpb25GbpRqSgMAAIwFY2xhc3OUhpSMT2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlBhaXJXaXRoUmVzdHJpY3Rpb25Gbi5zdGFydF9idW5kbGWUakoDAACMBm1ldGhvZJSGlIxKYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUGFpcldpdGhSZXN0cmljdGlvbkZuLnByb2Nlc3OUakoDAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU3BsaXRSZXN0cmljdGlvbkZulGpKAwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU3BsaXRSZXN0cmljdGlvbkZuLnN0YXJ0X2J1bmRsZZRqSgMAAIwGbWV0aG9klIaUjEdhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TcGxpdFJlc3RyaWN0aW9uRm4ucHJvY2Vzc5RqSgMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5FeHBsb2RlV2luZG93c0ZulGpKAwAAjAVjbGFzc5SGlIxFYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuRXhwbG9kZVdpbmRvd3NGbi5wcm9jZXNzlGpKAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlJhbmRvbVVuaXF1ZUtleUZulGpKAwAAjAVjbGFzc5SGlIxGYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUmFuZG9tVW5pcXVlS2V5Rm4ucHJvY2Vzc5RqSgMAAIwGbWV0aG9klIaUjEFhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c5RqSgMAAIwFY2xhc3OUhpSMSGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NLZXllZEVsZW1lbnRzLmV4cGFuZJRqSgMAAIwGbWV0aG9klIaUjFphcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGWUakoDAACMBWNsYXNzlIaUjGJhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUubWF0Y2hlc5RqSgMAAIwGbWV0aG9klIaUjHRhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqSgMAAIwGbWV0aG9klIaUjFJhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zlGpKAwAAjAVjbGFzc5SGlIxZYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtcy5leHBhbmSUakoDAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzlGpKAwAAjAVjbGFzc5SGlIxDYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzLmV4cGFuZJRqSgMAAIwGbWV0aG9klIaUjEthcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRWxlbWVudHMubmV3X3Byb2Nlc3NfZm6UakoDAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0ZulGpKAwAAjAVjbGFzc5SGlIxDYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0ZuLnN0ZXBfY29udGV4dJRqSgMAAIwJYXR0cmlidXRllIaUjFJhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm4uc2V0X3Byb2Nlc3NfZWxlbWVudF9pbnZva2VylGpKAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NGbi5wcm9jZXNzlGpKAwAAjAZtZXRob2SUhpSMRWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNERlByb2Nlc3NFbGVtZW50SW52b2tlcpRqSgMAAIwFY2xhc3OUhpSMTGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHSUakoDAACMBWNsYXNzlIaUjFFhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TREZQcm9jZXNzRWxlbWVudEludm9rZXIudGVzdF9tZXRob2SUakoDAACMBm1ldGhvZJSGlIxcYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLmludm9rZV9wcm9jZXNzX2VsZW1lbnSUakoDAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudGVzdF9kaXJlY3RfcnVubmVylGofBAAAatpTAACGlIw+YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudGVzdF9kaXJlY3RfcnVubmVyLlRlc3REaXJlY3RSdW5uZXKUah8EAACMBWNsYXNzlIaUjEthcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXIuVGVzdERpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmWUah8EAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudGVzdF9zdHJlYW1faW1wbJRqOwMAAGraUwAAhpSMLmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3KUauQDAABq2lMAAIaUjElhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5lGrkAwAAjAVjbGFzc5SGlIxXYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5UcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeS5nZXRfZXZhbHVhdG9ylGrkAwAAjAZtZXRob2SUhpSMYmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuZ2V0X3Jvb3RfYnVuZGxlX3Byb3ZpZGVylGrkAwAAjAZtZXRob2SUhpSMYWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuc2hvdWxkX2V4ZWN1dGVfc2VyaWFsbHmUauQDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5Sb290QnVuZGxlUHJvdmlkZXKUauQDAACMBWNsYXNzlIaUjFJhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlJvb3RCdW5kbGVQcm92aWRlci5nZXRfcm9vdF9idW5kbGVzlGrkAwAAjAZtZXRob2SUhpSMSGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuRGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlcpRq5AMAAIwFY2xhc3OUhpSMWWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuRGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlci5nZXRfcm9vdF9idW5kbGVzlGrkAwAAjAZtZXRob2SUhpSMH2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWyUauEDAABq2lMAAIaUjC9hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsLlRyYW5zZm9ybVJlc3VsdJRq4QMAAIwFY2xhc3OUhpSMK2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwuVGltZXJGaXJpbmeUauEDAACMBWNsYXNzlIaUjC1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsLktleWVkV29ya0l0ZW2UauEDAACMBWNsYXNzlIaUjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlcpRqiwMAAGraUwAAhpSMPWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXKUaosDAACMBWNsYXNzlIaUjE9hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GlGqLAwAAjAlhdHRyaWJ1dGWUhpSMT2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX05FR19JTkaUaosDAACMCWF0dHJpYnV0ZZSGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIuV2F0ZXJtYXJrTWFuYWdlci5nZXRfd2F0ZXJtYXJrc5RqiwMAAIwGbWV0aG9klIaUjE9hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyLnVwZGF0ZV93YXRlcm1hcmtzlGqLAwAAjAZtZXRob2SUhpSMUGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIuZXh0cmFjdF9hbGxfdGltZXJzlGqLAwAAjAZtZXRob2SUhpSMH2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmWUalQDAABq2lMAAIaUjDZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2KUauIDAABq2lMAAIaUjEthcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IuQmFja2dyb3VuZENhY2hpbmdKb2KUauIDAACMBWNsYXNzlIaUjFNhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IuQmFja2dyb3VuZENhY2hpbmdKb2IuaXNfZG9uZZRq4gMAAIwGbWV0aG9klIaUjFZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IuQmFja2dyb3VuZENhY2hpbmdKb2IuaXNfcnVubmluZ5Rq4gMAAIwGbWV0aG9klIaUjFJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IuQmFja2dyb3VuZENhY2hpbmdKb2IuY2FuY2VslGriAwAAjAZtZXRob2SUhpSMXGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYi5hdHRlbXB0X3RvX3J1bl9iYWNrZ3JvdW5kX2NhY2hpbmdfam9ilGriAwAAjAhmdW5jdGlvbpSGlIxXYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5iYWNrZ3JvdW5kX2NhY2hpbmdfam9iLmlzX2JhY2tncm91bmRfY2FjaGluZ19qb2JfbmVlZGVklGriAwAAjAhmdW5jdGlvbpSGlIxKYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5iYWNrZ3JvdW5kX2NhY2hpbmdfam9iLmhhc19zb3VyY2VfdG9fY2FjaGWUauIDAACMCGZ1bmN0aW9ulIaUjF9hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IuYXR0ZW1wdF90b19jYW5jZWxfYmFja2dyb3VuZF9jYWNoaW5nX2pvYpRq4gMAAIwIZnVuY3Rpb26UhpSMWmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYi5hdHRlbXB0X3RvX3N0b3BfdGVzdF9zdHJlYW1fc2VydmljZZRq4gMAAIwIZnVuY3Rpb26UhpSMV2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYi5pc19hX3Rlc3Rfc3RyZWFtX3NlcnZpY2VfcnVubmluZ5Rq4gMAAIwIZnVuY3Rpb26UhpSMUWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYi5pc19zb3VyY2VfdG9fY2FjaGVfY2hhbmdlZJRq4gMAAIwIZnVuY3Rpb26UhpSMWGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYi5leHRyYWN0X3NvdXJjZV90b19jYWNoZV9zaWduYXR1cmWUauIDAACMCGZ1bmN0aW9ulIaUjC1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXKUasQDAABq2lMAAIaUjDphcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VylGrEAwAAjAVjbGFzc5SGlIxBYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5leGlzdHOUasQDAACMBm1ldGhvZJSGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5pc19sYXRlc3RfdmVyc2lvbpRqxAMAAIwGbWV0aG9klIaUjD9hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VyLnJlYWSUasQDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5zb3VyY2WUasQDAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5zaW5rlGrEAwAAjAZtZXRob2SUhpSMRmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5DYWNoZU1hbmFnZXIuc2F2ZV9wY29kZXKUasQDAACMBm1ldGhvZJSGlIxGYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlci5sb2FkX3Bjb2RlcpRqxAMAAIwGbWV0aG9klIaUjEJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VyLmNsZWFudXCUasQDAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlcpRqxAMAAIwFY2xhc3OUhpSMSmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIuZXhpc3RzlGrEAwAAjAZtZXRob2SUhpSMT2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIuc2F2ZV9wY29kZXKUasQDAACMBm1ldGhvZJSGlIxPYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlci5sb2FkX3Bjb2RlcpRqxAMAAIwGbWV0aG9klIaUjEhhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLnJlYWSUasQDAACMBm1ldGhvZJSGlIxKYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlci5zb3VyY2WUasQDAACMBm1ldGhvZJSGlIxIYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlci5zaW5rlGrEAwAAjAZtZXRob2SUhpSMS2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIuY2xlYW51cJRqxAMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuUmVhZENhY2hllGrEAwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLlJlYWRDYWNoZS5leHBhbmSUasQDAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLldyaXRlQ2FjaGWUasQDAACMBWNsYXNzlIaUjD9hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuV3JpdGVDYWNoZS5leHBhbmSUasQDAACMBm1ldGhvZJSGlIxFYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLlNhZmVGYXN0UHJpbWl0aXZlc0NvZGVylGrEAwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLlNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyLmVuY29kZZRqxAMAAIwGbWV0aG9klIaUjExhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIuZGVjb2RllGrEAwAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGluZ5RqDwQAAGraUwAAhpSMN2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGluZy5zdHJlYW1pbmdfY2FjaGWUasUDAABq2lMAAIaUjEZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hpbmcuc3RyZWFtaW5nX2NhY2hlLlN0cmVhbWluZ0NhY2hllGrFAwAAjAVjbGFzc5SGlIxNYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoaW5nLnN0cmVhbWluZ19jYWNoZS5TdHJlYW1pbmdDYWNoZS5SZWFkZXKUasUDAACMBWNsYXNzlIaUjFJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hpbmcuc3RyZWFtaW5nX2NhY2hlLlN0cmVhbWluZ0NhY2hlLlJlYWRlci5yZWFklGrFAwAAjAZtZXRob2SUhpSMTWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGluZy5zdHJlYW1pbmdfY2FjaGUuU3RyZWFtaW5nQ2FjaGUucmVhZGVylGrFAwAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheZRqdwMAAGraUwAAhpSMN2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5kaXNwbGF5X21hbmFnZXKUakcDAABq2lMAAIaUjEZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyLkRpc3BsYXlNYW5hZ2VylGpHAwAAjAVjbGFzc5SGlIxVYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmRpc3BsYXlfbWFuYWdlci5EaXNwbGF5TWFuYWdlci51cGRhdGVfZGlzcGxheZRqRwMAAIwGbWV0aG9klIaUjFxhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyLkRpc3BsYXlNYW5hZ2VyLnN0YXJ0X3BlcmlvZGljX3VwZGF0ZZRqRwMAAIwGbWV0aG9klIaUjFthcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyLkRpc3BsYXlNYW5hZ2VyLnN0b3BfcGVyaW9kaWNfdXBkYXRllGpHAwAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaJRqhwMAAGraUwAAhpSMS2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaC5uaWNlX3N0cpRqhwMAAIwIZnVuY3Rpb26UhpSMUGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaC5mb3JtYXRfc2FtcGxllGqHAwAAjAhmdW5jdGlvbpSGlIxbYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoLkludGVyYWN0aXZlUGlwZWxpbmVHcmFwaJRqhwMAAIwFY2xhc3OUhpSMdGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaC5JbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGgudXBkYXRlX3Bjb2xsZWN0aW9uX3N0YXRzlGqHAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5wY29sbF92aXN1YWxpemF0aW9ulGpbAwAAatpTAACGlIxFYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBjb2xsX3Zpc3VhbGl6YXRpb24udmlzdWFsaXpllGpbAwAAjAhmdW5jdGlvbpSGlIxUYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBjb2xsX3Zpc3VhbGl6YXRpb24uUENvbGxlY3Rpb25WaXN1YWxpemF0aW9ulGpbAwAAjAVjbGFzc5SGlIxnYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBjb2xsX3Zpc3VhbGl6YXRpb24uUENvbGxlY3Rpb25WaXN1YWxpemF0aW9uLmRpc3BsYXlfcGxhaW5fdGV4dJRqWwMAAIwGbWV0aG9klIaUjGNhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGNvbGxfdmlzdWFsaXphdGlvbi5QQ29sbGVjdGlvblZpc3VhbGl6YXRpb24uZGlzcGxheV9mYWNldHOUalsDAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBolGpyAwAAatpTAACGlIxEYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoLlBpcGVsaW5lR3JhcGiUanIDAACMBWNsYXNzlIaUjExhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGguUGlwZWxpbmVHcmFwaC5nZXRfZG90lGpyAwAAjAZtZXRob2SUhpSMUmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaC5QaXBlbGluZUdyYXBoLmRpc3BsYXlfZ3JhcGiUanIDAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVylGovAwAAatpTAACGlIxVYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlBpcGVsaW5lR3JhcGhSZW5kZXJlcpRqLwMAAIwFY2xhc3OUhpSMXGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5QaXBlbGluZUdyYXBoUmVuZGVyZXIub3B0aW9ulGovAwAAjAtjbGFzc21ldGhvZJSGlIxrYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlBpcGVsaW5lR3JhcGhSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGiUai8DAACMBm1ldGhvZJSGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLk11dGVSZW5kZXJlcpRqLwMAAIwFY2xhc3OUhpSMU2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5NdXRlUmVuZGVyZXIub3B0aW9ulGovAwAAjAtjbGFzc21ldGhvZJSGlIxiYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLk11dGVSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGiUai8DAACMBm1ldGhvZJSGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlRleHRSZW5kZXJlcpRqLwMAAIwFY2xhc3OUhpSMU2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5UZXh0UmVuZGVyZXIub3B0aW9ulGovAwAAjAtjbGFzc21ldGhvZJSGlIxiYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlRleHRSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGiUai8DAACMBm1ldGhvZJSGlIxNYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlB5ZG90UmVuZGVyZXKUai8DAACMBWNsYXNzlIaUjFRhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuUHlkb3RSZW5kZXJlci5vcHRpb26Uai8DAACMC2NsYXNzbWV0aG9klIaUjGNhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuUHlkb3RSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGiUai8DAACMBm1ldGhvZJSGlIxMYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLmdldF9yZW5kZXJlcpRqLwMAAIwIZnVuY3Rpb26UhpSMMGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfYmVhbZRqIAQAAGraUwAAhpSMOGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfYmVhbS5PcHRpb25zlGogBAAAjAVjbGFzc5SGlIxOYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtLk9wdGlvbnMuZW5hYmxlX2NhcHR1cmVfcmVwbGF5lGogBAAAjAlhdHRyaWJ1dGWUhpSMS2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfYmVhbS5PcHRpb25zLmNhcHR1cmFibGVfc291cmNlc5RqIAQAAIwJYXR0cmlidXRllIaUjElhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2JlYW0uT3B0aW9ucy5jYXB0dXJlX2R1cmF0aW9ulGogBAAAjAlhdHRyaWJ1dGWUhpSMNmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfYmVhbS53YXRjaJRqIAQAAIwIZnVuY3Rpb26UhpSMNWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfYmVhbS5zaG93lGogBAAAjAhmdW5jdGlvbpSGlIxEYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtLmV2aWN0X2NhcHR1cmVkX2RhdGGUaiAEAACMCGZ1bmN0aW9ulIaUjDdhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50lGpFAwAAatpTAACGlIxDYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5jdXJyZW50X2VudpRqRQMAAIwIZnVuY3Rpb26UhpSMP2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQubmV3X2VudpRqRQMAAIwIZnVuY3Rpb26UhpSMTmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudJRqRQMAAIwFY2xhc3OUhpSMVmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5vcHRpb25zlGpFAwAAjAlhdHRyaWJ1dGWUhpSMYmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5pc19weV92ZXJzaW9uX3JlYWR5lGpFAwAAjAlhdHRyaWJ1dGWUhpSMY2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5pc19pbnRlcmFjdGl2ZV9yZWFkeZRqRQMAAIwJYXR0cmlidXRllIaUjFxhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQuaXNfaW5faXB5dGhvbpRqRQMAAIwJYXR0cmlidXRllIaUjF1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQuaXNfaW5fbm90ZWJvb2uUakUDAACMCWF0dHJpYnV0ZZSGlIxWYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LmNsZWFudXCUakUDAACMBm1ldGhvZJSGlIxUYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LndhdGNolGpFAwAAjAZtZXRob2SUhpSMV2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudC53YXRjaGluZ5RqRQMAAIwGbWV0aG9klIaUjGBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQuc2V0X2NhY2hlX21hbmFnZXKUakUDAACMBm1ldGhvZJSGlIxcYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LmNhY2hlX21hbmFnZXKUakUDAACMBm1ldGhvZJSGlIxiYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LnNldF9waXBlbGluZV9yZXN1bHSUakUDAACMBm1ldGhvZJSGlIxkYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LmV2aWN0X3BpcGVsaW5lX3Jlc3VsdJRqRQMAAIwGbWV0aG9klIaUjF5hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQucGlwZWxpbmVfcmVzdWx0lGpFAwAAjAZtZXRob2SUhpSMaWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5zZXRfYmFja2dyb3VuZF9jYWNoaW5nX2pvYpRqRQMAAIwGbWV0aG9klIaUjGlhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQuZ2V0X2JhY2tncm91bmRfY2FjaGluZ19qb2KUakUDAACMBm1ldGhvZJSGlIxxYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LnNldF90ZXN0X3N0cmVhbV9zZXJ2aWNlX2NvbnRyb2xsZXKUakUDAACMBm1ldGhvZJSGlIxxYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LmdldF90ZXN0X3N0cmVhbV9zZXJ2aWNlX2NvbnRyb2xsZXKUakUDAACMBm1ldGhvZJSGlIxzYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LmV2aWN0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcpRqRQMAAIwGbWV0aG9klIaUjFxhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQuaXNfdGVybWluYXRlZJRqRQMAAIwGbWV0aG9klIaUjGphcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQuc2V0X2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJllGpFAwAAjAZtZXRob2SUhpSMamFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5nZXRfY2FjaGVkX3NvdXJjZV9zaWduYXR1cmWUakUDAACMBm1ldGhvZJSGlIxsYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50LmV2aWN0X2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJllGpFAwAAjAZtZXRob2SUhpSMY2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudC50cmFja191c2VyX3BpcGVsaW5lc5RqRQMAAIwGbWV0aG9klIaUjGVhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQudHJhY2tlZF91c2VyX3BpcGVsaW5lc5RqRQMAAIwJYXR0cmlidXRllIaUjGhhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQubWFya19wY29sbGVjdGlvbl9jb21wdXRlZJRqRQMAAIwGbWV0aG9klIaUjGphcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQuZXZpY3RfY29tcHV0ZWRfcGNvbGxlY3Rpb25zlGpFAwAAjAZtZXRob2SUhpSMZGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5jb21wdXRlZF9wY29sbGVjdGlvbnOUakUDAACMCWF0dHJpYnV0ZZSGlIwyYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXKUapkDAABq2lMAAIaUjERhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lcpRqmQMAAIwFY2xhc3OUhpSMWGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyLmlzX2ZuYXBpX2NvbXBhdGlibGWUapkDAACMBm1ldGhvZJSGlIxWYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuSW50ZXJhY3RpdmVSdW5uZXIuc2V0X3JlbmRlcl9vcHRpb26UapkDAACMBm1ldGhvZJSGlIxSYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuSW50ZXJhY3RpdmVSdW5uZXIuc3RhcnRfc2Vzc2lvbpRqmQMAAIwGbWV0aG9klIaUjFBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lci5lbmRfc2Vzc2lvbpRqmQMAAIwGbWV0aG9klIaUjExhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lci5jbGVhbnVwlGqZAwAAjAZtZXRob2SUhpSMSmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyLmFwcGx5lGqZAwAAjAZtZXRob2SUhpSMUWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyLnJ1bl9waXBlbGluZZRqmQMAAIwGbWV0aG9klIaUjEFhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5QaXBlbGluZVJlc3VsdJRqmQMAAIwFY2xhc3OUhpSMU2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLlBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNolGqZAwAAjAZtZXRob2SUhpSMRWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLlBpcGVsaW5lUmVzdWx0LmdldJRqmQMAAIwGbWV0aG9klIaUjEhhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5QaXBlbGluZVJlc3VsdC5jYW5jZWyUapkDAACMBm1ldGhvZJSGlIwnYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zlGrTAwAAatpTAACGlIw3YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmNhcHR1cmVfY29udHJvbJRqMQMAAGraUwAAhpSMRmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5jYXB0dXJlX2NvbnRyb2wuQ2FwdHVyZUNvbnRyb2yUajEDAACMBWNsYXNzlIaUjF5hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLm9wdGlvbnMuY2FwdHVyZV9jb250cm9sLkNhcHR1cmVDb250cm9sLmlzX2NhcHR1cmVfc2l6ZV9yZWFjaGVklGoxAwAAjAZtZXRob2SUhpSMS2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5jYXB0dXJlX2NvbnRyb2wuZXZpY3RfY2FwdHVyZWRfZGF0YZRqMQMAAIwIZnVuY3Rpb26UhpSMO2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5pbnRlcmFjdGl2ZV9vcHRpb25zlGoZBAAAatpTAACGlIxOYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmludGVyYWN0aXZlX29wdGlvbnMuSW50ZXJhY3RpdmVPcHRpb25zlGoZBAAAjAVjbGFzc5SGlIxeYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmludGVyYWN0aXZlX29wdGlvbnMuSW50ZXJhY3RpdmVPcHRpb25zLmNhcHR1cmVfY29udHJvbJRqGQQAAIwJYXR0cmlidXRllIaUjDFhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVylGrDAwAAatpTAACGlIxCYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUFuYWx5emVylGrDAwAAjAVjbGFzc5SGlIxQYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUFuYWx5emVyLnBpcGVsaW5lX2luZm+UasMDAACMBm1ldGhvZJSGlIxcYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUFuYWx5emVyLnBpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGWUasMDAACMBm1ldGhvZJSGlIxaYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUFuYWx5emVyLnRsX3JlZmVyZW5jZWRfcGNvbGxfaWRzlGrDAwAAjAZtZXRob2SUhpSMWGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplci50bF9yZXF1aXJlZF90cmFuc19pZHOUasMDAACMBm1ldGhvZJSGlIxOYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUFuYWx5emVyLmNhY2hlc191c2VklGrDAwAAjAZtZXRob2SUhpSMUWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplci5yZWFkX2NhY2hlX2lkc5RqwwMAAIwGbWV0aG9klIaUjFJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIud3JpdGVfY2FjaGVfaWRzlGrDAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVJbmZvlGrDAwAAjAVjbGFzc5SGlIxPYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8uYWxsX3Bjb2xsZWN0aW9uc5RqwwMAAIwGbWV0aG9klIaUjFBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mby5sZWFmX3Bjb2xsZWN0aW9uc5RqwwMAAIwGbWV0aG9klIaUjEdhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mby5wcm9kdWNlcpRqwwMAAIwGbWV0aG9klIaUjEphcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mby5jYWNoZV9sYWJlbJRqwwMAAIwGbWV0aG9klIaUjElhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mby5EZXJpdmF0aW9ulGrDAwAAjAVjbGFzc5SGlIxVYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8uRGVyaXZhdGlvbi5jYWNoZV9sYWJlbJRqwwMAAIwGbWV0aG9klIaUjE5hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mby5EZXJpdmF0aW9uLmpzb26UasMDAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5zZXRfcHJvdG9fbWFwlGrDAwAAjAhmdW5jdGlvbpSGlIwxYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9mcmFnbWVudJRqygMAAGraUwAAhpSMQmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfZnJhZ21lbnQuUGlwZWxpbmVGcmFnbWVudJRqygMAAIwFY2xhc3OUhpSMUmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfZnJhZ21lbnQuUGlwZWxpbmVGcmFnbWVudC5kZWR1Y2VfZnJhZ21lbnSUasoDAACMBm1ldGhvZJSGlIxGYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9mcmFnbWVudC5QaXBlbGluZUZyYWdtZW50LnJ1bpRqygMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnSUaj0DAABq2lMAAIaUjEZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuUGlwZWxpbmVJbnN0cnVtZW50lGo9AwAAjAVjbGFzc5SGlIxiYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudC5pbnN0cnVtZW50ZWRfcGlwZWxpbmVfcHJvdG+Uaj0DAACMBm1ldGhvZJSGlIxoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudC5iYWNrZ3JvdW5kX2NhY2hpbmdfcGlwZWxpbmVfcHJvdG+Uaj0DAACMBm1ldGhvZJSGlIxcYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudC5oYXNfdW5ib3VuZGVkX3NvdXJjZXOUaj0DAACMCWF0dHJpYnV0ZZSGlIxRYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudC5jYWNoZWFibGVzlGo9AwAAjAlhdHRyaWJ1dGWUhpSMWWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5QaXBlbGluZUluc3RydW1lbnQucGNvbGxzX3RvX3Bjb2xsX2lklGo9AwAAjAlhdHRyaWJ1dGWUhpSMXmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5QaXBlbGluZUluc3RydW1lbnQub3JpZ2luYWxfcGlwZWxpbmVfcHJvdG+Uaj0DAACMCWF0dHJpYnV0ZZSGlIxYYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudC5vcmlnaW5hbF9waXBlbGluZZRqPQMAAIwJYXR0cmlidXRllIaUjFRhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuUGlwZWxpbmVJbnN0cnVtZW50LnVzZXJfcGlwZWxpbmWUaj0DAACMCWF0dHJpYnV0ZZSGlIxhYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudC5ydW5uZXJfcGNvbGxfdG9fdXNlcl9wY29sbJRqPQMAAIwJYXR0cmlidXRllIaUjFFhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuUGlwZWxpbmVJbnN0cnVtZW50Lmluc3RydW1lbnSUaj0DAACMBm1ldGhvZJSGlIxRYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudC5wcmVwcm9jZXNzlGo9AwAAjAZtZXRob2SUhpSMUGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5QaXBlbGluZUluc3RydW1lbnQuY2FjaGVfa2V5lGo9AwAAjAZtZXRob2SUhpSMYGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5QaXBlbGluZUluc3RydW1lbnQuY2FjaGVhYmxlX3Zhcl9ieV9wY29sbF9pZJRqPQMAAIwGbWV0aG9klIaUjE1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuYnVpbGRfcGlwZWxpbmVfaW5zdHJ1bWVudJRqPQMAAIwIZnVuY3Rpb26UhpSMPmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5jYWNoZWFibGVzlGo9AwAAjAhmdW5jdGlvbpSGlIxBYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LmNhY2hlYWJsZV9rZXmUaj0DAACMCGZ1bmN0aW9ulIaUjElhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuaGFzX3VuYm91bmRlZF9zb3VyY2VzlGo9AwAAjAhmdW5jdGlvbpSGlIxFYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LnVuYm91bmRlZF9zb3VyY2VzlGo9AwAAjAhmdW5jdGlvbpSGlIxGYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LnBjb2xsc190b19wY29sbF9pZJRqPQMAAIwIZnVuY3Rpb26UhpSMJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUudGVzdGluZ5RqRAMAAGraUwAAhpSMNGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUudGVzdGluZy5tb2NrX2lweXRob26Uaq4DAABq2lMAAIaUjEVhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnRlc3RpbmcubW9ja19pcHl0aG9uLm1vY2tfZ2V0X2lweXRob26Uaq4DAACMCGZ1bmN0aW9ulIaUjDphcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnRlc3RpbmcucGlwZWxpbmVfYXNzZXJ0aW9ulGr9AwAAatpTAACGlIxQYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLnBpcGVsaW5lX2Fzc2VydGlvbi5hc3NlcnRfcGlwZWxpbmVfZXF1YWyUav0DAACMCGZ1bmN0aW9ulIaUjFZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnRlc3RpbmcucGlwZWxpbmVfYXNzZXJ0aW9uLmFzc2VydF9waXBlbGluZV9wcm90b19lcXVhbJRq/QMAAIwIZnVuY3Rpb26UhpSMHGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWyUagwEAABq2lMAAIaUjCJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVybmFsLm5hbWVzlGoXBAAAatpTAACGlIwXYXBhY2hlX2JlYW0ucnVubmVycy5qb2KUarQDAABq2lMAAIaUjB9hcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VylGpJAwAAatpTAACGlIwwYXBhY2hlX2JlYW0ucnVubmVycy5qb2IubWFuYWdlci5Eb2NrZXJSUENNYW5hZ2VylGpJAwAAjAVjbGFzc5SGlIwdYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHOUap8DAABq2lMAAIaUjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi51dGlscy5kaWN0X3RvX3N0cnVjdJRqnwMAAIwIZnVuY3Rpb26UhpSMLGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzLnN0cnVjdF90b19kaWN0lGqfAwAAjAhmdW5jdGlvbpSGlIwkYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0lGpwAwAAatpTAACGlIw0YXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dJRqcAMAAIwFY2xhc3OUhpSMRGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQuYWRkX3JlcXVpcmVtZW50lGpwAwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQucmVxdWlyZW1lbnRzlGpwAwAAjAZtZXRob2SUhpSMT2FwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQuY29kZXJfaWRfZnJvbV9lbGVtZW50X3R5cGWUanADAACMBm1ldGhvZJSGlIxPYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dC5lbGVtZW50X3R5cGVfZnJvbV9jb2Rlcl9pZJRqcAMAAIwGbWV0aG9klIaUjERhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0LmZyb21fcnVubmVyX2FwaZRqcAMAAIwMc3RhdGljbWV0aG9klIaUjEJhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0LnRvX3J1bm5lcl9hcGmUanADAACMBm1ldGhvZJSGlIxLYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dC5kZWZhdWx0X2Vudmlyb25tZW50X2lklGpwAwAAjAZtZXRob2SUhpSMGmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVylGo6AwAAatpTAACGlIwpYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXKUajoDAACMBWNsYXNzlIaUjC1hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lci5ydW6UajoDAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIucnVuX2FzeW5jlGo6AwAAjAZtZXRob2SUhpSMNmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyLnJ1bl9waXBlbGluZZRqOgMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lci5hcHBseZRqOgMAAIwGbWV0aG9klIaUjDphcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lci52aXNpdF90cmFuc2Zvcm1zlGo6AwAAjAZtZXRob2SUhpSMOmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyLmFwcGx5X1BUcmFuc2Zvcm2UajoDAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIucnVuX3RyYW5zZm9ybZRqOgMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lci5pc19mbmFwaV9jb21wYXRpYmxllGo6AwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGWUajoDAACMBWNsYXNzlIaUjDBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLlVOS05PV06UajoDAACMCWF0dHJpYnV0ZZSGlIwxYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5TVEFSVElOR5RqOgMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLlNUT1BQRUSUajoDAACMCWF0dHJpYnV0ZZSGlIwwYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5SVU5OSU5HlGo6AwAAjAlhdHRyaWJ1dGWUhpSMLWFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUuRE9ORZRqOgMAAIwJYXR0cmlidXRllIaUjC9hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkZBSUxFRJRqOgMAAIwJYXR0cmlidXRllIaUjDJhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkNBTkNFTExFRJRqOgMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLlVQREFURUSUajoDAACMCWF0dHJpYnV0ZZSGlIwxYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5EUkFJTklOR5RqOgMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkRSQUlORUSUajoDAACMCWF0dHJpYnV0ZZSGlIwwYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZS5QRU5ESU5HlGo6AwAAjAlhdHRyaWJ1dGWUhpSMM2FwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUuQ0FOQ0VMTElOR5RqOgMAAIwJYXR0cmlidXRllIaUjDVhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLlVOUkVDT0dOSVpFRJRqOgMAAIwJYXR0cmlidXRllIaUjDRhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLmlzX3Rlcm1pbmFslGo6AwAAjAtjbGFzc21ldGhvZJSGlIwpYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHSUajoDAACMBWNsYXNzlIaUjC9hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdC5zdGF0ZZRqOgMAAIwJYXR0cmlidXRllIaUjDthcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaJRqOgMAAIwGbWV0aG9klIaUjDBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdC5jYW5jZWyUajoDAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQubWV0cmljc5RqOgMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdC5hZ2dyZWdhdGVkX3ZhbHVlc5RqOgMAAIwGbWV0aG9klIaUjB1hcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlsc5RqWQMAAGraUwAAhpSMMGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlNwbGl0UmVzdWx0UHJpbWFyeZRqWQMAAIwFY2xhc3OUhpSMPmFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlNwbGl0UmVzdWx0UHJpbWFyeS5wcmltYXJ5X3ZhbHVllGpZAwAAjAlhdHRyaWJ1dGWUhpSMMWFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlNwbGl0UmVzdWx0UmVzaWR1YWyUalkDAACMBWNsYXNzlIaUjENhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5TcGxpdFJlc3VsdFJlc2lkdWFsLmN1cnJlbnRfd2F0ZXJtYXJrlGpZAwAAjAlhdHRyaWJ1dGWUhpSMRGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlNwbGl0UmVzdWx0UmVzaWR1YWwuZGVmZXJyZWRfdGltZXN0YW1wlGpZAwAAjAlhdHRyaWJ1dGWUhpSMQGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlNwbGl0UmVzdWx0UmVzaWR1YWwucmVzaWR1YWxfdmFsdWWUalkDAACMCWF0dHJpYnV0ZZSGlIw6YXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlcpRqWQMAAIwFY2xhc3OUhpSMTmFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbpRqWQMAAIwGbWV0aG9klIaUjERhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5UaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VyLnRyeV9jbGFpbZRqWQMAAIwGbWV0aG9klIaUjEphcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5UaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VyLmRlZmVyX3JlbWFpbmRlcpRqWQMAAIwGbWV0aG9klIaUjEVhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5UaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmWUalkDAACMBm1ldGhvZJSGlIxLYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlci5jdXJyZW50X3Byb2dyZXNzlGpZAwAAjAZtZXRob2SUhpSMRGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIudHJ5X3NwbGl0lGpZAwAAjAZtZXRob2SUhpSMSmFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuZGVmZXJyZWRfc3RhdHVzlGpZAwAAjAZtZXRob2SUhpSMNGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlJlc3RyaWN0aW9uVHJhY2tlclZpZXeUalkDAACMBWNsYXNzlIaUjEhhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5SZXN0cmljdGlvblRyYWNrZXJWaWV3LmN1cnJlbnRfcmVzdHJpY3Rpb26UalkDAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuUmVzdHJpY3Rpb25UcmFja2VyVmlldy50cnlfY2xhaW2UalkDAACMBm1ldGhvZJSGlIxEYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuUmVzdHJpY3Rpb25UcmFja2VyVmlldy5kZWZlcl9yZW1haW5kZXKUalkDAACMBm1ldGhvZJSGlIw6YXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuVGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvcpRqWQMAAIwFY2xhc3OUhpSMTmFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlRocmVhZHNhZmVXYXRlcm1hcmtFc3RpbWF0b3IuZ2V0X2VzdGltYXRvcl9zdGF0ZZRqWQMAAIwGbWV0aG9klIaUjExhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5UaHJlYWRzYWZlV2F0ZXJtYXJrRXN0aW1hdG9yLmN1cnJlbnRfd2F0ZXJtYXJrlGpZAwAAjAZtZXRob2SUhpSMTGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlRocmVhZHNhZmVXYXRlcm1hcmtFc3RpbWF0b3Iub2JzZXJ2ZV90aW1lc3RhbXCUalkDAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuTm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVylGpZAwAAjAVjbGFzc5SGlIxUYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuTm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyLmluaXRpYWxfZXN0aW1hdG9yX3N0YXRllGpZAwAAjAZtZXRob2SUhpSMV2FwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLk5vT3BXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlci5jcmVhdGVfd2F0ZXJtYXJrX2VzdGltYXRvcpRqWQMAAIwGbWV0aG9klIaUjBNhcGFjaGVfYmVhbS50ZXN0aW5nlGqAAwAAatpTAACGlIweYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzlGrSAwAAatpTAACGlIwmYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmuUanEDAABq2lMAAIaUjC1hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHOUanUDAABq2lMAAIaUjDthcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbJRqIQQAAGraUwAAhpSMQmFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVsLlBlcnNvbpRqIQQAAIwFY2xhc3OUhpSMQ2FwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVsLkF1Y3Rpb26UaiEEAACMBWNsYXNzlIaUjD9hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbC5CaWSUaiEEAACMBWNsYXNzlIaUjDdhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVylGpLAwAAatpTAACGlIxHYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlci5OZXhtYXJrTGF1bmNoZXKUaksDAACMBWNsYXNzlIaUjFJhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVyLk5leG1hcmtMYXVuY2hlci5wYXJzZV9hcmdzlGpLAwAAjAZtZXRob2SUhpSMV2FwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyLmdlbmVyYXRlX2V2ZW50c5RqSwMAAIwGbWV0aG9klIaUjFFhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVyLk5leG1hcmtMYXVuY2hlci5ydW5fcXVlcnmUaksDAACMBm1ldGhvZJSGlIxPYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlci5OZXhtYXJrTGF1bmNoZXIuY2xlYW51cJRqSwMAAIwGbWV0aG9klIaUjEthcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVyLk5leG1hcmtMYXVuY2hlci5ydW6UaksDAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlslGqGAwAAatpTAACGlIw7YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsLkNvbW1hbmSUaoYDAACMBWNsYXNzlIaUjD9hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwuQ29tbWFuZC5ydW6UaoYDAACMBm1ldGhvZJSGlIxAYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsLlBhcnNlRXZlbnRGbpRqhgMAAIwFY2xhc3OUhpSMSGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbC5QYXJzZUV2ZW50Rm4ucHJvY2Vzc5RqhgMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwuZGlzcGxheZRqhgMAAIwIZnVuY3Rpb26UhpSMLmFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXOUalIDAABq2lMAAIaUjDVhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MJRqGwQAAGraUwAAhpSMOmFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkwLmxvYWSUahsEAACMCGZ1bmN0aW9ulIaUjDVhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MZRqlgMAAGraUwAAhpSMOmFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkxLmxvYWSUapYDAACMCGZ1bmN0aW9ulIaUjDVhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MpRqegMAAGraUwAAhpSMOmFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkyLmxvYWSUanoDAACMCGZ1bmN0aW9ulIaUjCZhcGFjaGVfYmVhbS50ZXN0aW5nLmRhdGF0eXBlX2luZmVyZW5jZZRq9QMAAGraUwAAhpSMOWFwYWNoZV9iZWFtLnRlc3RpbmcuZGF0YXR5cGVfaW5mZXJlbmNlLmluZmVyX2VsZW1lbnRfdHlwZZRq9QMAAIwIZnVuY3Rpb26UhpSMPWFwYWNoZV9iZWFtLnRlc3RpbmcuZGF0YXR5cGVfaW5mZXJlbmNlLmluZmVyX3R5cGVoaW50c19zY2hlbWGUavUDAACMCGZ1bmN0aW9ulIaUjDhhcGFjaGVfYmVhbS50ZXN0aW5nLmRhdGF0eXBlX2luZmVyZW5jZS5pbmZlcl9hdnJvX3NjaGVtYZRq9QMAAIwIZnVuY3Rpb26UhpSMO2FwYWNoZV9iZWFtLnRlc3RpbmcuZGF0YXR5cGVfaW5mZXJlbmNlLmluZmVyX3B5YXJyb3dfc2NoZW1hlGr1AwAAjAhmdW5jdGlvbpSGlIwkYXBhY2hlX2JlYW0udGVzdGluZy5leHRyYV9hc3NlcnRpb25zlGrZAwAAatpTAACGlIw5YXBhY2hlX2JlYW0udGVzdGluZy5leHRyYV9hc3NlcnRpb25zLkV4dHJhQXNzZXJ0aW9uc01peGlulGrZAwAAjAVjbGFzc5SGlIxUYXBhY2hlX2JlYW0udGVzdGluZy5leHRyYV9hc3NlcnRpb25zLkV4dHJhQXNzZXJ0aW9uc01peGluLmFzc2VydFVuaGFzaGFibGVDb3VudEVxdWFslGrZAwAAjAZtZXRob2SUhpSMHmFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0c5RqMwMAAGraUwAAhpSMNmFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlsc5RqkQMAAGraUwAAhpSMQWFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5wYXJzZV9zdGVwlGqRAwAAjAhmdW5jdGlvbpSGlIxaYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLnNwbGl0X21ldHJpY3NfYnlfbmFtZXNwYWNlX2FuZF9uYW1llGqRAwAAjAhmdW5jdGlvbpSGlIxQYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLmdldF9nZW5lcmljX2Rpc3RyaWJ1dGlvbnOUapEDAACMCGZ1bmN0aW9ulIaUjFRhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuZ2V0X2FsbF9kaXN0cmlidXRpb25zX2J5X3R5cGWUapEDAACMCGZ1bmN0aW9ulIaUjExhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuZ2V0X2Rpc3RyaWJ1dGlvbl9kaWN0lGqRAwAAjAhmdW5jdGlvbpSGlIxEYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1ldHJpY3NSZWFkZXKUapEDAACMBWNsYXNzlIaUjE9hcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWV0cmljc1JlYWRlci5wdWJsaXNoZXJzlGqRAwAAjAlhdHRyaWJ1dGWUhpSMVGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZXRyaWNzUmVhZGVyLnB1Ymxpc2hfbWV0cmljc5RqkQMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWV0cmljlGqRAwAAjAVjbGFzc5SGlIxFYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1ldHJpYy5hc19kaWN0lGqRAwAAjAZtZXRob2SUhpSMRGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5Db3VudGVyTWV0cmljlGqRAwAAjAVjbGFzc5SGlIxJYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLkRpc3RyaWJ1dGlvbk1ldHJpY5RqkQMAAIwFY2xhc3OUhpSMRGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5SdW50aW1lTWV0cmljlGqRAwAAjAVjbGFzc5SGlIxOYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLkNvbnNvbGVNZXRyaWNzUHVibGlzaGVylGqRAwAAjAVjbGFzc5SGlIxWYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLkNvbnNvbGVNZXRyaWNzUHVibGlzaGVyLnB1Ymxpc2iUapEDAACMBm1ldGhvZJSGlIxPYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLkJpZ1F1ZXJ5TWV0cmljc1B1Ymxpc2hlcpRqkQMAAIwFY2xhc3OUhpSMV2FwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5CaWdRdWVyeU1ldHJpY3NQdWJsaXNoZXIucHVibGlzaJRqkQMAAIwGbWV0aG9klIaUjEVhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuQmlnUXVlcnlDbGllbnSUapEDAACMBWNsYXNzlIaUjEphcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuQmlnUXVlcnlDbGllbnQuc2F2ZZRqkQMAAIwGbWV0aG9klIaUjEJhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWVhc3VyZVRpbWWUapEDAACMBWNsYXNzlIaUjE9hcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWVhc3VyZVRpbWUuc3RhcnRfYnVuZGxllGqRAwAAjAZtZXRob2SUhpSMUGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZWFzdXJlVGltZS5maW5pc2hfYnVuZGxllGqRAwAAjAZtZXRob2SUhpSMSmFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZWFzdXJlVGltZS5wcm9jZXNzlGqRAwAAjAZtZXRob2SUhpSMQ2FwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZWFzdXJlQnl0ZXOUapEDAACMBWNsYXNzlIaUjElhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWVhc3VyZUJ5dGVzLkxBQkVMlGqRAwAAjAlhdHRyaWJ1dGWUhpSMS2FwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZWFzdXJlQnl0ZXMucHJvY2Vzc5RqkQMAAIwGbWV0aG9klIaUjERhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuQ291bnRNZXNzYWdlc5RqkQMAAIwFY2xhc3OUhpSMSmFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5Db3VudE1lc3NhZ2VzLkxBQkVMlGqRAwAAjAlhdHRyaWJ1dGWUhpSMTGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5Db3VudE1lc3NhZ2VzLnByb2Nlc3OUapEDAACMBm1ldGhvZJSGlIwoYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLnN0cmVhbWluZ5RqXgMAAGraUwAAhpSMSGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5zdHJlYW1pbmcuZ3JvdXBfYnlfa2V5X3N0cmVhbWluZ19waXBlbGluZZRqXAMAAGraUwAAhpSMTGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5zdHJlYW1pbmcuZ3JvdXBfYnlfa2V5X3N0cmVhbWluZ19waXBlbGluZS5ydW6UalwDAACMCGZ1bmN0aW9ulIaUjCphcGFjaGVfYmVhbS50ZXN0aW5nLm1ldHJpY19yZXN1bHRfbWF0Y2hlcnOUar8DAABq2lMAAIaUjD5hcGFjaGVfYmVhbS50ZXN0aW5nLm1ldHJpY19yZXN1bHRfbWF0Y2hlcnMuTWV0cmljUmVzdWx0TWF0Y2hlcpRqvwMAAIwFY2xhc3OUhpSMSmFwYWNoZV9iZWFtLnRlc3RpbmcubWV0cmljX3Jlc3VsdF9tYXRjaGVycy5NZXRyaWNSZXN1bHRNYXRjaGVyLmRlc2NyaWJlX3RvlGq/AwAAjAZtZXRob2SUhpSMUGFwYWNoZV9iZWFtLnRlc3RpbmcubWV0cmljX3Jlc3VsdF9tYXRjaGVycy5NZXRyaWNSZXN1bHRNYXRjaGVyLmRlc2NyaWJlX21pc21hdGNolGq/AwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnRlc3RpbmcubWV0cmljX3Jlc3VsdF9tYXRjaGVycy5EaXN0cmlidXRpb25NYXRjaGVylGq/AwAAjAVjbGFzc5SGlIxKYXBhY2hlX2JlYW0udGVzdGluZy5tZXRyaWNfcmVzdWx0X21hdGNoZXJzLkRpc3RyaWJ1dGlvbk1hdGNoZXIuZGVzY3JpYmVfdG+Uar8DAACMBm1ldGhvZJSGlIxQYXBhY2hlX2JlYW0udGVzdGluZy5tZXRyaWNfcmVzdWx0X21hdGNoZXJzLkRpc3RyaWJ1dGlvbk1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUar8DAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0udGVzdGluZy5tZXRyaWNfcmVzdWx0X21hdGNoZXJzLnZlcmlmeV9hbGyUar8DAACMCGZ1bmN0aW9ulIaUjCZhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVyc5RqXwMAAGraUwAAhpSMO2FwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLlBpcGVsaW5lU3RhdGVNYXRjaGVylGpfAwAAjAVjbGFzc5SGlIxHYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMuUGlwZWxpbmVTdGF0ZU1hdGNoZXIuZGVzY3JpYmVfdG+Ual8DAACMBm1ldGhvZJSGlIxNYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMuUGlwZWxpbmVTdGF0ZU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUal8DAACMBm1ldGhvZJSGlIxJYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMucmV0cnlfb25faW9fZXJyb3JfYW5kX3NlcnZlcl9lcnJvcpRqXwMAAIwIZnVuY3Rpb26UhpSMOmFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLkZpbGVDaGVja3N1bU1hdGNoZXKUal8DAACMBWNsYXNzlIaUjEZhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5GaWxlQ2hlY2tzdW1NYXRjaGVyLmRlc2NyaWJlX3RvlGpfAwAAjAZtZXRob2SUhpSMTGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLkZpbGVDaGVja3N1bU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUal8DAACMBm1ldGhvZJSGlIwmYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmWUas0DAABq2lMAAIaUjDZhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5wYXJzZV9ieXRlX3NpemWUas0DAACMCGZ1bmN0aW9ulIaUjDNhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5kaXZfcm91bmRfdXCUas0DAACMCGZ1bmN0aW9ulIaUjDFhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5yb3RhdGVfa2V5lGrNAwAAjAhmdW5jdGlvbpSGlIw9YXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuaW5pdGlhbF9zcGxpdHRpbmdfemlwZpRqzQMAAIwIZnVuY3Rpb26UhpSMNGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1N0ZXCUas0DAACMBWNsYXNzlIaUjEFhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTdGVwLnN0YXJ0X2J1bmRsZZRqzQMAAIwGbWV0aG9klIaUjEJhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTdGVwLmZpbmlzaF9idW5kbGWUas0DAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU3RlcC5wcm9jZXNzlGrNAwAAjAZtZXRob2SUhpSMSmFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLk5vbkxpcXVpZFNoYXJkaW5nT2Zmc2V0UmFuZ2VUcmFja2VylGrNAwAAjAVjbGFzc5SGlIxUYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuTm9uTGlxdWlkU2hhcmRpbmdPZmZzZXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0lGrNAwAAjAZtZXRob2SUhpSMVWFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLk5vbkxpcXVpZFNoYXJkaW5nT2Zmc2V0UmFuZ2VUcmFja2VyLmNoZWNrcG9pbnSUas0DAACMBm1ldGhvZJSGlIxKYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU0RGU3RlcFJlc3RyaWN0aW9uUHJvdmlkZXKUas0DAACMBWNsYXNzlIaUjF5hcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTREZTdGVwUmVzdHJpY3Rpb25Qcm92aWRlci5pbml0aWFsX3Jlc3RyaWN0aW9ulGrNAwAAjAZtZXRob2SUhpSMWWFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyLmNyZWF0ZV90cmFja2VylGrNAwAAjAZtZXRob2SUhpSMUGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyLnNwbGl0lGrNAwAAjAZtZXRob2SUhpSMW2FwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyLnJlc3RyaWN0aW9uX3NpemWUas0DAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuZ2V0X3N5bnRoZXRpY19zZGZfc3RlcJRqzQMAAIwIZnVuY3Rpb26UhpSMNmFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZZRqzQMAAIwFY2xhc3OUhpSMQ2FwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZS5lbGVtZW50X3NpemWUas0DAACMCWF0dHJpYnV0ZZSGlIxEYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU291cmNlLmVzdGltYXRlX3NpemWUas0DAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU291cmNlLnNwbGl0lGrNAwAAjAZtZXRob2SUhpSMSGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcpRqzQMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UucmVhZJRqzQMAAIwGbWV0aG9klIaUjEthcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXKUas0DAACMBm1ldGhvZJSGlIxMYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU0RGU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlcpRqzQMAAIwFY2xhc3OUhpSMYGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIuaW5pdGlhbF9yZXN0cmljdGlvbpRqzQMAAIwGbWV0aG9klIaUjFthcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTREZTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVyLmNyZWF0ZV90cmFja2VylGrNAwAAjAZtZXRob2SUhpSMUmFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIuc3BsaXSUas0DAACMBm1ldGhvZJSGlIxdYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU0RGU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlci5yZXN0cmljdGlvbl9zaXpllGrNAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERkFzU291cmNllGrNAwAAjAVjbGFzc5SGlIxDYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU0RGQXNTb3VyY2UucHJvY2Vzc5RqzQMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TaHVmZmxlQmFycmllcpRqzQMAAIwFY2xhc3OUhpSMPGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlNodWZmbGVCYXJyaWVyLmV4cGFuZJRqzQMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TaWRlSW5wdXRCYXJyaWVylGrNAwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU2lkZUlucHV0QmFycmllci5leHBhbmSUas0DAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUubWVyZ2VfdXNpbmdfZ2JrlGrNAwAAjAhmdW5jdGlvbpSGlIw9YXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUubWVyZ2VfdXNpbmdfc2lkZV9pbnB1dJRqzQMAAIwIZnVuY3Rpb26UhpSMN2FwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLmV4cGFuZF91c2luZ19nYmuUas0DAACMCGZ1bmN0aW9ulIaUjEFhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5leHBhbmRfdXNpbmdfc2Vjb25kX291dHB1dJRqzQMAAIwIZnVuY3Rpb26UhpSMMWFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLnBhcnNlX2FyZ3OUas0DAACMCGZ1bmN0aW9ulIaUjCphcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5ydW6Uas0DAACMCGZ1bmN0aW9ulIaUjCFhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmWUamgDAABq2lMAAIaUjC5hcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUuVGVzdFBpcGVsaW5llGpoAwAAjAVjbGFzc5SGlIwyYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lLlRlc3RQaXBlbGluZS5ydW6UamgDAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lLlRlc3RQaXBlbGluZS5nZXRfcGlwZWxpbmVfb3B0aW9uc5RqaAMAAIwGbWV0aG9klIaUjEdhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUuVGVzdFBpcGVsaW5lLmdldF9mdWxsX29wdGlvbnNfYXNfYXJnc5RqaAMAAIwGbWV0aG9klIaUlQoAAQAAAAAAjDlhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUuVGVzdFBpcGVsaW5lLmdldF9vcHRpb26UamgDAACMBm1ldGhvZJSGlIwfYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbZRqsAMAAGraUwAAhpSMJWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uRXZlbnSUarADAACMBWNsYXNzlIaUjDNhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLkV2ZW50LnRvX3J1bm5lcl9hcGmUarADAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5FdmVudC5mcm9tX3J1bm5lcl9hcGmUarADAACMDHN0YXRpY21ldGhvZJSGlIwsYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5FbGVtZW50RXZlbnSUarADAACMBWNsYXNzlIaUjDphcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLkVsZW1lbnRFdmVudC50b19ydW5uZXJfYXBplGqwAwAAjAZtZXRob2SUhpSMLmFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uV2F0ZXJtYXJrRXZlbnSUarADAACMBWNsYXNzlIaUjDxhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLldhdGVybWFya0V2ZW50LnRvX3J1bm5lcl9hcGmUarADAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5Qcm9jZXNzaW5nVGltZUV2ZW50lGqwAwAAjAVjbGFzc5SGlIxBYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5Qcm9jZXNzaW5nVGltZUV2ZW50LnRvX3J1bm5lcl9hcGmUarADAACMBm1ldGhvZJSGlIwqYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtlGqwAwAAjAVjbGFzc5SGlIw4YXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmdldF93aW5kb3dpbmeUarADAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmV4cGFuZJRqsAMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0uYWRkX2VsZW1lbnRzlGqwAwAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbS5hZHZhbmNlX3dhdGVybWFya190b5RqsAMAAIwGbWV0aG9klIaUjEhhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0uYWR2YW5jZV93YXRlcm1hcmtfdG9faW5maW5pdHmUarADAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtLmFkdmFuY2VfcHJvY2Vzc2luZ190aW1llGqwAwAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqsAMAAIwGbWV0aG9klIaUjERhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqsAMAAIwMc3RhdGljbWV0aG9klIaUjCdhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtX3NlcnZpY2WUai4DAABq2lMAAIaUjENhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtX3NlcnZpY2UuVGVzdFN0cmVhbVNlcnZpY2VDb250cm9sbGVylGouAwAAjAVjbGFzc5SGlIxJYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbV9zZXJ2aWNlLlRlc3RTdHJlYW1TZXJ2aWNlQ29udHJvbGxlci5zdGFydJRqLgMAAIwGbWV0aG9klIaUjEhhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtX3NlcnZpY2UuVGVzdFN0cmVhbVNlcnZpY2VDb250cm9sbGVyLnN0b3CUai4DAACMBm1ldGhvZJSGlIxKYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbV9zZXJ2aWNlLlRlc3RTdHJlYW1TZXJ2aWNlQ29udHJvbGxlci5FdmVudHOUai4DAACMBm1ldGhvZJSGlIweYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzlGpYAwAAatpTAACGlIwmYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLlRlbXBEaXKUalgDAACMBWNsYXNzlIaUjC9hcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuVGVtcERpci5nZXRfcGF0aJRqWAMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuVGVtcERpci5jcmVhdGVfdGVtcF9maWxllGpYAwAAjAZtZXRob2SUhpSMK2FwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5jb21wdXRlX2hhc2iUalgDAACMCGZ1bmN0aW9ulIaUjCphcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMucGF0Y2hfcmV0cnmUalgDAACMCGZ1bmN0aW9ulIaUjCthcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMuZGVsZXRlX2ZpbGVzlGpYAwAAjAhmdW5jdGlvbpSGlIw0YXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLmNsZWFudXBfc3Vic2NyaXB0aW9uc5RqWAMAAIwIZnVuY3Rpb26UhpSMLWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5jbGVhbnVwX3RvcGljc5RqWAMAAIwIZnVuY3Rpb26UhpSMMmFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5QdWxsUmVzcG9uc2VNZXNzYWdllGpYAwAAjAVjbGFzc5SGlIwzYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLmNyZWF0ZV9wdWxsX3Jlc3BvbnNllGpYAwAAjAhmdW5jdGlvbpSGlIwYYXBhY2hlX2JlYW0udGVzdGluZy51dGlslGq7AwAAatpTAACGlIwqYXBhY2hlX2JlYW0udGVzdGluZy51dGlsLlRlc3RXaW5kb3dlZFZhbHVllGq7AwAAjAVjbGFzc5SGlIw0YXBhY2hlX2JlYW0udGVzdGluZy51dGlsLlRlc3RXaW5kb3dlZFZhbHVlLnRpbWVzdGFtcJRquwMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuVGVzdFdpbmRvd2VkVmFsdWUudmFsdWWUarsDAACMCWF0dHJpYnV0ZZSGlHUojDJhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuVGVzdFdpbmRvd2VkVmFsdWUud2luZG93c5RquwMAAIwJYXR0cmlidXRllIaUjCxhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuZXF1YWxfdG9fcGVyX3dpbmRvd5RquwMAAIwIZnVuY3Rpb26UhpSMIWFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5lcXVhbF90b5RquwMAAIwIZnVuY3Rpb26UhpSMJGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5tYXRjaGVzX2FsbJRquwMAAIwIZnVuY3Rpb26UhpSMIWFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5pc19lbXB0eZRquwMAAIwIZnVuY3Rpb26UhpSMJWFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5pc19ub3RfZW1wdHmUarsDAACMCGZ1bmN0aW9ulIaUjCRhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuYXNzZXJ0X3RoYXSUarsDAACMCGZ1bmN0aW9ulIaUjCRhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwub3Blbl9zaGFyZHOUarsDAACMCGZ1bmN0aW9ulIaUjBFhcGFjaGVfYmVhbS50b29sc5Rq6QMAAGraUwAAhpSMJ2FwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFya5RqsQMAAGraUwAAhpSMP2FwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5jb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeZRqsQMAAIwIZnVuY3Rpb26UhpSMMWFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5zbWFsbF9pbnSUarEDAACMCGZ1bmN0aW9ulIaUjDFhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsubGFyZ2VfaW50lGqxAwAAjAhmdW5jdGlvbpSGlIw1YXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLnJhbmRvbV9zdHJpbmeUarEDAACMCGZ1bmN0aW9ulIaUjDRhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsuc21hbGxfc3RyaW5nlGqxAwAAjAhmdW5jdGlvbpSGlIw0YXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLmxhcmdlX3N0cmluZ5RqsQMAAIwIZnVuY3Rpb26UhpSMMGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5saXN0X2ludJRqsQMAAIwIZnVuY3Rpb26UhpSMNGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5kaWN0X2ludF9pbnSUarEDAACMCGZ1bmN0aW9ulIaUjDJhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsuc21hbGxfbGlzdJRqsQMAAIwIZnVuY3Rpb26UhpSMMmFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5sYXJnZV9saXN0lGqxAwAAjAhmdW5jdGlvbpSGlIwzYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLnNtYWxsX3R1cGxllGqxAwAAjAhmdW5jdGlvbpSGlIwzYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLmxhcmdlX3R1cGxllGqxAwAAjAhmdW5jdGlvbpSGlIwyYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLnNtYWxsX2RpY3SUarEDAACMCGZ1bmN0aW9ulIaUjDJhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsubGFyZ2VfZGljdJRqsQMAAIwIZnVuY3Rpb26UhpSMNmFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5sYXJnZV9pdGVyYWJsZZRqsQMAAIwIZnVuY3Rpb26UhpSMP2FwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5yYW5kb21fbWVzc2FnZV93aXRoX21hcJRqsQMAAIwIZnVuY3Rpb26UhpSMPmFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay5zbWFsbF9tZXNzYWdlX3dpdGhfbWFwlGqxAwAAjAhmdW5jdGlvbpSGlIw+YXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLmxhcmdlX21lc3NhZ2Vfd2l0aF9tYXCUarEDAACMCGZ1bmN0aW9ulIaUjD9hcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsuZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWWUarEDAACMCGZ1bmN0aW9ulIaUjD1hcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsucmFuZG9tX3dpbmRvd2VkX3ZhbHVllGqxAwAAjAhmdW5jdGlvbpSGlIw6YXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrLnd2X3dpdGhfb25lX3dpbmRvd5RqsQMAAIwIZnVuY3Rpb26UhpSMQGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyay53dl93aXRoX211bHRpcGxlX3dpbmRvd3OUarEDAACMCGZ1bmN0aW9ulIaUjDxhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsucnVuX2NvZGVyX2JlbmNobWFya3OUarEDAACMCGZ1bmN0aW9ulIaUjDVhcGFjaGVfYmVhbS50b29scy5kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFya5Rq8AMAAGraUwAAhpSMS2FwYWNoZV9iZWFtLnRvb2xzLmRpc3RyaWJ1dGlvbl9jb3VudGVyX21pY3JvYmVuY2htYXJrLmdlbmVyYXRlX2lucHV0X3ZhbHVlc5Rq8AMAAIwIZnVuY3Rpb26UhpSMQ2FwYWNoZV9iZWFtLnRvb2xzLmRpc3RyaWJ1dGlvbl9jb3VudGVyX21pY3JvYmVuY2htYXJrLnJ1bl9iZW5jaG1hcmuUavADAACMCGZ1bmN0aW9ulIaUjC5hcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrlGp7AwAAatpTAACGlIxJYXBhY2hlX2JlYW0udG9vbHMuZm5fYXBpX3J1bm5lcl9taWNyb2JlbmNobWFyay5CYWdJblN0YXRlT3V0cHV0QWZ0ZXJUaW1lcpRqewMAAIwFY2xhc3OUhpSMU2FwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmsuQmFnSW5TdGF0ZU91dHB1dEFmdGVyVGltZXIuU0VUX1NUQVRFlGp7AwAAjAlhdHRyaWJ1dGWUhpSMVGFwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmsuQmFnSW5TdGF0ZU91dHB1dEFmdGVyVGltZXIuRU1JVF9USU1FUpRqewMAAIwJYXR0cmlidXRllIaUjFFhcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrLkJhZ0luU3RhdGVPdXRwdXRBZnRlclRpbWVyLnByb2Nlc3OUansDAACMBm1ldGhvZJSGlIxVYXBhY2hlX2JlYW0udG9vbHMuZm5fYXBpX3J1bm5lcl9taWNyb2JlbmNobWFyay5CYWdJblN0YXRlT3V0cHV0QWZ0ZXJUaW1lci5lbWl0X3ZhbHVlc5RqewMAAIwGbWV0aG9klIaUjEJhcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrLnJ1bl9zaW5nbGVfcGlwZWxpbmWUansDAACMCGZ1bmN0aW9ulIaUjDxhcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrLnJ1bl9iZW5jaG1hcmuUansDAACMCGZ1bmN0aW9ulIaUjCphcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmuUaoUDAABq2lMAAIaUjDlhcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmsubG9uZ19nZW5lcmF0b3KUaoUDAACMCGZ1bmN0aW9ulIaUjDhhcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmsucnVuX2JlbmNobWFya5RqhQMAAIwIZnVuY3Rpb26UhpSMF2FwYWNoZV9iZWFtLnRvb2xzLnV0aWxzlGr7AwAAatpTAACGlIwmYXBhY2hlX2JlYW0udG9vbHMudXRpbHMuY2hlY2tfY29tcGlsZWSUavsDAACMCGZ1bmN0aW9ulIaUjCdhcGFjaGVfYmVhbS50b29scy51dGlscy5CZW5jaG1hcmtDb25maWeUavsDAACMBWNsYXNzlIaUjDFhcGFjaGVfYmVhbS50b29scy51dGlscy5CZW5jaG1hcmtDb25maWcuYmVuY2htYXJrlGr7AwAAjAlhdHRyaWJ1dGWUhpSMLGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLkJlbmNobWFya0NvbmZpZy5zaXpllGr7AwAAjAlhdHRyaWJ1dGWUhpSMMGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLkJlbmNobWFya0NvbmZpZy5udW1fcnVuc5Rq+wMAAIwJYXR0cmlidXRllIaUjDdhcGFjaGVfYmVhbS50b29scy51dGlscy5MaW5lYXJSZWdyZXNzaW9uQmVuY2htYXJrQ29uZmlnlGr7AwAAjAVjbGFzc5SGlIxBYXBhY2hlX2JlYW0udG9vbHMudXRpbHMuTGluZWFyUmVncmVzc2lvbkJlbmNobWFya0NvbmZpZy5iZW5jaG1hcmuUavsDAACMCWF0dHJpYnV0ZZSGlIxGYXBhY2hlX2JlYW0udG9vbHMudXRpbHMuTGluZWFyUmVncmVzc2lvbkJlbmNobWFya0NvbmZpZy5zdGFydGluZ19wb2ludJRq+wMAAIwJYXR0cmlidXRllIaUjEFhcGFjaGVfYmVhbS50b29scy51dGlscy5MaW5lYXJSZWdyZXNzaW9uQmVuY2htYXJrQ29uZmlnLmluY3JlbWVudJRq+wMAAIwJYXR0cmlidXRllIaUjEBhcGFjaGVfYmVhbS50b29scy51dGlscy5MaW5lYXJSZWdyZXNzaW9uQmVuY2htYXJrQ29uZmlnLm51bV9ydW5zlGr7AwAAjAlhdHRyaWJ1dGWUhpSMJmFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLnJ1bl9iZW5jaG1hcmtzlGr7AwAAjAhmdW5jdGlvbpSGlIwWYXBhY2hlX2JlYW0udHJhbnNmb3Jtc5RqngMAAGraUwAAhpSMIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzlGrOAwAAatpTAACGlIwlYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbpRqzgMAAIwFY2xhc3OUhpSMLmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLk1lYW4uR2xvYmFsbHmUas4DAACMBWNsYXNzlIaUjDVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5NZWFuLkdsb2JhbGx5LmV4cGFuZJRqzgMAAIwGbWV0aG9klIaUjCxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5NZWFuLlBlcktleZRqzgMAAIwFY2xhc3OUhpSMM2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLk1lYW4uUGVyS2V5LmV4cGFuZJRqzgMAAIwGbWV0aG9klIaUjCZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Db3VudJRqzgMAAIwFY2xhc3OUhpSML2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50Lkdsb2JhbGx5lGrOAwAAjAVjbGFzc5SGlIw2YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnQuR2xvYmFsbHkuZXhwYW5klGrOAwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlcktleZRqzgMAAIwFY2xhc3OUhpSMNGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlcktleS5leHBhbmSUas4DAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuQ291bnQuUGVyRWxlbWVudJRqzgMAAIwFY2xhc3OUhpSMOGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlckVsZW1lbnQuZXhwYW5klGrOAwAAjAZtZXRob2SUhpSMJGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcJRqzgMAAIwFY2xhc3OUhpSMJ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5PZpRqzgMAAIwFY2xhc3OUhpSMNWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5PZi5kZWZhdWx0X2xhYmVslGrOAwAAjAZtZXRob2SUhpSMLmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5PZi5leHBhbmSUas4DAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wLlBlcktleZRqzgMAAIwFY2xhc3OUhpSMOWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5QZXJLZXkuZGVmYXVsdF9sYWJlbJRqzgMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuUGVyS2V5LmV4cGFuZJRqzgMAAIwGbWV0aG9klIaUjCxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuTGFyZ2VzdJRqzgMAAIwMc3RhdGljbWV0aG9klIaUjC1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuU21hbGxlc3SUas4DAACMDHN0YXRpY21ldGhvZJSGlIwyYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wLkxhcmdlc3RQZXJLZXmUas4DAACMDHN0YXRpY21ldGhvZJSGlIwzYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wLlNtYWxsZXN0UGVyS2V5lGrOAwAAjAxzdGF0aWNtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZZRqzgMAAIwFY2xhc3OUhpSMOWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVHbG9iYWxseZRqzgMAAIwFY2xhc3OUhpSMQGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVHbG9iYWxseS5leHBhbmSUas4DAACMBm1ldGhvZJSGlIxGYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5LmRpc3BsYXlfZGF0YZRqzgMAAIwGbWV0aG9klIaUjEdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5TYW1wbGUuRml4ZWRTaXplR2xvYmFsbHkuZGVmYXVsdF9sYWJlbJRqzgMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5TYW1wbGUuRml4ZWRTaXplUGVyS2V5lGrOAwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5leHBhbmSUas4DAACMBm1ldGhvZJSGlIxEYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5kaXNwbGF5X2RhdGGUas4DAACMBm1ldGhvZJSGlIxFYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5kZWZhdWx0X2xhYmVslGrOAwAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvTGlzdJRqzgMAAIwFY2xhc3OUhpSMLmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvTGlzdC5leHBhbmSUas4DAACMBm1ldGhvZJSGlIwnYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9EaWN0lGrOAwAAjAVjbGFzc5SGlIwuYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9EaWN0LmV4cGFuZJRqzgMAAIwGbWV0aG9klIaUjCZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub1NldJRqzgMAAIwFY2xhc3OUhpSMLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvU2V0LmV4cGFuZJRqzgMAAIwGbWV0aG9klIaUjCdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5MYXRlc3SUas4DAACMBWNsYXNzlIaUjDBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5MYXRlc3QuR2xvYmFsbHmUas4DAACMBWNsYXNzlIaUjD5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5MYXRlc3QuR2xvYmFsbHkuYWRkX3RpbWVzdGFtcJRqzgMAAIwMc3RhdGljbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5MYXRlc3QuR2xvYmFsbHkuZXhwYW5klGrOAwAAjAZtZXRob2SUhpSMLmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkxhdGVzdC5QZXJLZXmUas4DAACMBWNsYXNzlIaUjDxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5MYXRlc3QuUGVyS2V5LmFkZF90aW1lc3RhbXCUas4DAACMDHN0YXRpY21ldGhvZJSGlIw1YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTGF0ZXN0LlBlcktleS5leHBhbmSUas4DAACMBm1ldGhvZJSGlIwbYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JllGrxAwAAatpTAACGlIwvYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlJlc3RyaWN0aW9uUHJvdmlkZXKUavEDAACMBWNsYXNzlIaUjD5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUmVzdHJpY3Rpb25Qcm92aWRlci5jcmVhdGVfdHJhY2tlcpRq8QMAAIwGbWV0aG9klIaUjENhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUmVzdHJpY3Rpb25Qcm92aWRlci5pbml0aWFsX3Jlc3RyaWN0aW9ulGrxAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5SZXN0cmljdGlvblByb3ZpZGVyLnNwbGl0lGrxAwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5SZXN0cmljdGlvblByb3ZpZGVyLnJlc3RyaWN0aW9uX2NvZGVylGrxAwAAjAZtZXRob2SUhpSMQGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5SZXN0cmljdGlvblByb3ZpZGVyLnJlc3RyaWN0aW9uX3NpemWUavEDAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlJlc3RyaWN0aW9uUHJvdmlkZXIuc3BsaXRfYW5kX3NpemWUavEDAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldhdGVybWFya0VzdGltYXRvclByb3ZpZGVylGrxAwAAjAVjbGFzc5SGlIxOYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldhdGVybWFya0VzdGltYXRvclByb3ZpZGVyLmluaXRpYWxfZXN0aW1hdG9yX3N0YXRllGrxAwAAjAZtZXRob2SUhpSMUWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlci5jcmVhdGVfd2F0ZXJtYXJrX2VzdGltYXRvcpRq8QMAAIwGbWV0aG9klIaUjExhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIuZXN0aW1hdG9yX3N0YXRlX2NvZGVylGrxAwAAjAZtZXRob2SUhpSMIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZulGrxAwAAjAVjbGFzc5SGlIwtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uRWxlbWVudFBhcmFtlGrxAwAAjAlhdHRyaWJ1dGWUhpSML2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLlNpZGVJbnB1dFBhcmFtlGrxAwAAjAlhdHRyaWJ1dGWUhpSML2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLlRpbWVzdGFtcFBhcmFtlGrxAwAAjAlhdHRyaWJ1dGWUhpSMLGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLldpbmRvd1BhcmFtlGrxAwAAjAlhdHRyaWJ1dGWUhpSMLmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLlBhbmVJbmZvUGFyYW2UavEDAACMCWF0dHJpYnV0ZZSGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uV2F0ZXJtYXJrRXN0aW1hdG9yUGFyYW2UavEDAACMCWF0dHJpYnV0ZZSGlIw1YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uQnVuZGxlRmluYWxpemVyUGFyYW2UavEDAACMCWF0dHJpYnV0ZZSGlIwpYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uS2V5UGFyYW2UavEDAACMCWF0dHJpYnV0ZZSGlIwrYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uU3RhdGVQYXJhbZRq8QMAAIwJYXR0cmlidXRllIaUjCthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5UaW1lclBhcmFtlGrxAwAAjAlhdHRyaWJ1dGWUhpSMMmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLkRvRm5Qcm9jZXNzUGFyYW1zlGrxAwAAjAlhdHRyaWJ1dGWUhpSMMWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLlJlc3RyaWN0aW9uUGFyYW2UavEDAACMCWF0dHJpYnV0ZZSGlIwuYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uZnJvbV9jYWxsYWJsZZRq8QMAAIwMc3RhdGljbWV0aG9klIaUjC5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5kZWZhdWx0X2xhYmVslGrxAwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLnByb2Nlc3OUavEDAACMBm1ldGhvZJSGlIwmYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uc2V0dXCUavEDAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uc3RhcnRfYnVuZGxllGrxAwAAjAZtZXRob2SUhpSMLmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuLmZpbmlzaF9idW5kbGWUavEDAACMBm1ldGhvZJSGlIwpYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4udGVhcmRvd26UavEDAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50c5Rq8QMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9Gbi5kZWZhdWx0X3R5cGVfaGludHOUavEDAACMBm1ldGhvZJSGlIwyYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4uaW5mZXJfb3V0cHV0X3R5cGWUavEDAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMBm1ldGhvZJSGlIwlYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbpRq8QMAAIwFY2xhc3OUhpSMM2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4uZGVmYXVsdF9sYWJlbJRq8QMAAIwGbWV0aG9klIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcpRq8QMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmFkZF9pbnB1dJRq8QMAAIwGbWV0aG9klIaUjDBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmFkZF9pbnB1dHOUavEDAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnOUavEDAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5jb21wYWN0lGrxAwAAjAZtZXRob2SUhpSMNGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4uZXh0cmFjdF9vdXRwdXSUavEDAACMBm1ldGhvZJSGlIwrYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5hcHBseZRq8QMAAIwGbWV0aG9klIaUjDRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLmZvcl9pbnB1dF90eXBllGrxAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4uZnJvbV9jYWxsYWJsZZRq8QMAAIwMc3RhdGljbWV0aG9klIaUjDlhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuLm1heWJlX2Zyb21fY2FsbGFibGWUavEDAACMDHN0YXRpY21ldGhvZJSGlIw7YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi5nZXRfYWNjdW11bGF0b3JfY29kZXKUavEDAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwGbWV0aG9klIaUjCdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uRm6UavEDAACMBWNsYXNzlIaUjDVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uRm4uZGVmYXVsdF9sYWJlbJRq8QMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uRm4ucGFydGl0aW9uX2ZvcpRq8QMAAIwGbWV0aG9klIaUjCFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG+UavEDAACMBWNsYXNzlIaUjDRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8uZGVmYXVsdF90eXBlX2hpbnRzlGrxAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEby5pbmZlcl9vdXRwdXRfdHlwZZRq8QMAAIwGbWV0aG9klIaUjClhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8ubWFrZV9mbpRq8QMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8uZGlzcGxheV9kYXRhlGrxAwAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEby5leHBhbmSUavEDAACMBm1ldGhvZJSGlIwuYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLndpdGhfb3V0cHV0c5Rq8QMAAIwGbWV0aG9klIaUjDlhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMDHN0YXRpY21ldGhvZJSGlIxBYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXSUavEDAACMBm1ldGhvZJSGlIw3YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvLmdldF9yZXN0cmljdGlvbl9jb2RlcpRq8QMAAIwGbWV0aG9klIaUjCNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdE1hcJRq8QMAAIwIZnVuY3Rpb26UhpSMH2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5NYXCUavEDAACMCGZ1bmN0aW9ulIaUjCRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuTWFwVHVwbGWUavEDAACMCGZ1bmN0aW9ulIaUjChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdE1hcFR1cGxllGrxAwAAjAhmdW5jdGlvbpSGlIwiYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZpbHRlcpRq8QMAAIwIZnVuY3Rpb26UhpSMK2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHmUavEDAACMBWNsYXNzlIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5Lmhhc19kZWZhdWx0c5Rq8QMAAIwJYXR0cmlidXRllIaUjDNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5LmFzX3ZpZXeUavEDAACMCWF0dHJpYnV0ZZSGlIwyYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseS5mYW5vdXSUavEDAACMCWF0dHJpYnV0ZZSGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseS5kaXNwbGF5X2RhdGGUavEDAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseS5kZWZhdWx0X2xhYmVslGrxAwAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkud2l0aF9mYW5vdXSUavEDAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseS53aXRoX2RlZmF1bHRzlGrxAwAAjAZtZXRob2SUhpSMPGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkud2l0aG91dF9kZWZhdWx0c5Rq8QMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5LmFzX3NpbmdsZXRvbl92aWV3lGrxAwAAjAZtZXRob2SUhpSMMmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkuZXhwYW5klGrxAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5lGrxAwAAjAVjbGFzc5SGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkud2l0aF9ob3Rfa2V5X2Zhbm91dJRq8QMAAIwGbWV0aG9klIaUjDZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5kaXNwbGF5X2RhdGGUavEDAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkubWFrZV9mbpRq8QMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5kZWZhdWx0X2xhYmVslGrxAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5LmV4cGFuZJRq8QMAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5kZWZhdWx0X3R5cGVfaGludHOUavEDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwMc3RhdGljbWV0aG9klIaUjElhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleS5ydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0lGrxAwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lVmFsdWVzlGrxAwAAjAVjbGFzc5SGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMubWFrZV9mbpRq8QMAAIwGbWV0aG9klIaUjDBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVZhbHVlcy5leHBhbmSUavEDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMBm1ldGhvZJSGlIxDYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwMc3RhdGljbWV0aG9klIaUjCZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleZRq8QMAAIwFY2xhc3OUhpSMM2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LlJlaWZ5V2luZG93c5Rq8QMAAIwFY2xhc3OUhpSMO2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LlJlaWZ5V2luZG93cy5wcm9jZXNzlGrxAwAAjAZtZXRob2SUhpSMRWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5LlJlaWZ5V2luZG93cy5pbmZlcl9vdXRwdXRfdHlwZZRq8QMAAIwGbWV0aG9klIaUjC1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5leHBhbmSUavEDAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkuaW5mZXJfb3V0cHV0X3R5cGWUavEDAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMBm1ldGhvZJSGlIxAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwMc3RhdGljbWV0aG9klIaUjEZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5ydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0lGrxAwAAjAZtZXRob2SUhpSMJWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb26UavEDAACMBWNsYXNzlIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uLkFwcGx5UGFydGl0aW9uRm5GbpRq8QMAAIwFY2xhc3OUhpSMQGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuLnByb2Nlc3OUavEDAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhcnRpdGlvbi5tYWtlX2ZulGrxAwAAjAZtZXRob2SUhpSMLGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb24uZXhwYW5klGrxAwAAjAZtZXRob2SUhpSMJWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dpbmeUavEDAACMBWNsYXNzlIaUjDBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nLmlzX2RlZmF1bHSUavEDAACMBm1ldGhvZJSGlIwzYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd2luZy50b19ydW5uZXJfYXBplGrxAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dpbmcuZnJvbV9ydW5uZXJfYXBplGrxAwAAjAxzdGF0aWNtZXRob2SUhpSMJmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dJbnRvlGrxAwAAjAVjbGFzc5SGlIwzYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uV2luZG93SW50b0ZulGrxAwAAjAVjbGFzc5SGlIw7YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uV2luZG93SW50b0ZuLnByb2Nlc3OUavEDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uZ2V0X3dpbmRvd2luZ5Rq8QMAAIwGbWV0aG9klIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by5pbmZlcl9vdXRwdXRfdHlwZZRq8QMAAIwGbWV0aG9klIaUjC1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by5leHBhbmSUavEDAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMBm1ldGhvZJSGlIxAYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwMc3RhdGljbWV0aG9klIaUjCNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbpRq8QMAAIwFY2xhc3OUhpSMKmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVuLmV4cGFuZJRq8QMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRmxhdHRlbi5nZXRfd2luZG93aW5nlGrxAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGrxAwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVuLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMDHN0YXRpY21ldGhvZJSGlIwiYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZZRq8QMAAIwFY2xhc3OUhpSMOmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZS5pbmZlcl9vdXRwdXRfdHlwZZRq8QMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlLmdldF9vdXRwdXRfdHlwZZRq8QMAAIwGbWV0aG9klIaUjClhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlLmV4cGFuZJRq8QMAAIwGbWV0aG9klIaUjCphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlLmFzX3JlYWSUavEDAACMBm1ldGhvZJSGlIwwYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZS5nZXRfd2luZG93aW5nlGrxAwAAjAZtZXRob2SUhpSMI2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5JbXB1bHNllGrxAwAAjAVjbGFzc5SGlIwqYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UuZXhwYW5klGrxAwAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5JbXB1bHNlLmdldF93aW5kb3dpbmeUavEDAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UuaW5mZXJfb3V0cHV0X3R5cGWUavEDAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwMc3RhdGljbWV0aG9klIaUjCRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNyZWF0ZV9zb3VyY2WUagoEAABq2lMAAIaUjB5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXmUagQEAABq2lMAAIaUjC1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuSGFzRGlzcGxheURhdGGUagQEAACMBWNsYXNzlIaUjDphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuSGFzRGlzcGxheURhdGEuZGlzcGxheV9kYXRhlGoEBAAAjAZtZXRob2SUhpSMKmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YZRqBAQAAIwFY2xhc3OUhpSMPmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YS5jcmVhdGVfZnJvbV9vcHRpb25zlGoEBAAAjAtjbGFzc21ldGhvZJSGlIw2YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tlGoEBAAAjAtjbGFzc21ldGhvZJSGlIwuYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbZRqBAQAAIwFY2xhc3OUhpSMN2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0udHlwZURpY3SUagQEAACMCWF0dHJpYnV0ZZSGlIw7YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbS5kcm9wX2lmX25vbmWUagQEAACMBm1ldGhvZJSGlIw+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbS5kcm9wX2lmX2RlZmF1bHSUagQEAACMBm1ldGhvZJSGlIw6YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbS5zaG91bGRfZHJvcJRqBAQAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtLmlzX3ZhbGlklGoEBAAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0uZ2V0X2RpY3SUagQEAACMBm1ldGhvZJSGlIwjYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHOUak0DAABq2lMAAIaUjC9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudJRqTQMAAIwFY2xhc3OUhpSMR2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVudmlyb25tZW50LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpNAwAAjAZtZXRob2SUhpSMPGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVudmlyb25tZW50LmNhcGFiaWxpdGllc5RqTQMAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudC5yZWdpc3Rlcl91cm6Uak0DAACMC2NsYXNzbWV0aG9klIaUjERhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudC5nZXRfZW52X2Nsc19mcm9tX3VybpRqTQMAAIwLY2xhc3NtZXRob2SUhpSMPWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVudmlyb25tZW50LnRvX3J1bm5lcl9hcGmUak0DAACMBm1ldGhvZJSGlIw/YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRW52aXJvbm1lbnQuZnJvbV9ydW5uZXJfYXBplGpNAwAAjAtjbGFzc21ldGhvZJSGlIw8YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRW52aXJvbm1lbnQuZnJvbV9vcHRpb25zlGpNAwAAjAtjbGFzc21ldGhvZJSGlIw1YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRG9ja2VyRW52aXJvbm1lbnSUak0DAACMBWNsYXNzlIaUjE1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5Eb2NrZXJFbnZpcm9ubWVudC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwGbWV0aG9klIaUjE9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5Eb2NrZXJFbnZpcm9ubWVudC5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpNAwAAjAxzdGF0aWNtZXRob2SUhpSMQmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkRvY2tlckVudmlyb25tZW50LmZyb21fb3B0aW9uc5RqTQMAAIwLY2xhc3NtZXRob2SUhpSMSmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkRvY2tlckVudmlyb25tZW50LmRlZmF1bHRfZG9ja2VyX2ltYWdllGpNAwAAjAxzdGF0aWNtZXRob2SUhpSMNmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLlByb2Nlc3NFbnZpcm9ubWVudJRqTQMAAIwFY2xhc3OUhpSMTmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLlByb2Nlc3NFbnZpcm9ubWVudC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwGbWV0aG9klIaUjFBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5Qcm9jZXNzRW52aXJvbm1lbnQuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwMc3RhdGljbWV0aG9klIaUjENhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5Qcm9jZXNzRW52aXJvbm1lbnQuZnJvbV9vcHRpb25zlGpNAwAAjAtjbGFzc21ldGhvZJSGlIw3YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRXh0ZXJuYWxFbnZpcm9ubWVudJRqTQMAAIwFY2xhc3OUhpSMT2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkV4dGVybmFsRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUak0DAACMBm1ldGhvZJSGlIxRYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRXh0ZXJuYWxFbnZpcm9ubWVudC5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpNAwAAjAxzdGF0aWNtZXRob2SUhpSMRGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkV4dGVybmFsRW52aXJvbm1lbnQuZnJvbV9vcHRpb25zlGpNAwAAjAtjbGFzc21ldGhvZJSGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRW1iZWRkZWRQeXRob25FbnZpcm9ubWVudJRqTQMAAIwFY2xhc3OUhpSMVWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUak0DAACMBm1ldGhvZJSGlIxXYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRW1iZWRkZWRQeXRob25FbnZpcm9ubWVudC5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpNAwAAjAxzdGF0aWNtZXRob2SUhpSMSmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQuZnJvbV9vcHRpb25zlGpNAwAAjAtjbGFzc21ldGhvZJSGlIxBYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnSUak0DAACMBWNsYXNzlIaUjFlhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwGbWV0aG9klIaUjFthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudC5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpNAwAAjAxzdGF0aWNtZXRob2SUhpSMTmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50LmZyb21fb3B0aW9uc5RqTQMAAIwLY2xhc3NtZXRob2SUhpSMTmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50LnBhcnNlX2NvbmZpZ5RqTQMAAIwMc3RhdGljbWV0aG9klIaUjDxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5TdWJwcm9jZXNzU0RLRW52aXJvbm1lbnSUak0DAACMBWNsYXNzlIaUjFRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5TdWJwcm9jZXNzU0RLRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUak0DAACMBm1ldGhvZJSGlIxWYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuU3VicHJvY2Vzc1NES0Vudmlyb25tZW50LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUak0DAACMDHN0YXRpY21ldGhvZJSGlIxJYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuU3VicHJvY2Vzc1NES0Vudmlyb25tZW50LmZyb21fb3B0aW9uc5RqTQMAAIwLY2xhc3NtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLlJ1bm5lckFQSUVudmlyb25tZW50SG9sZGVylGpNAwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXIudG9fcnVubmVyX2FwaZRqTQMAAIwGbWV0aG9klIaUjEthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5SdW5uZXJBUElFbnZpcm9ubWVudEhvbGRlci5jYXBhYmlsaXRpZXOUak0DAACMBm1ldGhvZJSGlIwfYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbJRqEAQAAGraUwAAhpSMKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuaXRlcl91cm5zlGoQBAAAjAhmdW5jdGlvbpSGlIwuYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5QYXlsb2FkQnVpbGRlcpRqEAQAAIwFY2xhc3OUhpSMNGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuUGF5bG9hZEJ1aWxkZXIuYnVpbGSUahAEAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5QYXlsb2FkQnVpbGRlci5wYXlsb2FklGoQBAAAjAZtZXRob2SUhpSMOWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuU2NoZW1hQmFzZWRQYXlsb2FkQnVpbGRlcpRqEAQAAIwFY2xhc3OUhpSMP2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuU2NoZW1hQmFzZWRQYXlsb2FkQnVpbGRlci5idWlsZJRqEAQAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLkltcGxpY2l0U2NoZW1hUGF5bG9hZEJ1aWxkZXKUahAEAACMBWNsYXNzlIaUjD1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLk5hbWVkVHVwbGVCYXNlZFBheWxvYWRCdWlsZGVylGoQBAAAjAVjbGFzc5SGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5Bbm5vdGF0aW9uQmFzZWRQYXlsb2FkQnVpbGRlcpRqEAQAAIwFY2xhc3OUhpSMPGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuRGF0YWNsYXNzQmFzZWRQYXlsb2FkQnVpbGRlcpRqEAQAAIwFY2xhc3OUhpSMMWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuRXh0ZXJuYWxUcmFuc2Zvcm2UahAEAACMBWNsYXNzlIaUjD9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLkV4dGVybmFsVHJhbnNmb3JtLmRlZmF1bHRfbGFiZWyUahAEAACMBm1ldGhvZJSGlIxFYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5FeHRlcm5hbFRyYW5zZm9ybS5nZXRfbG9jYWxfbmFtZXNwYWNllGoQBAAAjAtjbGFzc21ldGhvZJSGlIxBYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5FeHRlcm5hbFRyYW5zZm9ybS5vdXRlcl9uYW1lc3BhY2WUahAEAACMC2NsYXNzbWV0aG9klIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLkV4dGVybmFsVHJhbnNmb3JtLmV4cGFuZJRqEAQAAIwGbWV0aG9klIaUjElhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLkV4dGVybmFsVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlfdHJhbnNmb3JtlGoQBAAAjAZtZXRob2SUhpSMN2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuSmF2YUphckV4cGFuc2lvblNlcnZpY2WUahAEAACMBWNsYXNzlIaUjD5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLkphdmFKYXJFeHBhbnNpb25TZXJ2aWNlLkV4cGFuZJRqEAQAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLkJlYW1KYXJFeHBhbnNpb25TZXJ2aWNllGoQBAAAjAVjbGFzc5SGlIwnYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5tZW1vaXpllGoQBAAAjAhmdW5jdGlvbpSGlIwkYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhlGruAwAAatpTAACGlIw+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhLkphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3SUau4DAACMBWNsYXNzlIaUjFRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX2phdmEuSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5leHBhbnNpb25fc2VydmljZV9qYXKUau4DAACMCWF0dHJpYnV0ZZSGlIxVYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhLkphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QuZXhwYW5zaW9uX3NlcnZpY2VfcG9ydJRq7gMAAIwJYXR0cmlidXRllIaUjFthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX2phdmEuSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC50ZXN0X2phdmFfZXhwYW5zaW9uX2RhdGFmbG93lGruAwAAjAxzdGF0aWNtZXRob2SUhpSMYmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfamF2YS5KYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0LnJ1bl9waXBlbGluZV93aXRoX2V4cGFuc2lvbl9zZXJ2aWNllGruAwAAjAxzdGF0aWNtZXRob2SUhpSMS2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfamF2YS5KYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0LnJ1bl9waXBlbGluZZRq7gMAAIwMc3RhdGljbWV0aG9klIaUjChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzlGroAwAAatpTAACGlIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0X3B5My5nZXRfcGF5bG9hZJRq6AMAAIwIZnVuY3Rpb26UhpSMRmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTMuRXh0ZXJuYWxBbm5vdGF0aW9uUGF5bG9hZFRlc3SUaugDAACMBWNsYXNzlIaUjGRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzLkV4dGVybmFsQW5ub3RhdGlvblBheWxvYWRUZXN0LmdldF9wYXlsb2FkX2Zyb21fdHlwaW5nX2hpbnRzlGroAwAAjAZtZXRob2SUhpSMZmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTMuRXh0ZXJuYWxBbm5vdGF0aW9uUGF5bG9hZFRlc3QuZ2V0X3BheWxvYWRfZnJvbV9iZWFtX3R5cGVoaW50c5Rq6AMAAIwGbWV0aG9klIaUjClhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzN5RqvgMAAGraUwAAhpSMNWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTM3LmdldF9wYXlsb2FklGq+AwAAjAhmdW5jdGlvbpSGlIxIYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0X3B5MzcuRXh0ZXJuYWxEYXRhY2xhc3Nlc1BheWxvYWRUZXN0lGq+AwAAjAVjbGFzc5SGlIxmYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0X3B5MzcuRXh0ZXJuYWxEYXRhY2xhc3Nlc1BheWxvYWRUZXN0LmdldF9wYXlsb2FkX2Zyb21fdHlwaW5nX2hpbnRzlGq+AwAAjAZtZXRob2SUhpSMaGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTM3LkV4dGVybmFsRGF0YWNsYXNzZXNQYXlsb2FkVGVzdC5nZXRfcGF5bG9hZF9mcm9tX2JlYW1fdHlwZWhpbnRzlGq+AwAAjAZtZXRob2SUhpSMIWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybZRqzwMAAGraUwAAhpSMLGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtlGrPAwAAjAVjbGFzc5SGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0uc2lkZV9pbnB1dHOUas8DAACMCWF0dHJpYnV0ZZSGlIw1YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0ucGlwZWxpbmWUas8DAACMCWF0dHJpYnV0ZZSGlIwyYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0ubGFiZWyUas8DAACMCWF0dHJpYnV0ZZSGlIw6YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0uZGVmYXVsdF9sYWJlbJRqzwMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS53aXRoX2lucHV0X3R5cGVzlGrPAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLndpdGhfb3V0cHV0X3R5cGVzlGrPAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLnR5cGVfY2hlY2tfaW5wdXRzlGrPAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLmluZmVyX291dHB1dF90eXBllGrPAwAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLnR5cGVfY2hlY2tfb3V0cHV0c5RqzwMAAIwGbWV0aG9klIaUjElhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS50eXBlX2NoZWNrX2lucHV0c19vcl9vdXRwdXRzlGrPAwAAjAZtZXRob2SUhpSMM2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLmV4cGFuZJRqzwMAAIwGbWV0aG9klIaUjDphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5nZXRfd2luZG93aW5nlGrPAwAAjAZtZXRob2SUhpSMOWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLnJlZ2lzdGVyX3VybpRqzwMAAIwLY2xhc3NtZXRob2SUhpSMOmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGmUas8DAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBplGrPAwAAjAtjbGFzc21ldGhvZJSGlIxEYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUas8DAACMBm1ldGhvZJSGlIxCYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaV9waWNrbGVklGrPAwAAjAZtZXRob2SUhpSMTGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtLnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXSUas8DAACMBm1ldGhvZJSGlIwvYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLnB0cmFuc2Zvcm1fZm6Uas8DAACMCGZ1bmN0aW9ulIaUjDVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0ubGFiZWxfZnJvbV9jYWxsYWJsZZRqzwMAAIwIZnVuY3Rpb26UhpSMIWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0c5Rq6wMAAGraUwAAhpSMO2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0cy5kZWZhdWx0X3dpbmRvd19tYXBwaW5nX2ZulGrrAwAAjAhmdW5jdGlvbpSGlIw1YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzLmdldF9zaWRlaW5wdXRfaW5kZXiUausDAACMCGZ1bmN0aW9ulIaUjC5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHMuU2lkZUlucHV0TWFwlGrrAwAAjAVjbGFzc5SGlIxDYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzLlNpZGVJbnB1dE1hcC5pc19nbG9iYWxseV93aW5kb3dlZJRq6wMAAIwGbWV0aG9klIaUjBxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzlGqrAwAAatpTAACGlIwuYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0cy5BcHByb3hpbWF0ZVVuaXF1ZZRqqwMAAIwFY2xhc3OUhpSMQWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMuQXBwcm94aW1hdGVVbmlxdWUucGFyc2VfaW5wdXRfcGFyYW1zlGqrAwAAjAxzdGF0aWNtZXRob2SUhpSMN2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMuQXBwcm94aW1hdGVVbmlxdWUuR2xvYmFsbHmUaqsDAACMBWNsYXNzlIaUjD5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzLkFwcHJveGltYXRlVW5pcXVlLkdsb2JhbGx5LmV4cGFuZJRqqwMAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzLkFwcHJveGltYXRlVW5pcXVlLlBlcktleZRqqwMAAIwFY2xhc3OUhpSMPGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMuQXBwcm94aW1hdGVVbmlxdWUuUGVyS2V5LmV4cGFuZJRqqwMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzLkFwcHJveGltYXRlUXVhbnRpbGVzlGqrAwAAjAVjbGFzc5SGlIw6YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0cy5BcHByb3hpbWF0ZVF1YW50aWxlcy5HbG9iYWxseZRqqwMAAIwFY2xhc3OUhpSMQWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMuQXBwcm94aW1hdGVRdWFudGlsZXMuR2xvYmFsbHkuZXhwYW5klGqrAwAAjAZtZXRob2SUhpSMR2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMuQXBwcm94aW1hdGVRdWFudGlsZXMuR2xvYmFsbHkuZGlzcGxheV9kYXRhlGqrAwAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMuQXBwcm94aW1hdGVRdWFudGlsZXMuUGVyS2V5lGqrAwAAjAVjbGFzc5SGlIw/YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0cy5BcHByb3hpbWF0ZVF1YW50aWxlcy5QZXJLZXkuZXhwYW5klGqrAwAAjAZtZXRob2SUhpSMRWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMuQXBwcm94aW1hdGVRdWFudGlsZXMuUGVyS2V5LmRpc3BsYXlfZGF0YZRqqwMAAIwGbWV0aG9klIaUjB9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlslGplAwAAatpTAACGlIwqYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbC5UaW1lRG9tYWlulGplAwAAjAVjbGFzc5SGlIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbC5UaW1lRG9tYWluLldBVEVSTUFSS5RqZQMAAIwJYXR0cmlidXRllIaUjDRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4uUkVBTF9USU1FlGplAwAAjAlhdHRyaWJ1dGWUhpSMPmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwuVGltZURvbWFpbi5ERVBFTkRFTlRfUkVBTF9USU1FlGplAwAAjAlhdHRyaWJ1dGWUhpSMNmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwuVGltZURvbWFpbi5mcm9tX3N0cmluZ5RqZQMAAIwMc3RhdGljbWV0aG9klIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4udG9fcnVubmVyX2FwaZRqZQMAAIwMc3RhdGljbWV0aG9klIaUjDxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyYW5zZm9ybXNfa2V5d29yZF9vbmx5X2FyZ3NfdGVzdF9weTOUatoDAABq2lMAAIaUjFFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyYW5zZm9ybXNfa2V5d29yZF9vbmx5X2FyZ3NfdGVzdF9weTMuS2V5d29yZE9ubHlBcmdzVGVzdHOUatoDAACMBWNsYXNzlIaUjHNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyYW5zZm9ybXNfa2V5d29yZF9vbmx5X2FyZ3NfdGVzdF9weTMuS2V5d29yZE9ubHlBcmdzVGVzdHMudGVzdF9zaWRlX2lucHV0X2tleXdvcmRfb25seV9hcmdzlGraAwAAjAZtZXRob2SUhpSMcGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJhbnNmb3Jtc19rZXl3b3JkX29ubHlfYXJnc190ZXN0X3B5My5LZXl3b3JkT25seUFyZ3NUZXN0cy50ZXN0X2NvbWJpbmVfa2V5d29yZF9vbmx5X2FyZ3OUatoDAACMBm1ldGhvZJSGlIxuYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmFuc2Zvcm1zX2tleXdvcmRfb25seV9hcmdzX3Rlc3RfcHkzLktleXdvcmRPbmx5QXJnc1Rlc3RzLnRlc3RfZG9fZm5fa2V5d29yZF9vbmx5X2FyZ3OUatoDAACMBm1ldGhvZJSGlIweYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VylGoFBAAAatpTAACGlIwvYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFjY3VtdWxhdGlvbk1vZGWUagUEAACMBWNsYXNzlIaUjDphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HlGoFBAAAjAlhdHRyaWJ1dGWUhpSMPGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BY2N1bXVsYXRpb25Nb2RlLkFDQ1VNVUxBVElOR5RqBQQAAIwJYXR0cmlidXRllIaUjChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZulGoFBAAAjAVjbGFzc5SGlIwzYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbi5vbl9lbGVtZW50lGoFBAAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4ub25fbWVyZ2WUagUEAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbi5zaG91bGRfZmlyZZRqBQQAAIwGbWV0aG9klIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLmhhc19vbnRpbWVfcGFuZZRqBQQAAIwGbWV0aG9klIaUjDBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLm9uX2ZpcmWUagUEAACMBm1ldGhvZJSGlIwuYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbi5yZXNldJRqBQQAAIwGbWV0aG9klIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaZRqBQQAAIwMc3RhdGljbWV0aG9klIaUjDZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuLnRvX3J1bm5lcl9hcGmUagUEAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VylGoFBAAAjAVjbGFzc5SGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyLm9uX2VsZW1lbnSUagUEAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyLm9uX21lcmdllGoFBAAAjAZtZXRob2SUhpSMOWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlci5zaG91bGRfZmlyZZRqBQQAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIub25fZmlyZZRqBQQAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIucmVzZXSUagUEAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyLmZyb21fcnVubmVyX2FwaZRqBQQAAIwMc3RhdGljbWV0aG9klIaUjDthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIudG9fcnVubmVyX2FwaZRqBQQAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIuaGFzX29udGltZV9wYW5llGoFBAAAjAZtZXRob2SUhpSMMmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1llGoFBAAAjAVjbGFzc5SGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUub25fZWxlbWVudJRqBQQAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZS5vbl9tZXJnZZRqBQQAAIwGbWV0aG9klIaUjD5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZS5zaG91bGRfZmlyZZRqBQQAAIwGbWV0aG9klIaUjDphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZS5vbl9maXJllGoFBAAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lLnJlc2V0lGoFBAAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lLmZyb21fcnVubmVyX2FwaZRqBQQAAIwMc3RhdGljbWV0aG9klIaUjEBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZS50b19ydW5uZXJfYXBplGoFBAAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lLmhhc19vbnRpbWVfcGFuZZRqBQQAAIwGbWV0aG9klIaUjC1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmuUagUEAACMBWNsYXNzlIaUjDZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsuTEFURV9UQUeUagUEAACMCWF0dHJpYnV0ZZSGlIw1YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLmlzX2xhdGWUagUEAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLm9uX2VsZW1lbnSUagUEAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLm9uX21lcmdllGoFBAAAjAZtZXRob2SUhpSMOWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyay5zaG91bGRfZmlyZZRqBQQAAIwGbWV0aG9klIaUjDVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsub25fZmlyZZRqBQQAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsucmVzZXSUagUEAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrLmZyb21fcnVubmVyX2FwaZRqBQQAAIwMc3RhdGljbWV0aG9klIaUjDthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsudG9fcnVubmVyX2FwaZRqBQQAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsuaGFzX29udGltZV9wYW5llGoFBAAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50lGoFBAAAjAVjbGFzc5SGlIwzYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQuQ09VTlRfVEFHlGoFBAAAjAlhdHRyaWJ1dGWUhpSMNGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50Lm9uX2VsZW1lbnSUagUEAACMBm1ldGhvZJSGlIwyYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQub25fbWVyZ2WUagUEAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQuc2hvdWxkX2ZpcmWUagUEAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQub25fZmlyZZRqBQQAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5yZXNldJRqBQQAAIwGbWV0aG9klIaUjDlhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5mcm9tX3J1bm5lcl9hcGmUagUEAACMDHN0YXRpY21ldGhvZJSGlIw3YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQudG9fcnVubmVyX2FwaZRqBQQAAIwGbWV0aG9klIaUjDlhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudC5oYXNfb250aW1lX3BhbmWUagUEAACMBm1ldGhvZJSGlIwpYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHmUagUEAACMBWNsYXNzlIaUjDRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseS5vbl9lbGVtZW50lGoFBAAAjAZtZXRob2SUhpSMMmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5Lm9uX21lcmdllGoFBAAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5LnNob3VsZF9maXJllGoFBAAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5Lm9uX2ZpcmWUagUEAACMBm1ldGhvZJSGlIwvYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkucmVzZXSUagUEAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkuZnJvbV9ydW5uZXJfYXBplGoFBAAAjAxzdGF0aWNtZXRob2SUhpSMN2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5LnRvX3J1bm5lcl9hcGmUagUEAACMBm1ldGhvZJSGlIw5YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkuaGFzX29udGltZV9wYW5llGoFBAAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFueZRqBQQAAIwFY2xhc3OUhpSMMmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFueS5jb21iaW5lX29wlGoFBAAAjAZtZXRob2SUhpSMJ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFsbJRqBQQAAIwFY2xhc3OUhpSMMmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckFsbC5jb21iaW5lX29wlGoFBAAAjAZtZXRob2SUhpSMKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2iUagUEAACMBWNsYXNzlIaUjDJhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLklOREVYX1RBR5RqBQQAAIwJYXR0cmlidXRllIaUjDNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLm9uX2VsZW1lbnSUagUEAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaC5vbl9tZXJnZZRqBQQAAIwGbWV0aG9klIaUjDRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLnNob3VsZF9maXJllGoFBAAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2gub25fZmlyZZRqBQQAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLnJlc2V0lGoFBAAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2guZnJvbV9ydW5uZXJfYXBplGoFBAAAjAxzdGF0aWNtZXRob2SUhpSMNmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2gudG9fcnVubmVyX2FwaZRqBQQAAIwGbWV0aG9klIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoLmhhc19vbnRpbWVfcGFuZZRqBQQAAIwGbWV0aG9klIaUjChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuT3JGaW5hbGx5lGoFBAAAjAVjbGFzc5SGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLk9yRmluYWxseS5mcm9tX3J1bm5lcl9hcGmUagUEAACMDHN0YXRpY21ldGhvZJSGlIw2YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLk9yRmluYWxseS50b19ydW5uZXJfYXBplGoFBAAAjAZtZXRob2SUhpSMIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRllGr4AwAAatpTAACGlIwqYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuU3RhdGVTcGVjlGr4AwAAjAVjbGFzc5SGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGmUavgDAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQmFnU3RhdGVTcGVjlGr4AwAAjAVjbGFzc5SGlIw7YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQmFnU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGmUavgDAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuU2V0U3RhdGVTcGVjlGr4AwAAjAVjbGFzc5SGlIw7YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuU2V0U3RhdGVTcGVjLnRvX3J1bm5lcl9hcGmUavgDAACMBm1ldGhvZJSGlIw4YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWOUavgDAACMBWNsYXNzlIaUjEZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVN0YXRlU3BlYy50b19ydW5uZXJfYXBplGr4AwAAjAZtZXRob2SUhpSMKmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlRpbWVyU3BlY5Rq+AMAAIwFY2xhc3OUhpSMOGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlRpbWVyU3BlYy50b19ydW5uZXJfYXBplGr4AwAAjAZtZXRob2SUhpSMKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLm9uX3RpbWVylGr4AwAAjAhmdW5jdGlvbpSGlIwvYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuZ2V0X2RvZm5fc3BlY3OUavgDAACMCGZ1bmN0aW9ulIaUjDFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5pc19zdGF0ZWZ1bF9kb2ZulGr4AwAAjAhmdW5jdGlvbpSGlIw3YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUudmFsaWRhdGVfc3RhdGVmdWxfZG9mbpRq+AMAAIwIZnVuY3Rpb26UhpSMLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVUaW1lcpRq+AMAAIwFY2xhc3OUhpSMM2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVUaW1lci5jbGVhcpRq+AMAAIwGbWV0aG9klIaUjDFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5SdW50aW1lVGltZXIuc2V0lGr4AwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVTdGF0ZZRq+AMAAIwFY2xhc3OUhpSMNmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVTdGF0ZS5wcmVmZXRjaJRq+AMAAIwGbWV0aG9klIaUjDlhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5BY2N1bXVsYXRpbmdSdW50aW1lU3RhdGWUavgDAACMBWNsYXNzlIaUjD5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5BY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUucmVhZJRq+AMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5BY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUuYWRklGr4AwAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkFjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZS5jbGVhcpRq+AMAAIwGbWV0aG9klIaUjEBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5BY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUuY29tbWl0lGr4AwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkJhZ1J1bnRpbWVTdGF0ZZRq+AMAAIwFY2xhc3OUhpSMMGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlNldFJ1bnRpbWVTdGF0ZZRq+AMAAIwFY2xhc3OUhpSMO2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkNvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRllGr4AwAAjAVjbGFzc5SGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuVXNlclN0YXRlQ29udGV4dJRq+AMAAIwFY2xhc3OUhpSMO2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlVzZXJTdGF0ZUNvbnRleHQuZ2V0X3RpbWVylGr4AwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlVzZXJTdGF0ZUNvbnRleHQuZ2V0X3N0YXRllGr4AwAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlVzZXJTdGF0ZUNvbnRleHQuY29tbWl0lGr4AwAAjAZtZXRob2SUhpSMG2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbJRqOQMAAGraUwAAhpSMKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5Db0dyb3VwQnlLZXmUajkDAACMBWNsYXNzlIaUjC9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuQ29Hcm91cEJ5S2V5LmV4cGFuZJRqOQMAAIwGbWV0aG9klIaUjCBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuS2V5c5RqOQMAAIwIZnVuY3Rpb26UhpSMImFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5WYWx1ZXOUajkDAACMCGZ1bmN0aW9ulIaUjCJhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuS3ZTd2FwlGo5AwAAjAhmdW5jdGlvbpSGlIwkYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLkRpc3RpbmN0lGo5AwAAjAhmdW5jdGlvbpSGlIwsYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlbW92ZUR1cGxpY2F0ZXOUajkDAACMCGZ1bmN0aW9ulIaUjClhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuQmF0Y2hFbGVtZW50c5RqOQMAAIwFY2xhc3OUhpSMMGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5CYXRjaEVsZW1lbnRzLmV4cGFuZJRqOQMAAIwGbWV0aG9klIaUjCVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVzaHVmZmxllGo5AwAAjAVjbGFzc5SGlIwsYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlc2h1ZmZsZS5leHBhbmSUajkDAACMBm1ldGhvZJSGlIw9YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlc2h1ZmZsZS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqOQMAAIwGbWV0aG9klIaUjD9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVzaHVmZmxlLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUajkDAACMDHN0YXRpY21ldGhvZJSGlIwkYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLldpdGhLZXlzlGo5AwAAjAhmdW5jdGlvbpSGlIwsYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLkdyb3VwSW50b0JhdGNoZXOUajkDAACMBWNsYXNzlIaUjDNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuR3JvdXBJbnRvQmF0Y2hlcy5leHBhbmSUajkDAACMBm1ldGhvZJSGlIwkYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlRvU3RyaW5nlGo5AwAAjAVjbGFzc5SGlIwoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlRvU3RyaW5nLkt2c5RqOQMAAIwFY2xhc3OUhpSML2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5Ub1N0cmluZy5LdnMuZXhwYW5klGo5AwAAjAZtZXRob2SUhpSMLGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5Ub1N0cmluZy5FbGVtZW50lGo5AwAAjAVjbGFzc5SGlIwzYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlRvU3RyaW5nLkVsZW1lbnQuZXhwYW5klGo5AwAAjAZtZXRob2SUhpSMLmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5Ub1N0cmluZy5JdGVyYWJsZXOUajkDAACMBWNsYXNzlIaUjDVhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuVG9TdHJpbmcuSXRlcmFibGVzLmV4cGFuZJRqOQMAAIwGbWV0aG9klIaUjCFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVpZnmUajkDAACMBWNsYXNzlIaUjCthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVpZnkuVGltZXN0YW1wlGo5AwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlaWZ5LlRpbWVzdGFtcC5hZGRfdGltZXN0YW1wX2luZm+UajkDAACMDHN0YXRpY21ldGhvZJSGlIwyYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlaWZ5LlRpbWVzdGFtcC5leHBhbmSUajkDAACMBm1ldGhvZJSGlIwoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlaWZ5LldpbmRvd5RqOQMAAIwFY2xhc3OUhpSMOGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWlmeS5XaW5kb3cuYWRkX3dpbmRvd19pbmZvlGo5AwAAjAxzdGF0aWNtZXRob2SUhpSML2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWlmeS5XaW5kb3cuZXhwYW5klGo5AwAAjAZtZXRob2SUhpSMMmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWlmeS5UaW1lc3RhbXBJblZhbHVllGo5AwAAjAVjbGFzc5SGlIxFYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlaWZ5LlRpbWVzdGFtcEluVmFsdWUuYWRkX3RpbWVzdGFtcF9pbmZvlGo5AwAAjAxzdGF0aWNtZXRob2SUhpSMOWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWlmeS5UaW1lc3RhbXBJblZhbHVlLmV4cGFuZJRqOQMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVpZnkuV2luZG93SW5WYWx1ZZRqOQMAAIwFY2xhc3OUhpSMP2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWlmeS5XaW5kb3dJblZhbHVlLmFkZF93aW5kb3dfaW5mb5RqOQMAAIwMc3RhdGljbWV0aG9klIaUjDZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVpZnkuV2luZG93SW5WYWx1ZS5leHBhbmSUajkDAACMBm1ldGhvZJSGlIwhYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4lGo5AwAAjAVjbGFzc5SGlIwlYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4LkFMTJRqOQMAAIwJYXR0cmlidXRllIaUjClhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVnZXgubWF0Y2hlc5RqOQMAAIwMc3RhdGljbWV0aG9klIaUjC1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVnZXguYWxsX21hdGNoZXOUajkDAACMDHN0YXRpY21ldGhvZJSGlIwsYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4Lm1hdGNoZXNfa3aUajkDAACMDHN0YXRpY21ldGhvZJSGlIwmYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4LmZpbmSUajkDAACMDHN0YXRpY21ldGhvZJSGlIwqYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4LmZpbmRfYWxslGo5AwAAjAxzdGF0aWNtZXRob2SUhpSMKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWdleC5maW5kX2t2lGo5AwAAjAxzdGF0aWNtZXRob2SUhpSMLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWdleC5yZXBsYWNlX2FsbJRqOQMAAIwMc3RhdGljbWV0aG9klIaUjC9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVnZXgucmVwbGFjZV9maXJzdJRqOQMAAIwMc3RhdGljbWV0aG9klIaUjCdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVnZXguc3BsaXSUajkDAACMDHN0YXRpY21ldGhvZJSGlIwdYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3eUamEDAABq2lMAAIaUjC9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lcpRqYQMAAIwFY2xhc3OUhpSMPWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FT1eUamEDAACMCWF0dHJpYnV0ZZSGlIxCYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VBUkxJRVNUlGphAwAAjAlhdHRyaWJ1dGWUhpSMQGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9MQVRFU1SUamEDAACMCWF0dHJpYnV0ZZSGlIxOYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VBUkxJRVNUX1RSQU5TRk9STUVElGphAwAAjAlhdHRyaWJ1dGWUhpSMOGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyLmdldF9pbXBslGphAwAAjAxzdGF0aWNtZXRob2SUhpSMJmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZulGphAwAAjAVjbGFzc5SGlIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4uQXNzaWduQ29udGV4dJRqYQMAAIwFY2xhc3OUhpSMLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLmFzc2lnbpRqYQMAAIwGbWV0aG9klIaUjDNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5NZXJnZUNvbnRleHSUamEDAACMBWNsYXNzlIaUjDlhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5NZXJnZUNvbnRleHQubWVyZ2WUamEDAACMBm1ldGhvZJSGlIwsYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4ubWVyZ2WUamEDAACMBm1ldGhvZJSGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4uaXNfbWVyZ2luZ5RqYQMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi5nZXRfd2luZG93X2NvZGVylGphAwAAjAZtZXRob2SUhpSMQmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLmdldF90cmFuc2Zvcm1lZF9vdXRwdXRfdGltZZRqYQMAAIwGbWV0aG9klIaUjD5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqYQMAAIwGbWV0aG9klIaUjCthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Cb3VuZGVkV2luZG93lGphAwAAjAVjbGFzc5SGlIwvYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdy5lbmSUamEDAACMCWF0dHJpYnV0ZZSGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdy5zdGFydJRqYQMAAIwJYXR0cmlidXRllIaUjDlhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5Cb3VuZGVkV2luZG93Lm1heF90aW1lc3RhbXCUamEDAACMBm1ldGhvZJSGlIwsYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuSW50ZXJ2YWxXaW5kb3eUamEDAACMBWNsYXNzlIaUjDJhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdy5zdGFydJRqYQMAAIwJYXR0cmlidXRllIaUjDBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdy5lbmSUamEDAACMCWF0dHJpYnV0ZZSGlIw3YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuSW50ZXJ2YWxXaW5kb3cuaW50ZXJzZWN0c5RqYQMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdy51bmlvbpRqYQMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBlZFZhbHVllGphAwAAjAVjbGFzc5SGlIw0YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wZWRWYWx1ZS52YWx1ZZRqYQMAAIwJYXR0cmlidXRllIaUjDhhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBlZFZhbHVlLnRpbWVzdGFtcJRqYQMAAIwJYXR0cmlidXRllIaUjCphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3eUamEDAACMBWNsYXNzlIaUjDBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3cuc3RhcnSUamEDAACMCWF0dHJpYnV0ZZSGlIwwYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuTm9uTWVyZ2luZ1dpbmRvd0ZulGphAwAAjAVjbGFzc5SGlIw7YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuTm9uTWVyZ2luZ1dpbmRvd0ZuLmlzX21lcmdpbmeUamEDAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuTm9uTWVyZ2luZ1dpbmRvd0ZuLm1lcmdllGphAwAAjAZtZXRob2SUhpSMK2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3OUamEDAACMBWNsYXNzlIaUjDphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVllGphAwAAjAtjbGFzc21ldGhvZJSGlIwyYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93cy5hc3NpZ26UamEDAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93cy5nZXRfd2luZG93X2NvZGVylGphAwAAjAZtZXRob2SUhpSMQ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUamEDAACMBm1ldGhvZJSGlIxFYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuR2xvYmFsV2luZG93cy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGphAwAAjAxzdGF0aWNtZXRob2SUhpSMKmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93c5RqYQMAAIwFY2xhc3OUhpSML2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cy5zaXpllGphAwAAjAlhdHRyaWJ1dGWUhpSMMWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cy5vZmZzZXSUamEDAACMCWF0dHJpYnV0ZZSGlIwxYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzLmFzc2lnbpRqYQMAAIwGbWV0aG9klIaUjDthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcpRqYQMAAIwGbWV0aG9klIaUjEJhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUamEDAACMBm1ldGhvZJSGlIxEYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUamEDAACMDHN0YXRpY21ldGhvZJSGlIwsYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3OUamEDAACMBWNsYXNzlIaUjDFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cy5zaXpllGphAwAAjAlhdHRyaWJ1dGWUhpSMM2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzLnBlcmlvZJRqYQMAAIwJYXR0cmlidXRllIaUjDNhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cy5vZmZzZXSUamEDAACMCWF0dHJpYnV0ZZSGlIwzYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MuYXNzaWdulGphAwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzLmdldF93aW5kb3dfY29kZXKUamEDAACMBm1ldGhvZJSGlIxEYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUamEDAACMBm1ldGhvZJSGlIxGYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqYQMAAIwMc3RhdGljbWV0aG9klIaUjCZhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9uc5RqYQMAAIwFY2xhc3OUhpSML2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zLmdhcF9zaXpllGphAwAAjAlhdHRyaWJ1dGWUhpSMLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zLmFzc2lnbpRqYQMAAIwGbWV0aG9klIaUjDdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucy5nZXRfd2luZG93X2NvZGVylGphAwAAjAZtZXRob2SUhpSMLGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zLm1lcmdllGphAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGphAwAAjAZtZXRob2SUhpSMQGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUamEDAACMDHN0YXRpY21ldGhvZJSGlIwVYXBhY2hlX2JlYW0udHlwZWhpbnRzlGrBAwAAatpTAACGlIwgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnOUatsDAABq2lMAAIaUjC9hcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5ub19hbm5vdGF0aW9uc5Rq2wMAAIwIZnVuY3Rpb26UhpSMLmFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHOUatsDAACMBWNsYXNzlIaUjD1hcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzLmdldF90eXBlX2hpbnRzlGrbAwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHMuZGVmYXVsdF90eXBlX2hpbnRzlGrbAwAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHMud2l0aF9pbnB1dF90eXBlc5Rq2wMAAIwGbWV0aG9klIaUjEBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzLndpdGhfb3V0cHV0X3R5cGVzlGrbAwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLlR5cGVDaGVja0Vycm9ylGrbAwAAjAlleGNlcHRpb26UhpSMMWFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLndpdGhfaW5wdXRfdHlwZXOUatsDAACMCGZ1bmN0aW9ulIaUjDJhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy53aXRoX291dHB1dF90eXBlc5Rq2wMAAIwIZnVuY3Rpb26UhpSMKWFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzX3Rlc3RfcHkzlGqUAwAAatpTAACGlIw5YXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0lGqUAwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0LnRlc3RfZnJvbV9jYWxsYWJsZZRqlAMAAIwGbWV0aG9klIaUjGBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5JT1R5cGVIaW50c1Rlc3QudGVzdF9mcm9tX2NhbGxhYmxlX3BhcnRpYWxfYW5ub3RhdGlvbnOUapQDAACMBm1ldGhvZJSGlIxSYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0LnRlc3RfZnJvbV9jYWxsYWJsZV9jbGFzc5RqlAMAAIwGbWV0aG9klIaUjFNhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5JT1R5cGVIaW50c1Rlc3QudGVzdF9mcm9tX2NhbGxhYmxlX21ldGhvZJRqlAMAAIwGbWV0aG9klIaUjGJhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5JT1R5cGVIaW50c1Rlc3QudGVzdF9mcm9tX2NhbGxhYmxlX2NvbnZlcnRfdG9fYmVhbV90eXBlc5RqlAMAAIwGbWV0aG9klIaUjFRhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5JT1R5cGVIaW50c1Rlc3QudGVzdF9mcm9tX2NhbGxhYmxlX3BhcnRpYWyUapQDAACMBm1ldGhvZJSGlIxTYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0LnRlc3RfZ2V0Y2FsbGFyZ3NfZm9yaGludHOUapQDAACMBm1ldGhvZJSGlIxfYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0LnRlc3RfZ2V0Y2FsbGFyZ3NfZm9yaGludHNfZGVmYXVsdF9hcmeUapQDAACMBm1ldGhvZJSGlIxfYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0LnRlc3RfZ2V0Y2FsbGFyZ3NfZm9yaGludHNfbWlzc2luZ19hcmeUapQDAACMBm1ldGhvZJSGlIxFYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0LnRlc3Rfb3JpZ2lulGqUAwAAjAZtZXRob2SUhpSMOGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzX3Rlc3RfcHkzLkRlY29yYXRvcnNUZXN0lGqUAwAAjAVjbGFzc5SGlIxMYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuRGVjb3JhdG9yc1Rlc3QudGVzdF9ub19hbm5vdGF0aW9uc5RqlAMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eZRqjQMAAGraUwAAhpSMRWFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmV4dHJhY3Rfb3B0aW9uYWxfdHlwZZRqjQMAAIwIZnVuY3Rpb26UhpSMNmFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmlzX0FueZRqjQMAAIwIZnVuY3Rpb26UhpSMO2FwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmlzX25ld190eXBllGqNAwAAjAhmdW5jdGlvbpSGlIxEYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGWUao0DAACMCGZ1bmN0aW9ulIaUjEVhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZXOUao0DAACMCGZ1bmN0aW9ulIaUjEZhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX3R5cGluZ190eXBllGqNAwAAjAhmdW5jdGlvbpSGlIxHYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b190eXBpbmdfdHlwZXOUao0DAACMCGZ1bmN0aW9ulIaUjB1hcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlc5Rq5wMAAGraUwAAhpSMJWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnBvcF9vbmWUaucDAACMCGZ1bmN0aW9ulIaUjCVhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5wb3BfdHdvlGrnAwAAjAhmdW5jdGlvbpSGlIwnYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMucG9wX3RocmVllGrnAwAAjAhmdW5jdGlvbpSGlIwoYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMucHVzaF92YWx1ZZRq5wMAAIwIZnVuY3Rpb26UhpSMIWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLm5vcJRq5wMAAIwIZnVuY3Rpb26UhpSMJWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnBvcF90b3CUaucDAACMCGZ1bmN0aW9ulIaUjCNhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5yb3RfbpRq5wMAAIwIZnVuY3Rpb26UhpSMJWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnJvdF90d2+UaucDAACMCGZ1bmN0aW9ulIaUjCdhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5yb3RfdGhyZWWUaucDAACMCGZ1bmN0aW9ulIaUjCZhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5yb3RfZm91cpRq5wMAAIwIZnVuY3Rpb26UhpSMJWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmR1cF90b3CUaucDAACMCGZ1bmN0aW9ulIaUjCNhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeZRq5wMAAIwIZnVuY3Rpb26UhpSMLGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnVuYXJ5X3Bvc2l0aXZllGrnAwAAjAhmdW5jdGlvbpSGlIwsYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMudW5hcnlfbmVnYXRpdmWUaucDAACMCGZ1bmN0aW9ulIaUjCphcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeV9pbnZlcnSUaucDAACMCGZ1bmN0aW9ulIaUjCdhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeV9ub3SUaucDAACMCGZ1bmN0aW9ulIaUjCthcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy51bmFyeV9jb252ZXJ0lGrnAwAAjAhmdW5jdGlvbpSGlIwmYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZ2V0X2l0ZXKUaucDAACMCGZ1bmN0aW9ulIaUjDFhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zeW1tZXRyaWNfYmluYXJ5X29wlGrnAwAAjAhmdW5jdGlvbpSGlIwqYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X3Bvd2VylGrnAwAAjAhmdW5jdGlvbpSGlIwrYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9wb3dlcpRq5wMAAIwIZnVuY3Rpb26UhpSMLWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJpbmFyeV9tdWx0aXBseZRq5wMAAIwIZnVuY3Rpb26UhpSMLmFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2VfbXVsdGlwbHmUaucDAACMCGZ1bmN0aW9ulIaUjCthcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfZGl2aWRllGrnAwAAjAhmdW5jdGlvbpSGlIwsYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9kaXZpZGWUaucDAACMCGZ1bmN0aW9ulIaUjDFhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfZmxvb3JfZGl2aWRllGrnAwAAjAhmdW5jdGlvbpSGlIwyYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9mbG9vcl9kaXZpZGWUaucDAACMCGZ1bmN0aW9ulIaUjDBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfdHJ1ZV9kaXZpZGWUaucDAACMCGZ1bmN0aW9ulIaUjDFhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBsYWNlX3RydWVfZGl2aWRllGrnAwAAjAhmdW5jdGlvbpSGlIwrYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X21vZHVsb5Rq5wMAAIwIZnVuY3Rpb26UhpSMLGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2VfbW9kdWxvlGrnAwAAjAhmdW5jdGlvbpSGlIwoYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X2FkZJRq5wMAAIwIZnVuY3Rpb26UhpSMKWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmlucGxhY2VfYWRklGrnAwAAjAhmdW5jdGlvbpSGlIwtYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYmluYXJ5X3N1YnRyYWN0lGrnAwAAjAhmdW5jdGlvbpSGlIwuYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9zdWJ0cmFjdJRq5wMAAIwIZnVuY3Rpb26UhpSMK2FwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJpbmFyeV9zdWJzY3KUaucDAACMCGZ1bmN0aW9ulIaUjCthcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfbHNoaWZ0lGrnAwAAjAhmdW5jdGlvbpSGlIwsYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9sc2hpZnSUaucDAACMCGZ1bmN0aW9ulIaUjCthcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfcnNoaWZ0lGrnAwAAjAhmdW5jdGlvbpSGlIwsYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9yc2hpZnSUaucDAACMCGZ1bmN0aW9ulIaUjChhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfYW5klGrnAwAAjAhmdW5jdGlvbpSGlIwpYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV9hbmSUaucDAACMCGZ1bmN0aW9ulIaUjChhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfeG9ylGrnAwAAjAhmdW5jdGlvbpSGlIwpYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW5wbGFjZV94b3KUaucDAACMCGZ1bmN0aW9ulIaUjCdhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5iaW5hcnlfb3KUaucDAACMCGZ1bmN0aW9ulIaUjChhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5pbnBhbGNlX29ylGrnAwAAjAhmdW5jdGlvbpSGlIwqYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuc3RvcmVfc3Vic2NylGrnAwAAjAhmdW5jdGlvbpSGlIwoYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMucHJpbnRfaXRlbZRq5wMAAIwIZnVuY3Rpb26UhpSMK2FwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnByaW50X25ld2xpbmWUaucDAACMCGZ1bmN0aW9ulIaUjClhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5saXN0X2FwcGVuZJRq5wMAAIwIZnVuY3Rpb26UhpSMJWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLm1hcF9hZGSUaucDAACMCGZ1bmN0aW9ulIaUjClhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5sb2FkX2xvY2Fsc5Rq5wMAAIwIZnVuY3Rpb26UhpSMJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmV4ZWNfc3RtdJRq5wMAAIwIZnVuY3Rpb26UhpSMKWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX2NsYXNzlGrnAwAAjAhmdW5jdGlvbpSGlIwtYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMudW5wYWNrX3NlcXVlbmNllGrnAwAAjAhmdW5jdGlvbpSGlIwmYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZHVwX3RvcHiUaucDAACMCGZ1bmN0aW9ulIaUjChhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9hdHRylGrnAwAAjAhmdW5jdGlvbpSGlIwpYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuZGVsZXRlX2F0dHKUaucDAACMCGZ1bmN0aW9ulIaUjCphcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5zdG9yZV9nbG9iYWyUaucDAACMCGZ1bmN0aW9ulIaUjCthcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kZWxldGVfZ2xvYmFslGrnAwAAjAhmdW5jdGlvbpSGlIwoYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMubG9hZF9jb25zdJRq5wMAAIwIZnVuY3Rpb26UhpSMJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfbmFtZZRq5wMAAIwIZnVuY3Rpb26UhpSMKWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX3R1cGxllGrnAwAAjAhmdW5jdGlvbpSGlIwoYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYnVpbGRfbGlzdJRq5wMAAIwIZnVuY3Rpb26UhpSMJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX21hcJRq5wMAAIwIZnVuY3Rpb26UhpSMJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfYXR0cpRq5wMAAIwIZnVuY3Rpb26UhpSMKWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfbWV0aG9klGrnAwAAjAhmdW5jdGlvbpSGlIwoYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuY29tcGFyZV9vcJRq5wMAAIwIZnVuY3Rpb26UhpSMKWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmltcG9ydF9uYW1llGrnAwAAjAhmdW5jdGlvbpSGlIwpYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuaW1wb3J0X2Zyb22UaucDAACMCGZ1bmN0aW9ulIaUjClhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5sb2FkX2dsb2JhbJRq5wMAAIwIZnVuY3Rpb26UhpSMJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX21hcJRq5wMAAIwIZnVuY3Rpb26UhpSMJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfZmFzdJRq5wMAAIwIZnVuY3Rpb26UhpSMKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLnN0b3JlX2Zhc3SUaucDAACMCGZ1bmN0aW9ulIaUjClhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5kZWxldGVfZmFzdJRq5wMAAIwIZnVuY3Rpb26UhpSMKmFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfY2xvc3VyZZRq5wMAAIwIZnVuY3Rpb26UhpSMKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmxvYWRfZGVyZWaUaucDAACMCGZ1bmN0aW9ulIaUjCthcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5tYWtlX2Z1bmN0aW9ulGrnAwAAjAhmdW5jdGlvbpSGlIwqYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMubWFrZV9jbG9zdXJllGrnAwAAjAhmdW5jdGlvbpSGlIwpYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMuYnVpbGRfc2xpY2WUaucDAACMCGZ1bmN0aW9ulIaUjC9hcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2Rlcy5idWlsZF9saXN0X3VucGFja5Rq5wMAAIwIZnVuY3Rpb26UhpSMMGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX3R1cGxlX3VucGFja5Rq5wMAAIwIZnVuY3Rpb26UhpSMOmFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzLmJ1aWxkX3R1cGxlX3VucGFja193aXRoX2NhbGyUaucDAACMCGZ1bmN0aW9ulIaUjB1hcGFjaGVfYmVhbS50eXBlaGludHMuc2NoZW1hc5RqbwMAAGraUwAAhpSMMGFwYWNoZV9iZWFtLnR5cGVoaW50cy5zY2hlbWFzLlNjaGVtYVR5cGVSZWdpc3RyeZRqbwMAAIwFY2xhc3OUhpSMNGFwYWNoZV9iZWFtLnR5cGVoaW50cy5zY2hlbWFzLlNjaGVtYVR5cGVSZWdpc3RyeS5hZGSUam8DAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMuU2NoZW1hVHlwZVJlZ2lzdHJ5LmdldF90eXBpbmdfYnlfaWSUam8DAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMuU2NoZW1hVHlwZVJlZ2lzdHJ5LmdldF9zY2hlbWFfYnlfaWSUam8DAACMBm1ldGhvZJSGlIwyYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMudHlwaW5nX3RvX3J1bm5lcl9hcGmUam8DAACMCGZ1bmN0aW9ulIaUjDRhcGFjaGVfYmVhbS50eXBlaGludHMuc2NoZW1hcy50eXBpbmdfZnJvbV9ydW5uZXJfYXBplGpvAwAAjAhmdW5jdGlvbpSGlIw1YXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMubmFtZWRfdHVwbGVfZnJvbV9zY2hlbWGUam8DAACMCGZ1bmN0aW9ulIaUjDNhcGFjaGVfYmVhbS50eXBlaGludHMuc2NoZW1hcy5uYW1lZF90dXBsZV90b19zY2hlbWGUam8DAACMCGZ1bmN0aW9ulIaUjCdhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2WUaq0DAABq2lMAAIaUjDphcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuVHlwZUluZmVyZW5jZUVycm9ylGqtAwAAjAlleGNlcHRpb26UhpSMOGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5pbnN0YW5jZV90b190eXBllGqtAwAAjAhmdW5jdGlvbpSGlIwyYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLnVuaW9uX2xpc3SUaq0DAACMCGZ1bmN0aW9ulIaUjC1hcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuQ29uc3SUaq0DAACMBWNsYXNzlIaUjDRhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuQ29uc3QudW53cmFwlGqtAwAAjAxzdGF0aWNtZXRob2SUhpSMOGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5Db25zdC51bndyYXBfYWxslGqtAwAAjAxzdGF0aWNtZXRob2SUhpSMMmFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRllGqtAwAAjAVjbGFzc5SGlIw3YXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUuY29weZRqrQMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZS5jb25zdF90eXBllGqtAwAAjAZtZXRob2SUhpSMPmFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlLmdldF9jbG9zdXJllGqtAwAAjAZtZXRob2SUhpSMP2FwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlLmNsb3N1cmVfdHlwZZRqrQMAAIwGbWV0aG9klIaUjD1hcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UuRnJhbWVTdGF0ZS5nZXRfZ2xvYmFslGqtAwAAjAZtZXRob2SUhpSMO2FwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlLmdldF9uYW1llGqtAwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS51bmlvbpRqrQMAAIwIZnVuY3Rpb26UhpSMNmFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5maW5hbGl6ZV9oaW50c5RqrQMAAIwIZnVuY3Rpb26UhpSMNGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5lbGVtZW50X3R5cGWUaq0DAACMCGZ1bmN0aW9ulIaUjDdhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2Uua2V5X3ZhbHVlX3R5cGVzlGqtAwAAjAhmdW5jdGlvbpSGlIwzYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkJvdW5kTWV0aG9klGqtAwAAjAVjbGFzc5SGlIwwYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLmhhc2hhYmxllGqtAwAAjAhmdW5jdGlvbpSGlIw5YXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLmluZmVyX3JldHVybl90eXBllGqtAwAAjAhmdW5jdGlvbpSGlIw+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLmluZmVyX3JldHVybl90eXBlX2Z1bmOUaq0DAACMCGZ1bmN0aW9ulIaUjDBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VfdGVzdF9weTOUatYDAABq2lMAAIaUjEVhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VfdGVzdF9weTMuVHJpdmlhbEluZmVyZW5jZVRlc3SUatYDAACMBWNsYXNzlIaUjFZhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VfdGVzdF9weTMuVHJpdmlhbEluZmVyZW5jZVRlc3QuYXNzZXJ0UmV0dXJuVHlwZZRq1gMAAIwGbWV0aG9klIaUjFlhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VfdGVzdF9weTMuVHJpdmlhbEluZmVyZW5jZVRlc3QudGVzdEJ1aWxkTGlzdFVucGFja5Rq1gMAAIwGbWV0aG9klIaUjFphcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VfdGVzdF9weTMuVHJpdmlhbEluZmVyZW5jZVRlc3QudGVzdEJ1aWxkVHVwbGVVbnBhY2uUatYDAACMBm1ldGhvZJSGlIwfYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVja5RqQQMAAGraUwAAhpSMM2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlcpRqQQMAAIwFY2xhc3OUhpSMO2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci53cmFwcGVylGpBAwAAjAZtZXRob2SUhpSMQGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlci5zdGFydF9idW5kbGWUakEDAACMBm1ldGhvZJSGlIw7YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5BYnN0cmFjdERvRm5XcmFwcGVyLnByb2Nlc3OUakEDAACMBm1ldGhvZJSGlIxBYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5BYnN0cmFjdERvRm5XcmFwcGVyLmZpbmlzaF9idW5kbGWUakEDAACMBm1ldGhvZJSGlIw2YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5PdXRwdXRDaGVja1dyYXBwZXJEb0ZulGpBAwAAjAVjbGFzc5SGlIw+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5PdXRwdXRDaGVja1dyYXBwZXJEb0ZuLndyYXBwZXKUakEDAACMBm1ldGhvZJSGlIw0YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tXcmFwcGVyRG9GbpRqQQMAAIwFY2xhc3OUhpSMPGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrV3JhcHBlckRvRm4ud3JhcHBlcpRqQQMAAIwGbWV0aG9klIaUjDxhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1dyYXBwZXJEb0ZuLnByb2Nlc3OUakEDAACMBm1ldGhvZJSGlIwyYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tDb21iaW5lRm6UakEDAACMBWNsYXNzlIaUjEVhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja0NvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3KUakEDAACMBm1ldGhvZJSGlIw8YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tDb21iaW5lRm4uYWRkX2lucHV0lGpBAwAAjAZtZXRob2SUhpSMRWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc5RqQQMAAIwGbWV0aG9klIaUjDphcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja0NvbWJpbmVGbi5jb21wYWN0lGpBAwAAjAZtZXRob2SUhpSMQWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0lGpBAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrVmlzaXRvcpRqQQMAAIwFY2xhc3OUhpSMSmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrVmlzaXRvci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtlGpBAwAAjAZtZXRob2SUhpSMSmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrVmlzaXRvci5sZWF2ZV9jb21wb3NpdGVfdHJhbnNmb3JtlGpBAwAAjAZtZXRob2SUhpSMQGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrVmlzaXRvci52aXNpdF90cmFuc2Zvcm2UakEDAACMBm1ldGhvZJSGlIwtYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzlGpuAwAAatpTAACGlIw7YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3SUam4DAACMBWNsYXNzlIaUjFJhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fbWV0aG9klGpuAwAAjAZtZXRob2SUhpSMaGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9tZXRob2Rfd2l0aF9jbGFzc19kZWNvcmF0b3JzlGpuAwAAjAZtZXRob2SUhpSMVGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9pbnN0YW5jZZRqbgMAAIwGbWV0aG9klIaUjFhhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2NhbGxhYmxlX2luc3RhbmNllGpuAwAAjAZtZXRob2SUhpSMX2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfY2FsbGFibGVfaXRlcmFibGVfb3V0cHV0lGpuAwAAjAZtZXRob2SUhpSMX2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9tZXRob2Rfbm90X2l0ZXJhYmxllGpuAwAAjAZtZXRob2SUhpSMXmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9tZXRob2RfcmV0dXJuX25vbmWUam4DAACMBm1ldGhvZJSGlIxiYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fb3B0aW9uYWyUam4DAACMBm1ldGhvZJSGlIxvYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fb3B0aW9uYWxfbm90X2l0ZXJhYmxllGpuAwAAjAZtZXRob2SUhpSMXGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfY2FsbGFibGVfbm90X2l0ZXJhYmxllGpuAwAAjAZtZXRob2SUhpSMUmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9rd29ubHmUam4DAACMBm1ldGhvZJSGlIxWYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX3Zhcl9rd2FyZ3OUam4DAACMBm1ldGhvZJSGlIxfYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9jYWxsYWJsZV9zdHJpbmdfbGl0ZXJhbHOUam4DAACMBm1ldGhvZJSGlIxbYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX3N0cmluZ19saXRlcmFsc5RqbgMAAIwGbWV0aG9klIaUjEphcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX21hcJRqbgMAAIwGbWV0aG9klIaUjFphcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX21hcF9yZXR1cm5fb3B0aW9uYWyUam4DAACMBm1ldGhvZJSGlIxOYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9mbGF0bWFwlGpuAwAAjAZtZXRob2SUhpSMZ2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZmxhdG1hcF9vdXRwdXRfaGludF9ub3RfaXRlcmFibGWUam4DAACMBm1ldGhvZJSGlIxoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9mbGF0bWFwX291dHB1dF92YWx1ZV9ub3RfaXRlcmFibGWUam4DAACMBm1ldGhvZJSGlIxXYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9mbGF0bWFwX29wdGlvbmFslGpuAwAAjAZtZXRob2SUhpSMPWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5Bbm5vdGF0aW9uc1Rlc3SUam4DAACMBWNsYXNzlIaUjE1hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuQW5ub3RhdGlvbnNUZXN0LnRlc3RfcGFyZG9fZG9mbpRqbgMAAIwGbWV0aG9klIaUjFphcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuQW5ub3RhdGlvbnNUZXN0LnRlc3RfcGFyZG9fZG9mbl9ub3RfaXRlcmFibGWUam4DAACMBm1ldGhvZJSGlIxQYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX3dyYXBwZXKUam4DAACMBm1ldGhvZJSGlIxWYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX3dyYXBwZXJfdHVwbGWUam4DAACMBm1ldGhvZJSGlIxdYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX3dyYXBwZXJfbm90X2l0ZXJhYmxllGpuAwAAjAZtZXRob2SUhpSMU2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5Bbm5vdGF0aW9uc1Rlc3QudGVzdF9mbGF0X21hcF93cmFwcGVylGpuAwAAjAZtZXRob2SUhpSMY2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5Bbm5vdGF0aW9uc1Rlc3QudGVzdF9mbGF0X21hcF93cmFwcGVyX29wdGlvbmFsX291dHB1dJRqbgMAAIwGbWV0aG9klIaUjFlhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuQW5ub3RhdGlvbnNUZXN0LnRlc3RfZmxhdF9tYXBfdHVwbGVfd3JhcHBlcpRqbgMAAIwGbWV0aG9klIaUjE5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuQW5ub3RhdGlvbnNUZXN0LnRlc3RfbWFwX3dyYXBwZXKUam4DAACMBm1ldGhvZJSGlIxeYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdC50ZXN0X21hcF93cmFwcGVyX29wdGlvbmFsX291dHB1dJRqbgMAAIwGbWV0aG9klIaUjExhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuQW5ub3RhdGlvbnNUZXN0LnRlc3RfbWFwX3R1cGxllGpuAwAAjAZtZXRob2SUhpSMUWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5Bbm5vdGF0aW9uc1Rlc3QudGVzdF9maWx0ZXJfd3JhcHBlcpRqbgMAAIwGbWV0aG9klIaUjB9hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzlGrLAwAAatpTAACGlIwsYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlVmFyaWFibGWUassDAACMBWNsYXNzlIaUjEFhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVWYXJpYWJsZS5tYXRjaF90eXBlX3ZhcmlhYmxlc5RqywMAAIwGbWV0aG9klIaUjEBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVWYXJpYWJsZS5iaW5kX3R5cGVfdmFyaWFibGVzlGrLAwAAjAZtZXRob2SUhpSMLWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuV2luZG93ZWRWYWx1ZZRqywMAAIwJYXR0cmlidXRllIaUjChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzX3Rlc3RfcHkzlGqCAwAAatpTAACGlIw9YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c190ZXN0X3B5My5UZXN0UGFyRG9Bbm5vdGF0aW9uc5RqggMAAIwFY2xhc3OUhpSMUmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNfdGVzdF9weTMuVGVzdFBhckRvQW5ub3RhdGlvbnMudGVzdF93aXRoX3NpZGVfaW5wdXSUaoIDAACMBm1ldGhvZJSGlIxVYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c190ZXN0X3B5My5UZXN0UGFyRG9Bbm5vdGF0aW9ucy50ZXN0X3BlcDQ4NF9hbm5vdGF0aW9uc5RqggMAAIwGbWV0aG9klIaUjBFhcGFjaGVfYmVhbS51dGlsc5RqjwMAAGraUwAAhpSMHWFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zlGrHAwAAatpTAACGlIw0YXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnMuQmVhbURlcHJlY2F0aW9uV2FybmluZ5RqxwMAAIwJZXhjZXB0aW9ulIaUjCZhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucy5hbm5vdGF0ZZRqxwMAAIwIZnVuY3Rpb26UhpSMKGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zLmRlcHJlY2F0ZWSUascDAACMCGZ1bmN0aW9ulIaUjCphcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucy5leHBlcmltZW50YWyUascDAACMCGZ1bmN0aW9ulIaUjCNhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucy53cmFwc5RqxwMAAIwIZnVuY3Rpb26UhpSMI2FwYWNoZV9iZWFtLnV0aWxzLmludGVyYWN0aXZlX3V0aWxzlGrdAwAAatpTAACGlIwxYXBhY2hlX2JlYW0udXRpbHMuaW50ZXJhY3RpdmVfdXRpbHMuaXNfaW5faXB5dGhvbpRq3QMAAIwIZnVuY3Rpb26UhpSMMmFwYWNoZV9iZWFtLnV0aWxzLmludGVyYWN0aXZlX3V0aWxzLmlzX2luX25vdGVib29rlGrdAwAAjAhmdW5jdGlvbpSGlIw6YXBhY2hlX2JlYW0udXRpbHMuaW50ZXJhY3RpdmVfdXRpbHMuYWx0ZXJfbGFiZWxfaWZfaXB5dGhvbpRq3QMAAIwIZnVuY3Rpb26UhpSMGGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbpRqiAMAAGraUwAAhpSMI2FwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbi5CZWFtUGx1Z2lulGqIAwAAjAVjbGFzc5SGlIw2YXBhY2hlX2JlYW0udXRpbHMucGx1Z2luLkJlYW1QbHVnaW4uZ2V0X2FsbF9zdWJjbGFzc2VzlGqIAwAAjAtjbGFzc21ldGhvZJSGlIw4YXBhY2hlX2JlYW0udXRpbHMucGx1Z2luLkJlYW1QbHVnaW4uZ2V0X2FsbF9wbHVnaW5fcGF0aHOUaogDAACMC2NsYXNzbWV0aG9klIaUjBthcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXOUangDAABq2lMAAIaUjCBhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMuY2FsbJRqeAMAAIwIZnVuY3Rpb26UhpSMJmFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlcy5jaGVja19jYWxslGp4AwAAjAhmdW5jdGlvbpSGlIwoYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzLmNoZWNrX291dHB1dJSVJQABAAAAAABqeAMAAIwIZnVuY3Rpb26UhpSMIWFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlcy5Qb3BlbpRqeAMAAIwIZnVuY3Rpb26UhpSMGmFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVylGpqAwAAatpTAACGlIwiYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuUHJvZmlsZZRqagMAAIwFY2xhc3OUhpSMKWFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLlByb2ZpbGUuU09SVEJZlGpqAwAAjAlhdHRyaWJ1dGWUhpSMN2FwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLlByb2ZpbGUuZGVmYXVsdF9maWxlX2NvcHlfZm6UamoDAACMDHN0YXRpY21ldGhvZJSGlIw3YXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuUHJvZmlsZS5mYWN0b3J5X2Zyb21fb3B0aW9uc5RqagMAAIwMc3RhdGljbWV0aG9klIaUjClhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5NZW1vcnlSZXBvcnRlcpRqagMAAIwFY2xhc3OUhpSML2FwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLk1lbW9yeVJlcG9ydGVyLnN0YXJ0lGpqAwAAjAZtZXRob2SUhpSMLmFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLk1lbW9yeVJlcG9ydGVyLnN0b3CUamoDAACMBm1ldGhvZJSGlIw1YXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuTWVtb3J5UmVwb3J0ZXIucmVwb3J0X29uY2WUamoDAACMBm1ldGhvZJSGlIwdYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHOUarwDAABq2lMAAIaUjCZhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscy5wYWNrX0FueZRqvAMAAIwIZnVuY3Rpb26UhpSMKGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzLnVucGFja19BbnmUarwDAACMCGZ1bmN0aW9ulIaUjClhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscy5wYXJzZV9CeXRlc5RqvAMAAIwIZnVuY3Rpb26UhpSMKWFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzLnBhY2tfU3RydWN0lGq8AwAAjAhmdW5jdGlvbpSGlIwpYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMuZnJvbV9taWNyb3OUarwDAACMCGZ1bmN0aW9ulIaUjCphcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscy50b19UaW1lc3RhbXCUarwDAACMCGZ1bmN0aW9ulIaUjCxhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscy5mcm9tX1RpbWVzdGFtcJRqvAMAAIwIZnVuY3Rpb26UhpSMF2FwYWNoZV9iZWFtLnV0aWxzLnJldHJ5lGp0AwAAatpTAACGlIwqYXBhY2hlX2JlYW0udXRpbHMucmV0cnkuUGVybWFuZW50RXhjZXB0aW9ulGp0AwAAjAlleGNlcHRpb26UhpSMMmFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5LkZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzlGp0AwAAjAVjbGFzc5SGlIw1YXBhY2hlX2JlYW0udXRpbHMucmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXKUanQDAACMCGZ1bmN0aW9ulIaUjEJhcGFjaGVfYmVhbS51dGlscy5yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF9ub3Rmb3VuZF9maWx0ZXKUanQDAACMCGZ1bmN0aW9ulIaUjEFhcGFjaGVfYmVhbS51dGlscy5yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcpRqdAMAAIwIZnVuY3Rpb26UhpSMTWFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfdGltZW91dF9vcl9xdW90YV9pc3N1ZXNfZmlsdGVylGp0AwAAjAhmdW5jdGlvbpSGlIw1YXBhY2hlX2JlYW0udXRpbHMucmV0cnkucmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXKUanQDAACMCGZ1bmN0aW9ulIaUjB1hcGFjaGVfYmVhbS51dGlscy5yZXRyeS5DbG9ja5RqdAMAAIwFY2xhc3OUhpSMI2FwYWNoZV9iZWFtLnV0aWxzLnJldHJ5LkNsb2NrLnNsZWVwlGp0AwAAjAZtZXRob2SUhpSMImFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5Lm5vX3JldHJpZXOUanQDAACMCGZ1bmN0aW9ulIaUjDBhcGFjaGVfYmVhbS51dGlscy5yZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmaUanQDAACMCGZ1bmN0aW9ulIaUjCNhcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlcpRqfwMAAGraUwAAhpSMNGFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLlN1YnByb2Nlc3NTZXJ2ZXKUan8DAACMBWNsYXNzlIaUjDphcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlci5TdWJwcm9jZXNzU2VydmVyLnN0YXJ0lGp/AwAAjAZtZXRob2SUhpSMOWFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLlN1YnByb2Nlc3NTZXJ2ZXIuc3RvcJRqfwMAAIwGbWV0aG9klIaUjENhcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlci5TdWJwcm9jZXNzU2VydmVyLmxvY2FsX3RlbXBfZGlylGp/AwAAjAZtZXRob2SUhpSMMWFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLkphdmFKYXJTZXJ2ZXKUan8DAACMBWNsYXNzlIaUjENhcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlci5KYXZhSmFyU2VydmVyLkFQQUNIRV9SRVBPU0lUT1JZlGp/AwAAjAlhdHRyaWJ1dGWUhpSMP2FwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLkphdmFKYXJTZXJ2ZXIuQkVBTV9HUk9VUF9JRJRqfwMAAIwJYXR0cmlidXRllIaUjDthcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlci5KYXZhSmFyU2VydmVyLkpBUl9DQUNIRZRqfwMAAIwJYXR0cmlidXRllIaUjDphcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlci5KYXZhSmFyU2VydmVyLmphcl9uYW1llGp/AwAAjAtjbGFzc21ldGhvZJSGlIxDYXBhY2hlX2JlYW0udXRpbHMuc3VicHJvY2Vzc19zZXJ2ZXIuSmF2YUphclNlcnZlci5wYXRoX3RvX21hdmVuX2phcpRqfwMAAIwLY2xhc3NtZXRob2SUhpSMQmFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLkphdmFKYXJTZXJ2ZXIucGF0aF90b19iZWFtX2phcpRqfwMAAIwLY2xhc3NtZXRob2SUhpSMO2FwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLkphdmFKYXJTZXJ2ZXIubG9jYWxfamFylGp/AwAAjAtjbGFzc21ldGhvZJSGlIwtYXBhY2hlX2JlYW0udXRpbHMuc3VicHJvY2Vzc19zZXJ2ZXIucGlja19wb3J0lGp/AwAAjAhmdW5jdGlvbpSGlIwmYXBhY2hlX2JlYW0udXRpbHMudGhyZWFkX3Bvb2xfZXhlY3V0b3KUaqYDAABq2lMAAIaUjEJhcGFjaGVfYmVhbS51dGlscy50aHJlYWRfcG9vbF9leGVjdXRvci5VbmJvdW5kZWRUaHJlYWRQb29sRXhlY3V0b3KUaqYDAACMBWNsYXNzlIaUjElhcGFjaGVfYmVhbS51dGlscy50aHJlYWRfcG9vbF9leGVjdXRvci5VbmJvdW5kZWRUaHJlYWRQb29sRXhlY3V0b3Iuc3VibWl0lGqmAwAAjAZtZXRob2SUhpSMS2FwYWNoZV9iZWFtLnV0aWxzLnRocmVhZF9wb29sX2V4ZWN1dG9yLlVuYm91bmRlZFRocmVhZFBvb2xFeGVjdXRvci5zaHV0ZG93bpRqpgMAAIwGbWV0aG9klIaUjBthcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXCUaqwDAABq2lMAAIaUjCVhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wlGqsAwAAjAVjbGFzc5SGlIwoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcC5vZpRqrAMAAIwMc3RhdGljbWV0aG9klIaUjClhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wLm5vd5RqrAMAAIwMc3RhdGljbWV0aG9klIaUjDdhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wLmZyb21fdXRjX2RhdGV0aW1llGqsAwAAjAtjbGFzc21ldGhvZJSGlIwyYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcC5mcm9tX3JmYzMzMzmUaqwDAACMC2NsYXNzbWV0aG9klIaUjDFhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wLnByZWRlY2Vzc29ylGqsAwAAjAZtZXRob2SUhpSMNWFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAudG9fdXRjX2RhdGV0aW1llGqsAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAudG9fcmZjMzMzOZRqrAMAAIwGbWV0aG9klIaUjC5hcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wLnRvX3Byb3RvlGqsAwAAjAZtZXRob2SUhpSMMGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAuZnJvbV9wcm90b5RqrAMAAIwMc3RhdGljbWV0aG9klIaUjCRhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuRHVyYXRpb26UaqwDAACMBWNsYXNzlIaUjCdhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuRHVyYXRpb24ub2aUaqwDAACMDHN0YXRpY21ldGhvZJSGlIwtYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLkR1cmF0aW9uLnRvX3Byb3RvlGqsAwAAjAZtZXRob2SUhpSML2FwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5EdXJhdGlvbi5mcm9tX3Byb3RvlGqsAwAAjAxzdGF0aWNtZXRob2SUhpSMFmFwYWNoZV9iZWFtLnV0aWxzLnVybnOUap0DAABq2lMAAIaUjCJhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZulGqdAwAAjAVjbGFzc5SGlIw6YXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqnQMAAIwGbWV0aG9klIaUjC9hcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3VybpRqnQMAAIwLY2xhc3NtZXRob2SUhpSMNmFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3VybpRqnQMAAIwLY2xhc3NtZXRob2SUhpSMMGFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4udG9fcnVubmVyX2FwaZRqnQMAAIwGbWV0aG9klIaUjDJhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuLmZyb21fcnVubmVyX2FwaZRqnQMAAIwLY2xhc3NtZXRob2SUhpSME2FwYWNoZV9iZWFtLnZlcnNpb26UalYDAABq2lMAAIaUjAthcGFjaGVfYmVhbZRqoAMAAGraUwAAhpR1atBTAAB9lChq2VMAAChqtgMAAGg9aD2JdJRq3FMAAChqPAMAAGg9aD2JdJRq4VMAAChqUQMAAGg9aD2JdJRqIVUAAChqbQMAAGg9aD2JdJRqLFUAAChqAgQAAGg9aD2JdJRqRlUAAChq4wMAAGg9aD2JdJRqmVUAAChq+QMAAGg9aD2JdJRqm1UAAChq1AMAAGg9aD2JdJRqslUAAChqAwQAAGg9aD2JdJRqtFUAAChqpAMAAGg9aD2JdJRqtlUAAChq2AMAAGg9aD2JdJRqvlUAAChqugMAAGg9aD2JdJRqyVUAAChqGgQAAGg9aD2JdJRq0VUAAChqEwQAAGg9aD2JdJRq5VUAAChqwAMAAGg9aD2JdJRq81UAAChqRgMAAGg9aD2JdJRq9VUAAChqTwMAAGg9aD2JdJRqElYAAChqPgMAAGg9aD2JdJRqFFYAAChqmwMAAGg9aD2JdJRqFlYAAChqzAMAAGg9aD2JdJRqGFYAAChqawMAAGg9aD2JdJRqOFYAAChq7QMAAGg9aD2JdJRqZ1YAAChqQgMAAGg9aD2JdJRqk1YAAChqDQQAAGg9aD2JdJRqyFYAAChqTAMAAGg9aD2JdJRqD1cAAChquQMAAGg9aD2JdJRqR1cAAChqAQQAAGg9aD2JdJRqSVcAAChqQwMAAGg9aD2JdJRqS1cAAChqFAQAAGg9aD2JdJRqfVcAAChqogMAAGg9aD2JdJRqhVcAAChq0QMAAGg9aD2JdJRqt1cAAChq7wMAAGg9aD2JdJRq11cAAChqiQMAAGg9aD2JdJRq+lcAAChq/AMAAGg9aD2JdJRqKVgAAChqrwMAAGg9aD2JdJRqqVgAAChqLQMAAGg9aD2JdJRq7VgAAChqgQMAAGg9aD2JdJRqJVkAAChqCwQAAGg9aD2JdJRqJ1kAAChqYwMAAGg9aD2JdJRqR1kAAChqoQMAAGg9aD2JdJRqSVkAAChqjgMAAGg9aD2JdJRqTlkAAChqcwMAAGg9aD2JdJRqqlkAAChqqQMAAGg9aD2JdJRqG1oAAChqsgMAAGg9aD2JdJRqJloAAChq4AMAAGg9aD2JdJRqrFoAAChqFgQAAGg9aD2JdJRqtFoAAChqdgMAAGg9aD2JdJRqtloAAChq3wMAAGg9aD2JdJRquFoAAChqVwMAAGg9aD2JdJRqxloAAChqHQQAAGg9aD2JdJRq11oAAChqYgMAAGg9aD2JdJRq5VoAAChqpQMAAGg9aD2JdJRq8FoAAChquAMAAGg9aD2JdJRqDVsAAChq6gMAAGg9aD2JdJRqD1sAAChqGAQAAGg9aD2JdJRqSlsAAChqhAMAAGg9aD2JdJRqf1sAAChqkgMAAGg9aD2JdJRqq1sAAChqfgMAAGg9aD2JdJRqs1sAAChq/gMAAGg9aD2JdJRq2VsAAChqVQMAAGg9aD2JdJRq3lsAAChqfQMAAGg9aD2JdJRqDVwAAChq1QMAAGg9aD2JdJRqmVwAAChqqgMAAGg9aD2JdJRqyFwAAChqkwMAAGg9aD2JdJRq1lwAAChqvQMAAGg9aD2JdJRqAl0AAChqFQQAAGg9aD2JdJRqcF0AAChqxgMAAGg9aD2JdJRqmV0AAChqNgMAAGg9aD2JdJRqs10AAChq9AMAAGg9aD2JdJRqzV0AAChqBgQAAGg9aD2JdJRq210AAChq0AMAAGg9aD2JdJRq7F0AAChq5QMAAGg9aD2JdJRqDF4AAChqlQMAAGg9aD2JdJRqPl4AAChqHAQAAGg9aD2JdJRqQF4AAChqNwMAAGg9aD2JdJRqXV4AAChqCQQAAGg9aD2JdJRqlV4AAChq/wMAAGg9aD2JdJRquF4AAChqtQMAAGg9aD2JdJRq/14AAChqigMAAGg9aD2JdJRqAV8AAChqWgMAAGg9aD2JdJRqA18AAChqTgMAAGg9aD2JdJRqEV8AAChqowMAAGg9aD2JdJRqHF8AAChqgwMAAGg9aD2JdJRqKl8AAChqnAMAAGg9aD2JdJRqOF8AAChqPwMAAGg9aD2JdJRqTF8AAChqNQMAAGg9aD2JdJRqTl8AAChqUwMAAGg9aD2JdJRqnl8AAChqZgMAAGg9aD2JdJRq918AAChqyQMAAGg9aD2JdJRqI2AAAChqOAMAAGg9aD2JdJRqSWAAAChqSAMAAGg9aD2JdJRqS2AAAChqqAMAAGg9aD2JdJRqTWAAAChq1wMAAGg9aD2JdJRqbWAAAChqQAMAAGg9aD2JdJRqeGAAAChqZwMAAGg9aD2JdJRqhmAAAChqwgMAAGg9aD2JdJRq02AAAChqswMAAGg9aD2JdJRq1WAAAChq7AMAAGg9aD2JdJRq/mAAAChqBwQAAGg9aD2JdJRqDGEAAChqkAMAAGg9aD2JdJRqGmEAAChqbAMAAGg9aD2JdJRqG2IAAChq3gMAAGg9aD2JdJRqHWIAAChqEgQAAGg9aD2JdJRqH2IAAChq+gMAAGg9aD2JdJRqIWIAAChqMAMAAGg9aD2JdJRqdGIAAChqlwMAAGg9aD2JdJRqdmIAAChqyAMAAGg9aD2JdJRqeGIAAChqEQQAAGg9aD2JdJRqnmIAAChqaQMAAGg9aD2JdJRqoGIAAChq8gMAAGg9aD2JdJRqomIAAChq8wMAAGg9aD2JdJRqs2IAAChqNAMAAGg9aD2JdJRq3GIAAChqmAMAAGg9aD2JdJRq3mIAAChqpwMAAGg9aD2JdJRq4GIAAChqHgQAAGg9aD2JdJRq9GIAAChqfAMAAGg9aD2JdJRqBWMAAChqeQMAAGg9aD2JdJRqE2MAAChqDgQAAGg9aD2JdJRqeGMAAChqYAMAAGg9aD2JdJRqemMAAChq5gMAAGg9aD2JdJRqxGMAAChqZAMAAGg9aD2JdJRq4WMAAChqAAQAAGg9aD2JdJRq72MAAChqCAQAAGg9aD2JdJRq8WMAAChqmgMAAGg9aD2JdJRq/GMAAChqUAMAAGg9aD2JdJRqFmQAAChq3AMAAGg9aD2JdJRqIWQAAChqMgMAAGg9aD2JdJRqRGQAAChq9wMAAGg9aD2JdJRqW2QAAChqtwMAAGg9aD2JdJRqlmQAAChq9gMAAGg9aD2JdJRqxWQAAChqjAMAAGg9aD2JdJRq3GQAAChqXQMAAGg9aD2JdJRq/GQAAChqSgMAAGg9aD2JdJRqZGUAAChqHwQAAGg9aD2JdJRqbGUAAChqOwMAAGg9aD2JdJRqbmUAAChq5AMAAGg9aD2JdJRqiGUAAChq4QMAAGg9aD2JdJRqk2UAAChqiwMAAGg9aD2JdJRqp2UAAChqVAMAAGg9aD2JdJRqqWUAAChq4gMAAGg9aD2JdJRqz2UAAChqxAMAAGg9aD2JdJRqGWYAAChqDwQAAGg9aD2JdJRqG2YAAChqxQMAAGg9aD2JdJRqKWYAAChqdwMAAGg9aD2JdJRqK2YAAChqRwMAAGg9aD2JdJRqOWYAAChqhwMAAGg9aD2JdJRqR2YAAChqWwMAAGg9aD2JdJRqVWYAAChqcgMAAGg9aD2JdJRqYGYAAChqLwMAAGg9aD2JdJRqiWYAAChqIAQAAGg9aD2JdJRqoGYAAChqRQMAAGg9aD2JdJRq/GYAAChqmQMAAGg9aD2JdJRqImcAAChq0wMAAGg9aD2JdJRqJGcAAChqMQMAAGg9aD2JdJRqL2cAAChqGQQAAGg9aD2JdJRqN2cAAChqwwMAAGg9aD2JdJRqbGcAAChqygMAAGg9aD2JdJRqd2cAAChqPQMAAGg9aD2JdJRqtWcAAChqRAMAAGg9aD2JdJRqt2cAAChqrgMAAGg9aD2JdJRqvGcAAChq/QMAAGg9aD2JdJRqxGcAAChqDAQAAGg9aD2JdJRqxmcAAChqFwQAAGg9aD2JdJRqyGcAAChqtAMAAGg9aD2JdJRqymcAAChqSQMAAGg9aD2JdJRqz2cAAChqnwMAAGg9aD2JdJRq12cAAChqcAMAAGg9aD2JdJRq8WcAAChqOgMAAGg9aD2JdJRqTWgAAChqWQMAAGg9aD2JdJRqmmgAAChqgAMAAGg9aD2JdJRqnGgAAChq0gMAAGg9aD2JdJRqnmgAAChqcQMAAGg9aD2JdJRqoGgAAChqdQMAAGg9aD2JdJRqomgAAChqIQQAAGg9aD2JdJRqrWgAAChqSwMAAGg9aD2JdJRqwWgAAChqhgMAAGg9aD2JdJRq0mgAAChqUgMAAGg9aD2JdJRq1GgAAChqGwQAAGg9aD2JdJRq2WgAAChqlgMAAGg9aD2JdJRq3mgAAChqegMAAGg9aD2JdJRq42gAAChq9QMAAGg9aD2JdJRq8WgAAChq2QMAAGg9aD2JdJRq+WgAAChqMwMAAGg9aD2JdJRq+2gAAChqkQMAAGg9aD2JdJRqVGkAAChqXgMAAGg9aD2JdJRqVmkAAChqXAMAAGg9aD2JdJRqW2kAAChqvwMAAGg9aD2JdJRqcmkAAChqXwMAAGg9aD2JdJRqiWkAAChqzQMAAGg9aD2JdJRqBmoAAChqaAMAAGg9aD2JdJRqF2oAAChqsAMAAGg9aD2JdJRqT2oAAChqLgMAAGg9aD2JdJRqXWoAAChqWAMAAGg9aD2JdJRqfWoAAChquwMAAGg9aD2JdJRqoGoAAChq6QMAAGg9aD2JdJRqomoAAChqsQMAAGg9aD2JdJRq6WoAAChq8AMAAGg9aD2JdJRq8WoAAChqewMAAGg9aD2JdJRqCGsAAChqhQMAAGg9aD2JdJRqEGsAAChq+wMAAGg9aD2JdJRqM2sAAChqngMAAGg9aD2JdJRqNWsAAChqzgMAAGg9aD2JdJRqvmsAAChq8QMAAGg9aD2JdJRqXm0AAChqCgQAAGg9aD2JdJRqYG0AAChqBAQAAGg9aD2JdJRqhm0AAChqTQMAAGg9aD2JdJRq920AAChqEAQAAGg9aD2JdJRqNW4AAChq7gMAAGg9aD2JdJRqSW4AAChq6AMAAGg9aD2JdJRqV24AAChqvgMAAGg9aD2JdJRqZW4AAChqzwMAAGg9aD2JdJRqpm4AAChq6wMAAGg9aD2JdJRqtG4AAChqqwMAAGg9aD2JdJRq3W4AAChqZQMAAGg9aD2JdJRq8W4AAChq2gMAAGg9aD2JdJRq/24AAChqBQQAAGg9aD2JdJRq6G8AAChq+AMAAGg9aD2JdJRqR3AAAChqOQMAAGg9aD2JdJRq1nAAAChqYQMAAGg9aD2JdJRqj3EAAChqwQMAAGg9aD2JdJRqkXEAAChq2wMAAGg9aD2JdJRqrnEAAChqlAMAAGg9aD2JdJRq13EAAChqjQMAAGg9aD2JdJRq7nEAAChq5wMAAGg9aD2JdJRq6XIAAChqbwMAAGg9aD2JdJRqA3MAAChqrQMAAGg9aD2JdJRqRHMAAChq1gMAAGg9aD2JdJRqUnMAAChqQQMAAGg9aD2JdJRqkHMAAChqbgMAAGg9aD2JdJRq+HMAAChqywMAAGg9aD2JdJRqBnQAAChqggMAAGg9aD2JdJRqEXQAAChqjwMAAGg9aD2JdJRqE3QAAChqxwMAAGg9aD2JdJRqJHQAAChq3QMAAGg9aD2JdJRqL3QAAChqiAMAAGg9aD2JdJRqOnQAAChqeAMAAGg9aD2JdJRqSHQAAChqagMAAGg9aD2JdJRqYnQAAChqvAMAAGg9aD2JdJRqeXQAAChqdAMAAGg9aD2JdJRqnHQAAChqfwMAAGg9aD2JdJRqxXQAAChqpgMAAGg9aD2JdJRq0HQAAChqrAMAAGg9aD2JdJRq/HQAAChqnQMAAGg9aD2JdJRqEHUAAChqVgMAAGg9aD2JdJRqEnUAAChqoAMAAGg9aD2JdJR1agUBAABLAHWMA3JzdJR9lChqtVMAAH2UagUBAABLAHWMA3N0ZJR9lCiMC3Byb2dvcHRpb25zlH2UarVTAAB9lIwJY2l0YXRpb25zlH2UjA1jaXRhdGlvbl9yZWZzlH2UjAZsYWJlbHOUfZQojAhnZW5pbmRleJRqGHYAAGg9jA1zcGhpbngubG9jYWxllIwRX1RyYW5zbGF0aW9uUHJveHmUk5Qoahl2AACMD19sYXp5X3RyYW5zbGF0ZZSTlGoSAwAAjAdnZW5lcmFslIwFSW5kZXiUdJSBlGoddgAAahIDAABqHnYAAGofdgAAh5SGlGKHlIwIbW9kaW5kZXiUjAtweS1tb2RpbmRleJRoPWobdgAAKGoddgAAahIDAABqHnYAAIwMTW9kdWxlIEluZGV4lHSUgZRqHXYAAGoSAwAAah52AABqJ3YAAIeUhpRih5SMBnNlYXJjaJRqLXYAAGg9aht2AAAoah12AABqEgMAAGoedgAAjAtTZWFyY2ggUGFnZZR0lIGUah12AABqEgMAAGoedgAAai52AACHlIaUYoeUdYwKYW5vbmxhYmVsc5R9lChqGHYAAGoYdgAAaD2GlGoldgAAjAtweS1tb2RpbmRleJRoPYaUai12AABqLXYAAGg9hpR1agUBAABLAHV1jAxpbmRleGVudHJpZXOUfZQoarYDAABdlCiMBnNpbmdsZZSMG2FwYWNoZV9iZWFtLmNvZGVycyAobW9kdWxlKZSMGW1vZHVsZS1hcGFjaGVfYmVhbS5jb2RlcnOUaD1OdJRhajwDAABdlCgoaj12AACMJ2FwYWNoZV9iZWFtLmNvZGVycy5hdnJvX3JlY29yZCAobW9kdWxlKZSMJW1vZHVsZS1hcGFjaGVfYmVhbS5jb2RlcnMuYXZyb19yZWNvcmSUaD1OdJQoaj12AACMNEF2cm9SZWNvcmQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5hdnJvX3JlY29yZCmUat5TAABoPU50lGVqUQMAAF2UKChqPXYAAIwiYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycyAobW9kdWxlKZSMIG1vZHVsZS1hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzlGg9TnSUKGo9dgAAjCpDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUauNTAABoPU50lChqPXYAAIwxZW5jb2RlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKZRq5lMAAGg9TnSUKGo9dgAAjDFkZWNvZGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGrpUwAAaD1OdJQoaj12AACMOGVuY29kZV9uZXN0ZWQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGrsUwAAaD1OdJQoaj12AACMOGRlY29kZV9uZXN0ZWQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGrvUwAAaD1OdJQoaj12AACMO2lzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGryUwAAaD1OdJQoaj12AACMQWFzX2RldGVybWluaXN0aWNfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGr1UwAAaD1OdJQoaj12AACMOGVzdGltYXRlX3NpemUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGr4UwAAaD1OdJQoaj12AACMM2dldF9pbXBsKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKZRq+1MAAGg9TnSUKGo9dgAAjDd0b190eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGr+UwAAaD1OdJQoaj12AACMP2Zyb21fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgY2xhc3MgbWV0aG9kKZRqAVQAAGg9TnSUKGo9dgAAjDZpc19rdl9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIG1ldGhvZCmUagRUAABoPU50lChqPXYAAIw0a2V5X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKZRqB1QAAGg9TnSUKGo9dgAAjDZ2YWx1ZV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIG1ldGhvZCmUagpUAABoPU50lChqPXYAAIw6YXNfY2xvdWRfb2JqZWN0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgbWV0aG9kKZRqDVQAAGg9TnSUKGo9dgAAjD1yZWdpc3Rlcl91cm4oKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBjbGFzcyBtZXRob2QplGoQVAAAaD1OdJQoaj12AACMOHRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGoTVAAAaD1OdJQoaj12AACMQGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyIGNsYXNzIG1ldGhvZCmUahZUAABoPU50lChqPXYAAIxCdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2RlciBtZXRob2QplGoZVAAAaD1OdJQoaj12AACMSXJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQ29kZXIgc3RhdGljIG1ldGhvZCmUahxUAABoPU50lChqPXYAAIwxU3RyVXRmOENvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKZRqH1QAAGg9TnSUKGo9dgAAjDhlbmNvZGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TdHJVdGY4Q29kZXIgbWV0aG9kKZRqIlQAAGg9TnSUKGo9dgAAjDhkZWNvZGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TdHJVdGY4Q29kZXIgbWV0aG9kKZRqJVQAAGg9TnSUKGo9dgAAjEJpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyIG1ldGhvZCmUaihUAABoPU50lChqPXYAAIw+dG9fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuU3RyVXRmOENvZGVyIG1ldGhvZCmUaitUAABoPU50lChqPXYAAIxJdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TdHJVdGY4Q29kZXIgbWV0aG9kKZRqLlQAAGg9TnSUKGo9dgAAjC9CeXRlc0NvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKZRqMVQAAGg9TnSUKGo9dgAAjEBpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQnl0ZXNDb2RlciBtZXRob2QplGo0VAAAaD1OdJQoaj12AACMPHRvX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkJ5dGVzQ29kZXIgbWV0aG9kKZRqN1QAAGg9TnSUKGo9dgAAjD9hc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5CeXRlc0NvZGVyIG1ldGhvZCmUajpUAABoPU50lChqPXYAAIxHdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5CeXRlc0NvZGVyIG1ldGhvZCmUaj1UAABoPU50lChqPXYAAIwxQm9vbGVhbkNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKZRqQFQAAGg9TnSUKGo9dgAAjEJpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQm9vbGVhbkNvZGVyIG1ldGhvZCmUakNUAABoPU50lChqPXYAAIw+dG9fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuQm9vbGVhbkNvZGVyIG1ldGhvZCmUakZUAABoPU50lChqPXYAAIxJdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Cb29sZWFuQ29kZXIgbWV0aG9kKZRqSVQAAGg9TnSUKGo9dgAAjDBWYXJJbnRDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUakxUAABoPU50lChqPXYAAIxBaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlZhckludENvZGVyIG1ldGhvZCmUak9UAABoPU50lChqPXYAAIw9dG9fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXIgbWV0aG9kKZRqUlQAAGg9TnSUKGo9dgAAjEBhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5WYXJJbnRDb2RlciBtZXRob2QplGpVVAAAaD1OdJQoaj12AACMSHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVmFySW50Q29kZXIgbWV0aG9kKZRqWFQAAGg9TnSUKGo9dgAAjC9GbG9hdENvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKZRqW1QAAGg9TnSUKGo9dgAAjEBpc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmxvYXRDb2RlciBtZXRob2QplGpeVAAAaD1OdJQoaj12AACMPHRvX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZsb2F0Q29kZXIgbWV0aG9kKZRqYVQAAGg9TnSUKGo9dgAAjEd0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZsb2F0Q29kZXIgbWV0aG9kKZRqZFQAAGg9TnSUKGo9dgAAjDNUaW1lc3RhbXBDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUamdUAABoPU50lChqPXYAAIxEaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlRpbWVzdGFtcENvZGVyIG1ldGhvZCmUampUAABoPU50lChqPXYAAIwzU2luZ2xldG9uQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMplGptVAAAaD1OdJQoaj12AACMRGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5TaW5nbGV0b25Db2RlciBtZXRob2QplGpwVAAAaD1OdJQoaj12AACMMFBpY2tsZUNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKZRqc1QAAGg9TnSUKGo9dgAAjEdhc19kZXRlcm1pbmlzdGljX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUGlja2xlQ29kZXIgbWV0aG9kKZRqdlQAAGg9TnSUKGo9dgAAjD10b190eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5QaWNrbGVDb2RlciBtZXRob2QplGp5VAAAaD1OdJQoaj12AACMLkRpbGxDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUanxUAABoPU50lChqPXYAAIw4RmFzdFByaW1pdGl2ZXNDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUan9UAABoPU50lChqPXYAAIxJaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKZRqglQAAGg9TnSUKGo9dgAAjE9hc19kZXRlcm1pbmlzdGljX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2QplGqFVAAAaD1OdJQoaj12AACMRXRvX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKZRqiFQAAGg9TnSUKGo9dgAAjEhhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyIG1ldGhvZCmUaotUAABoPU50lChqPXYAAIxEaXNfa3ZfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyIG1ldGhvZCmUao5UAABoPU50lChqPXYAAIxCa2V5X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2QplGqRVAAAaD1OdJQoaj12AACMRHZhbHVlX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2QplGqUVAAAaD1OdJQoaj12AACML1Byb3RvQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMplGqXVAAAaD1OdJQoaj12AACMQGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Qcm90b0NvZGVyIG1ldGhvZCmUappUAABoPU50lChqPXYAAIxGYXNfZGV0ZXJtaW5pc3RpY19jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXIgbWV0aG9kKZRqnVQAAGg9TnSUKGo9dgAAjEVmcm9tX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlByb3RvQ29kZXIgc3RhdGljIG1ldGhvZCmUaqBUAABoPU50lChqPXYAAIw1QXZyb0dlbmVyaWNDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUaqNUAABoPU50lChqPXYAAIxGaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkF2cm9HZW5lcmljQ29kZXIgbWV0aG9kKZRqplQAAGg9TnSUKGo9dgAAjEJ0b190eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5BdnJvR2VuZXJpY0NvZGVyIG1ldGhvZCmUaqlUAABoPU50lChqPXYAAIxNdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5BdnJvR2VuZXJpY0NvZGVyIG1ldGhvZCmUaqxUAABoPU50lChqPXYAAIxWZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkF2cm9HZW5lcmljQ29kZXIgc3RhdGljIG1ldGhvZCmUaq9UAABoPU50lChqPXYAAIwvVHVwbGVDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUarJUAABoPU50lChqPXYAAIxAaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKZRqtVQAAGg9TnSUKGo9dgAAjEZhc19kZXRlcm1pbmlzdGljX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2QplGq4VAAAaD1OdJQoaj12AACMPHRvX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKZRqu1QAAGg9TnSUKGo9dgAAjEVmcm9tX3R5cGVfaGludCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgc3RhdGljIG1ldGhvZCmUar5UAABoPU50lChqPXYAAIw/YXNfY2xvdWRfb2JqZWN0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVDb2RlciBtZXRob2QplGrBVAAAaD1OdJQoaj12AACMNmNvZGVycygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKZRqxFQAAGg9TnSUKGo9dgAAjDtpc19rdl9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgbWV0aG9kKZRqx1QAAGg9TnSUKGo9dgAAjDlrZXlfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIG1ldGhvZCmUaspUAABoPU50lChqPXYAAIw7dmFsdWVfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIG1ldGhvZCmUas1UAABoPU50lChqPXYAAIxHdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZUNvZGVyIG1ldGhvZCmUatBUAABoPU50lChqPXYAAIxQZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlQ29kZXIgc3RhdGljIG1ldGhvZCmUatNUAABoPU50lChqPXYAAIw3VHVwbGVTZXF1ZW5jZUNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKZRq1lQAAGg9TnSUKGo9dgAAjEN2YWx1ZV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlR1cGxlU2VxdWVuY2VDb2RlciBtZXRob2QplGrZVAAAaD1OdJQoaj12AACMSGlzX2RldGVybWluaXN0aWMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXIgbWV0aG9kKZRq3FQAAGg9TnSUKGo9dgAAjE5hc19kZXRlcm1pbmlzdGljX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuVHVwbGVTZXF1ZW5jZUNvZGVyIG1ldGhvZCmUat9UAABoPU50lChqPXYAAIxNZnJvbV90eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5UdXBsZVNlcXVlbmNlQ29kZXIgc3RhdGljIG1ldGhvZCmUauJUAABoPU50lChqPXYAAIwySXRlcmFibGVDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUauVUAABoPU50lChqPXYAAIxDaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIgbWV0aG9kKZRq6FQAAGg9TnSUKGo9dgAAjElhc19kZXRlcm1pbmlzdGljX2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBtZXRob2QplGrrVAAAaD1OdJQoaj12AACMQmFzX2Nsb3VkX29iamVjdCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIgbWV0aG9kKZRq7lQAAGg9TnSUKGo9dgAAjD52YWx1ZV9jb2RlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkl0ZXJhYmxlQ29kZXIgbWV0aG9kKZRq8VQAAGg9TnSUKGo9dgAAjD90b190eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyIG1ldGhvZCmUavRUAABoPU50lChqPXYAAIxIZnJvbV90eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5JdGVyYWJsZUNvZGVyIHN0YXRpYyBtZXRob2QplGr3VAAAaD1OdJQoaj12AACMSnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuSXRlcmFibGVDb2RlciBtZXRob2QplGr6VAAAaD1OdJQoaj12AACMN1dpbmRvd2VkVmFsdWVDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycymUav1UAABoPU50lChqPXYAAIxIaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlciBtZXRob2QplGoAVQAAaD1OdJQoaj12AACMR2FzX2Nsb3VkX29iamVjdCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlciBtZXRob2QplGoDVQAAaD1OdJQoaj12AACMQ2lzX2t2X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyIG1ldGhvZCmUagZVAABoPU50lChqPXYAAIxBa2V5X2NvZGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyIG1ldGhvZCmUaglVAABoPU50lChqPXYAAIxDdmFsdWVfY29kZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIgbWV0aG9kKZRqDFUAAGg9TnSUKGo9dgAAjE90b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlciBtZXRob2QplGoPVQAAaD1OdJQoaj12AACMPFBhcmFtV2luZG93ZWRWYWx1ZUNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzKZRqElUAAGg9TnSUKGo9dgAAjE1pc19kZXRlcm1pbmlzdGljKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMuUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIgbWV0aG9kKZRqFVUAAGg9TnSUKGo9dgAAjExhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5QYXJhbVdpbmRvd2VkVmFsdWVDb2RlciBtZXRob2QplGoYVQAAaD1OdJQoaj12AACMXWZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5QYXJhbVdpbmRvd2VkVmFsdWVDb2RlciBzdGF0aWMgbWV0aG9kKZRqG1UAAGg9TnSUKGo9dgAAjFR0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLlBhcmFtV2luZG93ZWRWYWx1ZUNvZGVyIG1ldGhvZCmUah5VAABoPU50lGVqbQMAAF2UKChqPXYAAIwmYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGUgKG1vZHVsZSmUjCRtb2R1bGUtYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGWUaD1OdJQoaj12AACMOE9ic2VydmFibGVNaXhpbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGUplGojVQAAaD1OdJQoaj12AACMSnJlZ2lzdGVyX29ic2VydmVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxlLk9ic2VydmFibGVNaXhpbiBtZXRob2QplGomVQAAaD1OdJQoaj12AACMSW5vdGlmeV9vYnNlcnZlcnMoKSAoYXBhY2hlX2JlYW0uY29kZXJzLm9ic2VydmFibGUuT2JzZXJ2YWJsZU1peGluIG1ldGhvZCmUailVAABoPU50lGVqAgQAAF2UKChqPXYAAIwlYXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2RlciAobW9kdWxlKZSMI21vZHVsZS1hcGFjaGVfYmVhbS5jb2RlcnMucm93X2NvZGVylGg9TnSUKGo9dgAAjDBSb3dDb2RlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2RlcimUai5VAABoPU50lChqPXYAAIxBaXNfZGV0ZXJtaW5pc3RpYygpIChhcGFjaGVfYmVhbS5jb2RlcnMucm93X2NvZGVyLlJvd0NvZGVyIG1ldGhvZCmUajFVAABoPU50lChqPXYAAIw9dG9fdHlwZV9oaW50KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5yb3dfY29kZXIuUm93Q29kZXIgbWV0aG9kKZRqNFUAAGg9TnSUKGo9dgAAjEBhc19jbG91ZF9vYmplY3QoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2Rlci5Sb3dDb2RlciBtZXRob2QplGo3VQAAaD1OdJQoaj12AACMSHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5yb3dfY29kZXIuUm93Q29kZXIgbWV0aG9kKZRqOlUAAGg9TnSUKGo9dgAAjFFmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5yb3dfY29kZXIuUm93Q29kZXIgc3RhdGljIG1ldGhvZCmUaj1VAABoPU50lChqPXYAAIxGZnJvbV90eXBlX2hpbnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2Rlci5Sb3dDb2RlciBzdGF0aWMgbWV0aG9kKZRqQFUAAGg9TnSUKGo9dgAAjEdjb2Rlcl9mcm9tX3R5cGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2Rlci5Sb3dDb2RlciBzdGF0aWMgbWV0aG9kKZRqQ1UAAGg9TnSUZWrjAwAAXZQoKGo9dgAAjCdhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0gKG1vZHVsZSmUjCVtb2R1bGUtYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtlGg9TnSUKGo9dgAAjDZPdXRwdXRTdHJlYW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbSmUakhVAABoPU50lChqPXYAAIw8d3JpdGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QplGpLVQAAaD1OdJQoaj12AACMQXdyaXRlX2J5dGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QplGpOVQAAaD1OdJQoaj12AACMRndyaXRlX3Zhcl9pbnQ2NCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtIG1ldGhvZCmUalFVAABoPU50lChqPXYAAIxMd3JpdGVfYmlnZW5kaWFuX2ludDY0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0gbWV0aG9kKZRqVFUAAGg9TnSUKGo9dgAAjE13cml0ZV9iaWdlbmRpYW5fdWludDY0KCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5PdXRwdXRTdHJlYW0gbWV0aG9kKZRqV1UAAGg9TnSUKGo9dgAAjEx3cml0ZV9iaWdlbmRpYW5faW50MzIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QplGpaVQAAaD1OdJQoaj12AACMTXdyaXRlX2JpZ2VuZGlhbl9kb3VibGUoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLk91dHB1dFN0cmVhbSBtZXRob2QplGpdVQAAaD1OdJQoaj12AACMOmdldCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtIG1ldGhvZCmUamBVAABoPU50lChqPXYAAIw7c2l6ZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uT3V0cHV0U3RyZWFtIG1ldGhvZCmUamNVAABoPU50lChqPXYAAIxCQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0plGpmVQAAaD1OdJQoaj12AACMSHdyaXRlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0gbWV0aG9kKZRqaVUAAGg9TnSUKGo9dgAAjE13cml0ZV9ieXRlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0gbWV0aG9kKZRqbFUAAGg9TnSUKGo9dgAAjExnZXRfY291bnQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLkJ5dGVDb3VudGluZ091dHB1dFN0cmVhbSBtZXRob2QplGpvVQAAaD1OdJQoaj12AACMRmdldCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtIG1ldGhvZCmUanJVAABoPU50lChqPXYAAIw1SW5wdXRTdHJlYW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbSmUanVVAABoPU50lChqPXYAAIw6c2l6ZSgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKZRqeFUAAGg9TnSUKGo9dgAAjDpyZWFkKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2QplGp7VQAAaD1OdJQoaj12AACMPnJlYWRfYWxsKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2QplGp+VQAAaD1OdJQoaj12AACMQ3JlYWRfYnl0ZV9weTIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZCmUaoFVAABoPU50lChqPXYAAIxDcmVhZF9ieXRlX3B5MygpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKZRqhFUAAGg9TnSUKGo9dgAAjERyZWFkX3Zhcl9pbnQ2NCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKZRqh1UAAGg9TnSUKGo9dgAAjEpyZWFkX2JpZ2VuZGlhbl9pbnQ2NCgpIChhcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW0uSW5wdXRTdHJlYW0gbWV0aG9kKZRqilUAAGg9TnSUKGo9dgAAjEtyZWFkX2JpZ2VuZGlhbl91aW50NjQoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZCmUao1VAABoPU50lChqPXYAAIxKcmVhZF9iaWdlbmRpYW5faW50MzIoKSAoYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtLklucHV0U3RyZWFtIG1ldGhvZCmUapBVAABoPU50lChqPXYAAIxLcmVhZF9iaWdlbmRpYW5fZG91YmxlKCkgKGFwYWNoZV9iZWFtLmNvZGVycy5zbG93X3N0cmVhbS5JbnB1dFN0cmVhbSBtZXRob2QplGqTVQAAaD1OdJQoaj12AACMPGdldF92YXJpbnRfc2l6ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtKZRqllUAAGg9TnSUZWr5AwAAXZQoaj12AACMJmFwYWNoZV9iZWFtLmNvZGVycy50eXBlY29kZXJzIChtb2R1bGUplIwkbW9kdWxlLWFwYWNoZV9iZWFtLmNvZGVycy50eXBlY29kZXJzlGg9TnSUYWrUAwAAXZQoKGo9dgAAjBphcGFjaGVfYmVhbS5lcnJvciAobW9kdWxlKZSMGG1vZHVsZS1hcGFjaGVfYmVhbS5lcnJvcpRoPU50lChqPXYAAIwJQmVhbUVycm9ylGqdVQAAaD1OdJQoaj12AACMDVBpcGVsaW5lRXJyb3KUaqBVAABoPU50lChqPXYAAIwLUFZhbHVlRXJyb3KUaqNVAABoPU50lChqPXYAAIwLUnVubmVyRXJyb3KUaqZVAABoPU50lChqPXYAAIwZUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcpRqqVUAAGg9TnSUKGo9dgAAjA5TaWRlSW5wdXRFcnJvcpRqrFUAAGg9TnSUKGo9dgAAjA5UcmFuc2Zvcm1FcnJvcpRqr1UAAGg9TnSUZWoDBAAAXZQoaj12AACMHWFwYWNoZV9iZWFtLmludGVybmFsIChtb2R1bGUplIwbbW9kdWxlLWFwYWNoZV9iZWFtLmludGVybmFslGg9TnSUYWqkAwAAXZQoaj12AACMIWFwYWNoZV9iZWFtLmludGVybmFsLmdjcCAobW9kdWxlKZSMH21vZHVsZS1hcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3CUaD1OdJRhatgDAABdlCgoaj12AACMJmFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoIChtb2R1bGUplIwkbW9kdWxlLWFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRolGg9TnSUKGo9dgAAjD5zZXRfcnVubmluZ19pbl9nY2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5hdXRoKZRquFUAAGg9TnSUKGo9dgAAjENnZXRfc2VydmljZV9jcmVkZW50aWFscygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGgplGq7VQAAaD1OdJRlaroDAABdlCgoaj12AACMLGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlIChtb2R1bGUplIwqbW9kdWxlLWFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVllGg9TnSUKGo9dgAAjExnZXRfdHlwZWRfdmFsdWVfZGVzY3JpcHRvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUplGrAVQAAaD1OdJQoaj12AACMP3RvX2pzb25fdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlKZRqw1UAAGg9TnSUKGo9dgAAjEFmcm9tX2pzb25fdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlKZRqxlUAAGg9TnSUZWoaBAAAXZQoKGo9dgAAjClhcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudCAobW9kdWxlKZSMJ21vZHVsZS1hcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudJRoPU50lChqPXYAAIxOcHJveHlfaW5mb19mcm9tX2Vudmlyb25tZW50X3ZhcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnQplGrLVQAAaD1OdJQoaj12AACMO2dldF9uZXdfaHR0cCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnQplGrOVQAAaD1OdJRlahMEAABdlCgoaj12AACMJWFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIgKG1vZHVsZSmUjCNtb2R1bGUtYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcpRoPU50lChqPXYAAIw2c2F2ZV9tb2R1bGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIplGrTVQAAaD1OdJQoaj12AACMP25ld19zYXZlX21vZHVsZV9kaWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyKZRq1lUAAGg9TnSUKGo9dgAAjDBkdW1wcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcimUatlVAABoPU50lChqPXYAAIwwbG9hZHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmludGVybmFsLnBpY2tsZXIplGrcVQAAaD1OdJQoaj12AACMN2R1bXBfc2Vzc2lvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwucGlja2xlcimUat9VAABoPU50lChqPXYAAIw3bG9hZF9zZXNzaW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyKZRq4lUAAGg9TnSUZWrAAwAAXZQoKGo9dgAAjCJhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsIChtb2R1bGUplIwgbW9kdWxlLWFwYWNoZV9iZWFtLmludGVybmFsLnV0aWyUaD1OdJQoaj12AACMOEFyZ3VtZW50UGxhY2Vob2xkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmludGVybmFsLnV0aWwplGrnVQAAaD1OdJQoaj12AACMQHJlbW92ZV9vYmplY3RzX2Zyb21fYXJncygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbCmUaupVAABoPU50lChqPXYAAIw9aW5zZXJ0X3ZhbHVlc19pbl9hcmdzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsKZRq7VUAAGg9TnSUKGo9dgAAjDxydW5fdXNpbmdfdGhyZWFkcG9vbCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbCmUavBVAABoPU50lGVqRgMAAF2UKGo9dgAAjBdhcGFjaGVfYmVhbS5pbyAobW9kdWxlKZSMFW1vZHVsZS1hcGFjaGVfYmVhbS5pb5RoPU50lGFqTwMAAF2UKChqPXYAAIweYXBhY2hlX2JlYW0uaW8uYXZyb2lvIChtb2R1bGUplIwcbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmF2cm9pb5RoPU50lChqPXYAAIwtUmVhZEZyb21BdnJvIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hdnJvaW8plGr3VQAAaD1OdJQoaj12AACMNGV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEZyb21BdnJvIG1ldGhvZCmUavpVAABoPU50lChqPXYAAIw6ZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmF2cm9pby5SZWFkRnJvbUF2cm8gbWV0aG9kKZRq/VUAAGg9TnSUKGo9dgAAjDBSZWFkQWxsRnJvbUF2cm8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF2cm9pbymUagBWAABoPU50lChqPXYAAIxNREVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFIChhcGFjaGVfYmVhbS5pby5hdnJvaW8uUmVhZEFsbEZyb21BdnJvIGF0dHJpYnV0ZSmUagNWAABoPU50lChqPXYAAIw3ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmF2cm9pby5SZWFkQWxsRnJvbUF2cm8gbWV0aG9kKZRqBlYAAGg9TnSUKGo9dgAAjCxXcml0ZVRvQXZybyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uYXZyb2lvKZRqCVYAAGg9TnSUKGo9dgAAjDNleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uYXZyb2lvLldyaXRlVG9BdnJvIG1ldGhvZCmUagxWAABoPU50lChqPXYAAIw5ZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmF2cm9pby5Xcml0ZVRvQXZybyBtZXRob2QplGoPVgAAaD1OdJRlaj4DAABdlChqPXYAAIwbYXBhY2hlX2JlYW0uaW8uYXdzIChtb2R1bGUplIwZbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmF3c5RoPU50lGFqmwMAAF2UKGo9dgAAjCNhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cyAobW9kdWxlKZSMIW1vZHVsZS1hcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50c5RoPU50lGFqzAMAAF2UKGo9dgAAjCZhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMyAobW9kdWxlKZSMJG1vZHVsZS1hcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zM5RoPU50lGFqawMAAF2UKChqPXYAAIwzYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuYm90bzNfY2xpZW50IChtb2R1bGUplIwxbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmJvdG8zX2NsaWVudJRoPU50lChqPXYAAIw8Q2xpZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQplGoaVgAAaD1OdJQoaj12AACMUGdldF9vYmplY3RfbWV0YWRhdGEoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuYm90bzNfY2xpZW50LkNsaWVudCBtZXRob2QplGodVgAAaD1OdJQoaj12AACMRmdldF9yYW5nZSgpIChhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50IG1ldGhvZCmUaiBWAABoPU50lChqPXYAAIxBbGlzdCgpIChhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50IG1ldGhvZCmUaiNWAABoPU50lChqPXYAAIxUY3JlYXRlX211bHRpcGFydF91cGxvYWQoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuYm90bzNfY2xpZW50LkNsaWVudCBtZXRob2QplGomVgAAaD1OdJQoaj12AACMSHVwbG9hZF9wYXJ0KCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmJvdG8zX2NsaWVudC5DbGllbnQgbWV0aG9kKZRqKVYAAGg9TnSUKGo9dgAAjFZjb21wbGV0ZV9tdWx0aXBhcnRfdXBsb2FkKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmJvdG8zX2NsaWVudC5DbGllbnQgbWV0aG9kKZRqLFYAAGg9TnSUKGo9dgAAjENkZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuYm90bzNfY2xpZW50LkNsaWVudCBtZXRob2QplGovVgAAaD1OdJQoaj12AACMSWRlbGV0ZV9iYXRjaCgpIChhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50IG1ldGhvZCmUajJWAABoPU50lChqPXYAAIxBY29weSgpIChhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5ib3RvM19jbGllbnQuQ2xpZW50IG1ldGhvZCmUajVWAABoPU50lGVq7QMAAF2UKChqPXYAAIwyYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQgKG1vZHVsZSmUjDBtb2R1bGUtYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnSUaD1OdJQoaj12AACMPUZha2VGaWxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudCmUajpWAABoPU50lChqPXYAAIxKZ2V0X21ldGFkYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmZha2VfY2xpZW50LkZha2VGaWxlIG1ldGhvZCmUaj1WAABoPU50lChqPXYAAIxBRmFrZVMzQ2xpZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudCmUakBWAABoPU50lChqPXYAAIxKYWRkX2ZpbGUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50IG1ldGhvZCmUakNWAABoPU50lChqPXYAAIxKZ2V0X2ZpbGUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50IG1ldGhvZCmUakZWAABoPU50lChqPXYAAIxNZGVsZXRlX2ZpbGUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50IG1ldGhvZCmUaklWAABoPU50lChqPXYAAIxVZ2V0X29iamVjdF9tZXRhZGF0YSgpIChhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQgbWV0aG9kKZRqTFYAAGg9TnSUKGo9dgAAjEZsaXN0KCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmZha2VfY2xpZW50LkZha2VTM0NsaWVudCBtZXRob2QplGpPVgAAaD1OdJQoaj12AACMS2dldF9yYW5nZSgpIChhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQgbWV0aG9kKZRqUlYAAGg9TnSUKGo9dgAAjEhkZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50IG1ldGhvZCmUalVWAABoPU50lChqPXYAAIxOZGVsZXRlX2JhdGNoKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmZha2VfY2xpZW50LkZha2VTM0NsaWVudCBtZXRob2QplGpYVgAAaD1OdJQoaj12AACMRmNvcHkoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50IG1ldGhvZCmUaltWAABoPU50lChqPXYAAIxZY3JlYXRlX211bHRpcGFydF91cGxvYWQoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50IG1ldGhvZCmUal5WAABoPU50lChqPXYAAIxNdXBsb2FkX3BhcnQoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnQuRmFrZVMzQ2xpZW50IG1ldGhvZCmUamFWAABoPU50lChqPXYAAIxbY29tcGxldGVfbXVsdGlwYXJ0X3VwbG9hZCgpIChhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5mYWtlX2NsaWVudC5GYWtlUzNDbGllbnQgbWV0aG9kKZRqZFYAAGg9TnSUZWpCAwAAXZQoKGo9dgAAjC9hcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcyAobW9kdWxlKZSMLW1vZHVsZS1hcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlc5RoPU50lChqPXYAAIw8R2V0UmVxdWVzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMplGppVgAAaD1OdJQoaj12AACMQFVwbG9hZFJlc3BvbnNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcymUamxWAABoPU50lChqPXYAAIw/VXBsb2FkUmVxdWVzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMplGpvVgAAaD1OdJQoaj12AACMQ1VwbG9hZFBhcnRSZXF1ZXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcymUanJWAABoPU50lChqPXYAAIxEVXBsb2FkUGFydFJlc3BvbnNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcymUanVWAABoPU50lChqPXYAAIxQQ29tcGxldGVNdWx0aXBhcnRVcGxvYWRSZXF1ZXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcymUanhWAABoPU50lChqPXYAAIw9TGlzdFJlcXVlc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzKZRqe1YAAGg9TnSUKGo9dgAAjD5MaXN0UmVzcG9uc2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzKZRqflYAAGg9TnSUKGo9dgAAjDZJdGVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlcymUaoFWAABoPU50lChqPXYAAIw/RGVsZXRlUmVxdWVzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMplGqEVgAAaD1OdJQoaj12AACMRERlbGV0ZUJhdGNoUmVxdWVzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMplGqHVgAAaD1OdJQoaj12AACMRURlbGV0ZUJhdGNoUmVzcG9uc2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLm1lc3NhZ2VzKZRqilYAAGg9TnSUKGo9dgAAjD1Db3B5UmVxdWVzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMplGqNVgAAaD1OdJQoaj12AACMDVMzQ2xpZW50RXJyb3KUapBWAABoPU50lGVqDQQAAF2UKChqPXYAAIwoYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbSAobW9kdWxlKZSMJm1vZHVsZS1hcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtlGg9TnSUKGo9dgAAjDdTM0ZpbGVTeXN0ZW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0plGqVVgAAaD1OdJQoaj12AACMQ0NIVU5LX1NJWkUgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtIGF0dHJpYnV0ZSmUaphWAABoPU50lChqPXYAAIxCUzNfUFJFRklYIChhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbSBhdHRyaWJ1dGUplGqbVgAAaD1OdJQoaj12AACMRHNjaGVtZSgpIChhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbSBjbGFzcyBtZXRob2QplGqeVgAAaD1OdJQoaj12AACMPGpvaW4oKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0gbWV0aG9kKZRqoVYAAGg9TnSUKGo9dgAAjD1zcGxpdCgpIChhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbSBtZXRob2QplGqkVgAAaD1OdJQoaj12AACMPm1rZGlycygpIChhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbSBtZXRob2QplGqnVgAAaD1OdJQoaj12AACMQGhhc19kaXJzKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtIG1ldGhvZCmUaqpWAABoPU50lChqPXYAAIw+Y3JlYXRlKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtIG1ldGhvZCmUaq1WAABoPU50lChqPXYAAIw8b3BlbigpIChhcGFjaGVfYmVhbS5pby5hd3MuczNmaWxlc3lzdGVtLlMzRmlsZVN5c3RlbSBtZXRob2QplGqwVgAAaD1OdJQoaj12AACMPGNvcHkoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0gbWV0aG9kKZRqs1YAAGg9TnSUKGo9dgAAjD5yZW5hbWUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0gbWV0aG9kKZRqtlYAAGg9TnSUKGo9dgAAjD5leGlzdHMoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0gbWV0aG9kKZRquVYAAGg9TnSUKGo9dgAAjDxzaXplKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtIG1ldGhvZCmUarxWAABoPU50lChqPXYAAIxEbGFzdF91cGRhdGVkKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW0uUzNGaWxlU3lzdGVtIG1ldGhvZCmUar9WAABoPU50lChqPXYAAIxAY2hlY2tzdW0oKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0gbWV0aG9kKZRqwlYAAGg9TnSUKGo9dgAAjD5kZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbS5TM0ZpbGVTeXN0ZW0gbWV0aG9kKZRqxVYAAGg9TnSUZWpMAwAAXZQoKGo9dgAAjCBhcGFjaGVfYmVhbS5pby5hd3MuczNpbyAobW9kdWxlKZSMHm1vZHVsZS1hcGFjaGVfYmVhbS5pby5hd3MuczNpb5RoPU50lChqPXYAAIwzcGFyc2VfczNfcGF0aCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8plGrKVgAAaD1OdJQoaj12AACMJ1MzSU8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvKZRqzVYAAGg9TnSUKGo9dgAAjCxvcGVuKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8gbWV0aG9kKZRq0FYAAGg9TnSUKGo9dgAAjDNsaXN0X3ByZWZpeCgpIChhcGFjaGVfYmVhbS5pby5hd3MuczNpby5TM0lPIG1ldGhvZCmUatNWAABoPU50lChqPXYAAIwwY2hlY2tzdW0oKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTyBtZXRob2QplGrWVgAAaD1OdJQoaj12AACMLGNvcHkoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTyBtZXRob2QplGrZVgAAaD1OdJQoaj12AACMMmNvcHlfcGF0aHMoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTyBtZXRob2QplGrcVgAAaD1OdJQoaj12AACMMWNvcHlfdHJlZSgpIChhcGFjaGVfYmVhbS5pby5hd3MuczNpby5TM0lPIG1ldGhvZCmUat9WAABoPU50lChqPXYAAIwuZGVsZXRlKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8gbWV0aG9kKZRq4lYAAGg9TnSUKGo9dgAAjDRkZWxldGVfcGF0aHMoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTyBtZXRob2QplGrlVgAAaD1OdJQoaj12AACMNGRlbGV0ZV9maWxlcygpIChhcGFjaGVfYmVhbS5pby5hd3MuczNpby5TM0lPIG1ldGhvZCmUauhWAABoPU50lChqPXYAAIwzZGVsZXRlX3RyZWUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTyBtZXRob2QplGrrVgAAaD1OdJQoaj12AACMLHNpemUoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTyBtZXRob2QplGruVgAAaD1OdJQoaj12AACMLnJlbmFtZSgpIChhcGFjaGVfYmVhbS5pby5hd3MuczNpby5TM0lPIG1ldGhvZCmUavFWAABoPU50lChqPXYAAIw0bGFzdF91cGRhdGVkKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzSU8gbWV0aG9kKZRq9FYAAGg9TnSUKGo9dgAAjC5leGlzdHMoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNJTyBtZXRob2QplGr3VgAAaD1OdJQoaj12AACMNHJlbmFtZV9maWxlcygpIChhcGFjaGVfYmVhbS5pby5hd3MuczNpby5TM0lPIG1ldGhvZCmUavpWAABoPU50lChqPXYAAIwvUzNEb3dubG9hZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5hd3MuczNpbymUav1WAABoPU50lChqPXYAAIw1c2l6ZSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNEb3dubG9hZGVyIGF0dHJpYnV0ZSmUagBXAABoPU50lChqPXYAAIw5Z2V0X3JhbmdlKCkgKGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvLlMzRG93bmxvYWRlciBtZXRob2QplGoDVwAAaD1OdJQoaj12AACMLVMzVXBsb2FkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmF3cy5zM2lvKZRqBlcAAGg9TnSUKGo9dgAAjDFwdXQoKSAoYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW8uUzNVcGxvYWRlciBtZXRob2QplGoJVwAAaD1OdJQoaj12AACMNGZpbmlzaCgpIChhcGFjaGVfYmVhbS5pby5hd3MuczNpby5TM1VwbG9hZGVyIG1ldGhvZCmUagxXAABoPU50lGVquQMAAF2UKChqPXYAAIwlYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZSAobW9kdWxlKZSMI21vZHVsZS1hcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNllGg9TnSUKGo9dgAAjDRDb25jYXRTb3VyY2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UplGoRVwAAaD1OdJQoaj12AACMPXNvdXJjZXMgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlIGF0dHJpYnV0ZSmUahRXAABoPU50lChqPXYAAIxCZXN0aW1hdGVfc2l6ZSgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZSBtZXRob2QplGoXVwAAaD1OdJQoaj12AACMOnNwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlIG1ldGhvZCmUahpXAABoPU50lChqPXYAAIxGZ2V0X3JhbmdlX3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UgbWV0aG9kKZRqHVcAAGg9TnSUKGo9dgAAjDlyZWFkKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0U291cmNlIG1ldGhvZCmUaiBXAABoPU50lChqPXYAAIxJZGVmYXVsdF9vdXRwdXRfY29kZXIoKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRTb3VyY2UgbWV0aG9kKZRqI1cAAGg9TnSUKGo9dgAAjDpDb25jYXRSYW5nZVRyYWNrZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UplGomVwAAaD1OdJQoaj12AACMSXN0YXJ0X3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyIG1ldGhvZCmUailXAABoPU50lChqPXYAAIxIc3RvcF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2QplGosVwAAaD1OdJQoaj12AACMRHRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2QplGovVwAAaD1OdJQoaj12AACMRHRyeV9zcGxpdCgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2QplGoyVwAAaD1OdJQoaj12AACMT3NldF9jdXJyZW50X3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyIG1ldGhvZCmUajVXAABoPU50lChqPXYAAIxPcG9zaXRpb25fYXRfZnJhY3Rpb24oKSAoYXBhY2hlX2JlYW0uaW8uY29uY2F0X3NvdXJjZS5Db25jYXRSYW5nZVRyYWNrZXIgbWV0aG9kKZRqOFcAAGg9TnSUKGo9dgAAjExmcmFjdGlvbl9jb25zdW1lZCgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2QplGo7VwAAaD1OdJQoaj12AACMSmxvY2FsX3RvX2dsb2JhbCgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2QplGo+VwAAaD1OdJQoaj12AACMSmdsb2JhbF90b19sb2NhbCgpIChhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNlLkNvbmNhdFJhbmdlVHJhY2tlciBtZXRob2QplGpBVwAAaD1OdJQoaj12AACMTHN1Yl9yYW5nZV90cmFja2VyKCkgKGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2UuQ29uY2F0UmFuZ2VUcmFja2VyIG1ldGhvZCmUakRXAABoPU50lGVqAQQAAF2UKGo9dgAAjCBhcGFjaGVfYmVhbS5pby5leHRlcm5hbCAobW9kdWxlKZSMHm1vZHVsZS1hcGFjaGVfYmVhbS5pby5leHRlcm5hbJRoPU50lGFqQwMAAF2UKGo9dgAAjCRhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AgKG1vZHVsZSmUjCJtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwlGg9TnSUYWoUBAAAXZQoKGo9dgAAjCthcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViIChtb2R1bGUplIwpbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWKUaD1OdJQoaj12AACMQlJlYWRGcm9tUHVic3ViU2NoZW1hIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViKZRqTVcAAGg9TnSUKGo9dgAAjExpZF9sYWJlbCAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YnN1YlNjaGVtYSBhdHRyaWJ1dGUplGpQVwAAaD1OdJQoaj12AACMUHN1YnNjcmlwdGlvbiAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YnN1YlNjaGVtYSBhdHRyaWJ1dGUplGpTVwAAaD1OdJQoaj12AACMV3RpbWVzdGFtcF9hdHRyaWJ1dGUgKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIuUmVhZEZyb21QdWJzdWJTY2hlbWEgYXR0cmlidXRlKZRqVlcAAGg9TnSUKGo9dgAAjEl0b3BpYyAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YnN1YlNjaGVtYSBhdHRyaWJ1dGUplGpZVwAAaD1OdJQoaj12AACMU3dpdGhfYXR0cmlidXRlcyAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YnN1YlNjaGVtYSBhdHRyaWJ1dGUplGpcVwAAaD1OdJQoaj12AACMPFJlYWRGcm9tUHViU3ViIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViKZRqX1cAAGg9TnSUKGo9dgAAjEFVUk4gKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIuUmVhZEZyb21QdWJTdWIgYXR0cmlidXRlKZRqYlcAAGg9TnSUKGo9dgAAjENleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5SZWFkRnJvbVB1YlN1YiBtZXRob2QplGplVwAAaD1OdJQoaj12AACMQVdyaXRlVG9QdWJzdWJTY2hlbWEgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWIplGpoVwAAaD1OdJQoaj12AACMS2lkX2xhYmVsIChhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViLldyaXRlVG9QdWJzdWJTY2hlbWEgYXR0cmlidXRlKZRqa1cAAGg9TnSUKGo9dgAAjFZ0aW1lc3RhbXBfYXR0cmlidXRlIChhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViLldyaXRlVG9QdWJzdWJTY2hlbWEgYXR0cmlidXRlKZRqblcAAGg9TnSUKGo9dgAAjEh0b3BpYyAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5Xcml0ZVRvUHVic3ViU2NoZW1hIGF0dHJpYnV0ZSmUanFXAABoPU50lChqPXYAAIw7V3JpdGVUb1B1YlN1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1YimUanRXAABoPU50lChqPXYAAIxAVVJOIChhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3ViLldyaXRlVG9QdWJTdWIgYXR0cmlidXRlKZRqd1cAAGg9TnSUKGo9dgAAjEJleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2NwLnB1YnN1Yi5Xcml0ZVRvUHViU3ViIG1ldGhvZCmUanpXAABoPU50lGVqogMAAF2UKChqPXYAAIwyYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2VuZXJhdGVfc2VxdWVuY2UgKG1vZHVsZSmUjDBtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2VuZXJhdGVfc2VxdWVuY2WUaD1OdJQoaj12AACMRUdlbmVyYXRlU2VxdWVuY2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdlbmVyYXRlX3NlcXVlbmNlKZRqf1cAAGg9TnSUKGo9dgAAjEpVUk4gKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdlbmVyYXRlX3NlcXVlbmNlLkdlbmVyYXRlU2VxdWVuY2UgYXR0cmlidXRlKZRqglcAAGg9TnSUZWrRAwAAXZQoKGo9dgAAjCZhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYSAobW9kdWxlKZSMJG1vZHVsZS1hcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYZRoPU50lChqPXYAAIw8UmVhZEZyb21LYWZrYVNjaGVtYSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EplGqHVwAAaD1OdJQoaj12AACMTWNvbnN1bWVyX2NvbmZpZyAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuUmVhZEZyb21LYWZrYVNjaGVtYSBhdHRyaWJ1dGUplGqKVwAAaD1OdJQoaj12AACMTmtleV9kZXNlcmlhbGl6ZXIgKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthLlJlYWRGcm9tS2Fma2FTY2hlbWEgYXR0cmlidXRlKZRqjVcAAGg9TnSUKGo9dgAAjER0b3BpY3MgKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthLlJlYWRGcm9tS2Fma2FTY2hlbWEgYXR0cmlidXRlKZRqkFcAAGg9TnSUKGo9dgAAjFB2YWx1ZV9kZXNlcmlhbGl6ZXIgKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthLlJlYWRGcm9tS2Fma2FTY2hlbWEgYXR0cmlidXRlKZRqk1cAAGg9TnSUKGo9dgAAjDZSZWFkRnJvbUthZmthIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYSmUapZXAABoPU50lChqPXYAAIxPYnl0ZV9hcnJheV9kZXNlcmlhbGl6ZXIgKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthLlJlYWRGcm9tS2Fma2EgYXR0cmlidXRlKZRqmVcAAGg9TnSUKGo9dgAAjDtVUk4gKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthLlJlYWRGcm9tS2Fma2EgYXR0cmlidXRlKZRqnFcAAGg9TnSUKGo9dgAAjDtXcml0ZVRvS2Fma2FTY2hlbWEgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthKZRqn1cAAGg9TnSUKGo9dgAAjEtrZXlfc2VyaWFsaXplciAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuV3JpdGVUb0thZmthU2NoZW1hIGF0dHJpYnV0ZSmUaqJXAABoPU50lChqPXYAAIxMcHJvZHVjZXJfY29uZmlnIChhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5Xcml0ZVRvS2Fma2FTY2hlbWEgYXR0cmlidXRlKZRqpVcAAGg9TnSUKGo9dgAAjEJ0b3BpYyAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuV3JpdGVUb0thZmthU2NoZW1hIGF0dHJpYnV0ZSmUaqhXAABoPU50lChqPXYAAIxNdmFsdWVfc2VyaWFsaXplciAoYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwua2Fma2EuV3JpdGVUb0thZmthU2NoZW1hIGF0dHJpYnV0ZSmUaqtXAABoPU50lChqPXYAAIw1V3JpdGVUb0thZmthIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYSmUaq5XAABoPU50lChqPXYAAIxMYnl0ZV9hcnJheV9zZXJpYWxpemVyIChhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5rYWZrYS5Xcml0ZVRvS2Fma2EgYXR0cmlidXRlKZRqsVcAAGg9TnSUKGo9dgAAjDpVUk4gKGFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthLldyaXRlVG9LYWZrYSBhdHRyaWJ1dGUplGq0VwAAaD1OdJRlau8DAABdlCgoaj12AACMJWFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsgKG1vZHVsZSmUjCNtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2lua5RoPU50lChqPXYAAIw1RmlsZUJhc2VkU2luayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luaymUarlXAABoPU50lChqPXYAAIxCZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luayBtZXRob2QplGq8VwAAaD1OdJQoaj12AACMOm9wZW4oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZCmUar9XAABoPU50lChqPXYAAIxCd3JpdGVfcmVjb3JkKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luayBtZXRob2QplGrCVwAAaD1OdJQoaj12AACMSndyaXRlX2VuY29kZWRfcmVjb3JkKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luayBtZXRob2QplGrFVwAAaD1OdJQoaj12AACMO2Nsb3NlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luayBtZXRob2QplGrIVwAAaD1OdJQoaj12AACMRmluaXRpYWxpemVfd3JpdGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZCmUastXAABoPU50lChqPXYAAIxBb3Blbl93cml0ZXIoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rIG1ldGhvZCmUas5XAABoPU50lChqPXYAAIxCcHJlX2ZpbmFsaXplKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luayBtZXRob2QplGrRVwAAaD1OdJQoaj12AACMRGZpbmFsaXplX3dyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmsuRmlsZUJhc2VkU2luayBtZXRob2QplGrUVwAAaD1OdJRlaokDAABdlCgoaj12AACMJ2FwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZSAobW9kdWxlKZSMJW1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2WUaD1OdJQoaj12AACMOUZpbGVCYXNlZFNvdXJjZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlKZRq2VcAAGg9TnSUKGo9dgAAjFZNSU5fTlVNQkVSX09GX0ZJTEVTX1RPX1NUQVQgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UgYXR0cmlidXRlKZRq3FcAAGg9TnSUKGo9dgAAjFhNSU5fRlJBQ1RJT05fT0ZfRklMRVNfVE9fU1RBVCAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBhdHRyaWJ1dGUplGrfVwAAaD1OdJQoaj12AACMRmRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZCmUauJXAABoPU50lChqPXYAAIxDb3Blbl9maWxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2UgbWV0aG9kKZRq5VcAAGg9TnSUKGo9dgAAjD9zcGxpdCgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZCmUauhXAABoPU50lChqPXYAAIxHZXN0aW1hdGVfc2l6ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZCmUautXAABoPU50lChqPXYAAIw+cmVhZCgpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZCmUau5XAABoPU50lChqPXYAAIxLZ2V0X3JhbmdlX3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBtZXRob2QplGrxVwAAaD1OdJQoaj12AACMRnJlYWRfcmVjb3JkcygpIChhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlIG1ldGhvZCmUavRXAABoPU50lChqPXYAAIxFc3BsaXR0YWJsZSAoYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSBhdHRyaWJ1dGUplGr3VwAAaD1OdJRlavwDAABdlCgoaj12AACMHmFwYWNoZV9iZWFtLmlvLmZpbGVpbyAobW9kdWxlKZSMHG1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlaW+UaD1OdJQoaj12AACMNEVtcHR5TWF0Y2hUcmVhdG1lbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVpbymUavxXAABoPU50lChqPXYAAIw7QUxMT1cgKGFwYWNoZV9iZWFtLmlvLmZpbGVpby5FbXB0eU1hdGNoVHJlYXRtZW50IGF0dHJpYnV0ZSmUav9XAABoPU50lChqPXYAAIw+RElTQUxMT1cgKGFwYWNoZV9iZWFtLmlvLmZpbGVpby5FbXB0eU1hdGNoVHJlYXRtZW50IGF0dHJpYnV0ZSmUagJYAABoPU50lChqPXYAAIxHQUxMT1dfSUZfV0lMRENBUkQgKGFwYWNoZV9iZWFtLmlvLmZpbGVpby5FbXB0eU1hdGNoVHJlYXRtZW50IGF0dHJpYnV0ZSmUagVYAABoPU50lChqPXYAAIxNYWxsb3dfZW1wdHlfbWF0Y2goKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWlvLkVtcHR5TWF0Y2hUcmVhdG1lbnQgc3RhdGljIG1ldGhvZCmUaghYAABoPU50lChqPXYAAIwrTWF0Y2hGaWxlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZWlvKZRqC1gAAGg9TnSUKGo9dgAAjDJleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWlvLk1hdGNoRmlsZXMgbWV0aG9kKZRqDlgAAGg9TnSUKGo9dgAAjClNYXRjaEFsbCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZWlvKZRqEVgAAGg9TnSUKGo9dgAAjDBleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWlvLk1hdGNoQWxsIG1ldGhvZCmUahRYAABoPU50lChqPXYAAIwtUmVhZGFibGVGaWxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5maWxlaW8plGoXWAAAaD1OdJQoaj12AACMMm9wZW4oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWlvLlJlYWRhYmxlRmlsZSBtZXRob2QplGoaWAAAaD1OdJQoaj12AACMMnJlYWQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZWlvLlJlYWRhYmxlRmlsZSBtZXRob2QplGodWAAAaD1OdJQoaj12AACMN3JlYWRfdXRmOCgpIChhcGFjaGVfYmVhbS5pby5maWxlaW8uUmVhZGFibGVGaWxlIG1ldGhvZCmUaiBYAABoPU50lChqPXYAAIwsUmVhZE1hdGNoZXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVpbymUaiNYAABoPU50lChqPXYAAIwzZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVpby5SZWFkTWF0Y2hlcyBtZXRob2QplGomWAAAaD1OdJRlaq8DAABdlCgoaj12AACMImFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gKG1vZHVsZSmUjCBtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbZRoPU50lChqPXYAAIw1Q29tcHJlc3Npb25UeXBlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSmUaitYAABoPU50lChqPXYAAIw7QVVUTyAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzIGF0dHJpYnV0ZSmUai5YAABoPU50lChqPXYAAIw8QlpJUDIgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBhdHRyaWJ1dGUplGoxWAAAaD1OdJQoaj12AACMPkRFRkxBVEUgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBhdHRyaWJ1dGUplGo0WAAAaD1OdJQoaj12AACMO0daSVAgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcyBhdHRyaWJ1dGUplGo3WAAAaD1OdJQoaj12AACMQ1VOQ09NUFJFU1NFRCAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzIGF0dHJpYnV0ZSmUajpYAABoPU50lChqPXYAAIxVaXNfdmFsaWRfY29tcHJlc3Npb25fdHlwZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMgY2xhc3MgbWV0aG9kKZRqPVgAAGg9TnSUKGo9dgAAjEVtaW1lX3R5cGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzIGNsYXNzIG1ldGhvZCmUakBYAABoPU50lChqPXYAAIxTZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzIGNsYXNzIG1ldGhvZCmUakNYAABoPU50lChqPXYAAIwzQ29tcHJlc3NlZEZpbGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0plGpGWAAAaD1OdJQoaj12AACMPHJlYWRhYmxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUgbWV0aG9kKZRqSVgAAGg9TnSUKGo9dgAAjD13cml0ZWFibGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2QplGpMWAAAaD1OdJQoaj12AACMOXdyaXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUgbWV0aG9kKZRqT1gAAGg9TnSUKGo9dgAAjDhyZWFkKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUgbWV0aG9kKZRqUlgAAGg9TnSUKGo9dgAAjDxyZWFkbGluZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZCmUalVYAABoPU50lChqPXYAAIw6Y2xvc2VkKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3NlZEZpbGUgbWV0aG9kKZRqWFgAAGg9TnSUKGo9dgAAjDljbG9zZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZCmUaltYAABoPU50lChqPXYAAIw5Zmx1c2goKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2VkRmlsZSBtZXRob2QplGpeWAAAaD1OdJQoaj12AACMPXNlZWthYmxlIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIGF0dHJpYnV0ZSmUamFYAABoPU50lChqPXYAAIw4c2VlaygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZCmUamRYAABoPU50lChqPXYAAIw4dGVsbCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzZWRGaWxlIG1ldGhvZCmUamdYAABoPU50lChqPXYAAIwxRmlsZU1ldGFkYXRhIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtKZRqalgAAGg9TnSUKGo9dgAAjDBNYXRjaFJlc3VsdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSmUam1YAABoPU50lChqPXYAAIwvRmlsZVN5c3RlbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSmUanBYAABoPU50lChqPXYAAIw7Q0hVTktfU0laRSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIGF0dHJpYnV0ZSmUanNYAABoPU50lChqPXYAAIw8c2NoZW1lKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBjbGFzcyBtZXRob2QplGp2WAAAaD1OdJQoaj12AACMNGpvaW4oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZCmUanlYAABoPU50lChqPXYAAIw1c3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZCmUanxYAABoPU50lChqPXYAAIw2bWtkaXJzKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QplGp/WAAAaD1OdJQoaj12AACMOGhhc19kaXJzKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QplGqCWAAAaD1OdJQoaj12AACMO21hdGNoX2ZpbGVzKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QplGqFWAAAaD1OdJQoaj12AACMSHRyYW5zbGF0ZV9wYXR0ZXJuKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBzdGF0aWMgbWV0aG9kKZRqiFgAAGg9TnSUKGo9dgAAjDVtYXRjaCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKZRqi1gAAGg9TnSUKGo9dgAAjDZjcmVhdGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZCmUao5YAABoPU50lChqPXYAAIw0b3BlbigpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKZRqkVgAAGg9TnSUKGo9dgAAjDRjb3B5KCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QplGqUWAAAaD1OdJQoaj12AACMNnJlbmFtZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKZRql1gAAGg9TnSUKGo9dgAAjDZleGlzdHMoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZCmUappYAABoPU50lChqPXYAAIw0c2l6ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW0gbWV0aG9kKZRqnVgAAGg9TnSUKGo9dgAAjDxsYXN0X3VwZGF0ZWQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZCmUaqBYAABoPU50lChqPXYAAIw4Y2hlY2tzdW0oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtIG1ldGhvZCmUaqNYAABoPU50lChqPXYAAIw2ZGVsZXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbSBtZXRob2QplGqmWAAAaD1OdJRlai0DAABdlCgoaj12AACMJGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbyAobW9kdWxlKZSMIm1vZHVsZS1hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW+UaD1OdJQoaj12AACMMURvd25sb2FkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbymUaqtYAABoPU50lChqPXYAAIw3c2l6ZSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXIgYXR0cmlidXRlKZRqrlgAAGg9TnSUKGo9dgAAjDtnZXRfcmFuZ2UoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXIgbWV0aG9kKZRqsVgAAGg9TnSUKGo9dgAAjC9VcGxvYWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvKZRqtFgAAGg9TnSUKGo9dgAAjDNwdXQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlVwbG9hZGVyIG1ldGhvZCmUardYAABoPU50lChqPXYAAIw2ZmluaXNoKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5VcGxvYWRlciBtZXRob2QplGq6WAAAaD1OdJQoaj12AACMN0Rvd25sb2FkZXJTdHJlYW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbymUar1YAABoPU50lChqPXYAAIxAcmVhZGludG8oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW0gbWV0aG9kKZRqwFgAAGg9TnSUKGo9dgAAjDxzZWVrKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtIG1ldGhvZCmUasNYAABoPU50lChqPXYAAIw8dGVsbCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uRG93bmxvYWRlclN0cmVhbSBtZXRob2QplGrGWAAAaD1OdJQoaj12AACMQHNlZWthYmxlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtIG1ldGhvZCmUaslYAABoPU50lChqPXYAAIxAcmVhZGFibGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLkRvd25sb2FkZXJTdHJlYW0gbWV0aG9kKZRqzFgAAGg9TnSUKGo9dgAAjD9yZWFkYWxsKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtIG1ldGhvZCmUas9YAABoPU50lChqPXYAAIw1VXBsb2FkZXJTdHJlYW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbymUatJYAABoPU50lChqPXYAAIw6dGVsbCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uVXBsb2FkZXJTdHJlYW0gbWV0aG9kKZRq1VgAAGg9TnSUKGo9dgAAjDt3cml0ZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uVXBsb2FkZXJTdHJlYW0gbWV0aG9kKZRq2FgAAGg9TnSUKGo9dgAAjDtjbG9zZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uVXBsb2FkZXJTdHJlYW0gbWV0aG9kKZRq21gAAGg9TnSUKGo9dgAAjD53cml0YWJsZSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uVXBsb2FkZXJTdHJlYW0gbWV0aG9kKZRq3lgAAGg9TnSUKGo9dgAAjDFQaXBlU3RyZWFtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8plGrhWAAAaD1OdJQoaj12AACMNnJlYWQoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvLlBpcGVTdHJlYW0gbWV0aG9kKZRq5FgAAGg9TnSUKGo9dgAAjDZ0ZWxsKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pby5QaXBlU3RyZWFtIG1ldGhvZCmUaudYAABoPU50lChqPXYAAIw2c2VlaygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8uUGlwZVN0cmVhbSBtZXRob2QplGrqWAAAaD1OdJRlaoEDAABdlCgoaj12AACMI2FwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIChtb2R1bGUplIwhbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zlGg9TnSUKGo9dgAAjDFGaWxlU3lzdGVtcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMplGrvWAAAaD1OdJQoaj12AACMRVVSSV9TQ0hFTUFfUEFUVEVSTiAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgYXR0cmlidXRlKZRq8lgAAGg9TnSUKGo9dgAAjENzZXRfb3B0aW9ucygpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBjbGFzcyBtZXRob2QplGr1WAAAaD1OdJQoaj12AACMQ2dldF9zY2hlbWUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZCmUavhYAABoPU50lChqPXYAAIxHZ2V0X2ZpbGVzeXN0ZW0oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZCmUavtYAABoPU50lChqPXYAAIw9am9pbigpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKZRq/lgAAGg9TnSUKGo9dgAAjD5zcGxpdCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKZRqAVkAAGg9TnSUKGo9dgAAjD9ta2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZCmUagRZAABoPU50lChqPXYAAIw+bWF0Y2goKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZCmUagdZAABoPU50lChqPXYAAIw/Y3JlYXRlKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QplGoKWQAAaD1OdJQoaj12AACMPW9wZW4oKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZCmUag1ZAABoPU50lChqPXYAAIw9Y29weSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKZRqEFkAAGg9TnSUKGo9dgAAjD9yZW5hbWUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZCmUahNZAABoPU50lChqPXYAAIw/ZXhpc3RzKCkgKGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zIHN0YXRpYyBtZXRob2QplGoWWQAAaD1OdJQoaj12AACMRWxhc3RfdXBkYXRlZCgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKZRqGVkAAGg9TnSUKGo9dgAAjEFjaGVja3N1bSgpIChhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcy5GaWxlU3lzdGVtcyBzdGF0aWMgbWV0aG9kKZRqHFkAAGg9TnSUKGo9dgAAjD9kZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZCmUah9ZAABoPU50lChqPXYAAIxHZ2V0X2NodW5rX3NpemUoKSAoYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMgc3RhdGljIG1ldGhvZCmUaiJZAABoPU50lGVqCwQAAF2UKGo9dgAAjB1hcGFjaGVfYmVhbS5pby5mbGluayAobW9kdWxlKZSMG21vZHVsZS1hcGFjaGVfYmVhbS5pby5mbGlua5RoPU50lGFqYwMAAF2UKChqPXYAAIw8YXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlIChtb2R1bGUplIw6bW9kdWxlLWFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZZRoPU50lChqPXYAAIxaRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UplGopWQAAaD1OdJQoaj12AACMX1VSTiAoYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSBhdHRyaWJ1dGUplGosWQAAaD1OdJQoaj12AACMYmNvbmZpZyAoYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSBhdHRyaWJ1dGUplGovWQAAaD1OdJQoaj12AACMYWV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlIG1ldGhvZCmUajJZAABoPU50lChqPXYAAIxoZ2V0X3dpbmRvd2luZygpIChhcGFjaGVfYmVhbS5pby5mbGluay5mbGlua19zdHJlYW1pbmdfaW1wdWxzZV9zb3VyY2UuRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlIG1ldGhvZCmUajVZAABoPU50lChqPXYAAIxsaW5mZXJfb3V0cHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSBtZXRob2QplGo4WQAAaD1OdJQoaj12AACMcnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UgbWV0aG9kKZRqO1kAAGg9TnSUKGo9dgAAjGpzZXRfaW50ZXJ2YWxfbXMoKSAoYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNlLkZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSBtZXRob2QplGo+WQAAaD1OdJQoaj12AACMbHNldF9tZXNzYWdlX2NvdW50KCkgKGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UgbWV0aG9kKZRqQVkAAGg9TnSUKGo9dgAAjHtmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmlvLmZsaW5rLmZsaW5rX3N0cmVhbWluZ19pbXB1bHNlX3NvdXJjZS5GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Ugc3RhdGljIG1ldGhvZCmUakRZAABoPU50lGVqoQMAAF2UKGo9dgAAjBthcGFjaGVfYmVhbS5pby5nY3AgKG1vZHVsZSmUjBltb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwlGg9TnSUYWqOAwAAXZQoKGo9dgAAjD1hcGFjaGVfYmVhbS5pby5nY3AuYmlnX3F1ZXJ5X3F1ZXJ5X3RvX3RhYmxlX3BpcGVsaW5lIChtb2R1bGUplIw7bW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdfcXVlcnlfcXVlcnlfdG9fdGFibGVfcGlwZWxpbmWUaD1OdJQoaj12AACMUnJ1bl9icV9waXBlbGluZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ19xdWVyeV9xdWVyeV90b190YWJsZV9waXBlbGluZSmUaktZAABoPU50lGVqcwMAAF2UKChqPXYAAIwkYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5IChtb2R1bGUplIwibW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeZRoPU50lChqPXYAAIw4VGFibGVSb3dKc29uQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeSmUalBZAABoPU50lChqPXYAAIw/ZW5jb2RlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5UYWJsZVJvd0pzb25Db2RlciBtZXRob2QplGpTWQAAaD1OdJQoaj12AACMP2RlY29kZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuVGFibGVSb3dKc29uQ29kZXIgbWV0aG9kKZRqVlkAAGg9TnSUKGo9dgAAjDpCaWdRdWVyeURpc3Bvc2l0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkplGpZWQAAaD1OdJQoaj12AACMSENSRUFURV9ORVZFUiAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gYXR0cmlidXRlKZRqXFkAAGg9TnSUKGo9dgAAjExDUkVBVEVfSUZfTkVFREVEIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbiBhdHRyaWJ1dGUplGpfWQAAaD1OdJQoaj12AACMSldSSVRFX1RSVU5DQVRFIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuQmlnUXVlcnlEaXNwb3NpdGlvbiBhdHRyaWJ1dGUplGpiWQAAaD1OdJQoaj12AACMSFdSSVRFX0FQUEVORCAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gYXR0cmlidXRlKZRqZVkAAGg9TnSUKGo9dgAAjEdXUklURV9FTVBUWSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gYXR0cmlidXRlKZRqaFkAAGg9TnSUKGo9dgAAjFF2YWxpZGF0ZV9jcmVhdGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gc3RhdGljIG1ldGhvZCmUamtZAABoPU50lChqPXYAAIxQdmFsaWRhdGVfd3JpdGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5RGlzcG9zaXRpb24gc3RhdGljIG1ldGhvZCmUam5ZAABoPU50lChqPXYAAIw1QmlnUXVlcnlTb3VyY2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeSmUanFZAABoPU50lChqPXYAAIxCZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNvdXJjZSBtZXRob2QplGp0WQAAaD1OdJQoaj12AACMPWZvcm1hdCAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U291cmNlIGF0dHJpYnV0ZSmUandZAABoPU50lChqPXYAAIw8cmVhZGVyKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNvdXJjZSBtZXRob2QplGp6WQAAaD1OdJQoaj12AACMM0JpZ1F1ZXJ5U2luayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5KZRqfVkAAGg9TnSUKGo9dgAAjEBkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2luayBtZXRob2QplGqAWQAAaD1OdJQoaj12AACMQnNjaGVtYV9hc19qc29uKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmsgbWV0aG9kKZRqg1kAAGg9TnSUKGo9dgAAjDtmb3JtYXQgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5CaWdRdWVyeVNpbmsgYXR0cmlidXRlKZRqhlkAAGg9TnSUKGo9dgAAjDp3cml0ZXIoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LkJpZ1F1ZXJ5U2luayBtZXRob2QplGqJWQAAaD1OdJQoaj12AACMNldyaXRlVG9CaWdRdWVyeSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5KZRqjFkAAGg9TnSUKGo9dgAAjD1Xcml0ZVRvQmlnUXVlcnkuTWV0aG9kIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkplGqPWQAAaD1OdJQoaj12AACMRkRFRkFVTFQgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuTWV0aG9kIGF0dHJpYnV0ZSmUapJZAABoPU50lChqPXYAAIxQU1RSRUFNSU5HX0lOU0VSVFMgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkuTWV0aG9kIGF0dHJpYnV0ZSmUapVZAABoPU50lChqPXYAAIxJRklMRV9MT0FEUyAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeS5NZXRob2QgYXR0cmlidXRlKZRqmFkAAGg9TnSUKGo9dgAAjFpnZXRfdGFibGVfc2NoZW1hX2Zyb21fc3RyaW5nKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkgc3RhdGljIG1ldGhvZCmUaptZAABoPU50lChqPXYAAIxSdGFibGVfc2NoZW1hX3RvX2RpY3QoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeSBzdGF0aWMgbWV0aG9kKZRqnlkAAGg9TnSUKGo9dgAAjFNnZXRfZGljdF90YWJsZV9zY2hlbWEoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeSBzdGF0aWMgbWV0aG9kKZRqoVkAAGg9TnSUKGo9dgAAjD1leHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeSBtZXRob2QplGqkWQAAaD1OdJQoaj12AACMQ2Rpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkuV3JpdGVUb0JpZ1F1ZXJ5IG1ldGhvZCmUaqdZAABoPU50lGVqqQMAAF2UKChqPXYAAIwvYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMgKG1vZHVsZSmUjC1tb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHOUaD1OdJQoaj12AACMSmZpbGVfcHJlZml4X2dlbmVyYXRvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMplGqsWQAAaD1OdJQoaj12AACMRFdyaXRlUmVjb3Jkc1RvRmlsZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMplGqvWQAAaD1OdJQoaj12AACMWlVOV1JJVFRFTl9SRUNPUkRfVEFHIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5Xcml0ZVJlY29yZHNUb0ZpbGUgYXR0cmlidXRlKZRqslkAAGg9TnSUKGo9dgAAjFZXUklUVEVOX0ZJTEVfVEFHIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5Xcml0ZVJlY29yZHNUb0ZpbGUgYXR0cmlidXRlKZRqtVkAAGg9TnSUKGo9dgAAjFFkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuV3JpdGVSZWNvcmRzVG9GaWxlIG1ldGhvZCmUarhZAABoPU50lChqPXYAAIxRc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLldyaXRlUmVjb3Jkc1RvRmlsZSBtZXRob2QplGq7WQAAaD1OdJQoaj12AACMTHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuV3JpdGVSZWNvcmRzVG9GaWxlIG1ldGhvZCmUar5ZAABoPU50lChqPXYAAIxSZmluaXNoX2J1bmRsZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5Xcml0ZVJlY29yZHNUb0ZpbGUgbWV0aG9kKZRqwVkAAGg9TnSUKGo9dgAAjEtXcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2FkcymUasRZAABoPU50lChqPXYAAIxTcHJvY2VzcygpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5Xcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxlIG1ldGhvZCmUasdZAABoPU50lChqPXYAAIxBVHJpZ2dlckNvcHlKb2JzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2FkcymUaspZAABoPU50lChqPXYAAIxOc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlRyaWdnZXJDb3B5Sm9icyBtZXRob2QplGrNWQAAaD1OdJQoaj12AACMSXByb2Nlc3MoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuVHJpZ2dlckNvcHlKb2JzIG1ldGhvZCmUatBZAABoPU50lChqPXYAAIxBVHJpZ2dlckxvYWRKb2JzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2FkcymUatNZAABoPU50lChqPXYAAIxOVEVNUF9UQUJMRVMgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlRyaWdnZXJMb2FkSm9icyBhdHRyaWJ1dGUplGrWWQAAaD1OdJQoaj12AACMTmRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5UcmlnZ2VyTG9hZEpvYnMgbWV0aG9kKZRq2VkAAGg9TnSUKGo9dgAAjE5zdGFydF9idW5kbGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuVHJpZ2dlckxvYWRKb2JzIG1ldGhvZCmUatxZAABoPU50lChqPXYAAIxJcHJvY2VzcygpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5UcmlnZ2VyTG9hZEpvYnMgbWV0aG9kKZRq31kAAGg9TnSUKGo9dgAAjEBQYXJ0aXRpb25GaWxlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMplGriWQAAaD1OdJQoaj12AACMWU1VTFRJUExFX1BBUlRJVElPTlNfVEFHIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5QYXJ0aXRpb25GaWxlcyBhdHRyaWJ1dGUplGrlWQAAaD1OdJQoaj12AACMVlNJTkdMRV9QQVJUSVRJT05fVEFHIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5QYXJ0aXRpb25GaWxlcyBhdHRyaWJ1dGUplGroWQAAaD1OdJQoaj12AACMSlBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMplGrrWQAAaD1OdJQoaj12AACMVWNhbl9hY2NlcHQoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuUGFydGl0aW9uRmlsZXMuUGFydGl0aW9uIG1ldGhvZCmUau5ZAABoPU50lChqPXYAAIxOYWRkKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLlBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbiBtZXRob2QplGrxWQAAaD1OdJQoaj12AACMSHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuUGFydGl0aW9uRmlsZXMgbWV0aG9kKZRq9FkAAGg9TnSUKGo9dgAAjD9XYWl0Rm9yQlFKb2JzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2FkcymUavdZAABoPU50lChqPXYAAIxMc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLldhaXRGb3JCUUpvYnMgbWV0aG9kKZRq+lkAAGg9TnSUKGo9dgAAjEdwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLldhaXRGb3JCUUpvYnMgbWV0aG9kKZRq/VkAAGg9TnSUKGo9dgAAjEBEZWxldGVUYWJsZXNGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMplGoAWgAAaD1OdJQoaj12AACMTXN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5EZWxldGVUYWJsZXNGbiBtZXRob2QplGoDWgAAaD1OdJQoaj12AACMSHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuRGVsZXRlVGFibGVzRm4gbWV0aG9kKZRqBloAAGg9TnSUKGo9dgAAjEhCaWdRdWVyeUJhdGNoRmlsZUxvYWRzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2FkcymUaglaAABoPU50lChqPXYAAIxhREVTVElOQVRJT05fSk9CSURfUEFJUlMgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLkJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHMgYXR0cmlidXRlKZRqDFoAAGg9TnSUKGo9dgAAjGBERVNUSU5BVElPTl9GSUxFX1BBSVJTIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5CaWdRdWVyeUJhdGNoRmlsZUxvYWRzIGF0dHJpYnV0ZSmUag9aAABoPU50lChqPXYAAIxmREVTVElOQVRJT05fQ09QWV9KT0JJRF9QQUlSUyAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X2ZpbGVfbG9hZHMuQmlnUXVlcnlCYXRjaEZpbGVMb2FkcyBhdHRyaWJ1dGUplGoSWgAAaD1OdJQoaj12AACMT3ZlcmlmeSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkcy5CaWdRdWVyeUJhdGNoRmlsZUxvYWRzIG1ldGhvZCmUahVaAABoPU50lChqPXYAAIxPZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzLkJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHMgbWV0aG9kKZRqGFoAAGg9TnSUZWqyAwAAXZQoKGo9dgAAjDVhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfaW9fcmVhZF9waXBlbGluZSAobW9kdWxlKZSMM21vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfaW9fcmVhZF9waXBlbGluZZRoPU50lChqPXYAAIxPUm93VG9TdHJpbmdXaXRoU2xvd0Rvd24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lKZRqHVoAAGg9TnSUKGo9dgAAjFdwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5lLlJvd1RvU3RyaW5nV2l0aFNsb3dEb3duIG1ldGhvZCmUaiBaAABoPU50lChqPXYAAIw+cnVuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfaW9fcmVhZF9waXBlbGluZSmUaiNaAABoPU50lGVq4AMAAF2UKChqPXYAAIwqYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzIChtb2R1bGUplIwobW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29sc5RoPU50lChqPXYAAIw9RXhwb3J0RmlsZUZvcm1hdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzKZRqKFoAAGg9TnSUKGo9dgAAjEJDU1YgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5FeHBvcnRGaWxlRm9ybWF0IGF0dHJpYnV0ZSmUaitaAABoPU50lChqPXYAAIxDSlNPTiAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkV4cG9ydEZpbGVGb3JtYXQgYXR0cmlidXRlKZRqLloAAGg9TnSUKGo9dgAAjENBVlJPIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuRXhwb3J0RmlsZUZvcm1hdCBhdHRyaWJ1dGUplGoxWgAAaD1OdJQoaj12AACMPkV4cG9ydENvbXByZXNzaW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMplGo0WgAAaD1OdJQoaj12AACMREdaSVAgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5FeHBvcnRDb21wcmVzc2lvbiBhdHRyaWJ1dGUplGo3WgAAaD1OdJQoaj12AACMR0RFRkxBVEUgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5FeHBvcnRDb21wcmVzc2lvbiBhdHRyaWJ1dGUplGo6WgAAaD1OdJQoaj12AACMRlNOQVBQWSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkV4cG9ydENvbXByZXNzaW9uIGF0dHJpYnV0ZSmUaj1aAABoPU50lChqPXYAAIxETk9ORSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkV4cG9ydENvbXByZXNzaW9uIGF0dHJpYnV0ZSmUakBaAABoPU50lChqPXYAAIw/ZGVmYXVsdF9lbmNvZGVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMplGpDWgAAaD1OdJQoaj12AACMSGdldF9oYXNoYWJsZV9kZXN0aW5hdGlvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzKZRqRloAAGg9TnSUKGo9dgAAjExwYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMplGpJWgAAaD1OdJQoaj12AACMRXBhcnNlX3RhYmxlX3JlZmVyZW5jZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzKZRqTFoAAGg9TnSUKGo9dgAAjDxCaWdRdWVyeVdyYXBwZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scymUak9aAABoPU50lChqPXYAAIxIVEVNUF9UQUJMRSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlciBhdHRyaWJ1dGUplGpSWgAAaD1OdJQoaj12AACMSlRFTVBfREFUQVNFVCAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlciBhdHRyaWJ1dGUplGpVWgAAaD1OdJQoaj12AACMS3VuaXF1ZV9yb3dfaWQgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIgYXR0cmlidXRlKZRqWFoAAGg9TnSUKGo9dgAAjE9nZXRfcXVlcnlfbG9jYXRpb24oKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlciBtZXRob2QplGpbWgAAaD1OdJQoaj12AACMTHdhaXRfZm9yX2JxX2pvYigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUal5aAABoPU50lChqPXYAAIxGZ2V0X3RhYmxlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIgbWV0aG9kKZRqYVoAAGg9TnSUKGo9dgAAjFJnZXRfb3JfY3JlYXRlX2RhdGFzZXQoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlciBtZXRob2QplGpkWgAAaD1OdJQoaj12AACMT2dldF90YWJsZV9sb2NhdGlvbigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUamdaAABoPU50lChqPXYAAIxVY3JlYXRlX3RlbXBvcmFyeV9kYXRhc2V0KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIgbWV0aG9kKZRqaloAAGg9TnSUKGo9dgAAjFdjbGVhbl91cF90ZW1wb3JhcnlfZGF0YXNldCgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUam1aAABoPU50lChqPXYAAIxEZ2V0X2pvYigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUanBaAABoPU50lChqPXYAAIxNcGVyZm9ybV9sb2FkX2pvYigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUanNaAABoPU50lChqPXYAAIxQcGVyZm9ybV9leHRyYWN0X2pvYigpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUanZaAABoPU50lChqPXYAAIxQZ2V0X29yX2NyZWF0ZV90YWJsZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUanlaAABoPU50lChqPXYAAIxGcnVuX3F1ZXJ5KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIgbWV0aG9kKZRqfFoAAGg9TnSUKGo9dgAAjEhpbnNlcnRfcm93cygpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUan9aAABoPU50lChqPXYAAIxQY29udmVydF9yb3dfdG9fZGljdCgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyIG1ldGhvZCmUaoJaAABoPU50lChqPXYAAIw7QmlnUXVlcnlSZWFkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scymUaoVaAABoPU50lChqPXYAAIw7QmlnUXVlcnlXcml0ZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scymUaohaAABoPU50lChqPXYAAIxBV3JpdGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JpdGVyIG1ldGhvZCmUaotaAABoPU50lChqPXYAAIw/Um93QXNEaWN0SnNvbkNvZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMplGqOWgAAaD1OdJQoaj12AACMRmVuY29kZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMuUm93QXNEaWN0SnNvbkNvZGVyIG1ldGhvZCmUapFaAABoPU50lChqPXYAAIxGZGVjb2RlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5Sb3dBc0RpY3RKc29uQ29kZXIgbWV0aG9kKZRqlFoAAGg9TnSUKGo9dgAAjDpSZXRyeVN0cmF0ZWd5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMplGqXWgAAaD1OdJQoaj12AACMSFJFVFJZX0FMV0FZUyAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJldHJ5U3RyYXRlZ3kgYXR0cmlidXRlKZRqmloAAGg9TnSUKGo9dgAAjEdSRVRSWV9ORVZFUiAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJldHJ5U3RyYXRlZ3kgYXR0cmlidXRlKZRqnVoAAGg9TnSUKGo9dgAAjFRSRVRSWV9PTl9UUkFOU0lFTlRfRVJST1IgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5SZXRyeVN0cmF0ZWd5IGF0dHJpYnV0ZSmUaqBaAABoPU50lChqPXYAAIxOc2hvdWxkX3JldHJ5KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scy5SZXRyeVN0cmF0ZWd5IHN0YXRpYyBtZXRob2QplGqjWgAAaD1OdJQoaj12AACMQUFwcGVuZERlc3RpbmF0aW9uc0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHMplGqmWgAAaD1OdJQoaj12AACMSXByb2Nlc3MoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLkFwcGVuZERlc3RpbmF0aW9uc0ZuIG1ldGhvZCmUaqlaAABoPU50lGVqFgQAAF2UKChqPXYAAIwmYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3RhYmxlaW8gKG1vZHVsZSmUjCRtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3RhYmxlaW+UaD1OdJQoaj12AACMOFdyaXRlVG9CaWdUYWJsZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3RhYmxlaW8plGquWgAAaD1OdJQoaj12AACMP2V4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5nY3AuYmlndGFibGVpby5Xcml0ZVRvQmlnVGFibGUgbWV0aG9kKZRqsVoAAGg9TnSUZWp2AwAAXZQoaj12AACMJWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUgKG1vZHVsZSmUjCNtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZZRoPU50lGFq3wMAAF2UKGo9dgAAjCthcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3IChtb2R1bGUplIwpbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXeUaD1OdJRhalcDAABdlCgoaj12AACMR2FwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lIChtb2R1bGUplIxFbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5llGg9TnSUKGo9dgAAjGduZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmUplGq6WgAAaD1OdJQoaj12AACMV0VudGl0eVdyYXBwZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlX3dyaXRlX2l0X3BpcGVsaW5lKZRqvVoAAGg9TnSUKGo9dgAAjGNtYWtlX2VudGl0eSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZS5FbnRpdHlXcmFwcGVyIG1ldGhvZCmUasBaAABoPU50lChqPXYAAIxQcnVuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZV93cml0ZV9pdF9waXBlbGluZSmUasNaAABoPU50lGVqHQQAAF2UKChqPXYAAIw3YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVpbyAobW9kdWxlKZSMNW1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvlGg9TnSUKGo9dgAAjEtSZWFkRnJvbURhdGFzdG9yZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVpbymUashaAABoPU50lChqPXYAAIxSZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlaW8uUmVhZEZyb21EYXRhc3RvcmUgbWV0aG9kKZRqy1oAAGg9TnSUKGo9dgAAjFhkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVpby5SZWFkRnJvbURhdGFzdG9yZSBtZXRob2QplGrOWgAAaD1OdJQoaj12AACMSldyaXRlVG9EYXRhc3RvcmUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlaW8plGrRWgAAaD1OdJQoaj12AACMTURlbGV0ZUZyb21EYXRhc3RvcmUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlaW8plGrUWgAAaD1OdJRlamIDAABdlCgoaj12AACMMmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuaGVscGVyIChtb2R1bGUplIwwbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuaGVscGVylGg9TnSUKGo9dgAAjEJnZXRfY2xpZW50KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlcimUatlaAABoPU50lChqPXYAAIxKcmV0cnlfb25fcnBjX2Vycm9yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlcimUatxaAABoPU50lChqPXYAAIxHY3JlYXRlX2VudGl0aWVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlcimUat9aAABoPU50lChqPXYAAIxOY3JlYXRlX2NsaWVudF9lbnRpdGllcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5oZWxwZXIplGriWgAAaD1OdJRlaqUDAABdlCgoaj12AACMOmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcucXVlcnlfc3BsaXR0ZXIgKG1vZHVsZSmUjDhtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5xdWVyeV9zcGxpdHRlcpRoPU50lChqPXYAAIwSUXVlcnlTcGxpdHRlckVycm9ylGrnWgAAaD1OdJQoaj12AACMFVNwbGl0Tm90UG9zc2libGVFcnJvcpRq6loAAGg9TnSUKGo9dgAAjEpnZXRfc3BsaXRzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnF1ZXJ5X3NwbGl0dGVyKZRq7VoAAGg9TnSUZWq4AwAAXZQoKGo9dgAAjDFhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzIChtb2R1bGUplIwvbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcudHlwZXOUaD1OdJQoaj12AACMOVF1ZXJ5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzKZRq8loAAGg9TnSUKGo9dgAAjD9jbG9uZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzLlF1ZXJ5IG1ldGhvZCmUavVaAABoPU50lChqPXYAAIw3S2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzKZRq+FoAAGg9TnSUKGo9dgAAjE5mcm9tX2NsaWVudF9rZXkoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5LZXkgc3RhdGljIG1ldGhvZCmUavtaAABoPU50lChqPXYAAIxFdG9fY2xpZW50X2tleSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzLktleSBtZXRob2QplGr+WgAAaD1OdJQoaj12AACMOkVudGl0eSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcymUagFbAABoPU50lChqPXYAAIxJc2V0X3Byb3BlcnRpZXMoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5FbnRpdHkgbWV0aG9kKZRqBFsAAGg9TnSUKGo9dgAAjFRmcm9tX2NsaWVudF9lbnRpdHkoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5FbnRpdHkgc3RhdGljIG1ldGhvZCmUagdbAABoPU50lChqPXYAAIxLdG9fY2xpZW50X2VudGl0eSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzLkVudGl0eSBtZXRob2QplGoKWwAAaD1OdJRlauoDAABdlChqPXYAAIwoYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbCAobW9kdWxlKZSMJm1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFslGg9TnSUYWoYBAAAXZQoKGo9dgAAjDJhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpbyAobW9kdWxlKZSMMG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpb5RoPU50lChqPXYAAIxCUmVhZE9wZXJhdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8plGoRWwAAaD1OdJQoaj12AACMTnF1ZXJ5KCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLlJlYWRPcGVyYXRpb24gY2xhc3MgbWV0aG9kKZRqFFsAAGg9TnSUKGo9dgAAjE50YWJsZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5SZWFkT3BlcmF0aW9uIGNsYXNzIG1ldGhvZCmUahdbAABoPU50lChqPXYAAIxKY3JlYXRlX3RyYW5zYWN0aW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpbymUahpbAABoPU50lChqPXYAAIxEUmVhZEZyb21TcGFubmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpbymUah1bAABoPU50lChqPXYAAIxLZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLlJlYWRGcm9tU3Bhbm5lciBtZXRob2QplGogWwAAaD1OdJQoaj12AACMUWRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5SZWFkRnJvbVNwYW5uZXIgbWV0aG9kKZRqI1sAAGg9TnSUKGo9dgAAjENXcml0ZVRvU3Bhbm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8plGomWwAAaD1OdJQoaj12AACMUGRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5Xcml0ZVRvU3Bhbm5lciBtZXRob2QplGopWwAAaD1OdJQoaj12AACMSmV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5Xcml0ZVRvU3Bhbm5lciBtZXRob2QplGosWwAAaD1OdJQoaj12AACMQk11dGF0aW9uR3JvdXAgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvKZRqL1sAAGg9TnSUKGo9dgAAjEhpbmZvIChhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5NdXRhdGlvbkdyb3VwIGF0dHJpYnV0ZSmUajJbAABoPU50lChqPXYAAIxKcHJpbWFyeSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5NdXRhdGlvbkdyb3VwIG1ldGhvZCmUajVbAABoPU50lChqPXYAAIxCV3JpdGVNdXRhdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8plJVNAAEAAAAAAGo4WwAAaD1OdJQoaj12AACMUGluc2VydCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5Xcml0ZU11dGF0aW9uIHN0YXRpYyBtZXRob2QplGo7WwAAaD1OdJQoaj12AACMUHVwZGF0ZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZXhwZXJpbWVudGFsLnNwYW5uZXJpby5Xcml0ZU11dGF0aW9uIHN0YXRpYyBtZXRob2QplGo+WwAAaD1OdJQoaj12AACMWmluc2VydF9vcl91cGRhdGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW8uV3JpdGVNdXRhdGlvbiBzdGF0aWMgbWV0aG9kKZRqQVsAAGg9TnSUKGo9dgAAjFFyZXBsYWNlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLldyaXRlTXV0YXRpb24gc3RhdGljIG1ldGhvZCmUakRbAABoPU50lChqPXYAAIxQZGVsZXRlKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvLldyaXRlTXV0YXRpb24gc3RhdGljIG1ldGhvZCmUakdbAABoPU50lGVqhAMAAF2UKChqPXYAAIwpYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0gKG1vZHVsZSmUjCdtb2R1bGUtYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW2UaD1OdJQoaj12AACMOUdDU0ZpbGVTeXN0ZW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtKZRqTFsAAGg9TnSUKGo9dgAAjEVDSFVOS19TSVpFIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIGF0dHJpYnV0ZSmUak9bAABoPU50lChqPXYAAIxFR0NTX1BSRUZJWCAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBhdHRyaWJ1dGUplGpSWwAAaD1OdJQoaj12AACMRnNjaGVtZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIGNsYXNzIG1ldGhvZCmUalVbAABoPU50lChqPXYAAIw+am9pbigpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZCmUalhbAABoPU50lChqPXYAAIw/c3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QplGpbWwAAaD1OdJQoaj12AACMQG1rZGlycygpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZCmUal5bAABoPU50lChqPXYAAIxCaGFzX2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QplGphWwAAaD1OdJQoaj12AACMQGNyZWF0ZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZCmUamRbAABoPU50lChqPXYAAIw+b3BlbigpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZCmUamdbAABoPU50lChqPXYAAIw+Y29weSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZCmUampbAABoPU50lChqPXYAAIxAcmVuYW1lKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NmaWxlc3lzdGVtLkdDU0ZpbGVTeXN0ZW0gbWV0aG9kKZRqbVsAAGg9TnSUKGo9dgAAjEBleGlzdHMoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QplGpwWwAAaD1OdJQoaj12AACMPnNpemUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QplGpzWwAAaD1OdJQoaj12AACMRmxhc3RfdXBkYXRlZCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZCmUanZbAABoPU50lChqPXYAAIxCY2hlY2tzdW0oKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0uR0NTRmlsZVN5c3RlbSBtZXRob2QplGp5WwAAaD1OdJQoaj12AACMQGRlbGV0ZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbS5HQ1NGaWxlU3lzdGVtIG1ldGhvZCmUanxbAABoPU50lGVqkgMAAF2UKChqPXYAAIwhYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvIChtb2R1bGUplIwfbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npb5RoPU50lChqPXYAAIwpR2NzSU8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmdjcC5nY3NpbymUaoFbAABoPU50lChqPXYAAIwub3BlbigpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKZRqhFsAAGg9TnSUKGo9dgAAjDBkZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZCmUaodbAABoPU50lChqPXYAAIw2ZGVsZXRlX2JhdGNoKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2QplGqKWwAAaD1OdJQoaj12AACMLmNvcHkoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZCmUao1bAABoPU50lChqPXYAAIw0Y29weV9iYXRjaCgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKZRqkFsAAGg9TnSUKGo9dgAAjDJjb3B5dHJlZSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKZRqk1sAAGg9TnSUKGo9dgAAjDByZW5hbWUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZCmUapZbAABoPU50lChqPXYAAIwwZXhpc3RzKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2QplGqZWwAAaD1OdJQoaj12AACMMmNoZWNrc3VtKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npby5HY3NJTyBtZXRob2QplGqcWwAAaD1OdJQoaj12AACMLnNpemUoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZCmUap9bAABoPU50lChqPXYAAIwxa21zX2tleSgpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW8uR2NzSU8gbWV0aG9kKZRqolsAAGg9TnSUKGo9dgAAjDZsYXN0X3VwZGF0ZWQoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZCmUaqVbAABoPU50lChqPXYAAIw1bGlzdF9wcmVmaXgoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvLkdjc0lPIG1ldGhvZCmUaqhbAABoPU50lGVqfgMAAF2UKChqPXYAAIwrYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvX292ZXJyaWRlcyAobW9kdWxlKZSMKW1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9fb3ZlcnJpZGVzlGg9TnSUKGo9dgAAjDxHY3NJT092ZXJyaWRlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvX292ZXJyaWRlcymUaq1bAABoPU50lChqPXYAAIxNcmV0cnlfZnVuYygpIChhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9fb3ZlcnJpZGVzLkdjc0lPT3ZlcnJpZGVzIGNsYXNzIG1ldGhvZCmUarBbAABoPU50lGVq/gMAAF2UKChqPXYAAIwiYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YiAobW9kdWxlKZSMIG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AucHVic3VilGg9TnSUKGo9dgAAjDJQdWJzdWJNZXNzYWdlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViKZRqtVsAAGg9TnSUKGo9dgAAjDhkYXRhIChhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlB1YnN1Yk1lc3NhZ2UgYXR0cmlidXRlKZRquFsAAGg9TnSUKGo9dgAAjD5hdHRyaWJ1dGVzIChhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlB1YnN1Yk1lc3NhZ2UgYXR0cmlidXRlKZRqu1sAAGg9TnSUKGo9dgAAjDNSZWFkRnJvbVB1YlN1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YimUar5bAABoPU50lChqPXYAAIw6ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuUmVhZEZyb21QdWJTdWIgbWV0aG9kKZRqwVsAAGg9TnSUKGo9dgAAjEt0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViLlJlYWRGcm9tUHViU3ViIG1ldGhvZCmUasRbAABoPU50lChqPXYAAIw9UmVhZFN0cmluZ3NGcm9tUHViU3ViKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViKZRqx1sAAGg9TnSUKGo9dgAAjDxXcml0ZVN0cmluZ3NUb1B1YlN1YigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YimUaspbAABoPU50lChqPXYAAIwyV3JpdGVUb1B1YlN1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YimUas1bAABoPU50lChqPXYAAIxGdG9fcHJvdG9fc3RyKCkgKGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIuV3JpdGVUb1B1YlN1YiBzdGF0aWMgbWV0aG9kKZRq0FsAAGg9TnSUKGo9dgAAjDlleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5Xcml0ZVRvUHViU3ViIG1ldGhvZCmUatNbAABoPU50lChqPXYAAIxKdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5Xcml0ZVRvUHViU3ViIG1ldGhvZCmUatZbAABoPU50lGVqVQMAAF2UKChqPXYAAIwuYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yl9pdF9waXBlbGluZSAobW9kdWxlKZSMLG1vZHVsZS1hcGFjaGVfYmVhbS5pby5nY3AucHVic3ViX2l0X3BpcGVsaW5llGg9TnSUKGo9dgAAjEBydW5fcGlwZWxpbmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWJfaXRfcGlwZWxpbmUplGrbWwAAaD1OdJRlan0DAABdlCgoaj12AACMKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0gKG1vZHVsZSmUjCZtb2R1bGUtYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbZRoPU50lChqPXYAAIw7SGFkb29wRmlsZVN5c3RlbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbSmUauBbAABoPU50lChqPXYAAIxIc2NoZW1lKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBjbGFzcyBtZXRob2QplGrjWwAAaD1OdJQoaj12AACMQGpvaW4oKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZCmUauZbAABoPU50lChqPXYAAIxBc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZCmUaulbAABoPU50lChqPXYAAIxCbWtkaXJzKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2QplGrsWwAAaD1OdJQoaj12AACMRGhhc19kaXJzKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2QplGrvWwAAaD1OdJQoaj12AACMQmNyZWF0ZSgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKZRq8lsAAGg9TnSUKGo9dgAAjEBvcGVuKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2QplGr1WwAAaD1OdJQoaj12AACMQGNvcHkoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZCmUavhbAABoPU50lChqPXYAAIxCcmVuYW1lKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2QplGr7WwAAaD1OdJQoaj12AACMQmV4aXN0cygpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKZRq/lsAAGg9TnSUKGo9dgAAjEBzaXplKCkgKGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0uSGFkb29wRmlsZVN5c3RlbSBtZXRob2QplGoBXAAAaD1OdJQoaj12AACMSGxhc3RfdXBkYXRlZCgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKZRqBFwAAGg9TnSUKGo9dgAAjERjaGVja3N1bSgpIChhcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtLkhhZG9vcEZpbGVTeXN0ZW0gbWV0aG9kKZRqB1wAAGg9TnSUKGo9dgAAjEJkZWxldGUoKSAoYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbS5IYWRvb3BGaWxlU3lzdGVtIG1ldGhvZCmUagpcAABoPU50lGVq1QMAAF2UKChqPXYAAIweYXBhY2hlX2JlYW0uaW8uaW9iYXNlIChtb2R1bGUplIwcbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmlvYmFzZZRoPU50lChqPXYAAIwuQm91bmRlZFNvdXJjZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uaW9iYXNlKZRqD1wAAGg9TnSUKGo9dgAAjDxlc3RpbWF0ZV9zaXplKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlIG1ldGhvZCmUahJcAABoPU50lChqPXYAAIw0c3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UgbWV0aG9kKZRqFVwAAGg9TnSUKGo9dgAAjEBnZXRfcmFuZ2VfdHJhY2tlcigpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZSBtZXRob2QplGoYXAAAaD1OdJQoaj12AACMM3JlYWQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UgbWV0aG9kKZRqG1wAAGg9TnSUKGo9dgAAjENkZWZhdWx0X291dHB1dF9jb2RlcigpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZSBtZXRob2QplGoeXAAAaD1OdJQoaj12AACMOWlzX2JvdW5kZWQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UgbWV0aG9kKZRqIVwAAGg9TnSUKGo9dgAAjC1SYW5nZVRyYWNrZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSmUaiRcAABoPU50lChqPXYAAIxDU1BMSVRfUE9JTlRTX1VOS05PV04gKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIgYXR0cmlidXRlKZRqJ1wAAGg9TnSUKGo9dgAAjDxzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIG1ldGhvZCmUaipcAABoPU50lChqPXYAAIw7c3RvcF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIG1ldGhvZCmUai1cAABoPU50lChqPXYAAIw3dHJ5X2NsYWltKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXIgbWV0aG9kKZRqMFwAAGg9TnSUKGo9dgAAjEJzZXRfY3VycmVudF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIG1ldGhvZCmUajNcAABoPU50lChqPXYAAIxCcG9zaXRpb25fYXRfZnJhY3Rpb24oKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QplGo2XAAAaD1OdJQoaj12AACMN3RyeV9zcGxpdCgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIG1ldGhvZCmUajlcAABoPU50lChqPXYAAIw/ZnJhY3Rpb25fY29uc3VtZWQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QplGo8XAAAaD1OdJQoaj12AACMOnNwbGl0X3BvaW50cygpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyIG1ldGhvZCmUaj9cAABoPU50lChqPXYAAIxRc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlciBtZXRob2QplGpCXAAAaD1OdJQoaj12AACMJVNpbmsgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSmUakVcAABoPU50lChqPXYAAIw2aW5pdGlhbGl6ZV93cml0ZSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuU2luayBtZXRob2QplGpIXAAAaD1OdJQoaj12AACMMW9wZW5fd3JpdGVyKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rIG1ldGhvZCmUaktcAABoPU50lChqPXYAAIwycHJlX2ZpbmFsaXplKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5TaW5rIG1ldGhvZCmUak5cAABoPU50lChqPXYAAIw0ZmluYWxpemVfd3JpdGUoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlNpbmsgbWV0aG9kKZRqUVwAAGg9TnSUKGo9dgAAjCdXcml0ZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSmUalRcAABoPU50lChqPXYAAIwtd3JpdGUoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlciBtZXRob2QplGpXXAAAaD1OdJQoaj12AACMLWNsb3NlKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZXIgbWV0aG9kKZRqWlwAAGg9TnSUKGo9dgAAjCVSZWFkIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UplGpdXAAAaD1OdJQoaj12AACMQ2dldF9kZXNpcmVkX2NodW5rX3NpemUoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlYWQgc3RhdGljIG1ldGhvZCmUamBcAABoPU50lChqPXYAAIwsZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkIG1ldGhvZCmUamNcAABoPU50lChqPXYAAIwzZ2V0X3dpbmRvd2luZygpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVhZCBtZXRob2QplGpmXAAAaD1OdJQoaj12AACMMmRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVhZCBtZXRob2QplGppXAAAaD1OdJQoaj12AACMPXRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZWFkIG1ldGhvZCmUamxcAABoPU50lChqPXYAAIxGZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVhZCBzdGF0aWMgbWV0aG9kKZRqb1wAAGg9TnSUKGo9dgAAjCZXcml0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uaW9iYXNlKZRqclwAAGg9TnSUKGo9dgAAjDNkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldyaXRlIG1ldGhvZCmUanVcAABoPU50lChqPXYAAIwtZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Xcml0ZSBtZXRob2QplGp4XAAAaD1OdJQoaj12AACMM1Jlc3RyaWN0aW9uVHJhY2tlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8uaW9iYXNlKZRqe1wAAGg9TnSUKGo9dgAAjEdjdXJyZW50X3Jlc3RyaWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKZRqflwAAGg9TnSUKGo9dgAAjERjdXJyZW50X3Byb2dyZXNzKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKZRqgVwAAGg9TnSUKGo9dgAAjD5jaGVja19kb25lKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKZRqhFwAAGg9TnSUKGo9dgAAjD10cnlfc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QplGqHXAAAaD1OdJQoaj12AACMPXRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZCmUaopcAABoPU50lChqPXYAAIwzV2F0ZXJtYXJrRXN0aW1hdG9yIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5pb2Jhc2UplGqNXAAAaD1OdJQoaj12AACMR2dldF9lc3RpbWF0b3Jfc3RhdGUoKSAoYXBhY2hlX2JlYW0uaW8uaW9iYXNlLldhdGVybWFya0VzdGltYXRvciBtZXRob2QplGqQXAAAaD1OdJQoaj12AACMRWN1cnJlbnRfd2F0ZXJtYXJrKCkgKGFwYWNoZV9iZWFtLmlvLmlvYmFzZS5XYXRlcm1hcmtFc3RpbWF0b3IgbWV0aG9kKZRqk1wAAGg9TnSUKGo9dgAAjEVvYnNlcnZlX3RpbWVzdGFtcCgpIChhcGFjaGVfYmVhbS5pby5pb2Jhc2UuV2F0ZXJtYXJrRXN0aW1hdG9yIG1ldGhvZCmUapZcAABoPU50lGVqqgMAAF2UKChqPXYAAIwnYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtIChtb2R1bGUplIwlbW9kdWxlLWFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbZRoPU50lChqPXYAAIw5TG9jYWxGaWxlU3lzdGVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0plGqbXAAAaD1OdJQoaj12AACMRnNjaGVtZSgpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIGNsYXNzIG1ldGhvZCmUap5cAABoPU50lChqPXYAAIw+am9pbigpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZCmUaqFcAABoPU50lChqPXYAAIw/c3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QplGqkXAAAaD1OdJQoaj12AACMQG1rZGlycygpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZCmUaqdcAABoPU50lChqPXYAAIxCaGFzX2RpcnMoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QplGqqXAAAaD1OdJQoaj12AACMQGNyZWF0ZSgpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZCmUaq1cAABoPU50lChqPXYAAIw+b3BlbigpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZCmUarBcAABoPU50lChqPXYAAIw+Y29weSgpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZCmUarNcAABoPU50lChqPXYAAIxAcmVuYW1lKCkgKGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbS5Mb2NhbEZpbGVTeXN0ZW0gbWV0aG9kKZRqtlwAAGg9TnSUKGo9dgAAjEBleGlzdHMoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QplGq5XAAAaD1OdJQoaj12AACMPnNpemUoKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QplGq8XAAAaD1OdJQoaj12AACMRmxhc3RfdXBkYXRlZCgpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZCmUar9cAABoPU50lChqPXYAAIxCY2hlY2tzdW0oKSAoYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtLkxvY2FsRmlsZVN5c3RlbSBtZXRob2QplGrCXAAAaD1OdJQoaj12AACMQGRlbGV0ZSgpIChhcGFjaGVfYmVhbS5pby5sb2NhbGZpbGVzeXN0ZW0uTG9jYWxGaWxlU3lzdGVtIG1ldGhvZCmUasVcAABoPU50lGVqkwMAAF2UKChqPXYAAIwhYXBhY2hlX2JlYW0uaW8ubW9uZ29kYmlvIChtb2R1bGUplIwfbW9kdWxlLWFwYWNoZV9iZWFtLmlvLm1vbmdvZGJpb5RoPU50lChqPXYAAIwzUmVhZEZyb21Nb25nb0RCIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5tb25nb2RiaW8plGrKXAAAaD1OdJQoaj12AACMOmV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5tb25nb2RiaW8uUmVhZEZyb21Nb25nb0RCIG1ldGhvZCmUas1cAABoPU50lChqPXYAAIwyV3JpdGVUb01vbmdvREIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLm1vbmdvZGJpbymUatBcAABoPU50lChqPXYAAIw5ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLm1vbmdvZGJpby5Xcml0ZVRvTW9uZ29EQiBtZXRob2QplGrTXAAAaD1OdJRlar0DAABdlCgoaj12AACMIWFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpbyAobW9kdWxlKZSMH21vZHVsZS1hcGFjaGVfYmVhbS5pby5wYXJxdWV0aW+UaD1OdJQoaj12AACMOlJlYWRGcm9tUGFycXVldEJhdGNoZWQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpbymUathcAABoPU50lChqPXYAAIxBZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkRnJvbVBhcnF1ZXRCYXRjaGVkIG1ldGhvZCmUattcAABoPU50lChqPXYAAIxHZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkRnJvbVBhcnF1ZXRCYXRjaGVkIG1ldGhvZCmUat5cAABoPU50lChqPXYAAIwzUmVhZEZyb21QYXJxdWV0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8plGrhXAAAaD1OdJQoaj12AACMOmV4cGFuZCgpIChhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8uUmVhZEZyb21QYXJxdWV0IG1ldGhvZCmUauRcAABoPU50lChqPXYAAIxAZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkRnJvbVBhcnF1ZXQgbWV0aG9kKZRq51wAAGg9TnSUKGo9dgAAjD1SZWFkQWxsRnJvbVBhcnF1ZXRCYXRjaGVkIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5wYXJxdWV0aW8plGrqXAAAaD1OdJQoaj12AACMWkRFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRSAoYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRBbGxGcm9tUGFycXVldEJhdGNoZWQgYXR0cmlidXRlKZRq7VwAAGg9TnSUKGo9dgAAjERleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLlJlYWRBbGxGcm9tUGFycXVldEJhdGNoZWQgbWV0aG9kKZRq8FwAAGg9TnSUKGo9dgAAjDZSZWFkQWxsRnJvbVBhcnF1ZXQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpbymUavNcAABoPU50lChqPXYAAIw9ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5SZWFkQWxsRnJvbVBhcnF1ZXQgbWV0aG9kKZRq9lwAAGg9TnSUKGo9dgAAjDJXcml0ZVRvUGFycXVldCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvKZRq+VwAAGg9TnSUKGo9dgAAjDlleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvLldyaXRlVG9QYXJxdWV0IG1ldGhvZCmUavxcAABoPU50lChqPXYAAIw/ZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpby5Xcml0ZVRvUGFycXVldCBtZXRob2QplGr/XAAAaD1OdJRlahUEAABdlCgoaj12AACMJmFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzIChtb2R1bGUplIwkbW9kdWxlLWFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzlGg9TnSUKGo9dgAAjDtPZmZzZXRSYW5nZVRyYWNrZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzKZRqBF0AAGg9TnSUKGo9dgAAjExPRkZTRVRfSU5GSU5JVFkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBhdHRyaWJ1dGUplGoHXQAAaD1OdJQoaj12AACMSnN0YXJ0X3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2QplGoKXQAAaD1OdJQoaj12AACMSXN0b3BfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZCmUag1dAABoPU50lChqPXYAAIxObGFzdF9yZWNvcmRfc3RhcnQgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBhdHRyaWJ1dGUplGoQXQAAaD1OdJQoaj12AACMWGxhc3RfYXR0ZW1wdGVkX3JlY29yZF9zdGFydCAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIGF0dHJpYnV0ZSmUahNdAABoPU50lChqPXYAAIxFdHJ5X2NsYWltKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2QplGoWXQAAaD1OdJQoaj12AACMUHNldF9jdXJyZW50X3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlciBtZXRob2QplGoZXQAAaD1OdJQoaj12AACMRXRyeV9zcGxpdCgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKZRqHF0AAGg9TnSUKGo9dgAAjE1mcmFjdGlvbl9jb25zdW1lZCgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKZRqH10AAGg9TnSUKGo9dgAAjFBwb3NpdGlvbl90b19mcmFjdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKZRqIl0AAGg9TnSUKGo9dgAAjFBwb3NpdGlvbl9hdF9mcmFjdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIgbWV0aG9kKZRqJV0AAGg9TnSUKGo9dgAAjEhzcGxpdF9wb2ludHMoKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZCmUaihdAABoPU50lChqPXYAAIxfc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZCmUaitdAABoPU50lChqPXYAAIxET3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2VycymUai5dAABoPU50lChqPXYAAIxPVU5TVEFSVEVEIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgYXR0cmlidXRlKZRqMV0AAGg9TnSUKGo9dgAAjFNzdGFydF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKZRqNF0AAGg9TnSUKGo9dgAAjFJzdG9wX3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLk9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlciBtZXRob2QplGo3XQAAaD1OdJQoaj12AACMTnRyeV9jbGFpbSgpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKZRqOl0AAGg9TnSUKGo9dgAAjFlwb3NpdGlvbl9hdF9mcmFjdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5PcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIgbWV0aG9kKZRqPV0AAGg9TnSUKGo9dgAAjE50cnlfc3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIG1ldGhvZCmUakBdAABoPU50lChqPXYAAIxWZnJhY3Rpb25fY29uc3VtZWQoKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIG1ldGhvZCmUakNdAABoPU50lChqPXYAAIxZZnJhY3Rpb25fdG9fcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyIG1ldGhvZCmUakZdAABoPU50lChqPXYAAIxBVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2VycymUakldAABoPU50lChqPXYAAIxQc3RhcnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIG1ldGhvZCmUakxdAABoPU50lChqPXYAAIxPc3RvcF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKZRqT10AAGg9TnSUKGo9dgAAjFZwb3NpdGlvbl9hdF9mcmFjdGlvbigpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKZRqUl0AAGg9TnSUKGo9dgAAjEt0cnlfY2xhaW0oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyIG1ldGhvZCmUalVdAABoPU50lChqPXYAAIxLdHJ5X3NwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2QplGpYXQAAaD1OdJQoaj12AACMVnNldF9jdXJyZW50X3Bvc2l0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2QplGpbXQAAaD1OdJQoaj12AACMU2ZyYWN0aW9uX2NvbnN1bWVkKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlciBtZXRob2QplGpeXQAAaD1OdJQoaj12AACMTnNwbGl0X3BvaW50cygpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKZRqYV0AAGg9TnSUKGo9dgAAjGVzZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjaygpIChhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2Vycy5VbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIgbWV0aG9kKZRqZF0AAGg9TnSUKGo9dgAAjEVMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2VycymUamddAABoPU50lChqPXYAAIxgZnJhY3Rpb25fdG9fcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMuTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlciBjbGFzcyBtZXRob2QplGpqXQAAaD1OdJQoaj12AACMYHBvc2l0aW9uX3RvX2ZyYWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzLkxleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIgY2xhc3MgbWV0aG9kKZRqbV0AAGg9TnSUZWrGAwAAXZQoKGo9dgAAjCxhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2VycyAobW9kdWxlKZSMKm1vZHVsZS1hcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vyc5RoPU50lChqPXYAAIw6T2Zmc2V0UmFuZ2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzKZRqcl0AAGg9TnSUKGo9dgAAjEBzcGxpdCgpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSYW5nZSBtZXRob2QplGp1XQAAaD1OdJQoaj12AACMQ3NwbGl0X2F0KCkgKGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlIG1ldGhvZCmUanhdAABoPU50lChqPXYAAIxGbmV3X3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmFuZ2UgbWV0aG9kKZRqe10AAGg9TnSUKGo9dgAAjD9zaXplKCkgKGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJhbmdlIG1ldGhvZCmUan5dAABoPU50lChqPXYAAIxHT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2VycymUaoFdAABoPU50lChqPXYAAIxSY2hlY2tfZG9uZSgpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKZRqhF0AAGg9TnSUKGo9dgAAjFtjdXJyZW50X3Jlc3RyaWN0aW9uKCkgKGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QplGqHXQAAaD1OdJQoaj12AACMWGN1cnJlbnRfcHJvZ3Jlc3MoKSAoYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZCmUaopdAABoPU50lChqPXYAAIxWc3RhcnRfcG9zaXRpb24oKSAoYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZCmUao1dAABoPU50lChqPXYAAIxVc3RvcF9wb3NpdGlvbigpIChhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vycy5PZmZzZXRSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKZRqkF0AAGg9TnSUKGo9dgAAjFF0cnlfY2xhaW0oKSAoYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMuT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZCmUapNdAABoPU50lChqPXYAAIxRdHJ5X3NwbGl0KCkgKGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QplGqWXQAAaD1OdJRlajYDAABdlCgoaj12AACMKWFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzIChtb2R1bGUplIwnbW9kdWxlLWFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzlGg9TnSUKGo9dgAAjD9yZWFkX2Zyb21fc291cmNlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlscymUaptdAABoPU50lChqPXYAAIxUYXNzZXJ0X3NvdXJjZXNfZXF1YWxfcmVmZXJlbmNlX3NvdXJjZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMplGqeXQAAaD1OdJQoaj12AACMTWFzc2VydF9yZWVudHJhbnRfcmVhZHNfc3VjY2VlZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMplGqhXQAAaD1OdJQoaj12AACMUGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMplGqkXQAAaD1OdJQoaj12AACMX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9zdWNjZWVkc19hbmRfY29uc2lzdGVudCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMplGqnXQAAaD1OdJQoaj12AACMTWFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9mYWlscygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMplGqqXQAAaD1OdJQoaj12AACMTmFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzKZRqrV0AAGg9TnSUKGo9dgAAjFJhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZXhoYXVzdGl2ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHMplGqwXQAAaD1OdJRlavQDAABdlCgoaj12AACMHmFwYWNoZV9iZWFtLmlvLnRleHRpbyAobW9kdWxlKZSMHG1vZHVsZS1hcGFjaGVfYmVhbS5pby50ZXh0aW+UaD1OdJQoaj12AACMMFJlYWRBbGxGcm9tVGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udGV4dGlvKZRqtV0AAGg9TnSUKGo9dgAAjE1ERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkUgKGFwYWNoZV9iZWFtLmlvLnRleHRpby5SZWFkQWxsRnJvbVRleHQgYXR0cmlidXRlKZRquF0AAGg9TnSUKGo9dgAAjDdleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRBbGxGcm9tVGV4dCBtZXRob2QplGq7XQAAaD1OdJQoaj12AACMLVJlYWRGcm9tVGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udGV4dGlvKZRqvl0AAGg9TnSUKGo9dgAAjDRleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRGcm9tVGV4dCBtZXRob2QplGrBXQAAaD1OdJQoaj12AACMOVJlYWRGcm9tVGV4dFdpdGhGaWxlbmFtZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udGV4dGlvKZRqxF0AAGg9TnSUKGo9dgAAjCxXcml0ZVRvVGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udGV4dGlvKZRqx10AAGg9TnSUKGo9dgAAjDNleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udGV4dGlvLldyaXRlVG9UZXh0IG1ldGhvZCmUaspdAABoPU50lGVqBgQAAF2UKChqPXYAAIwiYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpbyAobW9kdWxlKZSMIG1vZHVsZS1hcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvlGg9TnSUKGo9dgAAjDVSZWFkRnJvbVRGUmVjb3JkIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvKZRqz10AAGg9TnSUKGo9dgAAjDxleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpby5SZWFkRnJvbVRGUmVjb3JkIG1ldGhvZCmUatJdAABoPU50lChqPXYAAIw0V3JpdGVUb1RGUmVjb3JkIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby50ZnJlY29yZGlvKZRq1V0AAGg9TnSUKGo9dgAAjDtleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpby5Xcml0ZVRvVEZSZWNvcmQgbWV0aG9kKZRq2F0AAGg9TnSUZWrQAwAAXZQoKGo9dgAAjB1hcGFjaGVfYmVhbS5pby51dGlscyAobW9kdWxlKZSMG21vZHVsZS1hcGFjaGVfYmVhbS5pby51dGlsc5RoPU50lChqPXYAAIwuQ291bnRpbmdTb3VyY2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnV0aWxzKZRq3V0AAGg9TnSUKGo9dgAAjDxlc3RpbWF0ZV9zaXplKCkgKGFwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNlIG1ldGhvZCmUauBdAABoPU50lChqPXYAAIxAZ2V0X3JhbmdlX3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0uaW8udXRpbHMuQ291bnRpbmdTb3VyY2UgbWV0aG9kKZRq410AAGg9TnSUKGo9dgAAjDNyZWFkKCkgKGFwYWNoZV9iZWFtLmlvLnV0aWxzLkNvdW50aW5nU291cmNlIG1ldGhvZCmUauZdAABoPU50lChqPXYAAIw0c3BsaXQoKSAoYXBhY2hlX2JlYW0uaW8udXRpbHMuQ291bnRpbmdTb3VyY2UgbWV0aG9kKZRq6V0AAGg9TnSUZWrlAwAAXZQoKGo9dgAAjB1hcGFjaGVfYmVhbS5pby52Y2ZpbyAobW9kdWxlKZSMG21vZHVsZS1hcGFjaGVfYmVhbS5pby52Y2Zpb5RoPU50lChqPXYAAIwrVmFyaWFudEluZm8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnZjZmlvKZRq7l0AAGg9TnSUKGo9dgAAjDFkYXRhIChhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mbyBhdHRyaWJ1dGUplGrxXQAAaD1OdJQoaj12AACMOGZpZWxkX2NvdW50IChhcGFjaGVfYmVhbS5pby52Y2Zpby5WYXJpYW50SW5mbyBhdHRyaWJ1dGUplGr0XQAAaD1OdJQoaj12AACMMk1hbGZvcm1lZFZjZlJlY29yZCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udmNmaW8plGr3XQAAaD1OdJQoaj12AACMPWZpbGVfbmFtZSAoYXBhY2hlX2JlYW0uaW8udmNmaW8uTWFsZm9ybWVkVmNmUmVjb3JkIGF0dHJpYnV0ZSmUavpdAABoPU50lChqPXYAAIw4bGluZSAoYXBhY2hlX2JlYW0uaW8udmNmaW8uTWFsZm9ybWVkVmNmUmVjb3JkIGF0dHJpYnV0ZSmUav1dAABoPU50lChqPXYAAIwnVmFyaWFudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8udmNmaW8plGoAXgAAaD1OdJQoaj12AACMK1ZhcmlhbnRDYWxsIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby52Y2ZpbymUagNeAABoPU50lChqPXYAAIwrUmVhZEZyb21WY2YgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLnZjZmlvKZRqBl4AAGg9TnSUKGo9dgAAjDJleHBhbmQoKSAoYXBhY2hlX2JlYW0uaW8udmNmaW8uUmVhZEZyb21WY2YgbWV0aG9kKZRqCV4AAGg9TnSUZWqVAwAAXZQoKGo9dgAAjCxhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycyAobW9kdWxlKZSMKm1vZHVsZS1hcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9yc5RoPU50lChqPXYAAIxKTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycymUag5eAABoPU50lChqPXYAAIxcb2JzZXJ2ZV90aW1lc3RhbXAoKSAoYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yIG1ldGhvZCmUahFeAABoPU50lChqPXYAAIxcY3VycmVudF93YXRlcm1hcmsoKSAoYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yIG1ldGhvZCmUahReAABoPU50lChqPXYAAIxeZ2V0X2VzdGltYXRvcl9zdGF0ZSgpIChhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5Nb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3IgbWV0aG9kKZRqF14AAGg9TnSUKGo9dgAAjGJkZWZhdWx0X3Byb3ZpZGVyKCkgKGFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLk1vbm90b25pY1dhdGVybWFya0VzdGltYXRvciBzdGF0aWMgbWV0aG9kKZRqGl4AAGg9TnSUKGo9dgAAjElXYWxsdGltZVdhdGVybWFya0VzdGltYXRvciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMplGodXgAAaD1OdJQoaj12AACMW29ic2VydmVfdGltZXN0YW1wKCkgKGFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLldhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yIG1ldGhvZCmUaiBeAABoPU50lChqPXYAAIxbY3VycmVudF93YXRlcm1hcmsoKSAoYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IgbWV0aG9kKZRqI14AAGg9TnSUKGo9dgAAjF1nZXRfZXN0aW1hdG9yX3N0YXRlKCkgKGFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLldhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yIG1ldGhvZCmUaiZeAABoPU50lChqPXYAAIxhZGVmYXVsdF9wcm92aWRlcigpIChhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5XYWxsdGltZVdhdGVybWFya0VzdGltYXRvciBzdGF0aWMgbWV0aG9kKZRqKV4AAGg9TnSUKGo9dgAAjEdNYW51YWxXYXRlcm1hcmtFc3RpbWF0b3IgKGNsYXNzIGluIGFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzKZRqLF4AAGg9TnSUKGo9dgAAjFlvYnNlcnZlX3RpbWVzdGFtcCgpIChhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5NYW51YWxXYXRlcm1hcmtFc3RpbWF0b3IgbWV0aG9kKZRqL14AAGg9TnSUKGo9dgAAjFljdXJyZW50X3dhdGVybWFyaygpIChhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5NYW51YWxXYXRlcm1hcmtFc3RpbWF0b3IgbWV0aG9kKZRqMl4AAGg9TnSUKGo9dgAAjFtnZXRfZXN0aW1hdG9yX3N0YXRlKCkgKGFwYWNoZV9iZWFtLmlvLndhdGVybWFya19lc3RpbWF0b3JzLk1hbnVhbFdhdGVybWFya0VzdGltYXRvciBtZXRob2QplGo1XgAAaD1OdJQoaj12AACMVXNldF93YXRlcm1hcmsoKSAoYXBhY2hlX2JlYW0uaW8ud2F0ZXJtYXJrX2VzdGltYXRvcnMuTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yIG1ldGhvZCmUajheAABoPU50lChqPXYAAIxfZGVmYXVsdF9wcm92aWRlcigpIChhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9ycy5NYW51YWxXYXRlcm1hcmtFc3RpbWF0b3Igc3RhdGljIG1ldGhvZCmUajteAABoPU50lGVqHAQAAF2UKGo9dgAAjBxhcGFjaGVfYmVhbS5tZXRyaWNzIChtb2R1bGUplIwabW9kdWxlLWFwYWNoZV9iZWFtLm1ldHJpY3OUaD1OdJRhajcDAABdlCgoaj12AACMImFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMgKG1vZHVsZSmUjCBtb2R1bGUtYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxsc5RoPU50lChqPXYAAIw3RGlzdHJpYnV0aW9uUmVzdWx0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzKZRqQl4AAGg9TnSUKGo9dgAAjDxtYXggKGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMuRGlzdHJpYnV0aW9uUmVzdWx0IGF0dHJpYnV0ZSmUakVeAABoPU50lChqPXYAAIw8bWluIChhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdCBhdHRyaWJ1dGUplGpIXgAAaD1OdJQoaj12AACMPmNvdW50IChhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdCBhdHRyaWJ1dGUplGpLXgAAaD1OdJQoaj12AACMPHN1bSAoYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5EaXN0cmlidXRpb25SZXN1bHQgYXR0cmlidXRlKZRqTl4AAGg9TnSUKGo9dgAAjD1tZWFuIChhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzLkRpc3RyaWJ1dGlvblJlc3VsdCBhdHRyaWJ1dGUplGpRXgAAaD1OdJQoaj12AACMMEdhdWdlUmVzdWx0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzKZRqVF4AAGg9TnSUKGo9dgAAjDd2YWx1ZSAoYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5HYXVnZVJlc3VsdCBhdHRyaWJ1dGUplGpXXgAAaD1OdJQoaj12AACMO3RpbWVzdGFtcCAoYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscy5HYXVnZVJlc3VsdCBhdHRyaWJ1dGUplGpaXgAAaD1OdJRlagkEAABdlCgoaj12AACMI2FwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljIChtb2R1bGUplIwhbW9kdWxlLWFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljlGg9TnSUKGo9dgAAjC1NZXRyaWNzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYymUal9eAABoPU50lChqPXYAAIxCZ2V0X25hbWVzcGFjZSgpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzIHN0YXRpYyBtZXRob2QplGpiXgAAaD1OdJQoaj12AACMPGNvdW50ZXIoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcyBzdGF0aWMgbWV0aG9kKZRqZV4AAGg9TnSUKGo9dgAAjEFkaXN0cmlidXRpb24oKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljcyBzdGF0aWMgbWV0aG9kKZRqaF4AAGg9TnSUKGo9dgAAjDpnYXVnZSgpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzIHN0YXRpYyBtZXRob2QplGprXgAAaD1OdJQoaj12AACMP01ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljKZRqbl4AAGg9TnSUKGo9dgAAjERNZXRyaWNzLkRlbGVnYXRpbmdEaXN0cmlidXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljKZRqcV4AAGg9TnSUKGo9dgAAjD1NZXRyaWNzLkRlbGVnYXRpbmdHYXVnZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMplGp0XgAAaD1OdJQoaj12AACMM01ldHJpY3NGaWx0ZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljKZRqd14AAGg9TnSUKGo9dgAAjDpzdGVwcyAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlciBhdHRyaWJ1dGUplGp6XgAAaD1OdJQoaj12AACMOm5hbWVzIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIGF0dHJpYnV0ZSmUan1eAABoPU50lChqPXYAAIw/bmFtZXNwYWNlcyAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlciBhdHRyaWJ1dGUplGqAXgAAaD1OdJQoaj12AACMPXdpdGhfbmFtZSgpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIG1ldGhvZCmUaoNeAABoPU50lChqPXYAAIw+d2l0aF9uYW1lcygpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIG1ldGhvZCmUaoZeAABoPU50lChqPXYAAIxCd2l0aF9uYW1lc3BhY2UoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMuTWV0cmljc0ZpbHRlciBtZXRob2QplGqJXgAAaD1OdJQoaj12AACMQ3dpdGhfbmFtZXNwYWNlcygpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNzRmlsdGVyIG1ldGhvZCmUaoxeAABoPU50lChqPXYAAIw9d2l0aF9zdGVwKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgbWV0aG9kKZRqj14AAGg9TnSUKGo9dgAAjD53aXRoX3N0ZXBzKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljLk1ldHJpY3NGaWx0ZXIgbWV0aG9kKZRqkl4AAGg9TnSUZWr/AwAAXZQoKGo9dgAAjCdhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UgKG1vZHVsZSmUjCVtb2R1bGUtYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNllGg9TnSUKGo9dgAAjDRNZXRyaWNOYW1lIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UplGqXXgAAaD1OdJQoaj12AACMQnRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLk1ldHJpY05hbWUgbWV0aG9kKZRqml4AAGg9TnSUKGo9dgAAjEtmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlLk1ldHJpY05hbWUgc3RhdGljIG1ldGhvZCmUap1eAABoPU50lChqPXYAAIwwTWV0cmljIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UplGqgXgAAaD1OdJQoaj12AACMMUNvdW50ZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSmUaqNeAABoPU50lChqPXYAAIw1aW5jKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5Db3VudGVyIG1ldGhvZCmUaqZeAABoPU50lChqPXYAAIw1ZGVjKCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5Db3VudGVyIG1ldGhvZCmUaqleAABoPU50lChqPXYAAIw2RGlzdHJpYnV0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UplGqsXgAAaD1OdJQoaj12AACMPXVwZGF0ZSgpIChhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpY2Jhc2UuRGlzdHJpYnV0aW9uIG1ldGhvZCmUaq9eAABoPU50lChqPXYAAIwvR2F1Z2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSmUarJeAABoPU50lChqPXYAAIwzc2V0KCkgKGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZS5HYXVnZSBtZXRob2QplGq1XgAAaD1OdJRlarUDAABdlCgoaj12AACMLWFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcyAobW9kdWxlKZSMK21vZHVsZS1hcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3OUaD1OdJQoaj12AACMRXRvX3RpbWVzdGFtcF9wcm90bygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKZRqul4AAGg9TnSUKGo9dgAAjER0b190aW1lc3RhbXBfc2VjcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKZRqvV4AAGg9TnSUKGo9dgAAjEhleHRyYWN0X2NvdW50ZXJfdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcymUasBeAABoPU50lChqPXYAAIxHZXh0cmFjdF9kaXN0cmlidXRpb24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcymUasNeAABoPU50lChqPXYAAIxAY3JlYXRlX2xhYmVscygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKZRqxl4AAGg9TnSUKGo9dgAAjEVpbnQ2NF91c2VyX2NvdW50ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcymUasleAABoPU50lChqPXYAAIxAaW50NjRfY291bnRlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKZRqzF4AAGg9TnSUKGo9dgAAjEppbnQ2NF91c2VyX2Rpc3RyaWJ1dGlvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKZRqz14AAGg9TnSUKGo9dgAAjEVpbnQ2NF9kaXN0cmlidXRpb24oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcymUatJeAABoPU50lChqPXYAAIxDaW50NjRfdXNlcl9nYXVnZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKZRq1V4AAGg9TnSUKGo9dgAAjD5pbnQ2NF9nYXVnZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKZRq2F4AAGg9TnSUKGo9dgAAjEljcmVhdGVfbW9uaXRvcmluZ19pbmZvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MplGrbXgAAaD1OdJQoaj12AACMPWlzX2NvdW50ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcymUat5eAABoPU50lChqPXYAAIxCaXNfZGlzdHJpYnV0aW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MplGrhXgAAaD1OdJQoaj12AACMO2lzX2dhdWdlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MplGrkXgAAaD1OdJQoaj12AACMSmlzX3VzZXJfbW9uaXRvcmluZ19pbmZvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MplGrnXgAAaD1OdJQoaj12AACMUmV4dHJhY3RfbWV0cmljX3Jlc3VsdF9tYXBfdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcymUaupeAABoPU50lChqPXYAAIxLcGFyc2VfbmFtZXNwYWNlX2FuZF9uYW1lKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MplGrtXgAAaD1OdJQoaj12AACMQGdldF9zdGVwX25hbWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm1ldHJpY3MubW9uaXRvcmluZ19pbmZvcymUavBeAABoPU50lChqPXYAAIw5dG9fa2V5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MplGrzXgAAaD1OdJQoaj12AACMSGRpc3RyaWJ1dGlvbl9jb21iaW5lcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zKZRq9l4AAGg9TnSUKGo9dgAAjEBtYXhfdGltZXN0YW1wKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MplGr5XgAAaD1OdJQoaj12AACMPmNvbnNvbGlkYXRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3MplGr8XgAAaD1OdJRlaooDAABdlChqPXYAAIwXYXBhY2hlX2JlYW0ubWwgKG1vZHVsZSmUjBVtb2R1bGUtYXBhY2hlX2JlYW0ubWyUaD1OdJRhaloDAABdlChqPXYAAIwbYXBhY2hlX2JlYW0ubWwuZ2NwIChtb2R1bGUplIwZbW9kdWxlLWFwYWNoZV9iZWFtLm1sLmdjcJRoPU50lGFqTgMAAF2UKChqPXYAAIwlYXBhY2hlX2JlYW0ubWwuZ2NwLmNsb3VkX2RscCAobW9kdWxlKZSMI21vZHVsZS1hcGFjaGVfYmVhbS5tbC5nY3AuY2xvdWRfZGxwlGg9TnSUKGo9dgAAjDtNYXNrRGV0ZWN0ZWREZXRhaWxzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tbC5nY3AuY2xvdWRfZGxwKZRqBV8AAGg9TnSUKGo9dgAAjEJleHBhbmQoKSAoYXBhY2hlX2JlYW0ubWwuZ2NwLmNsb3VkX2RscC5NYXNrRGV0ZWN0ZWREZXRhaWxzIG1ldGhvZCmUaghfAABoPU50lChqPXYAAIw5SW5zcGVjdEZvckRldGFpbHMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1sLmdjcC5jbG91ZF9kbHAplGoLXwAAaD1OdJQoaj12AACMQGV4cGFuZCgpIChhcGFjaGVfYmVhbS5tbC5nY3AuY2xvdWRfZGxwLkluc3BlY3RGb3JEZXRhaWxzIG1ldGhvZCmUag5fAABoPU50lGVqowMAAF2UKChqPXYAAIwtYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sIChtb2R1bGUplIwrbW9kdWxlLWFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbJRoPU50lChqPXYAAIw4RG9jdW1lbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbCmUahNfAABoPU50lChqPXYAAIxHdG9fZGljdCgpIChhcGFjaGVfYmVhbS5tbC5nY3AubmF0dXJhbGxhbmd1YWdlbWwuRG9jdW1lbnQgc3RhdGljIG1ldGhvZCmUahZfAABoPU50lChqPXYAAIw/QW5ub3RhdGVUZXh0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tbC5nY3AubmF0dXJhbGxhbmd1YWdlbWwplGoZXwAAaD1OdJRlaoMDAABdlCgoaj12AACMNWFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbF90ZXN0X2l0IChtb2R1bGUplIwzbW9kdWxlLWFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbF90ZXN0X2l0lGg9TnSUKGo9dgAAjEJleHRyYWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5tbC5nY3AubmF0dXJhbGxhbmd1YWdlbWxfdGVzdF9pdCmUah5fAABoPU50lChqPXYAAIxPTmF0dXJhbExhbmd1YWdlTWxUZXN0SVQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbF90ZXN0X2l0KZRqIV8AAGg9TnSUKGo9dgAAjGV0ZXN0X2FuYWx5emluZ19zeW50YXgoKSAoYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sX3Rlc3RfaXQuTmF0dXJhbExhbmd1YWdlTWxUZXN0SVQgbWV0aG9kKZRqJF8AAGg9TnSUKGo9dgAAjFNJVCAoYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sX3Rlc3RfaXQuTmF0dXJhbExhbmd1YWdlTWxUZXN0SVQgYXR0cmlidXRlKZRqJ18AAGg9TnSUZWqcAwAAXZQoKGo9dgAAjC9hcGFjaGVfYmVhbS5tbC5nY3AudmlkZW9pbnRlbGxpZ2VuY2VtbCAobW9kdWxlKZSMLW1vZHVsZS1hcGFjaGVfYmVhbS5tbC5nY3AudmlkZW9pbnRlbGxpZ2VuY2VtbJRoPU50lChqPXYAAIw/QW5ub3RhdGVWaWRlbyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ubWwuZ2NwLnZpZGVvaW50ZWxsaWdlbmNlbWwplGosXwAAaD1OdJQoaj12AACMRmV4cGFuZCgpIChhcGFjaGVfYmVhbS5tbC5nY3AudmlkZW9pbnRlbGxpZ2VuY2VtbC5Bbm5vdGF0ZVZpZGVvIG1ldGhvZCmUai9fAABoPU50lChqPXYAAIxKQW5ub3RhdGVWaWRlb1dpdGhDb250ZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tbC5nY3AudmlkZW9pbnRlbGxpZ2VuY2VtbCmUajJfAABoPU50lChqPXYAAIxRZXhwYW5kKCkgKGFwYWNoZV9iZWFtLm1sLmdjcC52aWRlb2ludGVsbGlnZW5jZW1sLkFubm90YXRlVmlkZW9XaXRoQ29udGV4dCBtZXRob2QplGo1XwAAaD1OdJRlaj8DAABdlCgoaj12AACMJGFwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbCAobW9kdWxlKZSMIm1vZHVsZS1hcGFjaGVfYmVhbS5tbC5nY3AudmlzaW9ubWyUaD1OdJQoaj12AACMNEFubm90YXRlSW1hZ2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbCmUajpfAABoPU50lChqPXYAAIxETUFYX0JBVENIX1NJWkUgKGFwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbC5Bbm5vdGF0ZUltYWdlIGF0dHJpYnV0ZSmUaj1fAABoPU50lChqPXYAAIxETUlOX0JBVENIX1NJWkUgKGFwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbC5Bbm5vdGF0ZUltYWdlIGF0dHJpYnV0ZSmUakBfAABoPU50lChqPXYAAIw7ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbC5Bbm5vdGF0ZUltYWdlIG1ldGhvZCmUakNfAABoPU50lChqPXYAAIw/QW5ub3RhdGVJbWFnZVdpdGhDb250ZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5tbC5nY3AudmlzaW9ubWwplGpGXwAAaD1OdJQoaj12AACMRmV4cGFuZCgpIChhcGFjaGVfYmVhbS5tbC5nY3AudmlzaW9ubWwuQW5ub3RhdGVJbWFnZVdpdGhDb250ZXh0IG1ldGhvZCmUaklfAABoPU50lGVqNQMAAF2UKGo9dgAAjBxhcGFjaGVfYmVhbS5vcHRpb25zIChtb2R1bGUplIwabW9kdWxlLWFwYWNoZV9iZWFtLm9wdGlvbnOUaD1OdJRhalMDAABdlCgoaj12AACMLWFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyAobW9kdWxlKZSMK21vZHVsZS1hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnOUaD1OdJQoaj12AACMP1BpcGVsaW5lT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKZRqUF8AAGg9TnSUKGo9dgAAjFVmcm9tX2RpY3Rpb25hcnkoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucyBjbGFzcyBtZXRob2QplGpTXwAAaD1OdJQoaj12AACMT2dldF9hbGxfb3B0aW9ucygpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zIG1ldGhvZCmUalZfAABoPU50lChqPXYAAIxMZGlzcGxheV9kYXRhKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMgbWV0aG9kKZRqWV8AAGg9TnSUKGo9dgAAjEd2aWV3X2FzKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnMgbWV0aG9kKZRqXF8AAGg9TnSUKGo9dgAAjD9TdGFuZGFyZE9wdGlvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucymUal9fAABoPU50lChqPXYAAIxPREVGQVVMVF9SVU5ORVIgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5TdGFuZGFyZE9wdGlvbnMgYXR0cmlidXRlKZRqYl8AAGg9TnSUKGo9dgAAjDtUeXBlT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKZRqZV8AAGg9TnSUKGo9dgAAjD1EaXJlY3RPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMplGpoXwAAaD1OdJQoaj12AACMQkdvb2dsZUNsb3VkT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKZRqa18AAGg9TnSUKGo9dgAAjFhCSUdRVUVSWV9BUElfU0VSVklDRSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkdvb2dsZUNsb3VkT3B0aW9ucyBhdHRyaWJ1dGUplGpuXwAAaD1OdJQoaj12AACMV0NPTVBVVEVfQVBJX1NFUlZJQ0UgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMgYXR0cmlidXRlKZRqcV8AAGg9TnSUKGo9dgAAjFdTVE9SQUdFX0FQSV9TRVJWSUNFIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zIGF0dHJpYnV0ZSmUanRfAABoPU50lChqPXYAAIxVREFUQUZMT1dfRU5EUE9JTlQgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5Hb29nbGVDbG91ZE9wdGlvbnMgYXR0cmlidXRlKZRqd18AAGg9TnSUKGo9dgAAjEt2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuR29vZ2xlQ2xvdWRPcHRpb25zIG1ldGhvZCmUanpfAABoPU50lChqPXYAAIxHSGFkb29wRmlsZVN5c3RlbU9wdGlvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucymUan1fAABoPU50lChqPXYAAIxQdmFsaWRhdGUoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zIG1ldGhvZCmUaoBfAABoPU50lChqPXYAAIw9V29ya2VyT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKZRqg18AAGg9TnSUKGo9dgAAjEZ2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuV29ya2VyT3B0aW9ucyBtZXRob2QplGqGXwAAaD1OdJQoaj12AACMPERlYnVnT3B0aW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zKZRqiV8AAGg9TnSUKGo9dgAAjEthZGRfZXhwZXJpbWVudCgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuRGVidWdPcHRpb25zIG1ldGhvZCmUaoxfAABoPU50lChqPXYAAIxObG9va3VwX2V4cGVyaW1lbnQoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkRlYnVnT3B0aW9ucyBtZXRob2QplGqPXwAAaD1OdJQoaj12AACMQFByb2ZpbGluZ09wdGlvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucymUapJfAABoPU50lChqPXYAAIw8U2V0dXBPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMplGqVXwAAaD1OdJQoaj12AACMO1Rlc3RPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMplGqYXwAAaD1OdJQoaj12AACMRHZhbGlkYXRlKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5UZXN0T3B0aW9ucyBtZXRob2QplGqbXwAAaD1OdJRlamYDAABdlCgoaj12AACMN2FwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IgKG1vZHVsZSmUjDVtb2R1bGUtYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvcpRoPU50lChqPXYAAIxSUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yKZRqoF8AAGg9TnSUKGo9dgAAjFtPUFRJT05TIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUplGqjXwAAaD1OdJQoaj12AACMZkVSUl9NSVNTSU5HX09QVElPTiAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKZRqpl8AAGg9TnSUKGo9dgAAjGhFUlJfTUlTU0lOR19HQ1NfUEFUSCAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKZRqqV8AAGg9TnSUKGo9dgAAjGhFUlJfSU5WQUxJRF9HQ1NfUEFUSCAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKZRqrF8AAGg9TnSUKGo9dgAAjGpFUlJfSU5WQUxJRF9HQ1NfQlVDS0VUIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUplGqvXwAAaD1OdJQoaj12AACMakVSUl9JTlZBTElEX0dDU19PQkpFQ1QgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUarJfAABoPU50lChqPXYAAIxoRVJSX0lOVkFMSURfSk9CX05BTUUgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUarVfAABoPU50lChqPXYAAIxuRVJSX0lOVkFMSURfUFJPSkVDVF9OVU1CRVIgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUarhfAABoPU50lChqPXYAAIxqRVJSX0lOVkFMSURfUFJPSkVDVF9JRCAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKZRqu18AAGg9TnSUKGo9dgAAjGxFUlJfSU5WQUxJRF9OT1RfUE9TSVRJVkUgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUar5fAABoPU50lChqPXYAAIxxRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1RZUEUgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUasFfAABoPU50lChqPXYAAIx4RVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1VOUElDS0xBQkxFIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUplGrEXwAAaD1OdJQoaj12AACMdkVSUl9JTlZBTElEX1RSQU5TRk9STV9OQU1FX01BUFBJTkcgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUasdfAABoPU50lChqPXYAAIxbR0NTX1VSSSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKZRqyl8AAGg9TnSUKGo9dgAAjF5HQ1NfQlVDS0VUIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUplGrNXwAAaD1OdJQoaj12AACMXkdDU19TQ0hFTUUgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUatBfAABoPU50lChqPXYAAIxfSk9CX1BBVFRFUk4gKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUatNfAABoPU50lChqPXYAAIxmUFJPSkVDVF9JRF9QQVRURVJOIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBhdHRyaWJ1dGUplGrWXwAAaD1OdJQoaj12AACMalBST0pFQ1RfTlVNQkVSX1BBVFRFUk4gKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIGF0dHJpYnV0ZSmUatlfAABoPU50lChqPXYAAIxkRU5EUE9JTlRfUEFUVEVSTiAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgYXR0cmlidXRlKZRq3F8AAGg9TnSUKGo9dgAAjFt2YWxpZGF0ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2QplGrfXwAAaD1OdJQoaj12AACMZGlzX3NlcnZpY2VfcnVubmVyKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3IuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yIG1ldGhvZCmUauJfAABoPU50lChqPXYAAIxnaXNfZnVsbF9zdHJpbmdfbWF0Y2goKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgbWV0aG9kKZRq5V8AAGg9TnSUKGo9dgAAjGR2YWxpZGF0ZV9nY3NfcGF0aCgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2QplGroXwAAaD1OdJQoaj12AACMaXZhbGlkYXRlX2Nsb3VkX29wdGlvbnMoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgbWV0aG9kKZRq618AAGg9TnSUKGo9dgAAjG52YWxpZGF0ZV93b3JrZXJfcmVnaW9uX3pvbmUoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zX3ZhbGlkYXRvci5QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IgbWV0aG9kKZRq7l8AAGg9TnSUKGo9dgAAjHZ2YWxpZGF0ZV9vcHRpb25hbF9hcmd1bWVudF9wb3NpdGl2ZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2QplGrxXwAAaD1OdJQoaj12AACMaHZhbGlkYXRlX3Rlc3RfbWF0Y2hlcigpIChhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvciBtZXRob2QplGr0XwAAaD1OdJRlaskDAABdlCgoaj12AACMK2FwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgKG1vZHVsZSmUjCltb2R1bGUtYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcpRoPU50lChqPXYAAIw7VmFsdWVQcm92aWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcimUavlfAABoPU50lChqPXYAAIxJaXNfYWNjZXNzaWJsZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXIgbWV0aG9kKZRq/F8AAGg9TnSUKGo9dgAAjD9nZXQoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5WYWx1ZVByb3ZpZGVyIG1ldGhvZCmUav9fAABoPU50lChqPXYAAIxBU3RhdGljVmFsdWVQcm92aWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlcimUagJgAABoPU50lChqPXYAAIxPaXNfYWNjZXNzaWJsZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlN0YXRpY1ZhbHVlUHJvdmlkZXIgbWV0aG9kKZRqBWAAAGg9TnSUKGo9dgAAjEVnZXQoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5TdGF0aWNWYWx1ZVByb3ZpZGVyIG1ldGhvZCmUaghgAABoPU50lChqPXYAAIxCUnVudGltZVZhbHVlUHJvdmlkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIplGoLYAAAaD1OdJQoaj12AACMU3J1bnRpbWVfb3B0aW9ucyAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlciBhdHRyaWJ1dGUplGoOYAAAaD1OdJQoaj12AACMT2V4cGVyaW1lbnRzIChhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyIGF0dHJpYnV0ZSmUahFgAABoPU50lChqPXYAAIxQaXNfYWNjZXNzaWJsZSgpIChhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyIG1ldGhvZCmUahRgAABoPU50lChqPXYAAIxSZ2V0X3ZhbHVlKCkgKGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuUnVudGltZVZhbHVlUHJvdmlkZXIgY2xhc3MgbWV0aG9kKZRqF2AAAGg9TnSUKGo9dgAAjEZnZXQoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlciBtZXRob2QplGoaYAAAaD1OdJQoaj12AACMXHNldF9ydW50aW1lX29wdGlvbnMoKSAoYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlci5SdW50aW1lVmFsdWVQcm92aWRlciBjbGFzcyBtZXRob2QplGodYAAAaD1OdJQoaj12AACMQWNoZWNrX2FjY2Vzc2libGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIplGogYAAAaD1OdJRlajgDAABdlCgoaj12AACMHWFwYWNoZV9iZWFtLnBpcGVsaW5lIChtb2R1bGUplIwbbW9kdWxlLWFwYWNoZV9iZWFtLnBpcGVsaW5llGg9TnSUKGo9dgAAjChQaXBlbGluZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucGlwZWxpbmUplGolYAAAaD1OdJQoaj12AACMTnNka190cmFuc2Zvcm1zX3dpdGhfZW52aXJvbm1lbnQoKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUgY2xhc3MgbWV0aG9kKZRqKGAAAGg9TnSUKGo9dgAAjDFvcHRpb25zIChhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZSBhdHRyaWJ1dGUplGorYAAAaD1OdJQoaj12AACMNHJlcGxhY2VfYWxsKCkgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lIG1ldGhvZCmUai5gAABoPU50lChqPXYAAIwscnVuKCkgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lIG1ldGhvZCmUajFgAABoPU50lChqPXYAAIwudmlzaXQoKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUgbWV0aG9kKZRqNGAAAGg9TnSUKGo9dgAAjC5hcHBseSgpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZSBtZXRob2QplGo3YAAAaD1OdJQoaj12AACMNnRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUgbWV0aG9kKZRqOmAAAGg9TnSUKGo9dgAAjD9mcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmUgc3RhdGljIG1ldGhvZCmUaj1gAABoPU50lChqPXYAAIwyUFRyYW5zZm9ybU92ZXJyaWRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5waXBlbGluZSmUakBgAABoPU50lChqPXYAAIw6bWF0Y2hlcygpIChhcGFjaGVfYmVhbS5waXBlbGluZS5QVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKZRqQ2AAAGg9TnSUKGo9dgAAjExnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnBpcGVsaW5lLlBUcmFuc2Zvcm1PdmVycmlkZSBtZXRob2QplGpGYAAAaD1OdJRlakgDAABdlChqPXYAAIwgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgKG1vZHVsZSmUjB5tb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHmUaD1OdJRhaqgDAABdlChqPXYAAIwkYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIChtb2R1bGUplIwibW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaZRoPU50lGFq1wMAAF2UKChqPXYAAIw/YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjIChtb2R1bGUplIw9bW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwY5RoPU50lChqPXYAAIxcQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYymUak9gAABoPU50lChqPXYAAIxgQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMplGpSYAAAaD1OdJQoaj12AACMbFB1dEFydGlmYWN0KCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYy5BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIgbWV0aG9kKZRqVWAAAGg9TnSUKGo9dgAAjG9Db21taXRNYW5pZmVzdCgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyIG1ldGhvZCmUalhgAABoPU50lChqPXYAAIxxYWRkX0FydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfZ3JwYymUaltgAABoPU50lChqPXYAAIxeQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjKZRqXmAAAGg9TnSUKGo9dgAAjGJBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjKZRqYWAAAGg9TnSUKGo9dgAAjG5HZXRNYW5pZmVzdCgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIgbWV0aG9kKZRqZGAAAGg9TnSUKGo9dgAAjG5HZXRBcnRpZmFjdCgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMuQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIgbWV0aG9kKZRqZ2AAAGg9TnSUKGo9dgAAjHNhZGRfQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGMplGpqYAAAaD1OdJRlakADAABdlCgoaj12AACMP2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfdXJucyAobW9kdWxlKZSMPW1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX3VybnOUaD1OdJQoaj12AACMWENvbW1pdE1hbmlmZXN0UmVzcG9uc2UgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfdXJucymUam9gAABoPU50lChqPXYAAIxiQ29tbWl0TWFuaWZlc3RSZXNwb25zZS5Db25zdGFudHMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2FydGlmYWN0X2FwaV9wYjJfdXJucymUanJgAABoPU50lChqPXYAAIx9Tk9fQVJUSUZBQ1RTX1NUQUdFRF9UT0tFTiAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl91cm5zLkNvbW1pdE1hbmlmZXN0UmVzcG9uc2UuQ29uc3RhbnRzIGF0dHJpYnV0ZSmUanVgAABoPU50lGVqZwMAAF2UKChqPXYAAIxAYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZXhwYW5zaW9uX2FwaV9wYjJfZ3JwYyAobW9kdWxlKZSMPm1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjlGg9TnSUKGo9dgAAjFdFeHBhbnNpb25TZXJ2aWNlU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZXhwYW5zaW9uX2FwaV9wYjJfZ3JwYymUanpgAABoPU50lChqPXYAAIxbRXhwYW5zaW9uU2VydmljZVNlcnZpY2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjKZRqfWAAAGg9TnSUKGo9dgAAjGJFeHBhbmQoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZXhwYW5zaW9uX2FwaV9wYjJfZ3JwYy5FeHBhbnNpb25TZXJ2aWNlU2VydmljZXIgbWV0aG9kKZRqgGAAAGg9TnSUKGo9dgAAjGxhZGRfRXhwYW5zaW9uU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZXhwYW5zaW9uX2FwaV9wYjJfZ3JwYymUaoNgAABoPU50lGVqwgMAAF2UKChqPXYAAIw5YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjIChtb2R1bGUplIw3bW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwY5RoPU50lChqPXYAAIxNQmVhbUZuQ29udHJvbFN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYymUaohgAABoPU50lChqPXYAAIxRQmVhbUZuQ29udHJvbFNlcnZpY2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMplGqLYAAAaD1OdJQoaj12AACMWUNvbnRyb2woKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbkNvbnRyb2xTZXJ2aWNlciBtZXRob2QplGqOYAAAaD1OdJQoaj12AACMYmFkZF9CZWFtRm5Db250cm9sU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMplGqRYAAAaD1OdJQoaj12AACMSkJlYW1GbkRhdGFTdHViIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMplGqUYAAAaD1OdJQoaj12AACMTkJlYW1GbkRhdGFTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRql2AAAGg9TnSUKGo9dgAAjFNEYXRhKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5EYXRhU2VydmljZXIgbWV0aG9kKZRqmmAAAGg9TnSUKGo9dgAAjF9hZGRfQmVhbUZuRGF0YVNlcnZpY2VyX3RvX3NlcnZlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRqnWAAAGg9TnSUKGo9dgAAjEtCZWFtRm5TdGF0ZVN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYymUaqBgAABoPU50lChqPXYAAIxPQmVhbUZuU3RhdGVTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRqo2AAAGg9TnSUKGo9dgAAjFVTdGF0ZSgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuU3RhdGVTZXJ2aWNlciBtZXRob2QplGqmYAAAaD1OdJQoaj12AACMYGFkZF9CZWFtRm5TdGF0ZVNlcnZpY2VyX3RvX3NlcnZlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRqqWAAAGg9TnSUKGo9dgAAjE1CZWFtRm5Mb2dnaW5nU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRqrGAAAGg9TnSUKGo9dgAAjFFCZWFtRm5Mb2dnaW5nU2VydmljZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYymUaq9gAABoPU50lChqPXYAAIxZTG9nZ2luZygpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuTG9nZ2luZ1NlcnZpY2VyIG1ldGhvZCmUarJgAABoPU50lChqPXYAAIxiYWRkX0JlYW1GbkxvZ2dpbmdTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYymUarVgAABoPU50lChqPXYAAIxYQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRquGAAAGg9TnSUKGo9dgAAjFxCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRqu2AAAGg9TnSUKGo9dgAAjGhTdGFydFdvcmtlcigpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGMuQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU2VydmljZXIgbWV0aG9kKZRqvmAAAGg9TnSUKGo9dgAAjGdTdG9wV29ya2VyKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYy5CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlciBtZXRob2QplGrBYAAAaD1OdJQoaj12AACMbWFkZF9CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ZuX2FwaV9wYjJfZ3JwYymUasRgAABoPU50lChqPXYAAIxSQmVhbUZuV29ya2VyU3RhdHVzU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRqx2AAAGg9TnSUKGo9dgAAjFZCZWFtRm5Xb3JrZXJTdGF0dXNTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRqymAAAGg9TnSUKGo9dgAAjGNXb3JrZXJTdGF0dXMoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjLkJlYW1GbldvcmtlclN0YXR1c1NlcnZpY2VyIG1ldGhvZCmUas1gAABoPU50lChqPXYAAIxnYWRkX0JlYW1GbldvcmtlclN0YXR1c1NlcnZpY2VyX3RvX3NlcnZlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fZm5fYXBpX3BiMl9ncnBjKZRq0GAAAGg9TnSUZWqzAwAAXZQoaj12AACMQmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2ludGVyYWN0aXZlX2FwaV9wYjJfZ3JwYyAobW9kdWxlKZSMQG1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9pbnRlcmFjdGl2ZV9hcGlfcGIyX2dycGOUaD1OdJRhauwDAABdlCgoaj12AACMOmFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMgKG1vZHVsZSmUjDhtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwY5RoPU50lChqPXYAAIxLSm9iU2VydmljZVN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMplGrXYAAAaD1OdJQoaj12AACMT0pvYlNlcnZpY2VTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYymUatpgAABoPU50lChqPXYAAIxXUHJlcGFyZSgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2QplGrdYAAAaD1OdJQoaj12AACMU1J1bigpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2QplGrgYAAAaD1OdJQoaj12AACMV0dldEpvYnMoKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIgbWV0aG9kKZRq42AAAGg9TnSUKGo9dgAAjFhHZXRTdGF0ZSgpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2QplGrmYAAAaD1OdJQoaj12AACMW0dldFBpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyIG1ldGhvZCmUaulgAABoPU50lChqPXYAAIxWQ2FuY2VsKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyIG1ldGhvZCmUauxgAABoPU50lChqPXYAAIxeR2V0U3RhdGVTdHJlYW0oKSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwYy5Kb2JTZXJ2aWNlU2VydmljZXIgbWV0aG9kKZRq72AAAGg9TnSUKGo9dgAAjGBHZXRNZXNzYWdlU3RyZWFtKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyIG1ldGhvZCmUavJgAABoPU50lChqPXYAAIxdR2V0Sm9iTWV0cmljcygpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9qb2JfYXBpX3BiMl9ncnBjLkpvYlNlcnZpY2VTZXJ2aWNlciBtZXRob2QplGr1YAAAaD1OdJQoaj12AACMZ0Rlc2NyaWJlUGlwZWxpbmVPcHRpb25zKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVNlcnZpY2VyIG1ldGhvZCmUavhgAABoPU50lChqPXYAAIxgYWRkX0pvYlNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGMplGr7YAAAaD1OdJRlagcEAABdlCgoaj12AACMQGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMgKG1vZHVsZSmUjD5tb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY5RoPU50lChqPXYAAIxXUHJvdmlzaW9uU2VydmljZVN0dWIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3Byb3Zpc2lvbl9hcGlfcGIyX2dycGMplGoAYQAAaD1OdJQoaj12AACMW1Byb3Zpc2lvblNlcnZpY2VTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwYymUagNhAABoPU50lChqPXYAAIxsR2V0UHJvdmlzaW9uSW5mbygpIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjLlByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlciBtZXRob2QplGoGYQAAaD1OdJQoaj12AACMbGFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9wcm92aXNpb25fYXBpX3BiMl9ncnBjKZRqCWEAAGg9TnSUZWqQAwAAXZQoKGo9dgAAjD1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl9ncnBjIChtb2R1bGUplIw7bW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGOUaD1OdJQoaj12AACMVVRlc3RTdHJlYW1TZXJ2aWNlU3R1YiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwYymUag5hAABoPU50lChqPXYAAIxZVGVzdFN0cmVhbVNlcnZpY2VTZXJ2aWNlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwYymUahFhAABoPU50lChqPXYAAIxgRXZlbnRzKCkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGMuVGVzdFN0cmVhbVNlcnZpY2VTZXJ2aWNlciBtZXRob2QplGoUYQAAaD1OdJQoaj12AACMamFkZF9UZXN0U3RyZWFtU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwYymUahdhAABoPU50lGVqbAMAAF2UKChqPXYAAIw9YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucyAobW9kdWxlKZSMO21vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zlGg9TnSUKGo9dgAAjE1CZWFtQ29uc3RhbnRzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zKZRqHGEAAGg9TnSUKGo9dgAAjFdCZWFtQ29uc3RhbnRzLkNvbnN0YW50cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUah9hAABoPU50lChqPXYAAIxtTUlOX1RJTUVTVEFNUF9NSUxMSVMgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuQmVhbUNvbnN0YW50cy5Db25zdGFudHMgYXR0cmlidXRlKZRqImEAAGg9TnSUKGo9dgAAjG1NQVhfVElNRVNUQU1QX01JTExJUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5CZWFtQ29uc3RhbnRzLkNvbnN0YW50cyBhdHRyaWJ1dGUplGolYQAAaD1OdJQoaj12AACMe0dMT0JBTF9XSU5ET1dfTUFYX1RJTUVTVEFNUF9NSUxMSVMgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuQmVhbUNvbnN0YW50cy5Db25zdGFudHMgYXR0cmlidXRlKZRqKGEAAGg9TnSUKGo9dgAAjFFTdGFuZGFyZEFydGlmYWN0cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUaithAABoPU50lChqPXYAAIxXU3RhbmRhcmRBcnRpZmFjdHMuUm9sZXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMplGouYQAAaD1OdJQoaj12AACMY1NUQUdJTkdfVE8gKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRBcnRpZmFjdHMuUm9sZXMgYXR0cmlidXRlKZRqMWEAAGg9TnSUKGo9dgAAjFdTdGFuZGFyZEFydGlmYWN0cy5UeXBlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUajRhAABoPU50lChqPXYAAIxdRklMRSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEFydGlmYWN0cy5UeXBlcyBhdHRyaWJ1dGUplGo3YQAAaD1OdJQoaj12AACMXFVSTCAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEFydGlmYWN0cy5UeXBlcyBhdHRyaWJ1dGUplGo6YQAAaD1OdJQoaj12AACMYUVNQkVEREVEIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQXJ0aWZhY3RzLlR5cGVzIGF0dHJpYnV0ZSmUaj1hAABoPU50lChqPXYAAIxdUFlQSSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEFydGlmYWN0cy5UeXBlcyBhdHRyaWJ1dGUplGpAYQAAaD1OdJQoaj12AACMXk1BVkVOIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQXJ0aWZhY3RzLlR5cGVzIGF0dHJpYnV0ZSmUakNhAABoPU50lChqPXYAAIxOU3RhbmRhcmRDb2RlcnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMplGpGYQAAaD1OdJQoaj12AACMU1N0YW5kYXJkQ29kZXJzLkVudW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMplGpJYQAAaD1OdJQoaj12AACMWkJZVEVTIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0gYXR0cmlidXRlKZRqTGEAAGg9TnSUKGo9dgAAjGBTVFJJTkdfVVRGOCAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtIGF0dHJpYnV0ZSmUak9hAABoPU50lChqPXYAAIxXS1YgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bSBhdHRyaWJ1dGUplGpSYQAAaD1OdJQoaj12AACMWUJPT0wgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bSBhdHRyaWJ1dGUplGpVYQAAaD1OdJQoaj12AACMW1ZBUklOVCAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtIGF0dHJpYnV0ZSmUalhhAABoPU50lChqPXYAAIxbRE9VQkxFIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0gYXR0cmlidXRlKZRqW2EAAGg9TnSUKGo9dgAAjF1JVEVSQUJMRSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtIGF0dHJpYnV0ZSmUal5hAABoPU50lChqPXYAAIxaVElNRVIgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bSBhdHRyaWJ1dGUplGphYQAAaD1OdJQoaj12AACMZElOVEVSVkFMX1dJTkRPVyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtIGF0dHJpYnV0ZSmUamRhAABoPU50lChqPXYAAIxiTEVOR1RIX1BSRUZJWCAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtIGF0dHJpYnV0ZSmUamdhAABoPU50lChqPXYAAIxiR0xPQkFMX1dJTkRPVyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtIGF0dHJpYnV0ZSmUamphAABoPU50lChqPXYAAIxjV0lORE9XRURfVkFMVUUgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bSBhdHRyaWJ1dGUplGptYQAAaD1OdJQoaj12AACMaVBBUkFNX1dJTkRPV0VEX1ZBTFVFIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkQ29kZXJzLkVudW0gYXR0cmlidXRlKZRqcGEAAGg9TnSUKGo9dgAAjGpTVEFURV9CQUNLRURfSVRFUkFCTEUgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRDb2RlcnMuRW51bSBhdHRyaWJ1dGUplGpzYQAAaD1OdJQoaj12AACMWFJPVyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZENvZGVycy5FbnVtIGF0dHJpYnV0ZSmUanZhAABoPU50lChqPXYAAIxTU3RhbmRhcmREaXNwbGF5RGF0YSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUanlhAABoPU50lChqPXYAAIxfU3RhbmRhcmREaXNwbGF5RGF0YS5EaXNwbGF5RGF0YSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUanxhAABoPU50lChqPXYAAIxwTEFCRUxMRURfU1RSSU5HIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkRGlzcGxheURhdGEuRGlzcGxheURhdGEgYXR0cmlidXRlKZRqf2EAAGg9TnSUKGo9dgAAjFRTdGFuZGFyZEVudmlyb25tZW50cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUaoJhAABoPU50lChqPXYAAIxhU3RhbmRhcmRFbnZpcm9ubWVudHMuRW52aXJvbm1lbnRzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zKZRqhWEAAGg9TnSUKGo9dgAAjGlET0NLRVIgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRFbnZpcm9ubWVudHMuRW52aXJvbm1lbnRzIGF0dHJpYnV0ZSmUaohhAABoPU50lChqPXYAAIxqUFJPQ0VTUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEVudmlyb25tZW50cy5FbnZpcm9ubWVudHMgYXR0cmlidXRlKZRqi2EAAGg9TnSUKGo9dgAAjGtFWFRFUk5BTCAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZEVudmlyb25tZW50cy5FbnZpcm9ubWVudHMgYXR0cmlidXRlKZRqjmEAAGg9TnSUKGo9dgAAjFNTdGFuZGFyZFBUcmFuc2Zvcm1zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zKZRqkWEAAGg9TnSUKGo9dgAAjGVTdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbWJpbmVDb21wb25lbnRzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zKZRqlGEAAGg9TnSUKGo9dgAAjIFDT01CSU5FX1BFUl9LRVlfUFJFQ09NQklORSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbWJpbmVDb21wb25lbnRzIGF0dHJpYnV0ZSmUapdhAABoPU50lChqPXYAAIyJQ09NQklORV9QRVJfS0VZX01FUkdFX0FDQ1VNVUxBVE9SUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbWJpbmVDb21wb25lbnRzIGF0dHJpYnV0ZSmUapphAABoPU50lChqPXYAAIyGQ09NQklORV9QRVJfS0VZX0VYVFJBQ1RfT1VUUFVUUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbWJpbmVDb21wb25lbnRzIGF0dHJpYnV0ZSmUap1hAABoPU50lChqPXYAAIx9Q09NQklORV9HUk9VUEVEX1ZBTFVFUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbWJpbmVDb21wb25lbnRzIGF0dHJpYnV0ZSmUaqBhAABoPU50lChqPXYAAIxeU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21wb3NpdGVzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zKZRqo2EAAGg9TnSUKGo9dgAAjG9DT01CSU5FX1BFUl9LRVkgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21wb3NpdGVzIGF0dHJpYnV0ZSmUaqZhAABoPU50lChqPXYAAIxwQ09NQklORV9HTE9CQUxMWSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkNvbXBvc2l0ZXMgYXR0cmlidXRlKZRqqWEAAGg9TnSUKGo9dgAAjGlSRVNIVUZGTEUgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21wb3NpdGVzIGF0dHJpYnV0ZSmUaqxhAABoPU50lChqPXYAAIxrV1JJVEVfRklMRVMgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21wb3NpdGVzIGF0dHJpYnV0ZSmUaq9hAABoPU50lChqPXYAAIxoU3RhbmRhcmRQVHJhbnNmb3Jtcy5EZXByZWNhdGVkUHJpbWl0aXZlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUarJhAABoPU50lChqPXYAAIxuUkVBRCAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLkRlcHJlY2F0ZWRQcmltaXRpdmVzIGF0dHJpYnV0ZSmUarVhAABoPU50lChqPXYAAIx1Q1JFQVRFX1ZJRVcgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5EZXByZWNhdGVkUHJpbWl0aXZlcyBhdHRyaWJ1dGUplGq4YQAAaD1OdJQoaj12AACMXlN0YW5kYXJkUFRyYW5zZm9ybXMuUHJpbWl0aXZlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUarthAABoPU50lChqPXYAAIxmUEFSX0RPIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuUHJpbWl0aXZlcyBhdHRyaWJ1dGUplGq+YQAAaD1OdJQoaj12AACMZ0ZMQVRURU4gKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzIGF0dHJpYnV0ZSmUasFhAABoPU50lChqPXYAAIxsR1JPVVBfQllfS0VZIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuUHJpbWl0aXZlcyBhdHRyaWJ1dGUplGrEYQAAaD1OdJQoaj12AACMZ0lNUFVMU0UgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzIGF0dHJpYnV0ZSmUasdhAABoPU50lChqPXYAAIxuQVNTSUdOX1dJTkRPV1MgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzIGF0dHJpYnV0ZSmUasphAABoPU50lChqPXYAAIxrVEVTVF9TVFJFQU0gKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzIGF0dHJpYnV0ZSmUas1hAABoPU50lChqPXYAAIxrTUFQX1dJTkRPV1MgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzIGF0dHJpYnV0ZSmUatBhAABoPU50lChqPXYAAIxtTUVSR0VfV0lORE9XUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLlByaW1pdGl2ZXMgYXR0cmlidXRlKZRq02EAAGg9TnSUKGo9dgAAjG1TdGFuZGFyZFBUcmFuc2Zvcm1zLlNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMplGrWYQAAaD1OdJQoaj12AACMhFBBSVJfV0lUSF9SRVNUUklDVElPTiAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLlNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHMgYXR0cmlidXRlKZRq2WEAAGg9TnSUKGo9dgAAjIBTUExJVF9SRVNUUklDVElPTiAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLlNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHMgYXR0cmlidXRlKZRq3GEAAGg9TnSUKGo9dgAAjIVQUk9DRVNTX0tFWUVEX0VMRU1FTlRTIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuU3BsaXR0YWJsZVBhckRvQ29tcG9uZW50cyBhdHRyaWJ1dGUplGrfYQAAaD1OdJQoaj12AACMf1BST0NFU1NfRUxFTUVOVFMgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX3VybnMuU3RhbmRhcmRQVHJhbnNmb3Jtcy5TcGxpdHRhYmxlUGFyRG9Db21wb25lbnRzIGF0dHJpYnV0ZSmUauJhAABoPU50lChqPXYAAIyKU1BMSVRfQU5EX1NJWkVfUkVTVFJJQ1RJT05TIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUFRyYW5zZm9ybXMuU3BsaXR0YWJsZVBhckRvQ29tcG9uZW50cyBhdHRyaWJ1dGUplGrlYQAAaD1OdJQoaj12AACMllBST0NFU1NfU0laRURfRUxFTUVOVFNfQU5EX1JFU1RSSUNUSU9OUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFBUcmFuc2Zvcm1zLlNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHMgYXR0cmlidXRlKZRq6GEAAGg9TnSUKGo9dgAAjFFTdGFuZGFyZFByb3RvY29scyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUauthAABoPU50lChqPXYAAIxWU3RhbmRhcmRQcm90b2NvbHMuRW51bSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUau5hAABoPU50lChqPXYAAIxxTEVHQUNZX1BST0dSRVNTX1JFUE9SVElORyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFByb3RvY29scy5FbnVtIGF0dHJpYnV0ZSmUavFhAABoPU50lChqPXYAAIxqUFJPR1JFU1NfUkVQT1JUSU5HIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUHJvdG9jb2xzLkVudW0gYXR0cmlidXRlKZRq9GEAAGg9TnSUKGo9dgAAjGVXT1JLRVJfU1RBVFVTIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUHJvdG9jb2xzLkVudW0gYXR0cmlidXRlKZRq92EAAGg9TnSUKGo9dgAAjHRNVUxUSV9DT1JFX0JVTkRMRV9QUk9DRVNTSU5HIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUHJvdG9jb2xzLkVudW0gYXR0cmlidXRlKZRq+mEAAGg9TnSUKGo9dgAAjFRTdGFuZGFyZFJlcXVpcmVtZW50cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUav1hAABoPU50lChqPXYAAIxZU3RhbmRhcmRSZXF1aXJlbWVudHMuRW51bSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUagBiAABoPU50lChqPXYAAIx3UkVRVUlSRVNfU1RBVEVGVUxfUFJPQ0VTU0lORyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFJlcXVpcmVtZW50cy5FbnVtIGF0dHJpYnV0ZSmUagNiAABoPU50lChqPXYAAIx3UkVRVUlSRVNfQlVORExFX0ZJTkFMSVpBVElPTiAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFJlcXVpcmVtZW50cy5FbnVtIGF0dHJpYnV0ZSmUagZiAABoPU50lChqPXYAAIxwUkVRVUlSRVNfU1RBQkxFX0lOUFVUIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zLlN0YW5kYXJkUmVxdWlyZW1lbnRzLkVudW0gYXR0cmlidXRlKZRqCWIAAGg9TnSUKGo9dgAAjHVSRVFVSVJFU19USU1FX1NPUlRFRF9JTlBVVCAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFJlcXVpcmVtZW50cy5FbnVtIGF0dHJpYnV0ZSmUagxiAABoPU50lChqPXYAAIxWU3RhbmRhcmRTaWRlSW5wdXRUeXBlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucymUag9iAABoPU50lChqPXYAAIxbU3RhbmRhcmRTaWRlSW5wdXRUeXBlcy5FbnVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMl91cm5zKZRqEmIAAGg9TnSUKGo9dgAAjGVJVEVSQUJMRSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFNpZGVJbnB1dFR5cGVzLkVudW0gYXR0cmlidXRlKZRqFWIAAGg9TnSUKGo9dgAAjGVNVUxUSU1BUCAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJucy5TdGFuZGFyZFNpZGVJbnB1dFR5cGVzLkVudW0gYXR0cmlidXRlKZRqGGIAAGg9TnSUZWreAwAAXZQoaj12AACMN2FwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5lbmRwb2ludHNfcGIyX2dycGMgKG1vZHVsZSmUjDVtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmVuZHBvaW50c19wYjJfZ3JwY5RoPU50lGFqEgQAAF2UKGo9dgAAjEFhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuZXh0ZXJuYWxfdHJhbnNmb3Jtc19wYjJfZ3JwYyAobW9kdWxlKZSMP21vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuZXh0ZXJuYWxfdHJhbnNmb3Jtc19wYjJfZ3JwY5RoPU50lGFq+gMAAF2UKGo9dgAAjDVhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfZ3JwYyAobW9kdWxlKZSMM21vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfZ3JwY5RoPU50lGFqMAMAAF2UKChqPXYAAIw1YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMgKG1vZHVsZSmUjDNtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnOUaD1OdJQoaj12AACMRk1vbml0b3JpbmdJbmZvIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucymUaiNiAABoPU50lChqPXYAAIxbTW9uaXRvcmluZ0luZm8uTW9uaXRvcmluZ0luZm9MYWJlbHMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zKZRqJmIAAGg9TnSUKGo9dgAAjGZUUkFOU0ZPUk0gKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvLk1vbml0b3JpbmdJbmZvTGFiZWxzIGF0dHJpYnV0ZSmUailiAABoPU50lChqPXYAAIxoUENPTExFQ1RJT04gKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvLk1vbml0b3JpbmdJbmZvTGFiZWxzIGF0dHJpYnV0ZSmUaixiAABoPU50lChqPXYAAIxvV0lORE9XSU5HX1NUUkFURUdZIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mby5Nb25pdG9yaW5nSW5mb0xhYmVscyBhdHRyaWJ1dGUplGovYgAAaD1OdJQoaj12AACMYkNPREVSIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mby5Nb25pdG9yaW5nSW5mb0xhYmVscyBhdHRyaWJ1dGUplGoyYgAAaD1OdJQoaj12AACMaEVOVklST05NRU5UIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mby5Nb25pdG9yaW5nSW5mb0xhYmVscyBhdHRyaWJ1dGUplGo1YgAAaD1OdJQoaj12AACMZk5BTUVTUEFDRSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm8uTW9uaXRvcmluZ0luZm9MYWJlbHMgYXR0cmlidXRlKZRqOGIAAGg9TnSUKGo9dgAAjGFOQU1FIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mby5Nb25pdG9yaW5nSW5mb0xhYmVscyBhdHRyaWJ1dGUplGo7YgAAaD1OdJQoaj12AACMS01vbml0b3JpbmdJbmZvU3BlY3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zKZRqPmIAAGg9TnSUKGo9dgAAjFBNb25pdG9yaW5nSW5mb1NwZWNzLkVudW0gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zKZRqQWIAAGg9TnSUKGo9dgAAjF5VU0VSX0NPVU5URVIgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3MuRW51bSBhdHRyaWJ1dGUplGpEYgAAaD1OdJQoaj12AACMX0VMRU1FTlRfQ09VTlQgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3MuRW51bSBhdHRyaWJ1dGUplGpHYgAAaD1OdJQoaj12AACMY1NBTVBMRURfQllURV9TSVpFIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW0gYXR0cmlidXRlKZRqSmIAAGg9TnSUKGo9dgAAjGRTVEFSVF9CVU5ETEVfTVNFQ1MgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3MuRW51bSBhdHRyaWJ1dGUplGpNYgAAaD1OdJQoaj12AACMZlBST0NFU1NfQlVORExFX01TRUNTIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW0gYXR0cmlidXRlKZRqUGIAAGg9TnSUKGo9dgAAjGVGSU5JU0hfQlVORExFX01TRUNTIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW0gYXR0cmlidXRlKZRqU2IAAGg9TnSUKGo9dgAAjF1UT1RBTF9NU0VDUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9TcGVjcy5FbnVtIGF0dHJpYnV0ZSmUalZiAABoPU50lChqPXYAAIxrVVNFUl9ESVNUUklCVVRJT05fQ09VTlRFUiAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9TcGVjcy5FbnVtIGF0dHJpYnV0ZSmUalliAABoPU50lChqPXYAAIxgV09SS19SRU1BSU5JTkcgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvU3BlY3MuRW51bSBhdHRyaWJ1dGUplGpcYgAAaD1OdJQoaj12AACMYFdPUktfQ09NUExFVEVEIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1NwZWNzLkVudW0gYXR0cmlidXRlKZRqX2IAAGg9TnSUKGo9dgAAjE5Nb25pdG9yaW5nSW5mb1R5cGVVcm5zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucymUamJiAABoPU50lChqPXYAAIxTTW9uaXRvcmluZ0luZm9UeXBlVXJucy5FbnVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucymUamViAABoPU50lChqPXYAAIxjU1VNX0lOVDY0X1RZUEUgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5tZXRyaWNzX3BiMl91cm5zLk1vbml0b3JpbmdJbmZvVHlwZVVybnMuRW51bSBhdHRyaWJ1dGUplGpoYgAAaD1OdJQoaj12AACMbERJU1RSSUJVVElPTl9JTlQ2NF9UWVBFIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJucy5Nb25pdG9yaW5nSW5mb1R5cGVVcm5zLkVudW0gYXR0cmlidXRlKZRqa2IAAGg9TnSUKGo9dgAAjGZMQVRFU1RfSU5UNjRfVFlQRSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9UeXBlVXJucy5FbnVtIGF0dHJpYnV0ZSmUam5iAABoPU50lChqPXYAAIxoTEFURVNUX0RPVUJMRVNfVFlQRSAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnMuTW9uaXRvcmluZ0luZm9UeXBlVXJucy5FbnVtIGF0dHJpYnV0ZSmUanFiAABoPU50lGVqlwMAAF2UKGo9dgAAjDRhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc2NoZW1hX3BiMl9ncnBjIChtb2R1bGUplIwybW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zY2hlbWFfcGIyX2dycGOUaD1OdJRhasgDAABdlChqPXYAAIxBYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX2dycGMgKG1vZHVsZSmUjD9tb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX2dycGOUaD1OdJRhahEEAABdlCgoaj12AACMQWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zIChtb2R1bGUplIw/bW9kdWxlLWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zlGg9TnSUKGo9dgAAjFdGaXhlZFdpbmRvd3NQYXlsb2FkIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJucymUanpiAABoPU50lChqPXYAAIxcRml4ZWRXaW5kb3dzUGF5bG9hZC5FbnVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJucymUan1iAABoPU50lChqPXYAAIxoUFJPUEVSVElFUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMuRml4ZWRXaW5kb3dzUGF5bG9hZC5FbnVtIGF0dHJpYnV0ZSmUaoBiAABoPU50lChqPXYAAIxYR2xvYmFsV2luZG93c1BheWxvYWQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zKZRqg2IAAGg9TnSUKGo9dgAAjF1HbG9iYWxXaW5kb3dzUGF5bG9hZC5FbnVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJucymUaoZiAABoPU50lChqPXYAAIxpUFJPUEVSVElFUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMuR2xvYmFsV2luZG93c1BheWxvYWQuRW51bSBhdHRyaWJ1dGUplGqJYgAAaD1OdJQoaj12AACMWVNlc3Npb25XaW5kb3dzUGF5bG9hZCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMplGqMYgAAaD1OdJQoaj12AACMXlNlc3Npb25XaW5kb3dzUGF5bG9hZC5FbnVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJucymUao9iAABoPU50lChqPXYAAIxqUFJPUEVSVElFUyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMuU2Vzc2lvbldpbmRvd3NQYXlsb2FkLkVudW0gYXR0cmlidXRlKZRqkmIAAGg9TnSUKGo9dgAAjFlTbGlkaW5nV2luZG93c1BheWxvYWQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zKZRqlWIAAGg9TnSUKGo9dgAAjF5TbGlkaW5nV2luZG93c1BheWxvYWQuRW51bSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnMplGqYYgAAaD1OdJQoaj12AACMalBST1BFUlRJRVMgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5zdGFuZGFyZF93aW5kb3dfZm5zX3BiMl91cm5zLlNsaWRpbmdXaW5kb3dzUGF5bG9hZC5FbnVtIGF0dHJpYnV0ZSmUaptiAABoPU50lGVqaQMAAF2UKGo9dgAAjCxhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5jb21tb25fdXJucyAobW9kdWxlKZSMKm1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5jb21tb25fdXJuc5RoPU50lGFq8gMAAF2UKGo9dgAAjCxhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5weXRob25fdXJucyAobW9kdWxlKZSMKm1vZHVsZS1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5weXRob25fdXJuc5RoPU50lGFq8wMAAF2UKChqPXYAAIwmYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkudXRpbHMgKG1vZHVsZSmUjCRtb2R1bGUtYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkudXRpbHOUaD1OdJQoaj12AACMQFByb3BlcnRpZXNGcm9tRW51bVZhbHVlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS51dGlscymUaqRiAABoPU50lChqPXYAAIxKY29uc3RhbnQgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LnV0aWxzLlByb3BlcnRpZXNGcm9tRW51bVZhbHVlIGF0dHJpYnV0ZSmUaqdiAABoPU50lChqPXYAAIxNbGFiZWxfcHJvcHMgKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LnV0aWxzLlByb3BlcnRpZXNGcm9tRW51bVZhbHVlIGF0dHJpYnV0ZSmUaqpiAABoPU50lChqPXYAAIxGc3BlYyAoYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkudXRpbHMuUHJvcGVydGllc0Zyb21FbnVtVmFsdWUgYXR0cmlidXRlKZRqrWIAAGg9TnSUKGo9dgAAjEV1cm4gKGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LnV0aWxzLlByb3BlcnRpZXNGcm9tRW51bVZhbHVlIGF0dHJpYnV0ZSmUarBiAABoPU50lGVqNAMAAF2UKChqPXYAAIwbYXBhY2hlX2JlYW0ucHZhbHVlIChtb2R1bGUplIwZbW9kdWxlLWFwYWNoZV9iZWFtLnB2YWx1ZZRoPU50lChqPXYAAIwpUENvbGxlY3Rpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnB2YWx1ZSmUarViAABoPU50lChqPXYAAIw0d2luZG93aW5nIChhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24gYXR0cmlidXRlKZRquGIAAGg9TnSUKGo9dgAAjDZmcm9tXygpIChhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24gc3RhdGljIG1ldGhvZCmUartiAABoPU50lChqPXYAAIw3dG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24gbWV0aG9kKZRqvmIAAGg9TnSUKGo9dgAAjEBmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uIHN0YXRpYyBtZXRob2QplGrBYgAAaD1OdJQoaj12AACMKlRhZ2dlZE91dHB1dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKZRqxGIAAGg9TnSUKGo9dgAAjClBc1NpbmdsZXRvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKZRqx2IAAGg9TnSUKGo9dgAAjDdlbGVtZW50X3R5cGUgKGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc1NpbmdsZXRvbiBhdHRyaWJ1dGUplGrKYgAAaD1OdJQoaj12AACMJEFzSXRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucHZhbHVlKZRqzWIAAGg9TnSUKGo9dgAAjDJlbGVtZW50X3R5cGUgKGFwYWNoZV9iZWFtLnB2YWx1ZS5Bc0l0ZXIgYXR0cmlidXRlKZRq0GIAAGg9TnSUKGo9dgAAjCRBc0xpc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnB2YWx1ZSmUatNiAABoPU50lChqPXYAAIwkQXNEaWN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wdmFsdWUplGrWYgAAaD1OdJQoaj12AACMLEVtcHR5U2lkZUlucHV0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5wdmFsdWUplGrZYgAAaD1OdJRlapgDAABdlChqPXYAAIwcYXBhY2hlX2JlYW0ucnVubmVycyAobW9kdWxlKZSMGm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzlGg9TnSUYWqnAwAAXZQoaj12AACMJWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cgKG1vZHVsZSmUjCNtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvd5RoPU50lGFqHgQAAF2UKChqPXYAAIxIYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5lIChtb2R1bGUplIxGbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2VfbWV0cmljc19waXBlbGluZZRoPU50lChqPXYAAIxdbWV0cmljX21hdGNoZXJzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX21ldHJpY3NfcGlwZWxpbmUplJUuAAEAAAAAAGriYgAAaD1OdJQoaj12AACMWlVzZXJNZXRyaWNzRG9GbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5lKZRq5WIAAGg9TnSUKGo9dgAAjGdzdGFydF9idW5kbGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5lLlVzZXJNZXRyaWNzRG9GbiBtZXRob2QplGroYgAAaD1OdJQoaj12AACMYnByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5lLlVzZXJNZXRyaWNzRG9GbiBtZXRob2QplGrrYgAAaD1OdJQoaj12AACMaGZpbmlzaF9idW5kbGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9tZXRyaWNzX3BpcGVsaW5lLlVzZXJNZXRyaWNzRG9GbiBtZXRob2QplGruYgAAaD1OdJQoaj12AACMW2FwcGx5X2FuZF9ydW4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2VfbWV0cmljc19waXBlbGluZSmUavFiAABoPU50lGVqfAMAAF2UKChqPXYAAIxSYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9zdHJlYW1pbmdfbWV0cmljc19waXBlbGluZSAobW9kdWxlKZSMUG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX3N0cmVhbWluZ19tZXRyaWNzX3BpcGVsaW5llGg9TnSUKGo9dgAAjG1TdHJlYW1pbmdVc2VyTWV0cmljc0RvRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2Vfc3RyZWFtaW5nX21ldHJpY3NfcGlwZWxpbmUplGr2YgAAaD1OdJQoaj12AACMenN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX3N0cmVhbWluZ19tZXRyaWNzX3BpcGVsaW5lLlN0cmVhbWluZ1VzZXJNZXRyaWNzRG9GbiBtZXRob2QplGr5YgAAaD1OdJQoaj12AACMdXByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9zdHJlYW1pbmdfbWV0cmljc19waXBlbGluZS5TdHJlYW1pbmdVc2VyTWV0cmljc0RvRm4gbWV0aG9kKZRq/GIAAGg9TnSUKGo9dgAAjHtmaW5pc2hfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2Vfc3RyZWFtaW5nX21ldHJpY3NfcGlwZWxpbmUuU3RyZWFtaW5nVXNlck1ldHJpY3NEb0ZuIG1ldGhvZCmUav9iAABoPU50lChqPXYAAIxbcnVuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX3N0cmVhbWluZ19tZXRyaWNzX3BpcGVsaW5lKZRqAmMAAGg9TnSUZWp5AwAAXZQoKGo9dgAAjDZhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MgKG1vZHVsZSmUjDRtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzlGg9TnSUKGo9dgAAjEhEYXRhZmxvd01ldHJpY3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljcymUagdjAABoPU50lChqPXYAAIxUYWxsX21ldHJpY3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzLkRhdGFmbG93TWV0cmljcyBtZXRob2QplGoKYwAAaD1OdJQoaj12AACMTnF1ZXJ5KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljcy5EYXRhZmxvd01ldHJpY3MgbWV0aG9kKZRqDWMAAGg9TnSUKGo9dgAAjEBtYWluKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MplGoQYwAAaD1OdJRlag4EAABdlCgoaj12AACMNWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyIChtb2R1bGUplIwzbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVylGg9TnSUKGo9dgAAjEZEYXRhZmxvd1J1bm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIplGoVYwAAaD1OdJQoaj12AACMWmlzX2ZuYXBpX2NvbXBhdGlibGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKZRqGGMAAGg9TnSUKGo9dgAAjGVwb2xsX2Zvcl9qb2JfY29tcGxldGlvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBzdGF0aWMgbWV0aG9kKZRqG2MAAGg9TnSUKGo9dgAAjGhncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBzdGF0aWMgbWV0aG9kKZRqHmMAAGg9TnSUKGo9dgAAjGBzaWRlX2lucHV0X3Zpc2l0b3IoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgc3RhdGljIG1ldGhvZCmUaiFjAABoPU50lChqPXYAAIxjZmxhdHRlbl9pbnB1dF92aXNpdG9yKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIHN0YXRpYyBtZXRob2QplGokYwAAaD1OdJQoaj12AACMU3J1bl9waXBlbGluZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QplGonYwAAaD1OdJQoaj12AACMUnJ1bl9JbXB1bHNlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZCmUaipjAABoPU50lChqPXYAAIxScnVuX0ZsYXR0ZW4oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKZRqLWMAAGg9TnSUKGo9dgAAjFxhcHBseV9Xcml0ZVRvQmlnUXVlcnkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKZRqMGMAAGg9TnSUKGo9dgAAjFdhcHBseV9Hcm91cEJ5S2V5KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIG1ldGhvZCmUajNjAABoPU50lChqPXYAAIxVcnVuX0dyb3VwQnlLZXkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKZRqNmMAAGg9TnSUKGo9dgAAjGRydW5fUnVubmVyQVBJUFRyYW5zZm9ybUhvbGRlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QplGo5YwAAaD1OdJQoaj12AACMUHJ1bl9QYXJEbygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QplGo8YwAAaD1OdJQoaj12AACMWmFwcGx5X0NvbWJpbmVWYWx1ZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKZRqP2MAAGg9TnSUKGo9dgAAjFhydW5fQ29tYmluZVZhbHVlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QplGpCYwAAaD1OdJQoaj12AACMUWFwcGx5X1JlYWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKZRqRWMAAGg9TnSUKGo9dgAAjE9ydW5fUmVhZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QplGpIYwAAaD1OdJQoaj12AACMV3J1bl9fTmF0aXZlV3JpdGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgbWV0aG9kKZRqS2MAAGg9TnSUKGo9dgAAjFVydW5fVGVzdFN0cmVhbSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lciBtZXRob2QplGpOYwAAaD1OdJQoaj12AACMaXNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3koKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgY2xhc3MgbWV0aG9kKZRqUWMAAGg9TnSUKGo9dgAAjGtkZXNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3koKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgY2xhc3MgbWV0aG9kKZRqVGMAAGg9TnSUKGo9dgAAjGdieXRlX2FycmF5X3RvX2pzb25fc3RyaW5nKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyIHN0YXRpYyBtZXRob2QplGpXYwAAaD1OdJQoaj12AACMZ2pzb25fc3RyaW5nX3RvX2J5dGVfYXJyYXkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXIgc3RhdGljIG1ldGhvZCmUalpjAABoPU50lChqPXYAAIxfRGF0YWZsb3dSdW5uZXIuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcimUal1jAABoPU50lChqPXYAAIx5Z2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKZRqYGMAAGg9TnSUKGo9dgAAjGdtYXRjaGVzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkNyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZSBtZXRob2QplGpjYwAAaD1OdJQoaj12AACMYERhdGFmbG93UnVubmVyLkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyKZRqZmMAAGg9TnSUKGo9dgAAjHpnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKZRqaWMAAGg9TnSUKGo9dgAAjGhtYXRjaGVzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyLkRhdGFmbG93UnVubmVyLkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKZRqbGMAAGg9TnSUKGo9dgAAjF1EYXRhZmxvd1J1bm5lci5SZWFkUFRyYW5zZm9ybU92ZXJyaWRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lcimUam9jAABoPU50lChqPXYAAIx3Z2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5SZWFkUFRyYW5zZm9ybU92ZXJyaWRlIG1ldGhvZCmUanJjAABoPU50lChqPXYAAIxlbWF0Y2hlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X3J1bm5lci5EYXRhZmxvd1J1bm5lci5SZWFkUFRyYW5zZm9ybU92ZXJyaWRlIG1ldGhvZCmUanVjAABoPU50lGVqYAMAAF2UKGo9dgAAjC9hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pbyAobW9kdWxlKZSMLW1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pb5RoPU50lGFq5gMAAF2UKChqPXYAAIw2YXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlIChtb2R1bGUplIw0bW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZZRoPU50lChqPXYAAIxFTmF0aXZlU291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UplGp8YwAAaD1OdJQoaj12AACMTGNvZGVyIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlIGF0dHJpYnV0ZSmUan9jAABoPU50lChqPXYAAIxMcmVhZGVyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2UgbWV0aG9kKZRqgmMAAGg9TnSUKGo9dgAAjFBpc19ib3VuZGVkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2UgbWV0aG9kKZRqhWMAAGg9TnSUKGo9dgAAjEtOYXRpdmVTb3VyY2VSZWFkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSmUaohjAABoPU50lChqPXYAAIxkcmV0dXJuc193aW5kb3dlZF92YWx1ZXMgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTb3VyY2VSZWFkZXIgYXR0cmlidXRlKZRqi2MAAGg9TnSUKGo9dgAAjFhnZXRfcHJvZ3Jlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlLk5hdGl2ZVNvdXJjZVJlYWRlciBtZXRob2QplGqOYwAAaD1OdJQoaj12AACMYXJlcXVlc3RfZHluYW1pY19zcGxpdCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU291cmNlUmVhZGVyIG1ldGhvZCmUapFjAABoPU50lChqPXYAAIxHUmVhZGVyUHJvZ3Jlc3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSmUapRjAABoPU50lChqPXYAAIxRcG9zaXRpb24gKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5SZWFkZXJQcm9ncmVzcyBhdHRyaWJ1dGUplGqXYwAAaD1OdJQoaj12AACMWXBlcmNlbnRfY29tcGxldGUgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5SZWFkZXJQcm9ncmVzcyBhdHRyaWJ1dGUplGqaYwAAaD1OdJQoaj12AACMV3JlbWFpbmluZ190aW1lIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuUmVhZGVyUHJvZ3Jlc3MgYXR0cmlidXRlKZRqnWMAAGg9TnSUKGo9dgAAjF5jb25zdW1lZF9zcGxpdF9wb2ludHMgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5SZWFkZXJQcm9ncmVzcyBhdHRyaWJ1dGUplGqgYwAAaD1OdJQoaj12AACMX3JlbWFpbmluZ19zcGxpdF9wb2ludHMgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5SZWFkZXJQcm9ncmVzcyBhdHRyaWJ1dGUplGqjYwAAaD1OdJQoaj12AACMR1JlYWRlclBvc2l0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UplGqmYwAAaD1OdJQoaj12AACMR0NvbmNhdFBvc2l0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UplGqpYwAAaD1OdJQoaj12AACMTER5bmFtaWNTcGxpdFJlcXVlc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSmUaqxjAABoPU50lChqPXYAAIxLRHluYW1pY1NwbGl0UmVzdWx0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UplGqvYwAAaD1OdJQoaj12AACMV0R5bmFtaWNTcGxpdFJlc3VsdFdpdGhQb3NpdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlKZRqsmMAAGg9TnSUKGo9dgAAjENOYXRpdmVTaW5rIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UplGq1YwAAaD1OdJQoaj12AACMSndyaXRlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU2luayBtZXRob2QplGq4YwAAaD1OdJQoaj12AACMSU5hdGl2ZVNpbmtXcml0ZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZSmUartjAABoPU50lChqPXYAAIxgdGFrZXNfd2luZG93ZWRfdmFsdWVzIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UuTmF0aXZlU2lua1dyaXRlciBhdHRyaWJ1dGUplGq+YwAAaD1OdJQoaj12AACMT1dyaXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZS5OYXRpdmVTaW5rV3JpdGVyIG1ldGhvZCmUasFjAABoPU50lGVqZAMAAF2UKChqPXYAAIw6YXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcyAobW9kdWxlKZSMOG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzlGg9TnSUKGo9dgAAjFVDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMplGrGYwAAaD1OdJQoaj12AACMXW1hdGNoZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcy5DcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKZRqyWMAAGg9TnSUKGo9dgAAjG9nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMuQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlIG1ldGhvZCmUasxjAABoPU50lChqPXYAAIxTUmVhZFBUcmFuc2Zvcm1PdmVycmlkZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcymUas9jAABoPU50lChqPXYAAIxbbWF0Y2hlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLlJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKZRq0mMAAGg9TnSUKGo9dgAAjG1nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMuUmVhZFBUcmFuc2Zvcm1PdmVycmlkZSBtZXRob2QplGrVYwAAaD1OdJQoaj12AACMVkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMplGrYYwAAaD1OdJQoaj12AACMXm1hdGNoZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcy5KcmhSZWFkUFRyYW5zZm9ybU92ZXJyaWRlIG1ldGhvZCmUattjAABoPU50lChqPXYAAIxwZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzLkpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUgbWV0aG9kKZRq3mMAAGg9TnSUZWoABAAAXZQoKGo9dgAAjDphcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVyIChtb2R1bGUplIw4bW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXKUaD1OdJQoaj12AACMT1Rlc3REYXRhZmxvd1J1bm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lcimUauNjAABoPU50lChqPXYAAIxccnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXIuVGVzdERhdGFmbG93UnVubmVyIG1ldGhvZCmUauZjAABoPU50lChqPXYAAIxhYnVpbGRfY29uc29sZV91cmwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy50ZXN0X2RhdGFmbG93X3J1bm5lci5UZXN0RGF0YWZsb3dSdW5uZXIgbWV0aG9kKZRq6WMAAGg9TnSUKGo9dgAAjGN3YWl0X3VudGlsX2luX3N0YXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cudGVzdF9kYXRhZmxvd19ydW5uZXIuVGVzdERhdGFmbG93UnVubmVyIG1ldGhvZCmUauxjAABoPU50lGVqCAQAAF2UKGo9dgAAjCNhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdCAobW9kdWxlKZSMIW1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdJRoPU50lGFqmgMAAF2UKChqPXYAAIwyYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkgKG1vZHVsZSmUjDBtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnmUaD1OdJQoaj12AACMQkJ1bmRsZUZhY3RvcnkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5KZRq82MAAGg9TnSUKGo9dgAAjFBjcmVhdGVfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5LkJ1bmRsZUZhY3RvcnkgbWV0aG9kKZRq9mMAAGg9TnSUKGo9dgAAjGBjcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeS5CdW5kbGVGYWN0b3J5IG1ldGhvZCmUavljAABoPU50lGVqUAMAAF2UKChqPXYAAIwpYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2sgKG1vZHVsZSmUjCdtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2uUaD1OdJQoaj12AACMMUNsb2NrIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jaymUav5jAABoPU50lChqPXYAAIw2dGltZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5DbG9jayBtZXRob2QplGoBZAAAaD1OdJQoaj12AACMPmFkdmFuY2VfdGltZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5DbG9jayBtZXRob2QplGoEZAAAaD1OdJQoaj12AACMNVJlYWxDbG9jayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2splGoHZAAAaD1OdJQoaj12AACMOnRpbWUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suUmVhbENsb2NrIG1ldGhvZCmUagpkAABoPU50lChqPXYAAIw1VGVzdENsb2NrIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jaymUag1kAABoPU50lChqPXYAAIw6dGltZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jay5UZXN0Q2xvY2sgbWV0aG9kKZRqEGQAAGg9TnSUKGo9dgAAjEJhZHZhbmNlX3RpbWUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2suVGVzdENsb2NrIG1ldGhvZCmUahNkAABoPU50lGVq3AMAAF2UKChqPXYAAIxGYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvciAobW9kdWxlKZSMRG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9ylGg9TnSUKGo9dgAAjGhDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jb25zdW1lcl90cmFja2luZ19waXBlbGluZV92aXNpdG9yKZRqGGQAAGg9TnSUKGo9dgAAjG92aWV3cyAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvci5Db25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yIGF0dHJpYnV0ZSmUahtkAABoPU50lChqPXYAAIx4dmlzaXRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3IuQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvciBtZXRob2QplGoeZAAAaD1OdJRlajIDAABdlCgoaj12AACMMmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzIChtb2R1bGUplIwwbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzlGg9TnSUKGo9dgAAjEJEaXJlY3RNZXRyaWNzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcymUaiNkAABoPU50lChqPXYAAIxRY29tbWl0X2xvZ2ljYWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljcyBtZXRob2QplGomZAAAaD1OdJQoaj12AACMUmNvbW1pdF9waHlzaWNhbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWNzIG1ldGhvZCmUailkAABoPU50lChqPXYAAIxSdXBkYXRlX3BoeXNpY2FsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpY3MgbWV0aG9kKZRqLGQAAGg9TnSUKGo9dgAAjEhxdWVyeSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWNzIG1ldGhvZCmUai9kAABoPU50lChqPXYAAIxBRGlyZWN0TWV0cmljIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcymUajJkAABoPU50lChqPXYAAIxQY29tbWl0X2xvZ2ljYWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljIG1ldGhvZCmUajVkAABoPU50lChqPXYAAIxRY29tbWl0X3BoeXNpY2FsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9tZXRyaWNzLkRpcmVjdE1ldHJpYyBtZXRob2QplGo4ZAAAaD1OdJQoaj12AACMUXVwZGF0ZV9waHlzaWNhbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWMgbWV0aG9kKZRqO2QAAGg9TnSUKGo9dgAAjFNleHRyYWN0X2NvbW1pdHRlZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcy5EaXJlY3RNZXRyaWMgbWV0aG9kKZRqPmQAAGg9TnSUKGo9dgAAjFpleHRyYWN0X2xhdGVzdF9hdHRlbXB0ZWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3MuRGlyZWN0TWV0cmljIG1ldGhvZCmUakFkAABoPU50lGVq9wMAAF2UKChqPXYAAIwxYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lciAobW9kdWxlKZSML21vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVylGg9TnSUKGo9dgAAjElTd2l0Y2hpbmdEaXJlY3RSdW5uZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIplGpGZAAAaD1OdJQoaj12AACMXWlzX2ZuYXBpX2NvbXBhdGlibGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5Td2l0Y2hpbmdEaXJlY3RSdW5uZXIgbWV0aG9kKZRqSWQAAGg9TnSUKGo9dgAAjFZydW5fcGlwZWxpbmUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lci5Td2l0Y2hpbmdEaXJlY3RSdW5uZXIgbWV0aG9kKZRqTGQAAGg9TnSUKGo9dgAAjEtCdW5kbGVCYXNlZERpcmVjdFJ1bm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcimUak9kAABoPU50lChqPXYAAIxmaXNfZm5hcGlfY29tcGF0aWJsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyIHN0YXRpYyBtZXRob2QplGpSZAAAaD1OdJQoaj12AACMWHJ1bl9waXBlbGluZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLkJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyIG1ldGhvZCmUalVkAABoPU50lChqPXYAAIxBRGlyZWN0UnVubmVyIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3J1bm5lcimUalhkAABoPU50lGVqtwMAAF2UKChqPXYAAIw0YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZSAobW9kdWxlKZSMMm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRllGg9TnSUKGo9dgAAjElEaXJlY3RSdW50aW1lU3RhdGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUplGpdZAAAaD1OdJQoaj12AACMWWZvcl9zcGVjKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuRGlyZWN0UnVudGltZVN0YXRlIHN0YXRpYyBtZXRob2QplGpgZAAAaD1OdJQoaj12AACMRkJhZ1J1bnRpbWVTdGF0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZSmUamNkAABoPU50lChqPXYAAIxLcmVhZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkJhZ1J1bnRpbWVTdGF0ZSBtZXRob2QplGpmZAAAaD1OdJQoaj12AACMSmFkZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkJhZ1J1bnRpbWVTdGF0ZSBtZXRob2QplGppZAAAaD1OdJQoaj12AACMTGNsZWFyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuQmFnUnVudGltZVN0YXRlIG1ldGhvZCmUamxkAABoPU50lChqPXYAAIxGU2V0UnVudGltZVN0YXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlKZRqb2QAAGg9TnSUKGo9dgAAjEtyZWFkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuU2V0UnVudGltZVN0YXRlIG1ldGhvZCmUanJkAABoPU50lChqPXYAAIxKYWRkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuU2V0UnVudGltZVN0YXRlIG1ldGhvZCmUanVkAABoPU50lChqPXYAAIxMY2xlYXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5TZXRSdW50aW1lU3RhdGUgbWV0aG9kKZRqeGQAAGg9TnSUKGo9dgAAjFJpc19tb2RpZmllZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLlNldFJ1bnRpbWVTdGF0ZSBtZXRob2QplGp7ZAAAaD1OdJQoaj12AACMUUNvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlKZRqfmQAAGg9TnSUKGo9dgAAjFZyZWFkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUgbWV0aG9kKZRqgWQAAGg9TnSUKGo9dgAAjFVhZGQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZSBtZXRob2QplGqEZAAAaD1OdJQoaj12AACMV2NsZWFyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUgbWV0aG9kKZRqh2QAAGg9TnSUKGo9dgAAjE1EaXJlY3RVc2VyU3RhdGVDb250ZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlKZRqimQAAGg9TnSUKGo9dgAAjFdnZXRfdGltZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZS5EaXJlY3RVc2VyU3RhdGVDb250ZXh0IG1ldGhvZCmUao1kAABoPU50lChqPXYAAIxXZ2V0X3N0YXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUuRGlyZWN0VXNlclN0YXRlQ29udGV4dCBtZXRob2QplGqQZAAAaD1OdJQoaj12AACMVGNvbW1pdCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfdXNlcnN0YXRlLkRpcmVjdFVzZXJTdGF0ZUNvbnRleHQgbWV0aG9kKZRqk2QAAGg9TnSUZWr2AwAAXZQoKGo9dgAAjDZhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQgKG1vZHVsZSmUjDRtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0lGg9TnSUKGo9dgAAjEpFdmFsdWF0aW9uQ29udGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0KZRqmGQAAGg9TnSUKGo9dgAAjFJtZXRyaWNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QplGqbZAAAaD1OdJQoaj12AACMXGlzX3Jvb3RfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QplGqeZAAAaD1OdJQoaj12AACMWGhhbmRsZV9yZXN1bHQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0LkV2YWx1YXRpb25Db250ZXh0IG1ldGhvZCmUaqFkAABoPU50lChqPXYAAIxgZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QplGqkZAAAaD1OdJQoaj12AACMa3NjaGVkdWxlX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QplGqnZAAAaD1OdJQoaj12AACMYGdldF9leGVjdXRpb25fY29udGV4dCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKZRqqmQAAGg9TnSUKGo9dgAAjFhjcmVhdGVfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QplGqtZAAAaD1OdJQoaj12AACMaGNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QplGqwZAAAaD1OdJQoaj12AACMXWV4dHJhY3RfYWxsX3RpbWVycygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKZRqs2QAAGg9TnSUKGo9dgAAjFJpc19kb25lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dC5FdmFsdWF0aW9uQ29udGV4dCBtZXRob2QplGq2ZAAAaD1OdJQoaj12AACMaWdldF92YWx1ZV9vcl9ibG9ja191bnRpbF9yZWFkeSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRXZhbHVhdGlvbkNvbnRleHQgbWV0aG9kKZRquWQAAGg9TnSUKGo9dgAAjExEaXJlY3RVbm1lcmdlZFN0YXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQplGq8ZAAAaD1OdJQoaj12AACMSkRpcmVjdFN0ZXBDb250ZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQplGq/ZAAAaD1OdJQoaj12AACMWmdldF9rZXllZF9zdGF0ZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQuRGlyZWN0U3RlcENvbnRleHQgbWV0aG9kKZRqwmQAAGg9TnSUZWqMAwAAXZQoKGo9dgAAjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvciAobW9kdWxlKZSMKm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvcpRoPU50lChqPXYAAIxAVHJhbnNmb3JtRXhlY3V0b3IgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yKZRqx2QAAGg9TnSUKGo9dgAAjEVjYWxsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLlRyYW5zZm9ybUV4ZWN1dG9yIG1ldGhvZCmUaspkAABoPU50lChqPXYAAIxNYXR0ZW1wdF9jYWxsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yLlRyYW5zZm9ybUV4ZWN1dG9yIG1ldGhvZCmUas1kAABoPU50lChqPXYAAIw3RXhlY3V0b3IgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yKZRq0GQAAGg9TnSUKGo9dgAAjD1zdGFydCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5FeGVjdXRvciBtZXRob2QplGrTZAAAaD1OdJQoaj12AACMSGF3YWl0X2NvbXBsZXRpb24oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXhlY3V0b3IuRXhlY3V0b3IgbWV0aG9kKZRq1mQAAGg9TnSUKGo9dgAAjEBzaHV0ZG93bigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5leGVjdXRvci5FeGVjdXRvciBtZXRob2QplGrZZAAAaD1OdJRlal0DAABdlCgoaj12AACMNWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zIChtb2R1bGUplIwzbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zlGg9TnSUKGo9dgAAjEtMaWZ0ZWRDb21iaW5lUGVyS2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3JtcymUat5kAABoPU50lChqPXYAAIxSZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLkxpZnRlZENvbWJpbmVQZXJLZXkgbWV0aG9kKZRq4WQAAGg9TnSUKGo9dgAAjFhQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMplGrkZAAAaD1OdJQoaj12AACMZXN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcyBtZXRob2QplGrnZAAAaD1OdJQoaj12AACMYHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMgbWV0aG9kKZRq6mQAAGg9TnSUKGo9dgAAjGZmaW5pc2hfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzIG1ldGhvZCmUau1kAABoPU50lChqPXYAAIxrZGVmYXVsdF90eXBlX2hpbnRzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zLlBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzIG1ldGhvZCmUavBkAABoPU50lChqPXYAAIxFRmluaXNoQ29tYmluZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMplGrzZAAAaD1OdJQoaj12AACMTXByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuaGVscGVyX3RyYW5zZm9ybXMuRmluaXNoQ29tYmluZSBtZXRob2QplGr2ZAAAaD1OdJQoaj12AACMWGRlZmF1bHRfdHlwZV9oaW50cygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtcy5GaW5pc2hDb21iaW5lIG1ldGhvZCmUavlkAABoPU50lGVqSgMAAF2UKChqPXYAAIw1YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIgKG1vZHVsZSmUjDNtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXKUaD1OdJQoaj12AACMT1NwbGl0dGFibGVQYXJEb092ZXJyaWRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcimUav5kAABoPU50lChqPXYAAIxXbWF0Y2hlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TcGxpdHRhYmxlUGFyRG9PdmVycmlkZSBtZXRob2QplGoBZQAAaD1OdJQoaj12AACMaWdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUgbWV0aG9kKZRqBGUAAGg9TnSUKGo9dgAAjEdTcGxpdHRhYmxlUGFyRG8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKZRqB2UAAGg9TnSUKGo9dgAAjE5leHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU3BsaXR0YWJsZVBhckRvIG1ldGhvZCmUagplAABoPU50lChqPXYAAIxNRWxlbWVudEFuZFJlc3RyaWN0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcimUag1lAABoPU50lChqPXYAAIxNUGFpcldpdGhSZXN0cmljdGlvbkZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcimUahBlAABoPU50lChqPXYAAIxac3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlBhaXJXaXRoUmVzdHJpY3Rpb25GbiBtZXRob2QplGoTZQAAaD1OdJQoaj12AACMVXByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUGFpcldpdGhSZXN0cmljdGlvbkZuIG1ldGhvZCmUahZlAABoPU50lChqPXYAAIxKU3BsaXRSZXN0cmljdGlvbkZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcimUahllAABoPU50lChqPXYAAIxXc3RhcnRfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNwbGl0UmVzdHJpY3Rpb25GbiBtZXRob2QplGocZQAAaD1OdJQoaj12AACMUnByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuU3BsaXRSZXN0cmljdGlvbkZuIG1ldGhvZCmUah9lAABoPU50lChqPXYAAIxIRXhwbG9kZVdpbmRvd3NGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIplGoiZQAAaD1OdJQoaj12AACMUHByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuRXhwbG9kZVdpbmRvd3NGbiBtZXRob2QplGolZQAAaD1OdJQoaj12AACMSVJhbmRvbVVuaXF1ZUtleUZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcimUaihlAABoPU50lChqPXYAAIxRcHJvY2VzcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5SYW5kb21VbmlxdWVLZXlGbiBtZXRob2QplGorZQAAaD1OdJQoaj12AACMTFByb2Nlc3NLZXllZEVsZW1lbnRzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcimUai5lAABoPU50lChqPXYAAIxTZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NLZXllZEVsZW1lbnRzIG1ldGhvZCmUajFlAABoPU50lChqPXYAAIxlUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcimUajRlAABoPU50lChqPXYAAIxtbWF0Y2hlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUgbWV0aG9kKZRqN2UAAGg9TnSUKGo9dgAAjH9nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZSBtZXRob2QplGo6ZQAAaD1OdJQoaj12AACMXVByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKZRqPWUAAGg9TnSUKGo9dgAAjGRleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtcyBtZXRob2QplGpAZQAAaD1OdJQoaj12AACMR1Byb2Nlc3NFbGVtZW50cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIplGpDZQAAaD1OdJQoaj12AACMTmV4cGFuZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRWxlbWVudHMgbWV0aG9kKZRqRmUAAGg9TnSUKGo9dgAAjFZuZXdfcHJvY2Vzc19mbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRWxlbWVudHMgbWV0aG9kKZRqSWUAAGg9TnSUKGo9dgAAjEFQcm9jZXNzRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKZRqTGUAAGg9TnSUKGo9dgAAjE9zdGVwX2NvbnRleHQgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NGbiBhdHRyaWJ1dGUplGpPZQAAaD1OdJQoaj12AACMXXNldF9wcm9jZXNzX2VsZW1lbnRfaW52b2tlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5Qcm9jZXNzRm4gbWV0aG9kKZRqUmUAAGg9TnSUKGo9dgAAjElwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlByb2Nlc3NGbiBtZXRob2QplGpVZQAAaD1OdJQoaj12AACMUFNERlByb2Nlc3NFbGVtZW50SW52b2tlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIplGpYZQAAaD1OdJQoaj12AACMV1NERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyKZRqW2UAAGg9TnSUKGo9dgAAjFx0ZXN0X21ldGhvZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lci5TREZQcm9jZXNzRWxlbWVudEludm9rZXIgbWV0aG9kKZRqXmUAAGg9TnSUKGo9dgAAjGdpbnZva2VfcHJvY2Vzc19lbGVtZW50KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyLlNERlByb2Nlc3NFbGVtZW50SW52b2tlciBtZXRob2QplGphZQAAaD1OdJRlah8EAABdlCgoaj12AACMNmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3RfZGlyZWN0X3J1bm5lciAobW9kdWxlKZSMNG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXKUaD1OdJQoaj12AACMSVRlc3REaXJlY3RSdW5uZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3RfZGlyZWN0X3J1bm5lcimUamZlAABoPU50lChqPXYAAIxWcnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3RfZGlyZWN0X3J1bm5lci5UZXN0RGlyZWN0UnVubmVyIG1ldGhvZCmUamllAABoPU50lGVqOwMAAF2UKGo9dgAAjDRhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X3N0cmVhbV9pbXBsIChtb2R1bGUplIwybW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3Rfc3RyZWFtX2ltcGyUaD1OdJRhauQDAABdlCgoaj12AACMN2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IgKG1vZHVsZSmUjDVtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcpRoPU50lChqPXYAAIxUVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IplGpwZQAAaD1OdJQoaj12AACMYmdldF9ldmFsdWF0b3IoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5UcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeSBtZXRob2QplGpzZQAAaD1OdJQoaj12AACMbWdldF9yb290X2J1bmRsZV9wcm92aWRlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5IG1ldGhvZCmUanZlAABoPU50lChqPXYAAIxsc2hvdWxkX2V4ZWN1dGVfc2VyaWFsbHkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5UcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeSBtZXRob2QplGp5ZQAAaD1OdJQoaj12AACMTFJvb3RCdW5kbGVQcm92aWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcimUanxlAABoPU50lChqPXYAAIxdZ2V0X3Jvb3RfYnVuZGxlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yLlJvb3RCdW5kbGVQcm92aWRlciBtZXRob2QplGp/ZQAAaD1OdJQoaj12AACMU0RlZmF1bHRSb290QnVuZGxlUHJvdmlkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IplGqCZQAAaD1OdJQoaj12AACMZGdldF9yb290X2J1bmRsZXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvci5EZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyIG1ldGhvZCmUaoVlAABoPU50lGVq4QMAAF2UKChqPXYAAIwoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCAobW9kdWxlKZSMJm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlslGg9TnSUKGo9dgAAjDpUcmFuc2Zvcm1SZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwplGqKZQAAaD1OdJQoaj12AACMNlRpbWVyRmlyaW5nIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsKZRqjWUAAGg9TnSUKGo9dgAAjDhLZXllZFdvcmtJdGVtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC51dGlsKZRqkGUAAGg9TnSUZWqLAwAAXZQoKGo9dgAAjDVhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlciAobW9kdWxlKZSMM21vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlcpRoPU50lChqPXYAAIxIV2F0ZXJtYXJrTWFuYWdlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIplGqVZQAAaD1OdJQoaj12AACMW1dBVEVSTUFSS19QT1NfSU5GIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIGF0dHJpYnV0ZSmUaphlAABoPU50lChqPXYAAIxbV0FURVJNQVJLX05FR19JTkYgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyLldhdGVybWFya01hbmFnZXIgYXR0cmlidXRlKZRqm2UAAGg9TnSUKGo9dgAAjFdnZXRfd2F0ZXJtYXJrcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIG1ldGhvZCmUap5lAABoPU50lChqPXYAAIxadXBkYXRlX3dhdGVybWFya3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIuV2F0ZXJtYXJrTWFuYWdlciBtZXRob2QplGqhZQAAaD1OdJQoaj12AACMW2V4dHJhY3RfYWxsX3RpbWVycygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlci5XYXRlcm1hcmtNYW5hZ2VyIG1ldGhvZCmUaqRlAABoPU50lGVqVAMAAF2UKGo9dgAAjChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIChtb2R1bGUplIwmbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmWUaD1OdJRhauIDAABdlCgoaj12AACMP2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYiAobW9kdWxlKZSMPW1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2KUaD1OdJQoaj12AACMVkJhY2tncm91bmRDYWNoaW5nSm9iIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IplGqrZQAAaD1OdJQoaj12AACMXmlzX2RvbmUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5iYWNrZ3JvdW5kX2NhY2hpbmdfam9iLkJhY2tncm91bmRDYWNoaW5nSm9iIG1ldGhvZCmUaq5lAABoPU50lChqPXYAAIxhaXNfcnVubmluZygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IuQmFja2dyb3VuZENhY2hpbmdKb2IgbWV0aG9kKZRqsWUAAGg9TnSUKGo9dgAAjF1jYW5jZWwoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5iYWNrZ3JvdW5kX2NhY2hpbmdfam9iLkJhY2tncm91bmRDYWNoaW5nSm9iIG1ldGhvZCmUarRlAABoPU50lChqPXYAAIxqYXR0ZW1wdF90b19ydW5fYmFja2dyb3VuZF9jYWNoaW5nX2pvYigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5iYWNrZ3JvdW5kX2NhY2hpbmdfam9iKZRqt2UAAGg9TnSUKGo9dgAAjGVpc19iYWNrZ3JvdW5kX2NhY2hpbmdfam9iX25lZWRlZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5iYWNrZ3JvdW5kX2NhY2hpbmdfam9iKZRqumUAAGg9TnSUKGo9dgAAjFhoYXNfc291cmNlX3RvX2NhY2hlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IplGq9ZQAAaD1OdJQoaj12AACMbWF0dGVtcHRfdG9fY2FuY2VsX2JhY2tncm91bmRfY2FjaGluZ19qb2IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYimUasBlAABoPU50lChqPXYAAIxoYXR0ZW1wdF90b19zdG9wX3Rlc3Rfc3RyZWFtX3NlcnZpY2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYimUasNlAABoPU50lChqPXYAAIxlaXNfYV90ZXN0X3N0cmVhbV9zZXJ2aWNlX3J1bm5pbmcoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYimUasZlAABoPU50lChqPXYAAIxfaXNfc291cmNlX3RvX2NhY2hlX2NoYW5nZWQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuYmFja2dyb3VuZF9jYWNoaW5nX2pvYimUasllAABoPU50lChqPXYAAIxmZXh0cmFjdF9zb3VyY2VfdG9fY2FjaGVfc2lnbmF0dXJlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2IplGrMZQAAaD1OdJRlasQDAABdlCgoaj12AACMNmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlciAobW9kdWxlKZSMNG1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXKUaD1OdJQoaj12AACMRUNhY2hlTWFuYWdlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyKZRq0WUAAGg9TnSUKGo9dgAAjExleGlzdHMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlciBtZXRob2QplGrUZQAAaD1OdJQoaj12AACMV2lzX2xhdGVzdF92ZXJzaW9uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5DYWNoZU1hbmFnZXIgbWV0aG9kKZRq12UAAGg9TnSUKGo9dgAAjEpyZWFkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5DYWNoZU1hbmFnZXIgbWV0aG9kKZRq2mUAAGg9TnSUKGo9dgAAjExzb3VyY2UoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlciBtZXRob2QplGrdZQAAaD1OdJQoaj12AACMSnNpbmsoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkNhY2hlTWFuYWdlciBtZXRob2QplGrgZQAAaD1OdJQoaj12AACMUXNhdmVfcGNvZGVyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5DYWNoZU1hbmFnZXIgbWV0aG9kKZRq42UAAGg9TnSUKGo9dgAAjFFsb2FkX3Bjb2RlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VyIG1ldGhvZCmUauZlAABoPU50lChqPXYAAIxNY2xlYW51cCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuQ2FjaGVNYW5hZ2VyIG1ldGhvZCmUaullAABoPU50lChqPXYAAIxORmlsZUJhc2VkQ2FjaGVNYW5hZ2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIplGrsZQAAaD1OdJQoaj12AACMVWV4aXN0cygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyIG1ldGhvZCmUau9lAABoPU50lChqPXYAAIxac2F2ZV9wY29kZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlciBtZXRob2QplGryZQAAaD1OdJQoaj12AACMWmxvYWRfcGNvZGVyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIgbWV0aG9kKZRq9WUAAGg9TnSUKGo9dgAAjFNyZWFkKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5GaWxlQmFzZWRDYWNoZU1hbmFnZXIgbWV0aG9kKZRq+GUAAGg9TnSUKGo9dgAAjFVzb3VyY2UoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlciBtZXRob2QplGr7ZQAAaD1OdJQoaj12AACMU3NpbmsoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlciBtZXRob2QplGr+ZQAAaD1OdJQoaj12AACMVmNsZWFudXAoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLkZpbGVCYXNlZENhY2hlTWFuYWdlciBtZXRob2QplGoBZgAAaD1OdJQoaj12AACMQlJlYWRDYWNoZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyKZRqBGYAAGg9TnSUKGo9dgAAjElleHBhbmQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoZV9tYW5hZ2VyLlJlYWRDYWNoZSBtZXRob2QplGoHZgAAaD1OdJQoaj12AACMQ1dyaXRlQ2FjaGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcimUagpmAABoPU50lChqPXYAAIxKZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5Xcml0ZUNhY2hlIG1ldGhvZCmUag1mAABoPU50lChqPXYAAIxQU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcimUahBmAABoPU50lChqPXYAAIxXZW5jb2RlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlci5TYWZlRmFzdFByaW1pdGl2ZXNDb2RlciBtZXRob2QplGoTZgAAaD1OdJQoaj12AACMV2RlY29kZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXIuU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIgbWV0aG9kKZRqFmYAAGg9TnSUZWoPBAAAXZQoaj12AACMMGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGluZyAobW9kdWxlKZSMLm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hpbmeUaD1OdJRhasUDAABdlCgoaj12AACMQGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGluZy5zdHJlYW1pbmdfY2FjaGUgKG1vZHVsZSmUjD5tb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoaW5nLnN0cmVhbWluZ19jYWNoZZRoPU50lChqPXYAAIxRU3RyZWFtaW5nQ2FjaGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGluZy5zdHJlYW1pbmdfY2FjaGUplGodZgAAaD1OdJQoaj12AACMWFN0cmVhbWluZ0NhY2hlLlJlYWRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoaW5nLnN0cmVhbWluZ19jYWNoZSmUaiBmAABoPU50lChqPXYAAIxdcmVhZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hpbmcuc3RyZWFtaW5nX2NhY2hlLlN0cmVhbWluZ0NhY2hlLlJlYWRlciBtZXRob2QplGojZgAAaD1OdJQoaj12AACMWHJlYWRlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hpbmcuc3RyZWFtaW5nX2NhY2hlLlN0cmVhbWluZ0NhY2hlIG1ldGhvZCmUaiZmAABoPU50lGVqdwMAAF2UKGo9dgAAjDBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkgKG1vZHVsZSmUjC5tb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5lGg9TnSUYWpHAwAAXZQoKGo9dgAAjEBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyIChtb2R1bGUplIw+bW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5kaXNwbGF5X21hbmFnZXKUaD1OdJQoaj12AACMUURpc3BsYXlNYW5hZ2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyKZRqLWYAAGg9TnSUKGo9dgAAjGB1cGRhdGVfZGlzcGxheSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyLkRpc3BsYXlNYW5hZ2VyIG1ldGhvZCmUajBmAABoPU50lChqPXYAAIxnc3RhcnRfcGVyaW9kaWNfdXBkYXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5kaXNwbGF5X21hbmFnZXIuRGlzcGxheU1hbmFnZXIgbWV0aG9kKZRqM2YAAGg9TnSUKGo9dgAAjGZzdG9wX3BlcmlvZGljX3VwZGF0ZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VyLkRpc3BsYXlNYW5hZ2VyIG1ldGhvZCmUajZmAABoPU50lGVqhwMAAF2UKChqPXYAAIxLYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoIChtb2R1bGUplIxJbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaJRoPU50lChqPXYAAIxZbmljZV9zdHIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaCmUajtmAABoPU50lChqPXYAAIxeZm9ybWF0X3NhbXBsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoKZRqPmYAAGg9TnSUKGo9dgAAjGZJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGggKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaCmUakFmAABoPU50lChqPXYAAIx/dXBkYXRlX3Bjb2xsZWN0aW9uX3N0YXRzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5pbnRlcmFjdGl2ZV9waXBlbGluZV9ncmFwaC5JbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGggbWV0aG9kKZRqRGYAAGg9TnSUZWpbAwAAXZQoKGo9dgAAjERhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGNvbGxfdmlzdWFsaXphdGlvbiAobW9kdWxlKZSMQm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGNvbGxfdmlzdWFsaXphdGlvbpRoPU50lChqPXYAAIxTdmlzdWFsaXplKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGNvbGxfdmlzdWFsaXphdGlvbimUaklmAABoPU50lChqPXYAAIxfUENvbGxlY3Rpb25WaXN1YWxpemF0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGNvbGxfdmlzdWFsaXphdGlvbimUakxmAABoPU50lChqPXYAAIxyZGlzcGxheV9wbGFpbl90ZXh0KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5wY29sbF92aXN1YWxpemF0aW9uLlBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbiBtZXRob2QplGpPZgAAaD1OdJQoaj12AACMbmRpc3BsYXlfZmFjZXRzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5wY29sbF92aXN1YWxpemF0aW9uLlBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbiBtZXRob2QplGpSZgAAaD1OdJRlanIDAABdlCgoaj12AACMP2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaCAobW9kdWxlKZSMPW1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGiUaD1OdJQoaj12AACMT1BpcGVsaW5lR3JhcGggKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaCmUaldmAABoPU50lChqPXYAAIxXZ2V0X2RvdCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGguUGlwZWxpbmVHcmFwaCBtZXRob2QplGpaZgAAaD1OdJQoaj12AACMXWRpc3BsYXlfZ3JhcGgoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoLlBpcGVsaW5lR3JhcGggbWV0aG9kKZRqXWYAAGg9TnSUZWovAwAAXZQoKGo9dgAAjEhhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIgKG1vZHVsZSmUjEZtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVylGg9TnSUKGo9dgAAjGBQaXBlbGluZUdyYXBoUmVuZGVyZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlcimUamJmAABoPU50lChqPXYAAIxtb3B0aW9uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5QaXBlbGluZUdyYXBoUmVuZGVyZXIgY2xhc3MgbWV0aG9kKZRqZWYAAGg9TnSUKGo9dgAAjHZyZW5kZXJfcGlwZWxpbmVfZ3JhcGgoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlBpcGVsaW5lR3JhcGhSZW5kZXJlciBtZXRob2QplGpoZgAAaD1OdJQoaj12AACMV011dGVSZW5kZXJlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyKZRqa2YAAGg9TnSUKGo9dgAAjGRvcHRpb24oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLk11dGVSZW5kZXJlciBjbGFzcyBtZXRob2QplGpuZgAAaD1OdJQoaj12AACMbXJlbmRlcl9waXBlbGluZV9ncmFwaCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuTXV0ZVJlbmRlcmVyIG1ldGhvZCmUanFmAABoPU50lChqPXYAAIxXVGV4dFJlbmRlcmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIplGp0ZgAAaD1OdJQoaj12AACMZG9wdGlvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuVGV4dFJlbmRlcmVyIGNsYXNzIG1ldGhvZCmUandmAABoPU50lChqPXYAAIxtcmVuZGVyX3BpcGVsaW5lX2dyYXBoKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlci5UZXh0UmVuZGVyZXIgbWV0aG9kKZRqemYAAGg9TnSUKGo9dgAAjFhQeWRvdFJlbmRlcmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIplGp9ZgAAaD1OdJQoaj12AACMZW9wdGlvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuUHlkb3RSZW5kZXJlciBjbGFzcyBtZXRob2QplGqAZgAAaD1OdJQoaj12AACMbnJlbmRlcl9waXBlbGluZV9ncmFwaCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuUHlkb3RSZW5kZXJlciBtZXRob2QplGqDZgAAaD1OdJQoaj12AACMWmdldF9yZW5kZXJlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyKZRqhmYAAGg9TnSUZWogBAAAXZQoKGo9dgAAjDlhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2JlYW0gKG1vZHVsZSmUjDdtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtlGg9TnSUKGo9dgAAjENPcHRpb25zIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2JlYW0plGqLZgAAaD1OdJQoaj12AACMWmVuYWJsZV9jYXB0dXJlX3JlcGxheSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtLk9wdGlvbnMgYXR0cmlidXRlKZRqjmYAAGg9TnSUKGo9dgAAjFdjYXB0dXJhYmxlX3NvdXJjZXMgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfYmVhbS5PcHRpb25zIGF0dHJpYnV0ZSmUapFmAABoPU50lChqPXYAAIxVY2FwdHVyZV9kdXJhdGlvbiAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtLk9wdGlvbnMgYXR0cmlidXRlKZRqlGYAAGg9TnSUKGo9dgAAjER3YXRjaCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtKZRql2YAAGg9TnSUKGo9dgAAjENzaG93KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2JlYW0plGqaZgAAaD1OdJQoaj12AACMUmV2aWN0X2NhcHR1cmVkX2RhdGEoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfYmVhbSmUap1mAABoPU50lGVqRQMAAF2UKChqPXYAAIxAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudCAobW9kdWxlKZSMPm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50lGg9TnSUKGo9dgAAjFFjdXJyZW50X2VudigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudCmUaqJmAABoPU50lChqPXYAAIxNbmV3X2VudigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudCmUaqVmAABoPU50lChqPXYAAIxZSW50ZXJhY3RpdmVFbnZpcm9ubWVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudCmUaqhmAABoPU50lChqPXYAAIxib3B0aW9ucyAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IGF0dHJpYnV0ZSmUaqtmAABoPU50lChqPXYAAIxuaXNfcHlfdmVyc2lvbl9yZWFkeSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IGF0dHJpYnV0ZSmUaq5mAABoPU50lChqPXYAAIxvaXNfaW50ZXJhY3RpdmVfcmVhZHkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBhdHRyaWJ1dGUplGqxZgAAaD1OdJQoaj12AACMaGlzX2luX2lweXRob24gKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBhdHRyaWJ1dGUplGq0ZgAAaD1OdJQoaj12AACMaWlzX2luX25vdGVib29rIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQgYXR0cmlidXRlKZRqt2YAAGg9TnSUKGo9dgAAjGFjbGVhbnVwKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGq6ZgAAaD1OdJQoaj12AACMX3dhdGNoKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGq9ZgAAaD1OdJQoaj12AACMYndhdGNoaW5nKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGrAZgAAaD1OdJQoaj12AACMa3NldF9jYWNoZV9tYW5hZ2VyKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGrDZgAAaD1OdJQoaj12AACMZ2NhY2hlX21hbmFnZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IG1ldGhvZCmUasZmAABoPU50lChqPXYAAIxtc2V0X3BpcGVsaW5lX3Jlc3VsdCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQgbWV0aG9kKZRqyWYAAGg9TnSUKGo9dgAAjG9ldmljdF9waXBlbGluZV9yZXN1bHQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IG1ldGhvZCmUasxmAABoPU50lChqPXYAAIxpcGlwZWxpbmVfcmVzdWx0KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGrPZgAAaD1OdJQoaj12AACMdHNldF9iYWNrZ3JvdW5kX2NhY2hpbmdfam9iKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGrSZgAAaD1OdJQoaj12AACMdGdldF9iYWNrZ3JvdW5kX2NhY2hpbmdfam9iKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGrVZgAAaD1OdJQoaj12AACMfHNldF90ZXN0X3N0cmVhbV9zZXJ2aWNlX2NvbnRyb2xsZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IG1ldGhvZCmUathmAABoPU50lChqPXYAAIx8Z2V0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQgbWV0aG9kKZRq22YAAGg9TnSUKGo9dgAAjH5ldmljdF90ZXN0X3N0cmVhbV9zZXJ2aWNlX2NvbnRyb2xsZXIoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IG1ldGhvZCmUat5mAABoPU50lChqPXYAAIxnaXNfdGVybWluYXRlZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50LkludGVyYWN0aXZlRW52aXJvbm1lbnQgbWV0aG9kKZRq4WYAAGg9TnSUKGo9dgAAjHVzZXRfY2FjaGVkX3NvdXJjZV9zaWduYXR1cmUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IG1ldGhvZCmUauRmAABoPU50lChqPXYAAIx1Z2V0X2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGrnZgAAaD1OdJQoaj12AACMd2V2aWN0X2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGrqZgAAaD1OdJQoaj12AACMbnRyYWNrX3VzZXJfcGlwZWxpbmVzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGrtZgAAaD1OdJQoaj12AACMcXRyYWNrZWRfdXNlcl9waXBlbGluZXMgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBhdHRyaWJ1dGUplGrwZgAAaD1OdJQoaj12AACMc21hcmtfcGNvbGxlY3Rpb25fY29tcHV0ZWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IG1ldGhvZCmUavNmAABoPU50lChqPXYAAIx1ZXZpY3RfY29tcHV0ZWRfcGNvbGxlY3Rpb25zKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQuSW50ZXJhY3RpdmVFbnZpcm9ubWVudCBtZXRob2QplGr2ZgAAaD1OdJQoaj12AACMcGNvbXB1dGVkX3Bjb2xsZWN0aW9ucyAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudC5JbnRlcmFjdGl2ZUVudmlyb25tZW50IGF0dHJpYnV0ZSmUavlmAABoPU50lGVqmQMAAF2UKChqPXYAAIw7YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIgKG1vZHVsZSmUjDltb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXKUaD1OdJQoaj12AACMT0ludGVyYWN0aXZlUnVubmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lcimUav5mAABoPU50lChqPXYAAIxjaXNfZm5hcGlfY29tcGF0aWJsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lciBtZXRob2QplGoBZwAAaD1OdJQoaj12AACMYXNldF9yZW5kZXJfb3B0aW9uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyIG1ldGhvZCmUagRnAABoPU50lChqPXYAAIxdc3RhcnRfc2Vzc2lvbigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lciBtZXRob2QplGoHZwAAaD1OdJQoaj12AACMW2VuZF9zZXNzaW9uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyIG1ldGhvZCmUagpnAABoPU50lChqPXYAAIxXY2xlYW51cCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5JbnRlcmFjdGl2ZVJ1bm5lciBtZXRob2QplGoNZwAAaD1OdJQoaj12AACMVWFwcGx5KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyIG1ldGhvZCmUahBnAABoPU50lChqPXYAAIxccnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyLkludGVyYWN0aXZlUnVubmVyIG1ldGhvZCmUahNnAABoPU50lChqPXYAAIxMUGlwZWxpbmVSZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuaW50ZXJhY3RpdmVfcnVubmVyKZRqFmcAAGg9TnSUKGo9dgAAjF53YWl0X3VudGlsX2ZpbmlzaCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QplGoZZwAAaD1OdJQoaj12AACMUGdldCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QplGocZwAAaD1OdJQoaj12AACMU2NhbmNlbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QplGofZwAAaD1OdJRlatMDAABdlChqPXYAAIwwYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zIChtb2R1bGUplIwubW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9uc5RoPU50lGFqMQMAAF2UKChqPXYAAIxAYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmNhcHR1cmVfY29udHJvbCAobW9kdWxlKZSMPm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLm9wdGlvbnMuY2FwdHVyZV9jb250cm9slGg9TnSUKGo9dgAAjFFDYXB0dXJlQ29udHJvbCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmNhcHR1cmVfY29udHJvbCmUaiZnAABoPU50lChqPXYAAIxpaXNfY2FwdHVyZV9zaXplX3JlYWNoZWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmNhcHR1cmVfY29udHJvbC5DYXB0dXJlQ29udHJvbCBtZXRob2QplGopZwAAaD1OdJQoaj12AACMWWV2aWN0X2NhcHR1cmVkX2RhdGEoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5jYXB0dXJlX2NvbnRyb2wplGosZwAAaD1OdJRlahkEAABdlCgoaj12AACMRGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5pbnRlcmFjdGl2ZV9vcHRpb25zIChtb2R1bGUplIxCbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5pbnRlcmFjdGl2ZV9vcHRpb25zlGg9TnSUKGo9dgAAjFlJbnRlcmFjdGl2ZU9wdGlvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5pbnRlcmFjdGl2ZV9vcHRpb25zKZRqMWcAAGg9TnSUKGo9dgAAjGpjYXB0dXJlX2NvbnRyb2wgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5pbnRlcmFjdGl2ZV9vcHRpb25zLkludGVyYWN0aXZlT3B0aW9ucyBhdHRyaWJ1dGUplGo0ZwAAaD1OdJRlasMDAABdlCgoaj12AACMOmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIgKG1vZHVsZSmUjDhtb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplcpRoPU50lChqPXYAAIxNUGlwZWxpbmVBbmFseXplciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplcimUajlnAABoPU50lChqPXYAAIxbcGlwZWxpbmVfaW5mbygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIgbWV0aG9kKZRqPGcAAGg9TnSUKGo9dgAAjGdwaXBlbGluZV9wcm90b190b19leGVjdXRlKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplciBtZXRob2QplGo/ZwAAaD1OdJQoaj12AACMZXRsX3JlZmVyZW5jZWRfcGNvbGxfaWRzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVBbmFseXplciBtZXRob2QplGpCZwAAaD1OdJQoaj12AACMY3RsX3JlcXVpcmVkX3RyYW5zX2lkcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIgbWV0aG9kKZRqRWcAAGg9TnSUKGo9dgAAjFljYWNoZXNfdXNlZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIgbWV0aG9kKZRqSGcAAGg9TnSUKGo9dgAAjFxyZWFkX2NhY2hlX2lkcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lQW5hbHl6ZXIgbWV0aG9kKZRqS2cAAGg9TnSUKGo9dgAAjF13cml0ZV9jYWNoZV9pZHMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUFuYWx5emVyIG1ldGhvZCmUak5nAABoPU50lChqPXYAAIxJUGlwZWxpbmVJbmZvIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyKZRqUWcAAGg9TnSUKGo9dgAAjFphbGxfcGNvbGxlY3Rpb25zKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVJbmZvIG1ldGhvZCmUalRnAABoPU50lChqPXYAAIxbbGVhZl9wY29sbGVjdGlvbnMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplci5QaXBlbGluZUluZm8gbWV0aG9kKZRqV2cAAGg9TnSUKGo9dgAAjFJwcm9kdWNlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyLlBpcGVsaW5lSW5mbyBtZXRob2QplGpaZwAAaD1OdJQoaj12AACMVWNhY2hlX2xhYmVsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVJbmZvIG1ldGhvZCmUal1nAABoPU50lChqPXYAAIxUUGlwZWxpbmVJbmZvLkRlcml2YXRpb24gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIplGpgZwAAaD1OdJQoaj12AACMYGNhY2hlX2xhYmVsKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVJbmZvLkRlcml2YXRpb24gbWV0aG9kKZRqY2cAAGg9TnSUKGo9dgAAjFlqc29uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfYW5hbHl6ZXIuUGlwZWxpbmVJbmZvLkRlcml2YXRpb24gbWV0aG9kKZRqZmcAAGg9TnSUKGo9dgAAjE1zZXRfcHJvdG9fbWFwKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVyKZRqaWcAAGg9TnSUZWrKAwAAXZQoKGo9dgAAjDphcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2ZyYWdtZW50IChtb2R1bGUplIw4bW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfZnJhZ21lbnSUaD1OdJQoaj12AACMTVBpcGVsaW5lRnJhZ21lbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfZnJhZ21lbnQplGpuZwAAaD1OdJQoaj12AACMXWRlZHVjZV9mcmFnbWVudCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2ZyYWdtZW50LlBpcGVsaW5lRnJhZ21lbnQgbWV0aG9kKZRqcWcAAGg9TnSUKGo9dgAAjFFydW4oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9mcmFnbWVudC5QaXBlbGluZUZyYWdtZW50IG1ldGhvZCmUanRnAABoPU50lGVqPQMAAF2UKChqPXYAAIw8YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50IChtb2R1bGUplIw6bW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudJRoPU50lChqPXYAAIxRUGlwZWxpbmVJbnN0cnVtZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQplGp5ZwAAaD1OdJQoaj12AACMbWluc3RydW1lbnRlZF9waXBlbGluZV9wcm90bygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuUGlwZWxpbmVJbnN0cnVtZW50IG1ldGhvZCmUanxnAABoPU50lChqPXYAAIxzYmFja2dyb3VuZF9jYWNoaW5nX3BpcGVsaW5lX3Byb3RvKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5QaXBlbGluZUluc3RydW1lbnQgbWV0aG9kKZRqf2cAAGg9TnSUKGo9dgAAjGhoYXNfdW5ib3VuZGVkX3NvdXJjZXMgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5QaXBlbGluZUluc3RydW1lbnQgYXR0cmlidXRlKZRqgmcAAGg9TnSUKGo9dgAAjF1jYWNoZWFibGVzIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuUGlwZWxpbmVJbnN0cnVtZW50IGF0dHJpYnV0ZSmUaoVnAABoPU50lChqPXYAAIxlcGNvbGxzX3RvX3Bjb2xsX2lkIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuUGlwZWxpbmVJbnN0cnVtZW50IGF0dHJpYnV0ZSmUaohnAABoPU50lChqPXYAAIxqb3JpZ2luYWxfcGlwZWxpbmVfcHJvdG8gKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5QaXBlbGluZUluc3RydW1lbnQgYXR0cmlidXRlKZRqi2cAAGg9TnSUKGo9dgAAjGRvcmlnaW5hbF9waXBlbGluZSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudCBhdHRyaWJ1dGUplGqOZwAAaD1OdJQoaj12AACMYHVzZXJfcGlwZWxpbmUgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudC5QaXBlbGluZUluc3RydW1lbnQgYXR0cmlidXRlKZRqkWcAAGg9TnSUKGo9dgAAjG1ydW5uZXJfcGNvbGxfdG9fdXNlcl9wY29sbCAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudCBhdHRyaWJ1dGUplGqUZwAAaD1OdJQoaj12AACMXGluc3RydW1lbnQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudCBtZXRob2QplGqXZwAAaD1OdJQoaj12AACMXHByZXByb2Nlc3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50LlBpcGVsaW5lSW5zdHJ1bWVudCBtZXRob2QplGqaZwAAaD1OdJQoaj12AACMW2NhY2hlX2tleSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuUGlwZWxpbmVJbnN0cnVtZW50IG1ldGhvZCmUap1nAABoPU50lChqPXYAAIxrY2FjaGVhYmxlX3Zhcl9ieV9wY29sbF9pZCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQuUGlwZWxpbmVJbnN0cnVtZW50IG1ldGhvZCmUaqBnAABoPU50lChqPXYAAIxbYnVpbGRfcGlwZWxpbmVfaW5zdHJ1bWVudCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50KZRqo2cAAGg9TnSUKGo9dgAAjExjYWNoZWFibGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQplGqmZwAAaD1OdJQoaj12AACMT2NhY2hlYWJsZV9rZXkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudCmUaqlnAABoPU50lChqPXYAAIxXaGFzX3VuYm91bmRlZF9zb3VyY2VzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQplGqsZwAAaD1OdJQoaj12AACMU3VuYm91bmRlZF9zb3VyY2VzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2luc3RydW1lbnQplGqvZwAAaD1OdJQoaj12AACMVHBjb2xsc190b19wY29sbF9pZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9pbnN0cnVtZW50KZRqsmcAAGg9TnSUZWpEAwAAXZQoaj12AACMMGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUudGVzdGluZyAobW9kdWxlKZSMLm1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnRlc3RpbmeUaD1OdJRhaq4DAABdlCgoaj12AACMPWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUudGVzdGluZy5tb2NrX2lweXRob24gKG1vZHVsZSmUjDttb2R1bGUtYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLm1vY2tfaXB5dGhvbpRoPU50lChqPXYAAIxTbW9ja19nZXRfaXB5dGhvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLm1vY2tfaXB5dGhvbimUarlnAABoPU50lGVq/QMAAF2UKChqPXYAAIxDYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLnBpcGVsaW5lX2Fzc2VydGlvbiAobW9kdWxlKZSMQW1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnRlc3RpbmcucGlwZWxpbmVfYXNzZXJ0aW9ulGg9TnSUKGo9dgAAjF5hc3NlcnRfcGlwZWxpbmVfZXF1YWwoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUudGVzdGluZy5waXBlbGluZV9hc3NlcnRpb24plGq+ZwAAaD1OdJQoaj12AACMZGFzc2VydF9waXBlbGluZV9wcm90b19lcXVhbCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLnBpcGVsaW5lX2Fzc2VydGlvbimUasFnAABoPU50lGVqDAQAAF2UKGo9dgAAjCVhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVybmFsIChtb2R1bGUplIwjbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJuYWyUaD1OdJRhahcEAABdlChqPXYAAIwrYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcm5hbC5uYW1lcyAobW9kdWxlKZSMKW1vZHVsZS1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVybmFsLm5hbWVzlGg9TnSUYWq0AwAAXZQoaj12AACMIGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iIChtb2R1bGUplIwebW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuam9ilGg9TnSUYWpJAwAAXZQoKGo9dgAAjChhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VyIChtb2R1bGUplIwmbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXKUaD1OdJQoaj12AACMO0RvY2tlclJQQ01hbmFnZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXIplGrMZwAAaD1OdJRlap8DAABdlCgoaj12AACMJmFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzIChtb2R1bGUplIwkbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzlGg9TnSUKGo9dgAAjDpkaWN0X3RvX3N0cnVjdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0ucnVubmVycy5qb2IudXRpbHMplGrRZwAAaD1OdJQoaj12AACMOnN0cnVjdF90b19kaWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi51dGlscymUatRnAABoPU50lGVqcAMAAF2UKChqPXYAAIwtYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0IChtb2R1bGUplIwrbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dJRoPU50lChqPXYAAIw/UGlwZWxpbmVDb250ZXh0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQplGrZZwAAaD1OdJQoaj12AACMT2FkZF9yZXF1aXJlbWVudCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0IG1ldGhvZCmUatxnAABoPU50lChqPXYAAIxMcmVxdWlyZW1lbnRzKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQgbWV0aG9kKZRq32cAAGg9TnSUKGo9dgAAjFpjb2Rlcl9pZF9mcm9tX2VsZW1lbnRfdHlwZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0IG1ldGhvZCmUauJnAABoPU50lChqPXYAAIxaZWxlbWVudF90eXBlX2Zyb21fY29kZXJfaWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dCBtZXRob2QplGrlZwAAaD1OdJQoaj12AACMVmZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0IHN0YXRpYyBtZXRob2QplGroZwAAaD1OdJQoaj12AACMTXRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dCBtZXRob2QplGrrZwAAaD1OdJQoaj12AACMVmRlZmF1bHRfZW52aXJvbm1lbnRfaWQoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dCBtZXRob2QplGruZwAAaD1OdJRlajoDAABdlCgoaj12AACMI2FwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIChtb2R1bGUplIwhbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVylGg9TnSUKGo9dgAAjDRQaXBlbGluZVJ1bm5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIplGrzZwAAaD1OdJQoaj12AACMOHJ1bigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QplGr2ZwAAaD1OdJQoaj12AACMPnJ1bl9hc3luYygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QplGr5ZwAAaD1OdJQoaj12AACMQXJ1bl9waXBlbGluZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QplGr8ZwAAaD1OdJQoaj12AACMOmFwcGx5KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyIG1ldGhvZCmUav9nAABoPU50lChqPXYAAIxFdmlzaXRfdHJhbnNmb3JtcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QplGoCaAAAaD1OdJQoaj12AACMRWFwcGx5X1BUcmFuc2Zvcm0oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIgbWV0aG9kKZRqBWgAAGg9TnSUKGo9dgAAjEJydW5fdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyIG1ldGhvZCmUaghoAABoPU50lChqPXYAAIxIaXNfZm5hcGlfY29tcGF0aWJsZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lciBtZXRob2QplGoLaAAAaD1OdJQoaj12AACMM1BpcGVsaW5lU3RhdGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyKZRqDmgAAGg9TnSUKGo9dgAAjDxVTktOT1dOIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSmUahFoAABoPU50lChqPXYAAIw9U1RBUlRJTkcgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKZRqFGgAAGg9TnSUKGo9dgAAjDxTVE9QUEVEIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSmUahdoAABoPU50lChqPXYAAIw8UlVOTklORyAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZSBhdHRyaWJ1dGUplGoaaAAAaD1OdJQoaj12AACMOURPTkUgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKZRqHWgAAGg9TnSUKGo9dgAAjDtGQUlMRUQgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKZRqIGgAAGg9TnSUKGo9dgAAjD5DQU5DRUxMRUQgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKZRqI2gAAGg9TnSUKGo9dgAAjDxVUERBVEVEIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSmUaiZoAABoPU50lChqPXYAAIw9RFJBSU5JTkcgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKZRqKWgAAGg9TnSUKGo9dgAAjDxEUkFJTkVEIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGF0dHJpYnV0ZSmUaixoAABoPU50lChqPXYAAIw8UEVORElORyAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVTdGF0ZSBhdHRyaWJ1dGUplGovaAAAaD1OdJQoaj12AACMP0NBTkNFTExJTkcgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKZRqMmgAAGg9TnSUKGo9dgAAjEFVTlJFQ09HTklaRUQgKGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lU3RhdGUgYXR0cmlidXRlKZRqNWgAAGg9TnSUKGo9dgAAjEVpc190ZXJtaW5hbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlIGNsYXNzIG1ldGhvZCmUajhoAABoPU50lChqPXYAAIw0UGlwZWxpbmVSZXN1bHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyKZRqO2gAAGg9TnSUKGo9dgAAjDtzdGF0ZSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQgYXR0cmlidXRlKZRqPmgAAGg9TnSUKGo9dgAAjEZ3YWl0X3VudGlsX2ZpbmlzaCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QplGpBaAAAaD1OdJQoaj12AACMO2NhbmNlbCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QplGpEaAAAaD1OdJQoaj12AACMPG1ldHJpY3MoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQgbWV0aG9kKZRqR2gAAGg9TnSUKGo9dgAAjEZhZ2dyZWdhdGVkX3ZhbHVlcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCBtZXRob2QplGpKaAAAaD1OdJRlalkDAABdlCgoaj12AACMJmFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzIChtb2R1bGUplIwkbW9kdWxlLWFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzlGg9TnSUKGo9dgAAjDtTcGxpdFJlc3VsdFByaW1hcnkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzKZRqT2gAAGg9TnSUKGo9dgAAjEpwcmltYXJ5X3ZhbHVlIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5TcGxpdFJlc3VsdFByaW1hcnkgYXR0cmlidXRlKZRqUmgAAGg9TnSUKGo9dgAAjDxTcGxpdFJlc3VsdFJlc2lkdWFsIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscymUalVoAABoPU50lChqPXYAAIxPY3VycmVudF93YXRlcm1hcmsgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlNwbGl0UmVzdWx0UmVzaWR1YWwgYXR0cmlidXRlKZRqWGgAAGg9TnSUKGo9dgAAjFBkZWZlcnJlZF90aW1lc3RhbXAgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlNwbGl0UmVzdWx0UmVzaWR1YWwgYXR0cmlidXRlKZRqW2gAAGg9TnSUKGo9dgAAjExyZXNpZHVhbF92YWx1ZSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuU3BsaXRSZXN1bHRSZXNpZHVhbCBhdHRyaWJ1dGUplGpeaAAAaD1OdJQoaj12AACMRVRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzKZRqYWgAAGg9TnSUKGo9dgAAjFljdXJyZW50X3Jlc3RyaWN0aW9uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKZRqZGgAAGg9TnSUKGo9dgAAjE90cnlfY2xhaW0oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QplGpnaAAAaD1OdJQoaj12AACMVWRlZmVyX3JlbWFpbmRlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5UaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZCmUampoAABoPU50lChqPXYAAIxQY2hlY2tfZG9uZSgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5UaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZCmUam1oAABoPU50lChqPXYAAIxWY3VycmVudF9wcm9ncmVzcygpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5UaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VyIG1ldGhvZCmUanBoAABoPU50lChqPXYAAIxPdHJ5X3NwbGl0KCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIgbWV0aG9kKZRqc2gAAGg9TnSUKGo9dgAAjFVkZWZlcnJlZF9zdGF0dXMoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlciBtZXRob2QplGp2aAAAaD1OdJQoaj12AACMP1Jlc3RyaWN0aW9uVHJhY2tlclZpZXcgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzKZRqeWgAAGg9TnSUKGo9dgAAjFNjdXJyZW50X3Jlc3RyaWN0aW9uKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlJlc3RyaWN0aW9uVHJhY2tlclZpZXcgbWV0aG9kKZRqfGgAAGg9TnSUKGo9dgAAjEl0cnlfY2xhaW0oKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuUmVzdHJpY3Rpb25UcmFja2VyVmlldyBtZXRob2QplGp/aAAAaD1OdJQoaj12AACMT2RlZmVyX3JlbWFpbmRlcigpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5SZXN0cmljdGlvblRyYWNrZXJWaWV3IG1ldGhvZCmUaoJoAABoPU50lChqPXYAAIxFVGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMplGqFaAAAaD1OdJQoaj12AACMWWdldF9lc3RpbWF0b3Jfc3RhdGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuVGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvciBtZXRob2QplGqIaAAAaD1OdJQoaj12AACMV2N1cnJlbnRfd2F0ZXJtYXJrKCkgKGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzLlRocmVhZHNhZmVXYXRlcm1hcmtFc3RpbWF0b3IgbWV0aG9kKZRqi2gAAGg9TnSUKGo9dgAAjFdvYnNlcnZlX3RpbWVzdGFtcCgpIChhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscy5UaHJlYWRzYWZlV2F0ZXJtYXJrRXN0aW1hdG9yIG1ldGhvZCmUao5oAABoPU50lChqPXYAAIxHTm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS5ydW5uZXJzLnNkZl91dGlscymUapFoAABoPU50lChqPXYAAIxfaW5pdGlhbF9lc3RpbWF0b3Jfc3RhdGUoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuTm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyIG1ldGhvZCmUapRoAABoPU50lChqPXYAAIxiY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3IoKSAoYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHMuTm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyIG1ldGhvZCmUapdoAABoPU50lGVqgAMAAF2UKGo9dgAAjBxhcGFjaGVfYmVhbS50ZXN0aW5nIChtb2R1bGUplIwabW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmeUaD1OdJRhatIDAABdlChqPXYAAIwnYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzIChtb2R1bGUplIwlbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrc5RoPU50lGFqcQMAAF2UKGo9dgAAjC9hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyayAobW9kdWxlKZSMLW1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFya5RoPU50lGFqdQMAAF2UKGo9dgAAjDZhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMgKG1vZHVsZSmUjDRtb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzlGg9TnSUYWohBAAAXZQoKGo9dgAAjERhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbCAobW9kdWxlKZSMQm1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbJRoPU50lChqPXYAAIxNUGVyc29uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMubmV4bWFya19tb2RlbCmUaqRoAABoPU50lChqPXYAAIxOQXVjdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzLm5leG1hcmtfbW9kZWwplGqnaAAAaD1OdJQoaj12AACMSkJpZCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzLm5leG1hcmtfbW9kZWwplGqqaAAAaD1OdJRlaksDAABdlCgoaj12AACMQGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIgKG1vZHVsZSmUjD5tb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlcpRoPU50lChqPXYAAIxSTmV4bWFya0xhdW5jaGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVyKZRqr2gAAGg9TnSUKGo9dgAAjF1wYXJzZV9hcmdzKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyIG1ldGhvZCmUarJoAABoPU50lChqPXYAAIxiZ2VuZXJhdGVfZXZlbnRzKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyIG1ldGhvZCmUarVoAABoPU50lChqPXYAAIxccnVuX3F1ZXJ5KCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXIuTmV4bWFya0xhdW5jaGVyIG1ldGhvZCmUarhoAABoPU50lChqPXYAAIxaY2xlYW51cCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVyLk5leG1hcmtMYXVuY2hlciBtZXRob2QplGq7aAAAaD1OdJQoaj12AACMVnJ1bigpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX2xhdW5jaGVyLk5leG1hcmtMYXVuY2hlciBtZXRob2QplGq+aAAAaD1OdJRlaoYDAABdlCgoaj12AACMPGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbCAobW9kdWxlKZSMOm1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWyUaD1OdJQoaj12AACMRkNvbW1hbmQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbCmUasNoAABoPU50lChqPXYAAIxKcnVuKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbC5Db21tYW5kIG1ldGhvZCmUasZoAABoPU50lChqPXYAAIxLUGFyc2VFdmVudEZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwplGrJaAAAaD1OdJQoaj12AACMU3Byb2Nlc3MoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsLlBhcnNlRXZlbnRGbiBtZXRob2QplGrMaAAAaD1OdJQoaj12AACMSWRpc3BsYXkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbCmUas9oAABoPU50lGVqUgMAAF2UKGo9dgAAjDdhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzIChtb2R1bGUplIw1bW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXOUaD1OdJRhahsEAABdlCgoaj12AACMPmFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkwIChtb2R1bGUplIw8bW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkwlGg9TnSUKGo9dgAAjEhsb2FkKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MCmUatZoAABoPU50lGVqlgMAAF2UKChqPXYAAIw+YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTEgKG1vZHVsZSmUjDxtb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTGUaD1OdJQoaj12AACMSGxvYWQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkxKZRq22gAAGg9TnSUZWp6AwAAXZQoKGo9dgAAjD5hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MiAobW9kdWxlKZSMPG1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MpRoPU50lChqPXYAAIxIbG9hZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTIplGrgaAAAaD1OdJRlavUDAABdlCgoaj12AACML2FwYWNoZV9iZWFtLnRlc3RpbmcuZGF0YXR5cGVfaW5mZXJlbmNlIChtb2R1bGUplIwtbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcuZGF0YXR5cGVfaW5mZXJlbmNllGg9TnSUKGo9dgAAjEdpbmZlcl9lbGVtZW50X3R5cGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcuZGF0YXR5cGVfaW5mZXJlbmNlKZRq5WgAAGg9TnSUKGo9dgAAjEtpbmZlcl90eXBlaGludHNfc2NoZW1hKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLmRhdGF0eXBlX2luZmVyZW5jZSmUauhoAABoPU50lChqPXYAAIxGaW5mZXJfYXZyb19zY2hlbWEoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcuZGF0YXR5cGVfaW5mZXJlbmNlKZRq62gAAGg9TnSUKGo9dgAAjElpbmZlcl9weWFycm93X3NjaGVtYSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5kYXRhdHlwZV9pbmZlcmVuY2UplGruaAAAaD1OdJRlatkDAABdlCgoaj12AACMLWFwYWNoZV9iZWFtLnRlc3RpbmcuZXh0cmFfYXNzZXJ0aW9ucyAobW9kdWxlKZSMK21vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmV4dHJhX2Fzc2VydGlvbnOUaD1OdJQoaj12AACMREV4dHJhQXNzZXJ0aW9uc01peGluIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmV4dHJhX2Fzc2VydGlvbnMplGrzaAAAaD1OdJQoaj12AACMX2Fzc2VydFVuaGFzaGFibGVDb3VudEVxdWFsKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcuZXh0cmFfYXNzZXJ0aW9ucy5FeHRyYUFzc2VydGlvbnNNaXhpbiBtZXRob2QplGr2aAAAaD1OdJRlajMDAABdlChqPXYAAIwnYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzIChtb2R1bGUplIwlbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0c5RoPU50lGFqkQMAAF2UKChqPXYAAIw/YXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzIChtb2R1bGUplIw9bW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlsc5RoPU50lChqPXYAAIxPcGFyc2Vfc3RlcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzKZRq/WgAAGg9TnSUKGo9dgAAjGhzcGxpdF9tZXRyaWNzX2J5X25hbWVzcGFjZV9hbmRfbmFtZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzKZRqAGkAAGg9TnSUKGo9dgAAjF5nZXRfZ2VuZXJpY19kaXN0cmlidXRpb25zKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMplGoDaQAAaD1OdJQoaj12AACMYmdldF9hbGxfZGlzdHJpYnV0aW9uc19ieV90eXBlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMplGoGaQAAaD1OdJQoaj12AACMWmdldF9kaXN0cmlidXRpb25fZGljdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzKZRqCWkAAGg9TnSUKGo9dgAAjE9NZXRyaWNzUmVhZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMplGoMaQAAaD1OdJQoaj12AACMW3B1Ymxpc2hlcnMgKGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZXRyaWNzUmVhZGVyIGF0dHJpYnV0ZSmUag9pAABoPU50lChqPXYAAIxfcHVibGlzaF9tZXRyaWNzKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZXRyaWNzUmVhZGVyIG1ldGhvZCmUahJpAABoPU50lChqPXYAAIxITWV0cmljIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMplGoVaQAAaD1OdJQoaj12AACMUGFzX2RpY3QoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1ldHJpYyBtZXRob2QplGoYaQAAaD1OdJQoaj12AACMT0NvdW50ZXJNZXRyaWMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscymUahtpAABoPU50lChqPXYAAIxURGlzdHJpYnV0aW9uTWV0cmljIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMplGoeaQAAaD1OdJQoaj12AACMT1J1bnRpbWVNZXRyaWMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscymUaiFpAABoPU50lChqPXYAAIxZQ29uc29sZU1ldHJpY3NQdWJsaXNoZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscymUaiRpAABoPU50lChqPXYAAIxhcHVibGlzaCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuQ29uc29sZU1ldHJpY3NQdWJsaXNoZXIgbWV0aG9kKZRqJ2kAAGg9TnSUKGo9dgAAjFpCaWdRdWVyeU1ldHJpY3NQdWJsaXNoZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscymUaippAABoPU50lChqPXYAAIxicHVibGlzaCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuQmlnUXVlcnlNZXRyaWNzUHVibGlzaGVyIG1ldGhvZCmUai1pAABoPU50lChqPXYAAIxQQmlnUXVlcnlDbGllbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscymUajBpAABoPU50lChqPXYAAIxVc2F2ZSgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuQmlnUXVlcnlDbGllbnQgbWV0aG9kKZRqM2kAAGg9TnSUKGo9dgAAjE1NZWFzdXJlVGltZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzKZRqNmkAAGg9TnSUKGo9dgAAjFpzdGFydF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1lYXN1cmVUaW1lIG1ldGhvZCmUajlpAABoPU50lChqPXYAAIxbZmluaXNoX2J1bmRsZSgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuTWVhc3VyZVRpbWUgbWV0aG9kKZRqPGkAAGg9TnSUKGo9dgAAjFVwcm9jZXNzKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5NZWFzdXJlVGltZSBtZXRob2QplGo/aQAAaD1OdJQoaj12AACMTk1lYXN1cmVCeXRlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzKZRqQmkAAGg9TnSUKGo9dgAAjFVMQUJFTCAoYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1lYXN1cmVCeXRlcyBhdHRyaWJ1dGUplGpFaQAAaD1OdJQoaj12AACMVnByb2Nlc3MoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzLk1lYXN1cmVCeXRlcyBtZXRob2QplGpIaQAAaD1OdJQoaj12AACMT0NvdW50TWVzc2FnZXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscymUaktpAABoPU50lChqPXYAAIxWTEFCRUwgKGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlscy5Db3VudE1lc3NhZ2VzIGF0dHJpYnV0ZSmUak5pAABoPU50lChqPXYAAIxXcHJvY2VzcygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMuQ291bnRNZXNzYWdlcyBtZXRob2QplGpRaQAAaD1OdJRlal4DAABdlChqPXYAAIwxYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLnN0cmVhbWluZyAobW9kdWxlKZSML21vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMuc3RyZWFtaW5nlGg9TnSUYWpcAwAAXZQoKGo9dgAAjFFhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMuc3RyZWFtaW5nLmdyb3VwX2J5X2tleV9zdHJlYW1pbmdfcGlwZWxpbmUgKG1vZHVsZSmUjE9tb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLnN0cmVhbWluZy5ncm91cF9ieV9rZXlfc3RyZWFtaW5nX3BpcGVsaW5llGg9TnSUKGo9dgAAjFpydW4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5zdHJlYW1pbmcuZ3JvdXBfYnlfa2V5X3N0cmVhbWluZ19waXBlbGluZSmUalhpAABoPU50lGVqvwMAAF2UKChqPXYAAIwzYXBhY2hlX2JlYW0udGVzdGluZy5tZXRyaWNfcmVzdWx0X21hdGNoZXJzIChtb2R1bGUplIwxbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcubWV0cmljX3Jlc3VsdF9tYXRjaGVyc5RoPU50lChqPXYAAIxJTWV0cmljUmVzdWx0TWF0Y2hlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5tZXRyaWNfcmVzdWx0X21hdGNoZXJzKZRqXWkAAGg9TnSUKGo9dgAAjFVkZXNjcmliZV90bygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLm1ldHJpY19yZXN1bHRfbWF0Y2hlcnMuTWV0cmljUmVzdWx0TWF0Y2hlciBtZXRob2QplGpgaQAAaD1OdJQoaj12AACMW2Rlc2NyaWJlX21pc21hdGNoKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcubWV0cmljX3Jlc3VsdF9tYXRjaGVycy5NZXRyaWNSZXN1bHRNYXRjaGVyIG1ldGhvZCmUamNpAABoPU50lChqPXYAAIxJRGlzdHJpYnV0aW9uTWF0Y2hlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5tZXRyaWNfcmVzdWx0X21hdGNoZXJzKZRqZmkAAGg9TnSUKGo9dgAAjFVkZXNjcmliZV90bygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLm1ldHJpY19yZXN1bHRfbWF0Y2hlcnMuRGlzdHJpYnV0aW9uTWF0Y2hlciBtZXRob2QplGppaQAAaD1OdJQoaj12AACMW2Rlc2NyaWJlX21pc21hdGNoKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcubWV0cmljX3Jlc3VsdF9tYXRjaGVycy5EaXN0cmlidXRpb25NYXRjaGVyIG1ldGhvZCmUamxpAABoPU50lChqPXYAAIxDdmVyaWZ5X2FsbCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5tZXRyaWNfcmVzdWx0X21hdGNoZXJzKZRqb2kAAGg9TnSUZWpfAwAAXZQoKGo9dgAAjC9hcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycyAobW9kdWxlKZSMLW1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVyc5RoPU50lChqPXYAAIxGUGlwZWxpbmVTdGF0ZU1hdGNoZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzKZRqdGkAAGg9TnSUKGo9dgAAjFJkZXNjcmliZV90bygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5QaXBlbGluZVN0YXRlTWF0Y2hlciBtZXRob2QplGp3aQAAaD1OdJQoaj12AACMWGRlc2NyaWJlX21pc21hdGNoKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzLlBpcGVsaW5lU3RhdGVNYXRjaGVyIG1ldGhvZCmUanppAABoPU50lChqPXYAAIxXcmV0cnlfb25faW9fZXJyb3JfYW5kX3NlcnZlcl9lcnJvcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMplGp9aQAAaD1OdJQoaj12AACMRUZpbGVDaGVja3N1bU1hdGNoZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcucGlwZWxpbmVfdmVyaWZpZXJzKZRqgGkAAGg9TnSUKGo9dgAAjFFkZXNjcmliZV90bygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVycy5GaWxlQ2hlY2tzdW1NYXRjaGVyIG1ldGhvZCmUaoNpAABoPU50lChqPXYAAIxXZGVzY3JpYmVfbWlzbWF0Y2goKSAoYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnMuRmlsZUNoZWNrc3VtTWF0Y2hlciBtZXRob2QplGqGaQAAaD1OdJRlas0DAABdlCgoaj12AACML2FwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lIChtb2R1bGUplIwtbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5llGg9TnSUKGo9dgAAjERwYXJzZV9ieXRlX3NpemUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKZRqi2kAAGg9TnSUKGo9dgAAjEFkaXZfcm91bmRfdXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKZRqjmkAAGg9TnSUKGo9dgAAjD9yb3RhdGVfa2V5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSmUapFpAABoPU50lChqPXYAAIxLaW5pdGlhbF9zcGxpdHRpbmdfemlwZigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUplGqUaQAAaD1OdJQoaj12AACMP1N5bnRoZXRpY1N0ZXAgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKZRql2kAAGg9TnSUKGo9dgAAjExzdGFydF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU3RlcCBtZXRob2QplGqaaQAAaD1OdJQoaj12AACMTWZpbmlzaF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU3RlcCBtZXRob2QplGqdaQAAaD1OdJQoaj12AACMR3Byb2Nlc3MoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU3RlcCBtZXRob2QplGqgaQAAaD1OdJQoaj12AACMVU5vbkxpcXVpZFNoYXJkaW5nT2Zmc2V0UmFuZ2VUcmFja2VyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSmUaqNpAABoPU50lChqPXYAAIxfdHJ5X3NwbGl0KCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLk5vbkxpcXVpZFNoYXJkaW5nT2Zmc2V0UmFuZ2VUcmFja2VyIG1ldGhvZCmUaqZpAABoPU50lChqPXYAAIxgY2hlY2twb2ludCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5Ob25MaXF1aWRTaGFyZGluZ09mZnNldFJhbmdlVHJhY2tlciBtZXRob2QplGqpaQAAaD1OdJQoaj12AACMVVN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSmUaqxpAABoPU50lChqPXYAAIxpaW5pdGlhbF9yZXN0cmljdGlvbigpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTREZTdGVwUmVzdHJpY3Rpb25Qcm92aWRlciBtZXRob2QplGqvaQAAaD1OdJQoaj12AACMZGNyZWF0ZV90cmFja2VyKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyIG1ldGhvZCmUarJpAABoPU50lChqPXYAAIxbc3BsaXQoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU0RGU3RlcFJlc3RyaWN0aW9uUHJvdmlkZXIgbWV0aG9kKZRqtWkAAGg9TnSUKGo9dgAAjGZyZXN0cmljdGlvbl9zaXplKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyIG1ldGhvZCmUlSAAAQAAAAAAarhpAABoPU50lChqPXYAAIxLZ2V0X3N5bnRoZXRpY19zZGZfc3RlcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUplGq7aQAAaD1OdJQoaj12AACMQVN5bnRoZXRpY1NvdXJjZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUplGq+aQAAaD1OdJQoaj12AACMT2VsZW1lbnRfc2l6ZSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU291cmNlIGF0dHJpYnV0ZSmUasFpAABoPU50lChqPXYAAIxPZXN0aW1hdGVfc2l6ZSgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UgbWV0aG9kKZRqxGkAAGg9TnSUKGo9dgAAjEdzcGxpdCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UgbWV0aG9kKZRqx2kAAGg9TnSUKGo9dgAAjFNnZXRfcmFuZ2VfdHJhY2tlcigpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTb3VyY2UgbWV0aG9kKZRqymkAAGg9TnSUKGo9dgAAjEZyZWFkKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZSBtZXRob2QplGrNaQAAaD1OdJQoaj12AACMVmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NvdXJjZSBtZXRob2QplGrQaQAAaD1OdJQoaj12AACMV1N5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKZRq02kAAGg9TnSUKGo9dgAAjGtpbml0aWFsX3Jlc3RyaWN0aW9uKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlN5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIgbWV0aG9kKZRq1mkAAGg9TnSUKGo9dgAAjGZjcmVhdGVfdHJhY2tlcigpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTREZTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVyIG1ldGhvZCmUatlpAABoPU50lChqPXYAAIxdc3BsaXQoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU0RGU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlciBtZXRob2QplGrcaQAAaD1OdJQoaj12AACMaHJlc3RyaWN0aW9uX3NpemUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUuU3ludGhldGljU0RGU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlciBtZXRob2QplGrfaQAAaD1OdJQoaj12AACMRlN5bnRoZXRpY1NERkFzU291cmNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSmUauJpAABoPU50lChqPXYAAIxOcHJvY2VzcygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TeW50aGV0aWNTREZBc1NvdXJjZSBtZXRob2QplGrlaQAAaD1OdJQoaj12AACMQFNodWZmbGVCYXJyaWVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSmUauhpAABoPU50lChqPXYAAIxHZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lLlNodWZmbGVCYXJyaWVyIG1ldGhvZCmUautpAABoPU50lChqPXYAAIxCU2lkZUlucHV0QmFycmllciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUplGruaQAAaD1OdJQoaj12AACMSWV4cGFuZCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZS5TaWRlSW5wdXRCYXJyaWVyIG1ldGhvZCmUavFpAABoPU50lChqPXYAAIxEbWVyZ2VfdXNpbmdfZ2JrKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnN5bnRoZXRpY19waXBlbGluZSmUavRpAABoPU50lChqPXYAAIxLbWVyZ2VfdXNpbmdfc2lkZV9pbnB1dCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUplGr3aQAAaD1OdJQoaj12AACMRWV4cGFuZF91c2luZ19nYmsoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKZRq+mkAAGg9TnSUKGo9dgAAjE9leHBhbmRfdXNpbmdfc2Vjb25kX291dHB1dCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy5zeW50aGV0aWNfcGlwZWxpbmUplGr9aQAAaD1OdJQoaj12AACMP3BhcnNlX2FyZ3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKZRqAGoAAGg9TnSUKGo9dgAAjDhydW4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5lKZRqA2oAAGg9TnSUZWpoAwAAXZQoKGo9dgAAjCphcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUgKG1vZHVsZSmUjChtb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5llGg9TnSUKGo9dgAAjDlUZXN0UGlwZWxpbmUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZSmUaghqAABoPU50lChqPXYAAIw9cnVuKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUgbWV0aG9kKZRqC2oAAGg9TnSUKGo9dgAAjE5nZXRfcGlwZWxpbmVfb3B0aW9ucygpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUuVGVzdFBpcGVsaW5lIG1ldGhvZCmUag5qAABoPU50lChqPXYAAIxSZ2V0X2Z1bGxfb3B0aW9uc19hc19hcmdzKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUgbWV0aG9kKZRqEWoAAGg9TnSUKGo9dgAAjERnZXRfb3B0aW9uKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZS5UZXN0UGlwZWxpbmUgbWV0aG9kKZRqFGoAAGg9TnSUZWqwAwAAXZQoKGo9dgAAjChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIChtb2R1bGUplIwmbW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW2UaD1OdJQoaj12AACMMEV2ZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtKZRqGWoAAGg9TnSUKGo9dgAAjD50b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uRXZlbnQgbWV0aG9kKZRqHGoAAGg9TnSUKGo9dgAAjEdmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5FdmVudCBzdGF0aWMgbWV0aG9kKZRqH2oAAGg9TnSUKGo9dgAAjDdFbGVtZW50RXZlbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0plGoiagAAaD1OdJQoaj12AACMRXRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5FbGVtZW50RXZlbnQgbWV0aG9kKZRqJWoAAGg9TnSUKGo9dgAAjDlXYXRlcm1hcmtFdmVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSmUaihqAABoPU50lChqPXYAAIxHdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLldhdGVybWFya0V2ZW50IG1ldGhvZCmUaitqAABoPU50lChqPXYAAIw+UHJvY2Vzc2luZ1RpbWVFdmVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSmUai5qAABoPU50lChqPXYAAIxMdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlByb2Nlc3NpbmdUaW1lRXZlbnQgbWV0aG9kKZRqMWoAAGg9TnSUKGo9dgAAjDVUZXN0U3RyZWFtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtKZRqNGoAAGg9TnSUKGo9dgAAjENnZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0uVGVzdFN0cmVhbSBtZXRob2QplGo3agAAaD1OdJQoaj12AACMPGV4cGFuZCgpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0gbWV0aG9kKZRqOmoAAGg9TnSUKGo9dgAAjEJhZGRfZWxlbWVudHMoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZCmUaj1qAABoPU50lChqPXYAAIxKYWR2YW5jZV93YXRlcm1hcmtfdG8oKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZCmUakBqAABoPU50lChqPXYAAIxTYWR2YW5jZV93YXRlcm1hcmtfdG9faW5maW5pdHkoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZCmUakNqAABoPU50lChqPXYAAIxNYWR2YW5jZV9wcm9jZXNzaW5nX3RpbWUoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZCmUakZqAABoPU50lChqPXYAAIxNdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbS5UZXN0U3RyZWFtIG1ldGhvZCmUaklqAABoPU50lChqPXYAAIxWZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtLlRlc3RTdHJlYW0gc3RhdGljIG1ldGhvZCmUakxqAABoPU50lGVqLgMAAF2UKChqPXYAAIwwYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbV9zZXJ2aWNlIChtb2R1bGUplIwubW9kdWxlLWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1fc2VydmljZZRoPU50lChqPXYAAIxOVGVzdFN0cmVhbVNlcnZpY2VDb250cm9sbGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtX3NlcnZpY2UplGpRagAAaD1OdJQoaj12AACMVHN0YXJ0KCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1fc2VydmljZS5UZXN0U3RyZWFtU2VydmljZUNvbnRyb2xsZXIgbWV0aG9kKZRqVGoAAGg9TnSUKGo9dgAAjFNzdG9wKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1fc2VydmljZS5UZXN0U3RyZWFtU2VydmljZUNvbnRyb2xsZXIgbWV0aG9kKZRqV2oAAGg9TnSUKGo9dgAAjFVFdmVudHMoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbV9zZXJ2aWNlLlRlc3RTdHJlYW1TZXJ2aWNlQ29udHJvbGxlciBtZXRob2QplGpaagAAaD1OdJRlalgDAABdlCgoaj12AACMJ2FwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscyAobW9kdWxlKZSMJW1vZHVsZS1hcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHOUaD1OdJQoaj12AACMMVRlbXBEaXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscymUal9qAABoPU50lChqPXYAAIw6Z2V0X3BhdGgoKSAoYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzLlRlbXBEaXIgbWV0aG9kKZRqYmoAAGg9TnSUKGo9dgAAjEJjcmVhdGVfdGVtcF9maWxlKCkgKGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscy5UZW1wRGlyIG1ldGhvZCmUamVqAABoPU50lChqPXYAAIw5Y29tcHV0ZV9oYXNoKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMplGpoagAAaD1OdJQoaj12AACMOHBhdGNoX3JldHJ5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfdXRpbHMplGpragAAaD1OdJQoaj12AACMOWRlbGV0ZV9maWxlcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzKZRqbmoAAGg9TnSUKGo9dgAAjEJjbGVhbnVwX3N1YnNjcmlwdGlvbnMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscymUanFqAABoPU50lChqPXYAAIw7Y2xlYW51cF90b3BpY3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF91dGlscymUanRqAABoPU50lChqPXYAAIw9UHVsbFJlc3BvbnNlTWVzc2FnZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzKZRqd2oAAGg9TnSUKGo9dgAAjEFjcmVhdGVfcHVsbF9yZXNwb25zZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzKZRqemoAAGg9TnSUZWq7AwAAXZQoKGo9dgAAjCFhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwgKG1vZHVsZSmUjB9tb2R1bGUtYXBhY2hlX2JlYW0udGVzdGluZy51dGlslGg9TnSUKGo9dgAAjDVUZXN0V2luZG93ZWRWYWx1ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udGVzdGluZy51dGlsKZRqf2oAAGg9TnSUKGo9dgAAjEB0aW1lc3RhbXAgKGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbC5UZXN0V2luZG93ZWRWYWx1ZSBhdHRyaWJ1dGUplGqCagAAaD1OdJQoaj12AACMPHZhbHVlIChhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuVGVzdFdpbmRvd2VkVmFsdWUgYXR0cmlidXRlKZRqhWoAAGg9TnSUKGo9dgAAjD53aW5kb3dzIChhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwuVGVzdFdpbmRvd2VkVmFsdWUgYXR0cmlidXRlKZRqiGoAAGg9TnSUKGo9dgAAjDplcXVhbF90b19wZXJfd2luZG93KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwplGqLagAAaD1OdJQoaj12AACML2VxdWFsX3RvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwplGqOagAAaD1OdJQoaj12AACMMm1hdGNoZXNfYWxsKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwplGqRagAAaD1OdJQoaj12AACML2lzX2VtcHR5KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwplGqUagAAaD1OdJQoaj12AACMM2lzX25vdF9lbXB0eSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy51dGlsKZRql2oAAGg9TnSUKGo9dgAAjDJhc3NlcnRfdGhhdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy51dGlsKZRqmmoAAGg9TnSUKGo9dgAAjDJvcGVuX3NoYXJkcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udGVzdGluZy51dGlsKZRqnWoAAGg9TnSUZWrpAwAAXZQoaj12AACMGmFwYWNoZV9iZWFtLnRvb2xzIChtb2R1bGUplIwYbW9kdWxlLWFwYWNoZV9iZWFtLnRvb2xzlGg9TnSUYWqxAwAAXZQoKGo9dgAAjDBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsgKG1vZHVsZSmUjC5tb2R1bGUtYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrlGg9TnSUKGo9dgAAjE1jb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKZRqpGoAAGg9TnSUKGo9dgAAjD9zbWFsbF9pbnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaymUaqdqAABoPU50lChqPXYAAIw/bGFyZ2VfaW50KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsplGqqagAAaD1OdJQoaj12AACMQ3JhbmRvbV9zdHJpbmcoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaymUaq1qAABoPU50lChqPXYAAIxCc21hbGxfc3RyaW5nKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsplGqwagAAaD1OdJQoaj12AACMQmxhcmdlX3N0cmluZygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKZRqs2oAAGg9TnSUKGo9dgAAjD5saXN0X2ludCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKZRqtmoAAGg9TnSUKGo9dgAAjEJkaWN0X2ludF9pbnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaymUarlqAABoPU50lChqPXYAAIxAc21hbGxfbGlzdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKZRqvGoAAGg9TnSUKGo9dgAAjEBsYXJnZV9saXN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsplGq/agAAaD1OdJQoaj12AACMQXNtYWxsX3R1cGxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsplGrCagAAaD1OdJQoaj12AACMQWxhcmdlX3R1cGxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsplGrFagAAaD1OdJQoaj12AACMQHNtYWxsX2RpY3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaymUashqAABoPU50lChqPXYAAIxAbGFyZ2VfZGljdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKZRqy2oAAGg9TnSUKGo9dgAAjERsYXJnZV9pdGVyYWJsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKZRqzmoAAGg9TnSUKGo9dgAAjE1yYW5kb21fbWVzc2FnZV93aXRoX21hcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKZRq0WoAAGg9TnSUKGo9dgAAjExzbWFsbF9tZXNzYWdlX3dpdGhfbWFwKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsplGrUagAAaD1OdJQoaj12AACMTGxhcmdlX21lc3NhZ2Vfd2l0aF9tYXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaymUatdqAABoPU50lChqPXYAAIxNZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaymUatpqAABoPU50lChqPXYAAIxLcmFuZG9tX3dpbmRvd2VkX3ZhbHVlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmsplGrdagAAaD1OdJQoaj12AACMSHd2X3dpdGhfb25lX3dpbmRvdygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuY29kZXJzX21pY3JvYmVuY2htYXJrKZRq4GoAAGg9TnSUKGo9dgAAjE53dl93aXRoX211bHRpcGxlX3dpbmRvd3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaymUauNqAABoPU50lChqPXYAAIxKcnVuX2NvZGVyX2JlbmNobWFya3MoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyaymUauZqAABoPU50lGVq8AMAAF2UKChqPXYAAIw+YXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmsgKG1vZHVsZSmUjDxtb2R1bGUtYXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmuUaD1OdJQoaj12AACMWWdlbmVyYXRlX2lucHV0X3ZhbHVlcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmsplGrragAAaD1OdJQoaj12AACMUXJ1bl9iZW5jaG1hcmsoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmRpc3RyaWJ1dGlvbl9jb3VudGVyX21pY3JvYmVuY2htYXJrKZRq7moAAGg9TnSUZWp7AwAAXZQoKGo9dgAAjDdhcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrIChtb2R1bGUplIw1bW9kdWxlLWFwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmuUaD1OdJQoaj12AACMVEJhZ0luU3RhdGVPdXRwdXRBZnRlclRpbWVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrKZRq82oAAGg9TnSUKGo9dgAAjF9TRVRfU1RBVEUgKGFwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmsuQmFnSW5TdGF0ZU91dHB1dEFmdGVyVGltZXIgYXR0cmlidXRlKZRq9moAAGg9TnSUKGo9dgAAjGBFTUlUX1RJTUVSIChhcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrLkJhZ0luU3RhdGVPdXRwdXRBZnRlclRpbWVyIGF0dHJpYnV0ZSmUavlqAABoPU50lChqPXYAAIxccHJvY2VzcygpIChhcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrLkJhZ0luU3RhdGVPdXRwdXRBZnRlclRpbWVyIG1ldGhvZCmUavxqAABoPU50lChqPXYAAIxgZW1pdF92YWx1ZXMoKSAoYXBhY2hlX2JlYW0udG9vbHMuZm5fYXBpX3J1bm5lcl9taWNyb2JlbmNobWFyay5CYWdJblN0YXRlT3V0cHV0QWZ0ZXJUaW1lciBtZXRob2QplGr/agAAaD1OdJQoaj12AACMUHJ1bl9zaW5nbGVfcGlwZWxpbmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmsplGoCawAAaD1OdJQoaj12AACMSnJ1bl9iZW5jaG1hcmsoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmsplGoFawAAaD1OdJRlaoUDAABdlCgoaj12AACMM2FwYWNoZV9iZWFtLnRvb2xzLnNpZGVpbnB1dF9taWNyb2JlbmNobWFyayAobW9kdWxlKZSMMW1vZHVsZS1hcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmuUaD1OdJQoaj12AACMR2xvbmdfZ2VuZXJhdG9yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmsplGoKawAAaD1OdJQoaj12AACMRnJ1bl9iZW5jaG1hcmsoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRvb2xzLnNpZGVpbnB1dF9taWNyb2JlbmNobWFyaymUag1rAABoPU50lGVq+wMAAF2UKChqPXYAAIwgYXBhY2hlX2JlYW0udG9vbHMudXRpbHMgKG1vZHVsZSmUjB5tb2R1bGUtYXBhY2hlX2JlYW0udG9vbHMudXRpbHOUaD1OdJQoaj12AACMNGNoZWNrX2NvbXBpbGVkKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50b29scy51dGlscymUahJrAABoPU50lChqPXYAAIwyQmVuY2htYXJrQ29uZmlnIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50b29scy51dGlscymUahVrAABoPU50lChqPXYAAIw9YmVuY2htYXJrIChhcGFjaGVfYmVhbS50b29scy51dGlscy5CZW5jaG1hcmtDb25maWcgYXR0cmlidXRlKZRqGGsAAGg9TnSUKGo9dgAAjDhzaXplIChhcGFjaGVfYmVhbS50b29scy51dGlscy5CZW5jaG1hcmtDb25maWcgYXR0cmlidXRlKZRqG2sAAGg9TnSUKGo9dgAAjDxudW1fcnVucyAoYXBhY2hlX2JlYW0udG9vbHMudXRpbHMuQmVuY2htYXJrQ29uZmlnIGF0dHJpYnV0ZSmUah5rAABoPU50lChqPXYAAIxCTGluZWFyUmVncmVzc2lvbkJlbmNobWFya0NvbmZpZyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udG9vbHMudXRpbHMplGohawAAaD1OdJQoaj12AACMTWJlbmNobWFyayAoYXBhY2hlX2JlYW0udG9vbHMudXRpbHMuTGluZWFyUmVncmVzc2lvbkJlbmNobWFya0NvbmZpZyBhdHRyaWJ1dGUplGokawAAaD1OdJQoaj12AACMUnN0YXJ0aW5nX3BvaW50IChhcGFjaGVfYmVhbS50b29scy51dGlscy5MaW5lYXJSZWdyZXNzaW9uQmVuY2htYXJrQ29uZmlnIGF0dHJpYnV0ZSmUaidrAABoPU50lChqPXYAAIxNaW5jcmVtZW50IChhcGFjaGVfYmVhbS50b29scy51dGlscy5MaW5lYXJSZWdyZXNzaW9uQmVuY2htYXJrQ29uZmlnIGF0dHJpYnV0ZSmUaiprAABoPU50lChqPXYAAIxMbnVtX3J1bnMgKGFwYWNoZV9iZWFtLnRvb2xzLnV0aWxzLkxpbmVhclJlZ3Jlc3Npb25CZW5jaG1hcmtDb25maWcgYXR0cmlidXRlKZRqLWsAAGg9TnSUKGo9dgAAjDRydW5fYmVuY2htYXJrcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udG9vbHMudXRpbHMplGowawAAaD1OdJRlap4DAABdlChqPXYAAIwfYXBhY2hlX2JlYW0udHJhbnNmb3JtcyAobW9kdWxlKZSMHW1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zlGg9TnSUYWrOAwAAXZQoKGo9dgAAjClhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycyAobW9kdWxlKZSMJ21vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVyc5RoPU50lChqPXYAAIwwTWVhbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMplGo3awAAaD1OdJQoaj12AACMOU1lYW4uR2xvYmFsbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKZRqOmsAAGg9TnSUKGo9dgAAjEBleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTWVhbi5HbG9iYWxseSBtZXRob2QplGo9awAAaD1OdJQoaj12AACMN01lYW4uUGVyS2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycymUakBrAABoPU50lChqPXYAAIw+ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLk1lYW4uUGVyS2V5IG1ldGhvZCmUakNrAABoPU50lChqPXYAAIwxQ291bnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKZRqRmsAAGg9TnSUKGo9dgAAjDpDb3VudC5HbG9iYWxseSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMplGpJawAAaD1OdJQoaj12AACMQWV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Db3VudC5HbG9iYWxseSBtZXRob2QplGpMawAAaD1OdJQoaj12AACMOENvdW50LlBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMplGpPawAAaD1OdJQoaj12AACMP2V4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Db3VudC5QZXJLZXkgbWV0aG9kKZRqUmsAAGg9TnSUKGo9dgAAjDxDb3VudC5QZXJFbGVtZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycymUalVrAABoPU50lChqPXYAAIxDZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkNvdW50LlBlckVsZW1lbnQgbWV0aG9kKZRqWGsAAGg9TnSUKGo9dgAAjC9Ub3AgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKZRqW2sAAGg9TnSUKGo9dgAAjDJUb3AuT2YgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKZRqXmsAAGg9TnSUKGo9dgAAjEBkZWZhdWx0X2xhYmVsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5PZiBtZXRob2QplGphawAAaD1OdJQoaj12AACMOWV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuT2YgbWV0aG9kKZRqZGsAAGg9TnSUKGo9dgAAjDZUb3AuUGVyS2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycymUamdrAABoPU50lChqPXYAAIxEZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3AuUGVyS2V5IG1ldGhvZCmUamprAABoPU50lChqPXYAAIw9ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcC5QZXJLZXkgbWV0aG9kKZRqbWsAAGg9TnSUKGo9dgAAjD5MYXJnZXN0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlRvcCBzdGF0aWMgbWV0aG9kKZRqcGsAAGg9TnSUKGo9dgAAjD9TbWFsbGVzdCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3Agc3RhdGljIG1ldGhvZCmUanNrAABoPU50lChqPXYAAIxETGFyZ2VzdFBlcktleSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub3Agc3RhdGljIG1ldGhvZCmUanZrAABoPU50lChqPXYAAIxFU21hbGxlc3RQZXJLZXkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9wIHN0YXRpYyBtZXRob2QplGp5awAAaD1OdJQoaj12AACMMlNhbXBsZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMplGp8awAAaD1OdJQoaj12AACMRFNhbXBsZS5GaXhlZFNpemVHbG9iYWxseSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMplGp/awAAaD1OdJQoaj12AACMS2V4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5TYW1wbGUuRml4ZWRTaXplR2xvYmFsbHkgbWV0aG9kKZRqgmsAAGg9TnSUKGo9dgAAjFFkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5IG1ldGhvZCmUaoVrAABoPU50lChqPXYAAIxSZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5TYW1wbGUuRml4ZWRTaXplR2xvYmFsbHkgbWV0aG9kKZRqiGsAAGg9TnSUKGo9dgAAjEJTYW1wbGUuRml4ZWRTaXplUGVyS2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycymUaotrAABoPU50lChqPXYAAIxJZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLlNhbXBsZS5GaXhlZFNpemVQZXJLZXkgbWV0aG9kKZRqjmsAAGg9TnSUKGo9dgAAjE9kaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZVBlcktleSBtZXRob2QplGqRawAAaD1OdJQoaj12AACMUGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZVBlcktleSBtZXRob2QplGqUawAAaD1OdJQoaj12AACMMlRvTGlzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMplGqXawAAaD1OdJQoaj12AACMOWV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycy5Ub0xpc3QgbWV0aG9kKZRqmmsAAGg9TnSUKGo9dgAAjDJUb0RpY3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKZRqnWsAAGg9TnSUKGo9dgAAjDlleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9EaWN0IG1ldGhvZCmUaqBrAABoPU50lChqPXYAAIwxVG9TZXQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKZRqo2sAAGg9TnSUKGo9dgAAjDhleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuVG9TZXQgbWV0aG9kKZRqpmsAAGg9TnSUKGo9dgAAjDJMYXRlc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKZRqqWsAAGg9TnSUKGo9dgAAjDtMYXRlc3QuR2xvYmFsbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzKZRqrGsAAGg9TnSUKGo9dgAAjFBhZGRfdGltZXN0YW1wKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLkxhdGVzdC5HbG9iYWxseSBzdGF0aWMgbWV0aG9kKZRqr2sAAGg9TnSUKGo9dgAAjEJleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTGF0ZXN0Lkdsb2JhbGx5IG1ldGhvZCmUarJrAABoPU50lChqPXYAAIw5TGF0ZXN0LlBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMplGq1awAAaD1OdJQoaj12AACMTmFkZF90aW1lc3RhbXAoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTGF0ZXN0LlBlcktleSBzdGF0aWMgbWV0aG9kKZRquGsAAGg9TnSUKGo9dgAAjEBleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMuTGF0ZXN0LlBlcktleSBtZXRob2QplGq7awAAaD1OdJRlavEDAABdlCgoaj12AACMJGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSAobW9kdWxlKZSMIm1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmWUaD1OdJQoaj12AACMOlJlc3RyaWN0aW9uUHJvdmlkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUasBrAABoPU50lChqPXYAAIxJY3JlYXRlX3RyYWNrZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlJlc3RyaWN0aW9uUHJvdmlkZXIgbWV0aG9kKZRqw2sAAGg9TnSUKGo9dgAAjE5pbml0aWFsX3Jlc3RyaWN0aW9uKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5SZXN0cmljdGlvblByb3ZpZGVyIG1ldGhvZCmUasZrAABoPU50lChqPXYAAIxAc3BsaXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlJlc3RyaWN0aW9uUHJvdmlkZXIgbWV0aG9kKZRqyWsAAGg9TnSUKGo9dgAAjExyZXN0cmljdGlvbl9jb2RlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUmVzdHJpY3Rpb25Qcm92aWRlciBtZXRob2QplGrMawAAaD1OdJQoaj12AACMS3Jlc3RyaWN0aW9uX3NpemUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlJlc3RyaWN0aW9uUHJvdmlkZXIgbWV0aG9kKZRqz2sAAGg9TnSUKGo9dgAAjElzcGxpdF9hbmRfc2l6ZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUmVzdHJpY3Rpb25Qcm92aWRlciBtZXRob2QplGrSawAAaD1OdJQoaj12AACMQVdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGrVawAAaD1OdJQoaj12AACMWWluaXRpYWxfZXN0aW1hdG9yX3N0YXRlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlciBtZXRob2QplGrYawAAaD1OdJQoaj12AACMXGNyZWF0ZV93YXRlcm1hcmtfZXN0aW1hdG9yKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlciBtZXRob2QplGrbawAAaD1OdJQoaj12AACMV2VzdGltYXRvcl9zdGF0ZV9jb2RlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIgbWV0aG9kKZRq3msAAGg9TnSUKGo9dgAAjCtEb0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGrhawAAaD1OdJQoaj12AACMOUVsZW1lbnRQYXJhbSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKZRq5GsAAGg9TnSUKGo9dgAAjDtTaWRlSW5wdXRQYXJhbSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKZRq52sAAGg9TnSUKGo9dgAAjDtUaW1lc3RhbXBQYXJhbSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKZRq6msAAGg9TnSUKGo9dgAAjDhXaW5kb3dQYXJhbSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKZRq7WsAAGg9TnSUKGo9dgAAjDpQYW5lSW5mb1BhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUplGrwawAAaD1OdJQoaj12AACMRFdhdGVybWFya0VzdGltYXRvclBhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUplGrzawAAaD1OdJQoaj12AACMQUJ1bmRsZUZpbmFsaXplclBhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUplGr2awAAaD1OdJQoaj12AACMNUtleVBhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUplGr5awAAaD1OdJQoaj12AACMN1N0YXRlUGFyYW0gKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIGF0dHJpYnV0ZSmUavxrAABoPU50lChqPXYAAIw3VGltZXJQYXJhbSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKZRq/2sAAGg9TnSUKGo9dgAAjD5Eb0ZuUHJvY2Vzc1BhcmFtcyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gYXR0cmlidXRlKZRqAmwAAGg9TnSUKGo9dgAAjD1SZXN0cmljdGlvblBhcmFtIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBhdHRyaWJ1dGUplGoFbAAAaD1OdJQoaj12AACMQGZyb21fY2FsbGFibGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gc3RhdGljIG1ldGhvZCmUaghsAABoPU50lChqPXYAAIw5ZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QplGoLbAAAaD1OdJQoaj12AACMM3Byb2Nlc3MoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKZRqDmwAAGg9TnSUKGo9dgAAjDFzZXR1cCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QplGoRbAAAaD1OdJQoaj12AACMOHN0YXJ0X2J1bmRsZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QplGoUbAAAaD1OdJQoaj12AACMOWZpbmlzaF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKZRqF2wAAGg9TnSUKGo9dgAAjDR0ZWFyZG93bigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QplGoabAAAaD1OdJQoaj12AACMQmdldF9mdW5jdGlvbl9hcmd1bWVudHMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKZRqHWwAAGg9TnSUKGo9dgAAjD5kZWZhdWx0X3R5cGVfaGludHMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkRvRm4gbWV0aG9kKZRqIGwAAGg9TnSUKGo9dgAAjD1pbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbiBtZXRob2QplGojbAAAaD1OdJQoaj12AACMQ3RvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuIG1ldGhvZCmUaiZsAABoPU50lChqPXYAAIwwQ29tYmluZUZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGopbAAAaD1OdJQoaj12AACMPmRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QplGosbAAAaD1OdJQoaj12AACMQ2NyZWF0ZV9hY2N1bXVsYXRvcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZCmUai9sAABoPU50lChqPXYAAIw6YWRkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKZRqMmwAAGg9TnSUKGo9dgAAjDthZGRfaW5wdXRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKZRqNWwAAGg9TnSUKGo9dgAAjENtZXJnZV9hY2N1bXVsYXRvcnMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QplGo4bAAAaD1OdJQoaj12AACMOGNvbXBhY3QoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QplGo7bAAAaD1OdJQoaj12AACMP2V4dHJhY3Rfb3V0cHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKZRqPmwAAGg9TnSUKGo9dgAAjDZhcHBseSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZCmUakFsAABoPU50lChqPXYAAIw/Zm9yX2lucHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBtZXRob2QplGpEbAAAaD1OdJQoaj12AACMRWZyb21fY2FsbGFibGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbiBzdGF0aWMgbWV0aG9kKZRqR2wAAGg9TnSUKGo9dgAAjEttYXliZV9mcm9tX2NhbGxhYmxlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gc3RhdGljIG1ldGhvZCmUakpsAABoPU50lChqPXYAAIxGZ2V0X2FjY3VtdWxhdG9yX2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lRm4gbWV0aG9kKZRqTWwAAGg9TnSUKGo9dgAAjEh0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUZuIG1ldGhvZCmUalBsAABoPU50lChqPXYAAIwyUGFydGl0aW9uRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUalNsAABoPU50lChqPXYAAIxAZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uRm4gbWV0aG9kKZRqVmwAAGg9TnSUKGo9dgAAjEBwYXJ0aXRpb25fZm9yKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJ0aXRpb25GbiBtZXRob2QplGpZbAAAaD1OdJQoaj12AACMLFBhckRvIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGpcbAAAaD1OdJQoaj12AACMP2RlZmF1bHRfdHlwZV9oaW50cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKZRqX2wAAGg9TnSUKGo9dgAAjD5pbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKZRqYmwAAGg9TnSUKGo9dgAAjDRtYWtlX2ZuKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2QplGplbAAAaD1OdJQoaj12AACMOWRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFyRG8gbWV0aG9kKZRqaGwAAGg9TnSUKGo9dgAAjDNleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvIG1ldGhvZCmUamtsAABoPU50lChqPXYAAIw5d2l0aF9vdXRwdXRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2QplGpubAAAaD1OdJQoaj12AACMRHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2QplGpxbAAAaD1OdJQoaj12AACMTWZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvIHN0YXRpYyBtZXRob2QplGp0bAAAaD1OdJQoaj12AACMTHJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhckRvIG1ldGhvZCmUandsAABoPU50lChqPXYAAIxCZ2V0X3Jlc3RyaWN0aW9uX2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5QYXJEbyBtZXRob2QplGp6bAAAaD1OdJQoaj12AACMMUZsYXRNYXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUan1sAABoPU50lChqPXYAAIwtTWFwKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGqAbAAAaD1OdJQoaj12AACMMk1hcFR1cGxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGqDbAAAaD1OdJQoaj12AACMNkZsYXRNYXBUdXBsZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKZRqhmwAAGg9TnSUKGo9dgAAjDBGaWx0ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUaolsAABoPU50lChqPXYAAIw2Q29tYmluZUdsb2JhbGx5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGqMbAAAaD1OdJQoaj12AACMRGhhc19kZWZhdWx0cyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBhdHRyaWJ1dGUplGqPbAAAaD1OdJQoaj12AACMP2FzX3ZpZXcgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkgYXR0cmlidXRlKZRqkmwAAGg9TnSUKGo9dgAAjD5mYW5vdXQgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkgYXR0cmlidXRlKZRqlWwAAGg9TnSUKGo9dgAAjENkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBtZXRob2QplGqYbAAAaD1OdJQoaj12AACMRGRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVHbG9iYWxseSBtZXRob2QplGqbbAAAaD1OdJQoaj12AACMQndpdGhfZmFub3V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkgbWV0aG9kKZRqnmwAAGg9TnSUKGo9dgAAjER3aXRoX2RlZmF1bHRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkgbWV0aG9kKZRqoWwAAGg9TnSUKGo9dgAAjEd3aXRob3V0X2RlZmF1bHRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkgbWV0aG9kKZRqpGwAAGg9TnSUKGo9dgAAjEhhc19zaW5nbGV0b25fdmlldygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZUdsb2JhbGx5IG1ldGhvZCmUaqdsAABoPU50lChqPXYAAIw9ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lR2xvYmFsbHkgbWV0aG9kKZRqqmwAAGg9TnSUKGo9dgAAjDRDb21iaW5lUGVyS2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGqtbAAAaD1OdJQoaj12AACMSHdpdGhfaG90X2tleV9mYW5vdXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkgbWV0aG9kKZRqsGwAAGg9TnSUKGo9dgAAjEFkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVQZXJLZXkgbWV0aG9kKZRqs2wAAGg9TnSUKGo9dgAAjDxtYWtlX2ZuKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IG1ldGhvZCmUarZsAABoPU50lChqPXYAAIxCZGVmYXVsdF9sYWJlbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBtZXRob2QplGq5bAAAaD1OdJQoaj12AACMO2V4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBtZXRob2QplGq8bAAAaD1OdJQoaj12AACMR2RlZmF1bHRfdHlwZV9oaW50cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBtZXRob2QplGq/bAAAaD1OdJQoaj12AACMTHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IG1ldGhvZCmUasJsAABoPU50lChqPXYAAIxVZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ29tYmluZVBlcktleSBzdGF0aWMgbWV0aG9kKZRqxWwAAGg9TnSUKGo9dgAAjFRydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lUGVyS2V5IG1ldGhvZCmUashsAABoPU50lChqPXYAAIw0Q29tYmluZVZhbHVlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKZRqy2wAAGg9TnSUKGo9dgAAjDxtYWtlX2ZuKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lVmFsdWVzIG1ldGhvZCmUas5sAABoPU50lChqPXYAAIw7ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lVmFsdWVzIG1ldGhvZCmUatFsAABoPU50lChqPXYAAIxMdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVWYWx1ZXMgbWV0aG9kKZRq1GwAAGg9TnSUKGo9dgAAjFVmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Db21iaW5lVmFsdWVzIHN0YXRpYyBtZXRob2QplGrXbAAAaD1OdJQoaj12AACMMUdyb3VwQnlLZXkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUatpsAABoPU50lChqPXYAAIw+R3JvdXBCeUtleS5SZWlmeVdpbmRvd3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUat1sAABoPU50lChqPXYAAIxGcHJvY2VzcygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5SZWlmeVdpbmRvd3MgbWV0aG9kKZRq4GwAAGg9TnSUKGo9dgAAjFBpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleS5SZWlmeVdpbmRvd3MgbWV0aG9kKZRq42wAAGg9TnSUKGo9dgAAjDhleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkdyb3VwQnlLZXkgbWV0aG9kKZRq5mwAAGg9TnSUKGo9dgAAjENpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleSBtZXRob2QplGrpbAAAaD1OdJQoaj12AACMSXRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5IG1ldGhvZCmUauxsAABoPU50lChqPXYAAIxSZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuR3JvdXBCeUtleSBzdGF0aWMgbWV0aG9kKZRq72wAAGg9TnSUKGo9dgAAjFFydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Hcm91cEJ5S2V5IG1ldGhvZCmUavJsAABoPU50lChqPXYAAIwwUGFydGl0aW9uIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGr1bAAAaD1OdJQoaj12AACMQ1BhcnRpdGlvbi5BcHBseVBhcnRpdGlvbkZuRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUavhsAABoPU50lChqPXYAAIxLcHJvY2VzcygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uLkFwcGx5UGFydGl0aW9uRm5GbiBtZXRob2QplGr7bAAAaD1OdJQoaj12AACMOG1ha2VfZm4oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLlBhcnRpdGlvbiBtZXRob2QplGr+bAAAaD1OdJQoaj12AACMN2V4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuUGFydGl0aW9uIG1ldGhvZCmUagFtAABoPU50lChqPXYAAIwwV2luZG93aW5nIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGoEbQAAaD1OdJQoaj12AACMO2lzX2RlZmF1bHQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd2luZyBtZXRob2QplGoHbQAAaD1OdJQoaj12AACMPnRvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd2luZyBtZXRob2QplGoKbQAAaD1OdJQoaj12AACMR2Zyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93aW5nIHN0YXRpYyBtZXRob2QplGoNbQAAaD1OdJQoaj12AACMMVdpbmRvd0ludG8gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUahBtAABoPU50lChqPXYAAIw+V2luZG93SW50by5XaW5kb3dJbnRvRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSmUahNtAABoPU50lChqPXYAAIxGcHJvY2VzcygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50by5XaW5kb3dJbnRvRm4gbWV0aG9kKZRqFm0AAGg9TnSUKGo9dgAAjD9nZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5XaW5kb3dJbnRvIG1ldGhvZCmUahltAABoPU50lChqPXYAAIxDaW5mZXJfb3V0cHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8gbWV0aG9kKZRqHG0AAGg9TnSUKGo9dgAAjDhleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8gbWV0aG9kKZRqH20AAGg9TnSUKGo9dgAAjEl0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuV2luZG93SW50byBtZXRob2QplGoibQAAaD1OdJQoaj12AACMUmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLldpbmRvd0ludG8gc3RhdGljIG1ldGhvZCmUaiVtAABoPU50lChqPXYAAIwuRmxhdHRlbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKZRqKG0AAGg9TnSUKGo9dgAAjDVleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4gbWV0aG9kKZRqK20AAGg9TnSUKGo9dgAAjDxnZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVuIG1ldGhvZCmUai5tAABoPU50lChqPXYAAIxGdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXR0ZW4gbWV0aG9kKZRqMW0AAGg9TnSUKGo9dgAAjE9mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0dGVuIHN0YXRpYyBtZXRob2QplGo0bQAAaD1OdJQoaj12AACMLUNyZWF0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlKZRqN20AAGg9TnSUKGo9dgAAjEV0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlIG1ldGhvZCmUajptAABoPU50lChqPXYAAIw/aW5mZXJfb3V0cHV0X3R5cGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNyZWF0ZSBtZXRob2QplGo9bQAAaD1OdJQoaj12AACMPWdldF9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuQ3JlYXRlIG1ldGhvZCmUakBtAABoPU50lChqPXYAAIw0ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUgbWV0aG9kKZRqQ20AAGg9TnSUKGo9dgAAjDVhc19yZWFkKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUgbWV0aG9kKZRqRm0AAGg9TnSUKGo9dgAAjDtnZXRfd2luZG93aW5nKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DcmVhdGUgbWV0aG9kKZRqSW0AAGg9TnSUKGo9dgAAjC5JbXB1bHNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUplGpMbQAAaD1OdJQoaj12AACMNWV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuSW1wdWxzZSBtZXRob2QplGpPbQAAaD1OdJQoaj12AACMPGdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkltcHVsc2UgbWV0aG9kKZRqUm0AAGg9TnSUKGo9dgAAjEBpbmZlcl9vdXRwdXRfdHlwZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuSW1wdWxzZSBtZXRob2QplGpVbQAAaD1OdJQoaj12AACMRnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5JbXB1bHNlIG1ldGhvZCmUalhtAABoPU50lChqPXYAAIxPZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuSW1wdWxzZSBzdGF0aWMgbWV0aG9kKZRqW20AAGg9TnSUZWoKBAAAXZQoaj12AACMLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3JlYXRlX3NvdXJjZSAobW9kdWxlKZSMK21vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNyZWF0ZV9zb3VyY2WUaD1OdJRhagQEAABdlCgoaj12AACMJ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSAobW9kdWxlKZSMJW1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXmUaD1OdJQoaj12AACMOEhhc0Rpc3BsYXlEYXRhIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkplGpibQAAaD1OdJQoaj12AACMRWRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuSGFzRGlzcGxheURhdGEgbWV0aG9kKZRqZW0AAGg9TnSUKGo9dgAAjDVEaXNwbGF5RGF0YSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5KZRqaG0AAGg9TnSUKGo9dgAAjE9jcmVhdGVfZnJvbV9vcHRpb25zKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YSBjbGFzcyBtZXRob2QplGprbQAAaD1OdJQoaj12AACMR2NyZWF0ZV9mcm9tKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YSBjbGFzcyBtZXRob2QplGpubQAAaD1OdJQoaj12AACMOURpc3BsYXlEYXRhSXRlbSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5KZRqcW0AAGg9TnSUKGo9dgAAjEN0eXBlRGljdCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbSBhdHRyaWJ1dGUplGp0bQAAaD1OdJQoaj12AACMRmRyb3BfaWZfbm9uZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtIG1ldGhvZCmUandtAABoPU50lChqPXYAAIxJZHJvcF9pZl9kZWZhdWx0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0gbWV0aG9kKZRqem0AAGg9TnSUKGo9dgAAjEVzaG91bGRfZHJvcCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkuRGlzcGxheURhdGFJdGVtIG1ldGhvZCmUan1tAABoPU50lChqPXYAAIxCaXNfdmFsaWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhSXRlbSBtZXRob2QplGqAbQAAaD1OdJQoaj12AACMQmdldF9kaWN0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YUl0ZW0gbWV0aG9kKZRqg20AAGg9TnSUZWpNAwAAXZQoKGo9dgAAjCxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cyAobW9kdWxlKZSMKm1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50c5RoPU50lChqPXYAAIw6RW52aXJvbm1lbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzKZRqiG0AAGg9TnSUKGo9dgAAjFJ0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudCBtZXRob2QplGqLbQAAaD1OdJQoaj12AACMR2NhcGFiaWxpdGllcygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudCBtZXRob2QplGqObQAAaD1OdJQoaj12AACMTXJlZ2lzdGVyX3VybigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudCBjbGFzcyBtZXRob2QplGqRbQAAaD1OdJQoaj12AACMVWdldF9lbnZfY2xzX2Zyb21fdXJuKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVudmlyb25tZW50IGNsYXNzIG1ldGhvZCmUapRtAABoPU50lChqPXYAAIxIdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudCBtZXRob2QplGqXbQAAaD1OdJQoaj12AACMUGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudCBjbGFzcyBtZXRob2QplGqabQAAaD1OdJQoaj12AACMTWZyb21fb3B0aW9ucygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbnZpcm9ubWVudCBjbGFzcyBtZXRob2QplGqdbQAAaD1OdJQoaj12AACMQERvY2tlckVudmlyb25tZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cymUaqBtAABoPU50lChqPXYAAIxYdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRG9ja2VyRW52aXJvbm1lbnQgbWV0aG9kKZRqo20AAGg9TnSUKGo9dgAAjGFmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkRvY2tlckVudmlyb25tZW50IHN0YXRpYyBtZXRob2QplGqmbQAAaD1OdJQoaj12AACMU2Zyb21fb3B0aW9ucygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5Eb2NrZXJFbnZpcm9ubWVudCBjbGFzcyBtZXRob2QplGqpbQAAaD1OdJQoaj12AACMXGRlZmF1bHRfZG9ja2VyX2ltYWdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkRvY2tlckVudmlyb25tZW50IHN0YXRpYyBtZXRob2QplGqsbQAAaD1OdJQoaj12AACMQVByb2Nlc3NFbnZpcm9ubWVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMplGqvbQAAaD1OdJQoaj12AACMWXRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLlByb2Nlc3NFbnZpcm9ubWVudCBtZXRob2QplGqybQAAaD1OdJQoaj12AACMYmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuUHJvY2Vzc0Vudmlyb25tZW50IHN0YXRpYyBtZXRob2QplGq1bQAAaD1OdJQoaj12AACMVGZyb21fb3B0aW9ucygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5Qcm9jZXNzRW52aXJvbm1lbnQgY2xhc3MgbWV0aG9kKZRquG0AAGg9TnSUKGo9dgAAjEJFeHRlcm5hbEVudmlyb25tZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cymUarttAABoPU50lChqPXYAAIxadG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRXh0ZXJuYWxFbnZpcm9ubWVudCBtZXRob2QplGq+bQAAaD1OdJQoaj12AACMY2Zyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRXh0ZXJuYWxFbnZpcm9ubWVudCBzdGF0aWMgbWV0aG9kKZRqwW0AAGg9TnSUKGo9dgAAjFVmcm9tX29wdGlvbnMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRXh0ZXJuYWxFbnZpcm9ubWVudCBjbGFzcyBtZXRob2QplGrEbQAAaD1OdJQoaj12AACMSEVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzKZRqx20AAGg9TnSUKGo9dgAAjGB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbWJlZGRlZFB5dGhvbkVudmlyb25tZW50IG1ldGhvZCmUasptAABoPU50lChqPXYAAIxpZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbWJlZGRlZFB5dGhvbkVudmlyb25tZW50IHN0YXRpYyBtZXRob2QplGrNbQAAaD1OdJQoaj12AACMW2Zyb21fb3B0aW9ucygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbWJlZGRlZFB5dGhvbkVudmlyb25tZW50IGNsYXNzIG1ldGhvZCmUatBtAABoPU50lChqPXYAAIxMRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzKZRq020AAGg9TnSUKGo9dgAAjGR0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5FbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudCBtZXRob2QplGrWbQAAaD1OdJQoaj12AACMbWZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQgc3RhdGljIG1ldGhvZCmUatltAABoPU50lChqPXYAAIxfZnJvbV9vcHRpb25zKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50IGNsYXNzIG1ldGhvZCmUatxtAABoPU50lChqPXYAAIxgcGFyc2VfY29uZmlnKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLkVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50IHN0YXRpYyBtZXRob2QplGrfbQAAaD1OdJQoaj12AACMR1N1YnByb2Nlc3NTREtFbnZpcm9ubWVudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMplGribQAAaD1OdJQoaj12AACMX3RvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzLlN1YnByb2Nlc3NTREtFbnZpcm9ubWVudCBtZXRob2QplGrlbQAAaD1OdJQoaj12AACMaGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuU3VicHJvY2Vzc1NES0Vudmlyb25tZW50IHN0YXRpYyBtZXRob2QplGrobQAAaD1OdJQoaj12AACMWmZyb21fb3B0aW9ucygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmVudmlyb25tZW50cy5TdWJwcm9jZXNzU0RLRW52aXJvbm1lbnQgY2xhc3MgbWV0aG9kKZRq620AAGg9TnSUKGo9dgAAjElSdW5uZXJBUElFbnZpcm9ubWVudEhvbGRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMplGrubQAAaD1OdJQoaj12AACMV3RvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXIgbWV0aG9kKZRq8W0AAGg9TnSUKGo9dgAAjFZjYXBhYmlsaXRpZXMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5lbnZpcm9ubWVudHMuUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXIgbWV0aG9kKZRq9G0AAGg9TnSUZWoQBAAAXZQoKGo9dgAAjChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsIChtb2R1bGUplIwmbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWyUaD1OdJQoaj12AACMN2l0ZXJfdXJucygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbCmUavltAABoPU50lChqPXYAAIw5UGF5bG9hZEJ1aWxkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwplGr8bQAAaD1OdJQoaj12AACMP2J1aWxkKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuUGF5bG9hZEJ1aWxkZXIgbWV0aG9kKZRq/20AAGg9TnSUKGo9dgAAjEFwYXlsb2FkKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuUGF5bG9hZEJ1aWxkZXIgbWV0aG9kKZRqAm4AAGg9TnSUKGo9dgAAjERTY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsKZRqBW4AAGg9TnSUKGo9dgAAjEpidWlsZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLlNjaGVtYUJhc2VkUGF5bG9hZEJ1aWxkZXIgbWV0aG9kKZRqCG4AAGg9TnSUKGo9dgAAjEdJbXBsaWNpdFNjaGVtYVBheWxvYWRCdWlsZGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsKZRqC24AAGg9TnSUKGo9dgAAjEhOYW1lZFR1cGxlQmFzZWRQYXlsb2FkQnVpbGRlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbCmUag5uAABoPU50lChqPXYAAIxIQW5ub3RhdGlvbkJhc2VkUGF5bG9hZEJ1aWxkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwplGoRbgAAaD1OdJQoaj12AACMR0RhdGFjbGFzc0Jhc2VkUGF5bG9hZEJ1aWxkZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwplGoUbgAAaD1OdJQoaj12AACMPEV4dGVybmFsVHJhbnNmb3JtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsKZRqF24AAGg9TnSUKGo9dgAAjEpkZWZhdWx0X2xhYmVsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuRXh0ZXJuYWxUcmFuc2Zvcm0gbWV0aG9kKZRqGm4AAGg9TnSUKGo9dgAAjFZnZXRfbG9jYWxfbmFtZXNwYWNlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwuRXh0ZXJuYWxUcmFuc2Zvcm0gY2xhc3MgbWV0aG9kKZRqHW4AAGg9TnSUKGo9dgAAjFJvdXRlcl9uYW1lc3BhY2UoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5FeHRlcm5hbFRyYW5zZm9ybSBjbGFzcyBtZXRob2QplGogbgAAaD1OdJQoaj12AACMQ2V4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLkV4dGVybmFsVHJhbnNmb3JtIG1ldGhvZCmUaiNuAABoPU50lChqPXYAAIxUdG9fcnVubmVyX2FwaV90cmFuc2Zvcm0oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5FeHRlcm5hbFRyYW5zZm9ybSBtZXRob2QplGombgAAaD1OdJQoaj12AACMQkphdmFKYXJFeHBhbnNpb25TZXJ2aWNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsKZRqKW4AAGg9TnSUKGo9dgAAjElFeHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbC5KYXZhSmFyRXhwYW5zaW9uU2VydmljZSBtZXRob2QplGosbgAAaD1OdJQoaj12AACMQkJlYW1KYXJFeHBhbnNpb25TZXJ2aWNlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsKZRqL24AAGg9TnSUKGo9dgAAjDVtZW1vaXplKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsKZRqMm4AAGg9TnSUZWruAwAAXZQoKGo9dgAAjC1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX2phdmEgKG1vZHVsZSmUjCttb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhlGg9TnSUKGo9dgAAjElKYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX2phdmEplGo3bgAAaD1OdJQoaj12AACMYGV4cGFuc2lvbl9zZXJ2aWNlX2phciAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhLkphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QgYXR0cmlidXRlKZRqOm4AAGg9TnSUKGo9dgAAjGFleHBhbnNpb25fc2VydmljZV9wb3J0IChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX2phdmEuSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdCBhdHRyaWJ1dGUplGo9bgAAaD1OdJQoaj12AACMbXRlc3RfamF2YV9leHBhbnNpb25fZGF0YWZsb3coKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhLkphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3Qgc3RhdGljIG1ldGhvZCmUakBuAABoPU50lChqPXYAAIx0cnVuX3BpcGVsaW5lX3dpdGhfZXhwYW5zaW9uX3NlcnZpY2UoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhLkphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3Qgc3RhdGljIG1ldGhvZCmUakNuAABoPU50lChqPXYAAIxdcnVuX3BpcGVsaW5lKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfamF2YS5KYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0IHN0YXRpYyBtZXRob2QplGpGbgAAaD1OdJRlaugDAABdlCgoaj12AACMMWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTMgKG1vZHVsZSmUjC9tb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0X3B5M5RoPU50lChqPXYAAIxCZ2V0X3BheWxvYWQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTMplGpLbgAAaD1OdJQoaj12AACMUUV4dGVybmFsQW5ub3RhdGlvblBheWxvYWRUZXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzKZRqTm4AAGg9TnSUKGo9dgAAjG9nZXRfcGF5bG9hZF9mcm9tX3R5cGluZ19oaW50cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzLkV4dGVybmFsQW5ub3RhdGlvblBheWxvYWRUZXN0IG1ldGhvZCmUalFuAABoPU50lChqPXYAAIxxZ2V0X3BheWxvYWRfZnJvbV9iZWFtX3R5cGVoaW50cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzLkV4dGVybmFsQW5ub3RhdGlvblBheWxvYWRUZXN0IG1ldGhvZCmUalRuAABoPU50lGVqvgMAAF2UKChqPXYAAIwyYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0X3B5MzcgKG1vZHVsZSmUjDBtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0X3B5MzeUaD1OdJQoaj12AACMQ2dldF9wYXlsb2FkKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzNymUalluAABoPU50lChqPXYAAIxTRXh0ZXJuYWxEYXRhY2xhc3Nlc1BheWxvYWRUZXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzNymUalxuAABoPU50lChqPXYAAIxxZ2V0X3BheWxvYWRfZnJvbV90eXBpbmdfaGludHMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0X3B5MzcuRXh0ZXJuYWxEYXRhY2xhc3Nlc1BheWxvYWRUZXN0IG1ldGhvZCmUal9uAABoPU50lChqPXYAAIxzZ2V0X3BheWxvYWRfZnJvbV9iZWFtX3R5cGVoaW50cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX3Rlc3RfcHkzNy5FeHRlcm5hbERhdGFjbGFzc2VzUGF5bG9hZFRlc3QgbWV0aG9kKZRqYm4AAGg9TnSUZWrPAwAAXZQoKGo9dgAAjCphcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0gKG1vZHVsZSmUjChtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtlGg9TnSUKGo9dgAAjDdQVHJhbnNmb3JtIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0plGpnbgAAaD1OdJQoaj12AACMRHNpZGVfaW5wdXRzIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUplGpqbgAAaD1OdJQoaj12AACMQXBpcGVsaW5lIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUplGptbgAAaD1OdJQoaj12AACMPmxhYmVsIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBhdHRyaWJ1dGUplGpwbgAAaD1OdJQoaj12AACMRWRlZmF1bHRfbGFiZWwoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKZRqc24AAGg9TnSUKGo9dgAAjEh3aXRoX2lucHV0X3R5cGVzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZCmUanZuAABoPU50lChqPXYAAIxJd2l0aF9vdXRwdXRfdHlwZXMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKZRqeW4AAGg9TnSUKGo9dgAAjEl0eXBlX2NoZWNrX2lucHV0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2QplGp8bgAAaD1OdJQoaj12AACMSWluZmVyX291dHB1dF90eXBlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZCmUan9uAABoPU50lChqPXYAAIxKdHlwZV9jaGVja19vdXRwdXRzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZCmUaoJuAABoPU50lChqPXYAAIxUdHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2QplGqFbgAAaD1OdJQoaj12AACMPmV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybSBtZXRob2QplGqIbgAAaD1OdJQoaj12AACMRWdldF93aW5kb3dpbmcoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKZRqi24AAGg9TnSUKGo9dgAAjEpyZWdpc3Rlcl91cm4oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gY2xhc3MgbWV0aG9kKZRqjm4AAGg9TnSUKGo9dgAAjEV0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZCmUapFuAABoPU50lChqPXYAAIxNZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIGNsYXNzIG1ldGhvZCmUapRuAABoPU50lChqPXYAAIxPdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKZRql24AAGg9TnSUKGo9dgAAjE10b19ydW5uZXJfYXBpX3BpY2tsZWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0gbWV0aG9kKZRqmm4AAGg9TnSUKGo9dgAAjFdydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtIG1ldGhvZCmUap1uAABoPU50lChqPXYAAIw9cHRyYW5zZm9ybV9mbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtKZRqoG4AAGg9TnSUKGo9dgAAjENsYWJlbF9mcm9tX2NhbGxhYmxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0plGqjbgAAaD1OdJRlausDAABdlCgoaj12AACMKmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0cyAobW9kdWxlKZSMKG1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHOUaD1OdJQoaj12AACMSWRlZmF1bHRfd2luZG93X21hcHBpbmdfZm4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0cymUaqhuAABoPU50lChqPXYAAIxDZ2V0X3NpZGVpbnB1dF9pbmRleCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzKZRqq24AAGg9TnSUKGo9dgAAjDlTaWRlSW5wdXRNYXAgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0cymUaq5uAABoPU50lChqPXYAAIxOaXNfZ2xvYmFsbHlfd2luZG93ZWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zaWRlaW5wdXRzLlNpZGVJbnB1dE1hcCBtZXRob2QplGqxbgAAaD1OdJRlaqsDAABdlCgoaj12AACMJWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMgKG1vZHVsZSmUjCNtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0c5RoPU50lChqPXYAAIw5QXBwcm94aW1hdGVVbmlxdWUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMplGq2bgAAaD1OdJQoaj12AACMU3BhcnNlX2lucHV0X3BhcmFtcygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzLkFwcHJveGltYXRlVW5pcXVlIHN0YXRpYyBtZXRob2QplGq5bgAAaD1OdJQoaj12AACMQkFwcHJveGltYXRlVW5pcXVlLkdsb2JhbGx5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzKZRqvG4AAGg9TnSUKGo9dgAAjElleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0cy5BcHByb3hpbWF0ZVVuaXF1ZS5HbG9iYWxseSBtZXRob2QplGq/bgAAaD1OdJQoaj12AACMQEFwcHJveGltYXRlVW5pcXVlLlBlcktleSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0cymUasJuAABoPU50lChqPXYAAIxHZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMuQXBwcm94aW1hdGVVbmlxdWUuUGVyS2V5IG1ldGhvZCmUasVuAABoPU50lChqPXYAAIw8QXBwcm94aW1hdGVRdWFudGlsZXMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc3RhdHMplGrIbgAAaD1OdJQoaj12AACMRUFwcHJveGltYXRlUXVhbnRpbGVzLkdsb2JhbGx5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzKZRqy24AAGg9TnSUKGo9dgAAjExleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0cy5BcHByb3hpbWF0ZVF1YW50aWxlcy5HbG9iYWxseSBtZXRob2QplGrObgAAaD1OdJQoaj12AACMUmRpc3BsYXlfZGF0YSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzLkFwcHJveGltYXRlUXVhbnRpbGVzLkdsb2JhbGx5IG1ldGhvZCmUatFuAABoPU50lChqPXYAAIxDQXBwcm94aW1hdGVRdWFudGlsZXMuUGVyS2V5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzKZRq1G4AAGg9TnSUKGo9dgAAjEpleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0cy5BcHByb3hpbWF0ZVF1YW50aWxlcy5QZXJLZXkgbWV0aG9kKZRq124AAGg9TnSUKGo9dgAAjFBkaXNwbGF5X2RhdGEoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0cy5BcHByb3hpbWF0ZVF1YW50aWxlcy5QZXJLZXkgbWV0aG9kKZRq2m4AAGg9TnSUZWplAwAAXZQoKGo9dgAAjChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsIChtb2R1bGUplIwmbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWyUaD1OdJQoaj12AACMNVRpbWVEb21haW4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwplGrfbgAAaD1OdJQoaj12AACMQFdBVEVSTUFSSyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbC5UaW1lRG9tYWluIGF0dHJpYnV0ZSmUauJuAABoPU50lChqPXYAAIxAUkVBTF9USU1FIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gYXR0cmlidXRlKZRq5W4AAGg9TnSUKGo9dgAAjEpERVBFTkRFTlRfUkVBTF9USU1FIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gYXR0cmlidXRlKZRq6G4AAGg9TnSUKGo9dgAAjEhmcm9tX3N0cmluZygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gc3RhdGljIG1ldGhvZCmUautuAABoPU50lChqPXYAAIxKdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsLlRpbWVEb21haW4gc3RhdGljIG1ldGhvZCmUau5uAABoPU50lGVq2gMAAF2UKChqPXYAAIxFYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmFuc2Zvcm1zX2tleXdvcmRfb25seV9hcmdzX3Rlc3RfcHkzIChtb2R1bGUplIxDbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJhbnNmb3Jtc19rZXl3b3JkX29ubHlfYXJnc190ZXN0X3B5M5RoPU50lChqPXYAAIxcS2V5d29yZE9ubHlBcmdzVGVzdHMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJhbnNmb3Jtc19rZXl3b3JkX29ubHlfYXJnc190ZXN0X3B5MymUavNuAABoPU50lChqPXYAAIx+dGVzdF9zaWRlX2lucHV0X2tleXdvcmRfb25seV9hcmdzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJhbnNmb3Jtc19rZXl3b3JkX29ubHlfYXJnc190ZXN0X3B5My5LZXl3b3JkT25seUFyZ3NUZXN0cyBtZXRob2QplGr2bgAAaD1OdJQoaj12AACMe3Rlc3RfY29tYmluZV9rZXl3b3JkX29ubHlfYXJncygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyYW5zZm9ybXNfa2V5d29yZF9vbmx5X2FyZ3NfdGVzdF9weTMuS2V5d29yZE9ubHlBcmdzVGVzdHMgbWV0aG9kKZRq+W4AAGg9TnSUKGo9dgAAjHl0ZXN0X2RvX2ZuX2tleXdvcmRfb25seV9hcmdzKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJhbnNmb3Jtc19rZXl3b3JkX29ubHlfYXJnc190ZXN0X3B5My5LZXl3b3JkT25seUFyZ3NUZXN0cyBtZXRob2QplGr8bgAAaD1OdJRlagUEAABdlCgoaj12AACMJ2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciAobW9kdWxlKZSMJW1vZHVsZS1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXKUaD1OdJQoaj12AACMOkFjY3VtdWxhdGlvbk1vZGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcimUagFvAABoPU50lChqPXYAAIxGRElTQ0FSRElORyAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFjY3VtdWxhdGlvbk1vZGUgYXR0cmlidXRlKZRqBG8AAGg9TnSUKGo9dgAAjEhBQ0NVTVVMQVRJTkcgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BY2N1bXVsYXRpb25Nb2RlIGF0dHJpYnV0ZSmUagdvAABoPU50lChqPXYAAIwzVHJpZ2dlckZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIplGoKbwAAaD1OdJQoaj12AACMPm9uX2VsZW1lbnQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlRyaWdnZXJGbiBtZXRob2QplGoNbwAAaD1OdJQoaj12AACMPG9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gbWV0aG9kKZRqEG8AAGg9TnSUKGo9dgAAjD9zaG91bGRfZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuIG1ldGhvZCmUahNvAABoPU50lChqPXYAAIxDaGFzX29udGltZV9wYW5lKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gbWV0aG9kKZRqFm8AAGg9TnSUKGo9dgAAjDtvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gbWV0aG9kKZRqGW8AAGg9TnSUKGo9dgAAjDlyZXNldCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuIG1ldGhvZCmUahxvAABoPU50lChqPXYAAIxKZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5UcmlnZ2VyRm4gc3RhdGljIG1ldGhvZCmUah9vAABoPU50lChqPXYAAIxBdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuVHJpZ2dlckZuIG1ldGhvZCmUaiJvAABoPU50lChqPXYAAIw4RGVmYXVsdFRyaWdnZXIgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcimUaiVvAABoPU50lChqPXYAAIxDb25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgbWV0aG9kKZRqKG8AAGg9TnSUKGo9dgAAjEFvbl9tZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgbWV0aG9kKZRqK28AAGg9TnSUKGo9dgAAjERzaG91bGRfZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgbWV0aG9kKZRqLm8AAGg9TnSUKGo9dgAAjEBvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBtZXRob2QplGoxbwAAaD1OdJQoaj12AACMPnJlc2V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5EZWZhdWx0VHJpZ2dlciBtZXRob2QplGo0bwAAaD1OdJQoaj12AACMT2Zyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgc3RhdGljIG1ldGhvZCmUajdvAABoPU50lChqPXYAAIxGdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuRGVmYXVsdFRyaWdnZXIgbWV0aG9kKZRqOm8AAGg9TnSUKGo9dgAAjEhoYXNfb250aW1lX3BhbmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkRlZmF1bHRUcmlnZ2VyIG1ldGhvZCmUaj1vAABoPU50lChqPXYAAIw9QWZ0ZXJQcm9jZXNzaW5nVGltZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKZRqQG8AAGg9TnSUKGo9dgAAjEhvbl9lbGVtZW50KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lIG1ldGhvZCmUakNvAABoPU50lChqPXYAAIxGb25fbWVyZ2UoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUgbWV0aG9kKZRqRm8AAGg9TnSUKGo9dgAAjElzaG91bGRfZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZSBtZXRob2QplGpJbwAAaD1OdJQoaj12AACMRW9uX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUgbWV0aG9kKZRqTG8AAGg9TnSUKGo9dgAAjENyZXNldCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZSBtZXRob2QplGpPbwAAaD1OdJQoaj12AACMVGZyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZSBzdGF0aWMgbWV0aG9kKZRqUm8AAGg9TnSUKGo9dgAAjEt0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lIG1ldGhvZCmUalVvAABoPU50lChqPXYAAIxNaGFzX29udGltZV9wYW5lKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lIG1ldGhvZCmUalhvAABoPU50lChqPXYAAIw4QWZ0ZXJXYXRlcm1hcmsgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcimUaltvAABoPU50lChqPXYAAIxCTEFURV9UQUcgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBhdHRyaWJ1dGUplGpebwAAaD1OdJQoaj12AACMQGlzX2xhdGUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIG1ldGhvZCmUamFvAABoPU50lChqPXYAAIxDb25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgbWV0aG9kKZRqZG8AAGg9TnSUKGo9dgAAjEFvbl9tZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgbWV0aG9kKZRqZ28AAGg9TnSUKGo9dgAAjERzaG91bGRfZmlyZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgbWV0aG9kKZRqam8AAGg9TnSUKGo9dgAAjEBvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBtZXRob2QplGptbwAAaD1OdJQoaj12AACMPnJlc2V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlcldhdGVybWFyayBtZXRob2QplGpwbwAAaD1OdJQoaj12AACMT2Zyb21fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgc3RhdGljIG1ldGhvZCmUanNvAABoPU50lChqPXYAAIxGdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJXYXRlcm1hcmsgbWV0aG9kKZRqdm8AAGg9TnSUKGo9dgAAjEhoYXNfb250aW1lX3BhbmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyV2F0ZXJtYXJrIG1ldGhvZCmUanlvAABoPU50lChqPXYAAIw0QWZ0ZXJDb3VudCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyKZRqfG8AAGg9TnSUKGo9dgAAjD9DT1VOVF9UQUcgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IGF0dHJpYnV0ZSmUan9vAABoPU50lChqPXYAAIw/b25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudCBtZXRob2QplGqCbwAAaD1OdJQoaj12AACMPW9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IG1ldGhvZCmUaoVvAABoPU50lChqPXYAAIxAc2hvdWxkX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQgbWV0aG9kKZRqiG8AAGg9TnSUKGo9dgAAjDxvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckNvdW50IG1ldGhvZCmUaotvAABoPU50lChqPXYAAIw6cmVzZXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQgbWV0aG9kKZRqjm8AAGg9TnSUKGo9dgAAjEtmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQ291bnQgc3RhdGljIG1ldGhvZCmUapFvAABoPU50lChqPXYAAIxCdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudCBtZXRob2QplGqUbwAAaD1OdJQoaj12AACMRGhhc19vbnRpbWVfcGFuZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJDb3VudCBtZXRob2QplGqXbwAAaD1OdJQoaj12AACMNFJlcGVhdGVkbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcimUappvAABoPU50lChqPXYAAIw/b25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseSBtZXRob2QplGqdbwAAaD1OdJQoaj12AACMPW9uX21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5IG1ldGhvZCmUaqBvAABoPU50lChqPXYAAIxAc2hvdWxkX2ZpcmUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkgbWV0aG9kKZRqo28AAGg9TnSUKGo9dgAAjDxvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5SZXBlYXRlZGx5IG1ldGhvZCmUaqZvAABoPU50lChqPXYAAIw6cmVzZXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkgbWV0aG9kKZRqqW8AAGg9TnSUKGo9dgAAjEtmcm9tX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLlJlcGVhdGVkbHkgc3RhdGljIG1ldGhvZCmUaqxvAABoPU50lChqPXYAAIxCdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseSBtZXRob2QplGqvbwAAaD1OdJQoaj12AACMRGhhc19vbnRpbWVfcGFuZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuUmVwZWF0ZWRseSBtZXRob2QplGqybwAAaD1OdJQoaj12AACMMkFmdGVyQW55IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIplGq1bwAAaD1OdJQoaj12AACMPWNvbWJpbmVfb3AoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyQW55IG1ldGhvZCmUarhvAABoPU50lChqPXYAAIwyQWZ0ZXJBbGwgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcimUartvAABoPU50lChqPXYAAIw9Y29tYmluZV9vcCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJBbGwgbWV0aG9kKZRqvm8AAGg9TnSUKGo9dgAAjDNBZnRlckVhY2ggKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcimUasFvAABoPU50lChqPXYAAIw+SU5ERVhfVEFHIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIGF0dHJpYnV0ZSmUasRvAABoPU50lChqPXYAAIw+b25fZWxlbWVudCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIG1ldGhvZCmUasdvAABoPU50lChqPXYAAIw8b25fbWVyZ2UoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyLkFmdGVyRWFjaCBtZXRob2QplGrKbwAAaD1OdJQoaj12AACMP3Nob3VsZF9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2ggbWV0aG9kKZRqzW8AAGg9TnSUKGo9dgAAjDtvbl9maXJlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2ggbWV0aG9kKZRq0G8AAGg9TnSUKGo9dgAAjDlyZXNldCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIG1ldGhvZCmUatNvAABoPU50lChqPXYAAIxKZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2ggc3RhdGljIG1ldGhvZCmUatZvAABoPU50lChqPXYAAIxBdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuQWZ0ZXJFYWNoIG1ldGhvZCmUatlvAABoPU50lChqPXYAAIxDaGFzX29udGltZV9wYW5lKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5BZnRlckVhY2ggbWV0aG9kKZRq3G8AAGg9TnSUKGo9dgAAjDNPckZpbmFsbHkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcimUat9vAABoPU50lChqPXYAAIxKZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlci5PckZpbmFsbHkgc3RhdGljIG1ldGhvZCmUauJvAABoPU50lChqPXYAAIxBdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIuT3JGaW5hbGx5IG1ldGhvZCmUauVvAABoPU50lGVq+AMAAF2UKChqPXYAAIwpYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUgKG1vZHVsZSmUjCdtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGWUaD1OdJQoaj12AACMNVN0YXRlU3BlYyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUplGrqbwAAaD1OdJQoaj12AACMQ3RvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuU3RhdGVTcGVjIG1ldGhvZCmUau1vAABoPU50lChqPXYAAIw4QmFnU3RhdGVTcGVjIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSmUavBvAABoPU50lChqPXYAAIxGdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5CYWdTdGF0ZVNwZWMgbWV0aG9kKZRq828AAGg9TnSUKGo9dgAAjDhTZXRTdGF0ZVNwZWMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKZRq9m8AAGg9TnSUKGo9dgAAjEZ0b19ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlNldFN0YXRlU3BlYyBtZXRob2QplGr5bwAAaD1OdJQoaj12AACMQ0NvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSmUavxvAABoPU50lChqPXYAAIxRdG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Db21iaW5pbmdWYWx1ZVN0YXRlU3BlYyBtZXRob2QplGr/bwAAaD1OdJQoaj12AACMNVRpbWVyU3BlYyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUplGoCcAAAaD1OdJQoaj12AACMQ3RvX3J1bm5lcl9hcGkoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuVGltZXJTcGVjIG1ldGhvZCmUagVwAABoPU50lChqPXYAAIw3b25fdGltZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKZRqCHAAAGg9TnSUKGo9dgAAjD1nZXRfZG9mbl9zcGVjcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUplGoLcAAAaD1OdJQoaj12AACMP2lzX3N0YXRlZnVsX2RvZm4oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKZRqDnAAAGg9TnSUKGo9dgAAjEV2YWxpZGF0ZV9zdGF0ZWZ1bF9kb2ZuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSmUahFwAABoPU50lChqPXYAAIw4UnVudGltZVRpbWVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSmUahRwAABoPU50lChqPXYAAIw+Y2xlYXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuUnVudGltZVRpbWVyIG1ldGhvZCmUahdwAABoPU50lChqPXYAAIw8c2V0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVUaW1lciBtZXRob2QplGoacAAAaD1OdJQoaj12AACMOFJ1bnRpbWVTdGF0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUplGodcAAAaD1OdJQoaj12AACMQXByZWZldGNoKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlJ1bnRpbWVTdGF0ZSBtZXRob2QplGogcAAAaD1OdJQoaj12AACMREFjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUplGojcAAAaD1OdJQoaj12AACMSXJlYWQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuQWNjdW11bGF0aW5nUnVudGltZVN0YXRlIG1ldGhvZCmUaiZwAABoPU50lChqPXYAAIxIYWRkKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkFjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZSBtZXRob2QplGopcAAAaD1OdJQoaj12AACMSmNsZWFyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLkFjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZSBtZXRob2QplGoscAAAaD1OdJQoaj12AACMS2NvbW1pdCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5BY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUgbWV0aG9kKZRqL3AAAGg9TnSUKGo9dgAAjDtCYWdSdW50aW1lU3RhdGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKZRqMnAAAGg9TnSUKGo9dgAAjDtTZXRSdW50aW1lU3RhdGUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKZRqNXAAAGg9TnSUKGo9dgAAjEZDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUplGo4cAAAaD1OdJQoaj12AACMPFVzZXJTdGF0ZUNvbnRleHQgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlKZRqO3AAAGg9TnSUKGo9dgAAjEZnZXRfdGltZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUuVXNlclN0YXRlQ29udGV4dCBtZXRob2QplGo+cAAAaD1OdJQoaj12AACMRmdldF9zdGF0ZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZS5Vc2VyU3RhdGVDb250ZXh0IG1ldGhvZCmUakFwAABoPU50lChqPXYAAIxDY29tbWl0KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlLlVzZXJTdGF0ZUNvbnRleHQgbWV0aG9kKZRqRHAAAGg9TnSUZWo5AwAAXZQoKGo9dgAAjCRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwgKG1vZHVsZSmUjCJtb2R1bGUtYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlslGg9TnSUKGo9dgAAjDNDb0dyb3VwQnlLZXkgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCmUaklwAABoPU50lChqPXYAAIw6ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5Db0dyb3VwQnlLZXkgbWV0aG9kKZRqTHAAAGg9TnSUKGo9dgAAjC5LZXlzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwplGpPcAAAaD1OdJQoaj12AACMMFZhbHVlcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKZRqUnAAAGg9TnSUKGo9dgAAjDBLdlN3YXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCmUalVwAABoPU50lChqPXYAAIwyRGlzdGluY3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCmUalhwAABoPU50lChqPXYAAIw6UmVtb3ZlRHVwbGljYXRlcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKZRqW3AAAGg9TnSUKGo9dgAAjDRCYXRjaEVsZW1lbnRzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwplGpecAAAaD1OdJQoaj12AACMO2V4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuQmF0Y2hFbGVtZW50cyBtZXRob2QplGphcAAAaD1OdJQoaj12AACMMFJlc2h1ZmZsZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKZRqZHAAAGg9TnSUKGo9dgAAjDdleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlc2h1ZmZsZSBtZXRob2QplGpncAAAaD1OdJQoaj12AACMSHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZXNodWZmbGUgbWV0aG9kKZRqanAAAGg9TnSUKGo9dgAAjFFmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZXNodWZmbGUgc3RhdGljIG1ldGhvZCmUam1wAABoPU50lChqPXYAAIwyV2l0aEtleXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCmUanBwAABoPU50lChqPXYAAIw3R3JvdXBJbnRvQmF0Y2hlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKZRqc3AAAGg9TnSUKGo9dgAAjD5leHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLkdyb3VwSW50b0JhdGNoZXMgbWV0aG9kKZRqdnAAAGg9TnSUKGo9dgAAjC9Ub1N0cmluZyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKZRqeXAAAGg9TnSUKGo9dgAAjDNUb1N0cmluZy5LdnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCmUanxwAABoPU50lChqPXYAAIw6ZXhwYW5kKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5Ub1N0cmluZy5LdnMgbWV0aG9kKZRqf3AAAGg9TnSUKGo9dgAAjDdUb1N0cmluZy5FbGVtZW50IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwplGqCcAAAaD1OdJQoaj12AACMPmV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuVG9TdHJpbmcuRWxlbWVudCBtZXRob2QplGqFcAAAaD1OdJQoaj12AACMOVRvU3RyaW5nLkl0ZXJhYmxlcyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKZRqiHAAAGg9TnSUKGo9dgAAjEBleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlRvU3RyaW5nLkl0ZXJhYmxlcyBtZXRob2QplGqLcAAAaD1OdJQoaj12AACMLFJlaWZ5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwplGqOcAAAaD1OdJQoaj12AACMNlJlaWZ5LlRpbWVzdGFtcCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKZRqkXAAAGg9TnSUKGo9dgAAjFBhZGRfdGltZXN0YW1wX2luZm8oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlaWZ5LlRpbWVzdGFtcCBzdGF0aWMgbWV0aG9kKZRqlHAAAGg9TnSUKGo9dgAAjD1leHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlaWZ5LlRpbWVzdGFtcCBtZXRob2QplGqXcAAAaD1OdJQoaj12AACMM1JlaWZ5LldpbmRvdyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsKZRqmnAAAGg9TnSUKGo9dgAAjEphZGRfd2luZG93X2luZm8oKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlaWZ5LldpbmRvdyBzdGF0aWMgbWV0aG9kKZRqnXAAAGg9TnSUKGo9dgAAjDpleHBhbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlaWZ5LldpbmRvdyBtZXRob2QplGqgcAAAaD1OdJQoaj12AACMPVJlaWZ5LlRpbWVzdGFtcEluVmFsdWUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCmUaqNwAABoPU50lChqPXYAAIxXYWRkX3RpbWVzdGFtcF9pbmZvKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWlmeS5UaW1lc3RhbXBJblZhbHVlIHN0YXRpYyBtZXRob2QplGqmcAAAaD1OdJQoaj12AACMRGV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVpZnkuVGltZXN0YW1wSW5WYWx1ZSBtZXRob2QplGqpcAAAaD1OdJQoaj12AACMOlJlaWZ5LldpbmRvd0luVmFsdWUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbCmUaqxwAABoPU50lChqPXYAAIxRYWRkX3dpbmRvd19pbmZvKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWlmeS5XaW5kb3dJblZhbHVlIHN0YXRpYyBtZXRob2QplGqvcAAAaD1OdJQoaj12AACMQWV4cGFuZCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVpZnkuV2luZG93SW5WYWx1ZSBtZXRob2QplGqycAAAaD1OdJQoaj12AACMLFJlZ2V4IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwplGq1cAAAaD1OdJQoaj12AACMMUFMTCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4IGF0dHJpYnV0ZSmUarhwAABoPU50lChqPXYAAIw7bWF0Y2hlcygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVnZXggc3RhdGljIG1ldGhvZCmUartwAABoPU50lChqPXYAAIw/YWxsX21hdGNoZXMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4IHN0YXRpYyBtZXRob2QplGq+cAAAaD1OdJQoaj12AACMPm1hdGNoZXNfa3YoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4IHN0YXRpYyBtZXRob2QplGrBcAAAaD1OdJQoaj12AACMOGZpbmQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4IHN0YXRpYyBtZXRob2QplGrEcAAAaD1OdJQoaj12AACMPGZpbmRfYWxsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWdleCBzdGF0aWMgbWV0aG9kKZRqx3AAAGg9TnSUKGo9dgAAjDtmaW5kX2t2KCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZWdleCBzdGF0aWMgbWV0aG9kKZRqynAAAGg9TnSUKGo9dgAAjD9yZXBsYWNlX2FsbCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVnZXggc3RhdGljIG1ldGhvZCmUas1wAABoPU50lChqPXYAAIxBcmVwbGFjZV9maXJzdCgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwuUmVnZXggc3RhdGljIG1ldGhvZCmUatBwAABoPU50lChqPXYAAIw5c3BsaXQoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsLlJlZ2V4IHN0YXRpYyBtZXRob2QplGrTcAAAaD1OdJRlamEDAABdlCgoaj12AACMJmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IChtb2R1bGUplIwkbW9kdWxlLWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93lGg9TnSUKGo9dgAAjDpUaW1lc3RhbXBDb21iaW5lciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cplGrYcAAAaD1OdJQoaj12AACMSU9VVFBVVF9BVF9FT1cgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyIGF0dHJpYnV0ZSmUattwAABoPU50lChqPXYAAIxOT1VUUFVUX0FUX0VBUkxJRVNUIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lciBhdHRyaWJ1dGUplGrecAAAaD1OdJQoaj12AACMTE9VVFBVVF9BVF9MQVRFU1QgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyIGF0dHJpYnV0ZSmUauFwAABoPU50lChqPXYAAIxaT1VUUFVUX0FUX0VBUkxJRVNUX1RSQU5TRk9STUVEIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5UaW1lc3RhbXBDb21iaW5lciBhdHRyaWJ1dGUplGrkcAAAaD1OdJQoaj12AACMSmdldF9pbXBsKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlRpbWVzdGFtcENvbWJpbmVyIHN0YXRpYyBtZXRob2QplGrncAAAaD1OdJQoaj12AACMMVdpbmRvd0ZuIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdymUaupwAABoPU50lChqPXYAAIw/V2luZG93Rm4uQXNzaWduQ29udGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cplGrtcAAAaD1OdJQoaj12AACMOGFzc2lnbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbiBtZXRob2QplGrwcAAAaD1OdJQoaj12AACMPldpbmRvd0ZuLk1lcmdlQ29udGV4dCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cplGrzcAAAaD1OdJQoaj12AACMRG1lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuLk1lcmdlQ29udGV4dCBtZXRob2QplGr2cAAAaD1OdJQoaj12AACMN21lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LldpbmRvd0ZuIG1ldGhvZCmUavlwAABoPU50lChqPXYAAIw8aXNfbWVyZ2luZygpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbiBtZXRob2QplGr8cAAAaD1OdJQoaj12AACMQmdldF93aW5kb3dfY29kZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4gbWV0aG9kKZRq/3AAAGg9TnSUKGo9dgAAjE1nZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWUoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93Rm4gbWV0aG9kKZRqAnEAAGg9TnSUKGo9dgAAjEl0b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5XaW5kb3dGbiBtZXRob2QplGoFcQAAaD1OdJQoaj12AACMNkJvdW5kZWRXaW5kb3cgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KZRqCHEAAGg9TnSUKGo9dgAAjDtlbmQgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkJvdW5kZWRXaW5kb3cgYXR0cmlidXRlKZRqC3EAAGg9TnSUKGo9dgAAjD1zdGFydCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdyBhdHRyaWJ1dGUplGoOcQAAaD1OdJQoaj12AACMO2VuZCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdyBhdHRyaWJ1dGUplIwvYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdy5lbmSUaD1OdJQoaj12AACMRG1heF90aW1lc3RhbXAoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuQm91bmRlZFdpbmRvdyBtZXRob2QplGoRcQAAaD1OdJQoaj12AACMN0ludGVydmFsV2luZG93IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdymUahRxAABoPU50lChqPXYAAIw+c3RhcnQgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkludGVydmFsV2luZG93IGF0dHJpYnV0ZSmUahdxAABoPU50lChqPXYAAIw8ZW5kIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdyBhdHRyaWJ1dGUplGoacQAAaD1OdJQoaj12AACMQmludGVyc2VjdHMoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuSW50ZXJ2YWxXaW5kb3cgbWV0aG9kKZRqHXEAAGg9TnSUKGo9dgAAjD11bmlvbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5JbnRlcnZhbFdpbmRvdyBtZXRob2QplGogcQAAaD1OdJQoaj12AACMOVRpbWVzdGFtcGVkVmFsdWUgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KZRqI3EAAGg9TnSUKGo9dgAAjEB2YWx1ZSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wZWRWYWx1ZSBhdHRyaWJ1dGUplGomcQAAaD1OdJQoaj12AACMRHRpbWVzdGFtcCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuVGltZXN0YW1wZWRWYWx1ZSBhdHRyaWJ1dGUplGopcQAAaD1OdJQoaj12AACMNUdsb2JhbFdpbmRvdyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cplGoscQAAaD1OdJQoaj12AACMPHN0YXJ0IChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3cgYXR0cmlidXRlKZRqL3EAAGg9TnSUKGo9dgAAjDtOb25NZXJnaW5nV2luZG93Rm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KZRqMnEAAGg9TnSUKGo9dgAAjEZpc19tZXJnaW5nKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lk5vbk1lcmdpbmdXaW5kb3dGbiBtZXRob2QplGo1cQAAaD1OdJQoaj12AACMQW1lcmdlKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lk5vbk1lcmdpbmdXaW5kb3dGbiBtZXRob2QplGo4cQAAaD1OdJQoaj12AACMNkdsb2JhbFdpbmRvd3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KZRqO3EAAGg9TnSUKGo9dgAAjEt3aW5kb3dlZF92YWx1ZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzIGNsYXNzIG1ldGhvZCmUaj5xAABoPU50lChqPXYAAIw9YXNzaWduKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MgbWV0aG9kKZRqQXEAAGg9TnSUKGo9dgAAjEdnZXRfd2luZG93X2NvZGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93Lkdsb2JhbFdpbmRvd3MgbWV0aG9kKZRqRHEAAGg9TnSUKGo9dgAAjE50b19ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzIG1ldGhvZCmUakdxAABoPU50lChqPXYAAIxXZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5HbG9iYWxXaW5kb3dzIHN0YXRpYyBtZXRob2QplGpKcQAAaD1OdJQoaj12AACMNUZpeGVkV2luZG93cyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cplGpNcQAAaD1OdJQoaj12AACMO3NpemUgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cyBhdHRyaWJ1dGUplGpQcQAAaD1OdJQoaj12AACMPW9mZnNldCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzIGF0dHJpYnV0ZSmUalNxAABoPU50lChqPXYAAIw8YXNzaWduKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LkZpeGVkV2luZG93cyBtZXRob2QplGpWcQAAaD1OdJQoaj12AACMRmdldF93aW5kb3dfY29kZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzIG1ldGhvZCmUallxAABoPU50lChqPXYAAIxNdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuRml4ZWRXaW5kb3dzIG1ldGhvZCmUalxxAABoPU50lChqPXYAAIxWZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5GaXhlZFdpbmRvd3Mgc3RhdGljIG1ldGhvZCmUal9xAABoPU50lChqPXYAAIw3U2xpZGluZ1dpbmRvd3MgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93KZRqYnEAAGg9TnSUKGo9dgAAjD1zaXplIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBhdHRyaWJ1dGUplGplcQAAaD1OdJQoaj12AACMP3BlcmlvZCAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2xpZGluZ1dpbmRvd3MgYXR0cmlidXRlKZRqaHEAAGg9TnSUKGo9dgAAjD9vZmZzZXQgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzIGF0dHJpYnV0ZSmUamtxAABoPU50lChqPXYAAIw+YXNzaWduKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzIG1ldGhvZCmUam5xAABoPU50lChqPXYAAIxIZ2V0X3dpbmRvd19jb2RlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBtZXRob2QplGpxcQAAaD1OdJQoaj12AACMT3RvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNsaWRpbmdXaW5kb3dzIG1ldGhvZCmUanRxAABoPU50lChqPXYAAIxYZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TbGlkaW5nV2luZG93cyBzdGF0aWMgbWV0aG9kKZRqd3EAAGg9TnSUKGo9dgAAjDFTZXNzaW9ucyAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cplGp6cQAAaD1OdJQoaj12AACMO2dhcF9zaXplIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBhdHRyaWJ1dGUplGp9cQAAaD1OdJQoaj12AACMOGFzc2lnbigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBtZXRob2QplGqAcQAAaD1OdJQoaj12AACMQmdldF93aW5kb3dfY29kZXIoKSAoYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cuU2Vzc2lvbnMgbWV0aG9kKZRqg3EAAGg9TnSUKGo9dgAAjDdtZXJnZSgpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBtZXRob2QplGqGcQAAaD1OdJQoaj12AACMSXRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKCkgKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93LlNlc3Npb25zIG1ldGhvZCmUaolxAABoPU50lChqPXYAAIxSZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigpIChhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdy5TZXNzaW9ucyBzdGF0aWMgbWV0aG9kKZRqjHEAAGg9TnSUZWrBAwAAXZQoaj12AACMHmFwYWNoZV9iZWFtLnR5cGVoaW50cyAobW9kdWxlKZSMHG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHOUaD1OdJRhatsDAABdlCgoaj12AACMKWFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIChtb2R1bGUplIwnbW9kdWxlLWFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzlGg9TnSUKGo9dgAAjD1ub19hbm5vdGF0aW9ucygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMplGqTcQAAaD1OdJQoaj12AACMOVdpdGhUeXBlSGludHMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzKZRqlnEAAGg9TnSUKGo9dgAAjEhnZXRfdHlwZV9oaW50cygpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzIG1ldGhvZCmUaplxAABoPU50lChqPXYAAIxMZGVmYXVsdF90eXBlX2hpbnRzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHMgbWV0aG9kKZRqnHEAAGg9TnSUKGo9dgAAjEp3aXRoX2lucHV0X3R5cGVzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzLldpdGhUeXBlSGludHMgbWV0aG9kKZRqn3EAAGg9TnSUKGo9dgAAjEt3aXRoX291dHB1dF90eXBlcygpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycy5XaXRoVHlwZUhpbnRzIG1ldGhvZCmUaqJxAABoPU50lChqPXYAAIwOVHlwZUNoZWNrRXJyb3KUaqVxAABoPU50lChqPXYAAIw/d2l0aF9pbnB1dF90eXBlcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMplGqocQAAaD1OdJQoaj12AACMQHdpdGhfb3V0cHV0X3R5cGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycymUaqtxAABoPU50lGVqlAMAAF2UKChqPXYAAIwyYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMgKG1vZHVsZSmUjDBtb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTOUaD1OdJQoaj12AACMRElPVHlwZUhpbnRzVGVzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMplGqwcQAAaD1OdJQoaj12AACMV3Rlc3RfZnJvbV9jYWxsYWJsZSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5JT1R5cGVIaW50c1Rlc3QgbWV0aG9kKZRqs3EAAGg9TnSUKGo9dgAAjGt0ZXN0X2Zyb21fY2FsbGFibGVfcGFydGlhbF9hbm5vdGF0aW9ucygpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5JT1R5cGVIaW50c1Rlc3QgbWV0aG9kKZRqtnEAAGg9TnSUKGo9dgAAjF10ZXN0X2Zyb21fY2FsbGFibGVfY2xhc3MoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0IG1ldGhvZCmUarlxAABoPU50lChqPXYAAIxedGVzdF9mcm9tX2NhbGxhYmxlX21ldGhvZCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5JT1R5cGVIaW50c1Rlc3QgbWV0aG9kKZRqvHEAAGg9TnSUKGo9dgAAjG10ZXN0X2Zyb21fY2FsbGFibGVfY29udmVydF90b19iZWFtX3R5cGVzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzX3Rlc3RfcHkzLklPVHlwZUhpbnRzVGVzdCBtZXRob2QplGq/cQAAaD1OdJQoaj12AACMX3Rlc3RfZnJvbV9jYWxsYWJsZV9wYXJ0aWFsKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzX3Rlc3RfcHkzLklPVHlwZUhpbnRzVGVzdCBtZXRob2QplGrCcQAAaD1OdJQoaj12AACMXnRlc3RfZ2V0Y2FsbGFyZ3NfZm9yaGludHMoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnNfdGVzdF9weTMuSU9UeXBlSGludHNUZXN0IG1ldGhvZCmUasVxAABoPU50lChqPXYAAIxqdGVzdF9nZXRjYWxsYXJnc19mb3JoaW50c19kZWZhdWx0X2FyZygpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5JT1R5cGVIaW50c1Rlc3QgbWV0aG9kKZRqyHEAAGg9TnSUKGo9dgAAjGp0ZXN0X2dldGNhbGxhcmdzX2ZvcmhpbnRzX21pc3NpbmdfYXJnKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzX3Rlc3RfcHkzLklPVHlwZUhpbnRzVGVzdCBtZXRob2QplGrLcQAAaD1OdJQoaj12AACMUHRlc3Rfb3JpZ2luKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzX3Rlc3RfcHkzLklPVHlwZUhpbnRzVGVzdCBtZXRob2QplGrOcQAAaD1OdJQoaj12AACMQ0RlY29yYXRvcnNUZXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5MymUatFxAABoPU50lChqPXYAAIxXdGVzdF9ub19hbm5vdGF0aW9ucygpIChhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5My5EZWNvcmF0b3JzVGVzdCBtZXRob2QplGrUcQAAaD1OdJRlao0DAABdlCgoaj12AACMOGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5IChtb2R1bGUplIw2bW9kdWxlLWFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5lGg9TnSUKGo9dgAAjFNleHRyYWN0X29wdGlvbmFsX3R5cGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5KZRq2XEAAGg9TnSUKGo9dgAAjERpc19BbnkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5KZRq3HEAAGg9TnSUKGo9dgAAjElpc19uZXdfdHlwZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkplGrfcQAAaD1OdJQoaj12AACMUmNvbnZlcnRfdG9fYmVhbV90eXBlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eSmUauJxAABoPU50lChqPXYAAIxTY29udmVydF90b19iZWFtX3R5cGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eSmUauVxAABoPU50lChqPXYAAIxUY29udmVydF90b190eXBpbmdfdHlwZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkplGrocQAAaD1OdJQoaj12AACMVWNvbnZlcnRfdG9fdHlwaW5nX3R5cGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eSmUautxAABoPU50lGVq5wMAAF2UKChqPXYAAIwmYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMgKG1vZHVsZSmUjCRtb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXOUaD1OdJQoaj12AACMM3BvcF9vbmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRq8HEAAGg9TnSUKGo9dgAAjDNwb3BfdHdvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUavNxAABoPU50lChqPXYAAIw1cG9wX3RocmVlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUavZxAABoPU50lChqPXYAAIw2cHVzaF92YWx1ZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGr5cQAAaD1OdJQoaj12AACML25vcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGr8cQAAaD1OdJQoaj12AACMM3BvcF90b3AoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRq/3EAAGg9TnSUKGo9dgAAjDFyb3RfbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGoCcgAAaD1OdJQoaj12AACMM3JvdF90d28oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqBXIAAGg9TnSUKGo9dgAAjDVyb3RfdGhyZWUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqCHIAAGg9TnSUKGo9dgAAjDRyb3RfZm91cigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGoLcgAAaD1OdJQoaj12AACMM2R1cF90b3AoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqDnIAAGg9TnSUKGo9dgAAjDF1bmFyeSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGoRcgAAaD1OdJQoaj12AACMOnVuYXJ5X3Bvc2l0aXZlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUahRyAABoPU50lChqPXYAAIw6dW5hcnlfbmVnYXRpdmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqF3IAAGg9TnSUKGo9dgAAjDh1bmFyeV9pbnZlcnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqGnIAAGg9TnSUKGo9dgAAjDV1bmFyeV9ub3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqHXIAAGg9TnSUKGo9dgAAjDl1bmFyeV9jb252ZXJ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUaiByAABoPU50lChqPXYAAIw0Z2V0X2l0ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqI3IAAGg9TnSUKGo9dgAAjD9zeW1tZXRyaWNfYmluYXJ5X29wKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUaiZyAABoPU50lChqPXYAAIw4YmluYXJ5X3Bvd2VyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUailyAABoPU50lChqPXYAAIw5aW5wbGFjZV9wb3dlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGoscgAAaD1OdJQoaj12AACMO2JpbmFyeV9tdWx0aXBseSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGovcgAAaD1OdJQoaj12AACMPGlucGxhY2VfbXVsdGlwbHkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqMnIAAGg9TnSUKGo9dgAAjDliaW5hcnlfZGl2aWRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUajVyAABoPU50lChqPXYAAIw6aW5wbGFjZV9kaXZpZGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqOHIAAGg9TnSUKGo9dgAAjD9iaW5hcnlfZmxvb3JfZGl2aWRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUajtyAABoPU50lChqPXYAAIxAaW5wbGFjZV9mbG9vcl9kaXZpZGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqPnIAAGg9TnSUKGo9dgAAjD5iaW5hcnlfdHJ1ZV9kaXZpZGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqQXIAAGg9TnSUKGo9dgAAjD9pbnBsYWNlX3RydWVfZGl2aWRlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUakRyAABoPU50lChqPXYAAIw5YmluYXJ5X21vZHVsbygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGpHcgAAaD1OdJQoaj12AACMOmlucGxhY2VfbW9kdWxvKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUakpyAABoPU50lChqPXYAAIw2YmluYXJ5X2FkZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGpNcgAAaD1OdJQoaj12AACMN2lucGxhY2VfYWRkKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUalByAABoPU50lChqPXYAAIw7YmluYXJ5X3N1YnRyYWN0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUalNyAABoPU50lChqPXYAAIw8aW5wbGFjZV9zdWJ0cmFjdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGpWcgAAaD1OdJQoaj12AACMOWJpbmFyeV9zdWJzY3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqWXIAAGg9TnSUKGo9dgAAjDliaW5hcnlfbHNoaWZ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUlQEAAQAAAAAAalxyAABoPU50lChqPXYAAIw6aW5wbGFjZV9sc2hpZnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqX3IAAGg9TnSUKGo9dgAAjDliaW5hcnlfcnNoaWZ0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUamJyAABoPU50lChqPXYAAIw6aW5wbGFjZV9yc2hpZnQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqZXIAAGg9TnSUKGo9dgAAjDZiaW5hcnlfYW5kKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUamhyAABoPU50lChqPXYAAIw3aW5wbGFjZV9hbmQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqa3IAAGg9TnSUKGo9dgAAjDZiaW5hcnlfeG9yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUam5yAABoPU50lChqPXYAAIw3aW5wbGFjZV94b3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqcXIAAGg9TnSUKGo9dgAAjDViaW5hcnlfb3IoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqdHIAAGg9TnSUKGo9dgAAjDZpbnBhbGNlX29yKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUandyAABoPU50lChqPXYAAIw4c3RvcmVfc3Vic2NyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUanpyAABoPU50lChqPXYAAIw2cHJpbnRfaXRlbSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGp9cgAAaD1OdJQoaj12AACMOXByaW50X25ld2xpbmUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqgHIAAGg9TnSUKGo9dgAAjDdsaXN0X2FwcGVuZCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGqDcgAAaD1OdJQoaj12AACMM21hcF9hZGQoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqhnIAAGg9TnSUKGo9dgAAjDdsb2FkX2xvY2FscygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGqJcgAAaD1OdJQoaj12AACMNWV4ZWNfc3RtdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGqMcgAAaD1OdJQoaj12AACMN2J1aWxkX2NsYXNzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUao9yAABoPU50lChqPXYAAIw7dW5wYWNrX3NlcXVlbmNlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUapJyAABoPU50lChqPXYAAIw0ZHVwX3RvcHgoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqlXIAAGg9TnSUKGo9dgAAjDZzdG9yZV9hdHRyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUaphyAABoPU50lChqPXYAAIw3ZGVsZXRlX2F0dHIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqm3IAAGg9TnSUKGo9dgAAjDhzdG9yZV9nbG9iYWwoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqnnIAAGg9TnSUKGo9dgAAjDlkZWxldGVfZ2xvYmFsKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUaqFyAABoPU50lChqPXYAAIw2bG9hZF9jb25zdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGqkcgAAaD1OdJQoaj12AACMNWxvYWRfbmFtZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGqncgAAaD1OdJQoaj12AACMN2J1aWxkX3R1cGxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUaqpyAABoPU50lChqPXYAAIw2YnVpbGRfbGlzdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGqtcgAAaD1OdJQoaj12AACMNWJ1aWxkX21hcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGqwcgAAaD1OdJQoaj12AACMNWxvYWRfYXR0cigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGqzcgAAaD1OdJQoaj12AACMN2xvYWRfbWV0aG9kKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUarZyAABoPU50lChqPXYAAIw2Y29tcGFyZV9vcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGq5cgAAaD1OdJQoaj12AACMN2ltcG9ydF9uYW1lKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUarxyAABoPU50lChqPXYAAIw3aW1wb3J0X2Zyb20oKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqv3IAAGg9TnSUKGo9dgAAjDdsb2FkX2dsb2JhbCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGrCcgAAaD1OdJQoaj12AACMNXN0b3JlX21hcCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGrFcgAAaD1OdJQoaj12AACMNWxvYWRfZmFzdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGrIcgAAaD1OdJQoaj12AACMNnN0b3JlX2Zhc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRqy3IAAGg9TnSUKGo9dgAAjDdkZWxldGVfZmFzdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGrOcgAAaD1OdJQoaj12AACMOGxvYWRfY2xvc3VyZSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGrRcgAAaD1OdJQoaj12AACMNmxvYWRfZGVyZWYoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRq1HIAAGg9TnSUKGo9dgAAjDltYWtlX2Z1bmN0aW9uKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUatdyAABoPU50lChqPXYAAIw4bWFrZV9jbG9zdXJlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMub3Bjb2RlcymUatpyAABoPU50lChqPXYAAIw3YnVpbGRfc2xpY2UoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRq3XIAAGg9TnSUKGo9dgAAjD1idWlsZF9saXN0X3VucGFjaygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGrgcgAAaD1OdJQoaj12AACMPmJ1aWxkX3R1cGxlX3VucGFjaygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXMplGrjcgAAaD1OdJQoaj12AACMSGJ1aWxkX3R1cGxlX3VucGFja193aXRoX2NhbGwoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzKZRq5nIAAGg9TnSUZWpvAwAAXZQoKGo9dgAAjCZhcGFjaGVfYmVhbS50eXBlaGludHMuc2NoZW1hcyAobW9kdWxlKZSMJG1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHMuc2NoZW1hc5RoPU50lChqPXYAAIw7U2NoZW1hVHlwZVJlZ2lzdHJ5IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMuc2NoZW1hcymUautyAABoPU50lChqPXYAAIw/YWRkKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy5zY2hlbWFzLlNjaGVtYVR5cGVSZWdpc3RyeSBtZXRob2QplGrucgAAaD1OdJQoaj12AACMTGdldF90eXBpbmdfYnlfaWQoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMuU2NoZW1hVHlwZVJlZ2lzdHJ5IG1ldGhvZCmUavFyAABoPU50lChqPXYAAIxMZ2V0X3NjaGVtYV9ieV9pZCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMuc2NoZW1hcy5TY2hlbWFUeXBlUmVnaXN0cnkgbWV0aG9kKZRq9HIAAGg9TnSUKGo9dgAAjEB0eXBpbmdfdG9fcnVubmVyX2FwaSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMplGr3cgAAaD1OdJQoaj12AACMQnR5cGluZ19mcm9tX3J1bm5lcl9hcGkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5zY2hlbWFzKZRq+nIAAGg9TnSUKGo9dgAAjENuYW1lZF90dXBsZV9mcm9tX3NjaGVtYSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMplGr9cgAAaD1OdJQoaj12AACMQW5hbWVkX3R1cGxlX3RvX3NjaGVtYSgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMplGoAcwAAaD1OdJRlaq0DAABdlCgoaj12AACMMGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSAobW9kdWxlKZSMLm1vZHVsZS1hcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2WUaD1OdJQoaj12AACMElR5cGVJbmZlcmVuY2VFcnJvcpRqBXMAAGg9TnSUKGo9dgAAjEZpbnN0YW5jZV90b190eXBlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UplGoIcwAAaD1OdJQoaj12AACMQHVuaW9uX2xpc3QoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSmUagtzAABoPU50lChqPXYAAIw4Q29uc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSmUag5zAABoPU50lChqPXYAAIxGdW53cmFwKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5Db25zdCBzdGF0aWMgbWV0aG9kKZRqEXMAAGg9TnSUKGo9dgAAjEp1bndyYXBfYWxsKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5Db25zdCBzdGF0aWMgbWV0aG9kKZRqFHMAAGg9TnSUKGo9dgAAjD1GcmFtZVN0YXRlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UplGoXcwAAaD1OdJQoaj12AACMQmNvcHkoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUgbWV0aG9kKZRqGnMAAGg9TnSUKGo9dgAAjEhjb25zdF90eXBlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlIG1ldGhvZCmUah1zAABoPU50lChqPXYAAIxJZ2V0X2Nsb3N1cmUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUgbWV0aG9kKZRqIHMAAGg9TnSUKGo9dgAAjEpjbG9zdXJlX3R5cGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUgbWV0aG9kKZRqI3MAAGg9TnSUKGo9dgAAjEhnZXRfZ2xvYmFsKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZS5GcmFtZVN0YXRlIG1ldGhvZCmUaiZzAABoPU50lChqPXYAAIxGZ2V0X25hbWUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlLkZyYW1lU3RhdGUgbWV0aG9kKZRqKXMAAGg9TnSUKGo9dgAAjDt1bmlvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKZRqLHMAAGg9TnSUKGo9dgAAjERmaW5hbGl6ZV9oaW50cygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlKZRqL3MAAGg9TnSUKGo9dgAAjEJlbGVtZW50X3R5cGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSmUajJzAABoPU50lChqPXYAAIxFa2V5X3ZhbHVlX3R5cGVzKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UplGo1cwAAaD1OdJQoaj12AACMPkJvdW5kTWV0aG9kIChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UplGo4cwAAaD1OdJQoaj12AACMPmhhc2hhYmxlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UplGo7cwAAaD1OdJQoaj12AACMR2luZmVyX3JldHVybl90eXBlKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UplGo+cwAAaD1OdJQoaj12AACMTGluZmVyX3JldHVybl90eXBlX2Z1bmMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSmUakFzAABoPU50lGVq1gMAAF2UKChqPXYAAIw5YXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlX3Rlc3RfcHkzIChtb2R1bGUplIw3bW9kdWxlLWFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZV90ZXN0X3B5M5RoPU50lChqPXYAAIxQVHJpdmlhbEluZmVyZW5jZVRlc3QgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZV90ZXN0X3B5MymUakZzAABoPU50lChqPXYAAIxhYXNzZXJ0UmV0dXJuVHlwZSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2VfdGVzdF9weTMuVHJpdmlhbEluZmVyZW5jZVRlc3QgbWV0aG9kKZRqSXMAAGg9TnSUKGo9dgAAjGR0ZXN0QnVpbGRMaXN0VW5wYWNrKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZV90ZXN0X3B5My5Ucml2aWFsSW5mZXJlbmNlVGVzdCBtZXRob2QplGpMcwAAaD1OdJQoaj12AACMZXRlc3RCdWlsZFR1cGxlVW5wYWNrKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZV90ZXN0X3B5My5Ucml2aWFsSW5mZXJlbmNlVGVzdCBtZXRob2QplGpPcwAAaD1OdJRlakEDAABdlCgoaj12AACMKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2sgKG1vZHVsZSmUjCZtb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVja5RoPU50lChqPXYAAIw+QWJzdHJhY3REb0ZuV3JhcHBlciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjaymUalRzAABoPU50lChqPXYAAIxGd3JhcHBlcigpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLkFic3RyYWN0RG9GbldyYXBwZXIgbWV0aG9kKZRqV3MAAGg9TnSUKGo9dgAAjEtzdGFydF9idW5kbGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5BYnN0cmFjdERvRm5XcmFwcGVyIG1ldGhvZCmUalpzAABoPU50lChqPXYAAIxGcHJvY2VzcygpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLkFic3RyYWN0RG9GbldyYXBwZXIgbWV0aG9kKZRqXXMAAGg9TnSUKGo9dgAAjExmaW5pc2hfYnVuZGxlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suQWJzdHJhY3REb0ZuV3JhcHBlciBtZXRob2QplGpgcwAAaD1OdJQoaj12AACMQU91dHB1dENoZWNrV3JhcHBlckRvRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2splGpjcwAAaD1OdJQoaj12AACMSXdyYXBwZXIoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5PdXRwdXRDaGVja1dyYXBwZXJEb0ZuIG1ldGhvZCmUamZzAABoPU50lChqPXYAAIw/VHlwZUNoZWNrV3JhcHBlckRvRm4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2splGppcwAAaD1OdJQoaj12AACMR3dyYXBwZXIoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tXcmFwcGVyRG9GbiBtZXRob2QplGpscwAAaD1OdJQoaj12AACMR3Byb2Nlc3MoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjay5UeXBlQ2hlY2tXcmFwcGVyRG9GbiBtZXRob2QplGpvcwAAaD1OdJQoaj12AACMPVR5cGVDaGVja0NvbWJpbmVGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjaymUanJzAABoPU50lChqPXYAAIxQY3JlYXRlX2FjY3VtdWxhdG9yKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuIG1ldGhvZCmUanVzAABoPU50lChqPXYAAIxHYWRkX2lucHV0KCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuIG1ldGhvZCmUanhzAABoPU50lChqPXYAAIxQbWVyZ2VfYWNjdW11bGF0b3JzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuIG1ldGhvZCmUantzAABoPU50lChqPXYAAIxFY29tcGFjdCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja0NvbWJpbmVGbiBtZXRob2QplGp+cwAAaD1OdJQoaj12AACMTGV4dHJhY3Rfb3V0cHV0KCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrQ29tYmluZUZuIG1ldGhvZCmUaoFzAABoPU50lChqPXYAAIw7VHlwZUNoZWNrVmlzaXRvciAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVjaGVjaymUaoRzAABoPU50lChqPXYAAIxVZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1Zpc2l0b3IgbWV0aG9kKZRqh3MAAGg9TnSUKGo9dgAAjFVsZWF2ZV9jb21wb3NpdGVfdHJhbnNmb3JtKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2suVHlwZUNoZWNrVmlzaXRvciBtZXRob2QplGqKcwAAaD1OdJQoaj12AACMS3Zpc2l0X3RyYW5zZm9ybSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrLlR5cGVDaGVja1Zpc2l0b3IgbWV0aG9kKZRqjXMAAGg9TnSUZWpuAwAAXZQoKGo9dgAAjDZhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMgKG1vZHVsZSmUjDRtb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzlGg9TnSUKGo9dgAAjEZNYWluSW5wdXRUZXN0IChjbGFzcyBpbiBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMplGqScwAAaD1OdJQoaj12AACMXXRlc3RfdHlwZWRfZG9mbl9tZXRob2QoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QgbWV0aG9kKZRqlXMAAGg9TnSUKGo9dgAAjHN0ZXN0X3R5cGVkX2RvZm5fbWV0aG9kX3dpdGhfY2xhc3NfZGVjb3JhdG9ycygpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGqYcwAAaD1OdJQoaj12AACMX3Rlc3RfdHlwZWRfZG9mbl9pbnN0YW5jZSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGqbcwAAaD1OdJQoaj12AACMY3Rlc3RfdHlwZWRfY2FsbGFibGVfaW5zdGFuY2UoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QgbWV0aG9kKZRqnnMAAGg9TnSUKGo9dgAAjGp0ZXN0X3R5cGVkX2NhbGxhYmxlX2l0ZXJhYmxlX291dHB1dCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGqhcwAAaD1OdJQoaj12AACManRlc3RfdHlwZWRfZG9mbl9tZXRob2Rfbm90X2l0ZXJhYmxlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0IG1ldGhvZCmUaqRzAABoPU50lChqPXYAAIxpdGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fbm9uZSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGqncwAAaD1OdJQoaj12AACMbXRlc3RfdHlwZWRfZG9mbl9tZXRob2RfcmV0dXJuX29wdGlvbmFsKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0IG1ldGhvZCmUaqpzAABoPU50lChqPXYAAIx6dGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fb3B0aW9uYWxfbm90X2l0ZXJhYmxlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0IG1ldGhvZCmUaq1zAABoPU50lChqPXYAAIxndGVzdF90eXBlZF9jYWxsYWJsZV9ub3RfaXRlcmFibGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QgbWV0aG9kKZRqsHMAAGg9TnSUKGo9dgAAjF10ZXN0X3R5cGVkX2RvZm5fa3dvbmx5KCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5NYWluSW5wdXRUZXN0IG1ldGhvZCmUarNzAABoPU50lChqPXYAAIxhdGVzdF90eXBlZF9kb2ZuX3Zhcl9rd2FyZ3MoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QgbWV0aG9kKZRqtnMAAGg9TnSUKGo9dgAAjGp0ZXN0X3R5cGVkX2NhbGxhYmxlX3N0cmluZ19saXRlcmFscygpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGq5cwAAaD1OdJQoaj12AACMZnRlc3RfdHlwZWRfZG9mbl9zdHJpbmdfbGl0ZXJhbHMoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QgbWV0aG9kKZRqvHMAAGg9TnSUKGo9dgAAjFV0ZXN0X3R5cGVkX21hcCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGq/cwAAaD1OdJQoaj12AACMZXRlc3RfdHlwZWRfbWFwX3JldHVybl9vcHRpb25hbCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGrCcwAAaD1OdJQoaj12AACMWXRlc3RfdHlwZWRfZmxhdG1hcCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGrFcwAAaD1OdJQoaj12AACMcnRlc3RfdHlwZWRfZmxhdG1hcF9vdXRwdXRfaGludF9ub3RfaXRlcmFibGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLk1haW5JbnB1dFRlc3QgbWV0aG9kKZRqyHMAAGg9TnSUKGo9dgAAjHN0ZXN0X3R5cGVkX2ZsYXRtYXBfb3V0cHV0X3ZhbHVlX25vdF9pdGVyYWJsZSgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGrLcwAAaD1OdJQoaj12AACMYnRlc3RfdHlwZWRfZmxhdG1hcF9vcHRpb25hbCgpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuTWFpbklucHV0VGVzdCBtZXRob2QplGrOcwAAaD1OdJQoaj12AACMSEFubm90YXRpb25zVGVzdCAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzKZRq0XMAAGg9TnSUKGo9dgAAjFh0ZXN0X3BhcmRvX2RvZm4oKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdCBtZXRob2QplGrUcwAAaD1OdJQoaj12AACMZXRlc3RfcGFyZG9fZG9mbl9ub3RfaXRlcmFibGUoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdCBtZXRob2QplGrXcwAAaD1OdJQoaj12AACMW3Rlc3RfcGFyZG9fd3JhcHBlcigpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuQW5ub3RhdGlvbnNUZXN0IG1ldGhvZCmUatpzAABoPU50lChqPXYAAIxhdGVzdF9wYXJkb193cmFwcGVyX3R1cGxlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5Bbm5vdGF0aW9uc1Rlc3QgbWV0aG9kKZRq3XMAAGg9TnSUKGo9dgAAjGh0ZXN0X3BhcmRvX3dyYXBwZXJfbm90X2l0ZXJhYmxlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5Bbm5vdGF0aW9uc1Rlc3QgbWV0aG9kKZRq4HMAAGg9TnSUKGo9dgAAjF50ZXN0X2ZsYXRfbWFwX3dyYXBwZXIoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdCBtZXRob2QplGrjcwAAaD1OdJQoaj12AACMbnRlc3RfZmxhdF9tYXBfd3JhcHBlcl9vcHRpb25hbF9vdXRwdXQoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdCBtZXRob2QplGrmcwAAaD1OdJQoaj12AACMZHRlc3RfZmxhdF9tYXBfdHVwbGVfd3JhcHBlcigpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuQW5ub3RhdGlvbnNUZXN0IG1ldGhvZCmUaulzAABoPU50lChqPXYAAIxZdGVzdF9tYXBfd3JhcHBlcigpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWRfcGlwZWxpbmVfdGVzdF9weTMuQW5ub3RhdGlvbnNUZXN0IG1ldGhvZCmUauxzAABoPU50lChqPXYAAIxpdGVzdF9tYXBfd3JhcHBlcl9vcHRpb25hbF9vdXRwdXQoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVkX3BpcGVsaW5lX3Rlc3RfcHkzLkFubm90YXRpb25zVGVzdCBtZXRob2QplGrvcwAAaD1OdJQoaj12AACMV3Rlc3RfbWFwX3R1cGxlKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5Bbm5vdGF0aW9uc1Rlc3QgbWV0aG9kKZRq8nMAAGg9TnSUKGo9dgAAjFx0ZXN0X2ZpbHRlcl93cmFwcGVyKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5My5Bbm5vdGF0aW9uc1Rlc3QgbWV0aG9kKZRq9XMAAGg9TnSUZWrLAwAAXZQoKGo9dgAAjChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIChtb2R1bGUplIwmbW9kdWxlLWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHOUaD1OdJQoaj12AACMN1R5cGVWYXJpYWJsZSAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cymUavpzAABoPU50lChqPXYAAIxMbWF0Y2hfdHlwZV92YXJpYWJsZXMoKSAoYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlVmFyaWFibGUgbWV0aG9kKZRq/XMAAGg9TnSUKGo9dgAAjEtiaW5kX3R5cGVfdmFyaWFibGVzKCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZVZhcmlhYmxlIG1ldGhvZCmUagB0AABoPU50lChqPXYAAIw5V2luZG93ZWRWYWx1ZSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMplGoDdAAAaD1OdJRlaoIDAABdlCgoaj12AACMMWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNfdGVzdF9weTMgKG1vZHVsZSmUjC9tb2R1bGUtYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c190ZXN0X3B5M5RoPU50lChqPXYAAIxIVGVzdFBhckRvQW5ub3RhdGlvbnMgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNfdGVzdF9weTMplGoIdAAAaD1OdJQoaj12AACMXXRlc3Rfd2l0aF9zaWRlX2lucHV0KCkgKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNfdGVzdF9weTMuVGVzdFBhckRvQW5ub3RhdGlvbnMgbWV0aG9kKZRqC3QAAGg9TnSUKGo9dgAAjGB0ZXN0X3BlcDQ4NF9hbm5vdGF0aW9ucygpIChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzX3Rlc3RfcHkzLlRlc3RQYXJEb0Fubm90YXRpb25zIG1ldGhvZCmUag50AABoPU50lGVqjwMAAF2UKGo9dgAAjBphcGFjaGVfYmVhbS51dGlscyAobW9kdWxlKZSMGG1vZHVsZS1hcGFjaGVfYmVhbS51dGlsc5RoPU50lGFqxwMAAF2UKChqPXYAAIwmYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnMgKG1vZHVsZSmUjCRtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnOUaD1OdJQoaj12AACMFkJlYW1EZXByZWNhdGlvbldhcm5pbmeUahV0AABoPU50lChqPXYAAIw0YW5ub3RhdGUoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zKZRqGHQAAGg9TnSUKGo9dgAAjDZkZXByZWNhdGVkKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucymUaht0AABoPU50lChqPXYAAIw4ZXhwZXJpbWVudGFsKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucymUah50AABoPU50lChqPXYAAIwxd3JhcHMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zKZRqIXQAAGg9TnSUZWrdAwAAXZQoKGo9dgAAjCxhcGFjaGVfYmVhbS51dGlscy5pbnRlcmFjdGl2ZV91dGlscyAobW9kdWxlKZSMKm1vZHVsZS1hcGFjaGVfYmVhbS51dGlscy5pbnRlcmFjdGl2ZV91dGlsc5RoPU50lChqPXYAAIw/aXNfaW5faXB5dGhvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMuaW50ZXJhY3RpdmVfdXRpbHMplGomdAAAaD1OdJQoaj12AACMQGlzX2luX25vdGVib29rKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5pbnRlcmFjdGl2ZV91dGlscymUail0AABoPU50lChqPXYAAIxIYWx0ZXJfbGFiZWxfaWZfaXB5dGhvbigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMuaW50ZXJhY3RpdmVfdXRpbHMplGosdAAAaD1OdJRlaogDAABdlCgoaj12AACMIWFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbiAobW9kdWxlKZSMH21vZHVsZS1hcGFjaGVfYmVhbS51dGlscy5wbHVnaW6UaD1OdJQoaj12AACMLkJlYW1QbHVnaW4gKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbimUajF0AABoPU50lChqPXYAAIxHZ2V0X2FsbF9zdWJjbGFzc2VzKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbi5CZWFtUGx1Z2luIGNsYXNzIG1ldGhvZCmUajR0AABoPU50lChqPXYAAIxJZ2V0X2FsbF9wbHVnaW5fcGF0aHMoKSAoYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luLkJlYW1QbHVnaW4gY2xhc3MgbWV0aG9kKZRqN3QAAGg9TnSUZWp4AwAAXZQoKGo9dgAAjCRhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMgKG1vZHVsZSmUjCJtb2R1bGUtYXBhY2hlX2JlYW0udXRpbHMucHJvY2Vzc2VzlGg9TnSUKGo9dgAAjC5jYWxsKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMplGo8dAAAaD1OdJQoaj12AACMNGNoZWNrX2NhbGwoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3NlcymUaj90AABoPU50lChqPXYAAIw2Y2hlY2tfb3V0cHV0KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMplGpCdAAAaD1OdJQoaj12AACML1BvcGVuKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXMplGpFdAAAaD1OdJRlamoDAABdlCgoaj12AACMI2FwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyIChtb2R1bGUplIwhbW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVylGg9TnSUKGo9dgAAjC1Qcm9maWxlIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcimUakp0AABoPU50lChqPXYAAIw1U09SVEJZIChhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5Qcm9maWxlIGF0dHJpYnV0ZSmUak10AABoPU50lChqPXYAAIxJZGVmYXVsdF9maWxlX2NvcHlfZm4oKSAoYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuUHJvZmlsZSBzdGF0aWMgbWV0aG9kKZRqUHQAAGg9TnSUKGo9dgAAjElmYWN0b3J5X2Zyb21fb3B0aW9ucygpIChhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlci5Qcm9maWxlIHN0YXRpYyBtZXRob2QplGpTdAAAaD1OdJQoaj12AACMNE1lbW9yeVJlcG9ydGVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5wcm9maWxlcimUalZ0AABoPU50lChqPXYAAIw6c3RhcnQoKSAoYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuTWVtb3J5UmVwb3J0ZXIgbWV0aG9kKZRqWXQAAGg9TnSUKGo9dgAAjDlzdG9wKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVyLk1lbW9yeVJlcG9ydGVyIG1ldGhvZCmUalx0AABoPU50lChqPXYAAIxAcmVwb3J0X29uY2UoKSAoYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXIuTWVtb3J5UmVwb3J0ZXIgbWV0aG9kKZRqX3QAAGg9TnSUZWq8AwAAXZQoKGo9dgAAjCZhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscyAobW9kdWxlKZSMJG1vZHVsZS1hcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlsc5RoPU50lChqPXYAAIw0cGFja19BbnkoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzKZRqZHQAAGg9TnSUKGo9dgAAjDZ1bnBhY2tfQW55KCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscymUamd0AABoPU50lChqPXYAAIw3cGFyc2VfQnl0ZXMoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzKZRqanQAAGg9TnSUKGo9dgAAjDdwYWNrX1N0cnVjdCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucHJvdG9fdXRpbHMplGptdAAAaD1OdJQoaj12AACMN2Zyb21fbWljcm9zKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscymUanB0AABoPU50lChqPXYAAIw4dG9fVGltZXN0YW1wKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlscymUanN0AABoPU50lChqPXYAAIw6ZnJvbV9UaW1lc3RhbXAoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzKZRqdnQAAGg9TnSUZWp0AwAAXZQoKGo9dgAAjCBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSAobW9kdWxlKZSMHm1vZHVsZS1hcGFjaGVfYmVhbS51dGlscy5yZXRyeZRoPU50lChqPXYAAIwSUGVybWFuZW50RXhjZXB0aW9ulGp7dAAAaD1OdJQoaj12AACMPUZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSmUan50AABoPU50lChqPXYAAIxDcmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KZRqgXQAAGg9TnSUKGo9dgAAjFByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF9ub3Rmb3VuZF9maWx0ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KZRqhHQAAGg9TnSUKGo9dgAAjE9yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucmV0cnkplGqHdAAAaD1OdJQoaj12AACMW3JldHJ5X29uX3NlcnZlcl9lcnJvcnNfdGltZW91dF9vcl9xdW90YV9pc3N1ZXNfZmlsdGVyKCkgKGluIG1vZHVsZSBhcGFjaGVfYmVhbS51dGlscy5yZXRyeSmUaop0AABoPU50lChqPXYAAIxDcmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXIoKSAoaW4gbW9kdWxlIGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5KZRqjXQAAGg9TnSUKGo9dgAAjChDbG9jayAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udXRpbHMucmV0cnkplGqQdAAAaD1OdJQoaj12AACMLnNsZWVwKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnJldHJ5LkNsb2NrIG1ldGhvZCmUapN0AABoPU50lChqPXYAAIwwbm9fcmV0cmllcygpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucmV0cnkplGqWdAAAaD1OdJQoaj12AACMPndpdGhfZXhwb25lbnRpYWxfYmFja29mZigpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMucmV0cnkplGqZdAAAaD1OdJRlan8DAABdlCgoaj12AACMLGFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyIChtb2R1bGUplIwqbW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVylGg9TnSUKGo9dgAAjD9TdWJwcm9jZXNzU2VydmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlcimUap50AABoPU50lChqPXYAAIxFc3RhcnQoKSAoYXBhY2hlX2JlYW0udXRpbHMuc3VicHJvY2Vzc19zZXJ2ZXIuU3VicHJvY2Vzc1NlcnZlciBtZXRob2QplGqhdAAAaD1OdJQoaj12AACMRHN0b3AoKSAoYXBhY2hlX2JlYW0udXRpbHMuc3VicHJvY2Vzc19zZXJ2ZXIuU3VicHJvY2Vzc1NlcnZlciBtZXRob2QplGqkdAAAaD1OdJQoaj12AACMTmxvY2FsX3RlbXBfZGlyKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLlN1YnByb2Nlc3NTZXJ2ZXIgbWV0aG9kKZRqp3QAAGg9TnSUKGo9dgAAjDxKYXZhSmFyU2VydmVyIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlcimUaqp0AABoPU50lChqPXYAAIxPQVBBQ0hFX1JFUE9TSVRPUlkgKGFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLkphdmFKYXJTZXJ2ZXIgYXR0cmlidXRlKZRqrXQAAGg9TnSUKGo9dgAAjEtCRUFNX0dST1VQX0lEIChhcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlci5KYXZhSmFyU2VydmVyIGF0dHJpYnV0ZSmUarB0AABoPU50lChqPXYAAIxHSkFSX0NBQ0hFIChhcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlci5KYXZhSmFyU2VydmVyIGF0dHJpYnV0ZSmUarN0AABoPU50lChqPXYAAIxLamFyX25hbWUoKSAoYXBhY2hlX2JlYW0udXRpbHMuc3VicHJvY2Vzc19zZXJ2ZXIuSmF2YUphclNlcnZlciBjbGFzcyBtZXRob2QplGq2dAAAaD1OdJQoaj12AACMVHBhdGhfdG9fbWF2ZW5famFyKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLkphdmFKYXJTZXJ2ZXIgY2xhc3MgbWV0aG9kKZRquXQAAGg9TnSUKGo9dgAAjFNwYXRoX3RvX2JlYW1famFyKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVyLkphdmFKYXJTZXJ2ZXIgY2xhc3MgbWV0aG9kKZRqvHQAAGg9TnSUKGo9dgAAjExsb2NhbF9qYXIoKSAoYXBhY2hlX2JlYW0udXRpbHMuc3VicHJvY2Vzc19zZXJ2ZXIuSmF2YUphclNlcnZlciBjbGFzcyBtZXRob2QplGq/dAAAaD1OdJQoaj12AACMO3BpY2tfcG9ydCgpIChpbiBtb2R1bGUgYXBhY2hlX2JlYW0udXRpbHMuc3VicHJvY2Vzc19zZXJ2ZXIplGrCdAAAaD1OdJRlaqYDAABdlCgoaj12AACML2FwYWNoZV9iZWFtLnV0aWxzLnRocmVhZF9wb29sX2V4ZWN1dG9yIChtb2R1bGUplIwtbW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzLnRocmVhZF9wb29sX2V4ZWN1dG9ylGg9TnSUKGo9dgAAjE1VbmJvdW5kZWRUaHJlYWRQb29sRXhlY3V0b3IgKGNsYXNzIGluIGFwYWNoZV9iZWFtLnV0aWxzLnRocmVhZF9wb29sX2V4ZWN1dG9yKZRqx3QAAGg9TnSUKGo9dgAAjFRzdWJtaXQoKSAoYXBhY2hlX2JlYW0udXRpbHMudGhyZWFkX3Bvb2xfZXhlY3V0b3IuVW5ib3VuZGVkVGhyZWFkUG9vbEV4ZWN1dG9yIG1ldGhvZCmUasp0AABoPU50lChqPXYAAIxWc2h1dGRvd24oKSAoYXBhY2hlX2JlYW0udXRpbHMudGhyZWFkX3Bvb2xfZXhlY3V0b3IuVW5ib3VuZGVkVGhyZWFkUG9vbEV4ZWN1dG9yIG1ldGhvZCmUas10AABoPU50lGVqrAMAAF2UKChqPXYAAIwkYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIChtb2R1bGUplIwibW9kdWxlLWFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcJRoPU50lChqPXYAAIwwVGltZXN0YW1wIChjbGFzcyBpbiBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAplGrSdAAAaD1OdJQoaj12AACMOm9mKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAgc3RhdGljIG1ldGhvZCmUatV0AABoPU50lChqPXYAAIw7bm93KCkgKGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcC5UaW1lc3RhbXAgc3RhdGljIG1ldGhvZCmUath0AABoPU50lChqPXYAAIxIZnJvbV91dGNfZGF0ZXRpbWUoKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBjbGFzcyBtZXRob2QplGrbdAAAaD1OdJQoaj12AACMQ2Zyb21fcmZjMzMzOSgpIChhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wIGNsYXNzIG1ldGhvZCmUat50AABoPU50lChqPXYAAIw8cHJlZGVjZXNzb3IoKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBtZXRob2QplGrhdAAAaD1OdJQoaj12AACMQHRvX3V0Y19kYXRldGltZSgpIChhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wIG1ldGhvZCmUauR0AABoPU50lChqPXYAAIw7dG9fcmZjMzMzOSgpIChhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuVGltZXN0YW1wIG1ldGhvZCmUaud0AABoPU50lChqPXYAAIw5dG9fcHJvdG8oKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBtZXRob2QplGrqdAAAaD1OdJQoaj12AACMQmZyb21fcHJvdG8oKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcCBzdGF0aWMgbWV0aG9kKZRq7XQAAGg9TnSUKGo9dgAAjC9EdXJhdGlvbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wKZRq8HQAAGg9TnSUKGo9dgAAjDlvZigpIChhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuRHVyYXRpb24gc3RhdGljIG1ldGhvZCmUavN0AABoPU50lChqPXYAAIw4dG9fcHJvdG8oKSAoYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wLkR1cmF0aW9uIG1ldGhvZCmUavZ0AABoPU50lChqPXYAAIxBZnJvbV9wcm90bygpIChhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAuRHVyYXRpb24gc3RhdGljIG1ldGhvZCmUavl0AABoPU50lGVqnQMAAF2UKChqPXYAAIwfYXBhY2hlX2JlYW0udXRpbHMudXJucyAobW9kdWxlKZSMHW1vZHVsZS1hcGFjaGVfYmVhbS51dGlscy51cm5zlGg9TnSUKGo9dgAAjC1SdW5uZXJBcGlGbiAoY2xhc3MgaW4gYXBhY2hlX2JlYW0udXRpbHMudXJucymUav50AABoPU50lChqPXYAAIxFdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoKSAoYXBhY2hlX2JlYW0udXRpbHMudXJucy5SdW5uZXJBcGlGbiBtZXRob2QplGoBdQAAaD1OdJQoaj12AACMQHJlZ2lzdGVyX3VybigpIChhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuIGNsYXNzIG1ldGhvZCmUagR1AABoPU50lChqPXYAAIxHcmVnaXN0ZXJfcGlja2xlX3VybigpIChhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuIGNsYXNzIG1ldGhvZCmUagd1AABoPU50lChqPXYAAIw7dG9fcnVubmVyX2FwaSgpIChhcGFjaGVfYmVhbS51dGlscy51cm5zLlJ1bm5lckFwaUZuIG1ldGhvZCmUagp1AABoPU50lChqPXYAAIxDZnJvbV9ydW5uZXJfYXBpKCkgKGFwYWNoZV9iZWFtLnV0aWxzLnVybnMuUnVubmVyQXBpRm4gY2xhc3MgbWV0aG9kKZRqDXUAAGg9TnSUZWpWAwAAXZQoaj12AACMHGFwYWNoZV9iZWFtLnZlcnNpb24gKG1vZHVsZSmUjBptb2R1bGUtYXBhY2hlX2JlYW0udmVyc2lvbpRoPU50lGFqoAMAAF2UKGo9dgAAjBRhcGFjaGVfYmVhbSAobW9kdWxlKZSMEm1vZHVsZS1hcGFjaGVfYmVhbZRoPU50lGF1jAZpbWFnZXOUjAtzcGhpbngudXRpbJSMEEZpbGVuYW1lVW5pcURpY3SUk5QpgZSPlGKMB2RsZmlsZXOUavWOAACMDURvd25sb2FkRmlsZXOUk5QpgZSMEm9yaWdpbmFsX2ltYWdlX3VyaZR9lIwJdGVtcF9kYXRhlH2UjAtyZWZfY29udGV4dJR9lIwRaW50ZXJzcGhpbnhfY2FjaGWUfZQoaDFoMErP64RefZQojAVjOnZhcpR9lCiMEkNPX0ZVVFVSRV9ESVZJU0lPTpQojAZQeXRob26UjAMzLjiUjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5DT19GVVRVUkVfRElWSVNJT06UjAEtlHSUjBBQWU1FTV9ET01BSU5fTUVNlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUFlNRU1fRE9NQUlOX01FTZRqDY8AAHSUjBBQWU1FTV9ET01BSU5fT0JKlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUFlNRU1fRE9NQUlOX09CSpRqDY8AAHSUjBBQWU1FTV9ET01BSU5fUkFXlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUFlNRU1fRE9NQUlOX1JBV5RqDY8AAHSUjB5QWV9WRUNUT1JDQUxMX0FSR1VNRU5UU19PRkZTRVSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QWV9WRUNUT1JDQUxMX0FSR1VNRU5UU19PRkZTRVSUag2PAAB0lIwQUHlCeXRlQXJyYXlfVHlwZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X1R5cGWUag2PAAB0lIwMUHlCeXRlc19UeXBllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX1R5cGWUag2PAAB0lIwPUHlDYWxsSXRlcl9UeXBllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2l0ZXJhdG9yLmh0bWwjYy5QeUNhbGxJdGVyX1R5cGWUag2PAAB0lIwLUHlDZWxsX1R5cGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX1R5cGWUag2PAAB0lIwLUHlDb2RlX1R5cGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZS5odG1sI2MuUHlDb2RlX1R5cGWUag2PAAB0lIwOUHlDb21wbGV4X1R5cGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X1R5cGWUag2PAAB0lIwTUHlDb250ZXh0VG9rZW5fVHlwZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb250ZXh0dmFycy5odG1sI2MuUHlDb250ZXh0VG9rZW5fVHlwZZRqDY8AAHSUjBFQeUNvbnRleHRWYXJfVHlwZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb250ZXh0dmFycy5odG1sI2MuUHlDb250ZXh0VmFyX1R5cGWUag2PAAB0lIwOUHlDb250ZXh0X1R5cGWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udGV4dHZhcnMuaHRtbCNjLlB5Q29udGV4dF9UeXBllGoNjwAAdJSMC1B5Q29yb19UeXBllChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Nvcm8uaHRtbCNjLlB5Q29yb19UeXBllGoNjwAAdJSMF1B5RGF0ZVRpbWVfVGltZVpvbmVfVVRDlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX1RpbWVab25lX1VUQ5RqDY8AAHSUjAtQeURpY3RfVHlwZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfVHlwZZRqDY8AAHSUjAxQeUZsb2F0X1R5cGWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfVHlwZZRqDY8AAHSUjBBQeUZyb3plblNldF9UeXBllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NldC5odG1sI2MuUHlGcm96ZW5TZXRfVHlwZZRqDY8AAHSUjA9QeUZ1bmN0aW9uX1R5cGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fVHlwZZRqDY8AAHSUjApQeUdlbl9UeXBllChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2dlbi5odG1sI2MuUHlHZW5fVHlwZZRqDY8AAHSUjBZQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfRnJvemVuTW9kdWxlc5RqDY8AAHSUjBVQeUluc3RhbmNlTWV0aG9kX1R5cGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeUluc3RhbmNlTWV0aG9kX1R5cGWUag2PAAB0lIwLUHlMaXN0X1R5cGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X1R5cGWUag2PAAB0lIwLUHlMb25nX1R5cGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX1R5cGWUag2PAAB0lIwNUHlNZXRob2RfVHlwZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZXRob2QuaHRtbCNjLlB5TWV0aG9kX1R5cGWUag2PAAB0lIwNUHlNb2R1bGVfVHlwZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX1R5cGWUag2PAAB0lIwOUHlPU19JbnB1dEhvb2uUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5T1NfSW5wdXRIb29rlGoNjwAAdJSMHFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXKUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXKUag2PAAB0lIwPUHlQcm9wZXJ0eV9UeXBllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbCNjLlB5UHJvcGVydHlfVHlwZZRqDY8AAHSUjA5QeVNlcUl0ZXJfVHlwZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pdGVyYXRvci5odG1sI2MuUHlTZXFJdGVyX1R5cGWUag2PAAB0lIwKUHlTZXRfVHlwZZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X1R5cGWUag2PAAB0lIwMUHlTbGljZV9UeXBllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NsaWNlLmh0bWwjYy5QeVNsaWNlX1R5cGWUag2PAAB0lIwdUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHVwbGUuaHRtbCNjLlB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxklGoNjwAAdJSMDFB5VHJhY2VfQ0FMTJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVRyYWNlX0NBTEyUag2PAAB0lIwOUHlUcmFjZV9DX0NBTEyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9DX0NBTEyUag2PAAB0lIwTUHlUcmFjZV9DX0VYQ0VQVElPTpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVRyYWNlX0NfRVhDRVBUSU9OlGoNjwAAdJSMEFB5VHJhY2VfQ19SRVRVUk6UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9DX1JFVFVSTpRqDY8AAHSUjBFQeVRyYWNlX0VYQ0VQVElPTpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVRyYWNlX0VYQ0VQVElPTpRqDY8AAHSUjAxQeVRyYWNlX0xJTkWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUcmFjZV9MSU5FlGoNjwAAdJSMDlB5VHJhY2VfT1BDT0RFlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5VHJhY2VfT1BDT0RFlGoNjwAAdJSMDlB5VHJhY2VfUkVUVVJOlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5VHJhY2VfUkVUVVJOlGoNjwAAdJSMDFB5VHVwbGVfVHlwZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9UeXBllGoNjwAAdJSMC1B5VHlwZV9UeXBllChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9UeXBllGoNjwAAdJSMDlB5VW5pY29kZV9UeXBllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9UeXBllGoNjwAAdJSME1B5X0J5dGVzV2FybmluZ0ZsYWeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfQnl0ZXNXYXJuaW5nRmxhZ5RqDY8AAHSUjAxQeV9EZWJ1Z0ZsYWeUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfRGVidWdGbGFnlGoNjwAAdJSMGFB5X0RvbnRXcml0ZUJ5dGVjb2RlRmxhZ5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9Eb250V3JpdGVCeXRlY29kZUZsYWeUag2PAAB0lIwLUHlfRWxsaXBzaXOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2xpY2UuaHRtbCNjLlB5X0VsbGlwc2lzlGoNjwAAdJSMCFB5X0ZhbHNllChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Jvb2wuaHRtbCNjLlB5X0ZhbHNllGoNjwAAdJSMDVB5X0Zyb3plbkZsYWeUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfRnJvemVuRmxhZ5RqDY8AAHSUjBhQeV9IYXNoUmFuZG9taXphdGlvbkZsYWeUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnlGoNjwAAdJSMGFB5X0lnbm9yZUVudmlyb25tZW50RmxhZ5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9JZ25vcmVFbnZpcm9ubWVudEZsYWeUag2PAAB0lIwOUHlfSW5zcGVjdEZsYWeUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfSW5zcGVjdEZsYWeUag2PAAB0lIwSUHlfSW50ZXJhY3RpdmVGbGFnlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X0ludGVyYWN0aXZlRmxhZ5RqDY8AAHSUjA9QeV9Jc29sYXRlZEZsYWeUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfSXNvbGF0ZWRGbGFnlGoNjwAAdJSMHlB5X0xlZ2FjeVdpbmRvd3NGU0VuY29kaW5nRmxhZ5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9MZWdhY3lXaW5kb3dzRlNFbmNvZGluZ0ZsYWeUag2PAAB0lIwZUHlfTGVnYWN5V2luZG93c1N0ZGlvRmxhZ5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9MZWdhY3lXaW5kb3dzU3RkaW9GbGFnlGoNjwAAdJSMDVB5X05vU2l0ZUZsYWeUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfTm9TaXRlRmxhZ5RqDY8AAHSUjBZQeV9Ob1VzZXJTaXRlRGlyZWN0b3J5lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X05vVXNlclNpdGVEaXJlY3RvcnmUag2PAAB0lIwHUHlfTm9uZZQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ub25lLmh0bWwjYy5QeV9Ob25llGoNjwAAdJSMEVB5X05vdEltcGxlbWVudGVklChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlfTm90SW1wbGVtZW50ZWSUag2PAAB0lIwPUHlfT3B0aW1pemVGbGFnlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X09wdGltaXplRmxhZ5RqDY8AAHSUjAxQeV9RdWlldEZsYWeUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfUXVpZXRGbGFnlGoNjwAAdJSMB1B5X1RydWWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYm9vbC5odG1sI2MuUHlfVHJ1ZZRqDY8AAHSUjBZQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X1VuYnVmZmVyZWRTdGRpb0ZsYWeUag2PAAB0lIwOUHlfVmVyYm9zZUZsYWeUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfVmVyYm9zZUZsYWeUag2PAAB0lIwNUHlfZXZhbF9pbnB1dJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlfZXZhbF9pbnB1dJRqDY8AAHSUjA1QeV9maWxlX2lucHV0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeV9maWxlX2lucHV0lGoNjwAAdJSMDVB5X21vZF9jcmVhdGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeV9tb2RfY3JlYXRllGoNjwAAdJSMC1B5X21vZF9leGVjlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlfbW9kX2V4ZWOUag2PAAB0lIwPUHlfc2luZ2xlX2lucHV0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeV9zaW5nbGVfaW5wdXSUag2PAAB0lIwOX1B5X05vbmVTdHJ1Y3SUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuX1B5X05vbmVTdHJ1Y3SUag2PAAB0lHWMBmM6dHlwZZR9lCiMDVB5QVNDSUlPYmplY3SUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlBU0NJSU9iamVjdJRqDY8AAHSUjA5QeUFzeW5jTWV0aG9kc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeUFzeW5jTWV0aG9kc5RqDY8AAHSUjA1QeUJ1ZmZlclByb2NzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5QnVmZmVyUHJvY3OUag2PAAB0lIwRUHlCeXRlQXJyYXlPYmplY3SUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheU9iamVjdJRqDY8AAHSUjA1QeUJ5dGVzT2JqZWN0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzT2JqZWN0lGoNjwAAdJSMC1B5Q0Z1bmN0aW9ulChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5Q0Z1bmN0aW9ulGoNjwAAdJSMF1B5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzlGoNjwAAdJSMCVB5Q2Fwc3VsZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGWUag2PAAB0lIwUUHlDYXBzdWxlX0Rlc3RydWN0b3KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0Rlc3RydWN0b3KUag2PAAB0lIwMUHlDZWxsT2JqZWN0lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NlbGwuaHRtbCNjLlB5Q2VsbE9iamVjdJRqDY8AAHSUjAxQeUNvZGVPYmplY3SUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZS5odG1sI2MuUHlDb2RlT2JqZWN0lGoNjwAAdJSMFlB5Q29tcGFjdFVuaWNvZGVPYmplY3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlDb21wYWN0VW5pY29kZU9iamVjdJRqDY8AAHSUjA9QeUNvbXBpbGVyRmxhZ3OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5Q29tcGlsZXJGbGFnc5RqDY8AAHSUjA9QeUNvbXBsZXhPYmplY3SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4T2JqZWN0lGoNjwAAdJSMCFB5Q29uZmlnlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZ5RqDY8AAHSUjAlQeUNvbnRleHSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udGV4dHZhcnMuaHRtbCNjLlB5Q29udGV4dJRqDY8AAHSUjA5QeUNvbnRleHRUb2tlbpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb250ZXh0dmFycy5odG1sI2MuUHlDb250ZXh0VG9rZW6Uag2PAAB0lIwMUHlDb250ZXh0VmFylChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbnRleHR2YXJzLmh0bWwjYy5QeUNvbnRleHRWYXKUag2PAAB0lIwMUHlDb3JvT2JqZWN0lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Nvcm8uaHRtbCNjLlB5Q29yb09iamVjdJRqDY8AAHSUjAxQeURpY3RPYmplY3SUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0T2JqZWN0lGoNjwAAdJSMDVB5RmxvYXRPYmplY3SUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRPYmplY3SUag2PAAB0lIwNUHlGcmFtZU9iamVjdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlGcmFtZU9iamVjdJRqDY8AAHSUjBBQeUZ1bmN0aW9uT2JqZWN0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Z1bmN0aW9uLmh0bWwjYy5QeUZ1bmN0aW9uT2JqZWN0lGoNjwAAdJSMC1B5R2VuT2JqZWN0lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2dlbi5odG1sI2MuUHlHZW5PYmplY3SUag2PAAB0lIwLUHlHZXRTZXREZWaUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlHZXRTZXREZWaUag2PAAB0lIwSUHlJbnRlcnByZXRlclN0YXRllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZZRqDY8AAHSUjAxQeUxpc3RPYmplY3SUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0T2JqZWN0lGoNjwAAdJSMDFB5TG9uZ09iamVjdJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdPYmplY3SUag2PAAB0lIwQUHlNYXBwaW5nTWV0aG9kc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU1hcHBpbmdNZXRob2RzlGoNjwAAdJSMFFB5TWVtQWxsb2NhdG9yRG9tYWlulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUHlNZW1BbGxvY2F0b3JEb21haW6Uag2PAAB0lIwQUHlNZW1BbGxvY2F0b3JFeJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtQWxsb2NhdG9yRXiUag2PAAB0lIwLUHlNZW1iZXJEZWaUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlNZW1iZXJEZWaUag2PAAB0lIwLUHlNZXRob2REZWaUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlNZXRob2REZWaUag2PAAB0lIwLUHlNb2R1bGVEZWaUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZURlZpRqDY8AAHSUjBBQeU1vZHVsZURlZl9TbG90lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVEZWZfU2xvdJRqDY8AAHSUjA9QeU51bWJlck1ldGhvZHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzlGoNjwAAdJSMCFB5T2JqZWN0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5T2JqZWN0lGoNjwAAdJSMFlB5T2JqZWN0QXJlbmFBbGxvY2F0b3KUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU9iamVjdEFyZW5hQWxsb2NhdG9ylGoNjwAAdJSMC1B5UHJlQ29uZmlnlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVByZUNvbmZpZ5RqDY8AAHSUjBFQeVNlcXVlbmNlTWV0aG9kc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVNlcXVlbmNlTWV0aG9kc5RqDY8AAHSUjAtQeVNldE9iamVjdJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0T2JqZWN0lGoNjwAAdJSMCFB5U3RhdHVzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVN0YXR1c5RqDY8AAHSUjBVQeVN0cnVjdFNlcXVlbmNlX0Rlc2OUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHVwbGUuaHRtbCNjLlB5U3RydWN0U2VxdWVuY2VfRGVzY5RqDY8AAHSUjBZQeVN0cnVjdFNlcXVlbmNlX0ZpZWxklChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVN0cnVjdFNlcXVlbmNlX0ZpZWxklGoNjwAAdJSMDVB5VGhyZWFkU3RhdGWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZZRqDY8AAHSUjA1QeVR1cGxlT2JqZWN0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlT2JqZWN0lGoNjwAAdJSMDFB5VHlwZU9iamVjdJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVPYmplY3SUag2PAAB0lIwLUHlUeXBlX1Nsb3SUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX1Nsb3SUag2PAAB0lIwLUHlUeXBlX1NwZWOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX1NwZWOUag2PAAB0lIwPUHlVbmljb2RlT2JqZWN0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZU9iamVjdJRqDY8AAHSUjAtQeVZhck9iamVjdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeVZhck9iamVjdJRqDY8AAHSUjBBQeVdpZGVTdHJpbmdMaXN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVdpZGVTdHJpbmdMaXN0lGoNjwAAdJSMB1B5X1VDUzGUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVUNTMZRqDY8AAHSUjAdQeV9VQ1MylChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VDUzKUag2PAAB0lIwHUHlfVUNTNJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VQ1M0lGoNjwAAdJSMClB5X1VOSUNPREWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERZRqDY8AAHSUjAlQeV9idWZmZXKUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXKUag2PAAB0lIwKUHlfY29tcGxleJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeV9jb21wbGV4lGoNjwAAdJSMDFB5X3RyYWNlZnVuY5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV90cmFjZWZ1bmOUag2PAAB0lIwIUHlfdHNzX3SUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfdHNzX3SUag2PAAB0lIwQX1B5Q0Z1bmN0aW9uRmFzdJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5fUHlDRnVuY3Rpb25GYXN0lGoNjwAAdJSMHF9QeUNGdW5jdGlvbkZhc3RXaXRoS2V5d29yZHOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuX1B5Q0Z1bmN0aW9uRmFzdFdpdGhLZXl3b3Jkc5RqDY8AAHSUjAdfZnJvemVulChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuX2Zyb3plbpRqDY8AAHSUjAhfaW5pdHRhYpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbXBvcnQuaHRtbCNjLl9pbml0dGFilGoNjwAAdJSMCWFsbG9jZnVuY5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5hbGxvY2Z1bmOUag2PAAB0lIwKYmluYXJ5ZnVuY5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5iaW5hcnlmdW5jlGoNjwAAdJSMDGRlc2NyZ2V0ZnVuY5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5kZXNjcmdldGZ1bmOUag2PAAB0lIwMZGVzY3JzZXRmdW5jlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLmRlc2Nyc2V0ZnVuY5RqDY8AAHSUjApkZXN0cnVjdG9ylChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLmRlc3RydWN0b3KUag2PAAB0lIwIZnJlZWZ1bmOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuZnJlZWZ1bmOUag2PAAB0lIwLZ2V0YXR0cmZ1bmOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuZ2V0YXR0cmZ1bmOUag2PAAB0lIwMZ2V0YXR0cm9mdW5jlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLmdldGF0dHJvZnVuY5RqDY8AAHSUjA1nZXRidWZmZXJwcm9jlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLmdldGJ1ZmZlcnByb2OUag2PAAB0lIwLZ2V0aXRlcmZ1bmOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuZ2V0aXRlcmZ1bmOUag2PAAB0lIwIaGFzaGZ1bmOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuaGFzaGZ1bmOUag2PAAB0lIwIaW5pdHByb2OUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuaW5pdHByb2OUag2PAAB0lIwHaW5xdWlyeZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLmlucXVpcnmUag2PAAB0lIwMaXRlcm5leHRmdW5jlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLml0ZXJuZXh0ZnVuY5RqDY8AAHSUjAdsZW5mdW5jlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLmxlbmZ1bmOUag2PAAB0lIwHbmV3ZnVuY5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5uZXdmdW5jlGoNjwAAdJSMDW9iam9iamFyZ3Byb2OUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2Mub2Jqb2JqYXJncHJvY5RqDY8AAHSUjApvYmpvYmpwcm9jlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLm9iam9ianByb2OUag2PAAB0lIwRcmVsZWFzZWJ1ZmZlcnByb2OUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MucmVsZWFzZWJ1ZmZlcnByb2OUag2PAAB0lIwIcmVwcmZ1bmOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MucmVwcmZ1bmOUag2PAAB0lIwLcmljaGNtcGZ1bmOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MucmljaGNtcGZ1bmOUag2PAAB0lIwLc2V0YXR0cmZ1bmOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2Muc2V0YXR0cmZ1bmOUag2PAAB0lIwMc2V0YXR0cm9mdW5jlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLnNldGF0dHJvZnVuY5RqDY8AAHSUjAxzc2l6ZWFyZ2Z1bmOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2Muc3NpemVhcmdmdW5jlGoNjwAAdJSMD3NzaXplb2JqYXJncHJvY5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5zc2l6ZW9iamFyZ3Byb2OUag2PAAB0lIwLdGVybmFyeWZ1bmOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MudGVybmFyeWZ1bmOUag2PAAB0lIwMdHJhdmVyc2Vwcm9jlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2djc3VwcG9ydC5odG1sI2MudHJhdmVyc2Vwcm9jlGoNjwAAdJSMCXVuYXJ5ZnVuY5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy51bmFyeWZ1bmOUag2PAAB0lIwOdmVjdG9yY2FsbGZ1bmOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MudmVjdG9yY2FsbGZ1bmOUag2PAAB0lIwJdmlzaXRwcm9jlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2djc3VwcG9ydC5odG1sI2MudmlzaXRwcm9jlGoNjwAAdJR1jApjOmZ1bmN0aW9ulH2UKIwOUHlBbnlTZXRfQ2hlY2uUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeUFueVNldF9DaGVja5RqDY8AAHSUjBNQeUFueVNldF9DaGVja0V4YWN0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NldC5odG1sI2MuUHlBbnlTZXRfQ2hlY2tFeGFjdJRqDY8AAHSUjAtQeUFyZ19QYXJzZZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9hcmcuaHRtbCNjLlB5QXJnX1BhcnNllGoNjwAAdJSMEFB5QXJnX1BhcnNlVHVwbGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19QYXJzZVR1cGxllGoNjwAAdJSMG1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9hcmcuaHRtbCNjLlB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc5RqDY8AAHSUjBFQeUFyZ19VbnBhY2tUdXBsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9hcmcuaHRtbCNjLlB5QXJnX1VucGFja1R1cGxllGoNjwAAdJSMDVB5QXJnX1ZhUGFyc2WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYXJnLmh0bWwjYy5QeUFyZ19WYVBhcnNllGoNjwAAdJSMHVB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FyZy5odG1sI2MuUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHOUag2PAAB0lIweUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FyZy5odG1sI2MuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzlGoNjwAAdJSMDFB5Qm9vbF9DaGVja5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ib29sLmh0bWwjYy5QeUJvb2xfQ2hlY2uUag2PAAB0lIwPUHlCb29sX0Zyb21Mb25nlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Jvb2wuaHRtbCNjLlB5Qm9vbF9Gcm9tTG9uZ5RqDY8AAHSUjB5QeUJ1ZmZlcl9GaWxsQ29udGlndW91c1N0cmlkZXOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9GaWxsQ29udGlndW91c1N0cmlkZXOUag2PAAB0lIwRUHlCdWZmZXJfRmlsbEluZm+UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9GaWxsSW5mb5RqDY8AAHSUjBdQeUJ1ZmZlcl9Gcm9tQ29udGlndW91c5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX0Zyb21Db250aWd1b3VzlGoNjwAAdJSME1B5QnVmZmVyX0dldFBvaW50ZXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJ1ZmZlcl9HZXRQb2ludGVylGoNjwAAdJSMFVB5QnVmZmVyX0lzQ29udGlndW91c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX0lzQ29udGlndW91c5RqDY8AAHSUjBBQeUJ1ZmZlcl9SZWxlYXNllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCdWZmZXJfUmVsZWFzZZRqDY8AAHSUjBdQeUJ1ZmZlcl9TaXplRnJvbUZvcm1hdJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX1NpemVGcm9tRm9ybWF0lGoNjwAAdJSMFVB5QnVmZmVyX1RvQ29udGlndW91c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QnVmZmVyX1RvQ29udGlndW91c5RqDY8AAHSUjBVQeUJ5dGVBcnJheV9BU19TVFJJTkeUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9BU19TVFJJTkeUag2PAAB0lIwUUHlCeXRlQXJyYXlfQXNTdHJpbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9Bc1N0cmluZ5RqDY8AAHSUjBFQeUJ5dGVBcnJheV9DaGVja5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0NoZWNrlGoNjwAAdJSMFlB5Qnl0ZUFycmF5X0NoZWNrRXhhY3SUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9DaGVja0V4YWN0lGoNjwAAdJSMElB5Qnl0ZUFycmF5X0NvbmNhdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0NvbmNhdJRqDY8AAHSUjBZQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVhcnJheS5odG1sI2MuUHlCeXRlQXJyYXlfRnJvbU9iamVjdJRqDY8AAHSUjB1QeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ieXRlYXJyYXkuaHRtbCNjLlB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXpllGoNjwAAdJSMFFB5Qnl0ZUFycmF5X0dFVF9TSVpFlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVhcnJheS5odG1sI2MuUHlCeXRlQXJyYXlfR0VUX1NJWkWUag2PAAB0lIwSUHlCeXRlQXJyYXlfUmVzaXpllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVhcnJheS5odG1sI2MuUHlCeXRlQXJyYXlfUmVzaXpllGoNjwAAdJSMEFB5Qnl0ZUFycmF5X1NpemWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZWFycmF5Lmh0bWwjYy5QeUJ5dGVBcnJheV9TaXpllGoNjwAAdJSMEVB5Qnl0ZXNfQVNfU1RSSU5HlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX0FTX1NUUklOR5RqDY8AAHSUjBBQeUJ5dGVzX0FzU3RyaW5nlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX0FzU3RyaW5nlGoNjwAAdJSMF1B5Qnl0ZXNfQXNTdHJpbmdBbmRTaXpllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZZRqDY8AAHSUjA1QeUJ5dGVzX0NoZWNrlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX0NoZWNrlGoNjwAAdJSMElB5Qnl0ZXNfQ2hlY2tFeGFjdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ieXRlcy5odG1sI2MuUHlCeXRlc19DaGVja0V4YWN0lGoNjwAAdJSMDlB5Qnl0ZXNfQ29uY2F0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX0NvbmNhdJRqDY8AAHSUjBRQeUJ5dGVzX0NvbmNhdEFuZERlbJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ieXRlcy5odG1sI2MuUHlCeXRlc19Db25jYXRBbmREZWyUag2PAAB0lIwSUHlCeXRlc19Gcm9tRm9ybWF0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX0Zyb21Gb3JtYXSUag2PAAB0lIwTUHlCeXRlc19Gcm9tRm9ybWF0VpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ieXRlcy5odG1sI2MuUHlCeXRlc19Gcm9tRm9ybWF0VpRqDY8AAHSUjBJQeUJ5dGVzX0Zyb21PYmplY3SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZXMuaHRtbCNjLlB5Qnl0ZXNfRnJvbU9iamVjdJRqDY8AAHSUjBJQeUJ5dGVzX0Zyb21TdHJpbmeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZXMuaHRtbCNjLlB5Qnl0ZXNfRnJvbVN0cmluZ5RqDY8AAHSUjBlQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXpllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXpllGoNjwAAdJSMEFB5Qnl0ZXNfR0VUX1NJWkWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZXMuaHRtbCNjLlB5Qnl0ZXNfR0VUX1NJWkWUag2PAAB0lIwMUHlCeXRlc19TaXpllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYy5QeUJ5dGVzX1NpemWUag2PAAB0lIwQUHlDYWxsSXRlcl9DaGVja5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pdGVyYXRvci5odG1sI2MuUHlDYWxsSXRlcl9DaGVja5RqDY8AAHSUjA5QeUNhbGxJdGVyX05ld5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pdGVyYXRvci5odG1sI2MuUHlDYWxsSXRlcl9OZXeUag2PAAB0lIwQUHlDYWxsYWJsZV9DaGVja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5Q2FsbGFibGVfQ2hlY2uUag2PAAB0lIwUUHlDYXBzdWxlX0NoZWNrRXhhY3SUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0NoZWNrRXhhY3SUag2PAAB0lIwUUHlDYXBzdWxlX0dldENvbnRleHSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldENvbnRleHSUag2PAAB0lIwXUHlDYXBzdWxlX0dldERlc3RydWN0b3KUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldERlc3RydWN0b3KUag2PAAB0lIwRUHlDYXBzdWxlX0dldE5hbWWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldE5hbWWUag2PAAB0lIwUUHlDYXBzdWxlX0dldFBvaW50ZXKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX0dldFBvaW50ZXKUag2PAAB0lIwQUHlDYXBzdWxlX0ltcG9ydJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfSW1wb3J0lGoNjwAAdJSMEVB5Q2Fwc3VsZV9Jc1ZhbGlklChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NhcHN1bGUuaHRtbCNjLlB5Q2Fwc3VsZV9Jc1ZhbGlklGoNjwAAdJSMDVB5Q2Fwc3VsZV9OZXeUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2Fwc3VsZS5odG1sI2MuUHlDYXBzdWxlX05ld5RqDY8AAHSUjBRQeUNhcHN1bGVfU2V0Q29udGV4dJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfU2V0Q29udGV4dJRqDY8AAHSUjBdQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcpRqDY8AAHSUjBFQeUNhcHN1bGVfU2V0TmFtZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfU2V0TmFtZZRqDY8AAHSUjBRQeUNhcHN1bGVfU2V0UG9pbnRlcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jYXBzdWxlLmh0bWwjYy5QeUNhcHN1bGVfU2V0UG9pbnRlcpRqDY8AAHSUjAxQeUNlbGxfQ2hlY2uUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX0NoZWNrlGoNjwAAdJSMClB5Q2VsbF9HRVSUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX0dFVJRqDY8AAHSUjApQeUNlbGxfR2V0lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NlbGwuaHRtbCNjLlB5Q2VsbF9HZXSUag2PAAB0lIwKUHlDZWxsX05ld5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jZWxsLmh0bWwjYy5QeUNlbGxfTmV3lGoNjwAAdJSMClB5Q2VsbF9TRVSUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2VsbC5odG1sI2MuUHlDZWxsX1NFVJRqDY8AAHSUjApQeUNlbGxfU2V0lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NlbGwuaHRtbCNjLlB5Q2VsbF9TZXSUag2PAAB0lIwMUHlDb2RlX0NoZWNrlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9DaGVja5RqDY8AAHSUjBFQeUNvZGVfR2V0TnVtRnJlZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb2RlLmh0bWwjYy5QeUNvZGVfR2V0TnVtRnJlZZRqDY8AAHSUjApQeUNvZGVfTmV3lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9OZXeUag2PAAB0lIwPUHlDb2RlX05ld0VtcHR5lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9OZXdFbXB0eZRqDY8AAHSUjBlQeUNvZGVfTmV3V2l0aFBvc09ubHlBcmdzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGUuaHRtbCNjLlB5Q29kZV9OZXdXaXRoUG9zT25seUFyZ3OUag2PAAB0lIweUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnOUag2PAAB0lIwOUHlDb2RlY19EZWNvZGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfRGVjb2RllGoNjwAAdJSMD1B5Q29kZWNfRGVjb2RlcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19EZWNvZGVylGoNjwAAdJSMDlB5Q29kZWNfRW5jb2RllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0VuY29kZZRqDY8AAHSUjA9QeUNvZGVjX0VuY29kZXKUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfRW5jb2RlcpRqDY8AAHSUjBRQeUNvZGVjX0lnbm9yZUVycm9yc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19JZ25vcmVFcnJvcnOUag2PAAB0lIwaUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVylGoNjwAAdJSMGlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlcpRqDY8AAHSUjBVQeUNvZGVjX0tub3duRW5jb2RpbmeUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfS25vd25FbmNvZGluZ5RqDY8AAHSUjBNQeUNvZGVjX0xvb2t1cEVycm9ylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX0xvb2t1cEVycm9ylGoNjwAAdJSMGVB5Q29kZWNfTmFtZVJlcGxhY2VFcnJvcnOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfTmFtZVJlcGxhY2VFcnJvcnOUag2PAAB0lIwQUHlDb2RlY19SZWdpc3RlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19SZWdpc3RlcpRqDY8AAHSUjBVQeUNvZGVjX1JlZ2lzdGVyRXJyb3KUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfUmVnaXN0ZXJFcnJvcpRqDY8AAHSUjBVQeUNvZGVjX1JlcGxhY2VFcnJvcnOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfUmVwbGFjZUVycm9yc5RqDY8AAHSUjBRQeUNvZGVjX1N0cmVhbVJlYWRlcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb2RlYy5odG1sI2MuUHlDb2RlY19TdHJlYW1SZWFkZXKUag2PAAB0lIwUUHlDb2RlY19TdHJlYW1Xcml0ZXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbCNjLlB5Q29kZWNfU3RyZWFtV3JpdGVylGoNjwAAdJSMFFB5Q29kZWNfU3RyaWN0RXJyb3JzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX1N0cmljdEVycm9yc5RqDY8AAHSUjB9QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGVjLmh0bWwjYy5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzlGoNjwAAdJSMFFB5Q29tcGxleF9Bc0NDb21wbGV4lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbXBsZXguaHRtbCNjLlB5Q29tcGxleF9Bc0NDb21wbGV4lGoNjwAAdJSMD1B5Q29tcGxleF9DaGVja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeUNvbXBsZXhfQ2hlY2uUag2PAAB0lIwUUHlDb21wbGV4X0NoZWNrRXhhY3SUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X0NoZWNrRXhhY3SUag2PAAB0lIwWUHlDb21wbGV4X0Zyb21DQ29tcGxleJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeUNvbXBsZXhfRnJvbUNDb21wbGV4lGoNjwAAdJSMFVB5Q29tcGxleF9Gcm9tRG91Ymxlc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeUNvbXBsZXhfRnJvbURvdWJsZXOUag2PAAB0lIwWUHlDb21wbGV4X0ltYWdBc0RvdWJsZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb21wbGV4Lmh0bWwjYy5QeUNvbXBsZXhfSW1hZ0FzRG91YmxllGoNjwAAdJSMFlB5Q29tcGxleF9SZWFsQXNEb3VibGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29tcGxleC5odG1sI2MuUHlDb21wbGV4X1JlYWxBc0RvdWJsZZRqDY8AAHSUjA5QeUNvbmZpZ19DbGVhcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWdfQ2xlYXKUag2PAAB0lIwbUHlDb25maWdfSW5pdElzb2xhdGVkQ29uZmlnlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZ19Jbml0SXNvbGF0ZWRDb25maWeUag2PAAB0lIwZUHlDb25maWdfSW5pdFB5dGhvbkNvbmZpZ5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWdfSW5pdFB5dGhvbkNvbmZpZ5RqDY8AAHSUjA1QeUNvbmZpZ19SZWFklChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZ19SZWFklGoNjwAAdJSMEFB5Q29uZmlnX1NldEFyZ3aUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnX1NldEFyZ3aUag2PAAB0lIwVUHlDb25maWdfU2V0Qnl0ZXNBcmd2lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZ19TZXRCeXRlc0FyZ3aUag2PAAB0lIwXUHlDb25maWdfU2V0Qnl0ZXNTdHJpbmeUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnX1NldEJ5dGVzU3RyaW5nlGoNjwAAdJSMElB5Q29uZmlnX1NldFN0cmluZ5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWdfU2V0U3RyaW5nlGoNjwAAdJSMGlB5Q29uZmlnX1NldFdpZGVTdHJpbmdMaXN0lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZ19TZXRXaWRlU3RyaW5nTGlzdJRqDY8AAHSUjBlQeUNvbnRleHRUb2tlbl9DaGVja0V4YWN0lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbnRleHR2YXJzLmh0bWwjYy5QeUNvbnRleHRUb2tlbl9DaGVja0V4YWN0lGoNjwAAdJSMF1B5Q29udGV4dFZhcl9DaGVja0V4YWN0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbnRleHR2YXJzLmh0bWwjYy5QeUNvbnRleHRWYXJfQ2hlY2tFeGFjdJRqDY8AAHSUjBBQeUNvbnRleHRWYXJfR2V0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbnRleHR2YXJzLmh0bWwjYy5QeUNvbnRleHRWYXJfR2V0lGoNjwAAdJSMEFB5Q29udGV4dFZhcl9OZXeUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udGV4dHZhcnMuaHRtbCNjLlB5Q29udGV4dFZhcl9OZXeUag2PAAB0lIwSUHlDb250ZXh0VmFyX1Jlc2V0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbnRleHR2YXJzLmh0bWwjYy5QeUNvbnRleHRWYXJfUmVzZXSUag2PAAB0lIwQUHlDb250ZXh0VmFyX1NldJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb250ZXh0dmFycy5odG1sI2MuUHlDb250ZXh0VmFyX1NldJRqDY8AAHSUjBRQeUNvbnRleHRfQ2hlY2tFeGFjdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb250ZXh0dmFycy5odG1sI2MuUHlDb250ZXh0X0NoZWNrRXhhY3SUag2PAAB0lIwXUHlDb250ZXh0X0NsZWFyRnJlZUxpc3SUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udGV4dHZhcnMuaHRtbCNjLlB5Q29udGV4dF9DbGVhckZyZWVMaXN0lGoNjwAAdJSMDlB5Q29udGV4dF9Db3B5lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbnRleHR2YXJzLmh0bWwjYy5QeUNvbnRleHRfQ29weZRqDY8AAHSUjBVQeUNvbnRleHRfQ29weUN1cnJlbnSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udGV4dHZhcnMuaHRtbCNjLlB5Q29udGV4dF9Db3B5Q3VycmVudJRqDY8AAHSUjA9QeUNvbnRleHRfRW50ZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udGV4dHZhcnMuaHRtbCNjLlB5Q29udGV4dF9FbnRlcpRqDY8AAHSUjA5QeUNvbnRleHRfRXhpdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb250ZXh0dmFycy5odG1sI2MuUHlDb250ZXh0X0V4aXSUag2PAAB0lIwNUHlDb250ZXh0X05ld5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb250ZXh0dmFycy5odG1sI2MuUHlDb250ZXh0X05ld5RqDY8AAHSUjBFQeUNvcm9fQ2hlY2tFeGFjdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb3JvLmh0bWwjYy5QeUNvcm9fQ2hlY2tFeGFjdJRqDY8AAHSUjApQeUNvcm9fTmV3lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Nvcm8uaHRtbCNjLlB5Q29yb19OZXeUag2PAAB0lIwQUHlEYXRlVGltZV9DaGVja5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9DaGVja5RqDY8AAHSUjBVQeURhdGVUaW1lX0NoZWNrRXhhY3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfQ2hlY2tFeGFjdJRqDY8AAHSUjBhQeURhdGVUaW1lX0RBVEVfR0VUX0hPVVKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfREFURV9HRVRfSE9VUpRqDY8AAHSUjB9QeURhdGVUaW1lX0RBVEVfR0VUX01JQ1JPU0VDT05ElChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0RBVEVfR0VUX01JQ1JPU0VDT05ElGoNjwAAdJSMGlB5RGF0ZVRpbWVfREFURV9HRVRfTUlOVVRFlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0RBVEVfR0VUX01JTlVURZRqDY8AAHSUjBpQeURhdGVUaW1lX0RBVEVfR0VUX1NFQ09ORJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9EQVRFX0dFVF9TRUNPTkSUag2PAAB0lIwZUHlEYXRlVGltZV9ERUxUQV9HRVRfREFZU5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9ERUxUQV9HRVRfREFZU5RqDY8AAHSUjCFQeURhdGVUaW1lX0RFTFRBX0dFVF9NSUNST1NFQ09ORFOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfREVMVEFfR0VUX01JQ1JPU0VDT05EU5RqDY8AAHSUjBxQeURhdGVUaW1lX0RFTFRBX0dFVF9TRUNPTkRTlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0RFTFRBX0dFVF9TRUNPTkRTlGoNjwAAdJSMGlB5RGF0ZVRpbWVfRnJvbURhdGVBbmRUaW1llChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX0Zyb21EYXRlQW5kVGltZZRqDY8AAHSUjCFQeURhdGVUaW1lX0Zyb21EYXRlQW5kVGltZUFuZEZvbGSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfRnJvbURhdGVBbmRUaW1lQW5kRm9sZJRqDY8AAHSUjBhQeURhdGVUaW1lX0Zyb21UaW1lc3RhbXCUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfRnJvbVRpbWVzdGFtcJRqDY8AAHSUjBJQeURhdGVUaW1lX0dFVF9EQVmUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfR0VUX0RBWZRqDY8AAHSUjBRQeURhdGVUaW1lX0dFVF9NT05USJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9HRVRfTU9OVEiUag2PAAB0lIwTUHlEYXRlVGltZV9HRVRfWUVBUpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9HRVRfWUVBUpRqDY8AAHSUjBhQeURhdGVUaW1lX1RJTUVfR0VUX0hPVVKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZVRpbWVfVElNRV9HRVRfSE9VUpRqDY8AAHSUjB9QeURhdGVUaW1lX1RJTUVfR0VUX01JQ1JPU0VDT05ElChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX1RJTUVfR0VUX01JQ1JPU0VDT05ElGoNjwAAdJSMGlB5RGF0ZVRpbWVfVElNRV9HRVRfTUlOVVRFlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVUaW1lX1RJTUVfR0VUX01JTlVURZRqDY8AAHSUjBpQeURhdGVUaW1lX1RJTUVfR0VUX1NFQ09ORJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlVGltZV9USU1FX0dFVF9TRUNPTkSUag2PAAB0lIwMUHlEYXRlX0NoZWNrlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVfQ2hlY2uUag2PAAB0lIwRUHlEYXRlX0NoZWNrRXhhY3SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5RGF0ZV9DaGVja0V4YWN0lGoNjwAAdJSMD1B5RGF0ZV9Gcm9tRGF0ZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEYXRlX0Zyb21EYXRllGoNjwAAdJSMFFB5RGF0ZV9Gcm9tVGltZXN0YW1wlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURhdGVfRnJvbVRpbWVzdGFtcJRqDY8AAHSUjA1QeURlbHRhX0NoZWNrlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeURlbHRhX0NoZWNrlGoNjwAAdJSMElB5RGVsdGFfQ2hlY2tFeGFjdJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEZWx0YV9DaGVja0V4YWN0lGoNjwAAdJSMD1B5RGVsdGFfRnJvbURTVZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlEZWx0YV9Gcm9tRFNVlGoNjwAAdJSMDlB5RGVzY3JfSXNEYXRhlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbCNjLlB5RGVzY3JfSXNEYXRhlGoNjwAAdJSMFlB5RGVzY3JfTmV3Q2xhc3NNZXRob2SUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlEZXNjcl9OZXdDbGFzc01ldGhvZJRqDY8AAHSUjBFQeURlc2NyX05ld0dldFNldJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kZXNjcmlwdG9yLmh0bWwjYy5QeURlc2NyX05ld0dldFNldJRqDY8AAHSUjBFQeURlc2NyX05ld01lbWJlcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kZXNjcmlwdG9yLmh0bWwjYy5QeURlc2NyX05ld01lbWJlcpRqDY8AAHSUjBFQeURlc2NyX05ld01ldGhvZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kZXNjcmlwdG9yLmh0bWwjYy5QeURlc2NyX05ld01ldGhvZJRqDY8AAHSUjBJQeURlc2NyX05ld1dyYXBwZXKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlEZXNjcl9OZXdXcmFwcGVylGoNjwAAdJSMD1B5RGljdFByb3h5X05ld5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RQcm94eV9OZXeUag2PAAB0lIwMUHlEaWN0X0NoZWNrlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9DaGVja5RqDY8AAHSUjBFQeURpY3RfQ2hlY2tFeGFjdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfQ2hlY2tFeGFjdJRqDY8AAHSUjAxQeURpY3RfQ2xlYXKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0NsZWFylGoNjwAAdJSMFFB5RGljdF9DbGVhckZyZWVMaXN0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9DbGVhckZyZWVMaXN0lGoNjwAAdJSMD1B5RGljdF9Db250YWluc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfQ29udGFpbnOUag2PAAB0lIwLUHlEaWN0X0NvcHmUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0NvcHmUag2PAAB0lIwOUHlEaWN0X0RlbEl0ZW2UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0RlbEl0ZW2Uag2PAAB0lIwUUHlEaWN0X0RlbEl0ZW1TdHJpbmeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0RlbEl0ZW1TdHJpbmeUag2PAAB0lIwOUHlEaWN0X0dldEl0ZW2UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0dldEl0ZW2Uag2PAAB0lIwUUHlEaWN0X0dldEl0ZW1TdHJpbmeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0dldEl0ZW1TdHJpbmeUag2PAAB0lIwXUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3KUag2PAAB0lIwMUHlEaWN0X0l0ZW1zlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9JdGVtc5RqDY8AAHSUjAtQeURpY3RfS2V5c5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfS2V5c5RqDY8AAHSUjAxQeURpY3RfTWVyZ2WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X01lcmdllGoNjwAAdJSMFFB5RGljdF9NZXJnZUZyb21TZXEylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9NZXJnZUZyb21TZXEylGoNjwAAdJSMClB5RGljdF9OZXeUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGljdC5odG1sI2MuUHlEaWN0X05ld5RqDY8AAHSUjAtQeURpY3RfTmV4dJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfTmV4dJRqDY8AAHSUjBFQeURpY3RfU2V0RGVmYXVsdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfU2V0RGVmYXVsdJRqDY8AAHSUjA5QeURpY3RfU2V0SXRlbZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfU2V0SXRlbZRqDY8AAHSUjBRQeURpY3RfU2V0SXRlbVN0cmluZ5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfU2V0SXRlbVN0cmluZ5RqDY8AAHSUjAtQeURpY3RfU2l6ZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfU2l6ZZRqDY8AAHSUjA1QeURpY3RfVXBkYXRllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RpY3QuaHRtbCNjLlB5RGljdF9VcGRhdGWUag2PAAB0lIwNUHlEaWN0X1ZhbHVlc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWwjYy5QeURpY3RfVmFsdWVzlGoNjwAAdJSMEVB5RXJyX0JhZEFyZ3VtZW50lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0JhZEFyZ3VtZW50lGoNjwAAdJSMFVB5RXJyX0JhZEludGVybmFsQ2FsbJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9CYWRJbnRlcm5hbENhbGyUag2PAAB0lIwSUHlFcnJfQ2hlY2tTaWduYWxzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0NoZWNrU2lnbmFsc5RqDY8AAHSUjAtQeUVycl9DbGVhcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9DbGVhcpRqDY8AAHSUjBZQeUVycl9FeGNlcHRpb25NYXRjaGVzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0V4Y2VwdGlvbk1hdGNoZXOUag2PAAB0lIwLUHlFcnJfRmV0Y2iUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfRmV0Y2iUag2PAAB0lIwMUHlFcnJfRm9ybWF0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0Zvcm1hdJRqDY8AAHSUjA1QeUVycl9Gb3JtYXRWlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX0Zvcm1hdFaUag2PAAB0lIwQUHlFcnJfR2V0RXhjSW5mb5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9HZXRFeGNJbmZvlGoNjwAAdJSMG1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXOUag2PAAB0lIwSUHlFcnJfTmV3RXhjZXB0aW9ulChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX05ld0V4Y2VwdGlvbpRqDY8AAHSUjBlQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2OUag2PAAB0lIwOUHlFcnJfTm9NZW1vcnmUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfTm9NZW1vcnmUag2PAAB0lIwYUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9ulChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbpRqDY8AAHSUjA5QeUVycl9PY2N1cnJlZJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9PY2N1cnJlZJRqDY8AAHSUjAtQeUVycl9QcmludJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9QcmludJRqDY8AAHSUjA1QeUVycl9QcmludEV4lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1ByaW50RXiUag2PAAB0lIwVUHlFcnJfUmVzb3VyY2VXYXJuaW5nlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1Jlc291cmNlV2FybmluZ5RqDY8AAHSUjA1QeUVycl9SZXN0b3JllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1Jlc3RvcmWUag2PAAB0lIwaUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnKUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnKUag2PAAB0lIwmUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWWUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWWUag2PAAB0lIwsUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3SUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3SUag2PAAB0lIwtUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzlChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0c5RqDY8AAHSUjBBQeUVycl9TZXRFeGNJbmZvlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEV4Y0luZm+Uag2PAAB0lIwSUHlFcnJfU2V0RnJvbUVycm5vlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEZyb21FcnJub5RqDY8AAHSUjB5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWWUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1llGoNjwAAdJSMJFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3SUag2PAAB0lIwlUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0c5QoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzlGoNjwAAdJSMF1B5RXJyX1NldEZyb21XaW5kb3dzRXJylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEZyb21XaW5kb3dzRXJylGoNjwAAdJSMI1B5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1llChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1llGoNjwAAdJSMFFB5RXJyX1NldEltcG9ydEVycm9ylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1NldEltcG9ydEVycm9ylGoNjwAAdJSMHFB5RXJyX1NldEltcG9ydEVycm9yU3ViY2xhc3OUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0SW1wb3J0RXJyb3JTdWJjbGFzc5RqDY8AAHSUjBJQeUVycl9TZXRJbnRlcnJ1cHSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0SW50ZXJydXB0lGoNjwAAdJSMDVB5RXJyX1NldE5vbmWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0Tm9uZZRqDY8AAHSUjA9QeUVycl9TZXRPYmplY3SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU2V0T2JqZWN0lGoNjwAAdJSMD1B5RXJyX1NldFN0cmluZ5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TZXRTdHJpbmeUag2PAAB0lIwUUHlFcnJfU3ludGF4TG9jYXRpb26UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfU3ludGF4TG9jYXRpb26Uag2PAAB0lIwWUHlFcnJfU3ludGF4TG9jYXRpb25FeJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9TeW50YXhMb2NhdGlvbkV4lGoNjwAAdJSMGlB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0lGoNjwAAdJSMDFB5RXJyX1dhcm5FeJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUVycl9XYXJuRXiUag2PAAB0lIwSUHlFcnJfV2FybkV4cGxpY2l0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5RXJyX1dhcm5FeHBsaWNpdJRqDY8AAHSUjBhQeUVycl9XYXJuRXhwbGljaXRPYmplY3SUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0lGoNjwAAdJSMEFB5RXJyX1dhcm5Gb3JtYXSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfV2FybkZvcm1hdJRqDY8AAHSUjBVQeUVycl9Xcml0ZVVucmFpc2FibGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFcnJfV3JpdGVVbnJhaXNhYmxllGoNjwAAdJSMElB5RXZhbF9BY3F1aXJlTG9ja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfQWNxdWlyZUxvY2uUag2PAAB0lIwUUHlFdmFsX0FjcXVpcmVUaHJlYWSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX0FjcXVpcmVUaHJlYWSUag2PAAB0lIwPUHlFdmFsX0V2YWxDb2RllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeUV2YWxfRXZhbENvZGWUag2PAAB0lIwRUHlFdmFsX0V2YWxDb2RlRXiUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5RXZhbF9FdmFsQ29kZUV4lGoNjwAAdJSMEFB5RXZhbF9FdmFsRnJhbWWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5RXZhbF9FdmFsRnJhbWWUag2PAAB0lIwSUHlFdmFsX0V2YWxGcmFtZUV4lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeUV2YWxfRXZhbEZyYW1lRXiUag2PAAB0lIwSUHlFdmFsX0dldEJ1aWx0aW5zlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNjLlB5RXZhbF9HZXRCdWlsdGluc5RqDY8AAHSUjA9QeUV2YWxfR2V0RnJhbWWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvcmVmbGVjdGlvbi5odG1sI2MuUHlFdmFsX0dldEZyYW1llGoNjwAAdJSMElB5RXZhbF9HZXRGdW5jRGVzY5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUV2YWxfR2V0RnVuY0Rlc2OUag2PAAB0lIwSUHlFdmFsX0dldEZ1bmNOYW1llChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNjLlB5RXZhbF9HZXRGdW5jTmFtZZRqDY8AAHSUjBFQeUV2YWxfR2V0R2xvYmFsc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUV2YWxfR2V0R2xvYmFsc5RqDY8AAHSUjBBQeUV2YWxfR2V0TG9jYWxzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNjLlB5RXZhbF9HZXRMb2NhbHOUag2PAAB0lIwSUHlFdmFsX0luaXRUaHJlYWRzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9Jbml0VGhyZWFkc5RqDY8AAHSUjBlQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzlGoNjwAAdJSMElB5RXZhbF9SZWxlYXNlTG9ja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeUV2YWxfUmVsZWFzZUxvY2uUag2PAAB0lIwUUHlFdmFsX1JlbGVhc2VUaHJlYWSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX1JlbGVhc2VUaHJlYWSUag2PAAB0lIwUUHlFdmFsX1Jlc3RvcmVUaHJlYWSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX1Jlc3RvcmVUaHJlYWSUag2PAAB0lIwRUHlFdmFsX1NhdmVUaHJlYWSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX1NhdmVUaHJlYWSUag2PAAB0lIwRUHlFdmFsX1NldFByb2ZpbGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlFdmFsX1NldFByb2ZpbGWUag2PAAB0lIwPUHlFdmFsX1NldFRyYWNllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9TZXRUcmFjZZRqDY8AAHSUjBlQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVklChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWSUag2PAAB0lIwUUHlFeGNlcHRpb25fR2V0Q2F1c2WUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFeGNlcHRpb25fR2V0Q2F1c2WUag2PAAB0lIwWUHlFeGNlcHRpb25fR2V0Q29udGV4dJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0lGoNjwAAdJSMGFB5RXhjZXB0aW9uX0dldFRyYWNlYmFja5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2uUag2PAAB0lIwUUHlFeGNlcHRpb25fU2V0Q2F1c2WUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlFeGNlcHRpb25fU2V0Q2F1c2WUag2PAAB0lIwWUHlFeGNlcHRpb25fU2V0Q29udGV4dJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0lGoNjwAAdJSMGFB5RXhjZXB0aW9uX1NldFRyYWNlYmFja5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2uUag2PAAB0lIwNUHlGaWxlX0Zyb21GZJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfRnJvbUZklGoNjwAAdJSMDlB5RmlsZV9HZXRMaW5llChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ZpbGUuaHRtbCNjLlB5RmlsZV9HZXRMaW5llGoNjwAAdJSMFlB5RmlsZV9TZXRPcGVuQ29kZUhvb2uUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX1NldE9wZW5Db2RlSG9va5RqDY8AAHSUjBJQeUZpbGVfV3JpdGVPYmplY3SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmlsZS5odG1sI2MuUHlGaWxlX1dyaXRlT2JqZWN0lGoNjwAAdJSMElB5RmlsZV9Xcml0ZVN0cmluZ5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9maWxlLmh0bWwjYy5QeUZpbGVfV3JpdGVTdHJpbmeUag2PAAB0lIwRUHlGbG9hdF9BU19ET1VCTEWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfQVNfRE9VQkxFlGoNjwAAdJSMEFB5RmxvYXRfQXNEb3VibGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfQXNEb3VibGWUag2PAAB0lIwNUHlGbG9hdF9DaGVja5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9DaGVja5RqDY8AAHSUjBJQeUZsb2F0X0NoZWNrRXhhY3SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfQ2hlY2tFeGFjdJRqDY8AAHSUjBVQeUZsb2F0X0NsZWFyRnJlZUxpc3SUKGoKjwAAaguPAACVEAABAAAAAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfQ2xlYXJGcmVlTGlzdJRqDY8AAHSUjBJQeUZsb2F0X0Zyb21Eb3VibGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfRnJvbURvdWJsZZRqDY8AAHSUjBJQeUZsb2F0X0Zyb21TdHJpbmeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfRnJvbVN0cmluZ5RqDY8AAHSUjA9QeUZsb2F0X0dldEluZm+UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfR2V0SW5mb5RqDY8AAHSUjA5QeUZsb2F0X0dldE1heJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9mbG9hdC5odG1sI2MuUHlGbG9hdF9HZXRNYXiUag2PAAB0lIwOUHlGbG9hdF9HZXRNaW6UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNjLlB5RmxvYXRfR2V0TWlulGoNjwAAdJSMFVB5RnJhbWVfR2V0TGluZU51bWJlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9yZWZsZWN0aW9uLmh0bWwjYy5QeUZyYW1lX0dldExpbmVOdW1iZXKUag2PAAB0lIwRUHlGcm96ZW5TZXRfQ2hlY2uUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeUZyb3plblNldF9DaGVja5RqDY8AAHSUjBZQeUZyb3plblNldF9DaGVja0V4YWN0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NldC5odG1sI2MuUHlGcm96ZW5TZXRfQ2hlY2tFeGFjdJRqDY8AAHSUjA9QeUZyb3plblNldF9OZXeUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeUZyb3plblNldF9OZXeUag2PAAB0lIwQUHlGdW5jdGlvbl9DaGVja5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9DaGVja5RqDY8AAHSUjBlQeUZ1bmN0aW9uX0dldEFubm90YXRpb25zlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Z1bmN0aW9uLmh0bWwjYy5QeUZ1bmN0aW9uX0dldEFubm90YXRpb25zlGoNjwAAdJSMFVB5RnVuY3Rpb25fR2V0Q2xvc3VyZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9HZXRDbG9zdXJllGoNjwAAdJSMElB5RnVuY3Rpb25fR2V0Q29kZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9HZXRDb2RllGoNjwAAdJSMFlB5RnVuY3Rpb25fR2V0RGVmYXVsdHOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fR2V0RGVmYXVsdHOUag2PAAB0lIwVUHlGdW5jdGlvbl9HZXRHbG9iYWxzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Z1bmN0aW9uLmh0bWwjYy5QeUZ1bmN0aW9uX0dldEdsb2JhbHOUag2PAAB0lIwUUHlGdW5jdGlvbl9HZXRNb2R1bGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fR2V0TW9kdWxllGoNjwAAdJSMDlB5RnVuY3Rpb25fTmV3lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Z1bmN0aW9uLmh0bWwjYy5QeUZ1bmN0aW9uX05ld5RqDY8AAHSUjBpQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9OZXdXaXRoUXVhbE5hbWWUag2PAAB0lIwZUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9uc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9mdW5jdGlvbi5odG1sI2MuUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9uc5RqDY8AAHSUjBVQeUZ1bmN0aW9uX1NldENsb3N1cmWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZnVuY3Rpb24uaHRtbCNjLlB5RnVuY3Rpb25fU2V0Q2xvc3VyZZRqDY8AAHSUjBZQeUZ1bmN0aW9uX1NldERlZmF1bHRzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Z1bmN0aW9uLmh0bWwjYy5QeUZ1bmN0aW9uX1NldERlZmF1bHRzlGoNjwAAdJSMEFB5R0lMU3RhdGVfQ2hlY2uUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlHSUxTdGF0ZV9DaGVja5RqDY8AAHSUjBFQeUdJTFN0YXRlX0Vuc3VyZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeUdJTFN0YXRlX0Vuc3VyZZRqDY8AAHSUjB1QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZZRqDY8AAHSUjBJQeUdJTFN0YXRlX1JlbGVhc2WUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlHSUxTdGF0ZV9SZWxlYXNllGoNjwAAdJSMC1B5R2VuX0NoZWNrlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2dlbi5odG1sI2MuUHlHZW5fQ2hlY2uUag2PAAB0lIwQUHlHZW5fQ2hlY2tFeGFjdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9nZW4uaHRtbCNjLlB5R2VuX0NoZWNrRXhhY3SUag2PAAB0lIwJUHlHZW5fTmV3lChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2dlbi5odG1sI2MuUHlHZW5fTmV3lGoNjwAAdJSMFVB5R2VuX05ld1dpdGhRdWFsTmFtZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9nZW4uaHRtbCNjLlB5R2VuX05ld1dpdGhRdWFsTmFtZZRqDY8AAHSUjBJQeUltcG9ydF9BZGRNb2R1bGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9BZGRNb2R1bGWUag2PAAB0lIwYUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0lGoNjwAAdJSMFlB5SW1wb3J0X0FwcGVuZEluaXR0YWKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9BcHBlbmRJbml0dGFilGoNjwAAdJSMEFB5SW1wb3J0X0NsZWFudXCUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9DbGVhbnVwlGoNjwAAdJSMF1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGWUag2PAAB0lIwZUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXiUag2PAAB0lIwdUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3SUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdJRqDY8AAHSUjCRQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXOUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXOUag2PAAB0lIwWUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0V4dGVuZEluaXR0YWKUag2PAAB0lIwUUHlJbXBvcnRfR2V0SW1wb3J0ZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9HZXRJbXBvcnRlcpRqDY8AAHSUjBdQeUltcG9ydF9HZXRNYWdpY051bWJlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVylGoNjwAAdJSMFFB5SW1wb3J0X0dldE1hZ2ljVGFnlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfR2V0TWFnaWNUYWeUag2PAAB0lIwSUHlJbXBvcnRfR2V0TW9kdWxllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfR2V0TW9kdWxllGoNjwAAdJSMFlB5SW1wb3J0X0dldE1vZHVsZURpY3SUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9HZXRNb2R1bGVEaWN0lGoNjwAAdJSMD1B5SW1wb3J0X0ltcG9ydJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydJRqDY8AAHSUjBtQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGWUag2PAAB0lIwhUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0lGoNjwAAdJSMFVB5SW1wb3J0X0ltcG9ydE1vZHVsZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydE1vZHVsZZRqDY8AAHSUjBdQeUltcG9ydF9JbXBvcnRNb2R1bGVFeJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbXBvcnQuaHRtbCNjLlB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4lGoNjwAAdJSMGlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVslChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWyUag2PAAB0lIwgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWxPYmplY3SUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbE9iamVjdJRqDY8AAHSUjBxQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9ja5RqDY8AAHSUjBVQeUltcG9ydF9SZWxvYWRNb2R1bGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjYy5QeUltcG9ydF9SZWxvYWRNb2R1bGWUag2PAAB0lIwNUHlJbmRleF9DaGVja5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5SW5kZXhfQ2hlY2uUag2PAAB0lIwRUHlJbml0X21vZHVsZW5hbWWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2J1aWxkaW5nLmh0bWwjYy5QeUluaXRfbW9kdWxlbmFtZZRqDY8AAHSUjBZQeUluc3RhbmNlTWV0aG9kX0NoZWNrlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21ldGhvZC5odG1sI2MuUHlJbnN0YW5jZU1ldGhvZF9DaGVja5RqDY8AAHSUjBlQeUluc3RhbmNlTWV0aG9kX0Z1bmN0aW9ulChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21ldGhvZC5odG1sI2MuUHlJbnN0YW5jZU1ldGhvZF9GdW5jdGlvbpRqDY8AAHSUjB1QeUluc3RhbmNlTWV0aG9kX0dFVF9GVU5DVElPTpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZXRob2QuaHRtbCNjLlB5SW5zdGFuY2VNZXRob2RfR0VUX0ZVTkNUSU9OlGoNjwAAdJSMFFB5SW5zdGFuY2VNZXRob2RfTmV3lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21ldGhvZC5odG1sI2MuUHlJbnN0YW5jZU1ldGhvZF9OZXeUag2PAAB0lIwYUHlJbnRlcnByZXRlclN0YXRlX0NsZWFylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcpRqDY8AAHSUjBlQeUludGVycHJldGVyU3RhdGVfRGVsZXRllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGWUag2PAAB0lIwaUHlJbnRlcnByZXRlclN0YXRlX0dldERpY3SUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlJbnRlcnByZXRlclN0YXRlX0dldERpY3SUag2PAAB0lIwYUHlJbnRlcnByZXRlclN0YXRlX0dldElElChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZV9HZXRJRJRqDY8AAHSUjBdQeUludGVycHJldGVyU3RhdGVfSGVhZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeUludGVycHJldGVyU3RhdGVfSGVhZJRqDY8AAHSUjBdQeUludGVycHJldGVyU3RhdGVfTWFpbpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeUludGVycHJldGVyU3RhdGVfTWFpbpRqDY8AAHSUjBZQeUludGVycHJldGVyU3RhdGVfTmV3lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXeUag2PAAB0lIwXUHlJbnRlcnByZXRlclN0YXRlX05leHSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlJbnRlcnByZXRlclN0YXRlX05leHSUag2PAAB0lIwdUHlJbnRlcnByZXRlclN0YXRlX1RocmVhZEhlYWSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlJbnRlcnByZXRlclN0YXRlX1RocmVhZEhlYWSUag2PAAB0lIwMUHlJdGVyX0NoZWNrlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2l0ZXIuaHRtbCNjLlB5SXRlcl9DaGVja5RqDY8AAHSUjAtQeUl0ZXJfTmV4dJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pdGVyLmh0bWwjYy5QeUl0ZXJfTmV4dJRqDY8AAHSUjA1QeUxpc3RfQXBwZW5klChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9BcHBlbmSUag2PAAB0lIwOUHlMaXN0X0FzVHVwbGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X0FzVHVwbGWUag2PAAB0lIwMUHlMaXN0X0NoZWNrlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9DaGVja5RqDY8AAHSUjBFQeUxpc3RfQ2hlY2tFeGFjdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfQ2hlY2tFeGFjdJRqDY8AAHSUjBRQeUxpc3RfQ2xlYXJGcmVlTGlzdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfQ2xlYXJGcmVlTGlzdJRqDY8AAHSUjA9QeUxpc3RfR0VUX0lURU2UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X0dFVF9JVEVNlGoNjwAAdJSMD1B5TGlzdF9HRVRfU0laRZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfR0VUX1NJWkWUag2PAAB0lIwOUHlMaXN0X0dldEl0ZW2UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X0dldEl0ZW2Uag2PAAB0lIwPUHlMaXN0X0dldFNsaWNllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9HZXRTbGljZZRqDY8AAHSUjA1QeUxpc3RfSW5zZXJ0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9JbnNlcnSUag2PAAB0lIwKUHlMaXN0X05ld5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfTmV3lGoNjwAAdJSMDlB5TGlzdF9SZXZlcnNllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9SZXZlcnNllGoNjwAAdJSMD1B5TGlzdF9TRVRfSVRFTZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfU0VUX0lURU2Uag2PAAB0lIwOUHlMaXN0X1NldEl0ZW2UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbGlzdC5odG1sI2MuUHlMaXN0X1NldEl0ZW2Uag2PAAB0lIwPUHlMaXN0X1NldFNsaWNllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xpc3QuaHRtbCNjLlB5TGlzdF9TZXRTbGljZZRqDY8AAHSUjAtQeUxpc3RfU2l6ZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfU2l6ZZRqDY8AAHSUjAtQeUxpc3RfU29ydJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9saXN0Lmh0bWwjYy5QeUxpc3RfU29ydJRqDY8AAHSUjA9QeUxvbmdfQXNEb3VibGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzRG91YmxllGoNjwAAdJSMDVB5TG9uZ19Bc0xvbmeUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzTG9uZ5RqDY8AAHSUjBhQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3eUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93lGoNjwAAdJSMEVB5TG9uZ19Bc0xvbmdMb25nlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc0xvbmdMb25nlGoNjwAAdJSMHFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3eUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvd5RqDY8AAHSUjA9QeUxvbmdfQXNTaXplX3SUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzU2l6ZV90lGoNjwAAdJSMEFB5TG9uZ19Bc1NzaXplX3SUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzU3NpemVfdJRqDY8AAHSUjBVQeUxvbmdfQXNVbnNpZ25lZExvbmeUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzVW5zaWduZWRMb25nlGoNjwAAdJSMGVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ5RqDY8AAHSUjB1QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFza5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFza5RqDY8AAHSUjBlQeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2uUag2PAAB0lIwQUHlMb25nX0FzVm9pZFB0cpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQXNWb2lkUHRylGoNjwAAdJSMDFB5TG9uZ19DaGVja5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfQ2hlY2uUag2PAAB0lIwRUHlMb25nX0NoZWNrRXhhY3SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0NoZWNrRXhhY3SUag2PAAB0lIwRUHlMb25nX0Zyb21Eb3VibGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21Eb3VibGWUag2PAAB0lIwPUHlMb25nX0Zyb21Mb25nlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tTG9uZ5RqDY8AAHSUjBNQeUxvbmdfRnJvbUxvbmdMb25nlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tTG9uZ0xvbmeUag2PAAB0lIwRUHlMb25nX0Zyb21TaXplX3SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21TaXplX3SUag2PAAB0lIwSUHlMb25nX0Zyb21Tc2l6ZV90lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tU3NpemVfdJRqDY8AAHSUjBFQeUxvbmdfRnJvbVN0cmluZ5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfRnJvbVN0cmluZ5RqDY8AAHSUjBJQeUxvbmdfRnJvbVVuaWNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21Vbmljb2RllGoNjwAAdJSMGFB5TG9uZ19Gcm9tVW5pY29kZU9iamVjdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9sb25nLmh0bWwjYy5QeUxvbmdfRnJvbVVuaWNvZGVPYmplY3SUag2PAAB0lIwXUHlMb25nX0Zyb21VbnNpZ25lZExvbmeUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21VbnNpZ25lZExvbmeUag2PAAB0lIwbUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xvbmcuaHRtbCNjLlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZ5RqDY8AAHSUjBJQeUxvbmdfRnJvbVZvaWRQdHKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbG9uZy5odG1sI2MuUHlMb25nX0Zyb21Wb2lkUHRylGoNjwAAdJSMD1B5TWFwcGluZ19DaGVja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfQ2hlY2uUag2PAAB0lIwRUHlNYXBwaW5nX0RlbEl0ZW2UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0RlbEl0ZW2Uag2PAAB0lIwXUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmeUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmeUag2PAAB0lIwXUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmeUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmeUag2PAAB0lIwQUHlNYXBwaW5nX0hhc0tleZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfSGFzS2V5lGoNjwAAdJSMFlB5TWFwcGluZ19IYXNLZXlTdHJpbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0hhc0tleVN0cmluZ5RqDY8AAHSUjA9QeU1hcHBpbmdfSXRlbXOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0l0ZW1zlGoNjwAAdJSMDlB5TWFwcGluZ19LZXlzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19LZXlzlGoNjwAAdJSMEFB5TWFwcGluZ19MZW5ndGiUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFwcGluZy5odG1sI2MuUHlNYXBwaW5nX0xlbmd0aJRqDY8AAHSUjBdQeU1hcHBpbmdfU2V0SXRlbVN0cmluZ5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZ5RqDY8AAHSUjA5QeU1hcHBpbmdfU2l6ZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXBwaW5nLmh0bWwjYy5QeU1hcHBpbmdfU2l6ZZRqDY8AAHSUjBBQeU1hcHBpbmdfVmFsdWVzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21hcHBpbmcuaHRtbCNjLlB5TWFwcGluZ19WYWx1ZXOUag2PAAB0lIwgUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGWUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGWUag2PAAB0lIwaUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFyc2hhbC5odG1sI2MuUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGWUag2PAAB0lIwcUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXJzaGFsLmh0bWwjYy5QeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxllGoNjwAAdJSMHlB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZ5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXJzaGFsLmh0bWwjYy5QeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmeUag2PAAB0lIwbUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21hcnNoYWwuaHRtbCNjLlB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZZRqDY8AAHSUjBlQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21hcnNoYWwuaHRtbCNjLlB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGWUag2PAAB0lIwbUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21hcnNoYWwuaHRtbCNjLlB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZZRqDY8AAHSUjB1QeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZ5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXJzaGFsLmh0bWwjYy5QeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZ5RqDY8AAHSUjAxQeU1lbV9DYWxsb2OUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9DYWxsb2OUag2PAAB0lIwJUHlNZW1fRGVslChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUHlNZW1fRGVslGoNjwAAdJSMClB5TWVtX0ZyZWWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9GcmVllGoNjwAAdJSMElB5TWVtX0dldEFsbG9jYXRvcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX0dldEFsbG9jYXRvcpRqDY8AAHSUjAxQeU1lbV9NYWxsb2OUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9NYWxsb2OUag2PAAB0lIwJUHlNZW1fTmV3lChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUHlNZW1fTmV3lGoNjwAAdJSMD1B5TWVtX1Jhd0NhbGxvY5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX1Jhd0NhbGxvY5RqDY8AAHSUjA1QeU1lbV9SYXdGcmVllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUHlNZW1fUmF3RnJlZZRqDY8AAHSUjA9QeU1lbV9SYXdNYWxsb2OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9SYXdNYWxsb2OUag2PAAB0lIwQUHlNZW1fUmF3UmVhbGxvY5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX1Jhd1JlYWxsb2OUag2PAAB0lIwNUHlNZW1fUmVhbGxvY5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX1JlYWxsb2OUag2PAAB0lIwMUHlNZW1fUmVzaXpllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUHlNZW1fUmVzaXpllGoNjwAAdJSMElB5TWVtX1NldEFsbG9jYXRvcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5TWVtX1NldEFsbG9jYXRvcpRqDY8AAHSUjBVQeU1lbV9TZXR1cERlYnVnSG9va3OUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU1lbV9TZXR1cERlYnVnSG9va3OUag2PAAB0lIwSUHlNZW1vcnlWaWV3X0NoZWNrlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeXZpZXcuaHRtbCNjLlB5TWVtb3J5Vmlld19DaGVja5RqDY8AAHSUjBdQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnl2aWV3Lmh0bWwjYy5QeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcpRqDY8AAHSUjBdQeU1lbW9yeVZpZXdfRnJvbU1lbW9yeZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnl2aWV3Lmh0bWwjYy5QeU1lbW9yeVZpZXdfRnJvbU1lbW9yeZRqDY8AAHSUjBdQeU1lbW9yeVZpZXdfRnJvbU9iamVjdJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnl2aWV3Lmh0bWwjYy5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdJRqDY8AAHSUjBVQeU1lbW9yeVZpZXdfR0VUX0JBU0WUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5dmlldy5odG1sI2MuUHlNZW1vcnlWaWV3X0dFVF9CQVNFlGoNjwAAdJSMF1B5TWVtb3J5Vmlld19HRVRfQlVGRkVSlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeXZpZXcuaHRtbCNjLlB5TWVtb3J5Vmlld19HRVRfQlVGRkVSlGoNjwAAdJSMGlB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeXZpZXcuaHRtbCNjLlB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzlGoNjwAAdJSMDlB5TWV0aG9kX0NoZWNrlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21ldGhvZC5odG1sI2MuUHlNZXRob2RfQ2hlY2uUag2PAAB0lIwWUHlNZXRob2RfQ2xlYXJGcmVlTGlzdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZXRob2QuaHRtbCNjLlB5TWV0aG9kX0NsZWFyRnJlZUxpc3SUag2PAAB0lIwRUHlNZXRob2RfRnVuY3Rpb26UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9GdW5jdGlvbpRqDY8AAHSUjBVQeU1ldGhvZF9HRVRfRlVOQ1RJT06UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9HRVRfRlVOQ1RJT06Uag2PAAB0lIwRUHlNZXRob2RfR0VUX1NFTEaUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9HRVRfU0VMRpRqDY8AAHSUjAxQeU1ldGhvZF9OZXeUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWV0aG9kLmh0bWwjYy5QeU1ldGhvZF9OZXeUag2PAAB0lIwNUHlNZXRob2RfU2VsZpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZXRob2QuaHRtbCNjLlB5TWV0aG9kX1NlbGaUag2PAAB0lIwQUHlNb2R1bGVEZWZfSW5pdJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlRGVmX0luaXSUag2PAAB0lIwVUHlNb2R1bGVfQWRkRnVuY3Rpb25zlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfQWRkRnVuY3Rpb25zlGoNjwAAdJSMF1B5TW9kdWxlX0FkZEludENvbnN0YW50lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnSUag2PAAB0lIwUUHlNb2R1bGVfQWRkSW50TWFjcm+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9BZGRJbnRNYWNyb5RqDY8AAHSUjBJQeU1vZHVsZV9BZGRPYmplY3SUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9BZGRPYmplY3SUag2PAAB0lIwaUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudJRqDY8AAHSUjBdQeU1vZHVsZV9BZGRTdHJpbmdNYWNyb5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0FkZFN0cmluZ01hY3JvlGoNjwAAdJSMDlB5TW9kdWxlX0NoZWNrlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfQ2hlY2uUag2PAAB0lIwTUHlNb2R1bGVfQ2hlY2tFeGFjdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0NoZWNrRXhhY3SUag2PAAB0lIwPUHlNb2R1bGVfQ3JlYXRllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfQ3JlYXRllGoNjwAAdJSMEFB5TW9kdWxlX0NyZWF0ZTKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9DcmVhdGUylGoNjwAAdJSMEFB5TW9kdWxlX0V4ZWNEZWaUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9FeGVjRGVmlGoNjwAAdJSMF1B5TW9kdWxlX0Zyb21EZWZBbmRTcGVjlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfRnJvbURlZkFuZFNwZWOUag2PAAB0lIwYUHlNb2R1bGVfRnJvbURlZkFuZFNwZWMylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfRnJvbURlZkFuZFNwZWMylGoNjwAAdJSMD1B5TW9kdWxlX0dldERlZpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0dldERlZpRqDY8AAHSUjBBQeU1vZHVsZV9HZXREaWN0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfR2V0RGljdJRqDY8AAHSUjBRQeU1vZHVsZV9HZXRGaWxlbmFtZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0dldEZpbGVuYW1llGoNjwAAdJSMGlB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3SUag2PAAB0lIwQUHlNb2R1bGVfR2V0TmFtZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0dldE5hbWWUag2PAAB0lIwWUHlNb2R1bGVfR2V0TmFtZU9iamVjdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX0dldE5hbWVPYmplY3SUag2PAAB0lIwRUHlNb2R1bGVfR2V0U3RhdGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9HZXRTdGF0ZZRqDY8AAHSUjAxQeU1vZHVsZV9OZXeUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZV9OZXeUag2PAAB0lIwSUHlNb2R1bGVfTmV3T2JqZWN0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVfTmV3T2JqZWN0lGoNjwAAdJSMFVB5TW9kdWxlX1NldERvY1N0cmluZ5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlX1NldERvY1N0cmluZ5RqDY8AAHSUjBFQeU51bWJlcl9BYnNvbHV0ZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0Fic29sdXRllGoNjwAAdJSMDFB5TnVtYmVyX0FkZJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0FkZJRqDY8AAHSUjAxQeU51bWJlcl9BbmSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9BbmSUag2PAAB0lIwSUHlOdW1iZXJfQXNTc2l6ZV90lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQXNTc2l6ZV90lGoNjwAAdJSMDlB5TnVtYmVyX0NoZWNrlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfQ2hlY2uUag2PAAB0lIwPUHlOdW1iZXJfRGl2bW9klChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfRGl2bW9klGoNjwAAdJSMDlB5TnVtYmVyX0Zsb2F0lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfRmxvYXSUag2PAAB0lIwUUHlOdW1iZXJfRmxvb3JEaXZpZGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9GbG9vckRpdmlkZZRqDY8AAHSUjBNQeU51bWJlcl9JblBsYWNlQWRklChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZUFkZJRqDY8AAHSUjBNQeU51bWJlcl9JblBsYWNlQW5klChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZUFuZJRqDY8AAHSUjBtQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGWUag2PAAB0lIwWUHlOdW1iZXJfSW5QbGFjZUxzaGlmdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VMc2hpZnSUag2PAAB0lIweUHlOdW1iZXJfSW5QbGFjZU1hdHJpeE11bHRpcGx5lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZU1hdHJpeE11bHRpcGx5lGoNjwAAdJSMGFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseZRqDY8AAHSUjBJQeU51bWJlcl9JblBsYWNlT3KUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlT3KUag2PAAB0lIwVUHlOdW1iZXJfSW5QbGFjZVBvd2VylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5QbGFjZVBvd2VylGoNjwAAdJSMGVB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVylGoNjwAAdJSMFlB5TnVtYmVyX0luUGxhY2VSc2hpZnSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlUnNoaWZ0lGoNjwAAdJSMGFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdJRqDY8AAHSUjBpQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRllGoNjwAAdJSME1B5TnVtYmVyX0luUGxhY2VYb3KUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9JblBsYWNlWG9ylGoNjwAAdJSMDlB5TnVtYmVyX0luZGV4lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW5kZXiUag2PAAB0lIwPUHlOdW1iZXJfSW52ZXJ0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfSW52ZXJ0lGoNjwAAdJSMDVB5TnVtYmVyX0xvbmeUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Mb25nlGoNjwAAdJSMD1B5TnVtYmVyX0xzaGlmdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX0xzaGlmdJRqDY8AAHSUjBdQeU51bWJlcl9NYXRyaXhNdWx0aXBseZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX01hdHJpeE11bHRpcGx5lGoNjwAAdJSMEVB5TnVtYmVyX011bHRpcGx5lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfTXVsdGlwbHmUag2PAAB0lIwRUHlOdW1iZXJfTmVnYXRpdmWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9OZWdhdGl2ZZRqDY8AAHSUjAtQeU51bWJlcl9PcpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX09ylGoNjwAAdJSMEVB5TnVtYmVyX1Bvc2l0aXZllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfUG9zaXRpdmWUag2PAAB0lIwOUHlOdW1iZXJfUG93ZXKUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9Qb3dlcpRqDY8AAHSUjBJQeU51bWJlcl9SZW1haW5kZXKUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9SZW1haW5kZXKUag2PAAB0lIwPUHlOdW1iZXJfUnNoaWZ0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfUnNoaWZ0lGoNjwAAdJSMEVB5TnVtYmVyX1N1YnRyYWN0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfU3VidHJhY3SUag2PAAB0lIwPUHlOdW1iZXJfVG9CYXNllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1sI2MuUHlOdW1iZXJfVG9CYXNllGoNjwAAdJSME1B5TnVtYmVyX1RydWVEaXZpZGWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjYy5QeU51bWJlcl9UcnVlRGl2aWRllGoNjwAAdJSMDFB5TnVtYmVyX1hvcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9udW1iZXIuaHRtbCNjLlB5TnVtYmVyX1hvcpRqDY8AAHSUjA5QeU9TX0FmdGVyRm9ya5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zeXMuaHRtbCNjLlB5T1NfQWZ0ZXJGb3JrlGoNjwAAdJSMFFB5T1NfQWZ0ZXJGb3JrX0NoaWxklChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlPU19BZnRlckZvcmtfQ2hpbGSUag2PAAB0lIwVUHlPU19BZnRlckZvcmtfUGFyZW50lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlPU19BZnRlckZvcmtfUGFyZW50lGoNjwAAdJSMD1B5T1NfQmVmb3JlRm9ya5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zeXMuaHRtbCNjLlB5T1NfQmVmb3JlRm9ya5RqDY8AAHSUjA9QeU9TX0NoZWNrU3RhY2uUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeU9TX0NoZWNrU3RhY2uUag2PAAB0lIwLUHlPU19GU1BhdGiUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeU9TX0ZTUGF0aJRqDY8AAHSUjBVQeU9TX2RvdWJsZV90b19zdHJpbmeUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udmVyc2lvbi5odG1sI2MuUHlPU19kb3VibGVfdG9fc3RyaW5nlGoNjwAAdJSMC1B5T1NfZ2V0c2lnlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlPU19nZXRzaWeUag2PAAB0lIwLUHlPU19zZXRzaWeUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeU9TX3NldHNpZ5RqDY8AAHSUjA1QeU9TX3NucHJpbnRmlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNjLlB5T1Nfc25wcmludGaUag2PAAB0lIwMUHlPU19zdHJpY21wlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbnZlcnNpb24uaHRtbCNjLlB5T1Nfc3RyaWNtcJRqDY8AAHSUjBVQeU9TX3N0cmluZ190b19kb3VibGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udmVyc2lvbi5odG1sI2MuUHlPU19zdHJpbmdfdG9fZG91YmxllGoNjwAAdJSMDVB5T1Nfc3RybmljbXCUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udmVyc2lvbi5odG1sI2MuUHlPU19zdHJuaWNtcJRqDY8AAHSUjA5QeU9TX3ZzbnByaW50ZpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb252ZXJzaW9uLmh0bWwjYy5QeU9TX3ZzbnByaW50ZpRqDY8AAHSUjA5QeU9iamVjdF9BU0NJSZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0FTQ0lJlGoNjwAAdJSMFVB5T2JqZWN0X0FzQ2hhckJ1ZmZlcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmpidWZmZXIuaHRtbCNjLlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcpRqDY8AAHSUjBlQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9ylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ZpbGUuaHRtbCNjLlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3KUag2PAAB0lIwVUHlPYmplY3RfQXNSZWFkQnVmZmVylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamJ1ZmZlci5odG1sI2MuUHlPYmplY3RfQXNSZWFkQnVmZmVylGoNjwAAdJSMFlB5T2JqZWN0X0FzV3JpdGVCdWZmZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqYnVmZmVyLmh0bWwjYy5QeU9iamVjdF9Bc1dyaXRlQnVmZmVylGoNjwAAdJSMDlB5T2JqZWN0X0J5dGVzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQnl0ZXOUag2PAAB0lIwNUHlPYmplY3RfQ2FsbJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0NhbGyUag2PAAB0lIwVUHlPYmplY3RfQ2FsbEZ1bmN0aW9ulChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQ2FsbEZ1bmN0aW9ulGoNjwAAdJSMHFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3OUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzlGoNjwAAdJSME1B5T2JqZWN0X0NhbGxNZXRob2SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9DYWxsTWV0aG9klGoNjwAAdJSMGlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3OUag2PAAB0lIwTUHlPYmplY3RfQ2FsbE9iamVjdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0NhbGxPYmplY3SUag2PAAB0lIwPUHlPYmplY3RfQ2FsbG9jlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUHlPYmplY3RfQ2FsbG9jlGoNjwAAdJSMFFB5T2JqZWN0X0NoZWNrQnVmZmVylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlPYmplY3RfQ2hlY2tCdWZmZXKUag2PAAB0lIwYUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamJ1ZmZlci5odG1sI2MuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVylGoNjwAAdJSMDFB5T2JqZWN0X0RlbJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5QeU9iamVjdF9EZWyUag2PAAB0lIwQUHlPYmplY3RfRGVsQXR0cpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0RlbEF0dHKUag2PAAB0lIwWUHlPYmplY3RfRGVsQXR0clN0cmluZ5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0RlbEF0dHJTdHJpbmeUag2PAAB0lIwQUHlPYmplY3RfRGVsSXRlbZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0RlbEl0ZW2Uag2PAAB0lIwMUHlPYmplY3RfRGlylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfRGlylGoNjwAAdJSMDVB5T2JqZWN0X0ZyZWWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU9iamVjdF9GcmVllGoNjwAAdJSMD1B5T2JqZWN0X0dDX0RlbJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLlB5T2JqZWN0X0dDX0RlbJRqDY8AAHSUjA9QeU9iamVjdF9HQ19OZXeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5QeU9iamVjdF9HQ19OZXeUag2PAAB0lIwSUHlPYmplY3RfR0NfTmV3VmFylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlPYmplY3RfR0NfTmV3VmFylGoNjwAAdJSMElB5T2JqZWN0X0dDX1Jlc2l6ZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLlB5T2JqZWN0X0dDX1Jlc2l6ZZRqDY8AAHSUjBFQeU9iamVjdF9HQ19UcmFja5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9nY3N1cHBvcnQuaHRtbCNjLlB5T2JqZWN0X0dDX1RyYWNrlGoNjwAAdJSME1B5T2JqZWN0X0dDX1VuVHJhY2uUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZ2NzdXBwb3J0Lmh0bWwjYy5QeU9iamVjdF9HQ19VblRyYWNrlGoNjwAAdJSMF1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfR2VuZXJpY0dldEF0dHKUag2PAAB0lIwXUHlPYmplY3RfR2VuZXJpY0dldERpY3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9HZW5lcmljR2V0RGljdJRqDY8AAHSUjBdQeU9iamVjdF9HZW5lcmljU2V0QXR0cpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRylGoNjwAAdJSMF1B5T2JqZWN0X0dlbmVyaWNTZXREaWN0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfR2VuZXJpY1NldERpY3SUag2PAAB0lIwaUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3KUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU9iamVjdF9HZXRBcmVuYUFsbG9jYXRvcpRqDY8AAHSUjBBQeU9iamVjdF9HZXRBdHRylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfR2V0QXR0cpRqDY8AAHSUjBZQeU9iamVjdF9HZXRBdHRyU3RyaW5nlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfR2V0QXR0clN0cmluZ5RqDY8AAHSUjBJQeU9iamVjdF9HZXRCdWZmZXKUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeU9iamVjdF9HZXRCdWZmZXKUag2PAAB0lIwQUHlPYmplY3RfR2V0SXRlbZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dldEl0ZW2Uag2PAAB0lIwQUHlPYmplY3RfR2V0SXRlcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0dldEl0ZXKUag2PAAB0lIwQUHlPYmplY3RfSGFzQXR0cpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0hhc0F0dHKUag2PAAB0lIwWUHlPYmplY3RfSGFzQXR0clN0cmluZ5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0hhc0F0dHJTdHJpbmeUag2PAAB0lIwNUHlPYmplY3RfSGFzaJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0hhc2iUag2PAAB0lIwbUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVklChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVklGoNjwAAdJSMDVB5T2JqZWN0X0luaXSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuUHlPYmplY3RfSW5pdJRqDY8AAHSUjBBQeU9iamVjdF9Jbml0VmFylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLlB5T2JqZWN0X0luaXRWYXKUag2PAAB0lIwTUHlPYmplY3RfSXNJbnN0YW5jZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0lzSW5zdGFuY2WUag2PAAB0lIwTUHlPYmplY3RfSXNTdWJjbGFzc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0lzU3ViY2xhc3OUag2PAAB0lIwPUHlPYmplY3RfSXNUcnVllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfSXNUcnVllGoNjwAAdJSMD1B5T2JqZWN0X0xlbmd0aJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X0xlbmd0aJRqDY8AAHSUjBNQeU9iamVjdF9MZW5ndGhIaW50lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfTGVuZ3RoSGludJRqDY8AAHSUjA9QeU9iamVjdF9NYWxsb2OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU9iamVjdF9NYWxsb2OUag2PAAB0lIwMUHlPYmplY3RfTmV3lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNjLlB5T2JqZWN0X05ld5RqDY8AAHSUjA9QeU9iamVjdF9OZXdWYXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuUHlPYmplY3RfTmV3VmFylGoNjwAAdJSMDFB5T2JqZWN0X05vdJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X05vdJRqDY8AAHSUjA5QeU9iamVjdF9QcmludJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1ByaW50lGoNjwAAdJSMEFB5T2JqZWN0X1JlYWxsb2OUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeU9iamVjdF9SZWFsbG9jlGoNjwAAdJSMDVB5T2JqZWN0X1JlcHKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9SZXBylGoNjwAAdJSMFFB5T2JqZWN0X1JpY2hDb21wYXJllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfUmljaENvbXBhcmWUag2PAAB0lIwYUHlPYmplY3RfUmljaENvbXBhcmVCb29slChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfUmljaENvbXBhcmVCb29slGoNjwAAdJSMGlB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9ylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI2MuUHlPYmplY3RfU2V0QXJlbmFBbGxvY2F0b3KUag2PAAB0lIwQUHlPYmplY3RfU2V0QXR0cpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1NldEF0dHKUag2PAAB0lIwWUHlPYmplY3RfU2V0QXR0clN0cmluZ5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1NldEF0dHJTdHJpbmeUag2PAAB0lIwQUHlPYmplY3RfU2V0SXRlbZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1NldEl0ZW2Uag2PAAB0lIwNUHlPYmplY3RfU2l6ZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1NpemWUag2PAAB0lIwMUHlPYmplY3RfU3RylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlPYmplY3RfU3RylGoNjwAAdJSMDVB5T2JqZWN0X1R5cGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeU9iamVjdF9UeXBllGoNjwAAdJSMElB5T2JqZWN0X1R5cGVDaGVja5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLlB5T2JqZWN0X1R5cGVDaGVja5RqDY8AAHSUjBhQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZZRqDY8AAHSUjB1QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFnc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3OUag2PAAB0lIwaUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmeUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nlGoNjwAAdJSMH1B5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3OUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3OUag2PAAB0lIwnUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1llChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWWUag2PAAB0lIweUHlQcmVDb25maWdfSW5pdElzb2xhdGVkQ29uZmlnlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVByZUNvbmZpZ19Jbml0SXNvbGF0ZWRDb25maWeUag2PAAB0lIwcUHlQcmVDb25maWdfSW5pdFB5dGhvbkNvbmZpZ5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlQcmVDb25maWdfSW5pdFB5dGhvbkNvbmZpZ5RqDY8AAHSUjA1QeVJ1bl9BbnlGaWxllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9BbnlGaWxllGoNjwAAdJSMD1B5UnVuX0FueUZpbGVFeJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fQW55RmlsZUV4lGoNjwAAdJSMFFB5UnVuX0FueUZpbGVFeEZsYWdzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9BbnlGaWxlRXhGbGFnc5RqDY8AAHSUjBJQeVJ1bl9BbnlGaWxlRmxhZ3OUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0FueUZpbGVGbGFnc5RqDY8AAHSUjApQeVJ1bl9GaWxllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9GaWxllGoNjwAAdJSMDFB5UnVuX0ZpbGVFeJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fRmlsZUV4lGoNjwAAdJSMEVB5UnVuX0ZpbGVFeEZsYWdzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9GaWxlRXhGbGFnc5RqDY8AAHSUjA9QeVJ1bl9GaWxlRmxhZ3OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0ZpbGVGbGFnc5RqDY8AAHSUjBVQeVJ1bl9JbnRlcmFjdGl2ZUxvb3CUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0ludGVyYWN0aXZlTG9vcJRqDY8AAHSUjBpQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFnc5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3OUag2PAAB0lIwUUHlSdW5fSW50ZXJhY3RpdmVPbmWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0ludGVyYWN0aXZlT25llGoNjwAAdJSMGVB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3OUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3OUag2PAAB0lIwQUHlSdW5fU2ltcGxlRmlsZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fU2ltcGxlRmlsZZRqDY8AAHSUjBJQeVJ1bl9TaW1wbGVGaWxlRXiUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX1NpbXBsZUZpbGVFeJRqDY8AAHSUjBdQeVJ1bl9TaW1wbGVGaWxlRXhGbGFnc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3OUag2PAAB0lIwSUHlSdW5fU2ltcGxlU3RyaW5nlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9TaW1wbGVTdHJpbmeUag2PAAB0lIwXUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3OUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5UnVuX1NpbXBsZVN0cmluZ0ZsYWdzlGoNjwAAdJSMDFB5UnVuX1N0cmluZ5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlSdW5fU3RyaW5nlGoNjwAAdJSMEVB5UnVuX1N0cmluZ0ZsYWdzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeVJ1bl9TdHJpbmdGbGFnc5RqDY8AAHSUjA9QeVNlcUl0ZXJfQ2hlY2uUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaXRlcmF0b3IuaHRtbCNjLlB5U2VxSXRlcl9DaGVja5RqDY8AAHSUjA1QeVNlcUl0ZXJfTmV3lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2l0ZXJhdG9yLmh0bWwjYy5QeVNlcUl0ZXJfTmV3lGoNjwAAdJSMEFB5U2VxdWVuY2VfQ2hlY2uUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfQ2hlY2uUag2PAAB0lIwRUHlTZXF1ZW5jZV9Db25jYXSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfQ29uY2F0lGoNjwAAdJSME1B5U2VxdWVuY2VfQ29udGFpbnOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfQ29udGFpbnOUag2PAAB0lIwQUHlTZXF1ZW5jZV9Db3VudJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9Db3VudJRqDY8AAHSUjBJQeVNlcXVlbmNlX0RlbEl0ZW2UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfRGVsSXRlbZRqDY8AAHSUjBNQeVNlcXVlbmNlX0RlbFNsaWNllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0RlbFNsaWNllGoNjwAAdJSMD1B5U2VxdWVuY2VfRmFzdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9GYXN0lGoNjwAAdJSMGFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNlGoNjwAAdJSMGFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFlGoNjwAAdJSMFVB5U2VxdWVuY2VfRmFzdF9JVEVNU5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9GYXN0X0lURU1TlGoNjwAAdJSMElB5U2VxdWVuY2VfR2V0SXRlbZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9HZXRJdGVtlGoNjwAAdJSME1B5U2VxdWVuY2VfR2V0U2xpY2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfR2V0U2xpY2WUag2PAAB0lIwPUHlTZXF1ZW5jZV9JVEVNlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0lURU2Uag2PAAB0lIwYUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0luUGxhY2VDb25jYXSUag2PAAB0lIwYUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXSUag2PAAB0lIwQUHlTZXF1ZW5jZV9JbmRleJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9JbmRleJRqDY8AAHSUjBFQeVNlcXVlbmNlX0xlbmd0aJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9MZW5ndGiUag2PAAB0lIwPUHlTZXF1ZW5jZV9MaXN0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX0xpc3SUag2PAAB0lIwRUHlTZXF1ZW5jZV9SZXBlYXSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfUmVwZWF0lGoNjwAAdJSMElB5U2VxdWVuY2VfU2V0SXRlbZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9TZXRJdGVtlGoNjwAAdJSME1B5U2VxdWVuY2VfU2V0U2xpY2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2VxdWVuY2UuaHRtbCNjLlB5U2VxdWVuY2VfU2V0U2xpY2WUag2PAAB0lIwPUHlTZXF1ZW5jZV9TaXpllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NlcXVlbmNlLmh0bWwjYy5QeVNlcXVlbmNlX1NpemWUag2PAAB0lIwQUHlTZXF1ZW5jZV9UdXBsZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI2MuUHlTZXF1ZW5jZV9UdXBsZZRqDY8AAHSUjAlQeVNldF9BZGSUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9BZGSUag2PAAB0lIwLUHlTZXRfQ2hlY2uUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9DaGVja5RqDY8AAHSUjAtQeVNldF9DbGVhcpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X0NsZWFylGoNjwAAdJSME1B5U2V0X0NsZWFyRnJlZUxpc3SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9DbGVhckZyZWVMaXN0lGoNjwAAdJSMDlB5U2V0X0NvbnRhaW5zlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NldC5odG1sI2MuUHlTZXRfQ29udGFpbnOUag2PAAB0lIwNUHlTZXRfRGlzY2FyZJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXQuaHRtbCNjLlB5U2V0X0Rpc2NhcmSUag2PAAB0lIwOUHlTZXRfR0VUX1NJWkWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9HRVRfU0laRZRqDY8AAHSUjAlQeVNldF9OZXeUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9OZXeUag2PAAB0lIwJUHlTZXRfUG9wlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NldC5odG1sI2MuUHlTZXRfUG9wlGoNjwAAdJSMClB5U2V0X1NpemWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjYy5QeVNldF9TaXpllGoNjwAAdJSMFFB5U2lnbmFsX1NldFdha2V1cEZklChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5U2lnbmFsX1NldFdha2V1cEZklGoNjwAAdJSMFVB5U2xpY2VfQWRqdXN0SW5kaWNlc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zbGljZS5odG1sI2MuUHlTbGljZV9BZGp1c3RJbmRpY2VzlGoNjwAAdJSMDVB5U2xpY2VfQ2hlY2uUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2xpY2UuaHRtbCNjLlB5U2xpY2VfQ2hlY2uUag2PAAB0lIwSUHlTbGljZV9HZXRJbmRpY2VzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NsaWNlLmh0bWwjYy5QeVNsaWNlX0dldEluZGljZXOUag2PAAB0lIwUUHlTbGljZV9HZXRJbmRpY2VzRXiUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2xpY2UuaHRtbCNjLlB5U2xpY2VfR2V0SW5kaWNlc0V4lGoNjwAAdJSMC1B5U2xpY2VfTmV3lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3NsaWNlLmh0bWwjYy5QeVNsaWNlX05ld5RqDY8AAHSUjA5QeVNsaWNlX1VucGFja5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zbGljZS5odG1sI2MuUHlTbGljZV9VbnBhY2uUag2PAAB0lIwRUHlTdGF0ZV9BZGRNb2R1bGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeVN0YXRlX0FkZE1vZHVsZZRqDY8AAHSUjBJQeVN0YXRlX0ZpbmRNb2R1bGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeVN0YXRlX0ZpbmRNb2R1bGWUag2PAAB0lIwUUHlTdGF0ZV9SZW1vdmVNb2R1bGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeVN0YXRlX1JlbW92ZU1vZHVsZZRqDY8AAHSUjA5QeVN0YXR1c19FcnJvcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlTdGF0dXNfRXJyb3KUag2PAAB0lIwSUHlTdGF0dXNfRXhjZXB0aW9ulChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVN0YXR1c19FeGNlcHRpb26Uag2PAAB0lIwNUHlTdGF0dXNfRXhpdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlTdGF0dXNfRXhpdJRqDY8AAHSUjBBQeVN0YXR1c19Jc0Vycm9ylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVN0YXR1c19Jc0Vycm9ylGoNjwAAdJSMD1B5U3RhdHVzX0lzRXhpdJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlTdGF0dXNfSXNFeGl0lGoNjwAAdJSMEVB5U3RhdHVzX05vTWVtb3J5lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVN0YXR1c19Ob01lbW9yeZRqDY8AAHSUjAtQeVN0YXR1c19Pa5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlTdGF0dXNfT2uUag2PAAB0lIwZUHlTdHJ1Y3RTZXF1ZW5jZV9HRVRfSVRFTZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlTdHJ1Y3RTZXF1ZW5jZV9HRVRfSVRFTZRqDY8AAHSUjBhQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW2UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHVwbGUuaHRtbCNjLlB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbZRqDY8AAHSUjBlQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBllGoNjwAAdJSMGlB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMpRqDY8AAHSUjBRQeVN0cnVjdFNlcXVlbmNlX05ld5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXeUag2PAAB0lIwYUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGWUag2PAAB0lIwZUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTZRqDY8AAHSUjBhQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW2UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHVwbGUuaHRtbCNjLlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbZRqDY8AAHSUjBJQeVN5c19BZGRBdWRpdEhvb2uUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeVN5c19BZGRBdWRpdEhvb2uUag2PAAB0lIwTUHlTeXNfQWRkV2Fybk9wdGlvbpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX0FkZFdhcm5PcHRpb26Uag2PAAB0lIwaUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZZRqDY8AAHSUjBBQeVN5c19BZGRYT3B0aW9ulChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfQWRkWE9wdGlvbpRqDY8AAHSUjAtQeVN5c19BdWRpdJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX0F1ZGl0lGoNjwAAdJSMElB5U3lzX0Zvcm1hdFN0ZGVycpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX0Zvcm1hdFN0ZGVycpRqDY8AAHSUjBJQeVN5c19Gb3JtYXRTdGRvdXSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeVN5c19Gb3JtYXRTdGRvdXSUag2PAAB0lIwPUHlTeXNfR2V0T2JqZWN0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfR2V0T2JqZWN0lGoNjwAAdJSMEVB5U3lzX0dldFhPcHRpb25zlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfR2V0WE9wdGlvbnOUag2PAAB0lIwWUHlTeXNfUmVzZXRXYXJuT3B0aW9uc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zeXMuaHRtbCNjLlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnOUag2PAAB0lIwNUHlTeXNfU2V0QXJndpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVN5c19TZXRBcmd2lGoNjwAAdJSMD1B5U3lzX1NldEFyZ3ZFeJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVN5c19TZXRBcmd2RXiUag2PAAB0lIwPUHlTeXNfU2V0T2JqZWN0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfU2V0T2JqZWN0lGoNjwAAdJSMDVB5U3lzX1NldFBhdGiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeVN5c19TZXRQYXRolGoNjwAAdJSMEVB5U3lzX1dyaXRlU3RkZXJylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlTeXNfV3JpdGVTdGRlcnKUag2PAAB0lIwRUHlTeXNfV3JpdGVTdGRvdXSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeVN5c19Xcml0ZVN0ZG91dJRqDY8AAHSUjA5QeVRaSW5mb19DaGVja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlUWkluZm9fQ2hlY2uUag2PAAB0lIwTUHlUWkluZm9fQ2hlY2tFeGFjdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlUWkluZm9fQ2hlY2tFeGFjdJRqDY8AAHSUjBNQeVRocmVhZFN0YXRlX0NsZWFylChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkU3RhdGVfQ2xlYXKUag2PAAB0lIwUUHlUaHJlYWRTdGF0ZV9EZWxldGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9EZWxldGWUag2PAAB0lIwRUHlUaHJlYWRTdGF0ZV9HZXSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9HZXSUag2PAAB0lIwVUHlUaHJlYWRTdGF0ZV9HZXREaWN0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkU3RhdGVfR2V0RGljdJRqDY8AAHSUjBFQeVRocmVhZFN0YXRlX05ld5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZFN0YXRlX05ld5RqDY8AAHSUjBJQeVRocmVhZFN0YXRlX05leHSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9OZXh0lGoNjwAAdJSMGVB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Y5RqDY8AAHSUjBJQeVRocmVhZFN0YXRlX1N3YXCUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRTdGF0ZV9Td2FwlGoNjwAAdJSMElB5VGhyZWFkX1JlSW5pdFRMU5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZF9SZUluaXRUTFOUag2PAAB0lIwTUHlUaHJlYWRfY3JlYXRlX2tleZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZF9jcmVhdGVfa2V5lGoNjwAAdJSME1B5VGhyZWFkX2RlbGV0ZV9rZXmUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRfZGVsZXRlX2tleZRqDY8AAHSUjBlQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkX2RlbGV0ZV9rZXlfdmFsdWWUag2PAAB0lIwWUHlUaHJlYWRfZ2V0X2tleV92YWx1ZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZF9nZXRfa2V5X3ZhbHVllGoNjwAAdJSMFlB5VGhyZWFkX3NldF9rZXlfdmFsdWWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRfc2V0X2tleV92YWx1ZZRqDY8AAHSUjBJQeVRocmVhZF90c3NfYWxsb2OUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRfdHNzX2FsbG9jlGoNjwAAdJSME1B5VGhyZWFkX3Rzc19jcmVhdGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRfdHNzX2NyZWF0ZZRqDY8AAHSUjBNQeVRocmVhZF90c3NfZGVsZXRllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkX3Rzc19kZWxldGWUag2PAAB0lIwRUHlUaHJlYWRfdHNzX2ZyZWWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRfdHNzX2ZyZWWUag2PAAB0lIwQUHlUaHJlYWRfdHNzX2dldJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeVRocmVhZF90c3NfZ2V0lGoNjwAAdJSMF1B5VGhyZWFkX3Rzc19pc19jcmVhdGVklChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5VGhyZWFkX3Rzc19pc19jcmVhdGVklGoNjwAAdJSMEFB5VGhyZWFkX3Rzc19zZXSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlUaHJlYWRfdHNzX3NldJRqDY8AAHSUjBVQeVRpbWVab25lX0Zyb21PZmZzZXSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5VGltZVpvbmVfRnJvbU9mZnNldJRqDY8AAHSUjBxQeVRpbWVab25lX0Zyb21PZmZzZXRBbmROYW1llChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeVRpbWVab25lX0Zyb21PZmZzZXRBbmROYW1llGoNjwAAdJSMDFB5VGltZV9DaGVja5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kYXRldGltZS5odG1sI2MuUHlUaW1lX0NoZWNrlGoNjwAAdJSMEVB5VGltZV9DaGVja0V4YWN0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeVRpbWVfQ2hlY2tFeGFjdJRqDY8AAHSUjA9QeVRpbWVfRnJvbVRpbWWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNjLlB5VGltZV9Gcm9tVGltZZRqDY8AAHSUjBZQeVRpbWVfRnJvbVRpbWVBbmRGb2xklChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWwjYy5QeVRpbWVfRnJvbVRpbWVBbmRGb2xklGoNjwAAdJSME1B5VHJhY2VNYWxsb2NfVHJhY2uUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjYy5QeVRyYWNlTWFsbG9jX1RyYWNrlGoNjwAAdJSMFVB5VHJhY2VNYWxsb2NfVW50cmFja5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNjLlB5VHJhY2VNYWxsb2NfVW50cmFja5RqDY8AAHSUjA1QeVR1cGxlX0NoZWNrlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0NoZWNrlGoNjwAAdJSMElB5VHVwbGVfQ2hlY2tFeGFjdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9DaGVja0V4YWN0lGoNjwAAdJSMFVB5VHVwbGVfQ2xlYXJGcmVlTGlzdJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9DbGVhckZyZWVMaXN0lGoNjwAAdJSMEFB5VHVwbGVfR0VUX0lURU2UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHVwbGUuaHRtbCNjLlB5VHVwbGVfR0VUX0lURU2Uag2PAAB0lIwQUHlUdXBsZV9HRVRfU0laRZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9HRVRfU0laRZRqDY8AAHSUjA9QeVR1cGxlX0dldEl0ZW2UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHVwbGUuaHRtbCNjLlB5VHVwbGVfR2V0SXRlbZRqDY8AAHSUjBBQeVR1cGxlX0dldFNsaWNllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX0dldFNsaWNllGoNjwAAdJSMC1B5VHVwbGVfTmV3lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX05ld5RqDY8AAHSUjAxQeVR1cGxlX1BhY2uUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHVwbGUuaHRtbCNjLlB5VHVwbGVfUGFja5RqDY8AAHSUjBBQeVR1cGxlX1NFVF9JVEVNlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWwjYy5QeVR1cGxlX1NFVF9JVEVNlGoNjwAAdJSMD1B5VHVwbGVfU2V0SXRlbZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9TZXRJdGVtlGoNjwAAdJSMDFB5VHVwbGVfU2l6ZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuUHlUdXBsZV9TaXpllGoNjwAAdJSMDFB5VHlwZV9DaGVja5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfQ2hlY2uUag2PAAB0lIwRUHlUeXBlX0NoZWNrRXhhY3SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0NoZWNrRXhhY3SUag2PAAB0lIwRUHlUeXBlX0NsZWFyQ2FjaGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0NsZWFyQ2FjaGWUag2PAAB0lIwPUHlUeXBlX0Zyb21TcGVjlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9Gcm9tU3BlY5RqDY8AAHSUjBhQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzlGoNjwAAdJSME1B5VHlwZV9HZW5lcmljQWxsb2OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0dlbmVyaWNBbGxvY5RqDY8AAHSUjBFQeVR5cGVfR2VuZXJpY05ld5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfR2VuZXJpY05ld5RqDY8AAHSUjA9QeVR5cGVfR2V0RmxhZ3OUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX0dldEZsYWdzlGoNjwAAdJSMDlB5VHlwZV9HZXRTbG90lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9HZXRTbG90lGoNjwAAdJSMEVB5VHlwZV9IYXNGZWF0dXJllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9IYXNGZWF0dXJllGoNjwAAdJSMDFB5VHlwZV9JU19HQ5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfSVNfR0OUag2PAAB0lIwQUHlUeXBlX0lzU3VidHlwZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfSXNTdWJ0eXBllGoNjwAAdJSMD1B5VHlwZV9Nb2RpZmllZJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfTW9kaWZpZWSUag2PAAB0lIwMUHlUeXBlX1JlYWR5lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9SZWFkeZRqDY8AAHSUjBtQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGWUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRllGoNjwAAdJSMIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nlGoNjwAAdJSMG1B5VW5pY29kZURlY29kZUVycm9yX0dldEVuZJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmSUag2PAAB0lIweUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdJRqDY8AAHSUjB5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb26UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29ulGoNjwAAdJSMHVB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0lGoNjwAAdJSMG1B5VW5pY29kZURlY29kZUVycm9yX1NldEVuZJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmSUag2PAAB0lIweUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29ulChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbpRqDY8AAHSUjB1QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydJRqDY8AAHSUjBtQeVVuaWNvZGVFbmNvZGVFcnJvcl9DcmVhdGWUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRW5jb2RlRXJyb3JfQ3JlYXRllGoNjwAAdJSMIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nlGoNjwAAdJSMG1B5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmSUag2PAAB0lIweUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdJRqDY8AAHSUjB5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb26UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29ulGoNjwAAdJSMHVB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0lGoNjwAAdJSMG1B5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmSUag2PAAB0lIweUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29ulChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbpRqDY8AAHSUjB1QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydJRqDY8AAHSUjB5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9DcmVhdGWUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfQ3JlYXRllGoNjwAAdJSMHlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmSUag2PAAB0lIwhUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdJRqDY8AAHSUjCFQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb26UKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29ulGoNjwAAdJSMIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0lGoNjwAAdJSMHlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmSUag2PAAB0lIwhUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29ulChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbpRqDY8AAHSUjCBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydJRqDY8AAHSUjBRQeVVuaWNvZGVfMUJZVEVfREFUQZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfMUJZVEVfREFUQZRqDY8AAHSUjBRQeVVuaWNvZGVfMkJZVEVfREFUQZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfMkJZVEVfREFUQZRqDY8AAHSUjBRQeVVuaWNvZGVfNEJZVEVfREFUQZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfNEJZVEVfREFUQZRqDY8AAHSUjBFQeVVuaWNvZGVfQVNfREFUQZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQVNfREFUQZRqDY8AAHSUjBRQeVVuaWNvZGVfQVNfVU5JQ09ERZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQVNfVU5JQ09ERZRqDY8AAHSUjBdQeVVuaWNvZGVfQXNBU0NJSVN0cmluZ5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNBU0NJSVN0cmluZ5RqDY8AAHSUjBlQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmeUag2PAAB0lIwZUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZ5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nlGoNjwAAdJSMGFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZ5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmeUag2PAAB0lIwWUHlVbmljb2RlX0FzTUJDU1N0cmluZ5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNNQkNTU3RyaW5nlGoNjwAAdJSMIlB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmeUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZ5RqDY8AAHSUjBBQeVVuaWNvZGVfQXNVQ1M0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1VDUzSUag2PAAB0lIwUUHlVbmljb2RlX0FzVUNTNENvcHmUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVUNTNENvcHmUag2PAAB0lIwXUHlVbmljb2RlX0FzVVRGMTZTdHJpbmeUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVVRGMTZTdHJpbmeUag2PAAB0lIwXUHlVbmljb2RlX0FzVVRGMzJTdHJpbmeUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVVRGMzJTdHJpbmeUag2PAAB0lIwQUHlVbmljb2RlX0FzVVRGOJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNVVEY4lGoNjwAAdJSMF1B5VW5pY29kZV9Bc1VURjhBbmRTaXpllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1VURjhBbmRTaXpllGoNjwAAdJSMFlB5VW5pY29kZV9Bc1VURjhTdHJpbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVVRGOFN0cmluZ5RqDY8AAHSUjBNQeVVuaWNvZGVfQXNVbmljb2RllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1VuaWNvZGWUag2PAAB0lIwaUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemWUag2PAAB0lIwXUHlVbmljb2RlX0FzVW5pY29kZUNvcHmUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0FzVW5pY29kZUNvcHmUag2PAAB0lIwfUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZ5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nlGoNjwAAdJSMFFB5VW5pY29kZV9Bc1dpZGVDaGFylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1dpZGVDaGFylGoNjwAAdJSMGlB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nlGoNjwAAdJSMD1B5VW5pY29kZV9DaGVja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQ2hlY2uUag2PAAB0lIwUUHlVbmljb2RlX0NoZWNrRXhhY3SUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0NoZWNrRXhhY3SUag2PAAB0lIwXUHlVbmljb2RlX0NsZWFyRnJlZUxpc3SUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0NsZWFyRnJlZUxpc3SUag2PAAB0lIwRUHlVbmljb2RlX0NvbXBhcmWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0NvbXBhcmWUag2PAAB0lIwgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmeUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmeUag2PAAB0lIwQUHlVbmljb2RlX0NvbmNhdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQ29uY2F0lGoNjwAAdJSMElB5VW5pY29kZV9Db250YWluc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfQ29udGFpbnOUag2PAAB0lIwYUHlVbmljb2RlX0NvcHlDaGFyYWN0ZXJzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Db3B5Q2hhcmFjdGVyc5RqDY8AAHSUjA9QeVVuaWNvZGVfQ291bnSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0NvdW50lGoNjwAAdJSMDlB5VW5pY29kZV9EQVRBlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EQVRBlGoNjwAAdJSMEFB5VW5pY29kZV9EZWNvZGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZZRqDY8AAHSUjBVQeVVuaWNvZGVfRGVjb2RlQVNDSUmUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZUFTQ0lJlGoNjwAAdJSMF1B5VW5pY29kZV9EZWNvZGVDaGFybWFwlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVDaGFybWFwlGoNjwAAdJSMGVB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdJRqDY8AAHSUjCBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZZRqDY8AAHSUjBZQeVVuaWNvZGVfRGVjb2RlTGF0aW4xlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVMYXRpbjGUag2PAAB0lIwWUHlVbmljb2RlX0RlY29kZUxvY2FsZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlTG9jYWxllGoNjwAAdJSMHVB5VW5pY29kZV9EZWNvZGVMb2NhbGVBbmRTaXpllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVMb2NhbGVBbmRTaXpllGoNjwAAdJSMFFB5VW5pY29kZV9EZWNvZGVNQkNTlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVNQkNTlGoNjwAAdJSMHFB5VW5pY29kZV9EZWNvZGVNQkNTU3RhdGVmdWyUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZU1CQ1NTdGF0ZWZ1bJRqDY8AAHSUjCBQeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZZRqDY8AAHSUjBVQeVVuaWNvZGVfRGVjb2RlVVRGMTaUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVURjE2lGoNjwAAdJSMHVB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVslChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVslGoNjwAAdJSMFVB5VW5pY29kZV9EZWNvZGVVVEYzMpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVVRGMzKUag2PAAB0lIwdUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWyUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWyUag2PAAB0lIwUUHlVbmljb2RlX0RlY29kZVVURjeUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVURjeUag2PAAB0lIwcUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVslGoNjwAAdJSMFFB5VW5pY29kZV9EZWNvZGVVVEY4lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9EZWNvZGVVVEY4lGoNjwAAdJSMHFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWyUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bJRqDY8AAHSUjB1QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZZRqDY8AAHSUjBBQeVVuaWNvZGVfRW5jb2RllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9FbmNvZGWUag2PAAB0lIwVUHlVbmljb2RlX0VuY29kZUFTQ0lJlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9FbmNvZGVBU0NJSZRqDY8AAHSUjBdQeVVuaWNvZGVfRW5jb2RlQ2hhcm1hcJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlQ2hhcm1hcJRqDY8AAHSUjBhQeVVuaWNvZGVfRW5jb2RlQ29kZVBhZ2WUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZUNvZGVQYWdllGoNjwAAdJSMGVB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdJRqDY8AAHSUjBZQeVVuaWNvZGVfRW5jb2RlTGF0aW4xlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9FbmNvZGVMYXRpbjGUag2PAAB0lIwWUHlVbmljb2RlX0VuY29kZUxvY2FsZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlTG9jYWxllGoNjwAAdJSMFFB5VW5pY29kZV9FbmNvZGVNQkNTlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9FbmNvZGVNQkNTlGoNjwAAdJSMIFB5VW5pY29kZV9FbmNvZGVSYXdVbmljb2RlRXNjYXBllChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9FbmNvZGVSYXdVbmljb2RlRXNjYXBllGoNjwAAdJSMFVB5VW5pY29kZV9FbmNvZGVVVEYxNpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVVRGMTaUag2PAAB0lIwVUHlVbmljb2RlX0VuY29kZVVURjMylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9FbmNvZGVVVEYzMpRqDY8AAHSUjBRQeVVuaWNvZGVfRW5jb2RlVVRGN5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVVRGN5RqDY8AAHSUjBRQeVVuaWNvZGVfRW5jb2RlVVRGOJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVVRGOJRqDY8AAHSUjB1QeVVuaWNvZGVfRW5jb2RlVW5pY29kZUVzY2FwZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRW5jb2RlVW5pY29kZUVzY2FwZZRqDY8AAHSUjBVQeVVuaWNvZGVfRlNDb252ZXJ0ZXKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0ZTQ29udmVydGVylGoNjwAAdJSME1B5VW5pY29kZV9GU0RlY29kZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0ZTRGVjb2RlcpRqDY8AAHSUjA5QeVVuaWNvZGVfRmlsbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRmlsbJRqDY8AAHSUjA5QeVVuaWNvZGVfRmluZJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRmluZJRqDY8AAHSUjBJQeVVuaWNvZGVfRmluZENoYXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0ZpbmRDaGFylGoNjwAAdJSMEFB5VW5pY29kZV9Gb3JtYXSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zvcm1hdJRqDY8AAHSUjBtQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3SUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0lGoNjwAAdJSMFFB5VW5pY29kZV9Gcm9tRm9ybWF0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gcm9tRm9ybWF0lGoNjwAAdJSMFVB5VW5pY29kZV9Gcm9tRm9ybWF0VpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRnJvbUZvcm1hdFaUag2PAAB0lIwZUHlVbmljb2RlX0Zyb21LaW5kQW5kRGF0YZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRnJvbUtpbmRBbmREYXRhlGoNjwAAdJSMFFB5VW5pY29kZV9Gcm9tT2JqZWN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gcm9tT2JqZWN0lGoNjwAAdJSMFFB5VW5pY29kZV9Gcm9tU3RyaW5nlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gcm9tU3RyaW5nlGoNjwAAdJSMG1B5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemWUag2PAAB0lIwVUHlVbmljb2RlX0Zyb21Vbmljb2RllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gcm9tVW5pY29kZZRqDY8AAHSUjBZQeVVuaWNvZGVfRnJvbVdpZGVDaGFylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9Gcm9tV2lkZUNoYXKUag2PAAB0lIwXUHlVbmljb2RlX0dFVF9EQVRBX1NJWkWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0dFVF9EQVRBX1NJWkWUag2PAAB0lIwUUHlVbmljb2RlX0dFVF9MRU5HVEiUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0dFVF9MRU5HVEiUag2PAAB0lIwSUHlVbmljb2RlX0dFVF9TSVpFlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9HRVRfU0laRZRqDY8AAHSUjBNQeVVuaWNvZGVfR2V0TGVuZ3RolChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9HZXRMZW5ndGiUag2PAAB0lIwRUHlVbmljb2RlX0dldFNpemWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0dldFNpemWUag2PAAB0lIwaUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmeUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmeUag2PAAB0lIwXUHlVbmljb2RlX0ludGVybkluUGxhY2WUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0ludGVybkluUGxhY2WUag2PAAB0lIwOUHlVbmljb2RlX0pvaW6UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0pvaW6Uag2PAAB0lIwOUHlVbmljb2RlX0tJTkSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX0tJTkSUag2PAAB0lIwYUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRZRqDY8AAHSUjA1QeVVuaWNvZGVfTmV3lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9OZXeUag2PAAB0lIwOUHlVbmljb2RlX1JFQUSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1JFQUSUag2PAAB0lIwPUHlVbmljb2RlX1JFQURZlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9SRUFEWZRqDY8AAHSUjBNQeVVuaWNvZGVfUkVBRF9DSEFSlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9SRUFEX0NIQVKUag2PAAB0lIwSUHlVbmljb2RlX1JlYWRDaGFylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5VW5pY29kZV9SZWFkQ2hhcpRqDY8AAHSUjBFQeVVuaWNvZGVfUmVwbGFjZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfUmVwbGFjZZRqDY8AAHSUjBVQeVVuaWNvZGVfUmljaENvbXBhcmWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1JpY2hDb21wYXJllGoNjwAAdJSMD1B5VW5pY29kZV9TcGxpdJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfU3BsaXSUag2PAAB0lIwUUHlVbmljb2RlX1NwbGl0bGluZXOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1NwbGl0bGluZXOUag2PAAB0lIwTUHlVbmljb2RlX1N1YnN0cmluZ5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfU3Vic3RyaW5nlGoNjwAAdJSME1B5VW5pY29kZV9UYWlsbWF0Y2iUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1RhaWxtYXRjaJRqDY8AAHSUjCFQeVVuaWNvZGVfVHJhbnNmb3JtRGVjaW1hbFRvQVNDSUmUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1RyYW5zZm9ybURlY2ltYWxUb0FTQ0lJlGoNjwAAdJSME1B5VW5pY29kZV9UcmFuc2xhdGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1RyYW5zbGF0ZZRqDY8AAHSUjBpQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcJRqDY8AAHSUjA9QeVVuaWNvZGVfV1JJVEWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1dSSVRFlGoNjwAAdJSME1B5VW5pY29kZV9Xcml0ZUNoYXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1dyaXRlQ2hhcpRqDY8AAHSUjBFQeVZlY3RvcmNhbGxfQ2FsbJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVZlY3RvcmNhbGxfQ2FsbJRqDY8AAHSUjBJQeVZlY3RvcmNhbGxfTkFSR1OUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqZWN0Lmh0bWwjYy5QeVZlY3RvcmNhbGxfTkFSR1OUag2PAAB0lIwPUHlXZWFrcmVmX0NoZWNrlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3dlYWtyZWYuaHRtbCNjLlB5V2Vha3JlZl9DaGVja5RqDY8AAHSUjBRQeVdlYWtyZWZfQ2hlY2tQcm94eZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS93ZWFrcmVmLmh0bWwjYy5QeVdlYWtyZWZfQ2hlY2tQcm94eZRqDY8AAHSUjBJQeVdlYWtyZWZfQ2hlY2tSZWaUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX0NoZWNrUmVmlGoNjwAAdJSMFFB5V2Vha3JlZl9HRVRfT0JKRUNUlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3dlYWtyZWYuaHRtbCNjLlB5V2Vha3JlZl9HRVRfT0JKRUNUlJUpAAEAAAAAAGoNjwAAdJSME1B5V2Vha3JlZl9HZXRPYmplY3SUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX0dldE9iamVjdJRqDY8AAHSUjBJQeVdlYWtyZWZfTmV3UHJveHmUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX05ld1Byb3h5lGoNjwAAdJSMEFB5V2Vha3JlZl9OZXdSZWaUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvd2Vha3JlZi5odG1sI2MuUHlXZWFrcmVmX05ld1JlZpRqDY8AAHSUjBdQeVdpZGVTdHJpbmdMaXN0X0FwcGVuZJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlXaWRlU3RyaW5nTGlzdF9BcHBlbmSUag2PAAB0lIwXUHlXaWRlU3RyaW5nTGlzdF9JbnNlcnSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5V2lkZVN0cmluZ0xpc3RfSW5zZXJ0lGoNjwAAdJSMDVB5V3JhcHBlcl9OZXeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGVzY3JpcHRvci5odG1sI2MuUHlXcmFwcGVyX05ld5RqDY8AAHSUjBFQeV9BZGRQZW5kaW5nQ2FsbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9BZGRQZW5kaW5nQ2FsbJRqDY8AAHSUjAlQeV9BdEV4aXSUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeV9BdEV4aXSUag2PAAB0lIwNUHlfQnVpbGRWYWx1ZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9hcmcuaHRtbCNjLlB5X0J1aWxkVmFsdWWUag2PAAB0lIwMUHlfQnl0ZXNNYWlulChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeV9CeXRlc01haW6Uag2PAAB0lIwIUHlfQ0xFQVKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvcmVmY291bnRpbmcuaHRtbCNjLlB5X0NMRUFSlGoNjwAAdJSMEFB5X0NvbXBpbGVTdHJpbmeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5X0NvbXBpbGVTdHJpbmeUag2PAAB0lIwXUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3OUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzlGoNjwAAdJSMFVB5X0NvbXBpbGVTdHJpbmdGbGFnc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlfQ29tcGlsZVN0cmluZ0ZsYWdzlGoNjwAAdJSMFlB5X0NvbXBpbGVTdHJpbmdPYmplY3SUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5X0NvbXBpbGVTdHJpbmdPYmplY3SUag2PAAB0lIwJUHlfREVDUkVGlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3JlZmNvdW50aW5nLmh0bWwjYy5QeV9ERUNSRUaUag2PAAB0lIwPUHlfRGVjb2RlTG9jYWxllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlfRGVjb2RlTG9jYWxllGoNjwAAdJSMD1B5X0VuY29kZUxvY2FsZZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zeXMuaHRtbCNjLlB5X0VuY29kZUxvY2FsZZRqDY8AAHSUjBFQeV9FbmRJbnRlcnByZXRlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9FbmRJbnRlcnByZXRlcpRqDY8AAHSUjBVQeV9FbnRlclJlY3Vyc2l2ZUNhbGyUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI2MuUHlfRW50ZXJSZWN1cnNpdmVDYWxslGoNjwAAdJSMB1B5X0V4aXSUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjYy5QeV9FeGl0lGoNjwAAdJSMFlB5X0V4aXRTdGF0dXNFeGNlcHRpb26UKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5X0V4aXRTdGF0dXNFeGNlcHRpb26Uag2PAAB0lIwNUHlfRmF0YWxFcnJvcpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zeXMuaHRtbCNjLlB5X0ZhdGFsRXJyb3KUag2PAAB0lIwSUHlfRmRJc0ludGVyYWN0aXZllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1sI2MuUHlfRmRJc0ludGVyYWN0aXZllGoNjwAAdJSMC1B5X0ZpbmFsaXpllChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X0ZpbmFsaXpllGoNjwAAdJSMDVB5X0ZpbmFsaXplRXiUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfRmluYWxpemVFeJRqDY8AAHSUjA9QeV9HZXRCdWlsZEluZm+UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0QnVpbGRJbmZvlGoNjwAAdJSMDlB5X0dldENvbXBpbGVylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X0dldENvbXBpbGVylGoNjwAAdJSMD1B5X0dldENvcHlyaWdodJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRDb3B5cmlnaHSUag2PAAB0lIwQUHlfR2V0RXhlY1ByZWZpeJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRFeGVjUHJlZml4lGoNjwAAdJSMClB5X0dldFBhdGiUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UGF0aJRqDY8AAHSUjA5QeV9HZXRQbGF0Zm9ybZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRQbGF0Zm9ybZRqDY8AAHSUjAxQeV9HZXRQcmVmaXiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UHJlZml4lGoNjwAAdJSMFVB5X0dldFByb2dyYW1GdWxsUGF0aJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRQcm9ncmFtRnVsbFBhdGiUag2PAAB0lIwRUHlfR2V0UHJvZ3JhbU5hbWWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0UHJvZ3JhbU5hbWWUag2PAAB0lIwQUHlfR2V0UHl0aG9uSG9tZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9HZXRQeXRob25Ib21llGoNjwAAdJSMDVB5X0dldFZlcnNpb26UKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfR2V0VmVyc2lvbpRqDY8AAHSUjAlQeV9JTkNSRUaUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvcmVmY291bnRpbmcuaHRtbCNjLlB5X0lOQ1JFRpRqDY8AAHSUjA1QeV9Jbml0aWFsaXpllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X0luaXRpYWxpemWUag2PAAB0lIwPUHlfSW5pdGlhbGl6ZUV4lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X0luaXRpYWxpemVFeJRqDY8AAHSUjBdQeV9Jbml0aWFsaXplRnJvbUNvbmZpZ5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlfSW5pdGlhbGl6ZUZyb21Db25maWeUag2PAAB0lIwQUHlfSXNJbml0aWFsaXplZJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9Jc0luaXRpYWxpemVklGoNjwAAdJSMFVB5X0xlYXZlUmVjdXJzaXZlQ2FsbJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeV9MZWF2ZVJlY3Vyc2l2ZUNhbGyUag2PAAB0lIwHUHlfTWFpbpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS92ZXJ5aGlnaC5odG1sI2MuUHlfTWFpbpRqDY8AAHSUjBFQeV9OZXdJbnRlcnByZXRlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9OZXdJbnRlcnByZXRlcpRqDY8AAHSUjBBQeV9QcmVJbml0aWFsaXpllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeV9QcmVJbml0aWFsaXpllGoNjwAAdJSMGFB5X1ByZUluaXRpYWxpemVGcm9tQXJnc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlfUHJlSW5pdGlhbGl6ZUZyb21BcmdzlGoNjwAAdJSMHVB5X1ByZUluaXRpYWxpemVGcm9tQnl0ZXNBcmdzlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeV9QcmVJbml0aWFsaXplRnJvbUJ5dGVzQXJnc5RqDY8AAHSUjBVQeV9SRVRVUk5fUklDSENPTVBBUkWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlfUkVUVVJOX1JJQ0hDT01QQVJFlGoNjwAAdJSMDFB5X1JlcHJFbnRlcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjYy5QeV9SZXByRW50ZXKUag2PAAB0lIwMUHlfUmVwckxlYXZllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNjLlB5X1JlcHJMZWF2ZZRqDY8AAHSUjApQeV9SdW5NYWlulChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeV9SdW5NYWlulGoNjwAAdJSMClB5X1NldFBhdGiUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfU2V0UGF0aJRqDY8AAHSUjBFQeV9TZXRQcm9ncmFtTmFtZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9TZXRQcm9ncmFtTmFtZZRqDY8AAHSUjBBQeV9TZXRQeXRob25Ib21llChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X1NldFB5dGhvbkhvbWWUag2PAAB0lIwcUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZ5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nlGoNjwAAdJSMElB5X1VOSUNPREVfSVNBTE5VTZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTQUxOVU2Uag2PAAB0lIwSUHlfVU5JQ09ERV9JU0FMUEhBlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNBTFBIQZRqDY8AAHSUjBRQeV9VTklDT0RFX0lTREVDSU1BTJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTREVDSU1BTJRqDY8AAHSUjBJQeV9VTklDT0RFX0lTRElHSVSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU0RJR0lUlGoNjwAAdJSMFlB5X1VOSUNPREVfSVNMSU5FQlJFQUuUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU0xJTkVCUkVBS5RqDY8AAHSUjBJQeV9VTklDT0RFX0lTTE9XRVKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU0xPV0VSlGoNjwAAdJSMFFB5X1VOSUNPREVfSVNOVU1FUklDlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNOVU1FUklDlGoNjwAAdJSMFlB5X1VOSUNPREVfSVNQUklOVEFCTEWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU1BSSU5UQUJMRZRqDY8AAHSUjBJQeV9VTklDT0RFX0lTU1BBQ0WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9JU1NQQUNFlGoNjwAAdJSMElB5X1VOSUNPREVfSVNUSVRMRZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTVElUTEWUag2PAAB0lIwSUHlfVU5JQ09ERV9JU1VQUEVSlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNVUFBFUpRqDY8AAHSUjBRQeV9VTklDT0RFX1RPREVDSU1BTJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX1RPREVDSU1BTJRqDY8AAHSUjBJQeV9VTklDT0RFX1RPRElHSVSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9UT0RJR0lUlGoNjwAAdJSMElB5X1VOSUNPREVfVE9MT1dFUpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX1RPTE9XRVKUag2PAAB0lIwUUHlfVU5JQ09ERV9UT05VTUVSSUOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9UT05VTUVSSUOUag2PAAB0lIwSUHlfVU5JQ09ERV9UT1RJVExFlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfVE9USVRMRZRqDY8AAHSUjBJQeV9VTklDT0RFX1RPVVBQRVKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlfVU5JQ09ERV9UT1VQUEVSlGoNjwAAdJSMCFB5X1ZJU0lUlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2djc3VwcG9ydC5odG1sI2MuUHlfVklTSVSUag2PAAB0lIwPUHlfVmFCdWlsZFZhbHVllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FyZy5odG1sI2MuUHlfVmFCdWlsZFZhbHVllGoNjwAAdJSMClB5X1hERUNSRUaUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvcmVmY291bnRpbmcuaHRtbCNjLlB5X1hERUNSRUaUag2PAAB0lIwKUHlfWElOQ1JFRpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9yZWZjb3VudGluZy5odG1sI2MuUHlfWElOQ1JFRpRqDY8AAHSUjA9fUHlCeXRlc19SZXNpemWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZXMuaHRtbCNjLl9QeUJ5dGVzX1Jlc2l6ZZRqDY8AAHSUjA5fUHlJbXBvcnRfRmluaZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbXBvcnQuaHRtbCNjLl9QeUltcG9ydF9GaW5plGoNjwAAdJSMDl9QeUltcG9ydF9Jbml0lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ltcG9ydC5odG1sI2MuX1B5SW1wb3J0X0luaXSUag2PAAB0lIwWX1B5T2JqZWN0X0Zhc3RDYWxsRGljdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLl9QeU9iamVjdF9GYXN0Q2FsbERpY3SUag2PAAB0lIwNX1B5T2JqZWN0X05ld5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9hbGxvY2F0aW9uLmh0bWwjYy5fUHlPYmplY3RfTmV3lGoNjwAAdJSMEF9QeU9iamVjdF9OZXdWYXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYWxsb2NhdGlvbi5odG1sI2MuX1B5T2JqZWN0X05ld1ZhcpRqDY8AAHSUjBRfUHlPYmplY3RfVmVjdG9yY2FsbJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNjLl9QeU9iamVjdF9WZWN0b3JjYWxslGoNjwAAdJSMD19QeVR1cGxlX1Jlc2l6ZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90dXBsZS5odG1sI2MuX1B5VHVwbGVfUmVzaXpllGoNjwAAdJSMEl9QeV9Jbml0aWFsaXplTWFpbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuX1B5X0luaXRpYWxpemVNYWlulGoNjwAAdJSMCl9QeV9jX2RpZmaUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29tcGxleC5odG1sI2MuX1B5X2NfZGlmZpRqDY8AAHSUjAlfUHlfY19uZWeUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29tcGxleC5odG1sI2MuX1B5X2NfbmVnlGoNjwAAdJSMCV9QeV9jX3Bvd5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb21wbGV4Lmh0bWwjYy5fUHlfY19wb3eUag2PAAB0lIwKX1B5X2NfcHJvZJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb21wbGV4Lmh0bWwjYy5fUHlfY19wcm9klGoNjwAAdJSMCl9QeV9jX3F1b3SUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29tcGxleC5odG1sI2MuX1B5X2NfcXVvdJRqDY8AAHSUjAlfUHlfY19zdW2UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29tcGxleC5odG1sI2MuX1B5X2Nfc3VtlGoNjwAAdJSMBWF1ZGl0lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2luc3RydW1lbnRhdGlvbi5odG1sI2MuYXVkaXSUag2PAAB0lIwNY3JlYXRlX21vZHVsZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLmNyZWF0ZV9tb2R1bGWUag2PAAB0lIwLZXhlY19tb2R1bGWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5leGVjX21vZHVsZZRqDY8AAHSUjA9mdW5jdGlvbl9fZW50cnmUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vaW5zdHJ1bWVudGF0aW9uLmh0bWwjYy5mdW5jdGlvbl9fZW50cnmUag2PAAB0lIwQZnVuY3Rpb25fX3JldHVybpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9pbnN0cnVtZW50YXRpb24uaHRtbCNjLmZ1bmN0aW9uX19yZXR1cm6Uag2PAAB0lIwIZ2NfX2RvbmWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vaW5zdHJ1bWVudGF0aW9uLmh0bWwjYy5nY19fZG9uZZRqDY8AAHSUjAlnY19fc3RhcnSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vaW5zdHJ1bWVudGF0aW9uLmh0bWwjYy5nY19fc3RhcnSUag2PAAB0lIwYaW1wb3J0X19maW5kX19sb2FkX19kb25llChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2luc3RydW1lbnRhdGlvbi5odG1sI2MuaW1wb3J0X19maW5kX19sb2FkX19kb25llGoNjwAAdJSMGWltcG9ydF9fZmluZF9fbG9hZF9fc3RhcnSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vaW5zdHJ1bWVudGF0aW9uLmh0bWwjYy5pbXBvcnRfX2ZpbmRfX2xvYWRfX3N0YXJ0lGoNjwAAdJSMBGxpbmWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vaW5zdHJ1bWVudGF0aW9uLmh0bWwjYy5saW5llGoNjwAAdJSMFXB5dGhvbi5mdW5jdGlvbi5lbnRyeZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9pbnN0cnVtZW50YXRpb24uaHRtbCNjLnB5dGhvbi5mdW5jdGlvbi5lbnRyeZRqDY8AAHSUjBZweXRob24uZnVuY3Rpb24ucmV0dXJulChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2luc3RydW1lbnRhdGlvbi5odG1sI2MucHl0aG9uLmZ1bmN0aW9uLnJldHVybpRqDY8AAHSUdYwIYzptZW1iZXKUfZQojBdQeUFzeW5jTWV0aG9kcy5hbV9haXRlcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeUFzeW5jTWV0aG9kcy5hbV9haXRlcpRqDY8AAHSUjBdQeUFzeW5jTWV0aG9kcy5hbV9hbmV4dJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeUFzeW5jTWV0aG9kcy5hbV9hbmV4dJRqDY8AAHSUjBdQeUFzeW5jTWV0aG9kcy5hbV9hd2FpdJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeUFzeW5jTWV0aG9kcy5hbV9hd2FpdJRqDY8AAHSUjBpQeUJ1ZmZlclByb2NzLmJmX2dldGJ1ZmZlcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeUJ1ZmZlclByb2NzLmJmX2dldGJ1ZmZlcpRqDY8AAHSUjB5QeUJ1ZmZlclByb2NzLmJmX3JlbGVhc2VidWZmZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlCdWZmZXJQcm9jcy5iZl9yZWxlYXNlYnVmZmVylGoNjwAAdJSMIlB5Q29tcGlsZXJGbGFncy5jZl9mZWF0dXJlX3ZlcnNpb26UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCNjLlB5Q29tcGlsZXJGbGFncy5jZl9mZWF0dXJlX3ZlcnNpb26Uag2PAAB0lIwYUHlDb21waWxlckZsYWdzLmNmX2ZsYWdzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3ZlcnloaWdoLmh0bWwjYy5QeUNvbXBpbGVyRmxhZ3MuY2ZfZmxhZ3OUag2PAAB0lIwNUHlDb25maWcuYXJndpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuYXJndpRqDY8AAHSUjBlQeUNvbmZpZy5iYXNlX2V4ZWNfcHJlZml4lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5iYXNlX2V4ZWNfcHJlZml4lGoNjwAAdJSMGFB5Q29uZmlnLmJhc2VfZXhlY3V0YWJsZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuYmFzZV9leGVjdXRhYmxllGoNjwAAdJSMFFB5Q29uZmlnLmJhc2VfcHJlZml4lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5iYXNlX3ByZWZpeJRqDY8AAHSUjBdQeUNvbmZpZy5idWZmZXJlZF9zdGRpb5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuYnVmZmVyZWRfc3RkaW+Uag2PAAB0lIwWUHlDb25maWcuYnl0ZXNfd2FybmluZ5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuYnl0ZXNfd2FybmluZ5RqDY8AAHSUjB1QeUNvbmZpZy5jaGVja19oYXNoX3B5Y3NfbW9kZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuY2hlY2tfaGFzaF9weWNzX21vZGWUag2PAAB0lIwaUHlDb25maWcuY29uZmlndXJlX2Nfc3RkaW+UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLmNvbmZpZ3VyZV9jX3N0ZGlvlGoNjwAAdJSMEVB5Q29uZmlnLmRldl9tb2RllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5kZXZfbW9kZZRqDY8AAHSUjBJQeUNvbmZpZy5kdW1wX3JlZnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLmR1bXBfcmVmc5RqDY8AAHSUjBRQeUNvbmZpZy5leGVjX3ByZWZpeJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuZXhlY19wcmVmaXiUag2PAAB0lIwTUHlDb25maWcuZXhlY3V0YWJsZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuZXhlY3V0YWJsZZRqDY8AAHSUjBVQeUNvbmZpZy5mYXVsdGhhbmRsZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLmZhdWx0aGFuZGxlcpRqDY8AAHSUjBxQeUNvbmZpZy5maWxlc3lzdGVtX2VuY29kaW5nlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5maWxlc3lzdGVtX2VuY29kaW5nlGoNjwAAdJSMGlB5Q29uZmlnLmZpbGVzeXN0ZW1fZXJyb3JzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5maWxlc3lzdGVtX2Vycm9yc5RqDY8AAHSUjBJQeUNvbmZpZy5oYXNoX3NlZWSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLmhhc2hfc2VlZJRqDY8AAHSUjA1QeUNvbmZpZy5ob21llChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5ob21llGoNjwAAdJSMFFB5Q29uZmlnLmltcG9ydF90aW1llChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5pbXBvcnRfdGltZZRqDY8AAHSUjBBQeUNvbmZpZy5pbnNwZWN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5pbnNwZWN0lGoNjwAAdJSMIFB5Q29uZmlnLmluc3RhbGxfc2lnbmFsX2hhbmRsZXJzlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5pbnN0YWxsX3NpZ25hbF9oYW5kbGVyc5RqDY8AAHSUjBRQeUNvbmZpZy5pbnRlcmFjdGl2ZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuaW50ZXJhY3RpdmWUag2PAAB0lIwRUHlDb25maWcuaXNvbGF0ZWSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLmlzb2xhdGVklGoNjwAAdJSMHVB5Q29uZmlnLmxlZ2FjeV93aW5kb3dzX3N0ZGlvlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5sZWdhY3lfd2luZG93c19zdGRpb5RqDY8AAHSUjBVQeUNvbmZpZy5tYWxsb2Nfc3RhdHOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLm1hbGxvY19zdGF0c5RqDY8AAHSUjBxQeUNvbmZpZy5tb2R1bGVfc2VhcmNoX3BhdGhzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5tb2R1bGVfc2VhcmNoX3BhdGhzlGoNjwAAdJSMIFB5Q29uZmlnLm1vZHVsZV9zZWFyY2hfcGF0aHNfc2V0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5tb2R1bGVfc2VhcmNoX3BhdGhzX3NldJRqDY8AAHSUjBtQeUNvbmZpZy5vcHRpbWl6YXRpb25fbGV2ZWyUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLm9wdGltaXphdGlvbl9sZXZlbJRqDY8AAHSUjBNQeUNvbmZpZy5wYXJzZV9hcmd2lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5wYXJzZV9hcmd2lGoNjwAAdJSMFVB5Q29uZmlnLnBhcnNlcl9kZWJ1Z5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcucGFyc2VyX2RlYnVnlGoNjwAAdJSMHFB5Q29uZmlnLnBhdGhjb25maWdfd2FybmluZ3OUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnBhdGhjb25maWdfd2FybmluZ3OUag2PAAB0lIwPUHlDb25maWcucHJlZml4lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5wcmVmaXiUag2PAAB0lIwVUHlDb25maWcucHJvZ3JhbV9uYW1llChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5wcm9ncmFtX25hbWWUag2PAAB0lIwXUHlDb25maWcucHljYWNoZV9wcmVmaXiUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnB5Y2FjaGVfcHJlZml4lGoNjwAAdJSMF1B5Q29uZmlnLnB5dGhvbnBhdGhfZW52lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy5weXRob25wYXRoX2VudpRqDY8AAHSUjA5QeUNvbmZpZy5xdWlldJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcucXVpZXSUag2PAAB0lIwUUHlDb25maWcucnVuX2NvbW1hbmSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnJ1bl9jb21tYW5klGoNjwAAdJSMFVB5Q29uZmlnLnJ1bl9maWxlbmFtZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcucnVuX2ZpbGVuYW1llGoNjwAAdJSME1B5Q29uZmlnLnJ1bl9tb2R1bGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnJ1bl9tb2R1bGWUag2PAAB0lIwZUHlDb25maWcuc2hvd19hbGxvY19jb3VudJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuc2hvd19hbGxvY19jb3VudJRqDY8AAHSUjBdQeUNvbmZpZy5zaG93X3JlZl9jb3VudJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuc2hvd19yZWZfY291bnSUag2PAAB0lIwUUHlDb25maWcuc2l0ZV9pbXBvcnSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnNpdGVfaW1wb3J0lGoNjwAAdJSMH1B5Q29uZmlnLnNraXBfc291cmNlX2ZpcnN0X2xpbmWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnNraXBfc291cmNlX2ZpcnN0X2xpbmWUag2PAAB0lIwXUHlDb25maWcuc3RkaW9fZW5jb2RpbmeUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnN0ZGlvX2VuY29kaW5nlGoNjwAAdJSMFVB5Q29uZmlnLnN0ZGlvX2Vycm9yc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcuc3RkaW9fZXJyb3JzlGoNjwAAdJSMFFB5Q29uZmlnLnRyYWNlbWFsbG9jlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy50cmFjZW1hbGxvY5RqDY8AAHSUjBhQeUNvbmZpZy51c2VfZW52aXJvbm1lbnSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnVzZV9lbnZpcm9ubWVudJRqDY8AAHSUjBZQeUNvbmZpZy51c2VfaGFzaF9zZWVklChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy51c2VfaGFzaF9zZWVklGoNjwAAdJSMHFB5Q29uZmlnLnVzZXJfc2l0ZV9kaXJlY3RvcnmUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLnVzZXJfc2l0ZV9kaXJlY3RvcnmUag2PAAB0lIwQUHlDb25maWcudmVyYm9zZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcudmVyYm9zZZRqDY8AAHSUjBRQeUNvbmZpZy53YXJub3B0aW9uc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlDb25maWcud2Fybm9wdGlvbnOUag2PAAB0lIwXUHlDb25maWcud3JpdGVfYnl0ZWNvZGWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5Q29uZmlnLndyaXRlX2J5dGVjb2RllGoNjwAAdJSMEVB5Q29uZmlnLnhvcHRpb25zlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeUNvbmZpZy54b3B0aW9uc5RqDY8AAHSUjCFQeU1hcHBpbmdNZXRob2RzLm1wX2Fzc19zdWJzY3JpcHSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlNYXBwaW5nTWV0aG9kcy5tcF9hc3Nfc3Vic2NyaXB0lGoNjwAAdJSMGlB5TWFwcGluZ01ldGhvZHMubXBfbGVuZ3RolChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TWFwcGluZ01ldGhvZHMubXBfbGVuZ3RolGoNjwAAdJSMHVB5TWFwcGluZ01ldGhvZHMubXBfc3Vic2NyaXB0lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TWFwcGluZ01ldGhvZHMubXBfc3Vic2NyaXB0lGoNjwAAdJSMElB5TW9kdWxlRGVmLm1fYmFzZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlRGVmLm1fYmFzZZRqDY8AAHSUjBNQeU1vZHVsZURlZi5tX2NsZWFylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVEZWYubV9jbGVhcpRqDY8AAHSUjBFQeU1vZHVsZURlZi5tX2RvY5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlRGVmLm1fZG9jlGoNjwAAdJSMElB5TW9kdWxlRGVmLm1fZnJlZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlRGVmLm1fZnJlZZRqDY8AAHSUjBVQeU1vZHVsZURlZi5tX21ldGhvZHOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZURlZi5tX21ldGhvZHOUag2PAAB0lIwSUHlNb2R1bGVEZWYubV9uYW1llChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVEZWYubV9uYW1llGoNjwAAdJSMFFB5TW9kdWxlRGVmLm1fcmVsb2FklChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVEZWYubV9yZWxvYWSUag2PAAB0lIwSUHlNb2R1bGVEZWYubV9zaXpllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVEZWYubV9zaXpllGoNjwAAdJSME1B5TW9kdWxlRGVmLm1fc2xvdHOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZURlZi5tX3Nsb3RzlGoNjwAAdJSMFlB5TW9kdWxlRGVmLm1fdHJhdmVyc2WUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjYy5QeU1vZHVsZURlZi5tX3RyYXZlcnNllGoNjwAAdJSMFVB5TW9kdWxlRGVmX1Nsb3Quc2xvdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNjLlB5TW9kdWxlRGVmX1Nsb3Quc2xvdJRqDY8AAHSUjBZQeU1vZHVsZURlZl9TbG90LnZhbHVllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21vZHVsZS5odG1sI2MuUHlNb2R1bGVEZWZfU2xvdC52YWx1ZZRqDY8AAHSUjBtQeU51bWJlck1ldGhvZHMubmJfYWJzb2x1dGWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX2Fic29sdXRllGoNjwAAdJSMFlB5TnVtYmVyTWV0aG9kcy5uYl9hZGSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX2FkZJRqDY8AAHSUjBZQeU51bWJlck1ldGhvZHMubmJfYW5klChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9hbmSUag2PAAB0lIwXUHlOdW1iZXJNZXRob2RzLm5iX2Jvb2yUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX2Jvb2yUag2PAAB0lIwZUHlOdW1iZXJNZXRob2RzLm5iX2Rpdm1vZJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfZGl2bW9klGoNjwAAdJSMGFB5TnVtYmVyTWV0aG9kcy5uYl9mbG9hdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfZmxvYXSUag2PAAB0lIwfUHlOdW1iZXJNZXRob2RzLm5iX2Zsb29yX2RpdmlkZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfZmxvb3JfZGl2aWRllGoNjwAAdJSMGFB5TnVtYmVyTWV0aG9kcy5uYl9pbmRleJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfaW5kZXiUag2PAAB0lIweUHlOdW1iZXJNZXRob2RzLm5iX2lucGxhY2VfYWRklChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX2FkZJRqDY8AAHSUjB5QeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV9hbmSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX2lucGxhY2VfYW5klGoNjwAAdJSMJ1B5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX2Zsb29yX2RpdmlkZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV9mbG9vcl9kaXZpZGWUag2PAAB0lIwhUHlOdW1iZXJNZXRob2RzLm5iX2lucGxhY2VfbHNoaWZ0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX2xzaGlmdJRqDY8AAHSUjCpQeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV9tYXRyaXhfbXVsdGlwbHmUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX2lucGxhY2VfbWF0cml4X211bHRpcGx5lGoNjwAAdJSMI1B5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX211bHRpcGx5lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX211bHRpcGx5lGoNjwAAdJSMHVB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX29ylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX29ylGoNjwAAdJSMIFB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX3Bvd2VylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX3Bvd2VylGoNjwAAdJSMJFB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX3JlbWFpbmRlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV9yZW1haW5kZXKUag2PAAB0lIwhUHlOdW1iZXJNZXRob2RzLm5iX2lucGxhY2VfcnNoaWZ0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9pbnBsYWNlX3JzaGlmdJRqDY8AAHSUjCNQeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV9zdWJ0cmFjdJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV9zdWJ0cmFjdJRqDY8AAHSUjCZQeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV90cnVlX2RpdmlkZZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV90cnVlX2RpdmlkZZRqDY8AAHSUjB5QeU51bWJlck1ldGhvZHMubmJfaW5wbGFjZV94b3KUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX2lucGxhY2VfeG9ylGoNjwAAdJSMFlB5TnVtYmVyTWV0aG9kcy5uYl9pbnSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX2ludJRqDY8AAHSUjBlQeU51bWJlck1ldGhvZHMubmJfaW52ZXJ0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9pbnZlcnSUag2PAAB0lIwZUHlOdW1iZXJNZXRob2RzLm5iX2xzaGlmdJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfbHNoaWZ0lGoNjwAAdJSMIlB5TnVtYmVyTWV0aG9kcy5uYl9tYXRyaXhfbXVsdGlwbHmUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX21hdHJpeF9tdWx0aXBseZRqDY8AAHSUjBtQeU51bWJlck1ldGhvZHMubmJfbXVsdGlwbHmUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX211bHRpcGx5lGoNjwAAdJSMG1B5TnVtYmVyTWV0aG9kcy5uYl9uZWdhdGl2ZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfbmVnYXRpdmWUag2PAAB0lIwVUHlOdW1iZXJNZXRob2RzLm5iX29ylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl9vcpRqDY8AAHSUjBtQeU51bWJlck1ldGhvZHMubmJfcG9zaXRpdmWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlOdW1iZXJNZXRob2RzLm5iX3Bvc2l0aXZllGoNjwAAdJSMGFB5TnVtYmVyTWV0aG9kcy5uYl9wb3dlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfcG93ZXKUag2PAAB0lIwcUHlOdW1iZXJNZXRob2RzLm5iX3JlbWFpbmRlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfcmVtYWluZGVylGoNjwAAdJSMG1B5TnVtYmVyTWV0aG9kcy5uYl9yZXNlcnZlZJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfcmVzZXJ2ZWSUag2PAAB0lIwZUHlOdW1iZXJNZXRob2RzLm5iX3JzaGlmdJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfcnNoaWZ0lGoNjwAAdJSMG1B5TnVtYmVyTWV0aG9kcy5uYl9zdWJ0cmFjdJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeU51bWJlck1ldGhvZHMubmJfc3VidHJhY3SUag2PAAB0lIweUHlOdW1iZXJNZXRob2RzLm5iX3RydWVfZGl2aWRllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl90cnVlX2RpdmlkZZRqDY8AAHSUjBZQeU51bWJlck1ldGhvZHMubmJfeG9ylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5TnVtYmVyTWV0aG9kcy5uYl94b3KUag2PAAB0lIwRUHlPYmplY3QuX29iX25leHSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlPYmplY3QuX29iX25leHSUag2PAAB0lIwRUHlPYmplY3QuX29iX3ByZXaUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlPYmplY3QuX29iX3ByZXaUag2PAAB0lIwSUHlPYmplY3Qub2JfcmVmY250lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5T2JqZWN0Lm9iX3JlZmNudJRqDY8AAHSUjBBQeU9iamVjdC5vYl90eXBllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5T2JqZWN0Lm9iX3R5cGWUag2PAAB0lIwVUHlQcmVDb25maWcuYWxsb2NhdG9ylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVByZUNvbmZpZy5hbGxvY2F0b3KUag2PAAB0lIwbUHlQcmVDb25maWcuY29lcmNlX2NfbG9jYWxllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVByZUNvbmZpZy5jb2VyY2VfY19sb2NhbGWUag2PAAB0lIwgUHlQcmVDb25maWcuY29lcmNlX2NfbG9jYWxlX3dhcm6UKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5UHJlQ29uZmlnLmNvZXJjZV9jX2xvY2FsZV93YXJulGoNjwAAdJSMHFB5UHJlQ29uZmlnLmNvbmZpZ3VyZV9sb2NhbGWUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5UHJlQ29uZmlnLmNvbmZpZ3VyZV9sb2NhbGWUag2PAAB0lIwUUHlQcmVDb25maWcuZGV2X21vZGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5UHJlQ29uZmlnLmRldl9tb2RllGoNjwAAdJSMFFB5UHJlQ29uZmlnLmlzb2xhdGVklChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjYy5QeVByZUNvbmZpZy5pc29sYXRlZJRqDY8AAHSUjCZQeVByZUNvbmZpZy5sZWdhY3lfd2luZG93c19mc19lbmNvZGluZ5QoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlQcmVDb25maWcubGVnYWN5X3dpbmRvd3NfZnNfZW5jb2RpbmeUag2PAAB0lIwWUHlQcmVDb25maWcucGFyc2VfYXJndpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlQcmVDb25maWcucGFyc2VfYXJndpRqDY8AAHSUjBtQeVByZUNvbmZpZy51c2VfZW52aXJvbm1lbnSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5UHJlQ29uZmlnLnVzZV9lbnZpcm9ubWVudJRqDY8AAHSUjBVQeVByZUNvbmZpZy51dGY4X21vZGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5UHJlQ29uZmlnLnV0ZjhfbW9kZZRqDY8AAHSUjB1QeVNlcXVlbmNlTWV0aG9kcy5zcV9hc3NfaXRlbZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVNlcXVlbmNlTWV0aG9kcy5zcV9hc3NfaXRlbZRqDY8AAHSUjBtQeVNlcXVlbmNlTWV0aG9kcy5zcV9jb25jYXSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlTZXF1ZW5jZU1ldGhvZHMuc3FfY29uY2F0lGoNjwAAdJSMHVB5U2VxdWVuY2VNZXRob2RzLnNxX2NvbnRhaW5zlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2NvbnRhaW5zlGoNjwAAdJSMI1B5U2VxdWVuY2VNZXRob2RzLnNxX2lucGxhY2VfY29uY2F0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2lucGxhY2VfY29uY2F0lGoNjwAAdJSMI1B5U2VxdWVuY2VNZXRob2RzLnNxX2lucGxhY2VfcmVwZWF0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5U2VxdWVuY2VNZXRob2RzLnNxX2lucGxhY2VfcmVwZWF0lGoNjwAAdJSMGVB5U2VxdWVuY2VNZXRob2RzLnNxX2l0ZW2UKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlTZXF1ZW5jZU1ldGhvZHMuc3FfaXRlbZRqDY8AAHSUjBtQeVNlcXVlbmNlTWV0aG9kcy5zcV9sZW5ndGiUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlTZXF1ZW5jZU1ldGhvZHMuc3FfbGVuZ3RolGoNjwAAdJSMG1B5U2VxdWVuY2VNZXRob2RzLnNxX3JlcGVhdJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVNlcXVlbmNlTWV0aG9kcy5zcV9yZXBlYXSUag2PAAB0lIwQUHlTdGF0dXMuZXJyX21zZ5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlTdGF0dXMuZXJyX21zZ5RqDY8AAHSUjBFQeVN0YXR1cy5leGl0Y29kZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlTdGF0dXMuZXhpdGNvZGWUag2PAAB0lIwNUHlTdGF0dXMuZnVuY5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2MuUHlTdGF0dXMuZnVuY5RqDY8AAHSUjBVQeVR5cGVPYmplY3QudHBfYWxsb2OUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2FsbG9jlGoNjwAAdJSMFlB5VHlwZU9iamVjdC50cF9hbGxvY3OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2FsbG9jc5RqDY8AAHSUjBhQeVR5cGVPYmplY3QudHBfYXNfYXN5bmOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2FzX2FzeW5jlGoNjwAAdJSMGVB5VHlwZU9iamVjdC50cF9hc19idWZmZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2FzX2J1ZmZlcpRqDY8AAHSUjBpQeVR5cGVPYmplY3QudHBfYXNfbWFwcGluZ5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfYXNfbWFwcGluZ5RqDY8AAHSUjBlQeVR5cGVPYmplY3QudHBfYXNfbnVtYmVylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9hc19udW1iZXKUag2PAAB0lIwbUHlUeXBlT2JqZWN0LnRwX2FzX3NlcXVlbmNllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9hc19zZXF1ZW5jZZRqDY8AAHSUjBRQeVR5cGVPYmplY3QudHBfYmFzZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfYmFzZZRqDY8AAHSUjBVQeVR5cGVPYmplY3QudHBfYmFzZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2Jhc2VzlGoNjwAAdJSMGVB5VHlwZU9iamVjdC50cF9iYXNpY3NpemWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2Jhc2ljc2l6ZZRqDY8AAHSUjBVQeVR5cGVPYmplY3QudHBfY2FjaGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2NhY2hllGoNjwAAdJSMFFB5VHlwZU9iamVjdC50cF9jYWxslChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9jYWxslGoNjwAAdJSMFVB5VHlwZU9iamVjdC50cF9jbGVhcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfY2xlYXKUag2PAAB0lIwXUHlUeXBlT2JqZWN0LnRwX2RlYWxsb2OUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2RlYWxsb2OUag2PAAB0lIwTUHlUeXBlT2JqZWN0LnRwX2RlbJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZGVslGoNjwAAdJSMGVB5VHlwZU9iamVjdC50cF9kZXNjcl9nZXSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2Rlc2NyX2dldJRqDY8AAHSUjBlQeVR5cGVPYmplY3QudHBfZGVzY3Jfc2V0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9kZXNjcl9zZXSUag2PAAB0lIwUUHlUeXBlT2JqZWN0LnRwX2RpY3SUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2RpY3SUag2PAAB0lIwaUHlUeXBlT2JqZWN0LnRwX2RpY3RvZmZzZXSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2RpY3RvZmZzZXSUag2PAAB0lIwTUHlUeXBlT2JqZWN0LnRwX2RvY5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZG9jlGoNjwAAdJSMGFB5VHlwZU9iamVjdC50cF9maW5hbGl6ZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZmluYWxpemWUag2PAAB0lIwVUHlUeXBlT2JqZWN0LnRwX2ZsYWdzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9mbGFnc5RqDY8AAHSUjBRQeVR5cGVPYmplY3QudHBfZnJlZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZnJlZZRqDY8AAHSUjBVQeVR5cGVPYmplY3QudHBfZnJlZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2ZyZWVzlGoNjwAAdJSMF1B5VHlwZU9iamVjdC50cF9nZXRhdHRylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9nZXRhdHRylGoNjwAAdJSMGFB5VHlwZU9iamVjdC50cF9nZXRhdHRyb5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZ2V0YXR0cm+Uag2PAAB0lIwWUHlUeXBlT2JqZWN0LnRwX2dldHNldJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfZ2V0c2V0lGoNjwAAdJSMFFB5VHlwZU9iamVjdC50cF9oYXNolChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9oYXNolGoNjwAAdJSMFFB5VHlwZU9iamVjdC50cF9pbml0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9pbml0lGoNjwAAdJSMFVB5VHlwZU9iamVjdC50cF9pc19nY5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfaXNfZ2OUag2PAAB0lIwYUHlUeXBlT2JqZWN0LnRwX2l0ZW1zaXpllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9pdGVtc2l6ZZRqDY8AAHSUjBRQeVR5cGVPYmplY3QudHBfaXRlcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfaXRlcpRqDY8AAHSUjBhQeVR5cGVPYmplY3QudHBfaXRlcm5leHSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX2l0ZXJuZXh0lGoNjwAAdJSMGFB5VHlwZU9iamVjdC50cF9tYXhhbGxvY5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfbWF4YWxsb2OUag2PAAB0lIwXUHlUeXBlT2JqZWN0LnRwX21lbWJlcnOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX21lbWJlcnOUag2PAAB0lIwXUHlUeXBlT2JqZWN0LnRwX21ldGhvZHOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX21ldGhvZHOUag2PAAB0lIwTUHlUeXBlT2JqZWN0LnRwX21yb5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfbXJvlGoNjwAAdJSMFFB5VHlwZU9iamVjdC50cF9uYW1llChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9uYW1llGoNjwAAdJSME1B5VHlwZU9iamVjdC50cF9uZXeUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX25ld5RqDY8AAHSUjBRQeVR5cGVPYmplY3QudHBfbmV4dJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfbmV4dJRqDY8AAHSUjBRQeVR5cGVPYmplY3QudHBfcHJldpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfcHJldpRqDY8AAHSUjBRQeVR5cGVPYmplY3QudHBfcmVwcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfcmVwcpRqDY8AAHSUjBtQeVR5cGVPYmplY3QudHBfcmljaGNvbXBhcmWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3JpY2hjb21wYXJllGoNjwAAdJSMF1B5VHlwZU9iamVjdC50cF9zZXRhdHRylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9zZXRhdHRylGoNjwAAdJSMGFB5VHlwZU9iamVjdC50cF9zZXRhdHRyb5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfc2V0YXR0cm+Uag2PAAB0lIwTUHlUeXBlT2JqZWN0LnRwX3N0cpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfc3RylGoNjwAAdJSMGlB5VHlwZU9iamVjdC50cF9zdWJjbGFzc2VzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF9zdWJjbGFzc2VzlGoNjwAAdJSMGFB5VHlwZU9iamVjdC50cF90cmF2ZXJzZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfdHJhdmVyc2WUag2PAAB0lIwhUHlUeXBlT2JqZWN0LnRwX3ZlY3RvcmNhbGxfb2Zmc2V0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF92ZWN0b3JjYWxsX29mZnNldJRqDY8AAHSUjBtQeVR5cGVPYmplY3QudHBfdmVyc2lvbl90YWeUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2MuUHlUeXBlT2JqZWN0LnRwX3ZlcnNpb25fdGFnlGoNjwAAdJSMGFB5VHlwZU9iamVjdC50cF93ZWFrbGlzdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVR5cGVPYmplY3QudHBfd2Vha2xpc3SUag2PAAB0lIweUHlUeXBlT2JqZWN0LnRwX3dlYWtsaXN0b2Zmc2V0lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNjLlB5VHlwZU9iamVjdC50cF93ZWFrbGlzdG9mZnNldJRqDY8AAHSUjB1QeVR5cGVfU2xvdC5QeVR5cGVfU2xvdC5wZnVuY5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfU2xvdC5QeVR5cGVfU2xvdC5wZnVuY5RqDY8AAHSUjBxQeVR5cGVfU2xvdC5QeVR5cGVfU2xvdC5zbG90lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9TbG90LlB5VHlwZV9TbG90LnNsb3SUag2PAAB0lIwhUHlUeXBlX1NwZWMuUHlUeXBlX1NwZWMuYmFzaWNzaXpllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9TcGVjLlB5VHlwZV9TcGVjLmJhc2ljc2l6ZZRqDY8AAHSUjB1QeVR5cGVfU3BlYy5QeVR5cGVfU3BlYy5mbGFnc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfU3BlYy5QeVR5cGVfU3BlYy5mbGFnc5RqDY8AAHSUjCBQeVR5cGVfU3BlYy5QeVR5cGVfU3BlYy5pdGVtc2l6ZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlLmh0bWwjYy5QeVR5cGVfU3BlYy5QeVR5cGVfU3BlYy5pdGVtc2l6ZZRqDY8AAHSUjBxQeVR5cGVfU3BlYy5QeVR5cGVfU3BlYy5uYW1llChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCNjLlB5VHlwZV9TcGVjLlB5VHlwZV9TcGVjLm5hbWWUag2PAAB0lIwdUHlUeXBlX1NwZWMuUHlUeXBlX1NwZWMuc2xvdHOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZS5odG1sI2MuUHlUeXBlX1NwZWMuUHlUeXBlX1NwZWMuc2xvdHOUag2PAAB0lIwTUHlWYXJPYmplY3Qub2Jfc2l6ZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjYy5QeVZhck9iamVjdC5vYl9zaXpllGoNjwAAdJSMFlB5V2lkZVN0cmluZ0xpc3QuaXRlbXOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5V2lkZVN0cmluZ0xpc3QuaXRlbXOUag2PAAB0lIwXUHlXaWRlU3RyaW5nTGlzdC5sZW5ndGiUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdF9jb25maWcuaHRtbCNjLlB5V2lkZVN0cmluZ0xpc3QubGVuZ3RolGoNjwAAdJSMDVB5X2J1ZmZlci5idWaUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIuYnVmlGoNjwAAdJSMEFB5X2J1ZmZlci5mb3JtYXSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIuZm9ybWF0lGoNjwAAdJSMElB5X2J1ZmZlci5pbnRlcm5hbJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5X2J1ZmZlci5pbnRlcm5hbJRqDY8AAHSUjBJQeV9idWZmZXIuaXRlbXNpemWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIuaXRlbXNpemWUag2PAAB0lIwNUHlfYnVmZmVyLmxlbpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5X2J1ZmZlci5sZW6Uag2PAAB0lIwOUHlfYnVmZmVyLm5kaW2UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIubmRpbZRqDY8AAHSUjA1QeV9idWZmZXIub2JqlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLm9iapRqDY8AAHSUjBJQeV9idWZmZXIucmVhZG9ubHmUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIucmVhZG9ubHmUag2PAAB0lIwPUHlfYnVmZmVyLnNoYXBllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLnNoYXBllGoNjwAAdJSMEVB5X2J1ZmZlci5zdHJpZGVzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlfYnVmZmVyLnN0cmlkZXOUag2PAAB0lIwUUHlfYnVmZmVyLnN1Ym9mZnNldHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeV9idWZmZXIuc3Vib2Zmc2V0c5RqDY8AAHSUdYwHYzptYWNyb5R9lCiMFFB5QlVGX0FOWV9DT05USUdVT1VTlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCVUZfQU5ZX0NPTlRJR1VPVVOUag2PAAB0lIwMUHlCVUZfQ09OVElHlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCVUZfQ09OVElHlGoNjwAAdJSMD1B5QlVGX0NPTlRJR19ST5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QlVGX0NPTlRJR19ST5RqDY8AAHSUjBJQeUJVRl9DX0NPTlRJR1VPVVOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJVRl9DX0NPTlRJR1VPVVOUag2PAAB0lIwMUHlCVUZfRk9STUFUlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCVUZfRk9STUFUlGoNjwAAdJSMClB5QlVGX0ZVTEyUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJVRl9GVUxMlGoNjwAAdJSMDVB5QlVGX0ZVTExfUk+UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJVRl9GVUxMX1JPlGoNjwAAdJSMElB5QlVGX0ZfQ09OVElHVU9VU5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QlVGX0ZfQ09OVElHVU9VU5RqDY8AAHSUjA5QeUJVRl9JTkRJUkVDVJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QlVGX0lORElSRUNUlGoNjwAAdJSMCFB5QlVGX05ElChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCVUZfTkSUag2PAAB0lIwNUHlCVUZfUkVDT1JEU5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QlVGX1JFQ09SRFOUag2PAAB0lIwQUHlCVUZfUkVDT1JEU19ST5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9idWZmZXIuaHRtbCNjLlB5QlVGX1JFQ09SRFNfUk+Uag2PAAB0lIwMUHlCVUZfU0lNUExFlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCVUZfU0lNUExFlGoNjwAAdJSMDVB5QlVGX1NUUklERUSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJVRl9TVFJJREVElGoNjwAAdJSMEFB5QlVGX1NUUklERURfUk+UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJVRl9TVFJJREVEX1JPlGoNjwAAdJSMDVB5QlVGX1NUUklERVOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYy5QeUJVRl9TVFJJREVTlGoNjwAAdJSMDlB5QlVGX1dSSVRBQkxFlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2MuUHlCVUZfV1JJVEFCTEWUag2PAAB0lIwNUHlPYmplY3RfSEVBRJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeU9iamVjdF9IRUFElGoNjwAAdJSMElB5T2JqZWN0X0hFQURfSU5JVJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjYy5QeU9iamVjdF9IRUFEX0lOSVSUag2PAAB0lIwRUHlPYmplY3RfVkFSX0hFQUSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlPYmplY3RfVkFSX0hFQUSUag2PAAB0lIwUUHlVbmljb2RlXzFCWVRFX0tJTkSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlXzFCWVRFX0tJTkSUag2PAAB0lIwUUHlVbmljb2RlXzJCWVRFX0tJTkSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlXzJCWVRFX0tJTkSUag2PAAB0lIwUUHlVbmljb2RlXzRCWVRFX0tJTkSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlXzRCWVRFX0tJTkSUag2PAAB0lIwUUHlVbmljb2RlX1dDSEFSX0tJTkSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1sI2MuUHlVbmljb2RlX1dDSEFSX0tJTkSUag2PAAB0lIwVUHlWYXJPYmplY3RfSEVBRF9JTklUlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5VmFyT2JqZWN0X0hFQURfSU5JVJRqDY8AAHSUjAZQeV9BQlOUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW50cm8uaHRtbCNjLlB5X0FCU5RqDY8AAHSUjBZQeV9CRUdJTl9BTExPV19USFJFQURTlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X0JFR0lOX0FMTE9XX1RIUkVBRFOUag2PAAB0lIwQUHlfQkxPQ0tfVEhSRUFEU5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYy5QeV9CTE9DS19USFJFQURTlGoNjwAAdJSMC1B5X0NIQVJNQVNLlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ludHJvLmh0bWwjYy5QeV9DSEFSTUFTS5RqDY8AAHSUjA1QeV9ERVBSRUNBVEVElChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ludHJvLmh0bWwjYy5QeV9ERVBSRUNBVEVElGoNjwAAdJSMFFB5X0VORF9BTExPV19USFJFQURTlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X0VORF9BTExPV19USFJFQURTlGoNjwAAdJSMCVB5X0dFVEVOVpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbnRyby5odG1sI2MuUHlfR0VURU5WlGoNjwAAdJSMBlB5X01BWJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbnRyby5odG1sI2MuUHlfTUFYlGoNjwAAdJSMDlB5X01FTUJFUl9TSVpFlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ludHJvLmh0bWwjYy5QeV9NRU1CRVJfU0laRZRqDY8AAHSUjAZQeV9NSU6UKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW50cm8uaHRtbCNjLlB5X01JTpRqDY8AAHSUjAlQeV9SRUZDTlSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlfUkVGQ05UlGoNjwAAdJSMD1B5X1JFVFVSTl9GQUxTRZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ib29sLmh0bWwjYy5QeV9SRVRVUk5fRkFMU0WUag2PAAB0lIwOUHlfUkVUVVJOX05PTkWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbm9uZS5odG1sI2MuUHlfUkVUVVJOX05PTkWUag2PAAB0lIwYUHlfUkVUVVJOX05PVElNUExFTUVOVEVElChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL29iamVjdC5odG1sI2MuUHlfUkVUVVJOX05PVElNUExFTUVOVEVElGoNjwAAdJSMDlB5X1JFVFVSTl9UUlVFlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Jvb2wuaHRtbCNjLlB5X1JFVFVSTl9UUlVFlGoNjwAAdJSMB1B5X1NJWkWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI2MuUHlfU0laRZRqDY8AAHSUjAxQeV9TVFJJTkdJRlmUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW50cm8uaHRtbCNjLlB5X1NUUklOR0lGWZRqDY8AAHSUjAdQeV9UWVBFlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjLlB5X1RZUEWUag2PAAB0lIwSUHlfVU5CTE9DS19USFJFQURTlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNjLlB5X1VOQkxPQ0tfVEhSRUFEU5RqDY8AAHSUjBxQeV9VTklDT0RFX0lTX0hJR0hfU1VSUk9HQVRFlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNfSElHSF9TVVJST0dBVEWUag2PAAB0lIwbUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNjLlB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURZRqDY8AAHSUjBdQeV9VTklDT0RFX0lTX1NVUlJPR0FURZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0lTX1NVUlJPR0FURZRqDY8AAHSUjBpQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFU5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91bmljb2RlLmh0bWwjYy5QeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFU5RqDY8AAHSUjA5QeV9VTlJFQUNIQUJMRZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbnRyby5odG1sI2MuUHlfVU5SRUFDSEFCTEWUag2PAAB0lIwJUHlfVU5VU0VElChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ludHJvLmh0bWwjYy5QeV9VTlVTRUSUag2PAAB0lIwRUHlfdHNzX05FRURTX0lOSVSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2MuUHlfdHNzX05FRURTX0lOSVSUag2PAAB0lHWMDHB5OmV4Y2VwdGlvbpR9lCiMD0FyaXRobWV0aWNFcnJvcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNBcml0aG1ldGljRXJyb3KUag2PAAB0lIwOQXNzZXJ0aW9uRXJyb3KUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQXNzZXJ0aW9uRXJyb3KUag2PAAB0lIwOQXR0cmlidXRlRXJyb3KUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQXR0cmlidXRlRXJyb3KUag2PAAB0lIwNQmFzZUV4Y2VwdGlvbpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNCYXNlRXhjZXB0aW9ulGoNjwAAdJSMD0Jsb2NraW5nSU9FcnJvcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNCbG9ja2luZ0lPRXJyb3KUag2PAAB0lIwPQnJva2VuUGlwZUVycm9ylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI0Jyb2tlblBpcGVFcnJvcpRqDY8AAHSUjAtCdWZmZXJFcnJvcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNCdWZmZXJFcnJvcpRqDY8AAHSUjAxCeXRlc1dhcm5pbmeUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQnl0ZXNXYXJuaW5nlGoNjwAAdJSMEUNoaWxkUHJvY2Vzc0Vycm9ylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI0NoaWxkUHJvY2Vzc0Vycm9ylGoNjwAAdJSMFkNvbm5lY3Rpb25BYm9ydGVkRXJyb3KUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQ29ubmVjdGlvbkFib3J0ZWRFcnJvcpRqDY8AAHSUjA9Db25uZWN0aW9uRXJyb3KUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQ29ubmVjdGlvbkVycm9ylGoNjwAAdJSMFkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3KUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQ29ubmVjdGlvblJlZnVzZWRFcnJvcpRqDY8AAHSUjBRDb25uZWN0aW9uUmVzZXRFcnJvcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNDb25uZWN0aW9uUmVzZXRFcnJvcpRqDY8AAHSUjBJEZXByZWNhdGlvbldhcm5pbmeUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjRGVwcmVjYXRpb25XYXJuaW5nlGoNjwAAdJSMCEVPRkVycm9ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI0VPRkVycm9ylGoNjwAAdJSMEEVudmlyb25tZW50RXJyb3KUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjRW52aXJvbm1lbnRFcnJvcpRqDY8AAHSUjAlFeGNlcHRpb26UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjRXhjZXB0aW9ulGoNjwAAdJSMD0ZpbGVFeGlzdHNFcnJvcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNGaWxlRXhpc3RzRXJyb3KUag2PAAB0lIwRRmlsZU5vdEZvdW5kRXJyb3KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjRmlsZU5vdEZvdW5kRXJyb3KUag2PAAB0lIwSRmxvYXRpbmdQb2ludEVycm9ylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI0Zsb2F0aW5nUG9pbnRFcnJvcpRqDY8AAHSUjA1GdXR1cmVXYXJuaW5nlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI0Z1dHVyZVdhcm5pbmeUag2PAAB0lIwNR2VuZXJhdG9yRXhpdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNHZW5lcmF0b3JFeGl0lGoNjwAAdJSMB0lPRXJyb3KUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjSU9FcnJvcpRqDY8AAHSUjAtJbXBvcnRFcnJvcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNJbXBvcnRFcnJvcpRqDY8AAHSUjA1JbXBvcnRXYXJuaW5nlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI0ltcG9ydFdhcm5pbmeUag2PAAB0lIwQSW5kZW50YXRpb25FcnJvcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNJbmRlbnRhdGlvbkVycm9ylGoNjwAAdJSMCkluZGV4RXJyb3KUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjSW5kZXhFcnJvcpRqDY8AAHSUjBBJbnRlcnJ1cHRlZEVycm9ylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI0ludGVycnVwdGVkRXJyb3KUag2PAAB0lIwRSXNBRGlyZWN0b3J5RXJyb3KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjSXNBRGlyZWN0b3J5RXJyb3KUag2PAAB0lIwIS2V5RXJyb3KUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjS2V5RXJyb3KUag2PAAB0lIwRS2V5Ym9hcmRJbnRlcnJ1cHSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjS2V5Ym9hcmRJbnRlcnJ1cHSUag2PAAB0lIwLTG9va3VwRXJyb3KUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjTG9va3VwRXJyb3KUag2PAAB0lIwLTWVtb3J5RXJyb3KUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjTWVtb3J5RXJyb3KUag2PAAB0lIwTTW9kdWxlTm90Rm91bmRFcnJvcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNNb2R1bGVOb3RGb3VuZEVycm9ylGoNjwAAdJSMCU5hbWVFcnJvcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNOYW1lRXJyb3KUag2PAAB0lIwSTm90QURpcmVjdG9yeUVycm9ylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI05vdEFEaXJlY3RvcnlFcnJvcpRqDY8AAHSUjBNOb3RJbXBsZW1lbnRlZEVycm9ylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI05vdEltcGxlbWVudGVkRXJyb3KUag2PAAB0lIwHT1NFcnJvcpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNPU0Vycm9ylGoNjwAAdJSMDU92ZXJmbG93RXJyb3KUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjT3ZlcmZsb3dFcnJvcpRqDY8AAHSUjBlQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmeUag2PAAB0lIwPUGVybWlzc2lvbkVycm9ylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1Blcm1pc3Npb25FcnJvcpRqDY8AAHSUjBJQcm9jZXNzTG9va3VwRXJyb3KUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjUHJvY2Vzc0xvb2t1cEVycm9ylGoNjwAAdJSMDlJlY3Vyc2lvbkVycm9ylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1JlY3Vyc2lvbkVycm9ylGoNjwAAdJSMDlJlZmVyZW5jZUVycm9ylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1JlZmVyZW5jZUVycm9ylGoNjwAAdJSMD1Jlc291cmNlV2FybmluZ5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNSZXNvdXJjZVdhcm5pbmeUag2PAAB0lIwMUnVudGltZUVycm9ylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1J1bnRpbWVFcnJvcpRqDY8AAHSUjA5SdW50aW1lV2FybmluZ5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNSdW50aW1lV2FybmluZ5RqDY8AAHSUjBJTdG9wQXN5bmNJdGVyYXRpb26UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjU3RvcEFzeW5jSXRlcmF0aW9ulGoNjwAAdJSMDVN0b3BJdGVyYXRpb26UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjU3RvcEl0ZXJhdGlvbpRqDY8AAHSUjAtTeW50YXhFcnJvcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNTeW50YXhFcnJvcpRqDY8AAHSUjA1TeW50YXhXYXJuaW5nlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1N5bnRheFdhcm5pbmeUag2PAAB0lIwLU3lzdGVtRXJyb3KUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjU3lzdGVtRXJyb3KUag2PAAB0lIwKU3lzdGVtRXhpdJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNTeXN0ZW1FeGl0lGoNjwAAdJSMCFRhYkVycm9ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1RhYkVycm9ylGoNjwAAdJSMDFRpbWVvdXRFcnJvcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNUaW1lb3V0RXJyb3KUag2PAAB0lIwJVHlwZUVycm9ylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1R5cGVFcnJvcpRqDY8AAHSUjBFVbmJvdW5kTG9jYWxFcnJvcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNVbmJvdW5kTG9jYWxFcnJvcpRqDY8AAHSUjBJVbmljb2RlRGVjb2RlRXJyb3KUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjVW5pY29kZURlY29kZUVycm9ylGoNjwAAdJSMElVuaWNvZGVFbmNvZGVFcnJvcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNVbmljb2RlRW5jb2RlRXJyb3KUag2PAAB0lIwMVW5pY29kZUVycm9ylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1VuaWNvZGVFcnJvcpRqDY8AAHSUjBVVbmljb2RlVHJhbnNsYXRlRXJyb3KUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjVW5pY29kZVRyYW5zbGF0ZUVycm9ylGoNjwAAdJSMDlVuaWNvZGVXYXJuaW5nlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1VuaWNvZGVXYXJuaW5nlGoNjwAAdJSMC1VzZXJXYXJuaW5nlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1VzZXJXYXJuaW5nlGoNjwAAdJSMClZhbHVlRXJyb3KUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjVmFsdWVFcnJvcpRqDY8AAHSUjAdXYXJuaW5nlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1dhcm5pbmeUag2PAAB0lIwMV2luZG93c0Vycm9ylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1dpbmRvd3NFcnJvcpRqDY8AAHSUjBFaZXJvRGl2aXNpb25FcnJvcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNaZXJvRGl2aXNpb25FcnJvcpRqDY8AAHSUjA1fdGhyZWFkLmVycm9ylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvX3RocmVhZC5odG1sI190aHJlYWQuZXJyb3KUag2PAAB0lIwWYXN5bmNpby5DYW5jZWxsZWRFcnJvcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXhjZXB0aW9ucy5odG1sI2FzeW5jaW8uQ2FuY2VsbGVkRXJyb3KUag2PAAB0lIwbYXN5bmNpby5JbmNvbXBsZXRlUmVhZEVycm9ylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1leGNlcHRpb25zLmh0bWwjYXN5bmNpby5JbmNvbXBsZXRlUmVhZEVycm9ylGoNjwAAdJSMGWFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3KUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV4Y2VwdGlvbnMuaHRtbCNhc3luY2lvLkludmFsaWRTdGF0ZUVycm9ylGoNjwAAdJSMGWFzeW5jaW8uTGltaXRPdmVycnVuRXJyb3KUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV4Y2VwdGlvbnMuaHRtbCNhc3luY2lvLkxpbWl0T3ZlcnJ1bkVycm9ylGoNjwAAdJSMEmFzeW5jaW8uUXVldWVFbXB0eZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcXVldWUuaHRtbCNhc3luY2lvLlF1ZXVlRW1wdHmUag2PAAB0lIwRYXN5bmNpby5RdWV1ZUZ1bGyUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXF1ZXVlLmh0bWwjYXN5bmNpby5RdWV1ZUZ1bGyUag2PAAB0lIwhYXN5bmNpby5TZW5kZmlsZU5vdEF2YWlsYWJsZUVycm9ylChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1leGNlcHRpb25zLmh0bWwjYXN5bmNpby5TZW5kZmlsZU5vdEF2YWlsYWJsZUVycm9ylGoNjwAAdJSMFGFzeW5jaW8uVGltZW91dEVycm9ylChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1leGNlcHRpb25zLmh0bWwjYXN5bmNpby5UaW1lb3V0RXJyb3KUag2PAAB0lIwNYXVkaW9vcC5lcnJvcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmVycm9ylGoNjwAAdJSMC2JkYi5CZGJRdWl0lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYlF1aXSUag2PAAB0lIwOYmluYXNjaWkuRXJyb3KUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLkVycm9ylGoNjwAAdJSME2JpbmFzY2lpLkluY29tcGxldGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLkluY29tcGxldGWUag2PAAB0lIwMYmluaGV4LkVycm9ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluaGV4Lmh0bWwjYmluaGV4LkVycm9ylGoNjwAAdJSMIWNvbmN1cnJlbnQuZnV0dXJlcy5Ccm9rZW5FeGVjdXRvcpQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5Ccm9rZW5FeGVjdXRvcpRqDY8AAHSUjCFjb25jdXJyZW50LmZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3KUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbCNjb25jdXJyZW50LmZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3KUag2PAAB0lIwkY29uY3VycmVudC5mdXR1cmVzLkludmFsaWRTdGF0ZUVycm9ylChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLkludmFsaWRTdGF0ZUVycm9ylGoNjwAAdJSMH2NvbmN1cnJlbnQuZnV0dXJlcy5UaW1lb3V0RXJyb3KUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbCNjb25jdXJyZW50LmZ1dHVyZXMuVGltZW91dEVycm9ylGoNjwAAdJSMLGNvbmN1cnJlbnQuZnV0dXJlcy5wcm9jZXNzLkJyb2tlblByb2Nlc3NQb29slChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLnByb2Nlc3MuQnJva2VuUHJvY2Vzc1Bvb2yUag2PAAB0lIwqY29uY3VycmVudC5mdXR1cmVzLnRocmVhZC5Ccm9rZW5UaHJlYWRQb29slChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLnRocmVhZC5Ccm9rZW5UaHJlYWRQb29slGoNjwAAdJSMIWNvbmZpZ3BhcnNlci5EdXBsaWNhdGVPcHRpb25FcnJvcpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI2NvbmZpZ3BhcnNlci5EdXBsaWNhdGVPcHRpb25FcnJvcpRqDY8AAHSUjCJjb25maWdwYXJzZXIuRHVwbGljYXRlU2VjdGlvbkVycm9ylChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkR1cGxpY2F0ZVNlY3Rpb25FcnJvcpRqDY8AAHSUjBJjb25maWdwYXJzZXIuRXJyb3KUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuRXJyb3KUag2PAAB0lIwkY29uZmlncGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9ylChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9ylGoNjwAAdJSMH2NvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uRXJyb3KUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbkVycm9ylGoNjwAAdJSMLGNvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uTWlzc2luZ09wdGlvbkVycm9ylChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3KUag2PAAB0lIwlY29uZmlncGFyc2VyLkludGVycG9sYXRpb25TeW50YXhFcnJvcpQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI2NvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uU3ludGF4RXJyb3KUag2PAAB0lIwmY29uZmlncGFyc2VyLk1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3KUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvcpRqDY8AAHSUjBpjb25maWdwYXJzZXIuTm9PcHRpb25FcnJvcpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI2NvbmZpZ3BhcnNlci5Ob09wdGlvbkVycm9ylGoNjwAAdJSMG2NvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvcpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI2NvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvcpRqDY8AAHSUjBljb25maWdwYXJzZXIuUGFyc2luZ0Vycm9ylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLlBhcnNpbmdFcnJvcpRqDY8AAHSUjApjb3B5LmVycm9ylChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29weS5odG1sI2NvcHkuZXJyb3KUag2PAAB0lIwJY3N2LkVycm9ylChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkVycm9ylGoNjwAAdJSMFGN0eXBlcy5Bcmd1bWVudEVycm9ylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkFyZ3VtZW50RXJyb3KUag2PAAB0lIwMY3Vyc2VzLmVycm9ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmVycm9ylGoNjwAAdJSMH2RhdGFjbGFzc2VzLkZyb3plbkluc3RhbmNlRXJyb3KUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRhY2xhc3Nlcy5odG1sI2RhdGFjbGFzc2VzLkZyb3plbkluc3RhbmNlRXJyb3KUag2PAAB0lIwOZGJtLmR1bWIuZXJyb3KUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0uZHVtYi5lcnJvcpRqDY8AAHSUjAlkYm0uZXJyb3KUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0uZXJyb3KUag2PAAB0lIwNZGJtLmdudS5lcnJvcpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RibS5odG1sI2RibS5nbnUuZXJyb3KUag2PAAB0lIwOZGJtLm5kYm0uZXJyb3KUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0ubmRibS5lcnJvcpRqDY8AAHSUjBZkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdEZhaWx1cmWUag2PAAB0lIwbZG9jdGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9ulChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbpRqDY8AAHSUjBplbWFpbC5lcnJvcnMuQm91bmRhcnlFcnJvcpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmVycm9ycy5odG1sI2VtYWlsLmVycm9ycy5Cb3VuZGFyeUVycm9ylGoNjwAAdJSMHWVtYWlsLmVycm9ycy5IZWFkZXJQYXJzZUVycm9ylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWwjZW1haWwuZXJyb3JzLkhlYWRlclBhcnNlRXJyb3KUag2PAAB0lIwZZW1haWwuZXJyb3JzLk1lc3NhZ2VFcnJvcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmVycm9ycy5odG1sI2VtYWlsLmVycm9ycy5NZXNzYWdlRXJyb3KUag2PAAB0lIweZW1haWwuZXJyb3JzLk1lc3NhZ2VQYXJzZUVycm9ylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZXJyb3JzLmh0bWwjZW1haWwuZXJyb3JzLk1lc3NhZ2VQYXJzZUVycm9ylGoNjwAAdJSMJWVtYWlsLmVycm9ycy5NdWx0aXBhcnRDb252ZXJzaW9uRXJyb3KUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5lcnJvcnMuaHRtbCNlbWFpbC5lcnJvcnMuTXVsdGlwYXJ0Q29udmVyc2lvbkVycm9ylGoNjwAAdJSMEWZ0cGxpYi5lcnJvcl9wZXJtlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLmVycm9yX3Blcm2Uag2PAAB0lIwSZnRwbGliLmVycm9yX3Byb3RvlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLmVycm9yX3Byb3RvlGoNjwAAdJSMEmZ0cGxpYi5lcnJvcl9yZXBseZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5lcnJvcl9yZXBseZRqDY8AAHSUjBFmdHBsaWIuZXJyb3JfdGVtcJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5lcnJvcl90ZW1wlGoNjwAAdJSMEmdldG9wdC5HZXRvcHRFcnJvcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldG9wdC5odG1sI2dldG9wdC5HZXRvcHRFcnJvcpRqDY8AAHSUjAxnZXRvcHQuZXJyb3KUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXRvcHQuaHRtbCNnZXRvcHQuZXJyb3KUag2PAAB0lIwWZ2V0cGFzcy5HZXRQYXNzV2FybmluZ5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHBhc3MuaHRtbCNnZXRwYXNzLkdldFBhc3NXYXJuaW5nlGoNjwAAdJSMEGd6aXAuQmFkR3ppcEZpbGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nemlwLmh0bWwjZ3ppcC5CYWRHemlwRmlsZZRqDY8AAHSUjBlodHRwLmNsaWVudC5CYWRTdGF0dXNMaW5llChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5CYWRTdGF0dXNMaW5llGoNjwAAdJSMHGh0dHAuY2xpZW50LkNhbm5vdFNlbmRIZWFkZXKUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkNhbm5vdFNlbmRIZWFkZXKUag2PAAB0lIwdaHR0cC5jbGllbnQuQ2Fubm90U2VuZFJlcXVlc3SUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkNhbm5vdFNlbmRSZXF1ZXN0lGoNjwAAdJSMGWh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb26UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBFeGNlcHRpb26Uag2PAAB0lIwjaHR0cC5jbGllbnQuSW1wcm9wZXJDb25uZWN0aW9uU3RhdGWUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkltcHJvcGVyQ29ubmVjdGlvblN0YXRllGoNjwAAdJSMGmh0dHAuY2xpZW50LkluY29tcGxldGVSZWFklChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5JbmNvbXBsZXRlUmVhZJRqDY8AAHSUjBZodHRwLmNsaWVudC5JbnZhbGlkVVJMlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5JbnZhbGlkVVJMlGoNjwAAdJSMF2h0dHAuY2xpZW50LkxpbmVUb29Mb25nlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5MaW5lVG9vTG9uZ5RqDY8AAHSUjBhodHRwLmNsaWVudC5Ob3RDb25uZWN0ZWSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50Lk5vdENvbm5lY3RlZJRqDY8AAHSUjB5odHRwLmNsaWVudC5SZW1vdGVEaXNjb25uZWN0ZWSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LlJlbW90ZURpc2Nvbm5lY3RlZJRqDY8AAHSUjBxodHRwLmNsaWVudC5SZXNwb25zZU5vdFJlYWR5lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5SZXNwb25zZU5vdFJlYWR5lGoNjwAAdJSMIWh0dHAuY2xpZW50LlVuaW1wbGVtZW50ZWRGaWxlTW9kZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuVW5pbXBsZW1lbnRlZEZpbGVNb2RllGoNjwAAdJSMG2h0dHAuY2xpZW50LlVua25vd25Qcm90b2NvbJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuVW5rbm93blByb3RvY29slGoNjwAAdJSMI2h0dHAuY2xpZW50LlVua25vd25UcmFuc2ZlckVuY29kaW5nlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5Vbmtub3duVHJhbnNmZXJFbmNvZGluZ5RqDY8AAHSUjBhodHRwLmNvb2tpZWphci5Mb2FkRXJyb3KUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkxvYWRFcnJvcpRqDY8AAHSUjBhodHRwLmNvb2tpZXMuQ29va2llRXJyb3KUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNodHRwLmNvb2tpZXMuQ29va2llRXJyb3KUag2PAAB0lIwTaW1hcGxpYi5JTUFQNC5hYm9ydJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmFib3J0lGoNjwAAdJSME2ltYXBsaWIuSU1BUDQuZXJyb3KUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5lcnJvcpRqDY8AAHSUjBZpbWFwbGliLklNQVA0LnJlYWRvbmx5lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucmVhZG9ubHmUag2PAAB0lIwSaW8uQmxvY2tpbmdJT0Vycm9ylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CbG9ja2luZ0lPRXJyb3KUag2PAAB0lIwXaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb26UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLlVuc3VwcG9ydGVkT3BlcmF0aW9ulGoNjwAAdJSMG2lwYWRkcmVzcy5BZGRyZXNzVmFsdWVFcnJvcpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5BZGRyZXNzVmFsdWVFcnJvcpRqDY8AAHSUjBtpcGFkZHJlc3MuTmV0bWFza1ZhbHVlRXJyb3KUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuTmV0bWFza1ZhbHVlRXJyb3KUag2PAAB0lIwUanNvbi5KU09ORGVjb2RlRXJyb3KUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORGVjb2RlRXJyb3KUag2PAAB0lIwMbG9jYWxlLkVycm9ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkVycm9ylGoNjwAAdJSMDmx6bWEuTFpNQUVycm9ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuTFpNQUVycm9ylGoNjwAAdJSMDW1haWxib3guRXJyb3KUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5FcnJvcpRqDY8AAHSUjBptYWlsYm94LkV4dGVybmFsQ2xhc2hFcnJvcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkV4dGVybmFsQ2xhc2hFcnJvcpRqDY8AAHSUjBNtYWlsYm94LkZvcm1hdEVycm9ylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guRm9ybWF0RXJyb3KUag2PAAB0lIwabWFpbGJveC5Ob1N1Y2hNYWlsYm94RXJyb3KUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5Ob1N1Y2hNYWlsYm94RXJyb3KUag2PAAB0lIwVbWFpbGJveC5Ob3RFbXB0eUVycm9ylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTm90RW1wdHlFcnJvcpRqDY8AAHSUjCNtdWx0aXByb2Nlc3NpbmcuQXV0aGVudGljYXRpb25FcnJvcpQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5BdXRoZW50aWNhdGlvbkVycm9ylGoNjwAAdJSMHm11bHRpcHJvY2Vzc2luZy5CdWZmZXJUb29TaG9ydJQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5CdWZmZXJUb29TaG9ydJRqDY8AAHSUjBxtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc0Vycm9ylChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NFcnJvcpRqDY8AAHSUjBxtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9ylChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcpRqDY8AAHSUjBVuZXRyYy5OZXRyY1BhcnNlRXJyb3KUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uZXRyYy5odG1sI25ldHJjLk5ldHJjUGFyc2VFcnJvcpRqDY8AAHSUjAluaXMuZXJyb3KUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uaXMuaHRtbCNuaXMuZXJyb3KUag2PAAB0lIwVbm50cGxpYi5OTlRQRGF0YUVycm9ylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUERhdGFFcnJvcpRqDY8AAHSUjBFubnRwbGliLk5OVFBFcnJvcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBFcnJvcpRqDY8AAHSUjBpubnRwbGliLk5OVFBQZXJtYW5lbnRFcnJvcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBQZXJtYW5lbnRFcnJvcpRqDY8AAHSUjBlubnRwbGliLk5OVFBQcm90b2NvbEVycm9ylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUFByb3RvY29sRXJyb3KUag2PAAB0lIwWbm50cGxpYi5OTlRQUmVwbHlFcnJvcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBSZXBseUVycm9ylGoNjwAAdJSMGm5udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9ylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9ylGoNjwAAdJSMCG9zLmVycm9ylChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5lcnJvcpRqDY8AAHSUjBlvc3NhdWRpb2Rldi5PU1NBdWRpb0Vycm9ylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5PU1NBdWRpb0Vycm9ylGoNjwAAdJSMEnBhcnNlci5QYXJzZXJFcnJvcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5QYXJzZXJFcnJvcpRqDY8AAHSUjBJwaWNrbGUuUGlja2xlRXJyb3KUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlRXJyb3KUag2PAAB0lIwUcGlja2xlLlBpY2tsaW5nRXJyb3KUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xpbmdFcnJvcpRqDY8AAHSUjBZwaWNrbGUuVW5waWNrbGluZ0Vycm9ylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlVucGlja2xpbmdFcnJvcpRqDY8AAHSUjBJwb3BsaWIuZXJyb3JfcHJvdG+UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuZXJyb3JfcHJvdG+Uag2PAAB0lIwZcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5X2NvbXBpbGUuaHRtbCNweV9jb21waWxlLlB5Q29tcGlsZUVycm9ylGoNjwAAdJSMC3F1ZXVlLkVtcHR5lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5FbXB0eZRqDY8AAHSUjApxdWV1ZS5GdWxslChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5GdWxslGoNjwAAdJSMCHJlLmVycm9ylChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5lcnJvcpRqDY8AAHSUjA5yZXNvdXJjZS5lcnJvcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuZXJyb3KUag2PAAB0lIwMc2VsZWN0LmVycm9ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVycm9ylGoNjwAAdJSMDHNodXRpbC5FcnJvcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5FcnJvcpRqDY8AAHSUjBRzaHV0aWwuU2FtZUZpbGVFcnJvcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5TYW1lRmlsZUVycm9ylGoNjwAAdJSMEnNpZ25hbC5JdGltZXJFcnJvcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5JdGltZXJFcnJvcpRqDY8AAHSUjB9zbXRwbGliLlNNVFBBdXRoZW50aWNhdGlvbkVycm9ylChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUEF1dGhlbnRpY2F0aW9uRXJyb3KUag2PAAB0lIwYc210cGxpYi5TTVRQQ29ubmVjdEVycm9ylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUENvbm5lY3RFcnJvcpRqDY8AAHSUjBVzbXRwbGliLlNNVFBEYXRhRXJyb3KUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQRGF0YUVycm9ylGoNjwAAdJSMFXNtdHBsaWIuU01UUEV4Y2VwdGlvbpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBFeGNlcHRpb26Uag2PAAB0lIwVc210cGxpYi5TTVRQSGVsb0Vycm9ylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUEhlbG9FcnJvcpRqDY8AAHSUjB1zbXRwbGliLlNNVFBOb3RTdXBwb3J0ZWRFcnJvcpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBOb3RTdXBwb3J0ZWRFcnJvcpRqDY8AAHSUjB1zbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZJRqDY8AAHSUjB1zbXRwbGliLlNNVFBSZXNwb25zZUV4Y2VwdGlvbpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFBSZXNwb25zZUV4Y2VwdGlvbpRqDY8AAHSUjBlzbXRwbGliLlNNVFBTZW5kZXJSZWZ1c2VklChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUFNlbmRlclJlZnVzZWSUag2PAAB0lIwec210cGxpYi5TTVRQU2VydmVyRGlzY29ubmVjdGVklChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUFNlcnZlckRpc2Nvbm5lY3RlZJRqDY8AAHSUjAxzb2NrZXQuZXJyb3KUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZXJyb3KUag2PAAB0lIwPc29ja2V0LmdhaWVycm9ylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdhaWVycm9ylGoNjwAAdJSMDXNvY2tldC5oZXJyb3KUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuaGVycm9ylGoNjwAAdJSMDnNvY2tldC50aW1lb3V0lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnRpbWVvdXSUag2PAAB0lIwVc3FsaXRlMy5EYXRhYmFzZUVycm9ylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuRGF0YWJhc2VFcnJvcpRqDY8AAHSUjA1zcWxpdGUzLkVycm9ylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuRXJyb3KUag2PAAB0lIwWc3FsaXRlMy5JbnRlZ3JpdHlFcnJvcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkludGVncml0eUVycm9ylGoNjwAAdJSMGXNxbGl0ZTMuTm90U3VwcG9ydGVkRXJyb3KUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Ob3RTdXBwb3J0ZWRFcnJvcpRqDY8AAHSUjBhzcWxpdGUzLk9wZXJhdGlvbmFsRXJyb3KUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5PcGVyYXRpb25hbEVycm9ylGoNjwAAdJSMGHNxbGl0ZTMuUHJvZ3JhbW1pbmdFcnJvcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLlByb2dyYW1taW5nRXJyb3KUag2PAAB0lIwPc3FsaXRlMy5XYXJuaW5nlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuV2FybmluZ5RqDY8AAHSUjBRzc2wuQ2VydGlmaWNhdGVFcnJvcpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5DZXJ0aWZpY2F0ZUVycm9ylGoNjwAAdJSMHHNzbC5TU0xDZXJ0VmVyaWZpY2F0aW9uRXJyb3KUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ2VydFZlcmlmaWNhdGlvbkVycm9ylGoNjwAAdJSMD3NzbC5TU0xFT0ZFcnJvcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xFT0ZFcnJvcpRqDY8AAHSUjAxzc2wuU1NMRXJyb3KUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMRXJyb3KUag2PAAB0lIwTc3NsLlNTTFN5c2NhbGxFcnJvcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTeXNjYWxsRXJyb3KUag2PAAB0lIwUc3NsLlNTTFdhbnRSZWFkRXJyb3KUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMV2FudFJlYWRFcnJvcpRqDY8AAHSUjBVzc2wuU1NMV2FudFdyaXRlRXJyb3KUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMV2FudFdyaXRlRXJyb3KUag2PAAB0lIwWc3NsLlNTTFplcm9SZXR1cm5FcnJvcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xaZXJvUmV0dXJuRXJyb3KUag2PAAB0lIwac3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3KUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3KUag2PAAB0lIwMc3RydWN0LmVycm9ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LmVycm9ylGoNjwAAdJSMHXN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9ylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9ylGoNjwAAdJSMGnN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9ylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9ylGoNjwAAdJSMGXN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZJRqDY8AAHSUjAtzdW5hdS5FcnJvcpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuRXJyb3KUag2PAAB0lIwRdGFibmFubnkuTmFubnlOYWeUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YWJuYW5ueS5odG1sI3RhYm5hbm55Lk5hbm55TmFnlGoNjwAAdJSMGHRhcmZpbGUuQ29tcHJlc3Npb25FcnJvcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLkNvbXByZXNzaW9uRXJyb3KUag2PAAB0lIwUdGFyZmlsZS5FeHRyYWN0RXJyb3KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5FeHRyYWN0RXJyb3KUag2PAAB0lIwTdGFyZmlsZS5IZWFkZXJFcnJvcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLkhlYWRlckVycm9ylGoNjwAAdJSMEXRhcmZpbGUuUmVhZEVycm9ylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuUmVhZEVycm9ylJUTAAEAAAAAAGoNjwAAdJSME3RhcmZpbGUuU3RyZWFtRXJyb3KUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5TdHJlYW1FcnJvcpRqDY8AAHSUjBB0YXJmaWxlLlRhckVycm9ylChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRXJyb3KUag2PAAB0lIwbdGVzdC5zdXBwb3J0LlJlc291cmNlRGVuaWVklChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5SZXNvdXJjZURlbmllZJRqDY8AAHSUjBd0ZXN0LnN1cHBvcnQuVGVzdEZhaWxlZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuVGVzdEZhaWxlZJRqDY8AAHSUjBx0aHJlYWRpbmcuQnJva2VuQmFycmllckVycm9ylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkJyb2tlbkJhcnJpZXJFcnJvcpRqDY8AAHSUjBN0b2tlbml6ZS5Ub2tlbkVycm9ylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS5Ub2tlbkVycm9ylGoNjwAAdJSMEXVuaXR0ZXN0LlNraXBUZXN0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5Ta2lwVGVzdJRqDY8AAHSUjCF1cmxsaWIuZXJyb3IuQ29udGVudFRvb1Nob3J0RXJyb3KUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIuZXJyb3IuaHRtbCN1cmxsaWIuZXJyb3IuQ29udGVudFRvb1Nob3J0RXJyb3KUag2PAAB0lIwWdXJsbGliLmVycm9yLkhUVFBFcnJvcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5lcnJvci5odG1sI3VybGxpYi5lcnJvci5IVFRQRXJyb3KUag2PAAB0lIwVdXJsbGliLmVycm9yLlVSTEVycm9ylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLmVycm9yLmh0bWwjdXJsbGliLmVycm9yLlVSTEVycm9ylGoNjwAAdJSMCHV1LkVycm9ylChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXUuaHRtbCN1dS5FcnJvcpRqDY8AAHSUjAp3YXZlLkVycm9ylChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuRXJyb3KUag2PAAB0lIwQd2ViYnJvd3Nlci5FcnJvcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbCN3ZWJicm93c2VyLkVycm9ylGoNjwAAdJSMFnhkcmxpYi5Db252ZXJzaW9uRXJyb3KUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuQ29udmVyc2lvbkVycm9ylGoNjwAAdJSMDHhkcmxpYi5FcnJvcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5FcnJvcpRqDY8AAHSUjBR4bWwuZG9tLkRPTUV4Y2VwdGlvbpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRPTUV4Y2VwdGlvbpRqDY8AAHSUjBh4bWwuZG9tLkRvbXN0cmluZ1NpemVFcnKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb21zdHJpbmdTaXplRXJylGoNjwAAdJSMG3htbC5kb20uSGllcmFyY2h5UmVxdWVzdEVycpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkhpZXJhcmNoeVJlcXVlc3RFcnKUag2PAAB0lIwUeG1sLmRvbS5JbmRleFNpemVFcnKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbmRleFNpemVFcnKUag2PAAB0lIwZeG1sLmRvbS5JbnVzZUF0dHJpYnV0ZUVycpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkludXNlQXR0cmlidXRlRXJylGoNjwAAdJSMGHhtbC5kb20uSW52YWxpZEFjY2Vzc0VycpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkludmFsaWRBY2Nlc3NFcnKUag2PAAB0lIwbeG1sLmRvbS5JbnZhbGlkQ2hhcmFjdGVyRXJylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uSW52YWxpZENoYXJhY3RlckVycpRqDY8AAHSUjB54bWwuZG9tLkludmFsaWRNb2RpZmljYXRpb25FcnKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5JbnZhbGlkTW9kaWZpY2F0aW9uRXJylGoNjwAAdJSMF3htbC5kb20uSW52YWxpZFN0YXRlRXJylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uSW52YWxpZFN0YXRlRXJylGoNjwAAdJSMFHhtbC5kb20uTmFtZXNwYWNlRXJylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTmFtZXNwYWNlRXJylGoNjwAAdJSMGHhtbC5kb20uTm9EYXRhQWxsb3dlZEVycpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vRGF0YUFsbG93ZWRFcnKUag2PAAB0lIwgeG1sLmRvbS5Ob01vZGlmaWNhdGlvbkFsbG93ZWRFcnKUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob01vZGlmaWNhdGlvbkFsbG93ZWRFcnKUag2PAAB0lIwTeG1sLmRvbS5Ob3RGb3VuZEVycpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vdEZvdW5kRXJylGoNjwAAdJSMF3htbC5kb20uTm90U3VwcG9ydGVkRXJylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm90U3VwcG9ydGVkRXJylGoNjwAAdJSMEXhtbC5kb20uU3ludGF4RXJylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uU3ludGF4RXJylGoNjwAAdJSMGHhtbC5kb20uV3JvbmdEb2N1bWVudEVycpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLldyb25nRG9jdW1lbnRFcnKUag2PAAB0lIwceG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9ylGoNjwAAdJSMF3htbC5wYXJzZXJzLmV4cGF0LmVycm9ylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ylGoNjwAAdJSMFHhtbC5zYXguU0FYRXhjZXB0aW9ulChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5odG1sI3htbC5zYXguU0FYRXhjZXB0aW9ulGoNjwAAdJSMIXhtbC5zYXguU0FYTm90UmVjb2duaXplZEV4Y2VwdGlvbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LlNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb26Uag2PAAB0lIwgeG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb26UKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5TQVhOb3RTdXBwb3J0ZWRFeGNlcHRpb26Uag2PAAB0lIwZeG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9ulGoNjwAAdJSMEnppcGZpbGUuQmFkWmlwRmlsZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLkJhZFppcEZpbGWUag2PAAB0lIwSemlwZmlsZS5CYWRaaXBmaWxllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuQmFkWmlwZmlsZZRqDY8AAHSUjBR6aXBmaWxlLkxhcmdlWmlwRmlsZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLkxhcmdlWmlwRmlsZZRqDY8AAHSUjBh6aXBpbXBvcnQuWmlwSW1wb3J0RXJyb3KUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuWmlwSW1wb3J0RXJyb3KUag2PAAB0lIwKemxpYi5lcnJvcpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmVycm9ylGoNjwAAdJR1jAxweTphdHRyaWJ1dGWUfZQojBJCYXNlRXhjZXB0aW9uLmFyZ3OUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQmFzZUV4Y2VwdGlvbi5hcmdzlGoNjwAAdJSMIkJsb2NraW5nSU9FcnJvci5jaGFyYWN0ZXJzX3dyaXR0ZW6UKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQmxvY2tpbmdJT0Vycm9yLmNoYXJhY3RlcnNfd3JpdHRlbpRqDY8AAHSUjA1PU0Vycm9yLmVycm5vlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI09TRXJyb3IuZXJybm+Uag2PAAB0lIwQT1NFcnJvci5maWxlbmFtZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNPU0Vycm9yLmZpbGVuYW1llGoNjwAAdJSMEU9TRXJyb3IuZmlsZW5hbWUylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI09TRXJyb3IuZmlsZW5hbWUylGoNjwAAdJSMEE9TRXJyb3Iuc3RyZXJyb3KUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjT1NFcnJvci5zdHJlcnJvcpRqDY8AAHSUjBBPU0Vycm9yLndpbmVycm9ylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI09TRXJyb3Iud2luZXJyb3KUag2PAAB0lIwPU3lzdGVtRXhpdC5jb2RllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1N5c3RlbUV4aXQuY29kZZRqDY8AAHSUjBVVbmljb2RlRXJyb3IuZW5jb2RpbmeUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjVW5pY29kZUVycm9yLmVuY29kaW5nlGoNjwAAdJSMEFVuaWNvZGVFcnJvci5lbmSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjVW5pY29kZUVycm9yLmVuZJRqDY8AAHSUjBNVbmljb2RlRXJyb3Iub2JqZWN0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI1VuaWNvZGVFcnJvci5vYmplY3SUag2PAAB0lIwTVW5pY29kZUVycm9yLnJlYXNvbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNVbmljb2RlRXJyb3IucmVhc29ulGoNjwAAdJSMElVuaWNvZGVFcnJvci5zdGFydJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2V4Y2VwdGlvbnMuaHRtbCNVbmljb2RlRXJyb3Iuc3RhcnSUag2PAAB0lIwKX19jYWNoZWRfX5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWwjX19jYWNoZWRfX5RqDY8AAHSUjAhfX2ZpbGVfX5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWwjX19maWxlX1+Uag2PAAB0lIwKX19sb2FkZXJfX5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWwjX19sb2FkZXJfX5RqDY8AAHSUjAhfX25hbWVfX5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWwjX19uYW1lX1+Uag2PAAB0lIwLX19wYWNrYWdlX1+UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2ltcG9ydC5odG1sI19fcGFja2FnZV9flGoNjwAAdJSMCF9fcGF0aF9flChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9pbXBvcnQuaHRtbCNfX3BhdGhfX5RqDY8AAHSUjAhfX3NwZWNfX5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWwjX19zcGVjX1+Uag2PAAB0lIwUYXJyYXkuYXJyYXkuaXRlbXNpemWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5Lml0ZW1zaXpllGoNjwAAdJSMFGFycmF5LmFycmF5LnR5cGVjb2RllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS50eXBlY29kZZRqDY8AAHSUjA9hc3QuQVNULl9maWVsZHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuQVNULl9maWVsZHOUag2PAAB0lIwSYXN0LkFTVC5jb2xfb2Zmc2V0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LkFTVC5jb2xfb2Zmc2V0lGoNjwAAdJSMFmFzdC5BU1QuZW5kX2NvbF9vZmZzZXSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuQVNULmVuZF9jb2xfb2Zmc2V0lGoNjwAAdJSMEmFzdC5BU1QuZW5kX2xpbmVub5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzdC5odG1sI2FzdC5BU1QuZW5kX2xpbmVub5RqDY8AAHSUjA5hc3QuQVNULmxpbmVub5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzdC5odG1sI2FzdC5BU1QubGluZW5vlGoNjwAAdJSMJGFzeW5jaW8uSW5jb21wbGV0ZVJlYWRFcnJvci5leHBlY3RlZJQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXhjZXB0aW9ucy5odG1sI2FzeW5jaW8uSW5jb21wbGV0ZVJlYWRFcnJvci5leHBlY3RlZJRqDY8AAHSUjCNhc3luY2lvLkluY29tcGxldGVSZWFkRXJyb3IucGFydGlhbJQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXhjZXB0aW9ucy5odG1sI2FzeW5jaW8uSW5jb21wbGV0ZVJlYWRFcnJvci5wYXJ0aWFslGoNjwAAdJSMImFzeW5jaW8uTGltaXRPdmVycnVuRXJyb3IuY29uc3VtZWSUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV4Y2VwdGlvbnMuaHRtbCNhc3luY2lvLkxpbWl0T3ZlcnJ1bkVycm9yLmNvbnN1bWVklGoNjwAAdJSMFWFzeW5jaW8uUXVldWUubWF4c2l6ZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcXVldWUuaHRtbCNhc3luY2lvLlF1ZXVlLm1heHNpemWUag2PAAB0lIwWYXN5bmNpby5TZXJ2ZXIuc29ja2V0c5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5TZXJ2ZXIuc29ja2V0c5RqDY8AAHSUjB5hc3luY2lvLlN0cmVhbVdyaXRlci50cmFuc3BvcnSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5odG1sI2FzeW5jaW8uU3RyZWFtV3JpdGVyLnRyYW5zcG9ydJRqDY8AAHSUjCZhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzLnBpZJQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5odG1sI2FzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3MucGlklGoNjwAAdJSMLWFzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3MucmV0dXJuY29kZZQoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5odG1sI2FzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3MucmV0dXJuY29kZZRqDY8AAHSUjClhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzLnN0ZGVycpQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5odG1sI2FzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3Muc3RkZXJylGoNjwAAdJSMKGFzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3Muc3RkaW6UKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MuaHRtbCNhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzLnN0ZGlulGoNjwAAdJSMKWFzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3Muc3Rkb3V0lChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLmh0bWwjYXN5bmNpby5hc3luY2lvLnN1YnByb2Nlc3MuUHJvY2Vzcy5zdGRvdXSUag2PAAB0lIwXYnoyLkJaMkRlY29tcHJlc3Nvci5lb2aUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iejIuaHRtbCNiejIuQloyRGVjb21wcmVzc29yLmVvZpRqDY8AAHSUjB9iejIuQloyRGVjb21wcmVzc29yLm5lZWRzX2lucHV0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkRlY29tcHJlc3Nvci5uZWVkc19pbnB1dJRqDY8AAHSUjB9iejIuQloyRGVjb21wcmVzc29yLnVudXNlZF9kYXRhlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkRlY29tcHJlc3Nvci51bnVzZWRfZGF0YZRqDY8AAHSUjCRjYWxlbmRhci5IVE1MQ2FsZW5kYXIuY3NzY2xhc3NfbW9udGiUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkhUTUxDYWxlbmRhci5jc3NjbGFzc19tb250aJRqDY8AAHSUjCljYWxlbmRhci5IVE1MQ2FsZW5kYXIuY3NzY2xhc3NfbW9udGhfaGVhZJQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuSFRNTENhbGVuZGFyLmNzc2NsYXNzX21vbnRoX2hlYWSUag2PAAB0lIwkY2FsZW5kYXIuSFRNTENhbGVuZGFyLmNzc2NsYXNzX25vZGF5lChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5IVE1MQ2FsZW5kYXIuY3NzY2xhc3Nfbm9kYXmUag2PAAB0lIwjY2FsZW5kYXIuSFRNTENhbGVuZGFyLmNzc2NsYXNzX3llYXKUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkhUTUxDYWxlbmRhci5jc3NjbGFzc195ZWFylGoNjwAAdJSMKGNhbGVuZGFyLkhUTUxDYWxlbmRhci5jc3NjbGFzc195ZWFyX2hlYWSUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkhUTUxDYWxlbmRhci5jc3NjbGFzc195ZWFyX2hlYWSUag2PAAB0lIwgY2FsZW5kYXIuSFRNTENhbGVuZGFyLmNzc2NsYXNzZXOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkhUTUxDYWxlbmRhci5jc3NjbGFzc2VzlGoNjwAAdJSMLWNhbGVuZGFyLkhUTUxDYWxlbmRhci5jc3NjbGFzc2VzX3dlZWtkYXlfaGVhZJQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuSFRNTENhbGVuZGFyLmNzc2NsYXNzZXNfd2Vla2RheV9oZWFklGoNjwAAdJSMD2NsYXNzLl9fYmFzZXNfX5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjY2xhc3MuX19iYXNlc19flGoNjwAAdJSMDWNsYXNzLl9fbXJvX1+UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NsYXNzLl9fbXJvX1+Uag2PAAB0lIwQY21kLkNtZC5jbWRxdWV1ZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQuY21kcXVldWWUag2PAAB0lIwSY21kLkNtZC5kb2NfaGVhZGVylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5kb2NfaGVhZGVylGoNjwAAdJSMEmNtZC5DbWQuaWRlbnRjaGFyc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQuaWRlbnRjaGFyc5RqDY8AAHSUjA1jbWQuQ21kLmludHJvlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5pbnRyb5RqDY8AAHSUjA9jbWQuQ21kLmxhc3RjbWSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmxhc3RjbWSUag2PAAB0lIwTY21kLkNtZC5taXNjX2hlYWRlcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQubWlzY19oZWFkZXKUag2PAAB0lIwOY21kLkNtZC5wcm9tcHSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLnByb21wdJRqDY8AAHSUjA1jbWQuQ21kLnJ1bGVylChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5ydWxlcpRqDY8AAHSUjBRjbWQuQ21kLnVuZG9jX2hlYWRlcpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQudW5kb2NfaGVhZGVylGoNjwAAdJSMFGNtZC5DbWQudXNlX3Jhd2lucHV0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC51c2VfcmF3aW5wdXSUag2PAAB0lIwXY29kZWNzLkNvZGVjSW5mby5kZWNvZGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQ29kZWNJbmZvLmRlY29kZZRqDY8AAHSUjBdjb2RlY3MuQ29kZWNJbmZvLmVuY29kZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5Db2RlY0luZm8uZW5jb2RllGoNjwAAdJSMI2NvZGVjcy5Db2RlY0luZm8uaW5jcmVtZW50YWxkZWNvZGVylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkNvZGVjSW5mby5pbmNyZW1lbnRhbGRlY29kZXKUag2PAAB0lIwjY29kZWNzLkNvZGVjSW5mby5pbmNyZW1lbnRhbGVuY29kZXKUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQ29kZWNJbmZvLmluY3JlbWVudGFsZW5jb2RlcpRqDY8AAHSUjBVjb2RlY3MuQ29kZWNJbmZvLm5hbWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQ29kZWNJbmZvLm5hbWWUag2PAAB0lIwdY29kZWNzLkNvZGVjSW5mby5zdHJlYW1yZWFkZXKUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQ29kZWNJbmZvLnN0cmVhbXJlYWRlcpRqDY8AAHSUjB1jb2RlY3MuQ29kZWNJbmZvLnN0cmVhbXdyaXRlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5Db2RlY0luZm8uc3RyZWFtd3JpdGVylGoNjwAAdJSMGWNvbGxlY3Rpb25zLkNoYWluTWFwLm1hcHOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkNoYWluTWFwLm1hcHOUag2PAAB0lIwcY29sbGVjdGlvbnMuQ2hhaW5NYXAucGFyZW50c5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ2hhaW5NYXAucGFyZW50c5RqDY8AAHSUjBljb2xsZWN0aW9ucy5Vc2VyRGljdC5kYXRhlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Vc2VyRGljdC5kYXRhlGoNjwAAdJSMGWNvbGxlY3Rpb25zLlVzZXJMaXN0LmRhdGGUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLlVzZXJMaXN0LmRhdGGUag2PAAB0lIwbY29sbGVjdGlvbnMuVXNlclN0cmluZy5kYXRhlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Vc2VyU3RyaW5nLmRhdGGUag2PAAB0lIwnY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QuZGVmYXVsdF9mYWN0b3J5lChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdC5kZWZhdWx0X2ZhY3RvcnmUag2PAAB0lIwYY29sbGVjdGlvbnMuZGVxdWUubWF4bGVulChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5tYXhsZW6Uag2PAAB0lIwqY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX2ZpZWxkX2RlZmF1bHRzlChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fZmllbGRfZGVmYXVsdHOUag2PAAB0lIwiY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX2ZpZWxkc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX2ZpZWxkc5RqDY8AAHSUjChjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLkJPT0xFQU5fU1RBVEVTlChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5CT09MRUFOX1NUQVRFU5RqDY8AAHSUjCFjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLlNFQ1RDUkWUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLlNFQ1RDUkWUag2PAAB0lIwbY29udGV4dHZhcnMuQ29udGV4dFZhci5uYW1llChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dHZhcnMuaHRtbCNjb250ZXh0dmFycy5Db250ZXh0VmFyLm5hbWWUag2PAAB0lIwrY29udGV4dHZhcnMuY29udGV4dHZhcnMuVG9rZW4uVG9rZW4uTUlTU0lOR5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHR2YXJzLmh0bWwjY29udGV4dHZhcnMuY29udGV4dHZhcnMuVG9rZW4uVG9rZW4uTUlTU0lOR5RqDY8AAHSUjC1jb250ZXh0dmFycy5jb250ZXh0dmFycy5Ub2tlbi5Ub2tlbi5vbGRfdmFsdWWUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0dmFycy5odG1sI2NvbnRleHR2YXJzLmNvbnRleHR2YXJzLlRva2VuLlRva2VuLm9sZF92YWx1ZZRqDY8AAHSUjCdjb250ZXh0dmFycy5jb250ZXh0dmFycy5Ub2tlbi5Ub2tlbi52YXKUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0dmFycy5odG1sI2NvbnRleHR2YXJzLmNvbnRleHR2YXJzLlRva2VuLlRva2VuLnZhcpRqDY8AAHSUjA1jcnlwdC5tZXRob2RzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3J5cHQuaHRtbCNjcnlwdC5tZXRob2RzlGoNjwAAdJSMFWNzdi5EaWFsZWN0LmRlbGltaXRlcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LmRlbGltaXRlcpRqDY8AAHSUjBdjc3YuRGlhbGVjdC5kb3VibGVxdW90ZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LmRvdWJsZXF1b3RllGoNjwAAdJSMFmNzdi5EaWFsZWN0LmVzY2FwZWNoYXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5lc2NhcGVjaGFylGoNjwAAdJSMGmNzdi5EaWFsZWN0LmxpbmV0ZXJtaW5hdG9ylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpYWxlY3QubGluZXRlcm1pbmF0b3KUag2PAAB0lIwVY3N2LkRpYWxlY3QucXVvdGVjaGFylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpYWxlY3QucXVvdGVjaGFylGoNjwAAdJSME2Nzdi5EaWFsZWN0LnF1b3RpbmeUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5xdW90aW5nlGoNjwAAdJSMHGNzdi5EaWFsZWN0LnNraXBpbml0aWFsc3BhY2WUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGlhbGVjdC5za2lwaW5pdGlhbHNwYWNllGoNjwAAdJSMEmNzdi5EaWFsZWN0LnN0cmljdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0LnN0cmljdJRqDY8AAHSUjBVjc3YuY3N2cmVhZGVyLmRpYWxlY3SUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2cmVhZGVyLmRpYWxlY3SUag2PAAB0lIwYY3N2LmNzdnJlYWRlci5maWVsZG5hbWVzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LmNzdnJlYWRlci5maWVsZG5hbWVzlGoNjwAAdJSMFmNzdi5jc3ZyZWFkZXIubGluZV9udW2UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2cmVhZGVyLmxpbmVfbnVtlGoNjwAAdJSMFWNzdi5jc3Z3cml0ZXIuZGlhbGVjdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3Z3cml0ZXIuZGlhbGVjdJRqDY8AAHSUjBVjdHlwZXMuQXJyYXkuX2xlbmd0aF+UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuQXJyYXkuX2xlbmd0aF+Uag2PAAB0lIwTY3R5cGVzLkFycmF5Ll90eXBlX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5BcnJheS5fdHlwZV+Uag2PAAB0lIwUY3R5cGVzLlB5RExMLl9oYW5kbGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUHlETEwuX2hhbmRsZZRqDY8AAHSUjBJjdHlwZXMuUHlETEwuX25hbWWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUHlETEwuX25hbWWUag2PAAB0lIwcY3R5cGVzLlN0cnVjdHVyZS5fYW5vbnltb3VzX5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5TdHJ1Y3R1cmUuX2Fub255bW91c1+Uag2PAAB0lIwZY3R5cGVzLlN0cnVjdHVyZS5fZmllbGRzX5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5TdHJ1Y3R1cmUuX2ZpZWxkc1+Uag2PAAB0lIwXY3R5cGVzLlN0cnVjdHVyZS5fcGFja1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuU3RydWN0dXJlLl9wYWNrX5RqDY8AAHSUjBZjdHlwZXMuX0NEYXRhLl9iX2Jhc2VflChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YS5fYl9iYXNlX5RqDY8AAHSUjBtjdHlwZXMuX0NEYXRhLl9iX25lZWRzZnJlZV+UKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0NEYXRhLl9iX25lZWRzZnJlZV+Uag2PAAB0lIwWY3R5cGVzLl9DRGF0YS5fb2JqZWN0c5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGEuX29iamVjdHOUag2PAAB0lIwYY3R5cGVzLl9GdW5jUHRyLmFyZ3R5cGVzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9GdW5jUHRyLmFyZ3R5cGVzlGoNjwAAdJSMGGN0eXBlcy5fRnVuY1B0ci5lcnJjaGVja5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fRnVuY1B0ci5lcnJjaGVja5RqDY8AAHSUjBdjdHlwZXMuX0Z1bmNQdHIucmVzdHlwZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fRnVuY1B0ci5yZXN0eXBllGoNjwAAdJSMFmN0eXBlcy5fUG9pbnRlci5fdHlwZV+UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX1BvaW50ZXIuX3R5cGVflGoNjwAAdJSMGGN0eXBlcy5fUG9pbnRlci5jb250ZW50c5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fUG9pbnRlci5jb250ZW50c5RqDY8AAHSUjBljdHlwZXMuX1NpbXBsZUNEYXRhLnZhbHVllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9TaW1wbGVDRGF0YS52YWx1ZZRqDY8AAHSUjCJjdXJzZXMudGV4dHBhZC5UZXh0Ym94LnN0cmlwc3BhY2VzlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5zdHJpcHNwYWNlc5RqDY8AAHSUjBZjdXJzZXMud2luZG93LmVuY29kaW5nlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5lbmNvZGluZ5RqDY8AAHSUjBFkYXRldGltZS5kYXRlLmRheZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5kYXmUag2PAAB0lIwRZGF0ZXRpbWUuZGF0ZS5tYXiUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUubWF4lGoNjwAAdJSMEWRhdGV0aW1lLmRhdGUubWlulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLm1pbpRqDY8AAHSUjBNkYXRldGltZS5kYXRlLm1vbnRolChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLm1vbnRolGoNjwAAdJSMGGRhdGV0aW1lLmRhdGUucmVzb2x1dGlvbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5yZXNvbHV0aW9ulGoNjwAAdJSMEmRhdGV0aW1lLmRhdGUueWVhcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS55ZWFylGoNjwAAdJSMFWRhdGV0aW1lLmRhdGV0aW1lLmRheZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuZGF5lGoNjwAAdJSMFmRhdGV0aW1lLmRhdGV0aW1lLmZvbGSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmZvbGSUag2PAAB0lIwWZGF0ZXRpbWUuZGF0ZXRpbWUuaG91cpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuaG91cpRqDY8AAHSUjBVkYXRldGltZS5kYXRldGltZS5tYXiUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLm1heJRqDY8AAHSUjB1kYXRldGltZS5kYXRldGltZS5taWNyb3NlY29uZJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUubWljcm9zZWNvbmSUag2PAAB0lIwVZGF0ZXRpbWUuZGF0ZXRpbWUubWlulChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5taW6Uag2PAAB0lIwYZGF0ZXRpbWUuZGF0ZXRpbWUubWludXRllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5taW51dGWUag2PAAB0lIwXZGF0ZXRpbWUuZGF0ZXRpbWUubW9udGiUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLm1vbnRolGoNjwAAdJSMHGRhdGV0aW1lLmRhdGV0aW1lLnJlc29sdXRpb26UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnJlc29sdXRpb26Uag2PAAB0lIwYZGF0ZXRpbWUuZGF0ZXRpbWUuc2Vjb25klChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5zZWNvbmSUag2PAAB0lIwYZGF0ZXRpbWUuZGF0ZXRpbWUudHppbmZvlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50emluZm+Uag2PAAB0lIwWZGF0ZXRpbWUuZGF0ZXRpbWUueWVhcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUueWVhcpRqDY8AAHSUjBJkYXRldGltZS50aW1lLmZvbGSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuZm9sZJRqDY8AAHSUjBJkYXRldGltZS50aW1lLmhvdXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuaG91cpRqDY8AAHSUjBFkYXRldGltZS50aW1lLm1heJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5tYXiUag2PAAB0lIwZZGF0ZXRpbWUudGltZS5taWNyb3NlY29uZJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5taWNyb3NlY29uZJRqDY8AAHSUjBFkYXRldGltZS50aW1lLm1pbpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5taW6Uag2PAAB0lIwUZGF0ZXRpbWUudGltZS5taW51dGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUubWludXRllGoNjwAAdJSMGGRhdGV0aW1lLnRpbWUucmVzb2x1dGlvbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5yZXNvbHV0aW9ulGoNjwAAdJSMFGRhdGV0aW1lLnRpbWUuc2Vjb25klChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnNlY29uZJRqDY8AAHSUjBRkYXRldGltZS50aW1lLnR6aW5mb5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS50emluZm+Uag2PAAB0lIwWZGF0ZXRpbWUudGltZWRlbHRhLm1heJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZWRlbHRhLm1heJRqDY8AAHSUjBZkYXRldGltZS50aW1lZGVsdGEubWlulChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lZGVsdGEubWlulGoNjwAAdJSMHWRhdGV0aW1lLnRpbWVkZWx0YS5yZXNvbHV0aW9ulChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lZGVsdGEucmVzb2x1dGlvbpRqDY8AAHSUjBVkYXRldGltZS50aW1lem9uZS51dGOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWV6b25lLnV0Y5RqDY8AAHSUjBNkZWZpbml0aW9uLl9fbmFtZV9flChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkZWZpbml0aW9uLl9fbmFtZV9flGoNjwAAdJSMF2RlZmluaXRpb24uX19xdWFsbmFtZV9flChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkZWZpbml0aW9uLl9fcXVhbG5hbWVfX5RqDY8AAHSUjCJkaXN0dXRpbHMuY21kLkNvbW1hbmQuc3ViX2NvbW1hbmRzlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY21kLkNvbW1hbmQuc3ViX2NvbW1hbmRzlGoNjwAAdJSMGWRvY3Rlc3QuRG9jVGVzdC5kb2NzdHJpbmeUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0LmRvY3N0cmluZ5RqDY8AAHSUjBhkb2N0ZXN0LkRvY1Rlc3QuZXhhbXBsZXOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0LmV4YW1wbGVzlGoNjwAAdJSMGGRvY3Rlc3QuRG9jVGVzdC5maWxlbmFtZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3QuZmlsZW5hbWWUag2PAAB0lIwVZG9jdGVzdC5Eb2NUZXN0Lmdsb2JzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5nbG9ic5RqDY8AAHSUjBZkb2N0ZXN0LkRvY1Rlc3QubGluZW5vlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdC5saW5lbm+Uag2PAAB0lIwUZG9jdGVzdC5Eb2NUZXN0Lm5hbWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0Lm5hbWWUag2PAAB0lIweZG9jdGVzdC5Eb2NUZXN0RmFpbHVyZS5leGFtcGxllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdEZhaWx1cmUuZXhhbXBsZZRqDY8AAHSUjBpkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJlLmdvdJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJlLmdvdJRqDY8AAHSUjBtkb2N0ZXN0LkRvY1Rlc3RGYWlsdXJlLnRlc3SUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0RmFpbHVyZS50ZXN0lGoNjwAAdJSMF2RvY3Rlc3QuRXhhbXBsZS5leGNfbXNnlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRXhhbXBsZS5leGNfbXNnlGoNjwAAdJSMFmRvY3Rlc3QuRXhhbXBsZS5pbmRlbnSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5FeGFtcGxlLmluZGVudJRqDY8AAHSUjBZkb2N0ZXN0LkV4YW1wbGUubGluZW5vlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRXhhbXBsZS5saW5lbm+Uag2PAAB0lIwXZG9jdGVzdC5FeGFtcGxlLm9wdGlvbnOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5FeGFtcGxlLm9wdGlvbnOUag2PAAB0lIwWZG9jdGVzdC5FeGFtcGxlLnNvdXJjZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkV4YW1wbGUuc291cmNllGoNjwAAdJSMFGRvY3Rlc3QuRXhhbXBsZS53YW50lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRXhhbXBsZS53YW50lGoNjwAAdJSMI2RvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbi5leGFtcGxllChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbi5leGFtcGxllGoNjwAAdJSMJGRvY3Rlc3QuVW5leHBlY3RlZEV4Y2VwdGlvbi5leGNfaW5mb5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlVuZXhwZWN0ZWRFeGNlcHRpb24uZXhjX2luZm+Uag2PAAB0lIwgZG9jdGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9uLnRlc3SUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9uLnRlc3SUag2PAAB0lIwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmJvZHlfZW5jb2RpbmeUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmJvZHlfZW5jb2RpbmeUag2PAAB0lIwlZW1haWwuY2hhcnNldC5DaGFyc2V0LmhlYWRlcl9lbmNvZGluZ5QoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kaW5nlGoNjwAAdJSMI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5pbnB1dF9jaGFyc2V0lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5pbnB1dF9jaGFyc2V0lGoNjwAAdJSMIWVtYWlsLmNoYXJzZXQuQ2hhcnNldC5pbnB1dF9jb2RlY5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaW5wdXRfY29kZWOUag2PAAB0lIwkZW1haWwuY2hhcnNldC5DaGFyc2V0Lm91dHB1dF9jaGFyc2V0lChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5vdXRwdXRfY2hhcnNldJRqDY8AAHSUjCJlbWFpbC5jaGFyc2V0LkNoYXJzZXQub3V0cHV0X2NvZGVjlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5vdXRwdXRfY29kZWOUag2PAAB0lIwmZW1haWwuaGVhZGVycmVnaXN0cnkuQWRkcmVzcy5hZGRyX3NwZWOUKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkFkZHJlc3MuYWRkcl9zcGVjlGoNjwAAdJSMKWVtYWlsLmhlYWRlcnJlZ2lzdHJ5LkFkZHJlc3MuZGlzcGxheV9uYW1llChqCo8AAGoLjwAAjGVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5BZGRyZXNzLmRpc3BsYXlfbmFtZZRqDY8AAHSUjCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5BZGRyZXNzLmRvbWFpbpQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuQWRkcmVzcy5kb21haW6Uag2PAAB0lIwlZW1haWwuaGVhZGVycmVnaXN0cnkuQWRkcmVzcy51c2VybmFtZZQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuQWRkcmVzcy51c2VybmFtZZRqDY8AAHSUjCxlbWFpbC5oZWFkZXJyZWdpc3RyeS5BZGRyZXNzSGVhZGVyLmFkZHJlc3Nlc5QoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuQWRkcmVzc0hlYWRlci5hZGRyZXNzZXOUag2PAAB0lIwpZW1haWwuaGVhZGVycmVnaXN0cnkuQWRkcmVzc0hlYWRlci5ncm91cHOUKGoKjwAAaguPAACMZWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkFkZHJlc3NIZWFkZXIuZ3JvdXBzlGoNjwAAdJSMJ2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkJhc2VIZWFkZXIuZGVmZWN0c5QoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuQmFzZUhlYWRlci5kZWZlY3RzlGoNjwAAdJSMKWVtYWlsLmhlYWRlcnJlZ2lzdHJ5LkJhc2VIZWFkZXIubWF4X2NvdW50lChqCo8AAGoLjwAAjGVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5CYXNlSGVhZGVyLm1heF9jb3VudJRqDY8AAHSUjCRlbWFpbC5oZWFkZXJyZWdpc3RyeS5CYXNlSGVhZGVyLm5hbWWUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkJhc2VIZWFkZXIubmFtZZRqDY8AAHSUjDBlbWFpbC5oZWFkZXJyZWdpc3RyeS5Db250ZW50VHJhbnNmZXJFbmNvZGluZy5jdGWUKGoKjwAAaguPAACMbGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkNvbnRlbnRUcmFuc2ZlckVuY29kaW5nLmN0ZZRqDY8AAHSUjDNlbWFpbC5oZWFkZXJyZWdpc3RyeS5Db250ZW50VHlwZUhlYWRlci5jb250ZW50X3R5cGWUKGoKjwAAaguPAACMb2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkNvbnRlbnRUeXBlSGVhZGVyLmNvbnRlbnRfdHlwZZRqDY8AAHSUjC9lbWFpbC5oZWFkZXJyZWdpc3RyeS5Db250ZW50VHlwZUhlYWRlci5tYWludHlwZZQoagqPAABqC48AAIxraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuQ29udGVudFR5cGVIZWFkZXIubWFpbnR5cGWUag2PAAB0lIwuZW1haWwuaGVhZGVycmVnaXN0cnkuQ29udGVudFR5cGVIZWFkZXIuc3VidHlwZZQoagqPAABqC48AAIxqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuQ29udGVudFR5cGVIZWFkZXIuc3VidHlwZZRqDY8AAHSUjChlbWFpbC5oZWFkZXJyZWdpc3RyeS5EYXRlSGVhZGVyLmRhdGV0aW1llChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5EYXRlSGVhZGVyLmRhdGV0aW1llGoNjwAAdJSMJGVtYWlsLmhlYWRlcnJlZ2lzdHJ5Lkdyb3VwLmFkZHJlc3Nlc5QoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuR3JvdXAuYWRkcmVzc2VzlGoNjwAAdJSMJ2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lkdyb3VwLmRpc3BsYXlfbmFtZZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuR3JvdXAuZGlzcGxheV9uYW1llGoNjwAAdJSMLGVtYWlsLmhlYWRlcnJlZ2lzdHJ5Lk1JTUVWZXJzaW9uSGVhZGVyLm1ham9ylChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5NSU1FVmVyc2lvbkhlYWRlci5tYWpvcpRqDY8AAHSUjCxlbWFpbC5oZWFkZXJyZWdpc3RyeS5NSU1FVmVyc2lvbkhlYWRlci5taW5vcpQoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuTUlNRVZlcnNpb25IZWFkZXIubWlub3KUag2PAAB0lIwuZW1haWwuaGVhZGVycmVnaXN0cnkuTUlNRVZlcnNpb25IZWFkZXIudmVyc2lvbpQoagqPAABqC48AAIxqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuTUlNRVZlcnNpb25IZWFkZXIudmVyc2lvbpRqDY8AAHSUjDNlbWFpbC5oZWFkZXJyZWdpc3RyeS5QYXJhbWV0ZXJpemVkTUlNRUhlYWRlci5wYXJhbXOUKGoKjwAAaguPAACMb2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LlBhcmFtZXRlcml6ZWRNSU1FSGVhZGVyLnBhcmFtc5RqDY8AAHSUjDBlbWFpbC5oZWFkZXJyZWdpc3RyeS5TaW5nbGVBZGRyZXNzSGVhZGVyLmFkZHJlc3OUKGoKjwAAaguPAACMbGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LlNpbmdsZUFkZHJlc3NIZWFkZXIuYWRkcmVzc5RqDY8AAHSUjCJlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5kZWZlY3RzlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmRlZmVjdHOUag2PAAB0lIwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZXBpbG9ndWWUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZXBpbG9ndWWUag2PAAB0lIwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UucHJlYW1ibGWUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UucHJlYW1ibGWUag2PAAB0lIwdZW1haWwubWVzc2FnZS5NZXNzYWdlLmRlZmVjdHOUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmRlZmVjdHOUag2PAAB0lIweZW1haWwubWVzc2FnZS5NZXNzYWdlLmVwaWxvZ3VllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5lcGlsb2d1ZZRqDY8AAHSUjB5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UucHJlYW1ibGWUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLnByZWFtYmxllGoNjwAAdJSMImVtYWlsLnBvbGljeS5Db21wYXQzMi5tYW5nbGVfZnJvbV+UKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuQ29tcGF0MzIubWFuZ2xlX2Zyb21flGoNjwAAdJSMKGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5jb250ZW50X21hbmFnZXKUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuY29udGVudF9tYW5hZ2VylGoNjwAAdJSMJ2VtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5oZWFkZXJfZmFjdG9yeZQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5oZWFkZXJfZmFjdG9yeZRqDY8AAHSUjCZlbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kucmVmb2xkX3NvdXJjZZQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5yZWZvbGRfc291cmNllGoNjwAAdJSMHWVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS51dGY4lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LkVtYWlsUG9saWN5LnV0ZjiUag2PAAB0lIwcZW1haWwucG9saWN5LlBvbGljeS5jdGVfdHlwZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5Qb2xpY3kuY3RlX3R5cGWUag2PAAB0lIwbZW1haWwucG9saWN5LlBvbGljeS5saW5lc2VwlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeS5saW5lc2VwlGoNjwAAdJSMIGVtYWlsLnBvbGljeS5Qb2xpY3kubWFuZ2xlX2Zyb21flChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeS5tYW5nbGVfZnJvbV+Uag2PAAB0lIwjZW1haWwucG9saWN5LlBvbGljeS5tYXhfbGluZV9sZW5ndGiUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuUG9saWN5Lm1heF9saW5lX2xlbmd0aJRqDY8AAHSUjCNlbWFpbC5wb2xpY3kuUG9saWN5Lm1lc3NhZ2VfZmFjdG9yeZQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5Qb2xpY3kubWVzc2FnZV9mYWN0b3J5lGoNjwAAdJSMI2VtYWlsLnBvbGljeS5Qb2xpY3kucmFpc2Vfb25fZGVmZWN0lChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeS5yYWlzZV9vbl9kZWZlY3SUag2PAAB0lIwXZmlsZWNtcC5ERUZBVUxUX0lHTk9SRVOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5ERUZBVUxUX0lHTk9SRVOUag2PAAB0lIwVZmlsZWNtcC5kaXJjbXAuY29tbW9ulChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLmNvbW1vbpRqDY8AAHSUjBpmaWxlY21wLmRpcmNtcC5jb21tb25fZGlyc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5jb21tb25fZGlyc5RqDY8AAHSUjBtmaWxlY21wLmRpcmNtcC5jb21tb25fZmlsZXOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAuY29tbW9uX2ZpbGVzlGoNjwAAdJSMG2ZpbGVjbXAuZGlyY21wLmNvbW1vbl9mdW5ueZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5jb21tb25fZnVubnmUag2PAAB0lIwZZmlsZWNtcC5kaXJjbXAuZGlmZl9maWxlc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5kaWZmX2ZpbGVzlGoNjwAAdJSMGmZpbGVjbXAuZGlyY21wLmZ1bm55X2ZpbGVzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLmZ1bm55X2ZpbGVzlGoNjwAAdJSME2ZpbGVjbXAuZGlyY21wLmxlZnSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAubGVmdJRqDY8AAHSUjBhmaWxlY21wLmRpcmNtcC5sZWZ0X2xpc3SUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAubGVmdF9saXN0lGoNjwAAdJSMGGZpbGVjbXAuZGlyY21wLmxlZnRfb25seZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5sZWZ0X29ubHmUag2PAAB0lIwUZmlsZWNtcC5kaXJjbXAucmlnaHSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAucmlnaHSUag2PAAB0lIwZZmlsZWNtcC5kaXJjbXAucmlnaHRfbGlzdJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5yaWdodF9saXN0lGoNjwAAdJSMGWZpbGVjbXAuZGlyY21wLnJpZ2h0X29ubHmUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXAucmlnaHRfb25seZRqDY8AAHSUjBlmaWxlY21wLmRpcmNtcC5zYW1lX2ZpbGVzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLnNhbWVfZmlsZXOUag2PAAB0lIwWZmlsZWNtcC5kaXJjbXAuc3ViZGlyc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5zdWJkaXJzlGoNjwAAdJSMGmZvcm1hdHRlci5mb3JtYXR0ZXIud3JpdGVylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci53cml0ZXKUag2PAAB0lIweZnJhY3Rpb25zLkZyYWN0aW9uLmRlbm9taW5hdG9ylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLkZyYWN0aW9uLmRlbm9taW5hdG9ylGoNjwAAdJSMHGZyYWN0aW9ucy5GcmFjdGlvbi5udW1lcmF0b3KUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb24ubnVtZXJhdG9ylGoNjwAAdJSMGmZ0cGxpYi5GVFBfVExTLnNzbF92ZXJzaW9ulChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUF9UTFMuc3NsX3ZlcnNpb26Uag2PAAB0lIwWZnVuY3Rvb2xzLnBhcnRpYWwuYXJnc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy5wYXJ0aWFsLmFyZ3OUag2PAAB0lIwWZnVuY3Rvb2xzLnBhcnRpYWwuZnVuY5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy5wYXJ0aWFsLmZ1bmOUag2PAAB0lIwaZnVuY3Rvb2xzLnBhcnRpYWwua2V5d29yZHOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMucGFydGlhbC5rZXl3b3Jkc5RqDY8AAHSUjBNnemlwLkd6aXBGaWxlLm10aW1llChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3ppcC5odG1sI2d6aXAuR3ppcEZpbGUubXRpbWWUag2PAAB0lIwRaGFzaGxpYi5oYXNoLm5hbWWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLm5hbWWUag2PAAB0lIwUaG1hYy5ITUFDLmJsb2NrX3NpemWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5ITUFDLmJsb2NrX3NpemWUag2PAAB0lIwVaG1hYy5ITUFDLmRpZ2VzdF9zaXpllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaG1hYy5odG1sI2htYWMuSE1BQy5kaWdlc3Rfc2l6ZZRqDY8AAHSUjA5obWFjLkhNQUMubmFtZZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2htYWMuaHRtbCNobWFjLkhNQUMubmFtZZRqDY8AAHSUjCRodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5ibG9ja3NpemWUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLmJsb2Nrc2l6ZZRqDY8AAHSUjB9odHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuY2xvc2VklChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuY2xvc2VklGoNjwAAdJSMI2h0dHAuY2xpZW50LkhUVFBSZXNwb25zZS5kZWJ1Z2xldmVslChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuZGVidWdsZXZlbJRqDY8AAHSUjBxodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UubXNnlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UubXNnlGoNjwAAdJSMH2h0dHAuY2xpZW50LkhUVFBSZXNwb25zZS5yZWFzb26UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBSZXNwb25zZS5yZWFzb26Uag2PAAB0lIwfaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLnN0YXR1c5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLnN0YXR1c5RqDY8AAHSUjCBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UudmVyc2lvbpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLnZlcnNpb26Uag2PAAB0lIwdaHR0cC5jb29raWVqYXIuQ29va2llLmNvbW1lbnSUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZS5jb21tZW50lGoNjwAAdJSMIWh0dHAuY29va2llamFyLkNvb2tpZS5jb21tZW50X3VybJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llLmNvbW1lbnRfdXJslGoNjwAAdJSMHWh0dHAuY29va2llamFyLkNvb2tpZS5kaXNjYXJklChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWUuZGlzY2FyZJRqDY8AAHSUjChodHRwLmNvb2tpZWphci5Db29raWUuZG9tYWluX2luaXRpYWxfZG90lChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWUuZG9tYWluX2luaXRpYWxfZG90lGoNjwAAdJSMJmh0dHAuY29va2llamFyLkNvb2tpZS5kb21haW5fc3BlY2lmaWVklChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWUuZG9tYWluX3NwZWNpZmllZJRqDY8AAHSUjB1odHRwLmNvb2tpZWphci5Db29raWUuZXhwaXJlc5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llLmV4cGlyZXOUag2PAAB0lIwaaHR0cC5jb29raWVqYXIuQ29va2llLm5hbWWUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZS5uYW1llGoNjwAAdJSMGmh0dHAuY29va2llamFyLkNvb2tpZS5wYXRolChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWUucGF0aJRqDY8AAHSUjBpodHRwLmNvb2tpZWphci5Db29raWUucG9ydJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llLnBvcnSUag2PAAB0lIwkaHR0cC5jb29raWVqYXIuQ29va2llLnBvcnRfc3BlY2lmaWVklChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWUucG9ydF9zcGVjaWZpZWSUag2PAAB0lIwdaHR0cC5jb29raWVqYXIuQ29va2llLnJmYzIxMDmUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZS5yZmMyMTA5lGoNjwAAdJSMHGh0dHAuY29va2llamFyLkNvb2tpZS5zZWN1cmWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZS5zZWN1cmWUag2PAAB0lIwbaHR0cC5jb29raWVqYXIuQ29va2llLnZhbHVllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWUudmFsdWWUag2PAAB0lIwdaHR0cC5jb29raWVqYXIuQ29va2llLnZlcnNpb26UKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZS52ZXJzaW9ulGoNjwAAdJSMKGh0dHAuY29va2llamFyLkNvb2tpZVBvbGljeS5oaWRlX2Nvb2tpZTKUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZVBvbGljeS5oaWRlX2Nvb2tpZTKUag2PAAB0lIwkaHR0cC5jb29raWVqYXIuQ29va2llUG9saWN5Lm5ldHNjYXBllChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWVQb2xpY3kubmV0c2NhcGWUag2PAAB0lIwjaHR0cC5jb29raWVqYXIuQ29va2llUG9saWN5LnJmYzI5NjWUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZVBvbGljeS5yZmMyOTY1lGoNjwAAdJSMMGh0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluTGliZXJhbJQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5MaWJlcmFslGoNjwAAdJSMNWh0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluUkZDMjk2NU1hdGNolChqCo8AAGoLjwAAjGtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblJGQzI5NjVNYXRjaJRqDY8AAHSUjC9odHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblN0cmljdJQoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5TdHJpY3SUag2PAAB0lIw1aHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5Eb21haW5TdHJpY3ROb0RvdHOUKGoKjwAAaguPAACMa2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluU3RyaWN0Tm9Eb3RzlGoNjwAAdJSMOGh0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluU3RyaWN0Tm9uRG9tYWlulChqCo8AAGoLjwAAjG5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LkRvbWFpblN0cmljdE5vbkRvbWFpbpRqDY8AAHSUjDZodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LnJmYzIxMDlfYXNfbmV0c2NhcGWUKGoKjwAAaguPAACMbGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kucmZjMjEwOV9hc19uZXRzY2FwZZRqDY8AAHSUjDBodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9kb21haW6UKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X2RvbWFpbpRqDY8AAHSUjDNodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc19kb21haW6UKGoKjwAAaguPAACMaWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX2RvbWFpbpRqDY8AAHSUjD9odHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc19zZXRfaW5pdGlhbF9kb2xsYXKUKGoKjwAAaguPAACMdWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX3NldF9pbml0aWFsX2RvbGxhcpRqDY8AAHSUjDVodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc19zZXRfcGF0aJQoagqPAABqC48AAIxraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfbnNfc2V0X3BhdGiUag2PAAB0lIw5aHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfbnNfdW52ZXJpZmlhYmxllChqCo8AAGoLjwAAjG9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc191bnZlcmlmaWFibGWUag2PAAB0lIw+aHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5zdHJpY3RfcmZjMjk2NV91bnZlcmlmaWFibGWUKGoKjwAAaguPAACMdGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X3JmYzI5NjVfdW52ZXJpZmlhYmxllGoNjwAAdJSMJmh0dHAuY29va2llamFyLkZpbGVDb29raWVKYXIuZGVsYXlsb2FklChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5GaWxlQ29va2llSmFyLmRlbGF5bG9hZJRqDY8AAHSUjCVodHRwLmNvb2tpZWphci5GaWxlQ29va2llSmFyLmZpbGVuYW1llChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5GaWxlQ29va2llSmFyLmZpbGVuYW1llGoNjwAAdJSMH2h0dHAuY29va2llcy5Nb3JzZWwuY29kZWRfdmFsdWWUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNodHRwLmNvb2tpZXMuTW9yc2VsLmNvZGVkX3ZhbHVllGoNjwAAdJSMF2h0dHAuY29va2llcy5Nb3JzZWwua2V5lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjaHR0cC5jb29raWVzLk1vcnNlbC5rZXmUag2PAAB0lIwZaHR0cC5jb29raWVzLk1vcnNlbC52YWx1ZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llcy5odG1sI2h0dHAuY29va2llcy5Nb3JzZWwudmFsdWWUag2PAAB0lIwvaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5NZXNzYWdlQ2xhc3OUKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuTWVzc2FnZUNsYXNzlGoNjwAAdJSMMWh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuY2xpZW50X2FkZHJlc3OUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuY2xpZW50X2FkZHJlc3OUag2PAAB0lIwzaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5jbG9zZV9jb25uZWN0aW9ulChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmNsb3NlX2Nvbm5lY3Rpb26Uag2PAAB0lIwqaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5jb21tYW5klChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmNvbW1hbmSUag2PAAB0lIw1aHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5lcnJvcl9jb250ZW50X3R5cGWUKGoKjwAAaguPAACMaGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZXJyb3JfY29udGVudF90eXBllGoNjwAAdJSMN2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZXJyb3JfbWVzc2FnZV9mb3JtYXSUKGoKjwAAaguPAACMamh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZXJyb3JfbWVzc2FnZV9mb3JtYXSUag2PAAB0lIwqaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oZWFkZXJzlChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmhlYWRlcnOUag2PAAB0lIwnaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5wYXRolChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnBhdGiUag2PAAB0lIwzaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5wcm90b2NvbF92ZXJzaW9ulChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnByb3RvY29sX3ZlcnNpb26Uag2PAAB0lIwyaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5yZXF1ZXN0X3ZlcnNpb26UKGoKjwAAaguPAACMZWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucmVxdWVzdF92ZXJzaW9ulGoNjwAAdJSMLmh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucmVxdWVzdGxpbmWUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucmVxdWVzdGxpbmWUag2PAAB0lIwsaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5yZXNwb25zZXOUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucmVzcG9uc2VzlGoNjwAAdJSMKGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucmZpbGWUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIucmZpbGWUag2PAAB0lIwpaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZXJ2ZXKUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VydmVylGoNjwAAdJSMMWh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VydmVyX3ZlcnNpb26UKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VydmVyX3ZlcnNpb26Uag2PAAB0lIwuaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zeXNfdmVyc2lvbpQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuc2VydmVyLmh0bWwjaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zeXNfdmVyc2lvbpRqDY8AAHSUjChodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLndmaWxllChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLndmaWxllGoNjwAAdJSMMWh0dHAuc2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5jZ2lfZGlyZWN0b3JpZXOUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5jZ2lfZGlyZWN0b3JpZXOUag2PAAB0lIwuaHR0cC5zZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRpcmVjdG9yeZQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuc2VydmVyLmh0bWwjaHR0cC5zZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLmRpcmVjdG9yeZRqDY8AAHSUjDNodHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZXh0ZW5zaW9uc19tYXCUKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5leHRlbnNpb25zX21hcJRqDY8AAHSUjDNodHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuc2VydmVyX3ZlcnNpb26UKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5zZXJ2ZXJfdmVyc2lvbpRqDY8AAHSUjB5pbWFwbGliLklNQVA0LlBST1RPQ09MX1ZFUlNJT06UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5QUk9UT0NPTF9WRVJTSU9OlGoNjwAAdJSME2ltYXBsaWIuSU1BUDQuZGVidWeUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5kZWJ1Z5RqDY8AAHSUjBppbWFwbGliLklNQVA0LnV0ZjhfZW5hYmxlZJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnV0ZjhfZW5hYmxlZJRqDY8AAHSUjB1pbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIubmFtZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5uYW1llGoNjwAAdJSMHWltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5wYXRolChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLnBhdGiUag2PAAB0lIwlaW1wb3J0bGliLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVOUag2PAAB0lIwraW1wb3J0bGliLm1hY2hpbmVyeS5ERUJVR19CWVRFQ09ERV9TVUZGSVhFU5QoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuREVCVUdfQllURUNPREVfU1VGRklYRVOUag2PAAB0lIwmaW1wb3J0bGliLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVOUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFU5RqDY8AAHSUjCxpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIubmFtZZQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5uYW1llGoNjwAAdJSMLGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5wYXRolChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLnBhdGiUag2PAAB0lIwjaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGiUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aJRqDY8AAHSUjCVpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMuY2FjaGVklChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjLmNhY2hlZJRqDY8AAHSUjCtpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMuaGFzX2xvY2F0aW9ulChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjLmhhc19sb2NhdGlvbpRqDY8AAHSUjCVpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMubG9hZGVylChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjLmxvYWRlcpRqDY8AAHSUjCtpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMubG9hZGVyX3N0YXRllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjLmxvYWRlcl9zdGF0ZZRqDY8AAHSUjCNpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMubmFtZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlYy5uYW1llGoNjwAAdJSMJWltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlYy5vcmlnaW6UKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMub3JpZ2lulGoNjwAAdJSMJWltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlYy5wYXJlbnSUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMucGFyZW50lGoNjwAAdJSMOWltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9uc5QoagqPAABqC48AAIxqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9uc5RqDY8AAHSUjC9pbXBvcnRsaWIubWFjaGluZXJ5Lk9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFU5QoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTlGoNjwAAdJSMI2ltcG9ydGxpYi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVOUag2PAAB0lIwpaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLm5hbWWUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIubmFtZZRqDY8AAHSUjClpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIucGF0aJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlci5wYXRolGoNjwAAdJSMLWltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIubmFtZZQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIubmFtZZRqDY8AAHSUjC1pbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyLnBhdGiUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyLnBhdGiUag2PAAB0lIwbaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSlGoNjwAAdJSMG2luc3BlY3QuQm91bmRBcmd1bWVudHMuYXJnc5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkJvdW5kQXJndW1lbnRzLmFyZ3OUag2PAAB0lIwgaW5zcGVjdC5Cb3VuZEFyZ3VtZW50cy5hcmd1bWVudHOUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5Cb3VuZEFyZ3VtZW50cy5hcmd1bWVudHOUag2PAAB0lIwdaW5zcGVjdC5Cb3VuZEFyZ3VtZW50cy5rd2FyZ3OUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5Cb3VuZEFyZ3VtZW50cy5rd2FyZ3OUag2PAAB0lIwgaW5zcGVjdC5Cb3VuZEFyZ3VtZW50cy5zaWduYXR1cmWUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5Cb3VuZEFyZ3VtZW50cy5zaWduYXR1cmWUag2PAAB0lIwcaW5zcGVjdC5QYXJhbWV0ZXIuYW5ub3RhdGlvbpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LlBhcmFtZXRlci5hbm5vdGF0aW9ulGoNjwAAdJSMGWluc3BlY3QuUGFyYW1ldGVyLmRlZmF1bHSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5QYXJhbWV0ZXIuZGVmYXVsdJRqDY8AAHSUjBdpbnNwZWN0LlBhcmFtZXRlci5lbXB0eZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LlBhcmFtZXRlci5lbXB0eZRqDY8AAHSUjBZpbnNwZWN0LlBhcmFtZXRlci5raW5klChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuUGFyYW1ldGVyLmtpbmSUag2PAAB0lIwiaW5zcGVjdC5QYXJhbWV0ZXIua2luZC5kZXNjcmlwdGlvbpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LlBhcmFtZXRlci5raW5kLmRlc2NyaXB0aW9ulGoNjwAAdJSMFmluc3BlY3QuUGFyYW1ldGVyLm5hbWWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5QYXJhbWV0ZXIubmFtZZRqDY8AAHSUjBdpbnNwZWN0LlNpZ25hdHVyZS5lbXB0eZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LlNpZ25hdHVyZS5lbXB0eZRqDY8AAHSUjBxpbnNwZWN0LlNpZ25hdHVyZS5wYXJhbWV0ZXJzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuU2lnbmF0dXJlLnBhcmFtZXRlcnOUag2PAAB0lIwjaW5zcGVjdC5TaWduYXR1cmUucmV0dXJuX2Fubm90YXRpb26UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5TaWduYXR1cmUucmV0dXJuX2Fubm90YXRpb26Uag2PAAB0lIwSaW5zdGFuY2UuX19jbGFzc19flChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNpbnN0YW5jZS5fX2NsYXNzX1+Uag2PAAB0lIwVaW8uQnVmZmVyZWRJT0Jhc2UucmF3lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZS5yYXeUag2PAAB0lIwOaW8uRmlsZUlPLm1vZGWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLkZpbGVJTy5tb2RllGoNjwAAdJSMDmlvLkZpbGVJTy5uYW1llChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5GaWxlSU8ubmFtZZRqDY8AAHSUjBBpby5JT0Jhc2UuY2xvc2VklChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UuY2xvc2VklGoNjwAAdJSMFGlvLlRleHRJT0Jhc2UuYnVmZmVylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLmJ1ZmZlcpRqDY8AAHSUjBZpby5UZXh0SU9CYXNlLmVuY29kaW5nlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLmVuY29kaW5nlGoNjwAAdJSMFGlvLlRleHRJT0Jhc2UuZXJyb3JzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLmVycm9yc5RqDY8AAHSUjBZpby5UZXh0SU9CYXNlLm5ld2xpbmVzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLm5ld2xpbmVzlGoNjwAAdJSMH2lvLlRleHRJT1dyYXBwZXIubGluZV9idWZmZXJpbmeUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT1dyYXBwZXIubGluZV9idWZmZXJpbmeUag2PAAB0lIweaW8uVGV4dElPV3JhcHBlci53cml0ZV90aHJvdWdolChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9XcmFwcGVyLndyaXRlX3Rocm91Z2iUag2PAAB0lIwgaXBhZGRyZXNzLklQdjRBZGRyZXNzLmNvbXByZXNzZWSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEFkZHJlc3MuY29tcHJlc3NlZJRqDY8AAHSUjB5pcGFkZHJlc3MuSVB2NEFkZHJlc3MuZXhwbG9kZWSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEFkZHJlc3MuZXhwbG9kZWSUag2PAAB0lIwfaXBhZGRyZXNzLklQdjRBZGRyZXNzLmlzX2dsb2JhbJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0QWRkcmVzcy5pc19nbG9iYWyUag2PAAB0lIwjaXBhZGRyZXNzLklQdjRBZGRyZXNzLmlzX2xpbmtfbG9jYWyUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEFkZHJlc3MuaXNfbGlua19sb2NhbJRqDY8AAHSUjCFpcGFkZHJlc3MuSVB2NEFkZHJlc3MuaXNfbG9vcGJhY2uUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEFkZHJlc3MuaXNfbG9vcGJhY2uUag2PAAB0lIwiaXBhZGRyZXNzLklQdjRBZGRyZXNzLmlzX211bHRpY2FzdJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0QWRkcmVzcy5pc19tdWx0aWNhc3SUag2PAAB0lIwgaXBhZGRyZXNzLklQdjRBZGRyZXNzLmlzX3ByaXZhdGWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEFkZHJlc3MuaXNfcHJpdmF0ZZRqDY8AAHSUjCFpcGFkZHJlc3MuSVB2NEFkZHJlc3MuaXNfcmVzZXJ2ZWSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEFkZHJlc3MuaXNfcmVzZXJ2ZWSUag2PAAB0lIwkaXBhZGRyZXNzLklQdjRBZGRyZXNzLmlzX3Vuc3BlY2lmaWVklChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjRBZGRyZXNzLmlzX3Vuc3BlY2lmaWVklGoNjwAAdJSMI2lwYWRkcmVzcy5JUHY0QWRkcmVzcy5tYXhfcHJlZml4bGVulChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjRBZGRyZXNzLm1heF9wcmVmaXhsZW6Uag2PAAB0lIwcaXBhZGRyZXNzLklQdjRBZGRyZXNzLnBhY2tlZJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0QWRkcmVzcy5wYWNrZWSUag2PAAB0lIwlaXBhZGRyZXNzLklQdjRBZGRyZXNzLnJldmVyc2VfcG9pbnRlcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0QWRkcmVzcy5yZXZlcnNlX3BvaW50ZXKUag2PAAB0lIwdaXBhZGRyZXNzLklQdjRBZGRyZXNzLnZlcnNpb26UKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEFkZHJlc3MudmVyc2lvbpRqDY8AAHSUjBppcGFkZHJlc3MuSVB2NEludGVyZmFjZS5pcJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0SW50ZXJmYWNlLmlwlGoNjwAAdJSMH2lwYWRkcmVzcy5JUHY0SW50ZXJmYWNlLm5ldHdvcmuUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEludGVyZmFjZS5uZXR3b3JrlGoNjwAAdJSMJWlwYWRkcmVzcy5JUHY0SW50ZXJmYWNlLndpdGhfaG9zdG1hc2uUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NEludGVyZmFjZS53aXRoX2hvc3RtYXNrlGoNjwAAdJSMJGlwYWRkcmVzcy5JUHY0SW50ZXJmYWNlLndpdGhfbmV0bWFza5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0SW50ZXJmYWNlLndpdGhfbmV0bWFza5RqDY8AAHSUjCZpcGFkZHJlc3MuSVB2NEludGVyZmFjZS53aXRoX3ByZWZpeGxlbpQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0SW50ZXJmYWNlLndpdGhfcHJlZml4bGVulGoNjwAAdJSMJ2lwYWRkcmVzcy5JUHY0TmV0d29yay5icm9hZGNhc3RfYWRkcmVzc5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29yay5icm9hZGNhc3RfYWRkcmVzc5RqDY8AAHSUjCBpcGFkZHJlc3MuSVB2NE5ldHdvcmsuY29tcHJlc3NlZJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29yay5jb21wcmVzc2VklGoNjwAAdJSMHmlwYWRkcmVzcy5JUHY0TmV0d29yay5leHBsb2RlZJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29yay5leHBsb2RlZJRqDY8AAHSUjB5pcGFkZHJlc3MuSVB2NE5ldHdvcmsuaG9zdG1hc2uUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsuaG9zdG1hc2uUag2PAAB0lIwjaXBhZGRyZXNzLklQdjROZXR3b3JrLmlzX2xpbmtfbG9jYWyUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsuaXNfbGlua19sb2NhbJRqDY8AAHSUjCFpcGFkZHJlc3MuSVB2NE5ldHdvcmsuaXNfbG9vcGJhY2uUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsuaXNfbG9vcGJhY2uUag2PAAB0lIwiaXBhZGRyZXNzLklQdjROZXR3b3JrLmlzX211bHRpY2FzdJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29yay5pc19tdWx0aWNhc3SUag2PAAB0lIwgaXBhZGRyZXNzLklQdjROZXR3b3JrLmlzX3ByaXZhdGWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsuaXNfcHJpdmF0ZZRqDY8AAHSUjCFpcGFkZHJlc3MuSVB2NE5ldHdvcmsuaXNfcmVzZXJ2ZWSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsuaXNfcmVzZXJ2ZWSUag2PAAB0lIwkaXBhZGRyZXNzLklQdjROZXR3b3JrLmlzX3Vuc3BlY2lmaWVklChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjROZXR3b3JrLmlzX3Vuc3BlY2lmaWVklGoNjwAAdJSMI2lwYWRkcmVzcy5JUHY0TmV0d29yay5tYXhfcHJlZml4bGVulChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjROZXR3b3JrLm1heF9wcmVmaXhsZW6Uag2PAAB0lIwdaXBhZGRyZXNzLklQdjROZXR3b3JrLm5ldG1hc2uUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsubmV0bWFza5RqDY8AAHSUjCVpcGFkZHJlc3MuSVB2NE5ldHdvcmsubmV0d29ya19hZGRyZXNzlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjROZXR3b3JrLm5ldHdvcmtfYWRkcmVzc5RqDY8AAHSUjCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsubnVtX2FkZHJlc3Nlc5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29yay5udW1fYWRkcmVzc2VzlGoNjwAAdJSMH2lwYWRkcmVzcy5JUHY0TmV0d29yay5wcmVmaXhsZW6UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsucHJlZml4bGVulGoNjwAAdJSMHWlwYWRkcmVzcy5JUHY0TmV0d29yay52ZXJzaW9ulChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjROZXR3b3JrLnZlcnNpb26Uag2PAAB0lIwjaXBhZGRyZXNzLklQdjROZXR3b3JrLndpdGhfaG9zdG1hc2uUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsud2l0aF9ob3N0bWFza5RqDY8AAHSUjCJpcGFkZHJlc3MuSVB2NE5ldHdvcmsud2l0aF9uZXRtYXNrlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjROZXR3b3JrLndpdGhfbmV0bWFza5RqDY8AAHSUjCRpcGFkZHJlc3MuSVB2NE5ldHdvcmsud2l0aF9wcmVmaXhsZW6UKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsud2l0aF9wcmVmaXhsZW6Uag2PAAB0lIwgaXBhZGRyZXNzLklQdjZBZGRyZXNzLmNvbXByZXNzZWSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkFkZHJlc3MuY29tcHJlc3NlZJRqDY8AAHSUjB5pcGFkZHJlc3MuSVB2NkFkZHJlc3MuZXhwbG9kZWSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkFkZHJlc3MuZXhwbG9kZWSUag2PAAB0lIwhaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlwdjRfbWFwcGVklChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlwdjRfbWFwcGVklGoNjwAAdJSMH2lwYWRkcmVzcy5JUHY2QWRkcmVzcy5pc19nbG9iYWyUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkFkZHJlc3MuaXNfZ2xvYmFslGoNjwAAdJSMI2lwYWRkcmVzcy5JUHY2QWRkcmVzcy5pc19saW5rX2xvY2FslChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX2xpbmtfbG9jYWyUag2PAAB0lIwhaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX2xvb3BiYWNrlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX2xvb3BiYWNrlGoNjwAAdJSMImlwYWRkcmVzcy5JUHY2QWRkcmVzcy5pc19tdWx0aWNhc3SUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkFkZHJlc3MuaXNfbXVsdGljYXN0lGoNjwAAdJSMIGlwYWRkcmVzcy5JUHY2QWRkcmVzcy5pc19wcml2YXRllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX3ByaXZhdGWUag2PAAB0lIwhaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX3Jlc2VydmVklChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX3Jlc2VydmVklGoNjwAAdJSMI2lwYWRkcmVzcy5JUHY2QWRkcmVzcy5pc19zaXRlX2xvY2FslChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX3NpdGVfbG9jYWyUag2PAAB0lIwkaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX3Vuc3BlY2lmaWVklChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZBZGRyZXNzLmlzX3Vuc3BlY2lmaWVklGoNjwAAdJSMI2lwYWRkcmVzcy5JUHY2QWRkcmVzcy5tYXhfcHJlZml4bGVulChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZBZGRyZXNzLm1heF9wcmVmaXhsZW6Uag2PAAB0lIwcaXBhZGRyZXNzLklQdjZBZGRyZXNzLnBhY2tlZJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2QWRkcmVzcy5wYWNrZWSUag2PAAB0lIwlaXBhZGRyZXNzLklQdjZBZGRyZXNzLnJldmVyc2VfcG9pbnRlcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2QWRkcmVzcy5yZXZlcnNlX3BvaW50ZXKUag2PAAB0lIwfaXBhZGRyZXNzLklQdjZBZGRyZXNzLnNpeHRvZm91cpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2QWRkcmVzcy5zaXh0b2ZvdXKUag2PAAB0lIwcaXBhZGRyZXNzLklQdjZBZGRyZXNzLnRlcmVkb5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2QWRkcmVzcy50ZXJlZG+Uag2PAAB0lIwdaXBhZGRyZXNzLklQdjZBZGRyZXNzLnZlcnNpb26UKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkFkZHJlc3MudmVyc2lvbpRqDY8AAHSUjBppcGFkZHJlc3MuSVB2NkludGVyZmFjZS5pcJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2SW50ZXJmYWNlLmlwlGoNjwAAdJSMH2lwYWRkcmVzcy5JUHY2SW50ZXJmYWNlLm5ldHdvcmuUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkludGVyZmFjZS5uZXR3b3JrlGoNjwAAdJSMJWlwYWRkcmVzcy5JUHY2SW50ZXJmYWNlLndpdGhfaG9zdG1hc2uUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkludGVyZmFjZS53aXRoX2hvc3RtYXNrlGoNjwAAdJSMJGlwYWRkcmVzcy5JUHY2SW50ZXJmYWNlLndpdGhfbmV0bWFza5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2SW50ZXJmYWNlLndpdGhfbmV0bWFza5RqDY8AAHSUjCZpcGFkZHJlc3MuSVB2NkludGVyZmFjZS53aXRoX3ByZWZpeGxlbpQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2SW50ZXJmYWNlLndpdGhfcHJlZml4bGVulGoNjwAAdJSMJ2lwYWRkcmVzcy5JUHY2TmV0d29yay5icm9hZGNhc3RfYWRkcmVzc5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay5icm9hZGNhc3RfYWRkcmVzc5RqDY8AAHSUjCBpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuY29tcHJlc3NlZJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay5jb21wcmVzc2VklGoNjwAAdJSMHmlwYWRkcmVzcy5JUHY2TmV0d29yay5leHBsb2RlZJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay5leHBsb2RlZJRqDY8AAHSUjB5pcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaG9zdG1hc2uUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaG9zdG1hc2uUag2PAAB0lIwjaXBhZGRyZXNzLklQdjZOZXR3b3JrLmlzX2xpbmtfbG9jYWyUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfbGlua19sb2NhbJRqDY8AAHSUjCFpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfbG9vcGJhY2uUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfbG9vcGJhY2uUag2PAAB0lIwiaXBhZGRyZXNzLklQdjZOZXR3b3JrLmlzX211bHRpY2FzdJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay5pc19tdWx0aWNhc3SUag2PAAB0lIwgaXBhZGRyZXNzLklQdjZOZXR3b3JrLmlzX3ByaXZhdGWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfcHJpdmF0ZZRqDY8AAHSUjCFpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfcmVzZXJ2ZWSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfcmVzZXJ2ZWSUag2PAAB0lIwjaXBhZGRyZXNzLklQdjZOZXR3b3JrLmlzX3NpdGVfbG9jYWyUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfc2l0ZV9sb2NhbJRqDY8AAHSUjCRpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfdW5zcGVjaWZpZWSUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaXNfdW5zcGVjaWZpZWSUag2PAAB0lIwjaXBhZGRyZXNzLklQdjZOZXR3b3JrLm1heF9wcmVmaXhsZW6UKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsubWF4X3ByZWZpeGxlbpRqDY8AAHSUjB1pcGFkZHJlc3MuSVB2Nk5ldHdvcmsubmV0bWFza5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay5uZXRtYXNrlGoNjwAAdJSMJWlwYWRkcmVzcy5JUHY2TmV0d29yay5uZXR3b3JrX2FkZHJlc3OUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsubmV0d29ya19hZGRyZXNzlGoNjwAAdJSMI2lwYWRkcmVzcy5JUHY2TmV0d29yay5udW1fYWRkcmVzc2VzlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZOZXR3b3JrLm51bV9hZGRyZXNzZXOUag2PAAB0lIwfaXBhZGRyZXNzLklQdjZOZXR3b3JrLnByZWZpeGxlbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay5wcmVmaXhsZW6Uag2PAAB0lIwdaXBhZGRyZXNzLklQdjZOZXR3b3JrLnZlcnNpb26UKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsudmVyc2lvbpRqDY8AAHSUjCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsud2l0aF9ob3N0bWFza5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay53aXRoX2hvc3RtYXNrlGoNjwAAdJSMImlwYWRkcmVzcy5JUHY2TmV0d29yay53aXRoX25ldG1hc2uUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsud2l0aF9uZXRtYXNrlGoNjwAAdJSMJGlwYWRkcmVzcy5JUHY2TmV0d29yay53aXRoX3ByZWZpeGxlbpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay53aXRoX3ByZWZpeGxlbpRqDY8AAHSUjBpqc29uLkpTT05EZWNvZGVFcnJvci5jb2xub5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNqc29uLkpTT05EZWNvZGVFcnJvci5jb2xub5RqDY8AAHSUjBhqc29uLkpTT05EZWNvZGVFcnJvci5kb2OUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORGVjb2RlRXJyb3IuZG9jlGoNjwAAdJSMG2pzb24uSlNPTkRlY29kZUVycm9yLmxpbmVub5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNqc29uLkpTT05EZWNvZGVFcnJvci5saW5lbm+Uag2PAAB0lIwYanNvbi5KU09ORGVjb2RlRXJyb3IubXNnlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkRlY29kZUVycm9yLm1zZ5RqDY8AAHSUjBhqc29uLkpTT05EZWNvZGVFcnJvci5wb3OUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORGVjb2RlRXJyb3IucG9zlGoNjwAAdJSMGGxvZ2dpbmcuTG9nZ2VyLnByb3BhZ2F0ZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5wcm9wYWdhdGWUag2PAAB0lIwqbG9nZ2luZy5oYW5kbGVycy5CYXNlUm90YXRpbmdIYW5kbGVyLm5hbWVylChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuQmFzZVJvdGF0aW5nSGFuZGxlci5uYW1lcpRqDY8AAHSUjCxsb2dnaW5nLmhhbmRsZXJzLkJhc2VSb3RhdGluZ0hhbmRsZXIucm90YXRvcpQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLkJhc2VSb3RhdGluZ0hhbmRsZXIucm90YXRvcpRqDY8AAHSUjBJsb2dnaW5nLmxhc3RSZXNvcnSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5sYXN0UmVzb3J0lGoNjwAAdJSMG2x6bWEuTFpNQURlY29tcHJlc3Nvci5jaGVja5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2x6bWEuaHRtbCNsem1hLkxaTUFEZWNvbXByZXNzb3IuY2hlY2uUag2PAAB0lIwZbHptYS5MWk1BRGVjb21wcmVzc29yLmVvZpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2x6bWEuaHRtbCNsem1hLkxaTUFEZWNvbXByZXNzb3IuZW9mlGoNjwAAdJSMIWx6bWEuTFpNQURlY29tcHJlc3Nvci5uZWVkc19pbnB1dJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2x6bWEuaHRtbCNsem1hLkxaTUFEZWNvbXByZXNzb3IubmVlZHNfaW5wdXSUag2PAAB0lIwhbHptYS5MWk1BRGVjb21wcmVzc29yLnVudXNlZF9kYXRhlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuTFpNQURlY29tcHJlc3Nvci51bnVzZWRfZGF0YZRqDY8AAHSUjBdtZW1vcnl2aWV3LmNfY29udGlndW91c5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5jX2NvbnRpZ3VvdXOUag2PAAB0lIwVbWVtb3J5dmlldy5jb250aWd1b3VzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3LmNvbnRpZ3VvdXOUag2PAAB0lIwXbWVtb3J5dmlldy5mX2NvbnRpZ3VvdXOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcuZl9jb250aWd1b3VzlGoNjwAAdJSMEW1lbW9yeXZpZXcuZm9ybWF0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3LmZvcm1hdJRqDY8AAHSUjBNtZW1vcnl2aWV3Lml0ZW1zaXpllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3Lml0ZW1zaXpllGoNjwAAdJSMEW1lbW9yeXZpZXcubmJ5dGVzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3Lm5ieXRlc5RqDY8AAHSUjA9tZW1vcnl2aWV3Lm5kaW2UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcubmRpbZRqDY8AAHSUjA5tZW1vcnl2aWV3Lm9iapQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5vYmqUag2PAAB0lIwTbWVtb3J5dmlldy5yZWFkb25seZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5yZWFkb25seZRqDY8AAHSUjBBtZW1vcnl2aWV3LnNoYXBllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3LnNoYXBllGoNjwAAdJSMEm1lbW9yeXZpZXcuc3RyaWRlc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5zdHJpZGVzlGoNjwAAdJSMFW1lbW9yeXZpZXcuc3Vib2Zmc2V0c5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5zdWJvZmZzZXRzlGoNjwAAdJSMIW1pbWV0eXBlcy5NaW1lVHlwZXMuZW5jb2RpbmdzX21hcJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMuZW5jb2RpbmdzX21hcJRqDY8AAHSUjB5taW1ldHlwZXMuTWltZVR5cGVzLnN1ZmZpeF9tYXCUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnN1ZmZpeF9tYXCUag2PAAB0lIwdbWltZXR5cGVzLk1pbWVUeXBlcy50eXBlc19tYXCUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnR5cGVzX21hcJRqDY8AAHSUjCFtaW1ldHlwZXMuTWltZVR5cGVzLnR5cGVzX21hcF9pbnaUlRcAAQAAAAAAKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnR5cGVzX21hcF9pbnaUag2PAAB0lIwQbW1hcC5tbWFwLmNsb3NlZJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuY2xvc2VklGoNjwAAdJSMIW1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIubW9kdWxlc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIubW9kdWxlc5RqDY8AAHSUjB9tdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5hdXRoa2V5lChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuYXV0aGtleZRqDY8AAHSUjB5tdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5kYWVtb26UKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5kYWVtb26Uag2PAAB0lIwgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuZXhpdGNvZGWUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5leGl0Y29kZZRqDY8AAHSUjBxtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5uYW1llChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MubmFtZZRqDY8AAHSUjBttdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5waWSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5waWSUag2PAAB0lIwgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc2VudGluZWyUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5zZW50aW5lbJRqDY8AAHSUjCttdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lci5hZGRyZXNzlChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIuYWRkcmVzc5RqDY8AAHSUjDFtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lci5sYXN0X2FjY2VwdGVklChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIubGFzdF9hY2NlcHRlZJRqDY8AAHSUjCxtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuYWRkcmVzc5QoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5hZGRyZXNzlGoNjwAAdJSMMm11bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5LlNoYXJlYWJsZUxpc3QuZm9ybWF0lChqCo8AAGoLjwAAjHdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5TaGFyZWFibGVMaXN0LmZvcm1hdJRqDY8AAHSUjC9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5TaGFyZWFibGVMaXN0LnNobZQoagqPAABqC48AAIx0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5Lmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuU2hhcmVhYmxlTGlzdC5zaG2Uag2PAAB0lIwubXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuU2hhcmVkTWVtb3J5LmJ1ZpQoagqPAABqC48AAIxzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5Lmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuU2hhcmVkTWVtb3J5LmJ1ZpRqDY8AAHSUjC9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnkubmFtZZQoagqPAABqC48AAIx0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5Lmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuU2hhcmVkTWVtb3J5Lm5hbWWUag2PAAB0lIwvbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuU2hhcmVkTWVtb3J5LnNpemWUKGoKjwAAaguPAACMdGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5LlNoYXJlZE1lbW9yeS5zaXpllGoNjwAAdJSMEW5ldHJjLm5ldHJjLmhvc3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbmV0cmMuaHRtbCNuZXRyYy5uZXRyYy5ob3N0c5RqDY8AAHSUjBJuZXRyYy5uZXRyYy5tYWNyb3OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uZXRyYy5odG1sI25ldHJjLm5ldHJjLm1hY3Jvc5RqDY8AAHSUjCBubnRwbGliLk5OVFAubm50cF9pbXBsZW1lbnRhdGlvbpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAubm50cF9pbXBsZW1lbnRhdGlvbpRqDY8AAHSUjBlubnRwbGliLk5OVFAubm50cF92ZXJzaW9ulChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5ubnRwX3ZlcnNpb26Uag2PAAB0lIwabm50cGxpYi5OTlRQRXJyb3IucmVzcG9uc2WUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQRXJyb3IucmVzcG9uc2WUag2PAAB0lIwUbnVtYmVycy5Db21wbGV4LmltYWeUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5Db21wbGV4LmltYWeUag2PAAB0lIwUbnVtYmVycy5Db21wbGV4LnJlYWyUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5Db21wbGV4LnJlYWyUag2PAAB0lIwcbnVtYmVycy5SYXRpb25hbC5kZW5vbWluYXRvcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLlJhdGlvbmFsLmRlbm9taW5hdG9ylGoNjwAAdJSMGm51bWJlcnMuUmF0aW9uYWwubnVtZXJhdG9ylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuUmF0aW9uYWwubnVtZXJhdG9ylGoNjwAAdJSMD29iamVjdC5fX2RpY3RfX5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjb2JqZWN0Ll9fZGljdF9flGoNjwAAdJSMF29wdHBhcnNlLk9wdGlvbi5BQ1RJT05TlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uQUNUSU9OU5RqDY8AAHSUjCRvcHRwYXJzZS5PcHRpb24uQUxXQVlTX1RZUEVEX0FDVElPTlOUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5BTFdBWVNfVFlQRURfQUNUSU9OU5RqDY8AAHSUjB1vcHRwYXJzZS5PcHRpb24uU1RPUkVfQUNUSU9OU5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLlNUT1JFX0FDVElPTlOUag2PAAB0lIwdb3B0cGFyc2UuT3B0aW9uLlRZUEVEX0FDVElPTlOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5UWVBFRF9BQ1RJT05TlGoNjwAAdJSMFW9wdHBhcnNlLk9wdGlvbi5UWVBFU5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLlRZUEVTlGoNjwAAdJSMHG9wdHBhcnNlLk9wdGlvbi5UWVBFX0NIRUNLRVKUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5UWVBFX0NIRUNLRVKUag2PAAB0lIwWb3B0cGFyc2UuT3B0aW9uLmFjdGlvbpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmFjdGlvbpRqDY8AAHSUjBhvcHRwYXJzZS5PcHRpb24uY2FsbGJhY2uUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5jYWxsYmFja5RqDY8AAHSUjB1vcHRwYXJzZS5PcHRpb24uY2FsbGJhY2tfYXJnc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmNhbGxiYWNrX2FyZ3OUag2PAAB0lIwfb3B0cGFyc2UuT3B0aW9uLmNhbGxiYWNrX2t3YXJnc5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmNhbGxiYWNrX2t3YXJnc5RqDY8AAHSUjBdvcHRwYXJzZS5PcHRpb24uY2hvaWNlc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmNob2ljZXOUag2PAAB0lIwVb3B0cGFyc2UuT3B0aW9uLmNvbnN0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uY29uc3SUag2PAAB0lIwXb3B0cGFyc2UuT3B0aW9uLmRlZmF1bHSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5kZWZhdWx0lGoNjwAAdJSMFG9wdHBhcnNlLk9wdGlvbi5kZXN0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24uZGVzdJRqDY8AAHSUjBRvcHRwYXJzZS5PcHRpb24uaGVscJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLmhlbHCUag2PAAB0lIwXb3B0cGFyc2UuT3B0aW9uLm1ldGF2YXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvbi5tZXRhdmFylGoNjwAAdJSMFW9wdHBhcnNlLk9wdGlvbi5uYXJnc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uLm5hcmdzlGoNjwAAdJSMFG9wdHBhcnNlLk9wdGlvbi50eXBllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb24udHlwZZRqDY8AAHSUjBBvcy5EaXJFbnRyeS5uYW1llChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5EaXJFbnRyeS5uYW1llGoNjwAAdJSMEG9zLkRpckVudHJ5LnBhdGiUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkRpckVudHJ5LnBhdGiUag2PAAB0lIwdb3Muc2NoZWRfcGFyYW0uc2NoZWRfcHJpb3JpdHmUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNjaGVkX3BhcmFtLnNjaGVkX3ByaW9yaXR5lGoNjwAAdJSMF29zLnN0YXRfcmVzdWx0LnN0X2F0aW1llChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdGF0X3Jlc3VsdC5zdF9hdGltZZRqDY8AAHSUjBpvcy5zdGF0X3Jlc3VsdC5zdF9hdGltZV9uc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfYXRpbWVfbnOUag2PAAB0lIwbb3Muc3RhdF9yZXN1bHQuc3RfYmlydGh0aW1llChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdGF0X3Jlc3VsdC5zdF9iaXJ0aHRpbWWUag2PAAB0lIwZb3Muc3RhdF9yZXN1bHQuc3RfYmxrc2l6ZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfYmxrc2l6ZZRqDY8AAHSUjBhvcy5zdGF0X3Jlc3VsdC5zdF9ibG9ja3OUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXRfcmVzdWx0LnN0X2Jsb2Nrc5RqDY8AAHSUjBlvcy5zdGF0X3Jlc3VsdC5zdF9jcmVhdG9ylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdGF0X3Jlc3VsdC5zdF9jcmVhdG9ylGoNjwAAdJSMF29zLnN0YXRfcmVzdWx0LnN0X2N0aW1llChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdGF0X3Jlc3VsdC5zdF9jdGltZZRqDY8AAHSUjBpvcy5zdGF0X3Jlc3VsdC5zdF9jdGltZV9uc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfY3RpbWVfbnOUag2PAAB0lIwVb3Muc3RhdF9yZXN1bHQuc3RfZGV2lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdGF0X3Jlc3VsdC5zdF9kZXaUag2PAAB0lIwhb3Muc3RhdF9yZXN1bHQuc3RfZmlsZV9hdHRyaWJ1dGVzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdGF0X3Jlc3VsdC5zdF9maWxlX2F0dHJpYnV0ZXOUag2PAAB0lIwXb3Muc3RhdF9yZXN1bHQuc3RfZmxhZ3OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXRfcmVzdWx0LnN0X2ZsYWdzlGoNjwAAdJSMGG9zLnN0YXRfcmVzdWx0LnN0X2ZzdHlwZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfZnN0eXBllGoNjwAAdJSMFW9zLnN0YXRfcmVzdWx0LnN0X2dlbpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfZ2VulGoNjwAAdJSMFW9zLnN0YXRfcmVzdWx0LnN0X2dpZJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfZ2lklGoNjwAAdJSMFW9zLnN0YXRfcmVzdWx0LnN0X2lub5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfaW5vlGoNjwAAdJSMFm9zLnN0YXRfcmVzdWx0LnN0X21vZGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXRfcmVzdWx0LnN0X21vZGWUag2PAAB0lIwXb3Muc3RhdF9yZXN1bHQuc3RfbXRpbWWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXRfcmVzdWx0LnN0X210aW1llGoNjwAAdJSMGm9zLnN0YXRfcmVzdWx0LnN0X210aW1lX25zlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdGF0X3Jlc3VsdC5zdF9tdGltZV9uc5RqDY8AAHSUjBdvcy5zdGF0X3Jlc3VsdC5zdF9ubGlua5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfbmxpbmuUag2PAAB0lIwWb3Muc3RhdF9yZXN1bHQuc3RfcmRldpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfcmRldpRqDY8AAHSUjB1vcy5zdGF0X3Jlc3VsdC5zdF9yZXBhcnNlX3RhZ5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfcmVwYXJzZV90YWeUag2PAAB0lIwXb3Muc3RhdF9yZXN1bHQuc3RfcnNpemWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXRfcmVzdWx0LnN0X3JzaXpllGoNjwAAdJSMFm9zLnN0YXRfcmVzdWx0LnN0X3NpemWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXRfcmVzdWx0LnN0X3NpemWUag2PAAB0lIwWb3Muc3RhdF9yZXN1bHQuc3RfdHlwZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdF9yZXN1bHQuc3RfdHlwZZRqDY8AAHSUjBVvcy5zdGF0X3Jlc3VsdC5zdF91aWSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXRfcmVzdWx0LnN0X3VpZJRqDY8AAHSUjBhvcy50ZXJtaW5hbF9zaXplLmNvbHVtbnOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnRlcm1pbmFsX3NpemUuY29sdW1uc5RqDY8AAHSUjBZvcy50ZXJtaW5hbF9zaXplLmxpbmVzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy50ZXJtaW5hbF9zaXplLmxpbmVzlGoNjwAAdJSMI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuY2xvc2VklChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmNsb3NlZJRqDY8AAHSUjCFvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm1vZGWUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UubW9kZZRqDY8AAHSUjCFvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm5hbWWUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UubmFtZZRqDY8AAHSUjB1waWNrbGUuUGlja2xlci5kaXNwYXRjaF90YWJsZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5QaWNrbGVyLmRpc3BhdGNoX3RhYmxllGoNjwAAdJSME3BpY2tsZS5QaWNrbGVyLmZhc3SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlci5mYXN0lGoNjwAAdJSMK3B5X2NvbXBpbGUuUHljSW52YWxpZGF0aW9uTW9kZS5DSEVDS0VEX0hBU0iUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weV9jb21waWxlLmh0bWwjcHlfY29tcGlsZS5QeWNJbnZhbGlkYXRpb25Nb2RlLkNIRUNLRURfSEFTSJRqDY8AAHSUjChweV9jb21waWxlLlB5Y0ludmFsaWRhdGlvbk1vZGUuVElNRVNUQU1QlChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlfY29tcGlsZS5odG1sI3B5X2NvbXBpbGUuUHljSW52YWxpZGF0aW9uTW9kZS5USU1FU1RBTVCUag2PAAB0lIwtcHlfY29tcGlsZS5QeWNJbnZhbGlkYXRpb25Nb2RlLlVOQ0hFQ0tFRF9IQVNIlChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlfY29tcGlsZS5odG1sI3B5X2NvbXBpbGUuUHljSW52YWxpZGF0aW9uTW9kZS5VTkNIRUNLRURfSEFTSJRqDY8AAHSUjBVweWNsYnIuQ2xhc3MuY2hpbGRyZW6UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuQ2xhc3MuY2hpbGRyZW6Uag2PAAB0lIwRcHljbGJyLkNsYXNzLmZpbGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuQ2xhc3MuZmlsZZRqDY8AAHSUjBNweWNsYnIuQ2xhc3MubGluZW5vlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkNsYXNzLmxpbmVub5RqDY8AAHSUjBRweWNsYnIuQ2xhc3MubWV0aG9kc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5DbGFzcy5tZXRob2RzlGoNjwAAdJSME3B5Y2xici5DbGFzcy5tb2R1bGWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuQ2xhc3MubW9kdWxllGoNjwAAdJSMEXB5Y2xici5DbGFzcy5uYW1llChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkNsYXNzLm5hbWWUag2PAAB0lIwTcHljbGJyLkNsYXNzLnBhcmVudJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5DbGFzcy5wYXJlbnSUag2PAAB0lIwScHljbGJyLkNsYXNzLnN1cGVylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkNsYXNzLnN1cGVylGoNjwAAdJSMGHB5Y2xici5GdW5jdGlvbi5jaGlsZHJlbpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5GdW5jdGlvbi5jaGlsZHJlbpRqDY8AAHSUjBRweWNsYnIuRnVuY3Rpb24uZmlsZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5GdW5jdGlvbi5maWxllGoNjwAAdJSMFnB5Y2xici5GdW5jdGlvbi5saW5lbm+UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuRnVuY3Rpb24ubGluZW5vlGoNjwAAdJSMFnB5Y2xici5GdW5jdGlvbi5tb2R1bGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIuRnVuY3Rpb24ubW9kdWxllGoNjwAAdJSMFHB5Y2xici5GdW5jdGlvbi5uYW1llChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLkZ1bmN0aW9uLm5hbWWUag2PAAB0lIwWcHljbGJyLkZ1bmN0aW9uLnBhcmVudJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici5GdW5jdGlvbi5wYXJlbnSUag2PAAB0lIwLcmFuZ2Uuc3RhcnSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3JhbmdlLnN0YXJ0lGoNjwAAdJSMCnJhbmdlLnN0ZXCUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3JhbmdlLnN0ZXCUag2PAAB0lIwKcmFuZ2Uuc3RvcJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjcmFuZ2Uuc3RvcJRqDY8AAHSUjA9yZS5NYXRjaC5lbmRwb3OUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoLmVuZHBvc5RqDY8AAHSUjBJyZS5NYXRjaC5sYXN0Z3JvdXCUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoLmxhc3Rncm91cJRqDY8AAHSUjBJyZS5NYXRjaC5sYXN0aW5kZXiUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoLmxhc3RpbmRleJRqDY8AAHSUjAxyZS5NYXRjaC5wb3OUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoLnBvc5RqDY8AAHSUjAtyZS5NYXRjaC5yZZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2gucmWUag2PAAB0lIwPcmUuTWF0Y2guc3RyaW5nlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaC5zdHJpbmeUag2PAAB0lIwQcmUuUGF0dGVybi5mbGFnc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuUGF0dGVybi5mbGFnc5RqDY8AAHSUjBVyZS5QYXR0ZXJuLmdyb3VwaW5kZXiUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLlBhdHRlcm4uZ3JvdXBpbmRleJRqDY8AAHSUjBFyZS5QYXR0ZXJuLmdyb3Vwc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuUGF0dGVybi5ncm91cHOUag2PAAB0lIwScmUuUGF0dGVybi5wYXR0ZXJulChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5QYXR0ZXJuLnBhdHRlcm6Uag2PAAB0lIwOcmUuZXJyb3IuY29sbm+UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLmVycm9yLmNvbG5vlGoNjwAAdJSMD3JlLmVycm9yLmxpbmVub5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuZXJyb3IubGluZW5vlGoNjwAAdJSMDHJlLmVycm9yLm1zZ5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuZXJyb3IubXNnlGoNjwAAdJSMEHJlLmVycm9yLnBhdHRlcm6UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLmVycm9yLnBhdHRlcm6Uag2PAAB0lIwMcmUuZXJyb3IucG9zlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5lcnJvci5wb3OUag2PAAB0lIwVcmVwcmxpYi5SZXByLm1heGFycmF5lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3JlcHJsaWIuUmVwci5tYXhhcnJheZRqDY8AAHSUjBVyZXBybGliLlJlcHIubWF4ZGVxdWWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXBybGliLmh0bWwjcmVwcmxpYi5SZXByLm1heGRlcXVllGoNjwAAdJSMFHJlcHJsaWIuUmVwci5tYXhkaWN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3JlcHJsaWIuUmVwci5tYXhkaWN0lGoNjwAAdJSMGXJlcHJsaWIuUmVwci5tYXhmcm96ZW5zZXSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXBybGliLmh0bWwjcmVwcmxpYi5SZXByLm1heGZyb3plbnNldJRqDY8AAHSUjBVyZXBybGliLlJlcHIubWF4bGV2ZWyUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXBybGliLmh0bWwjcmVwcmxpYi5SZXByLm1heGxldmVslGoNjwAAdJSMFHJlcHJsaWIuUmVwci5tYXhsaXN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3JlcHJsaWIuUmVwci5tYXhsaXN0lGoNjwAAdJSMFHJlcHJsaWIuUmVwci5tYXhsb25nlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3JlcHJsaWIuUmVwci5tYXhsb25nlGoNjwAAdJSMFXJlcHJsaWIuUmVwci5tYXhvdGhlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlcHJsaWIuaHRtbCNyZXBybGliLlJlcHIubWF4b3RoZXKUag2PAAB0lIwTcmVwcmxpYi5SZXByLm1heHNldJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlcHJsaWIuaHRtbCNyZXBybGliLlJlcHIubWF4c2V0lGoNjwAAdJSMFnJlcHJsaWIuUmVwci5tYXhzdHJpbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXBybGliLmh0bWwjcmVwcmxpYi5SZXByLm1heHN0cmluZ5RqDY8AAHSUjBVyZXBybGliLlJlcHIubWF4dHVwbGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXBybGliLmh0bWwjcmVwcmxpYi5SZXByLm1heHR1cGxllGoNjwAAdJSMFXNjaGVkLnNjaGVkdWxlci5xdWV1ZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NjaGVkLmh0bWwjc2NoZWQuc2NoZWR1bGVyLnF1ZXVllGoNjwAAdJSMD3NlbGVjdC5QSVBFX0JVRpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5QSVBFX0JVRpRqDY8AAHSUjBVzZWxlY3QuZGV2cG9sbC5jbG9zZWSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QuZGV2cG9sbC5jbG9zZWSUag2PAAB0lIwTc2VsZWN0LmVwb2xsLmNsb3NlZJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC5jbG9zZWSUag2PAAB0lIwSc2VsZWN0LmtldmVudC5kYXRhlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudC5kYXRhlGoNjwAAdJSMFHNlbGVjdC5rZXZlbnQuZmZsYWdzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudC5mZmxhZ3OUag2PAAB0lIwUc2VsZWN0LmtldmVudC5maWx0ZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Qua2V2ZW50LmZpbHRlcpRqDY8AAHSUjBNzZWxlY3Qua2V2ZW50LmZsYWdzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudC5mbGFnc5RqDY8AAHSUjBNzZWxlY3Qua2V2ZW50LmlkZW50lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudC5pZGVudJRqDY8AAHSUjBNzZWxlY3Qua2V2ZW50LnVkYXRhlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudC51ZGF0YZRqDY8AAHSUjBRzZWxlY3Qua3F1ZXVlLmNsb3NlZJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rcXVldWUuY2xvc2VklGoNjwAAdJSMGnNlbGVjdG9ycy5TZWxlY3RvcktleS5kYXRhlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLlNlbGVjdG9yS2V5LmRhdGGUag2PAAB0lIwcc2VsZWN0b3JzLlNlbGVjdG9yS2V5LmV2ZW50c5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdG9ycy5odG1sI3NlbGVjdG9ycy5TZWxlY3RvcktleS5ldmVudHOUag2PAAB0lIwYc2VsZWN0b3JzLlNlbGVjdG9yS2V5LmZklChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLlNlbGVjdG9yS2V5LmZklGoNjwAAdJSMHXNlbGVjdG9ycy5TZWxlY3RvcktleS5maWxlb2JqlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLlNlbGVjdG9yS2V5LmZpbGVvYmqUag2PAAB0lIwWc2hsZXguc2hsZXguY29tbWVudGVyc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguY29tbWVudGVyc5RqDY8AAHSUjBFzaGxleC5zaGxleC5kZWJ1Z5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguZGVidWeUag2PAAB0lIwPc2hsZXguc2hsZXguZW9mlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5lb2aUag2PAAB0lIwSc2hsZXguc2hsZXguZXNjYXBllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5lc2NhcGWUag2PAAB0lIwZc2hsZXguc2hsZXguZXNjYXBlZHF1b3Rlc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguZXNjYXBlZHF1b3Rlc5RqDY8AAHSUjBJzaGxleC5zaGxleC5pbmZpbGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LmluZmlsZZRqDY8AAHSUjBRzaGxleC5zaGxleC5pbnN0cmVhbZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguaW5zdHJlYW2Uag2PAAB0lIwSc2hsZXguc2hsZXgubGluZW5vlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5saW5lbm+Uag2PAAB0lIwdc2hsZXguc2hsZXgucHVuY3R1YXRpb25fY2hhcnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnB1bmN0dWF0aW9uX2NoYXJzlGoNjwAAdJSMEnNobGV4LnNobGV4LnF1b3Rlc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXgucXVvdGVzlGoNjwAAdJSMEnNobGV4LnNobGV4LnNvdXJjZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguc291cmNllGoNjwAAdJSMEXNobGV4LnNobGV4LnRva2VulChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC50b2tlbpRqDY8AAHSUjBZzaGxleC5zaGxleC53aGl0ZXNwYWNllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC53aGl0ZXNwYWNllGoNjwAAdJSMHHNobGV4LnNobGV4LndoaXRlc3BhY2Vfc3BsaXSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LndoaXRlc3BhY2Vfc3BsaXSUag2PAAB0lIwVc2hsZXguc2hsZXgud29yZGNoYXJzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC53b3JkY2hhcnOUag2PAAB0lIwkc2h1dGlsLnJtdHJlZS5hdm9pZHNfc3ltbGlua19hdHRhY2tzlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLnJtdHJlZS5hdm9pZHNfc3ltbGlua19hdHRhY2tzlGoNjwAAdJSMFnNtdHBkLlNNVFBDaGFubmVsLmFkZHKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLlNNVFBDaGFubmVsLmFkZHKUag2PAAB0lIwWc210cGQuU01UUENoYW5uZWwuY29ubpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBkLmh0bWwjc210cGQuU01UUENoYW5uZWwuY29ubpRqDY8AAHSUjBZzbXRwZC5TTVRQQ2hhbm5lbC5mcWRulChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5TTVRQQ2hhbm5lbC5mcWRulGoNjwAAdJSMGnNtdHBkLlNNVFBDaGFubmVsLm1haWxmcm9tlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5TTVRQQ2hhbm5lbC5tYWlsZnJvbZRqDY8AAHSUjBZzbXRwZC5TTVRQQ2hhbm5lbC5wZWVylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5TTVRQQ2hhbm5lbC5wZWVylGoNjwAAdJSMGXNtdHBkLlNNVFBDaGFubmVsLnJjcHR0b3OUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLlNNVFBDaGFubmVsLnJjcHR0b3OUag2PAAB0lIwfc210cGQuU01UUENoYW5uZWwucmVjZWl2ZWRfZGF0YZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBkLmh0bWwjc210cGQuU01UUENoYW5uZWwucmVjZWl2ZWRfZGF0YZRqDY8AAHSUjCBzbXRwZC5TTVRQQ2hhbm5lbC5yZWNlaXZlZF9saW5lc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBkLmh0bWwjc210cGQuU01UUENoYW5uZWwucmVjZWl2ZWRfbGluZXOUag2PAAB0lIwfc210cGQuU01UUENoYW5uZWwuc2Vlbl9ncmVldGluZ5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBkLmh0bWwjc210cGQuU01UUENoYW5uZWwuc2Vlbl9ncmVldGluZ5RqDY8AAHSUjB1zbXRwZC5TTVRQQ2hhbm5lbC5zbXRwX3NlcnZlcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBkLmh0bWwjc210cGQuU01UUENoYW5uZWwuc210cF9zZXJ2ZXKUag2PAAB0lIwcc210cGQuU01UUENoYW5uZWwuc210cF9zdGF0ZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBkLmh0bWwjc210cGQuU01UUENoYW5uZWwuc210cF9zdGF0ZZRqDY8AAHSUjB5zbXRwZC5TTVRQU2VydmVyLmNoYW5uZWxfY2xhc3OUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLlNNVFBTZXJ2ZXIuY2hhbm5lbF9jbGFzc5RqDY8AAHSUjBRzb2NrZXQuc29ja2V0LmZhbWlseZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuZmFtaWx5lGoNjwAAdJSME3NvY2tldC5zb2NrZXQucHJvdG+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnByb3RvlGoNjwAAdJSMEnNvY2tldC5zb2NrZXQudHlwZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQudHlwZZRqDY8AAHSUjCtzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5SZXF1ZXN0SGFuZGxlckNsYXNzlChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjc29ja2V0c2VydmVyLkJhc2VTZXJ2ZXIuUmVxdWVzdEhhbmRsZXJDbGFzc5RqDY8AAHSUjCZzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5hZGRyZXNzX2ZhbWlseZQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLmFkZHJlc3NfZmFtaWx5lGoNjwAAdJSMK3NvY2tldHNlcnZlci5CYXNlU2VydmVyLmFsbG93X3JldXNlX2FkZHJlc3OUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5hbGxvd19yZXVzZV9hZGRyZXNzlGoNjwAAdJSMKnNvY2tldHNlcnZlci5CYXNlU2VydmVyLnJlcXVlc3RfcXVldWVfc2l6ZZQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnJlcXVlc3RfcXVldWVfc2l6ZZRqDY8AAHSUjCZzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZXJfYWRkcmVzc5QoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlcl9hZGRyZXNzlGoNjwAAdJSMHnNvY2tldHNlcnZlci5CYXNlU2VydmVyLnNvY2tldJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnNvY2tldJRqDY8AAHSUjCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5zb2NrZXRfdHlwZZQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnNvY2tldF90eXBllGoNjwAAdJSMH3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnRpbWVvdXSUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci50aW1lb3V0lGoNjwAAdJSMIXNxbGl0ZTMuQ29ubmVjdGlvbi5pbl90cmFuc2FjdGlvbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uaW5fdHJhbnNhY3Rpb26Uag2PAAB0lIwic3FsaXRlMy5Db25uZWN0aW9uLmlzb2xhdGlvbl9sZXZlbJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uaXNvbGF0aW9uX2xldmVslGoNjwAAdJSMHnNxbGl0ZTMuQ29ubmVjdGlvbi5yb3dfZmFjdG9yeZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24ucm93X2ZhY3RvcnmUag2PAAB0lIwfc3FsaXRlMy5Db25uZWN0aW9uLnRleHRfZmFjdG9yeZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24udGV4dF9mYWN0b3J5lGoNjwAAdJSMIHNxbGl0ZTMuQ29ubmVjdGlvbi50b3RhbF9jaGFuZ2VzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi50b3RhbF9jaGFuZ2VzlGoNjwAAdJSMGHNxbGl0ZTMuQ3Vyc29yLmFycmF5c2l6ZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5hcnJheXNpemWUag2PAAB0lIwZc3FsaXRlMy5DdXJzb3IuY29ubmVjdGlvbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5jb25uZWN0aW9ulGoNjwAAdJSMGnNxbGl0ZTMuQ3Vyc29yLmRlc2NyaXB0aW9ulChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmRlc2NyaXB0aW9ulGoNjwAAdJSMGHNxbGl0ZTMuQ3Vyc29yLmxhc3Ryb3dpZJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5sYXN0cm93aWSUag2PAAB0lIwXc3FsaXRlMy5DdXJzb3Iucm93Y291bnSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5DdXJzb3Iucm93Y291bnSUag2PAAB0lIwRc3NsLk1lbW9yeUJJTy5lb2aUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuTWVtb3J5QklPLmVvZpRqDY8AAHSUjBVzc2wuTWVtb3J5QklPLnBlbmRpbmeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuTWVtb3J5QklPLnBlbmRpbmeUag2PAAB0lIwoc3NsLlNTTENlcnRWZXJpZmljYXRpb25FcnJvci52ZXJpZnlfY29kZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDZXJ0VmVyaWZpY2F0aW9uRXJyb3IudmVyaWZ5X2NvZGWUag2PAAB0lIwrc3NsLlNTTENlcnRWZXJpZmljYXRpb25FcnJvci52ZXJpZnlfbWVzc2FnZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDZXJ0VmVyaWZpY2F0aW9uRXJyb3IudmVyaWZ5X21lc3NhZ2WUag2PAAB0lIwdc3NsLlNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZZRqDY8AAHSUjCpzc2wuU1NMQ29udGV4dC5ob3N0bmFtZV9jaGVja3NfY29tbW9uX25hbWWUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5ob3N0bmFtZV9jaGVja3NfY29tbW9uX25hbWWUag2PAAB0lIwec3NsLlNTTENvbnRleHQua2V5bG9nX2ZpbGVuYW1llChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQua2V5bG9nX2ZpbGVuYW1llGoNjwAAdJSMHnNzbC5TU0xDb250ZXh0Lm1heGltdW1fdmVyc2lvbpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0Lm1heGltdW1fdmVyc2lvbpRqDY8AAHSUjB5zc2wuU1NMQ29udGV4dC5taW5pbXVtX3ZlcnNpb26UKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5taW5pbXVtX3ZlcnNpb26Uag2PAAB0lIwac3NsLlNTTENvbnRleHQubnVtX3RpY2tldHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5udW1fdGlja2V0c5RqDY8AAHSUjBZzc2wuU1NMQ29udGV4dC5vcHRpb25zlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQub3B0aW9uc5RqDY8AAHSUjCJzc2wuU1NMQ29udGV4dC5wb3N0X2hhbmRzaGFrZV9hdXRolChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQucG9zdF9oYW5kc2hha2VfYXV0aJRqDY8AAHSUjBdzc2wuU1NMQ29udGV4dC5wcm90b2NvbJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LnByb3RvY29slGoNjwAAdJSMJnNzbC5TU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2uUag2PAAB0lIwbc3NsLlNTTENvbnRleHQuc25pX2NhbGxiYWNrlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc25pX2NhbGxiYWNrlGoNjwAAdJSMHnNzbC5TU0xDb250ZXh0LnNzbG9iamVjdF9jbGFzc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LnNzbG9iamVjdF9jbGFzc5RqDY8AAHSUjB5zc2wuU1NMQ29udGV4dC5zc2xzb2NrZXRfY2xhc3OUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zc2xzb2NrZXRfY2xhc3OUag2PAAB0lIwbc3NsLlNTTENvbnRleHQudmVyaWZ5X2ZsYWdzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQudmVyaWZ5X2ZsYWdzlGoNjwAAdJSMGnNzbC5TU0xDb250ZXh0LnZlcmlmeV9tb2RllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQudmVyaWZ5X21vZGWUag2PAAB0lIwUc3NsLlNTTEVycm9yLmxpYnJhcnmUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMRXJyb3IubGlicmFyeZRqDY8AAHSUjBNzc2wuU1NMRXJyb3IucmVhc29ulChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTEVycm9yLnJlYXNvbpRqDY8AAHSUjBlzc2wuU1NMU2Vzc2lvbi5oYXNfdGlja2V0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNlc3Npb24uaGFzX3RpY2tldJRqDY8AAHSUjBFzc2wuU1NMU2Vzc2lvbi5pZJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTZXNzaW9uLmlklGoNjwAAdJSMI3NzbC5TU0xTZXNzaW9uLnRpY2tldF9saWZldGltZV9oaW50lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNlc3Npb24udGlja2V0X2xpZmV0aW1lX2hpbnSUag2PAAB0lIwTc3NsLlNTTFNlc3Npb24udGltZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTZXNzaW9uLnRpbWWUag2PAAB0lIwWc3NsLlNTTFNlc3Npb24udGltZW91dJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTZXNzaW9uLnRpbWVvdXSUag2PAAB0lIwVc3NsLlNTTFNvY2tldC5jb250ZXh0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5jb250ZXh0lGoNjwAAdJSMHXNzbC5TU0xTb2NrZXQuc2VydmVyX2hvc3RuYW1llChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5zZXJ2ZXJfaG9zdG5hbWWUag2PAAB0lIwZc3NsLlNTTFNvY2tldC5zZXJ2ZXJfc2lkZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQuc2VydmVyX3NpZGWUag2PAAB0lIwVc3NsLlNTTFNvY2tldC5zZXNzaW9ulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5zZXNzaW9ulGoNjwAAdJSMHHNzbC5TU0xTb2NrZXQuc2Vzc2lvbl9yZXVzZWSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LnNlc3Npb25fcmV1c2VklGoNjwAAdJSMIHNzbC5UTFNWZXJzaW9uLk1BWElNVU1fU1VQUE9SVEVElChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlRMU1ZlcnNpb24uTUFYSU1VTV9TVVBQT1JURUSUag2PAAB0lIwgc3NsLlRMU1ZlcnNpb24uTUlOSU1VTV9TVVBQT1JURUSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuVExTVmVyc2lvbi5NSU5JTVVNX1NVUFBPUlRFRJRqDY8AAHSUjBRzc2wuVExTVmVyc2lvbi5TU0x2M5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5UTFNWZXJzaW9uLlNTTHYzlGoNjwAAdJSMFHNzbC5UTFNWZXJzaW9uLlRMU3YxlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlRMU1ZlcnNpb24uVExTdjGUag2PAAB0lIwWc3NsLlRMU1ZlcnNpb24uVExTdjFfMZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5UTFNWZXJzaW9uLlRMU3YxXzGUag2PAAB0lIwWc3NsLlRMU1ZlcnNpb24uVExTdjFfMpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5UTFNWZXJzaW9uLlRMU3YxXzKUag2PAAB0lIwWc3NsLlRMU1ZlcnNpb24uVExTdjFfM5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5UTFNWZXJzaW9uLlRMU3YxXzOUag2PAAB0lIwac3RhdGlzdGljcy5Ob3JtYWxEaXN0Lm1lYW6UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5Ob3JtYWxEaXN0Lm1lYW6Uag2PAAB0lIwcc3RhdGlzdGljcy5Ob3JtYWxEaXN0Lm1lZGlhbpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzLk5vcm1hbERpc3QubWVkaWFulGoNjwAAdJSMGnN0YXRpc3RpY3MuTm9ybWFsRGlzdC5tb2RllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MuTm9ybWFsRGlzdC5tb2RllGoNjwAAdJSMG3N0YXRpc3RpY3MuTm9ybWFsRGlzdC5zdGRldpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzLk5vcm1hbERpc3Quc3RkZXaUag2PAAB0lIwec3RhdGlzdGljcy5Ob3JtYWxEaXN0LnZhcmlhbmNllChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MuTm9ybWFsRGlzdC52YXJpYW5jZZRqDY8AAHSUjBhzdHJpbmcuVGVtcGxhdGUudGVtcGxhdGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuVGVtcGxhdGUudGVtcGxhdGWUag2PAAB0lIwUc3RydWN0LlN0cnVjdC5mb3JtYXSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuU3RydWN0LmZvcm1hdJRqDY8AAHSUjBJzdHJ1Y3QuU3RydWN0LnNpemWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuU3RydWN0LnNpemWUag2PAAB0lIwhc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IuY21klChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLmNtZJRqDY8AAHSUjCRzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvci5vdXRwdXSUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3Iub3V0cHV0lGoNjwAAdJSMKHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLnJldHVybmNvZGWUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IucmV0dXJuY29kZZRqDY8AAHSUjCRzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvci5zdGRlcnKUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3Iuc3RkZXJylGoNjwAAdJSMJHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yLnN0ZG91dJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvci5zdGRvdXSUag2PAAB0lIwgc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzLmFyZ3OUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzLmFyZ3OUag2PAAB0lIwmc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzLnJldHVybmNvZGWUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzLnJldHVybmNvZGWUag2PAAB0lIwic3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzLnN0ZGVycpQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLkNvbXBsZXRlZFByb2Nlc3Muc3RkZXJylGoNjwAAdJSMInN1YnByb2Nlc3MuQ29tcGxldGVkUHJvY2Vzcy5zdGRvdXSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzLnN0ZG91dJRqDY8AAHSUjBVzdWJwcm9jZXNzLlBvcGVuLmFyZ3OUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5hcmdzlGoNjwAAdJSMFHN1YnByb2Nlc3MuUG9wZW4ucGlklChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4ucGlklGoNjwAAdJSMG3N1YnByb2Nlc3MuUG9wZW4ucmV0dXJuY29kZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLnJldHVybmNvZGWUag2PAAB0lIwXc3VicHJvY2Vzcy5Qb3Blbi5zdGRlcnKUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5zdGRlcnKUag2PAAB0lIwWc3VicHJvY2Vzcy5Qb3Blbi5zdGRpbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLnN0ZGlulGoNjwAAdJSMF3N1YnByb2Nlc3MuUG9wZW4uc3Rkb3V0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4uc3Rkb3V0lGoNjwAAdJSMHnN1YnByb2Nlc3MuU1RBUlRVUElORk8uZHdGbGFnc5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLmR3RmxhZ3OUag2PAAB0lIwgc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5oU3RkRXJyb3KUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5oU3RkRXJyb3KUag2PAAB0lIwgc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5oU3RkSW5wdXSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5oU3RkSW5wdXSUag2PAAB0lIwhc3VicHJvY2Vzcy5TVEFSVFVQSU5GTy5oU3RkT3V0cHV0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1RBUlRVUElORk8uaFN0ZE91dHB1dJRqDY8AAHSUjCZzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLmxwQXR0cmlidXRlTGlzdJQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLmxwQXR0cmlidXRlTGlzdJRqDY8AAHSUjCJzdWJwcm9jZXNzLlNUQVJUVVBJTkZPLndTaG93V2luZG93lChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1RBUlRVUElORk8ud1Nob3dXaW5kb3eUag2PAAB0lIwdc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC5jbWSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC5jbWSUag2PAAB0lIwgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC5vdXRwdXSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC5vdXRwdXSUag2PAAB0lIwgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC5zdGRlcnKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC5zdGRlcnKUag2PAAB0lIwgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC5zdGRvdXSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC5zdGRvdXSUag2PAAB0lIwhc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZC50aW1lb3V0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQudGltZW91dJRqDY8AAHSUjBt0YXJmaWxlLlRhckZpbGUucGF4X2hlYWRlcnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLnBheF9oZWFkZXJzlGoNjwAAdJSME3RhcmZpbGUuVGFySW5mby5naWSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmdpZJRqDY8AAHSUjBV0YXJmaWxlLlRhckluZm8uZ25hbWWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmduYW1llGoNjwAAdJSMGHRhcmZpbGUuVGFySW5mby5saW5rbmFtZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8ubGlua25hbWWUag2PAAB0lIwUdGFyZmlsZS5UYXJJbmZvLm1vZGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLm1vZGWUag2PAAB0lIwVdGFyZmlsZS5UYXJJbmZvLm10aW1llChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5tdGltZZRqDY8AAHSUjBR0YXJmaWxlLlRhckluZm8ubmFtZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8ubmFtZZRqDY8AAHSUjBt0YXJmaWxlLlRhckluZm8ucGF4X2hlYWRlcnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnBheF9oZWFkZXJzlGoNjwAAdJSMFHRhcmZpbGUuVGFySW5mby5zaXpllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5zaXpllGoNjwAAdJSMFHRhcmZpbGUuVGFySW5mby50eXBllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby50eXBllGoNjwAAdJSME3RhcmZpbGUuVGFySW5mby51aWSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnVpZJRqDY8AAHSUjBV0YXJmaWxlLlRhckluZm8udW5hbWWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnVuYW1llGoNjwAAdJSMJXRleHR3cmFwLlRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHOUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHOUag2PAAB0lIwldGV4dHdyYXAuVGV4dFdyYXBwZXIuYnJlYWtfb25faHlwaGVuc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIuYnJlYWtfb25faHlwaGVuc5RqDY8AAHSUjCR0ZXh0d3JhcC5UZXh0V3JhcHBlci5kcm9wX3doaXRlc3BhY2WUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmRyb3Bfd2hpdGVzcGFjZZRqDY8AAHSUjCB0ZXh0d3JhcC5UZXh0V3JhcHBlci5leHBhbmRfdGFic5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIuZXhwYW5kX3RhYnOUag2PAAB0lIwpdGV4dHdyYXAuVGV4dFdyYXBwZXIuZml4X3NlbnRlbmNlX2VuZGluZ3OUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLmZpeF9zZW50ZW5jZV9lbmRpbmdzlGoNjwAAdJSMI3RleHR3cmFwLlRleHRXcmFwcGVyLmluaXRpYWxfaW5kZW50lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5UZXh0V3JhcHBlci5pbml0aWFsX2luZGVudJRqDY8AAHSUjB50ZXh0d3JhcC5UZXh0V3JhcHBlci5tYXhfbGluZXOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLm1heF9saW5lc5RqDY8AAHSUjCB0ZXh0d3JhcC5UZXh0V3JhcHBlci5wbGFjZWhvbGRlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuVGV4dFdyYXBwZXIucGxhY2Vob2xkZXKUag2PAAB0lIwndGV4dHdyYXAuVGV4dFdyYXBwZXIucmVwbGFjZV93aGl0ZXNwYWNllChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5UZXh0V3JhcHBlci5yZXBsYWNlX3doaXRlc3BhY2WUag2PAAB0lIwmdGV4dHdyYXAuVGV4dFdyYXBwZXIuc3Vic2VxdWVudF9pbmRlbnSUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLnN1YnNlcXVlbnRfaW5kZW50lGoNjwAAdJSMHHRleHR3cmFwLlRleHRXcmFwcGVyLnRhYnNpemWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLnRhYnNpemWUag2PAAB0lIwadGV4dHdyYXAuVGV4dFdyYXBwZXIud2lkdGiUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLndpZHRolGoNjwAAdJSMGHRocmVhZGluZy5CYXJyaWVyLmJyb2tlbpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5CYXJyaWVyLmJyb2tlbpRqDY8AAHSUjBt0aHJlYWRpbmcuQmFycmllci5uX3dhaXRpbmeUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQmFycmllci5uX3dhaXRpbmeUag2PAAB0lIwZdGhyZWFkaW5nLkJhcnJpZXIucGFydGllc5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5CYXJyaWVyLnBhcnRpZXOUag2PAAB0lIwXdGhyZWFkaW5nLlRocmVhZC5kYWVtb26UKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLmRhZW1vbpRqDY8AAHSUjBZ0aHJlYWRpbmcuVGhyZWFkLmlkZW50lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5pZGVudJRqDY8AAHSUjBV0aHJlYWRpbmcuVGhyZWFkLm5hbWWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLm5hbWWUag2PAAB0lIwadGhyZWFkaW5nLlRocmVhZC5uYXRpdmVfaWSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLm5hdGl2ZV9pZJRqDY8AAHSUjCd0a2ludGVyLnNjcm9sbGVkdGV4dC5TY3JvbGxlZFRleHQuZnJhbWWUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnNjcm9sbGVkdGV4dC5odG1sI3RraW50ZXIuc2Nyb2xsZWR0ZXh0LlNjcm9sbGVkVGV4dC5mcmFtZZRqDY8AAHSUjCZ0a2ludGVyLnNjcm9sbGVkdGV4dC5TY3JvbGxlZFRleHQudmJhcpQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIuc2Nyb2xsZWR0ZXh0Lmh0bWwjdGtpbnRlci5zY3JvbGxlZHRleHQuU2Nyb2xsZWRUZXh0LnZiYXKUag2PAAB0lIwmdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5fX2NhdXNlX1+UKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLl9fY2F1c2VfX5RqDY8AAHSUjCh0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLl9fY29udGV4dF9flChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5fX2NvbnRleHRfX5RqDY8AAHSUjDF0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLl9fc3VwcHJlc3NfY29udGV4dF9flChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5fX3N1cHByZXNzX2NvbnRleHRfX5RqDY8AAHSUjCV0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLmV4Y190eXBllChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5leGNfdHlwZZRqDY8AAHSUjCV0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLmZpbGVuYW1llChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5maWxlbmFtZZRqDY8AAHSUjCN0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLmxpbmVub5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb24ubGluZW5vlGoNjwAAdJSMIHRyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb24ubXNnlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5tc2eUag2PAAB0lIwjdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5vZmZzZXSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLm9mZnNldJRqDY8AAHSUjCJ0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLnN0YWNrlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5zdGFja5RqDY8AAHSUjCF0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLnRleHSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLnRleHSUag2PAAB0lIwfdHJhY2VtYWxsb2MuRG9tYWluRmlsdGVyLmRvbWFpbpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuRG9tYWluRmlsdGVyLmRvbWFpbpRqDY8AAHSUjCJ0cmFjZW1hbGxvYy5Eb21haW5GaWx0ZXIuaW5jbHVzaXZllChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5Eb21haW5GaWx0ZXIuaW5jbHVzaXZllGoNjwAAdJSMHXRyYWNlbWFsbG9jLkZpbHRlci5hbGxfZnJhbWVzlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5GaWx0ZXIuYWxsX2ZyYW1lc5RqDY8AAHSUjBl0cmFjZW1hbGxvYy5GaWx0ZXIuZG9tYWlulChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5GaWx0ZXIuZG9tYWlulGoNjwAAdJSMI3RyYWNlbWFsbG9jLkZpbHRlci5maWxlbmFtZV9wYXR0ZXJulChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5GaWx0ZXIuZmlsZW5hbWVfcGF0dGVybpRqDY8AAHSUjBx0cmFjZW1hbGxvYy5GaWx0ZXIuaW5jbHVzaXZllChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5GaWx0ZXIuaW5jbHVzaXZllGoNjwAAdJSMGXRyYWNlbWFsbG9jLkZpbHRlci5saW5lbm+UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLkZpbHRlci5saW5lbm+Uag2PAAB0lIwadHJhY2VtYWxsb2MuRnJhbWUuZmlsZW5hbWWUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLkZyYW1lLmZpbGVuYW1llGoNjwAAdJSMGHRyYWNlbWFsbG9jLkZyYW1lLmxpbmVub5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuRnJhbWUubGluZW5vlGoNjwAAdJSMJHRyYWNlbWFsbG9jLlNuYXBzaG90LnRyYWNlYmFja19saW1pdJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuU25hcHNob3QudHJhY2ViYWNrX2xpbWl0lGoNjwAAdJSMG3RyYWNlbWFsbG9jLlNuYXBzaG90LnRyYWNlc5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuU25hcHNob3QudHJhY2VzlGoNjwAAdJSMG3RyYWNlbWFsbG9jLlN0YXRpc3RpYy5jb3VudJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuU3RhdGlzdGljLmNvdW50lGoNjwAAdJSMGnRyYWNlbWFsbG9jLlN0YXRpc3RpYy5zaXpllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5TdGF0aXN0aWMuc2l6ZZRqDY8AAHSUjB90cmFjZW1hbGxvYy5TdGF0aXN0aWMudHJhY2ViYWNrlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5TdGF0aXN0aWMudHJhY2ViYWNrlGoNjwAAdJSMH3RyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYuY291bnSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYuY291bnSUag2PAAB0lIwkdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZi5jb3VudF9kaWZmlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmLmNvdW50X2RpZmaUag2PAAB0lIwedHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZi5zaXpllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmLnNpemWUag2PAAB0lIwjdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZi5zaXplX2RpZmaUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYuc2l6ZV9kaWZmlGoNjwAAdJSMI3RyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYudHJhY2ViYWNrlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmLnRyYWNlYmFja5RqDY8AAHSUjBh0cmFjZW1hbGxvYy5UcmFjZS5kb21haW6UKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLlRyYWNlLmRvbWFpbpRqDY8AAHSUjBZ0cmFjZW1hbGxvYy5UcmFjZS5zaXpllChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5UcmFjZS5zaXpllGoNjwAAdJSMG3RyYWNlbWFsbG9jLlRyYWNlLnRyYWNlYmFja5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuVHJhY2UudHJhY2ViYWNrlGoNjwAAdJSMGHR5cGVzLk1vZHVsZVR5cGUuX19kb2NfX5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTW9kdWxlVHlwZS5fX2RvY19flGoNjwAAdJSMG3R5cGVzLk1vZHVsZVR5cGUuX19sb2FkZXJfX5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTW9kdWxlVHlwZS5fX2xvYWRlcl9flGoNjwAAdJSMGXR5cGVzLk1vZHVsZVR5cGUuX19uYW1lX1+UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLk1vZHVsZVR5cGUuX19uYW1lX1+Uag2PAAB0lIwcdHlwZXMuTW9kdWxlVHlwZS5fX3BhY2thZ2VfX5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTW9kdWxlVHlwZS5fX3BhY2thZ2VfX5RqDY8AAHSUjCJ1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9ulChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9ulGoNjwAAdJSMHXVuaXR0ZXN0LlRlc3RDYXNlLmxvbmdNZXNzYWdllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5sb25nTWVzc2FnZZRqDY8AAHSUjBl1bml0dGVzdC5UZXN0Q2FzZS5tYXhEaWZmlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5tYXhEaWZmlGoNjwAAdJSMGHVuaXR0ZXN0LlRlc3RDYXNlLm91dHB1dJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2Uub3V0cHV0lGoNjwAAdJSMGXVuaXR0ZXN0LlRlc3RDYXNlLnJlY29yZHOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnJlY29yZHOUag2PAAB0lIwadW5pdHRlc3QuVGVzdExvYWRlci5lcnJvcnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIuZXJyb3JzlGoNjwAAdJSMKHVuaXR0ZXN0LlRlc3RMb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmeUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmeUag2PAAB0lIwedW5pdHRlc3QuVGVzdExvYWRlci5zdWl0ZUNsYXNzlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLnN1aXRlQ2xhc3OUag2PAAB0lIwkdW5pdHRlc3QuVGVzdExvYWRlci50ZXN0TWV0aG9kUHJlZml4lChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXiUag2PAAB0lIwkdW5pdHRlc3QuVGVzdExvYWRlci50ZXN0TmFtZVBhdHRlcm5zlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLnRlc3ROYW1lUGF0dGVybnOUag2PAAB0lIwadW5pdHRlc3QuVGVzdFJlc3VsdC5idWZmZXKUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuYnVmZmVylGoNjwAAdJSMGnVuaXR0ZXN0LlRlc3RSZXN1bHQuZXJyb3JzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmVycm9yc5RqDY8AAHSUjCR1bml0dGVzdC5UZXN0UmVzdWx0LmV4cGVjdGVkRmFpbHVyZXOUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc5RqDY8AAHSUjBx1bml0dGVzdC5UZXN0UmVzdWx0LmZhaWxmYXN0lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmZhaWxmYXN0lGoNjwAAdJSMHHVuaXR0ZXN0LlRlc3RSZXN1bHQuZmFpbHVyZXOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuZmFpbHVyZXOUag2PAAB0lIwedW5pdHRlc3QuVGVzdFJlc3VsdC5zaG91bGRTdG9wlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnNob3VsZFN0b3CUag2PAAB0lIwbdW5pdHRlc3QuVGVzdFJlc3VsdC5za2lwcGVklChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnNraXBwZWSUag2PAAB0lIwddW5pdHRlc3QuVGVzdFJlc3VsdC50Yl9sb2NhbHOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQudGJfbG9jYWxzlGoNjwAAdJSMHHVuaXR0ZXN0LlRlc3RSZXN1bHQudGVzdHNSdW6UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQudGVzdHNSdW6Uag2PAAB0lIwndW5pdHRlc3QuVGVzdFJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXOUag2PAAB0lIwidW5pdHRlc3QubW9jay5Bc3luY01vY2suYXdhaXRfYXJnc5QoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLkFzeW5jTW9jay5hd2FpdF9hcmdzlGoNjwAAdJSMJ3VuaXR0ZXN0Lm1vY2suQXN5bmNNb2NrLmF3YWl0X2FyZ3NfbGlzdJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLkFzeW5jTW9jay5hd2FpdF9hcmdzX2xpc3SUag2PAAB0lIwjdW5pdHRlc3QubW9jay5Bc3luY01vY2suYXdhaXRfY291bnSUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Bc3luY01vY2suYXdhaXRfY291bnSUag2PAAB0lIwcdW5pdHRlc3QubW9jay5Nb2NrLl9fY2xhc3NfX5QoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2suX19jbGFzc19flGoNjwAAdJSMHHVuaXR0ZXN0Lm1vY2suTW9jay5jYWxsX2FyZ3OUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Nb2NrLmNhbGxfYXJnc5RqDY8AAHSUjCF1bml0dGVzdC5tb2NrLk1vY2suY2FsbF9hcmdzX2xpc3SUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Nb2NrLmNhbGxfYXJnc19saXN0lGoNjwAAdJSMHXVuaXR0ZXN0Lm1vY2suTW9jay5jYWxsX2NvdW50lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suTW9jay5jYWxsX2NvdW50lGoNjwAAdJSMGXVuaXR0ZXN0Lm1vY2suTW9jay5jYWxsZWSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Nb2NrLmNhbGxlZJRqDY8AAHSUjB91bml0dGVzdC5tb2NrLk1vY2subWV0aG9kX2NhbGxzlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suTW9jay5tZXRob2RfY2FsbHOUag2PAAB0lIwddW5pdHRlc3QubW9jay5Nb2NrLm1vY2tfY2FsbHOUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Nb2NrLm1vY2tfY2FsbHOUag2PAAB0lIwfdW5pdHRlc3QubW9jay5Nb2NrLnJldHVybl92YWx1ZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2sucmV0dXJuX3ZhbHVllGoNjwAAdJSMHnVuaXR0ZXN0Lm1vY2suTW9jay5zaWRlX2VmZmVjdJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2suc2lkZV9lZmZlY3SUag2PAAB0lIwbdXJsbGliLmVycm9yLkhUVFBFcnJvci5jb2RllChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLmVycm9yLmh0bWwjdXJsbGliLmVycm9yLkhUVFBFcnJvci5jb2RllGoNjwAAdJSMHnVybGxpYi5lcnJvci5IVFRQRXJyb3IuaGVhZGVyc5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5lcnJvci5odG1sI3VybGxpYi5lcnJvci5IVFRQRXJyb3IuaGVhZGVyc5RqDY8AAHSUjB11cmxsaWIuZXJyb3IuSFRUUEVycm9yLnJlYXNvbpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5lcnJvci5odG1sI3VybGxpYi5lcnJvci5IVFRQRXJyb3IucmVhc29ulGoNjwAAdJSMHHVybGxpYi5lcnJvci5VUkxFcnJvci5yZWFzb26UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIuZXJyb3IuaHRtbCN1cmxsaWIuZXJyb3IuVVJMRXJyb3IucmVhc29ulGoNjwAAdJSMIXVybGxpYi5yZXF1ZXN0LkJhc2VIYW5kbGVyLnBhcmVudJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuQmFzZUhhbmRsZXIucGFyZW50lGoNjwAAdJSMLHVybGxpYi5yZXF1ZXN0LkhUVFBDb29raWVQcm9jZXNzb3IuY29va2llamFylChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQQ29va2llUHJvY2Vzc29yLmNvb2tpZWphcpRqDY8AAHSUjBt1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmRhdGGUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlJlcXVlc3QuZGF0YZRqDY8AAHSUjB91cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmZ1bGxfdXJslChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmZ1bGxfdXJslGoNjwAAdJSMG3VybGxpYi5yZXF1ZXN0LlJlcXVlc3QuaG9zdJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuUmVxdWVzdC5ob3N0lGoNjwAAdJSMHXVybGxpYi5yZXF1ZXN0LlJlcXVlc3QubWV0aG9klChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5SZXF1ZXN0Lm1ldGhvZJRqDY8AAHSUjCZ1cmxsaWIucmVxdWVzdC5SZXF1ZXN0Lm9yaWdpbl9yZXFfaG9zdJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuUmVxdWVzdC5vcmlnaW5fcmVxX2hvc3SUag2PAAB0lIwfdXJsbGliLnJlcXVlc3QuUmVxdWVzdC5zZWxlY3RvcpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuUmVxdWVzdC5zZWxlY3RvcpRqDY8AAHSUjBt1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LnR5cGWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlJlcXVlc3QudHlwZZRqDY8AAHSUjCN1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LnVudmVyaWZpYWJsZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuUmVxdWVzdC51bnZlcmlmaWFibGWUag2PAAB0lIwgdXJsbGliLnJlcXVlc3QuVVJMb3BlbmVyLnZlcnNpb26UKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci52ZXJzaW9ulGoNjwAAdJSMEnV1aWQuU2FmZVVVSUQuc2FmZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlNhZmVVVUlELnNhZmWUag2PAAB0lIwVdXVpZC5TYWZlVVVJRC51bmtub3dulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuU2FmZVVVSUQudW5rbm93bpRqDY8AAHSUjBR1dWlkLlNhZmVVVUlELnVuc2FmZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlNhZmVVVUlELnVuc2FmZZRqDY8AAHSUjA91dWlkLlVVSUQuYnl0ZXOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5VVUlELmJ5dGVzlGoNjwAAdJSMEnV1aWQuVVVJRC5ieXRlc19sZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQuYnl0ZXNfbGWUag2PAAB0lIwQdXVpZC5VVUlELmZpZWxkc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQuZmllbGRzlGoNjwAAdJSMDXV1aWQuVVVJRC5oZXiUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5VVUlELmhleJRqDY8AAHSUjA11dWlkLlVVSUQuaW50lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC5pbnSUag2PAAB0lIwRdXVpZC5VVUlELmlzX3NhZmWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5VVUlELmlzX3NhZmWUag2PAAB0lIwNdXVpZC5VVUlELnVybpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUQudXJulGoNjwAAdJSMEXV1aWQuVVVJRC52YXJpYW50lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC52YXJpYW50lGoNjwAAdJSMEXV1aWQuVVVJRC52ZXJzaW9ulChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuVVVJRC52ZXJzaW9ulGoNjwAAdJSMFndlYWtyZWYuZmluYWxpemUuYWxpdmWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5maW5hbGl6ZS5hbGl2ZZRqDY8AAHSUjBd3ZWFrcmVmLmZpbmFsaXplLmF0ZXhpdJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLmZpbmFsaXplLmF0ZXhpdJRqDY8AAHSUjBh3ZWFrcmVmLnJlZi5fX2NhbGxiYWNrX1+UKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5yZWYuX19jYWxsYmFja19flGoNjwAAdJSMJ3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZXJyb3JfYm9keZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmVycm9yX2JvZHmUag2PAAB0lIwqd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9oZWFkZXJzlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZXJyb3JfaGVhZGVyc5RqDY8AAHSUjCl3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmVycm9yX3N0YXR1c5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmVycm9yX3N0YXR1c5RqDY8AAHSUjCl3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmh0dHBfdmVyc2lvbpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmh0dHBfdmVyc2lvbpRqDY8AAHSUjCp3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLm9yaWdpbl9zZXJ2ZXKUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5vcmlnaW5fc2VydmVylGoNjwAAdJSMJ3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIub3NfZW52aXJvbpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLm9zX2Vudmlyb26Uag2PAAB0lIwsd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5zZXJ2ZXJfc29mdHdhcmWUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5zZXJ2ZXJfc29mdHdhcmWUag2PAAB0lIwsd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci50cmFjZWJhY2tfbGltaXSUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci50cmFjZWJhY2tfbGltaXSUag2PAAB0lIwud3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci53c2dpX2ZpbGVfd3JhcHBlcpQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfZmlsZV93cmFwcGVylGoNjwAAdJSMLndzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIud3NnaV9tdWx0aXByb2Nlc3OUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci53c2dpX211bHRpcHJvY2Vzc5RqDY8AAHSUjC13c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfbXVsdGl0aHJlYWSUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci53c2dpX211bHRpdGhyZWFklGoNjwAAdJSMKndzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIud3NnaV9ydW5fb25jZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLndzZ2lfcnVuX29uY2WUag2PAAB0lIwWeG1sLmRvbS5BdHRyLmxvY2FsTmFtZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkF0dHIubG9jYWxOYW1llGoNjwAAdJSMEXhtbC5kb20uQXR0ci5uYW1llChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uQXR0ci5uYW1llGoNjwAAdJSME3htbC5kb20uQXR0ci5wcmVmaXiUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5BdHRyLnByZWZpeJRqDY8AAHSUjBJ4bWwuZG9tLkF0dHIudmFsdWWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5BdHRyLnZhbHVllGoNjwAAdJSMFHhtbC5kb20uQ29tbWVudC5kYXRhlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uQ29tbWVudC5kYXRhlGoNjwAAdJSMIHhtbC5kb20uRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50lGoNjwAAdJSMHXhtbC5kb20uRG9jdW1lbnRUeXBlLmVudGl0aWVzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnRUeXBlLmVudGl0aWVzlGoNjwAAdJSMI3htbC5kb20uRG9jdW1lbnRUeXBlLmludGVybmFsU3Vic2V0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnRUeXBlLmludGVybmFsU3Vic2V0lGoNjwAAdJSMGXhtbC5kb20uRG9jdW1lbnRUeXBlLm5hbWWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudFR5cGUubmFtZZRqDY8AAHSUjB54bWwuZG9tLkRvY3VtZW50VHlwZS5ub3RhdGlvbnOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudFR5cGUubm90YXRpb25zlGoNjwAAdJSMHXhtbC5kb20uRG9jdW1lbnRUeXBlLnB1YmxpY0lklChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnRUeXBlLnB1YmxpY0lklGoNjwAAdJSMHXhtbC5kb20uRG9jdW1lbnRUeXBlLnN5c3RlbUlklChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnRUeXBlLnN5c3RlbUlklGoNjwAAdJSMF3htbC5kb20uRWxlbWVudC50YWdOYW1llChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRWxlbWVudC50YWdOYW1llGoNjwAAdJSMG3htbC5kb20uTmFtZWROb2RlTWFwLmxlbmd0aJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5hbWVkTm9kZU1hcC5sZW5ndGiUag2PAAB0lIwXeG1sLmRvbS5Ob2RlLmF0dHJpYnV0ZXOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmF0dHJpYnV0ZXOUag2PAAB0lIwXeG1sLmRvbS5Ob2RlLmNoaWxkTm9kZXOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmNoaWxkTm9kZXOUag2PAAB0lIwXeG1sLmRvbS5Ob2RlLmZpcnN0Q2hpbGSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmZpcnN0Q2hpbGSUag2PAAB0lIwWeG1sLmRvbS5Ob2RlLmxhc3RDaGlsZJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubGFzdENoaWxklGoNjwAAdJSMFnhtbC5kb20uTm9kZS5sb2NhbE5hbWWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmxvY2FsTmFtZZRqDY8AAHSUjBl4bWwuZG9tLk5vZGUubmFtZXNwYWNlVVJJlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5uYW1lc3BhY2VVUkmUag2PAAB0lIwYeG1sLmRvbS5Ob2RlLm5leHRTaWJsaW5nlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5uZXh0U2libGluZ5RqDY8AAHSUjBV4bWwuZG9tLk5vZGUubm9kZU5hbWWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLm5vZGVOYW1llGoNjwAAdJSMFXhtbC5kb20uTm9kZS5ub2RlVHlwZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubm9kZVR5cGWUag2PAAB0lIwWeG1sLmRvbS5Ob2RlLm5vZGVWYWx1ZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubm9kZVZhbHVllGoNjwAAdJSMF3htbC5kb20uTm9kZS5wYXJlbnROb2RllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5wYXJlbnROb2RllGoNjwAAdJSME3htbC5kb20uTm9kZS5wcmVmaXiUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLnByZWZpeJRqDY8AAHSUjBx4bWwuZG9tLk5vZGUucHJldmlvdXNTaWJsaW5nlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5wcmV2aW91c1NpYmxpbmeUag2PAAB0lIwXeG1sLmRvbS5Ob2RlTGlzdC5sZW5ndGiUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlTGlzdC5sZW5ndGiUag2PAAB0lIwieG1sLmRvbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uZGF0YZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5kYXRhlGoNjwAAdJSMJHhtbC5kb20uUHJvY2Vzc2luZ0luc3RydWN0aW9uLnRhcmdldJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbi50YXJnZXSUag2PAAB0lIwReG1sLmRvbS5UZXh0LmRhdGGUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5UZXh0LmRhdGGUag2PAAB0lIwkeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuYXR0cmlilChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuYXR0cmlilGoNjwAAdJSMIXhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnRhZ5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnRhZ5RqDY8AAHSUjCJ4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC50YWlslChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQudGFpbJRqDY8AAHSUjCJ4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC50ZXh0lChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQudGV4dJRqDY8AAHSUjCV4bWwuZXRyZWUuRWxlbWVudFRyZWUuUGFyc2VFcnJvci5jb2RllChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlBhcnNlRXJyb3IuY29kZZRqDY8AAHSUjCl4bWwuZXRyZWUuRWxlbWVudFRyZWUuUGFyc2VFcnJvci5wb3NpdGlvbpQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5QYXJzZUVycm9yLnBvc2l0aW9ulGoNjwAAdJSMIXhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3IuY29kZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yLmNvZGWUag2PAAB0lIwjeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvci5saW5lbm+UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvci5saW5lbm+Uag2PAAB0lIwjeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvci5vZmZzZXSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvci5vZmZzZXSUag2PAAB0lIwseG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkN1cnJlbnRCeXRlSW5kZXiUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkN1cnJlbnRCeXRlSW5kZXiUag2PAAB0lIwveG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkN1cnJlbnRDb2x1bW5OdW1iZXKUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkN1cnJlbnRDb2x1bW5OdW1iZXKUag2PAAB0lIwteG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVylChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5DdXJyZW50TGluZU51bWJlcpRqDY8AAHSUjCp4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXJyb3JCeXRlSW5kZXiUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yQnl0ZUluZGV4lGoNjwAAdJSMJXhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FcnJvckNvZGWUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yQ29kZZRqDY8AAHSUjC14bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXJyb3JDb2x1bW5OdW1iZXKUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yQ29sdW1uTnVtYmVylGoNjwAAdJSMK3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FcnJvckxpbmVOdW1iZXKUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVycm9yTGluZU51bWJlcpRqDY8AAHSUjCd4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuYnVmZmVyX3NpemWUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLmJ1ZmZlcl9zaXpllGoNjwAAdJSMJ3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5idWZmZXJfdGV4dJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuYnVmZmVyX3RleHSUag2PAAB0lIwneG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLmJ1ZmZlcl91c2VklChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5idWZmZXJfdXNlZJRqDY8AAHSUjC54bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzlChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXOUag2PAAB0lIwweG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzlChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlc5RqDY8AAHSUjBl4bWxycGMuY2xpZW50LkJpbmFyeS5kYXRhlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuQmluYXJ5LmRhdGGUag2PAAB0lIwdeG1scnBjLmNsaWVudC5GYXVsdC5mYXVsdENvZGWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjeG1scnBjLmNsaWVudC5GYXVsdC5mYXVsdENvZGWUag2PAAB0lIwfeG1scnBjLmNsaWVudC5GYXVsdC5mYXVsdFN0cmluZ5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5jbGllbnQuaHRtbCN4bWxycGMuY2xpZW50LkZhdWx0LmZhdWx0U3RyaW5nlGoNjwAAdJSMI3htbHJwYy5jbGllbnQuUHJvdG9jb2xFcnJvci5lcnJjb2RllChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuUHJvdG9jb2xFcnJvci5lcnJjb2RllGoNjwAAdJSMInhtbHJwYy5jbGllbnQuUHJvdG9jb2xFcnJvci5lcnJtc2eUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjeG1scnBjLmNsaWVudC5Qcm90b2NvbEVycm9yLmVycm1zZ5RqDY8AAHSUjCN4bWxycGMuY2xpZW50LlByb3RvY29sRXJyb3IuaGVhZGVyc5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5jbGllbnQuaHRtbCN4bWxycGMuY2xpZW50LlByb3RvY29sRXJyb3IuaGVhZGVyc5RqDY8AAHSUjB94bWxycGMuY2xpZW50LlByb3RvY29sRXJyb3IudXJslChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuUHJvdG9jb2xFcnJvci51cmyUag2PAAB0lIwyeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5ycGNfcGF0aHOUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5ycGNfcGF0aHOUag2PAAB0lIwRemlwZmlsZS5QYXRoLm5hbWWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QYXRoLm5hbWWUag2PAAB0lIwXemlwZmlsZS5aaXBGaWxlLmNvbW1lbnSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmNvbW1lbnSUag2PAAB0lIwVemlwZmlsZS5aaXBGaWxlLmRlYnVnlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5kZWJ1Z5RqDY8AAHSUjBh6aXBmaWxlLlppcEZpbGUuZmlsZW5hbWWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmZpbGVuYW1llGoNjwAAdJSME3ppcGZpbGUuWmlwSW5mby5DUkOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLkNSQ5RqDY8AAHSUjBd6aXBmaWxlLlppcEluZm8uY29tbWVudJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uY29tbWVudJRqDY8AAHSUjB16aXBmaWxlLlppcEluZm8uY29tcHJlc3Nfc2l6ZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uY29tcHJlc3Nfc2l6ZZRqDY8AAHSUjB16aXBmaWxlLlppcEluZm8uY29tcHJlc3NfdHlwZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uY29tcHJlc3NfdHlwZZRqDY8AAHSUjB16aXBmaWxlLlppcEluZm8uY3JlYXRlX3N5c3RlbZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uY3JlYXRlX3N5c3RlbZRqDY8AAHSUjB56aXBmaWxlLlppcEluZm8uY3JlYXRlX3ZlcnNpb26UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmNyZWF0ZV92ZXJzaW9ulGoNjwAAdJSMGXppcGZpbGUuWmlwSW5mby5kYXRlX3RpbWWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmRhdGVfdGltZZRqDY8AAHSUjB16aXBmaWxlLlppcEluZm8uZXh0ZXJuYWxfYXR0cpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEluZm8uZXh0ZXJuYWxfYXR0cpRqDY8AAHSUjBV6aXBmaWxlLlppcEluZm8uZXh0cmGUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmV4dHJhlGoNjwAAdJSMH3ppcGZpbGUuWmlwSW5mby5leHRyYWN0X3ZlcnNpb26UKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmV4dHJhY3RfdmVyc2lvbpRqDY8AAHSUjBl6aXBmaWxlLlppcEluZm8uZmlsZV9zaXpllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5maWxlX3NpemWUag2PAAB0lIwYemlwZmlsZS5aaXBJbmZvLmZpbGVuYW1llChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5maWxlbmFtZZRqDY8AAHSUjBl6aXBmaWxlLlppcEluZm8uZmxhZ19iaXRzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5mbGFnX2JpdHOUag2PAAB0lIwdemlwZmlsZS5aaXBJbmZvLmhlYWRlcl9vZmZzZXSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmhlYWRlcl9vZmZzZXSUag2PAAB0lIwdemlwZmlsZS5aaXBJbmZvLmludGVybmFsX2F0dHKUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmludGVybmFsX2F0dHKUag2PAAB0lIwYemlwZmlsZS5aaXBJbmZvLnJlc2VydmVklChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5yZXNlcnZlZJRqDY8AAHSUjBZ6aXBmaWxlLlppcEluZm8udm9sdW1llChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby52b2x1bWWUag2PAAB0lIwdemlwaW1wb3J0LnppcGltcG9ydGVyLmFyY2hpdmWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuemlwaW1wb3J0ZXIuYXJjaGl2ZZRqDY8AAHSUjBx6aXBpbXBvcnQuemlwaW1wb3J0ZXIucHJlZml4lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LnppcGltcG9ydGVyLnByZWZpeJRqDY8AAHSUjBN6bGliLkRlY29tcHJlc3MuZW9mlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI3psaWIuRGVjb21wcmVzcy5lb2aUag2PAAB0lIwfemxpYi5EZWNvbXByZXNzLnVuY29uc3VtZWRfdGFpbJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3psaWIuaHRtbCN6bGliLkRlY29tcHJlc3MudW5jb25zdW1lZF90YWlslGoNjwAAdJSMG3psaWIuRGVjb21wcmVzcy51bnVzZWRfZGF0YZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3psaWIuaHRtbCN6bGliLkRlY29tcHJlc3MudW51c2VkX2RhdGGUag2PAAB0lHWMCXB5Om1ldGhvZJR9lCiMHEJhc2VFeGNlcHRpb24ud2l0aF90cmFjZWJhY2uUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjQmFzZUV4Y2VwdGlvbi53aXRoX3RyYWNlYmFja5RqDY8AAHSUjBRfdGhyZWFkLmxvY2suYWNxdWlyZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L190aHJlYWQuaHRtbCNfdGhyZWFkLmxvY2suYWNxdWlyZZRqDY8AAHSUjBNfdGhyZWFkLmxvY2subG9ja2VklChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvX3RocmVhZC5odG1sI190aHJlYWQubG9jay5sb2NrZWSUag2PAAB0lIwUX3RocmVhZC5sb2NrLnJlbGVhc2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9fdGhyZWFkLmh0bWwjX3RocmVhZC5sb2NrLnJlbGVhc2WUag2PAAB0lIwcYWJjLkFCQ01ldGEuX19zdWJjbGFzc2hvb2tfX5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FiYy5odG1sI2FiYy5BQkNNZXRhLl9fc3ViY2xhc3Nob29rX1+Uag2PAAB0lIwUYWJjLkFCQ01ldGEucmVnaXN0ZXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hYmMuaHRtbCNhYmMuQUJDTWV0YS5yZWdpc3RlcpRqDY8AAHSUjA5hZ2VuLl9fYW5leHRfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNhZ2VuLl9fYW5leHRfX5RqDY8AAHSUjAthZ2VuLmFjbG9zZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNhZ2VuLmFjbG9zZZRqDY8AAHSUjAphZ2VuLmFzZW5klChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2FnZW4uYXNlbmSUag2PAAB0lIwLYWdlbi5hdGhyb3eUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYWdlbi5hdGhyb3eUag2PAAB0lIwOYWlmYy5haWZjLmFpZmOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmFpZmOUag2PAAB0lIwOYWlmYy5haWZjLmFpZmaUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmFpZmaUag2PAAB0lIwPYWlmYy5haWZjLmNsb3NllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5jbG9zZZRqDY8AAHSUjBVhaWZjLmFpZmMuZ2V0Y29tcG5hbWWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldGNvbXBuYW1llGoNjwAAdJSMFWFpZmMuYWlmYy5nZXRjb21wdHlwZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0Y29tcHR5cGWUag2PAAB0lIwWYWlmYy5haWZjLmdldGZyYW1lcmF0ZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0ZnJhbWVyYXRllGoNjwAAdJSMEWFpZmMuYWlmYy5nZXRtYXJrlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5nZXRtYXJrlGoNjwAAdJSMFGFpZmMuYWlmYy5nZXRtYXJrZXJzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5nZXRtYXJrZXJzlGoNjwAAdJSMFmFpZmMuYWlmYy5nZXRuY2hhbm5lbHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLmdldG5jaGFubmVsc5RqDY8AAHSUjBRhaWZjLmFpZmMuZ2V0bmZyYW1lc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0bmZyYW1lc5RqDY8AAHSUjBNhaWZjLmFpZmMuZ2V0cGFyYW1zlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5nZXRwYXJhbXOUag2PAAB0lIwWYWlmYy5haWZjLmdldHNhbXB3aWR0aJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuZ2V0c2FtcHdpZHRolGoNjwAAdJSMFGFpZmMuYWlmYy5yZWFkZnJhbWVzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5yZWFkZnJhbWVzlGoNjwAAdJSMEGFpZmMuYWlmYy5yZXdpbmSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnJld2luZJRqDY8AAHSUjBVhaWZjLmFpZmMuc2V0Y29tcHR5cGWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldGNvbXB0eXBllGoNjwAAdJSMFmFpZmMuYWlmYy5zZXRmcmFtZXJhdGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldGZyYW1lcmF0ZZRqDY8AAHSUjBFhaWZjLmFpZmMuc2V0bWFya5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuc2V0bWFya5RqDY8AAHSUjBZhaWZjLmFpZmMuc2V0bmNoYW5uZWxzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRuY2hhbm5lbHOUag2PAAB0lIwUYWlmYy5haWZjLnNldG5mcmFtZXOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldG5mcmFtZXOUag2PAAB0lIwTYWlmYy5haWZjLnNldHBhcmFtc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLmFpZmMuc2V0cGFyYW1zlGoNjwAAdJSMEGFpZmMuYWlmYy5zZXRwb3OUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnNldHBvc5RqDY8AAHSUjBZhaWZjLmFpZmMuc2V0c2FtcHdpZHRolChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy5zZXRzYW1wd2lkdGiUlQ0AAQAAAAAAag2PAAB0lIwOYWlmYy5haWZjLnRlbGyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLnRlbGyUag2PAAB0lIwVYWlmYy5haWZjLndyaXRlZnJhbWVzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWlmYy5odG1sI2FpZmMuYWlmYy53cml0ZWZyYW1lc5RqDY8AAHSUjBhhaWZjLmFpZmMud3JpdGVmcmFtZXNyYXeUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWwjYWlmYy5haWZjLndyaXRlZnJhbWVzcmF3lGoNjwAAdJSMJGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudJQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50lGoNjwAAdJSMKmFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwlGoNjwAAdJSMNGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXCUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXCUag2PAAB0lIwmYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuYWRkX3N1YnBhcnNlcnOUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmFkZF9zdWJwYXJzZXJzlGoNjwAAdJSMMGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc5QoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuY29udmVydF9hcmdfbGluZV90b19hcmdzlGoNjwAAdJSMHWFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmVycm9ylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5lcnJvcpRqDY8AAHSUjBxhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5leGl0lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5leGl0lGoNjwAAdJSMI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmZvcm1hdF9oZWxwlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5mb3JtYXRfaGVscJRqDY8AAHSUjCRhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5mb3JtYXRfdXNhZ2WUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLmZvcm1hdF91c2FnZZRqDY8AAHSUjCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5nZXRfZGVmYXVsdJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuZ2V0X2RlZmF1bHSUag2PAAB0lIwiYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc5RqDY8AAHSUjC1hcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5wYXJzZV9pbnRlcm1peGVkX2FyZ3OUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnBhcnNlX2ludGVybWl4ZWRfYXJnc5RqDY8AAHSUjChhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5wYXJzZV9rbm93bl9hcmdzlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci5wYXJzZV9rbm93bl9hcmdzlGoNjwAAdJSMM2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnBhcnNlX2tub3duX2ludGVybWl4ZWRfYXJnc5QoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucGFyc2Vfa25vd25faW50ZXJtaXhlZF9hcmdzlGoNjwAAdJSMImFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnByaW50X2hlbHCUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnByaW50X2hlbHCUag2PAAB0lIwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIucHJpbnRfdXNhZ2WUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnByaW50X3VzYWdllGoNjwAAdJSMJGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLnNldF9kZWZhdWx0c5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnRQYXJzZXIuc2V0X2RlZmF1bHRzlGoNjwAAdJSMEmFycmF5LmFycmF5LmFwcGVuZJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuYXBwZW5klGoNjwAAdJSMF2FycmF5LmFycmF5LmJ1ZmZlcl9pbmZvlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5idWZmZXJfaW5mb5RqDY8AAHSUjBRhcnJheS5hcnJheS5ieXRlc3dhcJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuYnl0ZXN3YXCUag2PAAB0lIwRYXJyYXkuYXJyYXkuY291bnSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LmNvdW50lGoNjwAAdJSMEmFycmF5LmFycmF5LmV4dGVuZJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuZXh0ZW5klGoNjwAAdJSMFWFycmF5LmFycmF5LmZyb21ieXRlc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuZnJvbWJ5dGVzlGoNjwAAdJSMFGFycmF5LmFycmF5LmZyb21maWxllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS5mcm9tZmlsZZRqDY8AAHSUjBRhcnJheS5hcnJheS5mcm9tbGlzdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuZnJvbWxpc3SUag2PAAB0lIwWYXJyYXkuYXJyYXkuZnJvbXN0cmluZ5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuZnJvbXN0cmluZ5RqDY8AAHSUjBdhcnJheS5hcnJheS5mcm9tdW5pY29kZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuZnJvbXVuaWNvZGWUag2PAAB0lIwRYXJyYXkuYXJyYXkuaW5kZXiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LmluZGV4lGoNjwAAdJSMEmFycmF5LmFycmF5Lmluc2VydJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkuaW5zZXJ0lGoNjwAAdJSMD2FycmF5LmFycmF5LnBvcJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkucG9wlGoNjwAAdJSMEmFycmF5LmFycmF5LnJlbW92ZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkucmVtb3ZllGoNjwAAdJSME2FycmF5LmFycmF5LnJldmVyc2WUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LnJldmVyc2WUag2PAAB0lIwTYXJyYXkuYXJyYXkudG9ieXRlc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkudG9ieXRlc5RqDY8AAHSUjBJhcnJheS5hcnJheS50b2ZpbGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LnRvZmlsZZRqDY8AAHSUjBJhcnJheS5hcnJheS50b2xpc3SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5LnRvbGlzdJRqDY8AAHSUjBRhcnJheS5hcnJheS50b3N0cmluZ5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FycmF5Lmh0bWwjYXJyYXkuYXJyYXkudG9zdHJpbmeUag2PAAB0lIwVYXJyYXkuYXJyYXkudG91bmljb2RllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJyYXkuaHRtbCNhcnJheS5hcnJheS50b3VuaWNvZGWUag2PAAB0lIwdYXN0Lk5vZGVWaXNpdG9yLmdlbmVyaWNfdmlzaXSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuTm9kZVZpc2l0b3IuZ2VuZXJpY192aXNpdJRqDY8AAHSUjBVhc3QuTm9kZVZpc2l0b3IudmlzaXSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuTm9kZVZpc2l0b3IudmlzaXSUag2PAAB0lIwjYXN5bmNoYXQuYXN5bmNfY2hhdC5jbG9zZV93aGVuX2RvbmWUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQuY2xvc2Vfd2hlbl9kb25llGoNjwAAdJSMKWFzeW5jaGF0LmFzeW5jX2NoYXQuY29sbGVjdF9pbmNvbWluZ19kYXRhlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0LmNvbGxlY3RfaW5jb21pbmdfZGF0YZRqDY8AAHSUjCNhc3luY2hhdC5hc3luY19jaGF0LmRpc2NhcmRfYnVmZmVyc5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5kaXNjYXJkX2J1ZmZlcnOUag2PAAB0lIwkYXN5bmNoYXQuYXN5bmNfY2hhdC5mb3VuZF90ZXJtaW5hdG9ylChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0LmZvdW5kX3Rlcm1pbmF0b3KUag2PAAB0lIwiYXN5bmNoYXQuYXN5bmNfY2hhdC5nZXRfdGVybWluYXRvcpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5nZXRfdGVybWluYXRvcpRqDY8AAHSUjBhhc3luY2hhdC5hc3luY19jaGF0LnB1c2iUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LmFzeW5jX2NoYXQucHVzaJRqDY8AAHSUjCZhc3luY2hhdC5hc3luY19jaGF0LnB1c2hfd2l0aF9wcm9kdWNlcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoX3dpdGhfcHJvZHVjZXKUag2PAAB0lIwiYXN5bmNoYXQuYXN5bmNfY2hhdC5zZXRfdGVybWluYXRvcpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjYXN5bmNoYXQuYXN5bmNfY2hhdC5zZXRfdGVybWluYXRvcpRqDY8AAHSUjC5hc3luY2lvLkFic3RyYWN0Q2hpbGRXYXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVylChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wb2xpY3kuaHRtbCNhc3luY2lvLkFic3RyYWN0Q2hpbGRXYXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVylGoNjwAAdJSMKGFzeW5jaW8uQWJzdHJhY3RDaGlsZFdhdGNoZXIuYXR0YWNoX2xvb3CUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uQWJzdHJhY3RDaGlsZFdhdGNoZXIuYXR0YWNoX2xvb3CUag2PAAB0lIwiYXN5bmNpby5BYnN0cmFjdENoaWxkV2F0Y2hlci5jbG9zZZQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcG9saWN5Lmh0bWwjYXN5bmNpby5BYnN0cmFjdENoaWxkV2F0Y2hlci5jbG9zZZRqDY8AAHSUjCZhc3luY2lvLkFic3RyYWN0Q2hpbGRXYXRjaGVyLmlzX2FjdGl2ZZQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcG9saWN5Lmh0bWwjYXN5bmNpby5BYnN0cmFjdENoaWxkV2F0Y2hlci5pc19hY3RpdmWUag2PAAB0lIwxYXN5bmNpby5BYnN0cmFjdENoaWxkV2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcpQoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcG9saWN5Lmh0bWwjYXN5bmNpby5BYnN0cmFjdENoaWxkV2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcpRqDY8AAHSUjDFhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wUG9saWN5LmdldF9jaGlsZF93YXRjaGVylChqCo8AAGoLjwAAjGdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wb2xpY3kuaHRtbCNhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wUG9saWN5LmdldF9jaGlsZF93YXRjaGVylGoNjwAAdJSMLmFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3BQb2xpY3kuZ2V0X2V2ZW50X2xvb3CUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uQWJzdHJhY3RFdmVudExvb3BQb2xpY3kuZ2V0X2V2ZW50X2xvb3CUag2PAAB0lIwuYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeS5uZXdfZXZlbnRfbG9vcJQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcG9saWN5Lmh0bWwjYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeS5uZXdfZXZlbnRfbG9vcJRqDY8AAHSUjDFhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wUG9saWN5LnNldF9jaGlsZF93YXRjaGVylChqCo8AAGoLjwAAjGdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wb2xpY3kuaHRtbCNhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wUG9saWN5LnNldF9jaGlsZF93YXRjaGVylGoNjwAAdJSMLmFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3BQb2xpY3kuc2V0X2V2ZW50X2xvb3CUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uQWJzdHJhY3RFdmVudExvb3BQb2xpY3kuc2V0X2V2ZW50X2xvb3CUag2PAAB0lIwkYXN5bmNpby5CYXNlUHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0lChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uQmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbG9zdJRqDY8AAHSUjCRhc3luY2lvLkJhc2VQcm90b2NvbC5jb25uZWN0aW9uX21hZGWUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5CYXNlUHJvdG9jb2wuY29ubmVjdGlvbl9tYWRllGoNjwAAdJSMImFzeW5jaW8uQmFzZVByb3RvY29sLnBhdXNlX3dyaXRpbmeUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5CYXNlUHJvdG9jb2wucGF1c2Vfd3JpdGluZ5RqDY8AAHSUjCNhc3luY2lvLkJhc2VQcm90b2NvbC5yZXN1bWVfd3JpdGluZ5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLkJhc2VQcm90b2NvbC5yZXN1bWVfd3JpdGluZ5RqDY8AAHSUjBthc3luY2lvLkJhc2VUcmFuc3BvcnQuY2xvc2WUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5CYXNlVHJhbnNwb3J0LmNsb3NllGoNjwAAdJSMJGFzeW5jaW8uQmFzZVRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mb5QoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLkJhc2VUcmFuc3BvcnQuZ2V0X2V4dHJhX2luZm+Uag2PAAB0lIwiYXN5bmNpby5CYXNlVHJhbnNwb3J0LmdldF9wcm90b2NvbJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLkJhc2VUcmFuc3BvcnQuZ2V0X3Byb3RvY29slGoNjwAAdJSMIGFzeW5jaW8uQmFzZVRyYW5zcG9ydC5pc19jbG9zaW5nlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uQmFzZVRyYW5zcG9ydC5pc19jbG9zaW5nlGoNjwAAdJSMImFzeW5jaW8uQmFzZVRyYW5zcG9ydC5zZXRfcHJvdG9jb2yUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5CYXNlVHJhbnNwb3J0LnNldF9wcm90b2NvbJRqDY8AAHSUjCdhc3luY2lvLkJ1ZmZlcmVkUHJvdG9jb2wuYnVmZmVyX3VwZGF0ZWSUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5CdWZmZXJlZFByb3RvY29sLmJ1ZmZlcl91cGRhdGVklGoNjwAAdJSMJWFzeW5jaW8uQnVmZmVyZWRQcm90b2NvbC5lb2ZfcmVjZWl2ZWSUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5CdWZmZXJlZFByb3RvY29sLmVvZl9yZWNlaXZlZJRqDY8AAHSUjCNhc3luY2lvLkJ1ZmZlcmVkUHJvdG9jb2wuZ2V0X2J1ZmZlcpQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLkJ1ZmZlcmVkUHJvdG9jb2wuZ2V0X2J1ZmZlcpRqDY8AAHSUjBlhc3luY2lvLkNvbmRpdGlvbi5hY3F1aXJllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5Db25kaXRpb24uYWNxdWlyZZRqDY8AAHSUjBhhc3luY2lvLkNvbmRpdGlvbi5sb2NrZWSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN5bmMuaHRtbCNhc3luY2lvLkNvbmRpdGlvbi5sb2NrZWSUag2PAAB0lIwYYXN5bmNpby5Db25kaXRpb24ubm90aWZ5lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5Db25kaXRpb24ubm90aWZ5lGoNjwAAdJSMHGFzeW5jaW8uQ29uZGl0aW9uLm5vdGlmeV9hbGyUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN5bmMuaHRtbCNhc3luY2lvLkNvbmRpdGlvbi5ub3RpZnlfYWxslGoNjwAAdJSMGWFzeW5jaW8uQ29uZGl0aW9uLnJlbGVhc2WUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN5bmMuaHRtbCNhc3luY2lvLkNvbmRpdGlvbi5yZWxlYXNllGoNjwAAdJSMFmFzeW5jaW8uQ29uZGl0aW9uLndhaXSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN5bmMuaHRtbCNhc3luY2lvLkNvbmRpdGlvbi53YWl0lGoNjwAAdJSMGmFzeW5jaW8uQ29uZGl0aW9uLndhaXRfZm9ylChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5Db25kaXRpb24ud2FpdF9mb3KUag2PAAB0lIwqYXN5bmNpby5EYXRhZ3JhbVByb3RvY29sLmRhdGFncmFtX3JlY2VpdmVklChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZJRqDY8AAHSUjCdhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWSUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5EYXRhZ3JhbVByb3RvY29sLmVycm9yX3JlY2VpdmVklGoNjwAAdJSMH2FzeW5jaW8uRGF0YWdyYW1UcmFuc3BvcnQuYWJvcnSUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5EYXRhZ3JhbVRyYW5zcG9ydC5hYm9ydJRqDY8AAHSUjCBhc3luY2lvLkRhdGFncmFtVHJhbnNwb3J0LnNlbmR0b5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLkRhdGFncmFtVHJhbnNwb3J0LnNlbmR0b5RqDY8AAHSUjBNhc3luY2lvLkV2ZW50LmNsZWFylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5FdmVudC5jbGVhcpRqDY8AAHSUjBRhc3luY2lvLkV2ZW50LmlzX3NldJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3luYy5odG1sI2FzeW5jaW8uRXZlbnQuaXNfc2V0lGoNjwAAdJSMEWFzeW5jaW8uRXZlbnQuc2V0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5FdmVudC5zZXSUag2PAAB0lIwSYXN5bmNpby5FdmVudC53YWl0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5FdmVudC53YWl0lGoNjwAAdJSMIGFzeW5jaW8uRnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1mdXR1cmUuaHRtbCNhc3luY2lvLkZ1dHVyZS5hZGRfZG9uZV9jYWxsYmFja5RqDY8AAHSUjBVhc3luY2lvLkZ1dHVyZS5jYW5jZWyUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWZ1dHVyZS5odG1sI2FzeW5jaW8uRnV0dXJlLmNhbmNlbJRqDY8AAHSUjBhhc3luY2lvLkZ1dHVyZS5jYW5jZWxsZWSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWZ1dHVyZS5odG1sI2FzeW5jaW8uRnV0dXJlLmNhbmNlbGxlZJRqDY8AAHSUjBNhc3luY2lvLkZ1dHVyZS5kb25llChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1mdXR1cmUuaHRtbCNhc3luY2lvLkZ1dHVyZS5kb25llGoNjwAAdJSMGGFzeW5jaW8uRnV0dXJlLmV4Y2VwdGlvbpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZnV0dXJlLmh0bWwjYXN5bmNpby5GdXR1cmUuZXhjZXB0aW9ulGoNjwAAdJSMF2FzeW5jaW8uRnV0dXJlLmdldF9sb29wlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1mdXR1cmUuaHRtbCNhc3luY2lvLkZ1dHVyZS5nZXRfbG9vcJRqDY8AAHSUjCNhc3luY2lvLkZ1dHVyZS5yZW1vdmVfZG9uZV9jYWxsYmFja5QoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZnV0dXJlLmh0bWwjYXN5bmNpby5GdXR1cmUucmVtb3ZlX2RvbmVfY2FsbGJhY2uUag2PAAB0lIwVYXN5bmNpby5GdXR1cmUucmVzdWx0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1mdXR1cmUuaHRtbCNhc3luY2lvLkZ1dHVyZS5yZXN1bHSUag2PAAB0lIwcYXN5bmNpby5GdXR1cmUuc2V0X2V4Y2VwdGlvbpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZnV0dXJlLmh0bWwjYXN5bmNpby5GdXR1cmUuc2V0X2V4Y2VwdGlvbpRqDY8AAHSUjBlhc3luY2lvLkZ1dHVyZS5zZXRfcmVzdWx0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1mdXR1cmUuaHRtbCNhc3luY2lvLkZ1dHVyZS5zZXRfcmVzdWx0lGoNjwAAdJSMFWFzeW5jaW8uSGFuZGxlLmNhbmNlbJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5IYW5kbGUuY2FuY2VslGoNjwAAdJSMGGFzeW5jaW8uSGFuZGxlLmNhbmNlbGxlZJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5IYW5kbGUuY2FuY2VsbGVklGoNjwAAdJSMFGFzeW5jaW8uTG9jay5hY3F1aXJllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5Mb2NrLmFjcXVpcmWUag2PAAB0lIwTYXN5bmNpby5Mb2NrLmxvY2tlZJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3luYy5odG1sI2FzeW5jaW8uTG9jay5sb2NrZWSUag2PAAB0lIwUYXN5bmNpby5Mb2NrLnJlbGVhc2WUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN5bmMuaHRtbCNhc3luY2lvLkxvY2sucmVsZWFzZZRqDY8AAHSUjB5hc3luY2lvLlByb3RvY29sLmRhdGFfcmVjZWl2ZWSUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5Qcm90b2NvbC5kYXRhX3JlY2VpdmVklGoNjwAAdJSMHWFzeW5jaW8uUHJvdG9jb2wuZW9mX3JlY2VpdmVklChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uUHJvdG9jb2wuZW9mX3JlY2VpdmVklGoNjwAAdJSME2FzeW5jaW8uUXVldWUuZW1wdHmUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXF1ZXVlLmh0bWwjYXN5bmNpby5RdWV1ZS5lbXB0eZRqDY8AAHSUjBJhc3luY2lvLlF1ZXVlLmZ1bGyUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXF1ZXVlLmh0bWwjYXN5bmNpby5RdWV1ZS5mdWxslGoNjwAAdJSMEWFzeW5jaW8uUXVldWUuZ2V0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1xdWV1ZS5odG1sI2FzeW5jaW8uUXVldWUuZ2V0lGoNjwAAdJSMGGFzeW5jaW8uUXVldWUuZ2V0X25vd2FpdJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcXVldWUuaHRtbCNhc3luY2lvLlF1ZXVlLmdldF9ub3dhaXSUag2PAAB0lIwSYXN5bmNpby5RdWV1ZS5qb2lulChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1xdWV1ZS5odG1sI2FzeW5jaW8uUXVldWUuam9pbpRqDY8AAHSUjBFhc3luY2lvLlF1ZXVlLnB1dJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcXVldWUuaHRtbCNhc3luY2lvLlF1ZXVlLnB1dJRqDY8AAHSUjBhhc3luY2lvLlF1ZXVlLnB1dF9ub3dhaXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXF1ZXVlLmh0bWwjYXN5bmNpby5RdWV1ZS5wdXRfbm93YWl0lGoNjwAAdJSME2FzeW5jaW8uUXVldWUucXNpemWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXF1ZXVlLmh0bWwjYXN5bmNpby5RdWV1ZS5xc2l6ZZRqDY8AAHSUjBdhc3luY2lvLlF1ZXVlLnRhc2tfZG9uZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcXVldWUuaHRtbCNhc3luY2lvLlF1ZXVlLnRhc2tfZG9uZZRqDY8AAHSUjCBhc3luY2lvLlJlYWRUcmFuc3BvcnQuaXNfcmVhZGluZ5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLlJlYWRUcmFuc3BvcnQuaXNfcmVhZGluZ5RqDY8AAHSUjCNhc3luY2lvLlJlYWRUcmFuc3BvcnQucGF1c2VfcmVhZGluZ5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLlJlYWRUcmFuc3BvcnQucGF1c2VfcmVhZGluZ5RqDY8AAHSUjCRhc3luY2lvLlJlYWRUcmFuc3BvcnQucmVzdW1lX3JlYWRpbmeUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5SZWFkVHJhbnNwb3J0LnJlc3VtZV9yZWFkaW5nlGoNjwAAdJSMGWFzeW5jaW8uU2VtYXBob3JlLmFjcXVpcmWUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN5bmMuaHRtbCNhc3luY2lvLlNlbWFwaG9yZS5hY3F1aXJllGoNjwAAdJSMGGFzeW5jaW8uU2VtYXBob3JlLmxvY2tlZJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3luYy5odG1sI2FzeW5jaW8uU2VtYXBob3JlLmxvY2tlZJRqDY8AAHSUjBlhc3luY2lvLlNlbWFwaG9yZS5yZWxlYXNllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5TZW1hcGhvcmUucmVsZWFzZZRqDY8AAHSUjBRhc3luY2lvLlNlcnZlci5jbG9zZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5TZXJ2ZXIuY2xvc2WUag2PAAB0lIwXYXN5bmNpby5TZXJ2ZXIuZ2V0X2xvb3CUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8uU2VydmVyLmdldF9sb29wlGoNjwAAdJSMGWFzeW5jaW8uU2VydmVyLmlzX3NlcnZpbmeUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8uU2VydmVyLmlzX3NlcnZpbmeUag2PAAB0lIwcYXN5bmNpby5TZXJ2ZXIuc2VydmVfZm9yZXZlcpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5TZXJ2ZXIuc2VydmVfZm9yZXZlcpRqDY8AAHSUjBxhc3luY2lvLlNlcnZlci5zdGFydF9zZXJ2aW5nlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLlNlcnZlci5zdGFydF9zZXJ2aW5nlGoNjwAAdJSMGmFzeW5jaW8uU2VydmVyLndhaXRfY2xvc2VklChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLlNlcnZlci53YWl0X2Nsb3NlZJRqDY8AAHSUjBthc3luY2lvLlN0cmVhbVJlYWRlci5hdF9lb2aUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5odG1sI2FzeW5jaW8uU3RyZWFtUmVhZGVyLmF0X2VvZpRqDY8AAHSUjBlhc3luY2lvLlN0cmVhbVJlYWRlci5yZWFklChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLlN0cmVhbVJlYWRlci5yZWFklGoNjwAAdJSMIGFzeW5jaW8uU3RyZWFtUmVhZGVyLnJlYWRleGFjdGx5lChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLlN0cmVhbVJlYWRlci5yZWFkZXhhY3RseZRqDY8AAHSUjB1hc3luY2lvLlN0cmVhbVJlYWRlci5yZWFkbGluZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby5TdHJlYW1SZWFkZXIucmVhZGxpbmWUag2PAAB0lIweYXN5bmNpby5TdHJlYW1SZWFkZXIucmVhZHVudGlslChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLlN0cmVhbVJlYWRlci5yZWFkdW50aWyUag2PAAB0lIwiYXN5bmNpby5TdHJlYW1Xcml0ZXIuY2FuX3dyaXRlX2VvZpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby5TdHJlYW1Xcml0ZXIuY2FuX3dyaXRlX2VvZpRqDY8AAHSUjBphc3luY2lvLlN0cmVhbVdyaXRlci5jbG9zZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby5TdHJlYW1Xcml0ZXIuY2xvc2WUag2PAAB0lIwaYXN5bmNpby5TdHJlYW1Xcml0ZXIuZHJhaW6UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5odG1sI2FzeW5jaW8uU3RyZWFtV3JpdGVyLmRyYWlulGoNjwAAdJSMI2FzeW5jaW8uU3RyZWFtV3JpdGVyLmdldF9leHRyYV9pbmZvlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLlN0cmVhbVdyaXRlci5nZXRfZXh0cmFfaW5mb5RqDY8AAHSUjB9hc3luY2lvLlN0cmVhbVdyaXRlci5pc19jbG9zaW5nlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLlN0cmVhbVdyaXRlci5pc19jbG9zaW5nlGoNjwAAdJSMIGFzeW5jaW8uU3RyZWFtV3JpdGVyLndhaXRfY2xvc2VklChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLlN0cmVhbVdyaXRlci53YWl0X2Nsb3NlZJRqDY8AAHSUjBphc3luY2lvLlN0cmVhbVdyaXRlci53cml0ZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby5TdHJlYW1Xcml0ZXIud3JpdGWUag2PAAB0lIweYXN5bmNpby5TdHJlYW1Xcml0ZXIud3JpdGVfZW9mlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLlN0cmVhbVdyaXRlci53cml0ZV9lb2aUag2PAAB0lIwfYXN5bmNpby5TdHJlYW1Xcml0ZXIud3JpdGVsaW5lc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby5TdHJlYW1Xcml0ZXIud3JpdGVsaW5lc5RqDY8AAHSUjC9hc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbC5waXBlX2Nvbm5lY3Rpb25fbG9zdJQoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbC5waXBlX2Nvbm5lY3Rpb25fbG9zdJRqDY8AAHSUjC1hc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWSUKGoKjwAAaguPAACMZWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wucGlwZV9kYXRhX3JlY2VpdmVklGoNjwAAdJSMKWFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLnByb2Nlc3NfZXhpdGVklChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLnByb2Nlc3NfZXhpdGVklGoNjwAAdJSMIWFzeW5jaW8uU3VicHJvY2Vzc1RyYW5zcG9ydC5jbG9zZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLlN1YnByb2Nlc3NUcmFuc3BvcnQuY2xvc2WUag2PAAB0lIwjYXN5bmNpby5TdWJwcm9jZXNzVHJhbnNwb3J0LmdldF9waWSUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5TdWJwcm9jZXNzVHJhbnNwb3J0LmdldF9waWSUag2PAAB0lIwuYXN5bmNpby5TdWJwcm9jZXNzVHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydJQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLlN1YnByb2Nlc3NUcmFuc3BvcnQuZ2V0X3BpcGVfdHJhbnNwb3J0lGoNjwAAdJSMKmFzeW5jaW8uU3VicHJvY2Vzc1RyYW5zcG9ydC5nZXRfcmV0dXJuY29kZZQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLlN1YnByb2Nlc3NUcmFuc3BvcnQuZ2V0X3JldHVybmNvZGWUag2PAAB0lIwgYXN5bmNpby5TdWJwcm9jZXNzVHJhbnNwb3J0LmtpbGyUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5TdWJwcm9jZXNzVHJhbnNwb3J0LmtpbGyUag2PAAB0lIwnYXN5bmNpby5TdWJwcm9jZXNzVHJhbnNwb3J0LnNlbmRfc2lnbmFslChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uU3VicHJvY2Vzc1RyYW5zcG9ydC5zZW5kX3NpZ25hbJRqDY8AAHSUjCVhc3luY2lvLlN1YnByb2Nlc3NUcmFuc3BvcnQudGVybWluYXRllChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uU3VicHJvY2Vzc1RyYW5zcG9ydC50ZXJtaW5hdGWUag2PAAB0lIweYXN5bmNpby5UYXNrLmFkZF9kb25lX2NhbGxiYWNrlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby5UYXNrLmFkZF9kb25lX2NhbGxiYWNrlGoNjwAAdJSMFmFzeW5jaW8uVGFzay5hbGxfdGFza3OUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLlRhc2suYWxsX3Rhc2tzlGoNjwAAdJSME2FzeW5jaW8uVGFzay5jYW5jZWyUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLlRhc2suY2FuY2VslGoNjwAAdJSMFmFzeW5jaW8uVGFzay5jYW5jZWxsZWSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLlRhc2suY2FuY2VsbGVklGoNjwAAdJSMGWFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2uUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLlRhc2suY3VycmVudF90YXNrlGoNjwAAdJSMEWFzeW5jaW8uVGFzay5kb25llChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby5UYXNrLmRvbmWUag2PAAB0lIwWYXN5bmNpby5UYXNrLmV4Y2VwdGlvbpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tdGFzay5odG1sI2FzeW5jaW8uVGFzay5leGNlcHRpb26Uag2PAAB0lIwVYXN5bmNpby5UYXNrLmdldF9jb3JvlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby5UYXNrLmdldF9jb3JvlGoNjwAAdJSMFWFzeW5jaW8uVGFzay5nZXRfbmFtZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tdGFzay5odG1sI2FzeW5jaW8uVGFzay5nZXRfbmFtZZRqDY8AAHSUjBZhc3luY2lvLlRhc2suZ2V0X3N0YWNrlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby5UYXNrLmdldF9zdGFja5RqDY8AAHSUjBhhc3luY2lvLlRhc2sucHJpbnRfc3RhY2uUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLlRhc2sucHJpbnRfc3RhY2uUag2PAAB0lIwhYXN5bmNpby5UYXNrLnJlbW92ZV9kb25lX2NhbGxiYWNrlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby5UYXNrLnJlbW92ZV9kb25lX2NhbGxiYWNrlGoNjwAAdJSME2FzeW5jaW8uVGFzay5yZXN1bHSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLlRhc2sucmVzdWx0lGoNjwAAdJSMFWFzeW5jaW8uVGFzay5zZXRfbmFtZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tdGFzay5odG1sI2FzeW5jaW8uVGFzay5zZXRfbmFtZZRqDY8AAHSUjBhhc3luY2lvLlRpbWVySGFuZGxlLndoZW6UKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8uVGltZXJIYW5kbGUud2hlbpRqDY8AAHSUjBxhc3luY2lvLldyaXRlVHJhbnNwb3J0LmFib3J0lChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uV3JpdGVUcmFuc3BvcnQuYWJvcnSUag2PAAB0lIwkYXN5bmNpby5Xcml0ZVRyYW5zcG9ydC5jYW5fd3JpdGVfZW9mlChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uV3JpdGVUcmFuc3BvcnQuY2FuX3dyaXRlX2VvZpRqDY8AAHSUjC5hc3luY2lvLldyaXRlVHJhbnNwb3J0LmdldF93cml0ZV9idWZmZXJfbGltaXRzlChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uV3JpdGVUcmFuc3BvcnQuZ2V0X3dyaXRlX2J1ZmZlcl9saW1pdHOUag2PAAB0lIwsYXN5bmNpby5Xcml0ZVRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX3NpemWUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5Xcml0ZVRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX3NpemWUag2PAAB0lIwuYXN5bmNpby5Xcml0ZVRyYW5zcG9ydC5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0c5QoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLldyaXRlVHJhbnNwb3J0LnNldF93cml0ZV9idWZmZXJfbGltaXRzlGoNjwAAdJSMHGFzeW5jaW8uV3JpdGVUcmFuc3BvcnQud3JpdGWUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5Xcml0ZVRyYW5zcG9ydC53cml0ZZRqDY8AAHSUjCBhc3luY2lvLldyaXRlVHJhbnNwb3J0LndyaXRlX2VvZpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLldyaXRlVHJhbnNwb3J0LndyaXRlX2VvZpRqDY8AAHSUjCFhc3luY2lvLldyaXRlVHJhbnNwb3J0LndyaXRlbGluZXOUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5Xcml0ZVRyYW5zcG9ydC53cml0ZWxpbmVzlGoNjwAAdJSMLmFzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3MuY29tbXVuaWNhdGWUKGoKjwAAaguPAACMaGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MuaHRtbCNhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzLmNvbW11bmljYXRllGoNjwAAdJSMJ2FzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3Mua2lsbJQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5odG1sI2FzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3Mua2lsbJRqDY8AAHSUjC5hc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzLnNlbmRfc2lnbmFslChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLmh0bWwjYXN5bmNpby5hc3luY2lvLnN1YnByb2Nlc3MuUHJvY2Vzcy5zZW5kX3NpZ25hbJRqDY8AAHSUjCxhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzLnRlcm1pbmF0ZZQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5odG1sI2FzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3MudGVybWluYXRllGoNjwAAdJSMJ2FzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3Mud2FpdJQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5odG1sI2FzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3Mud2FpdJRqDY8AAHSUjBdhc3luY2lvLmxvb3AuYWRkX3JlYWRlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmFkZF9yZWFkZXKUag2PAAB0lIwfYXN5bmNpby5sb29wLmFkZF9zaWduYWxfaGFuZGxlcpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmFkZF9zaWduYWxfaGFuZGxlcpRqDY8AAHSUjBdhc3luY2lvLmxvb3AuYWRkX3dyaXRlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmFkZF93cml0ZXKUag2PAAB0lIwUYXN5bmNpby5sb29wLmNhbGxfYXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5jYWxsX2F0lGoNjwAAdJSMI2FzeW5jaW8ubG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVylChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcpRqDY8AAHSUjBdhc3luY2lvLmxvb3AuY2FsbF9sYXRlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmNhbGxfbGF0ZXKUag2PAAB0lIwWYXN5bmNpby5sb29wLmNhbGxfc29vbpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmNhbGxfc29vbpRqDY8AAHSUjCFhc3luY2lvLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmWUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZZRqDY8AAHSUjBJhc3luY2lvLmxvb3AuY2xvc2WUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5jbG9zZZRqDY8AAHSUjCRhc3luY2lvLmxvb3AuY29ubmVjdF9hY2NlcHRlZF9zb2NrZXSUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5jb25uZWN0X2FjY2VwdGVkX3NvY2tldJRqDY8AAHSUjB5hc3luY2lvLmxvb3AuY29ubmVjdF9yZWFkX3BpcGWUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5jb25uZWN0X3JlYWRfcGlwZZRqDY8AAHSUjB9hc3luY2lvLmxvb3AuY29ubmVjdF93cml0ZV9waXBllChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AuY29ubmVjdF93cml0ZV9waXBllGoNjwAAdJSMHmFzeW5jaW8ubG9vcC5jcmVhdGVfY29ubmVjdGlvbpQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmNyZWF0ZV9jb25uZWN0aW9ulGoNjwAAdJSMJWFzeW5jaW8ubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnSUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnSUag2PAAB0lIwaYXN5bmNpby5sb29wLmNyZWF0ZV9mdXR1cmWUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5jcmVhdGVfZnV0dXJllGoNjwAAdJSMGmFzeW5jaW8ubG9vcC5jcmVhdGVfc2VydmVylChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AuY3JlYXRlX3NlcnZlcpRqDY8AAHSUjBhhc3luY2lvLmxvb3AuY3JlYXRlX3Rhc2uUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5jcmVhdGVfdGFza5RqDY8AAHSUjCNhc3luY2lvLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbpQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb26Uag2PAAB0lIwfYXN5bmNpby5sb29wLmNyZWF0ZV91bml4X3NlcnZlcpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmNyZWF0ZV91bml4X3NlcnZlcpRqDY8AAHSUjCZhc3luY2lvLmxvb3AuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcpQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmRlZmF1bHRfZXhjZXB0aW9uX2hhbmRsZXKUag2PAAB0lIwWYXN5bmNpby5sb29wLmdldF9kZWJ1Z5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLmdldF9kZWJ1Z5RqDY8AAHSUjCJhc3luY2lvLmxvb3AuZ2V0X2V4Y2VwdGlvbl9oYW5kbGVylChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AuZ2V0X2V4Y2VwdGlvbl9oYW5kbGVylGoNjwAAdJSMHWFzeW5jaW8ubG9vcC5nZXRfdGFza19mYWN0b3J5lChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AuZ2V0X3Rhc2tfZmFjdG9yeZRqDY8AAHSUjBhhc3luY2lvLmxvb3AuZ2V0YWRkcmluZm+UKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5nZXRhZGRyaW5mb5RqDY8AAHSUjBhhc3luY2lvLmxvb3AuZ2V0bmFtZWluZm+UKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5nZXRuYW1laW5mb5RqDY8AAHSUjBZhc3luY2lvLmxvb3AuaXNfY2xvc2VklChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AuaXNfY2xvc2VklGoNjwAAdJSMF2FzeW5jaW8ubG9vcC5pc19ydW5uaW5nlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AuaXNfcnVubmluZ5RqDY8AAHSUjBphc3luY2lvLmxvb3AucmVtb3ZlX3JlYWRlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnJlbW92ZV9yZWFkZXKUag2PAAB0lIwiYXN5bmNpby5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcpQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcpRqDY8AAHSUjBphc3luY2lvLmxvb3AucmVtb3ZlX3dyaXRlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnJlbW92ZV93cml0ZXKUag2PAAB0lIwYYXN5bmNpby5sb29wLnJ1bl9mb3JldmVylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AucnVuX2ZvcmV2ZXKUag2PAAB0lIwcYXN5bmNpby5sb29wLnJ1bl9pbl9leGVjdXRvcpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnJ1bl9pbl9leGVjdXRvcpRqDY8AAHSUjB9hc3luY2lvLmxvb3AucnVuX3VudGlsX2NvbXBsZXRllChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3AucnVuX3VudGlsX2NvbXBsZXRllGoNjwAAdJSMFWFzeW5jaW8ubG9vcC5zZW5kZmlsZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnNlbmRmaWxllGoNjwAAdJSMFmFzeW5jaW8ubG9vcC5zZXRfZGVidWeUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5zZXRfZGVidWeUag2PAAB0lIwhYXN5bmNpby5sb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9ylChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3KUag2PAAB0lIwiYXN5bmNpby5sb29wLnNldF9leGNlcHRpb25faGFuZGxlcpQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnNldF9leGNlcHRpb25faGFuZGxlcpRqDY8AAHSUjB1hc3luY2lvLmxvb3Auc2V0X3Rhc2tfZmFjdG9yeZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnNldF90YXNrX2ZhY3RvcnmUag2PAAB0lIwfYXN5bmNpby5sb29wLnNodXRkb3duX2FzeW5jZ2Vuc5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnNodXRkb3duX2FzeW5jZ2Vuc5RqDY8AAHSUjBhhc3luY2lvLmxvb3Auc29ja19hY2NlcHSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5zb2NrX2FjY2VwdJRqDY8AAHSUjBlhc3luY2lvLmxvb3Auc29ja19jb25uZWN0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3Auc29ja19jb25uZWN0lGoNjwAAdJSMFmFzeW5jaW8ubG9vcC5zb2NrX3JlY3aUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC5zb2NrX3JlY3aUag2PAAB0lIwbYXN5bmNpby5sb29wLnNvY2tfcmVjdl9pbnRvlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLmxvb3Auc29ja19yZWN2X2ludG+Uag2PAAB0lIwZYXN5bmNpby5sb29wLnNvY2tfc2VuZGFsbJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnNvY2tfc2VuZGFsbJRqDY8AAHSUjBphc3luY2lvLmxvb3Auc29ja19zZW5kZmlsZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnNvY2tfc2VuZGZpbGWUag2PAAB0lIwWYXN5bmNpby5sb29wLnN0YXJ0X3Rsc5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnN0YXJ0X3Rsc5RqDY8AAHSUjBFhc3luY2lvLmxvb3Auc3RvcJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnN0b3CUag2PAAB0lIwcYXN5bmNpby5sb29wLnN1YnByb2Nlc3NfZXhlY5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnN1YnByb2Nlc3NfZXhlY5RqDY8AAHSUjB1hc3luY2lvLmxvb3Auc3VicHJvY2Vzc19zaGVsbJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5sb29wLnN1YnByb2Nlc3Nfc2hlbGyUag2PAAB0lIwRYXN5bmNpby5sb29wLnRpbWWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubG9vcC50aW1llGoNjwAAdJSMGmFzeW5jb3JlLmRpc3BhdGNoZXIuYWNjZXB0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmFjY2VwdJRqDY8AAHSUjBhhc3luY29yZS5kaXNwYXRjaGVyLmJpbmSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIuYmluZJRqDY8AAHSUjBlhc3luY29yZS5kaXNwYXRjaGVyLmNsb3NllChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmNsb3NllGoNjwAAdJSMG2FzeW5jb3JlLmRpc3BhdGNoZXIuY29ubmVjdJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5jb25uZWN0lGoNjwAAdJSMIWFzeW5jb3JlLmRpc3BhdGNoZXIuY3JlYXRlX3NvY2tldJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5jcmVhdGVfc29ja2V0lGoNjwAAdJSMIWFzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2FjY2VwdJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfYWNjZXB0lGoNjwAAdJSMI2FzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2FjY2VwdGVklChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9hY2NlcHRlZJRqDY8AAHSUjCBhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9jbG9zZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfY2xvc2WUag2PAAB0lIwiYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfY29ubmVjdJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfY29ubmVjdJRqDY8AAHSUjCBhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9lcnJvcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfZXJyb3KUag2PAAB0lIwfYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfZXhwdJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5oYW5kbGVfZXhwdJRqDY8AAHSUjB9hc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9yZWFklChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9yZWFklGoNjwAAdJSMIGFzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX3dyaXRllChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV93cml0ZZRqDY8AAHSUjBphc3luY29yZS5kaXNwYXRjaGVyLmxpc3RlbpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5saXN0ZW6Uag2PAAB0lIwcYXN5bmNvcmUuZGlzcGF0Y2hlci5yZWFkYWJsZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZGlzcGF0Y2hlci5yZWFkYWJsZZRqDY8AAHSUjBhhc3luY29yZS5kaXNwYXRjaGVyLnJlY3aUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIucmVjdpRqDY8AAHSUjBhhc3luY29yZS5kaXNwYXRjaGVyLnNlbmSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXIuc2VuZJRqDY8AAHSUjBxhc3luY29yZS5kaXNwYXRjaGVyLndyaXRhYmxllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5kaXNwYXRjaGVyLndyaXRhYmxllGoNjwAAdJSMFmJkYi5CZGIuYnJlYWtfYW55d2hlcmWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmJyZWFrX2FueXdoZXJllGoNjwAAdJSMEmJkYi5CZGIuYnJlYWtfaGVyZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuYnJlYWtfaGVyZZRqDY8AAHSUjA9iZGIuQmRiLmNhbm9uaWOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmNhbm9uaWOUag2PAAB0lIwYYmRiLkJkYi5jbGVhcl9hbGxfYnJlYWtzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5jbGVhcl9hbGxfYnJlYWtzlGoNjwAAdJSMHWJkYi5CZGIuY2xlYXJfYWxsX2ZpbGVfYnJlYWtzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5jbGVhcl9hbGxfZmlsZV9icmVha3OUag2PAAB0lIwYYmRiLkJkYi5jbGVhcl9icGJ5bnVtYmVylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5jbGVhcl9icGJ5bnVtYmVylGoNjwAAdJSME2JkYi5CZGIuY2xlYXJfYnJlYWuUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmNsZWFyX2JyZWFrlGoNjwAAdJSMFWJkYi5CZGIuZGlzcGF0Y2hfY2FsbJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZGlzcGF0Y2hfY2FsbJRqDY8AAHSUjBpiZGIuQmRiLmRpc3BhdGNoX2V4Y2VwdGlvbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZGlzcGF0Y2hfZXhjZXB0aW9ulGoNjwAAdJSMFWJkYi5CZGIuZGlzcGF0Y2hfbGluZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZGlzcGF0Y2hfbGluZZRqDY8AAHSUjBdiZGIuQmRiLmRpc3BhdGNoX3JldHVybpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZGlzcGF0Y2hfcmV0dXJulGoNjwAAdJSMEGJkYi5CZGIuZG9fY2xlYXKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmRvX2NsZWFylGoNjwAAdJSMGmJkYi5CZGIuZm9ybWF0X3N0YWNrX2VudHJ5lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5mb3JtYXRfc3RhY2tfZW50cnmUag2PAAB0lIwWYmRiLkJkYi5nZXRfYWxsX2JyZWFrc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZ2V0X2FsbF9icmVha3OUag2PAAB0lIwWYmRiLkJkYi5nZXRfYnBieW51bWJlcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZ2V0X2JwYnludW1iZXKUag2PAAB0lIwRYmRiLkJkYi5nZXRfYnJlYWuUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmdldF9icmVha5RqDY8AAHSUjBJiZGIuQmRiLmdldF9icmVha3OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmdldF9icmVha3OUag2PAAB0lIwXYmRiLkJkYi5nZXRfZmlsZV9icmVha3OUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLmdldF9maWxlX2JyZWFrc5RqDY8AAHSUjBFiZGIuQmRiLmdldF9zdGFja5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuZ2V0X3N0YWNrlGoNjwAAdJSMDWJkYi5CZGIucmVzZXSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnJlc2V0lGoNjwAAdJSMC2JkYi5CZGIucnVulChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5ydW6Uag2PAAB0lIwPYmRiLkJkYi5ydW5jYWxslChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5ydW5jYWxslGoNjwAAdJSMDmJkYi5CZGIucnVuY3R4lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5ydW5jdHiUag2PAAB0lIwPYmRiLkJkYi5ydW5ldmFslChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5ydW5ldmFslGoNjwAAdJSMEWJkYi5CZGIuc2V0X2JyZWFrlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zZXRfYnJlYWuUag2PAAB0lIwUYmRiLkJkYi5zZXRfY29udGludWWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnNldF9jb250aW51ZZRqDY8AAHSUjBBiZGIuQmRiLnNldF9uZXh0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zZXRfbmV4dJRqDY8AAHSUjBBiZGIuQmRiLnNldF9xdWl0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zZXRfcXVpdJRqDY8AAHSUjBJiZGIuQmRiLnNldF9yZXR1cm6UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnNldF9yZXR1cm6Uag2PAAB0lIwQYmRiLkJkYi5zZXRfc3RlcJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuc2V0X3N0ZXCUag2PAAB0lIwRYmRiLkJkYi5zZXRfdHJhY2WUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnNldF90cmFjZZRqDY8AAHSUjBFiZGIuQmRiLnNldF91bnRpbJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIuc2V0X3VudGlslGoNjwAAdJSMEWJkYi5CZGIuc3RvcF9oZXJllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi5zdG9wX2hlcmWUag2PAAB0lIwWYmRiLkJkYi50cmFjZV9kaXNwYXRjaJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIudHJhY2VfZGlzcGF0Y2iUag2PAAB0lIwRYmRiLkJkYi51c2VyX2NhbGyUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnVzZXJfY2FsbJRqDY8AAHSUjBZiZGIuQmRiLnVzZXJfZXhjZXB0aW9ulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJkYi51c2VyX2V4Y2VwdGlvbpRqDY8AAHSUjBFiZGIuQmRiLnVzZXJfbGluZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CZGIudXNlcl9saW5llGoNjwAAdJSME2JkYi5CZGIudXNlcl9yZXR1cm6UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRiLnVzZXJfcmV0dXJulGoNjwAAdJSMF2JkYi5CcmVha3BvaW50LmJwZm9ybWF0lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJyZWFrcG9pbnQuYnBmb3JtYXSUag2PAAB0lIwWYmRiLkJyZWFrcG9pbnQuYnBwcmludJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5CcmVha3BvaW50LmJwcHJpbnSUag2PAAB0lIwXYmRiLkJyZWFrcG9pbnQuZGVsZXRlTWWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQnJlYWtwb2ludC5kZWxldGVNZZRqDY8AAHSUjBZiZGIuQnJlYWtwb2ludC5kaXNhYmxllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJyZWFrcG9pbnQuZGlzYWJsZZRqDY8AAHSUjBViZGIuQnJlYWtwb2ludC5lbmFibGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQnJlYWtwb2ludC5lbmFibGWUag2PAAB0lIwUYnl0ZWFycmF5LmNhcGl0YWxpemWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5jYXBpdGFsaXpllGoNjwAAdJSMEGJ5dGVhcnJheS5jZW50ZXKUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5jZW50ZXKUag2PAAB0lIwPYnl0ZWFycmF5LmNvdW50lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkuY291bnSUag2PAAB0lIwQYnl0ZWFycmF5LmRlY29kZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LmRlY29kZZRqDY8AAHSUjBJieXRlYXJyYXkuZW5kc3dpdGiUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5lbmRzd2l0aJRqDY8AAHSUjBRieXRlYXJyYXkuZXhwYW5kdGFic5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LmV4cGFuZHRhYnOUag2PAAB0lIwOYnl0ZWFycmF5LmZpbmSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5maW5klGoNjwAAdJSMEWJ5dGVhcnJheS5mcm9taGV4lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkuZnJvbWhleJRqDY8AAHSUjA1ieXRlYXJyYXkuaGV4lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkuaGV4lGoNjwAAdJSMD2J5dGVhcnJheS5pbmRleJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LmluZGV4lGoNjwAAdJSMEWJ5dGVhcnJheS5pc2FsbnVtlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkuaXNhbG51bZRqDY8AAHSUjBFieXRlYXJyYXkuaXNhbHBoYZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LmlzYWxwaGGUag2PAAB0lIwRYnl0ZWFycmF5LmlzYXNjaWmUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5pc2FzY2lplGoNjwAAdJSMEWJ5dGVhcnJheS5pc2RpZ2l0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkuaXNkaWdpdJRqDY8AAHSUjBFieXRlYXJyYXkuaXNsb3dlcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LmlzbG93ZXKUag2PAAB0lIwRYnl0ZWFycmF5Lmlzc3BhY2WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5pc3NwYWNllGoNjwAAdJSMEWJ5dGVhcnJheS5pc3RpdGxllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkuaXN0aXRsZZRqDY8AAHSUjBFieXRlYXJyYXkuaXN1cHBlcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LmlzdXBwZXKUag2PAAB0lIwOYnl0ZWFycmF5LmpvaW6UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5qb2lulGoNjwAAdJSMD2J5dGVhcnJheS5sanVzdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LmxqdXN0lGoNjwAAdJSMD2J5dGVhcnJheS5sb3dlcpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5Lmxvd2VylGoNjwAAdJSMEGJ5dGVhcnJheS5sc3RyaXCUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5sc3RyaXCUag2PAAB0lIwTYnl0ZWFycmF5Lm1ha2V0cmFuc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5Lm1ha2V0cmFuc5RqDY8AAHSUjBNieXRlYXJyYXkucGFydGl0aW9ulChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkucGFydGl0aW9ulGoNjwAAdJSMEWJ5dGVhcnJheS5yZXBsYWNllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkucmVwbGFjZZRqDY8AAHSUjA9ieXRlYXJyYXkucmZpbmSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5yZmluZJRqDY8AAHSUjBBieXRlYXJyYXkucmluZGV4lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkucmluZGV4lGoNjwAAdJSMD2J5dGVhcnJheS5yanVzdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LnJqdXN0lGoNjwAAdJSMFGJ5dGVhcnJheS5ycGFydGl0aW9ulChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkucnBhcnRpdGlvbpRqDY8AAHSUjBBieXRlYXJyYXkucnNwbGl0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkucnNwbGl0lGoNjwAAdJSMEGJ5dGVhcnJheS5yc3RyaXCUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5yc3RyaXCUag2PAAB0lIwPYnl0ZWFycmF5LnNwbGl0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkuc3BsaXSUag2PAAB0lIwUYnl0ZWFycmF5LnNwbGl0bGluZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5zcGxpdGxpbmVzlGoNjwAAdJSMFGJ5dGVhcnJheS5zdGFydHN3aXRolChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkuc3RhcnRzd2l0aJRqDY8AAHSUjA9ieXRlYXJyYXkuc3RyaXCUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5zdHJpcJRqDY8AAHSUjBJieXRlYXJyYXkuc3dhcGNhc2WUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS5zd2FwY2FzZZRqDY8AAHSUjA9ieXRlYXJyYXkudGl0bGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVhcnJheS50aXRsZZRqDY8AAHSUjBNieXRlYXJyYXkudHJhbnNsYXRllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXkudHJhbnNsYXRllGoNjwAAdJSMD2J5dGVhcnJheS51cHBlcpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LnVwcGVylGoNjwAAdJSMD2J5dGVhcnJheS56ZmlsbJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZWFycmF5LnpmaWxslGoNjwAAdJSMEGJ5dGVzLmNhcGl0YWxpemWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmNhcGl0YWxpemWUag2PAAB0lIwMYnl0ZXMuY2VudGVylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5jZW50ZXKUag2PAAB0lIwLYnl0ZXMuY291bnSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmNvdW50lGoNjwAAdJSMDGJ5dGVzLmRlY29kZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuZGVjb2RllGoNjwAAdJSMDmJ5dGVzLmVuZHN3aXRolChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5lbmRzd2l0aJRqDY8AAHSUjBBieXRlcy5leHBhbmR0YWJzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5leHBhbmR0YWJzlGoNjwAAdJSMCmJ5dGVzLmZpbmSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmZpbmSUag2PAAB0lIwNYnl0ZXMuZnJvbWhleJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuZnJvbWhleJRqDY8AAHSUjAlieXRlcy5oZXiUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmhleJRqDY8AAHSUjAtieXRlcy5pbmRleJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuaW5kZXiUag2PAAB0lIwNYnl0ZXMuaXNhbG51bZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuaXNhbG51bZRqDY8AAHSUjA1ieXRlcy5pc2FscGhhlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5pc2FscGhhlGoNjwAAdJSMDWJ5dGVzLmlzYXNjaWmUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmlzYXNjaWmUag2PAAB0lIwNYnl0ZXMuaXNkaWdpdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuaXNkaWdpdJRqDY8AAHSUjA1ieXRlcy5pc2xvd2VylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5pc2xvd2VylGoNjwAAdJSMDWJ5dGVzLmlzc3BhY2WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmlzc3BhY2WUag2PAAB0lIwNYnl0ZXMuaXN0aXRsZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuaXN0aXRsZZRqDY8AAHSUjA1ieXRlcy5pc3VwcGVylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5pc3VwcGVylGoNjwAAdJSMCmJ5dGVzLmpvaW6UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmpvaW6Uag2PAAB0lIwLYnl0ZXMubGp1c3SUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmxqdXN0lGoNjwAAdJSMC2J5dGVzLmxvd2VylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5sb3dlcpRqDY8AAHSUjAxieXRlcy5sc3RyaXCUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLmxzdHJpcJRqDY8AAHSUjA9ieXRlcy5tYWtldHJhbnOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLm1ha2V0cmFuc5RqDY8AAHSUjA9ieXRlcy5wYXJ0aXRpb26UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLnBhcnRpdGlvbpRqDY8AAHSUjA1ieXRlcy5yZXBsYWNllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5yZXBsYWNllGoNjwAAdJSMC2J5dGVzLnJmaW5klChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5yZmluZJRqDY8AAHSUjAxieXRlcy5yaW5kZXiUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLnJpbmRleJRqDY8AAHSUjAtieXRlcy5yanVzdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMucmp1c3SUag2PAAB0lIwQYnl0ZXMucnBhcnRpdGlvbpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMucnBhcnRpdGlvbpRqDY8AAHSUjAxieXRlcy5yc3BsaXSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLnJzcGxpdJRqDY8AAHSUjAxieXRlcy5yc3RyaXCUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLnJzdHJpcJRqDY8AAHSUjAtieXRlcy5zcGxpdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuc3BsaXSUag2PAAB0lIwQYnl0ZXMuc3BsaXRsaW5lc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuc3BsaXRsaW5lc5RqDY8AAHSUjBBieXRlcy5zdGFydHN3aXRolChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5zdGFydHN3aXRolGoNjwAAdJSMC2J5dGVzLnN0cmlwlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy5zdHJpcJRqDY8AAHSUjA5ieXRlcy5zd2FwY2FzZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuc3dhcGNhc2WUag2PAAB0lIwLYnl0ZXMudGl0bGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLnRpdGxllGoNjwAAdJSMD2J5dGVzLnRyYW5zbGF0ZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMudHJhbnNsYXRllGoNjwAAdJSMC2J5dGVzLnVwcGVylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlcy51cHBlcpRqDY8AAHSUjAtieXRlcy56ZmlsbJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMuemZpbGyUag2PAAB0lIwaYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iejIuaHRtbCNiejIuQloyQ29tcHJlc3Nvci5jb21wcmVzc5RqDY8AAHSUjBdiejIuQloyQ29tcHJlc3Nvci5mbHVzaJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJDb21wcmVzc29yLmZsdXNolGoNjwAAdJSMHmJ6Mi5CWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzc5RqDY8AAHSUjBBiejIuQloyRmlsZS5wZWVrlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkZpbGUucGVla5RqDY8AAHSUjCBjYWxlbmRhci5DYWxlbmRhci5pdGVybW9udGhkYXRlc5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXOUag2PAAB0lIwfY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF5c5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF5c5RqDY8AAHSUjCBjYWxlbmRhci5DYWxlbmRhci5pdGVybW9udGhkYXlzMpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF5czKUag2PAAB0lIwgY2FsZW5kYXIuQ2FsZW5kYXIuaXRlcm1vbnRoZGF5czOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLml0ZXJtb250aGRheXMzlGoNjwAAdJSMIGNhbGVuZGFyLkNhbGVuZGFyLml0ZXJtb250aGRheXM0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci5pdGVybW9udGhkYXlzNJRqDY8AAHSUjB5jYWxlbmRhci5DYWxlbmRhci5pdGVyd2Vla2RheXOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLml0ZXJ3ZWVrZGF5c5RqDY8AAHSUjCRjYWxlbmRhci5DYWxlbmRhci5tb250aGRhdGVzY2FsZW5kYXKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLm1vbnRoZGF0ZXNjYWxlbmRhcpRqDY8AAHSUjCRjYWxlbmRhci5DYWxlbmRhci5tb250aGRheXMyY2FsZW5kYXKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLm1vbnRoZGF5czJjYWxlbmRhcpRqDY8AAHSUjCNjYWxlbmRhci5DYWxlbmRhci5tb250aGRheXNjYWxlbmRhcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXIubW9udGhkYXlzY2FsZW5kYXKUag2PAAB0lIwjY2FsZW5kYXIuQ2FsZW5kYXIueWVhcmRhdGVzY2FsZW5kYXKUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkNhbGVuZGFyLnllYXJkYXRlc2NhbGVuZGFylGoNjwAAdJSMI2NhbGVuZGFyLkNhbGVuZGFyLnllYXJkYXlzMmNhbGVuZGFylChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci55ZWFyZGF5czJjYWxlbmRhcpRqDY8AAHSUjCJjYWxlbmRhci5DYWxlbmRhci55ZWFyZGF5c2NhbGVuZGFylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5DYWxlbmRhci55ZWFyZGF5c2NhbGVuZGFylGoNjwAAdJSMIWNhbGVuZGFyLkhUTUxDYWxlbmRhci5mb3JtYXRtb250aJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuSFRNTENhbGVuZGFyLmZvcm1hdG1vbnRolGoNjwAAdJSMIGNhbGVuZGFyLkhUTUxDYWxlbmRhci5mb3JtYXR5ZWFylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0eWVhcpRqDY8AAHSUjCRjYWxlbmRhci5IVE1MQ2FsZW5kYXIuZm9ybWF0eWVhcnBhZ2WUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLkhUTUxDYWxlbmRhci5mb3JtYXR5ZWFycGFnZZRqDY8AAHSUjCFjYWxlbmRhci5UZXh0Q2FsZW5kYXIuZm9ybWF0bW9udGiUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLlRleHRDYWxlbmRhci5mb3JtYXRtb250aJRqDY8AAHSUjCBjYWxlbmRhci5UZXh0Q2FsZW5kYXIuZm9ybWF0eWVhcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuVGV4dENhbGVuZGFyLmZvcm1hdHllYXKUag2PAAB0lIwdY2FsZW5kYXIuVGV4dENhbGVuZGFyLnBybW9udGiUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLlRleHRDYWxlbmRhci5wcm1vbnRolGoNjwAAdJSMHGNhbGVuZGFyLlRleHRDYWxlbmRhci5wcnllYXKUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLlRleHRDYWxlbmRhci5wcnllYXKUag2PAAB0lIwZY2dpLkZpZWxkU3RvcmFnZS5nZXRmaXJzdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NnaS5odG1sI2NnaS5GaWVsZFN0b3JhZ2UuZ2V0Zmlyc3SUag2PAAB0lIwYY2dpLkZpZWxkU3RvcmFnZS5nZXRsaXN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpLmh0bWwjY2dpLkZpZWxkU3RvcmFnZS5nZXRsaXN0lGoNjwAAdJSMEWNodW5rLkNodW5rLmNsb3NllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5jbG9zZZRqDY8AAHSUjBNjaHVuay5DaHVuay5nZXRuYW1llChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5nZXRuYW1llGoNjwAAdJSME2NodW5rLkNodW5rLmdldHNpemWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jaHVuay5odG1sI2NodW5rLkNodW5rLmdldHNpemWUag2PAAB0lIwSY2h1bmsuQ2h1bmsuaXNhdHR5lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5pc2F0dHmUag2PAAB0lIwQY2h1bmsuQ2h1bmsucmVhZJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsucmVhZJRqDY8AAHSUjBBjaHVuay5DaHVuay5zZWVrlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2h1bmsuaHRtbCNjaHVuay5DaHVuay5zZWVrlGoNjwAAdJSMEGNodW5rLkNodW5rLnNraXCUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jaHVuay5odG1sI2NodW5rLkNodW5rLnNraXCUag2PAAB0lIwQY2h1bmsuQ2h1bmsudGVsbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NodW5rLmh0bWwjY2h1bmsuQ2h1bmsudGVsbJRqDY8AAHSUjBdjbGFzcy5fX2luc3RhbmNlY2hlY2tfX5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY2xhc3MuX19pbnN0YW5jZWNoZWNrX1+Uag2PAAB0lIwXY2xhc3MuX19zdWJjbGFzc2NoZWNrX1+UKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2NsYXNzLl9fc3ViY2xhc3NjaGVja19flGoNjwAAdJSMFGNsYXNzLl9fc3ViY2xhc3Nlc19flChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNjbGFzcy5fX3N1YmNsYXNzZXNfX5RqDY8AAHSUjAljbGFzcy5tcm+UKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NsYXNzLm1yb5RqDY8AAHSUjA9jbWQuQ21kLmNtZGxvb3CUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmNtZGxvb3CUag2PAAB0lIwXY21kLkNtZC5jb21wbGV0ZWRlZmF1bHSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmNvbXBsZXRlZGVmYXVsdJRqDY8AAHSUjA9jbWQuQ21kLmRlZmF1bHSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmRlZmF1bHSUag2PAAB0lIwRY21kLkNtZC5lbXB0eWxpbmWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21kLmVtcHR5bGluZZRqDY8AAHSUjA5jbWQuQ21kLm9uZWNtZJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQub25lY21klGoNjwAAdJSMD2NtZC5DbWQucG9zdGNtZJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQucG9zdGNtZJRqDY8AAHSUjBBjbWQuQ21kLnBvc3Rsb29wlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21kLmh0bWwjY21kLkNtZC5wb3N0bG9vcJRqDY8AAHSUjA5jbWQuQ21kLnByZWNtZJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQucHJlY21klGoNjwAAdJSMD2NtZC5DbWQucHJlbG9vcJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC5DbWQucHJlbG9vcJRqDY8AAHSUjCBjb2RlLkludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdJRqDY8AAHSUjBxjb2RlLkludGVyYWN0aXZlQ29uc29sZS5wdXNolChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuSW50ZXJhY3RpdmVDb25zb2xlLnB1c2iUag2PAAB0lIwhY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUucmF3X2lucHV0lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuSW50ZXJhY3RpdmVDb25zb2xlLnJhd19pbnB1dJRqDY8AAHSUjCNjb2RlLkludGVyYWN0aXZlQ29uc29sZS5yZXNldGJ1ZmZlcpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlQ29uc29sZS5yZXNldGJ1ZmZlcpRqDY8AAHSUjCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuY29kZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuY29kZZRqDY8AAHSUjCVjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIucnVuc291cmNllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5ydW5zb3VyY2WUag2PAAB0lIwrY29kZS5JbnRlcmFjdGl2ZUludGVycHJldGVyLnNob3dzeW50YXhlcnJvcpQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIuc2hvd3N5bnRheGVycm9ylGoNjwAAdJSMKWNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5zaG93dHJhY2ViYWNrlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5zaG93dHJhY2ViYWNrlGoNjwAAdJSMIWNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci53cml0ZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXIud3JpdGWUag2PAAB0lIwTY29kZWNzLkNvZGVjLmRlY29kZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5Db2RlYy5kZWNvZGWUag2PAAB0lIwTY29kZWNzLkNvZGVjLmVuY29kZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5Db2RlYy5lbmNvZGWUag2PAAB0lIwgY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlci5kZWNvZGWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLmRlY29kZZRqDY8AAHSUjCJjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLmdldHN0YXRllChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlci5nZXRzdGF0ZZRqDY8AAHSUjB9jb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLnJlc2V0lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlci5yZXNldJRqDY8AAHSUjCJjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLnNldHN0YXRllChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlci5zZXRzdGF0ZZRqDY8AAHSUjCBjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyLmVuY29kZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIuZW5jb2RllGoNjwAAdJSMImNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIuZ2V0c3RhdGWUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyLmdldHN0YXRllGoNjwAAdJSMH2NvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIucmVzZXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyLnJlc2V0lGoNjwAAdJSMImNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIuc2V0c3RhdGWUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyLnNldHN0YXRllGoNjwAAdJSMGGNvZGVjcy5TdHJlYW1SZWFkZXIucmVhZJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1SZWFkZXIucmVhZJRqDY8AAHSUjBxjb2RlY3MuU3RyZWFtUmVhZGVyLnJlYWRsaW5llChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVJlYWRlci5yZWFkbGluZZRqDY8AAHSUjB1jb2RlY3MuU3RyZWFtUmVhZGVyLnJlYWRsaW5lc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1SZWFkZXIucmVhZGxpbmVzlGoNjwAAdJSMGWNvZGVjcy5TdHJlYW1SZWFkZXIucmVzZXSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtUmVhZGVyLnJlc2V0lGoNjwAAdJSMGWNvZGVjcy5TdHJlYW1Xcml0ZXIucmVzZXSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtV3JpdGVyLnJlc2V0lGoNjwAAdJSMGWNvZGVjcy5TdHJlYW1Xcml0ZXIud3JpdGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtV3JpdGVyLndyaXRllGoNjwAAdJSMHmNvZGVjcy5TdHJlYW1Xcml0ZXIud3JpdGVsaW5lc5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1Xcml0ZXIud3JpdGVsaW5lc5RqDY8AAHSUjB5jb2xsZWN0aW9ucy5DaGFpbk1hcC5uZXdfY2hpbGSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkNoYWluTWFwLm5ld19jaGlsZJRqDY8AAHSUjBxjb2xsZWN0aW9ucy5Db3VudGVyLmVsZW1lbnRzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Db3VudGVyLmVsZW1lbnRzlGoNjwAAdJSMHGNvbGxlY3Rpb25zLkNvdW50ZXIuZnJvbWtleXOUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLkNvdW50ZXIuZnJvbWtleXOUag2PAAB0lIwfY29sbGVjdGlvbnMuQ291bnRlci5tb3N0X2NvbW1vbpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuQ291bnRlci5tb3N0X2NvbW1vbpRqDY8AAHSUjBxjb2xsZWN0aW9ucy5Db3VudGVyLnN1YnRyYWN0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Db3VudGVyLnN1YnRyYWN0lGoNjwAAdJSMGmNvbGxlY3Rpb25zLkNvdW50ZXIudXBkYXRllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Db3VudGVyLnVwZGF0ZZRqDY8AAHSUjCNjb2xsZWN0aW9ucy5PcmRlcmVkRGljdC5tb3ZlX3RvX2VuZJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuT3JkZXJlZERpY3QubW92ZV90b19lbmSUag2PAAB0lIwfY29sbGVjdGlvbnMuT3JkZXJlZERpY3QucG9waXRlbZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuT3JkZXJlZERpY3QucG9waXRlbZRqDY8AAHSUjCNjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdC5fX21pc3NpbmdfX5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QuX19taXNzaW5nX1+Uag2PAAB0lIwYY29sbGVjdGlvbnMuZGVxdWUuYXBwZW5klChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5hcHBlbmSUag2PAAB0lIwcY29sbGVjdGlvbnMuZGVxdWUuYXBwZW5kbGVmdJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuYXBwZW5kbGVmdJRqDY8AAHSUjBdjb2xsZWN0aW9ucy5kZXF1ZS5jbGVhcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuY2xlYXKUag2PAAB0lIwWY29sbGVjdGlvbnMuZGVxdWUuY29weZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuY29weZRqDY8AAHSUjBdjb2xsZWN0aW9ucy5kZXF1ZS5jb3VudJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuY291bnSUag2PAAB0lIwYY29sbGVjdGlvbnMuZGVxdWUuZXh0ZW5klChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5leHRlbmSUag2PAAB0lIwcY29sbGVjdGlvbnMuZGVxdWUuZXh0ZW5kbGVmdJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuZXh0ZW5kbGVmdJRqDY8AAHSUjBdjb2xsZWN0aW9ucy5kZXF1ZS5pbmRleJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUuaW5kZXiUag2PAAB0lIwYY29sbGVjdGlvbnMuZGVxdWUuaW5zZXJ0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5pbnNlcnSUag2PAAB0lIwVY29sbGVjdGlvbnMuZGVxdWUucG9wlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5wb3CUag2PAAB0lIwZY29sbGVjdGlvbnMuZGVxdWUucG9wbGVmdJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUucG9wbGVmdJRqDY8AAHSUjBhjb2xsZWN0aW9ucy5kZXF1ZS5yZW1vdmWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlcXVlLnJlbW92ZZRqDY8AAHSUjBljb2xsZWN0aW9ucy5kZXF1ZS5yZXZlcnNllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5kZXF1ZS5yZXZlcnNllGoNjwAAdJSMGGNvbGxlY3Rpb25zLmRlcXVlLnJvdGF0ZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVxdWUucm90YXRllGoNjwAAdJSMImNvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9hc2RpY3SUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9hc2RpY3SUag2PAAB0lIwgY29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX21ha2WUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9tYWtllGoNjwAAdJSMI2NvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9yZXBsYWNllChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5zb21lbmFtZWR0dXBsZS5fcmVwbGFjZZRqDY8AAHSUjB9jb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3IubWFwlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLkV4ZWN1dG9yLm1hcJRqDY8AAHSUjCRjb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3Iuc2h1dGRvd26UKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbCNjb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3Iuc2h1dGRvd26Uag2PAAB0lIwiY29uY3VycmVudC5mdXR1cmVzLkV4ZWN1dG9yLnN1Ym1pdJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5FeGVjdXRvci5zdWJtaXSUag2PAAB0lIwrY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS5hZGRfZG9uZV9jYWxsYmFja5QoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuYWRkX2RvbmVfY2FsbGJhY2uUag2PAAB0lIwgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS5jYW5jZWyUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbCNjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLmNhbmNlbJRqDY8AAHSUjCNjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLmNhbmNlbGxlZJQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuY2FuY2VsbGVklGoNjwAAdJSMHmNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuZG9uZZQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuZG9uZZRqDY8AAHSUjCNjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLmV4Y2VwdGlvbpQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuZXhjZXB0aW9ulGoNjwAAdJSMIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUucmVzdWx0lChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS5yZXN1bHSUag2PAAB0lIwhY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS5ydW5uaW5nlChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS5ydW5uaW5nlGoNjwAAdJSMJ2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuc2V0X2V4Y2VwdGlvbpQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuc2V0X2V4Y2VwdGlvbpRqDY8AAHSUjCRjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLnNldF9yZXN1bHSUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbCNjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLnNldF9yZXN1bHSUag2PAAB0lIw2Y29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS5zZXRfcnVubmluZ19vcl9ub3RpZnlfY2FuY2VslChqCo8AAGoLjwAAjHBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS5zZXRfcnVubmluZ19vcl9ub3RpZnlfY2FuY2VslGoNjwAAdJSMJWNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuYWRkX3NlY3Rpb26UKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLmFkZF9zZWN0aW9ulGoNjwAAdJSMImNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuZGVmYXVsdHOUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLmRlZmF1bHRzlGoNjwAAdJSMHWNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuZ2V0lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5nZXSUag2PAAB0lIwkY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5nZXRib29sZWFulChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5nZXRib29sZWFulGoNjwAAdJSMImNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuZ2V0ZmxvYXSUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLmdldGZsb2F0lGoNjwAAdJSMIGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuZ2V0aW50lChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5nZXRpbnSUag2PAAB0lIwkY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5oYXNfb3B0aW9ulChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5oYXNfb3B0aW9ulGoNjwAAdJSMJWNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuaGFzX3NlY3Rpb26UKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLmhhc19zZWN0aW9ulGoNjwAAdJSMH2NvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuaXRlbXOUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLml0ZW1zlGoNjwAAdJSMIWNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIub3B0aW9uc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI2NvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIub3B0aW9uc5RqDY8AAHSUjCVjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLm9wdGlvbnhmb3JtlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5vcHRpb254Zm9ybZRqDY8AAHSUjB5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWSUag2PAAB0lIwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5yZWFkX2RpY3SUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRfZGljdJRqDY8AAHSUjCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRfZmlsZZQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI2NvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZF9maWxllGoNjwAAdJSMJWNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZF9zdHJpbmeUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRfc3RyaW5nlGoNjwAAdJSMIGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZGZwlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5yZWFkZnCUag2PAAB0lIwnY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5yZW1vdmVfb3B0aW9ulChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5yZW1vdmVfb3B0aW9ulGoNjwAAdJSMKGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVtb3ZlX3NlY3Rpb26UKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlbW92ZV9zZWN0aW9ulGoNjwAAdJSMImNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuc2VjdGlvbnOUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnNlY3Rpb25zlGoNjwAAdJSMHWNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIuc2V0lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5zZXSUag2PAAB0lIwfY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci53cml0ZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI2NvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIud3JpdGWUag2PAAB0lIwoY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5hZGRfc2VjdGlvbpQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI2NvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXIuYWRkX3NlY3Rpb26Uag2PAAB0lIwgY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlci5zZXSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyLnNldJRqDY8AAHSUjBJjb250YWluZXIuX19pdGVyX1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NvbnRhaW5lci5fX2l0ZXJfX5RqDY8AAHSUjCBjb250ZXh0bGliLkFzeW5jRXhpdFN0YWNrLmFjbG9zZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLkFzeW5jRXhpdFN0YWNrLmFjbG9zZZRqDY8AAHSUjC1jb250ZXh0bGliLkFzeW5jRXhpdFN0YWNrLmVudGVyX2FzeW5jX2NvbnRleHSUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0bGliLmh0bWwjY29udGV4dGxpYi5Bc3luY0V4aXRTdGFjay5lbnRlcl9hc3luY19jb250ZXh0lGoNjwAAdJSMLWNvbnRleHRsaWIuQXN5bmNFeGl0U3RhY2sucHVzaF9hc3luY19jYWxsYmFja5QoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLkFzeW5jRXhpdFN0YWNrLnB1c2hfYXN5bmNfY2FsbGJhY2uUag2PAAB0lIwpY29udGV4dGxpYi5Bc3luY0V4aXRTdGFjay5wdXNoX2FzeW5jX2V4aXSUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0bGliLmh0bWwjY29udGV4dGxpYi5Bc3luY0V4aXRTdGFjay5wdXNoX2FzeW5jX2V4aXSUag2PAAB0lIwdY29udGV4dGxpYi5FeGl0U3RhY2suY2FsbGJhY2uUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0bGliLmh0bWwjY29udGV4dGxpYi5FeGl0U3RhY2suY2FsbGJhY2uUag2PAAB0lIwaY29udGV4dGxpYi5FeGl0U3RhY2suY2xvc2WUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0bGliLmh0bWwjY29udGV4dGxpYi5FeGl0U3RhY2suY2xvc2WUag2PAAB0lIwiY29udGV4dGxpYi5FeGl0U3RhY2suZW50ZXJfY29udGV4dJQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLkV4aXRTdGFjay5lbnRlcl9jb250ZXh0lGoNjwAAdJSMHGNvbnRleHRsaWIuRXhpdFN0YWNrLnBvcF9hbGyUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0bGliLmh0bWwjY29udGV4dGxpYi5FeGl0U3RhY2sucG9wX2FsbJRqDY8AAHSUjBljb250ZXh0bGliLkV4aXRTdGFjay5wdXNolChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIuRXhpdFN0YWNrLnB1c2iUag2PAAB0lIwYY29udGV4dG1hbmFnZXIuX19lbnRlcl9flChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNjb250ZXh0bWFuYWdlci5fX2VudGVyX1+Uag2PAAB0lIwXY29udGV4dG1hbmFnZXIuX19leGl0X1+UKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NvbnRleHRtYW5hZ2VyLl9fZXhpdF9flGoNjwAAdJSMGGNvbnRleHR2YXJzLkNvbnRleHQuY29weZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHR2YXJzLmh0bWwjY29udGV4dHZhcnMuQ29udGV4dC5jb3B5lGoNjwAAdJSMF2NvbnRleHR2YXJzLkNvbnRleHQuZ2V0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dHZhcnMuaHRtbCNjb250ZXh0dmFycy5Db250ZXh0LmdldJRqDY8AAHSUjBljb250ZXh0dmFycy5Db250ZXh0Lml0ZW1zlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dHZhcnMuaHRtbCNjb250ZXh0dmFycy5Db250ZXh0Lml0ZW1zlGoNjwAAdJSMGGNvbnRleHR2YXJzLkNvbnRleHQua2V5c5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHR2YXJzLmh0bWwjY29udGV4dHZhcnMuQ29udGV4dC5rZXlzlGoNjwAAdJSMF2NvbnRleHR2YXJzLkNvbnRleHQucnVulChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dHZhcnMuaHRtbCNjb250ZXh0dmFycy5Db250ZXh0LnJ1bpSVGAABAAAAAABqDY8AAHSUjBpjb250ZXh0dmFycy5Db250ZXh0LnZhbHVlc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHR2YXJzLmh0bWwjY29udGV4dHZhcnMuQ29udGV4dC52YWx1ZXOUag2PAAB0lIwaY29udGV4dHZhcnMuQ29udGV4dFZhci5nZXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0dmFycy5odG1sI2NvbnRleHR2YXJzLkNvbnRleHRWYXIuZ2V0lGoNjwAAdJSMHGNvbnRleHR2YXJzLkNvbnRleHRWYXIucmVzZXSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0dmFycy5odG1sI2NvbnRleHR2YXJzLkNvbnRleHRWYXIucmVzZXSUag2PAAB0lIwaY29udGV4dHZhcnMuQ29udGV4dFZhci5zZXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0dmFycy5odG1sI2NvbnRleHR2YXJzLkNvbnRleHRWYXIuc2V0lGoNjwAAdJSMD2Nvcm91dGluZS5jbG9zZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY29yb3V0aW5lLmNsb3NllGoNjwAAdJSMDmNvcm91dGluZS5zZW5klChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNjb3JvdXRpbmUuc2VuZJRqDY8AAHSUjA9jb3JvdXRpbmUudGhyb3eUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2Nvcm91dGluZS50aHJvd5RqDY8AAHSUjBpjc3YuRGljdFdyaXRlci53cml0ZWhlYWRlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWN0V3JpdGVyLndyaXRlaGVhZGVylGoNjwAAdJSMFmNzdi5TbmlmZmVyLmhhc19oZWFkZXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuU25pZmZlci5oYXNfaGVhZGVylGoNjwAAdJSMEWNzdi5TbmlmZmVyLnNuaWZmlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LlNuaWZmZXIuc25pZmaUag2PAAB0lIwWY3N2LmNzdnJlYWRlci5fX25leHRfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3ZyZWFkZXIuX19uZXh0X1+Uag2PAAB0lIwWY3N2LmNzdndyaXRlci53cml0ZXJvd5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5jc3Z3cml0ZXIud3JpdGVyb3eUag2PAAB0lIwXY3N2LmNzdndyaXRlci53cml0ZXJvd3OUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuY3N2d3JpdGVyLndyaXRlcm93c5RqDY8AAHSUjCBjdHlwZXMuTGlicmFyeUxvYWRlci5Mb2FkTGlicmFyeZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5MaWJyYXJ5TG9hZGVyLkxvYWRMaWJyYXJ5lGoNjwAAdJSMGmN0eXBlcy5fQ0RhdGEuZnJvbV9hZGRyZXNzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YS5mcm9tX2FkZHJlc3OUag2PAAB0lIwZY3R5cGVzLl9DRGF0YS5mcm9tX2J1ZmZlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGEuZnJvbV9idWZmZXKUag2PAAB0lIweY3R5cGVzLl9DRGF0YS5mcm9tX2J1ZmZlcl9jb3B5lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YS5mcm9tX2J1ZmZlcl9jb3B5lGoNjwAAdJSMGGN0eXBlcy5fQ0RhdGEuZnJvbV9wYXJhbZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGEuZnJvbV9wYXJhbZRqDY8AAHSUjBRjdHlwZXMuX0NEYXRhLmluX2RsbJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5fQ0RhdGEuaW5fZGxslGoNjwAAdJSMGGN1cnNlcy5wYW5lbC5QYW5lbC5hYm92ZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5hYm92ZZRqDY8AAHSUjBhjdXJzZXMucGFuZWwuUGFuZWwuYmVsb3eUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwuYmVsb3eUag2PAAB0lIwZY3Vyc2VzLnBhbmVsLlBhbmVsLmJvdHRvbZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5ib3R0b22Uag2PAAB0lIwZY3Vyc2VzLnBhbmVsLlBhbmVsLmhpZGRlbpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5oaWRkZW6Uag2PAAB0lIwXY3Vyc2VzLnBhbmVsLlBhbmVsLmhpZGWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwuaGlkZZRqDY8AAHSUjBdjdXJzZXMucGFuZWwuUGFuZWwubW92ZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC5tb3ZllGoNjwAAdJSMGmN1cnNlcy5wYW5lbC5QYW5lbC5yZXBsYWNllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLnJlcGxhY2WUag2PAAB0lIweY3Vyc2VzLnBhbmVsLlBhbmVsLnNldF91c2VycHRylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLnNldF91c2VycHRylGoNjwAAdJSMF2N1cnNlcy5wYW5lbC5QYW5lbC5zaG93lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLnNob3eUag2PAAB0lIwWY3Vyc2VzLnBhbmVsLlBhbmVsLnRvcJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5QYW5lbC50b3CUag2PAAB0lIwaY3Vyc2VzLnBhbmVsLlBhbmVsLnVzZXJwdHKUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwuUGFuZWwudXNlcnB0cpRqDY8AAHSUjBljdXJzZXMucGFuZWwuUGFuZWwud2luZG93lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjY3Vyc2VzLnBhbmVsLlBhbmVsLndpbmRvd5RqDY8AAHSUjCFjdXJzZXMudGV4dHBhZC5UZXh0Ym94LmRvX2NvbW1hbmSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5UZXh0Ym94LmRvX2NvbW1hbmSUag2PAAB0lIwbY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5lZGl0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5lZGl0lGoNjwAAdJSMHWN1cnNlcy50ZXh0cGFkLlRleHRib3guZ2F0aGVylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRleHRwYWQuVGV4dGJveC5nYXRoZXKUag2PAAB0lIwTY3Vyc2VzLndpbmRvdy5hZGRjaJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuYWRkY2iUag2PAAB0lIwVY3Vyc2VzLndpbmRvdy5hZGRuc3RylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hZGRuc3RylGoNjwAAdJSMFGN1cnNlcy53aW5kb3cuYWRkc3RylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hZGRzdHKUag2PAAB0lIwVY3Vyc2VzLndpbmRvdy5hdHRyb2ZmlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hdHRyb2ZmlGoNjwAAdJSMFGN1cnNlcy53aW5kb3cuYXR0cm9ulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hdHRyb26Uag2PAAB0lIwVY3Vyc2VzLndpbmRvdy5hdHRyc2V0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5hdHRyc2V0lGoNjwAAdJSMEmN1cnNlcy53aW5kb3cuYmtnZJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuYmtnZJRqDY8AAHSUjBVjdXJzZXMud2luZG93LmJrZ2RzZXSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmJrZ2RzZXSUag2PAAB0lIwUY3Vyc2VzLndpbmRvdy5ib3JkZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmJvcmRlcpRqDY8AAHSUjBFjdXJzZXMud2luZG93LmJveJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuYm94lGoNjwAAdJSME2N1cnNlcy53aW5kb3cuY2hnYXSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmNoZ2F0lGoNjwAAdJSME2N1cnNlcy53aW5kb3cuY2xlYXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmNsZWFylGoNjwAAdJSMFWN1cnNlcy53aW5kb3cuY2xlYXJva5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuY2xlYXJva5RqDY8AAHSUjBZjdXJzZXMud2luZG93LmNscnRvYm90lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5jbHJ0b2JvdJRqDY8AAHSUjBZjdXJzZXMud2luZG93LmNscnRvZW9slChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5jbHJ0b2VvbJRqDY8AAHSUjBdjdXJzZXMud2luZG93LmN1cnN5bmN1cJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuY3Vyc3luY3VwlGoNjwAAdJSME2N1cnNlcy53aW5kb3cuZGVsY2iUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmRlbGNolGoNjwAAdJSMFmN1cnNlcy53aW5kb3cuZGVsZXRlbG6UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmRlbGV0ZWxulGoNjwAAdJSMFGN1cnNlcy53aW5kb3cuZGVyd2lulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5kZXJ3aW6Uag2PAAB0lIwWY3Vyc2VzLndpbmRvdy5lY2hvY2hhcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZWNob2NoYXKUag2PAAB0lIwVY3Vyc2VzLndpbmRvdy5lbmNsb3NllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5lbmNsb3NllGoNjwAAdJSME2N1cnNlcy53aW5kb3cuZXJhc2WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmVyYXNllGoNjwAAdJSMFWN1cnNlcy53aW5kb3cuZ2V0X3djaJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZ2V0X3djaJRqDY8AAHSUjBZjdXJzZXMud2luZG93LmdldGJlZ3l4lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRiZWd5eJRqDY8AAHSUjBVjdXJzZXMud2luZG93LmdldGJrZ2SUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmdldGJrZ2SUag2PAAB0lIwTY3Vyc2VzLndpbmRvdy5nZXRjaJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZ2V0Y2iUag2PAAB0lIwUY3Vyc2VzLndpbmRvdy5nZXRrZXmUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmdldGtleZRqDY8AAHSUjBZjdXJzZXMud2luZG93LmdldG1heHl4lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRtYXh5eJRqDY8AAHSUjBZjdXJzZXMud2luZG93LmdldHBhcnl4lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5nZXRwYXJ5eJRqDY8AAHSUjBRjdXJzZXMud2luZG93LmdldHN0cpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuZ2V0c3RylGoNjwAAdJSME2N1cnNlcy53aW5kb3cuZ2V0eXiUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmdldHl4lGoNjwAAdJSME2N1cnNlcy53aW5kb3cuaGxpbmWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmhsaW5llGoNjwAAdJSME2N1cnNlcy53aW5kb3cuaWRjb2uUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmlkY29rlGoNjwAAdJSME2N1cnNlcy53aW5kb3cuaWRsb2uUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmlkbG9rlGoNjwAAdJSMFWN1cnNlcy53aW5kb3cuaW1tZWRva5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW1tZWRva5RqDY8AAHSUjBJjdXJzZXMud2luZG93LmluY2iUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LmluY2iUag2PAAB0lIwTY3Vyc2VzLndpbmRvdy5pbnNjaJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW5zY2iUag2PAAB0lIwWY3Vyc2VzLndpbmRvdy5pbnNkZWxsbpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW5zZGVsbG6Uag2PAAB0lIwWY3Vyc2VzLndpbmRvdy5pbnNlcnRsbpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW5zZXJ0bG6Uag2PAAB0lIwVY3Vyc2VzLndpbmRvdy5pbnNuc3RylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbnNuc3RylGoNjwAAdJSMFGN1cnNlcy53aW5kb3cuaW5zc3RylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pbnNzdHKUag2PAAB0lIwTY3Vyc2VzLndpbmRvdy5pbnN0cpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaW5zdHKUag2PAAB0lIwcY3Vyc2VzLndpbmRvdy5pc19saW5ldG91Y2hlZJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuaXNfbGluZXRvdWNoZWSUag2PAAB0lIwbY3Vyc2VzLndpbmRvdy5pc193aW50b3VjaGVklChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5pc193aW50b3VjaGVklGoNjwAAdJSMFGN1cnNlcy53aW5kb3cua2V5cGFklChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5rZXlwYWSUag2PAAB0lIwVY3Vyc2VzLndpbmRvdy5sZWF2ZW9rlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5sZWF2ZW9rlGoNjwAAdJSMEmN1cnNlcy53aW5kb3cubW92ZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cubW92ZZRqDY8AAHSUjBZjdXJzZXMud2luZG93Lm12ZGVyd2lulChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5tdmRlcndpbpRqDY8AAHSUjBNjdXJzZXMud2luZG93Lm12d2lulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5tdndpbpRqDY8AAHSUjBVjdXJzZXMud2luZG93Lm5vZGVsYXmUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lm5vZGVsYXmUag2PAAB0lIwXY3Vyc2VzLndpbmRvdy5ub3RpbWVvdXSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lm5vdGltZW91dJRqDY8AAHSUjBljdXJzZXMud2luZG93Lm5vdXRyZWZyZXNolChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5ub3V0cmVmcmVzaJRqDY8AAHSUjBVjdXJzZXMud2luZG93Lm92ZXJsYXmUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lm92ZXJsYXmUag2PAAB0lIwXY3Vyc2VzLndpbmRvdy5vdmVyd3JpdGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93Lm92ZXJ3cml0ZZRqDY8AAHSUjBRjdXJzZXMud2luZG93LnB1dHdpbpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cucHV0d2lulGoNjwAAdJSMFmN1cnNlcy53aW5kb3cucmVkcmF3bG6UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnJlZHJhd2xulGoNjwAAdJSMF2N1cnNlcy53aW5kb3cucmVkcmF3d2lulChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5yZWRyYXd3aW6Uag2PAAB0lIwVY3Vyc2VzLndpbmRvdy5yZWZyZXNolChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5yZWZyZXNolGoNjwAAdJSMFGN1cnNlcy53aW5kb3cucmVzaXpllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5yZXNpemWUag2PAAB0lIwUY3Vyc2VzLndpbmRvdy5zY3JvbGyUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnNjcm9sbJRqDY8AAHSUjBZjdXJzZXMud2luZG93LnNjcm9sbG9rlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zY3JvbGxva5RqDY8AAHSUjBdjdXJzZXMud2luZG93LnNldHNjcnJlZ5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuc2V0c2NycmVnlGoNjwAAdJSMFmN1cnNlcy53aW5kb3cuc3RhbmRlbmSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnN0YW5kZW5klGoNjwAAdJSMFmN1cnNlcy53aW5kb3cuc3RhbmRvdXSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnN0YW5kb3V0lGoNjwAAdJSMFGN1cnNlcy53aW5kb3cuc3VicGFklChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zdWJwYWSUag2PAAB0lIwUY3Vyc2VzLndpbmRvdy5zdWJ3aW6UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnN1YndpbpRqDY8AAHSUjBZjdXJzZXMud2luZG93LnN5bmNkb3dulChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zeW5jZG93bpRqDY8AAHSUjBRjdXJzZXMud2luZG93LnN5bmNva5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cuc3luY29rlGoNjwAAdJSMFGN1cnNlcy53aW5kb3cuc3luY3VwlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy5zeW5jdXCUag2PAAB0lIwVY3Vyc2VzLndpbmRvdy50aW1lb3V0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy50aW1lb3V0lGoNjwAAdJSMF2N1cnNlcy53aW5kb3cudG91Y2hsaW5llChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy50b3VjaGxpbmWUag2PAAB0lIwWY3Vyc2VzLndpbmRvdy50b3VjaHdpbpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy53aW5kb3cudG91Y2h3aW6Uag2PAAB0lIwYY3Vyc2VzLndpbmRvdy51bnRvdWNod2lulChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndpbmRvdy51bnRvdWNod2lulGoNjwAAdJSME2N1cnNlcy53aW5kb3cudmxpbmWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMud2luZG93LnZsaW5llGoNjwAAdJSMGGRhdGV0aW1lLmRhdGUuX19mb3JtYXRfX5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5fX2Zvcm1hdF9flGoNjwAAdJSMFWRhdGV0aW1lLmRhdGUuX19zdHJfX5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5fX3N0cl9flGoNjwAAdJSME2RhdGV0aW1lLmRhdGUuY3RpbWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuY3RpbWWUag2PAAB0lIwdZGF0ZXRpbWUuZGF0ZS5mcm9taXNvY2FsZW5kYXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuZnJvbWlzb2NhbGVuZGFylGoNjwAAdJSMG2RhdGV0aW1lLmRhdGUuZnJvbWlzb2Zvcm1hdJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5mcm9taXNvZm9ybWF0lGoNjwAAdJSMGWRhdGV0aW1lLmRhdGUuZnJvbW9yZGluYWyUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUuZnJvbW9yZGluYWyUag2PAAB0lIwbZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXCUag2PAAB0lIwZZGF0ZXRpbWUuZGF0ZS5pc29jYWxlbmRhcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5pc29jYWxlbmRhcpRqDY8AAHSUjBdkYXRldGltZS5kYXRlLmlzb2Zvcm1hdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5pc29mb3JtYXSUag2PAAB0lIwYZGF0ZXRpbWUuZGF0ZS5pc293ZWVrZGF5lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLmlzb3dlZWtkYXmUag2PAAB0lIwVZGF0ZXRpbWUuZGF0ZS5yZXBsYWNllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnJlcGxhY2WUag2PAAB0lIwWZGF0ZXRpbWUuZGF0ZS5zdHJmdGltZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS5zdHJmdGltZZRqDY8AAHSUjBdkYXRldGltZS5kYXRlLnRpbWV0dXBsZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS50aW1ldHVwbGWUag2PAAB0lIwTZGF0ZXRpbWUuZGF0ZS50b2RheZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS50b2RheZRqDY8AAHSUjBdkYXRldGltZS5kYXRlLnRvb3JkaW5hbJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZS50b29yZGluYWyUag2PAAB0lIwVZGF0ZXRpbWUuZGF0ZS53ZWVrZGF5lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLndlZWtkYXmUag2PAAB0lIwcZGF0ZXRpbWUuZGF0ZXRpbWUuX19mb3JtYXRfX5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuX19mb3JtYXRfX5RqDY8AAHSUjBlkYXRldGltZS5kYXRldGltZS5fX3N0cl9flChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5fX3N0cl9flGoNjwAAdJSMHGRhdGV0aW1lLmRhdGV0aW1lLmFzdGltZXpvbmWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmFzdGltZXpvbmWUag2PAAB0lIwZZGF0ZXRpbWUuZGF0ZXRpbWUuY29tYmluZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuY29tYmluZZRqDY8AAHSUjBdkYXRldGltZS5kYXRldGltZS5jdGltZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuY3RpbWWUag2PAAB0lIwWZGF0ZXRpbWUuZGF0ZXRpbWUuZGF0ZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUuZGF0ZZRqDY8AAHSUjBVkYXRldGltZS5kYXRldGltZS5kc3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmRzdJRqDY8AAHSUjCFkYXRldGltZS5kYXRldGltZS5mcm9taXNvY2FsZW5kYXKUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29jYWxlbmRhcpRqDY8AAHSUjB9kYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0lGoNjwAAdJSMHWRhdGV0aW1lLmRhdGV0aW1lLmZyb21vcmRpbmFslChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5mcm9tb3JkaW5hbJRqDY8AAHSUjB9kYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wlGoNjwAAdJSMHWRhdGV0aW1lLmRhdGV0aW1lLmlzb2NhbGVuZGFylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5pc29jYWxlbmRhcpRqDY8AAHSUjBtkYXRldGltZS5kYXRldGltZS5pc29mb3JtYXSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLmlzb2Zvcm1hdJRqDY8AAHSUjBxkYXRldGltZS5kYXRldGltZS5pc293ZWVrZGF5lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5pc293ZWVrZGF5lGoNjwAAdJSMFWRhdGV0aW1lLmRhdGV0aW1lLm5vd5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUubm93lGoNjwAAdJSMGWRhdGV0aW1lLmRhdGV0aW1lLnJlcGxhY2WUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnJlcGxhY2WUag2PAAB0lIwaZGF0ZXRpbWUuZGF0ZXRpbWUuc3RyZnRpbWWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnN0cmZ0aW1llGoNjwAAdJSMGmRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1llChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS5zdHJwdGltZZRqDY8AAHSUjBZkYXRldGltZS5kYXRldGltZS50aW1llChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50aW1llGoNjwAAdJSMG2RhdGV0aW1lLmRhdGV0aW1lLnRpbWVzdGFtcJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudGltZXN0YW1wlGoNjwAAdJSMG2RhdGV0aW1lLmRhdGV0aW1lLnRpbWV0dXBsZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudGltZXR1cGxllGoNjwAAdJSMGGRhdGV0aW1lLmRhdGV0aW1lLnRpbWV0epQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudGltZXR6lGoNjwAAdJSMF2RhdGV0aW1lLmRhdGV0aW1lLnRvZGF5lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS50b2RheZRqDY8AAHSUjBtkYXRldGltZS5kYXRldGltZS50b29yZGluYWyUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnRvb3JkaW5hbJRqDY8AAHSUjBhkYXRldGltZS5kYXRldGltZS50em5hbWWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLnR6bmFtZZRqDY8AAHSUjCJkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wlGoNjwAAdJSMGGRhdGV0aW1lLmRhdGV0aW1lLnV0Y25vd5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudXRjbm93lGoNjwAAdJSMG2RhdGV0aW1lLmRhdGV0aW1lLnV0Y29mZnNldJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudXRjb2Zmc2V0lGoNjwAAdJSMHmRhdGV0aW1lLmRhdGV0aW1lLnV0Y3RpbWV0dXBsZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuZGF0ZXRpbWUudXRjdGltZXR1cGxllGoNjwAAdJSMGWRhdGV0aW1lLmRhdGV0aW1lLndlZWtkYXmUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGV0aW1lLndlZWtkYXmUag2PAAB0lIwYZGF0ZXRpbWUudGltZS5fX2Zvcm1hdF9flChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLl9fZm9ybWF0X1+Uag2PAAB0lIwVZGF0ZXRpbWUudGltZS5fX3N0cl9flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLl9fc3RyX1+Uag2PAAB0lIwRZGF0ZXRpbWUudGltZS5kc3SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUuZHN0lGoNjwAAdJSMG2RhdGV0aW1lLnRpbWUuZnJvbWlzb2Zvcm1hdJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS5mcm9taXNvZm9ybWF0lGoNjwAAdJSMF2RhdGV0aW1lLnRpbWUuaXNvZm9ybWF0lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLmlzb2Zvcm1hdJRqDY8AAHSUjBVkYXRldGltZS50aW1lLnJlcGxhY2WUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWUucmVwbGFjZZRqDY8AAHSUjBZkYXRldGltZS50aW1lLnN0cmZ0aW1llChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnN0cmZ0aW1llGoNjwAAdJSMFGRhdGV0aW1lLnRpbWUudHpuYW1llChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lLnR6bmFtZZRqDY8AAHSUjBdkYXRldGltZS50aW1lLnV0Y29mZnNldJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZS51dGNvZmZzZXSUag2PAAB0lIwgZGF0ZXRpbWUudGltZWRlbHRhLnRvdGFsX3NlY29uZHOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWVkZWx0YS50b3RhbF9zZWNvbmRzlGoNjwAAdJSMFWRhdGV0aW1lLnRpbWV6b25lLmRzdJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZXpvbmUuZHN0lGoNjwAAdJSMGWRhdGV0aW1lLnRpbWV6b25lLmZyb211dGOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnRpbWV6b25lLmZyb211dGOUag2PAAB0lIwYZGF0ZXRpbWUudGltZXpvbmUudHpuYW1llChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lem9uZS50em5hbWWUag2PAAB0lIwbZGF0ZXRpbWUudGltZXpvbmUudXRjb2Zmc2V0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lem9uZS51dGNvZmZzZXSUag2PAAB0lIwTZGF0ZXRpbWUudHppbmZvLmRzdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudHppbmZvLmRzdJRqDY8AAHSUjBdkYXRldGltZS50emluZm8uZnJvbXV0Y5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudHppbmZvLmZyb211dGOUag2PAAB0lIwWZGF0ZXRpbWUudHppbmZvLnR6bmFtZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudHppbmZvLnR6bmFtZZRqDY8AAHSUjBlkYXRldGltZS50emluZm8udXRjb2Zmc2V0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50emluZm8udXRjb2Zmc2V0lGoNjwAAdJSMFmRibS5kdW1iLmR1bWJkYm0uY2xvc2WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0uZHVtYi5kdW1iZGJtLmNsb3NllGoNjwAAdJSMFWRibS5kdW1iLmR1bWJkYm0uc3luY5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RibS5odG1sI2RibS5kdW1iLmR1bWJkYm0uc3luY5RqDY8AAHSUjBJkYm0uZ251LmdkYm0uY2xvc2WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0uZ251LmdkYm0uY2xvc2WUag2PAAB0lIwVZGJtLmdudS5nZGJtLmZpcnN0a2V5lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGJtLmh0bWwjZGJtLmdudS5nZGJtLmZpcnN0a2V5lGoNjwAAdJSMFGRibS5nbnUuZ2RibS5uZXh0a2V5lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGJtLmh0bWwjZGJtLmdudS5nZGJtLm5leHRrZXmUag2PAAB0lIwXZGJtLmdudS5nZGJtLnJlb3JnYW5pemWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0uZ251LmdkYm0ucmVvcmdhbml6ZZRqDY8AAHSUjBFkYm0uZ251LmdkYm0uc3luY5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RibS5odG1sI2RibS5nbnUuZ2RibS5zeW5jlGoNjwAAdJSME2RibS5uZGJtLm5kYm0uY2xvc2WUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0ubmRibS5uZGJtLmNsb3NllGoNjwAAdJSMFWRlY2ltYWwuQ29udGV4dC5FdGlueZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuRXRpbnmUag2PAAB0lIwUZGVjaW1hbC5Db250ZXh0LkV0b3CUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LkV0b3CUag2PAAB0lIwTZGVjaW1hbC5Db250ZXh0LmFic5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuYWJzlGoNjwAAdJSME2RlY2ltYWwuQ29udGV4dC5hZGSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmFkZJRqDY8AAHSUjBlkZWNpbWFsLkNvbnRleHQuY2Fub25pY2FslChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jYW5vbmljYWyUag2PAAB0lIwbZGVjaW1hbC5Db250ZXh0LmNsZWFyX2ZsYWdzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jbGVhcl9mbGFnc5RqDY8AAHSUjBtkZWNpbWFsLkNvbnRleHQuY2xlYXJfdHJhcHOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNsZWFyX3RyYXBzlGoNjwAAdJSMF2RlY2ltYWwuQ29udGV4dC5jb21wYXJllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jb21wYXJllGoNjwAAdJSMHmRlY2ltYWwuQ29udGV4dC5jb21wYXJlX3NpZ25hbJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29tcGFyZV9zaWduYWyUag2PAAB0lIwdZGVjaW1hbC5Db250ZXh0LmNvbXBhcmVfdG90YWyUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvbXBhcmVfdG90YWyUag2PAAB0lIwhZGVjaW1hbC5Db250ZXh0LmNvbXBhcmVfdG90YWxfbWFnlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jb21wYXJlX3RvdGFsX21hZ5RqDY8AAHSUjBRkZWNpbWFsLkNvbnRleHQuY29weZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuY29weZRqDY8AAHSUjBhkZWNpbWFsLkNvbnRleHQuY29weV9hYnOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvcHlfYWJzlGoNjwAAdJSMHGRlY2ltYWwuQ29udGV4dC5jb3B5X2RlY2ltYWyUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvcHlfZGVjaW1hbJRqDY8AAHSUjBtkZWNpbWFsLkNvbnRleHQuY29weV9uZWdhdGWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvcHlfbmVnYXRllGoNjwAAdJSMGWRlY2ltYWwuQ29udGV4dC5jb3B5X3NpZ26UKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNvcHlfc2lnbpRqDY8AAHSUjB5kZWNpbWFsLkNvbnRleHQuY3JlYXRlX2RlY2ltYWyUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmNyZWF0ZV9kZWNpbWFslGoNjwAAdJSMKWRlY2ltYWwuQ29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0lGoNjwAAdJSMFmRlY2ltYWwuQ29udGV4dC5kaXZpZGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmRpdmlkZZRqDY8AAHSUjBpkZWNpbWFsLkNvbnRleHQuZGl2aWRlX2ludJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuZGl2aWRlX2ludJRqDY8AAHSUjBZkZWNpbWFsLkNvbnRleHQuZGl2bW9klChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5kaXZtb2SUag2PAAB0lIwTZGVjaW1hbC5Db250ZXh0LmV4cJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuZXhwlGoNjwAAdJSME2RlY2ltYWwuQ29udGV4dC5mbWGUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmZtYZRqDY8AAHSUjBxkZWNpbWFsLkNvbnRleHQuaXNfY2Fub25pY2FslChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5pc19jYW5vbmljYWyUag2PAAB0lIwZZGVjaW1hbC5Db250ZXh0LmlzX2Zpbml0ZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfZmluaXRllGoNjwAAdJSMG2RlY2ltYWwuQ29udGV4dC5pc19pbmZpbml0ZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfaW5maW5pdGWUag2PAAB0lIwWZGVjaW1hbC5Db250ZXh0LmlzX25hbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfbmFulGoNjwAAdJSMGWRlY2ltYWwuQ29udGV4dC5pc19ub3JtYWyUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX25vcm1hbJRqDY8AAHSUjBdkZWNpbWFsLkNvbnRleHQuaXNfcW5hbpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfcW5hbpRqDY8AAHSUjBlkZWNpbWFsLkNvbnRleHQuaXNfc2lnbmVklChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5pc19zaWduZWSUag2PAAB0lIwXZGVjaW1hbC5Db250ZXh0LmlzX3NuYW6UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmlzX3NuYW6Uag2PAAB0lIwcZGVjaW1hbC5Db250ZXh0LmlzX3N1Ym5vcm1hbJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuaXNfc3Vibm9ybWFslGoNjwAAdJSMF2RlY2ltYWwuQ29udGV4dC5pc196ZXJvlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5pc196ZXJvlGoNjwAAdJSMEmRlY2ltYWwuQ29udGV4dC5sbpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubG6Uag2PAAB0lIwVZGVjaW1hbC5Db250ZXh0LmxvZzEwlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5sb2cxMJRqDY8AAHSUjBRkZWNpbWFsLkNvbnRleHQubG9nYpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubG9nYpRqDY8AAHSUjBtkZWNpbWFsLkNvbnRleHQubG9naWNhbF9hbmSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmxvZ2ljYWxfYW5klGoNjwAAdJSMHmRlY2ltYWwuQ29udGV4dC5sb2dpY2FsX2ludmVydJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubG9naWNhbF9pbnZlcnSUag2PAAB0lIwaZGVjaW1hbC5Db250ZXh0LmxvZ2ljYWxfb3KUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LmxvZ2ljYWxfb3KUag2PAAB0lIwbZGVjaW1hbC5Db250ZXh0LmxvZ2ljYWxfeG9ylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5sb2dpY2FsX3hvcpRqDY8AAHSUjBNkZWNpbWFsLkNvbnRleHQubWF4lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5tYXiUag2PAAB0lIwXZGVjaW1hbC5Db250ZXh0Lm1heF9tYWeUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0Lm1heF9tYWeUag2PAAB0lIwTZGVjaW1hbC5Db250ZXh0Lm1pbpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubWlulGoNjwAAdJSMF2RlY2ltYWwuQ29udGV4dC5taW5fbWFnlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5taW5fbWFnlGoNjwAAdJSMFWRlY2ltYWwuQ29udGV4dC5taW51c5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubWludXOUag2PAAB0lIwYZGVjaW1hbC5Db250ZXh0Lm11bHRpcGx5lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5tdWx0aXBseZRqDY8AAHSUjBpkZWNpbWFsLkNvbnRleHQubmV4dF9taW51c5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubmV4dF9taW51c5RqDY8AAHSUjBlkZWNpbWFsLkNvbnRleHQubmV4dF9wbHVzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5uZXh0X3BsdXOUag2PAAB0lIwbZGVjaW1hbC5Db250ZXh0Lm5leHRfdG93YXJklChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5uZXh0X3Rvd2FyZJRqDY8AAHSUjBlkZWNpbWFsLkNvbnRleHQubm9ybWFsaXpllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5ub3JtYWxpemWUag2PAAB0lIwcZGVjaW1hbC5Db250ZXh0Lm51bWJlcl9jbGFzc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQubnVtYmVyX2NsYXNzlGoNjwAAdJSMFGRlY2ltYWwuQ29udGV4dC5wbHVzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5wbHVzlGoNjwAAdJSMFWRlY2ltYWwuQ29udGV4dC5wb3dlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQucG93ZXKUag2PAAB0lIwYZGVjaW1hbC5Db250ZXh0LnF1YW50aXpllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5xdWFudGl6ZZRqDY8AAHSUjBVkZWNpbWFsLkNvbnRleHQucmFkaXiUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnJhZGl4lGoNjwAAdJSMGWRlY2ltYWwuQ29udGV4dC5yZW1haW5kZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnJlbWFpbmRlcpRqDY8AAHSUjB5kZWNpbWFsLkNvbnRleHQucmVtYWluZGVyX25lYXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnJlbWFpbmRlcl9uZWFylGoNjwAAdJSMFmRlY2ltYWwuQ29udGV4dC5yb3RhdGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnJvdGF0ZZRqDY8AAHSUjBxkZWNpbWFsLkNvbnRleHQuc2FtZV9xdWFudHVtlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5zYW1lX3F1YW50dW2Uag2PAAB0lIwWZGVjaW1hbC5Db250ZXh0LnNjYWxlYpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuc2NhbGVilGoNjwAAdJSMFWRlY2ltYWwuQ29udGV4dC5zaGlmdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQuc2hpZnSUag2PAAB0lIwUZGVjaW1hbC5Db250ZXh0LnNxcnSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnNxcnSUag2PAAB0lIwYZGVjaW1hbC5Db250ZXh0LnN1YnRyYWN0lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC5zdWJ0cmFjdJRqDY8AAHSUjB1kZWNpbWFsLkNvbnRleHQudG9fZW5nX3N0cmluZ5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHQudG9fZW5nX3N0cmluZ5RqDY8AAHSUjCFkZWNpbWFsLkNvbnRleHQudG9faW50ZWdyYWxfZXhhY3SUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5Db250ZXh0LnRvX2ludGVncmFsX2V4YWN0lGoNjwAAdJSMHWRlY2ltYWwuQ29udGV4dC50b19zY2lfc3RyaW5nlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuQ29udGV4dC50b19zY2lfc3RyaW5nlGoNjwAAdJSMGGRlY2ltYWwuRGVjaW1hbC5hZGp1c3RlZJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuYWRqdXN0ZWSUag2PAAB0lIwgZGVjaW1hbC5EZWNpbWFsLmFzX2ludGVnZXJfcmF0aW+UKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmFzX2ludGVnZXJfcmF0aW+Uag2PAAB0lIwYZGVjaW1hbC5EZWNpbWFsLmFzX3R1cGxllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5hc190dXBsZZRqDY8AAHSUjBlkZWNpbWFsLkRlY2ltYWwuY2Fub25pY2FslChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jYW5vbmljYWyUag2PAAB0lIwXZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmWUag2PAAB0lIweZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmVfc2lnbmFslChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5jb21wYXJlX3NpZ25hbJRqDY8AAHSUjB1kZWNpbWFsLkRlY2ltYWwuY29tcGFyZV90b3RhbJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY29tcGFyZV90b3RhbJRqDY8AAHSUjCFkZWNpbWFsLkRlY2ltYWwuY29tcGFyZV90b3RhbF9tYWeUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmNvbXBhcmVfdG90YWxfbWFnlGoNjwAAdJSMGWRlY2ltYWwuRGVjaW1hbC5jb25qdWdhdGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmNvbmp1Z2F0ZZRqDY8AAHSUjBhkZWNpbWFsLkRlY2ltYWwuY29weV9hYnOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmNvcHlfYWJzlGoNjwAAdJSMG2RlY2ltYWwuRGVjaW1hbC5jb3B5X25lZ2F0ZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY29weV9uZWdhdGWUag2PAAB0lIwZZGVjaW1hbC5EZWNpbWFsLmNvcHlfc2lnbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuY29weV9zaWdulGoNjwAAdJSME2RlY2ltYWwuRGVjaW1hbC5leHCUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmV4cJRqDY8AAHSUjBNkZWNpbWFsLkRlY2ltYWwuZm1hlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5mbWGUag2PAAB0lIwaZGVjaW1hbC5EZWNpbWFsLmZyb21fZmxvYXSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmZyb21fZmxvYXSUag2PAAB0lIwcZGVjaW1hbC5EZWNpbWFsLmlzX2Nhbm9uaWNhbJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfY2Fub25pY2FslGoNjwAAdJSMGWRlY2ltYWwuRGVjaW1hbC5pc19maW5pdGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX2Zpbml0ZZRqDY8AAHSUjBtkZWNpbWFsLkRlY2ltYWwuaXNfaW5maW5pdGWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX2luZmluaXRllGoNjwAAdJSMFmRlY2ltYWwuRGVjaW1hbC5pc19uYW6UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX25hbpRqDY8AAHSUjBlkZWNpbWFsLkRlY2ltYWwuaXNfbm9ybWFslChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5pc19ub3JtYWyUag2PAAB0lIwXZGVjaW1hbC5EZWNpbWFsLmlzX3FuYW6UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX3FuYW6Uag2PAAB0lIwZZGVjaW1hbC5EZWNpbWFsLmlzX3NpZ25lZJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfc2lnbmVklGoNjwAAdJSMF2RlY2ltYWwuRGVjaW1hbC5pc19zbmFulChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5pc19zbmFulGoNjwAAdJSMHGRlY2ltYWwuRGVjaW1hbC5pc19zdWJub3JtYWyUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmlzX3N1Ym5vcm1hbJRqDY8AAHSUjBdkZWNpbWFsLkRlY2ltYWwuaXNfemVyb5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuaXNfemVyb5RqDY8AAHSUjBJkZWNpbWFsLkRlY2ltYWwubG6UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmxulGoNjwAAdJSMFWRlY2ltYWwuRGVjaW1hbC5sb2cxMJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubG9nMTCUag2PAAB0lIwUZGVjaW1hbC5EZWNpbWFsLmxvZ2KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmxvZ2KUag2PAAB0lIwbZGVjaW1hbC5EZWNpbWFsLmxvZ2ljYWxfYW5klChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX2FuZJRqDY8AAHSUjB5kZWNpbWFsLkRlY2ltYWwubG9naWNhbF9pbnZlcnSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLmxvZ2ljYWxfaW52ZXJ0lGoNjwAAdJSMGmRlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX29ylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX29ylGoNjwAAdJSMG2RlY2ltYWwuRGVjaW1hbC5sb2dpY2FsX3hvcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubG9naWNhbF94b3KUag2PAAB0lIwTZGVjaW1hbC5EZWNpbWFsLm1heJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubWF4lGoNjwAAdJSMF2RlY2ltYWwuRGVjaW1hbC5tYXhfbWFnlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5tYXhfbWFnlGoNjwAAdJSME2RlY2ltYWwuRGVjaW1hbC5taW6UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLm1pbpRqDY8AAHSUjBdkZWNpbWFsLkRlY2ltYWwubWluX21hZ5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubWluX21hZ5RqDY8AAHSUjBpkZWNpbWFsLkRlY2ltYWwubmV4dF9taW51c5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubmV4dF9taW51c5RqDY8AAHSUjBlkZWNpbWFsLkRlY2ltYWwubmV4dF9wbHVzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5uZXh0X3BsdXOUag2PAAB0lIwbZGVjaW1hbC5EZWNpbWFsLm5leHRfdG93YXJklChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5uZXh0X3Rvd2FyZJRqDY8AAHSUjBlkZWNpbWFsLkRlY2ltYWwubm9ybWFsaXpllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5ub3JtYWxpemWUag2PAAB0lIwcZGVjaW1hbC5EZWNpbWFsLm51bWJlcl9jbGFzc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwubnVtYmVyX2NsYXNzlGoNjwAAdJSMGGRlY2ltYWwuRGVjaW1hbC5xdWFudGl6ZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwucXVhbnRpemWUag2PAAB0lIwVZGVjaW1hbC5EZWNpbWFsLnJhZGl4lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5yYWRpeJRqDY8AAHSUjB5kZWNpbWFsLkRlY2ltYWwucmVtYWluZGVyX25lYXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnJlbWFpbmRlcl9uZWFylGoNjwAAdJSMFmRlY2ltYWwuRGVjaW1hbC5yb3RhdGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnJvdGF0ZZRqDY8AAHSUjBxkZWNpbWFsLkRlY2ltYWwuc2FtZV9xdWFudHVtlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC5zYW1lX3F1YW50dW2Uag2PAAB0lIwWZGVjaW1hbC5EZWNpbWFsLnNjYWxlYpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuc2NhbGVilGoNjwAAdJSMFWRlY2ltYWwuRGVjaW1hbC5zaGlmdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwuc2hpZnSUag2PAAB0lIwUZGVjaW1hbC5EZWNpbWFsLnNxcnSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnNxcnSUag2PAAB0lIwdZGVjaW1hbC5EZWNpbWFsLnRvX2VuZ19zdHJpbmeUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnRvX2VuZ19zdHJpbmeUag2PAAB0lIwbZGVjaW1hbC5EZWNpbWFsLnRvX2ludGVncmFslChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbC50b19pbnRlZ3JhbJRqDY8AAHSUjCFkZWNpbWFsLkRlY2ltYWwudG9faW50ZWdyYWxfZXhhY3SUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsLnRvX2ludGVncmFsX2V4YWN0lGoNjwAAdJSMIWRlY2ltYWwuRGVjaW1hbC50b19pbnRlZ3JhbF92YWx1ZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkRlY2ltYWwudG9faW50ZWdyYWxfdmFsdWWUag2PAAB0lIwKZGljdC5jbGVhcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5jbGVhcpRqDY8AAHSUjAlkaWN0LmNvcHmUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QuY29weZRqDY8AAHSUjA1kaWN0LmZyb21rZXlzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LmZyb21rZXlzlGoNjwAAdJSMCGRpY3QuZ2V0lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LmdldJRqDY8AAHSUjApkaWN0Lml0ZW1zlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0Lml0ZW1zlGoNjwAAdJSMCWRpY3Qua2V5c5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC5rZXlzlGoNjwAAdJSMCGRpY3QucG9wlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LnBvcJRqDY8AAHSUjAxkaWN0LnBvcGl0ZW2UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QucG9waXRlbZRqDY8AAHSUjA9kaWN0LnNldGRlZmF1bHSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3Quc2V0ZGVmYXVsdJRqDY8AAHSUjAtkaWN0LnVwZGF0ZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZGljdC51cGRhdGWUag2PAAB0lIwLZGljdC52YWx1ZXOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3QudmFsdWVzlGoNjwAAdJSMFmRpZmZsaWIuRGlmZmVyLmNvbXBhcmWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5EaWZmZXIuY29tcGFyZZRqDY8AAHSUjBlkaWZmbGliLkh0bWxEaWZmLl9faW5pdF9flChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuSHRtbERpZmYuX19pbml0X1+Uag2PAAB0lIwaZGlmZmxpYi5IdG1sRGlmZi5tYWtlX2ZpbGWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5IdG1sRGlmZi5tYWtlX2ZpbGWUag2PAAB0lIwbZGlmZmxpYi5IdG1sRGlmZi5tYWtlX3RhYmxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuSHRtbERpZmYubWFrZV90YWJsZZRqDY8AAHSUjCpkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5maW5kX2xvbmdlc3RfbWF0Y2iUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZmluZF9sb25nZXN0X21hdGNolGoNjwAAdJSMK2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmdldF9ncm91cGVkX29wY29kZXOUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZ2V0X2dyb3VwZWRfb3Bjb2Rlc5RqDY8AAHSUjCtkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5nZXRfbWF0Y2hpbmdfYmxvY2tzlChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmdldF9tYXRjaGluZ19ibG9ja3OUag2PAAB0lIwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZ2V0X29wY29kZXOUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuZ2V0X29wY29kZXOUag2PAAB0lIwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIucXVpY2tfcmF0aW+UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIucXVpY2tfcmF0aW+Uag2PAAB0lIwdZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIucmF0aW+UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIucmF0aW+Uag2PAAB0lIwoZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIucmVhbF9xdWlja19yYXRpb5QoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5yZWFsX3F1aWNrX3JhdGlvlGoNjwAAdJSMIGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXExlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXExlGoNjwAAdJSMIGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXEylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXEylGoNjwAAdJSMIGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXFzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLnNldF9zZXFzlGoNjwAAdJSMEGRpcy5CeXRlY29kZS5kaXOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuQnl0ZWNvZGUuZGlzlGoNjwAAdJSMG2Rpcy5CeXRlY29kZS5mcm9tX3RyYWNlYmFja5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5CeXRlY29kZS5mcm9tX3RyYWNlYmFja5RqDY8AAHSUjBFkaXMuQnl0ZWNvZGUuaW5mb5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5CeXRlY29kZS5pbmZvlGoNjwAAdJSMLWRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9pbmNsdWRlX2RpcpQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX2luY2x1ZGVfZGlylGoNjwAAdJSMKWRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saWJyYXJ5lChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hZGRfbGlicmFyeZRqDY8AAHSUjC1kaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hZGRfbGlicmFyeV9kaXKUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saWJyYXJ5X2RpcpRqDY8AAHSUjC1kaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hZGRfbGlua19vYmplY3SUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFkZF9saW5rX29iamVjdJRqDY8AAHSUjDVkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5hZGRfcnVudGltZV9saWJyYXJ5X2RpcpQoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYWRkX3J1bnRpbWVfbGlicmFyeV9kaXKUag2PAAB0lIwmZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuYW5ub3VuY2WUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmFubm91bmNllGoNjwAAdJSMJWRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmNvbXBpbGWUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmNvbXBpbGWUag2PAAB0lIwvZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuY3JlYXRlX3N0YXRpY19saWKUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmNyZWF0ZV9zdGF0aWNfbGlilGoNjwAAdJSMKWRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmRlYnVnX3ByaW50lChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZWJ1Z19wcmludJRqDY8AAHSUjCpkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZWZpbmVfbWFjcm+UKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmRlZmluZV9tYWNyb5RqDY8AAHSUjC1kaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5kZXRlY3RfbGFuZ3VhZ2WUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmRldGVjdF9sYW5ndWFnZZRqDY8AAHSUjDFkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5leGVjdXRhYmxlX2ZpbGVuYW1llChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5leGVjdXRhYmxlX2ZpbGVuYW1llGoNjwAAdJSMJWRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmV4ZWN1dGWUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmV4ZWN1dGWUag2PAAB0lIwvZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGWUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxllGoNjwAAdJSMKmRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmhhc19mdW5jdGlvbpQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuaGFzX2Z1bmN0aW9ulGoNjwAAdJSMMGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfZGlyX29wdGlvbpQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubGlicmFyeV9kaXJfb3B0aW9ulGoNjwAAdJSMLmRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfZmlsZW5hbWWUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfZmlsZW5hbWWUag2PAAB0lIwsZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubGlicmFyeV9vcHRpb26UKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpYnJhcnlfb3B0aW9ulGoNjwAAdJSMImRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpbmuUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLmxpbmuUag2PAAB0lIwtZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubGlua19leGVjdXRhYmxllChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX2V4ZWN1dGFibGWUag2PAAB0lIwtZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubGlua19zaGFyZWRfbGlilChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX3NoYXJlZF9saWKUag2PAAB0lIwwZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubGlua19zaGFyZWRfb2JqZWN0lChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5saW5rX3NoYXJlZF9vYmplY3SUag2PAAB0lIwkZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubWtwYXRolChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5ta3BhdGiUag2PAAB0lIwnZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIubW92ZV9maWxllChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5tb3ZlX2ZpbGWUag2PAAB0lIwuZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIub2JqZWN0X2ZpbGVuYW1lc5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIub2JqZWN0X2ZpbGVuYW1lc5RqDY8AAHSUjChkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5wcmVwcm9jZXNzlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5wcmVwcm9jZXNzlGoNjwAAdJSMOGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJfb3B0aW9ulChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlyX29wdGlvbpRqDY8AAHSUjC1kaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfZXhlY3V0YWJsZXOUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9leGVjdXRhYmxlc5RqDY8AAHSUjC5kaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfaW5jbHVkZV9kaXJzlChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfaW5jbHVkZV9kaXJzlGoNjwAAdJSMK2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9saWJyYXJpZXOUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9saWJyYXJpZXOUag2PAAB0lIwuZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2xpYnJhcnlfZGlyc5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X2xpYnJhcnlfZGlyc5RqDY8AAHSUjC5kaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfbGlua19vYmplY3RzlChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci5zZXRfbGlua19vYmplY3RzlGoNjwAAdJSMNmRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNldF9ydW50aW1lX2xpYnJhcnlfZGlyc5QoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc2V0X3J1bnRpbWVfbGlicmFyeV9kaXJzlGoNjwAAdJSMNGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNoYXJlZF9vYmplY3RfZmlsZW5hbWWUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNoYXJlZF9vYmplY3RfZmlsZW5hbWWUag2PAAB0lIwjZGlzdHV0aWxzLmNjb21waWxlci5DQ29tcGlsZXIuc3Bhd26UKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnNwYXdulGoNjwAAdJSMLGRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVyLnVuZGVmaW5lX21hY3JvlChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci51bmRlZmluZV9tYWNyb5RqDY8AAHSUjCJkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci53YXJulChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlci53YXJulGoNjwAAdJSMJmRpc3R1dGlscy5jbWQuQ29tbWFuZC5maW5hbGl6ZV9vcHRpb25zlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY21kLkNvbW1hbmQuZmluYWxpemVfb3B0aW9uc5RqDY8AAHSUjChkaXN0dXRpbHMuY21kLkNvbW1hbmQuaW5pdGlhbGl6ZV9vcHRpb25zlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY21kLkNvbW1hbmQuaW5pdGlhbGl6ZV9vcHRpb25zlGoNjwAAdJSMGWRpc3R1dGlscy5jbWQuQ29tbWFuZC5ydW6UKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jbWQuQ29tbWFuZC5ydW6Uag2PAAB0lIwwZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdC5nZW5lcmF0ZV9oZWxwlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LkZhbmN5R2V0b3B0LmdlbmVyYXRlX2hlbHCUag2PAAB0lIwzZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdC5nZXRfb3B0aW9uX29yZGVylChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LkZhbmN5R2V0b3B0LmdldF9vcHRpb25fb3JkZXKUag2PAAB0lIwpZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdC5nZXRvcHSUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5mYW5jeV9nZXRvcHQuRmFuY3lHZXRvcHQuZ2V0b3B0lGoNjwAAdJSMImRpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGUuY2xvc2WUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy50ZXh0X2ZpbGUuVGV4dEZpbGUuY2xvc2WUag2PAAB0lIwhZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5vcGVulChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLm9wZW6Uag2PAAB0lIwlZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5yZWFkbGluZZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5yZWFkbGluZZRqDY8AAHSUjCZkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLnJlYWRsaW5lc5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS5yZWFkbGluZXOUag2PAAB0lIwnZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS51bnJlYWRsaW5llChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLnVucmVhZGxpbmWUag2PAAB0lIwhZGlzdHV0aWxzLnRleHRfZmlsZS5UZXh0RmlsZS53YXJulChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxlLndhcm6Uag2PAAB0lIwaZG9jdGVzdC5Eb2NUZXN0RmluZGVyLmZpbmSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0RmluZGVyLmZpbmSUag2PAAB0lIwhZG9jdGVzdC5Eb2NUZXN0UGFyc2VyLmdldF9kb2N0ZXN0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFBhcnNlci5nZXRfZG9jdGVzdJRqDY8AAHSUjCJkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIuZ2V0X2V4YW1wbGVzlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFBhcnNlci5nZXRfZXhhbXBsZXOUag2PAAB0lIwbZG9jdGVzdC5Eb2NUZXN0UGFyc2VyLnBhcnNllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFBhcnNlci5wYXJzZZRqDY8AAHSUjCRkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X2ZhaWx1cmWUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0UnVubmVyLnJlcG9ydF9mYWlsdXJllGoNjwAAdJSMImRvY3Rlc3QuRG9jVGVzdFJ1bm5lci5yZXBvcnRfc3RhcnSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0UnVubmVyLnJlcG9ydF9zdGFydJRqDY8AAHSUjCRkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucmVwb3J0X3N1Y2Nlc3OUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0UnVubmVyLnJlcG9ydF9zdWNjZXNzlGoNjwAAdJSMMWRvY3Rlc3QuRG9jVGVzdFJ1bm5lci5yZXBvcnRfdW5leHBlY3RlZF9leGNlcHRpb26UKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0UnVubmVyLnJlcG9ydF91bmV4cGVjdGVkX2V4Y2VwdGlvbpRqDY8AAHSUjBlkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIucnVulChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFJ1bm5lci5ydW6Uag2PAAB0lIwfZG9jdGVzdC5Eb2NUZXN0UnVubmVyLnN1bW1hcml6ZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIuc3VtbWFyaXpllGoNjwAAdJSMImRvY3Rlc3QuT3V0cHV0Q2hlY2tlci5jaGVja19vdXRwdXSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5PdXRwdXRDaGVja2VyLmNoZWNrX291dHB1dJRqDY8AAHSUjCdkb2N0ZXN0Lk91dHB1dENoZWNrZXIub3V0cHV0X2RpZmZlcmVuY2WUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5PdXRwdXRDaGVja2VyLm91dHB1dF9kaWZmZXJlbmNllGoNjwAAdJSMHGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5fX2VxX1+UKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0Ll9fZXFfX5RqDY8AAHSUjBxlbWFpbC5jaGFyc2V0LkNoYXJzZXQuX19uZV9flChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5fX25lX1+Uag2PAAB0lIwdZW1haWwuY2hhcnNldC5DaGFyc2V0Ll9fc3RyX1+UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0Ll9fc3RyX1+Uag2PAAB0lIwhZW1haWwuY2hhcnNldC5DaGFyc2V0LmJvZHlfZW5jb2RllChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuQ2hhcnNldC5ib2R5X2VuY29kZZRqDY8AAHSUjCdlbWFpbC5jaGFyc2V0LkNoYXJzZXQuZ2V0X2JvZHlfZW5jb2RpbmeUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmdldF9ib2R5X2VuY29kaW5nlGoNjwAAdJSMKGVtYWlsLmNoYXJzZXQuQ2hhcnNldC5nZXRfb3V0cHV0X2NoYXJzZXSUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0LmdldF9vdXRwdXRfY2hhcnNldJRqDY8AAHSUjCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kZZQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kZZRqDY8AAHSUjCllbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kZV9saW5lc5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LkNoYXJzZXQuaGVhZGVyX2VuY29kZV9saW5lc5RqDY8AAHSUjDNlbWFpbC5jb250ZW50bWFuYWdlci5Db250ZW50TWFuYWdlci5hZGRfZ2V0X2hhbmRsZXKUKGoKjwAAaguPAACMb2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5odG1sI2VtYWlsLmNvbnRlbnRtYW5hZ2VyLkNvbnRlbnRNYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcpRqDY8AAHSUjDNlbWFpbC5jb250ZW50bWFuYWdlci5Db250ZW50TWFuYWdlci5hZGRfc2V0X2hhbmRsZXKUKGoKjwAAaguPAACMb2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5odG1sI2VtYWlsLmNvbnRlbnRtYW5hZ2VyLkNvbnRlbnRNYW5hZ2VyLmFkZF9zZXRfaGFuZGxlcpRqDY8AAHSUjC9lbWFpbC5jb250ZW50bWFuYWdlci5Db250ZW50TWFuYWdlci5nZXRfY29udGVudJQoagqPAABqC48AAIxraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLmh0bWwjZW1haWwuY29udGVudG1hbmFnZXIuQ29udGVudE1hbmFnZXIuZ2V0X2NvbnRlbnSUag2PAAB0lIwvZW1haWwuY29udGVudG1hbmFnZXIuQ29udGVudE1hbmFnZXIuc2V0X2NvbnRlbnSUKGoKjwAAaguPAACMa2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5odG1sI2VtYWlsLmNvbnRlbnRtYW5hZ2VyLkNvbnRlbnRNYW5hZ2VyLnNldF9jb250ZW50lGoNjwAAdJSMIGVtYWlsLmNvbnRlbnRtYW5hZ2VyLmdldF9jb250ZW50lChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIuaHRtbCNlbWFpbC5jb250ZW50bWFuYWdlci5nZXRfY29udGVudJRqDY8AAHSUjCBlbWFpbC5jb250ZW50bWFuYWdlci5zZXRfY29udGVudJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLmh0bWwjZW1haWwuY29udGVudG1hbmFnZXIuc2V0X2NvbnRlbnSUag2PAAB0lIwkZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yLmNsb25llChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWwjZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yLmNsb25llGoNjwAAdJSMJmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvci5mbGF0dGVulChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWwjZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yLmZsYXR0ZW6Uag2PAAB0lIwkZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yLndyaXRllChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWwjZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yLndyaXRllGoNjwAAdJSMH2VtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IuY2xvbmWUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IuaHRtbCNlbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yLmNsb25llGoNjwAAdJSMIWVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IuZmxhdHRlbpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5odG1sI2VtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IuZmxhdHRlbpRqDY8AAHSUjB9lbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yLndyaXRllChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWwjZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvci53cml0ZZRqDY8AAHSUjBplbWFpbC5oZWFkZXIuSGVhZGVyLl9fZXFfX5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlci5odG1sI2VtYWlsLmhlYWRlci5IZWFkZXIuX19lcV9flGoNjwAAdJSMGmVtYWlsLmhlYWRlci5IZWFkZXIuX19uZV9flChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLkhlYWRlci5fX25lX1+Uag2PAAB0lIwbZW1haWwuaGVhZGVyLkhlYWRlci5fX3N0cl9flChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLkhlYWRlci5fX3N0cl9flGoNjwAAdJSMGmVtYWlsLmhlYWRlci5IZWFkZXIuYXBwZW5klChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLkhlYWRlci5hcHBlbmSUag2PAAB0lIwaZW1haWwuaGVhZGVyLkhlYWRlci5lbmNvZGWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXIuaHRtbCNlbWFpbC5oZWFkZXIuSGVhZGVyLmVuY29kZZRqDY8AAHSUjCRlbWFpbC5oZWFkZXJyZWdpc3RyeS5BZGRyZXNzLl9fc3RyX1+UKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkFkZHJlc3MuX19zdHJfX5RqDY8AAHSUjCRlbWFpbC5oZWFkZXJyZWdpc3RyeS5CYXNlSGVhZGVyLmZvbGSUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkJhc2VIZWFkZXIuZm9sZJRqDY8AAHSUjCJlbWFpbC5oZWFkZXJyZWdpc3RyeS5Hcm91cC5fX3N0cl9flChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5Hcm91cC5fX3N0cl9flGoNjwAAdJSMLGVtYWlsLmhlYWRlcnJlZ2lzdHJ5LkhlYWRlclJlZ2lzdHJ5Ll9fY2FsbF9flChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5IZWFkZXJSZWdpc3RyeS5fX2NhbGxfX5RqDY8AAHSUjC9lbWFpbC5oZWFkZXJyZWdpc3RyeS5IZWFkZXJSZWdpc3RyeS5fX2dldGl0ZW1fX5QoagqPAABqC48AAIxraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuSGVhZGVyUmVnaXN0cnkuX19nZXRpdGVtX1+Uag2PAAB0lIwvZW1haWwuaGVhZGVycmVnaXN0cnkuSGVhZGVyUmVnaXN0cnkubWFwX3RvX3R5cGWUKGoKjwAAaguPAACMa2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkhlYWRlclJlZ2lzdHJ5Lm1hcF90b190eXBllGoNjwAAdJSMJGVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLl9fYnl0ZXNfX5QoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5fX2J5dGVzX1+Uag2PAAB0lIwnZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuX19jb250YWluc19flChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLl9fY29udGFpbnNfX5RqDY8AAHSUjCZlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5fX2RlbGl0ZW1fX5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5fX2RlbGl0ZW1fX5RqDY8AAHSUjCZlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5fX2dldGl0ZW1fX5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5fX2dldGl0ZW1fX5RqDY8AAHSUjCJlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5fX2xlbl9flChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLl9fbGVuX1+Uag2PAAB0lIwmZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuX19zZXRpdGVtX1+UKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuX19zZXRpdGVtX1+Uag2PAAB0lIwiZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuX19zdHJfX5QoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5fX3N0cl9flGoNjwAAdJSMKmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmFkZF9hbHRlcm5hdGl2ZZQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5hZGRfYWx0ZXJuYXRpdmWUag2PAAB0lIwpZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuYWRkX2F0dGFjaG1lbnSUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuYWRkX2F0dGFjaG1lbnSUag2PAAB0lIwlZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuYWRkX2hlYWRlcpQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5hZGRfaGVhZGVylGoNjwAAdJSMJmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmFkZF9yZWxhdGVklChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmFkZF9yZWxhdGVklGoNjwAAdJSMI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmFzX2J5dGVzlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmFzX2J5dGVzlGoNjwAAdJSMJGVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmFzX3N0cmluZ5QoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5hc19zdHJpbmeUag2PAAB0lIwgZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuY2xlYXKUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuY2xlYXKUag2PAAB0lIwoZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuY2xlYXJfY29udGVudJQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5jbGVhcl9jb250ZW50lGoNjwAAdJSMJGVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmRlbF9wYXJhbZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5kZWxfcGFyYW2Uag2PAAB0lIweZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldJRqDY8AAHSUjCJlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfYWxslChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldF9hbGyUag2PAAB0lIwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0X2JvZHmUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0X2JvZHmUag2PAAB0lIwnZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0X2JvdW5kYXJ5lChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldF9ib3VuZGFyeZRqDY8AAHSUjCdlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfY2hhcnNldHOUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0X2NoYXJzZXRzlGoNjwAAdJSMJmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldF9jb250ZW50lChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldF9jb250ZW50lGoNjwAAdJSMLmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldF9jb250ZW50X2NoYXJzZXSUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0X2NvbnRlbnRfY2hhcnNldJRqDY8AAHSUjDJlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfY29udGVudF9kaXNwb3NpdGlvbpQoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfY29udGVudF9kaXNwb3NpdGlvbpRqDY8AAHSUjC9lbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfY29udGVudF9tYWludHlwZZQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfY29udGVudF9tYWludHlwZZRqDY8AAHSUjC5lbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfY29udGVudF9zdWJ0eXBllChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldF9jb250ZW50X3N1YnR5cGWUag2PAAB0lIwrZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0X2NvbnRlbnRfdHlwZZQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfY29udGVudF90eXBllGoNjwAAdJSMK2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldF9kZWZhdWx0X3R5cGWUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0X2RlZmF1bHRfdHlwZZRqDY8AAHSUjCdlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfZmlsZW5hbWWUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuZ2V0X2ZpbGVuYW1llGoNjwAAdJSMJ2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmdldF91bml4ZnJvbZQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5nZXRfdW5peGZyb22Uag2PAAB0lHUojChlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5pc19hdHRhY2htZW50lChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmlzX2F0dGFjaG1lbnSUag2PAAB0lIwnZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuaXNfbXVsdGlwYXJ0lChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmlzX211bHRpcGFydJRqDY8AAHSUjCBlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5pdGVtc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5pdGVtc5RqDY8AAHSUjCtlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5pdGVyX2F0dGFjaG1lbnRzlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLml0ZXJfYXR0YWNobWVudHOUag2PAAB0lIwlZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuaXRlcl9wYXJ0c5QoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5pdGVyX3BhcnRzlGoNjwAAdJSMH2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmtleXOUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2Uua2V5c5RqDY8AAHSUjCtlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5tYWtlX2FsdGVybmF0aXZllChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLm1ha2VfYWx0ZXJuYXRpdmWUag2PAAB0lIwlZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UubWFrZV9taXhlZJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5tYWtlX21peGVklGoNjwAAdJSMJ2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLm1ha2VfcmVsYXRlZJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5tYWtlX3JlbGF0ZWSUag2PAAB0lIwpZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UucmVwbGFjZV9oZWFkZXKUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UucmVwbGFjZV9oZWFkZXKUag2PAAB0lIwnZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2Uuc2V0X2JvdW5kYXJ5lChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLnNldF9ib3VuZGFyeZRqDY8AAHSUjCZlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5zZXRfY29udGVudJQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5zZXRfY29udGVudJRqDY8AAHSUjCtlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5zZXRfZGVmYXVsdF90eXBllChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLnNldF9kZWZhdWx0X3R5cGWUag2PAAB0lIwkZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2Uuc2V0X3BhcmFtlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLnNldF9wYXJhbZRqDY8AAHSUjCdlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5zZXRfdW5peGZyb22UKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2Uuc2V0X3VuaXhmcm9tlGoNjwAAdJSMIWVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLnZhbHVlc5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS52YWx1ZXOUag2PAAB0lIwfZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2Uud2Fsa5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS53YWxrlGoNjwAAdJSMH2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2J5dGVzX1+UKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fYnl0ZXNfX5RqDY8AAHSUjCJlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19jb250YWluc19flChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2NvbnRhaW5zX1+Uag2PAAB0lIwhZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fZGVsaXRlbV9flChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2RlbGl0ZW1fX5RqDY8AAHSUjCFlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19nZXRpdGVtX1+UKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fZ2V0aXRlbV9flGoNjwAAdJSMHWVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2xlbl9flChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2xlbl9flGoNjwAAdJSMIWVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX3NldGl0ZW1fX5QoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19zZXRpdGVtX1+Uag2PAAB0lIwdZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fc3RyX1+UKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLl9fc3RyX1+Uag2PAAB0lIwgZW1haWwubWVzc2FnZS5NZXNzYWdlLmFkZF9oZWFkZXKUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmFkZF9oZWFkZXKUag2PAAB0lIweZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX2J5dGVzlChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19ieXRlc5RqDY8AAHSUjB9lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nlChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19zdHJpbmeUag2PAAB0lIwcZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNolGoNjwAAdJSMH2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5kZWxfcGFyYW2UKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmRlbF9wYXJhbZRqDY8AAHSUjBllbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0lChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXSUag2PAAB0lIwdZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9hbGyUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9hbGyUag2PAAB0lIwiZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9ib3VuZGFyeZQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2JvdW5kYXJ5lGoNjwAAdJSMIWVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY2hhcnNldJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NoYXJzZXSUag2PAAB0lIwiZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jaGFyc2V0c5QoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NoYXJzZXRzlGoNjwAAdJSMKWVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF9jaGFyc2V0lChqCo8AAGoLjwAAjGdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF9jaGFyc2V0lGoNjwAAdJSMLWVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF9kaXNwb3NpdGlvbpQoagqPAABqC48AAIxraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRfZGlzcG9zaXRpb26Uag2PAAB0lIwqZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50X21haW50eXBllChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF9tYWludHlwZZRqDY8AAHSUjCllbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRfc3VidHlwZZQoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRfc3VidHlwZZRqDY8AAHSUjCZlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRfdHlwZZQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2NvbnRlbnRfdHlwZZRqDY8AAHSUjCZlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2RlZmF1bHRfdHlwZZQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2RlZmF1bHRfdHlwZZRqDY8AAHSUjCJlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X2ZpbGVuYW1llChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfZmlsZW5hbWWUag2PAAB0lIwfZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9wYXJhbZQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BhcmFtlGoNjwAAdJSMIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfcGFyYW1zlChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfcGFyYW1zlGoNjwAAdJSMIWVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfcGF5bG9hZJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BheWxvYWSUag2PAAB0lIwiZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF91bml4ZnJvbZQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3VuaXhmcm9tlGoNjwAAdJSMImVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5pc19tdWx0aXBhcnSUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLmlzX211bHRpcGFydJRqDY8AAHSUjBtlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuaXRlbXOUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLml0ZW1zlGoNjwAAdJSMGmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5rZXlzlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5rZXlzlGoNjwAAdJSMJGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5yZXBsYWNlX2hlYWRlcpQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UucmVwbGFjZV9oZWFkZXKUag2PAAB0lIwiZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9ib3VuZGFyeZQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2JvdW5kYXJ5lGoNjwAAdJSMIWVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfY2hhcnNldJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2NoYXJzZXSUag2PAAB0lIwmZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9kZWZhdWx0X3R5cGWUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jb21wYXQzMi1tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9kZWZhdWx0X3R5cGWUag2PAAB0lIwfZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9wYXJhbZQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3BhcmFtlGoNjwAAdJSMIWVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfcGF5bG9hZJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3BheWxvYWSUlV8AAQAAAAAAag2PAAB0lIweZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF90eXBllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfdHlwZZRqDY8AAHSUjCJlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3VuaXhmcm9tlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS5zZXRfdW5peGZyb22Uag2PAAB0lIwcZW1haWwubWVzc2FnZS5NZXNzYWdlLnZhbHVlc5QoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2UudmFsdWVzlGoNjwAAdJSMGmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS53YWxrlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2VtYWlsLm1lc3NhZ2UuTWVzc2FnZS53YWxrlGoNjwAAdJSMImVtYWlsLnBhcnNlci5CeXRlc0ZlZWRQYXJzZXIuY2xvc2WUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNlbWFpbC5wYXJzZXIuQnl0ZXNGZWVkUGFyc2VyLmNsb3NllGoNjwAAdJSMIWVtYWlsLnBhcnNlci5CeXRlc0ZlZWRQYXJzZXIuZmVlZJQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLnBhcnNlci5CeXRlc0ZlZWRQYXJzZXIuZmVlZJRqDY8AAHSUjB5lbWFpbC5wYXJzZXIuQnl0ZXNQYXJzZXIucGFyc2WUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNlbWFpbC5wYXJzZXIuQnl0ZXNQYXJzZXIucGFyc2WUag2PAAB0lIwjZW1haWwucGFyc2VyLkJ5dGVzUGFyc2VyLnBhcnNlYnl0ZXOUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNlbWFpbC5wYXJzZXIuQnl0ZXNQYXJzZXIucGFyc2VieXRlc5RqDY8AAHSUjBllbWFpbC5wYXJzZXIuUGFyc2VyLnBhcnNllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLlBhcnNlci5wYXJzZZRqDY8AAHSUjBxlbWFpbC5wYXJzZXIuUGFyc2VyLnBhcnNlc3RylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLlBhcnNlci5wYXJzZXN0cpRqDY8AAHSUjBplbWFpbC5wb2xpY3kuQ29tcGF0MzIuZm9sZJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5Db21wYXQzMi5mb2xklGoNjwAAdJSMIWVtYWlsLnBvbGljeS5Db21wYXQzMi5mb2xkX2JpbmFyeZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5Db21wYXQzMi5mb2xkX2JpbmFyeZRqDY8AAHSUjChlbWFpbC5wb2xpY3kuQ29tcGF0MzIuaGVhZGVyX2ZldGNoX3BhcnNllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LkNvbXBhdDMyLmhlYWRlcl9mZXRjaF9wYXJzZZRqDY8AAHSUjCllbWFpbC5wb2xpY3kuQ29tcGF0MzIuaGVhZGVyX3NvdXJjZV9wYXJzZZQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5Db21wYXQzMi5oZWFkZXJfc291cmNlX3BhcnNllGoNjwAAdJSMKGVtYWlsLnBvbGljeS5Db21wYXQzMi5oZWFkZXJfc3RvcmVfcGFyc2WUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuQ29tcGF0MzIuaGVhZGVyX3N0b3JlX3BhcnNllGoNjwAAdJSMHWVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5mb2xklChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmZvbGSUag2PAAB0lIwkZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmZvbGRfYmluYXJ5lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmZvbGRfYmluYXJ5lGoNjwAAdJSMK2VtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5oZWFkZXJfZmV0Y2hfcGFyc2WUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuaGVhZGVyX2ZldGNoX3BhcnNllGoNjwAAdJSMKWVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5oZWFkZXJfbWF4X2NvdW50lChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmhlYWRlcl9tYXhfY291bnSUag2PAAB0lIwsZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmhlYWRlcl9zb3VyY2VfcGFyc2WUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuaGVhZGVyX3NvdXJjZV9wYXJzZZRqDY8AAHSUjCtlbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuaGVhZGVyX3N0b3JlX3BhcnNllChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmhlYWRlcl9zdG9yZV9wYXJzZZRqDY8AAHSUjBllbWFpbC5wb2xpY3kuUG9saWN5LmNsb25llChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeS5jbG9uZZRqDY8AAHSUjBhlbWFpbC5wb2xpY3kuUG9saWN5LmZvbGSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuUG9saWN5LmZvbGSUag2PAAB0lIwfZW1haWwucG9saWN5LlBvbGljeS5mb2xkX2JpbmFyeZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5Qb2xpY3kuZm9sZF9iaW5hcnmUag2PAAB0lIwhZW1haWwucG9saWN5LlBvbGljeS5oYW5kbGVfZGVmZWN0lChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeS5oYW5kbGVfZGVmZWN0lGoNjwAAdJSMJmVtYWlsLnBvbGljeS5Qb2xpY3kuaGVhZGVyX2ZldGNoX3BhcnNllChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeS5oZWFkZXJfZmV0Y2hfcGFyc2WUag2PAAB0lIwkZW1haWwucG9saWN5LlBvbGljeS5oZWFkZXJfbWF4X2NvdW50lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeS5oZWFkZXJfbWF4X2NvdW50lGoNjwAAdJSMJ2VtYWlsLnBvbGljeS5Qb2xpY3kuaGVhZGVyX3NvdXJjZV9wYXJzZZQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5Qb2xpY3kuaGVhZGVyX3NvdXJjZV9wYXJzZZRqDY8AAHSUjCZlbWFpbC5wb2xpY3kuUG9saWN5LmhlYWRlcl9zdG9yZV9wYXJzZZQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5Qb2xpY3kuaGVhZGVyX3N0b3JlX3BhcnNllGoNjwAAdJSMI2VtYWlsLnBvbGljeS5Qb2xpY3kucmVnaXN0ZXJfZGVmZWN0lChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeS5yZWdpc3Rlcl9kZWZlY3SUag2PAAB0lIwVZmlsZWNtcC5kaXJjbXAucmVwb3J0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLnJlcG9ydJRqDY8AAHSUjCJmaWxlY21wLmRpcmNtcC5yZXBvcnRfZnVsbF9jbG9zdXJllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuZGlyY21wLnJlcG9ydF9mdWxsX2Nsb3N1cmWUag2PAAB0lIwlZmlsZWNtcC5kaXJjbXAucmVwb3J0X3BhcnRpYWxfY2xvc3VyZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmRpcmNtcC5yZXBvcnRfcGFydGlhbF9jbG9zdXJllGoNjwAAdJSMFmZsb2F0LmFzX2ludGVnZXJfcmF0aW+UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zsb2F0LmFzX2ludGVnZXJfcmF0aW+Uag2PAAB0lIwNZmxvYXQuZnJvbWhleJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZmxvYXQuZnJvbWhleJRqDY8AAHSUjAlmbG9hdC5oZXiUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zsb2F0LmhleJRqDY8AAHSUjBBmbG9hdC5pc19pbnRlZ2VylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmbG9hdC5pc19pbnRlZ2VylGoNjwAAdJSMJGZvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2Zsb3dpbmdfZGF0YZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2Zsb3dpbmdfZGF0YZRqDY8AAHSUjCBmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9ob3JfcnVsZZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2hvcl9ydWxllGoNjwAAdJSMImZvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2xhYmVsX2RhdGGUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9sYWJlbF9kYXRhlGoNjwAAdJSMImZvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2xpbmVfYnJlYWuUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFkZF9saW5lX2JyZWFrlGoNjwAAdJSMJGZvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2xpdGVyYWxfZGF0YZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIuYWRkX2xpdGVyYWxfZGF0YZRqDY8AAHSUjCRmb3JtYXR0ZXIuZm9ybWF0dGVyLmFzc2VydF9saW5lX2RhdGGUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLmFzc2VydF9saW5lX2RhdGGUag2PAAB0lIwhZm9ybWF0dGVyLmZvcm1hdHRlci5lbmRfcGFyYWdyYXBolChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5lbmRfcGFyYWdyYXBolGoNjwAAdJSMI2Zvcm1hdHRlci5mb3JtYXR0ZXIuZmx1c2hfc29mdHNwYWNllChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5mbHVzaF9zb2Z0c3BhY2WUag2PAAB0lIwhZm9ybWF0dGVyLmZvcm1hdHRlci5wb3BfYWxpZ25tZW50lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5wb3BfYWxpZ25tZW50lGoNjwAAdJSMHGZvcm1hdHRlci5mb3JtYXR0ZXIucG9wX2ZvbnSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnBvcF9mb250lGoNjwAAdJSMHmZvcm1hdHRlci5mb3JtYXR0ZXIucG9wX21hcmdpbpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIucG9wX21hcmdpbpRqDY8AAHSUjB1mb3JtYXR0ZXIuZm9ybWF0dGVyLnBvcF9zdHlsZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIucG9wX3N0eWxllGoNjwAAdJSMImZvcm1hdHRlci5mb3JtYXR0ZXIucHVzaF9hbGlnbm1lbnSUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnB1c2hfYWxpZ25tZW50lGoNjwAAdJSMHWZvcm1hdHRlci5mb3JtYXR0ZXIucHVzaF9mb250lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX2ZvbnSUag2PAAB0lIwfZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX21hcmdpbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5mb3JtYXR0ZXIucHVzaF9tYXJnaW6Uag2PAAB0lIweZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX3N0eWxllChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLmZvcm1hdHRlci5wdXNoX3N0eWxllGoNjwAAdJSMH2Zvcm1hdHRlci5mb3JtYXR0ZXIuc2V0X3NwYWNpbmeUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuZm9ybWF0dGVyLnNldF9zcGFjaW5nlGoNjwAAdJSMFmZvcm1hdHRlci53cml0ZXIuZmx1c2iUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLmZsdXNolGoNjwAAdJSMHmZvcm1hdHRlci53cml0ZXIubmV3X2FsaWdubWVudJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIubmV3X2FsaWdubWVudJRqDY8AAHSUjBlmb3JtYXR0ZXIud3JpdGVyLm5ld19mb250lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5uZXdfZm9udJRqDY8AAHSUjBtmb3JtYXR0ZXIud3JpdGVyLm5ld19tYXJnaW6UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLm5ld19tYXJnaW6Uag2PAAB0lIwcZm9ybWF0dGVyLndyaXRlci5uZXdfc3BhY2luZ5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIubmV3X3NwYWNpbmeUag2PAAB0lIwbZm9ybWF0dGVyLndyaXRlci5uZXdfc3R5bGVzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5uZXdfc3R5bGVzlGoNjwAAdJSMImZvcm1hdHRlci53cml0ZXIuc2VuZF9mbG93aW5nX2RhdGGUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIud3JpdGVyLnNlbmRfZmxvd2luZ19kYXRhlGoNjwAAdJSMHmZvcm1hdHRlci53cml0ZXIuc2VuZF9ob3JfcnVsZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIuc2VuZF9ob3JfcnVsZZRqDY8AAHSUjCBmb3JtYXR0ZXIud3JpdGVyLnNlbmRfbGFiZWxfZGF0YZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIuc2VuZF9sYWJlbF9kYXRhlGoNjwAAdJSMIGZvcm1hdHRlci53cml0ZXIuc2VuZF9saW5lX2JyZWFrlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLndyaXRlci5zZW5kX2xpbmVfYnJlYWuUag2PAAB0lIwiZm9ybWF0dGVyLndyaXRlci5zZW5kX2xpdGVyYWxfZGF0YZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIuc2VuZF9saXRlcmFsX2RhdGGUag2PAAB0lIwfZm9ybWF0dGVyLndyaXRlci5zZW5kX3BhcmFncmFwaJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci53cml0ZXIuc2VuZF9wYXJhZ3JhcGiUag2PAAB0lIwbZnJhY3Rpb25zLkZyYWN0aW9uLl9fY2VpbF9flChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLkZyYWN0aW9uLl9fY2VpbF9flGoNjwAAdJSMHGZyYWN0aW9ucy5GcmFjdGlvbi5fX2Zsb29yX1+UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb24uX19mbG9vcl9flGoNjwAAdJSMHGZyYWN0aW9ucy5GcmFjdGlvbi5fX3JvdW5kX1+UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb24uX19yb3VuZF9flGoNjwAAdJSMI2ZyYWN0aW9ucy5GcmFjdGlvbi5hc19pbnRlZ2VyX3JhdGlvlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLkZyYWN0aW9uLmFzX2ludGVnZXJfcmF0aW+Uag2PAAB0lIwfZnJhY3Rpb25zLkZyYWN0aW9uLmZyb21fZGVjaW1hbJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZyYWN0aW9ucy5odG1sI2ZyYWN0aW9ucy5GcmFjdGlvbi5mcm9tX2RlY2ltYWyUag2PAAB0lIwdZnJhY3Rpb25zLkZyYWN0aW9uLmZyb21fZmxvYXSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb24uZnJvbV9mbG9hdJRqDY8AAHSUjCRmcmFjdGlvbnMuRnJhY3Rpb24ubGltaXRfZGVub21pbmF0b3KUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNmcmFjdGlvbnMuRnJhY3Rpb24ubGltaXRfZGVub21pbmF0b3KUag2PAAB0lIwLZnJhbWUuY2xlYXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2ZyYW1lLmNsZWFylGoNjwAAdJSMDWZyb3plbnNldC5hZGSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5hZGSUag2PAAB0lIwPZnJvemVuc2V0LmNsZWFylChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuY2xlYXKUag2PAAB0lIwOZnJvemVuc2V0LmNvcHmUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5jb3B5lGoNjwAAdJSMFGZyb3plbnNldC5kaWZmZXJlbmNllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuZGlmZmVyZW5jZZRqDY8AAHSUjBtmcm96ZW5zZXQuZGlmZmVyZW5jZV91cGRhdGWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5kaWZmZXJlbmNlX3VwZGF0ZZRqDY8AAHSUjBFmcm96ZW5zZXQuZGlzY2FyZJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmRpc2NhcmSUag2PAAB0lIwWZnJvemVuc2V0LmludGVyc2VjdGlvbpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmludGVyc2VjdGlvbpRqDY8AAHSUjB1mcm96ZW5zZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LmludGVyc2VjdGlvbl91cGRhdGWUag2PAAB0lIwUZnJvemVuc2V0LmlzZGlzam9pbnSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5pc2Rpc2pvaW50lGoNjwAAdJSMEmZyb3plbnNldC5pc3N1YnNldJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0Lmlzc3Vic2V0lGoNjwAAdJSMFGZyb3plbnNldC5pc3N1cGVyc2V0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuaXNzdXBlcnNldJRqDY8AAHSUjA1mcm96ZW5zZXQucG9wlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQucG9wlGoNjwAAdJSMEGZyb3plbnNldC5yZW1vdmWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC5yZW1vdmWUag2PAAB0lIweZnJvemVuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQuc3ltbWV0cmljX2RpZmZlcmVuY2WUag2PAAB0lIwlZnJvemVuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjZnJvemVuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZZRqDY8AAHSUjA9mcm96ZW5zZXQudW5pb26UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldC51bmlvbpRqDY8AAHSUjBBmcm96ZW5zZXQudXBkYXRllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNmcm96ZW5zZXQudXBkYXRllGoNjwAAdJSMEGZ0cGxpYi5GVFAuYWJvcnSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmFib3J0lGoNjwAAdJSMEGZ0cGxpYi5GVFAuY2xvc2WUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmNsb3NllGoNjwAAdJSMEmZ0cGxpYi5GVFAuY29ubmVjdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuY29ubmVjdJRqDY8AAHSUjA5mdHBsaWIuRlRQLmN3ZJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuY3dklGoNjwAAdJSMEWZ0cGxpYi5GVFAuZGVsZXRllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5kZWxldGWUag2PAAB0lIwOZnRwbGliLkZUUC5kaXKUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmRpcpRqDY8AAHSUjBVmdHBsaWIuRlRQLmdldHdlbGNvbWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLmdldHdlbGNvbWWUag2PAAB0lIwQZnRwbGliLkZUUC5sb2dpbpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAubG9naW6Uag2PAAB0lIwOZnRwbGliLkZUUC5ta2SUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLm1rZJRqDY8AAHSUjA9mdHBsaWIuRlRQLm1sc2SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLm1sc2SUag2PAAB0lIwPZnRwbGliLkZUUC5ubHN0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5ubHN0lGoNjwAAdJSMF2Z0cGxpYi5GVFAubnRyYW5zZmVyY21klChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5udHJhbnNmZXJjbWSUag2PAAB0lIwOZnRwbGliLkZUUC5wd2SUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnB3ZJRqDY8AAHSUjA9mdHBsaWIuRlRQLnF1aXSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnF1aXSUag2PAAB0lIwRZnRwbGliLkZUUC5yZW5hbWWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnJlbmFtZZRqDY8AAHSUjBVmdHBsaWIuRlRQLnJldHJiaW5hcnmUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnJldHJiaW5hcnmUag2PAAB0lIwUZnRwbGliLkZUUC5yZXRybGluZXOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnJldHJsaW5lc5RqDY8AAHSUjA5mdHBsaWIuRlRQLnJtZJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAucm1klGoNjwAAdJSMEmZ0cGxpYi5GVFAuc2VuZGNtZJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAuc2VuZGNtZJRqDY8AAHSUjBlmdHBsaWIuRlRQLnNldF9kZWJ1Z2xldmVslChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5zZXRfZGVidWdsZXZlbJRqDY8AAHSUjBNmdHBsaWIuRlRQLnNldF9wYXN2lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5zZXRfcGFzdpRqDY8AAHSUjA9mdHBsaWIuRlRQLnNpemWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQLnNpemWUag2PAAB0lIwVZnRwbGliLkZUUC5zdG9yYmluYXJ5lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5zdG9yYmluYXJ5lGoNjwAAdJSMFGZ0cGxpYi5GVFAuc3RvcmxpbmVzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC5zdG9ybGluZXOUag2PAAB0lIwWZnRwbGliLkZUUC50cmFuc2ZlcmNtZJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFAudHJhbnNmZXJjbWSUag2PAAB0lIwSZnRwbGliLkZUUC52b2lkY21klChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUC52b2lkY21klGoNjwAAdJSME2Z0cGxpYi5GVFBfVExTLmF1dGiUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQX1RMUy5hdXRolGoNjwAAdJSMEmZ0cGxpYi5GVFBfVExTLmNjY5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBfVExTLmNjY5RqDY8AAHSUjBVmdHBsaWIuRlRQX1RMUy5wcm90X2OUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuRlRQX1RMUy5wcm90X2OUag2PAAB0lIwVZnRwbGliLkZUUF9UTFMucHJvdF9wlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUF9UTFMucHJvdF9wlGoNjwAAdJSMEmdlbmVyYXRvci5fX25leHRfX5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNnZW5lcmF0b3IuX19uZXh0X1+Uag2PAAB0lIwPZ2VuZXJhdG9yLmNsb3NllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dlbmVyYXRvci5jbG9zZZRqDY8AAHSUjA5nZW5lcmF0b3Iuc2VuZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNnZW5lcmF0b3Iuc2VuZJRqDY8AAHSUjA9nZW5lcmF0b3IudGhyb3eUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ2VuZXJhdG9yLnRocm93lGoNjwAAdJSMH2dldHRleHQuR05VVHJhbnNsYXRpb25zLmdldHRleHSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMuZ2V0dGV4dJRqDY8AAHSUjCBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy5sZ2V0dGV4dJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy5sZ2V0dGV4dJRqDY8AAHSUjCFnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy5sbmdldHRleHSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMubG5nZXR0ZXh0lGoNjwAAdJSMIGdldHRleHQuR05VVHJhbnNsYXRpb25zLm5nZXR0ZXh0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuR05VVHJhbnNsYXRpb25zLm5nZXR0ZXh0lGoNjwAAdJSMIWdldHRleHQuR05VVHJhbnNsYXRpb25zLm5wZ2V0dGV4dJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucy5ucGdldHRleHSUag2PAAB0lIwgZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMucGdldHRleHSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMucGdldHRleHSUag2PAAB0lIwfZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLl9wYXJzZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuX3BhcnNllGoNjwAAdJSMJWdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5hZGRfZmFsbGJhY2uUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmFkZF9mYWxsYmFja5RqDY8AAHSUjCBnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuY2hhcnNldJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuY2hhcnNldJRqDY8AAHSUjCBnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuZ2V0dGV4dJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuZ2V0dGV4dJRqDY8AAHSUjB1nZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuaW5mb5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuaW5mb5RqDY8AAHSUjCBnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuaW5zdGFsbJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuaW5zdGFsbJRqDY8AAHSUjCFnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMubGdldHRleHSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmxnZXR0ZXh0lGoNjwAAdJSMImdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5sbmdldHRleHSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLmxuZ2V0dGV4dJRqDY8AAHSUjCFnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMubmdldHRleHSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLm5nZXR0ZXh0lGoNjwAAdJSMImdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5ucGdldHRleHSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLm5wZ2V0dGV4dJRqDY8AAHSUjCdnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMub3V0cHV0X2NoYXJzZXSUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLm91dHB1dF9jaGFyc2V0lGoNjwAAdJSMIWdldHRleHQuTnVsbFRyYW5zbGF0aW9ucy5wZ2V0dGV4dJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMucGdldHRleHSUag2PAAB0lIwrZ2V0dGV4dC5OdWxsVHJhbnNsYXRpb25zLnNldF9vdXRwdXRfY2hhcnNldJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnMuc2V0X291dHB1dF9jaGFyc2V0lGoNjwAAdJSMEmd6aXAuR3ppcEZpbGUucGVla5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2d6aXAuaHRtbCNnemlwLkd6aXBGaWxlLnBlZWuUag2PAAB0lIwRaGFzaGxpYi5oYXNoLmNvcHmUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLmNvcHmUag2PAAB0lIwTaGFzaGxpYi5oYXNoLmRpZ2VzdJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLmhhc2guZGlnZXN0lGoNjwAAdJSMFmhhc2hsaWIuaGFzaC5oZXhkaWdlc3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLmhleGRpZ2VzdJRqDY8AAHSUjBNoYXNobGliLmhhc2gudXBkYXRllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuaGFzaC51cGRhdGWUag2PAAB0lIwUaGFzaGxpYi5zaGFrZS5kaWdlc3SUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5zaGFrZS5kaWdlc3SUag2PAAB0lIwXaGFzaGxpYi5zaGFrZS5oZXhkaWdlc3SUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5zaGFrZS5oZXhkaWdlc3SUag2PAAB0lIwOaG1hYy5ITUFDLmNvcHmUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5ITUFDLmNvcHmUag2PAAB0lIwQaG1hYy5ITUFDLmRpZ2VzdJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2htYWMuaHRtbCNobWFjLkhNQUMuZGlnZXN0lGoNjwAAdJSME2htYWMuSE1BQy5oZXhkaWdlc3SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5ITUFDLmhleGRpZ2VzdJRqDY8AAHSUjBBobWFjLkhNQUMudXBkYXRllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaG1hYy5odG1sI2htYWMuSE1BQy51cGRhdGWUag2PAAB0lIwcaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5jbG9zZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0bWwucGFyc2VyLmh0bWwjaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5jbG9zZZRqDY8AAHSUjBtodG1sLnBhcnNlci5IVE1MUGFyc2VyLmZlZWSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLnBhcnNlci5odG1sI2h0bWwucGFyc2VyLkhUTUxQYXJzZXIuZmVlZJRqDY8AAHSUjChodG1sLnBhcnNlci5IVE1MUGFyc2VyLmdldF9zdGFydHRhZ190ZXh0lChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHRtbC5wYXJzZXIuaHRtbCNodG1sLnBhcnNlci5IVE1MUGFyc2VyLmdldF9zdGFydHRhZ190ZXh0lGoNjwAAdJSMHWh0bWwucGFyc2VyLkhUTUxQYXJzZXIuZ2V0cG9zlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHRtbC5wYXJzZXIuaHRtbCNodG1sLnBhcnNlci5IVE1MUGFyc2VyLmdldHBvc5RqDY8AAHSUjCVodG1sLnBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9jaGFycmVmlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHRtbC5wYXJzZXIuaHRtbCNodG1sLnBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9jaGFycmVmlGoNjwAAdJSMJWh0bWwucGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2NvbW1lbnSUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLnBhcnNlci5odG1sI2h0bWwucGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2NvbW1lbnSUag2PAAB0lIwiaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZGF0YZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0bWwucGFyc2VyLmh0bWwjaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZGF0YZRqDY8AAHSUjCJodG1sLnBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9kZWNslChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHRtbC5wYXJzZXIuaHRtbCNodG1sLnBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9kZWNslGoNjwAAdJSMJGh0bWwucGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2VuZHRhZ5QoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0bWwucGFyc2VyLmh0bWwjaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZW5kdGFnlGoNjwAAdJSMJ2h0bWwucGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX2VudGl0eXJlZpQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0bWwucGFyc2VyLmh0bWwjaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfZW50aXR5cmVmlGoNjwAAdJSMIGh0bWwucGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX3BplChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHRtbC5wYXJzZXIuaHRtbCNodG1sLnBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9waZRqDY8AAHSUjClodG1sLnBhcnNlci5IVE1MUGFyc2VyLmhhbmRsZV9zdGFydGVuZHRhZ5QoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0bWwucGFyc2VyLmh0bWwjaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfc3RhcnRlbmR0YWeUag2PAAB0lIwmaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5oYW5kbGVfc3RhcnR0YWeUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLnBhcnNlci5odG1sI2h0bWwucGFyc2VyLkhUTUxQYXJzZXIuaGFuZGxlX3N0YXJ0dGFnlGoNjwAAdJSMHGh0bWwucGFyc2VyLkhUTUxQYXJzZXIucmVzZXSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLnBhcnNlci5odG1sI2h0bWwucGFyc2VyLkhUTUxQYXJzZXIucmVzZXSUag2PAAB0lIwjaHRtbC5wYXJzZXIuSFRNTFBhcnNlci51bmtub3duX2RlY2yUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLnBhcnNlci5odG1sI2h0bWwucGFyc2VyLkhUTUxQYXJzZXIudW5rbm93bl9kZWNslGoNjwAAdJSMIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLmNsb3NllChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5jbG9zZZRqDY8AAHSUjCJodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5jb25uZWN0lChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5jb25uZWN0lGoNjwAAdJSMJWh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLmVuZGhlYWRlcnOUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLmVuZGhlYWRlcnOUag2PAAB0lIwmaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24uZ2V0cmVzcG9uc2WUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLmdldHJlc3BvbnNllGoNjwAAdJSMJGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLnB1dGhlYWRlcpQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ucHV0aGVhZGVylGoNjwAAdJSMJWh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLnB1dHJlcXVlc3SUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLnB1dHJlcXVlc3SUag2PAAB0lIwiaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ucmVxdWVzdJQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ucmVxdWVzdJRqDY8AAHSUjB9odHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5zZW5klChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5zZW5klGoNjwAAdJSMKWh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLnNldF9kZWJ1Z2xldmVslChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5zZXRfZGVidWdsZXZlbJRqDY8AAHSUjCVodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5zZXRfdHVubmVslChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5zZXRfdHVubmVslGoNjwAAdJSMH2h0dHAuY2xpZW50LkhUVFBSZXNwb25zZS5maWxlbm+UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBSZXNwb25zZS5maWxlbm+Uag2PAAB0lIwiaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLmdldGhlYWRlcpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLmdldGhlYWRlcpRqDY8AAHSUjCNodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuZ2V0aGVhZGVyc5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLmdldGhlYWRlcnOUag2PAAB0lIwdaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLnJlYWSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBSZXNwb25zZS5yZWFklGoNjwAAdJSMIWh0dHAuY2xpZW50LkhUVFBSZXNwb25zZS5yZWFkaW50b5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLnJlYWRpbnRvlGoNjwAAdJSMKmh0dHAuY29va2llamFyLkNvb2tpZS5nZXRfbm9uc3RhbmRhcmRfYXR0cpQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llLmdldF9ub25zdGFuZGFyZF9hdHRylGoNjwAAdJSMKmh0dHAuY29va2llamFyLkNvb2tpZS5oYXNfbm9uc3RhbmRhcmRfYXR0cpQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llLmhhc19ub25zdGFuZGFyZF9hdHRylGoNjwAAdJSMIGh0dHAuY29va2llamFyLkNvb2tpZS5pc19leHBpcmVklChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWUuaXNfZXhwaXJlZJRqDY8AAHSUjCpodHRwLmNvb2tpZWphci5Db29raWUuc2V0X25vbnN0YW5kYXJkX2F0dHKUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZS5zZXRfbm9uc3RhbmRhcmRfYXR0cpRqDY8AAHSUjCpodHRwLmNvb2tpZWphci5Db29raWVKYXIuYWRkX2Nvb2tpZV9oZWFkZXKUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZUphci5hZGRfY29va2llX2hlYWRlcpRqDY8AAHSUjB5odHRwLmNvb2tpZWphci5Db29raWVKYXIuY2xlYXKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZUphci5jbGVhcpRqDY8AAHSUjC5odHRwLmNvb2tpZWphci5Db29raWVKYXIuY2xlYXJfc2Vzc2lvbl9jb29raWVzlChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWVKYXIuY2xlYXJfc2Vzc2lvbl9jb29raWVzlGoNjwAAdJSMKGh0dHAuY29va2llamFyLkNvb2tpZUphci5leHRyYWN0X2Nvb2tpZXOUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZUphci5leHRyYWN0X2Nvb2tpZXOUag2PAAB0lIwlaHR0cC5jb29raWVqYXIuQ29va2llSmFyLm1ha2VfY29va2llc5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llSmFyLm1ha2VfY29va2llc5RqDY8AAHSUjCNodHRwLmNvb2tpZWphci5Db29raWVKYXIuc2V0X2Nvb2tpZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llSmFyLnNldF9jb29raWWUag2PAAB0lIwpaHR0cC5jb29raWVqYXIuQ29va2llSmFyLnNldF9jb29raWVfaWZfb2uUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkNvb2tpZUphci5zZXRfY29va2llX2lmX29rlGoNjwAAdJSMI2h0dHAuY29va2llamFyLkNvb2tpZUphci5zZXRfcG9saWN5lChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWVKYXIuc2V0X3BvbGljeZRqDY8AAHSUjCxodHRwLmNvb2tpZWphci5Db29raWVQb2xpY3kuZG9tYWluX3JldHVybl9va5QoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llUG9saWN5LmRvbWFpbl9yZXR1cm5fb2uUag2PAAB0lIwqaHR0cC5jb29raWVqYXIuQ29va2llUG9saWN5LnBhdGhfcmV0dXJuX29rlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWVQb2xpY3kucGF0aF9yZXR1cm5fb2uUag2PAAB0lIwlaHR0cC5jb29raWVqYXIuQ29va2llUG9saWN5LnJldHVybl9va5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuQ29va2llUG9saWN5LnJldHVybl9va5RqDY8AAHSUjCJodHRwLmNvb2tpZWphci5Db29raWVQb2xpY3kuc2V0X29rlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWVQb2xpY3kuc2V0X29rlGoNjwAAdJSMMmh0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuYWxsb3dlZF9kb21haW5zlChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LmFsbG93ZWRfZG9tYWluc5RqDY8AAHSUjDJodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LmJsb2NrZWRfZG9tYWluc5QoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5ibG9ja2VkX2RvbWFpbnOUag2PAAB0lIwtaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5pc19ibG9ja2VklChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LmlzX2Jsb2NrZWSUag2PAAB0lIwxaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5pc19ub3RfYWxsb3dlZJQoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeS5pc19ub3RfYWxsb3dlZJRqDY8AAHSUjDZodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LnNldF9hbGxvd2VkX2RvbWFpbnOUKGoKjwAAaguPAACMbGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuc2V0X2FsbG93ZWRfZG9tYWluc5RqDY8AAHSUjDZodHRwLmNvb2tpZWphci5EZWZhdWx0Q29va2llUG9saWN5LnNldF9ibG9ja2VkX2RvbWFpbnOUKGoKjwAAaguPAACMbGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkRlZmF1bHRDb29raWVQb2xpY3kuc2V0X2Jsb2NrZWRfZG9tYWluc5RqDY8AAHSUjCFodHRwLmNvb2tpZWphci5GaWxlQ29va2llSmFyLmxvYWSUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLkZpbGVDb29raWVKYXIubG9hZJRqDY8AAHSUjCNodHRwLmNvb2tpZWphci5GaWxlQ29va2llSmFyLnJldmVydJQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuRmlsZUNvb2tpZUphci5yZXZlcnSUag2PAAB0lIwhaHR0cC5jb29raWVqYXIuRmlsZUNvb2tpZUphci5zYXZllChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5GaWxlQ29va2llSmFyLnNhdmWUag2PAAB0lIwhaHR0cC5jb29raWVzLkJhc2VDb29raWUuanNfb3V0cHV0lChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjaHR0cC5jb29raWVzLkJhc2VDb29raWUuanNfb3V0cHV0lGoNjwAAdJSMHGh0dHAuY29va2llcy5CYXNlQ29va2llLmxvYWSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNodHRwLmNvb2tpZXMuQmFzZUNvb2tpZS5sb2FklGoNjwAAdJSMHmh0dHAuY29va2llcy5CYXNlQ29va2llLm91dHB1dJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llcy5odG1sI2h0dHAuY29va2llcy5CYXNlQ29va2llLm91dHB1dJRqDY8AAHSUjCRodHRwLmNvb2tpZXMuQmFzZUNvb2tpZS52YWx1ZV9kZWNvZGWUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNodHRwLmNvb2tpZXMuQmFzZUNvb2tpZS52YWx1ZV9kZWNvZGWUag2PAAB0lIwkaHR0cC5jb29raWVzLkJhc2VDb29raWUudmFsdWVfZW5jb2RllChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjaHR0cC5jb29raWVzLkJhc2VDb29raWUudmFsdWVfZW5jb2RllGoNjwAAdJSMIGh0dHAuY29va2llcy5Nb3JzZWwuT3V0cHV0U3RyaW5nlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjaHR0cC5jb29raWVzLk1vcnNlbC5PdXRwdXRTdHJpbmeUag2PAAB0lIwYaHR0cC5jb29raWVzLk1vcnNlbC5jb3B5lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjaHR0cC5jb29raWVzLk1vcnNlbC5jb3B5lGoNjwAAdJSMIWh0dHAuY29va2llcy5Nb3JzZWwuaXNSZXNlcnZlZEtleZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llcy5odG1sI2h0dHAuY29va2llcy5Nb3JzZWwuaXNSZXNlcnZlZEtleZRqDY8AAHSUjB1odHRwLmNvb2tpZXMuTW9yc2VsLmpzX291dHB1dJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llcy5odG1sI2h0dHAuY29va2llcy5Nb3JzZWwuanNfb3V0cHV0lGoNjwAAdJSMGmh0dHAuY29va2llcy5Nb3JzZWwub3V0cHV0lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjaHR0cC5jb29raWVzLk1vcnNlbC5vdXRwdXSUag2PAAB0lIwXaHR0cC5jb29raWVzLk1vcnNlbC5zZXSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNodHRwLmNvb2tpZXMuTW9yc2VsLnNldJRqDY8AAHSUjB5odHRwLmNvb2tpZXMuTW9yc2VsLnNldGRlZmF1bHSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNodHRwLmNvb2tpZXMuTW9yc2VsLnNldGRlZmF1bHSUag2PAAB0lIwaaHR0cC5jb29raWVzLk1vcnNlbC51cGRhdGWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNodHRwLmNvb2tpZXMuTW9yc2VsLnVwZGF0ZZRqDY8AAHSUjDFodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmFkZHJlc3Nfc3RyaW5nlChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmFkZHJlc3Nfc3RyaW5nlGoNjwAAdJSMM2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZGF0ZV90aW1lX3N0cmluZ5QoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuc2VydmVyLmh0bWwjaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5kYXRlX3RpbWVfc3RyaW5nlGoNjwAAdJSMLmh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZW5kX2hlYWRlcnOUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuZW5kX2hlYWRlcnOUag2PAAB0lIwwaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5mbHVzaF9oZWFkZXJzlChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLmZsdXNoX2hlYWRlcnOUag2PAAB0lIwpaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGWUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxllGoNjwAAdJSMNGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxlX2V4cGVjdF8xMDCUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxlX2V4cGVjdF8xMDCUag2PAAB0lIw1aHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5oYW5kbGVfb25lX3JlcXVlc3SUKGoKjwAAaguPAACMaGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuaGFuZGxlX29uZV9yZXF1ZXN0lGoNjwAAdJSMN2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX2RhdGVfdGltZV9zdHJpbmeUKGoKjwAAaguPAACMamh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX2RhdGVfdGltZV9zdHJpbmeUag2PAAB0lIwsaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfZXJyb3KUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX2Vycm9ylGoNjwAAdJSMLmh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX21lc3NhZ2WUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX21lc3NhZ2WUag2PAAB0lIwuaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfcmVxdWVzdJQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuc2VydmVyLmh0bWwjaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5sb2dfcmVxdWVzdJRqDY8AAHSUjC1odHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnNlbmRfZXJyb3KUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvcpRqDY8AAHSUjC5odHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnNlbmRfaGVhZGVylChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnNlbmRfaGVhZGVylGoNjwAAdJSMMGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9yZXNwb25zZZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuc2VydmVyLmh0bWwjaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5zZW5kX3Jlc3BvbnNllGoNjwAAdJSMNWh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9yZXNwb25zZV9vbmx5lChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnNlbmRfcmVzcG9uc2Vfb25seZRqDY8AAHSUjDFodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnZlcnNpb25fc3RyaW5nlChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLnZlcnNpb25fc3RyaW5nlGoNjwAAdJSMKWh0dHAuc2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlci5kb19QT1NUlChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5DR0lIVFRQUmVxdWVzdEhhbmRsZXIuZG9fUE9TVJRqDY8AAHSUjCtodHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fR0VUlChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fR0VUlGoNjwAAdJSMLGh0dHAuc2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5kb19IRUFElChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fSEVBRJRqDY8AAHSUjBRpbWFwbGliLklNQVA0LmFwcGVuZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmFwcGVuZJRqDY8AAHSUjBppbWFwbGliLklNQVA0LmF1dGhlbnRpY2F0ZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmF1dGhlbnRpY2F0ZZRqDY8AAHSUjBNpbWFwbGliLklNQVA0LmNoZWNrlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuY2hlY2uUag2PAAB0lIwTaW1hcGxpYi5JTUFQNC5jbG9zZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmNsb3NllGoNjwAAdJSMEmltYXBsaWIuSU1BUDQuY29weZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmNvcHmUag2PAAB0lIwUaW1hcGxpYi5JTUFQNC5jcmVhdGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5jcmVhdGWUag2PAAB0lIwUaW1hcGxpYi5JTUFQNC5kZWxldGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5kZWxldGWUag2PAAB0lIwXaW1hcGxpYi5JTUFQNC5kZWxldGVhY2yUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5kZWxldGVhY2yUag2PAAB0lIwUaW1hcGxpYi5JTUFQNC5lbmFibGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5lbmFibGWUag2PAAB0lIwVaW1hcGxpYi5JTUFQNC5leHB1bmdllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuZXhwdW5nZZRqDY8AAHSUjBNpbWFwbGliLklNQVA0LmZldGNolChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuZmV0Y2iUag2PAAB0lIwUaW1hcGxpYi5JTUFQNC5nZXRhY2yUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5nZXRhY2yUag2PAAB0lIwbaW1hcGxpYi5JTUFQNC5nZXRhbm5vdGF0aW9ulChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuZ2V0YW5ub3RhdGlvbpRqDY8AAHSUjBZpbWFwbGliLklNQVA0LmdldHF1b3RhlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuZ2V0cXVvdGGUag2PAAB0lIwaaW1hcGxpYi5JTUFQNC5nZXRxdW90YXJvb3SUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5nZXRxdW90YXJvb3SUag2PAAB0lIwSaW1hcGxpYi5JTUFQNC5saXN0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQubGlzdJRqDY8AAHSUjBNpbWFwbGliLklNQVA0LmxvZ2lulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQubG9naW6Uag2PAAB0lIwcaW1hcGxpYi5JTUFQNC5sb2dpbl9jcmFtX21kNZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmxvZ2luX2NyYW1fbWQ1lGoNjwAAdJSMFGltYXBsaWIuSU1BUDQubG9nb3V0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQubG9nb3V0lGoNjwAAdJSMEmltYXBsaWIuSU1BUDQubHN1YpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LmxzdWKUag2PAAB0lIwWaW1hcGxpYi5JTUFQNC5teXJpZ2h0c5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0Lm15cmlnaHRzlGoNjwAAdJSMF2ltYXBsaWIuSU1BUDQubmFtZXNwYWNllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQubmFtZXNwYWNllGoNjwAAdJSMEmltYXBsaWIuSU1BUDQubm9vcJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0Lm5vb3CUag2PAAB0lIwSaW1hcGxpYi5JTUFQNC5vcGVulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQub3BlbpRqDY8AAHSUjBVpbWFwbGliLklNQVA0LnBhcnRpYWyUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5wYXJ0aWFslGoNjwAAdJSMF2ltYXBsaWIuSU1BUDQucHJveHlhdXRolChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucHJveHlhdXRolGoNjwAAdJSMEmltYXBsaWIuSU1BUDQucmVhZJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnJlYWSUag2PAAB0lIwWaW1hcGxpYi5JTUFQNC5yZWFkbGluZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnJlYWRsaW5llGoNjwAAdJSMFGltYXBsaWIuSU1BUDQucmVjZW50lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucmVjZW50lGoNjwAAdJSMFGltYXBsaWIuSU1BUDQucmVuYW1llChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQucmVuYW1llGoNjwAAdJSMFmltYXBsaWIuSU1BUDQucmVzcG9uc2WUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5yZXNwb25zZZRqDY8AAHSUjBRpbWFwbGliLklNQVA0LnNlYXJjaJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNlYXJjaJRqDY8AAHSUjBRpbWFwbGliLklNQVA0LnNlbGVjdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNlbGVjdJRqDY8AAHSUjBJpbWFwbGliLklNQVA0LnNlbmSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zZW5klGoNjwAAdJSMFGltYXBsaWIuSU1BUDQuc2V0YWNslChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuc2V0YWNslGoNjwAAdJSMG2ltYXBsaWIuSU1BUDQuc2V0YW5ub3RhdGlvbpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNldGFubm90YXRpb26Uag2PAAB0lIwWaW1hcGxpYi5JTUFQNC5zZXRxdW90YZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNldHF1b3RhlGoNjwAAdJSMFmltYXBsaWIuSU1BUDQuc2h1dGRvd26UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zaHV0ZG93bpRqDY8AAHSUjBRpbWFwbGliLklNQVA0LnNvY2tldJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnNvY2tldJRqDY8AAHSUjBJpbWFwbGliLklNQVA0LnNvcnSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zb3J0lGoNjwAAdJSMFmltYXBsaWIuSU1BUDQuc3RhcnR0bHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zdGFydHRsc5RqDY8AAHSUjBRpbWFwbGliLklNQVA0LnN0YXR1c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnN0YXR1c5RqDY8AAHSUjBNpbWFwbGliLklNQVA0LnN0b3JllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDQuc3RvcmWUag2PAAB0lIwXaW1hcGxpYi5JTUFQNC5zdWJzY3JpYmWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC5zdWJzY3JpYmWUag2PAAB0lIwUaW1hcGxpYi5JTUFQNC50aHJlYWSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC50aHJlYWSUag2PAAB0lIwRaW1hcGxpYi5JTUFQNC51aWSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC51aWSUag2PAAB0lIwZaW1hcGxpYi5JTUFQNC51bnN1YnNjcmliZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLklNQVA0LnVuc3Vic2NyaWJllGoNjwAAdJSME2ltYXBsaWIuSU1BUDQueGF0b22UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNC54YXRvbZRqDY8AAHSUjBxpbXAuTnVsbEltcG9ydGVyLmZpbmRfbW9kdWxllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wLmh0bWwjaW1wLk51bGxJbXBvcnRlci5maW5kX21vZHVsZZRqDY8AAHSUjCppbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWWUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWWUag2PAAB0lIwhaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLmdldF9kYXRhlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLmdldF9kYXRhlGoNjwAAdJSMJWltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5nZXRfZmlsZW5hbWWUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIuZ2V0X2ZpbGVuYW1llGoNjwAAdJSMJGltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5sb2FkX21vZHVsZZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5sb2FkX21vZHVsZZRqDY8AAHSUjCBpbXBvcnRsaWIuYWJjLkZpbmRlci5maW5kX21vZHVsZZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuRmluZGVyLmZpbmRfbW9kdWxllGoNjwAAdJSMJ2ltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5leGVjX21vZHVsZZQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5leGVjX21vZHVsZZRqDY8AAHSUjCRpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGWUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGWUag2PAAB0lIwmaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2WUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZZRqDY8AAHSUjCZpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuaXNfcGFja2FnZZQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5pc19wYWNrYWdllGoNjwAAdJSMJ2ltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5sb2FkX21vZHVsZZQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5sb2FkX21vZHVsZZRqDY8AAHSUjCppbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuc291cmNlX3RvX2NvZGWUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuc291cmNlX3RvX2NvZGWUag2PAAB0lIwiaW1wb3J0bGliLmFiYy5Mb2FkZXIuY3JlYXRlX21vZHVsZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuTG9hZGVyLmNyZWF0ZV9tb2R1bGWUag2PAAB0lIwgaW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZZRqDY8AAHSUjCBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxllGoNjwAAdJSMIGltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXBylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5Mb2FkZXIubW9kdWxlX3JlcHKUag2PAAB0lIwoaW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX21vZHVsZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9tb2R1bGWUag2PAAB0lIwmaW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWOUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY5RqDY8AAHSUjC5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmludmFsaWRhdGVfY2FjaGVzlChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5pbnZhbGlkYXRlX2NhY2hlc5RqDY8AAHSUjClpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX2xvYWRlcpQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfbG9hZGVylGoNjwAAdJSMKWltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfbW9kdWxllChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9tb2R1bGWUag2PAAB0lIwnaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9zcGVjlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9zcGVjlGoNjwAAdJSML2ltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmludmFsaWRhdGVfY2FjaGVzlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXOUag2PAAB0lIwlaW1wb3J0bGliLmFiYy5SZXNvdXJjZUxvYWRlci5nZXRfZGF0YZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuUmVzb3VyY2VMb2FkZXIuZ2V0X2RhdGGUag2PAAB0lIwlaW1wb3J0bGliLmFiYy5SZXNvdXJjZVJlYWRlci5jb250ZW50c5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuUmVzb3VyY2VSZWFkZXIuY29udGVudHOUag2PAAB0lIwoaW1wb3J0bGliLmFiYy5SZXNvdXJjZVJlYWRlci5pc19yZXNvdXJjZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuUmVzb3VyY2VSZWFkZXIuaXNfcmVzb3VyY2WUag2PAAB0lIwqaW1wb3J0bGliLmFiYy5SZXNvdXJjZVJlYWRlci5vcGVuX3Jlc291cmNllChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5SZXNvdXJjZVJlYWRlci5vcGVuX3Jlc291cmNllGoNjwAAdJSMKmltcG9ydGxpYi5hYmMuUmVzb3VyY2VSZWFkZXIucmVzb3VyY2VfcGF0aJQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuUmVzb3VyY2VSZWFkZXIucmVzb3VyY2VfcGF0aJRqDY8AAHSUjCZpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZZQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxllGoNjwAAdJSMI2ltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9jb2RllChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X2NvZGWUag2PAAB0lIwlaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2WUag2PAAB0lIwlaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuaXNfcGFja2FnZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmlzX3BhY2thZ2WUag2PAAB0lIwmaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGWUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZZRqDY8AAHSUjCVpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5wYXRoX210aW1llChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIucGF0aF9tdGltZZRqDY8AAHSUjCVpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5wYXRoX3N0YXRzlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIucGF0aF9zdGF0c5RqDY8AAHSUjCNpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5zZXRfZGF0YZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLnNldF9kYXRhlGoNjwAAdJSMNWltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5jcmVhdGVfbW9kdWxllChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLmNyZWF0ZV9tb2R1bGWUag2PAAB0lIwzaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLmV4ZWNfbW9kdWxllChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLmV4ZWNfbW9kdWxllGoNjwAAdJSMMGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfY29kZZQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfY29kZZRqDY8AAHSUjDRpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIuZ2V0X2ZpbGVuYW1llChqCo8AAGoLjwAAjGVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLmdldF9maWxlbmFtZZRqDY8AAHSUjDJpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIuZ2V0X3NvdXJjZZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfc291cmNllGoNjwAAdJSMMmltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5pc19wYWNrYWdllChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLmlzX3BhY2thZ2WUag2PAAB0lIwqaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLmZpbmRfbG9hZGVylChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLmZpbmRfbG9hZGVylGoNjwAAdJSMKGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5maW5kX3NwZWOUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIuZmluZF9zcGVjlGoNjwAAdJSMMGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5pbnZhbGlkYXRlX2NhY2hlc5QoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5pbnZhbGlkYXRlX2NhY2hlc5RqDY8AAHSUjChpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9va5RqDY8AAHSUjCppbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGWUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGWUag2PAAB0lIwoaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlY5QoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX3NwZWOUag2PAAB0lIwwaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLmludmFsaWRhdGVfY2FjaGVzlChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLmludmFsaWRhdGVfY2FjaGVzlGoNjwAAdJSML2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlci5pc19wYWNrYWdllChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLmlzX3BhY2thZ2WUag2PAAB0lIwwaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLmxvYWRfbW9kdWxllChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLmxvYWRfbW9kdWxllGoNjwAAdJSML2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlci5wYXRoX3N0YXRzlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLnBhdGhfc3RhdHOUag2PAAB0lIwtaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLnNldF9kYXRhlChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLnNldF9kYXRhlGoNjwAAdJSMMWltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIuZ2V0X2NvZGWUKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyLmdldF9jb2RllGoNjwAAdJSMM2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIuZ2V0X3NvdXJjZZQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIuZ2V0X3NvdXJjZZRqDY8AAHSUjDNpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyLmlzX3BhY2thZ2WUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyLmlzX3BhY2thZ2WUag2PAAB0lIw0aW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlci5sb2FkX21vZHVsZZQoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIubG9hZF9tb2R1bGWUag2PAAB0lIwhaW1wb3J0bGliLnV0aWwuTGF6eUxvYWRlci5mYWN0b3J5lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnV0aWwuTGF6eUxvYWRlci5mYWN0b3J5lGoNjwAAdJSMJWluc3BlY3QuQm91bmRBcmd1bWVudHMuYXBwbHlfZGVmYXVsdHOUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5Cb3VuZEFyZ3VtZW50cy5hcHBseV9kZWZhdWx0c5RqDY8AAHSUjBlpbnNwZWN0LlBhcmFtZXRlci5yZXBsYWNllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuUGFyYW1ldGVyLnJlcGxhY2WUag2PAAB0lIwWaW5zcGVjdC5TaWduYXR1cmUuYmluZJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LlNpZ25hdHVyZS5iaW5klGoNjwAAdJSMHmluc3BlY3QuU2lnbmF0dXJlLmJpbmRfcGFydGlhbJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LlNpZ25hdHVyZS5iaW5kX3BhcnRpYWyUag2PAAB0lIwfaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9jYWxsYWJsZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2NhbGxhYmxllGoNjwAAdJSMGWluc3BlY3QuU2lnbmF0dXJlLnJlcGxhY2WUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5TaWduYXR1cmUucmVwbGFjZZRqDY8AAHSUjBRpbnQuYXNfaW50ZWdlcl9yYXRpb5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjaW50LmFzX2ludGVnZXJfcmF0aW+Uag2PAAB0lIwOaW50LmJpdF9sZW5ndGiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ludC5iaXRfbGVuZ3RolGoNjwAAdJSMDmludC5mcm9tX2J5dGVzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNpbnQuZnJvbV9ieXRlc5RqDY8AAHSUjAxpbnQudG9fYnl0ZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2ludC50b19ieXRlc5RqDY8AAHSUjBhpby5CdWZmZXJlZElPQmFzZS5kZXRhY2iUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkSU9CYXNlLmRldGFjaJRqDY8AAHSUjBZpby5CdWZmZXJlZElPQmFzZS5yZWFklChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZS5yZWFklGoNjwAAdJSMF2lvLkJ1ZmZlcmVkSU9CYXNlLnJlYWQxlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZS5yZWFkMZRqDY8AAHSUjBppby5CdWZmZXJlZElPQmFzZS5yZWFkaW50b5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGludG+Uag2PAAB0lIwbaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGludG8xlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZElPQmFzZS5yZWFkaW50bzGUag2PAAB0lIwXaW8uQnVmZmVyZWRJT0Jhc2Uud3JpdGWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkSU9CYXNlLndyaXRllGoNjwAAdJSMFmlvLkJ1ZmZlcmVkUmVhZGVyLnBlZWuUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkUmVhZGVyLnBlZWuUag2PAAB0lIwWaW8uQnVmZmVyZWRSZWFkZXIucmVhZJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRSZWFkZXIucmVhZJRqDY8AAHSUjBdpby5CdWZmZXJlZFJlYWRlci5yZWFkMZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRSZWFkZXIucmVhZDGUag2PAAB0lIwXaW8uQnVmZmVyZWRXcml0ZXIuZmx1c2iUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkV3JpdGVyLmZsdXNolGoNjwAAdJSMF2lvLkJ1ZmZlcmVkV3JpdGVyLndyaXRllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZFdyaXRlci53cml0ZZRqDY8AAHSUjBRpby5CeXRlc0lPLmdldGJ1ZmZlcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uQnl0ZXNJTy5nZXRidWZmZXKUag2PAAB0lIwTaW8uQnl0ZXNJTy5nZXR2YWx1ZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uQnl0ZXNJTy5nZXR2YWx1ZZRqDY8AAHSUjBBpby5CeXRlc0lPLnJlYWQxlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CeXRlc0lPLnJlYWQxlGoNjwAAdJSMFGlvLkJ5dGVzSU8ucmVhZGludG8xlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CeXRlc0lPLnJlYWRpbnRvMZRqDY8AAHSUjBFpby5JT0Jhc2UuX19kZWxfX5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLl9fZGVsX1+Uag2PAAB0lIwPaW8uSU9CYXNlLmNsb3NllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UuY2xvc2WUag2PAAB0lIwQaW8uSU9CYXNlLmZpbGVub5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLmZpbGVub5RqDY8AAHSUjA9pby5JT0Jhc2UuZmx1c2iUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS5mbHVzaJRqDY8AAHSUjBBpby5JT0Jhc2UuaXNhdHR5lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UuaXNhdHR5lGoNjwAAdJSMEmlvLklPQmFzZS5yZWFkYWJsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnJlYWRhYmxllGoNjwAAdJSMEmlvLklPQmFzZS5yZWFkbGluZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnJlYWRsaW5llGoNjwAAdJSME2lvLklPQmFzZS5yZWFkbGluZXOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS5yZWFkbGluZXOUag2PAAB0lIwOaW8uSU9CYXNlLnNlZWuUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS5zZWVrlGoNjwAAdJSMEmlvLklPQmFzZS5zZWVrYWJsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLnNlZWthYmxllGoNjwAAdJSMDmlvLklPQmFzZS50ZWxslChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2UudGVsbJRqDY8AAHSUjBJpby5JT0Jhc2UudHJ1bmNhdGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS50cnVuY2F0ZZRqDY8AAHSUjBJpby5JT0Jhc2Uud3JpdGFibGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLklPQmFzZS53cml0YWJsZZRqDY8AAHSUjBRpby5JT0Jhc2Uud3JpdGVsaW5lc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uSU9CYXNlLndyaXRlbGluZXOUag2PAAB0lIwRaW8uUmF3SU9CYXNlLnJlYWSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLlJhd0lPQmFzZS5yZWFklGoNjwAAdJSMFGlvLlJhd0lPQmFzZS5yZWFkYWxslChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5SYXdJT0Jhc2UucmVhZGFsbJRqDY8AAHSUjBVpby5SYXdJT0Jhc2UucmVhZGludG+UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLlJhd0lPQmFzZS5yZWFkaW50b5RqDY8AAHSUjBJpby5SYXdJT0Jhc2Uud3JpdGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLlJhd0lPQmFzZS53cml0ZZRqDY8AAHSUjBRpby5TdHJpbmdJTy5nZXR2YWx1ZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uU3RyaW5nSU8uZ2V0dmFsdWWUag2PAAB0lIwUaW8uVGV4dElPQmFzZS5kZXRhY2iUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT0Jhc2UuZGV0YWNolGoNjwAAdJSMEmlvLlRleHRJT0Jhc2UucmVhZJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS5yZWFklGoNjwAAdJSMFmlvLlRleHRJT0Jhc2UucmVhZGxpbmWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLlRleHRJT0Jhc2UucmVhZGxpbmWUag2PAAB0lIwSaW8uVGV4dElPQmFzZS5zZWVrlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLnNlZWuUag2PAAB0lIwSaW8uVGV4dElPQmFzZS50ZWxslChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9CYXNlLnRlbGyUag2PAAB0lIwTaW8uVGV4dElPQmFzZS53cml0ZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZS53cml0ZZRqDY8AAHSUjBxpby5UZXh0SU9XcmFwcGVyLnJlY29uZmlndXJllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9XcmFwcGVyLnJlY29uZmlndXJllGoNjwAAdJSMJWlwYWRkcmVzcy5JUHY0TmV0d29yay5hZGRyZXNzX2V4Y2x1ZGWUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsuYWRkcmVzc19leGNsdWRllGoNjwAAdJSMJmlwYWRkcmVzcy5JUHY0TmV0d29yay5jb21wYXJlX25ldHdvcmtzlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjROZXR3b3JrLmNvbXBhcmVfbmV0d29ya3OUag2PAAB0lIwbaXBhZGRyZXNzLklQdjROZXR3b3JrLmhvc3RzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjROZXR3b3JrLmhvc3RzlGoNjwAAdJSMHmlwYWRkcmVzcy5JUHY0TmV0d29yay5vdmVybGFwc5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29yay5vdmVybGFwc5RqDY8AAHSUjB9pcGFkZHJlc3MuSVB2NE5ldHdvcmsuc3VibmV0X29mlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjROZXR3b3JrLnN1Ym5ldF9vZpRqDY8AAHSUjB1pcGFkZHJlc3MuSVB2NE5ldHdvcmsuc3VibmV0c5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29yay5zdWJuZXRzlGoNjwAAdJSMHmlwYWRkcmVzcy5JUHY0TmV0d29yay5zdXBlcm5ldJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29yay5zdXBlcm5ldJRqDY8AAHSUjCFpcGFkZHJlc3MuSVB2NE5ldHdvcmsuc3VwZXJuZXRfb2aUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NE5ldHdvcmsuc3VwZXJuZXRfb2aUag2PAAB0lIwlaXBhZGRyZXNzLklQdjZOZXR3b3JrLmFkZHJlc3NfZXhjbHVkZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay5hZGRyZXNzX2V4Y2x1ZGWUag2PAAB0lIwmaXBhZGRyZXNzLklQdjZOZXR3b3JrLmNvbXBhcmVfbmV0d29ya3OUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuY29tcGFyZV9uZXR3b3Jrc5RqDY8AAHSUjBtpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaG9zdHOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuaG9zdHOUag2PAAB0lIweaXBhZGRyZXNzLklQdjZOZXR3b3JrLm92ZXJsYXBzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZOZXR3b3JrLm92ZXJsYXBzlGoNjwAAdJSMH2lwYWRkcmVzcy5JUHY2TmV0d29yay5zdWJuZXRfb2aUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmsuc3VibmV0X29mlGoNjwAAdJSMHWlwYWRkcmVzcy5JUHY2TmV0d29yay5zdWJuZXRzlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZOZXR3b3JrLnN1Ym5ldHOUag2PAAB0lIweaXBhZGRyZXNzLklQdjZOZXR3b3JrLnN1cGVybmV0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLklQdjZOZXR3b3JrLnN1cGVybmV0lGoNjwAAdJSMIWlwYWRkcmVzcy5JUHY2TmV0d29yay5zdXBlcm5ldF9vZpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY2TmV0d29yay5zdXBlcm5ldF9vZpRqDY8AAHSUjBFpdGVyYXRvci5fX2l0ZXJfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjaXRlcmF0b3IuX19pdGVyX1+Uag2PAAB0lIwRaXRlcmF0b3IuX19uZXh0X1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2l0ZXJhdG9yLl9fbmV4dF9flGoNjwAAdJSMHWl0ZXJ0b29scy5jaGFpbi5mcm9tX2l0ZXJhYmxllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGWUag2PAAB0lIwXanNvbi5KU09ORGVjb2Rlci5kZWNvZGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORGVjb2Rlci5kZWNvZGWUag2PAAB0lIwbanNvbi5KU09ORGVjb2Rlci5yYXdfZGVjb2RllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkRlY29kZXIucmF3X2RlY29kZZRqDY8AAHSUjBhqc29uLkpTT05FbmNvZGVyLmRlZmF1bHSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORW5jb2Rlci5kZWZhdWx0lGoNjwAAdJSMF2pzb24uSlNPTkVuY29kZXIuZW5jb2RllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24uSlNPTkVuY29kZXIuZW5jb2RllGoNjwAAdJSMG2pzb24uSlNPTkVuY29kZXIuaXRlcmVuY29kZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNqc29uLkpTT05FbmNvZGVyLml0ZXJlbmNvZGWUag2PAAB0lIwJbGlzdC5zb3J0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNsaXN0LnNvcnSUag2PAAB0lIwZbG9nZ2luZy5GaWxlSGFuZGxlci5jbG9zZZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLkZpbGVIYW5kbGVyLmNsb3NllGoNjwAAdJSMGGxvZ2dpbmcuRmlsZUhhbmRsZXIuZW1pdJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLkZpbGVIYW5kbGVyLmVtaXSUag2PAAB0lIwVbG9nZ2luZy5GaWx0ZXIuZmlsdGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuRmlsdGVyLmZpbHRlcpRqDY8AAHSUjBhsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0lGoNjwAAdJSMIWxvZ2dpbmcuRm9ybWF0dGVyLmZvcm1hdEV4Y2VwdGlvbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXRFeGNlcHRpb26Uag2PAAB0lIwdbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0U3RhY2uUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0U3RhY2uUag2PAAB0lIwcbG9nZ2luZy5Gb3JtYXR0ZXIuZm9ybWF0VGltZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZvcm1hdHRlci5mb3JtYXRUaW1llGoNjwAAdJSMGGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfX5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuX19pbml0X1+Uag2PAAB0lIwXbG9nZ2luZy5IYW5kbGVyLmFjcXVpcmWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmFjcXVpcmWUag2PAAB0lIwZbG9nZ2luZy5IYW5kbGVyLmFkZEZpbHRlcpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuYWRkRmlsdGVylGoNjwAAdJSMFWxvZ2dpbmcuSGFuZGxlci5jbG9zZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuY2xvc2WUag2PAAB0lIwabG9nZ2luZy5IYW5kbGVyLmNyZWF0ZUxvY2uUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmNyZWF0ZUxvY2uUag2PAAB0lIwUbG9nZ2luZy5IYW5kbGVyLmVtaXSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmVtaXSUag2PAAB0lIwWbG9nZ2luZy5IYW5kbGVyLmZpbHRlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuZmlsdGVylGoNjwAAdJSMFWxvZ2dpbmcuSGFuZGxlci5mbHVzaJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuZmx1c2iUag2PAAB0lIwWbG9nZ2luZy5IYW5kbGVyLmZvcm1hdJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkhhbmRsZXIuZm9ybWF0lGoNjwAAdJSMFmxvZ2dpbmcuSGFuZGxlci5oYW5kbGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmhhbmRsZZRqDY8AAHSUjBtsb2dnaW5nLkhhbmRsZXIuaGFuZGxlRXJyb3KUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLmhhbmRsZUVycm9ylGoNjwAAdJSMF2xvZ2dpbmcuSGFuZGxlci5yZWxlYXNllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5yZWxlYXNllGoNjwAAdJSMHGxvZ2dpbmcuSGFuZGxlci5yZW1vdmVGaWx0ZXKUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVyLnJlbW92ZUZpbHRlcpRqDY8AAHSUjBxsb2dnaW5nLkhhbmRsZXIuc2V0Rm9ybWF0dGVylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5zZXRGb3JtYXR0ZXKUag2PAAB0lIwYbG9nZ2luZy5IYW5kbGVyLnNldExldmVslChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuSGFuZGxlci5zZXRMZXZlbJRqDY8AAHSUjBxsb2dnaW5nLkxvZ1JlY29yZC5nZXRNZXNzYWdllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nUmVjb3JkLmdldE1lc3NhZ2WUag2PAAB0lIwYbG9nZ2luZy5Mb2dnZXIuYWRkRmlsdGVylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmFkZEZpbHRlcpRqDY8AAHSUjBlsb2dnaW5nLkxvZ2dlci5hZGRIYW5kbGVylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmFkZEhhbmRsZXKUag2PAAB0lIwXbG9nZ2luZy5Mb2dnZXIuY3JpdGljYWyUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuY3JpdGljYWyUag2PAAB0lIwUbG9nZ2luZy5Mb2dnZXIuZGVidWeUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuZGVidWeUag2PAAB0lIwUbG9nZ2luZy5Mb2dnZXIuZXJyb3KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuZXJyb3KUag2PAAB0lIwYbG9nZ2luZy5Mb2dnZXIuZXhjZXB0aW9ulChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmV4Y2VwdGlvbpRqDY8AAHSUjBVsb2dnaW5nLkxvZ2dlci5maWx0ZXKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuZmlsdGVylGoNjwAAdJSMGWxvZ2dpbmcuTG9nZ2VyLmZpbmRDYWxsZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuZmluZENhbGxlcpRqDY8AAHSUjBdsb2dnaW5nLkxvZ2dlci5nZXRDaGlsZJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5nZXRDaGlsZJRqDY8AAHSUjCBsb2dnaW5nLkxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbJRqDY8AAHSUjBVsb2dnaW5nLkxvZ2dlci5oYW5kbGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuaGFuZGxllGoNjwAAdJSMGmxvZ2dpbmcuTG9nZ2VyLmhhc0hhbmRsZXJzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLmhhc0hhbmRsZXJzlGoNjwAAdJSME2xvZ2dpbmcuTG9nZ2VyLmluZm+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuaW5mb5RqDY8AAHSUjBtsb2dnaW5nLkxvZ2dlci5pc0VuYWJsZWRGb3KUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIuaXNFbmFibGVkRm9ylGoNjwAAdJSMEmxvZ2dpbmcuTG9nZ2VyLmxvZ5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5sb2eUag2PAAB0lIwZbG9nZ2luZy5Mb2dnZXIubWFrZVJlY29yZJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5tYWtlUmVjb3JklGoNjwAAdJSMG2xvZ2dpbmcuTG9nZ2VyLnJlbW92ZUZpbHRlcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5yZW1vdmVGaWx0ZXKUag2PAAB0lIwcbG9nZ2luZy5Mb2dnZXIucmVtb3ZlSGFuZGxlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlci5yZW1vdmVIYW5kbGVylGoNjwAAdJSMF2xvZ2dpbmcuTG9nZ2VyLnNldExldmVslChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VyLnNldExldmVslGoNjwAAdJSMFmxvZ2dpbmcuTG9nZ2VyLndhcm5pbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5Mb2dnZXIud2FybmluZ5RqDY8AAHSUjB1sb2dnaW5nLkxvZ2dlckFkYXB0ZXIucHJvY2Vzc5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlckFkYXB0ZXIucHJvY2Vzc5RqDY8AAHSUjB5sb2dnaW5nLk51bGxIYW5kbGVyLmNyZWF0ZUxvY2uUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5OdWxsSGFuZGxlci5jcmVhdGVMb2NrlGoNjwAAdJSMGGxvZ2dpbmcuTnVsbEhhbmRsZXIuZW1pdJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLk51bGxIYW5kbGVyLmVtaXSUag2PAAB0lIwabG9nZ2luZy5OdWxsSGFuZGxlci5oYW5kbGWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5OdWxsSGFuZGxlci5oYW5kbGWUag2PAAB0lIwabG9nZ2luZy5TdHJlYW1IYW5kbGVyLmVtaXSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5TdHJlYW1IYW5kbGVyLmVtaXSUag2PAAB0lIwbbG9nZ2luZy5TdHJlYW1IYW5kbGVyLmZsdXNolChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuU3RyZWFtSGFuZGxlci5mbHVzaJRqDY8AAHSUjB9sb2dnaW5nLlN0cmVhbUhhbmRsZXIuc2V0U3RyZWFtlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuU3RyZWFtSGFuZGxlci5zZXRTdHJlYW2Uag2PAAB0lIwrbG9nZ2luZy5oYW5kbGVycy5CYXNlUm90YXRpbmdIYW5kbGVyLnJvdGF0ZZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLkJhc2VSb3RhdGluZ0hhbmRsZXIucm90YXRllGoNjwAAdJSMNmxvZ2dpbmcuaGFuZGxlcnMuQmFzZVJvdGF0aW5nSGFuZGxlci5yb3RhdGlvbl9maWxlbmFtZZQoagqPAABqC48AAIxuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLkJhc2VSb3RhdGluZ0hhbmRsZXIucm90YXRpb25fZmlsZW5hbWWUag2PAAB0lIwmbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLmVtaXSUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLmVtaXSUag2PAAB0lIwnbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLmZsdXNolChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuQnVmZmVyaW5nSGFuZGxlci5mbHVzaJRqDY8AAHSUjC1sb2dnaW5nLmhhbmRsZXJzLkJ1ZmZlcmluZ0hhbmRsZXIuc2hvdWxkRmx1c2iUKGoKjwAAaguPAACMZWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLnNob3VsZEZsdXNolGoNjwAAdJSMJWxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyLmVtaXSUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIuZW1pdJRqDY8AAHSUjCtsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlci5tYWtlU29ja2V0lChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyLm1ha2VTb2NrZXSUag2PAAB0lIwlbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIuc2VuZJQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlci5zZW5klGoNjwAAdJSMIWxvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXIuZW1pdJQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLkhUVFBIYW5kbGVyLmVtaXSUag2PAAB0lIwpbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlci5tYXBMb2dSZWNvcmSUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlci5tYXBMb2dSZWNvcmSUag2PAAB0lIwkbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLmNsb3NllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlci5jbG9zZZRqDY8AAHSUjCRsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIuZmx1c2iUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLmZsdXNolGoNjwAAdJSMKGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlci5zZXRUYXJnZXSUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLnNldFRhcmdldJRqDY8AAHSUjCpsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIuc2hvdWxkRmx1c2iUKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyLnNob3VsZEZsdXNolGoNjwAAdJSMKGxvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIuY2xvc2WUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5jbG9zZZRqDY8AAHSUjCdsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyLmVtaXSUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5lbWl0lGoNjwAAdJSMM2xvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIuZ2V0RXZlbnRDYXRlZ29yeZQoagqPAABqC48AAIxraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyLmdldEV2ZW50Q2F0ZWdvcnmUag2PAAB0lIwvbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRFdmVudFR5cGWUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRFdmVudFR5cGWUag2PAAB0lIwvbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRNZXNzYWdlSUSUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlci5nZXRNZXNzYWdlSUSUag2PAAB0lIwibG9nZ2luZy5oYW5kbGVycy5RdWV1ZUhhbmRsZXIuZW1pdJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlF1ZXVlSGFuZGxlci5lbWl0lGoNjwAAdJSMJWxvZ2dpbmcuaGFuZGxlcnMuUXVldWVIYW5kbGVyLmVucXVldWWUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUhhbmRsZXIuZW5xdWV1ZZRqDY8AAHSUjCVsb2dnaW5nLmhhbmRsZXJzLlF1ZXVlSGFuZGxlci5wcmVwYXJllChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuUXVldWVIYW5kbGVyLnByZXBhcmWUag2PAAB0lIwmbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyLmRlcXVldWWUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyLmRlcXVldWWUlTkAAQAAAAAAag2PAAB0lIwvbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyLmVucXVldWVfc2VudGluZWyUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyLmVucXVldWVfc2VudGluZWyUag2PAAB0lIwlbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyLmhhbmRsZZQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlF1ZXVlTGlzdGVuZXIuaGFuZGxllGoNjwAAdJSMJmxvZ2dpbmcuaGFuZGxlcnMuUXVldWVMaXN0ZW5lci5wcmVwYXJllChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuUXVldWVMaXN0ZW5lci5wcmVwYXJllGoNjwAAdJSMJGxvZ2dpbmcuaGFuZGxlcnMuUXVldWVMaXN0ZW5lci5zdGFydJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlF1ZXVlTGlzdGVuZXIuc3RhcnSUag2PAAB0lIwjbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyLnN0b3CUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyLnN0b3CUag2PAAB0lIwvbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyLmRvUm9sbG92ZXKUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyLmRvUm9sbG92ZXKUag2PAAB0lIwpbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyLmVtaXSUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyLmVtaXSUag2PAAB0lIwhbG9nZ2luZy5oYW5kbGVycy5TTVRQSGFuZGxlci5lbWl0lChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXIuZW1pdJRqDY8AAHSUjCdsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVyLmdldFN1YmplY3SUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5TTVRQSGFuZGxlci5nZXRTdWJqZWN0lGoNjwAAdJSMJGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5jbG9zZZQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuY2xvc2WUag2PAAB0lIwrbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLmNyZWF0ZVNvY2tldJQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuY3JlYXRlU29ja2V0lGoNjwAAdJSMI2xvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5lbWl0lChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5lbWl0lGoNjwAAdJSMKmxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlci5oYW5kbGVFcnJvcpQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIuaGFuZGxlRXJyb3KUag2PAAB0lIwpbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLm1ha2VQaWNrbGWUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLm1ha2VQaWNrbGWUag2PAAB0lIwpbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLm1ha2VTb2NrZXSUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLm1ha2VTb2NrZXSUag2PAAB0lIwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLnNlbmSUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyLnNlbmSUag2PAAB0lIwkbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyLmNsb3NllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5jbG9zZZRqDY8AAHSUjCNsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuZW1pdJQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuZW1pdJRqDY8AAHSUjC1sb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuZW5jb2RlUHJpb3JpdHmUKGoKjwAAaguPAACMZWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyLmVuY29kZVByaW9yaXR5lGoNjwAAdJSMKmxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5tYXBQcmlvcml0eZQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIubWFwUHJpb3JpdHmUag2PAAB0lIw0bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIuZG9Sb2xsb3ZlcpQoagqPAABqC48AAIxsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci5kb1JvbGxvdmVylGoNjwAAdJSMLmxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyLmVtaXSUKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIuZW1pdJRqDY8AAHSUjChsb2dnaW5nLmhhbmRsZXJzLldhdGNoZWRGaWxlSGFuZGxlci5lbWl0lChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuV2F0Y2hlZEZpbGVIYW5kbGVyLmVtaXSUag2PAAB0lIwybG9nZ2luZy5oYW5kbGVycy5XYXRjaGVkRmlsZUhhbmRsZXIucmVvcGVuSWZOZWVkZWSUKGoKjwAAaguPAACMamh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5XYXRjaGVkRmlsZUhhbmRsZXIucmVvcGVuSWZOZWVkZWSUag2PAAB0lIwibG9nZ2luZy5sb2dnaW5nLkZvcm1hdHRlci5fX2luaXRfX5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLmh0bWwjbG9nZ2luZy5sb2dnaW5nLkZvcm1hdHRlci5fX2luaXRfX5RqDY8AAHSUjBxsem1hLkxaTUFDb21wcmVzc29yLmNvbXByZXNzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuTFpNQUNvbXByZXNzb3IuY29tcHJlc3OUag2PAAB0lIwZbHptYS5MWk1BQ29tcHJlc3Nvci5mbHVzaJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2x6bWEuaHRtbCNsem1hLkxaTUFDb21wcmVzc29yLmZsdXNolGoNjwAAdJSMIGx6bWEuTFpNQURlY29tcHJlc3Nvci5kZWNvbXByZXNzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuTFpNQURlY29tcHJlc3Nvci5kZWNvbXByZXNzlGoNjwAAdJSMEmx6bWEuTFpNQUZpbGUucGVla5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2x6bWEuaHRtbCNsem1hLkxaTUFGaWxlLnBlZWuUag2PAAB0lIwWbWFpbGJveC5CYWJ5bC5nZXRfZmlsZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsLmdldF9maWxllGoNjwAAdJSMGG1haWxib3guQmFieWwuZ2V0X2xhYmVsc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsLmdldF9sYWJlbHOUag2PAAB0lIwSbWFpbGJveC5CYWJ5bC5sb2NrlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guQmFieWwubG9ja5RqDY8AAHSUjBRtYWlsYm94LkJhYnlsLnVubG9ja5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsLnVubG9ja5RqDY8AAHSUjB5tYWlsYm94LkJhYnlsTWVzc2FnZS5hZGRfbGFiZWyUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UuYWRkX2xhYmVslGoNjwAAdJSMH21haWxib3guQmFieWxNZXNzYWdlLmdldF9sYWJlbHOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UuZ2V0X2xhYmVsc5RqDY8AAHSUjCBtYWlsYm94LkJhYnlsTWVzc2FnZS5nZXRfdmlzaWJsZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZS5nZXRfdmlzaWJsZZRqDY8AAHSUjCFtYWlsYm94LkJhYnlsTWVzc2FnZS5yZW1vdmVfbGFiZWyUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2UucmVtb3ZlX2xhYmVslGoNjwAAdJSMH21haWxib3guQmFieWxNZXNzYWdlLnNldF9sYWJlbHOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5CYWJ5bE1lc3NhZ2Uuc2V0X2xhYmVsc5RqDY8AAHSUjCBtYWlsYm94LkJhYnlsTWVzc2FnZS5zZXRfdmlzaWJsZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZS5zZXRfdmlzaWJsZZRqDY8AAHSUjCNtYWlsYm94LkJhYnlsTWVzc2FnZS51cGRhdGVfdmlzaWJsZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlsTWVzc2FnZS51cGRhdGVfdmlzaWJsZZRqDY8AAHSUjBZtYWlsYm94Lk1ILl9fZGVsaXRlbV9flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguX19kZWxpdGVtX1+Uag2PAAB0lIwVbWFpbGJveC5NSC5hZGRfZm9sZGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguYWRkX2ZvbGRlcpRqDY8AAHSUjBBtYWlsYm94Lk1ILmNsb3NllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguY2xvc2WUag2PAAB0lIwSbWFpbGJveC5NSC5kaXNjYXJklChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguZGlzY2FyZJRqDY8AAHSUjBBtYWlsYm94Lk1ILmZsdXNolChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguZmx1c2iUag2PAAB0lIwTbWFpbGJveC5NSC5nZXRfZmlsZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmdldF9maWxllGoNjwAAdJSMFW1haWxib3guTUguZ2V0X2ZvbGRlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmdldF9mb2xkZXKUag2PAAB0lIwYbWFpbGJveC5NSC5nZXRfc2VxdWVuY2VzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUguZ2V0X3NlcXVlbmNlc5RqDY8AAHSUjBdtYWlsYm94Lk1ILmxpc3RfZm9sZGVyc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILmxpc3RfZm9sZGVyc5RqDY8AAHSUjA9tYWlsYm94Lk1ILmxvY2uUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5sb2NrlGoNjwAAdJSMD21haWxib3guTUgucGFja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ILnBhY2uUag2PAAB0lIwRbWFpbGJveC5NSC5yZW1vdmWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5yZW1vdmWUag2PAAB0lIwYbWFpbGJveC5NSC5yZW1vdmVfZm9sZGVylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUgucmVtb3ZlX2ZvbGRlcpRqDY8AAHSUjBhtYWlsYm94Lk1ILnNldF9zZXF1ZW5jZXOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSC5zZXRfc2VxdWVuY2VzlGoNjwAAdJSMEW1haWxib3guTUgudW5sb2NrlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTUgudW5sb2NrlGoNjwAAdJSMHm1haWxib3guTUhNZXNzYWdlLmFkZF9zZXF1ZW5jZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZS5hZGRfc2VxdWVuY2WUag2PAAB0lIwfbWFpbGJveC5NSE1lc3NhZ2UuZ2V0X3NlcXVlbmNlc5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZS5nZXRfc2VxdWVuY2VzlGoNjwAAdJSMIW1haWxib3guTUhNZXNzYWdlLnJlbW92ZV9zZXF1ZW5jZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZS5yZW1vdmVfc2VxdWVuY2WUag2PAAB0lIwfbWFpbGJveC5NSE1lc3NhZ2Uuc2V0X3NlcXVlbmNlc5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZS5zZXRfc2VxdWVuY2VzlGoNjwAAdJSMFW1haWxib3guTU1ERi5nZXRfZmlsZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREYuZ2V0X2ZpbGWUag2PAAB0lIwRbWFpbGJveC5NTURGLmxvY2uUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGLmxvY2uUag2PAAB0lIwTbWFpbGJveC5NTURGLnVubG9ja5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREYudW5sb2NrlGoNjwAAdJSMHG1haWxib3guTU1ERk1lc3NhZ2UuYWRkX2ZsYWeUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGTWVzc2FnZS5hZGRfZmxhZ5RqDY8AAHSUjB1tYWlsYm94Lk1NREZNZXNzYWdlLmdldF9mbGFnc5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlLmdldF9mbGFnc5RqDY8AAHSUjBxtYWlsYm94Lk1NREZNZXNzYWdlLmdldF9mcm9tlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTU1ERk1lc3NhZ2UuZ2V0X2Zyb22Uag2PAAB0lIwfbWFpbGJveC5NTURGTWVzc2FnZS5yZW1vdmVfZmxhZ5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1NREZNZXNzYWdlLnJlbW92ZV9mbGFnlGoNjwAAdJSMHW1haWxib3guTU1ERk1lc3NhZ2Uuc2V0X2ZsYWdzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTU1ERk1lc3NhZ2Uuc2V0X2ZsYWdzlGoNjwAAdJSMHG1haWxib3guTU1ERk1lc3NhZ2Uuc2V0X2Zyb22UKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGTWVzc2FnZS5zZXRfZnJvbZRqDY8AAHSUjBxtYWlsYm94Lk1haWxib3guX19jb250YWluc19flChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5fX2NvbnRhaW5zX1+Uag2PAAB0lIwbbWFpbGJveC5NYWlsYm94Ll9fZGVsaXRlbV9flChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5fX2RlbGl0ZW1fX5RqDY8AAHSUjBttYWlsYm94Lk1haWxib3guX19nZXRpdGVtX1+UKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Ll9fZ2V0aXRlbV9flGoNjwAAdJSMGG1haWxib3guTWFpbGJveC5fX2l0ZXJfX5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guX19pdGVyX1+Uag2PAAB0lIwXbWFpbGJveC5NYWlsYm94Ll9fbGVuX1+UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94Ll9fbGVuX1+Uag2PAAB0lIwbbWFpbGJveC5NYWlsYm94Ll9fc2V0aXRlbV9flChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5fX3NldGl0ZW1fX5RqDY8AAHSUjBNtYWlsYm94Lk1haWxib3guYWRklChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5hZGSUag2PAAB0lIwVbWFpbGJveC5NYWlsYm94LmNsZWFylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5jbGVhcpRqDY8AAHSUjBVtYWlsYm94Lk1haWxib3guY2xvc2WUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmNsb3NllGoNjwAAdJSMF21haWxib3guTWFpbGJveC5kaXNjYXJklChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5kaXNjYXJklGoNjwAAdJSMFW1haWxib3guTWFpbGJveC5mbHVzaJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guZmx1c2iUag2PAAB0lIwTbWFpbGJveC5NYWlsYm94LmdldJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guZ2V0lGoNjwAAdJSMGW1haWxib3guTWFpbGJveC5nZXRfYnl0ZXOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmdldF9ieXRlc5RqDY8AAHSUjBhtYWlsYm94Lk1haWxib3guZ2V0X2ZpbGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmdldF9maWxllGoNjwAAdJSMG21haWxib3guTWFpbGJveC5nZXRfbWVzc2FnZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guZ2V0X21lc3NhZ2WUag2PAAB0lIwabWFpbGJveC5NYWlsYm94LmdldF9zdHJpbmeUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LmdldF9zdHJpbmeUag2PAAB0lIwVbWFpbGJveC5NYWlsYm94Lml0ZW1zlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5pdGVtc5RqDY8AAHSUjBltYWlsYm94Lk1haWxib3guaXRlcml0ZW1zlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5pdGVyaXRlbXOUag2PAAB0lIwYbWFpbGJveC5NYWlsYm94Lml0ZXJrZXlzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5pdGVya2V5c5RqDY8AAHSUjBptYWlsYm94Lk1haWxib3guaXRlcnZhbHVlc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3guaXRlcnZhbHVlc5RqDY8AAHSUjBRtYWlsYm94Lk1haWxib3gua2V5c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3gua2V5c5RqDY8AAHSUjBRtYWlsYm94Lk1haWxib3gubG9ja5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3gubG9ja5RqDY8AAHSUjBNtYWlsYm94Lk1haWxib3gucG9wlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC5wb3CUag2PAAB0lIwXbWFpbGJveC5NYWlsYm94LnBvcGl0ZW2UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LnBvcGl0ZW2Uag2PAAB0lIwWbWFpbGJveC5NYWlsYm94LnJlbW92ZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3gucmVtb3ZllGoNjwAAdJSMFm1haWxib3guTWFpbGJveC51bmxvY2uUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94LnVubG9ja5RqDY8AAHSUjBZtYWlsYm94Lk1haWxib3gudXBkYXRllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGJveC51cGRhdGWUag2PAAB0lIwWbWFpbGJveC5NYWlsYm94LnZhbHVlc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxib3gudmFsdWVzlGoNjwAAdJSMG21haWxib3guTWFpbGRpci5fX3NldGl0ZW1fX5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuX19zZXRpdGVtX1+Uag2PAAB0lIwTbWFpbGJveC5NYWlsZGlyLmFkZJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuYWRklGoNjwAAdJSMGm1haWxib3guTWFpbGRpci5hZGRfZm9sZGVylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5hZGRfZm9sZGVylGoNjwAAdJSMFW1haWxib3guTWFpbGRpci5jbGVhbpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuY2xlYW6Uag2PAAB0lIwVbWFpbGJveC5NYWlsZGlyLmNsb3NllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5jbG9zZZRqDY8AAHSUjBVtYWlsYm94Lk1haWxkaXIuZmx1c2iUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLmZsdXNolGoNjwAAdJSMGG1haWxib3guTWFpbGRpci5nZXRfZmlsZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIuZ2V0X2ZpbGWUag2PAAB0lIwabWFpbGJveC5NYWlsZGlyLmdldF9mb2xkZXKUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLmdldF9mb2xkZXKUag2PAAB0lIwcbWFpbGJveC5NYWlsZGlyLmxpc3RfZm9sZGVyc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXIubGlzdF9mb2xkZXJzlGoNjwAAdJSMFG1haWxib3guTWFpbGRpci5sb2NrlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5sb2NrlGoNjwAAdJSMHW1haWxib3guTWFpbGRpci5yZW1vdmVfZm9sZGVylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci5yZW1vdmVfZm9sZGVylGoNjwAAdJSMFm1haWxib3guTWFpbGRpci51bmxvY2uUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyLnVubG9ja5RqDY8AAHSUjBZtYWlsYm94Lk1haWxkaXIudXBkYXRllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpci51cGRhdGWUag2PAAB0lIwfbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5hZGRfZmxhZ5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmFkZF9mbGFnlGoNjwAAdJSMH21haWxib3guTWFpbGRpck1lc3NhZ2UuZ2V0X2RhdGWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5nZXRfZGF0ZZRqDY8AAHSUjCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9mbGFnc5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9mbGFnc5RqDY8AAHSUjB9tYWlsYm94Lk1haWxkaXJNZXNzYWdlLmdldF9pbmZvlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2UuZ2V0X2luZm+Uag2PAAB0lIwhbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5nZXRfc3ViZGlylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2UuZ2V0X3N1YmRpcpRqDY8AAHSUjCJtYWlsYm94Lk1haWxkaXJNZXNzYWdlLnJlbW92ZV9mbGFnlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2UucmVtb3ZlX2ZsYWeUag2PAAB0lIwfbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfZGF0ZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdlLnNldF9kYXRllGoNjwAAdJSMIG1haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2ZsYWdzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2ZsYWdzlGoNjwAAdJSMH21haWxib3guTWFpbGRpck1lc3NhZ2Uuc2V0X2luZm+UKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfaW5mb5RqDY8AAHSUjCFtYWlsYm94Lk1haWxkaXJNZXNzYWdlLnNldF9zdWJkaXKUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsZGlyTWVzc2FnZS5zZXRfc3ViZGlylGoNjwAAdJSMFW1haWxib3gubWJveC5nZXRfZmlsZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3guZ2V0X2ZpbGWUag2PAAB0lIwRbWFpbGJveC5tYm94LmxvY2uUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94LmxvY2uUag2PAAB0lIwTbWFpbGJveC5tYm94LnVubG9ja5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3gudW5sb2NrlGoNjwAAdJSMHG1haWxib3gubWJveE1lc3NhZ2UuYWRkX2ZsYWeUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94TWVzc2FnZS5hZGRfZmxhZ5RqDY8AAHSUjB1tYWlsYm94Lm1ib3hNZXNzYWdlLmdldF9mbGFnc5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlLmdldF9mbGFnc5RqDY8AAHSUjBxtYWlsYm94Lm1ib3hNZXNzYWdlLmdldF9mcm9tlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveE1lc3NhZ2UuZ2V0X2Zyb22Uag2PAAB0lIwfbWFpbGJveC5tYm94TWVzc2FnZS5yZW1vdmVfZmxhZ5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lm1ib3hNZXNzYWdlLnJlbW92ZV9mbGFnlGoNjwAAdJSMHW1haWxib3gubWJveE1lc3NhZ2Uuc2V0X2ZsYWdzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveE1lc3NhZ2Uuc2V0X2ZsYWdzlGoNjwAAdJSMHG1haWxib3gubWJveE1lc3NhZ2Uuc2V0X2Zyb22UKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5tYm94TWVzc2FnZS5zZXRfZnJvbZRqDY8AAHSUjBFtZW1vcnl2aWV3Ll9fZXFfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5fX2VxX1+Uag2PAAB0lIwPbWVtb3J5dmlldy5jYXN0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3LmNhc3SUag2PAAB0lIwObWVtb3J5dmlldy5oZXiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcuaGV4lGoNjwAAdJSMEm1lbW9yeXZpZXcucmVsZWFzZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy5yZWxlYXNllGoNjwAAdJSMEm1lbW9yeXZpZXcudG9ieXRlc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlldy50b2J5dGVzlGoNjwAAdJSMEW1lbW9yeXZpZXcudG9saXN0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNtZW1vcnl2aWV3LnRvbGlzdJRqDY8AAHSUjBVtZW1vcnl2aWV3LnRvcmVhZG9ubHmUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI21lbW9yeXZpZXcudG9yZWFkb25seZRqDY8AAHSUjChtaW1ldHlwZXMuTWltZVR5cGVzLmd1ZXNzX2FsbF9leHRlbnNpb25zlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlcy5ndWVzc19hbGxfZXh0ZW5zaW9uc5RqDY8AAHSUjCNtaW1ldHlwZXMuTWltZVR5cGVzLmd1ZXNzX2V4dGVuc2lvbpQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMuZ3Vlc3NfZXh0ZW5zaW9ulGoNjwAAdJSMHm1pbWV0eXBlcy5NaW1lVHlwZXMuZ3Vlc3NfdHlwZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMuZ3Vlc3NfdHlwZZRqDY8AAHSUjBhtaW1ldHlwZXMuTWltZVR5cGVzLnJlYWSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnJlYWSUag2PAAB0lIwpbWltZXR5cGVzLk1pbWVUeXBlcy5yZWFkX3dpbmRvd3NfcmVnaXN0cnmUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuTWltZVR5cGVzLnJlYWRfd2luZG93c19yZWdpc3RyeZRqDY8AAHSUjBptaW1ldHlwZXMuTWltZVR5cGVzLnJlYWRmcJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5NaW1lVHlwZXMucmVhZGZwlGoNjwAAdJSMD21tYXAubW1hcC5jbG9zZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuY2xvc2WUag2PAAB0lIwObW1hcC5tbWFwLmZpbmSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwLmZpbmSUag2PAAB0lIwPbW1hcC5tbWFwLmZsdXNolChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5mbHVzaJRqDY8AAHSUjBFtbWFwLm1tYXAubWFkdmlzZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAubWFkdmlzZZRqDY8AAHSUjA5tbWFwLm1tYXAubW92ZZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAubW92ZZRqDY8AAHSUjA5tbWFwLm1tYXAucmVhZJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAucmVhZJRqDY8AAHSUjBNtbWFwLm1tYXAucmVhZF9ieXRllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5yZWFkX2J5dGWUag2PAAB0lIwSbW1hcC5tbWFwLnJlYWRsaW5llChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5yZWFkbGluZZRqDY8AAHSUjBBtbWFwLm1tYXAucmVzaXpllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5yZXNpemWUag2PAAB0lIwPbW1hcC5tbWFwLnJmaW5klChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC5yZmluZJRqDY8AAHSUjA5tbWFwLm1tYXAuc2Vla5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuc2Vla5RqDY8AAHSUjA5tbWFwLm1tYXAuc2l6ZZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAuc2l6ZZRqDY8AAHSUjA5tbWFwLm1tYXAudGVsbJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLm1tYXAudGVsbJRqDY8AAHSUjA9tbWFwLm1tYXAud3JpdGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwLndyaXRllGoNjwAAdJSMFG1tYXAubW1hcC53cml0ZV9ieXRllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAubW1hcC53cml0ZV9ieXRllGoNjwAAdJSMIG1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIucmVwb3J0lChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5yZXBvcnSUag2PAAB0lIwkbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5ydW5fc2NyaXB0lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlZmluZGVyLk1vZHVsZUZpbmRlci5ydW5fc2NyaXB0lGoNjwAAdJSMEW1zaWxpYi5DQUIuYXBwZW5klChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkNBQi5hcHBlbmSUag2PAAB0lIwRbXNpbGliLkNBQi5jb21taXSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ0FCLmNvbW1pdJRqDY8AAHSUjBhtc2lsaWIuQ29udHJvbC5jb25kaXRpb26UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ29udHJvbC5jb25kaXRpb26Uag2PAAB0lIwUbXNpbGliLkNvbnRyb2wuZXZlbnSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ29udHJvbC5ldmVudJRqDY8AAHSUjBZtc2lsaWIuQ29udHJvbC5tYXBwaW5nlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkNvbnRyb2wubWFwcGluZ5RqDY8AAHSUjBVtc2lsaWIuRGF0YWJhc2UuQ2xvc2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGF0YWJhc2UuQ2xvc2WUag2PAAB0lIwWbXNpbGliLkRhdGFiYXNlLkNvbW1pdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EYXRhYmFzZS5Db21taXSUag2PAAB0lIwlbXNpbGliLkRhdGFiYXNlLkdldFN1bW1hcnlJbmZvcm1hdGlvbpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EYXRhYmFzZS5HZXRTdW1tYXJ5SW5mb3JtYXRpb26Uag2PAAB0lIwYbXNpbGliLkRhdGFiYXNlLk9wZW5WaWV3lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRhdGFiYXNlLk9wZW5WaWV3lGoNjwAAdJSMFG1zaWxpYi5EaWFsb2cuYml0bWFwlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpYWxvZy5iaXRtYXCUag2PAAB0lIwWbXNpbGliLkRpYWxvZy5jaGVja2JveJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2cuY2hlY2tib3iUag2PAAB0lIwVbXNpbGliLkRpYWxvZy5jb250cm9slChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpYWxvZy5jb250cm9slGoNjwAAdJSMEm1zaWxpYi5EaWFsb2cubGluZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2cubGluZZRqDY8AAHSUjBhtc2lsaWIuRGlhbG9nLnB1c2hidXR0b26UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlhbG9nLnB1c2hidXR0b26Uag2PAAB0lIwYbXNpbGliLkRpYWxvZy5yYWRpb2dyb3VwlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpYWxvZy5yYWRpb2dyb3VwlGoNjwAAdJSMEm1zaWxpYi5EaWFsb2cudGV4dJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2cudGV4dJRqDY8AAHSUjBltc2lsaWIuRGlyZWN0b3J5LmFkZF9maWxllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpcmVjdG9yeS5hZGRfZmlsZZRqDY8AAHSUjBVtc2lsaWIuRGlyZWN0b3J5Lmdsb2KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRGlyZWN0b3J5Lmdsb2KUag2PAAB0lIwbbXNpbGliLkRpcmVjdG9yeS5yZW1vdmVfcHljlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpcmVjdG9yeS5yZW1vdmVfcHljlGoNjwAAdJSMIG1zaWxpYi5EaXJlY3Rvcnkuc3RhcnRfY29tcG9uZW50lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkRpcmVjdG9yeS5zdGFydF9jb21wb25lbnSUag2PAAB0lIwabXNpbGliLkZlYXR1cmUuc2V0X2N1cnJlbnSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRmVhdHVyZS5zZXRfY3VycmVudJRqDY8AAHSUjBttc2lsaWIuUmFkaW9CdXR0b25Hcm91cC5hZGSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmFkaW9CdXR0b25Hcm91cC5hZGSUag2PAAB0lIwXbXNpbGliLlJlY29yZC5DbGVhckRhdGGUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmVjb3JkLkNsZWFyRGF0YZRqDY8AAHSUjBttc2lsaWIuUmVjb3JkLkdldEZpZWxkQ291bnSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmVjb3JkLkdldEZpZWxkQ291bnSUag2PAAB0lIwYbXNpbGliLlJlY29yZC5HZXRJbnRlZ2VylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJlY29yZC5HZXRJbnRlZ2VylGoNjwAAdJSMF21zaWxpYi5SZWNvcmQuR2V0U3RyaW5nlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJlY29yZC5HZXRTdHJpbmeUag2PAAB0lIwYbXNpbGliLlJlY29yZC5TZXRJbnRlZ2VylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJlY29yZC5TZXRJbnRlZ2VylGoNjwAAdJSMF21zaWxpYi5SZWNvcmQuU2V0U3RyZWFtlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlJlY29yZC5TZXRTdHJlYW2Uag2PAAB0lIwXbXNpbGliLlJlY29yZC5TZXRTdHJpbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuUmVjb3JkLlNldFN0cmluZ5RqDY8AAHSUjCVtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLkdldFByb3BlcnR5lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5HZXRQcm9wZXJ0eZRqDY8AAHSUjCptc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLkdldFByb3BlcnR5Q291bnSUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLkdldFByb3BlcnR5Q291bnSUag2PAAB0lIwhbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5QZXJzaXN0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlN1bW1hcnlJbmZvcm1hdGlvbi5QZXJzaXN0lGoNjwAAdJSMJW1zaWxpYi5TdW1tYXJ5SW5mb3JtYXRpb24uU2V0UHJvcGVydHmUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuU3VtbWFyeUluZm9ybWF0aW9uLlNldFByb3BlcnR5lGoNjwAAdJSMEW1zaWxpYi5WaWV3LkNsb3NllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlZpZXcuQ2xvc2WUag2PAAB0lIwTbXNpbGliLlZpZXcuRXhlY3V0ZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5WaWV3LkV4ZWN1dGWUag2PAAB0lIwRbXNpbGliLlZpZXcuRmV0Y2iUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuVmlldy5GZXRjaJRqDY8AAHSUjBltc2lsaWIuVmlldy5HZXRDb2x1bW5JbmZvlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLlZpZXcuR2V0Q29sdW1uSW5mb5RqDY8AAHSUjBJtc2lsaWIuVmlldy5Nb2RpZnmUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuVmlldy5Nb2RpZnmUag2PAAB0lIwibXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUuam9pbpQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlLmpvaW6Uag2PAAB0lIwnbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUudGFza19kb25llChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUudGFza19kb25llGoNjwAAdJSMHG11bHRpcHJvY2Vzc2luZy5Mb2NrLmFjcXVpcmWUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuTG9jay5hY3F1aXJllGoNjwAAdJSMHG11bHRpcHJvY2Vzc2luZy5Mb2NrLnJlbGVhc2WUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuTG9jay5yZWxlYXNllGoNjwAAdJSMHW11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLmNsb3NllChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuY2xvc2WUag2PAAB0lIwgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MuaXNfYWxpdmWUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5pc19hbGl2ZZRqDY8AAHSUjBxtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5qb2lulChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muam9pbpRqDY8AAHSUjBxtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5raWxslChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Mua2lsbJRqDY8AAHSUjBttdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5ydW6UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5ydW6Uag2PAAB0lIwdbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy5zdGFydJRqDY8AAHSUjCFtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy50ZXJtaW5hdGWUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcy50ZXJtaW5hdGWUag2PAAB0lIwobXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmNhbmNlbF9qb2luX3RocmVhZJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZS5jYW5jZWxfam9pbl90aHJlYWSUag2PAAB0lIwbbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmNsb3NllChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmNsb3NllGoNjwAAdJSMG211bHRpcHJvY2Vzc2luZy5RdWV1ZS5lbXB0eZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZS5lbXB0eZRqDY8AAHSUjBptdWx0aXByb2Nlc3NpbmcuUXVldWUuZnVsbJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5RdWV1ZS5mdWxslGoNjwAAdJSMGW11bHRpcHJvY2Vzc2luZy5RdWV1ZS5nZXSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUuZ2V0lGoNjwAAdJSMIG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5nZXRfbm93YWl0lChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmdldF9ub3dhaXSUag2PAAB0lIwhbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmpvaW5fdGhyZWFklChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmpvaW5fdGhyZWFklGoNjwAAdJSMGW11bHRpcHJvY2Vzc2luZy5RdWV1ZS5wdXSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUXVldWUucHV0lGoNjwAAdJSMIG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5wdXRfbm93YWl0lChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLnB1dF9ub3dhaXSUag2PAAB0lIwbbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLnFzaXpllChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLnFzaXpllGoNjwAAdJSMHW11bHRpcHJvY2Vzc2luZy5STG9jay5hY3F1aXJllChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlJMb2NrLmFjcXVpcmWUag2PAAB0lIwdbXVsdGlwcm9jZXNzaW5nLlJMb2NrLnJlbGVhc2WUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUkxvY2sucmVsZWFzZZRqDY8AAHSUjCFtdWx0aXByb2Nlc3NpbmcuU2ltcGxlUXVldWUuZW1wdHmUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuU2ltcGxlUXVldWUuZW1wdHmUag2PAAB0lIwfbXVsdGlwcm9jZXNzaW5nLlNpbXBsZVF1ZXVlLmdldJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5TaW1wbGVRdWV1ZS5nZXSUag2PAAB0lIwfbXVsdGlwcm9jZXNzaW5nLlNpbXBsZVF1ZXVlLnB1dJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5TaW1wbGVRdWV1ZS5wdXSUag2PAAB0lIwrbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbi5jbG9zZZQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24uY2xvc2WUag2PAAB0lIwsbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbi5maWxlbm+UKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLmZpbGVub5RqDY8AAHSUjCptdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLnBvbGyUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLnBvbGyUag2PAAB0lIwqbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbi5yZWN2lChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbi5yZWN2lGoNjwAAdJSMMG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24ucmVjdl9ieXRlc5QoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24ucmVjdl9ieXRlc5RqDY8AAHSUjDVtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLnJlY3ZfYnl0ZXNfaW50b5QoagqPAABqC48AAIxsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24ucmVjdl9ieXRlc19pbnRvlGoNjwAAdJSMKm11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24uc2VuZJQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24uc2VuZJRqDY8AAHSUjDBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLnNlbmRfYnl0ZXOUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLnNlbmRfYnl0ZXOUag2PAAB0lIwqbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIuYWNjZXB0lChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIuYWNjZXB0lGoNjwAAdJSMKW11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyLmNsb3NllChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIuY2xvc2WUag2PAAB0lIwsbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLmNvbm5lY3SUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuY29ubmVjdJRqDY8AAHSUjC9tdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuZ2V0X3NlcnZlcpQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5nZXRfc2VydmVylGoNjwAAdJSMLW11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5yZWdpc3RlcpQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlTWFuYWdlci5yZWdpc3RlcpRqDY8AAHSUjC1tdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuc2h1dGRvd26UKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXIuc2h1dGRvd26Uag2PAAB0lIwqbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLnN0YXJ0lChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VNYW5hZ2VyLnN0YXJ0lGoNjwAAdJSMK211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHkuX19yZXByX1+UKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZVByb3h5Ll9fcmVwcl9flGoNjwAAdJSMKm11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHkuX19zdHJfX5QoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHkuX19zdHJfX5RqDY8AAHSUjC5tdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZVByb3h5Ll9jYWxsbWV0aG9klChqCo8AAGoLjwAAjGVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eS5fY2FsbG1ldGhvZJRqDY8AAHSUjCxtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZVByb3h5Ll9nZXR2YWx1ZZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHkuX2dldHZhbHVllGoNjwAAdJSMOm11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TaGFyZWRNZW1vcnlNYW5hZ2VyLlNoYXJlYWJsZUxpc3SUKGoKjwAAaguPAACMf2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TaGFyZWRNZW1vcnlNYW5hZ2VyLlNoYXJlYWJsZUxpc3SUag2PAAB0lIw5bXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlNoYXJlZE1lbW9yeU1hbmFnZXIuU2hhcmVkTWVtb3J5lChqCo8AAGoLjwAAjH5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU2hhcmVkTWVtb3J5TWFuYWdlci5TaGFyZWRNZW1vcnmUag2PAAB0lIwqbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkFycmF5lChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkFycmF5lGoNjwAAdJSMLG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5CYXJyaWVylChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkJhcnJpZXKUag2PAAB0lIw1bXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkJvdW5kZWRTZW1hcGhvcmWUKGoKjwAAaguPAACMbGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuQm91bmRlZFNlbWFwaG9yZZRqDY8AAHSUjC5tdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuQ29uZGl0aW9ulChqCo8AAGoLjwAAjGVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkNvbmRpdGlvbpRqDY8AAHSUjCptdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuRXZlbnSUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuRXZlbnSUag2PAAB0lIwpbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLkxvY2uUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuTG9ja5RqDY8AAHSUjC5tdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuTmFtZXNwYWNllChqCo8AAGoLjwAAjGVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLk5hbWVzcGFjZZRqDY8AAHSUjCptdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuUXVldWWUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuUXVldWWUag2PAAB0lIwqbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLlJMb2NrlChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLlJMb2NrlGoNjwAAdJSMLm11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5TZW1hcGhvcmWUKGoKjwAAaguPAACMZWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuU2VtYXBob3JllGoNjwAAdJSMKm11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5WYWx1ZZQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5WYWx1ZZRqDY8AAHSUjCltdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuU3luY01hbmFnZXIuZGljdJQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5kaWN0lGoNjwAAdJSMKW11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlci5saXN0lChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyLmxpc3SUag2PAAB0lIwkbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQuZ2V0lChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQuZ2V0lGoNjwAAdJSMJm11bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LnJlYWR5lChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQucmVhZHmUag2PAAB0lIwrbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQuc3VjY2Vzc2Z1bJQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LnN1Y2Nlc3NmdWyUag2PAAB0lIwlbXVsdGlwcm9jZXNzaW5nLnBvb2wuQXN5bmNSZXN1bHQud2FpdJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0LndhaXSUag2PAAB0lIwfbXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbC5hcHBseZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wuYXBwbHmUag2PAAB0lIwlbXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbC5hcHBseV9hc3luY5QoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wuYXBwbHlfYXN5bmOUag2PAAB0lIwfbXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbC5jbG9zZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wuY2xvc2WUag2PAAB0lIwebXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbC5pbWFwlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbC5pbWFwlGoNjwAAdJSMKG11bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wuaW1hcF91bm9yZGVyZWSUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sLmltYXBfdW5vcmRlcmVklGoNjwAAdJSMHm11bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wuam9pbpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wuam9pbpRqDY8AAHSUjB1tdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sLm1hcJQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wubWFwlGoNjwAAdJSMI211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wubWFwX2FzeW5jlChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbC5tYXBfYXN5bmOUag2PAAB0lIwhbXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbC5zdGFybWFwlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbC5zdGFybWFwlGoNjwAAdJSMJ211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wuc3Rhcm1hcF9hc3luY5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wuc3Rhcm1hcF9hc3luY5RqDY8AAHSUjCNtdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sLnRlcm1pbmF0ZZQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLlBvb2wudGVybWluYXRllGoNjwAAdJSMMW11bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5LlNoYXJlYWJsZUxpc3QuY291bnSUKGoKjwAAaguPAACMdmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5LlNoYXJlYWJsZUxpc3QuY291bnSUag2PAAB0lIwxbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuU2hhcmVhYmxlTGlzdC5pbmRleJQoagqPAABqC48AAIx2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5Lmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuU2hhcmVhYmxlTGlzdC5pbmRleJRqDY8AAHSUjDBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnkuY2xvc2WUKGoKjwAAaguPAACMdWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5LlNoYXJlZE1lbW9yeS5jbG9zZZRqDY8AAHSUjDFtdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnkudW5saW5rlChqCo8AAGoLjwAAjHZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnkudW5saW5rlGoNjwAAdJSMFG5ldHJjLm5ldHJjLl9fcmVwcl9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbmV0cmMuaHRtbCNuZXRyYy5uZXRyYy5fX3JlcHJfX5RqDY8AAHSUjBpuZXRyYy5uZXRyYy5hdXRoZW50aWNhdG9yc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25ldHJjLmh0bWwjbmV0cmMubmV0cmMuYXV0aGVudGljYXRvcnOUag2PAAB0lIwUbm50cGxpYi5OTlRQLmFydGljbGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmFydGljbGWUag2PAAB0lIwRbm50cGxpYi5OTlRQLmJvZHmUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmJvZHmUag2PAAB0lIwRbm50cGxpYi5OTlRQLmRhdGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmRhdGWUag2PAAB0lIwYbm50cGxpYi5OTlRQLmRlc2NyaXB0aW9ulChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5kZXNjcmlwdGlvbpRqDY8AAHSUjBlubnRwbGliLk5OVFAuZGVzY3JpcHRpb25zlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5kZXNjcmlwdGlvbnOUag2PAAB0lIwcbm50cGxpYi5OTlRQLmdldGNhcGFiaWxpdGllc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuZ2V0Y2FwYWJpbGl0aWVzlGoNjwAAdJSMF25udHBsaWIuTk5UUC5nZXR3ZWxjb21llChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5nZXR3ZWxjb21llGoNjwAAdJSMEm5udHBsaWIuTk5UUC5ncm91cJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuZ3JvdXCUag2PAAB0lIwRbm50cGxpYi5OTlRQLmhlYWSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmhlYWSUag2PAAB0lIwRbm50cGxpYi5OTlRQLmhlbHCUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmhlbHCUag2PAAB0lIwSbm50cGxpYi5OTlRQLmloYXZllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5paGF2ZZRqDY8AAHSUjBFubnRwbGliLk5OVFAubGFzdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAubGFzdJRqDY8AAHSUjBFubnRwbGliLk5OVFAubGlzdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAubGlzdJRqDY8AAHSUjBJubnRwbGliLk5OVFAubG9naW6UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLmxvZ2lulGoNjwAAdJSMFm5udHBsaWIuTk5UUC5uZXdncm91cHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLm5ld2dyb3Vwc5RqDY8AAHSUjBRubnRwbGliLk5OVFAubmV3bmV3c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAubmV3bmV3c5RqDY8AAHSUjBFubnRwbGliLk5OVFAubmV4dJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAubmV4dJRqDY8AAHSUjBFubnRwbGliLk5OVFAub3ZlcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAub3ZlcpRqDY8AAHSUjBFubnRwbGliLk5OVFAucG9zdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAucG9zdJRqDY8AAHSUjBFubnRwbGliLk5OVFAucXVpdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAucXVpdJRqDY8AAHSUjBtubnRwbGliLk5OVFAuc2V0X2RlYnVnbGV2ZWyUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLnNldF9kZWJ1Z2xldmVslGoNjwAAdJSMEm5udHBsaWIuTk5UUC5zbGF2ZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuc2xhdmWUag2PAAB0lIwVbm50cGxpYi5OTlRQLnN0YXJ0dGxzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuTk5UUC5zdGFydHRsc5RqDY8AAHSUjBFubnRwbGliLk5OVFAuc3RhdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAuc3RhdJRqDY8AAHSUjBFubnRwbGliLk5OVFAueGhkcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAueGhkcpRqDY8AAHSUjBJubnRwbGliLk5OVFAueG92ZXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbm50cGxpYi5OTlRQLnhvdmVylGoNjwAAdJSMEm5udHBsaWIuTk5UUC54cGF0aJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFAueHBhdGiUag2PAAB0lIwZbnVtYmVycy5Db21wbGV4LmNvbmp1Z2F0ZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLkNvbXBsZXguY29uanVnYXRllGoNjwAAdJSMDm9iamVjdC5fX2Fic19flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19hYnNfX5RqDY8AAHSUjA5vYmplY3QuX19hZGRfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fYWRkX1+Uag2PAAB0lIwRb2JqZWN0Ll9fYWVudGVyX1+UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2FlbnRlcl9flGoNjwAAdJSMEG9iamVjdC5fX2FleGl0X1+UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2FleGl0X1+Uag2PAAB0lIwQb2JqZWN0Ll9fYWl0ZXJfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fYWl0ZXJfX5RqDY8AAHSUjA5vYmplY3QuX19hbmRfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fYW5kX1+Uag2PAAB0lIwQb2JqZWN0Ll9fYW5leHRfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fYW5leHRfX5RqDY8AAHSUjBBvYmplY3QuX19hd2FpdF9flChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19hd2FpdF9flGoNjwAAdJSMD29iamVjdC5fX2Jvb2xfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fYm9vbF9flGoNjwAAdJSMEG9iamVjdC5fX2J5dGVzX1+UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2J5dGVzX1+Uag2PAAB0lIwPb2JqZWN0Ll9fY2FsbF9flChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19jYWxsX1+Uag2PAAB0lIwPb2JqZWN0Ll9fY2VpbF9flChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19jZWlsX1+Uag2PAAB0lIwYb2JqZWN0Ll9fY2xhc3NfZ2V0aXRlbV9flChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19jbGFzc19nZXRpdGVtX1+Uag2PAAB0lIwSb2JqZWN0Ll9fY29tcGxleF9flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19jb21wbGV4X1+Uag2PAAB0lIwTb2JqZWN0Ll9fY29udGFpbnNfX5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fY29udGFpbnNfX5RqDY8AAHSUjA5vYmplY3QuX19kZWxfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZGVsX1+Uag2PAAB0lIwSb2JqZWN0Ll9fZGVsYXR0cl9flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19kZWxhdHRyX1+Uag2PAAB0lIwRb2JqZWN0Ll9fZGVsZXRlX1+UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2RlbGV0ZV9flGoNjwAAdJSMEm9iamVjdC5fX2RlbGl0ZW1fX5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZGVsaXRlbV9flGoNjwAAdJSMDm9iamVjdC5fX2Rpcl9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19kaXJfX5RqDY8AAHSUjBFvYmplY3QuX19kaXZtb2RfX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZGl2bW9kX1+Uag2PAAB0lIwQb2JqZWN0Ll9fZW50ZXJfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZW50ZXJfX5RqDY8AAHSUjA1vYmplY3QuX19lcV9flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19lcV9flGoNjwAAdJSMD29iamVjdC5fX2V4aXRfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZXhpdF9flGoNjwAAdJSMEG9iamVjdC5fX2Zsb2F0X1+UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2Zsb2F0X1+Uag2PAAB0lIwQb2JqZWN0Ll9fZmxvb3JfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZmxvb3JfX5RqDY8AAHSUjBNvYmplY3QuX19mbG9vcmRpdl9flChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19mbG9vcmRpdl9flGoNjwAAdJSMEW9iamVjdC5fX2Zvcm1hdF9flChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19mb3JtYXRfX5RqDY8AAHSUjA1vYmplY3QuX19nZV9flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19nZV9flGoNjwAAdJSMDm9iamVjdC5fX2dldF9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19nZXRfX5RqDY8AAHSUjBJvYmplY3QuX19nZXRhdHRyX1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2dldGF0dHJfX5RqDY8AAHSUjBdvYmplY3QuX19nZXRhdHRyaWJ1dGVfX5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX1+Uag2PAAB0lIwSb2JqZWN0Ll9fZ2V0aXRlbV9flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19nZXRpdGVtX1+Uag2PAAB0lIwVb2JqZWN0Ll9fZ2V0bmV3YXJnc19flChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fZ2V0bmV3YXJnc19flGoNjwAAdJSMGG9iamVjdC5fX2dldG5ld2FyZ3NfZXhfX5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI29iamVjdC5fX2dldG5ld2FyZ3NfZXhfX5RqDY8AAHSUjBNvYmplY3QuX19nZXRzdGF0ZV9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fZ2V0c3RhdGVfX5RqDY8AAHSUjA1vYmplY3QuX19ndF9flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19ndF9flGoNjwAAdJSMD29iamVjdC5fX2hhc2hfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faGFzaF9flGoNjwAAdJSMD29iamVjdC5fX2lhZGRfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faWFkZF9flGoNjwAAdJSMD29iamVjdC5fX2lhbmRfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faWFuZF9flGoNjwAAdJSMFG9iamVjdC5fX2lmbG9vcmRpdl9flChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pZmxvb3JkaXZfX5RqDY8AAHSUjBJvYmplY3QuX19pbHNoaWZ0X1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lsc2hpZnRfX5RqDY8AAHSUjBJvYmplY3QuX19pbWF0bXVsX1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2ltYXRtdWxfX5RqDY8AAHSUjA9vYmplY3QuX19pbW9kX1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2ltb2RfX5RqDY8AAHSUjA9vYmplY3QuX19pbXVsX1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2ltdWxfX5RqDY8AAHSUjBBvYmplY3QuX19pbmRleF9flChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pbmRleF9flGoNjwAAdJSMD29iamVjdC5fX2luaXRfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faW5pdF9flGoNjwAAdJSMGG9iamVjdC5fX2luaXRfc3ViY2xhc3NfX5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faW5pdF9zdWJjbGFzc19flGoNjwAAdJSMDm9iamVjdC5fX2ludF9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19pbnRfX5RqDY8AAHSUjBFvYmplY3QuX19pbnZlcnRfX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faW52ZXJ0X1+Uag2PAAB0lIwOb2JqZWN0Ll9faW9yX1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2lvcl9flGoNjwAAdJSMD29iamVjdC5fX2lwb3dfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faXBvd19flGoNjwAAdJSMEm9iamVjdC5fX2lyc2hpZnRfX5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faXJzaGlmdF9flGoNjwAAdJSMD29iamVjdC5fX2lzdWJfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faXN1Yl9flGoNjwAAdJSMD29iamVjdC5fX2l0ZXJfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9faXRlcl9flGoNjwAAdJSME29iamVjdC5fX2l0cnVlZGl2X1+UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX2l0cnVlZGl2X1+Uag2PAAB0lIwPb2JqZWN0Ll9faXhvcl9flChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19peG9yX1+Uag2PAAB0lIwNb2JqZWN0Ll9fbGVfX5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbGVfX5RqDY8AAHSUjA5vYmplY3QuX19sZW5fX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbGVuX1+Uag2PAAB0lIwWb2JqZWN0Ll9fbGVuZ3RoX2hpbnRfX5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbGVuZ3RoX2hpbnRfX5RqDY8AAHSUjBFvYmplY3QuX19sc2hpZnRfX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbHNoaWZ0X1+Uag2PAAB0lIwNb2JqZWN0Ll9fbHRfX5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbHRfX5RqDY8AAHSUjBFvYmplY3QuX19tYXRtdWxfX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbWF0bXVsX1+Uag2PAAB0lIwSb2JqZWN0Ll9fbWlzc2luZ19flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19taXNzaW5nX1+Uag2PAAB0lIwOb2JqZWN0Ll9fbW9kX1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX21vZF9flGoNjwAAdJSMDm9iamVjdC5fX211bF9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19tdWxfX5RqDY8AAHSUjA1vYmplY3QuX19uZV9flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19uZV9flGoNjwAAdJSMDm9iamVjdC5fX25lZ19flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19uZWdfX5RqDY8AAHSUjA5vYmplY3QuX19uZXdfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fbmV3X1+Uag2PAAB0lIwNb2JqZWN0Ll9fb3JfX5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fb3JfX5RqDY8AAHSUjA5vYmplY3QuX19wb3NfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcG9zX1+Uag2PAAB0lIwOb2JqZWN0Ll9fcG93X1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3Bvd19flGoNjwAAdJSMD29iamVjdC5fX3JhZGRfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmFkZF9flGoNjwAAdJSMD29iamVjdC5fX3JhbmRfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmFuZF9flGoNjwAAdJSMEm9iamVjdC5fX3JkaXZtb2RfX5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcmRpdm1vZF9flGoNjwAAdJSMEW9iamVjdC5fX3JlZHVjZV9flChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fcmVkdWNlX1+Uag2PAAB0lIwUb2JqZWN0Ll9fcmVkdWNlX2V4X1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNvYmplY3QuX19yZWR1Y2VfZXhfX5RqDY8AAHSUjA9vYmplY3QuX19yZXByX1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JlcHJfX5RqDY8AAHSUjBNvYmplY3QuX19yZXZlcnNlZF9flChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yZXZlcnNlZF9flGoNjwAAdJSMFG9iamVjdC5fX3JmbG9vcmRpdl9flChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yZmxvb3JkaXZfX5RqDY8AAHSUjBJvYmplY3QuX19ybHNoaWZ0X1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3Jsc2hpZnRfX5RqDY8AAHSUjBJvYmplY3QuX19ybWF0bXVsX1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JtYXRtdWxfX5RqDY8AAHSUjA9vYmplY3QuX19ybW9kX1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3Jtb2RfX5RqDY8AAHSUjA9vYmplY3QuX19ybXVsX1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3JtdWxfX5RqDY8AAHSUjA5vYmplY3QuX19yb3JfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcm9yX1+Uag2PAAB0lIwQb2JqZWN0Ll9fcm91bmRfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcm91bmRfX5RqDY8AAHSUjA9vYmplY3QuX19ycG93X1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3Jwb3dfX5RqDY8AAHSUjBJvYmplY3QuX19ycnNoaWZ0X1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3Jyc2hpZnRfX5RqDY8AAHSUjBFvYmplY3QuX19yc2hpZnRfX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcnNoaWZ0X1+Uag2PAAB0lIwPb2JqZWN0Ll9fcnN1Yl9flChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNvYmplY3QuX19yc3ViX1+Uag2PAAB0lIwTb2JqZWN0Ll9fcnRydWVkaXZfX5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fcnRydWVkaXZfX5RqDY8AAHSUjA9vYmplY3QuX19yeG9yX1+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3J4b3JfX5RqDY8AAHSUjA5vYmplY3QuX19zZXRfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fc2V0X1+Uag2PAAB0lIwTb2JqZWN0Ll9fc2V0X25hbWVfX5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fc2V0X25hbWVfX5RqDY8AAHSUjBJvYmplY3QuX19zZXRhdHRyX1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3NldGF0dHJfX5RqDY8AAHSUjBJvYmplY3QuX19zZXRpdGVtX1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3NldGl0ZW1fX5RqDY8AAHSUjBNvYmplY3QuX19zZXRzdGF0ZV9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjb2JqZWN0Ll9fc2V0c3RhdGVfX5RqDY8AAHSUjA5vYmplY3QuX19zdHJfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fc3RyX1+Uag2PAAB0lIwOb2JqZWN0Ll9fc3ViX1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3N1Yl9flGoNjwAAdJSMEm9iamVjdC5fX3RydWVkaXZfX5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fdHJ1ZWRpdl9flGoNjwAAdJSMEG9iamVjdC5fX3RydW5jX1+UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3RydW5jX1+Uag2PAAB0lIwOb2JqZWN0Ll9feG9yX1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdC5fX3hvcl9flGoNjwAAdJSMIG9wdHBhcnNlLk9wdGlvblBhcnNlci5hZGRfb3B0aW9ulChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuYWRkX29wdGlvbpRqDY8AAHSUjC9vcHRwYXJzZS5PcHRpb25QYXJzZXIuZGlzYWJsZV9pbnRlcnNwZXJzZWRfYXJnc5QoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3OUag2PAAB0lIwub3B0cGFyc2UuT3B0aW9uUGFyc2VyLmVuYWJsZV9pbnRlcnNwZXJzZWRfYXJnc5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmVuYWJsZV9pbnRlcnNwZXJzZWRfYXJnc5RqDY8AAHSUjCBvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X29wdGlvbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmdldF9vcHRpb26Uag2PAAB0lIwmb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmdldF9vcHRpb25fZ3JvdXCUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfb3B0aW9uX2dyb3VwlGoNjwAAdJSMH29wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfdXNhZ2WUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5nZXRfdXNhZ2WUag2PAAB0lIwhb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmdldF92ZXJzaW9ulChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuZ2V0X3ZlcnNpb26Uag2PAAB0lIwgb3B0cGFyc2UuT3B0aW9uUGFyc2VyLmhhc19vcHRpb26UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLk9wdGlvblBhcnNlci5oYXNfb3B0aW9ulGoNjwAAdJSMIW9wdHBhcnNlLk9wdGlvblBhcnNlci5wcmludF91c2FnZZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnByaW50X3VzYWdllGoNjwAAdJSMI29wdHBhcnNlLk9wdGlvblBhcnNlci5wcmludF92ZXJzaW9ulChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIucHJpbnRfdmVyc2lvbpRqDY8AAHSUjCNvcHRwYXJzZS5PcHRpb25QYXJzZXIucmVtb3ZlX29wdGlvbpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnJlbW92ZV9vcHRpb26Uag2PAAB0lIwib3B0cGFyc2UuT3B0aW9uUGFyc2VyLnNldF9kZWZhdWx0c5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uUGFyc2VyLnNldF9kZWZhdWx0c5RqDY8AAHSUjB9vcHRwYXJzZS5PcHRpb25QYXJzZXIuc2V0X3VzYWdllChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXIuc2V0X3VzYWdllGoNjwAAdJSMEW9zLkRpckVudHJ5Lmlub2RllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5EaXJFbnRyeS5pbm9kZZRqDY8AAHSUjBJvcy5EaXJFbnRyeS5pc19kaXKUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkRpckVudHJ5LmlzX2RpcpRqDY8AAHSUjBNvcy5EaXJFbnRyeS5pc19maWxllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5EaXJFbnRyeS5pc19maWxllGoNjwAAdJSMFm9zLkRpckVudHJ5LmlzX3N5bWxpbmuUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkRpckVudHJ5LmlzX3N5bWxpbmuUag2PAAB0lIwQb3MuRGlyRW50cnkuc3RhdJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRGlyRW50cnkuc3RhdJRqDY8AAHSUjBZvcy5QYXRoTGlrZS5fX2ZzcGF0aF9flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5QYXRoTGlrZS5fX2ZzcGF0aF9flGoNjwAAdJSMEG9zLnNjYW5kaXIuY2xvc2WUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNjYW5kaXIuY2xvc2WUag2PAAB0lIwkb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5idWZzaXpllChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmJ1ZnNpemWUag2PAAB0lIwlb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5jaGFubmVsc5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5jaGFubmVsc5RqDY8AAHSUjCJvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmNsb3NllChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmNsb3NllGoNjwAAdJSMI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuZmlsZW5vlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmZpbGVub5RqDY8AAHSUjCRvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLmdldGZtdHOUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UuZ2V0Zm10c5RqDY8AAHSUjCVvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm5vbmJsb2NrlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm5vbmJsb2NrlGoNjwAAdJSMJm9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uub2J1ZmNvdW50lChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm9idWZjb3VudJRqDY8AAHSUjCVvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm9idWZmcmVllChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLm9idWZmcmVllGoNjwAAdJSMIW9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucG9zdJQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5wb3N0lGoNjwAAdJSMIW9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucmVhZJQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5yZWFklGoNjwAAdJSMIm9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucmVzZXSUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2UucmVzZXSUag2PAAB0lIwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5zZXRmbXSUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc2V0Zm10lGoNjwAAdJSMKm9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc2V0cGFyYW1ldGVyc5QoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5zZXRwYXJhbWV0ZXJzlGoNjwAAdJSMIm9zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc3BlZWSUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19hdWRpb19kZXZpY2Uuc3BlZWSUag2PAAB0lIwhb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS5zeW5jlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLnN5bmOUag2PAAB0lIwib3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS53cml0ZZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX2F1ZGlvX2RldmljZS53cml0ZZRqDY8AAHSUjCVvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLndyaXRlYWxslChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfYXVkaW9fZGV2aWNlLndyaXRlYWxslGoNjwAAdJSMIm9zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuY2xvc2WUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuY2xvc2WUag2PAAB0lIwlb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5jb250cm9sc5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5jb250cm9sc5RqDY8AAHSUjCNvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLmZpbGVub5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5maWxlbm+Uag2PAAB0lIwgb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5nZXSUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuZ2V0lGoNjwAAdJSMJ29zc2F1ZGlvZGV2Lm9zc19taXhlcl9kZXZpY2UuZ2V0X3JlY3NyY5QoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5nZXRfcmVjc3JjlGoNjwAAdJR1KIwob3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5yZWNjb250cm9sc5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5yZWNjb250cm9sc5RqDY8AAHSUjCBvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLnNldJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5zZXSUag2PAAB0lIwnb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5zZXRfcmVjc3JjlChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vc3NfbWl4ZXJfZGV2aWNlLnNldF9yZWNzcmOUag2PAAB0lIwrb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5zdGVyZW9jb250cm9sc5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjb3NzYXVkaW9kZXYub3NzX21peGVyX2RldmljZS5zdGVyZW9jb250cm9sc5RqDY8AAHSUjBFwYXJzZXIuU1QuY29tcGlsZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5TVC5jb21waWxllGoNjwAAdJSMEHBhcnNlci5TVC5pc2V4cHKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuU1QuaXNleHBylGoNjwAAdJSMEXBhcnNlci5TVC5pc3N1aXRllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLlNULmlzc3VpdGWUag2PAAB0lIwQcGFyc2VyLlNULnRvbGlzdJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5TVC50b2xpc3SUag2PAAB0lIwRcGFyc2VyLlNULnRvdHVwbGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuU1QudG90dXBsZZRqDY8AAHSUjBJwYXRobGliLlBhdGguY2htb2SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLmNobW9klGoNjwAAdJSMEHBhdGhsaWIuUGF0aC5jd2SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLmN3ZJRqDY8AAHSUjBNwYXRobGliLlBhdGguZXhpc3RzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5leGlzdHOUag2PAAB0lIwXcGF0aGxpYi5QYXRoLmV4cGFuZHVzZXKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLmV4cGFuZHVzZXKUag2PAAB0lIwRcGF0aGxpYi5QYXRoLmdsb2KUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLmdsb2KUag2PAAB0lIwScGF0aGxpYi5QYXRoLmdyb3VwlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5ncm91cJRqDY8AAHSUjBFwYXRobGliLlBhdGguaG9tZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlBhdGguaG9tZZRqDY8AAHSUjBxwYXRobGliLlBhdGguaXNfYmxvY2tfZGV2aWNllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5pc19ibG9ja19kZXZpY2WUag2PAAB0lIwbcGF0aGxpYi5QYXRoLmlzX2NoYXJfZGV2aWNllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5pc19jaGFyX2RldmljZZRqDY8AAHSUjBNwYXRobGliLlBhdGguaXNfZGlylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5pc19kaXKUag2PAAB0lIwUcGF0aGxpYi5QYXRoLmlzX2ZpZm+UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLmlzX2ZpZm+Uag2PAAB0lIwUcGF0aGxpYi5QYXRoLmlzX2ZpbGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLmlzX2ZpbGWUag2PAAB0lIwVcGF0aGxpYi5QYXRoLmlzX21vdW50lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5pc19tb3VudJRqDY8AAHSUjBZwYXRobGliLlBhdGguaXNfc29ja2V0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5pc19zb2NrZXSUag2PAAB0lIwXcGF0aGxpYi5QYXRoLmlzX3N5bWxpbmuUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLmlzX3N5bWxpbmuUag2PAAB0lIwUcGF0aGxpYi5QYXRoLml0ZXJkaXKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLml0ZXJkaXKUag2PAAB0lIwTcGF0aGxpYi5QYXRoLmxjaG1vZJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlBhdGgubGNobW9klGoNjwAAdJSMFHBhdGhsaWIuUGF0aC5saW5rX3RvlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5saW5rX3RvlGoNjwAAdJSMEnBhdGhsaWIuUGF0aC5sc3RhdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlBhdGgubHN0YXSUag2PAAB0lIwScGF0aGxpYi5QYXRoLm1rZGlylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5ta2RpcpRqDY8AAHSUjBFwYXRobGliLlBhdGgub3BlbpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlBhdGgub3BlbpRqDY8AAHSUjBJwYXRobGliLlBhdGgub3duZXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLm93bmVylGoNjwAAdJSMF3BhdGhsaWIuUGF0aC5yZWFkX2J5dGVzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5yZWFkX2J5dGVzlGoNjwAAdJSMFnBhdGhsaWIuUGF0aC5yZWFkX3RleHSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLnJlYWRfdGV4dJRqDY8AAHSUjBNwYXRobGliLlBhdGgucmVuYW1llChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5yZW5hbWWUag2PAAB0lIwUcGF0aGxpYi5QYXRoLnJlcGxhY2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLnJlcGxhY2WUag2PAAB0lIwUcGF0aGxpYi5QYXRoLnJlc29sdmWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLnJlc29sdmWUag2PAAB0lIwScGF0aGxpYi5QYXRoLnJnbG9ilChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC5yZ2xvYpRqDY8AAHSUjBJwYXRobGliLlBhdGgucm1kaXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLnJtZGlylGoNjwAAdJSMFXBhdGhsaWIuUGF0aC5zYW1lZmlsZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlBhdGguc2FtZWZpbGWUag2PAAB0lIwRcGF0aGxpYi5QYXRoLnN0YXSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLnN0YXSUag2PAAB0lIwXcGF0aGxpYi5QYXRoLnN5bWxpbmtfdG+UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QYXRoLnN5bWxpbmtfdG+Uag2PAAB0lIwScGF0aGxpYi5QYXRoLnRvdWNolChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC50b3VjaJRqDY8AAHSUjBNwYXRobGliLlBhdGgudW5saW5rlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC51bmxpbmuUag2PAAB0lIwYcGF0aGxpYi5QYXRoLndyaXRlX2J5dGVzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aC53cml0ZV9ieXRlc5RqDY8AAHSUjBdwYXRobGliLlBhdGgud3JpdGVfdGV4dJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlBhdGgud3JpdGVfdGV4dJRqDY8AAHSUjBlwYXRobGliLlB1cmVQYXRoLmFzX3Bvc2l4lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUHVyZVBhdGguYXNfcG9zaXiUag2PAAB0lIwXcGF0aGxpYi5QdXJlUGF0aC5hc191cmmUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QdXJlUGF0aC5hc191cmmUag2PAAB0lIwccGF0aGxpYi5QdXJlUGF0aC5pc19hYnNvbHV0ZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlB1cmVQYXRoLmlzX2Fic29sdXRllGoNjwAAdJSMHHBhdGhsaWIuUHVyZVBhdGguaXNfcmVzZXJ2ZWSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QdXJlUGF0aC5pc19yZXNlcnZlZJRqDY8AAHSUjBlwYXRobGliLlB1cmVQYXRoLmpvaW5wYXRolChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUHVyZVBhdGguam9pbnBhdGiUag2PAAB0lIwWcGF0aGxpYi5QdXJlUGF0aC5tYXRjaJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlB1cmVQYXRoLm1hdGNolGoNjwAAdJSMHHBhdGhsaWIuUHVyZVBhdGgucmVsYXRpdmVfdG+UKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QdXJlUGF0aC5yZWxhdGl2ZV90b5RqDY8AAHSUjBpwYXRobGliLlB1cmVQYXRoLndpdGhfbmFtZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlB1cmVQYXRoLndpdGhfbmFtZZRqDY8AAHSUjBxwYXRobGliLlB1cmVQYXRoLndpdGhfc3VmZml4lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUHVyZVBhdGgud2l0aF9zdWZmaXiUag2PAAB0lIwLcGRiLlBkYi5ydW6UKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGIuUGRiLnJ1bpRqDY8AAHSUjA9wZGIuUGRiLnJ1bmNhbGyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGIuUGRiLnJ1bmNhbGyUag2PAAB0lIwPcGRiLlBkYi5ydW5ldmFslChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiLlBkYi5ydW5ldmFslGoNjwAAdJSMEXBkYi5QZGIuc2V0X3RyYWNllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiLlBkYi5zZXRfdHJhY2WUag2PAAB0lIwXcGlja2xlLlBpY2tsZUJ1ZmZlci5yYXeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlQnVmZmVyLnJhd5RqDY8AAHSUjBtwaWNrbGUuUGlja2xlQnVmZmVyLnJlbGVhc2WUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlQnVmZmVyLnJlbGVhc2WUag2PAAB0lIwTcGlja2xlLlBpY2tsZXIuZHVtcJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5QaWNrbGVyLmR1bXCUag2PAAB0lIwccGlja2xlLlBpY2tsZXIucGVyc2lzdGVudF9pZJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5QaWNrbGVyLnBlcnNpc3RlbnRfaWSUag2PAAB0lIwfcGlja2xlLlBpY2tsZXIucmVkdWNlcl9vdmVycmlkZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5QaWNrbGVyLnJlZHVjZXJfb3ZlcnJpZGWUag2PAAB0lIwbcGlja2xlLlVucGlja2xlci5maW5kX2NsYXNzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlVucGlja2xlci5maW5kX2NsYXNzlGoNjwAAdJSMFXBpY2tsZS5VbnBpY2tsZXIubG9hZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5VbnBpY2tsZXIubG9hZJRqDY8AAHSUjCBwaWNrbGUuVW5waWNrbGVyLnBlcnNpc3RlbnRfbG9hZJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5VbnBpY2tsZXIucGVyc2lzdGVudF9sb2FklGoNjwAAdJSMFXBpcGVzLlRlbXBsYXRlLmFwcGVuZJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGUuYXBwZW5klGoNjwAAdJSMFHBpcGVzLlRlbXBsYXRlLmNsb25llChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlwZXMuaHRtbCNwaXBlcy5UZW1wbGF0ZS5jbG9uZZRqDY8AAHSUjBNwaXBlcy5UZW1wbGF0ZS5jb3B5lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlwZXMuaHRtbCNwaXBlcy5UZW1wbGF0ZS5jb3B5lGoNjwAAdJSMFHBpcGVzLlRlbXBsYXRlLmRlYnVnlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlwZXMuaHRtbCNwaXBlcy5UZW1wbGF0ZS5kZWJ1Z5RqDY8AAHSUjBNwaXBlcy5UZW1wbGF0ZS5vcGVulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlwZXMuaHRtbCNwaXBlcy5UZW1wbGF0ZS5vcGVulGoNjwAAdJSMFnBpcGVzLlRlbXBsYXRlLnByZXBlbmSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLlRlbXBsYXRlLnByZXBlbmSUag2PAAB0lIwUcGlwZXMuVGVtcGxhdGUucmVzZXSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waXBlcy5odG1sI3BpcGVzLlRlbXBsYXRlLnJlc2V0lGoNjwAAdJSMEHBvcGxpYi5QT1AzLmFwb3CUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5hcG9wlGoNjwAAdJSMEHBvcGxpYi5QT1AzLmNhcGGUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5jYXBhlGoNjwAAdJSMEHBvcGxpYi5QT1AzLmRlbGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5kZWxllGoNjwAAdJSMFnBvcGxpYi5QT1AzLmdldHdlbGNvbWWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5nZXR3ZWxjb21llGoNjwAAdJSMEHBvcGxpYi5QT1AzLmxpc3SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5saXN0lJUpAAEAAAAAAGoNjwAAdJSMEHBvcGxpYi5QT1AzLm5vb3CUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5ub29wlGoNjwAAdJSMEXBvcGxpYi5QT1AzLnBhc3NflChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMucGFzc1+Uag2PAAB0lIwQcG9wbGliLlBPUDMucXVpdJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnF1aXSUag2PAAB0lIwQcG9wbGliLlBPUDMucmV0cpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnJldHKUag2PAAB0lIwQcG9wbGliLlBPUDMucnBvcJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnJwb3CUag2PAAB0lIwQcG9wbGliLlBPUDMucnNldJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnJzZXSUag2PAAB0lIwacG9wbGliLlBPUDMuc2V0X2RlYnVnbGV2ZWyUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy5zZXRfZGVidWdsZXZlbJRqDY8AAHSUjBBwb3BsaWIuUE9QMy5zdGF0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMuc3RhdJRqDY8AAHSUjBBwb3BsaWIuUE9QMy5zdGxzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wbGliLlBPUDMuc3Rsc5RqDY8AAHSUjA9wb3BsaWIuUE9QMy50b3CUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3BsaWIuaHRtbCNwb3BsaWIuUE9QMy50b3CUag2PAAB0lIwQcG9wbGliLlBPUDMudWlkbJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnVpZGyUag2PAAB0lIwQcG9wbGliLlBPUDMudXNlcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnVzZXKUag2PAAB0lIwQcG9wbGliLlBPUDMudXRmOJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzLnV0ZjiUag2PAAB0lIwbcHByaW50LlByZXR0eVByaW50ZXIuZm9ybWF0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LlByZXR0eVByaW50ZXIuZm9ybWF0lGoNjwAAdJSMH3BwcmludC5QcmV0dHlQcmludGVyLmlzcmVhZGFibGWUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQuUHJldHR5UHJpbnRlci5pc3JlYWRhYmxllGoNjwAAdJSMIHBwcmludC5QcmV0dHlQcmludGVyLmlzcmVjdXJzaXZllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LlByZXR0eVByaW50ZXIuaXNyZWN1cnNpdmWUag2PAAB0lIwccHByaW50LlByZXR0eVByaW50ZXIucGZvcm1hdJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5QcmV0dHlQcmludGVyLnBmb3JtYXSUag2PAAB0lIwbcHByaW50LlByZXR0eVByaW50ZXIucHByaW50lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LlByZXR0eVByaW50ZXIucHByaW50lGoNjwAAdJSMHHByb2ZpbGUuUHJvZmlsZS5jcmVhdGVfc3RhdHOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLmNyZWF0ZV9zdGF0c5RqDY8AAHSUjBdwcm9maWxlLlByb2ZpbGUuZGlzYWJsZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLlByb2ZpbGUuZGlzYWJsZZRqDY8AAHSUjBpwcm9maWxlLlByb2ZpbGUuZHVtcF9zdGF0c5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLlByb2ZpbGUuZHVtcF9zdGF0c5RqDY8AAHSUjBZwcm9maWxlLlByb2ZpbGUuZW5hYmxllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZS5lbmFibGWUag2PAAB0lIwbcHJvZmlsZS5Qcm9maWxlLnByaW50X3N0YXRzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZS5wcmludF9zdGF0c5RqDY8AAHSUjBNwcm9maWxlLlByb2ZpbGUucnVulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUuUHJvZmlsZS5ydW6Uag2PAAB0lIwXcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGyUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS5Qcm9maWxlLnJ1bmNhbGyUag2PAAB0lIwWcHJvZmlsZS5Qcm9maWxlLnJ1bmN0eJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLlByb2ZpbGUucnVuY3R4lGoNjwAAdJSMEHBzdGF0cy5TdGF0cy5hZGSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjcHN0YXRzLlN0YXRzLmFkZJRqDY8AAHSUjBdwc3RhdHMuU3RhdHMuZHVtcF9zdGF0c5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHMuZHVtcF9zdGF0c5RqDY8AAHSUjBpwc3RhdHMuU3RhdHMucHJpbnRfY2FsbGVlc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHMucHJpbnRfY2FsbGVlc5RqDY8AAHSUjBpwc3RhdHMuU3RhdHMucHJpbnRfY2FsbGVyc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwc3RhdHMuU3RhdHMucHJpbnRfY2FsbGVyc5RqDY8AAHSUjBhwc3RhdHMuU3RhdHMucHJpbnRfc3RhdHOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjcHN0YXRzLlN0YXRzLnByaW50X3N0YXRzlGoNjwAAdJSMGnBzdGF0cy5TdGF0cy5yZXZlcnNlX29yZGVylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5yZXZlcnNlX29yZGVylGoNjwAAdJSMF3BzdGF0cy5TdGF0cy5zb3J0X3N0YXRzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5zb3J0X3N0YXRzlGoNjwAAdJSMF3BzdGF0cy5TdGF0cy5zdHJpcF9kaXJzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3BzdGF0cy5TdGF0cy5zdHJpcF9kaXJzlGoNjwAAdJSMEXF1ZXVlLlF1ZXVlLmVtcHR5lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5RdWV1ZS5lbXB0eZRqDY8AAHSUjBBxdWV1ZS5RdWV1ZS5mdWxslChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5RdWV1ZS5mdWxslGoNjwAAdJSMD3F1ZXVlLlF1ZXVlLmdldJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3F1ZXVlLmh0bWwjcXVldWUuUXVldWUuZ2V0lGoNjwAAdJSMFnF1ZXVlLlF1ZXVlLmdldF9ub3dhaXSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9xdWV1ZS5odG1sI3F1ZXVlLlF1ZXVlLmdldF9ub3dhaXSUag2PAAB0lIwQcXVldWUuUXVldWUuam9pbpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3F1ZXVlLmh0bWwjcXVldWUuUXVldWUuam9pbpRqDY8AAHSUjA9xdWV1ZS5RdWV1ZS5wdXSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9xdWV1ZS5odG1sI3F1ZXVlLlF1ZXVlLnB1dJRqDY8AAHSUjBZxdWV1ZS5RdWV1ZS5wdXRfbm93YWl0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5RdWV1ZS5wdXRfbm93YWl0lGoNjwAAdJSMEXF1ZXVlLlF1ZXVlLnFzaXpllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5RdWV1ZS5xc2l6ZZRqDY8AAHSUjBVxdWV1ZS5RdWV1ZS50YXNrX2RvbmWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9xdWV1ZS5odG1sI3F1ZXVlLlF1ZXVlLnRhc2tfZG9uZZRqDY8AAHSUjBdxdWV1ZS5TaW1wbGVRdWV1ZS5lbXB0eZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3F1ZXVlLmh0bWwjcXVldWUuU2ltcGxlUXVldWUuZW1wdHmUag2PAAB0lIwVcXVldWUuU2ltcGxlUXVldWUuZ2V0lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5TaW1wbGVRdWV1ZS5nZXSUag2PAAB0lIwccXVldWUuU2ltcGxlUXVldWUuZ2V0X25vd2FpdJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3F1ZXVlLmh0bWwjcXVldWUuU2ltcGxlUXVldWUuZ2V0X25vd2FpdJRqDY8AAHSUjBVxdWV1ZS5TaW1wbGVRdWV1ZS5wdXSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9xdWV1ZS5odG1sI3F1ZXVlLlNpbXBsZVF1ZXVlLnB1dJRqDY8AAHSUjBxxdWV1ZS5TaW1wbGVRdWV1ZS5wdXRfbm93YWl0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5TaW1wbGVRdWV1ZS5wdXRfbm93YWl0lGoNjwAAdJSMF3F1ZXVlLlNpbXBsZVF1ZXVlLnFzaXpllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5TaW1wbGVRdWV1ZS5xc2l6ZZRqDY8AAHSUjBRyZS5NYXRjaC5fX2dldGl0ZW1fX5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2guX19nZXRpdGVtX1+Uag2PAAB0lIwMcmUuTWF0Y2guZW5klChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaC5lbmSUag2PAAB0lIwPcmUuTWF0Y2guZXhwYW5klChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5NYXRjaC5leHBhbmSUag2PAAB0lIwOcmUuTWF0Y2guZ3JvdXCUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoLmdyb3VwlGoNjwAAdJSMEnJlLk1hdGNoLmdyb3VwZGljdJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2guZ3JvdXBkaWN0lGoNjwAAdJSMD3JlLk1hdGNoLmdyb3Vwc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuTWF0Y2guZ3JvdXBzlGoNjwAAdJSMDXJlLk1hdGNoLnNwYW6UKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoLnNwYW6Uag2PAAB0lIwOcmUuTWF0Y2guc3RhcnSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLk1hdGNoLnN0YXJ0lGoNjwAAdJSMEnJlLlBhdHRlcm4uZmluZGFsbJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuUGF0dGVybi5maW5kYWxslGoNjwAAdJSME3JlLlBhdHRlcm4uZmluZGl0ZXKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLlBhdHRlcm4uZmluZGl0ZXKUag2PAAB0lIwUcmUuUGF0dGVybi5mdWxsbWF0Y2iUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLlBhdHRlcm4uZnVsbG1hdGNolGoNjwAAdJSMEHJlLlBhdHRlcm4ubWF0Y2iUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLlBhdHRlcm4ubWF0Y2iUag2PAAB0lIwRcmUuUGF0dGVybi5zZWFyY2iUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLlBhdHRlcm4uc2VhcmNolGoNjwAAdJSMEHJlLlBhdHRlcm4uc3BsaXSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLlBhdHRlcm4uc3BsaXSUag2PAAB0lIwOcmUuUGF0dGVybi5zdWKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLlBhdHRlcm4uc3VilGoNjwAAdJSMD3JlLlBhdHRlcm4uc3VibpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuUGF0dGVybi5zdWJulGoNjwAAdJSMEXJlcHJsaWIuUmVwci5yZXBylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3JlcHJsaWIuUmVwci5yZXBylGoNjwAAdJSMEnJlcHJsaWIuUmVwci5yZXByMZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlcHJsaWIuaHRtbCNyZXBybGliLlJlcHIucmVwcjGUag2PAAB0lIwecmxjb21wbGV0ZXIuQ29tcGxldGVyLmNvbXBsZXRllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmxjb21wbGV0ZXIuaHRtbCNybGNvbXBsZXRlci5Db21wbGV0ZXIuY29tcGxldGWUag2PAAB0lIwWc2NoZWQuc2NoZWR1bGVyLmNhbmNlbJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NjaGVkLmh0bWwjc2NoZWQuc2NoZWR1bGVyLmNhbmNlbJRqDY8AAHSUjBVzY2hlZC5zY2hlZHVsZXIuZW1wdHmUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlci5lbXB0eZRqDY8AAHSUjBVzY2hlZC5zY2hlZHVsZXIuZW50ZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlci5lbnRlcpRqDY8AAHSUjBhzY2hlZC5zY2hlZHVsZXIuZW50ZXJhYnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkLnNjaGVkdWxlci5lbnRlcmFic5RqDY8AAHSUjBNzY2hlZC5zY2hlZHVsZXIucnVulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2NoZWQuaHRtbCNzY2hlZC5zY2hlZHVsZXIucnVulGoNjwAAdJSMFHNlbGVjdC5kZXZwb2xsLmNsb3NllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmRldnBvbGwuY2xvc2WUag2PAAB0lIwVc2VsZWN0LmRldnBvbGwuZmlsZW5vlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmRldnBvbGwuZmlsZW5vlGoNjwAAdJSMFXNlbGVjdC5kZXZwb2xsLm1vZGlmeZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5kZXZwb2xsLm1vZGlmeZRqDY8AAHSUjBNzZWxlY3QuZGV2cG9sbC5wb2xslChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmRldnBvbGwucG9sbJRqDY8AAHSUjBdzZWxlY3QuZGV2cG9sbC5yZWdpc3RlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5kZXZwb2xsLnJlZ2lzdGVylGoNjwAAdJSMGXNlbGVjdC5kZXZwb2xsLnVucmVnaXN0ZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QuZGV2cG9sbC51bnJlZ2lzdGVylGoNjwAAdJSMEnNlbGVjdC5lcG9sbC5jbG9zZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC5jbG9zZZRqDY8AAHSUjBNzZWxlY3QuZXBvbGwuZmlsZW5vlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVwb2xsLmZpbGVub5RqDY8AAHSUjBNzZWxlY3QuZXBvbGwuZnJvbWZklChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVwb2xsLmZyb21mZJRqDY8AAHSUjBNzZWxlY3QuZXBvbGwubW9kaWZ5lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmVwb2xsLm1vZGlmeZRqDY8AAHSUjBFzZWxlY3QuZXBvbGwucG9sbJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC5wb2xslGoNjwAAdJSMFXNlbGVjdC5lcG9sbC5yZWdpc3RlcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC5yZWdpc3RlcpRqDY8AAHSUjBdzZWxlY3QuZXBvbGwudW5yZWdpc3RlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbC51bnJlZ2lzdGVylGoNjwAAdJSME3NlbGVjdC5rcXVldWUuY2xvc2WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Qua3F1ZXVlLmNsb3NllGoNjwAAdJSMFXNlbGVjdC5rcXVldWUuY29udHJvbJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rcXVldWUuY29udHJvbJRqDY8AAHSUjBRzZWxlY3Qua3F1ZXVlLmZpbGVub5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5rcXVldWUuZmlsZW5vlGoNjwAAdJSMFHNlbGVjdC5rcXVldWUuZnJvbWZklChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtxdWV1ZS5mcm9tZmSUag2PAAB0lIwSc2VsZWN0LnBvbGwubW9kaWZ5lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnBvbGwubW9kaWZ5lGoNjwAAdJSMEHNlbGVjdC5wb2xsLnBvbGyUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3QucG9sbC5wb2xslGoNjwAAdJSMFHNlbGVjdC5wb2xsLnJlZ2lzdGVylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LnBvbGwucmVnaXN0ZXKUag2PAAB0lIwWc2VsZWN0LnBvbGwudW5yZWdpc3RlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5wb2xsLnVucmVnaXN0ZXKUag2PAAB0lIwcc2VsZWN0b3JzLkJhc2VTZWxlY3Rvci5jbG9zZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdG9ycy5odG1sI3NlbGVjdG9ycy5CYXNlU2VsZWN0b3IuY2xvc2WUag2PAAB0lIwec2VsZWN0b3JzLkJhc2VTZWxlY3Rvci5nZXRfa2V5lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLkJhc2VTZWxlY3Rvci5nZXRfa2V5lGoNjwAAdJSMHnNlbGVjdG9ycy5CYXNlU2VsZWN0b3IuZ2V0X21hcJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdG9ycy5odG1sI3NlbGVjdG9ycy5CYXNlU2VsZWN0b3IuZ2V0X21hcJRqDY8AAHSUjB1zZWxlY3RvcnMuQmFzZVNlbGVjdG9yLm1vZGlmeZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdG9ycy5odG1sI3NlbGVjdG9ycy5CYXNlU2VsZWN0b3IubW9kaWZ5lGoNjwAAdJSMH3NlbGVjdG9ycy5CYXNlU2VsZWN0b3IucmVnaXN0ZXKUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3RvcnMuaHRtbCNzZWxlY3RvcnMuQmFzZVNlbGVjdG9yLnJlZ2lzdGVylGoNjwAAdJSMHXNlbGVjdG9ycy5CYXNlU2VsZWN0b3Iuc2VsZWN0lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLkJhc2VTZWxlY3Rvci5zZWxlY3SUag2PAAB0lIwhc2VsZWN0b3JzLkJhc2VTZWxlY3Rvci51bnJlZ2lzdGVylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLkJhc2VTZWxlY3Rvci51bnJlZ2lzdGVylGoNjwAAdJSMIHNlbGVjdG9ycy5EZXZwb2xsU2VsZWN0b3IuZmlsZW5vlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLkRldnBvbGxTZWxlY3Rvci5maWxlbm+Uag2PAAB0lIwec2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IuZmlsZW5vlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IuZmlsZW5vlGoNjwAAdJSMH3NlbGVjdG9ycy5LcXVldWVTZWxlY3Rvci5maWxlbm+UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3RvcnMuaHRtbCNzZWxlY3RvcnMuS3F1ZXVlU2VsZWN0b3IuZmlsZW5vlGoNjwAAdJSMEnNoZWx2ZS5TaGVsZi5jbG9zZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NoZWx2ZS5odG1sI3NoZWx2ZS5TaGVsZi5jbG9zZZRqDY8AAHSUjBFzaGVsdmUuU2hlbGYuc3luY5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NoZWx2ZS5odG1sI3NoZWx2ZS5TaGVsZi5zeW5jlGoNjwAAdJSMGHNobGV4LnNobGV4LmVycm9yX2xlYWRlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguZXJyb3JfbGVhZGVylGoNjwAAdJSMFXNobGV4LnNobGV4LmdldF90b2tlbpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXguZ2V0X3Rva2VulGoNjwAAdJSMFnNobGV4LnNobGV4LnBvcF9zb3VyY2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnBvcF9zb3VyY2WUag2PAAB0lIwXc2hsZXguc2hsZXgucHVzaF9zb3VyY2WUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnB1c2hfc291cmNllGoNjwAAdJSMFnNobGV4LnNobGV4LnB1c2hfdG9rZW6UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4LnB1c2hfdG9rZW6Uag2PAAB0lIwWc2hsZXguc2hsZXgucmVhZF90b2tlbpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguc2hsZXgucmVhZF90b2tlbpRqDY8AAHSUjBZzaGxleC5zaGxleC5zb3VyY2Vob29rlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC5zaGxleC5zb3VyY2Vob29rlGoNjwAAdJSMDXNsaWNlLmluZGljZXOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3NsaWNlLmluZGljZXOUag2PAAB0lIwgc210cGQuU01UUFNlcnZlci5wcm9jZXNzX21lc3NhZ2WUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLlNNVFBTZXJ2ZXIucHJvY2Vzc19tZXNzYWdllGoNjwAAdJSMEXNtdHBsaWIuU01UUC5hdXRolChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5hdXRolGoNjwAAdJSMFHNtdHBsaWIuU01UUC5jb25uZWN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5jb25uZWN0lGoNjwAAdJSMEnNtdHBsaWIuU01UUC5kb2NtZJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuZG9jbWSUag2PAAB0lIwRc210cGxpYi5TTVRQLmVobG+UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmVobG+Uag2PAAB0lIwjc210cGxpYi5TTVRQLmVobG9fb3JfaGVsb19pZl9uZWVkZWSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmVobG9fb3JfaGVsb19pZl9uZWVkZWSUag2PAAB0lIwVc210cGxpYi5TTVRQLmhhc19leHRulChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5oYXNfZXh0bpRqDY8AAHSUjBFzbXRwbGliLlNNVFAuaGVsb5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuaGVsb5RqDY8AAHSUjBJzbXRwbGliLlNNVFAubG9naW6UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLmxvZ2lulGoNjwAAdJSMEXNtdHBsaWIuU01UUC5xdWl0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5xdWl0lGoNjwAAdJSMGXNtdHBsaWIuU01UUC5zZW5kX21lc3NhZ2WUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLnNlbmRfbWVzc2FnZZRqDY8AAHSUjBVzbXRwbGliLlNNVFAuc2VuZG1haWyUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQLnNlbmRtYWlslGoNjwAAdJSMG3NtdHBsaWIuU01UUC5zZXRfZGVidWdsZXZlbJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwbGliLlNNVFAuc2V0X2RlYnVnbGV2ZWyUag2PAAB0lIwVc210cGxpYi5TTVRQLnN0YXJ0dGxzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC5zdGFydHRsc5RqDY8AAHSUjBNzbXRwbGliLlNNVFAudmVyaWZ5lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuU01UUC52ZXJpZnmUag2PAAB0lIwUc29ja2V0LnNvY2tldC5hY2NlcHSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmFjY2VwdJRqDY8AAHSUjBJzb2NrZXQuc29ja2V0LmJpbmSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmJpbmSUag2PAAB0lIwTc29ja2V0LnNvY2tldC5jbG9zZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuY2xvc2WUag2PAAB0lIwVc29ja2V0LnNvY2tldC5jb25uZWN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5jb25uZWN0lGoNjwAAdJSMGHNvY2tldC5zb2NrZXQuY29ubmVjdF9leJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuY29ubmVjdF9leJRqDY8AAHSUjBRzb2NrZXQuc29ja2V0LmRldGFjaJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuZGV0YWNolGoNjwAAdJSMEXNvY2tldC5zb2NrZXQuZHVwlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5kdXCUag2PAAB0lIwUc29ja2V0LnNvY2tldC5maWxlbm+UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmZpbGVub5RqDY8AAHSUjB1zb2NrZXQuc29ja2V0LmdldF9pbmhlcml0YWJsZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuZ2V0X2luaGVyaXRhYmxllGoNjwAAdJSMGXNvY2tldC5zb2NrZXQuZ2V0YmxvY2tpbmeUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmdldGJsb2NraW5nlGoNjwAAdJSMGXNvY2tldC5zb2NrZXQuZ2V0cGVlcm5hbWWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmdldHBlZXJuYW1llGoNjwAAdJSMGXNvY2tldC5zb2NrZXQuZ2V0c29ja25hbWWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmdldHNvY2tuYW1llGoNjwAAdJSMGHNvY2tldC5zb2NrZXQuZ2V0c29ja29wdJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuZ2V0c29ja29wdJRqDY8AAHSUjBhzb2NrZXQuc29ja2V0LmdldHRpbWVvdXSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LmdldHRpbWVvdXSUag2PAAB0lIwTc29ja2V0LnNvY2tldC5pb2N0bJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuaW9jdGyUag2PAAB0lIwUc29ja2V0LnNvY2tldC5saXN0ZW6UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0Lmxpc3RlbpRqDY8AAHSUjBZzb2NrZXQuc29ja2V0Lm1ha2VmaWxllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5tYWtlZmlsZZRqDY8AAHSUjBJzb2NrZXQuc29ja2V0LnJlY3aUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnJlY3aUag2PAAB0lIwXc29ja2V0LnNvY2tldC5yZWN2X2ludG+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnJlY3ZfaW50b5RqDY8AAHSUjBZzb2NrZXQuc29ja2V0LnJlY3Zmcm9tlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5yZWN2ZnJvbZRqDY8AAHSUjBtzb2NrZXQuc29ja2V0LnJlY3Zmcm9tX2ludG+UKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnJlY3Zmcm9tX2ludG+Uag2PAAB0lIwVc29ja2V0LnNvY2tldC5yZWN2bXNnlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5yZWN2bXNnlGoNjwAAdJSMGnNvY2tldC5zb2NrZXQucmVjdm1zZ19pbnRvlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5yZWN2bXNnX2ludG+Uag2PAAB0lIwSc29ja2V0LnNvY2tldC5zZW5klChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZW5klGoNjwAAdJSMFXNvY2tldC5zb2NrZXQuc2VuZGFsbJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXQuc2VuZGFsbJRqDY8AAHSUjBZzb2NrZXQuc29ja2V0LnNlbmRmaWxllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZW5kZmlsZZRqDY8AAHSUjBVzb2NrZXQuc29ja2V0LnNlbmRtc2eUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnNlbmRtc2eUag2PAAB0lIwbc29ja2V0LnNvY2tldC5zZW5kbXNnX2FmYWxnlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZW5kbXNnX2FmYWxnlGoNjwAAdJSMFHNvY2tldC5zb2NrZXQuc2VuZHRvlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZW5kdG+Uag2PAAB0lIwdc29ja2V0LnNvY2tldC5zZXRfaW5oZXJpdGFibGWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnNldF9pbmhlcml0YWJsZZRqDY8AAHSUjBlzb2NrZXQuc29ja2V0LnNldGJsb2NraW5nlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZXRibG9ja2luZ5RqDY8AAHSUjBhzb2NrZXQuc29ja2V0LnNldHNvY2tvcHSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnNldHNvY2tvcHSUag2PAAB0lIwYc29ja2V0LnNvY2tldC5zZXR0aW1lb3V0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LnNvY2tldC5zZXR0aW1lb3V0lGoNjwAAdJSME3NvY2tldC5zb2NrZXQuc2hhcmWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnNoYXJllGoNjwAAdJSMFnNvY2tldC5zb2NrZXQuc2h1dGRvd26UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0LnNodXRkb3dulGoNjwAAdJSMJnNvY2tldHNlcnZlci5CYXNlUmVxdWVzdEhhbmRsZXIuZmluaXNolChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjc29ja2V0c2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlci5maW5pc2iUag2PAAB0lIwmc29ja2V0c2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlci5oYW5kbGWUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuQmFzZVJlcXVlc3RIYW5kbGVyLmhhbmRsZZRqDY8AAHSUjCVzb2NrZXRzZXJ2ZXIuQmFzZVJlcXVlc3RIYW5kbGVyLnNldHVwlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjc29ja2V0c2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlci5zZXR1cJRqDY8AAHSUjB5zb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5maWxlbm+UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5maWxlbm+Uag2PAAB0lIwmc29ja2V0c2VydmVyLkJhc2VTZXJ2ZXIuZmluaXNoX3JlcXVlc3SUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5maW5pc2hfcmVxdWVzdJRqDY8AAHSUjCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5nZXRfcmVxdWVzdJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLmdldF9yZXF1ZXN0lGoNjwAAdJSMJHNvY2tldHNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9lcnJvcpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9lcnJvcpRqDY8AAHSUjCZzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5oYW5kbGVfcmVxdWVzdJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9yZXF1ZXN0lGoNjwAAdJSMJnNvY2tldHNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV90aW1lb3V0lChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjc29ja2V0c2VydmVyLkJhc2VTZXJ2ZXIuaGFuZGxlX3RpbWVvdXSUag2PAAB0lIwnc29ja2V0c2VydmVyLkJhc2VTZXJ2ZXIucHJvY2Vzc19yZXF1ZXN0lChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjc29ja2V0c2VydmVyLkJhc2VTZXJ2ZXIucHJvY2Vzc19yZXF1ZXN0lGoNjwAAdJSMJXNvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlX2ZvcmV2ZXKUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZV9mb3JldmVylGoNjwAAdJSMJ3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlcl9hY3RpdmF0ZZQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlcl9hY3RpdmF0ZZRqDY8AAHSUjCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2ZXJfYmluZJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlcl9iaW5klGoNjwAAdJSMJHNvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlcl9jbG9zZZQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlcl9jbG9zZZRqDY8AAHSUjCdzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2aWNlX2FjdGlvbnOUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5zZXJ2aWNlX2FjdGlvbnOUag2PAAB0lIwgc29ja2V0c2VydmVyLkJhc2VTZXJ2ZXIuc2h1dGRvd26UKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci5zaHV0ZG93bpRqDY8AAHSUjCZzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlci52ZXJpZnlfcmVxdWVzdJQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVyLnZlcmlmeV9yZXF1ZXN0lGoNjwAAdJSMGXNxbGl0ZTMuQ29ubmVjdGlvbi5iYWNrdXCUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmJhY2t1cJRqDY8AAHSUjBhzcWxpdGUzLkNvbm5lY3Rpb24uY2xvc2WUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmNsb3NllGoNjwAAdJSMGXNxbGl0ZTMuQ29ubmVjdGlvbi5jb21taXSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmNvbW1pdJRqDY8AAHSUjCNzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2FnZ3JlZ2F0ZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2FnZ3JlZ2F0ZZRqDY8AAHSUjCNzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2NvbGxhdGlvbpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2NvbGxhdGlvbpRqDY8AAHSUjCJzcWxpdGUzLkNvbm5lY3Rpb24uY3JlYXRlX2Z1bmN0aW9ulChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5jcmVhdGVfZnVuY3Rpb26Uag2PAAB0lIwZc3FsaXRlMy5Db25uZWN0aW9uLmN1cnNvcpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uY3Vyc29ylGoNjwAAdJSMKHNxbGl0ZTMuQ29ubmVjdGlvbi5lbmFibGVfbG9hZF9leHRlbnNpb26UKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbpRqDY8AAHSUjBpzcWxpdGUzLkNvbm5lY3Rpb24uZXhlY3V0ZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uZXhlY3V0ZZRqDY8AAHSUjB5zcWxpdGUzLkNvbm5lY3Rpb24uZXhlY3V0ZW1hbnmUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmV4ZWN1dGVtYW55lGoNjwAAdJSMIHNxbGl0ZTMuQ29ubmVjdGlvbi5leGVjdXRlc2NyaXB0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5leGVjdXRlc2NyaXB0lGoNjwAAdJSMHHNxbGl0ZTMuQ29ubmVjdGlvbi5pbnRlcnJ1cHSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLmludGVycnVwdJRqDY8AAHSUjBtzcWxpdGUzLkNvbm5lY3Rpb24uaXRlcmR1bXCUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLml0ZXJkdW1wlGoNjwAAdJSMIXNxbGl0ZTMuQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24ubG9hZF9leHRlbnNpb26Uag2PAAB0lIwbc3FsaXRlMy5Db25uZWN0aW9uLnJvbGxiYWNrlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ29ubmVjdGlvbi5yb2xsYmFja5RqDY8AAHSUjCFzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X2F1dGhvcml6ZXKUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9uLnNldF9hdXRob3JpemVylGoNjwAAdJSMJ3NxbGl0ZTMuQ29ubmVjdGlvbi5zZXRfcHJvZ3Jlc3NfaGFuZGxlcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X3Byb2dyZXNzX2hhbmRsZXKUag2PAAB0lIwlc3FsaXRlMy5Db25uZWN0aW9uLnNldF90cmFjZV9jYWxsYmFja5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X3RyYWNlX2NhbGxiYWNrlGoNjwAAdJSMFHNxbGl0ZTMuQ3Vyc29yLmNsb3NllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmNsb3NllGoNjwAAdJSMFnNxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5DdXJzb3IuZXhlY3V0ZZRqDY8AAHSUjBpzcWxpdGUzLkN1cnNvci5leGVjdXRlbWFueZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5leGVjdXRlbWFueZRqDY8AAHSUjBxzcWxpdGUzLkN1cnNvci5leGVjdXRlc2NyaXB0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmV4ZWN1dGVzY3JpcHSUag2PAAB0lIwXc3FsaXRlMy5DdXJzb3IuZmV0Y2hhbGyUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5DdXJzb3IuZmV0Y2hhbGyUag2PAAB0lIwYc3FsaXRlMy5DdXJzb3IuZmV0Y2htYW55lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29yLmZldGNobWFueZRqDY8AAHSUjBdzcWxpdGUzLkN1cnNvci5mZXRjaG9uZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLkN1cnNvci5mZXRjaG9uZZRqDY8AAHSUjBBzcWxpdGUzLlJvdy5rZXlzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuUm93LmtleXOUag2PAAB0lIwSc3NsLk1lbW9yeUJJTy5yZWFklChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk1lbW9yeUJJTy5yZWFklGoNjwAAdJSME3NzbC5NZW1vcnlCSU8ud3JpdGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuTWVtb3J5QklPLndyaXRllGoNjwAAdJSMF3NzbC5NZW1vcnlCSU8ud3JpdGVfZW9mlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk1lbW9yeUJJTy53cml0ZV9lb2aUag2PAAB0lIwfc3NsLlNTTENvbnRleHQuY2VydF9zdG9yZV9zdGF0c5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmNlcnRfc3RvcmVfc3RhdHOUag2PAAB0lIwbc3NsLlNTTENvbnRleHQuZ2V0X2NhX2NlcnRzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuZ2V0X2NhX2NlcnRzlGoNjwAAdJSMGnNzbC5TU0xDb250ZXh0LmdldF9jaXBoZXJzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuZ2V0X2NpcGhlcnOUag2PAAB0lIwec3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWlulChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWlulGoNjwAAdJSMIXNzbC5TU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0c5RqDY8AAHSUjB1zc2wuU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zlGoNjwAAdJSMJHNzbC5TU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc5RqDY8AAHSUjBxzc2wuU1NMQ29udGV4dC5zZXNzaW9uX3N0YXRzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQuc2Vzc2lvbl9zdGF0c5RqDY8AAHSUjCFzc2wuU1NMQ29udGV4dC5zZXRfYWxwbl9wcm90b2NvbHOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXRfYWxwbl9wcm90b2NvbHOUag2PAAB0lIwac3NsLlNTTENvbnRleHQuc2V0X2NpcGhlcnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXRfY2lwaGVyc5RqDY8AAHSUjCdzc2wuU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHOUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHOUag2PAAB0lIwdc3NsLlNTTENvbnRleHQuc2V0X2VjZGhfY3VydmWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC5zZXRfZWNkaF9jdXJ2ZZRqDY8AAHSUjCBzc2wuU1NMQ29udGV4dC5zZXRfbnBuX3Byb3RvY29sc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0LnNldF9ucG5fcHJvdG9jb2xzlGoNjwAAdJSMF3NzbC5TU0xDb250ZXh0LndyYXBfYmlvlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTENvbnRleHQud3JhcF9iaW+Uag2PAAB0lIwac3NsLlNTTENvbnRleHQud3JhcF9zb2NrZXSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMQ29udGV4dC53cmFwX3NvY2tldJRqDY8AAHSUjBRzc2wuU1NMU29ja2V0LmNpcGhlcpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQuY2lwaGVylGoNjwAAdJSMGXNzbC5TU0xTb2NrZXQuY29tcHJlc3Npb26UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LmNvbXByZXNzaW9ulGoNjwAAdJSMGnNzbC5TU0xTb2NrZXQuZG9faGFuZHNoYWtllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5kb19oYW5kc2hha2WUag2PAAB0lIwhc3NsLlNTTFNvY2tldC5nZXRfY2hhbm5lbF9iaW5kaW5nlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5nZXRfY2hhbm5lbF9iaW5kaW5nlGoNjwAAdJSMGXNzbC5TU0xTb2NrZXQuZ2V0cGVlcmNlcnSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LmdldHBlZXJjZXJ0lGoNjwAAdJSMFXNzbC5TU0xTb2NrZXQucGVuZGluZ5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQucGVuZGluZ5RqDY8AAHSUjBJzc2wuU1NMU29ja2V0LnJlYWSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LnJlYWSUag2PAAB0lIwkc3NsLlNTTFNvY2tldC5zZWxlY3RlZF9hbHBuX3Byb3RvY29slChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5zZWxlY3RlZF9hbHBuX3Byb3RvY29slGoNjwAAdJSMI3NzbC5TU0xTb2NrZXQuc2VsZWN0ZWRfbnBuX3Byb3RvY29slChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC5zZWxlY3RlZF9ucG5fcHJvdG9jb2yUag2PAAB0lIwcc3NsLlNTTFNvY2tldC5zaGFyZWRfY2lwaGVyc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTb2NrZXQuc2hhcmVkX2NpcGhlcnOUag2PAAB0lIwUc3NsLlNTTFNvY2tldC51bndyYXCUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LnVud3JhcJRqDY8AAHSUjCpzc2wuU1NMU29ja2V0LnZlcmlmeV9jbGllbnRfcG9zdF9oYW5kc2hha2WUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LnZlcmlmeV9jbGllbnRfcG9zdF9oYW5kc2hha2WUag2PAAB0lIwVc3NsLlNTTFNvY2tldC52ZXJzaW9ulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTFNvY2tldC52ZXJzaW9ulGoNjwAAdJSME3NzbC5TU0xTb2NrZXQud3JpdGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0LndyaXRllGoNjwAAdJSMGXN0YXRpc3RpY3MuTm9ybWFsRGlzdC5jZGaUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5Ob3JtYWxEaXN0LmNkZpRqDY8AAHSUjCJzdGF0aXN0aWNzLk5vcm1hbERpc3QuZnJvbV9zYW1wbGVzlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MuTm9ybWFsRGlzdC5mcm9tX3NhbXBsZXOUag2PAAB0lIwdc3RhdGlzdGljcy5Ob3JtYWxEaXN0Lmludl9jZGaUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5Ob3JtYWxEaXN0Lmludl9jZGaUag2PAAB0lIwdc3RhdGlzdGljcy5Ob3JtYWxEaXN0Lm92ZXJsYXCUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5Ob3JtYWxEaXN0Lm92ZXJsYXCUag2PAAB0lIwZc3RhdGlzdGljcy5Ob3JtYWxEaXN0LnBkZpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzLk5vcm1hbERpc3QucGRmlGoNjwAAdJSMH3N0YXRpc3RpY3MuTm9ybWFsRGlzdC5xdWFudGlsZXOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5Ob3JtYWxEaXN0LnF1YW50aWxlc5RqDY8AAHSUjB1zdGF0aXN0aWNzLk5vcm1hbERpc3Quc2FtcGxlc5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXRpc3RpY3MuaHRtbCNzdGF0aXN0aWNzLk5vcm1hbERpc3Quc2FtcGxlc5RqDY8AAHSUjA5zdHIuY2FwaXRhbGl6ZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmNhcGl0YWxpemWUag2PAAB0lIwMc3RyLmNhc2Vmb2xklChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuY2FzZWZvbGSUag2PAAB0lIwKc3RyLmNlbnRlcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmNlbnRlcpRqDY8AAHSUjAlzdHIuY291bnSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5jb3VudJRqDY8AAHSUjApzdHIuZW5jb2RllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuZW5jb2RllGoNjwAAdJSMDHN0ci5lbmRzd2l0aJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmVuZHN3aXRolGoNjwAAdJSMDnN0ci5leHBhbmR0YWJzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuZXhwYW5kdGFic5RqDY8AAHSUjAhzdHIuZmluZJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmZpbmSUag2PAAB0lIwKc3RyLmZvcm1hdJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmZvcm1hdJRqDY8AAHSUjA5zdHIuZm9ybWF0X21hcJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmZvcm1hdF9tYXCUag2PAAB0lIwJc3RyLmluZGV4lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuaW5kZXiUag2PAAB0lIwLc3RyLmlzYWxudW2UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pc2FsbnVtlGoNjwAAdJSMC3N0ci5pc2FscGhhlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuaXNhbHBoYZRqDY8AAHSUjAtzdHIuaXNhc2NpaZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzYXNjaWmUag2PAAB0lIwNc3RyLmlzZGVjaW1hbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzZGVjaW1hbJRqDY8AAHSUjAtzdHIuaXNkaWdpdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzZGlnaXSUag2PAAB0lIwQc3RyLmlzaWRlbnRpZmllcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzaWRlbnRpZmllcpRqDY8AAHSUjAtzdHIuaXNsb3dlcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzbG93ZXKUag2PAAB0lIwNc3RyLmlzbnVtZXJpY5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzbnVtZXJpY5RqDY8AAHSUjA9zdHIuaXNwcmludGFibGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pc3ByaW50YWJsZZRqDY8AAHSUjAtzdHIuaXNzcGFjZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmlzc3BhY2WUag2PAAB0lIwLc3RyLmlzdGl0bGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5pc3RpdGxllGoNjwAAdJSMC3N0ci5pc3VwcGVylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuaXN1cHBlcpRqDY8AAHSUjAhzdHIuam9pbpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmpvaW6Uag2PAAB0lIwJc3RyLmxqdXN0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIubGp1c3SUag2PAAB0lIwJc3RyLmxvd2VylChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIubG93ZXKUag2PAAB0lIwKc3RyLmxzdHJpcJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLmxzdHJpcJRqDY8AAHSUjA1zdHIubWFrZXRyYW5zlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIubWFrZXRyYW5zlGoNjwAAdJSMDXN0ci5wYXJ0aXRpb26UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5wYXJ0aXRpb26Uag2PAAB0lIwLc3RyLnJlcGxhY2WUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5yZXBsYWNllGoNjwAAdJSMCXN0ci5yZmluZJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJmaW5klGoNjwAAdJSMCnN0ci5yaW5kZXiUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5yaW5kZXiUag2PAAB0lIwJc3RyLnJqdXN0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIucmp1c3SUag2PAAB0lIwOc3RyLnJwYXJ0aXRpb26UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5ycGFydGl0aW9ulGoNjwAAdJSMCnN0ci5yc3BsaXSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5yc3BsaXSUag2PAAB0lIwKc3RyLnJzdHJpcJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnJzdHJpcJRqDY8AAHSUjAlzdHIuc3BsaXSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5zcGxpdJRqDY8AAHSUjA5zdHIuc3BsaXRsaW5lc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnNwbGl0bGluZXOUag2PAAB0lIwOc3RyLnN0YXJ0c3dpdGiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci5zdGFydHN3aXRolGoNjwAAdJSMCXN0ci5zdHJpcJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnN0cmlwlGoNjwAAdJSMDHN0ci5zd2FwY2FzZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnN3YXBjYXNllGoNjwAAdJSMCXN0ci50aXRsZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RyLnRpdGxllGoNjwAAdJSMDXN0ci50cmFuc2xhdGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0ci50cmFuc2xhdGWUag2PAAB0lIwJc3RyLnVwcGVylChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIudXBwZXKUag2PAAB0lIwJc3RyLnpmaWxslChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzdHIuemZpbGyUag2PAAB0lIwic3RyaW5nLkZvcm1hdHRlci5jaGVja191bnVzZWRfYXJnc5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIuY2hlY2tfdW51c2VkX2FyZ3OUag2PAAB0lIwec3RyaW5nLkZvcm1hdHRlci5jb252ZXJ0X2ZpZWxklChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci5jb252ZXJ0X2ZpZWxklGoNjwAAdJSMF3N0cmluZy5Gb3JtYXR0ZXIuZm9ybWF0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci5mb3JtYXSUag2PAAB0lIwdc3RyaW5nLkZvcm1hdHRlci5mb3JtYXRfZmllbGSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuRm9ybWF0dGVyLmZvcm1hdF9maWVsZJRqDY8AAHSUjBpzdHJpbmcuRm9ybWF0dGVyLmdldF9maWVsZJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIuZ2V0X2ZpZWxklGoNjwAAdJSMGnN0cmluZy5Gb3JtYXR0ZXIuZ2V0X3ZhbHVllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci5nZXRfdmFsdWWUag2PAAB0lIwWc3RyaW5nLkZvcm1hdHRlci5wYXJzZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5Gb3JtYXR0ZXIucGFyc2WUag2PAAB0lIwYc3RyaW5nLkZvcm1hdHRlci52Zm9ybWF0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlci52Zm9ybWF0lGoNjwAAdJSMH3N0cmluZy5UZW1wbGF0ZS5zYWZlX3N1YnN0aXR1dGWUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuVGVtcGxhdGUuc2FmZV9zdWJzdGl0dXRllGoNjwAAdJSMGnN0cmluZy5UZW1wbGF0ZS5zdWJzdGl0dXRllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLlRlbXBsYXRlLnN1YnN0aXR1dGWUag2PAAB0lIwZc3RydWN0LlN0cnVjdC5pdGVyX3VucGFja5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5TdHJ1Y3QuaXRlcl91bnBhY2uUag2PAAB0lIwSc3RydWN0LlN0cnVjdC5wYWNrlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LlN0cnVjdC5wYWNrlGoNjwAAdJSMF3N0cnVjdC5TdHJ1Y3QucGFja19pbnRvlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LlN0cnVjdC5wYWNrX2ludG+Uag2PAAB0lIwUc3RydWN0LlN0cnVjdC51bnBhY2uUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuU3RydWN0LnVucGFja5RqDY8AAHSUjBlzdHJ1Y3QuU3RydWN0LnVucGFja19mcm9tlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LlN0cnVjdC51bnBhY2tfZnJvbZRqDY8AAHSUjCxzdWJwcm9jZXNzLkNvbXBsZXRlZFByb2Nlc3MuY2hlY2tfcmV0dXJuY29kZZQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLkNvbXBsZXRlZFByb2Nlc3MuY2hlY2tfcmV0dXJuY29kZZRqDY8AAHSUjBxzdWJwcm9jZXNzLlBvcGVuLmNvbW11bmljYXRllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGWUag2PAAB0lIwVc3VicHJvY2Vzcy5Qb3Blbi5raWxslChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW4ua2lsbJRqDY8AAHSUjBVzdWJwcm9jZXNzLlBvcGVuLnBvbGyUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5wb2xslGoNjwAAdJSMHHN1YnByb2Nlc3MuUG9wZW4uc2VuZF9zaWduYWyUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbJRqDY8AAHSUjBpzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZZRqDY8AAHSUjBVzdWJwcm9jZXNzLlBvcGVuLndhaXSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5Qb3Blbi53YWl0lGoNjwAAdJSME3N1bmF1LkFVX3JlYWQuY2xvc2WUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuY2xvc2WUag2PAAB0lIwZc3VuYXUuQVVfcmVhZC5nZXRjb21wbmFtZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5nZXRjb21wbmFtZZRqDY8AAHSUjBlzdW5hdS5BVV9yZWFkLmdldGNvbXB0eXBllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldGNvbXB0eXBllGoNjwAAdJSMGnN1bmF1LkFVX3JlYWQuZ2V0ZnJhbWVyYXRllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldGZyYW1lcmF0ZZRqDY8AAHSUjBVzdW5hdS5BVV9yZWFkLmdldG1hcmuUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0bWFya5RqDY8AAHSUjBhzdW5hdS5BVV9yZWFkLmdldG1hcmtlcnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0bWFya2Vyc5RqDY8AAHSUjBpzdW5hdS5BVV9yZWFkLmdldG5jaGFubmVsc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5nZXRuY2hhbm5lbHOUag2PAAB0lIwYc3VuYXUuQVVfcmVhZC5nZXRuZnJhbWVzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldG5mcmFtZXOUag2PAAB0lIwXc3VuYXUuQVVfcmVhZC5nZXRwYXJhbXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuZ2V0cGFyYW1zlGoNjwAAdJSMGnN1bmF1LkFVX3JlYWQuZ2V0c2FtcHdpZHRolChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV9yZWFkLmdldHNhbXB3aWR0aJRqDY8AAHSUjBhzdW5hdS5BVV9yZWFkLnJlYWRmcmFtZXOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQucmVhZGZyYW1lc5RqDY8AAHSUjBRzdW5hdS5BVV9yZWFkLnJld2luZJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC5yZXdpbmSUag2PAAB0lIwUc3VuYXUuQVVfcmVhZC5zZXRwb3OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3JlYWQuc2V0cG9zlGoNjwAAdJSMEnN1bmF1LkFVX3JlYWQudGVsbJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfcmVhZC50ZWxslGoNjwAAdJSMFHN1bmF1LkFVX3dyaXRlLmNsb3NllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS5jbG9zZZRqDY8AAHSUjBpzdW5hdS5BVV93cml0ZS5zZXRjb21wdHlwZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUuc2V0Y29tcHR5cGWUag2PAAB0lIwbc3VuYXUuQVVfd3JpdGUuc2V0ZnJhbWVyYXRllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS5zZXRmcmFtZXJhdGWUag2PAAB0lIwbc3VuYXUuQVVfd3JpdGUuc2V0bmNoYW5uZWxzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS5zZXRuY2hhbm5lbHOUag2PAAB0lIwZc3VuYXUuQVVfd3JpdGUuc2V0bmZyYW1lc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUuc2V0bmZyYW1lc5RqDY8AAHSUjBhzdW5hdS5BVV93cml0ZS5zZXRwYXJhbXOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLnNldHBhcmFtc5RqDY8AAHSUjBtzdW5hdS5BVV93cml0ZS5zZXRzYW1wd2lkdGiUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVX3dyaXRlLnNldHNhbXB3aWR0aJRqDY8AAHSUjBNzdW5hdS5BVV93cml0ZS50ZWxslChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS50ZWxslGoNjwAAdJSMGnN1bmF1LkFVX3dyaXRlLndyaXRlZnJhbWVzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVV93cml0ZS53cml0ZWZyYW1lc5RqDY8AAHSUjB1zdW5hdS5BVV93cml0ZS53cml0ZWZyYW1lc3Jhd5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVfd3JpdGUud3JpdGVmcmFtZXNyYXeUag2PAAB0lIwac3ltdGFibGUuQ2xhc3MuZ2V0X21ldGhvZHOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkNsYXNzLmdldF9tZXRob2RzlGoNjwAAdJSMG3N5bXRhYmxlLkZ1bmN0aW9uLmdldF9mcmVlc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuRnVuY3Rpb24uZ2V0X2ZyZWVzlGoNjwAAdJSMHXN5bXRhYmxlLkZ1bmN0aW9uLmdldF9nbG9iYWxzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5GdW5jdGlvbi5nZXRfZ2xvYmFsc5RqDY8AAHSUjBxzeW10YWJsZS5GdW5jdGlvbi5nZXRfbG9jYWxzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5GdW5jdGlvbi5nZXRfbG9jYWxzlGoNjwAAdJSMH3N5bXRhYmxlLkZ1bmN0aW9uLmdldF9ub25sb2NhbHOUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkZ1bmN0aW9uLmdldF9ub25sb2NhbHOUag2PAAB0lIwgc3ltdGFibGUuRnVuY3Rpb24uZ2V0X3BhcmFtZXRlcnOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLkZ1bmN0aW9uLmdldF9wYXJhbWV0ZXJzlGoNjwAAdJSMGHN5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmdldF9uYW1llGoNjwAAdJSMHXN5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZXNwYWNllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuZ2V0X25hbWVzcGFjZZRqDY8AAHSUjB5zeW10YWJsZS5TeW1ib2wuZ2V0X25hbWVzcGFjZXOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5nZXRfbmFtZXNwYWNlc5RqDY8AAHSUjBtzeW10YWJsZS5TeW1ib2wuaXNfYXNzaWduZWSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5pc19hc3NpZ25lZJRqDY8AAHSUjCJzeW10YWJsZS5TeW1ib2wuaXNfZGVjbGFyZWRfZ2xvYmFslChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfZGVjbGFyZWRfZ2xvYmFslGoNjwAAdJSMF3N5bXRhYmxlLlN5bWJvbC5pc19mcmVllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfZnJlZZRqDY8AAHSUjBlzeW10YWJsZS5TeW1ib2wuaXNfZ2xvYmFslChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfZ2xvYmFslGoNjwAAdJSMG3N5bXRhYmxlLlN5bWJvbC5pc19pbXBvcnRlZJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX2ltcG9ydGVklGoNjwAAdJSMGHN5bXRhYmxlLlN5bWJvbC5pc19sb2NhbJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX2xvY2FslGoNjwAAdJSMHHN5bXRhYmxlLlN5bWJvbC5pc19uYW1lc3BhY2WUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbC5pc19uYW1lc3BhY2WUag2PAAB0lIwbc3ltdGFibGUuU3ltYm9sLmlzX25vbmxvY2FslChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2wuaXNfbm9ubG9jYWyUag2PAAB0lIwcc3ltdGFibGUuU3ltYm9sLmlzX3BhcmFtZXRlcpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX3BhcmFtZXRlcpRqDY8AAHSUjB1zeW10YWJsZS5TeW1ib2wuaXNfcmVmZXJlbmNlZJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sLmlzX3JlZmVyZW5jZWSUag2PAAB0lIwhc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2NoaWxkcmVulChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfY2hpbGRyZW6Uag2PAAB0lIwbc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2lklChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfaWSUag2PAAB0lIwkc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2lkZW50aWZpZXJzlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfaWRlbnRpZmllcnOUag2PAAB0lIwfc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2xpbmVub5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X2xpbmVub5RqDY8AAHSUjB1zeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfbmFtZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X25hbWWUag2PAAB0lIwgc3ltdGFibGUuU3ltYm9sVGFibGUuZ2V0X3N5bWJvbHOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF9zeW1ib2xzlGoNjwAAdJSMHXN5bXRhYmxlLlN5bWJvbFRhYmxlLmdldF90eXBllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5nZXRfdHlwZZRqDY8AAHSUjCFzeW10YWJsZS5TeW1ib2xUYWJsZS5oYXNfY2hpbGRyZW6UKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxlLmhhc19jaGlsZHJlbpRqDY8AAHSUjB1zeW10YWJsZS5TeW1ib2xUYWJsZS5oYXNfZXhlY5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuU3ltYm9sVGFibGUuaGFzX2V4ZWOUag2PAAB0lIwec3ltdGFibGUuU3ltYm9sVGFibGUuaXNfbmVzdGVklChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5pc19uZXN0ZWSUag2PAAB0lIwhc3ltdGFibGUuU3ltYm9sVGFibGUuaXNfb3B0aW1pemVklChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5pc19vcHRpbWl6ZWSUag2PAAB0lIwbc3ltdGFibGUuU3ltYm9sVGFibGUubG9va3VwlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2xUYWJsZS5sb29rdXCUag2PAAB0lIwTdGFyZmlsZS5UYXJGaWxlLmFkZJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUuYWRklGoNjwAAdJSMF3RhcmZpbGUuVGFyRmlsZS5hZGRmaWxllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5hZGRmaWxllGoNjwAAdJSMFXRhcmZpbGUuVGFyRmlsZS5jbG9zZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUuY2xvc2WUag2PAAB0lIwXdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3SUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3SUag2PAAB0lIwadGFyZmlsZS5UYXJGaWxlLmV4dHJhY3RhbGyUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3RhbGyUag2PAAB0lIwbdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3RmaWxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5leHRyYWN0ZmlsZZRqDY8AAHSUjBl0YXJmaWxlLlRhckZpbGUuZ2V0bWVtYmVylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5nZXRtZW1iZXKUag2PAAB0lIwadGFyZmlsZS5UYXJGaWxlLmdldG1lbWJlcnOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJGaWxlLmdldG1lbWJlcnOUag2PAAB0lIwYdGFyZmlsZS5UYXJGaWxlLmdldG5hbWVzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFyRmlsZS5nZXRuYW1lc5RqDY8AAHSUjBp0YXJmaWxlLlRhckZpbGUuZ2V0dGFyaW5mb5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUuZ2V0dGFyaW5mb5RqDY8AAHSUjBR0YXJmaWxlLlRhckZpbGUubGlzdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUubGlzdJRqDY8AAHSUjBR0YXJmaWxlLlRhckZpbGUubmV4dJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUubmV4dJRqDY8AAHSUjBR0YXJmaWxlLlRhckZpbGUub3BlbpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGUub3BlbpRqDY8AAHSUjBd0YXJmaWxlLlRhckluZm8uZnJvbWJ1ZpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uZnJvbWJ1ZpRqDY8AAHSUjBt0YXJmaWxlLlRhckluZm8uZnJvbXRhcmZpbGWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmZyb210YXJmaWxllGoNjwAAdJSMFXRhcmZpbGUuVGFySW5mby5pc2Jsa5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNibGuUag2PAAB0lIwVdGFyZmlsZS5UYXJJbmZvLmlzY2hylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5pc2NocpRqDY8AAHSUjBV0YXJmaWxlLlRhckluZm8uaXNkZXaUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmlzZGV2lGoNjwAAdJSMFXRhcmZpbGUuVGFySW5mby5pc2RpcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNkaXKUag2PAAB0lIwWdGFyZmlsZS5UYXJJbmZvLmlzZmlmb5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNmaWZvlGoNjwAAdJSMFnRhcmZpbGUuVGFySW5mby5pc2ZpbGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmlzZmlsZZRqDY8AAHSUjBV0YXJmaWxlLlRhckluZm8uaXNsbmuUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLmlzbG5rlGoNjwAAdJSMFXRhcmZpbGUuVGFySW5mby5pc3JlZ5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckluZm8uaXNyZWeUag2PAAB0lIwVdGFyZmlsZS5UYXJJbmZvLmlzc3ltlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mby5pc3N5bZRqDY8AAHSUjBV0YXJmaWxlLlRhckluZm8udG9idWaUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5UYXJJbmZvLnRvYnVmlGoNjwAAdJSMFnRlbG5ldGxpYi5UZWxuZXQuY2xvc2WUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LmNsb3NllGoNjwAAdJSMF3RlbG5ldGxpYi5UZWxuZXQuZXhwZWN0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5leHBlY3SUag2PAAB0lIwXdGVsbmV0bGliLlRlbG5ldC5maWxlbm+UKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LmZpbGVub5RqDY8AAHSUjBt0ZWxuZXRsaWIuVGVsbmV0LmdldF9zb2NrZXSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LmdldF9zb2NrZXSUag2PAAB0lIwZdGVsbmV0bGliLlRlbG5ldC5pbnRlcmFjdJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuaW50ZXJhY3SUag2PAAB0lIwUdGVsbmV0bGliLlRlbG5ldC5tc2eUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0Lm1zZ5RqDY8AAHSUjBx0ZWxuZXRsaWIuVGVsbmV0Lm10X2ludGVyYWN0lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5tdF9pbnRlcmFjdJRqDY8AAHSUjBV0ZWxuZXRsaWIuVGVsbmV0Lm9wZW6UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0Lm9wZW6Uag2PAAB0lIwZdGVsbmV0bGliLlRlbG5ldC5yZWFkX2FsbJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF9hbGyUag2PAAB0lIwbdGVsbmV0bGliLlRlbG5ldC5yZWFkX2VhZ2VylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5yZWFkX2VhZ2VylGoNjwAAdJSMGnRlbG5ldGxpYi5UZWxuZXQucmVhZF9sYXp5lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC5yZWFkX2xhenmUag2PAAB0lIwddGVsbmV0bGliLlRlbG5ldC5yZWFkX3NiX2RhdGGUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfc2JfZGF0YZRqDY8AAHSUjBp0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfc29tZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF9zb21llGoNjwAAdJSMG3RlbG5ldGxpYi5UZWxuZXQucmVhZF91bnRpbJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF91bnRpbJRqDY8AAHSUjCB0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfdmVyeV9lYWdlcpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQucmVhZF92ZXJ5X2VhZ2VylGoNjwAAdJSMH3RlbG5ldGxpYi5UZWxuZXQucmVhZF92ZXJ5X2xhenmUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnJlYWRfdmVyeV9sYXp5lGoNjwAAdJSMH3RlbG5ldGxpYi5UZWxuZXQuc2V0X2RlYnVnbGV2ZWyUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXRsaWIuVGVsbmV0LnNldF9kZWJ1Z2xldmVslGoNjwAAdJSMMHRlbG5ldGxpYi5UZWxuZXQuc2V0X29wdGlvbl9uZWdvdGlhdGlvbl9jYWxsYmFja5QoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldGxpYi5UZWxuZXQuc2V0X29wdGlvbl9uZWdvdGlhdGlvbl9jYWxsYmFja5RqDY8AAHSUjBZ0ZWxuZXRsaWIuVGVsbmV0LndyaXRllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldC53cml0ZZRqDY8AAHSUjCB0ZXN0LnN1cHBvcnQuQmFzaWNUZXN0UnVubmVyLnJ1bpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuQmFzaWNUZXN0UnVubmVyLnJ1bpRqDY8AAHSUjCR0ZXN0LnN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZC5zZXSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQuc2V0lGoNjwAAdJSMJnRlc3Quc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkLnVuc2V0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkLnVuc2V0lGoNjwAAdJSMIHRlc3Quc3VwcG9ydC5NYXRjaGVyLm1hdGNoX3ZhbHVllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5NYXRjaGVyLm1hdGNoX3ZhbHVllGoNjwAAdJSMHHRlc3Quc3VwcG9ydC5NYXRjaGVyLm1hdGNoZXOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0Lk1hdGNoZXIubWF0Y2hlc5RqDY8AAHSUjBl0ZXh0d3JhcC5UZXh0V3JhcHBlci5maWxslChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5UZXh0V3JhcHBlci5maWxslGoNjwAAdJSMGXRleHR3cmFwLlRleHRXcmFwcGVyLndyYXCUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLlRleHRXcmFwcGVyLndyYXCUag2PAAB0lIwXdGhyZWFkaW5nLkJhcnJpZXIuYWJvcnSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQmFycmllci5hYm9ydJRqDY8AAHSUjBd0aHJlYWRpbmcuQmFycmllci5yZXNldJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5CYXJyaWVyLnJlc2V0lGoNjwAAdJSMFnRocmVhZGluZy5CYXJyaWVyLndhaXSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQmFycmllci53YWl0lGoNjwAAdJSMG3RocmVhZGluZy5Db25kaXRpb24uYWNxdWlyZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb24uYWNxdWlyZZRqDY8AAHSUjBp0aHJlYWRpbmcuQ29uZGl0aW9uLm5vdGlmeZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb24ubm90aWZ5lGoNjwAAdJSMHnRocmVhZGluZy5Db25kaXRpb24ubm90aWZ5X2FsbJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb24ubm90aWZ5X2FsbJRqDY8AAHSUjBt0aHJlYWRpbmcuQ29uZGl0aW9uLnJlbGVhc2WUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQ29uZGl0aW9uLnJlbGVhc2WUag2PAAB0lIwYdGhyZWFkaW5nLkNvbmRpdGlvbi53YWl0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkNvbmRpdGlvbi53YWl0lGoNjwAAdJSMHHRocmVhZGluZy5Db25kaXRpb24ud2FpdF9mb3KUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuQ29uZGl0aW9uLndhaXRfZm9ylGoNjwAAdJSMFXRocmVhZGluZy5FdmVudC5jbGVhcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5FdmVudC5jbGVhcpRqDY8AAHSUjBZ0aHJlYWRpbmcuRXZlbnQuaXNfc2V0lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkV2ZW50LmlzX3NldJRqDY8AAHSUjBN0aHJlYWRpbmcuRXZlbnQuc2V0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkV2ZW50LnNldJRqDY8AAHSUjBR0aHJlYWRpbmcuRXZlbnQud2FpdJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5FdmVudC53YWl0lGoNjwAAdJSMFnRocmVhZGluZy5Mb2NrLmFjcXVpcmWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuTG9jay5hY3F1aXJllGoNjwAAdJSMFXRocmVhZGluZy5Mb2NrLmxvY2tlZJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Mb2NrLmxvY2tlZJRqDY8AAHSUjBZ0aHJlYWRpbmcuTG9jay5yZWxlYXNllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkxvY2sucmVsZWFzZZRqDY8AAHSUjBd0aHJlYWRpbmcuUkxvY2suYWNxdWlyZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5STG9jay5hY3F1aXJllGoNjwAAdJSMF3RocmVhZGluZy5STG9jay5yZWxlYXNllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlJMb2NrLnJlbGVhc2WUag2PAAB0lIwbdGhyZWFkaW5nLlNlbWFwaG9yZS5hY3F1aXJllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlNlbWFwaG9yZS5hY3F1aXJllGoNjwAAdJSMG3RocmVhZGluZy5TZW1hcGhvcmUucmVsZWFzZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5TZW1hcGhvcmUucmVsZWFzZZRqDY8AAHSUjBh0aHJlYWRpbmcuVGhyZWFkLmdldE5hbWWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLmdldE5hbWWUag2PAAB0lIwZdGhyZWFkaW5nLlRocmVhZC5pc0RhZW1vbpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuaXNEYWVtb26Uag2PAAB0lIwZdGhyZWFkaW5nLlRocmVhZC5pc19hbGl2ZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuaXNfYWxpdmWUag2PAAB0lIwVdGhyZWFkaW5nLlRocmVhZC5qb2lulChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5qb2lulGoNjwAAdJSMFHRocmVhZGluZy5UaHJlYWQucnVulChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlRocmVhZC5ydW6Uag2PAAB0lIwadGhyZWFkaW5nLlRocmVhZC5zZXREYWVtb26UKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLnNldERhZW1vbpRqDY8AAHSUjBh0aHJlYWRpbmcuVGhyZWFkLnNldE5hbWWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFkLnNldE5hbWWUag2PAAB0lIwWdGhyZWFkaW5nLlRocmVhZC5zdGFydJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaHJlYWQuc3RhcnSUag2PAAB0lIwWdGhyZWFkaW5nLlRpbWVyLmNhbmNlbJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaW1lci5jYW5jZWyUag2PAAB0lIwWdGltZWl0LlRpbWVyLmF1dG9yYW5nZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5UaW1lci5hdXRvcmFuZ2WUag2PAAB0lIwWdGltZWl0LlRpbWVyLnByaW50X2V4Y5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5UaW1lci5wcmludF9leGOUag2PAAB0lIwTdGltZWl0LlRpbWVyLnJlcGVhdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5UaW1lci5yZXBlYXSUag2PAAB0lIwTdGltZWl0LlRpbWVyLnRpbWVpdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5UaW1lci50aW1laXSUag2PAAB0lIwjdGtpbnRlci5XaWRnZXQudGsuY3JlYXRlZmlsZWhhbmRsZXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLmh0bWwjdGtpbnRlci5XaWRnZXQudGsuY3JlYXRlZmlsZWhhbmRsZXKUag2PAAB0lIwjdGtpbnRlci5XaWRnZXQudGsuZGVsZXRlZmlsZWhhbmRsZXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLmh0bWwjdGtpbnRlci5XaWRnZXQudGsuZGVsZXRlZmlsZWhhbmRsZXKUag2PAAB0lIwndGtpbnRlci50aXgudGl4Q29tbWFuZC50aXhfYWRkYml0bWFwZGlylChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC50aXhDb21tYW5kLnRpeF9hZGRiaXRtYXBkaXKUag2PAAB0lIwfdGtpbnRlci50aXgudGl4Q29tbWFuZC50aXhfY2dldJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXgudGl4Q29tbWFuZC50aXhfY2dldJRqDY8AAHSUjCR0a2ludGVyLnRpeC50aXhDb21tYW5kLnRpeF9jb25maWd1cmWUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LnRpeENvbW1hbmQudGl4X2NvbmZpZ3VyZZRqDY8AAHSUjCV0a2ludGVyLnRpeC50aXhDb21tYW5kLnRpeF9maWxlZGlhbG9nlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC50aXhDb21tYW5kLnRpeF9maWxlZGlhbG9nlGoNjwAAdJSMJHRraW50ZXIudGl4LnRpeENvbW1hbmQudGl4X2dldGJpdG1hcJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXgudGl4Q29tbWFuZC50aXhfZ2V0Yml0bWFwlGoNjwAAdJSMI3RraW50ZXIudGl4LnRpeENvbW1hbmQudGl4X2dldGltYWdllChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC50aXhDb21tYW5kLnRpeF9nZXRpbWFnZZRqDY8AAHSUjCV0a2ludGVyLnRpeC50aXhDb21tYW5kLnRpeF9vcHRpb25fZ2V0lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC50aXhDb21tYW5kLnRpeF9vcHRpb25fZ2V0lGoNjwAAdJSMJ3RraW50ZXIudGl4LnRpeENvbW1hbmQudGl4X3Jlc2V0b3B0aW9uc5QoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXgudGl4Q29tbWFuZC50aXhfcmVzZXRvcHRpb25zlGoNjwAAdJSMHHRraW50ZXIudHRrLkNvbWJvYm94LmN1cnJlbnSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLkNvbWJvYm94LmN1cnJlbnSUag2PAAB0lIwYdGtpbnRlci50dGsuQ29tYm9ib3guZ2V0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Db21ib2JveC5nZXSUag2PAAB0lIwYdGtpbnRlci50dGsuQ29tYm9ib3guc2V0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Db21ib2JveC5zZXSUag2PAAB0lIwYdGtpbnRlci50dGsuTm90ZWJvb2suYWRklChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Ob3RlYm9vay5hZGSUag2PAAB0lIwldGtpbnRlci50dGsuTm90ZWJvb2suZW5hYmxlX3RyYXZlcnNhbJQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuTm90ZWJvb2suZW5hYmxlX3RyYXZlcnNhbJRqDY8AAHSUjBt0a2ludGVyLnR0ay5Ob3RlYm9vay5mb3JnZXSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLk5vdGVib29rLmZvcmdldJRqDY8AAHSUjBl0a2ludGVyLnR0ay5Ob3RlYm9vay5oaWRllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Ob3RlYm9vay5oaWRllGoNjwAAdJSMHXRraW50ZXIudHRrLk5vdGVib29rLmlkZW50aWZ5lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Ob3RlYm9vay5pZGVudGlmeZRqDY8AAHSUjBp0a2ludGVyLnR0ay5Ob3RlYm9vay5pbmRleJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuTm90ZWJvb2suaW5kZXiUag2PAAB0lIwbdGtpbnRlci50dGsuTm90ZWJvb2suaW5zZXJ0lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Ob3RlYm9vay5pbnNlcnSUag2PAAB0lIwbdGtpbnRlci50dGsuTm90ZWJvb2suc2VsZWN0lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Ob3RlYm9vay5zZWxlY3SUag2PAAB0lIwYdGtpbnRlci50dGsuTm90ZWJvb2sudGFilChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Ob3RlYm9vay50YWKUag2PAAB0lIwZdGtpbnRlci50dGsuTm90ZWJvb2sudGFic5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuTm90ZWJvb2sudGFic5RqDY8AAHSUjB10a2ludGVyLnR0ay5Qcm9ncmVzc2Jhci5zdGFydJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuUHJvZ3Jlc3NiYXIuc3RhcnSUag2PAAB0lIwcdGtpbnRlci50dGsuUHJvZ3Jlc3NiYXIuc3RlcJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuUHJvZ3Jlc3NiYXIuc3RlcJRqDY8AAHSUjBx0a2ludGVyLnR0ay5Qcm9ncmVzc2Jhci5zdG9wlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Qcm9ncmVzc2Jhci5zdG9wlGoNjwAAdJSMF3RraW50ZXIudHRrLlNwaW5ib3guZ2V0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TcGluYm94LmdldJRqDY8AAHSUjBd0a2ludGVyLnR0ay5TcGluYm94LnNldJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuU3BpbmJveC5zZXSUag2PAAB0lIwbdGtpbnRlci50dGsuU3R5bGUuY29uZmlndXJllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TdHlsZS5jb25maWd1cmWUag2PAAB0lIwgdGtpbnRlci50dGsuU3R5bGUuZWxlbWVudF9jcmVhdGWUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlN0eWxlLmVsZW1lbnRfY3JlYXRllGoNjwAAdJSMH3RraW50ZXIudHRrLlN0eWxlLmVsZW1lbnRfbmFtZXOUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlN0eWxlLmVsZW1lbnRfbmFtZXOUag2PAAB0lIwhdGtpbnRlci50dGsuU3R5bGUuZWxlbWVudF9vcHRpb25zlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TdHlsZS5lbGVtZW50X29wdGlvbnOUag2PAAB0lIwYdGtpbnRlci50dGsuU3R5bGUubGF5b3V0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TdHlsZS5sYXlvdXSUag2PAAB0lIwYdGtpbnRlci50dGsuU3R5bGUubG9va3VwlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TdHlsZS5sb29rdXCUag2PAAB0lIwVdGtpbnRlci50dGsuU3R5bGUubWFwlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TdHlsZS5tYXCUag2PAAB0lIwedGtpbnRlci50dGsuU3R5bGUudGhlbWVfY3JlYXRllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TdHlsZS50aGVtZV9jcmVhdGWUag2PAAB0lIwddGtpbnRlci50dGsuU3R5bGUudGhlbWVfbmFtZXOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlN0eWxlLnRoZW1lX25hbWVzlGoNjwAAdJSMIHRraW50ZXIudHRrLlN0eWxlLnRoZW1lX3NldHRpbmdzlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TdHlsZS50aGVtZV9zZXR0aW5nc5RqDY8AAHSUjBt0a2ludGVyLnR0ay5TdHlsZS50aGVtZV91c2WUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlN0eWxlLnRoZW1lX3VzZZRqDY8AAHSUjBl0a2ludGVyLnR0ay5UcmVldmlldy5iYm94lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5iYm94lGoNjwAAdJSMG3RraW50ZXIudHRrLlRyZWV2aWV3LmNvbHVtbpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuY29sdW1ulGoNjwAAdJSMG3RraW50ZXIudHRrLlRyZWV2aWV3LmRlbGV0ZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuZGVsZXRllGoNjwAAdJSMG3RraW50ZXIudHRrLlRyZWV2aWV3LmRldGFjaJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuZGV0YWNolGoNjwAAdJSMG3RraW50ZXIudHRrLlRyZWV2aWV3LmV4aXN0c5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuZXhpc3RzlGoNjwAAdJSMGnRraW50ZXIudHRrLlRyZWV2aWV3LmZvY3VzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5mb2N1c5RqDY8AAHSUjCF0a2ludGVyLnR0ay5UcmVldmlldy5nZXRfY2hpbGRyZW6UKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3LmdldF9jaGlsZHJlbpRqDY8AAHSUjBx0a2ludGVyLnR0ay5UcmVldmlldy5oZWFkaW5nlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5oZWFkaW5nlGoNjwAAdJSMHXRraW50ZXIudHRrLlRyZWV2aWV3LmlkZW50aWZ5lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5pZGVudGlmeZRqDY8AAHSUjCR0a2ludGVyLnR0ay5UcmVldmlldy5pZGVudGlmeV9jb2x1bW6UKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3LmlkZW50aWZ5X2NvbHVtbpRqDY8AAHSUjCV0a2ludGVyLnR0ay5UcmVldmlldy5pZGVudGlmeV9lbGVtZW50lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5pZGVudGlmeV9lbGVtZW50lGoNjwAAdJSMJHRraW50ZXIudHRrLlRyZWV2aWV3LmlkZW50aWZ5X3JlZ2lvbpQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuaWRlbnRpZnlfcmVnaW9ulGoNjwAAdJSMIXRraW50ZXIudHRrLlRyZWV2aWV3LmlkZW50aWZ5X3Jvd5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuaWRlbnRpZnlfcm93lGoNjwAAdJSMGnRraW50ZXIudHRrLlRyZWV2aWV3LmluZGV4lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5pbmRleJRqDY8AAHSUjBt0a2ludGVyLnR0ay5UcmVldmlldy5pbnNlcnSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3Lmluc2VydJRqDY8AAHSUjBl0a2ludGVyLnR0ay5UcmVldmlldy5pdGVtlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5pdGVtlGoNjwAAdJSMGXRraW50ZXIudHRrLlRyZWV2aWV3Lm1vdmWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3Lm1vdmWUag2PAAB0lIwZdGtpbnRlci50dGsuVHJlZXZpZXcubmV4dJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcubmV4dJRqDY8AAHSUjBt0a2ludGVyLnR0ay5UcmVldmlldy5wYXJlbnSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3LnBhcmVudJRqDY8AAHSUjBl0a2ludGVyLnR0ay5UcmVldmlldy5wcmV2lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5wcmV2lGoNjwAAdJSMHXRraW50ZXIudHRrLlRyZWV2aWV3LnJlYXR0YWNolChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5yZWF0dGFjaJRqDY8AAHSUjBh0a2ludGVyLnR0ay5UcmVldmlldy5zZWWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3LnNlZZRqDY8AAHSUjB50a2ludGVyLnR0ay5UcmVldmlldy5zZWxlY3Rpb26UKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3LnNlbGVjdGlvbpRqDY8AAHSUjCJ0a2ludGVyLnR0ay5UcmVldmlldy5zZWxlY3Rpb25fYWRklChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5zZWxlY3Rpb25fYWRklGoNjwAAdJSMJXRraW50ZXIudHRrLlRyZWV2aWV3LnNlbGVjdGlvbl9yZW1vdmWUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3LnNlbGVjdGlvbl9yZW1vdmWUag2PAAB0lIwidGtpbnRlci50dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3NldJQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuc2VsZWN0aW9uX3NldJRqDY8AAHSUjCV0a2ludGVyLnR0ay5UcmVldmlldy5zZWxlY3Rpb25fdG9nZ2xllChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy5zZWxlY3Rpb25fdG9nZ2xllGoNjwAAdJSMGHRraW50ZXIudHRrLlRyZWV2aWV3LnNldJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuc2V0lGoNjwAAdJSMIXRraW50ZXIudHRrLlRyZWV2aWV3LnNldF9jaGlsZHJlbpQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXcuc2V0X2NoaWxkcmVulGoNjwAAdJSMHXRraW50ZXIudHRrLlRyZWV2aWV3LnRhZ19iaW5klChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy50YWdfYmluZJRqDY8AAHSUjCJ0a2ludGVyLnR0ay5UcmVldmlldy50YWdfY29uZmlndXJllChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy50YWdfY29uZmlndXJllGoNjwAAdJSMHHRraW50ZXIudHRrLlRyZWV2aWV3LnRhZ19oYXOUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3LnRhZ19oYXOUag2PAAB0lIwadGtpbnRlci50dGsuVHJlZXZpZXcueHZpZXeUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLlRyZWV2aWV3Lnh2aWV3lGoNjwAAdJSMGnRraW50ZXIudHRrLlRyZWV2aWV3Lnl2aWV3lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5UcmVldmlldy55dmlld5RqDY8AAHSUjBt0a2ludGVyLnR0ay5XaWRnZXQuaWRlbnRpZnmUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLldpZGdldC5pZGVudGlmeZRqDY8AAHSUjBp0a2ludGVyLnR0ay5XaWRnZXQuaW5zdGF0ZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuV2lkZ2V0Lmluc3RhdGWUag2PAAB0lIwYdGtpbnRlci50dGsuV2lkZ2V0LnN0YXRllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5XaWRnZXQuc3RhdGWUag2PAAB0lIwcdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLnVwZGF0ZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLnVwZGF0ZZRqDY8AAHSUjCN0cmFjZS5Db3ZlcmFnZVJlc3VsdHMud3JpdGVfcmVzdWx0c5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLndyaXRlX3Jlc3VsdHOUag2PAAB0lIwTdHJhY2UuVHJhY2UucmVzdWx0c5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjdHJhY2UuVHJhY2UucmVzdWx0c5RqDY8AAHSUjA90cmFjZS5UcmFjZS5ydW6UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNlLnJ1bpRqDY8AAHSUjBJ0cmFjZS5UcmFjZS5ydW5jdHiUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNlLnJ1bmN0eJRqDY8AAHSUjBN0cmFjZS5UcmFjZS5ydW5mdW5jlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCN0cmFjZS5UcmFjZS5ydW5mdW5jlGoNjwAAdJSMHnRyYWNlYmFjay5TdGFja1N1bW1hcnkuZXh0cmFjdJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5TdGFja1N1bW1hcnkuZXh0cmFjdJRqDY8AAHSUjB10cmFjZWJhY2suU3RhY2tTdW1tYXJ5LmZvcm1hdJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5TdGFja1N1bW1hcnkuZm9ybWF0lGoNjwAAdJSMIHRyYWNlYmFjay5TdGFja1N1bW1hcnkuZnJvbV9saXN0lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5mcm9tX2xpc3SUag2PAAB0lIwjdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbi5mb3JtYXSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLmZvcm1hdJRqDY8AAHSUjDJ0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLmZvcm1hdF9leGNlcHRpb25fb25seZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb24uZm9ybWF0X2V4Y2VwdGlvbl9vbmx5lGoNjwAAdJSMK3RyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb24uZnJvbV9leGNlcHRpb26UKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uLmZyb21fZXhjZXB0aW9ulGoNjwAAdJSMH3RyYWNlbWFsbG9jLlNuYXBzaG90LmNvbXBhcmVfdG+UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLlNuYXBzaG90LmNvbXBhcmVfdG+Uag2PAAB0lIwZdHJhY2VtYWxsb2MuU25hcHNob3QuZHVtcJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuU25hcHNob3QuZHVtcJRqDY8AAHSUjCJ0cmFjZW1hbGxvYy5TbmFwc2hvdC5maWx0ZXJfdHJhY2VzlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5TbmFwc2hvdC5maWx0ZXJfdHJhY2VzlGoNjwAAdJSMGXRyYWNlbWFsbG9jLlNuYXBzaG90LmxvYWSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLlNuYXBzaG90LmxvYWSUag2PAAB0lIwfdHJhY2VtYWxsb2MuU25hcHNob3Quc3RhdGlzdGljc5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuU25hcHNob3Quc3RhdGlzdGljc5RqDY8AAHSUjBx0cmFjZW1hbGxvYy5UcmFjZWJhY2suZm9ybWF0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5UcmFjZWJhY2suZm9ybWF0lJUCAAEAAAAAAGoNjwAAdJSMGXR1cnRsZS5TaGFwZS5hZGRjb21wb25lbnSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuU2hhcGUuYWRkY29tcG9uZW50lGoNjwAAdJSMFnR5cGVzLkNvZGVUeXBlLnJlcGxhY2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkNvZGVUeXBlLnJlcGxhY2WUag2PAAB0lIwbdHlwZXMuTWFwcGluZ1Byb3h5VHlwZS5jb3B5lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5NYXBwaW5nUHJveHlUeXBlLmNvcHmUag2PAAB0lIwadHlwZXMuTWFwcGluZ1Byb3h5VHlwZS5nZXSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLk1hcHBpbmdQcm94eVR5cGUuZ2V0lGoNjwAAdJSMHHR5cGVzLk1hcHBpbmdQcm94eVR5cGUuaXRlbXOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLk1hcHBpbmdQcm94eVR5cGUuaXRlbXOUag2PAAB0lIwbdHlwZXMuTWFwcGluZ1Byb3h5VHlwZS5rZXlzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5NYXBwaW5nUHJveHlUeXBlLmtleXOUag2PAAB0lIwddHlwZXMuTWFwcGluZ1Byb3h5VHlwZS52YWx1ZXOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLk1hcHBpbmdQcm94eVR5cGUudmFsdWVzlGoNjwAAdJSMMHVuaXR0ZXN0Lklzb2xhdGVkQXN5bmNpb1Rlc3RDYXNlLmFkZEFzeW5jQ2xlYW51cJQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuSXNvbGF0ZWRBc3luY2lvVGVzdENhc2UuYWRkQXN5bmNDbGVhbnVwlGoNjwAAdJSMK3VuaXR0ZXN0Lklzb2xhdGVkQXN5bmNpb1Rlc3RDYXNlLmFzeW5jU2V0VXCUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0Lklzb2xhdGVkQXN5bmNpb1Rlc3RDYXNlLmFzeW5jU2V0VXCUag2PAAB0lIwudW5pdHRlc3QuSXNvbGF0ZWRBc3luY2lvVGVzdENhc2UuYXN5bmNUZWFyRG93bpQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuSXNvbGF0ZWRBc3luY2lvVGVzdENhc2UuYXN5bmNUZWFyRG93bpRqDY8AAHSUjCR1bml0dGVzdC5Jc29sYXRlZEFzeW5jaW9UZXN0Q2FzZS5ydW6UKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0Lklzb2xhdGVkQXN5bmNpb1Rlc3RDYXNlLnJ1bpRqDY8AAHSUjCF1bml0dGVzdC5UZXN0Q2FzZS5hZGRDbGFzc0NsZWFudXCUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFkZENsYXNzQ2xlYW51cJRqDY8AAHSUjBx1bml0dGVzdC5UZXN0Q2FzZS5hZGRDbGVhbnVwlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hZGRDbGVhbnVwlGoNjwAAdJSMJXVuaXR0ZXN0LlRlc3RDYXNlLmFkZFR5cGVFcXVhbGl0eUZ1bmOUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFkZFR5cGVFcXVhbGl0eUZ1bmOUag2PAAB0lIwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWyUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFslGoNjwAAdJSMInVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydENvdW50RXF1YWyUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydENvdW50RXF1YWyUag2PAAB0lIwhdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RGljdEVxdWFslChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnREaWN0RXF1YWyUag2PAAB0lIwddW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWyUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFslGoNjwAAdJSMHXVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEZhbHNllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRGYWxzZZRqDY8AAHSUjB91bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRHcmVhdGVylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRHcmVhdGVylGoNjwAAdJSMJHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEdyZWF0ZXJFcXVhbJQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0R3JlYXRlckVxdWFslGoNjwAAdJSMGnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElulChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJbpRqDY8AAHSUjBp1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXOUag2PAAB0lIwidW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNJbnN0YW5jZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNJbnN0YW5jZZRqDY8AAHSUjB51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vbmWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzTm9uZZRqDY8AAHSUjB11bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vdJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb3SUag2PAAB0lIwhdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb3ROb25llChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vdE5vbmWUag2PAAB0lIwcdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc5RqDY8AAHSUjCF1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMZXNzRXF1YWyUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydExlc3NFcXVhbJRqDY8AAHSUjCF1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMaXN0RXF1YWyUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydExpc3RFcXVhbJRqDY8AAHSUjBx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMb2dzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMb2dzlGoNjwAAdJSMJnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE11bHRpTGluZUVxdWFslChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRNdWx0aUxpbmVFcXVhbJRqDY8AAHSUjCZ1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90QWxtb3N0RXF1YWyUag2PAAB0lIwgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90RXF1YWyUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFslGoNjwAAdJSMHXVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdElulChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RJbpRqDY8AAHSUjCV1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RJc0luc3RhbmNllChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RJc0luc3RhbmNllGoNjwAAdJSMIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdFJlZ2V4lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RSZWdleJRqDY8AAHSUjB51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlc5RqDY8AAHSUjCN1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNSZWdleJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzUmVnZXiUag2PAAB0lIwddW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmVnZXiUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJlZ2V4lGoNjwAAdJSMJXVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNlcXVlbmNlRXF1YWyUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNlcXVlbmNlRXF1YWyUag2PAAB0lIwgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2V0RXF1YWyUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNldEVxdWFslGoNjwAAdJSMHHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFRydWWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFRydWWUag2PAAB0lIwidW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHVwbGVFcXVhbJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHVwbGVFcXVhbJRqDY8AAHSUjB11bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRXYXJuc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0V2FybnOUag2PAAB0lIwidW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0V2FybnNSZWdleJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0V2FybnNSZWdleJRqDY8AAHSUjCB1bml0dGVzdC5UZXN0Q2FzZS5jb3VudFRlc3RDYXNlc5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UuY291bnRUZXN0Q2FzZXOUag2PAAB0lIwXdW5pdHRlc3QuVGVzdENhc2UuZGVidWeUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmRlYnVnlGoNjwAAdJSMI3VuaXR0ZXN0LlRlc3RDYXNlLmRlZmF1bHRUZXN0UmVzdWx0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5kZWZhdWx0VGVzdFJlc3VsdJRqDY8AAHSUjCF1bml0dGVzdC5UZXN0Q2FzZS5kb0NsYXNzQ2xlYW51cHOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmRvQ2xhc3NDbGVhbnVwc5RqDY8AAHSUjBx1bml0dGVzdC5UZXN0Q2FzZS5kb0NsZWFudXBzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5kb0NsZWFudXBzlGoNjwAAdJSMFnVuaXR0ZXN0LlRlc3RDYXNlLmZhaWyUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmZhaWyUag2PAAB0lIwUdW5pdHRlc3QuVGVzdENhc2UuaWSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLmlklGoNjwAAdJSMFXVuaXR0ZXN0LlRlc3RDYXNlLnJ1bpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdENhc2UucnVulGoNjwAAdJSMF3VuaXR0ZXN0LlRlc3RDYXNlLnNldFVwlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcJRqDY8AAHSUjBx1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcENsYXNzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0Q2FzZS5zZXRVcENsYXNzlGoNjwAAdJSMInVuaXR0ZXN0LlRlc3RDYXNlLnNob3J0RGVzY3JpcHRpb26UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnNob3J0RGVzY3JpcHRpb26Uag2PAAB0lIwadW5pdHRlc3QuVGVzdENhc2Uuc2tpcFRlc3SUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnNraXBUZXN0lGoNjwAAdJSMGXVuaXR0ZXN0LlRlc3RDYXNlLnN1YlRlc3SUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnN1YlRlc3SUag2PAAB0lIwadW5pdHRlc3QuVGVzdENhc2UudGVhckRvd26UKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3dulGoNjwAAdJSMH3VuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3OUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3OUag2PAAB0lIwcdW5pdHRlc3QuVGVzdExvYWRlci5kaXNjb3ZlcpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdExvYWRlci5kaXNjb3ZlcpRqDY8AAHSUjCR1bml0dGVzdC5UZXN0TG9hZGVyLmdldFRlc3RDYXNlTmFtZXOUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lc5RqDY8AAHSUjCd1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGWUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZZRqDY8AAHSUjCV1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1llChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1llGoNjwAAdJSMJnVuaXR0ZXN0LlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lc5RqDY8AAHSUjCl1bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2WUag2PAAB0lIwcdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRFcnJvcpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRFcnJvcpRqDY8AAHSUjCZ1bml0dGVzdC5UZXN0UmVzdWx0LmFkZEV4cGVjdGVkRmFpbHVyZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRFeHBlY3RlZEZhaWx1cmWUag2PAAB0lIwedW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRGYWlsdXJllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmFkZEZhaWx1cmWUag2PAAB0lIwbdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRTa2lwlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmFkZFNraXCUag2PAAB0lIwedW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRTdWJUZXN0lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmFkZFN1YlRlc3SUag2PAAB0lIwedW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRTdWNjZXNzlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0UmVzdWx0LmFkZFN1Y2Nlc3OUag2PAAB0lIwodW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2Vzc5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2Vzc5RqDY8AAHSUjB11bml0dGVzdC5UZXN0UmVzdWx0LnN0YXJ0VGVzdJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5zdGFydFRlc3SUag2PAAB0lIwgdW5pdHRlc3QuVGVzdFJlc3VsdC5zdGFydFRlc3RSdW6UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuc3RhcnRUZXN0UnVulGoNjwAAdJSMGHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5zdG9wlGoNjwAAdJSMHHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcFRlc3SUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcFRlc3SUag2PAAB0lIwfdW5pdHRlc3QuVGVzdFJlc3VsdC5zdG9wVGVzdFJ1bpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdC5zdG9wVGVzdFJ1bpRqDY8AAHSUjCF1bml0dGVzdC5UZXN0UmVzdWx0Lndhc1N1Y2Nlc3NmdWyUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RSZXN1bHQud2FzU3VjY2Vzc2Z1bJRqDY8AAHSUjBt1bml0dGVzdC5UZXN0U3VpdGUuX19pdGVyX1+UKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RTdWl0ZS5fX2l0ZXJfX5RqDY8AAHSUjBp1bml0dGVzdC5UZXN0U3VpdGUuYWRkVGVzdJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFN1aXRlLmFkZFRlc3SUag2PAAB0lIwbdW5pdHRlc3QuVGVzdFN1aXRlLmFkZFRlc3RzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0U3VpdGUuYWRkVGVzdHOUag2PAAB0lIwhdW5pdHRlc3QuVGVzdFN1aXRlLmNvdW50VGVzdENhc2VzlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0U3VpdGUuY291bnRUZXN0Q2FzZXOUag2PAAB0lIwYdW5pdHRlc3QuVGVzdFN1aXRlLmRlYnVnlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXN0U3VpdGUuZGVidWeUag2PAAB0lIwWdW5pdHRlc3QuVGVzdFN1aXRlLnJ1bpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFN1aXRlLnJ1bpRqDY8AAHSUjCN1bml0dGVzdC5UZXh0VGVzdFJ1bm5lci5fbWFrZVJlc3VsdJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIuX21ha2VSZXN1bHSUag2PAAB0lIwbdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIucnVulChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5UZXh0VGVzdFJ1bm5lci5ydW6Uag2PAAB0lIwodW5pdHRlc3QubW9jay5Bc3luY01vY2suYXNzZXJ0X2FueV9hd2FpdJQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLkFzeW5jTW9jay5hc3NlcnRfYW55X2F3YWl0lGoNjwAAdJSMJnVuaXR0ZXN0Lm1vY2suQXN5bmNNb2NrLmFzc2VydF9hd2FpdGVklChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suQXN5bmNNb2NrLmFzc2VydF9hd2FpdGVklGoNjwAAdJSMK3VuaXR0ZXN0Lm1vY2suQXN5bmNNb2NrLmFzc2VydF9hd2FpdGVkX29uY2WUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Bc3luY01vY2suYXNzZXJ0X2F3YWl0ZWRfb25jZZRqDY8AAHSUjDB1bml0dGVzdC5tb2NrLkFzeW5jTW9jay5hc3NlcnRfYXdhaXRlZF9vbmNlX3dpdGiUKGoKjwAAaguPAACMZWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Bc3luY01vY2suYXNzZXJ0X2F3YWl0ZWRfb25jZV93aXRolGoNjwAAdJSMK3VuaXR0ZXN0Lm1vY2suQXN5bmNNb2NrLmFzc2VydF9hd2FpdGVkX3dpdGiUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Bc3luY01vY2suYXNzZXJ0X2F3YWl0ZWRfd2l0aJRqDY8AAHSUjCl1bml0dGVzdC5tb2NrLkFzeW5jTW9jay5hc3NlcnRfaGFzX2F3YWl0c5QoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLkFzeW5jTW9jay5hc3NlcnRfaGFzX2F3YWl0c5RqDY8AAHSUjCp1bml0dGVzdC5tb2NrLkFzeW5jTW9jay5hc3NlcnRfbm90X2F3YWl0ZWSUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Bc3luY01vY2suYXNzZXJ0X25vdF9hd2FpdGVklGoNjwAAdJSMInVuaXR0ZXN0Lm1vY2suQXN5bmNNb2NrLnJlc2V0X21vY2uUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Bc3luY01vY2sucmVzZXRfbW9ja5RqDY8AAHSUjBp1bml0dGVzdC5tb2NrLk1vY2suX19kaXJfX5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2suX19kaXJfX5RqDY8AAHSUjCJ1bml0dGVzdC5tb2NrLk1vY2suX2dldF9jaGlsZF9tb2NrlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suTW9jay5fZ2V0X2NoaWxkX21vY2uUag2PAAB0lIwidW5pdHRlc3QubW9jay5Nb2NrLmFzc2VydF9hbnlfY2FsbJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2suYXNzZXJ0X2FueV9jYWxslGoNjwAAdJSMIHVuaXR0ZXN0Lm1vY2suTW9jay5hc3NlcnRfY2FsbGVklChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suTW9jay5hc3NlcnRfY2FsbGVklGoNjwAAdJSMJXVuaXR0ZXN0Lm1vY2suTW9jay5hc3NlcnRfY2FsbGVkX29uY2WUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Nb2NrLmFzc2VydF9jYWxsZWRfb25jZZRqDY8AAHSUjCp1bml0dGVzdC5tb2NrLk1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGiUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Nb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRolGoNjwAAdJSMJXVuaXR0ZXN0Lm1vY2suTW9jay5hc3NlcnRfY2FsbGVkX3dpdGiUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Nb2NrLmFzc2VydF9jYWxsZWRfd2l0aJRqDY8AAHSUjCN1bml0dGVzdC5tb2NrLk1vY2suYXNzZXJ0X2hhc19jYWxsc5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2suYXNzZXJ0X2hhc19jYWxsc5RqDY8AAHSUjCR1bml0dGVzdC5tb2NrLk1vY2suYXNzZXJ0X25vdF9jYWxsZWSUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5Nb2NrLmFzc2VydF9ub3RfY2FsbGVklGoNjwAAdJSMHnVuaXR0ZXN0Lm1vY2suTW9jay5hdHRhY2hfbW9ja5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2suYXR0YWNoX21vY2uUag2PAAB0lIwhdW5pdHRlc3QubW9jay5Nb2NrLmNvbmZpZ3VyZV9tb2NrlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suTW9jay5jb25maWd1cmVfbW9ja5RqDY8AAHSUjCB1bml0dGVzdC5tb2NrLk1vY2subW9ja19hZGRfc3BlY5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2subW9ja19hZGRfc3BlY5RqDY8AAHSUjB11bml0dGVzdC5tb2NrLk1vY2sucmVzZXRfbW9ja5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2sucmVzZXRfbW9ja5RqDY8AAHSUjBx1bml0dGVzdC5tb2NrLmNhbGwuY2FsbF9saXN0lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suY2FsbC5jYWxsX2xpc3SUag2PAAB0lIwsdXJsbGliLnBhcnNlLnVybGxpYi5wYXJzZS5TcGxpdFJlc3VsdC5nZXR1cmyUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UudXJsbGliLnBhcnNlLlNwbGl0UmVzdWx0LmdldHVybJRqDY8AAHSUjD11cmxsaWIucmVxdWVzdC5BYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl9hdXRoX3JlcWVklChqCo8AAGoLjwAAjHNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5BYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl9hdXRoX3JlcWVklGoNjwAAdJSMPnVybGxpYi5yZXF1ZXN0LkFic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXIuaHR0cF9lcnJvcl9hdXRoX3JlcWVklChqCo8AAGoLjwAAjHRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5BYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyLmh0dHBfZXJyb3JfYXV0aF9yZXFlZJRqDY8AAHSUjCV1cmxsaWIucmVxdWVzdC5CYXNlSGFuZGxlci5hZGRfcGFyZW50lChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5CYXNlSGFuZGxlci5hZGRfcGFyZW50lGoNjwAAdJSMIHVybGxpYi5yZXF1ZXN0LkJhc2VIYW5kbGVyLmNsb3NllChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5CYXNlSGFuZGxlci5jbG9zZZRqDY8AAHSUjCd1cmxsaWIucmVxdWVzdC5CYXNlSGFuZGxlci5kZWZhdWx0X29wZW6UKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkJhc2VIYW5kbGVyLmRlZmF1bHRfb3BlbpRqDY8AAHSUjC11cmxsaWIucmVxdWVzdC5CYXNlSGFuZGxlci5odHRwX2Vycm9yX2RlZmF1bHSUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkJhc2VIYW5kbGVyLmh0dHBfZXJyb3JfZGVmYXVsdJRqDY8AAHSUjCd1cmxsaWIucmVxdWVzdC5CYXNlSGFuZGxlci51bmtub3duX29wZW6UKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkJhc2VIYW5kbGVyLnVua25vd25fb3BlbpRqDY8AAHSUjCp1cmxsaWIucmVxdWVzdC5DYWNoZUZUUEhhbmRsZXIuc2V0TWF4Q29ubnOUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkNhY2hlRlRQSGFuZGxlci5zZXRNYXhDb25uc5RqDY8AAHSUjCl1cmxsaWIucmVxdWVzdC5DYWNoZUZUUEhhbmRsZXIuc2V0VGltZW91dJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuQ2FjaGVGVFBIYW5kbGVyLnNldFRpbWVvdXSUag2PAAB0lIwkdXJsbGliLnJlcXVlc3QuRGF0YUhhbmRsZXIuZGF0YV9vcGVulChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5EYXRhSGFuZGxlci5kYXRhX29wZW6Uag2PAAB0lIwidXJsbGliLnJlcXVlc3QuRlRQSGFuZGxlci5mdHBfb3BlbpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuRlRQSGFuZGxlci5mdHBfb3BlbpRqDY8AAHSUjDB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lci5wcm9tcHRfdXNlcl9wYXNzd2SUKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkZhbmN5VVJMb3BlbmVyLnByb21wdF91c2VyX3Bhc3N3ZJRqDY8AAHSUjCR1cmxsaWIucmVxdWVzdC5GaWxlSGFuZGxlci5maWxlX29wZW6UKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkZpbGVIYW5kbGVyLmZpbGVfb3BlbpRqDY8AAHSUjDJ1cmxsaWIucmVxdWVzdC5IVFRQQmFzaWNBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwMZQoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUEJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDGUag2PAAB0lIwzdXJsbGliLnJlcXVlc3QuSFRUUERpZ2VzdEF1dGhIYW5kbGVyLmh0dHBfZXJyb3JfNDAxlChqCo8AAGoLjwAAjGlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQRGlnZXN0QXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDGUag2PAAB0lIwvdXJsbGliLnJlcXVlc3QuSFRUUEVycm9yUHJvY2Vzc29yLmh0dHBfcmVzcG9uc2WUKGoKjwAAaguPAACMZWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkhUVFBFcnJvclByb2Nlc3Nvci5odHRwX3Jlc3BvbnNllGoNjwAAdJSMMHVybGxpYi5yZXF1ZXN0LkhUVFBFcnJvclByb2Nlc3Nvci5odHRwc19yZXNwb25zZZQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUEVycm9yUHJvY2Vzc29yLmh0dHBzX3Jlc3BvbnNllGoNjwAAdJSMJHVybGxpYi5yZXF1ZXN0LkhUVFBIYW5kbGVyLmh0dHBfb3BlbpQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUEhhbmRsZXIuaHR0cF9vcGVulGoNjwAAdJSMK3VybGxpYi5yZXF1ZXN0LkhUVFBQYXNzd29yZE1nci5hZGRfcGFzc3dvcmSUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkhUVFBQYXNzd29yZE1nci5hZGRfcGFzc3dvcmSUag2PAAB0lIwxdXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyLmZpbmRfdXNlcl9wYXNzd29yZJQoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyLmZpbmRfdXNlcl9wYXNzd29yZJRqDY8AAHSUjDh1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoLmFkZF9wYXNzd29yZJQoagqPAABqC48AAIxuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyV2l0aFByaW9yQXV0aC5hZGRfcGFzc3dvcmSUag2PAAB0lIw8dXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyV2l0aFByaW9yQXV0aC5pc19hdXRoZW50aWNhdGVklChqCo8AAGoLjwAAjHJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoLmlzX2F1dGhlbnRpY2F0ZWSUag2PAAB0lIxAdXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyV2l0aFByaW9yQXV0aC51cGRhdGVfYXV0aGVudGljYXRlZJQoagqPAABqC48AAIx2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyV2l0aFByaW9yQXV0aC51cGRhdGVfYXV0aGVudGljYXRlZJRqDY8AAHSUjDF1cmxsaWIucmVxdWVzdC5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzAxlChqCo8AAGoLjwAAjGdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzAxlGoNjwAAdJSMMXVybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXIuaHR0cF9lcnJvcl8zMDKUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXIuaHR0cF9lcnJvcl8zMDKUag2PAAB0lIwxdXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlci5odHRwX2Vycm9yXzMwM5QoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlci5odHRwX2Vycm9yXzMwM5RqDY8AAHSUjDF1cmxsaWIucmVxdWVzdC5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzA3lChqCo8AAGoLjwAAjGdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQUmVkaXJlY3RIYW5kbGVyLmh0dHBfZXJyb3JfMzA3lGoNjwAAdJSMM3VybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXIucmVkaXJlY3RfcmVxdWVzdJQoagqPAABqC48AAIxpaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlci5yZWRpcmVjdF9yZXF1ZXN0lGoNjwAAdJSMJnVybGxpYi5yZXF1ZXN0LkhUVFBTSGFuZGxlci5odHRwc19vcGVulChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQU0hhbmRsZXIuaHR0cHNfb3BlbpRqDY8AAHSUjCl1cmxsaWIucmVxdWVzdC5PcGVuZXJEaXJlY3Rvci5hZGRfaGFuZGxlcpQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuT3BlbmVyRGlyZWN0b3IuYWRkX2hhbmRsZXKUag2PAAB0lIwjdXJsbGliLnJlcXVlc3QuT3BlbmVyRGlyZWN0b3IuZXJyb3KUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0Lk9wZW5lckRpcmVjdG9yLmVycm9ylGoNjwAAdJSMInVybGxpYi5yZXF1ZXN0Lk9wZW5lckRpcmVjdG9yLm9wZW6UKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0Lk9wZW5lckRpcmVjdG9yLm9wZW6Uag2PAAB0lIwzdXJsbGliLnJlcXVlc3QuUHJveHlCYXNpY0F1dGhIYW5kbGVyLmh0dHBfZXJyb3JfNDA3lChqCo8AAGoLjwAAjGlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5Qcm94eUJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDeUag2PAAB0lIw0dXJsbGliLnJlcXVlc3QuUHJveHlEaWdlc3RBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwN5QoagqPAABqC48AAIxqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuUHJveHlEaWdlc3RBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwN5RqDY8AAHSUjCF1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmFkZF9oZWFkZXKUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlJlcXVlc3QuYWRkX2hlYWRlcpRqDY8AAHSUjC51cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVylChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVylGoNjwAAdJSMI3VybGxpYi5yZXF1ZXN0LlJlcXVlc3QuZ2V0X2Z1bGxfdXJslChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmdldF9mdWxsX3VybJRqDY8AAHSUjCF1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmdldF9oZWFkZXKUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlJlcXVlc3QuZ2V0X2hlYWRlcpRqDY8AAHSUjCF1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmdldF9tZXRob2SUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlJlcXVlc3QuZ2V0X21ldGhvZJRqDY8AAHSUjCF1cmxsaWIucmVxdWVzdC5SZXF1ZXN0Lmhhc19oZWFkZXKUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlJlcXVlc3QuaGFzX2hlYWRlcpRqDY8AAHSUjCN1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LmhlYWRlcl9pdGVtc5QoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuUmVxdWVzdC5oZWFkZXJfaXRlbXOUag2PAAB0lIwkdXJsbGliLnJlcXVlc3QuUmVxdWVzdC5yZW1vdmVfaGVhZGVylChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5SZXF1ZXN0LnJlbW92ZV9oZWFkZXKUag2PAAB0lIwgdXJsbGliLnJlcXVlc3QuUmVxdWVzdC5zZXRfcHJveHmUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlJlcXVlc3Quc2V0X3Byb3h5lGoNjwAAdJSMHXVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci5vcGVulChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIub3BlbpRqDY8AAHSUjCV1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIub3Blbl91bmtub3dulChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIub3Blbl91bmtub3dulGoNjwAAdJSMIXVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci5yZXRyaWV2ZZQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuVVJMb3BlbmVyLnJldHJpZXZllGoNjwAAdJSMKnVybGxpYi5yZXF1ZXN0LlVua25vd25IYW5kbGVyLnVua25vd25fb3BlbpQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuVW5rbm93bkhhbmRsZXIudW5rbm93bl9vcGVulGoNjwAAdJSMLHVybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIuY2FuX2ZldGNolChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJvYm90cGFyc2VyLmh0bWwjdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5jYW5fZmV0Y2iUag2PAAB0lIwudXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5jcmF3bF9kZWxheZQoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlci5odG1sI3VybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIuY3Jhd2xfZGVsYXmUag2PAAB0lIwrdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5tb2RpZmllZJQoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlci5odG1sI3VybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIubW9kaWZpZWSUag2PAAB0lIwodXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5tdGltZZQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlci5odG1sI3VybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIubXRpbWWUag2PAAB0lIwodXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5wYXJzZZQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlci5odG1sI3VybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIucGFyc2WUag2PAAB0lIwndXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5yZWFklChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJvYm90cGFyc2VyLmh0bWwjdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5yZWFklGoNjwAAdJSML3VybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIucmVxdWVzdF9yYXRllChqCo8AAGoLjwAAjGlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJvYm90cGFyc2VyLmh0bWwjdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5yZXF1ZXN0X3JhdGWUag2PAAB0lIwqdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5zZXRfdXJslChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJvYm90cGFyc2VyLmh0bWwjdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5zZXRfdXJslGoNjwAAdJSMLHVybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIuc2l0ZV9tYXBzlChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJvYm90cGFyc2VyLmh0bWwjdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlci5zaXRlX21hcHOUag2PAAB0lIwWdmVudi5FbnZCdWlsZGVyLmNyZWF0ZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ZlbnYuaHRtbCN2ZW52LkVudkJ1aWxkZXIuY3JlYXRllGoNjwAAdJSMJHZlbnYuRW52QnVpbGRlci5jcmVhdGVfY29uZmlndXJhdGlvbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ZlbnYuaHRtbCN2ZW52LkVudkJ1aWxkZXIuY3JlYXRlX2NvbmZpZ3VyYXRpb26Uag2PAAB0lIwidmVudi5FbnZCdWlsZGVyLmVuc3VyZV9kaXJlY3Rvcmllc5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ZlbnYuaHRtbCN2ZW52LkVudkJ1aWxkZXIuZW5zdXJlX2RpcmVjdG9yaWVzlGoNjwAAdJSMH3ZlbnYuRW52QnVpbGRlci5pbnN0YWxsX3NjcmlwdHOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS92ZW52Lmh0bWwjdmVudi5FbnZCdWlsZGVyLmluc3RhbGxfc2NyaXB0c5RqDY8AAHSUjBp2ZW52LkVudkJ1aWxkZXIucG9zdF9zZXR1cJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ZlbnYuaHRtbCN2ZW52LkVudkJ1aWxkZXIucG9zdF9zZXR1cJRqDY8AAHSUjBx2ZW52LkVudkJ1aWxkZXIuc2V0dXBfcHl0aG9ulChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdmVudi5odG1sI3ZlbnYuRW52QnVpbGRlci5zZXR1cF9weXRob26Uag2PAAB0lIwddmVudi5FbnZCdWlsZGVyLnNldHVwX3NjcmlwdHOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS92ZW52Lmh0bWwjdmVudi5FbnZCdWlsZGVyLnNldHVwX3NjcmlwdHOUag2PAAB0lIwUd2F2ZS5XYXZlX3JlYWQuY2xvc2WUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuY2xvc2WUag2PAAB0lIwad2F2ZS5XYXZlX3JlYWQuZ2V0Y29tcG5hbWWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0Y29tcG5hbWWUag2PAAB0lIwad2F2ZS5XYXZlX3JlYWQuZ2V0Y29tcHR5cGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuZ2V0Y29tcHR5cGWUag2PAAB0lIwbd2F2ZS5XYXZlX3JlYWQuZ2V0ZnJhbWVyYXRllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLmdldGZyYW1lcmF0ZZRqDY8AAHSUjBZ3YXZlLldhdmVfcmVhZC5nZXRtYXJrlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLmdldG1hcmuUag2PAAB0lIwZd2F2ZS5XYXZlX3JlYWQuZ2V0bWFya2Vyc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRtYXJrZXJzlGoNjwAAdJSMG3dhdmUuV2F2ZV9yZWFkLmdldG5jaGFubmVsc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRuY2hhbm5lbHOUag2PAAB0lIwZd2F2ZS5XYXZlX3JlYWQuZ2V0bmZyYW1lc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRuZnJhbWVzlGoNjwAAdJSMGHdhdmUuV2F2ZV9yZWFkLmdldHBhcmFtc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfcmVhZC5nZXRwYXJhbXOUag2PAAB0lIwbd2F2ZS5XYXZlX3JlYWQuZ2V0c2FtcHdpZHRolChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLmdldHNhbXB3aWR0aJRqDY8AAHSUjBl3YXZlLldhdmVfcmVhZC5yZWFkZnJhbWVzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLnJlYWRmcmFtZXOUag2PAAB0lIwVd2F2ZS5XYXZlX3JlYWQucmV3aW5klChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV9yZWFkLnJld2luZJRqDY8AAHSUjBV3YXZlLldhdmVfcmVhZC5zZXRwb3OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQuc2V0cG9zlGoNjwAAdJSME3dhdmUuV2F2ZV9yZWFkLnRlbGyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3JlYWQudGVsbJRqDY8AAHSUjBV3YXZlLldhdmVfd3JpdGUuY2xvc2WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLmNsb3NllGoNjwAAdJSMG3dhdmUuV2F2ZV93cml0ZS5zZXRjb21wdHlwZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUuc2V0Y29tcHR5cGWUag2PAAB0lIwcd2F2ZS5XYXZlX3dyaXRlLnNldGZyYW1lcmF0ZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUuc2V0ZnJhbWVyYXRllGoNjwAAdJSMHHdhdmUuV2F2ZV93cml0ZS5zZXRuY2hhbm5lbHOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5XYXZlX3dyaXRlLnNldG5jaGFubmVsc5RqDY8AAHSUjBp3YXZlLldhdmVfd3JpdGUuc2V0bmZyYW1lc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUuc2V0bmZyYW1lc5RqDY8AAHSUjBl3YXZlLldhdmVfd3JpdGUuc2V0cGFyYW1zlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS5zZXRwYXJhbXOUag2PAAB0lIwcd2F2ZS5XYXZlX3dyaXRlLnNldHNhbXB3aWR0aJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUuc2V0c2FtcHdpZHRolGoNjwAAdJSMFHdhdmUuV2F2ZV93cml0ZS50ZWxslChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS50ZWxslGoNjwAAdJSMG3dhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLldhdmVfd3JpdGUud3JpdGVmcmFtZXOUag2PAAB0lIwed2F2ZS5XYXZlX3dyaXRlLndyaXRlZnJhbWVzcmF3lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI3dhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc3Jhd5RqDY8AAHSUjCF3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5LmtleXJlZnOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeS5rZXlyZWZzlGoNjwAAdJSMJXdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeS52YWx1ZXJlZnOUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5LnZhbHVlcmVmc5RqDY8AAHSUjBl3ZWFrcmVmLmZpbmFsaXplLl9fY2FsbF9flChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuZmluYWxpemUuX19jYWxsX1+Uag2PAAB0lIwXd2Vha3JlZi5maW5hbGl6ZS5kZXRhY2iUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5maW5hbGl6ZS5kZXRhY2iUag2PAAB0lIwVd2Vha3JlZi5maW5hbGl6ZS5wZWVrlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuZmluYWxpemUucGVla5RqDY8AAHSUjBp3ZWJicm93c2VyLmNvbnRyb2xsZXIub3BlbpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbCN3ZWJicm93c2VyLmNvbnRyb2xsZXIub3BlbpRqDY8AAHSUjB53ZWJicm93c2VyLmNvbnRyb2xsZXIub3Blbl9uZXeUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5jb250cm9sbGVyLm9wZW5fbmV3lGoNjwAAdJSMIndlYmJyb3dzZXIuY29udHJvbGxlci5vcGVuX25ld190YWKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5jb250cm9sbGVyLm9wZW5fbmV3X3RhYpRqDY8AAHSUjBN3aW5yZWcuUHlIS0VZLkNsb3NllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlB5SEtFWS5DbG9zZZRqDY8AAHSUjBR3aW5yZWcuUHlIS0VZLkRldGFjaJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5QeUhLRVkuRGV0YWNolGoNjwAAdJSMF3dpbnJlZy5QeUhLRVkuX19lbnRlcl9flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlB5SEtFWS5fX2VudGVyX1+Uag2PAAB0lIwWd2lucmVnLlB5SEtFWS5fX2V4aXRfX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5QeUhLRVkuX19leGl0X1+Uag2PAAB0lIwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5fZmx1c2iUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5fZmx1c2iUag2PAAB0lIwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5fd3JpdGWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5fd3JpdGWUag2PAAB0lIwpd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5hZGRfY2dpX3ZhcnOUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5hZGRfY2dpX3ZhcnOUag2PAAB0lIwpd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9vdXRwdXSUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5lcnJvcl9vdXRwdXSUag2PAAB0lIwnd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5nZXRfc2NoZW1llChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZ2V0X3NjaGVtZZRqDY8AAHSUjCd3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmdldF9zdGRlcnKUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5nZXRfc3RkZXJylGoNjwAAdJSMJndzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZ2V0X3N0ZGlulChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuZ2V0X3N0ZGlulGoNjwAAdJSMKndzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIubG9nX2V4Y2VwdGlvbpQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLmxvZ19leGNlcHRpb26Uag2PAAB0lIwgd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5ydW6UKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5ydW6Uag2PAAB0lIwld3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlci5zZW5kZmlsZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnNlbmRmaWxllGoNjwAAdJSMKndzZ2lyZWYuaGFuZGxlcnMuQmFzZUhhbmRsZXIuc2V0dXBfZW52aXJvbpQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVyLnNldHVwX2Vudmlyb26Uag2PAAB0lIwid3NnaXJlZi5oZWFkZXJzLkhlYWRlcnMuYWRkX2hlYWRlcpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhlYWRlcnMuSGVhZGVycy5hZGRfaGVhZGVylGoNjwAAdJSMH3dzZ2lyZWYuaGVhZGVycy5IZWFkZXJzLmdldF9hbGyUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oZWFkZXJzLkhlYWRlcnMuZ2V0X2FsbJRqDY8AAHSUjDR3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVJlcXVlc3RIYW5kbGVyLmdldF9lbnZpcm9ulChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXIuZ2V0X2Vudmlyb26Uag2PAAB0lIwzd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlci5nZXRfc3RkZXJylChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXIuZ2V0X3N0ZGVycpRqDY8AAHSUjC93c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVJlcXVlc3RIYW5kbGVyLmhhbmRsZZQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVJlcXVlc3RIYW5kbGVyLmhhbmRsZZRqDY8AAHSUjCh3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlci5nZXRfYXBwlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJU2VydmVyLmdldF9hcHCUag2PAAB0lIwod3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lTZXJ2ZXIuc2V0X2FwcJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlci5zZXRfYXBwlGoNjwAAdJSMGHhkcmxpYi5QYWNrZXIuZ2V0X2J1ZmZlcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIuZ2V0X2J1ZmZlcpRqDY8AAHSUjBh4ZHJsaWIuUGFja2VyLnBhY2tfYXJyYXmUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnBhY2tfYXJyYXmUag2PAAB0lIwYeGRybGliLlBhY2tlci5wYWNrX2J5dGVzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX2J5dGVzlGoNjwAAdJSMGXhkcmxpYi5QYWNrZXIucGFja19kb3VibGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnBhY2tfZG91YmxllGoNjwAAdJSMGXhkcmxpYi5QYWNrZXIucGFja19mYXJyYXmUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnBhY2tfZmFycmF5lGoNjwAAdJSMGHhkcmxpYi5QYWNrZXIucGFja19mbG9hdJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19mbG9hdJRqDY8AAHSUjBp4ZHJsaWIuUGFja2VyLnBhY2tfZm9wYXF1ZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5QYWNrZXIucGFja19mb3BhcXVllGoNjwAAdJSMGnhkcmxpYi5QYWNrZXIucGFja19mc3RyaW5nlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX2ZzdHJpbmeUag2PAAB0lIwXeGRybGliLlBhY2tlci5wYWNrX2xpc3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VyLnBhY2tfbGlzdJRqDY8AAHSUjBl4ZHJsaWIuUGFja2VyLnBhY2tfb3BhcXVllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX29wYXF1ZZRqDY8AAHSUjBl4ZHJsaWIuUGFja2VyLnBhY2tfc3RyaW5nlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5wYWNrX3N0cmluZ5RqDY8AAHSUjBN4ZHJsaWIuUGFja2VyLnJlc2V0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlBhY2tlci5yZXNldJRqDY8AAHSUjBR4ZHJsaWIuVW5wYWNrZXIuZG9uZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci5kb25llGoNjwAAdJSMGnhkcmxpYi5VbnBhY2tlci5nZXRfYnVmZmVylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLmdldF9idWZmZXKUag2PAAB0lIwceGRybGliLlVucGFja2VyLmdldF9wb3NpdGlvbpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci5nZXRfcG9zaXRpb26Uag2PAAB0lIwVeGRybGliLlVucGFja2VyLnJlc2V0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnJlc2V0lGoNjwAAdJSMHHhkcmxpYi5VbnBhY2tlci5zZXRfcG9zaXRpb26UKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIuc2V0X3Bvc2l0aW9ulGoNjwAAdJSMHHhkcmxpYi5VbnBhY2tlci51bnBhY2tfYXJyYXmUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2FycmF5lGoNjwAAdJSMHHhkcmxpYi5VbnBhY2tlci51bnBhY2tfYnl0ZXOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2J5dGVzlGoNjwAAdJSMHXhkcmxpYi5VbnBhY2tlci51bnBhY2tfZG91YmxllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19kb3VibGWUag2PAAB0lIwdeGRybGliLlVucGFja2VyLnVucGFja19mYXJyYXmUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2ZhcnJheZRqDY8AAHSUjBx4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2Zsb2F0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19mbG9hdJRqDY8AAHSUjB54ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2ZvcGFxdWWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuVW5wYWNrZXIudW5wYWNrX2ZvcGFxdWWUag2PAAB0lIweeGRybGliLlVucGFja2VyLnVucGFja19mc3RyaW5nlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19mc3RyaW5nlGoNjwAAdJSMG3hkcmxpYi5VbnBhY2tlci51bnBhY2tfbGlzdJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci51bnBhY2tfbGlzdJRqDY8AAHSUjB14ZHJsaWIuVW5wYWNrZXIudW5wYWNrX29wYXF1ZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlci51bnBhY2tfb3BhcXVllGoNjwAAdJSMHXhkcmxpYi5VbnBhY2tlci51bnBhY2tfc3RyaW5nlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRybGliLlVucGFja2VyLnVucGFja19zdHJpbmeUag2PAAB0lIwoeG1sLmRvbS5ET01JbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRPTUltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50lGoNjwAAdJSMLHhtbC5kb20uRE9NSW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnRUeXBllChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRE9NSW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnRUeXBllGoNjwAAdJSMJHhtbC5kb20uRE9NSW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRPTUltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmWUag2PAAB0lIwgeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGWUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGWUag2PAAB0lIwieG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGVOU5QoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZU5TlGoNjwAAdJSMHnhtbC5kb20uRG9jdW1lbnQuY3JlYXRlQ29tbWVudJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUNvbW1lbnSUag2PAAB0lIweeG1sLmRvbS5Eb2N1bWVudC5jcmVhdGVFbGVtZW50lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuY3JlYXRlRWxlbWVudJRqDY8AAHSUjCB4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUVsZW1lbnROU5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZUVsZW1lbnROU5RqDY8AAHSUjCx4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbpQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbpRqDY8AAHSUjB94bWwuZG9tLkRvY3VtZW50LmNyZWF0ZVRleHROb2RllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGWUag2PAAB0lIwleG1sLmRvbS5Eb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1llGoNjwAAdJSMJ3htbC5kb20uRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWVOU5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlOUag2PAAB0lIwceG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRllGoNjwAAdJSMHnhtbC5kb20uRWxlbWVudC5nZXRBdHRyaWJ1dGVOU5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRlTlOUag2PAAB0lIwgeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGWUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGWUag2PAAB0lIwieG1sLmRvbS5FbGVtZW50LmdldEF0dHJpYnV0ZU5vZGVOU5QoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZU5TlGoNjwAAdJSMJHhtbC5kb20uRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWWUag2PAAB0lIwmeG1sLmRvbS5FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlOUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlOUag2PAAB0lIwceG1sLmRvbS5FbGVtZW50Lmhhc0F0dHJpYnV0ZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuaGFzQXR0cmlidXRllGoNjwAAdJSMHnhtbC5kb20uRWxlbWVudC5oYXNBdHRyaWJ1dGVOU5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuaGFzQXR0cmlidXRlTlOUag2PAAB0lIwfeG1sLmRvbS5FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQucmVtb3ZlQXR0cmlidXRllGoNjwAAdJSMIXhtbC5kb20uRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGVOU5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTlOUag2PAAB0lIwjeG1sLmRvbS5FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5vZGWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5vZGWUag2PAAB0lIwceG1sLmRvbS5FbGVtZW50LnNldEF0dHJpYnV0ZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRllGoNjwAAdJSMHnhtbC5kb20uRWxlbWVudC5zZXRBdHRyaWJ1dGVOU5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlTlOUag2PAAB0lIwgeG1sLmRvbS5FbGVtZW50LnNldEF0dHJpYnV0ZU5vZGWUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5FbGVtZW50LnNldEF0dHJpYnV0ZU5vZGWUag2PAAB0lIwieG1sLmRvbS5FbGVtZW50LnNldEF0dHJpYnV0ZU5vZGVOU5QoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLkVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZU5TlGoNjwAAdJSMGXhtbC5kb20uTmFtZWROb2RlTWFwLml0ZW2UKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5OYW1lZE5vZGVNYXAuaXRlbZRqDY8AAHSUjBh4bWwuZG9tLk5vZGUuYXBwZW5kQ2hpbGSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmFwcGVuZENoaWxklGoNjwAAdJSMFnhtbC5kb20uTm9kZS5jbG9uZU5vZGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmNsb25lTm9kZZRqDY8AAHSUjBp4bWwuZG9tLk5vZGUuaGFzQXR0cmlidXRlc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUuaGFzQXR0cmlidXRlc5RqDY8AAHSUjBp4bWwuZG9tLk5vZGUuaGFzQ2hpbGROb2Rlc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUuaGFzQ2hpbGROb2Rlc5RqDY8AAHSUjBl4bWwuZG9tLk5vZGUuaW5zZXJ0QmVmb3JllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uTm9kZS5pbnNlcnRCZWZvcmWUag2PAAB0lIwXeG1sLmRvbS5Ob2RlLmlzU2FtZU5vZGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5Ob2RlLmlzU2FtZU5vZGWUag2PAAB0lIwWeG1sLmRvbS5Ob2RlLm5vcm1hbGl6ZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUubm9ybWFsaXpllGoNjwAAdJSMGHhtbC5kb20uTm9kZS5yZW1vdmVDaGlsZJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUucmVtb3ZlQ2hpbGSUag2PAAB0lIwZeG1sLmRvbS5Ob2RlLnJlcGxhY2VDaGlsZJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGUucmVwbGFjZUNoaWxklGoNjwAAdJSMFXhtbC5kb20uTm9kZUxpc3QuaXRlbZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLk5vZGVMaXN0Lml0ZW2Uag2PAAB0lIwgeG1sLmRvbS5taW5pZG9tLk5vZGUudG9wcmV0dHl4bWyUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20uTm9kZS50b3ByZXR0eXhtbJRqDY8AAHSUjBp4bWwuZG9tLm1pbmlkb20uTm9kZS50b3htbJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI3htbC5kb20ubWluaWRvbS5Ob2RlLnRveG1slGoNjwAAdJSMG3htbC5kb20ubWluaWRvbS5Ob2RlLnVubGlua5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI3htbC5kb20ubWluaWRvbS5Ob2RlLnVubGlua5RqDY8AAHSUjB14bWwuZG9tLm1pbmlkb20uTm9kZS53cml0ZXhtbJQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI3htbC5kb20ubWluaWRvbS5Ob2RlLndyaXRleG1slGoNjwAAdJSMKXhtbC5kb20ucHVsbGRvbS5ET01FdmVudFN0cmVhbS5leHBhbmROb2RllChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmV4cGFuZE5vZGWUag2PAAB0lIwneG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmdldEV2ZW50lChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLkRPTUV2ZW50U3RyZWFtLmdldEV2ZW50lGoNjwAAdJSMJHhtbC5kb20ucHVsbGRvbS5ET01FdmVudFN0cmVhbS5yZXNldJQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI3htbC5kb20ucHVsbGRvbS5ET01FdmVudFN0cmVhbS5yZXNldJRqDY8AAHSUjCR4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5hcHBlbmSUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5hcHBlbmSUag2PAAB0lIwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuY2xlYXKUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5jbGVhcpRqDY8AAHSUjCR4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5leHRlbmSUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5leHRlbmSUag2PAAB0lIwieG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmZpbmSUag2PAAB0lIwleG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZGFsbJQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmZpbmRhbGyUag2PAAB0lIwmeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZmluZHRleHSUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5maW5kdGV4dJRqDY8AAHSUjCF4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5nZXSUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5nZXSUag2PAAB0lIwpeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuZ2V0Y2hpbGRyZW6UKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5nZXRjaGlsZHJlbpRqDY8AAHSUjCl4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5nZXRpdGVyYXRvcpQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmdldGl0ZXJhdG9ylGoNjwAAdJSMJHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lmluc2VydJQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lmluc2VydJRqDY8AAHSUjCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVtc5QoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZW1zlGoNjwAAdJSMInhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXKUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVylGoNjwAAdJSMJnhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lml0ZXJmaW5klChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuaXRlcmZpbmSUag2PAAB0lIwmeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuaXRlcnRleHSUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVydGV4dJRqDY8AAHSUjCJ4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5rZXlzlChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQua2V5c5RqDY8AAHSUjCl4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5tYWtlZWxlbWVudJQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Lm1ha2VlbGVtZW50lGoNjwAAdJSMJHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnJlbW92ZZQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LnJlbW92ZZRqDY8AAHSUjCF4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5zZXSUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5zZXSUag2PAAB0lIwqeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLl9zZXRyb290lChqCo8AAGoLjwAAjGdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLl9zZXRyb290lGoNjwAAdJSMJnhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5maW5klChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmZpbmSUag2PAAB0lIwpeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmZpbmRhbGyUKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZmluZGFsbJRqDY8AAHSUjCp4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZmluZHRleHSUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuZmluZHRleHSUag2PAAB0lIwteG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmdldGl0ZXJhdG9ylChqCo8AAGoLjwAAjGpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmdldGl0ZXJhdG9ylGoNjwAAdJSMKXhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS5nZXRyb290lChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLmdldHJvb3SUag2PAAB0lIwmeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLml0ZXKUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuaXRlcpRqDY8AAHSUjCp4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuaXRlcmZpbmSUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWUuaXRlcmZpbmSUag2PAAB0lIwneG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLnBhcnNllChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLnBhcnNllGoNjwAAdJSMJ3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS53cml0ZZQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZS53cml0ZZRqDY8AAHSUjCd4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuY2xvc2WUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuY2xvc2WUag2PAAB0lIwpeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmNvbW1lbnSUKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuY29tbWVudJRqDY8AAHSUjCZ4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuZGF0YZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5kYXRhlGoNjwAAdJSMKXhtbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5kb2N0eXBllChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmRvY3R5cGWUag2PAAB0lIwleG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmVuZJQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5lbmSUag2PAAB0lIwoeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLmVuZF9uc5QoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5lbmRfbnOUag2PAAB0lIwkeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLnBplChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyLnBplGoNjwAAdJSMJ3htbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5zdGFydJQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5zdGFydJRqDY8AAHSUjCp4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuc3RhcnRfbnOUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuc3RhcnRfbnOUag2PAAB0lIwleG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlci5jbG9zZZQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXIuY2xvc2WUag2PAAB0lIwkeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlci5mZWVklChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFBhcnNlci5mZWVklGoNjwAAdJSMKXhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VyLmNsb3NllChqCo8AAGoLjwAAjGZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFB1bGxQYXJzZXIuY2xvc2WUag2PAAB0lIwoeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFB1bGxQYXJzZXIuZmVlZJQoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VyLmZlZWSUag2PAAB0lIwveG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFB1bGxQYXJzZXIucmVhZF9ldmVudHOUKGoKjwAAaguPAACMbGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUHVsbFBhcnNlci5yZWFkX2V2ZW50c5RqDY8AAHSUjC54bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQXR0bGlzdERlY2xIYW5kbGVylChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5BdHRsaXN0RGVjbEhhbmRsZXKUag2PAAB0lIwweG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVylChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlcpRqDY8AAHSUjCp4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuQ29tbWVudEhhbmRsZXKUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkNvbW1lbnRIYW5kbGVylGoNjwAAdJSMKnhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5EZWZhdWx0SGFuZGxlcpQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRGVmYXVsdEhhbmRsZXKUag2PAAB0lIwweG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkRlZmF1bHRIYW5kbGVyRXhwYW5klChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5EZWZhdWx0SGFuZGxlckV4cGFuZJRqDY8AAHSUjC54bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRWxlbWVudERlY2xIYW5kbGVylChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbGVtZW50RGVjbEhhbmRsZXKUag2PAAB0lIwyeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZENkYXRhU2VjdGlvbkhhbmRsZXKUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZENkYXRhU2VjdGlvbkhhbmRsZXKUag2PAAB0lIwxeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZERvY3R5cGVEZWNsSGFuZGxlcpQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRW5kRG9jdHlwZURlY2xIYW5kbGVylGoNjwAAdJSMLXhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbmRFbGVtZW50SGFuZGxlcpQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXKUag2PAAB0lIwzeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVuZE5hbWVzcGFjZURlY2xIYW5kbGVylChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlcpRqDY8AAHSUjC14bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRW50aXR5RGVjbEhhbmRsZXKUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkVudGl0eURlY2xIYW5kbGVylGoNjwAAdJSMNnhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZZQoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGWUag2PAAB0lIw0eG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkV4dGVybmFsRW50aXR5UmVmSGFuZGxlcpQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVylGoNjwAAdJSMI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5HZXRCYXNllChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5HZXRCYXNllGoNjwAAdJSMK3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5HZXRJbnB1dENvbnRleHSUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLkdldElucHV0Q29udGV4dJRqDY8AAHSUjDB4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuTm90U3RhbmRhbG9uZUhhbmRsZXKUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLk5vdFN0YW5kYWxvbmVIYW5kbGVylGoNjwAAdJSML3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Ob3RhdGlvbkRlY2xIYW5kbGVylChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Ob3RhdGlvbkRlY2xIYW5kbGVylGoNjwAAdJSMIXhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5QYXJzZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuUGFyc2WUag2PAAB0lIwleG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlBhcnNlRmlsZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuUGFyc2VGaWxllGoNjwAAdJSMOHhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVylChqCo8AAGoLjwAAjGdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVylGoNjwAAdJSMI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TZXRCYXNllChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TZXRCYXNllGoNjwAAdJSMMXhtbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TZXRQYXJhbUVudGl0eVBhcnNpbmeUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlNldFBhcmFtRW50aXR5UGFyc2luZ5RqDY8AAHSUjDR4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVylChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TdGFydENkYXRhU2VjdGlvbkhhbmRsZXKUag2PAAB0lIwzeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlN0YXJ0RG9jdHlwZURlY2xIYW5kbGVylChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LnhtbHBhcnNlci5TdGFydERvY3R5cGVEZWNsSGFuZGxlcpRqDY8AAHSUjC94bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlcpQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlcpRqDY8AAHSUjDV4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcpQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcpRqDY8AAHSUjDV4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcpQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcpRqDY8AAHSUjCl4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuVXNlRm9yZWlnbkRURJQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuVXNlRm9yZWlnbkRURJRqDY8AAHSUjCp4bWwucGFyc2Vycy5leHBhdC54bWxwYXJzZXIuWG1sRGVjbEhhbmRsZXKUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQueG1scGFyc2VyLlhtbERlY2xIYW5kbGVylGoNjwAAdJSMIXhtbC5zYXguU0FYRXhjZXB0aW9uLmdldEV4Y2VwdGlvbpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LlNBWEV4Y2VwdGlvbi5nZXRFeGNlcHRpb26Uag2PAAB0lIwfeG1sLnNheC5TQVhFeGNlcHRpb24uZ2V0TWVzc2FnZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LlNBWEV4Y2VwdGlvbi5nZXRNZXNzYWdllGoNjwAAdJSMKXhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5jaGFyYWN0ZXJzlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmNoYXJhY3RlcnOUag2PAAB0lIwqeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZERvY3VtZW50lChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZERvY3VtZW50lGoNjwAAdJSMKXhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5lbmRFbGVtZW50lChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZEVsZW1lbnSUag2PAAB0lHUojCt4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuZW5kRWxlbWVudE5TlChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmVuZEVsZW1lbnROU5RqDY8AAHSUjC94bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuZW5kUHJlZml4TWFwcGluZ5QoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5lbmRQcmVmaXhNYXBwaW5nlGoNjwAAdJSMMnhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5pZ25vcmFibGVXaGl0ZXNwYWNllChqCo8AAGoLjwAAjGlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLmlnbm9yYWJsZVdoaXRlc3BhY2WUag2PAAB0lIw0eG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbpQoagqPAABqC48AAIxraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb26Uag2PAAB0lIwxeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnNldERvY3VtZW50TG9jYXRvcpQoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zZXREb2N1bWVudExvY2F0b3KUag2PAAB0lIwseG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnNraXBwZWRFbnRpdHmUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc2tpcHBlZEVudGl0eZRqDY8AAHSUjCx4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc3RhcnREb2N1bWVudJQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydERvY3VtZW50lGoNjwAAdJSMK3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydEVsZW1lbnSUKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc3RhcnRFbGVtZW50lGoNjwAAdJSMLXhtbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydEVsZW1lbnROU5QoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5Db250ZW50SGFuZGxlci5zdGFydEVsZW1lbnROU5RqDY8AAHSUjDF4bWwuc2F4LmhhbmRsZXIuQ29udGVudEhhbmRsZXIuc3RhcnRQcmVmaXhNYXBwaW5nlChqCo8AAGoLjwAAjGhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVyLnN0YXJ0UHJlZml4TWFwcGluZ5RqDY8AAHSUjCd4bWwuc2F4LmhhbmRsZXIuRFRESGFuZGxlci5ub3RhdGlvbkRlY2yUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuRFRESGFuZGxlci5ub3RhdGlvbkRlY2yUag2PAAB0lIwteG1sLnNheC5oYW5kbGVyLkRUREhhbmRsZXIudW5wYXJzZWRFbnRpdHlEZWNslChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkRUREhhbmRsZXIudW5wYXJzZWRFbnRpdHlEZWNslGoNjwAAdJSMLHhtbC5zYXguaGFuZGxlci5FbnRpdHlSZXNvbHZlci5yZXNvbHZlRW50aXR5lChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkVudGl0eVJlc29sdmVyLnJlc29sdmVFbnRpdHmUag2PAAB0lIwieG1sLnNheC5oYW5kbGVyLkVycm9ySGFuZGxlci5lcnJvcpQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXIuZXJyb3KUag2PAAB0lIwneG1sLnNheC5oYW5kbGVyLkVycm9ySGFuZGxlci5mYXRhbEVycm9ylChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkVycm9ySGFuZGxlci5mYXRhbEVycm9ylGoNjwAAdJSMJHhtbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXIud2FybmluZ5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXIud2FybmluZ5RqDY8AAHSUjCZ4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzLmdldExlbmd0aJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlcy5nZXRMZW5ndGiUag2PAAB0lIwleG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlcy5nZXROYW1lc5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlcy5nZXROYW1lc5RqDY8AAHSUjCR4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzLmdldFR5cGWUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXMuZ2V0VHlwZZRqDY8AAHSUjCV4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzLmdldFZhbHVllChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5BdHRyaWJ1dGVzLmdldFZhbHVllGoNjwAAdJSMLXhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOUy5nZXROYW1lQnlRTmFtZZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldE5hbWVCeVFOYW1llGoNjwAAdJSMLXhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOUy5nZXRRTmFtZUJ5TmFtZZQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldFFOYW1lQnlOYW1llGoNjwAAdJSMKHhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOUy5nZXRRTmFtZXOUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOUy5nZXRRTmFtZXOUag2PAAB0lIwueG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldFZhbHVlQnlRTmFtZZQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc05TLmdldFZhbHVlQnlRTmFtZZRqDY8AAHSUjCl4bWwuc2F4LnhtbHJlYWRlci5JbmNyZW1lbnRhbFBhcnNlci5jbG9zZZQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIuY2xvc2WUag2PAAB0lIwoeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIuZmVlZJQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIuZmVlZJRqDY8AAHSUjCl4bWwuc2F4LnhtbHJlYWRlci5JbmNyZW1lbnRhbFBhcnNlci5yZXNldJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXIucmVzZXSUag2PAAB0lIwreG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0Qnl0ZVN0cmVhbZQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0Qnl0ZVN0cmVhbZRqDY8AAHSUjDB4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRDaGFyYWN0ZXJTdHJlYW2UKGoKjwAAaguPAACMZmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldENoYXJhY3RlclN0cmVhbZRqDY8AAHSUjCl4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRFbmNvZGluZ5QoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0RW5jb2RpbmeUag2PAAB0lIwpeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2UuZ2V0UHVibGljSWSUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldFB1YmxpY0lklGoNjwAAdJSMKXhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLmdldFN5c3RlbUlklChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5nZXRTeXN0ZW1JZJRqDY8AAHSUjCt4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRCeXRlU3RyZWFtlChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRCeXRlU3RyZWFtlGoNjwAAdJSMMHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldENoYXJhY3RlclN0cmVhbZQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0Q2hhcmFjdGVyU3RyZWFtlGoNjwAAdJSMKXhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldEVuY29kaW5nlChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRFbmNvZGluZ5RqDY8AAHSUjCl4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZS5zZXRQdWJsaWNJZJQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0UHVibGljSWSUag2PAAB0lIwpeG1sLnNheC54bWxyZWFkZXIuSW5wdXRTb3VyY2Uuc2V0U3lzdGVtSWSUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlLnNldFN5c3RlbUlklGoNjwAAdJSMKXhtbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0Q29sdW1uTnVtYmVylChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldENvbHVtbk51bWJlcpRqDY8AAHSUjCd4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldExpbmVOdW1iZXKUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0TGluZU51bWJlcpRqDY8AAHSUjCV4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldFB1YmxpY0lklChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9yLmdldFB1YmxpY0lklGoNjwAAdJSMJXhtbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0U3lzdGVtSWSUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkxvY2F0b3IuZ2V0U3lzdGVtSWSUag2PAAB0lIwteG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldENvbnRlbnRIYW5kbGVylChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuZ2V0Q29udGVudEhhbmRsZXKUag2PAAB0lIwpeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldERUREhhbmRsZXKUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXREVERIYW5kbGVylGoNjwAAdJSMLXhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRFbnRpdHlSZXNvbHZlcpQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldEVudGl0eVJlc29sdmVylGoNjwAAdJSMK3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRFcnJvckhhbmRsZXKUKGoKjwAAaguPAACMYWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRFcnJvckhhbmRsZXKUag2PAAB0lIwmeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldEZlYXR1cmWUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRGZWF0dXJllGoNjwAAdJSMJ3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5nZXRQcm9wZXJ0eZQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLmdldFByb3BlcnR5lGoNjwAAdJSMIXhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5wYXJzZZQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnBhcnNllGoNjwAAdJSMLXhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRDb250ZW50SGFuZGxlcpQoagqPAABqC48AAIxjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnNldENvbnRlbnRIYW5kbGVylGoNjwAAdJSMKXhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXREVERIYW5kbGVylChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0RFRESGFuZGxlcpRqDY8AAHSUjC14bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0RW50aXR5UmVzb2x2ZXKUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRFbnRpdHlSZXNvbHZlcpRqDY8AAHSUjCt4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0RXJyb3JIYW5kbGVylChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0RXJyb3JIYW5kbGVylGoNjwAAdJSMJnhtbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRGZWF0dXJllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0RmVhdHVyZZRqDY8AAHSUjCV4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0TG9jYWxllChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5YTUxSZWFkZXIuc2V0TG9jYWxllGoNjwAAdJSMJ3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlci5zZXRQcm9wZXJ0eZQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVyLnNldFByb3BlcnR5lGoNjwAAdJSMG3htbHJwYy5jbGllbnQuQmluYXJ5LmRlY29kZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5jbGllbnQuaHRtbCN4bWxycGMuY2xpZW50LkJpbmFyeS5kZWNvZGWUag2PAAB0lIwbeG1scnBjLmNsaWVudC5CaW5hcnkuZW5jb2RllChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuQmluYXJ5LmVuY29kZZRqDY8AAHSUjB14bWxycGMuY2xpZW50LkRhdGVUaW1lLmRlY29kZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5jbGllbnQuaHRtbCN4bWxycGMuY2xpZW50LkRhdGVUaW1lLmRlY29kZZRqDY8AAHSUjB14bWxycGMuY2xpZW50LkRhdGVUaW1lLmVuY29kZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5jbGllbnQuaHRtbCN4bWxycGMuY2xpZW50LkRhdGVUaW1lLmVuY29kZZRqDY8AAHSUjCx4bWxycGMuY2xpZW50LlNlcnZlclByb3h5LnN5c3RlbS5saXN0TWV0aG9kc5QoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5jbGllbnQuaHRtbCN4bWxycGMuY2xpZW50LlNlcnZlclByb3h5LnN5c3RlbS5saXN0TWV0aG9kc5RqDY8AAHSUjCt4bWxycGMuY2xpZW50LlNlcnZlclByb3h5LnN5c3RlbS5tZXRob2RIZWxwlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuU2VydmVyUHJveHkuc3lzdGVtLm1ldGhvZEhlbHCUag2PAAB0lIwweG1scnBjLmNsaWVudC5TZXJ2ZXJQcm94eS5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJllChqCo8AAGoLjwAAjGVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuU2VydmVyUHJveHkuc3lzdGVtLm1ldGhvZFNpZ25hdHVyZZRqDY8AAHSUjDR4bWxycGMuc2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLmhhbmRsZV9yZXF1ZXN0lChqCo8AAGoLjwAAjGlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI3htbHJwYy5zZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIuaGFuZGxlX3JlcXVlc3SUag2PAAB0lIw3eG1scnBjLnNlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5yZWdpc3Rlcl9mdW5jdGlvbpQoagqPAABqC48AAIxsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIuaHRtbCN4bWxycGMuc2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX2Z1bmN0aW9ulGoNjwAAdJSMN3htbHJwYy5zZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIucmVnaXN0ZXJfaW5zdGFuY2WUKGoKjwAAaguPAACMbGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjeG1scnBjLnNlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5yZWdpc3Rlcl9pbnN0YW5jZZRqDY8AAHSUjEZ4bWxycGMuc2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zlChqCo8AAGoLjwAAjHtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI3htbHJwYy5zZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnOUag2PAAB0lIxCeG1scnBjLnNlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5yZWdpc3Rlcl9tdWx0aWNhbGxfZnVuY3Rpb25zlChqCo8AAGoLjwAAjHdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI3htbHJwYy5zZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIucmVnaXN0ZXJfbXVsdGljYWxsX2Z1bmN0aW9uc5RqDY8AAHSUjEF4bWxycGMuc2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvbpQoagqPAABqC48AAIx2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIuaHRtbCN4bWxycGMuc2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvbpRqDY8AAHSUjDh4bWxycGMuc2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfbmFtZZQoagqPAABqC48AAIxtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIuaHRtbCN4bWxycGMuc2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfbmFtZZRqDY8AAHSUjDl4bWxycGMuc2VydmVyLkRvY0NHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyLnNldF9zZXJ2ZXJfdGl0bGWUKGoKjwAAaguPAACMbmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjeG1scnBjLnNlcnZlci5Eb2NDR0lYTUxSUENSZXF1ZXN0SGFuZGxlci5zZXRfc2VydmVyX3RpdGxllGoNjwAAdJSMNnhtbHJwYy5zZXJ2ZXIuRG9jWE1MUlBDU2VydmVyLnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvbpQoagqPAABqC48AAJUFAAEAAAAAAIxraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIuaHRtbCN4bWxycGMuc2VydmVyLkRvY1hNTFJQQ1NlcnZlci5zZXRfc2VydmVyX2RvY3VtZW50YXRpb26Uag2PAAB0lIwteG1scnBjLnNlcnZlci5Eb2NYTUxSUENTZXJ2ZXIuc2V0X3NlcnZlcl9uYW1llChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI3htbHJwYy5zZXJ2ZXIuRG9jWE1MUlBDU2VydmVyLnNldF9zZXJ2ZXJfbmFtZZRqDY8AAHSUjC54bWxycGMuc2VydmVyLkRvY1hNTFJQQ1NlcnZlci5zZXRfc2VydmVyX3RpdGxllChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI3htbHJwYy5zZXJ2ZXIuRG9jWE1MUlBDU2VydmVyLnNldF9zZXJ2ZXJfdGl0bGWUag2PAAB0lIwyeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfZnVuY3Rpb26UKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfZnVuY3Rpb26Uag2PAAB0lIwyeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfaW5zdGFuY2WUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfaW5zdGFuY2WUag2PAAB0lIxBeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnOUKGoKjwAAaguPAACMdmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnOUag2PAAB0lIw9eG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIucmVnaXN0ZXJfbXVsdGljYWxsX2Z1bmN0aW9uc5QoagqPAABqC48AAIxyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIuaHRtbCN4bWxycGMuc2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5yZWdpc3Rlcl9tdWx0aWNhbGxfZnVuY3Rpb25zlGoNjwAAdJSME3ppcGZpbGUuUGF0aC5leGlzdHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QYXRoLmV4aXN0c5RqDY8AAHSUjBN6aXBmaWxlLlBhdGguaXNfZGlylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuUGF0aC5pc19kaXKUag2PAAB0lIwUemlwZmlsZS5QYXRoLmlzX2ZpbGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QYXRoLmlzX2ZpbGWUag2PAAB0lIwUemlwZmlsZS5QYXRoLml0ZXJkaXKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QYXRoLml0ZXJkaXKUag2PAAB0lIwRemlwZmlsZS5QYXRoLm9wZW6UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QYXRoLm9wZW6Uag2PAAB0lIwXemlwZmlsZS5QYXRoLnJlYWRfYnl0ZXOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QYXRoLnJlYWRfYnl0ZXOUag2PAAB0lIwWemlwZmlsZS5QYXRoLnJlYWRfdGV4dJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlBhdGgucmVhZF90ZXh0lGoNjwAAdJSMGXppcGZpbGUuUHlaaXBGaWxlLndyaXRlcHmUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QeVppcEZpbGUud3JpdGVweZRqDY8AAHSUjBV6aXBmaWxlLlppcEZpbGUuY2xvc2WUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLmNsb3NllGoNjwAAdJSMF3ppcGZpbGUuWmlwRmlsZS5leHRyYWN0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5leHRyYWN0lGoNjwAAdJSMGnppcGZpbGUuWmlwRmlsZS5leHRyYWN0YWxslChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5leHRyYWN0YWxslGoNjwAAdJSMF3ppcGZpbGUuWmlwRmlsZS5nZXRpbmZvlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5nZXRpbmZvlGoNjwAAdJSMGHppcGZpbGUuWmlwRmlsZS5pbmZvbGlzdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUuaW5mb2xpc3SUag2PAAB0lIwYemlwZmlsZS5aaXBGaWxlLm5hbWVsaXN0lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5uYW1lbGlzdJRqDY8AAHSUjBR6aXBmaWxlLlppcEZpbGUub3BlbpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUub3BlbpRqDY8AAHSUjBh6aXBmaWxlLlppcEZpbGUucHJpbnRkaXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLnByaW50ZGlylGoNjwAAdJSMFHppcGZpbGUuWmlwRmlsZS5yZWFklChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS5yZWFklGoNjwAAdJSMG3ppcGZpbGUuWmlwRmlsZS5zZXRwYXNzd29yZJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlppcEZpbGUuc2V0cGFzc3dvcmSUag2PAAB0lIwXemlwZmlsZS5aaXBGaWxlLnRlc3R6aXCUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLnRlc3R6aXCUag2PAAB0lIwVemlwZmlsZS5aaXBGaWxlLndyaXRllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZS53cml0ZZRqDY8AAHSUjBh6aXBmaWxlLlppcEZpbGUud3JpdGVzdHKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBGaWxlLndyaXRlc3RylGoNjwAAdJSMGXppcGZpbGUuWmlwSW5mby5mcm9tX2ZpbGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvLmZyb21fZmlsZZRqDY8AAHSUjBZ6aXBmaWxlLlppcEluZm8uaXNfZGlylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwSW5mby5pc19kaXKUag2PAAB0lIwhemlwaW1wb3J0LnppcGltcG9ydGVyLmZpbmRfbW9kdWxllChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LnppcGltcG9ydGVyLmZpbmRfbW9kdWxllGoNjwAAdJSMHnppcGltcG9ydC56aXBpbXBvcnRlci5nZXRfY29kZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5nZXRfY29kZZRqDY8AAHSUjB56aXBpbXBvcnQuemlwaW1wb3J0ZXIuZ2V0X2RhdGGUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuemlwaW1wb3J0ZXIuZ2V0X2RhdGGUag2PAAB0lIwiemlwaW1wb3J0LnppcGltcG9ydGVyLmdldF9maWxlbmFtZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5nZXRfZmlsZW5hbWWUag2PAAB0lIwgemlwaW1wb3J0LnppcGltcG9ydGVyLmdldF9zb3VyY2WUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnQuemlwaW1wb3J0ZXIuZ2V0X3NvdXJjZZRqDY8AAHSUjCB6aXBpbXBvcnQuemlwaW1wb3J0ZXIuaXNfcGFja2FnZZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5pc19wYWNrYWdllGoNjwAAdJSMIXppcGltcG9ydC56aXBpbXBvcnRlci5sb2FkX21vZHVsZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlci5sb2FkX21vZHVsZZRqDY8AAHSUjBZ6bGliLkNvbXByZXNzLmNvbXByZXNzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI3psaWIuQ29tcHJlc3MuY29tcHJlc3OUag2PAAB0lIwSemxpYi5Db21wcmVzcy5jb3B5lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI3psaWIuQ29tcHJlc3MuY29weZRqDY8AAHSUjBN6bGliLkNvbXByZXNzLmZsdXNolChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI3psaWIuQ29tcHJlc3MuZmx1c2iUag2PAAB0lIwUemxpYi5EZWNvbXByZXNzLmNvcHmUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96bGliLmh0bWwjemxpYi5EZWNvbXByZXNzLmNvcHmUag2PAAB0lIwaemxpYi5EZWNvbXByZXNzLmRlY29tcHJlc3OUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96bGliLmh0bWwjemxpYi5EZWNvbXByZXNzLmRlY29tcHJlc3OUag2PAAB0lIwVemxpYi5EZWNvbXByZXNzLmZsdXNolChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI3psaWIuRGVjb21wcmVzcy5mbHVzaJRqDY8AAHSUdYwHcHk6ZGF0YZR9lCiMCEVsbGlwc2lzlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjRWxsaXBzaXOUag2PAAB0lIwFRmFsc2WUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25zdGFudHMuaHRtbCNGYWxzZZRqDY8AAHSUjApNRVRIX0NMQVNTlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNNRVRIX0NMQVNTlGoNjwAAdJSMDE1FVEhfQ09FWElTVJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjTUVUSF9DT0VYSVNUlGoNjwAAdJSMDU1FVEhfRkFTVENBTEyUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI01FVEhfRkFTVENBTEyUag2PAAB0lIwLTUVUSF9OT0FSR1OUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI01FVEhfTk9BUkdTlGoNjwAAdJSMBk1FVEhfT5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zdHJ1Y3R1cmVzLmh0bWwjTUVUSF9PlGoNjwAAdJSMC01FVEhfU1RBVElDlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNNRVRIX1NUQVRJQ5RqDY8AAHSUjAxNRVRIX1ZBUkFSR1OUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3RydWN0dXJlcy5odG1sI01FVEhfVkFSQVJHU5RqDY8AAHSUjAROb25llChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjTm9uZZRqDY8AAHSUjA5Ob3RJbXBsZW1lbnRlZJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnN0YW50cy5odG1sI05vdEltcGxlbWVudGVklGoNjwAAdJSME1B5X1RQRkxBR1NfQkFTRVRZUEWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfQkFTRVRZUEWUag2PAAB0lIwcUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTU5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTU5RqDY8AAHSUjBlQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTlGoNjwAAdJSMElB5X1RQRkxBR1NfREVGQVVMVJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19ERUZBVUxUlGoNjwAAdJSMGFB5X1RQRkxBR1NfRElDVF9TVUJDTEFTU5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTlGoNjwAAdJSMGFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFlGoNjwAAdJSMElB5X1RQRkxBR1NfSEFWRV9HQ5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19IQVZFX0dDlGoNjwAAdJSME1B5X1RQRkxBR1NfSEVBUFRZUEWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfSEVBUFRZUEWUag2PAAB0lIwYUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1OUag2PAAB0lIwYUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1OUag2PAAB0lIwcUHlfVFBGTEFHU19NRVRIT0RfREVTQ1JJUFRPUpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19NRVRIT0RfREVTQ1JJUFRPUpRqDY8AAHSUjBBQeV9UUEZMQUdTX1JFQURZlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNQeV9UUEZMQUdTX1JFQURZlGoNjwAAdJSME1B5X1RQRkxBR1NfUkVBRFlJTkeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfUkVBRFlJTkeUag2PAAB0lIwZUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTU5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTU5RqDY8AAHSUjBhQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfVFlQRV9TVUJDTEFTU5RqDY8AAHSUjBtQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1OUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI1B5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTU5RqDY8AAHSUjARUcnVllChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjVHJ1ZZRqDY8AAHSUjBtfUHlfVFBGTEFHU19IQVZFX1ZFQ1RPUkNBTEyUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI19QeV9UUEZMQUdTX0hBVkVfVkVDVE9SQ0FMTJRqDY8AAHSUjAlfX2RlYnVnX1+UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25zdGFudHMuaHRtbCNfX2RlYnVnX1+Uag2PAAB0lIwQX3RocmVhZC5Mb2NrVHlwZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L190aHJlYWQuaHRtbCNfdGhyZWFkLkxvY2tUeXBllGoNjwAAdJSME190aHJlYWQuVElNRU9VVF9NQViUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9fdGhyZWFkLmh0bWwjX3RocmVhZC5USU1FT1VUX01BWJRqDY8AAHSUjA9hcnJheS50eXBlY29kZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LnR5cGVjb2Rlc5RqDY8AAHSUjCVhc3luY2hhdC5hc3luY19jaGF0LmFjX2luX2J1ZmZlcl9zaXpllChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0LmFjX2luX2J1ZmZlcl9zaXpllGoNjwAAdJSMJmFzeW5jaGF0LmFzeW5jX2NoYXQuYWNfb3V0X2J1ZmZlcl9zaXpllChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0LmFjX291dF9idWZmZXJfc2l6ZZRqDY8AAHSUjCJhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5ERVZOVUxMlChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLmh0bWwjYXN5bmNpby5hc3luY2lvLnN1YnByb2Nlc3MuREVWTlVMTJRqDY8AAHSUjB9hc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5QSVBFlChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLmh0bWwjYXN5bmNpby5hc3luY2lvLnN1YnByb2Nlc3MuUElQRZRqDY8AAHSUjCFhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5TVERPVVSUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MuaHRtbCNhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5TVERPVVSUag2PAAB0lIwRY2FsZW5kYXIuZGF5X2FiYnKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLmRheV9hYmJylGoNjwAAdJSMEWNhbGVuZGFyLmRheV9uYW1llChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5kYXlfbmFtZZRqDY8AAHSUjBNjYWxlbmRhci5tb250aF9hYmJylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5tb250aF9hYmJylGoNjwAAdJSME2NhbGVuZGFyLm1vbnRoX25hbWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLm1vbnRoX25hbWWUag2PAAB0lIwHY21hdGguZZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguZZRqDY8AAHSUjAljbWF0aC5pbmaUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmluZpRqDY8AAHSUjApjbWF0aC5pbmZqlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5pbmZqlGoNjwAAdJSMCWNtYXRoLm5hbpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgubmFulGoNjwAAdJSMCmNtYXRoLm5hbmqUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLm5hbmqUag2PAAB0lIwIY21hdGgucGmUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnBplGoNjwAAdJSMCWNtYXRoLnRhdZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgudGF1lGoNjwAAdJSMCmNvZGVjcy5CT02UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NlGoNjwAAdJSMDWNvZGVjcy5CT01fQkWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX0JFlGoNjwAAdJSMDWNvZGVjcy5CT01fTEWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX0xFlGoNjwAAdJSMEGNvZGVjcy5CT01fVVRGMTaUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjE2lGoNjwAAdJSME2NvZGVjcy5CT01fVVRGMTZfQkWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjE2X0JFlGoNjwAAdJSME2NvZGVjcy5CT01fVVRGMTZfTEWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjE2X0xFlGoNjwAAdJSMEGNvZGVjcy5CT01fVVRGMzKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjMylGoNjwAAdJSME2NvZGVjcy5CT01fVVRGMzJfQkWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjMyX0JFlGoNjwAAdJSME2NvZGVjcy5CT01fVVRGMzJfTEWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuQk9NX1VURjMyX0xFlGoNjwAAdJSMD2NvZGVjcy5CT01fVVRGOJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5CT01fVVRGOJRqDY8AAHSUjCRjb25maWdwYXJzZXIuTUFYX0lOVEVSUE9MQVRJT05fREVQVEiUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuTUFYX0lOVEVSUE9MQVRJT05fREVQVEiUag2PAAB0lIwJY29weXJpZ2h0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjY29weXJpZ2h0lGoNjwAAdJSMB2NyZWRpdHOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25zdGFudHMuaHRtbCNjcmVkaXRzlGoNjwAAdJSMFWNyeXB0Lk1FVEhPRF9CTE9XRklTSJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NyeXB0Lmh0bWwjY3J5cHQuTUVUSE9EX0JMT1dGSVNIlGoNjwAAdJSMEmNyeXB0Lk1FVEhPRF9DUllQVJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NyeXB0Lmh0bWwjY3J5cHQuTUVUSE9EX0NSWVBUlGoNjwAAdJSMEGNyeXB0Lk1FVEhPRF9NRDWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jcnlwdC5odG1sI2NyeXB0Lk1FVEhPRF9NRDWUag2PAAB0lIwTY3J5cHQuTUVUSE9EX1NIQTI1NpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NyeXB0Lmh0bWwjY3J5cHQuTUVUSE9EX1NIQTI1NpRqDY8AAHSUjBNjcnlwdC5NRVRIT0RfU0hBNTEylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3J5cHQuaHRtbCNjcnlwdC5NRVRIT0RfU0hBNTEylGoNjwAAdJSMDWNzdi5RVU9URV9BTEyUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuUVVPVEVfQUxMlGoNjwAAdJSMEWNzdi5RVU9URV9NSU5JTUFMlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LlFVT1RFX01JTklNQUyUag2PAAB0lIwOY3N2LlFVT1RFX05PTkWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuUVVPVEVfTk9ORZRqDY8AAHSUjBRjc3YuUVVPVEVfTk9OTlVNRVJJQ5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5RVU9URV9OT05OVU1FUklDlGoNjwAAdJSMCmN1cnNlcy5FUlKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuRVJSlGoNjwAAdJSMCWN1cnNlcy5PS5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5PS5RqDY8AAHSUjBljdXJzZXMuYXNjaWkuY29udHJvbG5hbWVzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmNvbnRyb2xuYW1lc5RqDY8AAHSUjBZjdXJzZXMubmN1cnNlc192ZXJzaW9ulChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm5jdXJzZXNfdmVyc2lvbpRqDY8AAHSUjA5jdXJzZXMudmVyc2lvbpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy52ZXJzaW9ulGoNjwAAdJSMEGRhdGV0aW1lLk1BWFlFQVKUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLk1BWFlFQVKUag2PAAB0lIwQZGF0ZXRpbWUuTUlOWUVBUpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUuTUlOWUVBUpRqDY8AAHSUjBBkYm0ubmRibS5saWJyYXJ5lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGJtLmh0bWwjZGJtLm5kYm0ubGlicmFyeZRqDY8AAHSUjBdkZWNpbWFsLkhBVkVfQ09OVEVYVFZBUpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkhBVkVfQ09OVEVYVFZBUpRqDY8AAHSUjBRkZWNpbWFsLkhBVkVfVEhSRUFEU5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkhBVkVfVEhSRUFEU5RqDY8AAHSUjBBkZWNpbWFsLk1BWF9FTUFYlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuTUFYX0VNQViUag2PAAB0lIwQZGVjaW1hbC5NQVhfUFJFQ5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLk1BWF9QUkVDlGoNjwAAdJSMEGRlY2ltYWwuTUlOX0VNSU6UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5NSU5fRU1JTpRqDY8AAHSUjBFkZWNpbWFsLk1JTl9FVElOWZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLk1JTl9FVElOWZRqDY8AAHSUjBJkZWNpbWFsLlJPVU5EXzA1VVCUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5ST1VORF8wNVVQlGoNjwAAdJSMFWRlY2ltYWwuUk9VTkRfQ0VJTElOR5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLlJPVU5EX0NFSUxJTkeUag2PAAB0lIwSZGVjaW1hbC5ST1VORF9ET1dOlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuUk9VTkRfRE9XTpRqDY8AAHSUjBNkZWNpbWFsLlJPVU5EX0ZMT09SlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuUk9VTkRfRkxPT1KUag2PAAB0lIwXZGVjaW1hbC5ST1VORF9IQUxGX0RPV06UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5ST1VORF9IQUxGX0RPV06Uag2PAAB0lIwXZGVjaW1hbC5ST1VORF9IQUxGX0VWRU6UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5ST1VORF9IQUxGX0VWRU6Uag2PAAB0lIwVZGVjaW1hbC5ST1VORF9IQUxGX1VQlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuUk9VTkRfSEFMRl9VUJRqDY8AAHSUjBBkZWNpbWFsLlJPVU5EX1VQlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuUk9VTkRfVVCUag2PAAB0lIwUZGlzLkJ5dGVjb2RlLmNvZGVvYmqUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuQnl0ZWNvZGUuY29kZW9iapRqDY8AAHSUjBdkaXMuQnl0ZWNvZGUuZmlyc3RfbGluZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5CeXRlY29kZS5maXJzdF9saW5llGoNjwAAdJSME2Rpcy5JbnN0cnVjdGlvbi5hcmeUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuSW5zdHJ1Y3Rpb24uYXJnlGoNjwAAdJSMF2Rpcy5JbnN0cnVjdGlvbi5hcmdyZXBylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjZGlzLkluc3RydWN0aW9uLmFyZ3JlcHKUag2PAAB0lIwWZGlzLkluc3RydWN0aW9uLmFyZ3ZhbJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5JbnN0cnVjdGlvbi5hcmd2YWyUag2PAAB0lIweZGlzLkluc3RydWN0aW9uLmlzX2p1bXBfdGFyZ2V0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjZGlzLkluc3RydWN0aW9uLmlzX2p1bXBfdGFyZ2V0lGoNjwAAdJSMFmRpcy5JbnN0cnVjdGlvbi5vZmZzZXSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuSW5zdHJ1Y3Rpb24ub2Zmc2V0lGoNjwAAdJSMFmRpcy5JbnN0cnVjdGlvbi5vcGNvZGWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuSW5zdHJ1Y3Rpb24ub3Bjb2RllGoNjwAAdJSMFmRpcy5JbnN0cnVjdGlvbi5vcG5hbWWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuSW5zdHJ1Y3Rpb24ub3BuYW1llGoNjwAAdJSMG2Rpcy5JbnN0cnVjdGlvbi5zdGFydHNfbGluZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5JbnN0cnVjdGlvbi5zdGFydHNfbGluZZRqDY8AAHSUjApkaXMuY21wX29wlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmNtcF9vcJRqDY8AAHSUjA5kaXMuaGFzY29tcGFyZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5oYXNjb21wYXJllGoNjwAAdJSMDGRpcy5oYXNjb25zdJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5oYXNjb25zdJRqDY8AAHSUjAtkaXMuaGFzZnJlZZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5oYXNmcmVllGoNjwAAdJSMC2Rpcy5oYXNqYWJzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmhhc2phYnOUag2PAAB0lIwLZGlzLmhhc2pyZWyUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzanJlbJRqDY8AAHSUjAxkaXMuaGFzbG9jYWyUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzbG9jYWyUag2PAAB0lIwLZGlzLmhhc25hbWWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuaGFzbmFtZZRqDY8AAHSUjAlkaXMub3BtYXCUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMub3BtYXCUag2PAAB0lIwKZGlzLm9wbmFtZZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5vcG5hbWWUag2PAAB0lIwfZGlzdHV0aWxzLnN5c2NvbmZpZy5FWEVDX1BSRUZJWJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5FWEVDX1BSRUZJWJRqDY8AAHSUjBpkaXN0dXRpbHMuc3lzY29uZmlnLlBSRUZJWJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5QUkVGSViUag2PAAB0lIwYZG9jdGVzdC5DT01QQVJJU09OX0ZMQUdTlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuQ09NUEFSSVNPTl9GTEFHU5RqDY8AAHSUjB1kb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORZRqDY8AAHSUjB5kb2N0ZXN0LkRPTlRfQUNDRVBUX1RSVUVfRk9SXzGUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5ET05UX0FDQ0VQVF9UUlVFX0ZPUl8xlGoNjwAAdJSMEGRvY3Rlc3QuRUxMSVBTSVOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5FTExJUFNJU5RqDY8AAHSUjBFkb2N0ZXN0LkZBSUxfRkFTVJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkZBSUxfRkFTVJRqDY8AAHSUjB9kb2N0ZXN0LklHTk9SRV9FWENFUFRJT05fREVUQUlMlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUyUag2PAAB0lIwcZG9jdGVzdC5OT1JNQUxJWkVfV0hJVEVTUEFDRZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0Lk5PUk1BTElaRV9XSElURVNQQUNFlGoNjwAAdJSMF2RvY3Rlc3QuUkVQT1JUSU5HX0ZMQUdTlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuUkVQT1JUSU5HX0ZMQUdTlGoNjwAAdJSMFGRvY3Rlc3QuUkVQT1JUX0NESUZGlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuUkVQT1JUX0NESUZGlGoNjwAAdJSMFGRvY3Rlc3QuUkVQT1JUX05ESUZGlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuUkVQT1JUX05ESUZGlGoNjwAAdJSMIWRvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LlJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkWUag2PAAB0lIwUZG9jdGVzdC5SRVBPUlRfVURJRkaUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5SRVBPUlRfVURJRkaUag2PAAB0lIwMZG9jdGVzdC5TS0lQlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuU0tJUJRqDY8AAHSUjCVlbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VylChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIuaHRtbCNlbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VylGoNjwAAdJSMEWVtYWlsLnBvbGljeS5IVFRQlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LkhUVFCUag2PAAB0lIwRZW1haWwucG9saWN5LlNNVFCUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuU01UUJRqDY8AAHSUjBVlbWFpbC5wb2xpY3kuU01UUFVURjiUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wb2xpY3kuaHRtbCNlbWFpbC5wb2xpY3kuU01UUFVURjiUag2PAAB0lIwVZW1haWwucG9saWN5LmNvbXBhdDMylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LmNvbXBhdDMylGoNjwAAdJSMFGVtYWlsLnBvbGljeS5kZWZhdWx0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LmRlZmF1bHSUag2PAAB0lIwTZW1haWwucG9saWN5LnN0cmljdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5zdHJpY3SUag2PAAB0lIwLZXJybm8uRTJCSUeUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkUyQklHlGoNjwAAdJSMDGVycm5vLkVBQ0NFU5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUFDQ0VTlGoNjwAAdJSMEGVycm5vLkVBRERSSU5VU0WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVBRERSSU5VU0WUag2PAAB0lIwTZXJybm8uRUFERFJOT1RBVkFJTJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUFERFJOT1RBVkFJTJRqDY8AAHSUjAplcnJuby5FQURWlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQURWlGoNjwAAdJSMEmVycm5vLkVBRk5PU1VQUE9SVJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUFGTk9TVVBQT1JUlGoNjwAAdJSMDGVycm5vLkVBR0FJTpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUFHQUlOlGoNjwAAdJSMDmVycm5vLkVBTFJFQURZlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQUxSRUFEWZRqDY8AAHSUjAtlcnJuby5FQkFERZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUJBREWUag2PAAB0lIwLZXJybm8uRUJBREaUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURGlGoNjwAAdJSMDGVycm5vLkVCQURGRJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUJBREZElGoNjwAAdJSMDWVycm5vLkVCQURNU0eUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURNU0eUag2PAAB0lIwLZXJybm8uRUJBRFKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURSlGoNjwAAdJSMDWVycm5vLkVCQURSUUOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCQURSUUOUag2PAAB0lIwNZXJybm8uRUJBRFNMVJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUJBRFNMVJRqDY8AAHSUjAxlcnJuby5FQkZPTlSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVCRk9OVJRqDY8AAHSUjAtlcnJuby5FQlVTWZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUJVU1mUag2PAAB0lIwMZXJybm8uRUNISUxElChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQ0hJTESUag2PAAB0lIwMZXJybm8uRUNIUk5HlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FQ0hSTkeUag2PAAB0lIwLZXJybm8uRUNPTU2UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVDT01NlGoNjwAAdJSMEmVycm5vLkVDT05OQUJPUlRFRJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUNPTk5BQk9SVEVElGoNjwAAdJSMEmVycm5vLkVDT05OUkVGVVNFRJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUNPTk5SRUZVU0VElGoNjwAAdJSMEGVycm5vLkVDT05OUkVTRVSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVDT05OUkVTRVSUag2PAAB0lIwNZXJybm8uRURFQURMS5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRURFQURMS5RqDY8AAHSUjA9lcnJuby5FREVBRExPQ0uUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVERUFETE9DS5RqDY8AAHSUjBJlcnJuby5FREVTVEFERFJSRVGUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVERVNUQUREUlJFUZRqDY8AAHSUjAplcnJuby5FRE9NlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FRE9NlGoNjwAAdJSMDWVycm5vLkVET1RET1SUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVET1RET1SUag2PAAB0lIwMZXJybm8uRURRVU9UlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FRFFVT1SUag2PAAB0lIwMZXJybm8uRUVYSVNUlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FRVhJU1SUag2PAAB0lIwMZXJybm8uRUZBVUxUlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FRkFVTFSUag2PAAB0lIwLZXJybm8uRUZCSUeUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVGQklHlGoNjwAAdJSMD2Vycm5vLkVIT1NURE9XTpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUhPU1RET1dOlGoNjwAAdJSMEmVycm5vLkVIT1NUVU5SRUFDSJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUhPU1RVTlJFQUNIlGoNjwAAdJSMC2Vycm5vLkVJRFJNlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSURSTZRqDY8AAHSUjAxlcnJuby5FSUxTRVGUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVJTFNFUZRqDY8AAHSUjBFlcnJuby5FSU5QUk9HUkVTU5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlOUFJPR1JFU1OUag2PAAB0lIwLZXJybm8uRUlOVFKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVJTlRSlGoNjwAAdJSMDGVycm5vLkVJTlZBTJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlOVkFMlGoNjwAAdJSMCWVycm5vLkVJT5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUlPlGoNjwAAdJSMDWVycm5vLkVJU0NPTk6UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVJU0NPTk6Uag2PAAB0lIwMZXJybm8uRUlTRElSlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSVNESVKUag2PAAB0lIwMZXJybm8uRUlTTkFNlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FSVNOQU2Uag2PAAB0lIwMZXJybm8uRUwySExUlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTDJITFSUag2PAAB0lIwOZXJybm8uRUwyTlNZTkOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMMk5TWU5DlGoNjwAAdJSMDGVycm5vLkVMM0hMVJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUwzSExUlGoNjwAAdJSMDGVycm5vLkVMM1JTVJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUwzUlNUlGoNjwAAdJSMDWVycm5vLkVMSUJBQ0OUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVMSUJBQ0OUag2PAAB0lIwNZXJybm8uRUxJQkJBRJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxJQkJBRJRqDY8AAHSUjA5lcnJuby5FTElCRVhFQ5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxJQkVYRUOUag2PAAB0lIwNZXJybm8uRUxJQk1BWJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxJQk1BWJRqDY8AAHSUjA1lcnJuby5FTElCU0NOlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTElCU0NOlGoNjwAAdJSMDGVycm5vLkVMTlJOR5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRUxOUk5HlGoNjwAAdJSMC2Vycm5vLkVMT09QlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTE9PUJRqDY8AAHSUjAxlcnJuby5FTUZJTEWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVNRklMRZRqDY8AAHSUjAxlcnJuby5FTUxJTkuUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVNTElOS5RqDY8AAHSUjA5lcnJuby5FTVNHU0laRZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU1TR1NJWkWUag2PAAB0lIwPZXJybm8uRU1VTFRJSE9QlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTVVMVElIT1CUag2PAAB0lIwSZXJybm8uRU5BTUVUT09MT05HlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkFNRVRPT0xPTkeUag2PAAB0lIwNZXJybm8uRU5BVkFJTJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5BVkFJTJRqDY8AAHSUjA5lcnJuby5FTkVURE9XTpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5FVERPV06Uag2PAAB0lIwPZXJybm8uRU5FVFJFU0VUlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTkVUUkVTRVSUag2PAAB0lIwRZXJybm8uRU5FVFVOUkVBQ0iUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVORVRVTlJFQUNIlGoNjwAAdJSMDGVycm5vLkVORklMRZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5GSUxFlGoNjwAAdJSMDGVycm5vLkVOT0FOT5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PQU5PlGoNjwAAdJSMDWVycm5vLkVOT0JVRlOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT0JVRlOUag2PAAB0lIwMZXJybm8uRU5PQ1NJlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9DU0mUag2PAAB0lIwNZXJybm8uRU5PREFUQZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PREFUQZRqDY8AAHSUjAxlcnJuby5FTk9ERVaUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT0RFVpRqDY8AAHSUjAxlcnJuby5FTk9FTlSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT0VOVJRqDY8AAHSUjA1lcnJuby5FTk9FWEVDlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9FWEVDlGoNjwAAdJSMDGVycm5vLkVOT0xDS5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PTENLlGoNjwAAdJSMDWVycm5vLkVOT0xJTkuUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT0xJTkuUag2PAAB0lIwMZXJybm8uRU5PTUVNlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9NRU2Uag2PAAB0lIwMZXJybm8uRU5PTVNHlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9NU0eUag2PAAB0lIwMZXJybm8uRU5PTkVUlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9ORVSUag2PAAB0lIwMZXJybm8uRU5PUEtHlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9QS0eUag2PAAB0lIwRZXJybm8uRU5PUFJPVE9PUFSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1BST1RPT1BUlGoNjwAAdJSMDGVycm5vLkVOT1NQQ5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PU1BDlGoNjwAAdJSMC2Vycm5vLkVOT1NSlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9TUpRqDY8AAHSUjAxlcnJuby5FTk9TVFKUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1NUUpRqDY8AAHSUjAxlcnJuby5FTk9TWVOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1NZU5RqDY8AAHSUjA1lcnJuby5FTk9UQkxLlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9UQkxLlGoNjwAAdJSMDmVycm5vLkVOT1RDT05OlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9UQ09OTpRqDY8AAHSUjA1lcnJuby5FTk9URElSlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9URElSlGoNjwAAdJSMD2Vycm5vLkVOT1RFTVBUWZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PVEVNUFRZlGoNjwAAdJSMDWVycm5vLkVOT1ROQU2UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1ROQU2Uag2PAAB0lIwOZXJybm8uRU5PVFNPQ0uUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVOT1RTT0NLlGoNjwAAdJSMDGVycm5vLkVOT1RUWZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5PVFRZlGoNjwAAdJSMDmVycm5vLkVOT1RVTklRlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FTk9UVU5JUZRqDY8AAHSUjAtlcnJuby5FTlhJT5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU5YSU+Uag2PAAB0lIwQZXJybm8uRU9QTk9UU1VQUJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRU9QTk9UU1VQUJRqDY8AAHSUjA9lcnJuby5FT1ZFUkZMT1eUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVPVkVSRkxPV5RqDY8AAHSUjAtlcnJuby5FUEVSTZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVBFUk2Uag2PAAB0lIwSZXJybm8uRVBGTk9TVVBQT1JUlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUEZOT1NVUFBPUlSUag2PAAB0lIwLZXJybm8uRVBJUEWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVQSVBFlGoNjwAAdJSMDGVycm5vLkVQUk9UT5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVBST1RPlGoNjwAAdJSMFWVycm5vLkVQUk9UT05PU1VQUE9SVJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVBST1RPTk9TVVBQT1JUlGoNjwAAdJSMEGVycm5vLkVQUk9UT1RZUEWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVQUk9UT1RZUEWUag2PAAB0lIwMZXJybm8uRVJBTkdFlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkFOR0WUag2PAAB0lIwNZXJybm8uRVJFTUNIR5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVJFTUNIR5RqDY8AAHSUjA1lcnJuby5FUkVNT1RFlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkVNT1RFlGoNjwAAdJSMD2Vycm5vLkVSRU1PVEVJT5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVJFTU9URUlPlGoNjwAAdJSMDmVycm5vLkVSRVNUQVJUlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FUkVTVEFSVJRqDY8AAHSUjAtlcnJuby5FUk9GU5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVJPRlOUag2PAAB0lIwPZXJybm8uRVNIVVRET1dOlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU0hVVERPV06Uag2PAAB0lIwVZXJybm8uRVNPQ0tUTk9TVVBQT1JUlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU09DS1ROT1NVUFBPUlSUag2PAAB0lIwMZXJybm8uRVNQSVBFlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU1BJUEWUag2PAAB0lIwLZXJybm8uRVNSQ0iUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVTUkNIlGoNjwAAdJSMDGVycm5vLkVTUk1OVJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVNSTU5UlGoNjwAAdJSMDGVycm5vLkVTVEFMRZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVNUQUxFlGoNjwAAdJSMDmVycm5vLkVTVFJQSVBFlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FU1RSUElQRZRqDY8AAHSUjAtlcnJuby5FVElNRZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVRJTUWUag2PAAB0lIwPZXJybm8uRVRJTUVET1VUlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FVElNRURPVVSUag2PAAB0lIwSZXJybm8uRVRPT01BTllSRUZTlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FVE9PTUFOWVJFRlOUag2PAAB0lIwNZXJybm8uRVRYVEJTWZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vycm5vLmh0bWwjZXJybm8uRVRYVEJTWZRqDY8AAHSUjA1lcnJuby5FVUNMRUFOlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FVUNMRUFOlGoNjwAAdJSMDWVycm5vLkVVTkFUQ0iUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVVTkFUQ0iUag2PAAB0lIwMZXJybm8uRVVTRVJTlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FVVNFUlOUag2PAAB0lIwRZXJybm8uRVdPVUxEQkxPQ0uUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVXT1VMREJMT0NLlGoNjwAAdJSMC2Vycm5vLkVYREVWlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbCNlcnJuby5FWERFVpRqDY8AAHSUjAxlcnJuby5FWEZVTEyUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLkVYRlVMTJRqDY8AAHSUjA9lcnJuby5lcnJvcmNvZGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI2Vycm5vLmVycm9yY29kZZRqDY8AAHSUjARleGl0lChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjZXhpdJRqDY8AAHSUjA9mb3JtYXR0ZXIuQVNfSVOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuQVNfSVOUag2PAAB0lIwRZnRwbGliLmFsbF9lcnJvcnOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHBsaWIuYWxsX2Vycm9yc5RqDY8AAHSUjBRnYy5ERUJVR19DT0xMRUNUQUJMRZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWwjZ2MuREVCVUdfQ09MTEVDVEFCTEWUag2PAAB0lIwNZ2MuREVCVUdfTEVBS5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWwjZ2MuREVCVUdfTEVBS5RqDY8AAHSUjBBnYy5ERUJVR19TQVZFQUxMlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2MuaHRtbCNnYy5ERUJVR19TQVZFQUxMlGoNjwAAdJSMDmdjLkRFQlVHX1NUQVRTlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2MuaHRtbCNnYy5ERUJVR19TVEFUU5RqDY8AAHSUjBZnYy5ERUJVR19VTkNPTExFQ1RBQkxFlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2MuaHRtbCNnYy5ERUJVR19VTkNPTExFQ1RBQkxFlGoNjwAAdJSMDGdjLmNhbGxiYWNrc5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWwjZ2MuY2FsbGJhY2tzlGoNjwAAdJSMCmdjLmdhcmJhZ2WUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLmdhcmJhZ2WUag2PAAB0lIwcaGFzaGxpYi5hbGdvcml0aG1zX2F2YWlsYWJsZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLmFsZ29yaXRobXNfYXZhaWxhYmxllGoNjwAAdJSMHWhhc2hsaWIuYWxnb3JpdGhtc19ndWFyYW50ZWVklChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuYWxnb3JpdGhtc19ndWFyYW50ZWVklGoNjwAAdJSMH2hhc2hsaWIuYmxha2UyYi5NQVhfRElHRVNUX1NJWkWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5ibGFrZTJiLk1BWF9ESUdFU1RfU0laRZRqDY8AAHSUjBxoYXNobGliLmJsYWtlMmIuTUFYX0tFWV9TSVpFlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuYmxha2UyYi5NQVhfS0VZX1NJWkWUag2PAAB0lIwbaGFzaGxpYi5ibGFrZTJiLlBFUlNPTl9TSVpFlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuYmxha2UyYi5QRVJTT05fU0laRZRqDY8AAHSUjBloYXNobGliLmJsYWtlMmIuU0FMVF9TSVpFlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuYmxha2UyYi5TQUxUX1NJWkWUag2PAAB0lIwfaGFzaGxpYi5ibGFrZTJzLk1BWF9ESUdFU1RfU0laRZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLmJsYWtlMnMuTUFYX0RJR0VTVF9TSVpFlGoNjwAAdJSMHGhhc2hsaWIuYmxha2Uycy5NQVhfS0VZX1NJWkWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5ibGFrZTJzLk1BWF9LRVlfU0laRZRqDY8AAHSUjBtoYXNobGliLmJsYWtlMnMuUEVSU09OX1NJWkWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5ibGFrZTJzLlBFUlNPTl9TSVpFlGoNjwAAdJSMGWhhc2hsaWIuYmxha2Uycy5TQUxUX1NJWkWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5ibGFrZTJzLlNBTFRfU0laRZRqDY8AAHSUjBdoYXNobGliLmhhc2guYmxvY2tfc2l6ZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLmhhc2guYmxvY2tfc2l6ZZRqDY8AAHSUjBhoYXNobGliLmhhc2guZGlnZXN0X3NpemWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5oYXNoLmRpZ2VzdF9zaXpllGoNjwAAdJSMHGh0bWwuZW50aXRpZXMuY29kZXBvaW50Mm5hbWWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLmVudGl0aWVzLmh0bWwjaHRtbC5lbnRpdGllcy5jb2RlcG9pbnQybmFtZZRqDY8AAHSUjBhodG1sLmVudGl0aWVzLmVudGl0eWRlZnOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLmVudGl0aWVzLmh0bWwjaHRtbC5lbnRpdGllcy5lbnRpdHlkZWZzlGoNjwAAdJSME2h0bWwuZW50aXRpZXMuaHRtbDWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLmVudGl0aWVzLmh0bWwjaHRtbC5lbnRpdGllcy5odG1sNZRqDY8AAHSUjBxodG1sLmVudGl0aWVzLm5hbWUyY29kZXBvaW50lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5odG1sI2h0bWwuZW50aXRpZXMubmFtZTJjb2RlcG9pbnSUag2PAAB0lIwWaHR0cC5jbGllbnQuSFRUUFNfUE9SVJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUFNfUE9SVJRqDY8AAHSUjBVodHRwLmNsaWVudC5IVFRQX1BPUlSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LkhUVFBfUE9SVJRqDY8AAHSUjBVodHRwLmNsaWVudC5yZXNwb25zZXOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LnJlc3BvbnNlc5RqDY8AAHSUjAxpbWdoZHIudGVzdHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWdoZHIuaHRtbCNpbWdoZHIudGVzdHOUag2PAAB0lIwNaW1wLkNfQlVJTFRJTpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcC5odG1sI2ltcC5DX0JVSUxUSU6Uag2PAAB0lIwPaW1wLkNfRVhURU5TSU9OlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wLmh0bWwjaW1wLkNfRVhURU5TSU9OlGoNjwAAdJSMEWltcC5QS0dfRElSRUNUT1JZlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wLmh0bWwjaW1wLlBLR19ESVJFQ1RPUlmUag2PAAB0lIwPaW1wLlBZX0NPTVBJTEVElChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wLmh0bWwjaW1wLlBZX0NPTVBJTEVElGoNjwAAdJSMDWltcC5QWV9GUk9aRU6UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNpbXAuUFlfRlJPWkVOlGoNjwAAdJSMDWltcC5QWV9TT1VSQ0WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNpbXAuUFlfU09VUkNFlGoNjwAAdJSMG2ltcG9ydGxpYi5yZXNvdXJjZXMuUGFja2FnZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5yZXNvdXJjZXMuUGFja2FnZZRqDY8AAHSUjBxpbXBvcnRsaWIucmVzb3VyY2VzLlJlc291cmNllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnJlc291cmNlcy5SZXNvdXJjZZRqDY8AAHSUjBppbnNwZWN0LkNPX0FTWU5DX0dFTkVSQVRPUpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkNPX0FTWU5DX0dFTkVSQVRPUpRqDY8AAHSUjBRpbnNwZWN0LkNPX0NPUk9VVElORZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkNPX0NPUk9VVElORZRqDY8AAHSUjBRpbnNwZWN0LkNPX0dFTkVSQVRPUpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkNPX0dFTkVSQVRPUpRqDY8AAHSUjB1pbnNwZWN0LkNPX0lURVJBQkxFX0NPUk9VVElORZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkNPX0lURVJBQkxFX0NPUk9VVElORZRqDY8AAHSUjBFpbnNwZWN0LkNPX05FU1RFRJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkNPX05FU1RFRJRqDY8AAHSUjBRpbnNwZWN0LkNPX05FV0xPQ0FMU5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkNPX05FV0xPQ0FMU5RqDY8AAHSUjBFpbnNwZWN0LkNPX05PRlJFRZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkNPX05PRlJFRZRqDY8AAHSUjBRpbnNwZWN0LkNPX09QVElNSVpFRJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkNPX09QVElNSVpFRJRqDY8AAHSUjBJpbnNwZWN0LkNPX1ZBUkFSR1OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5DT19WQVJBUkdTlGoNjwAAdJSMFmluc3BlY3QuQ09fVkFSS0VZV09SRFOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5DT19WQVJLRVlXT1JEU5RqDY8AAHSUjBZpby5ERUZBVUxUX0JVRkZFUl9TSVpFlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5ERUZBVUxUX0JVRkZFUl9TSVpFlGoNjwAAdJSMDmtleXdvcmQua3dsaXN0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkva2V5d29yZC5odG1sI2tleXdvcmQua3dsaXN0lGoNjwAAdJSMB2xpY2Vuc2WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25zdGFudHMuaHRtbCNsaWNlbnNllGoNjwAAdJSMEWxvY2FsZS5BTFRfRElHSVRTlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkFMVF9ESUdJVFOUag2PAAB0lIwPbG9jYWxlLkNIQVJfTUFYlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkNIQVJfTUFYlGoNjwAAdJSMDmxvY2FsZS5DT0RFU0VUlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkNPREVTRVSUag2PAAB0lIwPbG9jYWxlLkNSTkNZU1RSlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkNSTkNZU1RSlGoNjwAAdJSMDGxvY2FsZS5EX0ZNVJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5EX0ZNVJRqDY8AAHSUjA5sb2NhbGUuRF9UX0ZNVJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5EX1RfRk1UlGoNjwAAdJSMCmxvY2FsZS5FUkGUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuRVJBlGoNjwAAdJSMEGxvY2FsZS5FUkFfRF9GTVSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuRVJBX0RfRk1UlGoNjwAAdJSMEmxvY2FsZS5FUkFfRF9UX0ZNVJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5FUkFfRF9UX0ZNVJRqDY8AAHSUjBBsb2NhbGUuRVJBX1RfRk1UlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkVSQV9UX0ZNVJRqDY8AAHSUjA1sb2NhbGUuTENfQUxMlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX0FMTJRqDY8AAHSUjBFsb2NhbGUuTENfQ09MTEFURZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5MQ19DT0xMQVRFlGoNjwAAdJSMD2xvY2FsZS5MQ19DVFlQRZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5MQ19DVFlQRZRqDY8AAHSUjBJsb2NhbGUuTENfTUVTU0FHRVOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuTENfTUVTU0FHRVOUag2PAAB0lIwSbG9jYWxlLkxDX01PTkVUQVJZlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX01PTkVUQVJZlGoNjwAAdJSMEWxvY2FsZS5MQ19OVU1FUklDlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLkxDX05VTUVSSUOUag2PAAB0lIwObG9jYWxlLkxDX1RJTUWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuTENfVElNRZRqDY8AAHSUjA1sb2NhbGUuTk9FWFBSlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLk5PRVhQUpRqDY8AAHSUjBBsb2NhbGUuUkFESVhDSEFSlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLlJBRElYQ0hBUpRqDY8AAHSUjA5sb2NhbGUuVEhPVVNFUJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5USE9VU0VQlGoNjwAAdJSMDGxvY2FsZS5UX0ZNVJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5UX0ZNVJRqDY8AAHSUjBFsb2NhbGUuVF9GTVRfQU1QTZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5UX0ZNVF9BTVBNlGoNjwAAdJSMDmxvY2FsZS5ZRVNFWFBSlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLllFU0VYUFKUag2PAAB0lIwPbWFyc2hhbC52ZXJzaW9ulChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFyc2hhbC5odG1sI21hcnNoYWwudmVyc2lvbpRqDY8AAHSUjAZtYXRoLmWUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5llGoNjwAAdJSMCG1hdGguaW5mlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGguaW5mlGoNjwAAdJSMCG1hdGgubmFulChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGgubmFulGoNjwAAdJSMB21hdGgucGmUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5waZRqDY8AAHSUjAhtYXRoLnRhdZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnRhdZRqDY8AAHSUjBZtaW1ldHlwZXMuY29tbW9uX3R5cGVzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLmNvbW1vbl90eXBlc5RqDY8AAHSUjBdtaW1ldHlwZXMuZW5jb2RpbmdzX21hcJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy5lbmNvZGluZ3NfbWFwlGoNjwAAdJSMEG1pbWV0eXBlcy5pbml0ZWSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuaW5pdGVklGoNjwAAdJSMFG1pbWV0eXBlcy5rbm93bmZpbGVzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLmtub3duZmlsZXOUag2PAAB0lIwUbWltZXR5cGVzLnN1ZmZpeF9tYXCUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuc3VmZml4X21hcJRqDY8AAHSUjBNtaW1ldHlwZXMudHlwZXNfbWFwlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLnR5cGVzX21hcJRqDY8AAHSUjBJtbWFwLk1BRFZfQVVUT1NZTkOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX0FVVE9TWU5DlGoNjwAAdJSMDm1tYXAuTUFEVl9DT1JFlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAuTUFEVl9DT1JFlGoNjwAAdJSMEG1tYXAuTUFEVl9ET0RVTVCUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX0RPRFVNUJRqDY8AAHSUjBBtbWFwLk1BRFZfRE9GT1JLlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAuTUFEVl9ET0ZPUkuUag2PAAB0lIwSbW1hcC5NQURWX0RPTlREVU1QlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAuTUFEVl9ET05URFVNUJRqDY8AAHSUjBJtbWFwLk1BRFZfRE9OVEZPUkuUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX0RPTlRGT1JLlGoNjwAAdJSMEm1tYXAuTUFEVl9ET05UTkVFRJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLk1BRFZfRE9OVE5FRUSUag2PAAB0lIwObW1hcC5NQURWX0ZSRUWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX0ZSRUWUag2PAAB0lIwSbW1hcC5NQURWX0hVR0VQQUdFlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAuTUFEVl9IVUdFUEFHRZRqDY8AAHSUjBJtbWFwLk1BRFZfSFdQT0lTT06UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX0hXUE9JU09OlGoNjwAAdJSME21tYXAuTUFEVl9NRVJHRUFCTEWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX01FUkdFQUJMRZRqDY8AAHSUjBBtbWFwLk1BRFZfTk9DT1JFlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAuTUFEVl9OT0NPUkWUag2PAAB0lIwUbW1hcC5NQURWX05PSFVHRVBBR0WUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX05PSFVHRVBBR0WUag2PAAB0lIwQbW1hcC5NQURWX05PUk1BTJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLk1BRFZfTk9STUFMlGoNjwAAdJSMEG1tYXAuTUFEVl9OT1NZTkOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX05PU1lOQ5RqDY8AAHSUjBFtbWFwLk1BRFZfUFJPVEVDVJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLk1BRFZfUFJPVEVDVJRqDY8AAHSUjBBtbWFwLk1BRFZfUkFORE9NlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAuTUFEVl9SQU5ET02Uag2PAAB0lIwQbW1hcC5NQURWX1JFTU9WRZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLk1BRFZfUkVNT1ZFlGoNjwAAdJSMFG1tYXAuTUFEVl9TRVFVRU5USUFMlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1sI21tYXAuTUFEVl9TRVFVRU5USUFMlGoNjwAAdJSMFm1tYXAuTUFEVl9TT0ZUX09GRkxJTkWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX1NPRlRfT0ZGTElORZRqDY8AAHSUjBVtbWFwLk1BRFZfVU5NRVJHRUFCTEWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5NQURWX1VOTUVSR0VBQkxFlGoNjwAAdJSMEm1tYXAuTUFEVl9XSUxMTkVFRJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtbWFwLk1BRFZfV0lMTE5FRUSUag2PAAB0lIwNbXNpbGliLnNjaGVtYZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5zY2hlbWGUag2PAAB0lIwPbXNpbGliLnNlcXVlbmNllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLnNlcXVlbmNllGoNjwAAdJSMC21zaWxpYi50ZXh0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLnRleHSUag2PAAB0lIwObXN2Y3J0LkxLX0xPQ0uUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuTEtfTE9DS5RqDY8AAHSUjA9tc3ZjcnQuTEtfTkJMQ0uUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuTEtfTkJMQ0uUag2PAAB0lIwQbXN2Y3J0LkxLX05CUkxDS5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5MS19OQlJMQ0uUag2PAAB0lIwObXN2Y3J0LkxLX1JMQ0uUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuTEtfUkxDS5RqDY8AAHSUjA9tc3ZjcnQuTEtfVU5MQ0uUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuTEtfVU5MQ0uUag2PAAB0lIwQb2JqZWN0Ll9fc2xvdHNfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjb2JqZWN0Ll9fc2xvdHNfX5RqDY8AAHSUjBBvcy5DTERfQ09OVElOVUVElChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5DTERfQ09OVElOVUVElGoNjwAAdJSMDW9zLkNMRF9EVU1QRUSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkNMRF9EVU1QRUSUag2PAAB0lIwNb3MuQ0xEX0VYSVRFRJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuQ0xEX0VYSVRFRJRqDY8AAHSUjA5vcy5DTERfVFJBUFBFRJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuQ0xEX1RSQVBQRUSUag2PAAB0lIwPb3MuRVhfQ0FOVENSRUFUlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9DQU5UQ1JFQVSUag2PAAB0lIwMb3MuRVhfQ09ORklHlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9DT05GSUeUag2PAAB0lIwNb3MuRVhfREFUQUVSUpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRVhfREFUQUVSUpRqDY8AAHSUjAtvcy5FWF9JT0VSUpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRVhfSU9FUlKUag2PAAB0lIwMb3MuRVhfTk9IT1NUlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9OT0hPU1SUag2PAAB0lIwNb3MuRVhfTk9JTlBVVJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRVhfTk9JTlBVVJRqDY8AAHSUjAxvcy5FWF9OT1BFUk2UKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkVYX05PUEVSTZRqDY8AAHSUjA5vcy5FWF9OT1RGT1VORJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRVhfTk9URk9VTkSUag2PAAB0lIwMb3MuRVhfTk9VU0VSlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9OT1VTRVKUag2PAAB0lIwIb3MuRVhfT0uUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkVYX09LlGoNjwAAdJSMC29zLkVYX09TRVJSlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9PU0VSUpRqDY8AAHSUjAxvcy5FWF9PU0ZJTEWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkVYX09TRklMRZRqDY8AAHSUjA5vcy5FWF9QUk9UT0NPTJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRVhfUFJPVE9DT0yUag2PAAB0lIwOb3MuRVhfU09GVFdBUkWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkVYX1NPRlRXQVJFlGoNjwAAdJSMDm9zLkVYX1RFTVBGQUlMlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5FWF9URU1QRkFJTJRqDY8AAHSUjBFvcy5FWF9VTkFWQUlMQUJMRZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRVhfVU5BVkFJTEFCTEWUag2PAAB0lIwLb3MuRVhfVVNBR0WUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkVYX1VTQUdFlGoNjwAAdJSMCW9zLkZfTE9DS5QoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRl9MT0NLlGoNjwAAdJSMB29zLkZfT0uUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkZfT0uUag2PAAB0lIwJb3MuRl9URVNUlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5GX1RFU1SUag2PAAB0lIwKb3MuRl9UTE9DS5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuRl9UTE9DS5RqDY8AAHSUjApvcy5GX1VMT0NLlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5GX1VMT0NLlGoNjwAAdJSMEG9zLkdSTkRfTk9OQkxPQ0uUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkdSTkRfTk9OQkxPQ0uUag2PAAB0lIwOb3MuR1JORF9SQU5ET02UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkdSTkRfUkFORE9NlGoNjwAAdJSMFG9zLk1GRF9BTExPV19TRUFMSU5HlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5NRkRfQUxMT1dfU0VBTElOR5RqDY8AAHSUjA5vcy5NRkRfQ0xPRVhFQ5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuTUZEX0NMT0VYRUOUag2PAAB0lIwOb3MuTUZEX0hVR0VUTEKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk1GRF9IVUdFVExClGoNjwAAdJSMEG9zLk1GRF9IVUdFXzE2R0KUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk1GRF9IVUdFXzE2R0KUag2PAAB0lIwQb3MuTUZEX0hVR0VfMTZNQpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuTUZEX0hVR0VfMTZNQpRqDY8AAHSUjA9vcy5NRkRfSFVHRV8xR0KUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk1GRF9IVUdFXzFHQpRqDY8AAHSUjA9vcy5NRkRfSFVHRV8xTUKUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk1GRF9IVUdFXzFNQpRqDY8AAHSUjBFvcy5NRkRfSFVHRV8yNTZNQpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuTUZEX0hVR0VfMjU2TUKUag2PAAB0lIwPb3MuTUZEX0hVR0VfMkdClChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5NRkRfSFVHRV8yR0KUag2PAAB0lIwPb3MuTUZEX0hVR0VfMk1ClChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5NRkRfSFVHRV8yTUKUag2PAAB0lIwQb3MuTUZEX0hVR0VfMzJNQpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuTUZEX0hVR0VfMzJNQpRqDY8AAHSUjBFvcy5NRkRfSFVHRV81MTJLQpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuTUZEX0hVR0VfNTEyS0KUag2PAAB0lIwRb3MuTUZEX0hVR0VfNTEyTUKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk1GRF9IVUdFXzUxMk1ClGoNjwAAdJSMEG9zLk1GRF9IVUdFXzY0S0KUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk1GRF9IVUdFXzY0S0KUag2PAAB0lIwPb3MuTUZEX0hVR0VfOE1ClChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5NRkRfSFVHRV84TUKUag2PAAB0lIwQb3MuTUZEX0hVR0VfTUFTS5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuTUZEX0hVR0VfTUFTS5RqDY8AAHSUjBFvcy5NRkRfSFVHRV9TSElGVJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuTUZEX0hVR0VfU0hJRlSUag2PAAB0lIwLb3MuT19BUFBFTkSUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fQVBQRU5ElGoNjwAAdJSMCm9zLk9fQVNZTkOUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fQVNZTkOUag2PAAB0lIwLb3MuT19CSU5BUlmUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fQklOQVJZlGoNjwAAdJSMDG9zLk9fQ0xPRVhFQ5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuT19DTE9FWEVDlGoNjwAAdJSMCm9zLk9fQ1JFQVSUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fQ1JFQVSUag2PAAB0lIwLb3MuT19ESVJFQ1SUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fRElSRUNUlGoNjwAAdJSMDm9zLk9fRElSRUNUT1JZlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0RJUkVDVE9SWZRqDY8AAHSUjApvcy5PX0RTWU5DlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0RTWU5DlGoNjwAAdJSMCW9zLk9fRVhDTJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuT19FWENMlGoNjwAAdJSMC29zLk9fRVhMT0NLlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX0VYTE9DS5RqDY8AAHSUjAtvcy5PX05ERUxBWZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuT19OREVMQVmUag2PAAB0lIwMb3MuT19OT0FUSU1FlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX05PQVRJTUWUag2PAAB0lIwLb3MuT19OT0NUVFmUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fTk9DVFRZlGoNjwAAdJSMDW9zLk9fTk9GT0xMT1eUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fTk9GT0xMT1eUag2PAAB0lIwOb3MuT19OT0lOSEVSSVSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fTk9JTkhFUklUlGoNjwAAdJSMDW9zLk9fTk9OQkxPQ0uUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fTk9OQkxPQ0uUag2PAAB0lIwJb3MuT19QQVRIlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1BBVEiUag2PAAB0lIwLb3MuT19SQU5ET02UKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fUkFORE9NlGoNjwAAdJSMC29zLk9fUkRPTkxZlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1JET05MWZRqDY8AAHSUjAlvcy5PX1JEV1KUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fUkRXUpRqDY8AAHSUjApvcy5PX1JTWU5DlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1JTWU5DlGoNjwAAdJSMD29zLk9fU0VRVUVOVElBTJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuT19TRVFVRU5USUFMlGoNjwAAdJSMC29zLk9fU0hMT0NLlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1NITE9DS5RqDY8AAHSUjBBvcy5PX1NIT1JUX0xJVkVElChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1NIT1JUX0xJVkVElGoNjwAAdJSMCW9zLk9fU1lOQ5QoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuT19TWU5DlGoNjwAAdJSMDm9zLk9fVEVNUE9SQVJZlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1RFTVBPUkFSWZRqDY8AAHSUjAlvcy5PX1RFWFSUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fVEVYVJRqDY8AAHSUjAxvcy5PX1RNUEZJTEWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLk9fVE1QRklMRZRqDY8AAHSUjApvcy5PX1RSVU5DlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1RSVU5DlGoNjwAAdJSMC29zLk9fV1JPTkxZlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5PX1dST05MWZRqDY8AAHSUjBZvcy5QT1NJWF9GQURWX0RPTlRORUVElChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5QT1NJWF9GQURWX0RPTlRORUVElGoNjwAAdJSMFW9zLlBPU0lYX0ZBRFZfTk9SRVVTRZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUE9TSVhfRkFEVl9OT1JFVVNFlGoNjwAAdJSMFG9zLlBPU0lYX0ZBRFZfTk9STUFMlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5QT1NJWF9GQURWX05PUk1BTJRqDY8AAHSUjBRvcy5QT1NJWF9GQURWX1JBTkRPTZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUE9TSVhfRkFEVl9SQU5ET02Uag2PAAB0lIwYb3MuUE9TSVhfRkFEVl9TRVFVRU5USUFMlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5QT1NJWF9GQURWX1NFUVVFTlRJQUyUag2PAAB0lIwWb3MuUE9TSVhfRkFEVl9XSUxMTkVFRJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUE9TSVhfRkFEVl9XSUxMTkVFRJRqDY8AAHSUjBRvcy5QT1NJWF9TUEFXTl9DTE9TRZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUE9TSVhfU1BBV05fQ0xPU0WUag2PAAB0lIwTb3MuUE9TSVhfU1BBV05fRFVQMpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUE9TSVhfU1BBV05fRFVQMpRqDY8AAHSUjBNvcy5QT1NJWF9TUEFXTl9PUEVOlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5QT1NJWF9TUEFXTl9PUEVOlGoNjwAAdJSMDG9zLlBSSU9fUEdSUJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUFJJT19QR1JQlGoNjwAAdJSMD29zLlBSSU9fUFJPQ0VTU5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUFJJT19QUk9DRVNTlGoNjwAAdJSMDG9zLlBSSU9fVVNFUpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUFJJT19VU0VSlGoNjwAAdJSMCG9zLlBfQUxMlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5QX0FMTJRqDY8AAHSUjAtvcy5QX0RFVEFDSJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUF9ERVRBQ0iUag2PAAB0lIwLb3MuUF9OT1dBSVSUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlBfTk9XQUlUlGoNjwAAdJSMDG9zLlBfTk9XQUlUT5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUF9OT1dBSVRPlGoNjwAAdJSMDG9zLlBfT1ZFUkxBWZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUF9PVkVSTEFZlGoNjwAAdJSMCW9zLlBfUEdJRJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuUF9QR0lElGoNjwAAdJSMCG9zLlBfUElElChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5QX1BJRJRqDY8AAHSUjAlvcy5QX1dBSVSUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlBfV0FJVJRqDY8AAHSUjBBvcy5SVExEX0RFRVBCSU5ElChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5SVExEX0RFRVBCSU5ElGoNjwAAdJSMDm9zLlJUTERfR0xPQkFMlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5SVExEX0dMT0JBTJRqDY8AAHSUjAxvcy5SVExEX0xBWlmUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlJUTERfTEFaWZRqDY8AAHSUjA1vcy5SVExEX0xPQ0FMlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5SVExEX0xPQ0FMlGoNjwAAdJSMEG9zLlJUTERfTk9ERUxFVEWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlJUTERfTk9ERUxFVEWUag2PAAB0lIwOb3MuUlRMRF9OT0xPQUSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlJUTERfTk9MT0FElGoNjwAAdJSMC29zLlJUTERfTk9XlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5SVExEX05PV5RqDY8AAHSUjAxvcy5SV0ZfRFNZTkOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlJXRl9EU1lOQ5RqDY8AAHSUjAxvcy5SV0ZfSElQUkmUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlJXRl9ISVBSSZRqDY8AAHSUjA1vcy5SV0ZfTk9XQUlUlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5SV0ZfTk9XQUlUlGoNjwAAdJSMC29zLlJXRl9TWU5DlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5SV0ZfU1lOQ5RqDY8AAHSUjAdvcy5SX09LlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5SX09LlGoNjwAAdJSMDm9zLlNDSEVEX0JBVENIlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5TQ0hFRF9CQVRDSJRqDY8AAHSUjA1vcy5TQ0hFRF9GSUZPlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5TQ0hFRF9GSUZPlGoNjwAAdJSMDW9zLlNDSEVEX0lETEWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlNDSEVEX0lETEWUag2PAAB0lIwOb3MuU0NIRURfT1RIRVKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlNDSEVEX09USEVSlGoNjwAAdJSMFm9zLlNDSEVEX1JFU0VUX09OX0ZPUkuUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlNDSEVEX1JFU0VUX09OX0ZPUkuUag2PAAB0lIwLb3MuU0NIRURfUlKUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlNDSEVEX1JSlGoNjwAAdJSMEW9zLlNDSEVEX1NQT1JBRElDlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5TQ0hFRF9TUE9SQURJQ5RqDY8AAHSUjAtvcy5TRUVLX0NVUpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuU0VFS19DVVKUag2PAAB0lIwLb3MuU0VFS19FTkSUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLlNFRUtfRU5ElGoNjwAAdJSMC29zLlNFRUtfU0VUlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5TRUVLX1NFVJRqDY8AAHSUjA1vcy5TRl9NTk9XQUlUlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5TRl9NTk9XQUlUlGoNjwAAdJSMDm9zLlNGX05PRElTS0lPlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5TRl9OT0RJU0tJT5RqDY8AAHSUjApvcy5TRl9TWU5DlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5TRl9TWU5DlGoNjwAAdJSMDW9zLldDT05USU5VRUSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLldDT05USU5VRUSUag2PAAB0lIwKb3MuV0VYSVRFRJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuV0VYSVRFRJRqDY8AAHSUjApvcy5XTk9IQU5HlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5XTk9IQU5HlGoNjwAAdJSMCm9zLldOT1dBSVSUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLldOT1dBSVSUag2PAAB0lIwLb3MuV1NUT1BQRUSUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLldTVE9QUEVElGoNjwAAdJSMDG9zLldVTlRSQUNFRJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuV1VOVFJBQ0VElGoNjwAAdJSMB29zLldfT0uUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLldfT0uUag2PAAB0lIwPb3MuWEFUVFJfQ1JFQVRFlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5YQVRUUl9DUkVBVEWUag2PAAB0lIwQb3MuWEFUVFJfUkVQTEFDRZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuWEFUVFJfUkVQTEFDRZRqDY8AAHSUjBFvcy5YQVRUUl9TSVpFX01BWJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuWEFUVFJfU0laRV9NQViUag2PAAB0lIwHb3MuWF9PS5QoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuWF9PS5RqDY8AAHSUjAlvcy5hbHRzZXCUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmFsdHNlcJRqDY8AAHSUjBBvcy5jb25mc3RyX25hbWVzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5jb25mc3RyX25hbWVzlGoNjwAAdJSMCW9zLmN1cmRpcpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuY3VyZGlylGoNjwAAdJSMCm9zLmRlZnBhdGiUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmRlZnBhdGiUag2PAAB0lIwKb3MuZGV2bnVsbJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZGV2bnVsbJRqDY8AAHSUjApvcy5lbnZpcm9ulChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5lbnZpcm9ulGoNjwAAdJSMC29zLmVudmlyb25ilChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5lbnZpcm9uYpRqDY8AAHSUjAlvcy5leHRzZXCUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmV4dHNlcJRqDY8AAHSUjApvcy5saW5lc2VwlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5saW5lc2VwlGoNjwAAdJSMB29zLm5hbWWUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLm5hbWWUag2PAAB0lIwJb3MucGFyZGlylChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wYXJkaXKUag2PAAB0lIwib3MucGF0aC5zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lc5QoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzlGoNjwAAdJSMEW9zLnBhdGhjb25mX25hbWVzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wYXRoY29uZl9uYW1lc5RqDY8AAHSUjApvcy5wYXRoc2VwlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wYXRoc2VwlGoNjwAAdJSMBm9zLnNlcJQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2VwlGoNjwAAdJSMGW9zLnN1cHBvcnRzX2J5dGVzX2Vudmlyb26UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN1cHBvcnRzX2J5dGVzX2Vudmlyb26Uag2PAAB0lIwSb3Muc3VwcG9ydHNfZGlyX2ZklChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdXBwb3J0c19kaXJfZmSUag2PAAB0lIwZb3Muc3VwcG9ydHNfZWZmZWN0aXZlX2lkc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3VwcG9ydHNfZWZmZWN0aXZlX2lkc5RqDY8AAHSUjA5vcy5zdXBwb3J0c19mZJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3VwcG9ydHNfZmSUag2PAAB0lIwbb3Muc3VwcG9ydHNfZm9sbG93X3N5bWxpbmtzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zdXBwb3J0c19mb2xsb3dfc3ltbGlua3OUag2PAAB0lIwQb3Muc3lzY29uZl9uYW1lc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3lzY29uZl9uYW1lc5RqDY8AAHSUjA1wYXJzZXIuU1RUeXBllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLlNUVHlwZZRqDY8AAHSUjBdwYXRobGliLlB1cmVQYXRoLmFuY2hvcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlB1cmVQYXRoLmFuY2hvcpRqDY8AAHSUjBZwYXRobGliLlB1cmVQYXRoLmRyaXZllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUHVyZVBhdGguZHJpdmWUag2PAAB0lIwVcGF0aGxpYi5QdXJlUGF0aC5uYW1llChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUHVyZVBhdGgubmFtZZRqDY8AAHSUjBdwYXRobGliLlB1cmVQYXRoLnBhcmVudJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlB1cmVQYXRoLnBhcmVudJRqDY8AAHSUjBhwYXRobGliLlB1cmVQYXRoLnBhcmVudHOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QdXJlUGF0aC5wYXJlbnRzlGoNjwAAdJSMFnBhdGhsaWIuUHVyZVBhdGgucGFydHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QdXJlUGF0aC5wYXJ0c5RqDY8AAHSUjBVwYXRobGliLlB1cmVQYXRoLnJvb3SUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QdXJlUGF0aC5yb290lGoNjwAAdJSMFXBhdGhsaWIuUHVyZVBhdGguc3RlbZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlB1cmVQYXRoLnN0ZW2Uag2PAAB0lIwXcGF0aGxpYi5QdXJlUGF0aC5zdWZmaXiUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWwjcGF0aGxpYi5QdXJlUGF0aC5zdWZmaXiUag2PAAB0lIwZcGF0aGxpYi5QdXJlUGF0aC5zdWZmaXhlc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlB1cmVQYXRoLnN1ZmZpeGVzlGoNjwAAdJSMF3BpY2tsZS5ERUZBVUxUX1BST1RPQ09MlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLkRFRkFVTFRfUFJPVE9DT0yUag2PAAB0lIwXcGlja2xlLkhJR0hFU1RfUFJPVE9DT0yUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuSElHSEVTVF9QUk9UT0NPTJRqDY8AAHSUjBNwbGlzdGxpYi5GTVRfQklOQVJZlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNwbGlzdGxpYi5GTVRfQklOQVJZlGoNjwAAdJSMEHBsaXN0bGliLkZNVF9YTUyUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wbGlzdGxpYi5odG1sI3BsaXN0bGliLkZNVF9YTUyUag2PAAB0lIwNcG9zaXguZW52aXJvbpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Bvc2l4Lmh0bWwjcG9zaXguZW52aXJvbpRqDY8AAHSUjARxdWl0lChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjcXVpdJRqDY8AAHSUjARyZS5BlChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5BlGoNjwAAdJSMCHJlLkFTQ0lJlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5BU0NJSZRqDY8AAHSUjAhyZS5ERUJVR5QoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuREVCVUeUag2PAAB0lIwJcmUuRE9UQUxMlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5ET1RBTEyUag2PAAB0lIwEcmUuSZQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuSZRqDY8AAHSUjA1yZS5JR05PUkVDQVNFlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5JR05PUkVDQVNFlGoNjwAAdJSMBHJlLkyUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLkyUag2PAAB0lIwJcmUuTE9DQUxFlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5MT0NBTEWUag2PAAB0lIwEcmUuTZQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuTZRqDY8AAHSUjAxyZS5NVUxUSUxJTkWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLk1VTFRJTElORZRqDY8AAHSUjARyZS5TlChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5TlGoNjwAAdJSMCnJlLlZFUkJPU0WUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLlZFUkJPU0WUag2PAAB0lIwEcmUuWJQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuWJRqDY8AAHSUjA1yZXBybGliLmFSZXBylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3JlcHJsaWIuYVJlcHKUag2PAAB0lIwScmVzb3VyY2UuUkxJTUlUX0FTlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfQVOUag2PAAB0lIwUcmVzb3VyY2UuUkxJTUlUX0NPUkWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9DT1JFlGoNjwAAdJSME3Jlc291cmNlLlJMSU1JVF9DUFWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9DUFWUag2PAAB0lIwUcmVzb3VyY2UuUkxJTUlUX0RBVEGUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9EQVRBlGoNjwAAdJSMFXJlc291cmNlLlJMSU1JVF9GU0laRZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX0ZTSVpFlGoNjwAAdJSMF3Jlc291cmNlLlJMSU1JVF9NRU1MT0NLlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfTUVNTE9DS5RqDY8AAHSUjBhyZXNvdXJjZS5STElNSVRfTVNHUVVFVUWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9NU0dRVUVVRZRqDY8AAHSUjBRyZXNvdXJjZS5STElNSVRfTklDRZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX05JQ0WUag2PAAB0lIwWcmVzb3VyY2UuUkxJTUlUX05PRklMRZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX05PRklMRZRqDY8AAHSUjBVyZXNvdXJjZS5STElNSVRfTlBST0OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9OUFJPQ5RqDY8AAHSUjBRyZXNvdXJjZS5STElNSVRfTlBUU5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX05QVFOUag2PAAB0lIwVcmVzb3VyY2UuUkxJTUlUX09GSUxFlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfT0ZJTEWUag2PAAB0lIwTcmVzb3VyY2UuUkxJTUlUX1JTU5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX1JTU5RqDY8AAHSUjBZyZXNvdXJjZS5STElNSVRfUlRQUklPlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfUlRQUklPlGoNjwAAdJSMFnJlc291cmNlLlJMSU1JVF9SVFRJTUWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9SVFRJTUWUag2PAAB0lIwWcmVzb3VyY2UuUkxJTUlUX1NCU0laRZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX1NCU0laRZRqDY8AAHSUjBpyZXNvdXJjZS5STElNSVRfU0lHUEVORElOR5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUkxJTUlUX1NJR1BFTkRJTkeUag2PAAB0lIwVcmVzb3VyY2UuUkxJTUlUX1NUQUNLlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfU1RBQ0uUag2PAAB0lIwUcmVzb3VyY2UuUkxJTUlUX1NXQVCUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJMSU1JVF9TV0FQlGoNjwAAdJSMFHJlc291cmNlLlJMSU1JVF9WTUVNlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNSVRfVk1FTZRqDY8AAHSUjBZyZXNvdXJjZS5STElNX0lORklOSVRZlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5STElNX0lORklOSVRZlGoNjwAAdJSMFHJlc291cmNlLlJVU0FHRV9CT1RIlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5SVVNBR0VfQk9USJRqDY8AAHSUjBhyZXNvdXJjZS5SVVNBR0VfQ0hJTERSRU6UKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLlJVU0FHRV9DSElMRFJFTpRqDY8AAHSUjBRyZXNvdXJjZS5SVVNBR0VfU0VMRpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUlVTQUdFX1NFTEaUag2PAAB0lIwWcmVzb3VyY2UuUlVTQUdFX1RIUkVBRJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuUlVTQUdFX1RIUkVBRJRqDY8AAHSUjBdzaWduYWwuQ1RSTF9CUkVBS19FVkVOVJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5DVFJMX0JSRUFLX0VWRU5UlGoNjwAAdJSME3NpZ25hbC5DVFJMX0NfRVZFTlSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuQ1RSTF9DX0VWRU5UlGoNjwAAdJSMEnNpZ25hbC5JVElNRVJfUFJPRpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5JVElNRVJfUFJPRpRqDY8AAHSUjBJzaWduYWwuSVRJTUVSX1JFQUyUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuSVRJTUVSX1JFQUyUag2PAAB0lIwVc2lnbmFsLklUSU1FUl9WSVJUVUFMlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLklUSU1FUl9WSVJUVUFMlGoNjwAAdJSMC3NpZ25hbC5OU0lHlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLk5TSUeUag2PAAB0lIwOc2lnbmFsLlNJR0FCUlSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHQUJSVJRqDY8AAHSUjA5zaWduYWwuU0lHQUxSTZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdBTFJNlGoNjwAAdJSMD3NpZ25hbC5TSUdCUkVBS5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdCUkVBS5RqDY8AAHSUjA1zaWduYWwuU0lHQlVTlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR0JVU5RqDY8AAHSUjA5zaWduYWwuU0lHQ0hMRJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdDSExElGoNjwAAdJSMDXNpZ25hbC5TSUdDTESUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHQ0xElGoNjwAAdJSMDnNpZ25hbC5TSUdDT05UlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR0NPTlSUag2PAAB0lIwNc2lnbmFsLlNJR0ZQRZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdGUEWUag2PAAB0lIwNc2lnbmFsLlNJR0hVUJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdIVVCUag2PAAB0lJUGAAEAAAAAAIwNc2lnbmFsLlNJR0lMTJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdJTEyUag2PAAB0lIwNc2lnbmFsLlNJR0lOVJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdJTlSUag2PAAB0lIwOc2lnbmFsLlNJR0tJTEyUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHS0lMTJRqDY8AAHSUjA5zaWduYWwuU0lHUElQRZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdQSVBFlGoNjwAAdJSMDnNpZ25hbC5TSUdTRUdWlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR1NFR1aUag2PAAB0lIwOc2lnbmFsLlNJR1RFUk2UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHVEVSTZRqDY8AAHSUjA5zaWduYWwuU0lHVVNSMZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5TSUdVU1IxlGoNjwAAdJSMDnNpZ25hbC5TSUdVU1IylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR1VTUjKUag2PAAB0lIwPc2lnbmFsLlNJR1dJTkNIlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR1dJTkNIlGoNjwAAdJSMEHNpZ25hbC5TSUdfQkxPQ0uUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHX0JMT0NLlGoNjwAAdJSMDnNpZ25hbC5TSUdfREZMlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR19ERkyUag2PAAB0lIwOc2lnbmFsLlNJR19JR06UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHX0lHTpRqDY8AAHSUjBJzaWduYWwuU0lHX1NFVE1BU0uUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuU0lHX1NFVE1BU0uUag2PAAB0lIwSc2lnbmFsLlNJR19VTkJMT0NLlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLlNJR19VTkJMT0NLlGoNjwAAdJSMFXNpdGUuRU5BQkxFX1VTRVJfU0lURZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLkVOQUJMRV9VU0VSX1NJVEWUag2PAAB0lIwNc2l0ZS5QUkVGSVhFU5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLlBSRUZJWEVTlGoNjwAAdJSMDnNpdGUuVVNFUl9CQVNFlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2l0ZS5odG1sI3NpdGUuVVNFUl9CQVNFlGoNjwAAdJSMDnNpdGUuVVNFUl9TSVRFlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2l0ZS5odG1sI3NpdGUuVVNFUl9TSVRFlGoNjwAAdJSMDXNvY2tldC5BRl9BTEeUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuQUZfQUxHlGoNjwAAdJSMDXNvY2tldC5BRl9DQU6UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuQUZfQ0FOlGoNjwAAdJSMDnNvY2tldC5BRl9JTkVUlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkFGX0lORVSUag2PAAB0lIwPc29ja2V0LkFGX0lORVQ2lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkFGX0lORVQ2lGoNjwAAdJSMDnNvY2tldC5BRl9MSU5LlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkFGX0xJTkuUag2PAAB0lIwQc29ja2V0LkFGX1BBQ0tFVJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5BRl9QQUNLRVSUag2PAAB0lIwRc29ja2V0LkFGX1FJUENSVFKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuQUZfUUlQQ1JUUpRqDY8AAHSUjA1zb2NrZXQuQUZfUkRTlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkFGX1JEU5RqDY8AAHSUjA5zb2NrZXQuQUZfVU5JWJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5BRl9VTklYlGoNjwAAdJSMD3NvY2tldC5BRl9WU09DS5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5BRl9WU09DS5RqDY8AAHSUjBFzb2NrZXQuQkRBRERSX0FOWZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5CREFERFJfQU5ZlGoNjwAAdJSME3NvY2tldC5CREFERFJfTE9DQUyUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuQkRBRERSX0xPQ0FMlGoNjwAAdJSMDnNvY2tldC5DQU5fQkNNlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkNBTl9CQ02Uag2PAAB0lIwQc29ja2V0LkNBTl9JU09UUJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5DQU5fSVNPVFCUag2PAAB0lIwYc29ja2V0LkNBTl9SQVdfRkRfRlJBTUVTlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkNBTl9SQVdfRkRfRlJBTUVTlGoNjwAAdJSME3NvY2tldC5IQ0lfREFUQV9ESVKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuSENJX0RBVEFfRElSlGoNjwAAdJSMEXNvY2tldC5IQ0lfRklMVEVSlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkhDSV9GSUxURVKUag2PAAB0lIwVc29ja2V0LkhDSV9USU1FX1NUQU1QlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LkhDSV9USU1FX1NUQU1QlGoNjwAAdJSMJXNvY2tldC5JT0NUTF9WTV9TT0NLRVRTX0dFVF9MT0NBTF9DSUSUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuSU9DVExfVk1fU09DS0VUU19HRVRfTE9DQUxfQ0lElGoNjwAAdJSMDXNvY2tldC5QRl9DQU6UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuUEZfQ0FOlGoNjwAAdJSMEHNvY2tldC5QRl9QQUNLRVSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuUEZfUEFDS0VUlGoNjwAAdJSMDXNvY2tldC5QRl9SRFOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuUEZfUkRTlGoNjwAAdJSMGXNvY2tldC5TSU9fS0VFUEFMSVZFX1ZBTFOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU0lPX0tFRVBBTElWRV9WQUxTlGoNjwAAdJSMHXNvY2tldC5TSU9fTE9PUEJBQ0tfRkFTVF9QQVRIlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNJT19MT09QQkFDS19GQVNUX1BBVEiUag2PAAB0lIwRc29ja2V0LlNJT19SQ1ZBTEyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU0lPX1JDVkFMTJRqDY8AAHSUjBNzb2NrZXQuU09DS19DTE9FWEVDlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPQ0tfQ0xPRVhFQ5RqDY8AAHSUjBFzb2NrZXQuU09DS19ER1JBTZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5TT0NLX0RHUkFNlGoNjwAAdJSMFHNvY2tldC5TT0NLX05PTkJMT0NLlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPQ0tfTk9OQkxPQ0uUag2PAAB0lIwPc29ja2V0LlNPQ0tfUkFXlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPQ0tfUkFXlGoNjwAAdJSMD3NvY2tldC5TT0NLX1JETZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5TT0NLX1JETZRqDY8AAHSUjBVzb2NrZXQuU09DS19TRVFQQUNLRVSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU09DS19TRVFQQUNLRVSUag2PAAB0lIwSc29ja2V0LlNPQ0tfU1RSRUFNlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPQ0tfU1RSRUFNlGoNjwAAdJSMDnNvY2tldC5TT0xfQUxHlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPTF9BTEeUag2PAAB0lIwOc29ja2V0LlNPTF9SRFOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuU09MX1JEU5RqDY8AAHSUjBBzb2NrZXQuU09NQVhDT05OlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LlNPTUFYQ09OTpRqDY8AAHSUjBFzb2NrZXQuU29ja2V0VHlwZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5Tb2NrZXRUeXBllGoNjwAAdJSMD3NvY2tldC5oYXNfaXB2NpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5oYXNfaXB2NpRqDY8AAHSUjBZzcWxpdGUzLlBBUlNFX0NPTE5BTUVTlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuUEFSU0VfQ09MTkFNRVOUag2PAAB0lIwXc3FsaXRlMy5QQVJTRV9ERUNMVFlQRVOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5QQVJTRV9ERUNMVFlQRVOUag2PAAB0lIwWc3FsaXRlMy5zcWxpdGVfdmVyc2lvbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLnNxbGl0ZV92ZXJzaW9ulGoNjwAAdJSMG3NxbGl0ZTMuc3FsaXRlX3ZlcnNpb25faW5mb5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLnNxbGl0ZV92ZXJzaW9uX2luZm+Uag2PAAB0lIwPc3FsaXRlMy52ZXJzaW9ulChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMudmVyc2lvbpRqDY8AAHSUjBRzcWxpdGUzLnZlcnNpb25faW5mb5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLnZlcnNpb25faW5mb5RqDY8AAHSUjCdzc2wuQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkWUag2PAAB0lIwkc3NsLkFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SlGoNjwAAdJSMDXNzbC5DRVJUX05PTkWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuQ0VSVF9OT05FlGoNjwAAdJSMEXNzbC5DRVJUX09QVElPTkFMlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkNFUlRfT1BUSU9OQUyUag2PAAB0lIwRc3NsLkNFUlRfUkVRVUlSRUSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuQ0VSVF9SRVFVSVJFRJRqDY8AAHSUjBlzc2wuQ0hBTk5FTF9CSU5ESU5HX1RZUEVTlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkNIQU5ORUxfQklORElOR19UWVBFU5RqDY8AAHSUjAxzc2wuSEFTX0FMUE6UKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX0FMUE6Uag2PAAB0lIwMc3NsLkhBU19FQ0RIlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19FQ0RIlGoNjwAAdJSMH3NzbC5IQVNfTkVWRVJfQ0hFQ0tfQ09NTU9OX05BTUWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX05FVkVSX0NIRUNLX0NPTU1PTl9OQU1FlGoNjwAAdJSMC3NzbC5IQVNfTlBOlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19OUE6Uag2PAAB0lIwLc3NsLkhBU19TTkmUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX1NOSZRqDY8AAHSUjA1zc2wuSEFTX1NTTHYylChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19TU0x2MpRqDY8AAHSUjA1zc2wuSEFTX1NTTHYzlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19TU0x2M5RqDY8AAHSUjA1zc2wuSEFTX1RMU3YxlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19UTFN2MZRqDY8AAHSUjA9zc2wuSEFTX1RMU3YxXzGUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuSEFTX1RMU3YxXzGUag2PAAB0lIwPc3NsLkhBU19UTFN2MV8ylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkhBU19UTFN2MV8ylGoNjwAAdJSMD3NzbC5IQVNfVExTdjFfM5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5IQVNfVExTdjFfM5RqDY8AAHSUjBNzc2wuT1BFTlNTTF9WRVJTSU9OlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QRU5TU0xfVkVSU0lPTpRqDY8AAHSUjBhzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk+UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk+Uag2PAAB0lIwac3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVKUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUpRqDY8AAHSUjApzc2wuT1BfQUxMlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX0FMTJRqDY8AAHSUjB9zc2wuT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRZRqDY8AAHSUjB5zc2wuT1BfRU5BQkxFX01JRERMRUJPWF9DT01QQVSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfRU5BQkxFX01JRERMRUJPWF9DT01QQVSUag2PAAB0lIwVc3NsLk9QX05PX0NPTVBSRVNTSU9OlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX0NPTVBSRVNTSU9OlGoNjwAAdJSMF3NzbC5PUF9OT19SRU5FR09USUFUSU9OlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1JFTkVHT1RJQVRJT06Uag2PAAB0lIwPc3NsLk9QX05PX1NTTHYylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1NTTHYylGoNjwAAdJSMD3NzbC5PUF9OT19TU0x2M5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5PUF9OT19TU0x2M5RqDY8AAHSUjBBzc2wuT1BfTk9fVElDS0VUlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1RJQ0tFVJRqDY8AAHSUjA9zc2wuT1BfTk9fVExTdjGUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfTk9fVExTdjGUag2PAAB0lIwRc3NsLk9QX05PX1RMU3YxXzGUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfTk9fVExTdjFfMZRqDY8AAHSUjBFzc2wuT1BfTk9fVExTdjFfMpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5PUF9OT19UTFN2MV8ylGoNjwAAdJSMEXNzbC5PUF9OT19UTFN2MV8zlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX05PX1RMU3YxXzOUag2PAAB0lIwUc3NsLk9QX1NJTkdMRV9ESF9VU0WUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuT1BfU0lOR0xFX0RIX1VTRZRqDY8AAHSUjBZzc2wuT1BfU0lOR0xFX0VDREhfVVNFlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLk9QX1NJTkdMRV9FQ0RIX1VTRZRqDY8AAHSUjBJzc2wuUFJPVE9DT0xfU1NMdjKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfU1NMdjKUag2PAAB0lIwTc3NsLlBST1RPQ09MX1NTTHYyM5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5QUk9UT0NPTF9TU0x2MjOUag2PAAB0lIwSc3NsLlBST1RPQ09MX1NTTHYzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlBST1RPQ09MX1NTTHYzlGoNjwAAdJSMEHNzbC5QUk9UT0NPTF9UTFOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfVExTlGoNjwAAdJSMF3NzbC5QUk9UT0NPTF9UTFNfQ0xJRU5UlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlBST1RPQ09MX1RMU19DTElFTlSUag2PAAB0lIwXc3NsLlBST1RPQ09MX1RMU19TRVJWRVKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfVExTX1NFUlZFUpRqDY8AAHSUjBJzc2wuUFJPVE9DT0xfVExTdjGUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfVExTdjGUag2PAAB0lIwUc3NsLlBST1RPQ09MX1RMU3YxXzGUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuUFJPVE9DT0xfVExTdjFfMZRqDY8AAHSUjBRzc2wuUFJPVE9DT0xfVExTdjFfMpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5QUk9UT0NPTF9UTFN2MV8ylGoNjwAAdJSMF3NzbC5QdXJwb3NlLkNMSUVOVF9BVVRIlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEiUag2PAAB0lIwXc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEiUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuUHVycG9zZS5TRVJWRVJfQVVUSJRqDY8AAHSUjBpzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5WRVJJRllfQ1JMX0NIRUNLX0NIQUlOlGoNjwAAdJSMGXNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUaUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGlGoNjwAAdJSMEnNzbC5WRVJJRllfREVGQVVMVJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5WRVJJRllfREVGQVVMVJRqDY8AAHSUjBZzc2wuVkVSSUZZX1g1MDlfU1RSSUNUlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlZFUklGWV9YNTA5X1NUUklDVJRqDY8AAHSUjB1zc2wuVkVSSUZZX1g1MDlfVFJVU1RFRF9GSVJTVJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5WRVJJRllfWDUwOV9UUlVTVEVEX0ZJUlNUlGoNjwAAdJSMG3N0YXQuRklMRV9BVFRSSUJVVEVfQVJDSElWRZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LkZJTEVfQVRUUklCVVRFX0FSQ0hJVkWUag2PAAB0lIwec3RhdC5GSUxFX0FUVFJJQlVURV9DT01QUkVTU0VElChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRJRqDY8AAHSUjBpzdGF0LkZJTEVfQVRUUklCVVRFX0RFVklDRZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LkZJTEVfQVRUUklCVVRFX0RFVklDRZRqDY8AAHSUjB1zdGF0LkZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LkZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWZRqDY8AAHSUjB1zdGF0LkZJTEVfQVRUUklCVVRFX0VOQ1JZUFRFRJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LkZJTEVfQVRUUklCVVRFX0VOQ1JZUFRFRJRqDY8AAHSUjBpzdGF0LkZJTEVfQVRUUklCVVRFX0hJRERFTpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LkZJTEVfQVRUUklCVVRFX0hJRERFTpRqDY8AAHSUjCRzdGF0LkZJTEVfQVRUUklCVVRFX0lOVEVHUklUWV9TVFJFQU2UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5GSUxFX0FUVFJJQlVURV9JTlRFR1JJVFlfU1RSRUFNlGoNjwAAdJSMGnN0YXQuRklMRV9BVFRSSUJVVEVfTk9STUFMlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuRklMRV9BVFRSSUJVVEVfTk9STUFMlGoNjwAAdJSMJ3N0YXQuRklMRV9BVFRSSUJVVEVfTk9UX0NPTlRFTlRfSU5ERVhFRJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LkZJTEVfQVRUUklCVVRFX05PVF9DT05URU5UX0lOREVYRUSUag2PAAB0lIwhc3RhdC5GSUxFX0FUVFJJQlVURV9OT19TQ1JVQl9EQVRBlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuRklMRV9BVFRSSUJVVEVfTk9fU0NSVUJfREFUQZRqDY8AAHSUjBtzdGF0LkZJTEVfQVRUUklCVVRFX09GRkxJTkWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5GSUxFX0FUVFJJQlVURV9PRkZMSU5FlGoNjwAAdJSMHHN0YXQuRklMRV9BVFRSSUJVVEVfUkVBRE9OTFmUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5GSUxFX0FUVFJJQlVURV9SRUFET05MWZRqDY8AAHSUjCFzdGF0LkZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5GSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UlGoNjwAAdJSMH3N0YXQuRklMRV9BVFRSSUJVVEVfU1BBUlNFX0ZJTEWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5GSUxFX0FUVFJJQlVURV9TUEFSU0VfRklMRZRqDY8AAHSUjBpzdGF0LkZJTEVfQVRUUklCVVRFX1NZU1RFTZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LkZJTEVfQVRUUklCVVRFX1NZU1RFTZRqDY8AAHSUjB1zdGF0LkZJTEVfQVRUUklCVVRFX1RFTVBPUkFSWZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LkZJTEVfQVRUUklCVVRFX1RFTVBPUkFSWZRqDY8AAHSUjBtzdGF0LkZJTEVfQVRUUklCVVRFX1ZJUlRVQUyUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5GSUxFX0FUVFJJQlVURV9WSVJUVUFMlGoNjwAAdJSMH3N0YXQuSU9fUkVQQVJTRV9UQUdfQVBQRVhFQ0xJTkuUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5JT19SRVBBUlNFX1RBR19BUFBFWEVDTElOS5RqDY8AAHSUjB9zdGF0LklPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuSU9fUkVQQVJTRV9UQUdfTU9VTlRfUE9JTlSUag2PAAB0lIwbc3RhdC5JT19SRVBBUlNFX1RBR19TWU1MSU5LlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuSU9fUkVQQVJTRV9UQUdfU1lNTElOS5RqDY8AAHSUjA5zdGF0LlNGX0FQUEVORJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNGX0FQUEVORJRqDY8AAHSUjBBzdGF0LlNGX0FSQ0hJVkVElChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU0ZfQVJDSElWRUSUag2PAAB0lIwRc3RhdC5TRl9JTU1VVEFCTEWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TRl9JTU1VVEFCTEWUag2PAAB0lIwQc3RhdC5TRl9OT1VOTElOS5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNGX05PVU5MSU5LlGoNjwAAdJSMEHN0YXQuU0ZfU05BUFNIT1SUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TRl9TTkFQU0hPVJRqDY8AAHSUjA1zdGF0LlNUX0FUSU1FlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfQVRJTUWUag2PAAB0lIwNc3RhdC5TVF9DVElNRZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX0NUSU1FlGoNjwAAdJSMC3N0YXQuU1RfREVWlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfREVWlGoNjwAAdJSMC3N0YXQuU1RfR0lElChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfR0lElGoNjwAAdJSMC3N0YXQuU1RfSU5PlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfSU5PlGoNjwAAdJSMDHN0YXQuU1RfTU9ERZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX01PREWUag2PAAB0lIwNc3RhdC5TVF9NVElNRZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNUX01USU1FlGoNjwAAdJSMDXN0YXQuU1RfTkxJTkuUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9OTElOS5RqDY8AAHSUjAxzdGF0LlNUX1NJWkWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TVF9TSVpFlGoNjwAAdJSMC3N0YXQuU1RfVUlElChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU1RfVUlElGoNjwAAdJSMDHN0YXQuU19FTkZNVJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfRU5GTVSUag2PAAB0lIwMc3RhdC5TX0lFWEVDlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRVhFQ5RqDY8AAHSUjAxzdGF0LlNfSUZCTEuUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGQkxLlGoNjwAAdJSMDHN0YXQuU19JRkNIUpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSUZDSFKUag2PAAB0lIwMc3RhdC5TX0lGRElSlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRkRJUpRqDY8AAHSUjA1zdGF0LlNfSUZET09SlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRkRPT1KUag2PAAB0lIwMc3RhdC5TX0lGSUZPlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JRklGT5RqDY8AAHSUjAxzdGF0LlNfSUZMTkuUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGTE5LlGoNjwAAdJSMDXN0YXQuU19JRlBPUlSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGUE9SVJRqDY8AAHSUjAxzdGF0LlNfSUZSRUeUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGUkVHlGoNjwAAdJSMDXN0YXQuU19JRlNPQ0uUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGU09DS5RqDY8AAHSUjAxzdGF0LlNfSUZXSFSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lGV0hUlGoNjwAAdJSMDHN0YXQuU19JUkVBRJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJFQUSUag2PAAB0lIwMc3RhdC5TX0lSR1JQlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JUkdSUJRqDY8AAHSUjAxzdGF0LlNfSVJPVEiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lST1RIlGoNjwAAdJSMDHN0YXQuU19JUlVTUpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJVU1KUag2PAAB0lIwMc3RhdC5TX0lSV1hHlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JUldYR5RqDY8AAHSUjAxzdGF0LlNfSVJXWE+UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lSV1hPlGoNjwAAdJSMDHN0YXQuU19JUldYVZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVJXWFWUag2PAAB0lIwMc3RhdC5TX0lTR0lElChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU0dJRJRqDY8AAHSUjAxzdGF0LlNfSVNVSUSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lTVUlElGoNjwAAdJSMDHN0YXQuU19JU1ZUWJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNWVFiUag2PAAB0lIwMc3RhdC5TX0lXR1JQlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JV0dSUJRqDY8AAHSUjAxzdGF0LlNfSVdPVEiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lXT1RIlGoNjwAAdJSMDXN0YXQuU19JV1JJVEWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lXUklURZRqDY8AAHSUjAxzdGF0LlNfSVdVU1KUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lXVVNSlGoNjwAAdJSMDHN0YXQuU19JWEdSUJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVhHUlCUag2PAAB0lIwMc3RhdC5TX0lYT1RIlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JWE9USJRqDY8AAHSUjAxzdGF0LlNfSVhVU1KUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lYVVNSlGoNjwAAdJSMDnN0YXQuVUZfQVBQRU5ElChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuVUZfQVBQRU5ElGoNjwAAdJSMEnN0YXQuVUZfQ09NUFJFU1NFRJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlVGX0NPTVBSRVNTRUSUag2PAAB0lIwOc3RhdC5VRl9ISURERU6UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5VRl9ISURERU6Uag2PAAB0lIwRc3RhdC5VRl9JTU1VVEFCTEWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5VRl9JTU1VVEFCTEWUag2PAAB0lIwOc3RhdC5VRl9OT0RVTVCUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5VRl9OT0RVTVCUag2PAAB0lIwQc3RhdC5VRl9OT1VOTElOS5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlVGX05PVU5MSU5LlGoNjwAAdJSMDnN0YXQuVUZfT1BBUVVFlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuVUZfT1BBUVVFlGoNjwAAdJSMFHN0cmluZy5hc2NpaV9sZXR0ZXJzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmFzY2lpX2xldHRlcnOUag2PAAB0lIwWc3RyaW5nLmFzY2lpX2xvd2VyY2FzZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5hc2NpaV9sb3dlcmNhc2WUag2PAAB0lIwWc3RyaW5nLmFzY2lpX3VwcGVyY2FzZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5hc2NpaV91cHBlcmNhc2WUag2PAAB0lIwNc3RyaW5nLmRpZ2l0c5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5kaWdpdHOUag2PAAB0lIwQc3RyaW5nLmhleGRpZ2l0c5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5oZXhkaWdpdHOUag2PAAB0lIwQc3RyaW5nLm9jdGRpZ2l0c5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5vY3RkaWdpdHOUag2PAAB0lIwQc3RyaW5nLnByaW50YWJsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3N0cmluZy5wcmludGFibGWUag2PAAB0lIwSc3RyaW5nLnB1bmN0dWF0aW9ulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLnB1bmN0dWF0aW9ulGoNjwAAdJSMEXN0cmluZy53aGl0ZXNwYWNllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLndoaXRlc3BhY2WUag2PAAB0lIwmc3VicHJvY2Vzcy5BQk9WRV9OT1JNQUxfUFJJT1JJVFlfQ0xBU1OUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5BQk9WRV9OT1JNQUxfUFJJT1JJVFlfQ0xBU1OUag2PAAB0lIwmc3VicHJvY2Vzcy5CRUxPV19OT1JNQUxfUFJJT1JJVFlfQ0xBU1OUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5CRUxPV19OT1JNQUxfUFJJT1JJVFlfQ0xBU1OUag2PAAB0lIwkc3VicHJvY2Vzcy5DUkVBVEVfQlJFQUtBV0FZX0ZST01fSk9ClChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuQ1JFQVRFX0JSRUFLQVdBWV9GUk9NX0pPQpRqDY8AAHSUjCRzdWJwcm9jZXNzLkNSRUFURV9ERUZBVUxUX0VSUk9SX01PREWUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5DUkVBVEVfREVGQVVMVF9FUlJPUl9NT0RFlGoNjwAAdJSMHXN1YnByb2Nlc3MuQ1JFQVRFX05FV19DT05TT0xFlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuQ1JFQVRFX05FV19DT05TT0xFlGoNjwAAdJSMI3N1YnByb2Nlc3MuQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQlGoNjwAAdJSMG3N1YnByb2Nlc3MuQ1JFQVRFX05PX1dJTkRPV5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLkNSRUFURV9OT19XSU5ET1eUag2PAAB0lIwbc3VicHJvY2Vzcy5ERVRBQ0hFRF9QUk9DRVNTlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuREVUQUNIRURfUFJPQ0VTU5RqDY8AAHSUjBJzdWJwcm9jZXNzLkRFVk5VTEyUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5ERVZOVUxMlGoNjwAAdJSMHnN1YnByb2Nlc3MuSElHSF9QUklPUklUWV9DTEFTU5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLkhJR0hfUFJJT1JJVFlfQ0xBU1OUag2PAAB0lIwec3VicHJvY2Vzcy5JRExFX1BSSU9SSVRZX0NMQVNTlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuSURMRV9QUklPUklUWV9DTEFTU5RqDY8AAHSUjCBzdWJwcm9jZXNzLk5PUk1BTF9QUklPUklUWV9DTEFTU5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLk5PUk1BTF9QUklPUklUWV9DTEFTU5RqDY8AAHSUjA9zdWJwcm9jZXNzLlBJUEWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5QSVBFlGoNjwAAdJSMInN1YnByb2Nlc3MuUkVBTFRJTUVfUFJJT1JJVFlfQ0xBU1OUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5SRUFMVElNRV9QUklPUklUWV9DTEFTU5RqDY8AAHSUjB9zdWJwcm9jZXNzLlNUQVJURl9VU0VTSE9XV0lORE9XlChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1RBUlRGX1VTRVNIT1dXSU5ET1eUag2PAAB0lIwfc3VicHJvY2Vzcy5TVEFSVEZfVVNFU1RESEFORExFU5QoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJURl9VU0VTVERIQU5ETEVTlGoNjwAAdJSMEXN1YnByb2Nlc3MuU1RET1VUlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1RET1VUlGoNjwAAdJSMG3N1YnByb2Nlc3MuU1REX0VSUk9SX0hBTkRMRZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNURF9FUlJPUl9IQU5ETEWUag2PAAB0lIwbc3VicHJvY2Vzcy5TVERfSU5QVVRfSEFORExFlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1REX0lOUFVUX0hBTkRMRZRqDY8AAHSUjBxzdWJwcm9jZXNzLlNURF9PVVRQVVRfSEFORExFlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1REX09VVFBVVF9IQU5ETEWUag2PAAB0lIwSc3VicHJvY2Vzcy5TV19ISURFlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuU1dfSElERZRqDY8AAHSUjCRzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FEUENNX0c3MjGUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQURQQ01fRzcyMZRqDY8AAHSUjCRzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FEUENNX0c3MjKUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQURQQ01fRzcyMpRqDY8AAHSUjCZzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FEUENNX0c3MjNfM5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIzXzOUag2PAAB0lIwmc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19BRFBDTV9HNzIzXzWUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQURQQ01fRzcyM181lGoNjwAAdJSMIHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfQUxBV184lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0FMQVdfOJRqDY8AAHSUjCBzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0RPVUJMRZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19ET1VCTEWUag2PAAB0lIwfc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19GTE9BVJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19GTE9BVJRqDY8AAHSUjCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8xNpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMTaUag2PAAB0lIwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMjSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzI0lGoNjwAAdJSMI3N1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTElORUFSXzMylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8zMpRqDY8AAHSUjCJzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl84lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5BVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl84lGoNjwAAdJSMIXN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUuQVVESU9fRklMRV9FTkNPRElOR19NVUxBV184lGoNjwAAdJSMFnN1bmF1LkFVRElPX0ZJTEVfTUFHSUOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI3N1bmF1LkFVRElPX0ZJTEVfTUFHSUOUag2PAAB0lIwPc3ltYm9sLnN5bV9uYW1llChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltYm9sLmh0bWwjc3ltYm9sLnN5bV9uYW1llGoNjwAAdJSMFnN5cy5fX2JyZWFrcG9pbnRob29rX1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuX19icmVha3BvaW50aG9va19flGoNjwAAdJSME3N5cy5fX2Rpc3BsYXlob29rX1+UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuX19kaXNwbGF5aG9va19flGoNjwAAdJSMEnN5cy5fX2V4Y2VwdGhvb2tfX5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX2V4Y2VwdGhvb2tfX5RqDY8AAHSUjBdzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX2ludGVyYWN0aXZlaG9va19flGoNjwAAdJSMDnN5cy5fX3N0ZGVycl9flChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLl9fc3RkZXJyX1+Uag2PAAB0lIwNc3lzLl9fc3RkaW5fX5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5fX3N0ZGluX1+Uag2PAAB0lIwOc3lzLl9fc3Rkb3V0X1+UKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuX19zdGRvdXRfX5RqDY8AAHSUjBZzeXMuX191bnJhaXNhYmxlaG9va19flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLl9fdW5yYWlzYWJsZWhvb2tfX5RqDY8AAHSUjA1zeXMuX3hvcHRpb25zlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLl94b3B0aW9uc5RqDY8AAHSUjAxzeXMuYWJpZmxhZ3OUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuYWJpZmxhZ3OUag2PAAB0lIwPc3lzLmFwaV92ZXJzaW9ulChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmFwaV92ZXJzaW9ulGoNjwAAdJSMCHN5cy5hcmd2lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmFyZ3aUag2PAAB0lIwUc3lzLmJhc2VfZXhlY19wcmVmaXiUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuYmFzZV9leGVjX3ByZWZpeJRqDY8AAHSUjA9zeXMuYmFzZV9wcmVmaXiUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuYmFzZV9wcmVmaXiUag2PAAB0lIwYc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzlGoNjwAAdJSMDXN5cy5ieXRlb3JkZXKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuYnl0ZW9yZGVylGoNjwAAdJSMDXN5cy5jb3B5cmlnaHSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuY29weXJpZ2h0lGoNjwAAdJSMDXN5cy5kbGxoYW5kbGWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZGxsaGFuZGxllGoNjwAAdJSMF3N5cy5kb250X3dyaXRlX2J5dGVjb2RllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGWUag2PAAB0lIwPc3lzLmV4ZWNfcHJlZml4lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4ZWNfcHJlZml4lGoNjwAAdJSMDnN5cy5leGVjdXRhYmxllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4ZWN1dGFibGWUag2PAAB0lIwJc3lzLmZsYWdzlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmZsYWdzlGoNjwAAdJSMDnN5cy5mbG9hdF9pbmZvlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmZsb2F0X2luZm+Uag2PAAB0lIwUc3lzLmZsb2F0X3JlcHJfc3R5bGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZmxvYXRfcmVwcl9zdHlsZZRqDY8AAHSUjA1zeXMuaGFzaF9pbmZvlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmhhc2hfaW5mb5RqDY8AAHSUjA5zeXMuaGV4dmVyc2lvbpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5oZXh2ZXJzaW9ulGoNjwAAdJSMEnN5cy5pbXBsZW1lbnRhdGlvbpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5pbXBsZW1lbnRhdGlvbpRqDY8AAHSUjAxzeXMuaW50X2luZm+UKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuaW50X2luZm+Uag2PAAB0lIwSc3lzLmxhc3RfdHJhY2ViYWNrlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmxhc3RfdHJhY2ViYWNrlGoNjwAAdJSMDXN5cy5sYXN0X3R5cGWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMubGFzdF90eXBllGoNjwAAdJSMDnN5cy5sYXN0X3ZhbHVllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmxhc3RfdmFsdWWUag2PAAB0lIwLc3lzLm1heHNpemWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMubWF4c2l6ZZRqDY8AAHSUjA5zeXMubWF4dW5pY29kZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5tYXh1bmljb2RllGoNjwAAdJSMDXN5cy5tZXRhX3BhdGiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMubWV0YV9wYXRolGoNjwAAdJSMC3N5cy5tb2R1bGVzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLm1vZHVsZXOUag2PAAB0lIwIc3lzLnBhdGiUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMucGF0aJRqDY8AAHSUjA5zeXMucGF0aF9ob29rc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5wYXRoX2hvb2tzlGoNjwAAdJSMF3N5cy5wYXRoX2ltcG9ydGVyX2NhY2hllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGWUag2PAAB0lIwMc3lzLnBsYXRmb3JtlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnBsYXRmb3JtlGoNjwAAdJSMCnN5cy5wcmVmaXiUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMucHJlZml4lGoNjwAAdJSMB3N5cy5wczGUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMucHMxlGoNjwAAdJSMB3N5cy5wczKUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMucHMylGoNjwAAdJSMEnN5cy5weWNhY2hlX3ByZWZpeJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5weWNhY2hlX3ByZWZpeJRqDY8AAHSUjApzeXMuc3RkZXJylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnN0ZGVycpRqDY8AAHSUjAlzeXMuc3RkaW6UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuc3RkaW6Uag2PAAB0lIwKc3lzLnN0ZG91dJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5zdGRvdXSUag2PAAB0lIwPc3lzLnRocmVhZF9pbmZvlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnRocmVhZF9pbmZvlGoNjwAAdJSMEnN5cy50cmFjZWJhY2tsaW1pdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy50cmFjZWJhY2tsaW1pdJRqDY8AAHSUjAtzeXMudmVyc2lvbpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy52ZXJzaW9ulGoNjwAAdJSMEHN5cy52ZXJzaW9uX2luZm+UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMudmVyc2lvbl9pbmZvlGoNjwAAdJSMD3N5cy53YXJub3B0aW9uc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy53YXJub3B0aW9uc5RqDY8AAHSUjApzeXMud2ludmVylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLndpbnZlcpRqDY8AAHSUjBZ0YWJuYW5ueS5maWxlbmFtZV9vbmx5lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFibmFubnkuaHRtbCN0YWJuYW5ueS5maWxlbmFtZV9vbmx5lGoNjwAAdJSMEHRhYm5hbm55LnZlcmJvc2WUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YWJuYW5ueS5odG1sI3RhYm5hbm55LnZlcmJvc2WUag2PAAB0lIwWdGFyZmlsZS5ERUZBVUxUX0ZPUk1BVJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLkRFRkFVTFRfRk9STUFUlGoNjwAAdJSMEHRhcmZpbGUuRU5DT0RJTkeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5FTkNPRElOR5RqDY8AAHSUjBJ0YXJmaWxlLkdOVV9GT1JNQVSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5HTlVfRk9STUFUlGoNjwAAdJSMEnRhcmZpbGUuUEFYX0ZPUk1BVJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlBBWF9GT1JNQVSUag2PAAB0lIwUdGFyZmlsZS5VU1RBUl9GT1JNQVSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyZmlsZS5VU1RBUl9GT1JNQVSUag2PAAB0lIwQdGVtcGZpbGUudGVtcGRpcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjdGVtcGZpbGUudGVtcGRpcpRqDY8AAHSUjBZ0ZXN0LnN1cHBvcnQuQUxXQVlTX0VRlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5BTFdBWVNfRVGUag2PAAB0lIwYdGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5GU19OT05BU0NJSZRqDY8AAHSUjBx0ZXN0LnN1cHBvcnQuSEFWRV9ET0NTVFJJTkdTlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5IQVZFX0RPQ1NUUklOR1OUag2PAAB0lIwZdGVzdC5zdXBwb3J0LklQVjZfRU5BQkxFRJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuSVBWNl9FTkFCTEVElGoNjwAAdJSMFHRlc3Quc3VwcG9ydC5MQVJHRVNUlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5MQVJHRVNUlGoNjwAAdJSMG3Rlc3Quc3VwcG9ydC5NQVhfUHlfc3NpemVfdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuTUFYX1B5X3NzaXplX3SUag2PAAB0lIwhdGVzdC5zdXBwb3J0Lk1JU1NJTkdfQ19ET0NTVFJJTkdTlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5NSVNTSU5HX0NfRE9DU1RSSU5HU5RqDY8AAHSUjBB0ZXN0LnN1cHBvcnQuUEdPlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5QR0+Uag2PAAB0lIwadGVzdC5zdXBwb3J0LlBJUEVfTUFYX1NJWkWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlBJUEVfTUFYX1NJWkWUag2PAAB0lIwVdGVzdC5zdXBwb3J0LlNBVkVEQ1dElChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5TQVZFRENXRJRqDY8AAHSUjBV0ZXN0LnN1cHBvcnQuU01BTExFU1SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlNNQUxMRVNUlGoNjwAAdJSMGnRlc3Quc3VwcG9ydC5TT0NLX01BWF9TSVpFlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5TT0NLX01BWF9TSVpFlGoNjwAAdJSME3Rlc3Quc3VwcG9ydC5URVNURk6UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlRFU1RGTpRqDY8AAHSUjBx0ZXN0LnN1cHBvcnQuVEVTVEZOX0VOQ09ESU5HlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5URVNURk5fRU5DT0RJTkeUag2PAAB0lIwcdGVzdC5zdXBwb3J0LlRFU1RGTl9OT05BU0NJSZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuVEVTVEZOX05PTkFTQ0lJlGoNjwAAdJSMH3Rlc3Quc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRZRqDY8AAHSUjB90ZXN0LnN1cHBvcnQuVEVTVEZOX1VORU5DT0RBQkxFlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEWUag2PAAB0lIwbdGVzdC5zdXBwb3J0LlRFU1RGTl9VTklDT0RFlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5URVNURk5fVU5JQ09ERZRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQuVEVTVF9EQVRBX0RJUpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuVEVTVF9EQVRBX0RJUpRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQuVEVTVF9IT01FX0RJUpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuVEVTVF9IT01FX0RJUpRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQuVEVTVF9IVFRQX1VSTJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuVEVTVF9IVFRQX1VSTJRqDY8AAHSUjB10ZXN0LnN1cHBvcnQuVEVTVF9TVVBQT1JUX0RJUpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuVEVTVF9TVVBQT1JUX0RJUpRqDY8AAHSUjBd0ZXN0LnN1cHBvcnQuaXNfYW5kcm9pZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuaXNfYW5kcm9pZJRqDY8AAHSUjBZ0ZXN0LnN1cHBvcnQuaXNfanl0aG9ulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5pc19qeXRob26Uag2PAAB0lIwXdGVzdC5zdXBwb3J0Lm1heF9tZW11c2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0Lm1heF9tZW11c2WUag2PAAB0lIwcdGVzdC5zdXBwb3J0LnJlYWxfbWF4X21lbXVzZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVhbF9tYXhfbWVtdXNllGoNjwAAdJSMF3Rlc3Quc3VwcG9ydC51bml4X3NoZWxslChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC51bml4X3NoZWxslGoNjwAAdJSMFHRlc3Quc3VwcG9ydC52ZXJib3NllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC52ZXJib3NllGoNjwAAdJSMFXRocmVhZGluZy5USU1FT1VUX01BWJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5USU1FT1VUX01BWJRqDY8AAHSUjBN0aW1lLkNMT0NLX0JPT1RUSU1FlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuQ0xPQ0tfQk9PVFRJTUWUag2PAAB0lIwSdGltZS5DTE9DS19ISUdIUkVTlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuQ0xPQ0tfSElHSFJFU5RqDY8AAHSUjBR0aW1lLkNMT0NLX01PTk9UT05JQ5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLkNMT0NLX01PTk9UT05JQ5RqDY8AAHSUjBh0aW1lLkNMT0NLX01PTk9UT05JQ19SQVeUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5DTE9DS19NT05PVE9OSUNfUkFXlGoNjwAAdJSMHXRpbWUuQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lElChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lElGoNjwAAdJSMD3RpbWUuQ0xPQ0tfUFJPRpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLkNMT0NLX1BST0aUag2PAAB0lIwTdGltZS5DTE9DS19SRUFMVElNRZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLkNMT0NLX1JFQUxUSU1FlGoNjwAAdJSMHHRpbWUuQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5DTE9DS19USFJFQURfQ1BVVElNRV9JRJRqDY8AAHSUjBF0aW1lLkNMT0NLX1VQVElNRZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLkNMT0NLX1VQVElNRZRqDY8AAHSUjBV0aW1lLkNMT0NLX1VQVElNRV9SQVeUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5DTE9DS19VUFRJTUVfUkFXlGoNjwAAdJSMDHRpbWUuYWx0em9uZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmFsdHpvbmWUag2PAAB0lIwNdGltZS5kYXlsaWdodJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmRheWxpZ2h0lGoNjwAAdJSMDXRpbWUudGltZXpvbmWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS50aW1lem9uZZRqDY8AAHSUjAt0aW1lLnR6bmFtZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnR6bmFtZZRqDY8AAHSUjBF0a2ludGVyLkVYQ0VQVElPTpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIuaHRtbCN0a2ludGVyLkVYQ0VQVElPTpRqDY8AAHSUjBB0a2ludGVyLlJFQURBQkxFlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci5odG1sI3RraW50ZXIuUkVBREFCTEWUag2PAAB0lIwQdGtpbnRlci5XUklUQUJMRZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIuaHRtbCN0a2ludGVyLldSSVRBQkxFlGoNjwAAdJSMC3Rva2VuLkFNUEVSlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5BTVBFUpRqDY8AAHSUjBB0b2tlbi5BTVBFUkVRVUFMlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5BTVBFUkVRVUFMlGoNjwAAdJSMC3Rva2VuLkFTWU5DlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5BU1lOQ5RqDY8AAHSUjAh0b2tlbi5BVJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQVSUag2PAAB0lIwNdG9rZW4uQVRFUVVBTJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQVRFUVVBTJRqDY8AAHSUjAt0b2tlbi5BV0FJVJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQVdBSVSUag2PAAB0lIwQdG9rZW4uQ0lSQ1VNRkxFWJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ0lSQ1VNRkxFWJRqDY8AAHSUjBV0b2tlbi5DSVJDVU1GTEVYRVFVQUyUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkNJUkNVTUZMRVhFUVVBTJRqDY8AAHSUjAt0b2tlbi5DT0xPTpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ09MT06Uag2PAAB0lIwQdG9rZW4uQ09MT05FUVVBTJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ09MT05FUVVBTJRqDY8AAHSUjAt0b2tlbi5DT01NQZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ09NTUGUag2PAAB0lIwNdG9rZW4uQ09NTUVOVJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uQ09NTUVOVJRqDY8AAHSUjAx0b2tlbi5ERURFTlSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkRFREVOVJRqDY8AAHSUjAl0b2tlbi5ET1SUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkRPVJRqDY8AAHSUjBF0b2tlbi5ET1VCTEVTTEFTSJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRE9VQkxFU0xBU0iUag2PAAB0lIwWdG9rZW4uRE9VQkxFU0xBU0hFUVVBTJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRE9VQkxFU0xBU0hFUVVBTJRqDY8AAHSUjBB0b2tlbi5ET1VCTEVTVEFSlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5ET1VCTEVTVEFSlGoNjwAAdJSMFXRva2VuLkRPVUJMRVNUQVJFUVVBTJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRE9VQkxFU1RBUkVRVUFMlGoNjwAAdJSMDnRva2VuLkVMTElQU0lTlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5FTExJUFNJU5RqDY8AAHSUjA50b2tlbi5FTkNPRElOR5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRU5DT0RJTkeUag2PAAB0lIwPdG9rZW4uRU5ETUFSS0VSlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5FTkRNQVJLRVKUag2PAAB0lIwNdG9rZW4uRVFFUVVBTJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRVFFUVVBTJRqDY8AAHSUjAt0b2tlbi5FUVVBTJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRVFVQUyUag2PAAB0lIwQdG9rZW4uRVJST1JUT0tFTpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uRVJST1JUT0tFTpRqDY8AAHSUjA10b2tlbi5HUkVBVEVSlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5HUkVBVEVSlGoNjwAAdJSMEnRva2VuLkdSRUFURVJFUVVBTJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uR1JFQVRFUkVRVUFMlGoNjwAAdJSMDHRva2VuLklOREVOVJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uSU5ERU5UlGoNjwAAdJSMDHRva2VuLkxCUkFDRZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTEJSQUNFlGoNjwAAdJSMD3Rva2VuLkxFRlRTSElGVJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTEVGVFNISUZUlGoNjwAAdJSMFHRva2VuLkxFRlRTSElGVEVRVUFMlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MRUZUU0hJRlRFUVVBTJRqDY8AAHSUjAp0b2tlbi5MRVNTlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5MRVNTlGoNjwAAdJSMD3Rva2VuLkxFU1NFUVVBTJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTEVTU0VRVUFMlGoNjwAAdJSMCnRva2VuLkxQQVKUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLkxQQVKUag2PAAB0lIwKdG9rZW4uTFNRQpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTFNRQpRqDY8AAHSUjA50b2tlbi5NSU5FUVVBTJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTUlORVFVQUyUag2PAAB0lIwLdG9rZW4uTUlOVVOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLk1JTlVTlGoNjwAAdJSMCnRva2VuLk5BTUWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLk5BTUWUag2PAAB0lIwNdG9rZW4uTkVXTElORZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTkVXTElORZRqDY8AAHSUjAh0b2tlbi5OTJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTkyUag2PAAB0lIwOdG9rZW4uTk9URVFVQUyUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLk5PVEVRVUFMlGoNjwAAdJSMD3Rva2VuLk5UX09GRlNFVJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTlRfT0ZGU0VUlGoNjwAAdJSMDHRva2VuLk5VTUJFUpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uTlVNQkVSlGoNjwAAdJSMDnRva2VuLk5fVE9LRU5TlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5OX1RPS0VOU5RqDY8AAHSUjAh0b2tlbi5PUJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uT1CUag2PAAB0lIwNdG9rZW4uUEVSQ0VOVJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUEVSQ0VOVJRqDY8AAHSUjBJ0b2tlbi5QRVJDRU5URVFVQUyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlBFUkNFTlRFUVVBTJRqDY8AAHSUjAp0b2tlbi5QTFVTlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5QTFVTlGoNjwAAdJSMD3Rva2VuLlBMVVNFUVVBTJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUExVU0VRVUFMlGoNjwAAdJSMDHRva2VuLlJBUlJPV5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUkFSUk9XlGoNjwAAdJSMDHRva2VuLlJCUkFDRZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUkJSQUNFlGoNjwAAdJSMEHRva2VuLlJJR0hUU0hJRlSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlJJR0hUU0hJRlSUag2PAAB0lIwVdG9rZW4uUklHSFRTSElGVEVRVUFMlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5SSUdIVFNISUZURVFVQUyUag2PAAB0lIwKdG9rZW4uUlBBUpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uUlBBUpRqDY8AAHSUjAp0b2tlbi5SU1FClChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5SU1FClGoNjwAAdJSMCnRva2VuLlNFTUmUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNFTUmUag2PAAB0lIwLdG9rZW4uU0xBU0iUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNMQVNIlGoNjwAAdJSMEHRva2VuLlNMQVNIRVFVQUyUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNMQVNIRVFVQUyUag2PAAB0lIwKdG9rZW4uU1RBUpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uU1RBUpRqDY8AAHSUjA90b2tlbi5TVEFSRVFVQUyUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNUQVJFUVVBTJRqDY8AAHSUjAx0b2tlbi5TVFJJTkeUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlNUUklOR5RqDY8AAHSUjAt0b2tlbi5USUxERZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uVElMREWUag2PAAB0lIwSdG9rZW4uVFlQRV9DT01NRU5UlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5UWVBFX0NPTU1FTlSUag2PAAB0lIwRdG9rZW4uVFlQRV9JR05PUkWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlRZUEVfSUdOT1JFlGoNjwAAdJSMCnRva2VuLlZCQVKUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLlZCQVKUag2PAAB0lIwPdG9rZW4uVkJBUkVRVUFMlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbCN0b2tlbi5WQkFSRVFVQUyUag2PAAB0lIwOdG9rZW4udG9rX25hbWWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLnRva19uYW1llGoNjwAAdJSMGHR5cGVzLkFzeW5jR2VuZXJhdG9yVHlwZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuQXN5bmNHZW5lcmF0b3JUeXBllGoNjwAAdJSMGXR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGWUag2PAAB0lIwXdHlwZXMuQnVpbHRpbk1ldGhvZFR5cGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkJ1aWx0aW5NZXRob2RUeXBllGoNjwAAdJSMDnR5cGVzLkNlbGxUeXBllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5DZWxsVHlwZZRqDY8AAHSUdSiMH3R5cGVzLkNsYXNzTWV0aG9kRGVzY3JpcHRvclR5cGWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkNsYXNzTWV0aG9kRGVzY3JpcHRvclR5cGWUag2PAAB0lIwTdHlwZXMuQ29yb3V0aW5lVHlwZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuQ29yb3V0aW5lVHlwZZRqDY8AAHSUjA90eXBlcy5GcmFtZVR5cGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkZyYW1lVHlwZZRqDY8AAHSUjBJ0eXBlcy5GdW5jdGlvblR5cGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLkZ1bmN0aW9uVHlwZZRqDY8AAHSUjBN0eXBlcy5HZW5lcmF0b3JUeXBllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5HZW5lcmF0b3JUeXBllGoNjwAAdJSMGnR5cGVzLkdldFNldERlc2NyaXB0b3JUeXBllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5HZXRTZXREZXNjcmlwdG9yVHlwZZRqDY8AAHSUjBB0eXBlcy5MYW1iZGFUeXBllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5MYW1iZGFUeXBllGoNjwAAdJSMGnR5cGVzLk1lbWJlckRlc2NyaXB0b3JUeXBllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5NZW1iZXJEZXNjcmlwdG9yVHlwZZRqDY8AAHSUjBp0eXBlcy5NZXRob2REZXNjcmlwdG9yVHlwZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTWV0aG9kRGVzY3JpcHRvclR5cGWUag2PAAB0lIwQdHlwZXMuTWV0aG9kVHlwZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTWV0aG9kVHlwZZRqDY8AAHSUjBd0eXBlcy5NZXRob2RXcmFwcGVyVHlwZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuTWV0aG9kV3JhcHBlclR5cGWUag2PAAB0lIwbdHlwZXMuV3JhcHBlckRlc2NyaXB0b3JUeXBllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5XcmFwcGVyRGVzY3JpcHRvclR5cGWUag2PAAB0lIwKdHlwaW5nLkFueZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5BbnmUag2PAAB0lIwNdHlwaW5nLkFueVN0cpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5BbnlTdHKUag2PAAB0lIwPdHlwaW5nLkNhbGxhYmxllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLkNhbGxhYmxllGoNjwAAdJSMD3R5cGluZy5DbGFzc1ZhcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5DbGFzc1ZhcpRqDY8AAHSUjAx0eXBpbmcuRmluYWyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuRmluYWyUag2PAAB0lIwOdHlwaW5nLkxpdGVyYWyUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuTGl0ZXJhbJRqDY8AAHSUjA90eXBpbmcuTm9SZXR1cm6UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuTm9SZXR1cm6Uag2PAAB0lIwPdHlwaW5nLk9wdGlvbmFslChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLk9wdGlvbmFslGoNjwAAdJSMFHR5cGluZy5UWVBFX0NIRUNLSU5HlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLlRZUEVfQ0hFQ0tJTkeUag2PAAB0lIwMdHlwaW5nLlR1cGxllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLlR1cGxllGoNjwAAdJSMDHR5cGluZy5VbmlvbpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5VbmlvbpRqDY8AAHSUjBV1bmljb2RlZGF0YS51Y2RfM18yXzCUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLnVjZF8zXzJfMJRqDY8AAHSUjBt1bmljb2RlZGF0YS51bmlkYXRhX3ZlcnNpb26UKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLnVuaWRhdGFfdmVyc2lvbpRqDY8AAHSUjBp1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXKUag2PAAB0lIwRdW5pdHRlc3QubW9jay5BTlmUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5BTlmUag2PAAB0lIwVdW5pdHRlc3QubW9jay5ERUZBVUxUlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suREVGQVVMVJRqDY8AAHSUjBh1bml0dGVzdC5tb2NrLkZJTFRFUl9ESVKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5GSUxURVJfRElSlGoNjwAAdJSMFnVuaXR0ZXN0Lm1vY2suc2VudGluZWyUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5zZW50aW5lbJRqDY8AAHSUjBJ1dWlkLk5BTUVTUEFDRV9ETlOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5OQU1FU1BBQ0VfRE5TlGoNjwAAdJSMEnV1aWQuTkFNRVNQQUNFX09JRJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLk5BTUVTUEFDRV9PSUSUag2PAAB0lIwSdXVpZC5OQU1FU1BBQ0VfVVJMlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuTkFNRVNQQUNFX1VSTJRqDY8AAHSUjBN1dWlkLk5BTUVTUEFDRV9YNTAwlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuTkFNRVNQQUNFX1g1MDCUag2PAAB0lIwUdXVpZC5SRVNFUlZFRF9GVVRVUkWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5SRVNFUlZFRF9GVVRVUkWUag2PAAB0lIwXdXVpZC5SRVNFUlZFRF9NSUNST1NPRlSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5SRVNFUlZFRF9NSUNST1NPRlSUag2PAAB0lIwRdXVpZC5SRVNFUlZFRF9OQ1OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dWlkLmh0bWwjdXVpZC5SRVNFUlZFRF9OQ1OUag2PAAB0lIwNdXVpZC5SRkNfNDEyMpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlJGQ180MTIylGoNjwAAdJSMGXdlYWtyZWYuQ2FsbGFibGVQcm94eVR5cGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5DYWxsYWJsZVByb3h5VHlwZZRqDY8AAHSUjBF3ZWFrcmVmLlByb3h5VHlwZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLlByb3h5VHlwZZRqDY8AAHSUjBJ3ZWFrcmVmLlByb3h5VHlwZXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5Qcm94eVR5cGVzlGoNjwAAdJSMFXdlYWtyZWYuUmVmZXJlbmNlVHlwZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLlJlZmVyZW5jZVR5cGWUag2PAAB0lIwYd2lucmVnLkhLRVlfQ0xBU1NFU19ST09UlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkhLRVlfQ0xBU1NFU19ST09UlGoNjwAAdJSMGndpbnJlZy5IS0VZX0NVUlJFTlRfQ09ORklHlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkhLRVlfQ1VSUkVOVF9DT05GSUeUag2PAAB0lIwYd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSlGoNjwAAdJSMFHdpbnJlZy5IS0VZX0RZTl9EQVRBlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkhLRVlfRFlOX0RBVEGUag2PAAB0lIwZd2lucmVnLkhLRVlfTE9DQUxfTUFDSElORZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5IS0VZX0xPQ0FMX01BQ0hJTkWUag2PAAB0lIwcd2lucmVnLkhLRVlfUEVSRk9STUFOQ0VfREFUQZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5IS0VZX1BFUkZPUk1BTkNFX0RBVEGUag2PAAB0lIwRd2lucmVnLkhLRVlfVVNFUlOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuSEtFWV9VU0VSU5RqDY8AAHSUjBV3aW5yZWcuS0VZX0FMTF9BQ0NFU1OUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuS0VZX0FMTF9BQ0NFU1OUag2PAAB0lIwWd2lucmVnLktFWV9DUkVBVEVfTElOS5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5LRVlfQ1JFQVRFX0xJTkuUag2PAAB0lIwZd2lucmVnLktFWV9DUkVBVEVfU1VCX0tFWZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5LRVlfQ1JFQVRFX1NVQl9LRVmUag2PAAB0lIwdd2lucmVnLktFWV9FTlVNRVJBVEVfU1VCX0tFWVOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuS0VZX0VOVU1FUkFURV9TVUJfS0VZU5RqDY8AAHSUjBJ3aW5yZWcuS0VZX0VYRUNVVEWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuS0VZX0VYRUNVVEWUag2PAAB0lIwRd2lucmVnLktFWV9OT1RJRlmUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuS0VZX05PVElGWZRqDY8AAHSUjBZ3aW5yZWcuS0VZX1FVRVJZX1ZBTFVFlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLktFWV9RVUVSWV9WQUxVRZRqDY8AAHSUjA93aW5yZWcuS0VZX1JFQUSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuS0VZX1JFQUSUag2PAAB0lIwUd2lucmVnLktFWV9TRVRfVkFMVUWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuS0VZX1NFVF9WQUxVRZRqDY8AAHSUjBZ3aW5yZWcuS0VZX1dPVzY0XzMyS0VZlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLktFWV9XT1c2NF8zMktFWZRqDY8AAHSUjBZ3aW5yZWcuS0VZX1dPVzY0XzY0S0VZlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLktFWV9XT1c2NF82NEtFWZRqDY8AAHSUjBB3aW5yZWcuS0VZX1dSSVRFlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLktFWV9XUklURZRqDY8AAHSUjBF3aW5yZWcuUkVHX0JJTkFSWZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5SRUdfQklOQVJZlGoNjwAAdJSMEHdpbnJlZy5SRUdfRFdPUkSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuUkVHX0RXT1JElGoNjwAAdJSMG3dpbnJlZy5SRUdfRFdPUkRfQklHX0VORElBTpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5SRUdfRFdPUkRfQklHX0VORElBTpRqDY8AAHSUjB53aW5yZWcuUkVHX0RXT1JEX0xJVFRMRV9FTkRJQU6UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuUkVHX0RXT1JEX0xJVFRMRV9FTkRJQU6Uag2PAAB0lIwUd2lucmVnLlJFR19FWFBBTkRfU1qUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuUkVHX0VYUEFORF9TWpRqDY8AAHSUjCN3aW5yZWcuUkVHX0ZVTExfUkVTT1VSQ0VfREVTQ1JJUFRPUpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5SRUdfRlVMTF9SRVNPVVJDRV9ERVNDUklQVE9SlGoNjwAAdJSMD3dpbnJlZy5SRUdfTElOS5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5SRUdfTElOS5RqDY8AAHSUjBN3aW5yZWcuUkVHX01VTFRJX1NalChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlJFR19NVUxUSV9TWpRqDY8AAHSUjA93aW5yZWcuUkVHX05PTkWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuUkVHX05PTkWUag2PAAB0lIwQd2lucmVnLlJFR19RV09SRJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5SRUdfUVdPUkSUag2PAAB0lIwed2lucmVnLlJFR19RV09SRF9MSVRUTEVfRU5ESUFOlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlJFR19RV09SRF9MSVRUTEVfRU5ESUFOlGoNjwAAdJSMGHdpbnJlZy5SRUdfUkVTT1VSQ0VfTElTVJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5SRUdfUkVTT1VSQ0VfTElTVJRqDY8AAHSUjCV3aW5yZWcuUkVHX1JFU09VUkNFX1JFUVVJUkVNRU5UU19MSVNUlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlJFR19SRVNPVVJDRV9SRVFVSVJFTUVOVFNfTElTVJRqDY8AAHSUjA13aW5yZWcuUkVHX1NalChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlJFR19TWpRqDY8AAHSUjBh3aW5zb3VuZC5NQl9JQ09OQVNURVJJU0uUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLk1CX0lDT05BU1RFUklTS5RqDY8AAHSUjBt3aW5zb3VuZC5NQl9JQ09ORVhDTEFNQVRJT06UKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLk1CX0lDT05FWENMQU1BVElPTpRqDY8AAHSUjBR3aW5zb3VuZC5NQl9JQ09OSEFORJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuTUJfSUNPTkhBTkSUag2PAAB0lIwYd2luc291bmQuTUJfSUNPTlFVRVNUSU9OlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5NQl9JQ09OUVVFU1RJT06Uag2PAAB0lIwOd2luc291bmQuTUJfT0uUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLk1CX09LlGoNjwAAdJSMEndpbnNvdW5kLlNORF9BTElBU5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX0FMSUFTlGoNjwAAdJSMEndpbnNvdW5kLlNORF9BU1lOQ5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX0FTWU5DlGoNjwAAdJSMFXdpbnNvdW5kLlNORF9GSUxFTkFNRZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX0ZJTEVOQU1FlGoNjwAAdJSMEXdpbnNvdW5kLlNORF9MT09QlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5TTkRfTE9PUJRqDY8AAHSUjBN3aW5zb3VuZC5TTkRfTUVNT1JZlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5TTkRfTUVNT1JZlGoNjwAAdJSMFndpbnNvdW5kLlNORF9OT0RFRkFVTFSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5zb3VuZC5odG1sI3dpbnNvdW5kLlNORF9OT0RFRkFVTFSUag2PAAB0lIwTd2luc291bmQuU05EX05PU1RPUJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX05PU1RPUJRqDY8AAHSUjBN3aW5zb3VuZC5TTkRfTk9XQUlUlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5TTkRfTk9XQUlUlGoNjwAAdJSMEndpbnNvdW5kLlNORF9QVVJHRZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuU05EX1BVUkdFlGoNjwAAdJSMF3htbC5kb20uRU1QVFlfTkFNRVNQQUNFlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uRU1QVFlfTkFNRVNQQUNFlGoNjwAAdJSMF3htbC5kb20uWEhUTUxfTkFNRVNQQUNFlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uWEhUTUxfTkFNRVNQQUNFlGoNjwAAdJSMF3htbC5kb20uWE1MTlNfTkFNRVNQQUNFlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI3htbC5kb20uWE1MTlNfTkFNRVNQQUNFlGoNjwAAdJSMFXhtbC5kb20uWE1MX05BTUVTUEFDRZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLlhNTF9OQU1FU1BBQ0WUag2PAAB0lIwfeG1sLmRvbS5wdWxsZG9tLmRlZmF1bHRfYnVmc2l6ZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI3htbC5kb20ucHVsbGRvbS5kZWZhdWx0X2J1ZnNpemWUag2PAAB0lIwfeG1sLnBhcnNlcnMuZXhwYXQuWE1MUGFyc2VyVHlwZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5YTUxQYXJzZXJUeXBllGoNjwAAdJSMKnhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfQUJPUlRFRJQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0FCT1JURUSUag2PAAB0lIwveG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9BU1lOQ19FTlRJVFmUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9BU1lOQ19FTlRJVFmUag2PAAB0lIxAeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9BVFRSSUJVVEVfRVhURVJOQUxfRU5USVRZX1JFRpQoagqPAABqC48AAIxvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0FUVFJJQlVURV9FWFRFUk5BTF9FTlRJVFlfUkVGlGoNjwAAdJSML3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfQkFEX0NIQVJfUkVGlChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfQkFEX0NIQVJfUkVGlGoNjwAAdJSMNHhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfQklOQVJZX0VOVElUWV9SRUaUKGoKjwAAaguPAACMY2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9CSU5BUllfRU5USVRZX1JFRpRqDY8AAHSUjEN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0NBTlRfQ0hBTkdFX0ZFQVRVUkVfT05DRV9QQVJTSU5HlChqCo8AAGoLjwAAjHJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfQ0FOVF9DSEFOR0VfRkVBVFVSRV9PTkNFX1BBUlNJTkeUag2PAAB0lIw2eG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9EVVBMSUNBVEVfQVRUUklCVVRFlChqCo8AAGoLjwAAjGVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfRFVQTElDQVRFX0FUVFJJQlVURZRqDY8AAHSUjDh4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0VOVElUWV9ERUNMQVJFRF9JTl9QRZQoagqPAABqC48AAIxnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0VOVElUWV9ERUNMQVJFRF9JTl9QRZRqDY8AAHSUjDt4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElOR5QoagqPAABqC48AAIxqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElOR5RqDY8AAHSUjDt4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0ZFQVRVUkVfUkVRVUlSRVNfWE1MX0RURJQoagqPAABqC48AAIxqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0ZFQVRVUkVfUkVRVUlSRVNfWE1MX0RURJRqDY8AAHSUjCt4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0ZJTklTSEVElChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfRklOSVNIRUSUag2PAAB0lIwweG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9JTkNPTVBMRVRFX1BFlChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfSU5DT01QTEVURV9QRZRqDY8AAHSUjDV4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0lOQ09SUkVDVF9FTkNPRElOR5QoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0lOQ09SUkVDVF9FTkNPRElOR5RqDY8AAHSUjDB4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0lOVkFMSURfVE9LRU6UKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9JTlZBTElEX1RPS0VOlGoNjwAAdJSMOXhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfSlVOS19BRlRFUl9ET0NfRUxFTUVOVJQoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX0pVTktfQUZURVJfRE9DX0VMRU1FTlSUag2PAAB0lIwzeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9NSVNQTEFDRURfWE1MX1BJlChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfTUlTUExBQ0VEX1hNTF9QSZRqDY8AAHSUjDF4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX05PVF9TVEFOREFMT05FlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfTk9UX1NUQU5EQUxPTkWUag2PAAB0lIwweG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9OT1RfU1VTUEVOREVElChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfTk9UX1NVU1BFTkRFRJRqDY8AAHSUjC54bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX05PX0VMRU1FTlRTlChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfTk9fRUxFTUVOVFOUag2PAAB0lIwseG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9OT19NRU1PUlmUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9OT19NRU1PUlmUag2PAAB0lIwzeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9QQVJBTV9FTlRJVFlfUkVGlChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfUEFSQU1fRU5USVRZX1JFRpRqDY8AAHSUjC94bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUpQoagqPAABqC48AAIxeaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1BBUlRJQUxfQ0hBUpRqDY8AAHSUjCt4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1BVQkxJQ0lElChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfUFVCTElDSUSUag2PAAB0lIw3eG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9SRUNVUlNJVkVfRU5USVRZX1JFRpQoagqPAABqC48AAIxmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1JFQ1VSU0lWRV9FTlRJVFlfUkVGlGoNjwAAdJSMLHhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfU1VTUEVOREVElChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfU1VTUEVOREVElGoNjwAAdJSMLXhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfU1VTUEVORF9QRZQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1NVU1BFTkRfUEWUag2PAAB0lIwpeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9TWU5UQViUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9TWU5UQViUag2PAAB0lIwveG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9UQUdfTUlTTUFUQ0iUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9UQUdfTUlTTUFUQ0iUag2PAAB0lIwseG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9URVhUX0RFQ0yUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9URVhUX0RFQ0yUag2PAAB0lIwxeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9VTkJPVU5EX1BSRUZJWJQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1VOQk9VTkRfUFJFRklYlGoNjwAAdJSMOXhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfVU5DTE9TRURfQ0RBVEFfU0VDVElPTpQoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1VOQ0xPU0VEX0NEQVRBX1NFQ1RJT06Uag2PAAB0lIwxeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9VTkNMT1NFRF9UT0tFTpQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOlGoNjwAAdJSMNXhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfVU5ERUNMQVJJTkdfUFJFRklYlChqCo8AAGoLjwAAjGRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfVU5ERUNMQVJJTkdfUFJFRklYlGoNjwAAdJSMM3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfVU5ERUZJTkVEX0VOVElUWZQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1VOREVGSU5FRF9FTlRJVFmUag2PAAB0lIwzeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9VTkVYUEVDVEVEX1NUQVRFlChqCo8AAGoLjwAAjGJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfVU5FWFBFQ1RFRF9TVEFURZRqDY8AAHSUjDN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuWE1MX0VSUk9SX1VOS05PV05fRU5DT0RJTkeUKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9VTktOT1dOX0VOQ09ESU5HlGoNjwAAdJSMK3htbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5YTUxfRVJST1JfWE1MX0RFQ0yUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLlhNTF9FUlJPUl9YTUxfREVDTJRqDY8AAHSUjB54bWwucGFyc2Vycy5leHBhdC5lcnJvcnMuY29kZXOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzLmNvZGVzlGoNjwAAdJSMIXhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycy5tZXNzYWdlc5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMubWVzc2FnZXOUag2PAAB0lIwceG1sLnNheC5oYW5kbGVyLmFsbF9mZWF0dXJlc5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5hbGxfZmVhdHVyZXOUag2PAAB0lIweeG1sLnNheC5oYW5kbGVyLmFsbF9wcm9wZXJ0aWVzlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmFsbF9wcm9wZXJ0aWVzlGoNjwAAdJSMJHhtbC5zYXguaGFuZGxlci5mZWF0dXJlX2V4dGVybmFsX2dlc5QoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3htbC5zYXguaGFuZGxlci5mZWF0dXJlX2V4dGVybmFsX2dlc5RqDY8AAHSUjCR4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9leHRlcm5hbF9wZXOUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9leHRlcm5hbF9wZXOUag2PAAB0lIwqeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfbmFtZXNwYWNlX3ByZWZpeGVzlChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLmZlYXR1cmVfbmFtZXNwYWNlX3ByZWZpeGVzlGoNjwAAdJSMInhtbC5zYXguaGFuZGxlci5mZWF0dXJlX25hbWVzcGFjZXOUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9uYW1lc3BhY2VzlGoNjwAAdJSMKHhtbC5zYXguaGFuZGxlci5mZWF0dXJlX3N0cmluZ19pbnRlcm5pbmeUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV9zdHJpbmdfaW50ZXJuaW5nlGoNjwAAdJSMInhtbC5zYXguaGFuZGxlci5mZWF0dXJlX3ZhbGlkYXRpb26UKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuZmVhdHVyZV92YWxpZGF0aW9ulGoNjwAAdJSMLHhtbC5zYXguaGFuZGxlci5wcm9wZXJ0eV9kZWNsYXJhdGlvbl9oYW5kbGVylChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RlY2xhcmF0aW9uX2hhbmRsZXKUag2PAAB0lIwheG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RvbV9ub2RllChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X2RvbV9ub2RllGoNjwAAdJSMKHhtbC5zYXguaGFuZGxlci5wcm9wZXJ0eV9sZXhpY2FsX2hhbmRsZXKUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIucHJvcGVydHlfbGV4aWNhbF9oYW5kbGVylGoNjwAAdJSMI3htbC5zYXguaGFuZGxlci5wcm9wZXJ0eV94bWxfc3RyaW5nlChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLnByb3BlcnR5X3htbF9zdHJpbmeUag2PAAB0lIwRemlwZmlsZS5aSVBfQlpJUDKUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aSVBfQlpJUDKUag2PAAB0lIwUemlwZmlsZS5aSVBfREVGTEFURUSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aSVBfREVGTEFURUSUag2PAAB0lIwQemlwZmlsZS5aSVBfTFpNQZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlpJUF9MWk1BlGoNjwAAdJSMEnppcGZpbGUuWklQX1NUT1JFRJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlpJUF9TVE9SRUSUag2PAAB0lIwZemxpYi5aTElCX1JVTlRJTUVfVkVSU0lPTpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3psaWIuaHRtbCN6bGliLlpMSUJfUlVOVElNRV9WRVJTSU9OlGoNjwAAdJSMEXpsaWIuWkxJQl9WRVJTSU9OlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI3psaWIuWkxJQl9WRVJTSU9OlGoNjwAAdJR1jAlweTptb2R1bGWUfZQojApfX2Z1dHVyZV9flChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvX19mdXR1cmVfXy5odG1sI21vZHVsZS1fX2Z1dHVyZV9flGoNjwAAdJSMCF9fbWFpbl9flChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvX19tYWluX18uaHRtbCNtb2R1bGUtX19tYWluX1+Uag2PAAB0lIwNX2R1bW15X3RocmVhZJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L19kdW1teV90aHJlYWQuaHRtbCNtb2R1bGUtX2R1bW15X3RocmVhZJRqDY8AAHSUjAdfdGhyZWFklChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvX3RocmVhZC5odG1sI21vZHVsZS1fdGhyZWFklGoNjwAAdJSMA2FiY5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FiYy5odG1sI21vZHVsZS1hYmOUag2PAAB0lIwEYWlmY5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FpZmMuaHRtbCNtb2R1bGUtYWlmY5RqDY8AAHSUjAhhcmdwYXJzZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjbW9kdWxlLWFyZ3BhcnNllGoNjwAAdJSMBWFycmF5lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJyYXkuaHRtbCNtb2R1bGUtYXJyYXmUag2PAAB0lIwDYXN0lChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWwjbW9kdWxlLWFzdJRqDY8AAHSUjAhhc3luY2hhdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaGF0Lmh0bWwjbW9kdWxlLWFzeW5jaGF0lGoNjwAAdJSMB2FzeW5jaW+UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLmh0bWwjbW9kdWxlLWFzeW5jaW+Uag2PAAB0lIwIYXN5bmNvcmWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY29yZS5odG1sI21vZHVsZS1hc3luY29yZZRqDY8AAHSUjAZhdGV4aXSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdGV4aXQuaHRtbCNtb2R1bGUtYXRleGl0lGoNjwAAdJSMB2F1ZGlvb3CUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjbW9kdWxlLWF1ZGlvb3CUag2PAAB0lIwGYmFzZTY0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmFzZTY0Lmh0bWwjbW9kdWxlLWJhc2U2NJRqDY8AAHSUjANiZGKUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNtb2R1bGUtYmRilGoNjwAAdJSMCGJpbmFzY2lplChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNtb2R1bGUtYmluYXNjaWmUag2PAAB0lIwGYmluaGV4lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluaGV4Lmh0bWwjbW9kdWxlLWJpbmhleJRqDY8AAHSUjAZiaXNlY3SUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaXNlY3QuaHRtbCNtb2R1bGUtYmlzZWN0lGoNjwAAdJSMCGJ1aWx0aW5zlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnVpbHRpbnMuaHRtbCNtb2R1bGUtYnVpbHRpbnOUag2PAAB0lIwDYnoylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnoyLmh0bWwjbW9kdWxlLWJ6MpRqDY8AAHSUjAhjUHJvZmlsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNtb2R1bGUtY1Byb2ZpbGWUag2PAAB0lIwIY2FsZW5kYXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI21vZHVsZS1jYWxlbmRhcpRqDY8AAHSUjANjZ2mUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jZ2kuaHRtbCNtb2R1bGUtY2dplGoNjwAAdJSMBWNnaXRilChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpdGIuaHRtbCNtb2R1bGUtY2dpdGKUag2PAAB0lIwFY2h1bmuUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jaHVuay5odG1sI21vZHVsZS1jaHVua5RqDY8AAHSUjAVjbWF0aJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjbW9kdWxlLWNtYXRolGoNjwAAdJSMA2NtZJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI21vZHVsZS1jbWSUag2PAAB0lIwEY29kZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNtb2R1bGUtY29kZZRqDY8AAHSUjAZjb2RlY3OUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNtb2R1bGUtY29kZWNzlGoNjwAAdJSMBmNvZGVvcJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVvcC5odG1sI21vZHVsZS1jb2Rlb3CUag2PAAB0lIwLY29sbGVjdGlvbnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI21vZHVsZS1jb2xsZWN0aW9uc5RqDY8AAHSUjA9jb2xsZWN0aW9ucy5hYmOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNtb2R1bGUtY29sbGVjdGlvbnMuYWJjlGoNjwAAdJSMCGNvbG9yc3lzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sb3JzeXMuaHRtbCNtb2R1bGUtY29sb3JzeXOUag2PAAB0lIwKY29tcGlsZWFsbJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNtb2R1bGUtY29tcGlsZWFsbJRqDY8AAHSUjBJjb25jdXJyZW50LmZ1dHVyZXOUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbCNtb2R1bGUtY29uY3VycmVudC5mdXR1cmVzlGoNjwAAdJSMDGNvbmZpZ3BhcnNlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sI21vZHVsZS1jb25maWdwYXJzZXKUag2PAAB0lIwKY29udGV4dGxpYpSVCwABAAAAAAAoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNtb2R1bGUtY29udGV4dGxpYpRqDY8AAHSUjAtjb250ZXh0dmFyc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHR2YXJzLmh0bWwjbW9kdWxlLWNvbnRleHR2YXJzlGoNjwAAdJSMBGNvcHmUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb3B5Lmh0bWwjbW9kdWxlLWNvcHmUag2PAAB0lIwHY29weXJlZ5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvcHlyZWcuaHRtbCNtb2R1bGUtY29weXJlZ5RqDY8AAHSUjAVjcnlwdJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NyeXB0Lmh0bWwjbW9kdWxlLWNyeXB0lGoNjwAAdJSMA2NzdpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI21vZHVsZS1jc3aUag2PAAB0lIwGY3R5cGVzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjbW9kdWxlLWN0eXBlc5RqDY8AAHSUjAZjdXJzZXOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNtb2R1bGUtY3Vyc2VzlGoNjwAAdJSMDGN1cnNlcy5hc2NpaZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI21vZHVsZS1jdXJzZXMuYXNjaWmUag2PAAB0lIwMY3Vyc2VzLnBhbmVslChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLmh0bWwjbW9kdWxlLWN1cnNlcy5wYW5lbJRqDY8AAHSUjA5jdXJzZXMudGV4dHBhZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI21vZHVsZS1jdXJzZXMudGV4dHBhZJRqDY8AAHSUjAtkYXRhY2xhc3Nlc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGFjbGFzc2VzLmh0bWwjbW9kdWxlLWRhdGFjbGFzc2VzlGoNjwAAdJSMCGRhdGV0aW1llChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNtb2R1bGUtZGF0ZXRpbWWUag2PAAB0lIwDZGJtlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGJtLmh0bWwjbW9kdWxlLWRibZRqDY8AAHSUjAhkYm0uZHVtYpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RibS5odG1sI21vZHVsZS1kYm0uZHVtYpRqDY8AAHSUjAdkYm0uZ251lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGJtLmh0bWwjbW9kdWxlLWRibS5nbnWUag2PAAB0lIwIZGJtLm5kYm2UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNtb2R1bGUtZGJtLm5kYm2Uag2PAAB0lIwHZGVjaW1hbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNtb2R1bGUtZGVjaW1hbJRqDY8AAHSUjAdkaWZmbGlilChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI21vZHVsZS1kaWZmbGlilGoNjwAAdJSMA2Rpc5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI21vZHVsZS1kaXOUag2PAAB0lIwJZGlzdHV0aWxzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzdHV0aWxzLmh0bWwjbW9kdWxlLWRpc3R1dGlsc5RqDY8AAHSUjBZkaXN0dXRpbHMuYXJjaGl2ZV91dGlslChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmFyY2hpdmVfdXRpbJRqDY8AAHSUjBZkaXN0dXRpbHMuYmNwcGNvbXBpbGVylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmJjcHBjb21waWxlcpRqDY8AAHSUjBNkaXN0dXRpbHMuY2NvbXBpbGVylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNjb21waWxlcpRqDY8AAHSUjA1kaXN0dXRpbHMuY21klChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNtZJRqDY8AAHSUjBFkaXN0dXRpbHMuY29tbWFuZJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5klGoNjwAAdJSMF2Rpc3R1dGlscy5jb21tYW5kLmJkaXN0lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3SUag2PAAB0lIwcZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfZHVtYpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmJkaXN0X2R1bWKUag2PAAB0lIwbZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfbXNplChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfbXNplGoNjwAAdJSMIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3BhY2thZ2VylChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcGFja2FnZXKUag2PAAB0lIwbZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcnBtlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfcnBtlGoNjwAAdJSMH2Rpc3R1dGlscy5jb21tYW5kLmJkaXN0X3dpbmluc3SUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5iZGlzdF93aW5pbnN0lGoNjwAAdJSMF2Rpc3R1dGlscy5jb21tYW5kLmJ1aWxklChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGSUag2PAAB0lIwcZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfY2xpYpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2NsaWKUag2PAAB0lIwbZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0lGoNjwAAdJSMGmRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHmUag2PAAB0lIwfZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfc2NyaXB0c5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3NjcmlwdHOUag2PAAB0lIwXZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2uUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5jaGVja5RqDY8AAHSUjBdkaXN0dXRpbHMuY29tbWFuZC5jbGVhbpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmNsZWFulGoNjwAAdJSMGGRpc3R1dGlscy5jb21tYW5kLmNvbmZpZ5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb21tYW5kLmNvbmZpZ5RqDY8AAHSUjBlkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxslChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbJRqDY8AAHSUjB5kaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGGUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGGUag2PAAB0lIwhZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9oZWFkZXJzlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9oZWFkZXJzlGoNjwAAdJSMHWRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGlilChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9saWKUag2PAAB0lIwhZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9zY3JpcHRzlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9zY3JpcHRzlGoNjwAAdJSMGmRpc3R1dGlscy5jb21tYW5kLnJlZ2lzdGVylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmNvbW1hbmQucmVnaXN0ZXKUag2PAAB0lIwXZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3SUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY29tbWFuZC5zZGlzdJRqDY8AAHSUjA5kaXN0dXRpbHMuY29yZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5jb3JllGoNjwAAdJSMGWRpc3R1dGlscy5jeWd3aW5jY29tcGlsZXKUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVylGoNjwAAdJSMD2Rpc3R1dGlscy5kZWJ1Z5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5kZWJ1Z5RqDY8AAHSUjBJkaXN0dXRpbHMuZGVwX3V0aWyUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMuZGVwX3V0aWyUag2PAAB0lIwSZGlzdHV0aWxzLmRpcl91dGlslChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmRpcl91dGlslGoNjwAAdJSMDmRpc3R1dGlscy5kaXN0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmRpc3SUag2PAAB0lIwQZGlzdHV0aWxzLmVycm9yc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5lcnJvcnOUag2PAAB0lIwTZGlzdHV0aWxzLmV4dGVuc2lvbpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5leHRlbnNpb26Uag2PAAB0lIwWZGlzdHV0aWxzLmZhbmN5X2dldG9wdJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5mYW5jeV9nZXRvcHSUag2PAAB0lIwTZGlzdHV0aWxzLmZpbGVfdXRpbJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5maWxlX3V0aWyUag2PAAB0lIwSZGlzdHV0aWxzLmZpbGVsaXN0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLmZpbGVsaXN0lGoNjwAAdJSMDWRpc3R1dGlscy5sb2eUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMubG9nlGoNjwAAdJSMFmRpc3R1dGlscy5tc3ZjY29tcGlsZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMubXN2Y2NvbXBpbGVylGoNjwAAdJSMD2Rpc3R1dGlscy5zcGF3bpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy5zcGF3bpRqDY8AAHSUjBNkaXN0dXRpbHMuc3lzY29uZmlnlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnN5c2NvbmZpZ5RqDY8AAHSUjBNkaXN0dXRpbHMudGV4dF9maWxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnRleHRfZmlsZZRqDY8AAHSUjBdkaXN0dXRpbHMudW5peGNjb21waWxlcpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjbW9kdWxlLWRpc3R1dGlscy51bml4Y2NvbXBpbGVylGoNjwAAdJSMDmRpc3R1dGlscy51dGlslChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNtb2R1bGUtZGlzdHV0aWxzLnV0aWyUag2PAAB0lIwRZGlzdHV0aWxzLnZlcnNpb26UKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI21vZHVsZS1kaXN0dXRpbHMudmVyc2lvbpRqDY8AAHSUjAdkb2N0ZXN0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI21vZHVsZS1kb2N0ZXN0lGoNjwAAdJSMD2R1bW15X3RocmVhZGluZ5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2R1bW15X3RocmVhZGluZy5odG1sI21vZHVsZS1kdW1teV90aHJlYWRpbmeUag2PAAB0lIwFZW1haWyUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5odG1sI21vZHVsZS1lbWFpbJRqDY8AAHSUjA1lbWFpbC5jaGFyc2V0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI21vZHVsZS1lbWFpbC5jaGFyc2V0lGoNjwAAdJSMFGVtYWlsLmNvbnRlbnRtYW5hZ2VylChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIuaHRtbCNtb2R1bGUtZW1haWwuY29udGVudG1hbmFnZXKUag2PAAB0lIwOZW1haWwuZW5jb2RlcnOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5lbmNvZGVycy5odG1sI21vZHVsZS1lbWFpbC5lbmNvZGVyc5RqDY8AAHSUjAxlbWFpbC5lcnJvcnOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5lcnJvcnMuaHRtbCNtb2R1bGUtZW1haWwuZXJyb3JzlGoNjwAAdJSMD2VtYWlsLmdlbmVyYXRvcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5odG1sI21vZHVsZS1lbWFpbC5nZW5lcmF0b3KUag2PAAB0lIwMZW1haWwuaGVhZGVylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjbW9kdWxlLWVtYWlsLmhlYWRlcpRqDY8AAHSUjBRlbWFpbC5oZWFkZXJyZWdpc3RyeZQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjbW9kdWxlLWVtYWlsLmhlYWRlcnJlZ2lzdHJ5lGoNjwAAdJSMD2VtYWlsLml0ZXJhdG9yc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLml0ZXJhdG9ycy5odG1sI21vZHVsZS1lbWFpbC5pdGVyYXRvcnOUag2PAAB0lIwNZW1haWwubWVzc2FnZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNtb2R1bGUtZW1haWwubWVzc2FnZZRqDY8AAHSUjAplbWFpbC5taW1llChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWltZS5odG1sI21vZHVsZS1lbWFpbC5taW1llGoNjwAAdJSMDGVtYWlsLnBhcnNlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI21vZHVsZS1lbWFpbC5wYXJzZXKUag2PAAB0lIwMZW1haWwucG9saWN5lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjbW9kdWxlLWVtYWlsLnBvbGljeZRqDY8AAHSUjAtlbWFpbC51dGlsc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjbW9kdWxlLWVtYWlsLnV0aWxzlGoNjwAAdJSMDmVuY29kaW5ncy5pZG5hlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjbW9kdWxlLWVuY29kaW5ncy5pZG5hlGoNjwAAdJSMDmVuY29kaW5ncy5tYmNzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjbW9kdWxlLWVuY29kaW5ncy5tYmNzlGoNjwAAdJSME2VuY29kaW5ncy51dGZfOF9zaWeUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNtb2R1bGUtZW5jb2RpbmdzLnV0Zl84X3NpZ5RqDY8AAHSUjAllbnN1cmVwaXCUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbnN1cmVwaXAuaHRtbCNtb2R1bGUtZW5zdXJlcGlwlGoNjwAAdJSMBGVudW2UKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbnVtLmh0bWwjbW9kdWxlLWVudW2Uag2PAAB0lIwFZXJybm+UKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lcnJuby5odG1sI21vZHVsZS1lcnJub5RqDY8AAHSUjAxmYXVsdGhhbmRsZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mYXVsdGhhbmRsZXIuaHRtbCNtb2R1bGUtZmF1bHRoYW5kbGVylGoNjwAAdJSMBWZjbnRslChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmNudGwuaHRtbCNtb2R1bGUtZmNudGyUag2PAAB0lIwHZmlsZWNtcJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNtb2R1bGUtZmlsZWNtcJRqDY8AAHSUjAlmaWxlaW5wdXSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNtb2R1bGUtZmlsZWlucHV0lGoNjwAAdJSMB2ZubWF0Y2iUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mbm1hdGNoLmh0bWwjbW9kdWxlLWZubWF0Y2iUag2PAAB0lIwJZm9ybWF0dGVylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjbW9kdWxlLWZvcm1hdHRlcpRqDY8AAHSUjAlmcmFjdGlvbnOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mcmFjdGlvbnMuaHRtbCNtb2R1bGUtZnJhY3Rpb25zlGoNjwAAdJSMBmZ0cGxpYpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI21vZHVsZS1mdHBsaWKUag2PAAB0lIwJZnVuY3Rvb2xzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjbW9kdWxlLWZ1bmN0b29sc5RqDY8AAHSUjAJnY5QoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWwjbW9kdWxlLWdjlGoNjwAAdJSMBmdldG9wdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldG9wdC5odG1sI21vZHVsZS1nZXRvcHSUag2PAAB0lIwHZ2V0cGFzc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHBhc3MuaHRtbCNtb2R1bGUtZ2V0cGFzc5RqDY8AAHSUjAdnZXR0ZXh0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI21vZHVsZS1nZXR0ZXh0lGoNjwAAdJSMBGdsb2KUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nbG9iLmh0bWwjbW9kdWxlLWdsb2KUag2PAAB0lIwDZ3JwlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3JwLmh0bWwjbW9kdWxlLWdycJRqDY8AAHSUjARnemlwlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3ppcC5odG1sI21vZHVsZS1nemlwlGoNjwAAdJSMB2hhc2hsaWKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjbW9kdWxlLWhhc2hsaWKUag2PAAB0lIwFaGVhcHGUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oZWFwcS5odG1sI21vZHVsZS1oZWFwcZRqDY8AAHSUjARobWFjlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaG1hYy5odG1sI21vZHVsZS1obWFjlGoNjwAAdJSMBGh0bWyUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLmh0bWwjbW9kdWxlLWh0bWyUag2PAAB0lIwNaHRtbC5lbnRpdGllc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0bWwuZW50aXRpZXMuaHRtbCNtb2R1bGUtaHRtbC5lbnRpdGllc5RqDY8AAHSUjAtodG1sLnBhcnNlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0bWwucGFyc2VyLmh0bWwjbW9kdWxlLWh0bWwucGFyc2VylGoNjwAAdJSMBGh0dHCUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmh0bWwjbW9kdWxlLWh0dHCUag2PAAB0lIwLaHR0cC5jbGllbnSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI21vZHVsZS1odHRwLmNsaWVudJRqDY8AAHSUjA5odHRwLmNvb2tpZWphcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjbW9kdWxlLWh0dHAuY29va2llamFylGoNjwAAdJSMDGh0dHAuY29va2llc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llcy5odG1sI21vZHVsZS1odHRwLmNvb2tpZXOUag2PAAB0lIwLaHR0cC5zZXJ2ZXKUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI21vZHVsZS1odHRwLnNlcnZlcpRqDY8AAHSUjAdpbWFwbGlilChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI21vZHVsZS1pbWFwbGlilGoNjwAAdJSMBmltZ2hkcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltZ2hkci5odG1sI21vZHVsZS1pbWdoZHKUag2PAAB0lIwDaW1wlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wLmh0bWwjbW9kdWxlLWltcJRqDY8AAHSUjAlpbXBvcnRsaWKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNtb2R1bGUtaW1wb3J0bGlilGoNjwAAdJSMDWltcG9ydGxpYi5hYmOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNtb2R1bGUtaW1wb3J0bGliLmFiY5RqDY8AAHSUjBNpbXBvcnRsaWIubWFjaGluZXJ5lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjbW9kdWxlLWltcG9ydGxpYi5tYWNoaW5lcnmUag2PAAB0lIwTaW1wb3J0bGliLnJlc291cmNlc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI21vZHVsZS1pbXBvcnRsaWIucmVzb3VyY2VzlGoNjwAAdJSMDmltcG9ydGxpYi51dGlslChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjbW9kdWxlLWltcG9ydGxpYi51dGlslGoNjwAAdJSMB2luc3BlY3SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjbW9kdWxlLWluc3BlY3SUag2PAAB0lIwCaW+UKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI21vZHVsZS1pb5RqDY8AAHSUjAlpcGFkZHJlc3OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNtb2R1bGUtaXBhZGRyZXNzlGoNjwAAdJSMCWl0ZXJ0b29sc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI21vZHVsZS1pdGVydG9vbHOUag2PAAB0lIwEanNvbpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNtb2R1bGUtanNvbpRqDY8AAHSUjAlqc29uLnRvb2yUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWwjbW9kdWxlLWpzb24udG9vbJRqDY8AAHSUjAdrZXl3b3JklChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkva2V5d29yZC5odG1sI21vZHVsZS1rZXl3b3JklGoNjwAAdJSMB2xpYjJ0bzOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjbW9kdWxlLWxpYjJ0bzOUag2PAAB0lIwJbGluZWNhY2hllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbGluZWNhY2hlLmh0bWwjbW9kdWxlLWxpbmVjYWNoZZRqDY8AAHSUjAZsb2NhbGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNtb2R1bGUtbG9jYWxllGoNjwAAdJSMB2xvZ2dpbmeUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbW9kdWxlLWxvZ2dpbmeUag2PAAB0lIwObG9nZ2luZy5jb25maWeUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI21vZHVsZS1sb2dnaW5nLmNvbmZpZ5RqDY8AAHSUjBBsb2dnaW5nLmhhbmRsZXJzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI21vZHVsZS1sb2dnaW5nLmhhbmRsZXJzlGoNjwAAdJSMBGx6bWGUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sem1hLmh0bWwjbW9kdWxlLWx6bWGUag2PAAB0lIwHbWFpbGJveJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtb2R1bGUtbWFpbGJveJRqDY8AAHSUjAdtYWlsY2FwlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGNhcC5odG1sI21vZHVsZS1tYWlsY2FwlGoNjwAAdJSMB21hcnNoYWyUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXJzaGFsLmh0bWwjbW9kdWxlLW1hcnNoYWyUag2PAAB0lIwEbWF0aJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtb2R1bGUtbWF0aJRqDY8AAHSUjAltaW1ldHlwZXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtb2R1bGUtbWltZXR5cGVzlGoNjwAAdJSMBG1tYXCUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW9kdWxlLW1tYXCUag2PAAB0lIwMbW9kdWxlZmluZGVylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlLW1vZHVsZWZpbmRlcpRqDY8AAHSUjAZtc2lsaWKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtb2R1bGUtbXNpbGlilGoNjwAAdJSMBm1zdmNydJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21vZHVsZS1tc3ZjcnSUag2PAAB0lIwPbXVsdGlwcm9jZXNzaW5nlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbW9kdWxlLW11bHRpcHJvY2Vzc2luZ5RqDY8AAHSUjBptdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI21vZHVsZS1tdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbpRqDY8AAHSUjBVtdWx0aXByb2Nlc3NpbmcuZHVtbXmUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtb2R1bGUtbXVsdGlwcm9jZXNzaW5nLmR1bW15lGoNjwAAdJSMGG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vyc5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI21vZHVsZS1tdWx0aXByb2Nlc3NpbmcubWFuYWdlcnOUag2PAAB0lIwUbXVsdGlwcm9jZXNzaW5nLnBvb2yUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtb2R1bGUtbXVsdGlwcm9jZXNzaW5nLnBvb2yUag2PAAB0lIwdbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnmUKGoKjwAAaguPAACMaWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5odG1sI21vZHVsZS1tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeZRqDY8AAHSUjBxtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzlChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbW9kdWxlLW11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXOUag2PAAB0lIwFbmV0cmOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uZXRyYy5odG1sI21vZHVsZS1uZXRyY5RqDY8AAHSUjANuaXOUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uaXMuaHRtbCNtb2R1bGUtbmlzlGoNjwAAdJSMB25udHBsaWKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ubnRwbGliLmh0bWwjbW9kdWxlLW5udHBsaWKUag2PAAB0lIwHbnVtYmVyc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L251bWJlcnMuaHRtbCNtb2R1bGUtbnVtYmVyc5RqDY8AAHSUjAhvcGVyYXRvcpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjbW9kdWxlLW9wZXJhdG9ylGoNjwAAdJSMCG9wdHBhcnNllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNtb2R1bGUtb3B0cGFyc2WUag2PAAB0lIwCb3OUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI21vZHVsZS1vc5RqDY8AAHSUjAdvcy5wYXRolChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI21vZHVsZS1vcy5wYXRolGoNjwAAdJSMC29zc2F1ZGlvZGV2lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNtb2R1bGUtb3NzYXVkaW9kZXaUag2PAAB0lIwGcGFyc2VylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGFyc2VyLmh0bWwjbW9kdWxlLXBhcnNlcpRqDY8AAHSUjAdwYXRobGlilChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI21vZHVsZS1wYXRobGlilGoNjwAAdJSMA3BkYpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI21vZHVsZS1wZGKUag2PAAB0lIwGcGlja2xllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjbW9kdWxlLXBpY2tsZZRqDY8AAHSUjAtwaWNrbGV0b29sc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZXRvb2xzLmh0bWwjbW9kdWxlLXBpY2tsZXRvb2xzlGoNjwAAdJSMBXBpcGVzlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlwZXMuaHRtbCNtb2R1bGUtcGlwZXOUag2PAAB0lIwHcGtndXRpbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNtb2R1bGUtcGtndXRpbJRqDY8AAHSUjAhwbGF0Zm9ybZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjbW9kdWxlLXBsYXRmb3JtlGoNjwAAdJSMCHBsaXN0bGlilChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNtb2R1bGUtcGxpc3RsaWKUag2PAAB0lIwGcG9wbGlilChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcG9wbGliLmh0bWwjbW9kdWxlLXBvcGxpYpRqDY8AAHSUjAVwb3NpeJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Bvc2l4Lmh0bWwjbW9kdWxlLXBvc2l4lGoNjwAAdJSMBnBwcmludJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI21vZHVsZS1wcHJpbnSUag2PAAB0lIwHcHJvZmlsZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNtb2R1bGUtcHJvZmlsZZRqDY8AAHSUjAZwc3RhdHOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjbW9kdWxlLXBzdGF0c5RqDY8AAHSUjANwdHmUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wdHkuaHRtbCNtb2R1bGUtcHR5lGoNjwAAdJSMA3B3ZJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B3ZC5odG1sI21vZHVsZS1wd2SUag2PAAB0lIwKcHlfY29tcGlsZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5X2NvbXBpbGUuaHRtbCNtb2R1bGUtcHlfY29tcGlsZZRqDY8AAHSUjAZweWNsYnKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWNsYnIuaHRtbCNtb2R1bGUtcHljbGJylGoNjwAAdJSMBXB5ZG9jlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlkb2MuaHRtbCNtb2R1bGUtcHlkb2OUag2PAAB0lIwFcXVldWWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9xdWV1ZS5odG1sI21vZHVsZS1xdWV1ZZRqDY8AAHSUjAZxdW9wcmmUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9xdW9wcmkuaHRtbCNtb2R1bGUtcXVvcHJplGoNjwAAdJSMBnJhbmRvbZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JhbmRvbS5odG1sI21vZHVsZS1yYW5kb22Uag2PAAB0lIwCcmWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI21vZHVsZS1yZZRqDY8AAHSUjAhyZWFkbGluZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjbW9kdWxlLXJlYWRsaW5llGoNjwAAdJSMB3JlcHJsaWKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXBybGliLmh0bWwjbW9kdWxlLXJlcHJsaWKUag2PAAB0lIwIcmVzb3VyY2WUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI21vZHVsZS1yZXNvdXJjZZRqDY8AAHSUjAtybGNvbXBsZXRlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JsY29tcGxldGVyLmh0bWwjbW9kdWxlLXJsY29tcGxldGVylGoNjwAAdJSMBXJ1bnB5lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcnVucHkuaHRtbCNtb2R1bGUtcnVucHmUag2PAAB0lIwFc2NoZWSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zY2hlZC5odG1sI21vZHVsZS1zY2hlZJRqDY8AAHSUjAdzZWNyZXRzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VjcmV0cy5odG1sI21vZHVsZS1zZWNyZXRzlGoNjwAAdJSMBnNlbGVjdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI21vZHVsZS1zZWxlY3SUag2PAAB0lIwJc2VsZWN0b3JzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjbW9kdWxlLXNlbGVjdG9yc5RqDY8AAHSUjAZzaGVsdmWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGVsdmUuaHRtbCNtb2R1bGUtc2hlbHZllGoNjwAAdJSMBXNobGV4lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNtb2R1bGUtc2hsZXiUag2PAAB0lIwGc2h1dGlslChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWwjbW9kdWxlLXNodXRpbJRqDY8AAHSUjAZzaWduYWyUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNtb2R1bGUtc2lnbmFslGoNjwAAdJSMBHNpdGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaXRlLmh0bWwjbW9kdWxlLXNpdGWUag2PAAB0lIwFc210cGSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwZC5odG1sI21vZHVsZS1zbXRwZJRqDY8AAHSUjAdzbXRwbGlilChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI21vZHVsZS1zbXRwbGlilGoNjwAAdJSMBnNuZGhkcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NuZGhkci5odG1sI21vZHVsZS1zbmRoZHKUag2PAAB0lIwGc29ja2V0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjbW9kdWxlLXNvY2tldJRqDY8AAHSUjAxzb2NrZXRzZXJ2ZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNtb2R1bGUtc29ja2V0c2VydmVylGoNjwAAdJSMBHNwd2SUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcHdkLmh0bWwjbW9kdWxlLXNwd2SUag2PAAB0lIwHc3FsaXRlM5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNtb2R1bGUtc3FsaXRlM5RqDY8AAHSUjANzc2yUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNtb2R1bGUtc3NslGoNjwAAdJSMBHN0YXSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjbW9kdWxlLXN0YXSUag2PAAB0lIwKc3RhdGlzdGljc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXRpc3RpY3MuaHRtbCNtb2R1bGUtc3RhdGlzdGljc5RqDY8AAHSUjAZzdHJpbmeUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNtb2R1bGUtc3RyaW5nlGoNjwAAdJSMCnN0cmluZ3ByZXCUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjbW9kdWxlLXN0cmluZ3ByZXCUag2PAAB0lIwGc3RydWN0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjbW9kdWxlLXN0cnVjdJRqDY8AAHSUjApzdWJwcm9jZXNzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI21vZHVsZS1zdWJwcm9jZXNzlGoNjwAAdJSMBXN1bmF1lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNtb2R1bGUtc3VuYXWUag2PAAB0lIwGc3ltYm9slChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltYm9sLmh0bWwjbW9kdWxlLXN5bWJvbJRqDY8AAHSUjAhzeW10YWJsZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjbW9kdWxlLXN5bXRhYmxllGoNjwAAdJSMA3N5c5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI21vZHVsZS1zeXOUag2PAAB0lIwJc3lzY29uZmlnlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjbW9kdWxlLXN5c2NvbmZpZ5RqDY8AAHSUjAZzeXNsb2eUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXNsb2cuaHRtbCNtb2R1bGUtc3lzbG9nlGoNjwAAdJSMCHRhYm5hbm55lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFibmFubnkuaHRtbCNtb2R1bGUtdGFibmFubnmUag2PAAB0lIwHdGFyZmlsZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCNtb2R1bGUtdGFyZmlsZZRqDY8AAHSUjAl0ZWxuZXRsaWKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCNtb2R1bGUtdGVsbmV0bGlilGoNjwAAdJSMCHRlbXBmaWxllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCNtb2R1bGUtdGVtcGZpbGWUag2PAAB0lIwHdGVybWlvc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlcm1pb3MuaHRtbCNtb2R1bGUtdGVybWlvc5RqDY8AAHSUjAR0ZXN0lChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI21vZHVsZS10ZXN0lGoNjwAAdJSMDHRlc3Quc3VwcG9ydJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCNtb2R1bGUtdGVzdC5zdXBwb3J0lGoNjwAAdJSMGnRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI21vZHVsZS10ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlcpRqDY8AAHSUjAh0ZXh0d3JhcJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RleHR3cmFwLmh0bWwjbW9kdWxlLXRleHR3cmFwlGoNjwAAdJSMCXRocmVhZGluZ5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI21vZHVsZS10aHJlYWRpbmeUag2PAAB0lIwEdGltZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCNtb2R1bGUtdGltZZRqDY8AAHSUjAZ0aW1laXSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1laXQuaHRtbCNtb2R1bGUtdGltZWl0lGoNjwAAdJSMB3RraW50ZXKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLmh0bWwjbW9kdWxlLXRraW50ZXKUag2PAAB0lIwUdGtpbnRlci5zY3JvbGxlZHRleHSUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnNjcm9sbGVkdGV4dC5odG1sI21vZHVsZS10a2ludGVyLnNjcm9sbGVkdGV4dJRqDY8AAHSUjAt0a2ludGVyLnRpeJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjbW9kdWxlLXRraW50ZXIudGl4lGoNjwAAdJSMC3RraW50ZXIudHRrlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCNtb2R1bGUtdGtpbnRlci50dGuUag2PAAB0lIwFdG9rZW6UKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI21vZHVsZS10b2tlbpRqDY8AAHSUjAh0b2tlbml6ZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuaXplLmh0bWwjbW9kdWxlLXRva2VuaXpllGoNjwAAdJSMBXRyYWNllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNtb2R1bGUtdHJhY2WUag2PAAB0lIwJdHJhY2ViYWNrlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjbW9kdWxlLXRyYWNlYmFja5RqDY8AAHSUjAt0cmFjZW1hbGxvY5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjbW9kdWxlLXRyYWNlbWFsbG9jlGoNjwAAdJSMA3R0eZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R0eS5odG1sI21vZHVsZS10dHmUag2PAAB0lIwGdHVydGxllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjbW9kdWxlLXR1cnRsZZRqDY8AAHSUjAp0dXJ0bGVkZW1vlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjbW9kdWxlLXR1cnRsZWRlbW+Uag2PAAB0lIwFdHlwZXOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI21vZHVsZS10eXBlc5RqDY8AAHSUjAZ0eXBpbmeUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCNtb2R1bGUtdHlwaW5nlGoNjwAAdJSMC3VuaWNvZGVkYXRhlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCNtb2R1bGUtdW5pY29kZWRhdGGUag2PAAB0lIwIdW5pdHRlc3SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI21vZHVsZS11bml0dGVzdJRqDY8AAHSUjA11bml0dGVzdC5tb2NrlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI21vZHVsZS11bml0dGVzdC5tb2NrlGoNjwAAdJSMBnVybGxpYpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5odG1sI21vZHVsZS11cmxsaWKUag2PAAB0lIwMdXJsbGliLmVycm9ylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLmVycm9yLmh0bWwjbW9kdWxlLXVybGxpYi5lcnJvcpRqDY8AAHSUjAx1cmxsaWIucGFyc2WUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCNtb2R1bGUtdXJsbGliLnBhcnNllGoNjwAAdJSMDnVybGxpYi5yZXF1ZXN0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNtb2R1bGUtdXJsbGliLnJlcXVlc3SUag2PAAB0lIwPdXJsbGliLnJlc3BvbnNllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNtb2R1bGUtdXJsbGliLnJlc3BvbnNllGoNjwAAdJSMEnVybGxpYi5yb2JvdHBhcnNlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlci5odG1sI21vZHVsZS11cmxsaWIucm9ib3RwYXJzZXKUag2PAAB0lIwCdXWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dS5odG1sI21vZHVsZS11dZRqDY8AAHSUjAR1dWlklChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI21vZHVsZS11dWlklGoNjwAAdJSMBHZlbnaUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS92ZW52Lmh0bWwjbW9kdWxlLXZlbnaUag2PAAB0lIwId2FybmluZ3OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXJuaW5ncy5odG1sI21vZHVsZS13YXJuaW5nc5RqDY8AAHSUjAR3YXZllChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1sI21vZHVsZS13YXZllGoNjwAAdJSMB3dlYWtyZWaUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjbW9kdWxlLXdlYWtyZWaUag2PAAB0lIwKd2ViYnJvd3NlcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbCNtb2R1bGUtd2ViYnJvd3NlcpRqDY8AAHSUjAZ3aW5yZWeUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCNtb2R1bGUtd2lucmVnlGoNjwAAdJSMCHdpbnNvdW5klChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2luc291bmQuaHRtbCNtb2R1bGUtd2luc291bmSUag2PAAB0lIwHd3NnaXJlZpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCNtb2R1bGUtd3NnaXJlZpRqDY8AAHSUjBB3c2dpcmVmLmhhbmRsZXJzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI21vZHVsZS13c2dpcmVmLmhhbmRsZXJzlGoNjwAAdJSMD3dzZ2lyZWYuaGVhZGVyc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCNtb2R1bGUtd3NnaXJlZi5oZWFkZXJzlGoNjwAAdJSMFXdzZ2lyZWYuc2ltcGxlX3NlcnZlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCNtb2R1bGUtd3NnaXJlZi5zaW1wbGVfc2VydmVylGoNjwAAdJSMDHdzZ2lyZWYudXRpbJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCNtb2R1bGUtd3NnaXJlZi51dGlslGoNjwAAdJSMEHdzZ2lyZWYudmFsaWRhdGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjbW9kdWxlLXdzZ2lyZWYudmFsaWRhdGWUag2PAAB0lIwGeGRybGlilChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjbW9kdWxlLXhkcmxpYpRqDY8AAHSUjAN4bWyUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuaHRtbCNtb2R1bGUteG1slGoNjwAAdJSMB3htbC5kb22UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjbW9kdWxlLXhtbC5kb22Uag2PAAB0lIwPeG1sLmRvbS5taW5pZG9tlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLmh0bWwjbW9kdWxlLXhtbC5kb20ubWluaWRvbZRqDY8AAHSUjA94bWwuZG9tLnB1bGxkb22UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCNtb2R1bGUteG1sLmRvbS5wdWxsZG9tlGoNjwAAdJSMFXhtbC5ldHJlZS5FbGVtZW50VHJlZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI21vZHVsZS14bWwuZXRyZWUuRWxlbWVudFRyZWWUag2PAAB0lIwReG1sLnBhcnNlcnMuZXhwYXSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjbW9kdWxlLXhtbC5wYXJzZXJzLmV4cGF0lGoNjwAAdJSMGHhtbC5wYXJzZXJzLmV4cGF0LmVycm9yc5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCNtb2R1bGUteG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzlGoNjwAAdJSMF3htbC5wYXJzZXJzLmV4cGF0Lm1vZGVslChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI21vZHVsZS14bWwucGFyc2Vycy5leHBhdC5tb2RlbJRqDY8AAHSUjAd4bWwuc2F4lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5odG1sI21vZHVsZS14bWwuc2F4lGoNjwAAdJSMD3htbC5zYXguaGFuZGxlcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI21vZHVsZS14bWwuc2F4LmhhbmRsZXKUag2PAAB0lIwQeG1sLnNheC5zYXh1dGlsc5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgudXRpbHMuaHRtbCNtb2R1bGUteG1sLnNheC5zYXh1dGlsc5RqDY8AAHSUjBF4bWwuc2F4LnhtbHJlYWRlcpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjbW9kdWxlLXhtbC5zYXgueG1scmVhZGVylGoNjwAAdJSMDXhtbHJwYy5jbGllbnSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjbW9kdWxlLXhtbHJwYy5jbGllbnSUag2PAAB0lIwNeG1scnBjLnNlcnZlcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIuaHRtbCNtb2R1bGUteG1scnBjLnNlcnZlcpRqDY8AAHSUjAZ6aXBhcHCUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBhcHAuaHRtbCNtb2R1bGUtemlwYXBwlGoNjwAAdJSMB3ppcGZpbGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjbW9kdWxlLXppcGZpbGWUag2PAAB0lIwJemlwaW1wb3J0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjbW9kdWxlLXppcGltcG9ydJRqDY8AAHSUjAR6bGlilChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI21vZHVsZS16bGlilGoNjwAAdJR1jAtweTpmdW5jdGlvbpR9lCiMCl9faW1wb3J0X1+UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNfX2ltcG9ydF9flGoNjwAAdJSMFV90aHJlYWQuYWxsb2NhdGVfbG9ja5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L190aHJlYWQuaHRtbCNfdGhyZWFkLmFsbG9jYXRlX2xvY2uUag2PAAB0lIwMX3RocmVhZC5leGl0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvX3RocmVhZC5odG1sI190aHJlYWQuZXhpdJRqDY8AAHSUjBFfdGhyZWFkLmdldF9pZGVudJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L190aHJlYWQuaHRtbCNfdGhyZWFkLmdldF9pZGVudJRqDY8AAHSUjBVfdGhyZWFkLmdldF9uYXRpdmVfaWSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9fdGhyZWFkLmh0bWwjX3RocmVhZC5nZXRfbmF0aXZlX2lklGoNjwAAdJSMFl90aHJlYWQuaW50ZXJydXB0X21haW6UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9fdGhyZWFkLmh0bWwjX3RocmVhZC5pbnRlcnJ1cHRfbWFpbpRqDY8AAHSUjBJfdGhyZWFkLnN0YWNrX3NpemWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9fdGhyZWFkLmh0bWwjX3RocmVhZC5zdGFja19zaXpllGoNjwAAdJSMGF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L190aHJlYWQuaHRtbCNfdGhyZWFkLnN0YXJ0X25ld190aHJlYWSUag2PAAB0lIwXYWJjLmFic3RyYWN0Y2xhc3NtZXRob2SUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hYmMuaHRtbCNhYmMuYWJzdHJhY3RjbGFzc21ldGhvZJRqDY8AAHSUjBJhYmMuYWJzdHJhY3RtZXRob2SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hYmMuaHRtbCNhYmMuYWJzdHJhY3RtZXRob2SUag2PAAB0lIwUYWJjLmFic3RyYWN0cHJvcGVydHmUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hYmMuaHRtbCNhYmMuYWJzdHJhY3Rwcm9wZXJ0eZRqDY8AAHSUjBhhYmMuYWJzdHJhY3RzdGF0aWNtZXRob2SUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hYmMuaHRtbCNhYmMuYWJzdHJhY3RzdGF0aWNtZXRob2SUag2PAAB0lIwTYWJjLmdldF9jYWNoZV90b2tlbpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FiYy5odG1sI2FiYy5nZXRfY2FjaGVfdG9rZW6Uag2PAAB0lIwDYWJzlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYWJzlGoNjwAAdJSMCWFpZmMub3BlbpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FpZmMuaHRtbCNhaWZjLm9wZW6Uag2PAAB0lIwDYWxslChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjYWxslGoNjwAAdJSMA2FueZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2FueZRqDY8AAHSUjAVhc2NpaZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2FzY2lplGoNjwAAdJSMEWFzdC5jb3B5X2xvY2F0aW9ulChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LmNvcHlfbG9jYXRpb26Uag2PAAB0lIwIYXN0LmR1bXCUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuZHVtcJRqDY8AAHSUjBlhc3QuZml4X21pc3NpbmdfbG9jYXRpb25zlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LmZpeF9taXNzaW5nX2xvY2F0aW9uc5RqDY8AAHSUjBFhc3QuZ2V0X2RvY3N0cmluZ5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzdC5odG1sI2FzdC5nZXRfZG9jc3RyaW5nlGoNjwAAdJSMFmFzdC5nZXRfc291cmNlX3NlZ21lbnSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuZ2V0X3NvdXJjZV9zZWdtZW50lGoNjwAAdJSMFGFzdC5pbmNyZW1lbnRfbGluZW5vlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LmluY3JlbWVudF9saW5lbm+Uag2PAAB0lIwUYXN0Lml0ZXJfY2hpbGRfbm9kZXOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuaXRlcl9jaGlsZF9ub2Rlc5RqDY8AAHSUjA9hc3QuaXRlcl9maWVsZHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuaXRlcl9maWVsZHOUag2PAAB0lIwQYXN0LmxpdGVyYWxfZXZhbJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzdC5odG1sI2FzdC5saXRlcmFsX2V2YWyUag2PAAB0lIwJYXN0LnBhcnNllChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LnBhcnNllGoNjwAAdJSMCGFzdC53YWxrlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWwjYXN0LndhbGuUag2PAAB0lIwRYXN5bmNpby5hbGxfdGFza3OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLmFsbF90YXNrc5RqDY8AAHSUjBRhc3luY2lvLmFzX2NvbXBsZXRlZJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tdGFzay5odG1sI2FzeW5jaW8uYXNfY29tcGxldGVklGoNjwAAdJSMEWFzeW5jaW8uY29yb3V0aW5llChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby5jb3JvdXRpbmWUag2PAAB0lIweYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLmh0bWwjYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjlGoNjwAAdJSMH2FzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3Nfc2hlbGyUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MuaHRtbCNhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxslGoNjwAAdJSME2FzeW5jaW8uY3JlYXRlX3Rhc2uUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLmNyZWF0ZV90YXNrlGoNjwAAdJSMFGFzeW5jaW8uY3VycmVudF90YXNrlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby5jdXJyZW50X3Rhc2uUag2PAAB0lIwVYXN5bmNpby5lbnN1cmVfZnV0dXJllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1mdXR1cmUuaHRtbCNhc3luY2lvLmVuc3VyZV9mdXR1cmWUag2PAAB0lIwOYXN5bmNpby5nYXRoZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLmdhdGhlcpRqDY8AAHSUjBlhc3luY2lvLmdldF9jaGlsZF93YXRjaGVylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wb2xpY3kuaHRtbCNhc3luY2lvLmdldF9jaGlsZF93YXRjaGVylGoNjwAAdJSMFmFzeW5jaW8uZ2V0X2V2ZW50X2xvb3CUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8uZ2V0X2V2ZW50X2xvb3CUag2PAAB0lIwdYXN5bmNpby5nZXRfZXZlbnRfbG9vcF9wb2xpY3mUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5lGoNjwAAdJSMGGFzeW5jaW8uZ2V0X3J1bm5pbmdfbG9vcJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5nZXRfcnVubmluZ19sb29wlGoNjwAAdJSME2FzeW5jaW8uaXNjb3JvdXRpbmWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLmlzY29yb3V0aW5llGoNjwAAdJSMG2FzeW5jaW8uaXNjb3JvdXRpbmVmdW5jdGlvbpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tdGFzay5odG1sI2FzeW5jaW8uaXNjb3JvdXRpbmVmdW5jdGlvbpRqDY8AAHSUjBBhc3luY2lvLmlzZnV0dXJllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1mdXR1cmUuaHRtbCNhc3luY2lvLmlzZnV0dXJllGoNjwAAdJSMFmFzeW5jaW8ubmV3X2V2ZW50X2xvb3CUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8ubmV3X2V2ZW50X2xvb3CUag2PAAB0lIwXYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb26UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5odG1sI2FzeW5jaW8ub3Blbl9jb25uZWN0aW9ulGoNjwAAdJSMHGFzeW5jaW8ub3Blbl91bml4X2Nvbm5lY3Rpb26UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5odG1sI2FzeW5jaW8ub3Blbl91bml4X2Nvbm5lY3Rpb26Uag2PAAB0lIwLYXN5bmNpby5ydW6UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLnJ1bpRqDY8AAHSUjCBhc3luY2lvLnJ1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tdGFzay5odG1sI2FzeW5jaW8ucnVuX2Nvcm91dGluZV90aHJlYWRzYWZllGoNjwAAdJSMGWFzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXKUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXKUag2PAAB0lIwWYXN5bmNpby5zZXRfZXZlbnRfbG9vcJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5zZXRfZXZlbnRfbG9vcJRqDY8AAHSUjB1hc3luY2lvLnNldF9ldmVudF9sb29wX3BvbGljeZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcG9saWN5Lmh0bWwjYXN5bmNpby5zZXRfZXZlbnRfbG9vcF9wb2xpY3mUag2PAAB0lIwOYXN5bmNpby5zaGllbGSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLnNoaWVsZJRqDY8AAHSUjA1hc3luY2lvLnNsZWVwlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby5zbGVlcJRqDY8AAHSUjBRhc3luY2lvLnN0YXJ0X3NlcnZlcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby5zdGFydF9zZXJ2ZXKUag2PAAB0lIwZYXN5bmNpby5zdGFydF91bml4X3NlcnZlcpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby5zdGFydF91bml4X3NlcnZlcpRqDY8AAHSUjAxhc3luY2lvLndhaXSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLndhaXSUag2PAAB0lIwQYXN5bmNpby53YWl0X2ZvcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tdGFzay5odG1sI2FzeW5jaW8ud2FpdF9mb3KUag2PAAB0lIwTYXN5bmNpby53cmFwX2Z1dHVyZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZnV0dXJlLmh0bWwjYXN5bmNpby53cmFwX2Z1dHVyZZRqDY8AAHSUjA1hc3luY29yZS5sb29wlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS5sb29wlGoNjwAAdJSMD2F0ZXhpdC5yZWdpc3RlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F0ZXhpdC5odG1sI2F0ZXhpdC5yZWdpc3RlcpRqDY8AAHSUjBFhdGV4aXQudW5yZWdpc3RlcpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F0ZXhpdC5odG1sI2F0ZXhpdC51bnJlZ2lzdGVylGoNjwAAdJSMC2F1ZGlvb3AuYWRklChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYWRklGoNjwAAdJSMEWF1ZGlvb3AuYWRwY20ybGlulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYWRwY20ybGlulGoNjwAAdJSMEGF1ZGlvb3AuYWxhdzJsaW6UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5hbGF3MmxpbpRqDY8AAHSUjAthdWRpb29wLmF2Z5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmF2Z5RqDY8AAHSUjA1hdWRpb29wLmF2Z3BwlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYXZncHCUag2PAAB0lIwMYXVkaW9vcC5iaWFzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYmlhc5RqDY8AAHSUjBBhdWRpb29wLmJ5dGVzd2FwlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuYnl0ZXN3YXCUag2PAAB0lIwNYXVkaW9vcC5jcm9zc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmNyb3NzlGoNjwAAdJSMEmF1ZGlvb3AuZmluZGZhY3RvcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLmZpbmRmYWN0b3KUag2PAAB0lIwPYXVkaW9vcC5maW5kZml0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuZmluZGZpdJRqDY8AAHSUjA9hdWRpb29wLmZpbmRtYXiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5maW5kbWF4lGoNjwAAdJSMEWF1ZGlvb3AuZ2V0c2FtcGxllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AuZ2V0c2FtcGxllGoNjwAAdJSMEWF1ZGlvb3AubGluMmFkcGNtlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AubGluMmFkcGNtlGoNjwAAdJSMEGF1ZGlvb3AubGluMmFsYXeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5saW4yYWxhd5RqDY8AAHSUjA9hdWRpb29wLmxpbjJsaW6UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5saW4ybGlulGoNjwAAdJSMEGF1ZGlvb3AubGluMnVsYXeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5saW4ydWxhd5RqDY8AAHSUjAthdWRpb29wLm1heJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLm1heJRqDY8AAHSUjA1hdWRpb29wLm1heHBwlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AubWF4cHCUag2PAAB0lIwOYXVkaW9vcC5taW5tYXiUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5taW5tYXiUag2PAAB0lIwLYXVkaW9vcC5tdWyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5tdWyUag2PAAB0lIwOYXVkaW9vcC5yYXRlY3aUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWwjYXVkaW9vcC5yYXRlY3aUag2PAAB0lIwPYXVkaW9vcC5yZXZlcnNllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AucmV2ZXJzZZRqDY8AAHSUjAthdWRpb29wLnJtc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLnJtc5RqDY8AAHSUjA5hdWRpb29wLnRvbW9ub5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLnRvbW9ub5RqDY8AAHSUjBBhdWRpb29wLnRvc3RlcmVvlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXVkaW9vcC5odG1sI2F1ZGlvb3AudG9zdGVyZW+Uag2PAAB0lIwQYXVkaW9vcC51bGF3MmxpbpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGlvb3AuaHRtbCNhdWRpb29wLnVsYXcybGlulGoNjwAAdJSMEGJhc2U2NC5hODVkZWNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYTg1ZGVjb2RllGoNjwAAdJSMEGJhc2U2NC5hODVlbmNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYTg1ZW5jb2RllGoNjwAAdJSMEGJhc2U2NC5iMTZkZWNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjE2ZGVjb2RllGoNjwAAdJSMEGJhc2U2NC5iMTZlbmNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjE2ZW5jb2RllGoNjwAAdJSMEGJhc2U2NC5iMzJkZWNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjMyZGVjb2RllGoNjwAAdJSMEGJhc2U2NC5iMzJlbmNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjMyZW5jb2RllGoNjwAAdJSMEGJhc2U2NC5iNjRkZWNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjY0ZGVjb2RllGoNjwAAdJSMEGJhc2U2NC5iNjRlbmNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjY0ZW5jb2RllGoNjwAAdJSMEGJhc2U2NC5iODVkZWNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjg1ZGVjb2RllGoNjwAAdJSMEGJhc2U2NC5iODVlbmNvZGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuYjg1ZW5jb2RllGoNjwAAdJSMDWJhc2U2NC5kZWNvZGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuZGVjb2RllGoNjwAAdJSMEmJhc2U2NC5kZWNvZGVieXRlc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5kZWNvZGVieXRlc5RqDY8AAHSUjBNiYXNlNjQuZGVjb2Rlc3RyaW5nlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmRlY29kZXN0cmluZ5RqDY8AAHSUjA1iYXNlNjQuZW5jb2RllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LmVuY29kZZRqDY8AAHSUjBJiYXNlNjQuZW5jb2RlYnl0ZXOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iYXNlNjQuaHRtbCNiYXNlNjQuZW5jb2RlYnl0ZXOUag2PAAB0lIwTYmFzZTY0LmVuY29kZXN0cmluZ5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5lbmNvZGVzdHJpbmeUag2PAAB0lIwZYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGWUag2PAAB0lIwZYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGWUag2PAAB0lIwYYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmFzZTY0Lmh0bWwjYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RllGoNjwAAdJSMGGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Jhc2U2NC5odG1sI2Jhc2U2NC51cmxzYWZlX2I2NGVuY29kZZRqDY8AAHSUjBFiZGIuY2hlY2tmdW5jbmFtZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JkYi5odG1sI2JkYi5jaGVja2Z1bmNuYW1llGoNjwAAdJSMDWJkYi5lZmZlY3RpdmWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuZWZmZWN0aXZllGoNjwAAdJSMDWJkYi5zZXRfdHJhY2WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuc2V0X3RyYWNllGoNjwAAdJSMA2JpbpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2JpbpRqDY8AAHSUjBNiaW5hc2NpaS5hMmJfYmFzZTY0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5hMmJfYmFzZTY0lGoNjwAAdJSMEGJpbmFzY2lpLmEyYl9oZXiUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmEyYl9oZXiUag2PAAB0lIwQYmluYXNjaWkuYTJiX2hxeJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYTJiX2hxeJRqDY8AAHSUjA9iaW5hc2NpaS5hMmJfcXCUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmEyYl9xcJRqDY8AAHSUjA9iaW5hc2NpaS5hMmJfdXWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmEyYl91dZRqDY8AAHSUjBNiaW5hc2NpaS5iMmFfYmFzZTY0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5iMmFfYmFzZTY0lGoNjwAAdJSMEGJpbmFzY2lpLmIyYV9oZXiUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmIyYV9oZXiUag2PAAB0lIwQYmluYXNjaWkuYjJhX2hxeJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuYjJhX2hxeJRqDY8AAHSUjA9iaW5hc2NpaS5iMmFfcXCUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmIyYV9xcJRqDY8AAHSUjA9iaW5hc2NpaS5iMmFfdXWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hc2NpaS5odG1sI2JpbmFzY2lpLmIyYV91dZRqDY8AAHSUjA5iaW5hc2NpaS5jcmMzMpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuY3JjMzKUag2PAAB0lIwQYmluYXNjaWkuY3JjX2hxeJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkuY3JjX2hxeJRqDY8AAHSUjBBiaW5hc2NpaS5oZXhsaWZ5lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5oZXhsaWZ5lGoNjwAAdJSMFGJpbmFzY2lpLnJsZWNvZGVfaHF4lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5ybGVjb2RlX2hxeJRqDY8AAHSUjBZiaW5hc2NpaS5ybGVkZWNvZGVfaHF4lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluYXNjaWkuaHRtbCNiaW5hc2NpaS5ybGVkZWNvZGVfaHF4lGoNjwAAdJSMEmJpbmFzY2lpLnVuaGV4bGlmeZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2JpbmFzY2lpLmh0bWwjYmluYXNjaWkudW5oZXhsaWZ5lGoNjwAAdJSMDWJpbmhleC5iaW5oZXiUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5oZXguaHRtbCNiaW5oZXguYmluaGV4lGoNjwAAdJSMDWJpbmhleC5oZXhiaW6UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5oZXguaHRtbCNiaW5oZXguaGV4YmlulGoNjwAAdJSMDWJpc2VjdC5iaXNlY3SUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuYmlzZWN0lGoNjwAAdJSMEmJpc2VjdC5iaXNlY3RfbGVmdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Jpc2VjdC5odG1sI2Jpc2VjdC5iaXNlY3RfbGVmdJRqDY8AAHSUjBNiaXNlY3QuYmlzZWN0X3JpZ2h0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmlzZWN0Lmh0bWwjYmlzZWN0LmJpc2VjdF9yaWdodJRqDY8AAHSUjA1iaXNlY3QuaW5zb3J0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmlzZWN0Lmh0bWwjYmlzZWN0Lmluc29ydJRqDY8AAHSUjBJiaXNlY3QuaW5zb3J0X2xlZnSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QuaW5zb3J0X2xlZnSUag2PAAB0lIwTYmlzZWN0Lmluc29ydF9yaWdodJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Jpc2VjdC5odG1sI2Jpc2VjdC5pbnNvcnRfcmlnaHSUag2PAAB0lIwKYnJlYWtwb2ludJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2JyZWFrcG9pbnSUag2PAAB0lIwMYnoyLmNvbXByZXNzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnoyLmh0bWwjYnoyLmNvbXByZXNzlGoNjwAAdJSMDmJ6Mi5kZWNvbXByZXNzlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnoyLmh0bWwjYnoyLmRlY29tcHJlc3OUag2PAAB0lIwIYnoyLm9wZW6UKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iejIuaHRtbCNiejIub3BlbpRqDY8AAHSUjBFjYWxlbmRhci5jYWxlbmRhcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuY2FsZW5kYXKUag2PAAB0lIwVY2FsZW5kYXIuZmlyc3R3ZWVrZGF5lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5maXJzdHdlZWtkYXmUag2PAAB0lIwPY2FsZW5kYXIuaXNsZWFwlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5pc2xlYXCUag2PAAB0lIwRY2FsZW5kYXIubGVhcGRheXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLmxlYXBkYXlzlGoNjwAAdJSMDmNhbGVuZGFyLm1vbnRolChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5tb250aJRqDY8AAHSUjBZjYWxlbmRhci5tb250aGNhbGVuZGFylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5tb250aGNhbGVuZGFylGoNjwAAdJSME2NhbGVuZGFyLm1vbnRocmFuZ2WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLm1vbnRocmFuZ2WUag2PAAB0lIwOY2FsZW5kYXIucHJjYWyUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLnByY2FslGoNjwAAdJSMEGNhbGVuZGFyLnBybW9udGiUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1sI2NhbGVuZGFyLnBybW9udGiUag2PAAB0lIwYY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5zZXRmaXJzdHdlZWtkYXmUag2PAAB0lIwPY2FsZW5kYXIudGltZWdtlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci50aW1lZ22Uag2PAAB0lIwQY2FsZW5kYXIud2Vla2RheZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIud2Vla2RheZRqDY8AAHSUjBNjYWxlbmRhci53ZWVraGVhZGVylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci53ZWVraGVhZGVylGoNjwAAdJSMCGNhbGxhYmxllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjY2FsbGFibGWUag2PAAB0lIwJY2dpLnBhcnNllChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnBhcnNllGoNjwAAdJSMEGNnaS5wYXJzZV9oZWFkZXKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jZ2kuaHRtbCNjZ2kucGFyc2VfaGVhZGVylGoNjwAAdJSME2NnaS5wYXJzZV9tdWx0aXBhcnSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jZ2kuaHRtbCNjZ2kucGFyc2VfbXVsdGlwYXJ0lGoNjwAAdJSME2NnaS5wcmludF9kaXJlY3RvcnmUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jZ2kuaHRtbCNjZ2kucHJpbnRfZGlyZWN0b3J5lGoNjwAAdJSMEWNnaS5wcmludF9lbnZpcm9ulChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnByaW50X2Vudmlyb26Uag2PAAB0lIwXY2dpLnByaW50X2Vudmlyb25fdXNhZ2WUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jZ2kuaHRtbCNjZ2kucHJpbnRfZW52aXJvbl91c2FnZZRqDY8AAHSUjA5jZ2kucHJpbnRfZm9ybZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NnaS5odG1sI2NnaS5wcmludF9mb3JtlGoNjwAAdJSMCGNnaS50ZXN0lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpLmh0bWwjY2dpLnRlc3SUag2PAAB0lIwMY2dpdGIuZW5hYmxllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpdGIuaHRtbCNjZ2l0Yi5lbmFibGWUag2PAAB0lIwNY2dpdGIuaGFuZGxlcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NnaXRiLmh0bWwjY2dpdGIuaGFuZGxlcpRqDY8AAHSUjApjZ2l0Yi5odG1slChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpdGIuaHRtbCNjZ2l0Yi5odG1slGoNjwAAdJSMCmNnaXRiLnRleHSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jZ2l0Yi5odG1sI2NnaXRiLnRleHSUag2PAAB0lIwDY2hylChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjY2hylGoNjwAAdJSMC2NsYXNzbWV0aG9klChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjY2xhc3NtZXRob2SUag2PAAB0lIwKY21hdGguYWNvc5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYWNvc5RqDY8AAHSUjAtjbWF0aC5hY29zaJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYWNvc2iUag2PAAB0lIwKY21hdGguYXNpbpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYXNpbpRqDY8AAHSUjAtjbWF0aC5hc2luaJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYXNpbmiUag2PAAB0lIwKY21hdGguYXRhbpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYXRhbpRqDY8AAHSUjAtjbWF0aC5hdGFuaJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguYXRhbmiUag2PAAB0lIwJY21hdGguY29zlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5jb3OUag2PAAB0lIwKY21hdGguY29zaJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguY29zaJRqDY8AAHSUjAljbWF0aC5leHCUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmV4cJRqDY8AAHSUjA1jbWF0aC5pc2Nsb3NllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5pc2Nsb3NllGoNjwAAdJSMDmNtYXRoLmlzZmluaXRllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5pc2Zpbml0ZZRqDY8AAHSUjAtjbWF0aC5pc2luZpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguaXNpbmaUag2PAAB0lIwLY21hdGguaXNuYW6UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLmlzbmFulGoNjwAAdJSMCWNtYXRoLmxvZ5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgubG9nlGoNjwAAdJSMC2NtYXRoLmxvZzEwlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5sb2cxMJRqDY8AAHSUjAtjbWF0aC5waGFzZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgucGhhc2WUag2PAAB0lIwLY21hdGgucG9sYXKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnBvbGFylGoNjwAAdJSMCmNtYXRoLnJlY3SUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnJlY3SUag2PAAB0lIwJY21hdGguc2lulChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5zaW6Uag2PAAB0lIwKY21hdGguc2luaJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGguc2luaJRqDY8AAHSUjApjbWF0aC5zcXJ0lChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY21hdGguaHRtbCNjbWF0aC5zcXJ0lGoNjwAAdJSMCWNtYXRoLnRhbpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWwjY21hdGgudGFulGoNjwAAdJSMCmNtYXRoLnRhbmiUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWF0aC5odG1sI2NtYXRoLnRhbmiUag2PAAB0lIwUY29kZS5jb21waWxlX2NvbW1hbmSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlLmh0bWwjY29kZS5jb21waWxlX2NvbW1hbmSUag2PAAB0lIwNY29kZS5pbnRlcmFjdJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLmludGVyYWN0lGoNjwAAdJSMEmNvZGVjcy5FbmNvZGVkRmlsZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5FbmNvZGVkRmlsZZRqDY8AAHSUjB5jb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnOUag2PAAB0lIwNY29kZWNzLmRlY29kZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5kZWNvZGWUag2PAAB0lIwNY29kZWNzLmVuY29kZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5lbmNvZGWUag2PAAB0lIwRY29kZWNzLmdldGRlY29kZXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZ2V0ZGVjb2RlcpRqDY8AAHSUjBFjb2RlY3MuZ2V0ZW5jb2RlcpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5nZXRlbmNvZGVylGoNjwAAdJSMHGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXKUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVylGoNjwAAdJSMHGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXKUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVylGoNjwAAdJSMEGNvZGVjcy5nZXRyZWFkZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZ2V0cmVhZGVylGoNjwAAdJSMEGNvZGVjcy5nZXR3cml0ZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuZ2V0d3JpdGVylGoNjwAAdJSMFGNvZGVjcy5pZ25vcmVfZXJyb3JzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLmlnbm9yZV9lcnJvcnOUag2PAAB0lIwRY29kZWNzLml0ZXJkZWNvZGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuaXRlcmRlY29kZZRqDY8AAHSUjBFjb2RlY3MuaXRlcmVuY29kZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5pdGVyZW5jb2RllGoNjwAAdJSMDWNvZGVjcy5sb29rdXCUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MubG9va3VwlGoNjwAAdJSME2NvZGVjcy5sb29rdXBfZXJyb3KUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MubG9va3VwX2Vycm9ylGoNjwAAdJSMGWNvZGVjcy5uYW1lcmVwbGFjZV9lcnJvcnOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MubmFtZXJlcGxhY2VfZXJyb3JzlGoNjwAAdJSMC2NvZGVjcy5vcGVulChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLm9wZW6Uag2PAAB0lIwPY29kZWNzLnJlZ2lzdGVylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLnJlZ2lzdGVylGoNjwAAdJSMFWNvZGVjcy5yZWdpc3Rlcl9lcnJvcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5yZWdpc3Rlcl9lcnJvcpRqDY8AAHSUjBVjb2RlY3MucmVwbGFjZV9lcnJvcnOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MucmVwbGFjZV9lcnJvcnOUag2PAAB0lIwUY29kZWNzLnN0cmljdF9lcnJvcnOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3Muc3RyaWN0X2Vycm9yc5RqDY8AAHSUjB9jb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9yc5RqDY8AAHSUjBZjb2Rlb3AuY29tcGlsZV9jb21tYW5klChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZW9wLmh0bWwjY29kZW9wLmNvbXBpbGVfY29tbWFuZJRqDY8AAHSUjBZjb2xsZWN0aW9ucy5uYW1lZHR1cGxllChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5uYW1lZHR1cGxllGoNjwAAdJSME2NvbG9yc3lzLmhsc190b19yZ2KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xvcnN5cy5odG1sI2NvbG9yc3lzLmhsc190b19yZ2KUag2PAAB0lIwTY29sb3JzeXMuaHN2X3RvX3JnYpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbG9yc3lzLmh0bWwjY29sb3JzeXMuaHN2X3RvX3JnYpRqDY8AAHSUjBNjb2xvcnN5cy5yZ2JfdG9faGxzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sb3JzeXMuaHRtbCNjb2xvcnN5cy5yZ2JfdG9faGxzlGoNjwAAdJSME2NvbG9yc3lzLnJnYl90b19oc3aUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xvcnN5cy5odG1sI2NvbG9yc3lzLnJnYl90b19oc3aUag2PAAB0lIwTY29sb3JzeXMucmdiX3RvX3lpcZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbG9yc3lzLmh0bWwjY29sb3JzeXMucmdiX3RvX3lpcZRqDY8AAHSUjBNjb2xvcnN5cy55aXFfdG9fcmdilChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sb3JzeXMuaHRtbCNjb2xvcnN5cy55aXFfdG9fcmdilGoNjwAAdJSMB2NvbXBpbGWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNjb21waWxllGoNjwAAdJSMFmNvbXBpbGVhbGwuY29tcGlsZV9kaXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY29tcGlsZWFsbC5jb21waWxlX2RpcpRqDY8AAHSUjBdjb21waWxlYWxsLmNvbXBpbGVfZmlsZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjb21waWxlYWxsLmNvbXBpbGVfZmlsZZRqDY8AAHSUjBdjb21waWxlYWxsLmNvbXBpbGVfcGF0aJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjb21waWxlYWxsLmNvbXBpbGVfcGF0aJRqDY8AAHSUjB9jb25jdXJyZW50LmZ1dHVyZXMuYXNfY29tcGxldGVklChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLmFzX2NvbXBsZXRlZJRqDY8AAHSUjBdjb25jdXJyZW50LmZ1dHVyZXMud2FpdJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy53YWl0lGoNjwAAdJSMHmNvbnRleHRsaWIuYXN5bmNjb250ZXh0bWFuYWdlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLmFzeW5jY29udGV4dG1hbmFnZXKUag2PAAB0lIwSY29udGV4dGxpYi5jbG9zaW5nlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIuY2xvc2luZ5RqDY8AAHSUjBljb250ZXh0bGliLmNvbnRleHRtYW5hZ2VylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIuY29udGV4dG1hbmFnZXKUag2PAAB0lIwWY29udGV4dGxpYi5udWxsY29udGV4dJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLm51bGxjb250ZXh0lGoNjwAAdJSMGmNvbnRleHRsaWIucmVkaXJlY3Rfc3RkZXJylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIucmVkaXJlY3Rfc3RkZXJylGoNjwAAdJSMGmNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0lGoNjwAAdJSME2NvbnRleHRsaWIuc3VwcHJlc3OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0bGliLmh0bWwjY29udGV4dGxpYi5zdXBwcmVzc5RqDY8AAHSUjBhjb250ZXh0dmFycy5jb3B5X2NvbnRleHSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0dmFycy5odG1sI2NvbnRleHR2YXJzLmNvcHlfY29udGV4dJRqDY8AAHSUjAljb3B5LmNvcHmUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb3B5Lmh0bWwjY29weS5jb3B5lGoNjwAAdJSMDWNvcHkuZGVlcGNvcHmUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb3B5Lmh0bWwjY29weS5kZWVwY29weZRqDY8AAHSUjBNjb3B5cmVnLmNvbnN0cnVjdG9ylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29weXJlZy5odG1sI2NvcHlyZWcuY29uc3RydWN0b3KUag2PAAB0lIwOY29weXJlZy5waWNrbGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb3B5cmVnLmh0bWwjY29weXJlZy5waWNrbGWUag2PAAB0lIwPY3JlYXRlX3Nob3J0Y3V0lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNjcmVhdGVfc2hvcnRjdXSUag2PAAB0lIwLY3J5cHQuY3J5cHSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jcnlwdC5odG1sI2NyeXB0LmNyeXB0lGoNjwAAdJSMDGNyeXB0Lm1rc2FsdJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NyeXB0Lmh0bWwjY3J5cHQubWtzYWx0lGoNjwAAdJSMFGNzdi5maWVsZF9zaXplX2xpbWl0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LmZpZWxkX3NpemVfbGltaXSUag2PAAB0lIwPY3N2LmdldF9kaWFsZWN0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LmdldF9kaWFsZWN0lGoNjwAAdJSMEWNzdi5saXN0X2RpYWxlY3RzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2Lmxpc3RfZGlhbGVjdHOUag2PAAB0lIwKY3N2LnJlYWRlcpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5yZWFkZXKUag2PAAB0lIwUY3N2LnJlZ2lzdGVyX2RpYWxlY3SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YucmVnaXN0ZXJfZGlhbGVjdJRqDY8AAHSUjBZjc3YudW5yZWdpc3Rlcl9kaWFsZWN0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LnVucmVnaXN0ZXJfZGlhbGVjdJRqDY8AAHSUjApjc3Yud3JpdGVylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LndyaXRlcpRqDY8AAHSUjBBjdHlwZXMuQ0ZVTkNUWVBFlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkNGVU5DVFlQRZRqDY8AAHSUjBZjdHlwZXMuRGxsQ2FuVW5sb2FkTm93lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkRsbENhblVubG9hZE5vd5RqDY8AAHSUjBhjdHlwZXMuRGxsR2V0Q2xhc3NPYmplY3SUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuRGxsR2V0Q2xhc3NPYmplY3SUag2PAAB0lIwSY3R5cGVzLkZvcm1hdEVycm9ylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkZvcm1hdEVycm9ylGoNjwAAdJSME2N0eXBlcy5HZXRMYXN0RXJyb3KUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuR2V0TGFzdEVycm9ylGoNjwAAdJSMDmN0eXBlcy5QT0lOVEVSlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLlBPSU5URVKUag2PAAB0lIwRY3R5cGVzLlBZRlVOQ1RZUEWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuUFlGVU5DVFlQRZRqDY8AAHSUjBJjdHlwZXMuV0lORlVOQ1RZUEWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuV0lORlVOQ1RZUEWUag2PAAB0lIwPY3R5cGVzLldpbkVycm9ylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLldpbkVycm9ylGoNjwAAdJSMEGN0eXBlcy5hZGRyZXNzb2aUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuYWRkcmVzc29mlGoNjwAAdJSMEGN0eXBlcy5hbGlnbm1lbnSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuYWxpZ25tZW50lGoNjwAAdJSMDGN0eXBlcy5ieXJlZpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5ieXJlZpRqDY8AAHSUjAtjdHlwZXMuY2FzdJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jYXN0lGoNjwAAdJSMG2N0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcpRqDY8AAHSUjBxjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcpRqDY8AAHSUjBBjdHlwZXMuZ2V0X2Vycm5vlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmdldF9lcnJub5RqDY8AAHSUjBVjdHlwZXMuZ2V0X2xhc3RfZXJyb3KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuZ2V0X2xhc3RfZXJyb3KUag2PAAB0lIwOY3R5cGVzLm1lbW1vdmWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMubWVtbW92ZZRqDY8AAHSUjA1jdHlwZXMubWVtc2V0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLm1lbXNldJRqDY8AAHSUjA5jdHlwZXMucG9pbnRlcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5wb2ludGVylGoNjwAAdJSMDWN0eXBlcy5yZXNpemWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMucmVzaXpllGoNjwAAdJSMEGN0eXBlcy5zZXRfZXJybm+UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuc2V0X2Vycm5vlGoNjwAAdJSMFWN0eXBlcy5zZXRfbGFzdF9lcnJvcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5zZXRfbGFzdF9lcnJvcpRqDY8AAHSUjA1jdHlwZXMuc2l6ZW9mlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnNpemVvZpRqDY8AAHSUjBBjdHlwZXMuc3RyaW5nX2F0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLnN0cmluZ19hdJRqDY8AAHSUjBhjdHlwZXMudXRpbC5maW5kX2xpYnJhcnmUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMudXRpbC5maW5kX2xpYnJhcnmUag2PAAB0lIwXY3R5cGVzLnV0aWwuZmluZF9tc3ZjcnSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMudXRpbC5maW5kX21zdmNydJRqDY8AAHSUjBFjdHlwZXMud3N0cmluZ19hdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy53c3RyaW5nX2F0lGoNjwAAdJSMEGN1cnNlcy5hc2NpaS5hbHSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuYWx0lGoNjwAAdJSMEmN1cnNlcy5hc2NpaS5hc2NpaZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5hc2NpaZRqDY8AAHSUjBFjdXJzZXMuYXNjaWkuY3RybJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5jdHJslGoNjwAAdJSMFGN1cnNlcy5hc2NpaS5pc2FsbnVtlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzYWxudW2Uag2PAAB0lIwUY3Vyc2VzLmFzY2lpLmlzYWxwaGGUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNhbHBoYZRqDY8AAHSUjBRjdXJzZXMuYXNjaWkuaXNhc2NpaZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc2FzY2lplGoNjwAAdJSMFGN1cnNlcy5hc2NpaS5pc2JsYW5rlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzYmxhbmuUag2PAAB0lIwUY3Vyc2VzLmFzY2lpLmlzY250cmyUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNjbnRybJRqDY8AAHSUjBNjdXJzZXMuYXNjaWkuaXNjdHJslChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzY3RybJRqDY8AAHSUjBRjdXJzZXMuYXNjaWkuaXNkaWdpdJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc2RpZ2l0lGoNjwAAdJSMFGN1cnNlcy5hc2NpaS5pc2dyYXBolChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzZ3JhcGiUag2PAAB0lIwUY3Vyc2VzLmFzY2lpLmlzbG93ZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNsb3dlcpRqDY8AAHSUjBNjdXJzZXMuYXNjaWkuaXNtZXRhlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzbWV0YZRqDY8AAHSUjBRjdXJzZXMuYXNjaWkuaXNwcmludJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc3ByaW50lGoNjwAAdJSMFGN1cnNlcy5hc2NpaS5pc3B1bmN0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLmlzcHVuY3SUag2PAAB0lIwUY3Vyc2VzLmFzY2lpLmlzc3BhY2WUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuYXNjaWkuaHRtbCNjdXJzZXMuYXNjaWkuaXNzcGFjZZRqDY8AAHSUjBRjdXJzZXMuYXNjaWkuaXN1cHBlcpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc3VwcGVylGoNjwAAdJSMFWN1cnNlcy5hc2NpaS5pc3hkaWdpdJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5odG1sI2N1cnNlcy5hc2NpaS5pc3hkaWdpdJRqDY8AAHSUjBNjdXJzZXMuYXNjaWkudW5jdHJslChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWwjY3Vyc2VzLmFzY2lpLnVuY3RybJRqDY8AAHSUjA9jdXJzZXMuYmF1ZHJhdGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuYmF1ZHJhdGWUag2PAAB0lIwLY3Vyc2VzLmJlZXCUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuYmVlcJRqDY8AAHSUjBdjdXJzZXMuY2FuX2NoYW5nZV9jb2xvcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5jYW5fY2hhbmdlX2NvbG9ylGoNjwAAdJSMDWN1cnNlcy5jYnJlYWuUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuY2JyZWFrlGoNjwAAdJSMFGN1cnNlcy5jb2xvcl9jb250ZW50lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmNvbG9yX2NvbnRlbnSUag2PAAB0lIwRY3Vyc2VzLmNvbG9yX3BhaXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuY29sb3JfcGFpcpRqDY8AAHSUjA9jdXJzZXMuY3Vyc19zZXSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuY3Vyc19zZXSUag2PAAB0lIwUY3Vyc2VzLmRlZl9wcm9nX21vZGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZGVmX3Byb2dfbW9kZZRqDY8AAHSUjBVjdXJzZXMuZGVmX3NoZWxsX21vZGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZGVmX3NoZWxsX21vZGWUag2PAAB0lIwTY3Vyc2VzLmRlbGF5X291dHB1dJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5kZWxheV9vdXRwdXSUag2PAAB0lIwPY3Vyc2VzLmRvdXBkYXRllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmRvdXBkYXRllGoNjwAAdJSMC2N1cnNlcy5lY2hvlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmVjaG+Uag2PAAB0lIwNY3Vyc2VzLmVuZHdpbpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5lbmR3aW6Uag2PAAB0lIwQY3Vyc2VzLmVyYXNlY2hhcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5lcmFzZWNoYXKUag2PAAB0lIwNY3Vyc2VzLmZpbHRlcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5maWx0ZXKUag2PAAB0lIwMY3Vyc2VzLmZsYXNolChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmZsYXNolGoNjwAAdJSMD2N1cnNlcy5mbHVzaGlucJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5mbHVzaGlucJRqDY8AAHSUjA9jdXJzZXMuZ2V0bW91c2WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuZ2V0bW91c2WUag2PAAB0lIwNY3Vyc2VzLmdldHN5eJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5nZXRzeXiUag2PAAB0lIwNY3Vyc2VzLmdldHdpbpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5nZXR3aW6Uag2PAAB0lIwQY3Vyc2VzLmhhbGZkZWxheZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5oYWxmZGVsYXmUag2PAAB0lIwRY3Vyc2VzLmhhc19jb2xvcnOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuaGFzX2NvbG9yc5RqDY8AAHSUjA1jdXJzZXMuaGFzX2ljlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmhhc19pY5RqDY8AAHSUjA1jdXJzZXMuaGFzX2lslChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmhhc19pbJRqDY8AAHSUjA5jdXJzZXMuaGFzX2tleZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5oYXNfa2V5lGoNjwAAdJSMEWN1cnNlcy5pbml0X2NvbG9ylChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmluaXRfY29sb3KUag2PAAB0lIwQY3Vyc2VzLmluaXRfcGFpcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5pbml0X3BhaXKUag2PAAB0lIwOY3Vyc2VzLmluaXRzY3KUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuaW5pdHNjcpRqDY8AAHSUjBZjdXJzZXMuaXNfdGVybV9yZXNpemVklChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmlzX3Rlcm1fcmVzaXplZJRqDY8AAHSUjA9jdXJzZXMuaXNlbmR3aW6UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMuaXNlbmR3aW6Uag2PAAB0lIwOY3Vyc2VzLmtleW5hbWWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMua2V5bmFtZZRqDY8AAHSUjA9jdXJzZXMua2lsbGNoYXKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMua2lsbGNoYXKUag2PAAB0lIwPY3Vyc2VzLmxvbmduYW1llChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLmxvbmduYW1llGoNjwAAdJSMC2N1cnNlcy5tZXRhlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm1ldGGUag2PAAB0lIwUY3Vyc2VzLm1vdXNlaW50ZXJ2YWyUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubW91c2VpbnRlcnZhbJRqDY8AAHSUjBBjdXJzZXMubW91c2VtYXNrlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm1vdXNlbWFza5RqDY8AAHSUjAxjdXJzZXMubmFwbXOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubmFwbXOUag2PAAB0lIwNY3Vyc2VzLm5ld3BhZJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5uZXdwYWSUag2PAAB0lIwNY3Vyc2VzLm5ld3dpbpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5uZXd3aW6Uag2PAAB0lIwJY3Vyc2VzLm5slChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm5slGoNjwAAdJSMD2N1cnNlcy5ub2NicmVha5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ub2NicmVha5RqDY8AAHSUjA1jdXJzZXMubm9lY2hvlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLm5vZWNob5RqDY8AAHSUjAtjdXJzZXMubm9ubJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ub25slGoNjwAAdJSMEGN1cnNlcy5ub3FpZmx1c2iUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMubm9xaWZsdXNolGoNjwAAdJSMDGN1cnNlcy5ub3Jhd5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5ub3Jhd5RqDY8AAHSUjBNjdXJzZXMucGFpcl9jb250ZW50lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnBhaXJfY29udGVudJRqDY8AAHSUjBJjdXJzZXMucGFpcl9udW1iZXKUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMucGFpcl9udW1iZXKUag2PAAB0lIwZY3Vyc2VzLnBhbmVsLmJvdHRvbV9wYW5lbJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5ib3R0b21fcGFuZWyUag2PAAB0lIwWY3Vyc2VzLnBhbmVsLm5ld19wYW5lbJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC5uZXdfcGFuZWyUag2PAAB0lIwWY3Vyc2VzLnBhbmVsLnRvcF9wYW5lbJSVBgABAAAAAAAoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy5wYW5lbC50b3BfcGFuZWyUag2PAAB0lIwaY3Vyc2VzLnBhbmVsLnVwZGF0ZV9wYW5lbHOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXMucGFuZWwudXBkYXRlX3BhbmVsc5RqDY8AAHSUjAtjdXJzZXMucHV0cJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5wdXRwlGoNjwAAdJSMDmN1cnNlcy5xaWZsdXNolChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnFpZmx1c2iUag2PAAB0lIwKY3Vyc2VzLnJhd5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5yYXeUag2PAAB0lIwWY3Vyc2VzLnJlc2V0X3Byb2dfbW9kZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5yZXNldF9wcm9nX21vZGWUag2PAAB0lIwXY3Vyc2VzLnJlc2V0X3NoZWxsX21vZGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMucmVzZXRfc2hlbGxfbW9kZZRqDY8AAHSUjA5jdXJzZXMucmVzZXR0eZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5yZXNldHR5lGoNjwAAdJSMEmN1cnNlcy5yZXNpemVfdGVybZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5yZXNpemVfdGVybZRqDY8AAHSUjBFjdXJzZXMucmVzaXpldGVybZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5yZXNpemV0ZXJtlGoNjwAAdJSMDmN1cnNlcy5zYXZldHR5lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnNhdmV0dHmUag2PAAB0lIwNY3Vyc2VzLnNldHN5eJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5zZXRzeXiUag2PAAB0lIwQY3Vyc2VzLnNldHVwdGVybZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy5zZXR1cHRlcm2Uag2PAAB0lIwSY3Vyc2VzLnN0YXJ0X2NvbG9ylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnN0YXJ0X2NvbG9ylGoNjwAAdJSMEGN1cnNlcy50ZXJtYXR0cnOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGVybWF0dHJzlGoNjwAAdJSMD2N1cnNlcy50ZXJtbmFtZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy50ZXJtbmFtZZRqDY8AAHSUjBhjdXJzZXMudGV4dHBhZC5yZWN0YW5nbGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5yZWN0YW5nbGWUag2PAAB0lIwQY3Vyc2VzLnRpZ2V0ZmxhZ5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy50aWdldGZsYWeUag2PAAB0lIwPY3Vyc2VzLnRpZ2V0bnVtlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnRpZ2V0bnVtlGoNjwAAdJSMD2N1cnNlcy50aWdldHN0cpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy50aWdldHN0cpRqDY8AAHSUjAxjdXJzZXMudHBhcm2UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudHBhcm2Uag2PAAB0lIwQY3Vyc2VzLnR5cGVhaGVhZJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy50eXBlYWhlYWSUag2PAAB0lIwNY3Vyc2VzLnVuY3RybJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51bmN0cmyUag2PAAB0lIwQY3Vyc2VzLnVuZ2V0X3djaJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51bmdldF93Y2iUag2PAAB0lIwOY3Vyc2VzLnVuZ2V0Y2iUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudW5nZXRjaJRqDY8AAHSUjBFjdXJzZXMudW5nZXRtb3VzZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51bmdldG1vdXNllGoNjwAAdJSMGGN1cnNlcy51cGRhdGVfbGluZXNfY29sc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51cGRhdGVfbGluZXNfY29sc5RqDY8AAHSUjBljdXJzZXMudXNlX2RlZmF1bHRfY29sb3JzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLnVzZV9kZWZhdWx0X2NvbG9yc5RqDY8AAHSUjA5jdXJzZXMudXNlX2VudpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy51c2VfZW52lGoNjwAAdJSMDmN1cnNlcy53cmFwcGVylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmh0bWwjY3Vyc2VzLndyYXBwZXKUag2PAAB0lIwSZGF0YWNsYXNzZXMuYXNkaWN0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0YWNsYXNzZXMuaHRtbCNkYXRhY2xhc3Nlcy5hc2RpY3SUag2PAAB0lIwTZGF0YWNsYXNzZXMuYXN0dXBsZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGFjbGFzc2VzLmh0bWwjZGF0YWNsYXNzZXMuYXN0dXBsZZRqDY8AAHSUjBVkYXRhY2xhc3Nlcy5kYXRhY2xhc3OUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRhY2xhc3Nlcy5odG1sI2RhdGFjbGFzc2VzLmRhdGFjbGFzc5RqDY8AAHSUjBFkYXRhY2xhc3Nlcy5maWVsZJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGFjbGFzc2VzLmh0bWwjZGF0YWNsYXNzZXMuZmllbGSUag2PAAB0lIwSZGF0YWNsYXNzZXMuZmllbGRzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0YWNsYXNzZXMuaHRtbCNkYXRhY2xhc3Nlcy5maWVsZHOUag2PAAB0lIwYZGF0YWNsYXNzZXMuaXNfZGF0YWNsYXNzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0YWNsYXNzZXMuaHRtbCNkYXRhY2xhc3Nlcy5pc19kYXRhY2xhc3OUag2PAAB0lIwaZGF0YWNsYXNzZXMubWFrZV9kYXRhY2xhc3OUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRhY2xhc3Nlcy5odG1sI2RhdGFjbGFzc2VzLm1ha2VfZGF0YWNsYXNzlGoNjwAAdJSME2RhdGFjbGFzc2VzLnJlcGxhY2WUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRhY2xhc3Nlcy5odG1sI2RhdGFjbGFzc2VzLnJlcGxhY2WUag2PAAB0lIwNZGJtLmR1bWIub3BlbpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RibS5odG1sI2RibS5kdW1iLm9wZW6Uag2PAAB0lIwMZGJtLmdudS5vcGVulChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGJtLmh0bWwjZGJtLmdudS5vcGVulGoNjwAAdJSMDWRibS5uZGJtLm9wZW6UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0ubmRibS5vcGVulGoNjwAAdJSMCGRibS5vcGVulChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGJtLmh0bWwjZGJtLm9wZW6Uag2PAAB0lIwLZGJtLndoaWNoZGKUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYm0uaHRtbCNkYm0ud2hpY2hkYpRqDY8AAHSUjBJkZWNpbWFsLmdldGNvbnRleHSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5nZXRjb250ZXh0lGoNjwAAdJSMFGRlY2ltYWwubG9jYWxjb250ZXh0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwubG9jYWxjb250ZXh0lGoNjwAAdJSMEmRlY2ltYWwuc2V0Y29udGV4dJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLnNldGNvbnRleHSUag2PAAB0lIwHZGVsYXR0cpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2RlbGF0dHKUag2PAAB0lIwZZGlmZmxpYi5JU19DSEFSQUNURVJfSlVOS5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLklTX0NIQVJBQ1RFUl9KVU5LlGoNjwAAdJSMFGRpZmZsaWIuSVNfTElORV9KVU5LlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuSVNfTElORV9KVU5LlGoNjwAAdJSMFGRpZmZsaWIuY29udGV4dF9kaWZmlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuY29udGV4dF9kaWZmlGoNjwAAdJSMEmRpZmZsaWIuZGlmZl9ieXRlc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLmRpZmZfYnl0ZXOUag2PAAB0lIwZZGlmZmxpYi5nZXRfY2xvc2VfbWF0Y2hlc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLmdldF9jbG9zZV9tYXRjaGVzlGoNjwAAdJSMDWRpZmZsaWIubmRpZmaUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5uZGlmZpRqDY8AAHSUjA9kaWZmbGliLnJlc3RvcmWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5yZXN0b3JllGoNjwAAdJSMFGRpZmZsaWIudW5pZmllZF9kaWZmlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIudW5pZmllZF9kaWZmlGoNjwAAdJSMA2RpcpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2RpcpRqDY8AAHSUjBFkaXJlY3RvcnlfY3JlYXRlZJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjZGlyZWN0b3J5X2NyZWF0ZWSUag2PAAB0lIwNZGlzLmNvZGVfaW5mb5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5jb2RlX2luZm+Uag2PAAB0lIwHZGlzLmRpc5QoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5kaXOUag2PAAB0lIwPZGlzLmRpc2Fzc2VtYmxllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjZGlzLmRpc2Fzc2VtYmxllGoNjwAAdJSMCWRpcy5kaXNjb5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2Rpcy5kaXNjb5RqDY8AAHSUjAlkaXMuZGlzdGKUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuZGlzdGKUag2PAAB0lIwOZGlzLmZpbmRsYWJlbHOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuZmluZGxhYmVsc5RqDY8AAHSUjBJkaXMuZmluZGxpbmVzdGFydHOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuZmluZGxpbmVzdGFydHOUag2PAAB0lIwUZGlzLmdldF9pbnN0cnVjdGlvbnOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuZ2V0X2luc3RydWN0aW9uc5RqDY8AAHSUjA1kaXMuc2hvd19jb2RllChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjZGlzLnNob3dfY29kZZRqDY8AAHSUjBBkaXMuc3RhY2tfZWZmZWN0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjZGlzLnN0YWNrX2VmZmVjdJRqDY8AAHSUjCNkaXN0dXRpbHMuYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmFyY2hpdmVfdXRpbC5tYWtlX2FyY2hpdmWUag2PAAB0lIwjZGlzdHV0aWxzLmFyY2hpdmVfdXRpbC5tYWtlX3RhcmJhbGyUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5hcmNoaXZlX3V0aWwubWFrZV90YXJiYWxslGoNjwAAdJSMI2Rpc3R1dGlscy5hcmNoaXZlX3V0aWwubWFrZV96aXBmaWxllChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuYXJjaGl2ZV91dGlsLm1ha2VfemlwZmlsZZRqDY8AAHSUjCNkaXN0dXRpbHMuY2NvbXBpbGVyLmdlbl9saWJfb3B0aW9uc5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5nZW5fbGliX29wdGlvbnOUag2PAAB0lIwqZGlzdHV0aWxzLmNjb21waWxlci5nZW5fcHJlcHJvY2Vzc19vcHRpb25zlChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLmdlbl9wcmVwcm9jZXNzX29wdGlvbnOUag2PAAB0lIwoZGlzdHV0aWxzLmNjb21waWxlci5nZXRfZGVmYXVsdF9jb21waWxlcpQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5nZXRfZGVmYXVsdF9jb21waWxlcpRqDY8AAHSUjCBkaXN0dXRpbHMuY2NvbXBpbGVyLm5ld19jb21waWxlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5uZXdfY29tcGlsZXKUag2PAAB0lIwiZGlzdHV0aWxzLmNjb21waWxlci5zaG93X2NvbXBpbGVyc5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNjb21waWxlci5zaG93X2NvbXBpbGVyc5RqDY8AAHSUjBhkaXN0dXRpbHMuY29yZS5ydW5fc2V0dXCUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jb3JlLnJ1bl9zZXR1cJRqDY8AAHSUjBRkaXN0dXRpbHMuY29yZS5zZXR1cJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmNvcmUuc2V0dXCUag2PAAB0lIwYZGlzdHV0aWxzLmRlcF91dGlsLm5ld2VylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGVwX3V0aWwubmV3ZXKUag2PAAB0lIweZGlzdHV0aWxzLmRlcF91dGlsLm5ld2VyX2dyb3VwlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGVwX3V0aWwubmV3ZXJfZ3JvdXCUag2PAAB0lIwhZGlzdHV0aWxzLmRlcF91dGlsLm5ld2VyX3BhaXJ3aXNllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGVwX3V0aWwubmV3ZXJfcGFpcndpc2WUag2PAAB0lIwcZGlzdHV0aWxzLmRpcl91dGlsLmNvcHlfdHJlZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmRpcl91dGlsLmNvcHlfdHJlZZRqDY8AAHSUjB5kaXN0dXRpbHMuZGlyX3V0aWwuY3JlYXRlX3RyZWWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5kaXJfdXRpbC5jcmVhdGVfdHJlZZRqDY8AAHSUjBlkaXN0dXRpbHMuZGlyX3V0aWwubWtwYXRolChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZGlyX3V0aWwubWtwYXRolGoNjwAAdJSMHmRpc3R1dGlscy5kaXJfdXRpbC5yZW1vdmVfdHJlZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmRpcl91dGlsLnJlbW92ZV90cmVllGoNjwAAdJSMI2Rpc3R1dGlscy5mYW5jeV9nZXRvcHQuZmFuY3lfZ2V0b3B0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LmZhbmN5X2dldG9wdJRqDY8AAHSUjCBkaXN0dXRpbHMuZmFuY3lfZ2V0b3B0LndyYXBfdGV4dJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC53cmFwX3RleHSUag2PAAB0lIwdZGlzdHV0aWxzLmZpbGVfdXRpbC5jb3B5X2ZpbGWUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5maWxlX3V0aWwuY29weV9maWxllGoNjwAAdJSMHWRpc3R1dGlscy5maWxlX3V0aWwubW92ZV9maWxllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuZmlsZV91dGlsLm1vdmVfZmlsZZRqDY8AAHSUjB5kaXN0dXRpbHMuZmlsZV91dGlsLndyaXRlX2ZpbGWUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5maWxlX3V0aWwud3JpdGVfZmlsZZRqDY8AAHSUjCZkaXN0dXRpbHMuc3lzY29uZmlnLmN1c3RvbWl6ZV9jb21waWxlcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnN5c2NvbmZpZy5jdXN0b21pemVfY29tcGlsZXKUag2PAAB0lIwpZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWWUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ19oX2ZpbGVuYW1llGoNjwAAdJSMImRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXKUag2PAAB0lIwjZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnOUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzlGoNjwAAdJSMKWRpc3R1dGlscy5zeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1llChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZZRqDY8AAHSUjCJkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25faW5jlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9weXRob25faW5jlGoNjwAAdJSMImRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWKUag2PAAB0lIwkZGlzdHV0aWxzLnN5c2NvbmZpZy5zZXRfcHl0aG9uX2J1aWxklChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuc3lzY29uZmlnLnNldF9weXRob25fYnVpbGSUag2PAAB0lIwbZGlzdHV0aWxzLnV0aWwuYnl0ZV9jb21waWxllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5ieXRlX2NvbXBpbGWUag2PAAB0lIwaZGlzdHV0aWxzLnV0aWwuY2hhbmdlX3Jvb3SUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLmNoYW5nZV9yb290lGoNjwAAdJSMHGRpc3R1dGlscy51dGlsLmNoZWNrX2Vudmlyb26UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLmNoZWNrX2Vudmlyb26Uag2PAAB0lIwbZGlzdHV0aWxzLnV0aWwuY29udmVydF9wYXRolChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5jb252ZXJ0X3BhdGiUag2PAAB0lIwWZGlzdHV0aWxzLnV0aWwuZXhlY3V0ZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnV0aWwuZXhlY3V0ZZRqDY8AAHSUjBtkaXN0dXRpbHMudXRpbC5nZXRfcGxhdGZvcm2UKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLmdldF9wbGF0Zm9ybZRqDY8AAHSUjBxkaXN0dXRpbHMudXRpbC5yZmM4MjJfZXNjYXBllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudXRpbC5yZmM4MjJfZXNjYXBllGoNjwAAdJSMG2Rpc3R1dGlscy51dGlsLnNwbGl0X3F1b3RlZJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnV0aWwuc3BsaXRfcXVvdGVklGoNjwAAdJSMGGRpc3R1dGlscy51dGlsLnN0cnRvYm9vbJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLnV0aWwuc3RydG9ib29slGoNjwAAdJSMGWRpc3R1dGlscy51dGlsLnN1YnN0X3ZhcnOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy51dGlsLnN1YnN0X3ZhcnOUag2PAAB0lIwGZGl2bW9klChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZGl2bW9klGoNjwAAdJSMFGRvY3Rlc3QuRG9jRmlsZVN1aXRllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jRmlsZVN1aXRllGoNjwAAdJSMFGRvY3Rlc3QuRG9jVGVzdFN1aXRllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFN1aXRllGoNjwAAdJSMDWRvY3Rlc3QuZGVidWeUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5kZWJ1Z5RqDY8AAHSUjBFkb2N0ZXN0LmRlYnVnX3NyY5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LmRlYnVnX3NyY5RqDY8AAHSUjBtkb2N0ZXN0LnJlZ2lzdGVyX29wdGlvbmZsYWeUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5yZWdpc3Rlcl9vcHRpb25mbGFnlGoNjwAAdJSMHmRvY3Rlc3QucnVuX2RvY3N0cmluZ19leGFtcGxlc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnJ1bl9kb2NzdHJpbmdfZXhhbXBsZXOUag2PAAB0lIwcZG9jdGVzdC5zY3JpcHRfZnJvbV9leGFtcGxlc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnNjcmlwdF9mcm9tX2V4YW1wbGVzlGoNjwAAdJSMIGRvY3Rlc3Quc2V0X3VuaXR0ZXN0X3JlcG9ydGZsYWdzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Quc2V0X3VuaXR0ZXN0X3JlcG9ydGZsYWdzlGoNjwAAdJSMEGRvY3Rlc3QudGVzdGZpbGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC50ZXN0ZmlsZZRqDY8AAHSUjA9kb2N0ZXN0LnRlc3Rtb2SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC50ZXN0bW9klGoNjwAAdJSMEmRvY3Rlc3QudGVzdHNvdXJjZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LnRlc3Rzb3VyY2WUag2PAAB0lIwXZW1haWwuY2hhcnNldC5hZGRfYWxpYXOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5hZGRfYWxpYXOUag2PAAB0lIwZZW1haWwuY2hhcnNldC5hZGRfY2hhcnNldJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQuaHRtbCNlbWFpbC5jaGFyc2V0LmFkZF9jaGFyc2V0lGoNjwAAdJSMF2VtYWlsLmNoYXJzZXQuYWRkX2NvZGVjlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY2hhcnNldC5odG1sI2VtYWlsLmNoYXJzZXQuYWRkX2NvZGVjlGoNjwAAdJSMHWVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbCNlbWFpbC5lbmNvZGVycy5lbmNvZGVfN29yOGJpdJRqDY8AAHSUjBxlbWFpbC5lbmNvZGVycy5lbmNvZGVfYmFzZTY0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbCNlbWFpbC5lbmNvZGVycy5lbmNvZGVfYmFzZTY0lGoNjwAAdJSMGmVtYWlsLmVuY29kZXJzLmVuY29kZV9ub29wlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbCNlbWFpbC5lbmNvZGVycy5lbmNvZGVfbm9vcJRqDY8AAHSUjBxlbWFpbC5lbmNvZGVycy5lbmNvZGVfcXVvcHJplChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbCNlbWFpbC5lbmNvZGVycy5lbmNvZGVfcXVvcHJplGoNjwAAdJSMGmVtYWlsLmhlYWRlci5kZWNvZGVfaGVhZGVylChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXKUag2PAAB0lIwYZW1haWwuaGVhZGVyLm1ha2VfaGVhZGVylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLm1ha2VfaGVhZGVylGoNjwAAdJSMGmVtYWlsLml0ZXJhdG9ycy5fc3RydWN0dXJllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaXRlcmF0b3JzLmh0bWwjZW1haWwuaXRlcmF0b3JzLl9zdHJ1Y3R1cmWUag2PAAB0lIwiZW1haWwuaXRlcmF0b3JzLmJvZHlfbGluZV9pdGVyYXRvcpQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLml0ZXJhdG9ycy5odG1sI2VtYWlsLml0ZXJhdG9ycy5ib2R5X2xpbmVfaXRlcmF0b3KUag2PAAB0lIwmZW1haWwuaXRlcmF0b3JzLnR5cGVkX3N1YnBhcnRfaXRlcmF0b3KUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbCNlbWFpbC5pdGVyYXRvcnMudHlwZWRfc3VicGFydF9pdGVyYXRvcpRqDY8AAHSUjB5lbWFpbC5tZXNzYWdlX2Zyb21fYmluYXJ5X2ZpbGWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNlbWFpbC5tZXNzYWdlX2Zyb21fYmluYXJ5X2ZpbGWUag2PAAB0lIwYZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzlGoNjwAAdJSMF2VtYWlsLm1lc3NhZ2VfZnJvbV9maWxllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwubWVzc2FnZV9mcm9tX2ZpbGWUag2PAAB0lIwZZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZ5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmeUag2PAAB0lIwiZW1haWwudXRpbHMuY29sbGFwc2VfcmZjMjIzMV92YWx1ZZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMuY29sbGFwc2VfcmZjMjIzMV92YWx1ZZRqDY8AAHSUjBllbWFpbC51dGlscy5kZWNvZGVfcGFyYW1zlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5kZWNvZGVfcGFyYW1zlGoNjwAAdJSMGmVtYWlsLnV0aWxzLmRlY29kZV9yZmMyMjMxlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5kZWNvZGVfcmZjMjIzMZRqDY8AAHSUjBplbWFpbC51dGlscy5lbmNvZGVfcmZjMjIzMZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMuZW5jb2RlX3JmYzIyMzGUag2PAAB0lIwbZW1haWwudXRpbHMuZm9ybWF0X2RhdGV0aW1llChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5mb3JtYXRfZGF0ZXRpbWWUag2PAAB0lIwWZW1haWwudXRpbHMuZm9ybWF0YWRkcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMuZm9ybWF0YWRkcpRqDY8AAHSUjBZlbWFpbC51dGlscy5mb3JtYXRkYXRllChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5mb3JtYXRkYXRllGoNjwAAdJSMGGVtYWlsLnV0aWxzLmdldGFkZHJlc3Nlc5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMuZ2V0YWRkcmVzc2VzlGoNjwAAdJSMFWVtYWlsLnV0aWxzLmxvY2FsdGltZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnV0aWxzLmh0bWwjZW1haWwudXRpbHMubG9jYWx0aW1llGoNjwAAdJSMFmVtYWlsLnV0aWxzLm1ha2VfbXNnaWSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC51dGlscy5odG1sI2VtYWlsLnV0aWxzLm1ha2VfbXNnaWSUag2PAAB0lIwVZW1haWwudXRpbHMubWt0aW1lX3R6lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5ta3RpbWVfdHqUag2PAAB0lIwVZW1haWwudXRpbHMucGFyc2VhZGRylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5wYXJzZWFkZHKUag2PAAB0lIwVZW1haWwudXRpbHMucGFyc2VkYXRllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5wYXJzZWRhdGWUag2PAAB0lIwhZW1haWwudXRpbHMucGFyc2VkYXRlX3RvX2RhdGV0aW1llChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5wYXJzZWRhdGVfdG9fZGF0ZXRpbWWUag2PAAB0lIwYZW1haWwudXRpbHMucGFyc2VkYXRlX3R6lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbCNlbWFpbC51dGlscy5wYXJzZWRhdGVfdHqUag2PAAB0lIwRZW1haWwudXRpbHMucXVvdGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC51dGlscy5odG1sI2VtYWlsLnV0aWxzLnF1b3RllGoNjwAAdJSME2VtYWlsLnV0aWxzLnVucXVvdGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC51dGlscy5odG1sI2VtYWlsLnV0aWxzLnVucXVvdGWUag2PAAB0lIwWZW5jb2RpbmdzLmlkbmEuVG9BU0NJSZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2VuY29kaW5ncy5pZG5hLlRvQVNDSUmUag2PAAB0lIwYZW5jb2RpbmdzLmlkbmEuVG9Vbmljb2RllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjZW5jb2RpbmdzLmlkbmEuVG9Vbmljb2RllGoNjwAAdJSMF2VuY29kaW5ncy5pZG5hLm5hbWVwcmVwlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjZW5jb2RpbmdzLmlkbmEubmFtZXByZXCUag2PAAB0lIwTZW5zdXJlcGlwLmJvb3RzdHJhcJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Vuc3VyZXBpcC5odG1sI2Vuc3VyZXBpcC5ib290c3RyYXCUag2PAAB0lIwRZW5zdXJlcGlwLnZlcnNpb26UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbnN1cmVwaXAuaHRtbCNlbnN1cmVwaXAudmVyc2lvbpRqDY8AAHSUjAtlbnVtLnVuaXF1ZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VudW0uaHRtbCNlbnVtLnVuaXF1ZZRqDY8AAHSUjAllbnVtZXJhdGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNlbnVtZXJhdGWUag2PAAB0lIwEZXZhbJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2V2YWyUag2PAAB0lIwEZXhlY5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2V4ZWOUag2PAAB0lIwoZmF1bHRoYW5kbGVyLmNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcpQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5odG1sI2ZhdWx0aGFuZGxlci5jYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXKUag2PAAB0lIwUZmF1bHRoYW5kbGVyLmRpc2FibGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mYXVsdGhhbmRsZXIuaHRtbCNmYXVsdGhhbmRsZXIuZGlzYWJsZZRqDY8AAHSUjBtmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2uUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mYXVsdGhhbmRsZXIuaHRtbCNmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2uUag2PAAB0lIwhZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmF1bHRoYW5kbGVyLmh0bWwjZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVylGoNjwAAdJSME2ZhdWx0aGFuZGxlci5lbmFibGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mYXVsdGhhbmRsZXIuaHRtbCNmYXVsdGhhbmRsZXIuZW5hYmxllGoNjwAAdJSMF2ZhdWx0aGFuZGxlci5pc19lbmFibGVklChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmF1bHRoYW5kbGVyLmh0bWwjZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWSUag2PAAB0lIwVZmF1bHRoYW5kbGVyLnJlZ2lzdGVylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmF1bHRoYW5kbGVyLmh0bWwjZmF1bHRoYW5kbGVyLnJlZ2lzdGVylGoNjwAAdJSMF2ZhdWx0aGFuZGxlci51bnJlZ2lzdGVylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmF1bHRoYW5kbGVyLmh0bWwjZmF1bHRoYW5kbGVyLnVucmVnaXN0ZXKUag2PAAB0lIwLZmNudGwuZmNudGyUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mY250bC5odG1sI2ZjbnRsLmZjbnRslGoNjwAAdJSMC2ZjbnRsLmZsb2NrlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmNudGwuaHRtbCNmY250bC5mbG9ja5RqDY8AAHSUjAtmY250bC5pb2N0bJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZjbnRsLmh0bWwjZmNudGwuaW9jdGyUag2PAAB0lIwLZmNudGwubG9ja2aUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mY250bC5odG1sI2ZjbnRsLmxvY2tmlGoNjwAAdJSMDGZpbGVfY3JlYXRlZJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjZmlsZV9jcmVhdGVklGoNjwAAdJSME2ZpbGVjbXAuY2xlYXJfY2FjaGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5jbGVhcl9jYWNoZZRqDY8AAHSUjAtmaWxlY21wLmNtcJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNmaWxlY21wLmNtcJRqDY8AAHSUjBBmaWxlY21wLmNtcGZpbGVzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWNtcC5odG1sI2ZpbGVjbXAuY21wZmlsZXOUag2PAAB0lIwPZmlsZWlucHV0LmNsb3NllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmNsb3NllGoNjwAAdJSMFGZpbGVpbnB1dC5maWxlbGluZW5vlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmZpbGVsaW5lbm+Uag2PAAB0lIwSZmlsZWlucHV0LmZpbGVuYW1llChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmZpbGVuYW1llGoNjwAAdJSMEGZpbGVpbnB1dC5maWxlbm+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQuZmlsZW5vlGoNjwAAdJSMGWZpbGVpbnB1dC5ob29rX2NvbXByZXNzZWSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQuaG9va19jb21wcmVzc2VklGoNjwAAdJSMFmZpbGVpbnB1dC5ob29rX2VuY29kZWSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQuaG9va19lbmNvZGVklGoNjwAAdJSMD2ZpbGVpbnB1dC5pbnB1dJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5pbnB1dJRqDY8AAHSUjBVmaWxlaW5wdXQuaXNmaXJzdGxpbmWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQuaXNmaXJzdGxpbmWUag2PAAB0lIwRZmlsZWlucHV0Lmlzc3RkaW6UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQuaXNzdGRpbpRqDY8AAHSUjBBmaWxlaW5wdXQubGluZW5vlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWwjZmlsZWlucHV0LmxpbmVub5RqDY8AAHSUjBJmaWxlaW5wdXQubmV4dGZpbGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlaW5wdXQuaHRtbCNmaWxlaW5wdXQubmV4dGZpbGWUag2PAAB0lIwGZmlsdGVylChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZmlsdGVylGoNjwAAdJSMDmZubWF0Y2guZmlsdGVylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm5tYXRjaC5odG1sI2ZubWF0Y2guZmlsdGVylGoNjwAAdJSMD2ZubWF0Y2guZm5tYXRjaJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZubWF0Y2guaHRtbCNmbm1hdGNoLmZubWF0Y2iUag2PAAB0lIwTZm5tYXRjaC5mbm1hdGNoY2FzZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZubWF0Y2guaHRtbCNmbm1hdGNoLmZubWF0Y2hjYXNllGoNjwAAdJSMEWZubWF0Y2gudHJhbnNsYXRllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm5tYXRjaC5odG1sI2ZubWF0Y2gudHJhbnNsYXRllGoNjwAAdJSMBmZvcm1hdJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Zvcm1hdJRqDY8AAHSUjA1mcmFjdGlvbnMuZ2NklChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnJhY3Rpb25zLmh0bWwjZnJhY3Rpb25zLmdjZJRqDY8AAHSUjBlmdW5jdG9vbHMuY2FjaGVkX3Byb3BlcnR5lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLmNhY2hlZF9wcm9wZXJ0eZRqDY8AAHSUjBRmdW5jdG9vbHMuY21wX3RvX2tleZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy5jbXBfdG9fa2V5lGoNjwAAdJSME2Z1bmN0b29scy5scnVfY2FjaGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMubHJ1X2NhY2hllGoNjwAAdJSMEWZ1bmN0b29scy5wYXJ0aWFslChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnBhcnRpYWyUag2PAAB0lIwQZnVuY3Rvb2xzLnJlZHVjZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy5yZWR1Y2WUag2PAAB0lIwYZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNolChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNolGoNjwAAdJSMGGZ1bmN0b29scy50b3RhbF9vcmRlcmluZ5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0b29scy5odG1sI2Z1bmN0b29scy50b3RhbF9vcmRlcmluZ5RqDY8AAHSUjBhmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXKUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdG9vbHMuaHRtbCNmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXKUag2PAAB0lIwPZnVuY3Rvb2xzLndyYXBzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLndyYXBzlGoNjwAAdJSMCmdjLmNvbGxlY3SUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLmNvbGxlY3SUag2PAAB0lIwKZ2MuZGlzYWJsZZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWwjZ2MuZGlzYWJsZZRqDY8AAHSUjAlnYy5lbmFibGWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLmVuYWJsZZRqDY8AAHSUjAlnYy5mcmVlemWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLmZyZWV6ZZRqDY8AAHSUjAxnYy5nZXRfY291bnSUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLmdldF9jb3VudJRqDY8AAHSUjAxnYy5nZXRfZGVidWeUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLmdldF9kZWJ1Z5RqDY8AAHSUjBNnYy5nZXRfZnJlZXplX2NvdW50lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2MuaHRtbCNnYy5nZXRfZnJlZXplX2NvdW50lGoNjwAAdJSMDmdjLmdldF9vYmplY3RzlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2MuaHRtbCNnYy5nZXRfb2JqZWN0c5RqDY8AAHSUjBBnYy5nZXRfcmVmZXJlbnRzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2MuaHRtbCNnYy5nZXRfcmVmZXJlbnRzlGoNjwAAdJSMEGdjLmdldF9yZWZlcnJlcnOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLmdldF9yZWZlcnJlcnOUag2PAAB0lIwMZ2MuZ2V0X3N0YXRzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2MuaHRtbCNnYy5nZXRfc3RhdHOUag2PAAB0lIwQZ2MuZ2V0X3RocmVzaG9sZJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWwjZ2MuZ2V0X3RocmVzaG9sZJRqDY8AAHSUjA1nYy5pc190cmFja2VklChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2MuaHRtbCNnYy5pc190cmFja2VklGoNjwAAdJSMDGdjLmlzZW5hYmxlZJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWwjZ2MuaXNlbmFibGVklGoNjwAAdJSMDGdjLnNldF9kZWJ1Z5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWwjZ2Muc2V0X2RlYnVnlGoNjwAAdJSMEGdjLnNldF90aHJlc2hvbGSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLnNldF90aHJlc2hvbGSUag2PAAB0lIwLZ2MudW5mcmVlemWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nYy5odG1sI2djLnVuZnJlZXpllGoNjwAAdJSMF2dldF9zcGVjaWFsX2ZvbGRlcl9wYXRolChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNnZXRfc3BlY2lhbF9mb2xkZXJfcGF0aJRqDY8AAHSUjAdnZXRhdHRylChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZ2V0YXR0cpRqDY8AAHSUjA1nZXRvcHQuZ2V0b3B0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0b3B0Lmh0bWwjZ2V0b3B0LmdldG9wdJRqDY8AAHSUjBFnZXRvcHQuZ251X2dldG9wdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldG9wdC5odG1sI2dldG9wdC5nbnVfZ2V0b3B0lGoNjwAAdJSMD2dldHBhc3MuZ2V0cGFzc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHBhc3MuaHRtbCNnZXRwYXNzLmdldHBhc3OUag2PAAB0lIwPZ2V0cGFzcy5nZXR1c2VylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0cGFzcy5odG1sI2dldHBhc3MuZ2V0dXNlcpRqDY8AAHSUjB9nZXR0ZXh0LmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuYmluZF90ZXh0ZG9tYWluX2NvZGVzZXSUag2PAAB0lIwWZ2V0dGV4dC5iaW5kdGV4dGRvbWFpbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LmJpbmR0ZXh0ZG9tYWlulGoNjwAAdJSMEGdldHRleHQuZGdldHRleHSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5kZ2V0dGV4dJRqDY8AAHSUjBFnZXR0ZXh0LmRuZ2V0dGV4dJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LmRuZ2V0dGV4dJRqDY8AAHSUjBJnZXR0ZXh0LmRucGdldHRleHSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5kbnBnZXR0ZXh0lGoNjwAAdJSMEWdldHRleHQuZHBnZXR0ZXh0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuZHBnZXR0ZXh0lGoNjwAAdJSMDGdldHRleHQuZmluZJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LmZpbmSUag2PAAB0lIwPZ2V0dGV4dC5nZXR0ZXh0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuZ2V0dGV4dJRqDY8AAHSUjA9nZXR0ZXh0Lmluc3RhbGyUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5pbnN0YWxslGoNjwAAdJSMEWdldHRleHQubGRnZXR0ZXh0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQubGRnZXR0ZXh0lGoNjwAAdJSMEmdldHRleHQubGRuZ2V0dGV4dJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LmxkbmdldHRleHSUag2PAAB0lIwQZ2V0dGV4dC5sZ2V0dGV4dJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0LmxnZXR0ZXh0lGoNjwAAdJSMEWdldHRleHQubG5nZXR0ZXh0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQubG5nZXR0ZXh0lGoNjwAAdJSMEGdldHRleHQubmdldHRleHSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWwjZ2V0dGV4dC5uZ2V0dGV4dJRqDY8AAHSUjBFnZXR0ZXh0Lm5wZ2V0dGV4dJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lm5wZ2V0dGV4dJRqDY8AAHSUjBBnZXR0ZXh0LnBnZXR0ZXh0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQucGdldHRleHSUag2PAAB0lIwSZ2V0dGV4dC50ZXh0ZG9tYWlulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQudGV4dGRvbWFpbpRqDY8AAHSUjBNnZXR0ZXh0LnRyYW5zbGF0aW9ulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQudHJhbnNsYXRpb26Uag2PAAB0lIwLZ2xvYi5lc2NhcGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nbG9iLmh0bWwjZ2xvYi5lc2NhcGWUag2PAAB0lIwJZ2xvYi5nbG9ilChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2xvYi5odG1sI2dsb2IuZ2xvYpRqDY8AAHSUjApnbG9iLmlnbG9ilChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2xvYi5odG1sI2dsb2IuaWdsb2KUag2PAAB0lIwHZ2xvYmFsc5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2dsb2JhbHOUag2PAAB0lIwMZ3JwLmdldGdyYWxslChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3JwLmh0bWwjZ3JwLmdldGdyYWxslGoNjwAAdJSMDGdycC5nZXRncmdpZJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dycC5odG1sI2dycC5nZXRncmdpZJRqDY8AAHSUjAxncnAuZ2V0Z3JuYW2UKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ncnAuaHRtbCNncnAuZ2V0Z3JuYW2Uag2PAAB0lIwNZ3ppcC5jb21wcmVzc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2d6aXAuaHRtbCNnemlwLmNvbXByZXNzlGoNjwAAdJSMD2d6aXAuZGVjb21wcmVzc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2d6aXAuaHRtbCNnemlwLmRlY29tcHJlc3OUag2PAAB0lIwJZ3ppcC5vcGVulChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3ppcC5odG1sI2d6aXAub3BlbpRqDY8AAHSUjAdoYXNhdHRylChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjaGFzYXR0cpRqDY8AAHSUjARoYXNolChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjaGFzaJRqDY8AAHSUjA9oYXNobGliLmJsYWtlMmKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5ibGFrZTJilGoNjwAAdJSMD2hhc2hsaWIuYmxha2Uyc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLmJsYWtlMnOUag2PAAB0lIwLaGFzaGxpYi5uZXeUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oYXNobGliLmh0bWwjaGFzaGxpYi5uZXeUag2PAAB0lIwTaGFzaGxpYi5wYmtkZjJfaG1hY5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNobGliLnBia2RmMl9obWFjlGoNjwAAdJSMDmhhc2hsaWIuc2NyeXB0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGFzaGxpYi5odG1sI2hhc2hsaWIuc2NyeXB0lGoNjwAAdJSMDWhlYXBxLmhlYXBpZnmUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oZWFwcS5odG1sI2hlYXBxLmhlYXBpZnmUag2PAAB0lIwNaGVhcHEuaGVhcHBvcJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEuaGVhcHBvcJRqDY8AAHSUjA5oZWFwcS5oZWFwcHVzaJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEuaGVhcHB1c2iUag2PAAB0lIwRaGVhcHEuaGVhcHB1c2hwb3CUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oZWFwcS5odG1sI2hlYXBxLmhlYXBwdXNocG9wlGoNjwAAdJSMEWhlYXBxLmhlYXByZXBsYWNllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGVhcHEuaHRtbCNoZWFwcS5oZWFwcmVwbGFjZZRqDY8AAHSUjAtoZWFwcS5tZXJnZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEubWVyZ2WUag2PAAB0lIwOaGVhcHEubmxhcmdlc3SUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9oZWFwcS5odG1sI2hlYXBxLm5sYXJnZXN0lGoNjwAAdJSMD2hlYXBxLm5zbWFsbGVzdJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hlYXBxLmh0bWwjaGVhcHEubnNtYWxsZXN0lGoNjwAAdJSMBGhlbHCUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNoZWxwlGoNjwAAdJSMA2hleJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2hleJRqDY8AAHSUjBNobWFjLmNvbXBhcmVfZGlnZXN0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaG1hYy5odG1sI2htYWMuY29tcGFyZV9kaWdlc3SUag2PAAB0lIwLaG1hYy5kaWdlc3SUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5kaWdlc3SUag2PAAB0lIwIaG1hYy5uZXeUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9obWFjLmh0bWwjaG1hYy5uZXeUag2PAAB0lIwLaHRtbC5lc2NhcGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLmh0bWwjaHRtbC5lc2NhcGWUag2PAAB0lIwNaHRtbC51bmVzY2FwZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0bWwuaHRtbCNodG1sLnVuZXNjYXBllGoNjwAAdJSMGWh0dHAuY2xpZW50LnBhcnNlX2hlYWRlcnOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHAuY2xpZW50LnBhcnNlX2hlYWRlcnOUag2PAAB0lIwCaWSUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNpZJRqDY8AAHSUjA5pbWFwbGliLkludDJBUJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLkludDJBUJRqDY8AAHSUjBppbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZZRqDY8AAHSUjBJpbWFwbGliLlBhcnNlRmxhZ3OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5QYXJzZUZsYWdzlGoNjwAAdJSMGWltYXBsaWIuVGltZTJJbnRlcm5hbGRhdGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5UaW1lMkludGVybmFsZGF0ZZRqDY8AAHSUjAtpbWdoZHIud2hhdJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltZ2hkci5odG1sI2ltZ2hkci53aGF0lGoNjwAAdJSMEGltcC5hY3F1aXJlX2xvY2uUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNpbXAuYWNxdWlyZV9sb2NrlGoNjwAAdJSMFWltcC5jYWNoZV9mcm9tX3NvdXJjZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcC5odG1sI2ltcC5jYWNoZV9mcm9tX3NvdXJjZZRqDY8AAHSUjA9pbXAuZmluZF9tb2R1bGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNpbXAuZmluZF9tb2R1bGWUag2PAAB0lIwNaW1wLmdldF9tYWdpY5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcC5odG1sI2ltcC5nZXRfbWFnaWOUag2PAAB0lIwQaW1wLmdldF9zdWZmaXhlc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcC5odG1sI2ltcC5nZXRfc3VmZml4ZXOUag2PAAB0lIwLaW1wLmdldF90YWeUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNpbXAuZ2V0X3RhZ5RqDY8AAHSUjA9pbXAubG9hZF9tb2R1bGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNpbXAubG9hZF9tb2R1bGWUag2PAAB0lIwNaW1wLmxvY2tfaGVsZJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcC5odG1sI2ltcC5sb2NrX2hlbGSUag2PAAB0lIwOaW1wLm5ld19tb2R1bGWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNpbXAubmV3X21vZHVsZZRqDY8AAHSUjBBpbXAucmVsZWFzZV9sb2NrlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wLmh0bWwjaW1wLnJlbGVhc2VfbG9ja5RqDY8AAHSUjAppbXAucmVsb2FklChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wLmh0bWwjaW1wLnJlbG9hZJRqDY8AAHSUjBVpbXAuc291cmNlX2Zyb21fY2FjaGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNpbXAuc291cmNlX2Zyb21fY2FjaGWUag2PAAB0lIwUaW1wb3J0bGliLl9faW1wb3J0X1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuX19pbXBvcnRfX5RqDY8AAHSUjBVpbXBvcnRsaWIuZmluZF9sb2FkZXKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuZmluZF9sb2FkZXKUag2PAAB0lIwXaW1wb3J0bGliLmltcG9ydF9tb2R1bGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuaW1wb3J0X21vZHVsZZRqDY8AAHSUjBtpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXOUag2PAAB0lIwgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LmFsbF9zdWZmaXhlc5RqDY8AAHSUjBBpbXBvcnRsaWIucmVsb2FklChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnJlbG9hZJRqDY8AAHSUjBxpbXBvcnRsaWIucmVzb3VyY2VzLmNvbnRlbnRzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnJlc291cmNlcy5jb250ZW50c5RqDY8AAHSUjB9pbXBvcnRsaWIucmVzb3VyY2VzLmlzX3Jlc291cmNllChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnJlc291cmNlcy5pc19yZXNvdXJjZZRqDY8AAHSUjB9pbXBvcnRsaWIucmVzb3VyY2VzLm9wZW5fYmluYXJ5lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnJlc291cmNlcy5vcGVuX2JpbmFyeZRqDY8AAHSUjB1pbXBvcnRsaWIucmVzb3VyY2VzLm9wZW5fdGV4dJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5yZXNvdXJjZXMub3Blbl90ZXh0lGoNjwAAdJSMGGltcG9ydGxpYi5yZXNvdXJjZXMucGF0aJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5yZXNvdXJjZXMucGF0aJRqDY8AAHSUjB9pbXBvcnRsaWIucmVzb3VyY2VzLnJlYWRfYmluYXJ5lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnJlc291cmNlcy5yZWFkX2JpbmFyeZRqDY8AAHSUjB1pbXBvcnRsaWIucmVzb3VyY2VzLnJlYWRfdGV4dJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5yZXNvdXJjZXMucmVhZF90ZXh0lGoNjwAAdJSMIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2WUag2PAAB0lIwcaW1wb3J0bGliLnV0aWwuZGVjb2RlX3NvdXJjZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi51dGlsLmRlY29kZV9zb3VyY2WUag2PAAB0lIwYaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjlGoNjwAAdJSMIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXKUag2PAAB0lIwfaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zyb21fc3BlY5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi51dGlsLm1vZHVsZV9mcm9tX3NwZWOUag2PAAB0lIwbaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1llChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1llGoNjwAAdJSMGWltcG9ydGxpYi51dGlsLnNldF9sb2FkZXKUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIudXRpbC5zZXRfbG9hZGVylGoNjwAAdJSMGmltcG9ydGxpYi51dGlsLnNldF9wYWNrYWdllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnV0aWwuc2V0X3BhY2thZ2WUag2PAAB0lIwgaW1wb3J0bGliLnV0aWwuc291cmNlX2Zyb21fY2FjaGWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIudXRpbC5zb3VyY2VfZnJvbV9jYWNoZZRqDY8AAHSUjBppbXBvcnRsaWIudXRpbC5zb3VyY2VfaGFzaJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi51dGlsLnNvdXJjZV9oYXNolGoNjwAAdJSMJmltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9ulChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb26Uag2PAAB0lIwfaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2xvYWRlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9sb2FkZXKUag2PAAB0lIwFaW5wdXSUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNpbnB1dJRqDY8AAHSUjBBpbnNwZWN0LmNsZWFuZG9jlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuY2xlYW5kb2OUag2PAAB0lIwUaW5zcGVjdC5jdXJyZW50ZnJhbWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5jdXJyZW50ZnJhbWWUag2PAAB0lIwVaW5zcGVjdC5mb3JtYXRhcmdzcGVjlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZm9ybWF0YXJnc3BlY5RqDY8AAHSUjBdpbnNwZWN0LmZvcm1hdGFyZ3ZhbHVlc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmZvcm1hdGFyZ3ZhbHVlc5RqDY8AAHSUjBJpbnNwZWN0LmdldGFyZ3NwZWOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRhcmdzcGVjlGoNjwAAdJSMFGluc3BlY3QuZ2V0YXJndmFsdWVzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0YXJndmFsdWVzlGoNjwAAdJSMFmluc3BlY3QuZ2V0YXR0cl9zdGF0aWOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRhdHRyX3N0YXRpY5RqDY8AAHSUjBNpbnNwZWN0LmdldGNhbGxhcmdzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0Y2FsbGFyZ3OUag2PAAB0lIwUaW5zcGVjdC5nZXRjbGFzc3RyZWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRjbGFzc3RyZWWUag2PAAB0lIwWaW5zcGVjdC5nZXRjbG9zdXJldmFyc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGNsb3N1cmV2YXJzlGoNjwAAdJSME2luc3BlY3QuZ2V0Y29tbWVudHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRjb21tZW50c5RqDY8AAHSUjBppbnNwZWN0LmdldGNvcm91dGluZWxvY2Fsc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGNvcm91dGluZWxvY2Fsc5RqDY8AAHSUjBlpbnNwZWN0LmdldGNvcm91dGluZXN0YXRllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0Y29yb3V0aW5lc3RhdGWUag2PAAB0lIwOaW5zcGVjdC5nZXRkb2OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRkb2OUag2PAAB0lIwPaW5zcGVjdC5nZXRmaWxllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0ZmlsZZRqDY8AAHSUjBRpbnNwZWN0LmdldGZyYW1laW5mb5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGZyYW1laW5mb5RqDY8AAHSUjBZpbnNwZWN0LmdldGZ1bGxhcmdzcGVjlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0ZnVsbGFyZ3NwZWOUag2PAAB0lIwaaW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHOUag2PAAB0lIwZaW5zcGVjdC5nZXRnZW5lcmF0b3JzdGF0ZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldGdlbmVyYXRvcnN0YXRllGoNjwAAdJSMFmluc3BlY3QuZ2V0aW5uZXJmcmFtZXOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRpbm5lcmZyYW1lc5RqDY8AAHSUjBJpbnNwZWN0LmdldG1lbWJlcnOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRtZW1iZXJzlGoNjwAAdJSMEWluc3BlY3QuZ2V0bW9kdWxllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0bW9kdWxllGoNjwAAdJSMFWluc3BlY3QuZ2V0bW9kdWxlbmFtZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldG1vZHVsZW5hbWWUag2PAAB0lIwOaW5zcGVjdC5nZXRtcm+UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5nZXRtcm+Uag2PAAB0lIwWaW5zcGVjdC5nZXRvdXRlcmZyYW1lc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldG91dGVyZnJhbWVzlGoNjwAAdJSMEWluc3BlY3QuZ2V0c291cmNllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuZ2V0c291cmNllGoNjwAAdJSMFWluc3BlY3QuZ2V0c291cmNlZmlsZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldHNvdXJjZWZpbGWUag2PAAB0lIwWaW5zcGVjdC5nZXRzb3VyY2VsaW5lc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmdldHNvdXJjZWxpbmVzlGoNjwAAdJSMEmluc3BlY3QuaXNhYnN0cmFjdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzYWJzdHJhY3SUag2PAAB0lIwSaW5zcGVjdC5pc2FzeW5jZ2VulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNhc3luY2dlbpRqDY8AAHSUjBppbnNwZWN0LmlzYXN5bmNnZW5mdW5jdGlvbpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzYXN5bmNnZW5mdW5jdGlvbpRqDY8AAHSUjBNpbnNwZWN0LmlzYXdhaXRhYmxllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNhd2FpdGFibGWUag2PAAB0lIwRaW5zcGVjdC5pc2J1aWx0aW6UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2J1aWx0aW6Uag2PAAB0lIwPaW5zcGVjdC5pc2NsYXNzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNjbGFzc5RqDY8AAHSUjA5pbnNwZWN0LmlzY29kZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzY29kZZRqDY8AAHSUjBNpbnNwZWN0LmlzY29yb3V0aW5llChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNjb3JvdXRpbmWUag2PAAB0lIwbaW5zcGVjdC5pc2Nvcm91dGluZWZ1bmN0aW9ulChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNjb3JvdXRpbmVmdW5jdGlvbpRqDY8AAHSUjBhpbnNwZWN0LmlzZGF0YWRlc2NyaXB0b3KUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc2RhdGFkZXNjcmlwdG9ylGoNjwAAdJSMD2luc3BlY3QuaXNmcmFtZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzZnJhbWWUag2PAAB0lIwSaW5zcGVjdC5pc2Z1bmN0aW9ulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNmdW5jdGlvbpRqDY8AAHSUjBNpbnNwZWN0LmlzZ2VuZXJhdG9ylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNnZW5lcmF0b3KUag2PAAB0lIwbaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9ulChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbpRqDY8AAHSUjBppbnNwZWN0LmlzZ2V0c2V0ZGVzY3JpcHRvcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzZ2V0c2V0ZGVzY3JpcHRvcpRqDY8AAHSUjBppbnNwZWN0LmlzbWVtYmVyZGVzY3JpcHRvcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzbWVtYmVyZGVzY3JpcHRvcpRqDY8AAHSUjBBpbnNwZWN0LmlzbWV0aG9klChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNtZXRob2SUag2PAAB0lIwaaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3KUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3KUag2PAAB0lIwQaW5zcGVjdC5pc21vZHVsZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LmlzbW9kdWxllGoNjwAAdJSMEWluc3BlY3QuaXNyb3V0aW5llChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuaXNyb3V0aW5llGoNjwAAdJSME2luc3BlY3QuaXN0cmFjZWJhY2uUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC5pc3RyYWNlYmFja5RqDY8AAHSUjBFpbnNwZWN0LnNpZ25hdHVyZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LnNpZ25hdHVyZZRqDY8AAHSUjA1pbnNwZWN0LnN0YWNrlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3Quc3RhY2uUag2PAAB0lIwNaW5zcGVjdC50cmFjZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LnRyYWNllGoNjwAAdJSMDmluc3BlY3QudW53cmFwlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QudW53cmFwlGoNjwAAdJSMB2lvLm9wZW6UKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLm9wZW6Uag2PAAB0lIwMaW8ub3Blbl9jb2RllChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5vcGVuX2NvZGWUag2PAAB0lIwcaXBhZGRyZXNzLmNvbGxhcHNlX2FkZHJlc3Nlc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5jb2xsYXBzZV9hZGRyZXNzZXOUag2PAAB0lIwcaXBhZGRyZXNzLmdldF9taXhlZF90eXBlX2tleZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5nZXRfbWl4ZWRfdHlwZV9rZXmUag2PAAB0lIwUaXBhZGRyZXNzLmlwX2FkZHJlc3OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuaXBfYWRkcmVzc5RqDY8AAHSUjBZpcGFkZHJlc3MuaXBfaW50ZXJmYWNllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLmlwX2ludGVyZmFjZZRqDY8AAHSUjBRpcGFkZHJlc3MuaXBfbmV0d29ya5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5pcF9uZXR3b3JrlGoNjwAAdJSMIWlwYWRkcmVzcy5zdW1tYXJpemVfYWRkcmVzc19yYW5nZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5zdW1tYXJpemVfYWRkcmVzc19yYW5nZZRqDY8AAHSUjBppcGFkZHJlc3MudjRfaW50X3RvX3BhY2tlZJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy52NF9pbnRfdG9fcGFja2VklGoNjwAAdJSMGmlwYWRkcmVzcy52Nl9pbnRfdG9fcGFja2VklChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLnY2X2ludF90b19wYWNrZWSUag2PAAB0lIwKaXNpbnN0YW5jZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2lzaW5zdGFuY2WUag2PAAB0lIwKaXNzdWJjbGFzc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2lzc3ViY2xhc3OUag2PAAB0lIwEaXRlcpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2l0ZXKUag2PAAB0lIwUaXRlcnRvb2xzLmFjY3VtdWxhdGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuYWNjdW11bGF0ZZRqDY8AAHSUjA9pdGVydG9vbHMuY2hhaW6UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY2hhaW6Uag2PAAB0lIwWaXRlcnRvb2xzLmNvbWJpbmF0aW9uc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5jb21iaW5hdGlvbnOUag2PAAB0lIwnaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50lGoNjwAAdJSMEml0ZXJ0b29scy5jb21wcmVzc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5jb21wcmVzc5RqDY8AAHSUjA9pdGVydG9vbHMuY291bnSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuY291bnSUag2PAAB0lIwPaXRlcnRvb2xzLmN5Y2xllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLmN5Y2xllGoNjwAAdJSME2l0ZXJ0b29scy5kcm9wd2hpbGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuZHJvcHdoaWxllGoNjwAAdJSMFWl0ZXJ0b29scy5maWx0ZXJmYWxzZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5maWx0ZXJmYWxzZZRqDY8AAHSUjBFpdGVydG9vbHMuZ3JvdXBieZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5ncm91cGJ5lGoNjwAAdJSMEGl0ZXJ0b29scy5pc2xpY2WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuaXNsaWNllGoNjwAAdJSMFml0ZXJ0b29scy5wZXJtdXRhdGlvbnOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMucGVybXV0YXRpb25zlGoNjwAAdJSMEWl0ZXJ0b29scy5wcm9kdWN0lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLnByb2R1Y3SUag2PAAB0lIwQaXRlcnRvb2xzLnJlcGVhdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2l0ZXJ0b29scy5odG1sI2l0ZXJ0b29scy5yZXBlYXSUag2PAAB0lIwRaXRlcnRvb2xzLnN0YXJtYXCUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuc3Rhcm1hcJRqDY8AAHSUjBNpdGVydG9vbHMudGFrZXdoaWxllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLnRha2V3aGlsZZRqDY8AAHSUjA1pdGVydG9vbHMudGVllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLnRlZZRqDY8AAHSUjBVpdGVydG9vbHMuemlwX2xvbmdlc3SUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMuemlwX2xvbmdlc3SUag2PAAB0lIwJanNvbi5kdW1wlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24uZHVtcJRqDY8AAHSUjApqc29uLmR1bXBzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24uZHVtcHOUag2PAAB0lIwJanNvbi5sb2FklChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24ubG9hZJRqDY8AAHSUjApqc29uLmxvYWRzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24ubG9hZHOUag2PAAB0lIwRa2V5d29yZC5pc2tleXdvcmSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9rZXl3b3JkLmh0bWwja2V5d29yZC5pc2tleXdvcmSUag2PAAB0lIwDbGVulChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjbGVulGoNjwAAdJSMFGxpbmVjYWNoZS5jaGVja2NhY2hllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbGluZWNhY2hlLmh0bWwjbGluZWNhY2hlLmNoZWNrY2FjaGWUag2PAAB0lIwUbGluZWNhY2hlLmNsZWFyY2FjaGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9saW5lY2FjaGUuaHRtbCNsaW5lY2FjaGUuY2xlYXJjYWNoZZRqDY8AAHSUjBFsaW5lY2FjaGUuZ2V0bGluZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xpbmVjYWNoZS5odG1sI2xpbmVjYWNoZS5nZXRsaW5llGoNjwAAdJSME2xpbmVjYWNoZS5sYXp5Y2FjaGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9saW5lY2FjaGUuaHRtbCNsaW5lY2FjaGUubGF6eWNhY2hllGoNjwAAdJSMC2xvY2FsZS5hdG9mlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmF0b2aUag2PAAB0lIwLbG9jYWxlLmF0b2mUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuYXRvaZRqDY8AAHSUjBVsb2NhbGUuYmluZHRleHRkb21haW6UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuYmluZHRleHRkb21haW6Uag2PAAB0lIwPbG9jYWxlLmN1cnJlbmN5lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmN1cnJlbmN5lGoNjwAAdJSMEGxvY2FsZS5kY2dldHRleHSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZGNnZXR0ZXh0lGoNjwAAdJSMEWxvY2FsZS5kZWxvY2FsaXpllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmRlbG9jYWxpemWUag2PAAB0lIwPbG9jYWxlLmRnZXR0ZXh0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmRnZXR0ZXh0lGoNjwAAdJSMDWxvY2FsZS5mb3JtYXSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZm9ybWF0lGoNjwAAdJSMFGxvY2FsZS5mb3JtYXRfc3RyaW5nlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmZvcm1hdF9zdHJpbmeUag2PAAB0lIwXbG9jYWxlLmdldGRlZmF1bHRsb2NhbGWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZ2V0ZGVmYXVsdGxvY2FsZZRqDY8AAHSUjBBsb2NhbGUuZ2V0bG9jYWxllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLmdldGxvY2FsZZRqDY8AAHSUjBtsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmeUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmeUag2PAAB0lIwObG9jYWxlLmdldHRleHSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuZ2V0dGV4dJRqDY8AAHSUjBFsb2NhbGUubG9jYWxlY29udpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5sb2NhbGVjb252lGoNjwAAdJSMEmxvY2FsZS5ubF9sYW5naW5mb5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5ubF9sYW5naW5mb5RqDY8AAHSUjBBsb2NhbGUubm9ybWFsaXpllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLm5vcm1hbGl6ZZRqDY8AAHSUjBJsb2NhbGUucmVzZXRsb2NhbGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUucmVzZXRsb2NhbGWUag2PAAB0lIwQbG9jYWxlLnNldGxvY2FsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5zZXRsb2NhbGWUag2PAAB0lIwKbG9jYWxlLnN0cpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5zdHKUag2PAAB0lIwObG9jYWxlLnN0cmNvbGyUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUuc3RyY29sbJRqDY8AAHSUjA5sb2NhbGUuc3RyeGZybZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2xvY2FsZS5zdHJ4ZnJtlGoNjwAAdJSMEWxvY2FsZS50ZXh0ZG9tYWlulChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9jYWxlLmh0bWwjbG9jYWxlLnRleHRkb21haW6Uag2PAAB0lIwGbG9jYWxzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjbG9jYWxzlGoNjwAAdJSMFGxvZ2dpbmcuYWRkTGV2ZWxOYW1llChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuYWRkTGV2ZWxOYW1llGoNjwAAdJSME2xvZ2dpbmcuYmFzaWNDb25maWeUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5iYXNpY0NvbmZpZ5RqDY8AAHSUjBdsb2dnaW5nLmNhcHR1cmVXYXJuaW5nc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmNhcHR1cmVXYXJuaW5nc5RqDY8AAHSUjBlsb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnlGoNjwAAdJSMGWxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWeUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmcuY29uZmlnLmZpbGVDb25maWeUag2PAAB0lIwVbG9nZ2luZy5jb25maWcubGlzdGVulChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLmNvbmZpZy5saXN0ZW6Uag2PAAB0lIwcbG9nZ2luZy5jb25maWcuc3RvcExpc3RlbmluZ5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy5jb25maWcuc3RvcExpc3RlbmluZ5RqDY8AAHSUjBBsb2dnaW5nLmNyaXRpY2FslChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuY3JpdGljYWyUag2PAAB0lIwNbG9nZ2luZy5kZWJ1Z5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmRlYnVnlGoNjwAAdJSMD2xvZ2dpbmcuZGlzYWJsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmRpc2FibGWUag2PAAB0lIwNbG9nZ2luZy5lcnJvcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmVycm9ylGoNjwAAdJSMEWxvZ2dpbmcuZXhjZXB0aW9ulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuZXhjZXB0aW9ulGoNjwAAdJSMFGxvZ2dpbmcuZ2V0TGV2ZWxOYW1llChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuZ2V0TGV2ZWxOYW1llGoNjwAAdJSMG2xvZ2dpbmcuZ2V0TG9nUmVjb3JkRmFjdG9yeZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmdldExvZ1JlY29yZEZhY3RvcnmUag2PAAB0lIwRbG9nZ2luZy5nZXRMb2dnZXKUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5nZXRMb2dnZXKUag2PAAB0lIwWbG9nZ2luZy5nZXRMb2dnZXJDbGFzc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmdldExvZ2dlckNsYXNzlGoNjwAAdJSMDGxvZ2dpbmcuaW5mb5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLmluZm+Uag2PAAB0lIwLbG9nZ2luZy5sb2eUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5sb2eUag2PAAB0lIwVbG9nZ2luZy5tYWtlTG9nUmVjb3JklChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcubWFrZUxvZ1JlY29yZJRqDY8AAHSUjBtsb2dnaW5nLnNldExvZ1JlY29yZEZhY3RvcnmUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5zZXRMb2dSZWNvcmRGYWN0b3J5lGoNjwAAdJSMFmxvZ2dpbmcuc2V0TG9nZ2VyQ2xhc3OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5zZXRMb2dnZXJDbGFzc5RqDY8AAHSUjBBsb2dnaW5nLnNodXRkb3dulChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuc2h1dGRvd26Uag2PAAB0lIwPbG9nZ2luZy53YXJuaW5nlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcud2FybmluZ5RqDY8AAHSUjA1sem1hLmNvbXByZXNzlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuY29tcHJlc3OUag2PAAB0lIwPbHptYS5kZWNvbXByZXNzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuZGVjb21wcmVzc5RqDY8AAHSUjBdsem1hLmlzX2NoZWNrX3N1cHBvcnRlZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2x6bWEuaHRtbCNsem1hLmlzX2NoZWNrX3N1cHBvcnRlZJRqDY8AAHSUjAlsem1hLm9wZW6UKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sem1hLmh0bWwjbHptYS5vcGVulGoNjwAAdJSMEW1haWxjYXAuZmluZG1hdGNolChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGNhcC5odG1sI21haWxjYXAuZmluZG1hdGNolGoNjwAAdJSMD21haWxjYXAuZ2V0Y2Fwc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxjYXAuaHRtbCNtYWlsY2FwLmdldGNhcHOUag2PAAB0lIwDbWFwlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjbWFwlGoNjwAAdJSMDG1hcnNoYWwuZHVtcJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hcnNoYWwuaHRtbCNtYXJzaGFsLmR1bXCUag2PAAB0lIwNbWFyc2hhbC5kdW1wc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hcnNoYWwuaHRtbCNtYXJzaGFsLmR1bXBzlGoNjwAAdJSMDG1hcnNoYWwubG9hZJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hcnNoYWwuaHRtbCNtYXJzaGFsLmxvYWSUag2PAAB0lIwNbWFyc2hhbC5sb2Fkc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hcnNoYWwuaHRtbCNtYXJzaGFsLmxvYWRzlGoNjwAAdJSMCW1hdGguYWNvc5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmFjb3OUag2PAAB0lIwKbWF0aC5hY29zaJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmFjb3NolGoNjwAAdJSMCW1hdGguYXNpbpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmFzaW6Uag2PAAB0lIwKbWF0aC5hc2luaJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmFzaW5olGoNjwAAdJSMCW1hdGguYXRhbpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmF0YW6Uag2PAAB0lIwKbWF0aC5hdGFuMpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmF0YW4ylGoNjwAAdJSMCm1hdGguYXRhbmiUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5hdGFuaJRqDY8AAHSUjAltYXRoLmNlaWyUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5jZWlslGoNjwAAdJSMCW1hdGguY29tYpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmNvbWKUag2PAAB0lIwNbWF0aC5jb3B5c2lnbpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmNvcHlzaWdulGoNjwAAdJSMCG1hdGguY29zlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGguY29zlGoNjwAAdJSMCW1hdGguY29zaJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmNvc2iUag2PAAB0lIwMbWF0aC5kZWdyZWVzlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZGVncmVlc5RqDY8AAHSUjAltYXRoLmRpc3SUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5kaXN0lGoNjwAAdJSMCG1hdGguZXJmlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZXJmlGoNjwAAdJSMCW1hdGguZXJmY5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmVyZmOUag2PAAB0lIwIbWF0aC5leHCUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5leHCUag2PAAB0lIwKbWF0aC5leHBtMZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmV4cG0xlGoNjwAAdJSMCW1hdGguZmFic5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZhYnOUag2PAAB0lIwObWF0aC5mYWN0b3JpYWyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5mYWN0b3JpYWyUag2PAAB0lIwKbWF0aC5mbG9vcpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZsb29ylGoNjwAAdJSMCW1hdGguZm1vZJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZtb2SUag2PAAB0lIwKbWF0aC5mcmV4cJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZyZXhwlGoNjwAAdJSMCW1hdGguZnN1bZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmZzdW2Uag2PAAB0lIwKbWF0aC5nYW1tYZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmdhbW1hlGoNjwAAdJSMCG1hdGguZ2NklChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGguZ2NklGoNjwAAdJSMCm1hdGguaHlwb3SUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5oeXBvdJRqDY8AAHSUjAxtYXRoLmlzY2xvc2WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5pc2Nsb3NllGoNjwAAdJSMDW1hdGguaXNmaW5pdGWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5pc2Zpbml0ZZRqDY8AAHSUjAptYXRoLmlzaW5mlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGguaXNpbmaUag2PAAB0lIwKbWF0aC5pc25hbpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmlzbmFulGoNjwAAdJSMCm1hdGguaXNxcnSUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5pc3FydJRqDY8AAHSUjAptYXRoLmxkZXhwlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGgubGRleHCUag2PAAB0lIwLbWF0aC5sZ2FtbWGUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5sZ2FtbWGUag2PAAB0lIwIbWF0aC5sb2eUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5sb2eUag2PAAB0lIwKbWF0aC5sb2cxMJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLmxvZzEwlGoNjwAAdJSMCm1hdGgubG9nMXCUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5sb2cxcJRqDY8AAHSUjAltYXRoLmxvZzKUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5sb2cylGoNjwAAdJSMCW1hdGgubW9kZpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLm1vZGaUag2PAAB0lIwJbWF0aC5wZXJtlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGgucGVybZRqDY8AAHSUjAhtYXRoLnBvd5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnBvd5RqDY8AAHSUjAltYXRoLnByb2SUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5wcm9klGoNjwAAdJSMDG1hdGgucmFkaWFuc5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnJhZGlhbnOUag2PAAB0lIwObWF0aC5yZW1haW5kZXKUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5yZW1haW5kZXKUag2PAAB0lIwIbWF0aC5zaW6UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5zaW6Uag2PAAB0lIwJbWF0aC5zaW5olChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGguc2luaJRqDY8AAHSUjAltYXRoLnNxcnSUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWwjbWF0aC5zcXJ0lGoNjwAAdJSMCG1hdGgudGFulChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWF0aC5odG1sI21hdGgudGFulGoNjwAAdJSMCW1hdGgudGFuaJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnRhbmiUag2PAAB0lIwKbWF0aC50cnVuY5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hdGguaHRtbCNtYXRoLnRydW5jlGoNjwAAdJSMA21heJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI21heJRqDY8AAHSUjBJtaW1ldHlwZXMuYWRkX3R5cGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuYWRkX3R5cGWUag2PAAB0lIwebWltZXR5cGVzLmd1ZXNzX2FsbF9leHRlbnNpb25zlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLmd1ZXNzX2FsbF9leHRlbnNpb25zlGoNjwAAdJSMGW1pbWV0eXBlcy5ndWVzc19leHRlbnNpb26UKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuZ3Vlc3NfZXh0ZW5zaW9ulGoNjwAAdJSMFG1pbWV0eXBlcy5ndWVzc190eXBllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLmd1ZXNzX3R5cGWUag2PAAB0lIwObWltZXR5cGVzLmluaXSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9taW1ldHlwZXMuaHRtbCNtaW1ldHlwZXMuaW5pdJRqDY8AAHSUjBltaW1ldHlwZXMucmVhZF9taW1lX3R5cGVzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLnJlYWRfbWltZV90eXBlc5RqDY8AAHSUjANtaW6UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNtaW6Uag2PAAB0lIwbbW9kdWxlZmluZGVyLkFkZFBhY2thZ2VQYXRolChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWwjbW9kdWxlZmluZGVyLkFkZFBhY2thZ2VQYXRolGoNjwAAdJSMG21vZHVsZWZpbmRlci5SZXBsYWNlUGFja2FnZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci5SZXBsYWNlUGFja2FnZZRqDY8AAHSUjBNtc2lsaWIuQ3JlYXRlUmVjb3JklChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkNyZWF0ZVJlY29yZJRqDY8AAHSUjBBtc2lsaWIuRkNJQ3JlYXRllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkZDSUNyZWF0ZZRqDY8AAHSUjBNtc2lsaWIuT3BlbkRhdGFiYXNllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLk9wZW5EYXRhYmFzZZRqDY8AAHSUjBFtc2lsaWIuVXVpZENyZWF0ZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5VdWlkQ3JlYXRllGoNjwAAdJSMD21zaWxpYi5hZGRfZGF0YZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5hZGRfZGF0YZRqDY8AAHSUjBFtc2lsaWIuYWRkX3N0cmVhbZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5hZGRfc3RyZWFtlGoNjwAAdJSMEW1zaWxpYi5hZGRfdGFibGVzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLmFkZF90YWJsZXOUag2PAAB0lIwPbXNpbGliLmdlbl91dWlklChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLmdlbl91dWlklGoNjwAAdJSMFG1zaWxpYi5pbml0X2RhdGFiYXNllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLmluaXRfZGF0YWJhc2WUag2PAAB0lIwUbXN2Y3J0LmdldF9vc2ZoYW5kbGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuZ2V0X29zZmhhbmRsZZRqDY8AAHSUjAxtc3ZjcnQuZ2V0Y2iUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuZ2V0Y2iUag2PAAB0lIwNbXN2Y3J0LmdldGNoZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5nZXRjaGWUag2PAAB0lIwNbXN2Y3J0LmdldHdjaJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5nZXR3Y2iUag2PAAB0lIwObXN2Y3J0LmdldHdjaGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuZ2V0d2NoZZRqDY8AAHSUjA5tc3ZjcnQuaGVhcG1pbpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5oZWFwbWlulGoNjwAAdJSMDG1zdmNydC5rYmhpdJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5rYmhpdJRqDY8AAHSUjA5tc3ZjcnQubG9ja2luZ5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5sb2NraW5nlGoNjwAAdJSMFW1zdmNydC5vcGVuX29zZmhhbmRsZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5vcGVuX29zZmhhbmRsZZRqDY8AAHSUjAxtc3ZjcnQucHV0Y2iUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQucHV0Y2iUag2PAAB0lIwNbXN2Y3J0LnB1dHdjaJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC5wdXR3Y2iUag2PAAB0lIwObXN2Y3J0LnNldG1vZGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQuc2V0bW9kZZRqDY8AAHSUjA5tc3ZjcnQudW5nZXRjaJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC51bmdldGNolGoNjwAAdJSMD21zdmNydC51bmdldHdjaJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC51bmdldHdjaJRqDY8AAHSUjBVtdWx0aXByb2Nlc3NpbmcuQXJyYXmUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuQXJyYXmUag2PAAB0lIwUbXVsdGlwcm9jZXNzaW5nLlBpcGWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuUGlwZZRqDY8AAHSUjBVtdWx0aXByb2Nlc3NpbmcuVmFsdWWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuVmFsdWWUag2PAAB0lIwfbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW6Uag2PAAB0lIwhbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ2xpZW50lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ2xpZW50lGoNjwAAdJSMK211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLmFuc3dlcl9jaGFsbGVuZ2WUKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5hbnN3ZXJfY2hhbGxlbmdllGoNjwAAdJSMLG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLmRlbGl2ZXJfY2hhbGxlbmdllChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uZGVsaXZlcl9jaGFsbGVuZ2WUag2PAAB0lIwfbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24ud2FpdJQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLndhaXSUag2PAAB0lIwZbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jcHVfY291bnSUag2PAAB0lIwfbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2Vzc5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3OUag2PAAB0lIwebXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0lChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0lGoNjwAAdJSMJW11bHRpcHJvY2Vzc2luZy5nZXRfYWxsX3N0YXJ0X21ldGhvZHOUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuZ2V0X2FsbF9zdGFydF9tZXRob2RzlGoNjwAAdJSMG211bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dJRqDY8AAHSUjBptdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VylGoNjwAAdJSMIG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9klChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2SUag2PAAB0lIwdbXVsdGlwcm9jZXNzaW5nLmxvZ190b19zdGRlcnKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubG9nX3RvX3N0ZGVycpRqDY8AAHSUjB5tdWx0aXByb2Nlc3NpbmcucGFyZW50X3Byb2Nlc3OUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcucGFyZW50X3Byb2Nlc3OUag2PAAB0lIwebXVsdGlwcm9jZXNzaW5nLnNldF9leGVjdXRhYmxllChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNldF9leGVjdXRhYmxllGoNjwAAdJSMIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9klChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2SUag2PAAB0lIwibXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5BcnJheZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuQXJyYXmUag2PAAB0lIwlbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5SYXdBcnJheZQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuUmF3QXJyYXmUag2PAAB0lIwlbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5SYXdWYWx1ZZQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuUmF3VmFsdWWUag2PAAB0lIwibXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5WYWx1ZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuVmFsdWWUag2PAAB0lIwhbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5jb3B5lChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5jb3B5lGoNjwAAdJSMNG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMubXVsdGlwcm9jZXNzaW5nLk1hbmFnZXKUKGoKjwAAaguPAACMa2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLm11bHRpcHJvY2Vzc2luZy5NYW5hZ2VylGoNjwAAdJSMKW11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMuc3luY2hyb25pemVklChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcy5zeW5jaHJvbml6ZWSUag2PAAB0lIwEbmV4dJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI25leHSUag2PAAB0lIwHbmlzLmNhdJQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25pcy5odG1sI25pcy5jYXSUag2PAAB0lIwWbmlzLmdldF9kZWZhdWx0X2RvbWFpbpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25pcy5odG1sI25pcy5nZXRfZGVmYXVsdF9kb21haW6Uag2PAAB0lIwIbmlzLm1hcHOUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uaXMuaHRtbCNuaXMubWFwc5RqDY8AAHSUjAluaXMubWF0Y2iUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uaXMuaHRtbCNuaXMubWF0Y2iUag2PAAB0lIwVbm50cGxpYi5kZWNvZGVfaGVhZGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHBsaWIuZGVjb2RlX2hlYWRlcpRqDY8AAHSUjANvY3SUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNvY3SUag2PAAB0lIwEb3BlbpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI29wZW6Uag2PAAB0lIwQb3BlcmF0b3IuX19hYnNfX5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19hYnNfX5RqDY8AAHSUjBBvcGVyYXRvci5fX2FkZF9flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2FkZF9flGoNjwAAdJSMEG9wZXJhdG9yLl9fYW5kX1+UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fYW5kX1+Uag2PAAB0lIwTb3BlcmF0b3IuX19jb25jYXRfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19jb25jYXRfX5RqDY8AAHSUjBVvcGVyYXRvci5fX2NvbnRhaW5zX1+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fY29udGFpbnNfX5RqDY8AAHSUjBRvcGVyYXRvci5fX2RlbGl0ZW1fX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19kZWxpdGVtX1+Uag2PAAB0lIwPb3BlcmF0b3IuX19lcV9flChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2VxX1+Uag2PAAB0lIwVb3BlcmF0b3IuX19mbG9vcmRpdl9flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2Zsb29yZGl2X1+Uag2PAAB0lIwPb3BlcmF0b3IuX19nZV9flChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2dlX1+Uag2PAAB0lIwUb3BlcmF0b3IuX19nZXRpdGVtX1+UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fZ2V0aXRlbV9flGoNjwAAdJSMD29wZXJhdG9yLl9fZ3RfX5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19ndF9flGoNjwAAdJSMEW9wZXJhdG9yLl9faWFkZF9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lhZGRfX5RqDY8AAHSUjBFvcGVyYXRvci5fX2lhbmRfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pYW5kX1+Uag2PAAB0lIwUb3BlcmF0b3IuX19pY29uY2F0X1+UlQMAAQAAAAAAKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faWNvbmNhdF9flGoNjwAAdJSMFm9wZXJhdG9yLl9faWZsb29yZGl2X1+UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faWZsb29yZGl2X1+Uag2PAAB0lIwUb3BlcmF0b3IuX19pbHNoaWZ0X1+UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faWxzaGlmdF9flGoNjwAAdJSMFG9wZXJhdG9yLl9faW1hdG11bF9flChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2ltYXRtdWxfX5RqDY8AAHSUjBFvcGVyYXRvci5fX2ltb2RfX5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pbW9kX1+Uag2PAAB0lIwRb3BlcmF0b3IuX19pbXVsX1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faW11bF9flGoNjwAAdJSMEm9wZXJhdG9yLl9faW5kZXhfX5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pbmRleF9flGoNjwAAdJSMEG9wZXJhdG9yLl9faW52X1+UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faW52X1+Uag2PAAB0lIwTb3BlcmF0b3IuX19pbnZlcnRfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pbnZlcnRfX5RqDY8AAHSUjBBvcGVyYXRvci5fX2lvcl9flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lvcl9flGoNjwAAdJSMEW9wZXJhdG9yLl9faXBvd19flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2lwb3dfX5RqDY8AAHSUjBRvcGVyYXRvci5fX2lyc2hpZnRfX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pcnNoaWZ0X1+Uag2PAAB0lIwRb3BlcmF0b3IuX19pc3ViX1+UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9faXN1Yl9flGoNjwAAdJSMFW9wZXJhdG9yLl9faXRydWVkaXZfX5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19pdHJ1ZWRpdl9flGoNjwAAdJSMEW9wZXJhdG9yLl9faXhvcl9flChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2l4b3JfX5RqDY8AAHSUjA9vcGVyYXRvci5fX2xlX1+UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbGVfX5RqDY8AAHSUjBNvcGVyYXRvci5fX2xzaGlmdF9flChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX2xzaGlmdF9flGoNjwAAdJSMD29wZXJhdG9yLl9fbHRfX5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19sdF9flGoNjwAAdJSME29wZXJhdG9yLl9fbWF0bXVsX1+UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbWF0bXVsX1+Uag2PAAB0lIwQb3BlcmF0b3IuX19tb2RfX5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19tb2RfX5RqDY8AAHSUjBBvcGVyYXRvci5fX211bF9flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX211bF9flGoNjwAAdJSMD29wZXJhdG9yLl9fbmVfX5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19uZV9flGoNjwAAdJSMEG9wZXJhdG9yLl9fbmVnX1+UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fbmVnX1+Uag2PAAB0lIwQb3BlcmF0b3IuX19ub3RfX5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19ub3RfX5RqDY8AAHSUjA9vcGVyYXRvci5fX29yX1+UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fb3JfX5RqDY8AAHSUjBBvcGVyYXRvci5fX3Bvc19flChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5fX3Bvc19flGoNjwAAdJSMEG9wZXJhdG9yLl9fcG93X1+UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLl9fcG93X1+Uag2PAAB0lIwTb3BlcmF0b3IuX19yc2hpZnRfX5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19yc2hpZnRfX5RqDY8AAHSUjBRvcGVyYXRvci5fX3NldGl0ZW1fX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19zZXRpdGVtX1+Uag2PAAB0lIwQb3BlcmF0b3IuX19zdWJfX5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX19zdWJfX5RqDY8AAHSUjBRvcGVyYXRvci5fX3RydWVkaXZfX5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX190cnVlZGl2X1+Uag2PAAB0lIwQb3BlcmF0b3IuX194b3JfX5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuX194b3JfX5RqDY8AAHSUjAxvcGVyYXRvci5hYnOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmFic5RqDY8AAHSUjAxvcGVyYXRvci5hZGSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmFkZJRqDY8AAHSUjA1vcGVyYXRvci5hbmRflChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5hbmRflGoNjwAAdJSME29wZXJhdG9yLmF0dHJnZXR0ZXKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmF0dHJnZXR0ZXKUag2PAAB0lIwPb3BlcmF0b3IuY29uY2F0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5jb25jYXSUag2PAAB0lIwRb3BlcmF0b3IuY29udGFpbnOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmNvbnRhaW5zlGoNjwAAdJSMEG9wZXJhdG9yLmNvdW50T2aUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmNvdW50T2aUag2PAAB0lIwQb3BlcmF0b3IuZGVsaXRlbZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZGVsaXRlbZRqDY8AAHSUjAtvcGVyYXRvci5lcZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuZXGUag2PAAB0lIwRb3BlcmF0b3IuZmxvb3JkaXaUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmZsb29yZGl2lGoNjwAAdJSMC29wZXJhdG9yLmdllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5nZZRqDY8AAHSUjBBvcGVyYXRvci5nZXRpdGVtlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5nZXRpdGVtlGoNjwAAdJSMC29wZXJhdG9yLmd0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5ndJRqDY8AAHSUjA1vcGVyYXRvci5pYWRklChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pYWRklGoNjwAAdJSMDW9wZXJhdG9yLmlhbmSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlhbmSUag2PAAB0lIwQb3BlcmF0b3IuaWNvbmNhdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaWNvbmNhdJRqDY8AAHSUjBJvcGVyYXRvci5pZmxvb3JkaXaUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlmbG9vcmRpdpRqDY8AAHSUdSiMEG9wZXJhdG9yLmlsc2hpZnSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlsc2hpZnSUag2PAAB0lIwQb3BlcmF0b3IuaW1hdG11bJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaW1hdG11bJRqDY8AAHSUjA1vcGVyYXRvci5pbW9klChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbW9klGoNjwAAdJSMDW9wZXJhdG9yLmltdWyUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmltdWyUag2PAAB0lIwOb3BlcmF0b3IuaW5kZXiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmluZGV4lGoNjwAAdJSMEG9wZXJhdG9yLmluZGV4T2aUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmluZGV4T2aUag2PAAB0lIwMb3BlcmF0b3IuaW52lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbnaUag2PAAB0lIwPb3BlcmF0b3IuaW52ZXJ0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pbnZlcnSUag2PAAB0lIwMb3BlcmF0b3IuaW9ylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pb3KUag2PAAB0lIwNb3BlcmF0b3IuaXBvd5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXBvd5RqDY8AAHSUjBBvcGVyYXRvci5pcnNoaWZ0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5pcnNoaWZ0lGoNjwAAdJSMDG9wZXJhdG9yLmlzX5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXNflGoNjwAAdJSMD29wZXJhdG9yLmlzX25vdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXNfbm90lGoNjwAAdJSMDW9wZXJhdG9yLmlzdWKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmlzdWKUag2PAAB0lIwTb3BlcmF0b3IuaXRlbWdldHRlcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXRlbWdldHRlcpRqDY8AAHSUjBFvcGVyYXRvci5pdHJ1ZWRpdpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXRydWVkaXaUag2PAAB0lIwNb3BlcmF0b3IuaXhvcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IuaXhvcpRqDY8AAHSUjAtvcGVyYXRvci5sZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubGWUag2PAAB0lIwUb3BlcmF0b3IubGVuZ3RoX2hpbnSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLmxlbmd0aF9oaW50lGoNjwAAdJSMD29wZXJhdG9yLmxzaGlmdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubHNoaWZ0lGoNjwAAdJSMC29wZXJhdG9yLmx0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5sdJRqDY8AAHSUjA9vcGVyYXRvci5tYXRtdWyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm1hdG11bJRqDY8AAHSUjBVvcGVyYXRvci5tZXRob2RjYWxsZXKUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm1ldGhvZGNhbGxlcpRqDY8AAHSUjAxvcGVyYXRvci5tb2SUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm1vZJRqDY8AAHSUjAxvcGVyYXRvci5tdWyUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm11bJRqDY8AAHSUjAtvcGVyYXRvci5uZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IubmWUag2PAAB0lIwMb3BlcmF0b3IubmVnlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5uZWeUag2PAAB0lIwNb3BlcmF0b3Iubm90X5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3Iubm90X5RqDY8AAHSUjAxvcGVyYXRvci5vcl+UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLm9yX5RqDY8AAHSUjAxvcGVyYXRvci5wb3OUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnBvc5RqDY8AAHSUjAxvcGVyYXRvci5wb3eUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnBvd5RqDY8AAHSUjA9vcGVyYXRvci5yc2hpZnSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnJzaGlmdJRqDY8AAHSUjBBvcGVyYXRvci5zZXRpdGVtlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3BlcmF0b3IuaHRtbCNvcGVyYXRvci5zZXRpdGVtlGoNjwAAdJSMDG9wZXJhdG9yLnN1YpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3Iuc3VilGoNjwAAdJSMEG9wZXJhdG9yLnRydWVkaXaUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnRydWVkaXaUag2PAAB0lIwOb3BlcmF0b3IudHJ1dGiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLnRydXRolGoNjwAAdJSMDG9wZXJhdG9yLnhvcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wZXJhdG9yLmh0bWwjb3BlcmF0b3IueG9ylGoNjwAAdJSMA29yZJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI29yZJRqDY8AAHSUjAxvcy5XQ09SRURVTVCUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLldDT1JFRFVNUJRqDY8AAHSUjA5vcy5XRVhJVFNUQVRVU5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuV0VYSVRTVEFUVVOUag2PAAB0lIwPb3MuV0lGQ09OVElOVUVElChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5XSUZDT05USU5VRUSUag2PAAB0lIwMb3MuV0lGRVhJVEVElChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5XSUZFWElURUSUag2PAAB0lIwOb3MuV0lGU0lHTkFMRUSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLldJRlNJR05BTEVElGoNjwAAdJSMDW9zLldJRlNUT1BQRUSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLldJRlNUT1BQRUSUag2PAAB0lIwLb3MuV1NUT1BTSUeUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLldTVE9QU0lHlGoNjwAAdJSMC29zLldURVJNU0lHlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5XVEVSTVNJR5RqDY8AAHSUjAhvcy5fZXhpdJQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuX2V4aXSUag2PAAB0lIwIb3MuYWJvcnSUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmFib3J0lGoNjwAAdJSMCW9zLmFjY2Vzc5QoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuYWNjZXNzlGoNjwAAdJSMFG9zLmFkZF9kbGxfZGlyZWN0b3J5lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5hZGRfZGxsX2RpcmVjdG9yeZRqDY8AAHSUjAhvcy5jaGRpcpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuY2hkaXKUag2PAAB0lIwKb3MuY2hmbGFnc5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuY2hmbGFnc5RqDY8AAHSUjAhvcy5jaG1vZJQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuY2htb2SUag2PAAB0lIwIb3MuY2hvd26UKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmNob3dulGoNjwAAdJSMCW9zLmNocm9vdJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuY2hyb290lGoNjwAAdJSMCG9zLmNsb3NllChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5jbG9zZZRqDY8AAHSUjA1vcy5jbG9zZXJhbmdllChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5jbG9zZXJhbmdllGoNjwAAdJSMCm9zLmNvbmZzdHKUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmNvbmZzdHKUag2PAAB0lIwSb3MuY29weV9maWxlX3JhbmdllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5jb3B5X2ZpbGVfcmFuZ2WUag2PAAB0lIwMb3MuY3B1X2NvdW50lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5jcHVfY291bnSUag2PAAB0lIwKb3MuY3Rlcm1pZJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuY3Rlcm1pZJRqDY8AAHSUjBJvcy5kZXZpY2VfZW5jb2RpbmeUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmRldmljZV9lbmNvZGluZ5RqDY8AAHSUjAZvcy5kdXCUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmR1cJRqDY8AAHSUjAdvcy5kdXAylChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5kdXAylGoNjwAAdJSMCG9zLmV4ZWNslChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjbJRqDY8AAHSUjAlvcy5leGVjbGWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmV4ZWNsZZRqDY8AAHSUjAlvcy5leGVjbHCUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmV4ZWNscJRqDY8AAHSUjApvcy5leGVjbHBllChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjbHBllGoNjwAAdJSMCG9zLmV4ZWN2lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjdpRqDY8AAHSUjAlvcy5leGVjdmWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmV4ZWN2ZZRqDY8AAHSUjAlvcy5leGVjdnCUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmV4ZWN2cJRqDY8AAHSUjApvcy5leGVjdnBllChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5leGVjdnBllGoNjwAAdJSMCW9zLmZjaGRpcpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZmNoZGlylGoNjwAAdJSMCW9zLmZjaG1vZJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZmNobW9klGoNjwAAdJSMCW9zLmZjaG93bpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZmNob3dulGoNjwAAdJSMDG9zLmZkYXRhc3luY5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZmRhdGFzeW5jlGoNjwAAdJSMCW9zLmZkb3BlbpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZmRvcGVulGoNjwAAdJSMB29zLmZvcmuUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmZvcmuUag2PAAB0lIwKb3MuZm9ya3B0eZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZm9ya3B0eZRqDY8AAHSUjAxvcy5mcGF0aGNvbmaUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmZwYXRoY29uZpRqDY8AAHSUjAtvcy5mc2RlY29kZZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZnNkZWNvZGWUag2PAAB0lIwLb3MuZnNlbmNvZGWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmZzZW5jb2RllGoNjwAAdJSMCW9zLmZzcGF0aJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZnNwYXRolGoNjwAAdJSMCG9zLmZzdGF0lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5mc3RhdJRqDY8AAHSUjAtvcy5mc3RhdHZmc5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZnN0YXR2ZnOUag2PAAB0lIwIb3MuZnN5bmOUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmZzeW5jlGoNjwAAdJSMDG9zLmZ0cnVuY2F0ZZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZnRydW5jYXRllGoNjwAAdJSMCG9zLmZ3YWxrlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5md2Fsa5RqDY8AAHSUjA9vcy5nZXRfYmxvY2tpbmeUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmdldF9ibG9ja2luZ5RqDY8AAHSUjBBvcy5nZXRfZXhlY19wYXRolChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRfZXhlY19wYXRolGoNjwAAdJSMGW9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmdldF9oYW5kbGVfaW5oZXJpdGFibGWUag2PAAB0lIwSb3MuZ2V0X2luaGVyaXRhYmxllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRfaW5oZXJpdGFibGWUag2PAAB0lIwUb3MuZ2V0X3Rlcm1pbmFsX3NpemWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmdldF90ZXJtaW5hbF9zaXpllGoNjwAAdJSMCW9zLmdldGN3ZJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0Y3dklGoNjwAAdJSMCm9zLmdldGN3ZGKUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmdldGN3ZGKUag2PAAB0lIwKb3MuZ2V0ZWdpZJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0ZWdpZJRqDY8AAHSUjAlvcy5nZXRlbnaUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmdldGVudpRqDY8AAHSUjApvcy5nZXRlbnZilChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRlbnZilGoNjwAAdJSMCm9zLmdldGV1aWSUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmdldGV1aWSUag2PAAB0lIwJb3MuZ2V0Z2lklChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRnaWSUag2PAAB0lIwPb3MuZ2V0Z3JvdXBsaXN0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRncm91cGxpc3SUag2PAAB0lIwMb3MuZ2V0Z3JvdXBzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRncm91cHOUag2PAAB0lIwNb3MuZ2V0bG9hZGF2Z5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0bG9hZGF2Z5RqDY8AAHSUjAtvcy5nZXRsb2dpbpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0bG9naW6Uag2PAAB0lIwKb3MuZ2V0cGdpZJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0cGdpZJRqDY8AAHSUjApvcy5nZXRwZ3JwlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXRwZ3JwlGoNjwAAdJSMCW9zLmdldHBpZJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0cGlklGoNjwAAdJSMCm9zLmdldHBwaWSUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmdldHBwaWSUag2PAAB0lIwOb3MuZ2V0cHJpb3JpdHmUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmdldHByaW9yaXR5lGoNjwAAdJSMDG9zLmdldHJhbmRvbZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0cmFuZG9tlGoNjwAAdJSMDG9zLmdldHJlc2dpZJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0cmVzZ2lklGoNjwAAdJSMDG9zLmdldHJlc3VpZJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0cmVzdWlklGoNjwAAdJSMCW9zLmdldHNpZJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0c2lklGoNjwAAdJSMCW9zLmdldHVpZJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuZ2V0dWlklGoNjwAAdJSMC29zLmdldHhhdHRylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5nZXR4YXR0cpRqDY8AAHSUjA1vcy5pbml0Z3JvdXBzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5pbml0Z3JvdXBzlGoNjwAAdJSMCW9zLmlzYXR0eZQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MuaXNhdHR5lGoNjwAAdJSMB29zLmtpbGyUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmtpbGyUag2PAAB0lIwJb3Mua2lsbHBnlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5raWxscGeUag2PAAB0lIwLb3MubGNoZmxhZ3OUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmxjaGZsYWdzlGoNjwAAdJSMCW9zLmxjaG1vZJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubGNobW9klGoNjwAAdJSMCW9zLmxjaG93bpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubGNob3dulGoNjwAAdJSMB29zLmxpbmuUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmxpbmuUag2PAAB0lIwKb3MubGlzdGRpcpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubGlzdGRpcpRqDY8AAHSUjAxvcy5saXN0eGF0dHKUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmxpc3R4YXR0cpRqDY8AAHSUjAhvcy5sb2NrZpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubG9ja2aUag2PAAB0lIwIb3MubHNlZWuUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLmxzZWVrlGoNjwAAdJSMCG9zLmxzdGF0lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5sc3RhdJRqDY8AAHSUjAhvcy5tYWpvcpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubWFqb3KUag2PAAB0lIwKb3MubWFrZWRldpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubWFrZWRldpRqDY8AAHSUjAtvcy5tYWtlZGlyc5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubWFrZWRpcnOUag2PAAB0lIwPb3MubWVtZmRfY3JlYXRllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5tZW1mZF9jcmVhdGWUag2PAAB0lIwIb3MubWlub3KUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLm1pbm9ylGoNjwAAdJSMCG9zLm1rZGlylChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5ta2RpcpRqDY8AAHSUjAlvcy5ta2ZpZm+UKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLm1rZmlmb5RqDY8AAHSUjAhvcy5ta25vZJQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubWtub2SUag2PAAB0lIwHb3MubmljZZQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MubmljZZRqDY8AAHSUjAdvcy5vcGVulChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5vcGVulGoNjwAAdJSMCm9zLm9wZW5wdHmUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLm9wZW5wdHmUag2PAAB0lIwPb3MucGF0aC5hYnNwYXRolChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguYWJzcGF0aJRqDY8AAHSUjBBvcy5wYXRoLmJhc2VuYW1llChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguYmFzZW5hbWWUag2PAAB0lIwSb3MucGF0aC5jb21tb25wYXRolChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguY29tbW9ucGF0aJRqDY8AAHSUjBRvcy5wYXRoLmNvbW1vbnByZWZpeJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmNvbW1vbnByZWZpeJRqDY8AAHSUjA9vcy5wYXRoLmRpcm5hbWWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5kaXJuYW1llGoNjwAAdJSMDm9zLnBhdGguZXhpc3RzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZXhpc3RzlGoNjwAAdJSMEm9zLnBhdGguZXhwYW5kdXNlcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmV4cGFuZHVzZXKUag2PAAB0lIwSb3MucGF0aC5leHBhbmR2YXJzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZXhwYW5kdmFyc5RqDY8AAHSUjBBvcy5wYXRoLmdldGF0aW1llChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguZ2V0YXRpbWWUag2PAAB0lIwQb3MucGF0aC5nZXRjdGltZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmdldGN0aW1llGoNjwAAdJSMEG9zLnBhdGguZ2V0bXRpbWWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5nZXRtdGltZZRqDY8AAHSUjA9vcy5wYXRoLmdldHNpemWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5nZXRzaXpllGoNjwAAdJSMDW9zLnBhdGguaXNhYnOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5pc2Fic5RqDY8AAHSUjA1vcy5wYXRoLmlzZGlylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguaXNkaXKUag2PAAB0lIwOb3MucGF0aC5pc2ZpbGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5pc2ZpbGWUag2PAAB0lIwOb3MucGF0aC5pc2xpbmuUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5pc2xpbmuUag2PAAB0lIwPb3MucGF0aC5pc21vdW50lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguaXNtb3VudJRqDY8AAHSUjAxvcy5wYXRoLmpvaW6UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5qb2lulGoNjwAAdJSMD29zLnBhdGgubGV4aXN0c5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLmxleGlzdHOUag2PAAB0lIwQb3MucGF0aC5ub3JtY2FzZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLm5vcm1jYXNllGoNjwAAdJSMEG9zLnBhdGgubm9ybXBhdGiUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5ub3JtcGF0aJRqDY8AAHSUjBBvcy5wYXRoLnJlYWxwYXRolChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGgucmVhbHBhdGiUag2PAAB0lIwPb3MucGF0aC5yZWxwYXRolChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGgucmVscGF0aJRqDY8AAHSUjBBvcy5wYXRoLnNhbWVmaWxllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MucGF0aC5odG1sI29zLnBhdGguc2FtZWZpbGWUag2PAAB0lIwUb3MucGF0aC5zYW1lb3BlbmZpbGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5zYW1lb3BlbmZpbGWUag2PAAB0lIwQb3MucGF0aC5zYW1lc3RhdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLnBhdGguaHRtbCNvcy5wYXRoLnNhbWVzdGF0lGoNjwAAdJSMDW9zLnBhdGguc3BsaXSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5zcGxpdJRqDY8AAHSUjBJvcy5wYXRoLnNwbGl0ZHJpdmWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5zcGxpdGRyaXZllGoNjwAAdJSMEG9zLnBhdGguc3BsaXRleHSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWwjb3MucGF0aC5zcGxpdGV4dJRqDY8AAHSUjAtvcy5wYXRoY29uZpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MucGF0aGNvbmaUag2PAAB0lIwHb3MucGlwZZQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MucGlwZZRqDY8AAHSUjAhvcy5waXBlMpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MucGlwZTKUag2PAAB0lIwIb3MucGxvY2uUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnBsb2NrlGoNjwAAdJSMCG9zLnBvcGVulChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wb3BlbpRqDY8AAHSUjBBvcy5wb3NpeF9mYWR2aXNllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wb3NpeF9mYWR2aXNllGoNjwAAdJSMEm9zLnBvc2l4X2ZhbGxvY2F0ZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MucG9zaXhfZmFsbG9jYXRllGoNjwAAdJSMDm9zLnBvc2l4X3NwYXdulChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wb3NpeF9zcGF3bpRqDY8AAHSUjA9vcy5wb3NpeF9zcGF3bnCUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnBvc2l4X3NwYXducJRqDY8AAHSUjAhvcy5wcmVhZJQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MucHJlYWSUag2PAAB0lIwJb3MucHJlYWR2lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wcmVhZHaUag2PAAB0lIwJb3MucHV0ZW52lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wdXRlbnaUag2PAAB0lIwJb3MucHdyaXRllChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5wd3JpdGWUag2PAAB0lIwKb3MucHdyaXRldpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MucHdyaXRldpRqDY8AAHSUjAdvcy5yZWFklChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5yZWFklGoNjwAAdJSMC29zLnJlYWRsaW5rlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5yZWFkbGlua5RqDY8AAHSUjAhvcy5yZWFkdpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MucmVhZHaUag2PAAB0lIwTb3MucmVnaXN0ZXJfYXRfZm9ya5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MucmVnaXN0ZXJfYXRfZm9ya5RqDY8AAHSUjAlvcy5yZW1vdmWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnJlbW92ZZRqDY8AAHSUjA1vcy5yZW1vdmVkaXJzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5yZW1vdmVkaXJzlGoNjwAAdJSMDm9zLnJlbW92ZXhhdHRylChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5yZW1vdmV4YXR0cpRqDY8AAHSUjAlvcy5yZW5hbWWUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnJlbmFtZZRqDY8AAHSUjApvcy5yZW5hbWVzlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5yZW5hbWVzlGoNjwAAdJSMCm9zLnJlcGxhY2WUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnJlcGxhY2WUag2PAAB0lIwIb3Mucm1kaXKUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnJtZGlylGoNjwAAdJSMCm9zLnNjYW5kaXKUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNjYW5kaXKUag2PAAB0lIwZb3Muc2NoZWRfZ2V0X3ByaW9yaXR5X21heJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2NoZWRfZ2V0X3ByaW9yaXR5X21heJRqDY8AAHSUjBlvcy5zY2hlZF9nZXRfcHJpb3JpdHlfbWlulChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zY2hlZF9nZXRfcHJpb3JpdHlfbWlulGoNjwAAdJSMFG9zLnNjaGVkX2dldGFmZmluaXR5lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zY2hlZF9nZXRhZmZpbml0eZRqDY8AAHSUjBFvcy5zY2hlZF9nZXRwYXJhbZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2NoZWRfZ2V0cGFyYW2Uag2PAAB0lIwVb3Muc2NoZWRfZ2V0c2NoZWR1bGVylChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zY2hlZF9nZXRzY2hlZHVsZXKUag2PAAB0lIwYb3Muc2NoZWRfcnJfZ2V0X2ludGVydmFslChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zY2hlZF9ycl9nZXRfaW50ZXJ2YWyUag2PAAB0lIwUb3Muc2NoZWRfc2V0YWZmaW5pdHmUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNjaGVkX3NldGFmZmluaXR5lGoNjwAAdJSMEW9zLnNjaGVkX3NldHBhcmFtlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zY2hlZF9zZXRwYXJhbZRqDY8AAHSUjBVvcy5zY2hlZF9zZXRzY2hlZHVsZXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNjaGVkX3NldHNjaGVkdWxlcpRqDY8AAHSUjA5vcy5zY2hlZF95aWVsZJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2NoZWRfeWllbGSUag2PAAB0lIwLb3Muc2VuZGZpbGWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNlbmRmaWxllGoNjwAAdJSMD29zLnNldF9ibG9ja2luZ5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0X2Jsb2NraW5nlGoNjwAAdJSMGW9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNldF9oYW5kbGVfaW5oZXJpdGFibGWUag2PAAB0lIwSb3Muc2V0X2luaGVyaXRhYmxllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRfaW5oZXJpdGFibGWUag2PAAB0lIwKb3Muc2V0ZWdpZJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0ZWdpZJRqDY8AAHSUjApvcy5zZXRldWlklChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRldWlklGoNjwAAdJSMCW9zLnNldGdpZJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0Z2lklGoNjwAAdJSMDG9zLnNldGdyb3Vwc5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0Z3JvdXBzlGoNjwAAdJSMCm9zLnNldHBnaWSUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNldHBnaWSUag2PAAB0lIwKb3Muc2V0cGdycJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0cGdycJRqDY8AAHSUjA5vcy5zZXRwcmlvcml0eZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0cHJpb3JpdHmUag2PAAB0lIwLb3Muc2V0cmVnaWSUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNldHJlZ2lklGoNjwAAdJSMDG9zLnNldHJlc2dpZJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0cmVzZ2lklGoNjwAAdJSMDG9zLnNldHJlc3VpZJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0cmVzdWlklGoNjwAAdJSMC29zLnNldHJldWlklChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zZXRyZXVpZJRqDY8AAHSUjAlvcy5zZXRzaWSUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNldHNpZJRqDY8AAHSUjAlvcy5zZXR1aWSUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNldHVpZJRqDY8AAHSUjAtvcy5zZXR4YXR0cpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2V0eGF0dHKUag2PAAB0lIwJb3Muc3Bhd25slChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bmyUag2PAAB0lIwKb3Muc3Bhd25sZZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3Bhd25sZZRqDY8AAHSUjApvcy5zcGF3bmxwlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bmxwlGoNjwAAdJSMC29zLnNwYXdubHBllChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bmxwZZRqDY8AAHSUjAlvcy5zcGF3bnaUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNwYXdudpRqDY8AAHSUjApvcy5zcGF3bnZllChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zcGF3bnZllGoNjwAAdJSMCm9zLnNwYXdudnCUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNwYXdudnCUag2PAAB0lIwLb3Muc3Bhd252cGWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnNwYXdudnBllGoNjwAAdJSMDG9zLnN0YXJ0ZmlsZZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhcnRmaWxllGoNjwAAdJSMB29zLnN0YXSUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXSUag2PAAB0lIwKb3Muc3RhdHZmc5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RhdHZmc5RqDY8AAHSUjAtvcy5zdHJlcnJvcpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3RyZXJyb3KUag2PAAB0lIwKb3Muc3ltbGlua5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc3ltbGlua5RqDY8AAHSUjAdvcy5zeW5jlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zeW5jlGoNjwAAdJSMCm9zLnN5c2NvbmaUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN5c2NvbmaUag2PAAB0lIwJb3Muc3lzdGVtlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5zeXN0ZW2Uag2PAAB0lIwMb3MudGNnZXRwZ3JwlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy50Y2dldHBncnCUag2PAAB0lIwMb3MudGNzZXRwZ3JwlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy50Y3NldHBncnCUag2PAAB0lIwIb3MudGltZXOUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnRpbWVzlGoNjwAAdJSMC29zLnRydW5jYXRllChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy50cnVuY2F0ZZRqDY8AAHSUjApvcy50dHluYW1llChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy50dHluYW1llGoNjwAAdJSMCG9zLnVtYXNrlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy51bWFza5RqDY8AAHSUjAhvcy51bmFtZZQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MudW5hbWWUag2PAAB0lIwJb3MudW5saW5rlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy51bmxpbmuUag2PAAB0lIwLb3MudW5zZXRlbnaUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnVuc2V0ZW52lGoNjwAAdJSMCm9zLnVyYW5kb22UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnVyYW5kb22Uag2PAAB0lIwIb3MudXRpbWWUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnV0aW1llGoNjwAAdJSMB29zLndhaXSUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLndhaXSUag2PAAB0lIwIb3Mud2FpdDOUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLndhaXQzlGoNjwAAdJSMCG9zLndhaXQ0lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy53YWl0NJRqDY8AAHSUjAlvcy53YWl0aWSUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLndhaXRpZJRqDY8AAHSUjApvcy53YWl0cGlklChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy53YWl0cGlklGoNjwAAdJSMB29zLndhbGuUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLndhbGuUag2PAAB0lIwIb3Mud3JpdGWUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLndyaXRllGoNjwAAdJSMCW9zLndyaXRldpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Mud3JpdGV2lGoNjwAAdJSMEG9zc2F1ZGlvZGV2Lm9wZW6UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vc3NhdWRpb2Rldi5odG1sI29zc2F1ZGlvZGV2Lm9wZW6Uag2PAAB0lIwVb3NzYXVkaW9kZXYub3Blbm1peGVylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpb2Rldi5vcGVubWl4ZXKUag2PAAB0lIwQcGFyc2VyLmNvbXBpbGVzdJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5jb21waWxlc3SUag2PAAB0lIwLcGFyc2VyLmV4cHKUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuZXhwcpRqDY8AAHSUjA1wYXJzZXIuaXNleHBylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLmlzZXhwcpRqDY8AAHSUjA5wYXJzZXIuaXNzdWl0ZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5pc3N1aXRllGoNjwAAdJSMEnBhcnNlci5zZXF1ZW5jZTJzdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5zZXF1ZW5jZTJzdJRqDY8AAHSUjA5wYXJzZXIuc3QybGlzdJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5zdDJsaXN0lGoNjwAAdJSMD3BhcnNlci5zdDJ0dXBsZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3BhcnNlci5zdDJ0dXBsZZRqDY8AAHSUjAxwYXJzZXIuc3VpdGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXJzZXIuaHRtbCNwYXJzZXIuc3VpdGWUag2PAAB0lIwPcGFyc2VyLnR1cGxlMnN0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGFyc2VyLmh0bWwjcGFyc2VyLnR1cGxlMnN0lGoNjwAAdJSMBnBkYi5wbZQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYi5wbZRqDY8AAHSUjA9wZGIucG9zdF9tb3J0ZW2UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGIucG9zdF9tb3J0ZW2Uag2PAAB0lIwHcGRiLnJ1bpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYi5ydW6Uag2PAAB0lIwLcGRiLnJ1bmNhbGyUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGIucnVuY2FsbJRqDY8AAHSUjAtwZGIucnVuZXZhbJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYi5ydW5ldmFslGoNjwAAdJSMDXBkYi5zZXRfdHJhY2WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGIuc2V0X3RyYWNllGoNjwAAdJSMC3BpY2tsZS5kdW1wlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLmR1bXCUag2PAAB0lIwMcGlja2xlLmR1bXBzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLmR1bXBzlGoNjwAAdJSMC3BpY2tsZS5sb2FklChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLmxvYWSUag2PAAB0lIwMcGlja2xlLmxvYWRzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLmxvYWRzlGoNjwAAdJSMD3BpY2tsZXRvb2xzLmRpc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZXRvb2xzLmh0bWwjcGlja2xldG9vbHMuZGlzlGoNjwAAdJSMEnBpY2tsZXRvb2xzLmdlbm9wc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZXRvb2xzLmh0bWwjcGlja2xldG9vbHMuZ2Vub3BzlGoNjwAAdJSMFHBpY2tsZXRvb2xzLm9wdGltaXpllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNwaWNrbGV0b29scy5vcHRpbWl6ZZRqDY8AAHSUjBNwa2d1dGlsLmV4dGVuZF9wYXRolChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGtndXRpbC5odG1sI3BrZ3V0aWwuZXh0ZW5kX3BhdGiUag2PAAB0lIwTcGtndXRpbC5maW5kX2xvYWRlcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLmZpbmRfbG9hZGVylGoNjwAAdJSMEHBrZ3V0aWwuZ2V0X2RhdGGUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5nZXRfZGF0YZRqDY8AAHSUjBRwa2d1dGlsLmdldF9pbXBvcnRlcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLmdldF9pbXBvcnRlcpRqDY8AAHSUjBJwa2d1dGlsLmdldF9sb2FkZXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5nZXRfbG9hZGVylGoNjwAAdJSMFnBrZ3V0aWwuaXRlcl9pbXBvcnRlcnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC5pdGVyX2ltcG9ydGVyc5RqDY8AAHSUjBRwa2d1dGlsLml0ZXJfbW9kdWxlc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLml0ZXJfbW9kdWxlc5RqDY8AAHSUjBVwa2d1dGlsLndhbGtfcGFja2FnZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wa2d1dGlsLmh0bWwjcGtndXRpbC53YWxrX3BhY2thZ2VzlGoNjwAAdJSMFXBsYXRmb3JtLmFyY2hpdGVjdHVyZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0uYXJjaGl0ZWN0dXJllGoNjwAAdJSMEXBsYXRmb3JtLmphdmFfdmVylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5qYXZhX3ZlcpRqDY8AAHSUjBFwbGF0Zm9ybS5saWJjX3ZlcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ubGliY192ZXKUag2PAAB0lIwQcGxhdGZvcm0ubWFjX3ZlcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ubWFjX3ZlcpRqDY8AAHSUjBBwbGF0Zm9ybS5tYWNoaW5llChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5tYWNoaW5llGoNjwAAdJSMDXBsYXRmb3JtLm5vZGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLm5vZGWUag2PAAB0lIwRcGxhdGZvcm0ucGxhdGZvcm2UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnBsYXRmb3JtlGoNjwAAdJSMEnBsYXRmb3JtLnByb2Nlc3NvcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0ucHJvY2Vzc29ylGoNjwAAdJSMFnBsYXRmb3JtLnB5dGhvbl9icmFuY2iUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnB5dGhvbl9icmFuY2iUag2PAAB0lIwVcGxhdGZvcm0ucHl0aG9uX2J1aWxklChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25fYnVpbGSUag2PAAB0lIwYcGxhdGZvcm0ucHl0aG9uX2NvbXBpbGVylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25fY29tcGlsZXKUag2PAAB0lIwecGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9ulChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb26Uag2PAAB0lIwYcGxhdGZvcm0ucHl0aG9uX3JldmlzaW9ulChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25fcmV2aXNpb26Uag2PAAB0lIwXcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb26UKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLnB5dGhvbl92ZXJzaW9ulGoNjwAAdJSMHXBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uX3R1cGxllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5weXRob25fdmVyc2lvbl90dXBsZZRqDY8AAHSUjBBwbGF0Zm9ybS5yZWxlYXNllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS5yZWxlYXNllGoNjwAAdJSMD3BsYXRmb3JtLnN5c3RlbZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0uc3lzdGVtlGoNjwAAdJSMFXBsYXRmb3JtLnN5c3RlbV9hbGlhc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsYXRmb3JtLmh0bWwjcGxhdGZvcm0uc3lzdGVtX2FsaWFzlGoNjwAAdJSMDnBsYXRmb3JtLnVuYW1llChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS51bmFtZZRqDY8AAHSUjBBwbGF0Zm9ybS52ZXJzaW9ulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS52ZXJzaW9ulGoNjwAAdJSMFnBsYXRmb3JtLndpbjMyX2VkaXRpb26UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wbGF0Zm9ybS5odG1sI3BsYXRmb3JtLndpbjMyX2VkaXRpb26Uag2PAAB0lIwVcGxhdGZvcm0ud2luMzJfaXNfaW90lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS53aW4zMl9pc19pb3SUag2PAAB0lIwScGxhdGZvcm0ud2luMzJfdmVylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxhdGZvcm0uaHRtbCNwbGF0Zm9ybS53aW4zMl92ZXKUag2PAAB0lIwNcGxpc3RsaWIuZHVtcJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIuZHVtcJRqDY8AAHSUjA5wbGlzdGxpYi5kdW1wc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIuZHVtcHOUag2PAAB0lIwNcGxpc3RsaWIubG9hZJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIubG9hZJRqDY8AAHSUjA5wbGlzdGxpYi5sb2Fkc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIubG9hZHOUag2PAAB0lIwScGxpc3RsaWIucmVhZFBsaXN0lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNwbGlzdGxpYi5yZWFkUGxpc3SUag2PAAB0lIwbcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxpc3RsaWIuaHRtbCNwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXOUag2PAAB0lIwTcGxpc3RsaWIud3JpdGVQbGlzdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIud3JpdGVQbGlzdJRqDY8AAHSUjBpwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlc5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXOUag2PAAB0lIwDcG93lChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcG93lGoNjwAAdJSMEXBwcmludC5pc3JlYWRhYmxllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LmlzcmVhZGFibGWUag2PAAB0lIwScHByaW50LmlzcmVjdXJzaXZllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LmlzcmVjdXJzaXZllGoNjwAAdJSMDnBwcmludC5wZm9ybWF0lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LnBmb3JtYXSUag2PAAB0lIwJcHByaW50LnBwlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LnBwlGoNjwAAdJSMDXBwcmludC5wcHJpbnSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcHJpbnQuaHRtbCNwcHJpbnQucHByaW50lGoNjwAAdJSMD3BwcmludC5zYWZlcmVwcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5zYWZlcmVwcpRqDY8AAHSUjAVwcmludJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3ByaW50lGoNjwAAdJSMC3Byb2ZpbGUucnVulChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUucnVulGoNjwAAdJSMDnByb2ZpbGUucnVuY3R4lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUucnVuY3R4lGoNjwAAdJSMCHB0eS5mb3JrlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHR5Lmh0bWwjcHR5LmZvcmuUag2PAAB0lIwLcHR5Lm9wZW5wdHmUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wdHkuaHRtbCNwdHkub3BlbnB0eZRqDY8AAHSUjAlwdHkuc3Bhd26UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wdHkuaHRtbCNwdHkuc3Bhd26Uag2PAAB0lIwMcHdkLmdldHB3YWxslChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHdkLmh0bWwjcHdkLmdldHB3YWxslGoNjwAAdJSMDHB3ZC5nZXRwd25hbZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B3ZC5odG1sI3B3ZC5nZXRwd25hbZRqDY8AAHSUjAxwd2QuZ2V0cHd1aWSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wd2QuaHRtbCNwd2QuZ2V0cHd1aWSUag2PAAB0lIwScHlfY29tcGlsZS5jb21waWxllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlfY29tcGlsZS5odG1sI3B5X2NvbXBpbGUuY29tcGlsZZRqDY8AAHSUjA9weV9jb21waWxlLm1haW6UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weV9jb21waWxlLmh0bWwjcHlfY29tcGlsZS5tYWlulGoNjwAAdJSMEXB5Y2xici5yZWFkbW9kdWxllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLnJlYWRtb2R1bGWUag2PAAB0lIwUcHljbGJyLnJlYWRtb2R1bGVfZXiUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWNsYnIuaHRtbCNweWNsYnIucmVhZG1vZHVsZV9leJRqDY8AAHSUjA1xdW9wcmkuZGVjb2RllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVvcHJpLmh0bWwjcXVvcHJpLmRlY29kZZRqDY8AAHSUjBNxdW9wcmkuZGVjb2Rlc3RyaW5nlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVvcHJpLmh0bWwjcXVvcHJpLmRlY29kZXN0cmluZ5RqDY8AAHSUjA1xdW9wcmkuZW5jb2RllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVvcHJpLmh0bWwjcXVvcHJpLmVuY29kZZRqDY8AAHSUjBNxdW9wcmkuZW5jb2Rlc3RyaW5nlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVvcHJpLmh0bWwjcXVvcHJpLmVuY29kZXN0cmluZ5RqDY8AAHSUjBJyYW5kb20uYmV0YXZhcmlhdGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uYmV0YXZhcmlhdGWUag2PAAB0lIwNcmFuZG9tLmNob2ljZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5jaG9pY2WUag2PAAB0lIwOcmFuZG9tLmNob2ljZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uY2hvaWNlc5RqDY8AAHSUjBJyYW5kb20uZXhwb3ZhcmlhdGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uZXhwb3ZhcmlhdGWUag2PAAB0lIwTcmFuZG9tLmdhbW1hdmFyaWF0ZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5nYW1tYXZhcmlhdGWUag2PAAB0lIwMcmFuZG9tLmdhdXNzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLmdhdXNzlGoNjwAAdJSMEnJhbmRvbS5nZXRyYW5kYml0c5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5nZXRyYW5kYml0c5RqDY8AAHSUjA9yYW5kb20uZ2V0c3RhdGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uZ2V0c3RhdGWUag2PAAB0lIwVcmFuZG9tLmxvZ25vcm12YXJpYXRllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLmxvZ25vcm12YXJpYXRllGoNjwAAdJSMFHJhbmRvbS5ub3JtYWx2YXJpYXRllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLm5vcm1hbHZhcmlhdGWUag2PAAB0lIwUcmFuZG9tLnBhcmV0b3ZhcmlhdGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20ucGFyZXRvdmFyaWF0ZZRqDY8AAHSUjA5yYW5kb20ucmFuZGludJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS5yYW5kaW50lGoNjwAAdJSMDXJhbmRvbS5yYW5kb22UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20ucmFuZG9tlGoNjwAAdJSMEHJhbmRvbS5yYW5kcmFuZ2WUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20ucmFuZHJhbmdllGoNjwAAdJSMDXJhbmRvbS5zYW1wbGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uc2FtcGxllGoNjwAAdJSMC3JhbmRvbS5zZWVklChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnNlZWSUag2PAAB0lIwPcmFuZG9tLnNldHN0YXRllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnNldHN0YXRllGoNjwAAdJSMDnJhbmRvbS5zaHVmZmxllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmFuZG9tLmh0bWwjcmFuZG9tLnNodWZmbGWUag2PAAB0lIwRcmFuZG9tLnRyaWFuZ3VsYXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20udHJpYW5ndWxhcpRqDY8AAHSUjA5yYW5kb20udW5pZm9ybZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS51bmlmb3JtlGoNjwAAdJSMFnJhbmRvbS52b25taXNlc3ZhcmlhdGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20udm9ubWlzZXN2YXJpYXRllGoNjwAAdJSMFXJhbmRvbS53ZWlidWxsdmFyaWF0ZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JhbmRvbS5odG1sI3JhbmRvbS53ZWlidWxsdmFyaWF0ZZRqDY8AAHSUjApyZS5jb21waWxllChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5jb21waWxllGoNjwAAdJSMCXJlLmVzY2FwZZQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuZXNjYXBllGoNjwAAdJSMCnJlLmZpbmRhbGyUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLmZpbmRhbGyUag2PAAB0lIwLcmUuZmluZGl0ZXKUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLmZpbmRpdGVylGoNjwAAdJSMDHJlLmZ1bGxtYXRjaJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuZnVsbG1hdGNolGoNjwAAdJSMCHJlLm1hdGNolChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5tYXRjaJRqDY8AAHSUjAhyZS5wdXJnZZQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUucHVyZ2WUag2PAAB0lIwJcmUuc2VhcmNolChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS5zZWFyY2iUag2PAAB0lIwIcmUuc3BsaXSUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLnNwbGl0lGoNjwAAdJSMBnJlLnN1YpQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUuc3VilGoNjwAAdJSMB3JlLnN1Ym6UKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLnN1Ym6Uag2PAAB0lIwUcmVhZGxpbmUuYWRkX2hpc3RvcnmUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmFkZF9oaXN0b3J5lGoNjwAAdJSMHHJlYWRsaW5lLmFwcGVuZF9oaXN0b3J5X2ZpbGWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmFwcGVuZF9oaXN0b3J5X2ZpbGWUag2PAAB0lIwWcmVhZGxpbmUuY2xlYXJfaGlzdG9yeZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuY2xlYXJfaGlzdG9yeZRqDY8AAHSUjBNyZWFkbGluZS5nZXRfYmVnaWR4lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5nZXRfYmVnaWR4lGoNjwAAdJSMFnJlYWRsaW5lLmdldF9jb21wbGV0ZXKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9jb21wbGV0ZXKUag2PAAB0lIwdcmVhZGxpbmUuZ2V0X2NvbXBsZXRlcl9kZWxpbXOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9jb21wbGV0ZXJfZGVsaW1zlGoNjwAAdJSMHHJlYWRsaW5lLmdldF9jb21wbGV0aW9uX3R5cGWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9jb21wbGV0aW9uX3R5cGWUag2PAAB0lIwjcmVhZGxpbmUuZ2V0X2N1cnJlbnRfaGlzdG9yeV9sZW5ndGiUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RolGoNjwAAdJSME3JlYWRsaW5lLmdldF9lbmRpZHiUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9lbmRpZHiUag2PAAB0lIwZcmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbZRqDY8AAHSUjBtyZWFkbGluZS5nZXRfaGlzdG9yeV9sZW5ndGiUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9oaXN0b3J5X2xlbmd0aJRqDY8AAHSUjBhyZWFkbGluZS5nZXRfbGluZV9idWZmZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLmdldF9saW5lX2J1ZmZlcpRqDY8AAHSUjBRyZWFkbGluZS5pbnNlcnRfdGV4dJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuaW5zZXJ0X3RleHSUag2PAAB0lIwXcmVhZGxpbmUucGFyc2VfYW5kX2JpbmSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLnBhcnNlX2FuZF9iaW5klGoNjwAAdJSMGnJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZZRqDY8AAHSUjBdyZWFkbGluZS5yZWFkX2luaXRfZmlsZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucmVhZF9pbml0X2ZpbGWUag2PAAB0lIwScmVhZGxpbmUucmVkaXNwbGF5lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5yZWRpc3BsYXmUag2PAAB0lIwccmVhZGxpbmUucmVtb3ZlX2hpc3RvcnlfaXRlbZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucmVtb3ZlX2hpc3RvcnlfaXRlbZRqDY8AAHSUjB1yZWFkbGluZS5yZXBsYWNlX2hpc3RvcnlfaXRlbZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUucmVwbGFjZV9oaXN0b3J5X2l0ZW2Uag2PAAB0lIwZcmVhZGxpbmUuc2V0X2F1dG9faGlzdG9yeZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuc2V0X2F1dG9faGlzdG9yeZRqDY8AAHSUjBZyZWFkbGluZS5zZXRfY29tcGxldGVylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5zZXRfY29tcGxldGVylGoNjwAAdJSMHXJlYWRsaW5lLnNldF9jb21wbGV0ZXJfZGVsaW1zlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5zZXRfY29tcGxldGVyX2RlbGltc5RqDY8AAHSUjCxyZWFkbGluZS5zZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9va5QoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuc2V0X2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2uUag2PAAB0lIwbcmVhZGxpbmUuc2V0X2hpc3RvcnlfbGVuZ3RolChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5zZXRfaGlzdG9yeV9sZW5ndGiUag2PAAB0lIwbcmVhZGxpbmUuc2V0X3ByZV9pbnB1dF9ob29rlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS5zZXRfcHJlX2lucHV0X2hvb2uUag2PAAB0lIwZcmVhZGxpbmUuc2V0X3N0YXJ0dXBfaG9va5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlYWRsaW5lLmh0bWwjcmVhZGxpbmUuc2V0X3N0YXJ0dXBfaG9va5RqDY8AAHSUjBtyZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZWFkbGluZS5odG1sI3JlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZZRqDY8AAHSUjARyZXBylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmVwcpRqDY8AAHSUjBZyZXBybGliLnJlY3Vyc2l2ZV9yZXBylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3JlcHJsaWIucmVjdXJzaXZlX3JlcHKUag2PAAB0lIwMcmVwcmxpYi5yZXBylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3JlcHJsaWIucmVwcpRqDY8AAHSUjBRyZXNvdXJjZS5nZXRwYWdlc2l6ZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UuZ2V0cGFnZXNpemWUag2PAAB0lIwScmVzb3VyY2UuZ2V0cmxpbWl0lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5nZXRybGltaXSUag2PAAB0lIwScmVzb3VyY2UuZ2V0cnVzYWdllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbCNyZXNvdXJjZS5nZXRydXNhZ2WUag2PAAB0lIwQcmVzb3VyY2UucHJsaW1pdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Jlc291cmNlLmh0bWwjcmVzb3VyY2UucHJsaW1pdJRqDY8AAHSUjBJyZXNvdXJjZS5zZXRybGltaXSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXNvdXJjZS5odG1sI3Jlc291cmNlLnNldHJsaW1pdJRqDY8AAHSUjAhyZXZlcnNlZJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JldmVyc2VklGoNjwAAdJSMBXJvdW5klChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcm91bmSUag2PAAB0lIwQcnVucHkucnVuX21vZHVsZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3J1bnB5Lmh0bWwjcnVucHkucnVuX21vZHVsZZRqDY8AAHSUjA5ydW5weS5ydW5fcGF0aJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3J1bnB5Lmh0bWwjcnVucHkucnVuX3BhdGiUag2PAAB0lIwOc2VjcmV0cy5jaG9pY2WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWNyZXRzLmh0bWwjc2VjcmV0cy5jaG9pY2WUag2PAAB0lIwWc2VjcmV0cy5jb21wYXJlX2RpZ2VzdJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlY3JldHMuaHRtbCNzZWNyZXRzLmNvbXBhcmVfZGlnZXN0lGoNjwAAdJSMEXNlY3JldHMucmFuZGJlbG93lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VjcmV0cy5odG1sI3NlY3JldHMucmFuZGJlbG93lGoNjwAAdJSMEHNlY3JldHMucmFuZGJpdHOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWNyZXRzLmh0bWwjc2VjcmV0cy5yYW5kYml0c5RqDY8AAHSUjBNzZWNyZXRzLnRva2VuX2J5dGVzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VjcmV0cy5odG1sI3NlY3JldHMudG9rZW5fYnl0ZXOUag2PAAB0lIwRc2VjcmV0cy50b2tlbl9oZXiUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWNyZXRzLmh0bWwjc2VjcmV0cy50b2tlbl9oZXiUag2PAAB0lIwVc2VjcmV0cy50b2tlbl91cmxzYWZllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VjcmV0cy5odG1sI3NlY3JldHMudG9rZW5fdXJsc2FmZZRqDY8AAHSUjA5zZWxlY3QuZGV2cG9sbJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5kZXZwb2xslGoNjwAAdJSMDHNlbGVjdC5lcG9sbJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5lcG9sbJRqDY8AAHSUjA1zZWxlY3Qua2V2ZW50lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtldmVudJRqDY8AAHSUjA1zZWxlY3Qua3F1ZXVllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwjc2VsZWN0LmtxdWV1ZZRqDY8AAHSUjAtzZWxlY3QucG9sbJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdC5odG1sI3NlbGVjdC5wb2xslGoNjwAAdJSMDXNlbGVjdC5zZWxlY3SUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNzZWxlY3Quc2VsZWN0lGoNjwAAdJSMB3NldGF0dHKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNzZXRhdHRylGoNjwAAdJSMC3NoZWx2ZS5vcGVulChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hlbHZlLmh0bWwjc2hlbHZlLm9wZW6Uag2PAAB0lIwKc2hsZXguam9pbpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXguam9pbpRqDY8AAHSUjAtzaGxleC5xdW90ZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXgucXVvdGWUag2PAAB0lIwLc2hsZXguc3BsaXSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNwbGl0lGoNjwAAdJSMDHNodXRpbC5jaG93bpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5jaG93bpRqDY8AAHSUjAtzaHV0aWwuY29weZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5jb3B5lGoNjwAAdJSMDHNodXRpbC5jb3B5MpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5jb3B5MpRqDY8AAHSUjA9zaHV0aWwuY29weWZpbGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuY29weWZpbGWUag2PAAB0lIwSc2h1dGlsLmNvcHlmaWxlb2JqlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHlmaWxlb2JqlGoNjwAAdJSMD3NodXRpbC5jb3B5bW9kZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5jb3B5bW9kZZRqDY8AAHSUjA9zaHV0aWwuY29weXN0YXSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuY29weXN0YXSUag2PAAB0lIwPc2h1dGlsLmNvcHl0cmVllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmNvcHl0cmVllGoNjwAAdJSMEXNodXRpbC5kaXNrX3VzYWdllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLmRpc2tfdXNhZ2WUag2PAAB0lIwac2h1dGlsLmdldF9hcmNoaXZlX2Zvcm1hdHOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuZ2V0X2FyY2hpdmVfZm9ybWF0c5RqDY8AAHSUjBhzaHV0aWwuZ2V0X3Rlcm1pbmFsX3NpemWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwuZ2V0X3Rlcm1pbmFsX3NpemWUag2PAAB0lIwZc2h1dGlsLmdldF91bnBhY2tfZm9ybWF0c5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5nZXRfdW5wYWNrX2Zvcm1hdHOUag2PAAB0lIwWc2h1dGlsLmlnbm9yZV9wYXR0ZXJuc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5pZ25vcmVfcGF0dGVybnOUag2PAAB0lIwTc2h1dGlsLm1ha2VfYXJjaGl2ZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC5tYWtlX2FyY2hpdmWUag2PAAB0lIwLc2h1dGlsLm1vdmWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwubW92ZZRqDY8AAHSUjB5zaHV0aWwucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXSUag2PAAB0lIwdc2h1dGlsLnJlZ2lzdGVyX3VucGFja19mb3JtYXSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdJRqDY8AAHSUjA1zaHV0aWwucm10cmVllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLnJtdHJlZZRqDY8AAHSUjBVzaHV0aWwudW5wYWNrX2FyY2hpdmWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwudW5wYWNrX2FyY2hpdmWUag2PAAB0lIwgc2h1dGlsLnVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwudW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdJRqDY8AAHSUjB9zaHV0aWwudW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLnVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdJRqDY8AAHSUjAxzaHV0aWwud2hpY2iUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaHV0aWwuaHRtbCNzaHV0aWwud2hpY2iUag2PAAB0lIwMc2lnbmFsLmFsYXJtlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLmFsYXJtlGoNjwAAdJSMEHNpZ25hbC5nZXRpdGltZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuZ2V0aXRpbWVylGoNjwAAdJSMEHNpZ25hbC5nZXRzaWduYWyUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuZ2V0c2lnbmFslGoNjwAAdJSMDHNpZ25hbC5wYXVzZZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5wYXVzZZRqDY8AAHSUjBNzaWduYWwucHRocmVhZF9raWxslChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLnB0aHJlYWRfa2lsbJRqDY8AAHSUjBZzaWduYWwucHRocmVhZF9zaWdtYXNrlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLnB0aHJlYWRfc2lnbWFza5RqDY8AAHSUjBNzaWduYWwucmFpc2Vfc2lnbmFslChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLnJhaXNlX3NpZ25hbJRqDY8AAHSUjBRzaWduYWwuc2V0X3dha2V1cF9mZJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5zZXRfd2FrZXVwX2ZklGoNjwAAdJSMEHNpZ25hbC5zZXRpdGltZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuc2V0aXRpbWVylGoNjwAAdJSME3NpZ25hbC5zaWdpbnRlcnJ1cHSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuc2lnaW50ZXJydXB0lGoNjwAAdJSMDXNpZ25hbC5zaWduYWyUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuc2lnbmFslGoNjwAAdJSMEXNpZ25hbC5zaWdwZW5kaW5nlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2lnbmFsLmh0bWwjc2lnbmFsLnNpZ3BlbmRpbmeUag2PAAB0lIwTc2lnbmFsLnNpZ3RpbWVkd2FpdJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5zaWd0aW1lZHdhaXSUag2PAAB0lIwOc2lnbmFsLnNpZ3dhaXSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuc2lnd2FpdJRqDY8AAHSUjBJzaWduYWwuc2lnd2FpdGluZm+UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwuc2lnd2FpdGluZm+Uag2PAAB0lIwQc2lnbmFsLnN0cnNpZ25hbJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC5zdHJzaWduYWyUag2PAAB0lIwUc2lnbmFsLnZhbGlkX3NpZ25hbHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaWduYWwuaHRtbCNzaWduYWwudmFsaWRfc2lnbmFsc5RqDY8AAHSUjA9zaXRlLmFkZHNpdGVkaXKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS5hZGRzaXRlZGlylGoNjwAAdJSMFHNpdGUuZ2V0c2l0ZXBhY2thZ2VzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2l0ZS5odG1sI3NpdGUuZ2V0c2l0ZXBhY2thZ2VzlGoNjwAAdJSMEHNpdGUuZ2V0dXNlcmJhc2WUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS5nZXR1c2VyYmFzZZRqDY8AAHSUjBhzaXRlLmdldHVzZXJzaXRlcGFja2FnZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS5nZXR1c2Vyc2l0ZXBhY2thZ2VzlGoNjwAAdJSMCXNpdGUubWFpbpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpdGUuaHRtbCNzaXRlLm1haW6Uag2PAAB0lIwLc25kaGRyLndoYXSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbmRoZHIuaHRtbCNzbmRoZHIud2hhdJRqDY8AAHSUjA5zbmRoZHIud2hhdGhkcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NuZGhkci5odG1sI3NuZGhkci53aGF0aGRylGoNjwAAdJSMD3NvY2tldC5DTVNHX0xFTpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5DTVNHX0xFTpRqDY8AAHSUjBFzb2NrZXQuQ01TR19TUEFDRZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5DTVNHX1NQQUNFlGoNjwAAdJSMDHNvY2tldC5jbG9zZZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5jbG9zZZRqDY8AAHSUjBhzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb26UKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb26Uag2PAAB0lIwUc29ja2V0LmNyZWF0ZV9zZXJ2ZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuY3JlYXRlX3NlcnZlcpRqDY8AAHSUjA1zb2NrZXQuZnJvbWZklChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmZyb21mZJRqDY8AAHSUjBBzb2NrZXQuZnJvbXNoYXJllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmZyb21zaGFyZZRqDY8AAHSUjBJzb2NrZXQuZ2V0YWRkcmluZm+UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0YWRkcmluZm+Uag2PAAB0lIwYc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0lGoNjwAAdJSMDnNvY2tldC5nZXRmcWRulChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGZxZG6Uag2PAAB0lIwUc29ja2V0LmdldGhvc3RieWFkZHKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0aG9zdGJ5YWRkcpRqDY8AAHSUjBRzb2NrZXQuZ2V0aG9zdGJ5bmFtZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRob3N0YnluYW1llGoNjwAAdJSMF3NvY2tldC5nZXRob3N0YnluYW1lX2V4lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGhvc3RieW5hbWVfZXiUag2PAAB0lIwSc29ja2V0LmdldGhvc3RuYW1llChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmdldGhvc3RuYW1llGoNjwAAdJSMEnNvY2tldC5nZXRuYW1laW5mb5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRuYW1laW5mb5RqDY8AAHSUjBVzb2NrZXQuZ2V0cHJvdG9ieW5hbWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0cHJvdG9ieW5hbWWUag2PAAB0lIwUc29ja2V0LmdldHNlcnZieW5hbWWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuZ2V0c2VydmJ5bmFtZZRqDY8AAHSUjBRzb2NrZXQuZ2V0c2VydmJ5cG9ydJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5nZXRzZXJ2Ynlwb3J0lGoNjwAAdJSMGXNvY2tldC5oYXNfZHVhbHN0YWNrX2lwdjaUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuaGFzX2R1YWxzdGFja19pcHY2lGoNjwAAdJSMDHNvY2tldC5odG9ubJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5odG9ubJRqDY8AAHSUjAxzb2NrZXQuaHRvbnOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuaHRvbnOUag2PAAB0lIwVc29ja2V0LmlmX2luZGV4dG9uYW1llChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmlmX2luZGV4dG9uYW1llGoNjwAAdJSME3NvY2tldC5pZl9uYW1laW5kZXiUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuaWZfbmFtZWluZGV4lGoNjwAAdJSMFXNvY2tldC5pZl9uYW1ldG9pbmRleJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5pZl9uYW1ldG9pbmRleJRqDY8AAHSUjBBzb2NrZXQuaW5ldF9hdG9ulChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmluZXRfYXRvbpRqDY8AAHSUjBBzb2NrZXQuaW5ldF9udG9hlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmluZXRfbnRvYZRqDY8AAHSUjBBzb2NrZXQuaW5ldF9udG9wlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmluZXRfbnRvcJRqDY8AAHSUjBBzb2NrZXQuaW5ldF9wdG9ulChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LmluZXRfcHRvbpRqDY8AAHSUjAxzb2NrZXQubnRvaGyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQubnRvaGyUag2PAAB0lIwMc29ja2V0Lm50b2hzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0Lm50b2hzlGoNjwAAdJSMGHNvY2tldC5zZXRkZWZhdWx0dGltZW91dJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zZXRkZWZhdWx0dGltZW91dJRqDY8AAHSUjBJzb2NrZXQuc2V0aG9zdG5hbWWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc2V0aG9zdG5hbWWUag2PAAB0lIwNc29ja2V0LnNvY2tldJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC5zb2NrZXSUag2PAAB0lIwRc29ja2V0LnNvY2tldHBhaXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXQuaHRtbCNzb2NrZXQuc29ja2V0cGFpcpRqDY8AAHSUjAZzb3J0ZWSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNzb3J0ZWSUag2PAAB0lIwNc3B3ZC5nZXRzcGFsbJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Nwd2QuaHRtbCNzcHdkLmdldHNwYWxslGoNjwAAdJSMDXNwd2QuZ2V0c3BuYW2UKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcHdkLmh0bWwjc3B3ZC5nZXRzcG5hbZRqDY8AAHSUjBpzcWxpdGUzLmNvbXBsZXRlX3N0YXRlbWVudJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLmNvbXBsZXRlX3N0YXRlbWVudJRqDY8AAHSUjA9zcWxpdGUzLmNvbm5lY3SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5jb25uZWN0lGoNjwAAdJSMInNxbGl0ZTMuZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3OUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrc5RqDY8AAHSUjBhzcWxpdGUzLnJlZ2lzdGVyX2FkYXB0ZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5yZWdpc3Rlcl9hZGFwdGVylGoNjwAAdJSMGnNxbGl0ZTMucmVnaXN0ZXJfY29udmVydGVylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMucmVnaXN0ZXJfY29udmVydGVylGoNjwAAdJSMGHNzbC5ERVJfY2VydF90b19QRU1fY2VydJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5ERVJfY2VydF90b19QRU1fY2VydJRqDY8AAHSUjBhzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnSUag2PAAB0lIwMc3NsLlJBTkRfYWRklChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlJBTkRfYWRklGoNjwAAdJSMDnNzbC5SQU5EX2J5dGVzlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlJBTkRfYnl0ZXOUag2PAAB0lIwMc3NsLlJBTkRfZWdklChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlJBTkRfZWdklGoNjwAAdJSMFXNzbC5SQU5EX3BzZXVkb19ieXRlc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5SQU5EX3BzZXVkb19ieXRlc5RqDY8AAHSUjA9zc2wuUkFORF9zdGF0dXOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuUkFORF9zdGF0dXOUag2PAAB0lIwYc3NsLmNlcnRfdGltZV90b19zZWNvbmRzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmNlcnRfdGltZV90b19zZWNvbmRzlGoNjwAAdJSMGnNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHSUag2PAAB0lIwVc3NsLmVudW1fY2VydGlmaWNhdGVzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmVudW1fY2VydGlmaWNhdGVzlGoNjwAAdJSMDXNzbC5lbnVtX2NybHOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuZW51bV9jcmxzlGoNjwAAdJSMHHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzlGoNjwAAdJSMGnNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGWUag2PAAB0lIwSc3NsLm1hdGNoX2hvc3RuYW1llChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLm1hdGNoX2hvc3RuYW1llGoNjwAAdJSMD3NzbC53cmFwX3NvY2tldJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC53cmFwX3NvY2tldJRqDY8AAHSUjAtzdGF0LlNfSUZNVJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSUZNVJRqDY8AAHSUjAxzdGF0LlNfSU1PREWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lNT0RFlGoNjwAAdJSMDHN0YXQuU19JU0JMS5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbCNzdGF0LlNfSVNCTEuUag2PAAB0lIwMc3RhdC5TX0lTQ0hSlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU0NIUpRqDY8AAHSUjAxzdGF0LlNfSVNESVKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lTRElSlGoNjwAAdJSMDXN0YXQuU19JU0RPT1KUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0Lmh0bWwjc3RhdC5TX0lTRE9PUpRqDY8AAHSUjA1zdGF0LlNfSVNGSUZPlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU0ZJRk+Uag2PAAB0lIwMc3RhdC5TX0lTTE5LlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU0xOS5RqDY8AAHSUjA1zdGF0LlNfSVNQT1JUlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU1BPUlSUag2PAAB0lIwMc3RhdC5TX0lTUkVHlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU1JFR5RqDY8AAHSUjA1zdGF0LlNfSVNTT0NLlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU1NPQ0uUag2PAAB0lIwMc3RhdC5TX0lTV0hUlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuU19JU1dIVJRqDY8AAHSUjA1zdGF0LmZpbGVtb2RllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdC5odG1sI3N0YXQuZmlsZW1vZGWUag2PAAB0lIwMc3RhdGljbWV0aG9klChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjc3RhdGljbWV0aG9klGoNjwAAdJSMEHN0YXRpc3RpY3MuZm1lYW6UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5mbWVhbpRqDY8AAHSUjBlzdGF0aXN0aWNzLmdlb21ldHJpY19tZWFulChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MuZ2VvbWV0cmljX21lYW6Uag2PAAB0lIwYc3RhdGlzdGljcy5oYXJtb25pY19tZWFulChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MuaGFybW9uaWNfbWVhbpRqDY8AAHSUjA9zdGF0aXN0aWNzLm1lYW6UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5tZWFulGoNjwAAdJSMEXN0YXRpc3RpY3MubWVkaWFulChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MubWVkaWFulGoNjwAAdJSMGXN0YXRpc3RpY3MubWVkaWFuX2dyb3VwZWSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5tZWRpYW5fZ3JvdXBlZJRqDY8AAHSUjBZzdGF0aXN0aWNzLm1lZGlhbl9oaWdolChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MubWVkaWFuX2hpZ2iUag2PAAB0lIwVc3RhdGlzdGljcy5tZWRpYW5fbG93lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MubWVkaWFuX2xvd5RqDY8AAHSUjA9zdGF0aXN0aWNzLm1vZGWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5tb2RllGoNjwAAdJSMFHN0YXRpc3RpY3MubXVsdGltb2RllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MubXVsdGltb2RllGoNjwAAdJSMEXN0YXRpc3RpY3MucHN0ZGV2lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MucHN0ZGV2lGoNjwAAdJSMFHN0YXRpc3RpY3MucHZhcmlhbmNllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MucHZhcmlhbmNllGoNjwAAdJSMFHN0YXRpc3RpY3MucXVhbnRpbGVzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MucXVhbnRpbGVzlGoNjwAAdJSMEHN0YXRpc3RpY3Muc3RkZXaUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGF0aXN0aWNzLmh0bWwjc3RhdGlzdGljcy5zdGRldpRqDY8AAHSUjBNzdGF0aXN0aWNzLnZhcmlhbmNllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MudmFyaWFuY2WUag2PAAB0lIwPc3RyaW5nLmNhcHdvcmRzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLmNhcHdvcmRzlGoNjwAAdJSMFnN0cmluZ3ByZXAuaW5fdGFibGVfYTGUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9hMZRqDY8AAHSUjBZzdHJpbmdwcmVwLmluX3RhYmxlX2IxlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYjGUag2PAAB0lIwXc3RyaW5ncHJlcC5pbl90YWJsZV9jMTGUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jMTGUag2PAAB0lIwbc3RyaW5ncHJlcC5pbl90YWJsZV9jMTFfYzEylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzExX2MxMpRqDY8AAHSUjBdzdHJpbmdwcmVwLmluX3RhYmxlX2MxMpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2MxMpRqDY8AAHSUjBdzdHJpbmdwcmVwLmluX3RhYmxlX2MyMZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2MyMZRqDY8AAHSUjBtzdHJpbmdwcmVwLmluX3RhYmxlX2MyMV9jMjKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jMjFfYzIylGoNjwAAdJSMF3N0cmluZ3ByZXAuaW5fdGFibGVfYzIylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzIylGoNjwAAdJSMFnN0cmluZ3ByZXAuaW5fdGFibGVfYzOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jM5RqDY8AAHSUjBZzdHJpbmdwcmVwLmluX3RhYmxlX2M0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzSUag2PAAB0lIwWc3RyaW5ncHJlcC5pbl90YWJsZV9jNZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2M1lGoNjwAAdJSMFnN0cmluZ3ByZXAuaW5fdGFibGVfYzaUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jNpRqDY8AAHSUjBZzdHJpbmdwcmVwLmluX3RhYmxlX2M3lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfYzeUag2PAAB0lIwWc3RyaW5ncHJlcC5pbl90YWJsZV9jOJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2M4lGoNjwAAdJSMFnN0cmluZ3ByZXAuaW5fdGFibGVfYzmUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmdwcmVwLmh0bWwjc3RyaW5ncHJlcC5pbl90YWJsZV9jOZRqDY8AAHSUjBZzdHJpbmdwcmVwLmluX3RhYmxlX2QxlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAuaW5fdGFibGVfZDGUag2PAAB0lIwWc3RyaW5ncHJlcC5pbl90YWJsZV9kMpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbCNzdHJpbmdwcmVwLmluX3RhYmxlX2QylGoNjwAAdJSMF3N0cmluZ3ByZXAubWFwX3RhYmxlX2IylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAubWFwX3RhYmxlX2IylGoNjwAAdJSMF3N0cmluZ3ByZXAubWFwX3RhYmxlX2IzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5ncHJlcC5odG1sI3N0cmluZ3ByZXAubWFwX3RhYmxlX2IzlGoNjwAAdJSMD3N0cnVjdC5jYWxjc2l6ZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5jYWxjc2l6ZZRqDY8AAHSUjBJzdHJ1Y3QuaXRlcl91bnBhY2uUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QuaXRlcl91bnBhY2uUag2PAAB0lIwLc3RydWN0LnBhY2uUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QucGFja5RqDY8AAHSUjBBzdHJ1Y3QucGFja19pbnRvlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LnBhY2tfaW50b5RqDY8AAHSUjA1zdHJ1Y3QudW5wYWNrlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LnVucGFja5RqDY8AAHSUjBJzdHJ1Y3QudW5wYWNrX2Zyb22UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QudW5wYWNrX2Zyb22Uag2PAAB0lIwPc3VicHJvY2Vzcy5jYWxslChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuY2FsbJRqDY8AAHSUjBVzdWJwcm9jZXNzLmNoZWNrX2NhbGyUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjc3VicHJvY2Vzcy5jaGVja19jYWxslGoNjwAAdJSMF3N1YnByb2Nlc3MuY2hlY2tfb3V0cHV0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuY2hlY2tfb3V0cHV0lGoNjwAAdJSMFHN1YnByb2Nlc3MuZ2V0b3V0cHV0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuZ2V0b3V0cHV0lGoNjwAAdJSMGnN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0lGoNjwAAdJSMDnN1YnByb2Nlc3MucnVulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MucnVulGoNjwAAdJSMA3N1bZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3N1bZRqDY8AAHSUjApzdW5hdS5vcGVulChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNzdW5hdS5vcGVulGoNjwAAdJSMDHN1bmF1Lm9wZW5mcJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1bmF1Lmh0bWwjc3VuYXUub3BlbmZwlGoNjwAAdJSMBXN1cGVylChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjc3VwZXKUag2PAAB0lIwRc3ltdGFibGUuc3ltdGFibGWUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLnN5bXRhYmxllGoNjwAAdJSMFXN5cy5fY2xlYXJfdHlwZV9jYWNoZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5fY2xlYXJfdHlwZV9jYWNoZZRqDY8AAHSUjBNzeXMuX2N1cnJlbnRfZnJhbWVzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLl9jdXJyZW50X2ZyYW1lc5RqDY8AAHSUjBVzeXMuX2RlYnVnbWFsbG9jc3RhdHOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuX2RlYnVnbWFsbG9jc3RhdHOUag2PAAB0lIwic3lzLl9lbmFibGVsZWdhY3l3aW5kb3dzZnNlbmNvZGluZ5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5fZW5hYmxlbGVnYWN5d2luZG93c2ZzZW5jb2RpbmeUag2PAAB0lIwNc3lzLl9nZXRmcmFtZZQoagqPAABqC48AAJUuAAEAAAAAAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5fZ2V0ZnJhbWWUag2PAAB0lIwQc3lzLmFkZGF1ZGl0aG9va5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5hZGRhdWRpdGhvb2uUag2PAAB0lIwJc3lzLmF1ZGl0lChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmF1ZGl0lGoNjwAAdJSMEnN5cy5icmVha3BvaW50aG9va5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5icmVha3BvaW50aG9va5RqDY8AAHSUjBBzeXMuY2FsbF90cmFjaW5nlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmNhbGxfdHJhY2luZ5RqDY8AAHSUjA9zeXMuZGlzcGxheWhvb2uUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZGlzcGxheWhvb2uUag2PAAB0lIwMc3lzLmV4Y19pbmZvlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4Y19pbmZvlGoNjwAAdJSMDnN5cy5leGNlcHRob29rlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmV4Y2VwdGhvb2uUag2PAAB0lIwIc3lzLmV4aXSUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZXhpdJRqDY8AAHSUjBZzeXMuZ2V0X2FzeW5jZ2VuX2hvb2tzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldF9hc3luY2dlbl9ob29rc5RqDY8AAHSUjCdzeXMuZ2V0X2Nvcm91dGluZV9vcmlnaW5fdHJhY2tpbmdfZGVwdGiUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0X2Nvcm91dGluZV9vcmlnaW5fdHJhY2tpbmdfZGVwdGiUag2PAAB0lIwWc3lzLmdldGFsbG9jYXRlZGJsb2Nrc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRhbGxvY2F0ZWRibG9ja3OUag2PAAB0lIwWc3lzLmdldGFuZHJvaWRhcGlsZXZlbJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRhbmRyb2lkYXBpbGV2ZWyUag2PAAB0lIwUc3lzLmdldGNoZWNraW50ZXJ2YWyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0Y2hlY2tpbnRlcnZhbJRqDY8AAHSUjBZzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldGRlZmF1bHRlbmNvZGluZ5RqDY8AAHSUjBJzeXMuZ2V0ZGxvcGVuZmxhZ3OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0ZGxvcGVuZmxhZ3OUag2PAAB0lIwdc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGVlcnJvcnOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kZWVycm9yc5RqDY8AAHSUjBlzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ5RqDY8AAHSUjA5zeXMuZ2V0cHJvZmlsZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRwcm9maWxllGoNjwAAdJSMFXN5cy5nZXRyZWN1cnNpb25saW1pdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRyZWN1cnNpb25saW1pdJRqDY8AAHSUjA9zeXMuZ2V0cmVmY291bnSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0cmVmY291bnSUag2PAAB0lIwNc3lzLmdldHNpemVvZpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXRzaXplb2aUag2PAAB0lIwVc3lzLmdldHN3aXRjaGludGVydmFslChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLmdldHN3aXRjaGludGVydmFslGoNjwAAdJSMDHN5cy5nZXR0cmFjZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5nZXR0cmFjZZRqDY8AAHSUjBVzeXMuZ2V0d2luZG93c3ZlcnNpb26UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuZ2V0d2luZG93c3ZlcnNpb26Uag2PAAB0lIwKc3lzLmludGVybpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5pbnRlcm6Uag2PAAB0lIwRc3lzLmlzX2ZpbmFsaXppbmeUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuaXNfZmluYWxpemluZ5RqDY8AAHSUjBZzeXMuc2V0X2FzeW5jZ2VuX2hvb2tzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnNldF9hc3luY2dlbl9ob29rc5RqDY8AAHSUjCdzeXMuc2V0X2Nvcm91dGluZV9vcmlnaW5fdHJhY2tpbmdfZGVwdGiUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0X2Nvcm91dGluZV9vcmlnaW5fdHJhY2tpbmdfZGVwdGiUag2PAAB0lIwUc3lzLnNldGNoZWNraW50ZXJ2YWyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0Y2hlY2tpbnRlcnZhbJRqDY8AAHSUjBJzeXMuc2V0ZGxvcGVuZmxhZ3OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0ZGxvcGVuZmxhZ3OUag2PAAB0lIwOc3lzLnNldHByb2ZpbGWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0cHJvZmlsZZRqDY8AAHSUjBVzeXMuc2V0cmVjdXJzaW9ubGltaXSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMuc2V0cmVjdXJzaW9ubGltaXSUag2PAAB0lIwVc3lzLnNldHN3aXRjaGludGVydmFslChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWwjc3lzLnNldHN3aXRjaGludGVydmFslGoNjwAAdJSMDHN5cy5zZXR0cmFjZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5cy5odG1sI3N5cy5zZXR0cmFjZZRqDY8AAHSUjBJzeXMudW5yYWlzYWJsZWhvb2uUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNzeXMudW5yYWlzYWJsZWhvb2uUag2PAAB0lIwfc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWWUag2PAAB0lIwYc3lzY29uZmlnLmdldF9jb25maWdfdmFylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmdldF9jb25maWdfdmFylGoNjwAAdJSMGXN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzlGoNjwAAdJSMH3N5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWWUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1llGoNjwAAdJSMEnN5c2NvbmZpZy5nZXRfcGF0aJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcGF0aJRqDY8AAHSUjBhzeXNjb25maWcuZ2V0X3BhdGhfbmFtZXOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcuZ2V0X3BhdGhfbmFtZXOUag2PAAB0lIwTc3lzY29uZmlnLmdldF9wYXRoc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcGF0aHOUag2PAAB0lIwWc3lzY29uZmlnLmdldF9wbGF0Zm9ybZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcGxhdGZvcm2Uag2PAAB0lIwcc3lzY29uZmlnLmdldF9weXRob25fdmVyc2lvbpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI3N5c2NvbmZpZy5nZXRfcHl0aG9uX3ZlcnNpb26Uag2PAAB0lIwac3lzY29uZmlnLmdldF9zY2hlbWVfbmFtZXOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcuZ2V0X3NjaGVtZV9uYW1lc5RqDY8AAHSUjBlzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxklChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzY29uZmlnLmh0bWwjc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZJRqDY8AAHSUjBhzeXNjb25maWcucGFyc2VfY29uZmlnX2iUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXNjb25maWcuaHRtbCNzeXNjb25maWcucGFyc2VfY29uZmlnX2iUag2PAAB0lIwPc3lzbG9nLmNsb3NlbG9nlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzbG9nLmh0bWwjc3lzbG9nLmNsb3NlbG9nlGoNjwAAdJSMDnN5c2xvZy5vcGVubG9nlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzbG9nLmh0bWwjc3lzbG9nLm9wZW5sb2eUag2PAAB0lIwRc3lzbG9nLnNldGxvZ21hc2uUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXNsb2cuaHRtbCNzeXNsb2cuc2V0bG9nbWFza5RqDY8AAHSUjA1zeXNsb2cuc3lzbG9nlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzbG9nLmh0bWwjc3lzbG9nLnN5c2xvZ5RqDY8AAHSUjA50YWJuYW5ueS5jaGVja5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhYm5hbm55Lmh0bWwjdGFibmFubnkuY2hlY2uUag2PAAB0lIwXdGFibmFubnkucHJvY2Vzc190b2tlbnOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YWJuYW5ueS5odG1sI3RhYm5hbm55LnByb2Nlc3NfdG9rZW5zlGoNjwAAdJSMEnRhcmZpbGUuaXNfdGFyZmlsZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLmlzX3RhcmZpbGWUag2PAAB0lIwMdGFyZmlsZS5vcGVulChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUub3BlbpRqDY8AAHSUjBt0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZZRqDY8AAHSUjB10ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGWUag2PAAB0lIwbdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnmUag2PAAB0lIwWdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbXBmaWxlLmh0bWwjdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZZRqDY8AAHSUjBN0ZW1wZmlsZS5nZXR0ZW1wZGlylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5nZXR0ZW1wZGlylGoNjwAAdJSMFHRlbXBmaWxlLmdldHRlbXBkaXJilChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5nZXR0ZW1wZGlyYpRqDY8AAHSUjBZ0ZW1wZmlsZS5nZXR0ZW1wcHJlZml4lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5nZXR0ZW1wcHJlZml4lGoNjwAAdJSMF3RlbXBmaWxlLmdldHRlbXBwcmVmaXhilChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5nZXR0ZW1wcHJlZml4YpRqDY8AAHSUjBB0ZW1wZmlsZS5ta2R0ZW1wlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5ta2R0ZW1wlGoNjwAAdJSMEHRlbXBmaWxlLm1rc3RlbXCUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZW1wZmlsZS5odG1sI3RlbXBmaWxlLm1rc3RlbXCUag2PAAB0lIwPdGVtcGZpbGUubWt0ZW1wlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS5ta3RlbXCUag2PAAB0lIwPdGVybWlvcy50Y2RyYWlulChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVybWlvcy5odG1sI3Rlcm1pb3MudGNkcmFpbpRqDY8AAHSUjA50ZXJtaW9zLnRjZmxvd5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlcm1pb3MuaHRtbCN0ZXJtaW9zLnRjZmxvd5RqDY8AAHSUjA90ZXJtaW9zLnRjZmx1c2iUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXJtaW9zLmh0bWwjdGVybWlvcy50Y2ZsdXNolGoNjwAAdJSMEXRlcm1pb3MudGNnZXRhdHRylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVybWlvcy5odG1sI3Rlcm1pb3MudGNnZXRhdHRylGoNjwAAdJSME3Rlcm1pb3MudGNzZW5kYnJlYWuUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXJtaW9zLmh0bWwjdGVybWlvcy50Y3NlbmRicmVha5RqDY8AAHSUjBF0ZXJtaW9zLnRjc2V0YXR0cpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlcm1pb3MuaHRtbCN0ZXJtaW9zLnRjc2V0YXR0cpRqDY8AAHSUjB90ZXN0LnN1cHBvcnQuYW50aWNpcGF0ZV9mYWlsdXJllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5hbnRpY2lwYXRlX2ZhaWx1cmWUag2PAAB0lIwodGVzdC5zdXBwb3J0LmFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFnc5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzlGoNjwAAdJSMHXRlc3Quc3VwcG9ydC5iaWdhZGRyc3BhY2V0ZXN0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5iaWdhZGRyc3BhY2V0ZXN0lGoNjwAAdJSMF3Rlc3Quc3VwcG9ydC5iaWdtZW10ZXN0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5iaWdtZW10ZXN0lGoNjwAAdJSMFnRlc3Quc3VwcG9ydC5iaW5kX3BvcnSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmJpbmRfcG9ydJRqDY8AAHSUjB10ZXN0LnN1cHBvcnQuYmluZF91bml4X3NvY2tldJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuYmluZF91bml4X3NvY2tldJRqDY8AAHSUjBh0ZXN0LnN1cHBvcnQuY2FsY29ianNpemWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNhbGNvYmpzaXpllGoNjwAAdJSMGXRlc3Quc3VwcG9ydC5jYWxjdm9ianNpemWUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNhbGN2b2Jqc2l6ZZRqDY8AAHSUjBh0ZXN0LnN1cHBvcnQuY2FuX3N5bWxpbmuUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNhbl9zeW1saW5rlGoNjwAAdJSMFnRlc3Quc3VwcG9ydC5jYW5feGF0dHKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNhbl94YXR0cpRqDY8AAHSUjBx0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3RkZXJylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnKUag2PAAB0lIwbdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZGlulChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRpbpRqDY8AAHSUjBx0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXSUag2PAAB0lIwmdGVzdC5zdXBwb3J0LmNhdGNoX3RocmVhZGluZ19leGNlcHRpb26UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNhdGNoX3RocmVhZGluZ19leGNlcHRpb26Uag2PAAB0lIwndGVzdC5zdXBwb3J0LmNhdGNoX3VucmFpc2FibGVfZXhjZXB0aW9ulChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jYXRjaF91bnJhaXNhYmxlX2V4Y2VwdGlvbpRqDY8AAHSUjBd0ZXN0LnN1cHBvcnQuY2hhbmdlX2N3ZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuY2hhbmdlX2N3ZJRqDY8AAHSUjBl0ZXN0LnN1cHBvcnQuY2hlY2tfX2FsbF9flChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jaGVja19fYWxsX1+Uag2PAAB0lIwndGVzdC5zdXBwb3J0LmNoZWNrX2ZyZWVfYWZ0ZXJfaXRlcmF0aW5nlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jaGVja19mcmVlX2FmdGVyX2l0ZXJhdGluZ5RqDY8AAHSUjB50ZXN0LnN1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWyUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNoZWNrX2ltcGxfZGV0YWlslGoNjwAAdJSMJnRlc3Quc3VwcG9ydC5jaGVja19ub19yZXNvdXJjZV93YXJuaW5nlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jaGVja19ub19yZXNvdXJjZV93YXJuaW5nlGoNjwAAdJSMH3Rlc3Quc3VwcG9ydC5jaGVja19zeW50YXhfZXJyb3KUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNoZWNrX3N5bnRheF9lcnJvcpRqDY8AAHSUjCF0ZXN0LnN1cHBvcnQuY2hlY2tfc3ludGF4X3dhcm5pbmeUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmNoZWNrX3N5bnRheF93YXJuaW5nlGoNjwAAdJSMG3Rlc3Quc3VwcG9ydC5jaGVja193YXJuaW5nc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuY2hlY2tfd2FybmluZ3OUag2PAAB0lIwYdGVzdC5zdXBwb3J0LmNoZWNrc2l6ZW9mlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jaGVja3NpemVvZpRqDY8AAHSUjBl0ZXN0LnN1cHBvcnQuY3B5dGhvbl9vbmx5lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jcHl0aG9uX29ubHmUag2PAAB0lIwedGVzdC5zdXBwb3J0LmNyZWF0ZV9lbXB0eV9maWxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5jcmVhdGVfZW1wdHlfZmlsZZRqDY8AAHSUjCB0ZXN0LnN1cHBvcnQuZGV0ZWN0X2FwaV9taXNtYXRjaJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuZGV0ZWN0X2FwaV9taXNtYXRjaJRqDY8AAHSUjCF0ZXN0LnN1cHBvcnQuZGlzYWJsZV9mYXVsdGhhbmRsZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmRpc2FibGVfZmF1bHRoYW5kbGVylGoNjwAAdJSMF3Rlc3Quc3VwcG9ydC5kaXNhYmxlX2djlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5kaXNhYmxlX2djlGoNjwAAdJSMFXRlc3Quc3VwcG9ydC5mZF9jb3VudJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuZmRfY291bnSUag2PAAB0lIwddGVzdC5zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnSUag2PAAB0lIwVdGVzdC5zdXBwb3J0LmZpbmRmaWxllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5maW5kZmlsZZRqDY8AAHSUjBN0ZXN0LnN1cHBvcnQuZm9yZ2V0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5mb3JnZXSUag2PAAB0lIwjdGVzdC5zdXBwb3J0LmZzX2lzX2Nhc2VfaW5zZW5zaXRpdmWUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmZzX2lzX2Nhc2VfaW5zZW5zaXRpdmWUag2PAAB0lIwXdGVzdC5zdXBwb3J0LmdjX2NvbGxlY3SUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmdjX2NvbGxlY3SUag2PAAB0lIwadGVzdC5zdXBwb3J0LmdldF9hdHRyaWJ1dGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmdldF9hdHRyaWJ1dGWUag2PAAB0lIwgdGVzdC5zdXBwb3J0LmdldF9vcmlnaW5hbF9zdGRvdXSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmdldF9vcmlnaW5hbF9zdGRvdXSUag2PAAB0lIwYdGVzdC5zdXBwb3J0LmltcGxfZGV0YWlslChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5pbXBsX2RldGFpbJRqDY8AAHSUjCB0ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZZRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZZRqDY8AAHSUjCB0ZXN0LnN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZJRqDY8AAHSUjBh0ZXN0LnN1cHBvcnQuam9pbl90aHJlYWSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmpvaW5fdGhyZWFklGoNjwAAdJSMH3Rlc3Quc3VwcG9ydC5sb2FkX3BhY2thZ2VfdGVzdHOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LmxvYWRfcGFja2FnZV90ZXN0c5RqDY8AAHSUjBh0ZXN0LnN1cHBvcnQubWFrZV9iYWRfZmSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0Lm1ha2VfYmFkX2ZklGoNjwAAdJSMHHRlc3Quc3VwcG9ydC5tYWtlX2xlZ2FjeV9weWOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0Lm1ha2VfbGVnYWN5X3B5Y5RqDY8AAHSUjBd0ZXN0LnN1cHBvcnQubWF0Y2hfdGVzdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQubWF0Y2hfdGVzdJRqDY8AAHSUjCh0ZXN0LnN1cHBvcnQubWlzc2luZ19jb21waWxlcl9leGVjdXRhYmxllChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5taXNzaW5nX2NvbXBpbGVyX2V4ZWN1dGFibGWUag2PAAB0lIwcdGVzdC5zdXBwb3J0Lm1vZHVsZXNfY2xlYW51cJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQubW9kdWxlc19jbGVhbnVwlGoNjwAAdJSMGnRlc3Quc3VwcG9ydC5tb2R1bGVzX3NldHVwlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5tb2R1bGVzX3NldHVwlGoNjwAAdJSMF3Rlc3Quc3VwcG9ydC5ub190cmFjaW5nlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5ub190cmFjaW5nlGoNjwAAdJSMHXRlc3Quc3VwcG9ydC5vcGVuX3VybHJlc291cmNllChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5vcGVuX3VybHJlc291cmNllGoNjwAAdJSMLnRlc3Quc3VwcG9ydC5vcHRpbV9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3OUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0Lm9wdGltX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFnc5RqDY8AAHSUjBJ0ZXN0LnN1cHBvcnQucGF0Y2iUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnBhdGNolGoNjwAAdJSMIHRlc3Quc3VwcG9ydC5weXRob25faXNfb3B0aW1pemVklChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5weXRob25faXNfb3B0aW1pemVklGoNjwAAdJSMGnRlc3Quc3VwcG9ydC5yZWFwX2NoaWxkcmVulChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5yZWFwX2NoaWxkcmVulGoNjwAAdJSMGXRlc3Quc3VwcG9ydC5yZWFwX3RocmVhZHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnJlYXBfdGhyZWFkc5RqDY8AAHSUjCN0ZXN0LnN1cHBvcnQucmVjb3JkX29yaWdpbmFsX3N0ZG91dJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVjb3JkX29yaWdpbmFsX3N0ZG91dJRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQucmVmY291bnRfdGVzdJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVmY291bnRfdGVzdJRqDY8AAHSUjBV0ZXN0LnN1cHBvcnQucmVxdWlyZXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnJlcXVpcmVzlGoNjwAAdJSMHnRlc3Quc3VwcG9ydC5yZXF1aXJlc19JRUVFXzc1NJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVxdWlyZXNfSUVFRV83NTSUag2PAAB0lIwZdGVzdC5zdXBwb3J0LnJlcXVpcmVzX2J6MpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVxdWlyZXNfYnoylGoNjwAAdJSMIHRlc3Quc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzlGoNjwAAdJSMJXRlc3Quc3VwcG9ydC5yZXF1aXJlc19mcmVlYnNkX3ZlcnNpb26UKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbpRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQucmVxdWlyZXNfZ3ppcJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVxdWlyZXNfZ3ppcJRqDY8AAHSUjCN0ZXN0LnN1cHBvcnQucmVxdWlyZXNfbGludXhfdmVyc2lvbpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVxdWlyZXNfbGludXhfdmVyc2lvbpRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQucmVxdWlyZXNfbHptYZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVxdWlyZXNfbHptYZRqDY8AAHSUjCF0ZXN0LnN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcnNpb26UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnJlcXVpcmVzX21hY192ZXJzaW9ulGoNjwAAdJSMHnRlc3Quc3VwcG9ydC5yZXF1aXJlc19yZXNvdXJjZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucmVxdWlyZXNfcmVzb3VyY2WUag2PAAB0lIwadGVzdC5zdXBwb3J0LnJlcXVpcmVzX3psaWKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnJlcXVpcmVzX3psaWKUag2PAAB0lIwSdGVzdC5zdXBwb3J0LnJtZGlylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5ybWRpcpRqDY8AAHSUjBN0ZXN0LnN1cHBvcnQucm10cmVllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5ybXRyZWWUag2PAAB0lIwYdGVzdC5zdXBwb3J0LnJ1bl9kb2N0ZXN0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5ydW5fZG9jdGVzdJRqDY8AAHSUjB10ZXN0LnN1cHBvcnQucnVuX2luX3N1YmludGVycJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucnVuX2luX3N1YmludGVycJRqDY8AAHSUjBl0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3SUag2PAAB0lIwcdGVzdC5zdXBwb3J0LnJ1bl93aXRoX2xvY2FsZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucnVuX3dpdGhfbG9jYWxllGoNjwAAdJSMGHRlc3Quc3VwcG9ydC5ydW5fd2l0aF90epQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQucnVuX3dpdGhfdHqUag2PAAB0lIwwdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZZRqDY8AAHSUjCt0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2uUag2PAAB0lIw7dGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIuaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnSUKGoKjwAAaguPAACMZ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIuaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnSUag2PAAB0lIwmdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIua2lsbF9weXRob26UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIua2lsbF9weXRob26Uag2PAAB0lIwjdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIubWFrZV9wa2eUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIubWFrZV9wa2eUag2PAAB0lIwmdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHSUag2PAAB0lIwndGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIubWFrZV96aXBfcGtnlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyLm1ha2VfemlwX3BrZ5RqDY8AAHSUjCp0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlci5tYWtlX3ppcF9zY3JpcHSUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIubWFrZV96aXBfc2NyaXB0lGoNjwAAdJSML3Rlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyLnJ1bl9weXRob25fdW50aWxfZW5klChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyLnJ1bl9weXRob25fdW50aWxfZW5klGoNjwAAdJSMJ3Rlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyLnNwYXduX3B5dGhvbpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlci5zcGF3bl9weXRob26Uag2PAAB0lIwcdGVzdC5zdXBwb3J0LnNldF9tYXRjaF90ZXN0c5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuc2V0X21hdGNoX3Rlc3RzlGoNjwAAdJSMGXRlc3Quc3VwcG9ydC5zZXRfbWVtbGltaXSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnNldF9tZW1saW1pdJRqDY8AAHSUjB50ZXN0LnN1cHBvcnQuc2V0c3dpdGNoaW50ZXJ2YWyUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnNldHN3aXRjaGludGVydmFslGoNjwAAdJSMKXRlc3Quc3VwcG9ydC5za2lwX3VubGVzc19iaW5kX3VuaXhfc29ja2V0lChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5za2lwX3VubGVzc19iaW5kX3VuaXhfc29ja2V0lGoNjwAAdJSMIHRlc3Quc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rlGoNjwAAdJSMHnRlc3Quc3VwcG9ydC5za2lwX3VubGVzc194YXR0cpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuc2tpcF91bmxlc3NfeGF0dHKUag2PAAB0lIwVdGVzdC5zdXBwb3J0LnNvcnRkaWN0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5zb3J0ZGljdJRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQuc3RhcnRfdGhyZWFkc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuc3RhcnRfdGhyZWFkc5RqDY8AAHSUjCB0ZXN0LnN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0cmVycpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0cmVycpRqDY8AAHSUjBZ0ZXN0LnN1cHBvcnQuc3dhcF9hdHRylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5zd2FwX2F0dHKUag2PAAB0lIwWdGVzdC5zdXBwb3J0LnN3YXBfaXRlbZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuc3dhcF9pdGVtlGoNjwAAdJSMJnRlc3Quc3VwcG9ydC5zeXN0ZW1fbXVzdF92YWxpZGF0ZV9jZXJ0lChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5zeXN0ZW1fbXVzdF92YWxpZGF0ZV9jZXJ0lGoNjwAAdJSMFXRlc3Quc3VwcG9ydC50ZW1wX2N3ZJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQudGVtcF9jd2SUag2PAAB0lIwVdGVzdC5zdXBwb3J0LnRlbXBfZGlylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC50ZW1wX2RpcpRqDY8AAHSUjBd0ZXN0LnN1cHBvcnQudGVtcF91bWFza5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQudGVtcF91bWFza5RqDY8AAHSUjB50ZXN0LnN1cHBvcnQudGhyZWFkaW5nX2NsZWFudXCUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwlGoNjwAAdJSMHHRlc3Quc3VwcG9ydC50aHJlYWRpbmdfc2V0dXCUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnRocmVhZGluZ19zZXR1cJRqDY8AAHSUjB90ZXN0LnN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXSUag2PAAB0lIwTdGVzdC5zdXBwb3J0LnVubGlua5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQudW5saW5rlGoNjwAAdJSME3Rlc3Quc3VwcG9ydC51bmxvYWSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LnVubG9hZJRqDY8AAHSUjB50ZXN0LnN1cHBvcnQud2FpdF90aHJlYWRzX2V4aXSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LndhaXRfdGhyZWFkc19leGl0lGoNjwAAdJSMGnRlc3Quc3VwcG9ydC53aXRoX3B5bWFsbG9jlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC53aXRoX3B5bWFsbG9jlGoNjwAAdJSMD3RleHR3cmFwLmRlZGVudJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuZGVkZW50lGoNjwAAdJSMDXRleHR3cmFwLmZpbGyUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0d3JhcC5odG1sI3RleHR3cmFwLmZpbGyUag2PAAB0lIwPdGV4dHdyYXAuaW5kZW50lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5pbmRlbnSUag2PAAB0lIwQdGV4dHdyYXAuc2hvcnRlbpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RleHR3cmFwLmh0bWwjdGV4dHdyYXAuc2hvcnRlbpRqDY8AAHSUjA10ZXh0d3JhcC53cmFwlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC53cmFwlGoNjwAAdJSMFnRocmVhZGluZy5hY3RpdmVfY291bnSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuYWN0aXZlX2NvdW50lGoNjwAAdJSMGHRocmVhZGluZy5jdXJyZW50X3RocmVhZJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5jdXJyZW50X3RocmVhZJRqDY8AAHSUjBN0aHJlYWRpbmcuZW51bWVyYXRllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLmVudW1lcmF0ZZRqDY8AAHSUjBR0aHJlYWRpbmcuZXhjZXB0aG9va5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5leGNlcHRob29rlGoNjwAAdJSME3RocmVhZGluZy5nZXRfaWRlbnSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuZ2V0X2lkZW50lGoNjwAAdJSMF3RocmVhZGluZy5nZXRfbmF0aXZlX2lklChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLmdldF9uYXRpdmVfaWSUag2PAAB0lIwVdGhyZWFkaW5nLm1haW5fdGhyZWFklChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLm1haW5fdGhyZWFklGoNjwAAdJSMFHRocmVhZGluZy5zZXRwcm9maWxllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLnNldHByb2ZpbGWUag2PAAB0lIwSdGhyZWFkaW5nLnNldHRyYWNllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLnNldHRyYWNllGoNjwAAdJSMFHRocmVhZGluZy5zdGFja19zaXpllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLnN0YWNrX3NpemWUag2PAAB0lIwMdGltZS5hc2N0aW1llChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuYXNjdGltZZRqDY8AAHSUjBF0aW1lLmNsb2NrX2dldHJlc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmNsb2NrX2dldHJlc5RqDY8AAHSUjBJ0aW1lLmNsb2NrX2dldHRpbWWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5jbG9ja19nZXR0aW1llGoNjwAAdJSMFXRpbWUuY2xvY2tfZ2V0dGltZV9uc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLmNsb2NrX2dldHRpbWVfbnOUag2PAAB0lIwSdGltZS5jbG9ja19zZXR0aW1llChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuY2xvY2tfc2V0dGltZZRqDY8AAHSUjBV0aW1lLmNsb2NrX3NldHRpbWVfbnOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5jbG9ja19zZXR0aW1lX25zlGoNjwAAdJSMCnRpbWUuY3RpbWWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5jdGltZZRqDY8AAHSUjBN0aW1lLmdldF9jbG9ja19pbmZvlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuZ2V0X2Nsb2NrX2luZm+Uag2PAAB0lIwLdGltZS5nbXRpbWWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5nbXRpbWWUag2PAAB0lIwOdGltZS5sb2NhbHRpbWWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5sb2NhbHRpbWWUag2PAAB0lIwLdGltZS5ta3RpbWWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5ta3RpbWWUag2PAAB0lIwOdGltZS5tb25vdG9uaWOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5tb25vdG9uaWOUag2PAAB0lIwRdGltZS5tb25vdG9uaWNfbnOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5tb25vdG9uaWNfbnOUag2PAAB0lIwRdGltZS5wZXJmX2NvdW50ZXKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5wZXJmX2NvdW50ZXKUag2PAAB0lIwUdGltZS5wZXJmX2NvdW50ZXJfbnOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5wZXJmX2NvdW50ZXJfbnOUag2PAAB0lIwRdGltZS5wcm9jZXNzX3RpbWWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5wcm9jZXNzX3RpbWWUag2PAAB0lIwUdGltZS5wcm9jZXNzX3RpbWVfbnOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5wcm9jZXNzX3RpbWVfbnOUag2PAAB0lIwadGltZS5wdGhyZWFkX2dldGNwdWNsb2NraWSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5wdGhyZWFkX2dldGNwdWNsb2NraWSUag2PAAB0lIwKdGltZS5zbGVlcJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnNsZWVwlGoNjwAAdJSMDXRpbWUuc3RyZnRpbWWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS5zdHJmdGltZZRqDY8AAHSUjA10aW1lLnN0cnB0aW1llChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI3RpbWUuc3RycHRpbWWUag2PAAB0lIwQdGltZS50aHJlYWRfdGltZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnRocmVhZF90aW1llGoNjwAAdJSME3RpbWUudGhyZWFkX3RpbWVfbnOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS50aHJlYWRfdGltZV9uc5RqDY8AAHSUjAl0aW1lLnRpbWWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS50aW1llGoNjwAAdJSMDHRpbWUudGltZV9uc5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnRpbWVfbnOUag2PAAB0lIwKdGltZS50enNldJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnR6c2V0lGoNjwAAdJSMFHRpbWVpdC5kZWZhdWx0X3RpbWVylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LmRlZmF1bHRfdGltZXKUag2PAAB0lIwNdGltZWl0LnJlcGVhdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5yZXBlYXSUag2PAAB0lIwNdGltZWl0LnRpbWVpdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC50aW1laXSUag2PAAB0lIwLdGtpbnRlci5UY2yUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLmh0bWwjdGtpbnRlci5UY2yUag2PAAB0lIwLdG9rZW4uSVNFT0aUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLklTRU9GlGoNjwAAdJSME3Rva2VuLklTTk9OVEVSTUlOQUyUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbi5odG1sI3Rva2VuLklTTk9OVEVSTUlOQUyUag2PAAB0lIwQdG9rZW4uSVNURVJNSU5BTJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuLmh0bWwjdG9rZW4uSVNURVJNSU5BTJRqDY8AAHSUjBh0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmeUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbml6ZS5odG1sI3Rva2VuaXplLmRldGVjdF9lbmNvZGluZ5RqDY8AAHSUjBh0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbml6ZS5odG1sI3Rva2VuaXplLmdlbmVyYXRlX3Rva2Vuc5RqDY8AAHSUjA10b2tlbml6ZS5vcGVulChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS5vcGVulGoNjwAAdJSMEXRva2VuaXplLnRva2VuaXpllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS50b2tlbml6ZZRqDY8AAHSUjBN0b2tlbml6ZS51bnRva2VuaXpllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS51bnRva2VuaXpllGoNjwAAdJSMFnRyYWNlYmFjay5jbGVhcl9mcmFtZXOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suY2xlYXJfZnJhbWVzlGoNjwAAdJSMF3RyYWNlYmFjay5leHRyYWN0X3N0YWNrlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2uUag2PAAB0lIwUdHJhY2ViYWNrLmV4dHJhY3RfdGKUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suZXh0cmFjdF90YpRqDY8AAHSUjBR0cmFjZWJhY2suZm9ybWF0X2V4Y5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5mb3JtYXRfZXhjlGoNjwAAdJSMGnRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9ulChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb26Uag2PAAB0lIwfdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHmUag2PAAB0lIwVdHJhY2ViYWNrLmZvcm1hdF9saXN0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLmZvcm1hdF9saXN0lGoNjwAAdJSMFnRyYWNlYmFjay5mb3JtYXRfc3RhY2uUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suZm9ybWF0X3N0YWNrlGoNjwAAdJSME3RyYWNlYmFjay5mb3JtYXRfdGKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suZm9ybWF0X3RilGoNjwAAdJSME3RyYWNlYmFjay5wcmludF9leGOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2sucHJpbnRfZXhjlGoNjwAAdJSMGXRyYWNlYmFjay5wcmludF9leGNlcHRpb26UKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9ulGoNjwAAdJSMFHRyYWNlYmFjay5wcmludF9sYXN0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnByaW50X2xhc3SUag2PAAB0lIwVdHJhY2ViYWNrLnByaW50X3N0YWNrlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLnByaW50X3N0YWNrlGoNjwAAdJSMEnRyYWNlYmFjay5wcmludF90YpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay5wcmludF90YpRqDY8AAHSUjBR0cmFjZWJhY2sud2Fsa19zdGFja5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlYmFjay5odG1sI3RyYWNlYmFjay53YWxrX3N0YWNrlGoNjwAAdJSMEXRyYWNlYmFjay53YWxrX3RilChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2ViYWNrLmh0bWwjdHJhY2ViYWNrLndhbGtfdGKUag2PAAB0lIwYdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXOUag2PAAB0lIwgdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2uUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrlGoNjwAAdJSMH3RyYWNlbWFsbG9jLmdldF90cmFjZWJhY2tfbGltaXSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLmdldF90cmFjZWJhY2tfbGltaXSUag2PAAB0lIwddHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnmUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5lGoNjwAAdJSMInRyYWNlbWFsbG9jLmdldF90cmFjZW1hbGxvY19tZW1vcnmUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1sI3RyYWNlbWFsbG9jLmdldF90cmFjZW1hbGxvY19tZW1vcnmUag2PAAB0lIwWdHJhY2VtYWxsb2MuaXNfdHJhY2luZ5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuaXNfdHJhY2luZ5RqDY8AAHSUjBF0cmFjZW1hbGxvYy5zdGFydJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2Muc3RhcnSUag2PAAB0lIwQdHJhY2VtYWxsb2Muc3RvcJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2Muc3RvcJRqDY8AAHSUjBl0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90lChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90lGoNjwAAdJSMDXR0eS5zZXRjYnJlYWuUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dHkuaHRtbCN0dHkuc2V0Y2JyZWFrlGoNjwAAdJSMCnR0eS5zZXRyYXeUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dHkuaHRtbCN0dHkuc2V0cmF3lGoNjwAAdJSMD3R1cnRsZS5hZGRzaGFwZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5hZGRzaGFwZZRqDY8AAHSUjAt0dXJ0bGUuYmFja5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iYWNrlGoNjwAAdJSMD3R1cnRsZS5iYWNrd2FyZJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iYWNrd2FyZJRqDY8AAHSUjBF0dXJ0bGUuYmVnaW5fZmlsbJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5iZWdpbl9maWxslGoNjwAAdJSMEXR1cnRsZS5iZWdpbl9wb2x5lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmJlZ2luX3BvbHmUag2PAAB0lIwOdHVydGxlLmJnY29sb3KUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYmdjb2xvcpRqDY8AAHSUjAx0dXJ0bGUuYmdwaWOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYmdwaWOUag2PAAB0lIwJdHVydGxlLmJrlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmJrlGoNjwAAdJSMCnR1cnRsZS5ieWWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuYnlllGoNjwAAdJSMDXR1cnRsZS5jaXJjbGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuY2lyY2xllGoNjwAAdJSMDHR1cnRsZS5jbGVhcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jbGVhcpRqDY8AAHSUjBJ0dXJ0bGUuY2xlYXJzY3JlZW6UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuY2xlYXJzY3JlZW6Uag2PAAB0lIwRdHVydGxlLmNsZWFyc3RhbXCUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuY2xlYXJzdGFtcJRqDY8AAHSUjBJ0dXJ0bGUuY2xlYXJzdGFtcHOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuY2xlYXJzdGFtcHOUag2PAAB0lIwMdHVydGxlLmNsb25llChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmNsb25llGoNjwAAdJSMDHR1cnRsZS5jb2xvcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5jb2xvcpRqDY8AAHSUjBB0dXJ0bGUuY29sb3Jtb2RllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmNvbG9ybW9kZZRqDY8AAHSUjA50dXJ0bGUuZGVncmVlc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kZWdyZWVzlGoNjwAAdJSMDHR1cnRsZS5kZWxheZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kZWxheZRqDY8AAHSUjA90dXJ0bGUuZGlzdGFuY2WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZGlzdGFuY2WUag2PAAB0lIwLdHVydGxlLmRvbmWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZG9uZZRqDY8AAHSUjAp0dXJ0bGUuZG90lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmRvdJRqDY8AAHSUjAt0dXJ0bGUuZG93bpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5kb3dulGoNjwAAdJSMD3R1cnRsZS5lbmRfZmlsbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5lbmRfZmlsbJRqDY8AAHSUjA90dXJ0bGUuZW5kX3BvbHmUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZW5kX3BvbHmUag2PAAB0lIwSdHVydGxlLmV4aXRvbmNsaWNrlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmV4aXRvbmNsaWNrlGoNjwAAdJSMCXR1cnRsZS5mZJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5mZJRqDY8AAHSUjBB0dXJ0bGUuZmlsbGNvbG9ylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmZpbGxjb2xvcpRqDY8AAHSUjA50dXJ0bGUuZmlsbGluZ5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5maWxsaW5nlGoNjwAAdJSMDnR1cnRsZS5mb3J3YXJklChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmZvcndhcmSUag2PAAB0lIwPdHVydGxlLmdldF9wb2x5lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldF9wb2x5lGoNjwAAdJSMFHR1cnRsZS5nZXRfc2hhcGVwb2x5lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmdldF9zaGFwZXBvbHmUag2PAAB0lIwQdHVydGxlLmdldGNhbnZhc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5nZXRjYW52YXOUag2PAAB0lIwNdHVydGxlLmdldHBlbpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5nZXRwZW6Uag2PAAB0lIwQdHVydGxlLmdldHNjcmVlbpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5nZXRzY3JlZW6Uag2PAAB0lIwQdHVydGxlLmdldHNoYXBlc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5nZXRzaGFwZXOUag2PAAB0lIwQdHVydGxlLmdldHR1cnRsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5nZXR0dXJ0bGWUag2PAAB0lIwLdHVydGxlLmdvdG+UKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuZ290b5RqDY8AAHSUjA50dXJ0bGUuaGVhZGluZ5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5oZWFkaW5nlGoNjwAAdJSMEXR1cnRsZS5oaWRldHVydGxllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmhpZGV0dXJ0bGWUag2PAAB0lIwLdHVydGxlLmhvbWWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuaG9tZZRqDY8AAHSUjAl0dXJ0bGUuaHSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuaHSUag2PAAB0lIwNdHVydGxlLmlzZG93bpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5pc2Rvd26Uag2PAAB0lIwQdHVydGxlLmlzdmlzaWJsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5pc3Zpc2libGWUag2PAAB0lIwLdHVydGxlLmxlZnSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUubGVmdJRqDY8AAHSUjA10dXJ0bGUubGlzdGVulChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLmxpc3RlbpRqDY8AAHSUjAl0dXJ0bGUubHSUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUubHSUag2PAAB0lIwPdHVydGxlLm1haW5sb29wlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm1haW5sb29wlGoNjwAAdJSMC3R1cnRsZS5tb2RllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm1vZGWUag2PAAB0lIwPdHVydGxlLm51bWlucHV0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm51bWlucHV0lGoNjwAAdJSMDnR1cnRsZS5vbmNsaWNrlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm9uY2xpY2uUag2PAAB0lIwNdHVydGxlLm9uZHJhZ5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbmRyYWeUag2PAAB0lIwMdHVydGxlLm9ua2V5lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm9ua2V5lGoNjwAAdJSMEXR1cnRsZS5vbmtleXByZXNzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLm9ua2V5cHJlc3OUag2PAAB0lIwTdHVydGxlLm9ua2V5cmVsZWFzZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbmtleXJlbGVhc2WUag2PAAB0lIwQdHVydGxlLm9ucmVsZWFzZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbnJlbGVhc2WUag2PAAB0lIwUdHVydGxlLm9uc2NyZWVuY2xpY2uUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUub25zY3JlZW5jbGlja5RqDY8AAHSUjA50dXJ0bGUub250aW1lcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5vbnRpbWVylGoNjwAAdJSMCXR1cnRsZS5wZJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5wZJRqDY8AAHSUjAp0dXJ0bGUucGVulChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnBlbpRqDY8AAHSUjA90dXJ0bGUucGVuY29sb3KUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucGVuY29sb3KUag2PAAB0lIwOdHVydGxlLnBlbmRvd26UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucGVuZG93bpRqDY8AAHSUjA50dXJ0bGUucGVuc2l6ZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5wZW5zaXpllGoNjwAAdJSMDHR1cnRsZS5wZW51cJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5wZW51cJRqDY8AAHSUjAp0dXJ0bGUucG9zlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnBvc5RqDY8AAHSUjA90dXJ0bGUucG9zaXRpb26UKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucG9zaXRpb26Uag2PAAB0lIwJdHVydGxlLnB1lChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnB1lGoNjwAAdJSMDnR1cnRsZS5yYWRpYW5zlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnJhZGlhbnOUag2PAAB0lIwVdHVydGxlLnJlZ2lzdGVyX3NoYXBllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnJlZ2lzdGVyX3NoYXBllGoNjwAAdJSMDHR1cnRsZS5yZXNldJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5yZXNldJRqDY8AAHSUjBJ0dXJ0bGUucmVzZXRzY3JlZW6UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucmVzZXRzY3JlZW6Uag2PAAB0lIwRdHVydGxlLnJlc2l6ZW1vZGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucmVzaXplbW9kZZRqDY8AAHSUjAx0dXJ0bGUucmlnaHSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUucmlnaHSUag2PAAB0lIwJdHVydGxlLnJ0lChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnJ0lGoNjwAAdJSMEXR1cnRsZS5zY3JlZW5zaXpllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNjcmVlbnNpemWUag2PAAB0lIwLdHVydGxlLnNldGiUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2V0aJRqDY8AAHSUjBF0dXJ0bGUuc2V0aGVhZGluZ5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXRoZWFkaW5nlGoNjwAAdJSMDXR1cnRsZS5zZXRwb3OUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2V0cG9zlGoNjwAAdJSMEnR1cnRsZS5zZXRwb3NpdGlvbpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXRwb3NpdGlvbpRqDY8AAHSUjBN0dXJ0bGUuc2V0dGlsdGFuZ2xllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHRpbHRhbmdsZZRqDY8AAHSUjBR0dXJ0bGUuc2V0dW5kb2J1ZmZlcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXR1bmRvYnVmZmVylGoNjwAAdJSMDHR1cnRsZS5zZXR1cJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXR1cJRqDY8AAHSUjBp0dXJ0bGUuc2V0d29ybGRjb29yZGluYXRlc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zZXR3b3JsZGNvb3JkaW5hdGVzlGoNjwAAdJSMC3R1cnRsZS5zZXR4lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNldHiUag2PAAB0lIwLdHVydGxlLnNldHmUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2V0eZRqDY8AAHSUjAx0dXJ0bGUuc2hhcGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc2hhcGWUag2PAAB0lIwQdHVydGxlLnNoYXBlc2l6ZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zaGFwZXNpemWUag2PAAB0lIwVdHVydGxlLnNoYXBldHJhbnNmb3JtlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnNoYXBldHJhbnNmb3JtlGoNjwAAdJSMEnR1cnRsZS5zaGVhcmZhY3RvcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zaGVhcmZhY3RvcpRqDY8AAHSUjBF0dXJ0bGUuc2hvd3R1cnRsZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zaG93dHVydGxllGoNjwAAdJSMDHR1cnRsZS5zcGVlZJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5zcGVlZJRqDY8AAHSUjAl0dXJ0bGUuc3SUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuc3SUag2PAAB0lIwMdHVydGxlLnN0YW1wlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnN0YW1wlGoNjwAAdJSMEHR1cnRsZS50ZXh0aW5wdXSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudGV4dGlucHV0lGoNjwAAdJSMC3R1cnRsZS50aWx0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnRpbHSUag2PAAB0lIwQdHVydGxlLnRpbHRhbmdsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50aWx0YW5nbGWUag2PAAB0lIwMdHVydGxlLnRpdGxllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnRpdGxllGoNjwAAdJSMDnR1cnRsZS50b3dhcmRzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnRvd2FyZHOUag2PAAB0lIwNdHVydGxlLnRyYWNlcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50cmFjZXKUag2PAAB0lIwOdHVydGxlLnR1cnRsZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUudHVydGxlc5RqDY8AAHSUjBF0dXJ0bGUudHVydGxlc2l6ZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS50dXJ0bGVzaXpllGoNjwAAdJSMC3R1cnRsZS51bmRvlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnVuZG+Uag2PAAB0lIwYdHVydGxlLnVuZG9idWZmZXJlbnRyaWVzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnVuZG9idWZmZXJlbnRyaWVzlGoNjwAAdJSMCXR1cnRsZS51cJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS51cJRqDY8AAHSUjA10dXJ0bGUudXBkYXRllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnVwZGF0ZZRqDY8AAHSUjAx0dXJ0bGUud2lkdGiUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUud2lkdGiUag2PAAB0lIwUdHVydGxlLndpbmRvd19oZWlnaHSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUud2luZG93X2hlaWdodJRqDY8AAHSUjBN0dXJ0bGUud2luZG93X3dpZHRolChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLndpbmRvd193aWR0aJRqDY8AAHSUjAx0dXJ0bGUud3JpdGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUud3JpdGWUag2PAAB0lIwadHVydGxlLndyaXRlX2RvY3N0cmluZ2RpY3SUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUud3JpdGVfZG9jc3RyaW5nZGljdJRqDY8AAHSUjAt0dXJ0bGUueGNvcpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS54Y29ylGoNjwAAdJSMC3R1cnRsZS55Y29ylChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLnljb3KUag2PAAB0lIwbdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGWUag2PAAB0lIwPdHlwZXMuY29yb3V0aW5llChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5jb3JvdXRpbmWUag2PAAB0lIwPdHlwZXMubmV3X2NsYXNzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5uZXdfY2xhc3OUag2PAAB0lIwTdHlwZXMucHJlcGFyZV9jbGFzc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMucHJlcGFyZV9jbGFzc5RqDY8AAHSUjBN0eXBlcy5yZXNvbHZlX2Jhc2VzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5yZXNvbHZlX2Jhc2VzlGoNjwAAdJSMDnR5cGluZy5OZXdUeXBllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLk5ld1R5cGWUag2PAAB0lIwLdHlwaW5nLmNhc3SUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuY2FzdJRqDY8AAHSUjAx0eXBpbmcuZmluYWyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuZmluYWyUag2PAAB0lIwPdHlwaW5nLmdldF9hcmdzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLmdldF9hcmdzlGoNjwAAdJSMEXR5cGluZy5nZXRfb3JpZ2lulChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLmdldF9vcmlnaW6Uag2PAAB0lIwVdHlwaW5nLmdldF90eXBlX2hpbnRzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLmdldF90eXBlX2hpbnRzlGoNjwAAdJSMFHR5cGluZy5ub190eXBlX2NoZWNrlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLm5vX3R5cGVfY2hlY2uUag2PAAB0lIwedHlwaW5nLm5vX3R5cGVfY2hlY2tfZGVjb3JhdG9ylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLm5vX3R5cGVfY2hlY2tfZGVjb3JhdG9ylGoNjwAAdJSMD3R5cGluZy5vdmVybG9hZJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5vdmVybG9hZJRqDY8AAHSUjBh0eXBpbmcucnVudGltZV9jaGVja2FibGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcucnVudGltZV9jaGVja2FibGWUag2PAAB0lIwWdHlwaW5nLnR5cGVfY2hlY2tfb25seZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy50eXBlX2NoZWNrX29ubHmUag2PAAB0lIwZdW5pY29kZWRhdGEuYmlkaXJlY3Rpb25hbJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEuYmlkaXJlY3Rpb25hbJRqDY8AAHSUjBR1bmljb2RlZGF0YS5jYXRlZ29yeZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEuY2F0ZWdvcnmUag2PAAB0lIwVdW5pY29kZWRhdGEuY29tYmluaW5nlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS5jb21iaW5pbmeUag2PAAB0lIwTdW5pY29kZWRhdGEuZGVjaW1hbJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEuZGVjaW1hbJRqDY8AAHSUdSiMGXVuaWNvZGVkYXRhLmRlY29tcG9zaXRpb26UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmRlY29tcG9zaXRpb26Uag2PAAB0lIwRdW5pY29kZWRhdGEuZGlnaXSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmRpZ2l0lGoNjwAAdJSMHHVuaWNvZGVkYXRhLmVhc3RfYXNpYW5fd2lkdGiUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmVhc3RfYXNpYW5fd2lkdGiUag2PAAB0lIwZdW5pY29kZWRhdGEuaXNfbm9ybWFsaXplZJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEuaXNfbm9ybWFsaXplZJRqDY8AAHSUjBJ1bmljb2RlZGF0YS5sb29rdXCUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLmxvb2t1cJRqDY8AAHSUjBR1bmljb2RlZGF0YS5taXJyb3JlZJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEubWlycm9yZWSUag2PAAB0lIwQdW5pY29kZWRhdGEubmFtZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaWNvZGVkYXRhLmh0bWwjdW5pY29kZWRhdGEubmFtZZRqDY8AAHSUjBV1bmljb2RlZGF0YS5ub3JtYWxpemWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmljb2RlZGF0YS5odG1sI3VuaWNvZGVkYXRhLm5vcm1hbGl6ZZRqDY8AAHSUjBN1bmljb2RlZGF0YS5udW1lcmljlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pY29kZWRhdGEuaHRtbCN1bmljb2RlZGF0YS5udW1lcmljlGoNjwAAdJSMGXVuaXR0ZXN0LmFkZE1vZHVsZUNsZWFudXCUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LmFkZE1vZHVsZUNsZWFudXCUag2PAAB0lIwZdW5pdHRlc3QuZG9Nb2R1bGVDbGVhbnVwc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuZG9Nb2R1bGVDbGVhbnVwc5RqDY8AAHSUjBh1bml0dGVzdC5leHBlY3RlZEZhaWx1cmWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZZRqDY8AAHSUjBd1bml0dGVzdC5pbnN0YWxsSGFuZGxlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXKUag2PAAB0lIwNdW5pdHRlc3QubWFpbpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QubWFpbpRqDY8AAHSUjBJ1bml0dGVzdC5tb2NrLmNhbGyUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5jYWxslGoNjwAAdJSMHXVuaXR0ZXN0Lm1vY2suY3JlYXRlX2F1dG9zcGVjlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suY3JlYXRlX2F1dG9zcGVjlGoNjwAAdJSMF3VuaXR0ZXN0Lm1vY2subW9ja19vcGVulChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2subW9ja19vcGVulGoNjwAAdJSME3VuaXR0ZXN0Lm1vY2sucGF0Y2iUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5wYXRjaJRqDY8AAHSUjBh1bml0dGVzdC5tb2NrLnBhdGNoLmRpY3SUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5wYXRjaC5kaWN0lGoNjwAAdJSMHHVuaXR0ZXN0Lm1vY2sucGF0Y2gubXVsdGlwbGWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5wYXRjaC5tdWx0aXBsZZRqDY8AAHSUjBp1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdJRqDY8AAHSUjBt1bml0dGVzdC5tb2NrLnBhdGNoLnN0b3BhbGyUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjdW5pdHRlc3QubW9jay5wYXRjaC5zdG9wYWxslGoNjwAAdJSMEnVuaXR0ZXN0Lm1vY2suc2VhbJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLnNlYWyUag2PAAB0lIwXdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0lGoNjwAAdJSMFnVuaXR0ZXN0LnJlbW92ZUhhbmRsZXKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LnJlbW92ZUhhbmRsZXKUag2PAAB0lIwVdW5pdHRlc3QucmVtb3ZlUmVzdWx0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5yZW1vdmVSZXN1bHSUag2PAAB0lIwNdW5pdHRlc3Quc2tpcJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3Quc2tpcJRqDY8AAHSUjA91bml0dGVzdC5za2lwSWaUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LnNraXBJZpRqDY8AAHSUjBN1bml0dGVzdC5za2lwVW5sZXNzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC5za2lwVW5sZXNzlGoNjwAAdJSMFXVybGxpYi5wYXJzZS5wYXJzZV9xc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5wYXJzZS5odG1sI3VybGxpYi5wYXJzZS5wYXJzZV9xc5RqDY8AAHSUjBZ1cmxsaWIucGFyc2UucGFyc2VfcXNslChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnBhcnNlLmh0bWwjdXJsbGliLnBhcnNlLnBhcnNlX3FzbJRqDY8AAHSUjBJ1cmxsaWIucGFyc2UucXVvdGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UucXVvdGWUag2PAAB0lIwddXJsbGliLnBhcnNlLnF1b3RlX2Zyb21fYnl0ZXOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UucXVvdGVfZnJvbV9ieXRlc5RqDY8AAHSUjBd1cmxsaWIucGFyc2UucXVvdGVfcGx1c5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5wYXJzZS5odG1sI3VybGxpYi5wYXJzZS5xdW90ZV9wbHVzlGoNjwAAdJSMFHVybGxpYi5wYXJzZS51bnF1b3RllChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnBhcnNlLmh0bWwjdXJsbGliLnBhcnNlLnVucXVvdGWUag2PAAB0lIwZdXJsbGliLnBhcnNlLnVucXVvdGVfcGx1c5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5wYXJzZS5odG1sI3VybGxpYi5wYXJzZS51bnF1b3RlX3BsdXOUag2PAAB0lIwddXJsbGliLnBhcnNlLnVucXVvdGVfdG9fYnl0ZXOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlc5RqDY8AAHSUjBN1cmxsaWIucGFyc2UudW53cmFwlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnBhcnNlLmh0bWwjdXJsbGliLnBhcnNlLnVud3JhcJRqDY8AAHSUjBZ1cmxsaWIucGFyc2UudXJsZGVmcmFnlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnBhcnNlLmh0bWwjdXJsbGliLnBhcnNlLnVybGRlZnJhZ5RqDY8AAHSUjBZ1cmxsaWIucGFyc2UudXJsZW5jb2RllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnBhcnNlLmh0bWwjdXJsbGliLnBhcnNlLnVybGVuY29kZZRqDY8AAHSUjBR1cmxsaWIucGFyc2UudXJsam9pbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5wYXJzZS5odG1sI3VybGxpYi5wYXJzZS51cmxqb2lulGoNjwAAdJSMFXVybGxpYi5wYXJzZS51cmxwYXJzZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5wYXJzZS5odG1sI3VybGxpYi5wYXJzZS51cmxwYXJzZZRqDY8AAHSUjBV1cmxsaWIucGFyc2UudXJsc3BsaXSUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UudXJsc3BsaXSUag2PAAB0lIwXdXJsbGliLnBhcnNlLnVybHVucGFyc2WUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UudXJsdW5wYXJzZZRqDY8AAHSUjBd1cmxsaWIucGFyc2UudXJsdW5zcGxpdJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5wYXJzZS5odG1sI3VybGxpYi5wYXJzZS51cmx1bnNwbGl0lGoNjwAAdJSMG3VybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVylGoNjwAAdJSMGXVybGxpYi5yZXF1ZXN0LmdldHByb3hpZXOUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LmdldHByb3hpZXOUag2PAAB0lIwddXJsbGliLnJlcXVlc3QuaW5zdGFsbF9vcGVuZXKUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0Lmluc3RhbGxfb3BlbmVylGoNjwAAdJSMG3VybGxpYi5yZXF1ZXN0LnBhdGhuYW1lMnVybJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QucGF0aG5hbWUydXJslGoNjwAAdJSMG3VybGxpYi5yZXF1ZXN0LnVybDJwYXRobmFtZZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QudXJsMnBhdGhuYW1llGoNjwAAdJSMGXVybGxpYi5yZXF1ZXN0LnVybGNsZWFudXCUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LnVybGNsZWFudXCUag2PAAB0lIwWdXJsbGliLnJlcXVlc3QudXJsb3BlbpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QudXJsb3BlbpRqDY8AAHSUjBp1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmWUag2PAAB0lIwJdXUuZGVjb2RllChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXUuaHRtbCN1dS5kZWNvZGWUag2PAAB0lIwJdXUuZW5jb2RllChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXUuaHRtbCN1dS5lbmNvZGWUag2PAAB0lIwMdXVpZC5nZXRub2RllChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQuZ2V0bm9kZZRqDY8AAHSUjAp1dWlkLnV1aWQxlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQudXVpZDGUag2PAAB0lIwKdXVpZC51dWlkM5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLnV1aWQzlGoNjwAAdJSMCnV1aWQudXVpZDSUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91dWlkLmh0bWwjdXVpZC51dWlkNJRqDY8AAHSUjAp1dWlkLnV1aWQ1lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1sI3V1aWQudXVpZDWUag2PAAB0lIwEdmFyc5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3ZhcnOUag2PAAB0lIwLdmVudi5jcmVhdGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS92ZW52Lmh0bWwjdmVudi5jcmVhdGWUag2PAAB0lIwXd2FybmluZ3MuZmlsdGVyd2FybmluZ3OUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXJuaW5ncy5odG1sI3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzlGoNjwAAdJSMFndhcm5pbmdzLmZvcm1hdHdhcm5pbmeUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXJuaW5ncy5odG1sI3dhcm5pbmdzLmZvcm1hdHdhcm5pbmeUag2PAAB0lIwWd2FybmluZ3MucmVzZXR3YXJuaW5nc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZ3MucmVzZXR3YXJuaW5nc5RqDY8AAHSUjBR3YXJuaW5ncy5zaG93d2FybmluZ5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZ3Muc2hvd3dhcm5pbmeUag2PAAB0lIwVd2FybmluZ3Muc2ltcGxlZmlsdGVylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy5zaW1wbGVmaWx0ZXKUag2PAAB0lIwNd2FybmluZ3Mud2FybpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZ3Mud2FybpRqDY8AAHSUjBZ3YXJuaW5ncy53YXJuX2V4cGxpY2l0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5ncy53YXJuX2V4cGxpY2l0lGoNjwAAdJSMCXdhdmUub3BlbpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLm9wZW6Uag2PAAB0lIwLd2F2ZS5vcGVuZnCUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS5vcGVuZnCUag2PAAB0lIwXd2Vha3JlZi5nZXR3ZWFrcmVmY291bnSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5nZXR3ZWFrcmVmY291bnSUag2PAAB0lIwTd2Vha3JlZi5nZXR3ZWFrcmVmc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLmdldHdlYWtyZWZzlGoNjwAAdJSMDXdlYWtyZWYucHJveHmUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5wcm94eZRqDY8AAHSUjA53ZWJicm93c2VyLmdldJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbCN3ZWJicm93c2VyLmdldJRqDY8AAHSUjA93ZWJicm93c2VyLm9wZW6UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5vcGVulGoNjwAAdJSME3dlYmJyb3dzZXIub3Blbl9uZXeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWJicm93c2VyLmh0bWwjd2ViYnJvd3Nlci5vcGVuX25ld5RqDY8AAHSUjBd3ZWJicm93c2VyLm9wZW5fbmV3X3RhYpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbCN3ZWJicm93c2VyLm9wZW5fbmV3X3RhYpRqDY8AAHSUjBN3ZWJicm93c2VyLnJlZ2lzdGVylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI3dlYmJyb3dzZXIucmVnaXN0ZXKUag2PAAB0lIwPd2lucmVnLkNsb3NlS2V5lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkNsb3NlS2V5lGoNjwAAdJSMFndpbnJlZy5Db25uZWN0UmVnaXN0cnmUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuQ29ubmVjdFJlZ2lzdHJ5lGoNjwAAdJSMEHdpbnJlZy5DcmVhdGVLZXmUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuQ3JlYXRlS2V5lGoNjwAAdJSMEndpbnJlZy5DcmVhdGVLZXlFeJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5DcmVhdGVLZXlFeJRqDY8AAHSUjBB3aW5yZWcuRGVsZXRlS2V5lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkRlbGV0ZUtleZRqDY8AAHSUjBJ3aW5yZWcuRGVsZXRlS2V5RXiUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuRGVsZXRlS2V5RXiUag2PAAB0lIwSd2lucmVnLkRlbGV0ZVZhbHVllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkRlbGV0ZVZhbHVllGoNjwAAdJSMG3dpbnJlZy5EaXNhYmxlUmVmbGVjdGlvbktleZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5EaXNhYmxlUmVmbGVjdGlvbktleZRqDY8AAHSUjBp3aW5yZWcuRW5hYmxlUmVmbGVjdGlvbktleZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5FbmFibGVSZWZsZWN0aW9uS2V5lGoNjwAAdJSMDndpbnJlZy5FbnVtS2V5lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkVudW1LZXmUag2PAAB0lIwQd2lucmVnLkVudW1WYWx1ZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5FbnVtVmFsdWWUag2PAAB0lIwfd2lucmVnLkV4cGFuZEVudmlyb25tZW50U3RyaW5nc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5FeHBhbmRFbnZpcm9ubWVudFN0cmluZ3OUag2PAAB0lIwPd2lucmVnLkZsdXNoS2V5lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkZsdXNoS2V5lGoNjwAAdJSMDndpbnJlZy5Mb2FkS2V5lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLkxvYWRLZXmUag2PAAB0lIwOd2lucmVnLk9wZW5LZXmUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuT3BlbktleZRqDY8AAHSUjBB3aW5yZWcuT3BlbktleUV4lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLk9wZW5LZXlFeJRqDY8AAHSUjBN3aW5yZWcuUXVlcnlJbmZvS2V5lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlF1ZXJ5SW5mb0tleZRqDY8AAHSUjBl3aW5yZWcuUXVlcnlSZWZsZWN0aW9uS2V5lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlF1ZXJ5UmVmbGVjdGlvbktleZRqDY8AAHSUjBF3aW5yZWcuUXVlcnlWYWx1ZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3dpbnJlZy5RdWVyeVZhbHVllGoNjwAAdJSME3dpbnJlZy5RdWVyeVZhbHVlRXiUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCN3aW5yZWcuUXVlcnlWYWx1ZUV4lGoNjwAAdJSMDndpbnJlZy5TYXZlS2V5lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlNhdmVLZXmUag2PAAB0lIwPd2lucmVnLlNldFZhbHVllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlNldFZhbHVllGoNjwAAdJSMEXdpbnJlZy5TZXRWYWx1ZUV4lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjd2lucmVnLlNldFZhbHVlRXiUag2PAAB0lIwNd2luc291bmQuQmVlcJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuQmVlcJRqDY8AAHSUjBR3aW5zb3VuZC5NZXNzYWdlQmVlcJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnNvdW5kLmh0bWwjd2luc291bmQuTWVzc2FnZUJlZXCUag2PAAB0lIwSd2luc291bmQuUGxheVNvdW5klChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2luc291bmQuaHRtbCN3aW5zb3VuZC5QbGF5U291bmSUag2PAAB0lIwdd3NnaXJlZi5oYW5kbGVycy5yZWFkX2Vudmlyb26UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5yZWFkX2Vudmlyb26Uag2PAAB0lIwed3NnaXJlZi5zaW1wbGVfc2VydmVyLmRlbW9fYXBwlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuc2ltcGxlX3NlcnZlci5kZW1vX2FwcJRqDY8AAHSUjCF3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIubWFrZV9zZXJ2ZXKUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLm1ha2Vfc2VydmVylGoNjwAAdJSMHHdzZ2lyZWYudXRpbC5hcHBsaWNhdGlvbl91cmmUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi51dGlsLmFwcGxpY2F0aW9uX3VyaZRqDY8AAHSUjBl3c2dpcmVmLnV0aWwuZ3Vlc3Nfc2NoZW1llChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYudXRpbC5ndWVzc19zY2hlbWWUag2PAAB0lIwad3NnaXJlZi51dGlsLmlzX2hvcF9ieV9ob3CUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi51dGlsLmlzX2hvcF9ieV9ob3CUag2PAAB0lIwYd3NnaXJlZi51dGlsLnJlcXVlc3RfdXJplChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYudXRpbC5yZXF1ZXN0X3VyaZRqDY8AAHSUjCN3c2dpcmVmLnV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0c5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0c5RqDY8AAHSUjBx3c2dpcmVmLnV0aWwuc2hpZnRfcGF0aF9pbmZvlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYudXRpbC5zaGlmdF9wYXRoX2luZm+Uag2PAAB0lIwad3NnaXJlZi52YWxpZGF0ZS52YWxpZGF0b3KUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi52YWxpZGF0ZS52YWxpZGF0b3KUag2PAAB0lIwceG1sLmRvbS5nZXRET01JbXBsZW1lbnRhdGlvbpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCN4bWwuZG9tLmdldERPTUltcGxlbWVudGF0aW9ulGoNjwAAdJSMFXhtbC5kb20ubWluaWRvbS5wYXJzZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI3htbC5kb20ubWluaWRvbS5wYXJzZZRqDY8AAHSUjBt4bWwuZG9tLm1pbmlkb20ucGFyc2VTdHJpbmeUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLm1pbmlkb20uaHRtbCN4bWwuZG9tLm1pbmlkb20ucGFyc2VTdHJpbmeUag2PAAB0lIwVeG1sLmRvbS5wdWxsZG9tLnBhcnNllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLmh0bWwjeG1sLmRvbS5wdWxsZG9tLnBhcnNllGoNjwAAdJSMG3htbC5kb20ucHVsbGRvbS5wYXJzZVN0cmluZ5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI3htbC5kb20ucHVsbGRvbS5wYXJzZVN0cmluZ5RqDY8AAHSUjCF4bWwuZG9tLnJlZ2lzdGVyRE9NSW1wbGVtZW50YXRpb26UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjeG1sLmRvbS5yZWdpc3RlckRPTUltcGxlbWVudGF0aW9ulGoNjwAAdJSMHXhtbC5ldHJlZS5FbGVtZW50VHJlZS5Db21tZW50lChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkNvbW1lbnSUag2PAAB0lIwreG1sLmV0cmVlLkVsZW1lbnRUcmVlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbpQoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb26Uag2PAAB0lIwgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlN1YkVsZW1lbnSUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuU3ViRWxlbWVudJRqDY8AAHSUjBl4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTJRqDY8AAHSUjBt4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MSUSUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MSUSUag2PAAB0lIwieG1sLmV0cmVlLkVsZW1lbnRUcmVlLmNhbm9uaWNhbGl6ZZQoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5jYW5vbmljYWxpemWUag2PAAB0lIwaeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmR1bXCUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuZHVtcJRqDY8AAHSUjCB4bWwuZXRyZWUuRWxlbWVudFRyZWUuZnJvbXN0cmluZ5QoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5mcm9tc3RyaW5nlGoNjwAAdJSMJHhtbC5ldHJlZS5FbGVtZW50VHJlZS5mcm9tc3RyaW5nbGlzdJQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5mcm9tc3RyaW5nbGlzdJRqDY8AAHSUjB94bWwuZXRyZWUuRWxlbWVudFRyZWUuaXNlbGVtZW50lChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmlzZWxlbWVudJRqDY8AAHSUjB94bWwuZXRyZWUuRWxlbWVudFRyZWUuaXRlcnBhcnNllChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLml0ZXJwYXJzZZRqDY8AAHSUjBt4bWwuZXRyZWUuRWxlbWVudFRyZWUucGFyc2WUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUucGFyc2WUag2PAAB0lIwoeG1sLmV0cmVlLkVsZW1lbnRUcmVlLnJlZ2lzdGVyX25hbWVzcGFjZZQoagqPAABqC48AAIxlaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS5yZWdpc3Rlcl9uYW1lc3BhY2WUag2PAAB0lIweeG1sLmV0cmVlLkVsZW1lbnRUcmVlLnRvc3RyaW5nlChqCo8AAGoLjwAAjFtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLnRvc3RyaW5nlGoNjwAAdJSMInhtbC5ldHJlZS5FbGVtZW50VHJlZS50b3N0cmluZ2xpc3SUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0lGoNjwAAdJSMPXhtbC5ldHJlZS5FbGVtZW50VHJlZS54bWwuZXRyZWUuRWxlbWVudEluY2x1ZGUuZGVmYXVsdF9sb2FkZXKUKGoKjwAAaguPAACMemh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUueG1sLmV0cmVlLkVsZW1lbnRJbmNsdWRlLmRlZmF1bHRfbG9hZGVylGoNjwAAdJSMNnhtbC5ldHJlZS5FbGVtZW50VHJlZS54bWwuZXRyZWUuRWxlbWVudEluY2x1ZGUuaW5jbHVkZZQoagqPAABqC48AAIxzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI3htbC5ldHJlZS5FbGVtZW50VHJlZS54bWwuZXRyZWUuRWxlbWVudEluY2x1ZGUuaW5jbHVkZZRqDY8AAHSUjB14bWwucGFyc2Vycy5leHBhdC5FcnJvclN0cmluZ5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCN4bWwucGFyc2Vycy5leHBhdC5FcnJvclN0cmluZ5RqDY8AAHSUjB54bWwucGFyc2Vycy5leHBhdC5QYXJzZXJDcmVhdGWUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjeG1sLnBhcnNlcnMuZXhwYXQuUGFyc2VyQ3JlYXRllGoNjwAAdJSME3htbC5zYXgubWFrZV9wYXJzZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4Lmh0bWwjeG1sLnNheC5tYWtlX3BhcnNlcpRqDY8AAHSUjA14bWwuc2F4LnBhcnNllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5odG1sI3htbC5zYXgucGFyc2WUag2PAAB0lIwTeG1sLnNheC5wYXJzZVN0cmluZ5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaHRtbCN4bWwuc2F4LnBhcnNlU3RyaW5nlGoNjwAAdJSMF3htbC5zYXguc2F4dXRpbHMuZXNjYXBllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI3htbC5zYXguc2F4dXRpbHMuZXNjYXBllGoNjwAAdJSMJXhtbC5zYXguc2F4dXRpbHMucHJlcGFyZV9pbnB1dF9zb3VyY2WUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWwjeG1sLnNheC5zYXh1dGlscy5wcmVwYXJlX2lucHV0X3NvdXJjZZRqDY8AAHSUjBp4bWwuc2F4LnNheHV0aWxzLnF1b3RlYXR0cpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgudXRpbHMuaHRtbCN4bWwuc2F4LnNheHV0aWxzLnF1b3RlYXR0cpRqDY8AAHSUjBl4bWwuc2F4LnNheHV0aWxzLnVuZXNjYXBllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC51dGlscy5odG1sI3htbC5zYXguc2F4dXRpbHMudW5lc2NhcGWUag2PAAB0lIwTeG1scnBjLmNsaWVudC5kdW1wc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5jbGllbnQuaHRtbCN4bWxycGMuY2xpZW50LmR1bXBzlGoNjwAAdJSME3htbHJwYy5jbGllbnQubG9hZHOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjeG1scnBjLmNsaWVudC5sb2Fkc5RqDY8AAHSUjAN6aXCUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCN6aXCUag2PAAB0lIwVemlwYXBwLmNyZWF0ZV9hcmNoaXZllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwYXBwLmh0bWwjemlwYXBwLmNyZWF0ZV9hcmNoaXZllGoNjwAAdJSMFnppcGFwcC5nZXRfaW50ZXJwcmV0ZXKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBhcHAuaHRtbCN6aXBhcHAuZ2V0X2ludGVycHJldGVylGoNjwAAdJSMEnppcGZpbGUuaXNfemlwZmlsZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLmlzX3ppcGZpbGWUag2PAAB0lIwMemxpYi5hZGxlcjMylChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI3psaWIuYWRsZXIzMpRqDY8AAHSUjA16bGliLmNvbXByZXNzlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI3psaWIuY29tcHJlc3OUag2PAAB0lIwQemxpYi5jb21wcmVzc29iapQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmNvbXByZXNzb2JqlGoNjwAAdJSMCnpsaWIuY3JjMzKUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96bGliLmh0bWwjemxpYi5jcmMzMpRqDY8AAHSUjA96bGliLmRlY29tcHJlc3OUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96bGliLmh0bWwjemxpYi5kZWNvbXByZXNzlGoNjwAAdJSMEnpsaWIuZGVjb21wcmVzc29iapQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3psaWIuaHRtbCN6bGliLmRlY29tcHJlc3NvYmqUag2PAAB0lHWMCHB5OmNsYXNzlH2UKIwHYWJjLkFCQ5QoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FiYy5odG1sI2FiYy5BQkOUag2PAAB0lIwLYWJjLkFCQ01ldGGUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hYmMuaHRtbCNhYmMuQUJDTWV0YZRqDY8AAHSUjA9hcmdwYXJzZS5BY3Rpb26UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFjdGlvbpRqDY8AAHSUjCZhcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXKUag2PAAB0lIwXYXJncGFyc2UuQXJndW1lbnRQYXJzZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLkFyZ3VtZW50UGFyc2VylGoNjwAAdJSMEWFyZ3BhcnNlLkZpbGVUeXBllChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS5GaWxlVHlwZZRqDY8AAHSUjCFhcmdwYXJzZS5NZXRhdmFyVHlwZUhlbHBGb3JtYXR0ZXKUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLk1ldGF2YXJUeXBlSGVscEZvcm1hdHRlcpRqDY8AAHSUjBJhcmdwYXJzZS5OYW1lc3BhY2WUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLk5hbWVzcGFjZZRqDY8AAHSUjCRhcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI2FyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcpRqDY8AAHSUjB1hcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJncGFyc2UuUmF3VGV4dEhlbHBGb3JtYXR0ZXKUag2PAAB0lIwLYXJyYXkuYXJyYXmUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1sI2FycmF5LmFycmF5lGoNjwAAdJSMB2FzdC5BU1SUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuQVNUlGoNjwAAdJSME2FzdC5Ob2RlVHJhbnNmb3JtZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3QuaHRtbCNhc3QuTm9kZVRyYW5zZm9ybWVylGoNjwAAdJSMD2FzdC5Ob2RlVmlzaXRvcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzdC5odG1sI2FzdC5Ob2RlVmlzaXRvcpRqDY8AAHSUjBNhc3luY2hhdC5hc3luY19jaGF0lChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNoYXQuaHRtbCNhc3luY2hhdC5hc3luY19jaGF0lGoNjwAAdJSMHGFzeW5jaW8uQWJzdHJhY3RDaGlsZFdhdGNoZXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uQWJzdHJhY3RDaGlsZFdhdGNoZXKUag2PAAB0lIwZYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcJRqDY8AAHSUjB9hc3luY2lvLkFic3RyYWN0RXZlbnRMb29wUG9saWN5lChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wb2xpY3kuaHRtbCNhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wUG9saWN5lGoNjwAAdJSMFGFzeW5jaW8uQmFzZVByb3RvY29slChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uQmFzZVByb3RvY29slGoNjwAAdJSMFWFzeW5jaW8uQmFzZVRyYW5zcG9ydJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLkJhc2VUcmFuc3BvcnSUag2PAAB0lIwYYXN5bmNpby5Cb3VuZGVkU2VtYXBob3JllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5Cb3VuZGVkU2VtYXBob3JllGoNjwAAdJSMGGFzeW5jaW8uQnVmZmVyZWRQcm90b2NvbJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLkJ1ZmZlcmVkUHJvdG9jb2yUag2PAAB0lIwRYXN5bmNpby5Db25kaXRpb26UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN5bmMuaHRtbCNhc3luY2lvLkNvbmRpdGlvbpRqDY8AAHSUjBhhc3luY2lvLkRhdGFncmFtUHJvdG9jb2yUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5EYXRhZ3JhbVByb3RvY29slGoNjwAAdJSMGWFzeW5jaW8uRGF0YWdyYW1UcmFuc3BvcnSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5EYXRhZ3JhbVRyYW5zcG9ydJRqDY8AAHSUjB5hc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3mUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeZRqDY8AAHSUjA1hc3luY2lvLkV2ZW50lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5FdmVudJRqDY8AAHSUjBhhc3luY2lvLkZhc3RDaGlsZFdhdGNoZXKUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uRmFzdENoaWxkV2F0Y2hlcpRqDY8AAHSUjA5hc3luY2lvLkZ1dHVyZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZnV0dXJlLmh0bWwjYXN5bmNpby5GdXR1cmWUlRcAAQAAAAAAag2PAAB0lIwOYXN5bmNpby5IYW5kbGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8uSGFuZGxllGoNjwAAdJSMEWFzeW5jaW8uTGlmb1F1ZXVllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1xdWV1ZS5odG1sI2FzeW5jaW8uTGlmb1F1ZXVllGoNjwAAdJSMDGFzeW5jaW8uTG9ja5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3luYy5odG1sI2FzeW5jaW8uTG9ja5RqDY8AAHSUjB1hc3luY2lvLk11bHRpTG9vcENoaWxkV2F0Y2hlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcG9saWN5Lmh0bWwjYXN5bmNpby5NdWx0aUxvb3BDaGlsZFdhdGNoZXKUag2PAAB0lIwVYXN5bmNpby5Qcmlvcml0eVF1ZXVllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1xdWV1ZS5odG1sI2FzeW5jaW8uUHJpb3JpdHlRdWV1ZZRqDY8AAHSUjBlhc3luY2lvLlByb2FjdG9yRXZlbnRMb29wlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLlByb2FjdG9yRXZlbnRMb29wlGoNjwAAdJSMEGFzeW5jaW8uUHJvdG9jb2yUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5Qcm90b2NvbJRqDY8AAHSUjA1hc3luY2lvLlF1ZXVllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1xdWV1ZS5odG1sI2FzeW5jaW8uUXVldWWUag2PAAB0lIwVYXN5bmNpby5SZWFkVHJhbnNwb3J0lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uUmVhZFRyYW5zcG9ydJRqDY8AAHSUjBhhc3luY2lvLlNhZmVDaGlsZFdhdGNoZXKUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcpRqDY8AAHSUjBlhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wlGoNjwAAdJSMEWFzeW5jaW8uU2VtYXBob3JllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zeW5jLmh0bWwjYXN5bmNpby5TZW1hcGhvcmWUag2PAAB0lIwOYXN5bmNpby5TZXJ2ZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8uU2VydmVylGoNjwAAdJSMFGFzeW5jaW8uU3RyZWFtUmVhZGVylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLlN0cmVhbVJlYWRlcpRqDY8AAHSUjBRhc3luY2lvLlN0cmVhbVdyaXRlcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby5TdHJlYW1Xcml0ZXKUag2PAAB0lIwaYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2yUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2yUag2PAAB0lIwbYXN5bmNpby5TdWJwcm9jZXNzVHJhbnNwb3J0lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uU3VicHJvY2Vzc1RyYW5zcG9ydJRqDY8AAHSUjAxhc3luY2lvLlRhc2uUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLlRhc2uUag2PAAB0lIwcYXN5bmNpby5UaHJlYWRlZENoaWxkV2F0Y2hlcpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcG9saWN5Lmh0bWwjYXN5bmNpby5UaHJlYWRlZENoaWxkV2F0Y2hlcpRqDY8AAHSUjBNhc3luY2lvLlRpbWVySGFuZGxllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLlRpbWVySGFuZGxllGoNjwAAdJSMEWFzeW5jaW8uVHJhbnNwb3J0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8uVHJhbnNwb3J0lGoNjwAAdJSMJmFzeW5jaW8uV2luZG93c1Byb2FjdG9yRXZlbnRMb29wUG9saWN5lChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wb2xpY3kuaHRtbCNhc3luY2lvLldpbmRvd3NQcm9hY3RvckV2ZW50TG9vcFBvbGljeZRqDY8AAHSUjCZhc3luY2lvLldpbmRvd3NTZWxlY3RvckV2ZW50TG9vcFBvbGljeZQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcG9saWN5Lmh0bWwjYXN5bmNpby5XaW5kb3dzU2VsZWN0b3JFdmVudExvb3BQb2xpY3mUag2PAAB0lIwWYXN5bmNpby5Xcml0ZVRyYW5zcG9ydJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLldyaXRlVHJhbnNwb3J0lGoNjwAAdJSMImFzeW5jaW8uYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3OUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MuaHRtbCNhc3luY2lvLmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzlGoNjwAAdJSME2FzeW5jb3JlLmRpc3BhdGNoZXKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXKUag2PAAB0lIwdYXN5bmNvcmUuZGlzcGF0Y2hlcl93aXRoX3NlbmSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY29yZS5odG1sI2FzeW5jb3JlLmRpc3BhdGNoZXJfd2l0aF9zZW5klGoNjwAAdJSMGGFzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlcpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVylGoNjwAAdJSMFWFzeW5jb3JlLmZpbGVfd3JhcHBlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUuZmlsZV93cmFwcGVylGoNjwAAdJSMB2JkYi5CZGKUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iZGIuaHRtbCNiZGIuQmRilGoNjwAAdJSMDmJkYi5CcmVha3BvaW50lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWwjYmRiLkJyZWFrcG9pbnSUag2PAAB0lIwEYm9vbJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Jvb2yUag2PAAB0lIwJYnl0ZWFycmF5lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNieXRlYXJyYXmUag2PAAB0lIwFYnl0ZXOUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzlGoNjwAAdJSMEWJ6Mi5CWjJDb21wcmVzc29ylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnoyLmh0bWwjYnoyLkJaMkNvbXByZXNzb3KUag2PAAB0lIwTYnoyLkJaMkRlY29tcHJlc3NvcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2J6Mi5odG1sI2J6Mi5CWjJEZWNvbXByZXNzb3KUag2PAAB0lIwLYnoyLkJaMkZpbGWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iejIuaHRtbCNiejIuQloyRmlsZZRqDY8AAHSUjBFjYWxlbmRhci5DYWxlbmRhcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NhbGVuZGFyLmh0bWwjY2FsZW5kYXIuQ2FsZW5kYXKUag2PAAB0lIwVY2FsZW5kYXIuSFRNTENhbGVuZGFylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5IVE1MQ2FsZW5kYXKUag2PAAB0lIwbY2FsZW5kYXIuTG9jYWxlSFRNTENhbGVuZGFylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5Mb2NhbGVIVE1MQ2FsZW5kYXKUag2PAAB0lIwbY2FsZW5kYXIuTG9jYWxlVGV4dENhbGVuZGFylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5Mb2NhbGVUZXh0Q2FsZW5kYXKUag2PAAB0lIwVY2FsZW5kYXIuVGV4dENhbGVuZGFylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2FsZW5kYXIuaHRtbCNjYWxlbmRhci5UZXh0Q2FsZW5kYXKUag2PAAB0lIwLY2h1bmsuQ2h1bmuUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jaHVuay5odG1sI2NodW5rLkNodW5rlGoNjwAAdJSMB2NtZC5DbWSUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWQuaHRtbCNjbWQuQ21klGoNjwAAdJSMF2NvZGUuSW50ZXJhY3RpdmVDb25zb2xllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZS5odG1sI2NvZGUuSW50ZXJhY3RpdmVDb25zb2xllGoNjwAAdJSMG2NvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNjb2RlLkludGVyYWN0aXZlSW50ZXJwcmV0ZXKUag2PAAB0lIwQY29kZWNzLkNvZGVjSW5mb5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5Db2RlY0luZm+Uag2PAAB0lIwZY29kZWNzLkluY3JlbWVudGFsRGVjb2RlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5JbmNyZW1lbnRhbERlY29kZXKUag2PAAB0lIwZY29kZWNzLkluY3JlbWVudGFsRW5jb2RlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXKUag2PAAB0lIwTY29kZWNzLlN0cmVhbVJlYWRlcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1SZWFkZXKUag2PAAB0lIwZY29kZWNzLlN0cmVhbVJlYWRlcldyaXRlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjcy5TdHJlYW1SZWFkZXJXcml0ZXKUag2PAAB0lIwUY29kZWNzLlN0cmVhbVJlY29kZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNjb2RlY3MuU3RyZWFtUmVjb2RlcpRqDY8AAHSUjBNjb2RlY3MuU3RyZWFtV3JpdGVylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjY29kZWNzLlN0cmVhbVdyaXRlcpRqDY8AAHSUjBZjb2Rlb3AuQ29tbWFuZENvbXBpbGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZW9wLmh0bWwjY29kZW9wLkNvbW1hbmRDb21waWxlcpRqDY8AAHSUjA5jb2Rlb3AuQ29tcGlsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVvcC5odG1sI2NvZGVvcC5Db21waWxllGoNjwAAdJSMFGNvbGxlY3Rpb25zLkNoYWluTWFwlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5DaGFpbk1hcJRqDY8AAHSUjBNjb2xsZWN0aW9ucy5Db3VudGVylChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5Db3VudGVylGoNjwAAdJSMF2NvbGxlY3Rpb25zLk9yZGVyZWREaWN0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuaHRtbCNjb2xsZWN0aW9ucy5PcmRlcmVkRGljdJRqDY8AAHSUjBRjb2xsZWN0aW9ucy5Vc2VyRGljdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuVXNlckRpY3SUag2PAAB0lIwUY29sbGVjdGlvbnMuVXNlckxpc3SUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLlVzZXJMaXN0lGoNjwAAdJSMFmNvbGxlY3Rpb25zLlVzZXJTdHJpbmeUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLlVzZXJTdHJpbmeUag2PAAB0lIweY29sbGVjdGlvbnMuYWJjLkFzeW5jR2VuZXJhdG9ylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLmh0bWwjY29sbGVjdGlvbnMuYWJjLkFzeW5jR2VuZXJhdG9ylGoNjwAAdJSMHWNvbGxlY3Rpb25zLmFiYy5Bc3luY0l0ZXJhYmxllChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLmh0bWwjY29sbGVjdGlvbnMuYWJjLkFzeW5jSXRlcmFibGWUag2PAAB0lIwdY29sbGVjdGlvbnMuYWJjLkFzeW5jSXRlcmF0b3KUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuQXN5bmNJdGVyYXRvcpRqDY8AAHSUjBljb2xsZWN0aW9ucy5hYmMuQXdhaXRhYmxllChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLmh0bWwjY29sbGVjdGlvbnMuYWJjLkF3YWl0YWJsZZRqDY8AAHSUjBpjb2xsZWN0aW9ucy5hYmMuQnl0ZVN0cmluZ5QoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5CeXRlU3RyaW5nlGoNjwAAdJSMGGNvbGxlY3Rpb25zLmFiYy5DYWxsYWJsZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5DYWxsYWJsZZRqDY8AAHSUjBpjb2xsZWN0aW9ucy5hYmMuQ29sbGVjdGlvbpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5Db2xsZWN0aW9ulGoNjwAAdJSMGWNvbGxlY3Rpb25zLmFiYy5Db250YWluZXKUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVylGoNjwAAdJSMGWNvbGxlY3Rpb25zLmFiYy5Db3JvdXRpbmWUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuQ29yb3V0aW5llGoNjwAAdJSMGWNvbGxlY3Rpb25zLmFiYy5HZW5lcmF0b3KUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuR2VuZXJhdG9ylGoNjwAAdJSMGGNvbGxlY3Rpb25zLmFiYy5IYXNoYWJsZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5IYXNoYWJsZZRqDY8AAHSUjBljb2xsZWN0aW9ucy5hYmMuSXRlbXNWaWV3lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLmh0bWwjY29sbGVjdGlvbnMuYWJjLkl0ZW1zVmlld5RqDY8AAHSUjBhjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGWUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGWUag2PAAB0lIwYY29sbGVjdGlvbnMuYWJjLkl0ZXJhdG9ylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLmh0bWwjY29sbGVjdGlvbnMuYWJjLkl0ZXJhdG9ylGoNjwAAdJSMGGNvbGxlY3Rpb25zLmFiYy5LZXlzVmlld5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5LZXlzVmlld5RqDY8AAHSUjBdjb2xsZWN0aW9ucy5hYmMuTWFwcGluZ5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5NYXBwaW5nlGoNjwAAdJSMG2NvbGxlY3Rpb25zLmFiYy5NYXBwaW5nVmlld5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5NYXBwaW5nVmlld5RqDY8AAHSUjB5jb2xsZWN0aW9ucy5hYmMuTXV0YWJsZU1hcHBpbmeUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZU1hcHBpbmeUag2PAAB0lIwfY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2WUag2PAAB0lIwaY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZVNldJRqDY8AAHSUjBpjb2xsZWN0aW9ucy5hYmMuUmV2ZXJzaWJsZZQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5SZXZlcnNpYmxllGoNjwAAdJSMGGNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5odG1sI2NvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZZRqDY8AAHSUjBNjb2xsZWN0aW9ucy5hYmMuU2V0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLmh0bWwjY29sbGVjdGlvbnMuYWJjLlNldJRqDY8AAHSUjBVjb2xsZWN0aW9ucy5hYmMuU2l6ZWSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuU2l6ZWSUag2PAAB0lIwaY29sbGVjdGlvbnMuYWJjLlZhbHVlc1ZpZXeUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMuaHRtbCNjb2xsZWN0aW9ucy5hYmMuVmFsdWVzVmlld5RqDY8AAHSUjBdjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbGxlY3Rpb25zLmh0bWwjY29sbGVjdGlvbnMuZGVmYXVsdGRpY3SUag2PAAB0lIwRY29sbGVjdGlvbnMuZGVxdWWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1sI2NvbGxlY3Rpb25zLmRlcXVllGoNjwAAdJSMB2NvbXBsZXiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNjb21wbGV4lGoNjwAAdJSMG2NvbmN1cnJlbnQuZnV0dXJlcy5FeGVjdXRvcpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5FeGVjdXRvcpRqDY8AAHSUjBljb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJllChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLmh0bWwjY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZZRqDY8AAHSUjCZjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcpQoagqPAABqC48AAIxgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI2NvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9ylGoNjwAAdJSMJWNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3KUKGoKjwAAaguPAACMX2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbCNjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9ylGoNjwAAdJSMH2NvbmZpZ3BhcnNlci5CYXNpY0ludGVycG9sYXRpb26UKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQmFzaWNJbnRlcnBvbGF0aW9ulGoNjwAAdJSMGWNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VylGoNjwAAdJSMImNvbmZpZ3BhcnNlci5FeHRlbmRlZEludGVycG9sYXRpb26UKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuRXh0ZW5kZWRJbnRlcnBvbGF0aW9ulGoNjwAAdJSMHGNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXKUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNjb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VylGoNjwAAdJSMJmNvbnRleHRsaWIuQWJzdHJhY3RBc3luY0NvbnRleHRNYW5hZ2VylChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI2NvbnRleHRsaWIuQWJzdHJhY3RBc3luY0NvbnRleHRNYW5hZ2VylGoNjwAAdJSMIWNvbnRleHRsaWIuQWJzdHJhY3RDb250ZXh0TWFuYWdlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLkFic3RyYWN0Q29udGV4dE1hbmFnZXKUag2PAAB0lIwZY29udGV4dGxpYi5Bc3luY0V4aXRTdGFja5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLkFzeW5jRXhpdFN0YWNrlGoNjwAAdJSMG2NvbnRleHRsaWIuQ29udGV4dERlY29yYXRvcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNjb250ZXh0bGliLkNvbnRleHREZWNvcmF0b3KUag2PAAB0lIwUY29udGV4dGxpYi5FeGl0U3RhY2uUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0bGliLmh0bWwjY29udGV4dGxpYi5FeGl0U3RhY2uUag2PAAB0lIwTY29udGV4dHZhcnMuQ29udGV4dJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHR2YXJzLmh0bWwjY29udGV4dHZhcnMuQ29udGV4dJRqDY8AAHSUjBZjb250ZXh0dmFycy5Db250ZXh0VmFylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dHZhcnMuaHRtbCNjb250ZXh0dmFycy5Db250ZXh0VmFylGoNjwAAdJSMHWNvbnRleHR2YXJzLmNvbnRleHR2YXJzLlRva2VulChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dHZhcnMuaHRtbCNjb250ZXh0dmFycy5jb250ZXh0dmFycy5Ub2tlbpRqDY8AAHSUjAtjc3YuRGlhbGVjdJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5EaWFsZWN0lGoNjwAAdJSMDmNzdi5EaWN0UmVhZGVylChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LkRpY3RSZWFkZXKUag2PAAB0lIwOY3N2LkRpY3RXcml0ZXKUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YuRGljdFdyaXRlcpRqDY8AAHSUjAtjc3YuU25pZmZlcpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5TbmlmZmVylGoNjwAAdJSMCWNzdi5leGNlbJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1sI2Nzdi5leGNlbJRqDY8AAHSUjA1jc3YuZXhjZWxfdGFilChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LmV4Y2VsX3RhYpRqDY8AAHSUjBBjc3YudW5peF9kaWFsZWN0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LnVuaXhfZGlhbGVjdJRqDY8AAHSUjAxjdHlwZXMuQXJyYXmUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuQXJyYXmUag2PAAB0lIwZY3R5cGVzLkJpZ0VuZGlhblN0cnVjdHVyZZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5CaWdFbmRpYW5TdHJ1Y3R1cmWUag2PAAB0lIwLY3R5cGVzLkNETEyUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuQ0RMTJRqDY8AAHSUjA5jdHlwZXMuSFJFU1VMVJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5IUkVTVUxUlGoNjwAAdJSMFGN0eXBlcy5MaWJyYXJ5TG9hZGVylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLkxpYnJhcnlMb2FkZXKUag2PAAB0lIwcY3R5cGVzLkxpdHRsZUVuZGlhblN0cnVjdHVyZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5MaXR0bGVFbmRpYW5TdHJ1Y3R1cmWUag2PAAB0lIwNY3R5cGVzLk9sZURMTJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5PbGVETEyUag2PAAB0lIwMY3R5cGVzLlB5RExMlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLlB5RExMlGoNjwAAdJSMEGN0eXBlcy5TdHJ1Y3R1cmWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuU3RydWN0dXJllGoNjwAAdJSMDGN0eXBlcy5VbmlvbpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5VbmlvbpRqDY8AAHSUjA1jdHlwZXMuV2luRExMlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLldpbkRMTJRqDY8AAHSUjA1jdHlwZXMuX0NEYXRhlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9DRGF0YZRqDY8AAHSUjA9jdHlwZXMuX0Z1bmNQdHKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX0Z1bmNQdHKUag2PAAB0lIwPY3R5cGVzLl9Qb2ludGVylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLl9Qb2ludGVylGoNjwAAdJSME2N0eXBlcy5fU2ltcGxlQ0RhdGGUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuX1NpbXBsZUNEYXRhlGoNjwAAdJSMDWN0eXBlcy5jX2Jvb2yUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19ib29slGoNjwAAdJSMDWN0eXBlcy5jX2J5dGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19ieXRllGoNjwAAdJSMDWN0eXBlcy5jX2NoYXKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19jaGFylGoNjwAAdJSMD2N0eXBlcy5jX2NoYXJfcJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2NoYXJfcJRqDY8AAHSUjA9jdHlwZXMuY19kb3VibGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19kb3VibGWUag2PAAB0lIwOY3R5cGVzLmNfZmxvYXSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19mbG9hdJRqDY8AAHSUjAxjdHlwZXMuY19pbnSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19pbnSUag2PAAB0lIwOY3R5cGVzLmNfaW50MTaUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19pbnQxNpRqDY8AAHSUjA5jdHlwZXMuY19pbnQzMpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2ludDMylGoNjwAAdJSMDmN0eXBlcy5jX2ludDY0lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfaW50NjSUag2PAAB0lIwNY3R5cGVzLmNfaW50OJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2ludDiUag2PAAB0lIwNY3R5cGVzLmNfbG9uZ5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2xvbmeUag2PAAB0lIwTY3R5cGVzLmNfbG9uZ2RvdWJsZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX2xvbmdkb3VibGWUag2PAAB0lIwRY3R5cGVzLmNfbG9uZ2xvbmeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY19sb25nbG9uZ5RqDY8AAHSUjA5jdHlwZXMuY19zaG9ydJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3Nob3J0lGoNjwAAdJSMD2N0eXBlcy5jX3NpemVfdJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3NpemVfdJRqDY8AAHSUjBBjdHlwZXMuY19zc2l6ZV90lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfc3NpemVfdJRqDY8AAHSUjA5jdHlwZXMuY191Ynl0ZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3VieXRllGoNjwAAdJSMDWN0eXBlcy5jX3VpbnSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY191aW50lGoNjwAAdJSMD2N0eXBlcy5jX3VpbnQxNpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3VpbnQxNpRqDY8AAHSUjA9jdHlwZXMuY191aW50MzKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY191aW50MzKUag2PAAB0lIwPY3R5cGVzLmNfdWludDY0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdWludDY0lGoNjwAAdJSMDmN0eXBlcy5jX3VpbnQ4lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdWludDiUag2PAAB0lIwOY3R5cGVzLmNfdWxvbmeUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY191bG9uZ5RqDY8AAHSUjBJjdHlwZXMuY191bG9uZ2xvbmeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY191bG9uZ2xvbmeUag2PAAB0lIwPY3R5cGVzLmNfdXNob3J0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLmNfdXNob3J0lGoNjwAAdJSMD2N0eXBlcy5jX3ZvaWRfcJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3ZvaWRfcJRqDY8AAHSUjA5jdHlwZXMuY193Y2hhcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy5jX3djaGFylGoNjwAAdJSMEGN0eXBlcy5jX3djaGFyX3CUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMuY193Y2hhcl9wlGoNjwAAdJSMEGN0eXBlcy5weV9vYmplY3SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMucHlfb2JqZWN0lGoNjwAAdJSMFmN1cnNlcy50ZXh0cGFkLlRleHRib3iUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMudGV4dHBhZC5UZXh0Ym94lGoNjwAAdJSMEWRhdGFjbGFzc2VzLkZpZWxklChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0YWNsYXNzZXMuaHRtbCNkYXRhY2xhc3Nlcy5GaWVsZJRqDY8AAHSUjA1kYXRldGltZS5kYXRllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRllGoNjwAAdJSMEWRhdGV0aW1lLmRhdGV0aW1llChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRldGltZZRqDY8AAHSUjA1kYXRldGltZS50aW1llChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1llGoNjwAAdJSMEmRhdGV0aW1lLnRpbWVkZWx0YZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUudGltZWRlbHRhlGoNjwAAdJSMEWRhdGV0aW1lLnRpbWV6b25llChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS50aW1lem9uZZRqDY8AAHSUjA9kYXRldGltZS50emluZm+UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLnR6aW5mb5RqDY8AAHSUjBRkZWNpbWFsLkJhc2ljQ29udGV4dJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkJhc2ljQ29udGV4dJRqDY8AAHSUjA9kZWNpbWFsLkNsYW1wZWSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5DbGFtcGVklGoNjwAAdJSMD2RlY2ltYWwuQ29udGV4dJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkNvbnRleHSUag2PAAB0lIwPZGVjaW1hbC5EZWNpbWFslChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGVjaW1hbJRqDY8AAHSUjBhkZWNpbWFsLkRlY2ltYWxFeGNlcHRpb26UKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWNpbWFsRXhjZXB0aW9ulGoNjwAAdJSMFmRlY2ltYWwuRGVmYXVsdENvbnRleHSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5EZWZhdWx0Q29udGV4dJRqDY8AAHSUjBZkZWNpbWFsLkRpdmlzaW9uQnlaZXJvlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuRGl2aXNpb25CeVplcm+Uag2PAAB0lIwXZGVjaW1hbC5FeHRlbmRlZENvbnRleHSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC5FeHRlbmRlZENvbnRleHSUag2PAAB0lIwWZGVjaW1hbC5GbG9hdE9wZXJhdGlvbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkZsb2F0T3BlcmF0aW9ulGoNjwAAdJSMD2RlY2ltYWwuSW5leGFjdJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLkluZXhhY3SUag2PAAB0lIwYZGVjaW1hbC5JbnZhbGlkT3BlcmF0aW9ulChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuSW52YWxpZE9wZXJhdGlvbpRqDY8AAHSUjBBkZWNpbWFsLk92ZXJmbG93lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuT3ZlcmZsb3eUag2PAAB0lIwPZGVjaW1hbC5Sb3VuZGVklChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwuUm91bmRlZJRqDY8AAHSUjBFkZWNpbWFsLlN1Ym5vcm1hbJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLlN1Ym5vcm1hbJRqDY8AAHSUjBFkZWNpbWFsLlVuZGVyZmxvd5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLlVuZGVyZmxvd5RqDY8AAHSUjARkaWN0lChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0lGoNjwAAdJSMDmRpZmZsaWIuRGlmZmVylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZsaWIuRGlmZmVylGoNjwAAdJSMEGRpZmZsaWIuSHRtbERpZmaUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjZGlmZmxpYi5IdG1sRGlmZpRqDY8AAHSUjBdkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcpRqDY8AAHSUjAxkaXMuQnl0ZWNvZGWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNkaXMuQnl0ZWNvZGWUag2PAAB0lIwPZGlzLkluc3RydWN0aW9ulChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjZGlzLkluc3RydWN0aW9ulGoNjwAAdJSMHWRpc3R1dGlscy5jY29tcGlsZXIuQ0NvbXBpbGVylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY2NvbXBpbGVyLkNDb21waWxlcpRqDY8AAHSUjBVkaXN0dXRpbHMuY21kLkNvbW1hbmSUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jbWQuQ29tbWFuZJRqDY8AAHSUjCVkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9tc2kuYmRpc3RfbXNplChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9tc2kuYmRpc3RfbXNplGoNjwAAdJSMI2Rpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5LmJ1aWxkX3B5lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weS5idWlsZF9weZRqDY8AAHSUjChkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weS5idWlsZF9weV8ydG8zlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weS5idWlsZF9weV8ydG8zlGoNjwAAdJSMFmRpc3R1dGlscy5jb3JlLkNvbW1hbmSUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2Rpc3R1dGlscy5jb3JlLkNvbW1hbmSUag2PAAB0lIwbZGlzdHV0aWxzLmNvcmUuRGlzdHJpYnV0aW9ulChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29yZS5EaXN0cmlidXRpb26Uag2PAAB0lIwYZGlzdHV0aWxzLmNvcmUuRXh0ZW5zaW9ulChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMuY29yZS5FeHRlbnNpb26Uag2PAAB0lIwiZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdJQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYXBpcmVmLmh0bWwjZGlzdHV0aWxzLmZhbmN5X2dldG9wdC5GYW5jeUdldG9wdJRqDY8AAHSUjBxkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9hcGlyZWYuaHRtbCNkaXN0dXRpbHMudGV4dF9maWxlLlRleHRGaWxllGoNjwAAdJSME2RvY3Rlc3QuRGVidWdSdW5uZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5EZWJ1Z1J1bm5lcpRqDY8AAHSUjA9kb2N0ZXN0LkRvY1Rlc3SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0lGoNjwAAdJSMFWRvY3Rlc3QuRG9jVGVzdEZpbmRlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkRvY1Rlc3RGaW5kZXKUag2PAAB0lIwVZG9jdGVzdC5Eb2NUZXN0UGFyc2VylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuRG9jVGVzdFBhcnNlcpRqDY8AAHSUjBVkb2N0ZXN0LkRvY1Rlc3RSdW5uZXKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC5Eb2NUZXN0UnVubmVylGoNjwAAdJSMD2RvY3Rlc3QuRXhhbXBsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LkV4YW1wbGWUag2PAAB0lIwVZG9jdGVzdC5PdXRwdXRDaGVja2VylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QuT3V0cHV0Q2hlY2tlcpRqDY8AAHSUjBVlbWFpbC5jaGFyc2V0LkNoYXJzZXSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWwjZW1haWwuY2hhcnNldC5DaGFyc2V0lGoNjwAAdJSMI2VtYWlsLmNvbnRlbnRtYW5hZ2VyLkNvbnRlbnRNYW5hZ2VylChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIuaHRtbCNlbWFpbC5jb250ZW50bWFuYWdlci5Db250ZW50TWFuYWdlcpRqDY8AAHSUjB5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3KUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IuaHRtbCNlbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3KUag2PAAB0lIwgZW1haWwuZ2VuZXJhdG9yLkRlY29kZWRHZW5lcmF0b3KUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IuaHRtbCNlbWFpbC5nZW5lcmF0b3IuRGVjb2RlZEdlbmVyYXRvcpRqDY8AAHSUjBllbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9ylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWwjZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvcpRqDY8AAHSUjBNlbWFpbC5oZWFkZXIuSGVhZGVylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWwjZW1haWwuaGVhZGVyLkhlYWRlcpRqDY8AAHSUjBxlbWFpbC5oZWFkZXJyZWdpc3RyeS5BZGRyZXNzlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5BZGRyZXNzlGoNjwAAdJSMImVtYWlsLmhlYWRlcnJlZ2lzdHJ5LkFkZHJlc3NIZWFkZXKUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkFkZHJlc3NIZWFkZXKUag2PAAB0lIwfZW1haWwuaGVhZGVycmVnaXN0cnkuQmFzZUhlYWRlcpQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuQmFzZUhlYWRlcpRqDY8AAHSUjC1lbWFpbC5oZWFkZXJyZWdpc3RyeS5Db250ZW50RGlzcG9zaXRpb25IZWFkZXKUKGoKjwAAaguPAACMaWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcpRqDY8AAHSUjCxlbWFpbC5oZWFkZXJyZWdpc3RyeS5Db250ZW50VHJhbnNmZXJFbmNvZGluZ5QoagqPAABqC48AAIxoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuQ29udGVudFRyYW5zZmVyRW5jb2RpbmeUag2PAAB0lIwmZW1haWwuaGVhZGVycmVnaXN0cnkuQ29udGVudFR5cGVIZWFkZXKUKGoKjwAAaguPAACMYmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkNvbnRlbnRUeXBlSGVhZGVylGoNjwAAdJSMH2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkRhdGVIZWFkZXKUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkRhdGVIZWFkZXKUag2PAAB0lIwaZW1haWwuaGVhZGVycmVnaXN0cnkuR3JvdXCUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lkdyb3VwlGoNjwAAdJSMI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LkhlYWRlclJlZ2lzdHJ5lChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5IZWFkZXJSZWdpc3RyeZRqDY8AAHSUjCZlbWFpbC5oZWFkZXJyZWdpc3RyeS5NSU1FVmVyc2lvbkhlYWRlcpQoagqPAABqC48AAIxiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5Lmh0bWwjZW1haWwuaGVhZGVycmVnaXN0cnkuTUlNRVZlcnNpb25IZWFkZXKUag2PAAB0lIwsZW1haWwuaGVhZGVycmVnaXN0cnkuUGFyYW1ldGVyaXplZE1JTUVIZWFkZXKUKGoKjwAAaguPAACMaGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LlBhcmFtZXRlcml6ZWRNSU1FSGVhZGVylGoNjwAAdJSMKGVtYWlsLmhlYWRlcnJlZ2lzdHJ5LlNpbmdsZUFkZHJlc3NIZWFkZXKUKGoKjwAAaguPAACMZGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1sI2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LlNpbmdsZUFkZHJlc3NIZWFkZXKUag2PAAB0lIwnZW1haWwuaGVhZGVycmVnaXN0cnkuVW5zdHJ1Y3R1cmVkSGVhZGVylChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkuaHRtbCNlbWFpbC5oZWFkZXJyZWdpc3RyeS5VbnN0cnVjdHVyZWRIZWFkZXKUag2PAAB0lIwaZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2WUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWwjZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2WUag2PAAB0lIwWZW1haWwubWVzc2FnZS5NSU1FUGFydJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1JTUVQYXJ0lGoNjwAAdJSMFWVtYWlsLm1lc3NhZ2UuTWVzc2FnZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbCNlbWFpbC5tZXNzYWdlLk1lc3NhZ2WUag2PAAB0lIwmZW1haWwubWltZS5hcHBsaWNhdGlvbi5NSU1FQXBwbGljYXRpb26UKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS5hcHBsaWNhdGlvbi5NSU1FQXBwbGljYXRpb26Uag2PAAB0lIwaZW1haWwubWltZS5hdWRpby5NSU1FQXVkaW+UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS5hdWRpby5NSU1FQXVkaW+Uag2PAAB0lIwYZW1haWwubWltZS5iYXNlLk1JTUVCYXNllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWltZS5odG1sI2VtYWlsLm1pbWUuYmFzZS5NSU1FQmFzZZRqDY8AAHSUjBplbWFpbC5taW1lLmltYWdlLk1JTUVJbWFnZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLm1pbWUuaHRtbCNlbWFpbC5taW1lLmltYWdlLk1JTUVJbWFnZZRqDY8AAHSUjB5lbWFpbC5taW1lLm1lc3NhZ2UuTUlNRU1lc3NhZ2WUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS5tZXNzYWdlLk1JTUVNZXNzYWdllGoNjwAAdJSMImVtYWlsLm1pbWUubXVsdGlwYXJ0Lk1JTUVNdWx0aXBhcnSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5taW1lLmh0bWwjZW1haWwubWltZS5tdWx0aXBhcnQuTUlNRU11bHRpcGFydJRqDY8AAHSUjChlbWFpbC5taW1lLm5vbm11bHRpcGFydC5NSU1FTm9uTXVsdGlwYXJ0lChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWltZS5odG1sI2VtYWlsLm1pbWUubm9ubXVsdGlwYXJ0Lk1JTUVOb25NdWx0aXBhcnSUag2PAAB0lIwYZW1haWwubWltZS50ZXh0Lk1JTUVUZXh0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWltZS5odG1sI2VtYWlsLm1pbWUudGV4dC5NSU1FVGV4dJRqDY8AAHSUjBxlbWFpbC5wYXJzZXIuQnl0ZXNGZWVkUGFyc2VylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLkJ5dGVzRmVlZFBhcnNlcpRqDY8AAHSUjB5lbWFpbC5wYXJzZXIuQnl0ZXNIZWFkZXJQYXJzZXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5wYXJzZXIuaHRtbCNlbWFpbC5wYXJzZXIuQnl0ZXNIZWFkZXJQYXJzZXKUag2PAAB0lIwYZW1haWwucGFyc2VyLkJ5dGVzUGFyc2VylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLkJ5dGVzUGFyc2VylGoNjwAAdJSMF2VtYWlsLnBhcnNlci5GZWVkUGFyc2VylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWwjZW1haWwucGFyc2VyLkZlZWRQYXJzZXKUag2PAAB0lIwZZW1haWwucGFyc2VyLkhlYWRlclBhcnNlcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLnBhcnNlci5IZWFkZXJQYXJzZXKUag2PAAB0lIwTZW1haWwucGFyc2VyLlBhcnNlcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBhcnNlci5odG1sI2VtYWlsLnBhcnNlci5QYXJzZXKUag2PAAB0lIwVZW1haWwucG9saWN5LkNvbXBhdDMylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LkNvbXBhdDMylGoNjwAAdJSMGGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLnBvbGljeS5odG1sI2VtYWlsLnBvbGljeS5FbWFpbFBvbGljeZRqDY8AAHSUjBNlbWFpbC5wb2xpY3kuUG9saWN5lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWwjZW1haWwucG9saWN5LlBvbGljeZRqDY8AAHSUjAllbnVtLkVudW2UKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbnVtLmh0bWwjZW51bS5FbnVtlGoNjwAAdJSMCWVudW0uRmxhZ5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VudW0uaHRtbCNlbnVtLkZsYWeUag2PAAB0lIwMZW51bS5JbnRFbnVtlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW51bS5odG1sI2VudW0uSW50RW51bZRqDY8AAHSUjAxlbnVtLkludEZsYWeUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbnVtLmh0bWwjZW51bS5JbnRGbGFnlGoNjwAAdJSMCWVudW0uYXV0b5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VudW0uaHRtbCNlbnVtLmF1dG+Uag2PAAB0lIwOZmlsZWNtcC5kaXJjbXCUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlY21wLmh0bWwjZmlsZWNtcC5kaXJjbXCUag2PAAB0lIwTZmlsZWlucHV0LkZpbGVJbnB1dJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVpbnB1dC5odG1sI2ZpbGVpbnB1dC5GaWxlSW5wdXSUag2PAAB0lIwFZmxvYXSUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmbG9hdJRqDY8AAHSUjBtmb3JtYXR0ZXIuQWJzdHJhY3RGb3JtYXR0ZXKUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuQWJzdHJhY3RGb3JtYXR0ZXKUag2PAAB0lIwYZm9ybWF0dGVyLkFic3RyYWN0V3JpdGVylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLkFic3RyYWN0V3JpdGVylGoNjwAAdJSMFGZvcm1hdHRlci5EdW1iV3JpdGVylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLkR1bWJXcml0ZXKUag2PAAB0lIwXZm9ybWF0dGVyLk51bGxGb3JtYXR0ZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXIuTnVsbEZvcm1hdHRlcpRqDY8AAHSUjBRmb3JtYXR0ZXIuTnVsbFdyaXRlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI2Zvcm1hdHRlci5OdWxsV3JpdGVylGoNjwAAdJSMEmZyYWN0aW9ucy5GcmFjdGlvbpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZyYWN0aW9ucy5odG1sI2ZyYWN0aW9ucy5GcmFjdGlvbpRqDY8AAHSUjAlmcm96ZW5zZXSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Zyb3plbnNldJRqDY8AAHSUjApmdHBsaWIuRlRQlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnRwbGliLmh0bWwjZnRwbGliLkZUUJRqDY8AAHSUjA5mdHBsaWIuRlRQX1RMU5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1sI2Z0cGxpYi5GVFBfVExTlGoNjwAAdJSMF2Z1bmN0b29scy5wYXJ0aWFsbWV0aG9klChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2SUag2PAAB0lIweZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNobWV0aG9klChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWwjZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNobWV0aG9klGoNjwAAdJSMF2dldHRleHQuR05VVHJhbnNsYXRpb25zlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ2V0dGV4dC5odG1sI2dldHRleHQuR05VVHJhbnNsYXRpb25zlGoNjwAAdJSMGGdldHRleHQuTnVsbFRyYW5zbGF0aW9uc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHRleHQuaHRtbCNnZXR0ZXh0Lk51bGxUcmFuc2xhdGlvbnOUag2PAAB0lIwNZ3ppcC5HemlwRmlsZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2d6aXAuaHRtbCNnemlwLkd6aXBGaWxllGoNjwAAdJSMFmh0bWwucGFyc2VyLkhUTUxQYXJzZXKUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLnBhcnNlci5odG1sI2h0bWwucGFyc2VyLkhUTUxQYXJzZXKUag2PAAB0lIwPaHR0cC5IVFRQU3RhdHVzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5odG1sI2h0dHAuSFRUUFN0YXR1c5RqDY8AAHSUjBpodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb26Uag2PAAB0lIwYaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQUmVzcG9uc2WUag2PAAB0lIwbaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9ulChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jbGllbnQuaHRtbCNodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb26Uag2PAAB0lIwVaHR0cC5jb29raWVqYXIuQ29va2lllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWWUag2PAAB0lIwYaHR0cC5jb29raWVqYXIuQ29va2llSmFylChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWVKYXKUag2PAAB0lIwbaHR0cC5jb29raWVqYXIuQ29va2llUG9saWN5lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5Db29raWVQb2xpY3mUag2PAAB0lIwiaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeZQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuRGVmYXVsdENvb2tpZVBvbGljeZRqDY8AAHSUjBxodHRwLmNvb2tpZWphci5GaWxlQ29va2llSmFylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNodHRwLmNvb2tpZWphci5GaWxlQ29va2llSmFylGoNjwAAdJSMG2h0dHAuY29va2llamFyLkxXUENvb2tpZUphcpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjaHR0cC5jb29raWVqYXIuTFdQQ29va2llSmFylGoNjwAAdJSMH2h0dHAuY29va2llamFyLk1vemlsbGFDb29raWVKYXKUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1sI2h0dHAuY29va2llamFyLk1vemlsbGFDb29raWVKYXKUag2PAAB0lIwXaHR0cC5jb29raWVzLkJhc2VDb29raWWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNodHRwLmNvb2tpZXMuQmFzZUNvb2tpZZRqDY8AAHSUjBNodHRwLmNvb2tpZXMuTW9yc2VslChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjaHR0cC5jb29raWVzLk1vcnNlbJRqDY8AAHSUjBlodHRwLmNvb2tpZXMuU2ltcGxlQ29va2lllChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjaHR0cC5jb29raWVzLlNpbXBsZUNvb2tpZZRqDY8AAHSUjCJodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVylGoNjwAAdJSMIWh0dHAuc2VydmVyLkNHSUhUVFBSZXF1ZXN0SGFuZGxlcpQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuc2VydmVyLmh0bWwjaHR0cC5zZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVylGoNjwAAdJSMFmh0dHAuc2VydmVyLkhUVFBTZXJ2ZXKUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAuc2VydmVyLkhUVFBTZXJ2ZXKUag2PAAB0lIwkaHR0cC5zZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVylChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5zZXJ2ZXIuaHRtbCNodHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXKUag2PAAB0lIwfaHR0cC5zZXJ2ZXIuVGhyZWFkaW5nSFRUUFNlcnZlcpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuc2VydmVyLmh0bWwjaHR0cC5zZXJ2ZXIuVGhyZWFkaW5nSFRUUFNlcnZlcpRqDY8AAHSUjA1pbWFwbGliLklNQVA0lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1hcGxpYi5odG1sI2ltYXBsaWIuSU1BUDSUag2PAAB0lIwRaW1hcGxpYi5JTUFQNF9TU0yUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNF9TU0yUag2PAAB0lIwUaW1hcGxpYi5JTUFQNF9zdHJlYW2UKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWFwbGliLmh0bWwjaW1hcGxpYi5JTUFQNF9zdHJlYW2Uag2PAAB0lIwQaW1wLk51bGxJbXBvcnRlcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcC5odG1sI2ltcC5OdWxsSW1wb3J0ZXKUag2PAAB0lIwdaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXKUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlcpRqDY8AAHSUjBhpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXKUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXKUag2PAAB0lIwUaW1wb3J0bGliLmFiYy5GaW5kZXKUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkZpbmRlcpRqDY8AAHSUjBtpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXKUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXKUag2PAAB0lIwUaW1wb3J0bGliLmFiYy5Mb2FkZXKUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLkxvYWRlcpRqDY8AAHSUjBxpbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlcpRqDY8AAHSUjB1pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlcpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVylGoNjwAAdJSMHGltcG9ydGxpYi5hYmMuUmVzb3VyY2VMb2FkZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLlJlc291cmNlTG9hZGVylGoNjwAAdJSMHGltcG9ydGxpYi5hYmMuUmVzb3VyY2VSZWFkZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIuYWJjLlJlc291cmNlUmVhZGVylGoNjwAAdJSMGmltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXKUag2PAAB0lIwjaW1wb3J0bGliLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlcpRqDY8AAHSUjCdpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXKUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXKUag2PAAB0lIweaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVylGoNjwAAdJSMImltcG9ydGxpYi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXKUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LkZyb3plbkltcG9ydGVylGoNjwAAdJSMHmltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlY5QoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlY5RqDY8AAHSUjB5pbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXKUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXKUag2PAAB0lIwkaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVylGoNjwAAdJSMKGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXKUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIuaHRtbCNpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVylGoNjwAAdJSMKWltcG9ydGxpYi5tYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVylChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLm1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXKUag2PAAB0lIwZaW1wb3J0bGliLnV0aWwuTGF6eUxvYWRlcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5odG1sI2ltcG9ydGxpYi51dGlsLkxhenlMb2FkZXKUag2PAAB0lIwWaW5zcGVjdC5Cb3VuZEFyZ3VtZW50c5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LkJvdW5kQXJndW1lbnRzlGoNjwAAdJSMEWluc3BlY3QuUGFyYW1ldGVylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuUGFyYW1ldGVylGoNjwAAdJSMEWluc3BlY3QuU2lnbmF0dXJllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QuU2lnbmF0dXJllGoNjwAAdJSMA2ludJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2ludJRqDY8AAHSUjBFpby5CdWZmZXJlZElPQmFzZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRJT0Jhc2WUag2PAAB0lIwRaW8uQnVmZmVyZWRSV1BhaXKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkUldQYWlylGoNjwAAdJSMEWlvLkJ1ZmZlcmVkUmFuZG9tlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5CdWZmZXJlZFJhbmRvbZRqDY8AAHSUjBFpby5CdWZmZXJlZFJlYWRlcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uQnVmZmVyZWRSZWFkZXKUag2PAAB0lIwRaW8uQnVmZmVyZWRXcml0ZXKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLkJ1ZmZlcmVkV3JpdGVylGoNjwAAdJSMCmlvLkJ5dGVzSU+UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLkJ5dGVzSU+Uag2PAAB0lIwJaW8uRmlsZUlPlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5GaWxlSU+Uag2PAAB0lIwJaW8uSU9CYXNllChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5JT0Jhc2WUag2PAAB0lIwcaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcpRqDY8AAHSUjAxpby5SYXdJT0Jhc2WUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pby5odG1sI2lvLlJhd0lPQmFzZZRqDY8AAHSUjAtpby5TdHJpbmdJT5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uU3RyaW5nSU+Uag2PAAB0lIwNaW8uVGV4dElPQmFzZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lvLmh0bWwjaW8uVGV4dElPQmFzZZRqDY8AAHSUjBBpby5UZXh0SU9XcmFwcGVylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby5UZXh0SU9XcmFwcGVylGoNjwAAdJSMFWlwYWRkcmVzcy5JUHY0QWRkcmVzc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0QWRkcmVzc5RqDY8AAHSUjBdpcGFkZHJlc3MuSVB2NEludGVyZmFjZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0SW50ZXJmYWNllGoNjwAAdJSMFWlwYWRkcmVzcy5JUHY0TmV0d29ya5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYWRkcmVzcy5odG1sI2lwYWRkcmVzcy5JUHY0TmV0d29ya5RqDY8AAHSUjBVpcGFkZHJlc3MuSVB2NkFkZHJlc3OUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkFkZHJlc3OUag2PAAB0lIwXaXBhZGRyZXNzLklQdjZJbnRlcmZhY2WUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2NkludGVyZmFjZZRqDY8AAHSUjBVpcGFkZHJlc3MuSVB2Nk5ldHdvcmuUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbCNpcGFkZHJlc3MuSVB2Nk5ldHdvcmuUag2PAAB0lIwQanNvbi5KU09ORGVjb2RlcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNqc29uLkpTT05EZWNvZGVylGoNjwAAdJSMEGpzb24uSlNPTkVuY29kZXKUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWwjanNvbi5KU09ORW5jb2RlcpRqDY8AAHSUjARsaXN0lChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNsaXN0lGoNjwAAdJSME2xvZ2dpbmcuRmlsZUhhbmRsZXKUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5GaWxlSGFuZGxlcpRqDY8AAHSUjA5sb2dnaW5nLkZpbHRlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZpbHRlcpRqDY8AAHSUjBFsb2dnaW5nLkZvcm1hdHRlcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkZvcm1hdHRlcpRqDY8AAHSUjA9sb2dnaW5nLkhhbmRsZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy5IYW5kbGVylGoNjwAAdJSMEWxvZ2dpbmcuTG9nUmVjb3JklChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nUmVjb3JklGoNjwAAdJSMDmxvZ2dpbmcuTG9nZ2VylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dpbmcuTG9nZ2VylGoNjwAAdJSMFWxvZ2dpbmcuTG9nZ2VyQWRhcHRlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnaW5nLkxvZ2dlckFkYXB0ZXKUag2PAAB0lIwTbG9nZ2luZy5OdWxsSGFuZGxlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLk51bGxIYW5kbGVylGoNjwAAdJSMFWxvZ2dpbmcuU3RyZWFtSGFuZGxlcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLlN0cmVhbUhhbmRsZXKUag2PAAB0lIwkbG9nZ2luZy5oYW5kbGVycy5CYXNlUm90YXRpbmdIYW5kbGVylChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuQmFzZVJvdGF0aW5nSGFuZGxlcpRqDY8AAHSUjCFsb2dnaW5nLmhhbmRsZXJzLkJ1ZmZlcmluZ0hhbmRsZXKUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVylGoNjwAAdJSMIGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVylChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVylGoNjwAAdJSMHGxvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlcpRqDY8AAHSUjB5sb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXKUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVylGoNjwAAdJSMImxvZ2dpbmcuaGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXKUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlcpRqDY8AAHSUjB1sb2dnaW5nLmhhbmRsZXJzLlF1ZXVlSGFuZGxlcpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlF1ZXVlSGFuZGxlcpRqDY8AAHSUjB5sb2dnaW5nLmhhbmRsZXJzLlF1ZXVlTGlzdGVuZXKUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVylGoNjwAAdJSMJGxvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcpQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXKUag2PAAB0lIwcbG9nZ2luZy5oYW5kbGVycy5TTVRQSGFuZGxlcpQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVylGoNjwAAdJSMHmxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXKUag2PAAB0lIwebG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVylChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcpRqDY8AAHSUjClsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcpQoagqPAABqC48AAIxhaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcpRqDY8AAHSUjCNsb2dnaW5nLmhhbmRsZXJzLldhdGNoZWRGaWxlSGFuZGxlcpQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNsb2dnaW5nLmhhbmRsZXJzLldhdGNoZWRGaWxlSGFuZGxlcpRqDY8AAHSUjBNsem1hLkxaTUFDb21wcmVzc29ylChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuTFpNQUNvbXByZXNzb3KUag2PAAB0lIwVbHptYS5MWk1BRGVjb21wcmVzc29ylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuTFpNQURlY29tcHJlc3NvcpRqDY8AAHSUjA1sem1hLkxaTUFGaWxllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbHptYS5odG1sI2x6bWEuTFpNQUZpbGWUag2PAAB0lIwNbWFpbGJveC5CYWJ5bJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LkJhYnlslGoNjwAAdJSMFG1haWxib3guQmFieWxNZXNzYWdllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3guQmFieWxNZXNzYWdllGoNjwAAdJSMCm1haWxib3guTUiUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NSJRqDY8AAHSUjBFtYWlsYm94Lk1ITWVzc2FnZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1ITWVzc2FnZZRqDY8AAHSUjAxtYWlsYm94Lk1NREaUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGlGoNjwAAdJSME21haWxib3guTU1ERk1lc3NhZ2WUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NTURGTWVzc2FnZZRqDY8AAHSUjA9tYWlsYm94Lk1haWxib3iUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC5NYWlsYm94lGoNjwAAdJSMD21haWxib3guTWFpbGRpcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXKUag2PAAB0lIwWbWFpbGJveC5NYWlsZGlyTWVzc2FnZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1haWxkaXJNZXNzYWdllGoNjwAAdJSMD21haWxib3guTWVzc2FnZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94Lk1lc3NhZ2WUag2PAAB0lIwMbWFpbGJveC5tYm94lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveJRqDY8AAHSUjBNtYWlsYm94Lm1ib3hNZXNzYWdllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gubWJveE1lc3NhZ2WUag2PAAB0lIwKbWVtb3J5dmlld5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbWVtb3J5dmlld5RqDY8AAHSUjBNtaW1ldHlwZXMuTWltZVR5cGVzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWltZXR5cGVzLmh0bWwjbWltZXR5cGVzLk1pbWVUeXBlc5RqDY8AAHSUjAltbWFwLm1tYXCUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbWFwLmh0bWwjbW1hcC5tbWFwlGoNjwAAdJSMGW1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tb2R1bGVmaW5kZXIuaHRtbCNtb2R1bGVmaW5kZXIuTW9kdWxlRmluZGVylGoNjwAAdJSMDW1zaWxpYi5CaW5hcnmUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQmluYXJ5lGoNjwAAdJSMCm1zaWxpYi5DQUKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuQ0FClGoNjwAAdJSMDm1zaWxpYi5Db250cm9slChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpbGliLkNvbnRyb2yUag2PAAB0lIwNbXNpbGliLkRpYWxvZ5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaWFsb2eUag2PAAB0lIwQbXNpbGliLkRpcmVjdG9yeZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5EaXJlY3RvcnmUag2PAAB0lIwObXNpbGliLkZlYXR1cmWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2lsaWIuRmVhdHVyZZRqDY8AAHSUjBdtc2lsaWIuUmFkaW9CdXR0b25Hcm91cJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI21zaWxpYi5SYWRpb0J1dHRvbkdyb3VwlGoNjwAAdJSMF211bHRpcHJvY2Vzc2luZy5CYXJyaWVylChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkJhcnJpZXKUag2PAAB0lIwgbXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmWUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuQm91bmRlZFNlbWFwaG9yZZRqDY8AAHSUjBltdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9ulChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbpRqDY8AAHSUjBVtdWx0aXByb2Nlc3NpbmcuRXZlbnSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuRXZlbnSUag2PAAB0lIwdbXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWWUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZZRqDY8AAHSUjBRtdWx0aXByb2Nlc3NpbmcuTG9ja5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5Mb2NrlGoNjwAAdJSMF211bHRpcHJvY2Vzc2luZy5Qcm9jZXNzlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3OUag2PAAB0lIwVbXVsdGlwcm9jZXNzaW5nLlF1ZXVllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlF1ZXVllGoNjwAAdJSMFW11bHRpcHJvY2Vzc2luZy5STG9ja5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5STG9ja5RqDY8AAHSUjBltdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JllChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZZRqDY8AAHSUjBttdWx0aXByb2Nlc3NpbmcuU2ltcGxlUXVldWWUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuU2ltcGxlUXVldWWUag2PAAB0lIwlbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbpQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb26Uag2PAAB0lIwjbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXKUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcpRqDY8AAHSUjCRtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXKUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMuQmFzZU1hbmFnZXKUag2PAAB0lIwibXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLkJhc2VQcm94eZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5CYXNlUHJveHmUag2PAAB0lIwibXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLk5hbWVzcGFjZZQoagqPAABqC48AAIxZaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5OYW1lc3BhY2WUag2PAAB0lIwsbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlNoYXJlZE1lbW9yeU1hbmFnZXKUKGoKjwAAaguPAACMcWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TaGFyZWRNZW1vcnlNYW5hZ2VylGoNjwAAdJSMJG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlcpQoagqPAABqC48AAIxbaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlcpRqDY8AAHSUjCBtdWx0aXByb2Nlc3NpbmcucG9vbC5Bc3luY1Jlc3VsdJQoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy5wb29sLkFzeW5jUmVzdWx0lGoNjwAAdJSMGW11bHRpcHJvY2Vzc2luZy5wb29sLlBvb2yUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29slGoNjwAAdJSMK211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5LlNoYXJlYWJsZUxpc3SUKGoKjwAAaguPAACMcGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5odG1sI211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5LlNoYXJlYWJsZUxpc3SUag2PAAB0lIwqbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuU2hhcmVkTWVtb3J5lChqCo8AAGoLjwAAjG9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnNoYXJlZF9tZW1vcnkuaHRtbCNtdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeS5TaGFyZWRNZW1vcnmUag2PAAB0lIwLbmV0cmMubmV0cmOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uZXRyYy5odG1sI25ldHJjLm5ldHJjlGoNjwAAdJSMDG5udHBsaWIuTk5UUJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFCUag2PAAB0lIwQbm50cGxpYi5OTlRQX1NTTJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbCNubnRwbGliLk5OVFBfU1NMlGoNjwAAdJSMD251bWJlcnMuQ29tcGxleJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLkNvbXBsZXiUag2PAAB0lIwQbnVtYmVycy5JbnRlZ3JhbJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L251bWJlcnMuaHRtbCNudW1iZXJzLkludGVncmFslGoNjwAAdJSMDm51bWJlcnMuTnVtYmVylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbnVtYmVycy5odG1sI251bWJlcnMuTnVtYmVylGoNjwAAdJSMEG51bWJlcnMuUmF0aW9uYWyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5SYXRpb25hbJRqDY8AAHSUjAxudW1iZXJzLlJlYWyUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9udW1iZXJzLmh0bWwjbnVtYmVycy5SZWFslGoNjwAAdJSMBm9iamVjdJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI29iamVjdJRqDY8AAHSUjBRvcHRwYXJzZS5PcHRpb25Hcm91cJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UuT3B0aW9uR3JvdXCUag2PAAB0lIwVb3B0cGFyc2UuT3B0aW9uUGFyc2VylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS5PcHRpb25QYXJzZXKUag2PAAB0lIwLb3MuRGlyRW50cnmUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLkRpckVudHJ5lGoNjwAAdJSMC29zLlBhdGhMaWtllChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy5QYXRoTGlrZZRqDY8AAHSUjA5vcy5zY2hlZF9wYXJhbZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3Muc2NoZWRfcGFyYW2Uag2PAAB0lIwOb3Muc3RhdF9yZXN1bHSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnN0YXRfcmVzdWx0lGoNjwAAdJSMEG9zLnRlcm1pbmFsX3NpemWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLnRlcm1pbmFsX3NpemWUag2PAAB0lIwMcGF0aGxpYi5QYXRolChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUGF0aJRqDY8AAHSUjBFwYXRobGliLlBvc2l4UGF0aJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlBvc2l4UGF0aJRqDY8AAHSUjBBwYXRobGliLlB1cmVQYXRolChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUHVyZVBhdGiUag2PAAB0lIwVcGF0aGxpYi5QdXJlUG9zaXhQYXRolChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuUHVyZVBvc2l4UGF0aJRqDY8AAHSUjBdwYXRobGliLlB1cmVXaW5kb3dzUGF0aJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwYXRobGliLlB1cmVXaW5kb3dzUGF0aJRqDY8AAHSUjBNwYXRobGliLldpbmRvd3NQYXRolChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI3BhdGhsaWIuV2luZG93c1BhdGiUag2PAAB0lIwHcGRiLlBkYpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYi5QZGKUag2PAAB0lIwTcGlja2xlLlBpY2tsZUJ1ZmZlcpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS5QaWNrbGVCdWZmZXKUag2PAAB0lIwOcGlja2xlLlBpY2tsZXKUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUuUGlja2xlcpRqDY8AAHSUjBBwaWNrbGUuVW5waWNrbGVylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLlVucGlja2xlcpRqDY8AAHSUjA5waXBlcy5UZW1wbGF0ZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpcGVzLmh0bWwjcGlwZXMuVGVtcGxhdGWUag2PAAB0lIwTcGtndXRpbC5JbXBJbXBvcnRlcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLkltcEltcG9ydGVylGoNjwAAdJSMEXBrZ3V0aWwuSW1wTG9hZGVylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGtndXRpbC5odG1sI3BrZ3V0aWwuSW1wTG9hZGVylGoNjwAAdJSMEnBrZ3V0aWwuTW9kdWxlSW5mb5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BrZ3V0aWwuaHRtbCNwa2d1dGlsLk1vZHVsZUluZm+Uag2PAAB0lIwNcGxpc3RsaWIuRGF0YZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsaXN0bGliLmh0bWwjcGxpc3RsaWIuRGF0YZRqDY8AAHSUjAxwbGlzdGxpYi5VSUSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wbGlzdGxpYi5odG1sI3BsaXN0bGliLlVJRJRqDY8AAHSUjAtwb3BsaWIuUE9QM5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzlGoNjwAAdJSMD3BvcGxpYi5QT1AzX1NTTJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcGxpYi5QT1AzX1NTTJRqDY8AAHSUjBRwcHJpbnQuUHJldHR5UHJpbnRlcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC5QcmV0dHlQcmludGVylGoNjwAAdJSMD3Byb2ZpbGUuUHJvZmlsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlLlByb2ZpbGWUag2PAAB0lIwIcHJvcGVydHmUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNwcm9wZXJ0eZRqDY8AAHSUjAxwc3RhdHMuU3RhdHOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjcHN0YXRzLlN0YXRzlGoNjwAAdJSMHnB5X2NvbXBpbGUuUHljSW52YWxpZGF0aW9uTW9kZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5X2NvbXBpbGUuaHRtbCNweV9jb21waWxlLlB5Y0ludmFsaWRhdGlvbk1vZGWUag2PAAB0lIwPcXVldWUuTGlmb1F1ZXVllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVldWUuaHRtbCNxdWV1ZS5MaWZvUXVldWWUag2PAAB0lIwTcXVldWUuUHJpb3JpdHlRdWV1ZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3F1ZXVlLmh0bWwjcXVldWUuUHJpb3JpdHlRdWV1ZZRqDY8AAHSUjAtxdWV1ZS5RdWV1ZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3F1ZXVlLmh0bWwjcXVldWUuUXVldWWUag2PAAB0lIwRcXVldWUuU2ltcGxlUXVldWWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9xdWV1ZS5odG1sI3F1ZXVlLlNpbXBsZVF1ZXVllGoNjwAAdJSMDXJhbmRvbS5SYW5kb22UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uUmFuZG9tlGoNjwAAdJSME3JhbmRvbS5TeXN0ZW1SYW5kb22UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20uU3lzdGVtUmFuZG9tlGoNjwAAdJSMBXJhbmdllChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNyYW5nZZRqDY8AAHSUjAxyZXBybGliLlJlcHKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXBybGliLmh0bWwjcmVwcmxpYi5SZXBylGoNjwAAdJSMD3NjaGVkLnNjaGVkdWxlcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NjaGVkLmh0bWwjc2NoZWQuc2NoZWR1bGVylGoNjwAAdJSMFHNlY3JldHMuU3lzdGVtUmFuZG9tlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VjcmV0cy5odG1sI3NlY3JldHMuU3lzdGVtUmFuZG9tlGoNjwAAdJSMFnNlbGVjdG9ycy5CYXNlU2VsZWN0b3KUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3RvcnMuaHRtbCNzZWxlY3RvcnMuQmFzZVNlbGVjdG9ylGoNjwAAdJSMGXNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3KUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3RvcnMuaHRtbCNzZWxlY3RvcnMuRGVmYXVsdFNlbGVjdG9ylGoNjwAAdJSMGXNlbGVjdG9ycy5EZXZwb2xsU2VsZWN0b3KUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3RvcnMuaHRtbCNzZWxlY3RvcnMuRGV2cG9sbFNlbGVjdG9ylGoNjwAAdJSMF3NlbGVjdG9ycy5FcG9sbFNlbGVjdG9ylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3KUag2PAAB0lIwYc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9ylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWwjc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9ylGoNjwAAdJSMFnNlbGVjdG9ycy5Qb2xsU2VsZWN0b3KUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3RvcnMuaHRtbCNzZWxlY3RvcnMuUG9sbFNlbGVjdG9ylGoNjwAAdJSMGHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlbGVjdG9ycy5odG1sI3NlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcpRqDY8AAHSUjBVzZWxlY3RvcnMuU2VsZWN0b3JLZXmUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3RvcnMuaHRtbCNzZWxlY3RvcnMuU2VsZWN0b3JLZXmUag2PAAB0lIwDc2V0lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNzZXSUag2PAAB0lIwRc2hlbHZlLkJzZERiU2hlbGaUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUuQnNkRGJTaGVsZpRqDY8AAHSUjBZzaGVsdmUuRGJmaWxlbmFtZVNoZWxmlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hlbHZlLmh0bWwjc2hlbHZlLkRiZmlsZW5hbWVTaGVsZpRqDY8AAHSUjAxzaGVsdmUuU2hlbGaUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGVsdmUuaHRtbCNzaGVsdmUuU2hlbGaUag2PAAB0lIwLc2hsZXguc2hsZXiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGxleC5odG1sI3NobGV4LnNobGV4lGoNjwAAdJSMBXNsaWNllChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjc2xpY2WUag2PAAB0lIwVc210cGQuRGVidWdnaW5nU2VydmVylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5EZWJ1Z2dpbmdTZXJ2ZXKUag2PAAB0lIwSc210cGQuTWFpbG1hblByb3h5lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5NYWlsbWFuUHJveHmUag2PAAB0lIwPc210cGQuUHVyZVByb3h5lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGQuaHRtbCNzbXRwZC5QdXJlUHJveHmUag2PAAB0lIwRc210cGQuU01UUENoYW5uZWyUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLlNNVFBDaGFubmVslGoNjwAAdJSMEHNtdHBkLlNNVFBTZXJ2ZXKUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwZC5odG1sI3NtdHBkLlNNVFBTZXJ2ZXKUag2PAAB0lIwMc210cGxpYi5MTVRQlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1sI3NtdHBsaWIuTE1UUJRqDY8AAHSUjAxzbXRwbGliLlNNVFCUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQlGoNjwAAdJSMEHNtdHBsaWIuU01UUF9TU0yUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cGxpYi5TTVRQX1NTTJRqDY8AAHSUjB9zb2NrZXRzZXJ2ZXIuQmFzZVJlcXVlc3RIYW5kbGVylChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjc29ja2V0c2VydmVyLkJhc2VSZXF1ZXN0SGFuZGxlcpRqDY8AAHSUjBdzb2NrZXRzZXJ2ZXIuQmFzZVNlcnZlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5CYXNlU2VydmVylGoNjwAAdJSMI3NvY2tldHNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVylChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjc29ja2V0c2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXKUag2PAAB0lIwZc29ja2V0c2VydmVyLkZvcmtpbmdNaXhJbpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5Gb3JraW5nTWl4SW6Uag2PAAB0lIwdc29ja2V0c2VydmVyLkZvcmtpbmdUQ1BTZXJ2ZXKUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuRm9ya2luZ1RDUFNlcnZlcpRqDY8AAHSUjB1zb2NrZXRzZXJ2ZXIuRm9ya2luZ1VEUFNlcnZlcpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5Gb3JraW5nVURQU2VydmVylGoNjwAAdJSMIXNvY2tldHNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlcpQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlcpRqDY8AAHSUjBZzb2NrZXRzZXJ2ZXIuVENQU2VydmVylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0c2VydmVyLmh0bWwjc29ja2V0c2VydmVyLlRDUFNlcnZlcpRqDY8AAHSUjBtzb2NrZXRzZXJ2ZXIuVGhyZWFkaW5nTWl4SW6UKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuVGhyZWFkaW5nTWl4SW6Uag2PAAB0lIwfc29ja2V0c2VydmVyLlRocmVhZGluZ1RDUFNlcnZlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5UaHJlYWRpbmdUQ1BTZXJ2ZXKUag2PAAB0lIwfc29ja2V0c2VydmVyLlRocmVhZGluZ1VEUFNlcnZlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5UaHJlYWRpbmdVRFBTZXJ2ZXKUag2PAAB0lIwWc29ja2V0c2VydmVyLlVEUFNlcnZlcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5VRFBTZXJ2ZXKUag2PAAB0lIwfc29ja2V0c2VydmVyLlVuaXhEYXRhZ3JhbVNlcnZlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldHNlcnZlci5odG1sI3NvY2tldHNlcnZlci5Vbml4RGF0YWdyYW1TZXJ2ZXKUag2PAAB0lIwdc29ja2V0c2VydmVyLlVuaXhTdHJlYW1TZXJ2ZXKUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbCNzb2NrZXRzZXJ2ZXIuVW5peFN0cmVhbVNlcnZlcpRqDY8AAHSUjBJzcWxpdGUzLkNvbm5lY3Rpb26UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy5Db25uZWN0aW9ulGoNjwAAdJSMDnNxbGl0ZTMuQ3Vyc29ylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuQ3Vyc29ylGoNjwAAdJSMC3NxbGl0ZTMuUm93lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMuUm93lGoNjwAAdJSMFHNzbC5BbGVydERlc2NyaXB0aW9ulChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLkFsZXJ0RGVzY3JpcHRpb26Uag2PAAB0lIwNc3NsLk1lbW9yeUJJT5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5NZW1vcnlCSU+Uag2PAAB0lIwLc3NsLk9wdGlvbnOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuT3B0aW9uc5RqDY8AAHSUjA5zc2wuU1NMQ29udGV4dJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xDb250ZXh0lGoNjwAAdJSMEnNzbC5TU0xFcnJvck51bWJlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xFcnJvck51bWJlcpRqDY8AAHSUjA1zc2wuU1NMT2JqZWN0lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlNTTE9iamVjdJRqDY8AAHSUjA5zc2wuU1NMU2Vzc2lvbpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC5TU0xTZXNzaW9ulGoNjwAAdJSMDXNzbC5TU0xTb2NrZXSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wuU1NMU29ja2V0lGoNjwAAdJSMDnNzbC5UTFNWZXJzaW9ulChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlRMU1ZlcnNpb26Uag2PAAB0lIwPc3NsLlZlcmlmeUZsYWdzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlZlcmlmeUZsYWdzlGoNjwAAdJSMDnNzbC5WZXJpZnlNb2RllChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWwjc3NsLlZlcmlmeU1vZGWUag2PAAB0lIwVc3RhdGlzdGljcy5Ob3JtYWxEaXN0lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1sI3N0YXRpc3RpY3MuTm9ybWFsRGlzdJRqDY8AAHSUjANzdHKUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0cpRqDY8AAHSUjBBzdHJpbmcuRm9ybWF0dGVylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjc3RyaW5nLkZvcm1hdHRlcpRqDY8AAHSUjA9zdHJpbmcuVGVtcGxhdGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmcuVGVtcGxhdGWUag2PAAB0lIwNc3RydWN0LlN0cnVjdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC5TdHJ1Y3SUag2PAAB0lIwbc3VicHJvY2Vzcy5Db21wbGV0ZWRQcm9jZXNzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuQ29tcGxldGVkUHJvY2Vzc5RqDY8AAHSUjBBzdWJwcm9jZXNzLlBvcGVulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI3N1YnByb2Nlc3MuUG9wZW6Uag2PAAB0lIwWc3VicHJvY2Vzcy5TVEFSVFVQSU5GT5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLlNUQVJUVVBJTkZPlGoNjwAAdJSMDnN5bXRhYmxlLkNsYXNzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5DbGFzc5RqDY8AAHSUjBFzeW10YWJsZS5GdW5jdGlvbpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N5bXRhYmxlLmh0bWwjc3ltdGFibGUuRnVuY3Rpb26Uag2PAAB0lIwPc3ltdGFibGUuU3ltYm9slChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3ltdGFibGUuaHRtbCNzeW10YWJsZS5TeW1ib2yUag2PAAB0lIwUc3ltdGFibGUuU3ltYm9sVGFibGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1sI3N5bXRhYmxlLlN5bWJvbFRhYmxllGoNjwAAdJSMD3RhcmZpbGUuVGFyRmlsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLlRhckZpbGWUag2PAAB0lIwPdGFyZmlsZS5UYXJJbmZvlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUuVGFySW5mb5RqDY8AAHSUjBB0ZWxuZXRsaWIuVGVsbmV0lChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVsbmV0bGliLmh0bWwjdGVsbmV0bGliLlRlbG5ldJRqDY8AAHSUjBx0ZXN0LnN1cHBvcnQuQmFzaWNUZXN0UnVubmVylChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5CYXNpY1Rlc3RSdW5uZXKUag2PAAB0lIwYdGVzdC5zdXBwb3J0LkNsZWFuSW1wb3J0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5DbGVhbkltcG9ydJRqDY8AAHSUjBp0ZXN0LnN1cHBvcnQuRGlyc09uU3lzUGF0aJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuRGlyc09uU3lzUGF0aJRqDY8AAHSUjCB0ZXN0LnN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZJRqDY8AAHSUjBV0ZXN0LnN1cHBvcnQuRmFrZVBhdGiUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LkZha2VQYXRolGoNjwAAdJSMFHRlc3Quc3VwcG9ydC5NYXRjaGVylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5NYXRjaGVylGoNjwAAdJSMGHRlc3Quc3VwcG9ydC5TYXZlU2lnbmFsc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0ZXN0LnN1cHBvcnQuU2F2ZVNpZ25hbHOUag2PAAB0lIwgdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnSUag2PAAB0lIwYdGVzdC5zdXBwb3J0LlRlc3RIYW5kbGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5UZXN0SGFuZGxlcpRqDY8AAHSUjB50ZXN0LnN1cHBvcnQuVHJhbnNpZW50UmVzb3VyY2WUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjdGVzdC5zdXBwb3J0LlRyYW5zaWVudFJlc291cmNllGoNjwAAdJSMHXRlc3Quc3VwcG9ydC5XYXJuaW5nc1JlY29yZGVylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVzdC5odG1sI3Rlc3Quc3VwcG9ydC5XYXJuaW5nc1JlY29yZGVylGoNjwAAdJSMFHRleHR3cmFwLlRleHRXcmFwcGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGV4dHdyYXAuaHRtbCN0ZXh0d3JhcC5UZXh0V3JhcHBlcpRqDY8AAHSUjBF0aHJlYWRpbmcuQmFycmllcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5CYXJyaWVylGoNjwAAdJSMGnRocmVhZGluZy5Cb3VuZGVkU2VtYXBob3JllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmWUag2PAAB0lIwTdGhyZWFkaW5nLkNvbmRpdGlvbpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5Db25kaXRpb26Uag2PAAB0lIwPdGhyZWFkaW5nLkV2ZW50lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkV2ZW50lGoNjwAAdJSMDnRocmVhZGluZy5Mb2NrlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLkxvY2uUag2PAAB0lIwPdGhyZWFkaW5nLlJMb2NrlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjdGhyZWFkaW5nLlJMb2NrlGoNjwAAdJSME3RocmVhZGluZy5TZW1hcGhvcmWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuU2VtYXBob3JllGoNjwAAdJSMEHRocmVhZGluZy5UaHJlYWSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcuVGhyZWFklGoNjwAAdJSMD3RocmVhZGluZy5UaW1lcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RocmVhZGluZy5UaW1lcpRqDY8AAHSUjA90aHJlYWRpbmcubG9jYWyUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWRpbmcubG9jYWyUag2PAAB0lIwQdGltZS5zdHJ1Y3RfdGltZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLnN0cnVjdF90aW1llGoNjwAAdJSMDHRpbWVpdC5UaW1lcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI3RpbWVpdC5UaW1lcpRqDY8AAHSUjAp0a2ludGVyLlRrlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci5odG1sI3RraW50ZXIuVGuUag2PAAB0lIwTdGtpbnRlci50aXguQmFsbG9vbpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXguQmFsbG9vbpRqDY8AAHSUjBV0a2ludGVyLnRpeC5CdXR0b25Cb3iUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LkJ1dHRvbkJveJRqDY8AAHSUjBV0a2ludGVyLnRpeC5DaGVja0xpc3SUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LkNoZWNrTGlzdJRqDY8AAHSUjBR0a2ludGVyLnRpeC5Db21ib0JveJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXguQ29tYm9Cb3iUag2PAAB0lIwTdGtpbnRlci50aXguQ29udHJvbJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXguQ29udHJvbJRqDY8AAHSUjBN0a2ludGVyLnRpeC5EaXJMaXN0lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5EaXJMaXN0lGoNjwAAdJSMGHRraW50ZXIudGl4LkRpclNlbGVjdEJveJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXguRGlyU2VsZWN0Qm94lGoNjwAAdJSMG3RraW50ZXIudGl4LkRpclNlbGVjdERpYWxvZ5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXguRGlyU2VsZWN0RGlhbG9nlGoNjwAAdJSME3RraW50ZXIudGl4LkRpclRyZWWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LkRpclRyZWWUag2PAAB0lIwbdGtpbnRlci50aXguRXhGaWxlU2VsZWN0Qm94lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5FeEZpbGVTZWxlY3RCb3iUag2PAAB0lIwVdGtpbnRlci50aXguRmlsZUVudHJ5lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5GaWxlRW50cnmUag2PAAB0lIwZdGtpbnRlci50aXguRmlsZVNlbGVjdEJveJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXguRmlsZVNlbGVjdEJveJRqDY8AAHSUjBB0a2ludGVyLnRpeC5Gb3JtlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5Gb3JtlGoNjwAAdJSMEXRraW50ZXIudGl4LkhMaXN0lChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5ITGlzdJRqDY8AAHSUjBV0a2ludGVyLnRpeC5JbnB1dE9ubHmUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LklucHV0T25seZRqDY8AAHSUjBZ0a2ludGVyLnRpeC5MYWJlbEVudHJ5lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5MYWJlbEVudHJ5lGoNjwAAdJSMFnRraW50ZXIudGl4LkxhYmVsRnJhbWWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LkxhYmVsRnJhbWWUag2PAAB0lIwYdGtpbnRlci50aXguTGlzdE5vdGVCb29rlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5MaXN0Tm90ZUJvb2uUag2PAAB0lIwRdGtpbnRlci50aXguTWV0ZXKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4Lk1ldGVylGoNjwAAdJSMFHRraW50ZXIudGl4Lk5vdGVCb29rlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5Ob3RlQm9va5RqDY8AAHSUjBZ0a2ludGVyLnRpeC5PcHRpb25NZW51lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5PcHRpb25NZW51lGoNjwAAdJSMF3RraW50ZXIudGl4LlBhbmVkV2luZG93lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbCN0a2ludGVyLnRpeC5QYW5lZFdpbmRvd5RqDY8AAHSUjBV0a2ludGVyLnRpeC5Qb3B1cE1lbnWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LlBvcHVwTWVudZRqDY8AAHSUjBJ0a2ludGVyLnRpeC5TZWxlY3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LlNlbGVjdJRqDY8AAHSUjBh0a2ludGVyLnRpeC5TdGRCdXR0b25Cb3iUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LlN0ZEJ1dHRvbkJveJRqDY8AAHSUjBF0a2ludGVyLnRpeC5UTGlzdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXguVExpc3SUlT4AAQAAAAAAag2PAAB0lIwOdGtpbnRlci50aXguVGuUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LlRrlGoNjwAAdJSMEHRraW50ZXIudGl4LlRyZWWUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnRpeC5odG1sI3RraW50ZXIudGl4LlRyZWWUag2PAAB0lIwWdGtpbnRlci50aXgudGl4Q29tbWFuZJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudGl4Lmh0bWwjdGtpbnRlci50aXgudGl4Q29tbWFuZJRqDY8AAHSUjBR0a2ludGVyLnR0ay5Db21ib2JveJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuQ29tYm9ib3iUag2PAAB0lIwUdGtpbnRlci50dGsuTm90ZWJvb2uUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI3RraW50ZXIudHRrLk5vdGVib29rlGoNjwAAdJSMF3RraW50ZXIudHRrLlByb2dyZXNzYmFylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5Qcm9ncmVzc2JhcpRqDY8AAHSUjBN0a2ludGVyLnR0ay5TcGluYm94lChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TcGluYm94lGoNjwAAdJSMEXRraW50ZXIudHRrLlN0eWxllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5TdHlsZZRqDY8AAHSUjBR0a2ludGVyLnR0ay5UcmVldmlld5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdGtpbnRlci50dGsuVHJlZXZpZXeUag2PAAB0lIwSdGtpbnRlci50dGsuV2lkZ2V0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50dGsuaHRtbCN0a2ludGVyLnR0ay5XaWRnZXSUag2PAAB0lIwVdHJhY2UuQ292ZXJhZ2VSZXN1bHRzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCN0cmFjZS5Db3ZlcmFnZVJlc3VsdHOUag2PAAB0lIwLdHJhY2UuVHJhY2WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLlRyYWNllGoNjwAAdJSMFnRyYWNlYmFjay5GcmFtZVN1bW1hcnmUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suRnJhbWVTdW1tYXJ5lGoNjwAAdJSMFnRyYWNlYmFjay5TdGFja1N1bW1hcnmUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suU3RhY2tTdW1tYXJ5lGoNjwAAdJSMHHRyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb26UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9ulGoNjwAAdJSMGHRyYWNlbWFsbG9jLkRvbWFpbkZpbHRlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuRG9tYWluRmlsdGVylGoNjwAAdJSMEnRyYWNlbWFsbG9jLkZpbHRlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuRmlsdGVylGoNjwAAdJSMEXRyYWNlbWFsbG9jLkZyYW1llChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5GcmFtZZRqDY8AAHSUjBR0cmFjZW1hbGxvYy5TbmFwc2hvdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuU25hcHNob3SUag2PAAB0lIwVdHJhY2VtYWxsb2MuU3RhdGlzdGljlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5TdGF0aXN0aWOUag2PAAB0lIwZdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZpRqDY8AAHSUjBF0cmFjZW1hbGxvYy5UcmFjZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlbWFsbG9jLmh0bWwjdHJhY2VtYWxsb2MuVHJhY2WUag2PAAB0lIwVdHJhY2VtYWxsb2MuVHJhY2ViYWNrlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2VtYWxsb2MuaHRtbCN0cmFjZW1hbGxvYy5UcmFjZWJhY2uUag2PAAB0lIwFdHVwbGWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R1cGxllGoNjwAAdJSMDXR1cnRsZS5SYXdQZW6UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuUmF3UGVulGoNjwAAdJSMEHR1cnRsZS5SYXdUdXJ0bGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuUmF3VHVydGxllGoNjwAAdJSMDXR1cnRsZS5TY3JlZW6UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuU2NyZWVulGoNjwAAdJSMFXR1cnRsZS5TY3JvbGxlZENhbnZhc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5TY3JvbGxlZENhbnZhc5RqDY8AAHSUjAx0dXJ0bGUuU2hhcGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCN0dXJ0bGUuU2hhcGWUag2PAAB0lIwNdHVydGxlLlR1cnRsZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5UdXJ0bGWUag2PAAB0lIwTdHVydGxlLlR1cnRsZVNjcmVlbpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R1cnRsZS5odG1sI3R1cnRsZS5UdXJ0bGVTY3JlZW6Uag2PAAB0lIwMdHVydGxlLlZlYzJElChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjdHVydGxlLlZlYzJElGoNjwAAdJSMBHR5cGWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCN0eXBllGoNjwAAdJSMDnR5cGVzLkNvZGVUeXBllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5Db2RlVHlwZZRqDY8AAHSUjBZ0eXBlcy5NYXBwaW5nUHJveHlUeXBllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5NYXBwaW5nUHJveHlUeXBllGoNjwAAdJSMEHR5cGVzLk1vZHVsZVR5cGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBlcy5odG1sI3R5cGVzLk1vZHVsZVR5cGWUag2PAAB0lIwVdHlwZXMuU2ltcGxlTmFtZXNwYWNllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwZXMuaHRtbCN0eXBlcy5TaW1wbGVOYW1lc3BhY2WUag2PAAB0lIwTdHlwZXMuVHJhY2ViYWNrVHlwZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWwjdHlwZXMuVHJhY2ViYWNrVHlwZZRqDY8AAHSUjBJ0eXBpbmcuQWJzdHJhY3RTZXSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuQWJzdHJhY3RTZXSUag2PAAB0lIwadHlwaW5nLkFzeW5jQ29udGV4dE1hbmFnZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuQXN5bmNDb250ZXh0TWFuYWdlcpRqDY8AAHSUjBV0eXBpbmcuQXN5bmNHZW5lcmF0b3KUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuQXN5bmNHZW5lcmF0b3KUag2PAAB0lIwUdHlwaW5nLkFzeW5jSXRlcmFibGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuQXN5bmNJdGVyYWJsZZRqDY8AAHSUjBR0eXBpbmcuQXN5bmNJdGVyYXRvcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5Bc3luY0l0ZXJhdG9ylGoNjwAAdJSMEHR5cGluZy5Bd2FpdGFibGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuQXdhaXRhYmxllGoNjwAAdJSMD3R5cGluZy5CaW5hcnlJT5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5CaW5hcnlJT5RqDY8AAHSUjBF0eXBpbmcuQnl0ZVN0cmluZ5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5CeXRlU3RyaW5nlGoNjwAAdJSMD3R5cGluZy5DaGFpbk1hcJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5DaGFpbk1hcJRqDY8AAHSUjBF0eXBpbmcuQ29sbGVjdGlvbpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5Db2xsZWN0aW9ulGoNjwAAdJSMEHR5cGluZy5Db250YWluZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuQ29udGFpbmVylGoNjwAAdJSMFXR5cGluZy5Db250ZXh0TWFuYWdlcpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5Db250ZXh0TWFuYWdlcpRqDY8AAHSUjBB0eXBpbmcuQ29yb3V0aW5llChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLkNvcm91dGluZZRqDY8AAHSUjA50eXBpbmcuQ291bnRlcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5Db3VudGVylGoNjwAAdJSMEnR5cGluZy5EZWZhdWx0RGljdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5EZWZhdWx0RGljdJRqDY8AAHSUjAx0eXBpbmcuRGVxdWWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuRGVxdWWUag2PAAB0lIwLdHlwaW5nLkRpY3SUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuRGljdJRqDY8AAHSUjBF0eXBpbmcuRm9yd2FyZFJlZpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5Gb3J3YXJkUmVmlGoNjwAAdJSMEHR5cGluZy5Gcm96ZW5TZXSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuRnJvemVuU2V0lGoNjwAAdJSMEHR5cGluZy5HZW5lcmF0b3KUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuR2VuZXJhdG9ylGoNjwAAdJSMDnR5cGluZy5HZW5lcmljlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLkdlbmVyaWOUag2PAAB0lIwPdHlwaW5nLkhhc2hhYmxllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLkhhc2hhYmxllGoNjwAAdJSMCXR5cGluZy5JT5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5JT5RqDY8AAHSUjBB0eXBpbmcuSXRlbXNWaWV3lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLkl0ZW1zVmlld5RqDY8AAHSUjA90eXBpbmcuSXRlcmFibGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuSXRlcmFibGWUag2PAAB0lIwPdHlwaW5nLkl0ZXJhdG9ylChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLkl0ZXJhdG9ylGoNjwAAdJSMD3R5cGluZy5LZXlzVmlld5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5LZXlzVmlld5RqDY8AAHSUjAt0eXBpbmcuTGlzdJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5MaXN0lGoNjwAAdJSMDnR5cGluZy5NYXBwaW5nlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLk1hcHBpbmeUag2PAAB0lIwSdHlwaW5nLk1hcHBpbmdWaWV3lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLk1hcHBpbmdWaWV3lGoNjwAAdJSMDHR5cGluZy5NYXRjaJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5NYXRjaJRqDY8AAHSUjBV0eXBpbmcuTXV0YWJsZU1hcHBpbmeUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuTXV0YWJsZU1hcHBpbmeUag2PAAB0lIwWdHlwaW5nLk11dGFibGVTZXF1ZW5jZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5NdXRhYmxlU2VxdWVuY2WUag2PAAB0lIwRdHlwaW5nLk11dGFibGVTZXSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuTXV0YWJsZVNldJRqDY8AAHSUjBF0eXBpbmcuTmFtZWRUdXBsZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5OYW1lZFR1cGxllGoNjwAAdJSMEnR5cGluZy5PcmRlcmVkRGljdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5PcmRlcmVkRGljdJRqDY8AAHSUjA50eXBpbmcuUGF0dGVybpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5QYXR0ZXJulGoNjwAAdJSMD3R5cGluZy5Qcm90b2NvbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5Qcm90b2NvbJRqDY8AAHSUjBF0eXBpbmcuUmV2ZXJzaWJsZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5SZXZlcnNpYmxllGoNjwAAdJSMD3R5cGluZy5TZXF1ZW5jZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5TZXF1ZW5jZZRqDY8AAHSUjAp0eXBpbmcuU2V0lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLlNldJRqDY8AAHSUjAx0eXBpbmcuU2l6ZWSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuU2l6ZWSUag2PAAB0lIwSdHlwaW5nLlN1cHBvcnRzQWJzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLlN1cHBvcnRzQWJzlGoNjwAAdJSMFHR5cGluZy5TdXBwb3J0c0J5dGVzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLlN1cHBvcnRzQnl0ZXOUag2PAAB0lIwWdHlwaW5nLlN1cHBvcnRzQ29tcGxleJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5TdXBwb3J0c0NvbXBsZXiUag2PAAB0lIwUdHlwaW5nLlN1cHBvcnRzRmxvYXSUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuU3VwcG9ydHNGbG9hdJRqDY8AAHSUjBR0eXBpbmcuU3VwcG9ydHNJbmRleJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5TdXBwb3J0c0luZGV4lGoNjwAAdJSMEnR5cGluZy5TdXBwb3J0c0ludJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5TdXBwb3J0c0ludJRqDY8AAHSUjBR0eXBpbmcuU3VwcG9ydHNSb3VuZJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5TdXBwb3J0c1JvdW5klGoNjwAAdJSMC3R5cGluZy5UZXh0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLlRleHSUag2PAAB0lIwNdHlwaW5nLlRleHRJT5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5UZXh0SU+Uag2PAAB0lIwLdHlwaW5nLlR5cGWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuVHlwZZRqDY8AAHSUjA50eXBpbmcuVHlwZVZhcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGluZy5odG1sI3R5cGluZy5UeXBlVmFylGoNjwAAdJSMEHR5cGluZy5UeXBlZERpY3SUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCN0eXBpbmcuVHlwZWREaWN0lGoNjwAAdJSMEXR5cGluZy5WYWx1ZXNWaWV3lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjdHlwaW5nLlZhbHVlc1ZpZXeUag2PAAB0lIwZdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZZQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZZRqDY8AAHSUjCB1bml0dGVzdC5Jc29sYXRlZEFzeW5jaW9UZXN0Q2FzZZQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuSXNvbGF0ZWRBc3luY2lvVGVzdENhc2WUag2PAAB0lIwRdW5pdHRlc3QuVGVzdENhc2WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RDYXNllGoNjwAAdJSME3VuaXR0ZXN0LlRlc3RMb2FkZXKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RMb2FkZXKUag2PAAB0lIwTdW5pdHRlc3QuVGVzdFJlc3VsdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGVzdFJlc3VsdJRqDY8AAHSUjBJ1bml0dGVzdC5UZXN0U3VpdGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRlc3RTdWl0ZZRqDY8AAHSUjBd1bml0dGVzdC5UZXh0VGVzdFJlc3VsdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHSUag2PAAB0lIwXdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LlRleHRUZXN0UnVubmVylGoNjwAAdJSMF3VuaXR0ZXN0Lm1vY2suQXN5bmNNb2NrlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suQXN5bmNNb2NrlGoNjwAAdJSMF3VuaXR0ZXN0Lm1vY2suTWFnaWNNb2NrlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suTWFnaWNNb2NrlGoNjwAAdJSMEnVuaXR0ZXN0Lm1vY2suTW9ja5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk1vY2uUag2PAAB0lIwidW5pdHRlc3QubW9jay5Ob25DYWxsYWJsZU1hZ2ljTW9ja5QoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCN1bml0dGVzdC5tb2NrLk5vbkNhbGxhYmxlTWFnaWNNb2NrlGoNjwAAdJSMHXVuaXR0ZXN0Lm1vY2suTm9uQ2FsbGFibGVNb2NrlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suTm9uQ2FsbGFibGVNb2NrlGoNjwAAdJSMGnVuaXR0ZXN0Lm1vY2suUHJvcGVydHlNb2NrlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3VuaXR0ZXN0Lm1vY2suUHJvcGVydHlNb2NrlGoNjwAAdJSMGXVybGxpYi5wYXJzZS5EZWZyYWdSZXN1bHSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UuRGVmcmFnUmVzdWx0lGoNjwAAdJSMHnVybGxpYi5wYXJzZS5EZWZyYWdSZXN1bHRCeXRlc5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5wYXJzZS5odG1sI3VybGxpYi5wYXJzZS5EZWZyYWdSZXN1bHRCeXRlc5RqDY8AAHSUjBh1cmxsaWIucGFyc2UuUGFyc2VSZXN1bHSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UuUGFyc2VSZXN1bHSUag2PAAB0lIwddXJsbGliLnBhcnNlLlBhcnNlUmVzdWx0Qnl0ZXOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UuUGFyc2VSZXN1bHRCeXRlc5RqDY8AAHSUjBh1cmxsaWIucGFyc2UuU3BsaXRSZXN1bHSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UuU3BsaXRSZXN1bHSUag2PAAB0lIwddXJsbGliLnBhcnNlLlNwbGl0UmVzdWx0Qnl0ZXOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxsaWIucGFyc2UuU3BsaXRSZXN1bHRCeXRlc5RqDY8AAHSUjCd1cmxsaWIucmVxdWVzdC5BYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXKUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkFic3RyYWN0QmFzaWNBdXRoSGFuZGxlcpRqDY8AAHSUjCh1cmxsaWIucmVxdWVzdC5BYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVylChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5BYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVylGoNjwAAdJSMGnVybGxpYi5yZXF1ZXN0LkJhc2VIYW5kbGVylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5CYXNlSGFuZGxlcpRqDY8AAHSUjB51cmxsaWIucmVxdWVzdC5DYWNoZUZUUEhhbmRsZXKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkNhY2hlRlRQSGFuZGxlcpRqDY8AAHSUjBp1cmxsaWIucmVxdWVzdC5EYXRhSGFuZGxlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuRGF0YUhhbmRsZXKUag2PAAB0lIwZdXJsbGliLnJlcXVlc3QuRlRQSGFuZGxlcpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuRlRQSGFuZGxlcpRqDY8AAHSUjB11cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuRmFuY3lVUkxvcGVuZXKUag2PAAB0lIwadXJsbGliLnJlcXVlc3QuRmlsZUhhbmRsZXKUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkZpbGVIYW5kbGVylGoNjwAAdJSMI3VybGxpYi5yZXF1ZXN0LkhUVFBCYXNpY0F1dGhIYW5kbGVylChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQQmFzaWNBdXRoSGFuZGxlcpRqDY8AAHSUjCJ1cmxsaWIucmVxdWVzdC5IVFRQQ29va2llUHJvY2Vzc29ylChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQQ29va2llUHJvY2Vzc29ylGoNjwAAdJSMJnVybGxpYi5yZXF1ZXN0LkhUVFBEZWZhdWx0RXJyb3JIYW5kbGVylChqCo8AAGoLjwAAjFxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQRGVmYXVsdEVycm9ySGFuZGxlcpRqDY8AAHSUjCR1cmxsaWIucmVxdWVzdC5IVFRQRGlnZXN0QXV0aEhhbmRsZXKUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkhUVFBEaWdlc3RBdXRoSGFuZGxlcpRqDY8AAHSUjCF1cmxsaWIucmVxdWVzdC5IVFRQRXJyb3JQcm9jZXNzb3KUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkhUVFBFcnJvclByb2Nlc3NvcpRqDY8AAHSUjBp1cmxsaWIucmVxdWVzdC5IVFRQSGFuZGxlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUEhhbmRsZXKUag2PAAB0lIwedXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdylChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3KUag2PAAB0lIwudXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbZQoagqPAABqC48AAIxkaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbZRqDY8AAHSUjCt1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRolChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRolGoNjwAAdJSMInVybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXKUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LkhUVFBSZWRpcmVjdEhhbmRsZXKUag2PAAB0lIwbdXJsbGliLnJlcXVlc3QuSFRUUFNIYW5kbGVylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5IVFRQU0hhbmRsZXKUag2PAAB0lIwddXJsbGliLnJlcXVlc3QuT3BlbmVyRGlyZWN0b3KUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0Lk9wZW5lckRpcmVjdG9ylGoNjwAAdJSMJHVybGxpYi5yZXF1ZXN0LlByb3h5QmFzaWNBdXRoSGFuZGxlcpQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuUHJveHlCYXNpY0F1dGhIYW5kbGVylGoNjwAAdJSMJXVybGxpYi5yZXF1ZXN0LlByb3h5RGlnZXN0QXV0aEhhbmRsZXKUKGoKjwAAaguPAACMW2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlByb3h5RGlnZXN0QXV0aEhhbmRsZXKUag2PAAB0lIwbdXJsbGliLnJlcXVlc3QuUHJveHlIYW5kbGVylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCN1cmxsaWIucmVxdWVzdC5Qcm94eUhhbmRsZXKUag2PAAB0lIwWdXJsbGliLnJlcXVlc3QuUmVxdWVzdJQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuUmVxdWVzdJRqDY8AAHSUjBh1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXKUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi5yZXF1ZXN0LlVSTG9wZW5lcpRqDY8AAHSUjB11cmxsaWIucmVxdWVzdC5Vbmtub3duSGFuZGxlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLnJlcXVlc3QuVW5rbm93bkhhbmRsZXKUag2PAAB0lIwidXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcpQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlci5odG1sI3VybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXKUag2PAAB0lIwNdXVpZC5TYWZlVVVJRJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlNhZmVVVUlElGoNjwAAdJSMCXV1aWQuVVVJRJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLlVVSUSUag2PAAB0lIwPdmVudi5FbnZCdWlsZGVylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdmVudi5odG1sI3ZlbnYuRW52QnVpbGRlcpRqDY8AAHSUjBd3YXJuaW5ncy5jYXRjaF93YXJuaW5nc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZ3MuY2F0Y2hfd2FybmluZ3OUag2PAAB0lIwZd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5lGoNjwAAdJSMEndlYWtyZWYuV2Vha01ldGhvZJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLldlYWtNZXRob2SUag2PAAB0lIwPd2Vha3JlZi5XZWFrU2V0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYuV2Vha1NldJRqDY8AAHSUjBt3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnmUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5lGoNjwAAdJSMEHdlYWtyZWYuZmluYWxpemWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi5maW5hbGl6ZZRqDY8AAHSUjAt3ZWFrcmVmLnJlZpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYWtyZWYuaHRtbCN3ZWFrcmVmLnJlZpRqDY8AAHSUjB93c2dpcmVmLmhhbmRsZXJzLkJhc2VDR0lIYW5kbGVylChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuQmFzZUNHSUhhbmRsZXKUag2PAAB0lIwcd3NnaXJlZi5oYW5kbGVycy5CYXNlSGFuZGxlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkJhc2VIYW5kbGVylGoNjwAAdJSMG3dzZ2lyZWYuaGFuZGxlcnMuQ0dJSGFuZGxlcpQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLmhhbmRsZXJzLkNHSUhhbmRsZXKUag2PAAB0lIwed3NnaXJlZi5oYW5kbGVycy5JSVNDR0lIYW5kbGVylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGFuZGxlcnMuSUlTQ0dJSGFuZGxlcpRqDY8AAHSUjB53c2dpcmVmLmhhbmRsZXJzLlNpbXBsZUhhbmRsZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5oYW5kbGVycy5TaW1wbGVIYW5kbGVylGoNjwAAdJSMF3dzZ2lyZWYuaGVhZGVycy5IZWFkZXJzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd3NnaXJlZi5odG1sI3dzZ2lyZWYuaGVhZGVycy5IZWFkZXJzlGoNjwAAdJSMKHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXKUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi5zaW1wbGVfc2VydmVyLldTR0lSZXF1ZXN0SGFuZGxlcpRqDY8AAHSUjCB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlcpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dzZ2lyZWYuaHRtbCN3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIuV1NHSVNlcnZlcpRqDY8AAHSUjBh3c2dpcmVmLnV0aWwuRmlsZVdyYXBwZXKUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWwjd3NnaXJlZi51dGlsLkZpbGVXcmFwcGVylGoNjwAAdJSMDXhkcmxpYi5QYWNrZXKUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94ZHJsaWIuaHRtbCN4ZHJsaWIuUGFja2VylGoNjwAAdJSMD3hkcmxpYi5VbnBhY2tlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkcmxpYi5VbnBhY2tlcpRqDY8AAHSUjB54bWwuZG9tLnB1bGxkb20uRE9NRXZlbnRTdHJlYW2UKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20uRE9NRXZlbnRTdHJlYW2Uag2PAAB0lIwXeG1sLmRvbS5wdWxsZG9tLlB1bGxEb22UKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCN4bWwuZG9tLnB1bGxkb20uUHVsbERvbZRqDY8AAHSUjBd4bWwuZG9tLnB1bGxkb20uU0FYMkRPTZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5odG1sI3htbC5kb20ucHVsbGRvbS5TQVgyRE9NlGoNjwAAdJSMJnhtbC5ldHJlZS5FbGVtZW50VHJlZS5DMTROV3JpdGVyVGFyZ2V0lChqCo8AAGoLjwAAjGNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkMxNE5Xcml0ZXJUYXJnZXSUag2PAAB0lIwdeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnSUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudJRqDY8AAHSUjCF4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWWUKGoKjwAAaguPAACMXmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudFRyZWWUag2PAAB0lIwgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlBhcnNlRXJyb3KUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuUGFyc2VFcnJvcpRqDY8AAHSUjBt4bWwuZXRyZWUuRWxlbWVudFRyZWUuUU5hbWWUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuUU5hbWWUag2PAAB0lIwheG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVylChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlRyZWVCdWlsZGVylGoNjwAAdJSMH3htbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXKUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCN4bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUGFyc2VylGoNjwAAdJSMI3htbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VylChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlhNTFB1bGxQYXJzZXKUag2PAAB0lIweeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkNvbnRlbnRIYW5kbGVylGoNjwAAdJSMGnhtbC5zYXguaGFuZGxlci5EVERIYW5kbGVylChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkRUREhhbmRsZXKUag2PAAB0lIweeG1sLnNheC5oYW5kbGVyLkVudGl0eVJlc29sdmVylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjeG1sLnNheC5oYW5kbGVyLkVudGl0eVJlc29sdmVylGoNjwAAdJSMHHhtbC5zYXguaGFuZGxlci5FcnJvckhhbmRsZXKUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIuaHRtbCN4bWwuc2F4LmhhbmRsZXIuRXJyb3JIYW5kbGVylGoNjwAAdJSMHnhtbC5zYXguc2F4dXRpbHMuWE1MRmlsdGVyQmFzZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgudXRpbHMuaHRtbCN4bWwuc2F4LnNheHV0aWxzLlhNTEZpbHRlckJhc2WUag2PAAB0lIwdeG1sLnNheC5zYXh1dGlscy5YTUxHZW5lcmF0b3KUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWwjeG1sLnNheC5zYXh1dGlscy5YTUxHZW5lcmF0b3KUag2PAAB0lIwgeG1sLnNheC54bWxyZWFkZXIuQXR0cmlidXRlc0ltcGyUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNJbXBslGoNjwAAdJSMInhtbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOU0ltcGyUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkF0dHJpYnV0ZXNOU0ltcGyUag2PAAB0lIwjeG1sLnNheC54bWxyZWFkZXIuSW5jcmVtZW50YWxQYXJzZXKUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI3htbC5zYXgueG1scmVhZGVyLkluY3JlbWVudGFsUGFyc2VylGoNjwAAdJSMHXhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNllChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5JbnB1dFNvdXJjZZRqDY8AAHSUjBl4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9ylChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWwuc2F4LnhtbHJlYWRlci5Mb2NhdG9ylGoNjwAAdJSMG3htbC5zYXgueG1scmVhZGVyLlhNTFJlYWRlcpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjeG1sLnNheC54bWxyZWFkZXIuWE1MUmVhZGVylGoNjwAAdJSMFHhtbHJwYy5jbGllbnQuQmluYXJ5lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuQmluYXJ5lGoNjwAAdJSMFnhtbHJwYy5jbGllbnQuRGF0ZVRpbWWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjeG1scnBjLmNsaWVudC5EYXRlVGltZZRqDY8AAHSUjBN4bWxycGMuY2xpZW50LkZhdWx0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuRmF1bHSUag2PAAB0lIwXeG1scnBjLmNsaWVudC5NdWx0aUNhbGyUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjeG1scnBjLmNsaWVudC5NdWx0aUNhbGyUag2PAAB0lIwbeG1scnBjLmNsaWVudC5Qcm90b2NvbEVycm9ylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuUHJvdG9jb2xFcnJvcpRqDY8AAHSUjBl4bWxycGMuY2xpZW50LlNlcnZlclByb3h5lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI3htbHJwYy5jbGllbnQuU2VydmVyUHJveHmUag2PAAB0lIwleG1scnBjLnNlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlcpQoagqPAABqC48AAIxaaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIuaHRtbCN4bWxycGMuc2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVylGoNjwAAdJSMKHhtbHJwYy5zZXJ2ZXIuRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXKUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjeG1scnBjLnNlcnZlci5Eb2NDR0lYTUxSUENSZXF1ZXN0SGFuZGxlcpRqDY8AAHSUjCV4bWxycGMuc2VydmVyLkRvY1hNTFJQQ1JlcXVlc3RIYW5kbGVylChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI3htbHJwYy5zZXJ2ZXIuRG9jWE1MUlBDUmVxdWVzdEhhbmRsZXKUag2PAAB0lIwdeG1scnBjLnNlcnZlci5Eb2NYTUxSUENTZXJ2ZXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjeG1scnBjLnNlcnZlci5Eb2NYTUxSUENTZXJ2ZXKUag2PAAB0lIwoeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcpQoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIuaHRtbCN4bWxycGMuc2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVylGoNjwAAdJSMIHhtbHJwYy5zZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI3htbHJwYy5zZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVylGoNjwAAdJSMDHppcGZpbGUuUGF0aJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLlBhdGiUag2PAAB0lIwRemlwZmlsZS5QeVppcEZpbGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5QeVppcEZpbGWUag2PAAB0lIwPemlwZmlsZS5aaXBGaWxllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUuWmlwRmlsZZRqDY8AAHSUjA96aXBmaWxlLlppcEluZm+UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjemlwZmlsZS5aaXBJbmZvlGoNjwAAdJSMFXppcGltcG9ydC56aXBpbXBvcnRlcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGltcG9ydC5odG1sI3ppcGltcG9ydC56aXBpbXBvcnRlcpRqDY8AAHSUdYwOc3RkOnBkYmNvbW1hbmSUfZQojAEhlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC0hlGoNjwAAdJSMBWFsaWFzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1hbGlhc5RqDY8AAHSUjARhcmdzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1hcmdzlGoNjwAAdJSMBWJyZWFrlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1icmVha5RqDY8AAHSUjAVjbGVhcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtY2xlYXKUag2PAAB0lIwIY29tbWFuZHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLWNvbW1hbmRzlGoNjwAAdJSMCWNvbmRpdGlvbpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtY29uZGl0aW9ulGoNjwAAdJSMCGNvbnRpbnVllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1jb250aW51ZZRqDY8AAHSUjAVkZWJ1Z5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtZGVidWeUag2PAAB0lIwHZGlzYWJsZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtZGlzYWJsZZRqDY8AAHSUjAdkaXNwbGF5lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1kaXNwbGF5lGoNjwAAdJSMBGRvd26UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLWRvd26Uag2PAAB0lIwGZW5hYmxllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1lbmFibGWUag2PAAB0lIwEaGVscJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtaGVscJRqDY8AAHSUjAZpZ25vcmWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLWlnbm9yZZRqDY8AAHSUjAhpbnRlcmFjdJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtaW50ZXJhY3SUag2PAAB0lIwEanVtcJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtanVtcJRqDY8AAHSUjARsaXN0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1saXN0lGoNjwAAdJSMAmxslChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1sbJRqDY8AAHSUjARuZXh0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1uZXh0lGoNjwAAdJSMAXCUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXCUag2PAAB0lIwCcHCUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXBwlGoNjwAAdJSMBHF1aXSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXF1aXSUag2PAAB0lIwHcmVzdGFydJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtcmVzdGFydJRqDY8AAHSUjAZyZXR1cm6UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXJldHVybpRqDY8AAHSUjAZyZXR2YWyUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXJldHZhbJRqDY8AAHSUjANydW6UKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXJ1bpRqDY8AAHSUjAZzb3VyY2WUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXNvdXJjZZRqDY8AAHSUjARzdGVwlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC1zdGVwlGoNjwAAdJSMBnRicmVha5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtdGJyZWFrlGoNjwAAdJSMB3VuYWxpYXOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXVuYWxpYXOUag2PAAB0lIwJdW5kaXNwbGF5lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC11bmRpc3BsYXmUag2PAAB0lIwFdW50aWyUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXVudGlslGoNjwAAdJSMAnVwlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjcGRiY29tbWFuZC11cJRqDY8AAHSUjAZ3aGF0aXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNwZGJjb21tYW5kLXdoYXRpc5RqDY8AAHSUjAV3aGVyZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BkYi5odG1sI3BkYmNvbW1hbmQtd2hlcmWUag2PAAB0lHWMDXN0ZDpjbWRvcHRpb26UfZQojBctLWNoZWNrLWhhc2gtYmFzZWQtcHljc5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLWNoZWNrLWhhc2gtYmFzZWQtcHljc5RqDY8AAHSUjAYtLWhlbHCUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1oZWxwlGoNjwAAdJSMCS0tdmVyc2lvbpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLXZlcnNpb26Uag2PAAB0lIwCLT+UKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbpRqDY8AAHSUjAItQpQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjaWQxlGoNjwAAdJSMAi1FlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tZZRqDY8AAHSUjAItSZQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjaWQylGoNjwAAdJSMAi1KlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tapRqDY8AAHSUjAItT5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLW+Uag2PAAB0lIwDLU9PlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tb2+Uag2PAAB0lIwCLVKUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1ylGoNjwAAdJSMAi1TlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNpZDOUag2PAAB0lIwCLVaUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi12lGoNjwAAdJSMAi1XlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24td5RqDY8AAHSUjAItWJQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjaWQ1lGoNjwAAdJSMAi1ilChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tYpRqDY8AAHSUjAItY5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLWOUag2PAAB0lIwCLWSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1klGoNjwAAdJSMAi1olChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24taJRqDY8AAHSUjAItaZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLWmUag2PAAB0lIwCLW2UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi1tlGoNjwAAdJSMAi1xlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tcZRqDY8AAHSUjAItc5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjY21kb3B0aW9uLXOUag2PAAB0lIwCLXWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi11lGoNjwAAdJSMAi12lChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNpZDSUag2PAAB0lIwCLXiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2NtZG9wdGlvbi14lGoNjwAAdJSMHmNvbXBpbGVhbGwuLS1pbnZhbGlkYXRpb24tbW9kZZQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjbWRvcHRpb24tY29tcGlsZWFsbC1pbnZhbGlkYXRpb24tbW9kZZRqDY8AAHSUjA1jb21waWxlYWxsLi1ilChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLWKUag2PAAB0lIwNY29tcGlsZWFsbC4tZJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjbWRvcHRpb24tY29tcGlsZWFsbC1klGoNjwAAdJSMDWNvbXBpbGVhbGwuLWaUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwtZpRqDY8AAHSUjA1jb21waWxlYWxsLi1plChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLWmUag2PAAB0lIwNY29tcGlsZWFsbC4tapQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjbWRvcHRpb24tY29tcGlsZWFsbC1qlGoNjwAAdJSMDWNvbXBpbGVhbGwuLWyUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwtbJRqDY8AAHSUjA1jb21waWxlYWxsLi1xlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29tcGlsZWFsbC5odG1sI2NtZG9wdGlvbi1jb21waWxlYWxsLXGUag2PAAB0lIwNY29tcGlsZWFsbC4tcpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjbWRvcHRpb24tY29tcGlsZWFsbC1ylGoNjwAAdJSMDWNvbXBpbGVhbGwuLXiUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb21waWxlYWxsLmh0bWwjY21kb3B0aW9uLWNvbXBpbGVhbGwteJRqDY8AAHSUjBRjb21waWxlYWxsLmRpcmVjdG9yeZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjbWRvcHRpb24tY29tcGlsZWFsbC1hcmctZGlyZWN0b3J5lGoNjwAAdJSMD2NvbXBpbGVhbGwuZmlsZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbXBpbGVhbGwuaHRtbCNjbWRvcHRpb24tY29tcGlsZWFsbC1hcmctZmlsZZRqDY8AAHSUjAtnemlwLi0tYmVzdJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2d6aXAuaHRtbCNjbWRvcHRpb24tZ3ppcC1iZXN0lGoNjwAAdJSMEWd6aXAuLS1kZWNvbXByZXNzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3ppcC5odG1sI2NtZG9wdGlvbi1nemlwLWSUag2PAAB0lIwLZ3ppcC4tLWZhc3SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nemlwLmh0bWwjY21kb3B0aW9uLWd6aXAtZmFzdJRqDY8AAHSUjAtnemlwLi0taGVscJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2d6aXAuaHRtbCNjbWRvcHRpb24tZ3ppcC1olGoNjwAAdJSMB2d6aXAuLWSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nemlwLmh0bWwjY21kb3B0aW9uLWd6aXAtZJRqDY8AAHSUjAdnemlwLi1olChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3ppcC5odG1sI2NtZG9wdGlvbi1nemlwLWiUag2PAAB0lIwJZ3ppcC5maWxllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3ppcC5odG1sI2NtZG9wdGlvbi1nemlwLWFyZy1maWxllGoNjwAAdJSMEWluc3BlY3QuLS1kZXRhaWxzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2NtZG9wdGlvbi1pbnNwZWN0LWRldGFpbHOUag2PAAB0lIwQanNvbi50b29sLi0taGVscJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNjbWRvcHRpb24tanNvbi10b29sLWiUag2PAAB0lIwWanNvbi50b29sLi0tanNvbi1saW5lc5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNjbWRvcHRpb24tanNvbi10b29sLWpzb24tbGluZXOUag2PAAB0lIwVanNvbi50b29sLi0tc29ydC1rZXlzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2NtZG9wdGlvbi1qc29uLXRvb2wtc29ydC1rZXlzlGoNjwAAdJSMDGpzb24udG9vbC4taJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNjbWRvcHRpb24tanNvbi10b29sLWiUag2PAAB0lIwQanNvbi50b29sLmluZmlsZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2pzb24uaHRtbCNjbWRvcHRpb24tanNvbi10b29sLWFyZy1pbmZpbGWUag2PAAB0lIwRanNvbi50b29sLm91dGZpbGWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWwjY21kb3B0aW9uLWpzb24tdG9vbC1hcmctb3V0ZmlsZZRqDY8AAHSUjBZwaWNrbGV0b29scy4tLWFubm90YXRllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNjbWRvcHRpb24tcGlja2xldG9vbHMtYZRqDY8AAHSUjBlwaWNrbGV0b29scy4tLWluZGVudGxldmVslChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNjbWRvcHRpb24tcGlja2xldG9vbHMtbJRqDY8AAHSUjBJwaWNrbGV0b29scy4tLW1lbW+UKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGV0b29scy5odG1sI2NtZG9wdGlvbi1waWNrbGV0b29scy1tlGoNjwAAdJSMFHBpY2tsZXRvb2xzLi0tb3V0cHV0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNjbWRvcHRpb24tcGlja2xldG9vbHMtb5RqDY8AAHSUjBZwaWNrbGV0b29scy4tLXByZWFtYmxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNjbWRvcHRpb24tcGlja2xldG9vbHMtcJRqDY8AAHSUjA5waWNrbGV0b29scy4tYZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZXRvb2xzLmh0bWwjY21kb3B0aW9uLXBpY2tsZXRvb2xzLWGUag2PAAB0lIwOcGlja2xldG9vbHMuLWyUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGV0b29scy5odG1sI2NtZG9wdGlvbi1waWNrbGV0b29scy1slGoNjwAAdJSMDnBpY2tsZXRvb2xzLi1tlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xldG9vbHMuaHRtbCNjbWRvcHRpb24tcGlja2xldG9vbHMtbZRqDY8AAHSUjA5waWNrbGV0b29scy4tb5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZXRvb2xzLmh0bWwjY21kb3B0aW9uLXBpY2tsZXRvb2xzLW+Uag2PAAB0lIwOcGlja2xldG9vbHMuLXCUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGV0b29scy5odG1sI2NtZG9wdGlvbi1waWNrbGV0b29scy1wlGoNjwAAdJSMEHNpdGUuLS11c2VyLWJhc2WUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaXRlLmh0bWwjY21kb3B0aW9uLXNpdGUtdXNlci1iYXNllGoNjwAAdJSMEHNpdGUuLS11c2VyLXNpdGWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaXRlLmh0bWwjY21kb3B0aW9uLXNpdGUtdXNlci1zaXRllGoNjwAAdJSMEHRhcmZpbGUuLS1jcmVhdGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjY21kb3B0aW9uLXRhcmZpbGUtY3JlYXRllGoNjwAAdJSMEXRhcmZpbGUuLS1leHRyYWN0lChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI2NtZG9wdGlvbi10YXJmaWxlLWV4dHJhY3SUag2PAAB0lIwOdGFyZmlsZS4tLWxpc3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjY21kb3B0aW9uLXRhcmZpbGUtbGlzdJRqDY8AAHSUjA50YXJmaWxlLi0tdGVzdJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCNjbWRvcHRpb24tdGFyZmlsZS10ZXN0lGoNjwAAdJSMEXRhcmZpbGUuLS12ZXJib3NllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI2NtZG9wdGlvbi10YXJmaWxlLXaUag2PAAB0lIwKdGFyZmlsZS4tY5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCNjbWRvcHRpb24tdGFyZmlsZS1jlGoNjwAAdJSMCnRhcmZpbGUuLWWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjY21kb3B0aW9uLXRhcmZpbGUtZZRqDY8AAHSUjAp0YXJmaWxlLi1slChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI2NtZG9wdGlvbi10YXJmaWxlLWyUag2PAAB0lIwKdGFyZmlsZS4tdJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCNjbWRvcHRpb24tdGFyZmlsZS10lGoNjwAAdJSMCnRhcmZpbGUuLXaUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjY21kb3B0aW9uLXRhcmZpbGUtdpRqDY8AAHSUjA10aW1laXQuLS1oZWxwlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1olGoNjwAAdJSMD3RpbWVpdC4tLW51bWJlcpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtbpRqDY8AAHSUjBB0aW1laXQuLS1wcm9jZXNzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1wlGoNjwAAdJSMD3RpbWVpdC4tLXJlcGVhdJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtcpRqDY8AAHSUjA50aW1laXQuLS1zZXR1cJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtc5RqDY8AAHSUjA10aW1laXQuLS11bml0lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC11lGoNjwAAdJSMEHRpbWVpdC4tLXZlcmJvc2WUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXaUag2PAAB0lIwJdGltZWl0Li1olChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1olGoNjwAAdJSMCXRpbWVpdC4tbpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtbpRqDY8AAHSUjAl0aW1laXQuLXCUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXCUag2PAAB0lIwJdGltZWl0Li1ylChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC1ylGoNjwAAdJSMCXRpbWVpdC4tc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI2NtZG9wdGlvbi10aW1laXQtc5RqDY8AAHSUjAl0aW1laXQuLXWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1laXQuaHRtbCNjbWRvcHRpb24tdGltZWl0LXWUag2PAAB0lIwJdGltZWl0Li12lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZWl0Lmh0bWwjY21kb3B0aW9uLXRpbWVpdC12lGoNjwAAdJSMEHRva2VuaXplLi0tZXhhY3SUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbml6ZS5odG1sI2NtZG9wdGlvbi10b2tlbml6ZS1llGoNjwAAdJSMD3Rva2VuaXplLi0taGVscJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuaXplLmh0bWwjY21kb3B0aW9uLXRva2VuaXplLWiUag2PAAB0lIwLdG9rZW5pemUuLWWUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90b2tlbml6ZS5odG1sI2NtZG9wdGlvbi10b2tlbml6ZS1llGoNjwAAdJSMC3Rva2VuaXplLi1olChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW5pemUuaHRtbCNjbWRvcHRpb24tdG9rZW5pemUtaJRqDY8AAHSUjA10cmFjZS4tLWNvdW50lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtY5RqDY8AAHSUjBB0cmFjZS4tLWNvdmVyZGlylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtY292ZXJkaXKUag2PAAB0lIwMdHJhY2UuLS1maWxllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtZpRqDY8AAHSUjAx0cmFjZS4tLWhlbHCUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1oZWxwlGoNjwAAdJSMEnRyYWNlLi0taWdub3JlLWRpcpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWlnbm9yZS1kaXKUag2PAAB0lIwVdHJhY2UuLS1pZ25vcmUtbW9kdWxllChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtaWdub3JlLW1vZHVsZZRqDY8AAHSUjBF0cmFjZS4tLWxpc3RmdW5jc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWyUag2PAAB0lIwPdHJhY2UuLS1taXNzaW5nlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtbZRqDY8AAHSUjBF0cmFjZS4tLW5vLXJlcG9ydJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLW5vLXJlcG9ydJRqDY8AAHSUjA50cmFjZS4tLXJlcG9ydJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXKUag2PAAB0lIwPdHJhY2UuLS1zdW1tYXJ5lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2Utc5RqDY8AAHSUjA50cmFjZS4tLXRpbWluZ5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWeUag2PAAB0lIwNdHJhY2UuLS10cmFjZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXSUag2PAAB0lIwSdHJhY2UuLS10cmFja2NhbGxzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtdHJhY2tjYWxsc5RqDY8AAHSUjA90cmFjZS4tLXZlcnNpb26UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS12ZXJzaW9ulGoNjwAAdJSMCHRyYWNlLi1DlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtY292ZXJkaXKUag2PAAB0lIwIdHJhY2UuLVKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1uby1yZXBvcnSUag2PAAB0lIwIdHJhY2UuLVSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS10cmFja2NhbGxzlGoNjwAAdJSMCHRyYWNlLi1jlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtY5RqDY8AAHSUjAh0cmFjZS4tZpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLWaUag2PAAB0lIwIdHJhY2UuLWeUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1nlGoNjwAAdJSMCHRyYWNlLi1slChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2UtbJRqDY8AAHSUjAh0cmFjZS4tbZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLW2Uag2PAAB0lIwIdHJhY2UuLXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI2NtZG9wdGlvbi10cmFjZS1ylGoNjwAAdJSMCHRyYWNlLi1zlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCNjbWRvcHRpb24tdHJhY2Utc5RqDY8AAHSUjAh0cmFjZS4tdJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RyYWNlLmh0bWwjY21kb3B0aW9uLXRyYWNlLXSUag2PAAB0lIwbdW5pdHRlc3QtZGlzY292ZXIuLS1wYXR0ZXJulChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItcJRqDY8AAHSUjCN1bml0dGVzdC1kaXNjb3Zlci4tLXN0YXJ0LWRpcmVjdG9yeZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWRpc2NvdmVyLXOUag2PAAB0lIwndW5pdHRlc3QtZGlzY292ZXIuLS10b3AtbGV2ZWwtZGlyZWN0b3J5lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItdJRqDY8AAHSUjBt1bml0dGVzdC1kaXNjb3Zlci4tLXZlcmJvc2WUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1kaXNjb3Zlci12lGoNjwAAdJSMFHVuaXR0ZXN0LWRpc2NvdmVyLi1wlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItcJRqDY8AAHSUjBR1bml0dGVzdC1kaXNjb3Zlci4tc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWRpc2NvdmVyLXOUag2PAAB0lIwUdW5pdHRlc3QtZGlzY292ZXIuLXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1kaXNjb3Zlci10lGoNjwAAdJSMFHVuaXR0ZXN0LWRpc2NvdmVyLi12lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtZGlzY292ZXItdpRqDY8AAHSUjBF1bml0dGVzdC4tLWJ1ZmZlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWKUag2PAAB0lIwQdW5pdHRlc3QuLS1jYXRjaJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWOUag2PAAB0lIwTdW5pdHRlc3QuLS1mYWlsZmFzdJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWaUag2PAAB0lIwRdW5pdHRlc3QuLS1sb2NhbHOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1sb2NhbHOUag2PAAB0lIwLdW5pdHRlc3QuLWKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1ilGoNjwAAdJSMC3VuaXR0ZXN0Li1jlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNjbWRvcHRpb24tdW5pdHRlc3QtY5RqDY8AAHSUjAt1bml0dGVzdC4tZpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjY21kb3B0aW9uLXVuaXR0ZXN0LWaUag2PAAB0lIwLdW5pdHRlc3QuLWuUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI2NtZG9wdGlvbi11bml0dGVzdC1rlGoNjwAAdJSMEXppcGFwcC4tLWNvbXByZXNzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwYXBwLmh0bWwjY21kb3B0aW9uLXppcGFwcC1jlGoNjwAAdJSMDXppcGFwcC4tLWhlbHCUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBhcHAuaHRtbCNjbWRvcHRpb24temlwYXBwLWiUag2PAAB0lIwNemlwYXBwLi0taW5mb5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGFwcC5odG1sI2NtZG9wdGlvbi16aXBhcHAtaW5mb5RqDY8AAHSUjA16aXBhcHAuLS1tYWlulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwYXBwLmh0bWwjY21kb3B0aW9uLXppcGFwcC1tlGoNjwAAdJSMD3ppcGFwcC4tLW91dHB1dJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGFwcC5odG1sI2NtZG9wdGlvbi16aXBhcHAtb5RqDY8AAHSUjA96aXBhcHAuLS1weXRob26UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBhcHAuaHRtbCNjbWRvcHRpb24temlwYXBwLXCUag2PAAB0lIwJemlwYXBwLi1jlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwYXBwLmh0bWwjY21kb3B0aW9uLXppcGFwcC1jlGoNjwAAdJSMCXppcGFwcC4taJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGFwcC5odG1sI2NtZG9wdGlvbi16aXBhcHAtaJRqDY8AAHSUjAl6aXBhcHAuLW2UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBhcHAuaHRtbCNjbWRvcHRpb24temlwYXBwLW2Uag2PAAB0lIwJemlwYXBwLi1vlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwYXBwLmh0bWwjY21kb3B0aW9uLXppcGFwcC1vlGoNjwAAdJSMCXppcGFwcC4tcJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGFwcC5odG1sI2NtZG9wdGlvbi16aXBhcHAtcJRqDY8AAHSUjBB6aXBmaWxlLi0tY3JlYXRllChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI2NtZG9wdGlvbi16aXBmaWxlLWNyZWF0ZZRqDY8AAHSUjBF6aXBmaWxlLi0tZXh0cmFjdJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCNjbWRvcHRpb24temlwZmlsZS1leHRyYWN0lGoNjwAAdJSMDnppcGZpbGUuLS1saXN0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI2NtZG9wdGlvbi16aXBmaWxlLWxpc3SUag2PAAB0lIwOemlwZmlsZS4tLXRlc3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjY21kb3B0aW9uLXppcGZpbGUtdGVzdJRqDY8AAHSUjAp6aXBmaWxlLi1jlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI2NtZG9wdGlvbi16aXBmaWxlLWOUag2PAAB0lIwKemlwZmlsZS4tZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCNjbWRvcHRpb24temlwZmlsZS1llGoNjwAAdJSMCnppcGZpbGUuLWyUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBmaWxlLmh0bWwjY21kb3B0aW9uLXppcGZpbGUtbJRqDY8AAHSUjAp6aXBmaWxlLi10lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI2NtZG9wdGlvbi16aXBmaWxlLXSUag2PAAB0lHWMCHN0ZDp0ZXJtlH2UKIwDLi4ulChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS0xlGoNjwAAdJSMBDJ0bzOUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLTJ0bzOUag2PAAB0lIwDPj4+lChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS0wlGoNjwAAdJSMCl9fZnV0dXJlX1+UKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWZ1dHVyZZRqDY8AAHSUjAlfX3Nsb3RzX1+UKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXNsb3RzlGoNjwAAdJSME2Fic3RyYWN0IGJhc2UgY2xhc3OUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWFic3RyYWN0LWJhc2UtY2xhc3OUag2PAAB0lIwKYW5ub3RhdGlvbpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tYW5ub3RhdGlvbpRqDY8AAHSUjAhhcmd1bWVudJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tYXJndW1lbnSUag2PAAB0lIwcYXN5bmNocm9ub3VzIGNvbnRleHQgbWFuYWdlcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tYXN5bmNocm9ub3VzLWNvbnRleHQtbWFuYWdlcpRqDY8AAHSUjBZhc3luY2hyb25vdXMgZ2VuZXJhdG9ylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1hc3luY2hyb25vdXMtZ2VuZXJhdG9ylGoNjwAAdJSMH2FzeW5jaHJvbm91cyBnZW5lcmF0b3IgaXRlcmF0b3KUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWFzeW5jaHJvbm91cy1nZW5lcmF0b3ItaXRlcmF0b3KUag2PAAB0lIwVYXN5bmNocm9ub3VzIGl0ZXJhYmxllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1hc3luY2hyb25vdXMtaXRlcmFibGWUag2PAAB0lIwVYXN5bmNocm9ub3VzIGl0ZXJhdG9ylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1hc3luY2hyb25vdXMtaXRlcmF0b3KUag2PAAB0lIwJYXR0cmlidXRllChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1hdHRyaWJ1dGWUag2PAAB0lIwJYXdhaXRhYmxllChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1hd2FpdGFibGWUag2PAAB0lIwEYmRmbJQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tYmRmbJRqDY8AAHSUjAtiaW5hcnkgZmlsZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tYmluYXJ5LWZpbGWUag2PAAB0lIwIYnl0ZWNvZGWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWJ5dGVjb2RllGoNjwAAdJSMEWJ5dGVzLWxpa2Ugb2JqZWN0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1ieXRlcy1saWtlLW9iamVjdJRqDY8AAHSUjAVjbGFzc5QoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tY2xhc3OUag2PAAB0lIwOY2xhc3MgdmFyaWFibGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWNsYXNzLXZhcmlhYmxllGoNjwAAdJSMCGNvZXJjaW9ulChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1jb2VyY2lvbpRqDY8AAHSUjA5jb21wbGV4IG51bWJlcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tY29tcGxleC1udW1iZXKUag2PAAB0lIwPY29udGV4dCBtYW5hZ2VylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1jb250ZXh0LW1hbmFnZXKUag2PAAB0lIwQY29udGV4dCB2YXJpYWJsZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tY29udGV4dC12YXJpYWJsZZRqDY8AAHSUjApjb250aWd1b3VzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1jb250aWd1b3VzlGoNjwAAdJSMCWNvcm91dGluZZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tY29yb3V0aW5llGoNjwAAdJSMEmNvcm91dGluZSBmdW5jdGlvbpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tY29yb3V0aW5lLWZ1bmN0aW9ulGoNjwAAdJSMB2NweXRob26UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWNweXRob26Uag2PAAB0lIwJZGVjb3JhdG9ylChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1kZWNvcmF0b3KUag2PAAB0lIwKZGVzY3JpcHRvcpQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tZGVzY3JpcHRvcpRqDY8AAHSUjApkaWN0aW9uYXJ5lChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1kaWN0aW9uYXJ5lGoNjwAAdJSMD2RpY3Rpb25hcnkgdmlld5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tZGljdGlvbmFyeS12aWV3lGoNjwAAdJSMCWRvY3N0cmluZ5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tZG9jc3RyaW5nlGoNjwAAdJSMC2R1Y2stdHlwaW5nlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1kdWNrLXR5cGluZ5RqDY8AAHSUjARlYWZwlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1lYWZwlGoNjwAAdJSMCmV4cHJlc3Npb26UKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWV4cHJlc3Npb26Uag2PAAB0lIwQZXh0ZW5zaW9uIG1vZHVsZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tZXh0ZW5zaW9uLW1vZHVsZZRqDY8AAHSUjAhmLXN0cmluZ5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tZi1zdHJpbmeUag2PAAB0lIwLZmlsZSBvYmplY3SUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWZpbGUtb2JqZWN0lGoNjwAAdJSMEGZpbGUtbGlrZSBvYmplY3SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWZpbGUtbGlrZS1vYmplY3SUag2PAAB0lIwGZmluZGVylChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1maW5kZXKUag2PAAB0lIwOZmxvb3IgZGl2aXNpb26UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWZsb29yLWRpdmlzaW9ulGoNjwAAdJSMCGZ1bmN0aW9ulChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1mdW5jdGlvbpRqDY8AAHSUjBNmdW5jdGlvbiBhbm5vdGF0aW9ulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1mdW5jdGlvbi1hbm5vdGF0aW9ulGoNjwAAdJSMEmdhcmJhZ2UgY29sbGVjdGlvbpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tZ2FyYmFnZS1jb2xsZWN0aW9ulGoNjwAAdJSMCWdlbmVyYXRvcpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tZ2VuZXJhdG9ylGoNjwAAdJSMFGdlbmVyYXRvciBleHByZXNzaW9ulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1nZW5lcmF0b3ItZXhwcmVzc2lvbpRqDY8AAHSUjBJnZW5lcmF0b3IgaXRlcmF0b3KUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWdlbmVyYXRvci1pdGVyYXRvcpRqDY8AAHSUjBBnZW5lcmljIGZ1bmN0aW9ulChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1nZW5lcmljLWZ1bmN0aW9ulGoNjwAAdJSMA2dpbJQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tZ2lslGoNjwAAdJSMF2dsb2JhbCBpbnRlcnByZXRlciBsb2NrlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1nbG9iYWwtaW50ZXJwcmV0ZXItbG9ja5RqDY8AAHSUjA5oYXNoLWJhc2VkIHB5Y5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0taGFzaC1iYXNlZC1weWOUag2PAAB0lIwIaGFzaGFibGWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWhhc2hhYmxllGoNjwAAdJSMBGlkbGWUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWlkbGWUag2PAAB0lIwJaW1tdXRhYmxllChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1pbW11dGFibGWUag2PAAB0lIwLaW1wb3J0IHBhdGiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWltcG9ydC1wYXRolGoNjwAAdJSMCGltcG9ydGVylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1pbXBvcnRlcpRqDY8AAHSUjAlpbXBvcnRpbmeUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWltcG9ydGluZ5RqDY8AAHSUjAtpbnRlcmFjdGl2ZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0taW50ZXJhY3RpdmWUag2PAAB0lIwLaW50ZXJwcmV0ZWSUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWludGVycHJldGVklGoNjwAAdJSMFGludGVycHJldGVyIHNodXRkb3dulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1pbnRlcnByZXRlci1zaHV0ZG93bpRqDY8AAHSUjAhpdGVyYWJsZZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0taXRlcmFibGWUag2PAAB0lIwIaXRlcmF0b3KUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWl0ZXJhdG9ylGoNjwAAdJSMDGtleSBmdW5jdGlvbpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0ta2V5LWZ1bmN0aW9ulGoNjwAAdJSMEGtleXdvcmQgYXJndW1lbnSUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLWtleXdvcmQtYXJndW1lbnSUag2PAAB0lIwGbGFtYmRhlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1sYW1iZGGUag2PAAB0lIwEbGJ5bJQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tbGJ5bJRqDY8AAHSUjARsaXN0lChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1saXN0lGoNjwAAdJSMEmxpc3QgY29tcHJlaGVuc2lvbpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tbGlzdC1jb21wcmVoZW5zaW9ulGoNjwAAdJSMBmxvYWRlcpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tbG9hZGVylGoNjwAAdJSMDG1hZ2ljIG1ldGhvZJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tbWFnaWMtbWV0aG9klGoNjwAAdJSMB21hcHBpbmeUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW1hcHBpbmeUag2PAAB0lIwQbWV0YSBwYXRoIGZpbmRlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tbWV0YS1wYXRoLWZpbmRlcpRqDY8AAHSUjAltZXRhY2xhc3OUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW1ldGFjbGFzc5RqDY8AAHSUjAZtZXRob2SUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW1ldGhvZJRqDY8AAHSUjBdtZXRob2QgcmVzb2x1dGlvbiBvcmRlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tbWV0aG9kLXJlc29sdXRpb24tb3JkZXKUag2PAAB0lIwGbW9kdWxllChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1tb2R1bGWUag2PAAB0lIwLbW9kdWxlIHNwZWOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW1vZHVsZS1zcGVjlGoNjwAAdJSMA21yb5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tbXJvlGoNjwAAdJSMB211dGFibGWUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW11dGFibGWUag2PAAB0lIwLbmFtZWQgdHVwbGWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW5hbWVkLXR1cGxllGoNjwAAdJSMCW5hbWVzcGFjZZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tbmFtZXNwYWNllGoNjwAAdJSMEW5hbWVzcGFjZSBwYWNrYWdllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1uYW1lc3BhY2UtcGFja2FnZZRqDY8AAHSUjAxuZXN0ZWQgc2NvcGWUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW5lc3RlZC1zY29wZZRqDY8AAHSUjA9uZXctc3R5bGUgY2xhc3OUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW5ldy1zdHlsZS1jbGFzc5RqDY8AAHSUjAZvYmplY3SUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLW9iamVjdJRqDY8AAHSUjAdwYWNrYWdllChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1wYWNrYWdllGoNjwAAdJSMCXBhcmFtZXRlcpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tcGFyYW1ldGVylGoNjwAAdJSMEXBhdGggYmFzZWQgZmluZGVylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1wYXRoLWJhc2VkLWZpbmRlcpRqDY8AAHSUjApwYXRoIGVudHJ5lChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1wYXRoLWVudHJ5lGoNjwAAdJSMEXBhdGggZW50cnkgZmluZGVylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1wYXRoLWVudHJ5LWZpbmRlcpRqDY8AAHSUjA9wYXRoIGVudHJ5IGhvb2uUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXBhdGgtZW50cnktaG9va5RqDY8AAHSUjBBwYXRoLWxpa2Ugb2JqZWN0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1wYXRoLWxpa2Utb2JqZWN0lGoNjwAAdJSMA3BlcJQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tcGVwlGoNjwAAdJSMB3BvcnRpb26UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXBvcnRpb26Uag2PAAB0lIwTcG9zaXRpb25hbCBhcmd1bWVudJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tcG9zaXRpb25hbC1hcmd1bWVudJRqDY8AAHSUjA9wcm92aXNpb25hbCBhcGmUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXByb3Zpc2lvbmFsLWFwaZRqDY8AAHSUjBNwcm92aXNpb25hbCBwYWNrYWdllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1wcm92aXNpb25hbC1wYWNrYWdllGoNjwAAdJSMC3B5dGhvbiAzMDAwlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1weXRob24tMzAwMJRqDY8AAHSUjAhweXRob25pY5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tcHl0aG9uaWOUag2PAAB0lIwOcXVhbGlmaWVkIG5hbWWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXF1YWxpZmllZC1uYW1llGoNjwAAdJSMD3JlZmVyZW5jZSBjb3VudJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tcmVmZXJlbmNlLWNvdW50lGoNjwAAdJSMD3JlZ3VsYXIgcGFja2FnZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tcmVndWxhci1wYWNrYWdllGoNjwAAdJSMCHNlcXVlbmNllChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS1zZXF1ZW5jZZRqDY8AAHSUjA9zaW5nbGUgZGlzcGF0Y2iUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXNpbmdsZS1kaXNwYXRjaJRqDY8AAHSUjAVzbGljZZQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tc2xpY2WUag2PAAB0lIwOc3BlY2lhbCBtZXRob2SUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXNwZWNpYWwtbWV0aG9klGoNjwAAdJSMCXN0YXRlbWVudJQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tc3RhdGVtZW50lGoNjwAAdJSMDXRleHQgZW5jb2RpbmeUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXRleHQtZW5jb2RpbmeUag2PAAB0lIwJdGV4dCBmaWxllChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS10ZXh0LWZpbGWUag2PAAB0lIwUdHJpcGxlLXF1b3RlZCBzdHJpbmeUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXRyaXBsZS1xdW90ZWQtc3RyaW5nlGoNjwAAdJSMBHR5cGWUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXR5cGWUag2PAAB0lIwKdHlwZSBhbGlhc5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0tdHlwZS1hbGlhc5RqDY8AAHSUjAl0eXBlIGhpbnSUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXR5cGUtaGludJRqDY8AAHSUjBJ1bml2ZXJzYWwgbmV3bGluZXOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXVuaXZlcnNhbC1uZXdsaW5lc5RqDY8AAHSUjBN2YXJpYWJsZSBhbm5vdGF0aW9ulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS12YXJpYWJsZS1hbm5vdGF0aW9ulGoNjwAAdJSME3ZpcnR1YWwgZW52aXJvbm1lbnSUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCN0ZXJtLXZpcnR1YWwtZW52aXJvbm1lbnSUag2PAAB0lIwPdmlydHVhbCBtYWNoaW5llChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjdGVybS12aXJ0dWFsLW1hY2hpbmWUag2PAAB0lIwNemVuIG9mIHB5dGhvbpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9nbG9zc2FyeS5odG1sI3Rlcm0temVuLW9mLXB5dGhvbpRqDY8AAHSUdYwJc3RkOmxhYmVslH2UKIwGMjNhY2tzlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuMy5odG1sI2Fja3OUjBBBY2tub3dsZWRnZW1lbnRzlHSUjA8yM3NlY3Rpb24tb3RoZXKUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1vdGhlcpSMF090aGVyIENoYW5nZXMgYW5kIEZpeGVzlHSUjAYyNGFja3OUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi40Lmh0bWwjYWNrc5SMEEFja25vd2xlZGdlbWVudHOUdJSMDTI1aW50ZXJhY3RpdmWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi41Lmh0bWwjaW50ZXJhY3RpdmWUjB9JbnRlcmFjdGl2ZSBJbnRlcnByZXRlciBDaGFuZ2VzlHSUjAkyNW1vZHVsZXOUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi41Lmh0bWwjbW9kdWxlc5SMIk5ldywgSW1wcm92ZWQsIGFuZCBSZW1vdmVkIE1vZHVsZXOUdJSMBjI2YWNrc5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjYuaHRtbCNhY2tzlIwQQWNrbm93bGVkZ2VtZW50c5R0lIwLMnRvMy1maXhlcnOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjdG8zLWZpeGVyc5SMBkZpeGVyc5R0lIwOMnRvMy1yZWZlcmVuY2WUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjdG8zLXJlZmVyZW5jZZSMLzJ0bzMgLSBBdXRvbWF0ZWQgUHl0aG9uIDIgdG8gMyBjb2RlIHRyYW5zbGF0aW9ulHSUjAoydG8zLXVzaW5nlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sI3RvMy11c2luZ5SMClVzaW5nIDJ0bzOUdJSMHDM3LXBsYXRmb3JtLXN1cHBvcnQtcmVtb3ZhbHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy43Lmh0bWwjcGxhdGZvcm0tc3VwcG9ydC1yZW1vdmFsc5SMGVBsYXRmb3JtIFN1cHBvcnQgUmVtb3ZhbHOUdJSMFDY0LWJpdC1hY2Nlc3MtcmlnaHRzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjYml0LWFjY2Vzcy1yaWdodHOUjA82NC1iaXQgU3BlY2lmaWOUdJSMCGFic3RyYWN0lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Fic3RyYWN0Lmh0bWwjYWJzdHJhY3SUjBZBYnN0cmFjdCBPYmplY3RzIExheWVylHSUjBthYnN0cmFjdC1iYXNpYy1hdXRoLWhhbmRsZXKUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI2Fic3RyYWN0LWJhc2ljLWF1dGgtaGFuZGxlcpSMIEFic3RyYWN0QmFzaWNBdXRoSGFuZGxlciBPYmplY3RzlHSUjBxhYnN0cmFjdC1kaWdlc3QtYXV0aC1oYW5kbGVylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNhYnN0cmFjdC1kaWdlc3QtYXV0aC1oYW5kbGVylIwhQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlciBPYmplY3RzlHSUjBBhYnN0cmFjdC1ncmFtbWFylChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWwjYWJzdHJhY3QtZ3JhbW1hcpSMEEFic3RyYWN0IEdyYW1tYXKUdJSMDWFjY2Vzcy1yaWdodHOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCNhY2Nlc3MtcmlnaHRzlIwNQWNjZXNzIFJpZ2h0c5R0lIwGYWNrczI3lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNy5odG1sI2Fja3MyN5SMEEFja25vd2xlZGdlbWVudHOUdJSMEmFkdmFuY2VkLWRlYnVnZ2luZ5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjYWR2YW5jZWQtZGVidWdnaW5nlIwZQWR2YW5jZWQgRGVidWdnZXIgU3VwcG9ydJR0lIwSYWxsb2NhdGluZy1vYmplY3RzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FsbG9jYXRpb24uaHRtbCNhbGxvY2F0aW5nLW9iamVjdHOUjB5BbGxvY2F0aW5nIE9iamVjdHMgb24gdGhlIEhlYXCUdJSMBWFsbG9zlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWxsb3MuaHRtbCNhbGxvc5SMIUdlbmVyaWMgT3BlcmF0aW5nIFN5c3RlbSBTZXJ2aWNlc5R0lIwMYWxsb3dfYWJicmV2lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhbGxvdy1hYmJyZXaUag2PAAB0lIwDYW5klChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2FuZJSMEkJvb2xlYW4gb3BlcmF0aW9uc5R0lIwJYW5uYXNzaWdulChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNhbm5hc3NpZ26UjB9Bbm5vdGF0ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzlHSUjA1hcGktZGVidWdnaW5nlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ludHJvLmh0bWwjYXBpLWRlYnVnZ2luZ5SMEERlYnVnZ2luZyBCdWlsZHOUdJSMDWFwaS1lbWJlZGRpbmeUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW50cm8uaHRtbCNhcGktZW1iZWRkaW5nlIwQRW1iZWRkaW5nIFB5dGhvbpR0lIwOYXBpLWV4Y2VwdGlvbnOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW50cm8uaHRtbCNhcGktZXhjZXB0aW9uc5SMCkV4Y2VwdGlvbnOUdJSMDGFwaS1pbmNsdWRlc5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbnRyby5odG1sI2FwaS1pbmNsdWRlc5SMDUluY2x1ZGUgRmlsZXOUdJSMCWFwaS1pbnRyb5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbnRyby5odG1sI2FwaS1pbnRyb5SMDEludHJvZHVjdGlvbpR0lIwLYXBpLW9iamVjdHOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW50cm8uaHRtbCNhcGktb2JqZWN0c5SMI09iamVjdHMsIFR5cGVzIGFuZCBSZWZlcmVuY2UgQ291bnRzlHSUjBNhcGktcmVmY291bnRkZXRhaWxzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ludHJvLmh0bWwjYXBpLXJlZmNvdW50ZGV0YWlsc5SMF1JlZmVyZW5jZSBDb3VudCBEZXRhaWxzlHSUjA1hcGktcmVmY291bnRzlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ludHJvLmh0bWwjYXBpLXJlZmNvdW50c5SMEFJlZmVyZW5jZSBDb3VudHOUdJSMDWFwaS1yZWZlcmVuY2WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1sI2FwaS1yZWZlcmVuY2WUjA1BUEkgUmVmZXJlbmNllHSUjAlhcGktdHlwZXOUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW50cm8uaHRtbCNhcGktdHlwZXOUjAVUeXBlc5R0lIwNYXBpYWJpdmVyc2lvbpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9hcGlhYml2ZXJzaW9uLmh0bWwjYXBpYWJpdmVyc2lvbpSMFkFQSSBhbmQgQUJJIFZlcnNpb25pbmeUdJSMGWFyYml0cmFyeS1vYmplY3QtbWVzc2FnZXOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy5odG1sI2FyYml0cmFyeS1vYmplY3QtbWVzc2FnZXOUjCNVc2luZyBhcmJpdHJhcnkgb2JqZWN0cyBhcyBtZXNzYWdlc5R0lIwJYXJjaGl2aW5nlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJjaGl2aW5nLmh0bWwjYXJjaGl2aW5nlIweRGF0YSBDb21wcmVzc2lvbiBhbmQgQXJjaGl2aW5nlHSUjBRhcmNoaXZpbmctb3BlcmF0aW9uc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI2FyY2hpdmluZy1vcGVyYXRpb25zlIwUQXJjaGl2aW5nIG9wZXJhdGlvbnOUdJSMC2FyZy1wYXJzaW5nlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FyZy5odG1sI2FyZy1wYXJzaW5nlIwlUGFyc2luZyBhcmd1bWVudHMgYW5kIGJ1aWxkaW5nIHZhbHVlc5R0lIwRYXJncGFyc2UtdHV0b3JpYWyUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vYXJncGFyc2UuaHRtbCNpZDGUag2PAAB0lIwSYXJncGFyc2UucmVtYWluZGVylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNhcmdwYXJzZS1yZW1haW5kZXKUag2PAAB0lIwEYXJnc5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjYXJnc5SMD0JleW9uZCBzeXMuYXJndpR0lIwCYXOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjYXOUjBJUaGUgd2l0aCBzdGF0ZW1lbnSUdJSMBmFzc2VydJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjYXNzZXJ0lIwUVGhlIGFzc2VydCBzdGF0ZW1lbnSUdJSMDmFzc2VydC1tZXRob2RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNhc3NlcnQtbWV0aG9kc5RqDY8AAHSUjAphc3NpZ25tZW50lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNhc3NpZ25tZW50lIwVQXNzaWdubWVudCBzdGF0ZW1lbnRzlHSUjAVhc3luY5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNhc3luY5SMCkNvcm91dGluZXOUdJSMCWFzeW5jIGRlZpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNhc3luYy1kZWaUjB1Db3JvdXRpbmUgZnVuY3Rpb24gZGVmaW5pdGlvbpR0lIwJYXN5bmMgZm9ylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2FzeW5jLWZvcpSMF1RoZSBhc3luYyBmb3Igc3RhdGVtZW50lHSUjAphc3luYyB3aXRolChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2FzeW5jLXdpdGiUjBhUaGUgYXN5bmMgd2l0aCBzdGF0ZW1lbnSUdJSMFmFzeW5jLWNvbnRleHQtbWFuYWdlcnOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2FzeW5jLWNvbnRleHQtbWFuYWdlcnOUjB1Bc3luY2hyb25vdXMgQ29udGV4dCBNYW5hZ2Vyc5R0lIwPYXN5bmMtaXRlcmF0b3JzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNhc3luYy1pdGVyYXRvcnOUjBZBc3luY2hyb25vdXMgSXRlcmF0b3JzlHSUjA1hc3luYy1zdHJ1Y3RzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNhc3luYy1zdHJ1Y3RzlIwXQXN5bmMgT2JqZWN0IFN0cnVjdHVyZXOUdJSMEGFzeW5jaGF0LWV4YW1wbGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2hhdC5odG1sI2FzeW5jaGF0LWV4YW1wbGWUjBBhc3luY2hhdCBFeGFtcGxllHSUjCBhc3luY2hyb25vdXMtZ2VuZXJhdG9yLWZ1bmN0aW9uc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNhc3luY2hyb25vdXMtZ2VuZXJhdG9yLWZ1bmN0aW9uc5SMIEFzeW5jaHJvbm91cyBnZW5lcmF0b3IgZnVuY3Rpb25zlHSUjB5hc3luY2hyb25vdXMtZ2VuZXJhdG9yLW1ldGhvZHOUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYXN5bmNocm9ub3VzLWdlbmVyYXRvci1tZXRob2RzlIwnQXN5bmNocm9ub3VzIGdlbmVyYXRvci1pdGVyYXRvciBtZXRob2RzlHSUjBJhc3luY2lvLWF3YWl0YWJsZXOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLWF3YWl0YWJsZXOUjApBd2FpdGFibGVzlHSUjB9hc3luY2lvLWNvcm91dGluZS1ub3Qtc2NoZWR1bGVklChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1kZXYuaHRtbCNhc3luY2lvLWNvcm91dGluZS1ub3Qtc2NoZWR1bGVklIwfRGV0ZWN0IG5ldmVyLWF3YWl0ZWQgY29yb3V0aW5lc5R0lIwSYXN5bmNpby1kZWJ1Zy1tb2RllChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1kZXYuaHRtbCNhc3luY2lvLWRlYnVnLW1vZGWUjApEZWJ1ZyBNb2RllHSUjBVhc3luY2lvLWRlbGF5ZWQtY2FsbHOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8tZGVsYXllZC1jYWxsc5SMHFNjaGVkdWxpbmcgZGVsYXllZCBjYWxsYmFja3OUdJSMC2FzeW5jaW8tZGV2lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1kZXYuaHRtbCNhc3luY2lvLWRldpSMF0RldmVsb3Bpbmcgd2l0aCBhc3luY2lvlHSUjBJhc3luY2lvLWV2ZW50LWxvb3CUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8tZXZlbnQtbG9vcJSMEkV2ZW50IExvb3AgTWV0aG9kc5R0lIwTYXN5bmNpby1ldmVudC1sb29wc5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby1ldmVudC1sb29wc5SMGkV2ZW50IExvb3AgSW1wbGVtZW50YXRpb25zlHSUjBJhc3luY2lvLWV4Y2VwdGlvbnOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV4Y2VwdGlvbnMuaHRtbCNhc3luY2lvLWV4Y2VwdGlvbnOUjApFeGNlcHRpb25zlHSUjA9hc3luY2lvLWZ1dHVyZXOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWZ1dHVyZS5odG1sI2FzeW5jaW8tZnV0dXJlc5SMB0Z1dHVyZXOUdJSMF2FzeW5jaW8taGFuZGxlLWJsb2NraW5nlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1kZXYuaHRtbCNhc3luY2lvLWhhbmRsZS1ibG9ja2luZ5SMFVJ1bm5pbmcgQmxvY2tpbmcgQ29kZZR0lIwOYXN5bmNpby1sb2dnZXKUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWRldi5odG1sI2FzeW5jaW8tbG9nZ2VylIwHTG9nZ2luZ5R0lIwWYXN5bmNpby1tdWx0aXRocmVhZGluZ5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZGV2Lmh0bWwjYXN5bmNpby1tdWx0aXRocmVhZGluZ5SMHkNvbmN1cnJlbmN5IGFuZCBNdWx0aXRocmVhZGluZ5R0lIwVYXN5bmNpby1wYXNzLWtleXdvcmRzlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLXBhc3Mta2V5d29yZHOUag2PAAB0lIwYYXN5bmNpby1wbGF0Zm9ybS1zdXBwb3J0lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wbGF0Zm9ybXMuaHRtbCNhc3luY2lvLXBsYXRmb3JtLXN1cHBvcnSUjBBQbGF0Zm9ybSBTdXBwb3J0lHSUjBBhc3luY2lvLXBvbGljaWVzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wb2xpY3kuaHRtbCNhc3luY2lvLXBvbGljaWVzlIwIUG9saWNpZXOUdJSMEGFzeW5jaW8tcHJvdG9jb2yUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby1wcm90b2NvbJSMCVByb3RvY29sc5R0lIwOYXN5bmNpby1xdWV1ZXOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXF1ZXVlLmh0bWwjYXN5bmNpby1xdWV1ZXOUjAZRdWV1ZXOUdJSMD2FzeW5jaW8tc3RyZWFtc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby1zdHJlYW1zlIwHU3RyZWFtc5R0lIwSYXN5bmNpby1zdWJwcm9jZXNzlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLmh0bWwjYXN5bmNpby1zdWJwcm9jZXNzlIwMU3VicHJvY2Vzc2VzlHSUjBxhc3luY2lvLXN1YnByb2Nlc3MtcHJvdG9jb2xzlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8tc3VicHJvY2Vzcy1wcm90b2NvbHOUjBRTdWJwcm9jZXNzIFByb3RvY29sc5R0lIwaYXN5bmNpby1zdWJwcm9jZXNzLXRocmVhZHOUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MuaHRtbCNhc3luY2lvLXN1YnByb2Nlc3MtdGhyZWFkc5SMFlN1YnByb2Nlc3MgYW5kIFRocmVhZHOUdJSMHWFzeW5jaW8tc3VicHJvY2Vzcy10cmFuc3BvcnRzlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8tc3VicHJvY2Vzcy10cmFuc3BvcnRzlIwVU3VicHJvY2VzcyBUcmFuc3BvcnRzlHSUjAxhc3luY2lvLXN5bmOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN5bmMuaHRtbCNhc3luY2lvLXN5bmOUjBpTeW5jaHJvbml6YXRpb24gUHJpbWl0aXZlc5R0lIwfYXN5bmNpby10Y3AtZWNoby1jbGllbnQtc3RyZWFtc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby10Y3AtZWNoby1jbGllbnQtc3RyZWFtc5SMHVRDUCBlY2hvIGNsaWVudCB1c2luZyBzdHJlYW1zlHSUjB9hc3luY2lvLXRjcC1lY2hvLXNlcnZlci1zdHJlYW1zlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0uaHRtbCNhc3luY2lvLXRjcC1lY2hvLXNlcnZlci1zdHJlYW1zlIwdVENQIGVjaG8gc2VydmVyIHVzaW5nIHN0cmVhbXOUdJSMEWFzeW5jaW8tdHJhbnNwb3J0lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8tdHJhbnNwb3J0lIwKVHJhbnNwb3J0c5R0lIwcYXN5bmNpby10cmFuc3BvcnRzLXByb3RvY29sc5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLXRyYW5zcG9ydHMtcHJvdG9jb2xzlIwYVHJhbnNwb3J0cyBhbmQgUHJvdG9jb2xzlHSUjCBhc3luY2lvLXVkcC1lY2hvLWNsaWVudC1wcm90b2NvbJQoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLXVkcC1lY2hvLWNsaWVudC1wcm90b2NvbJSMD1VEUCBFY2hvIENsaWVudJR0lIwgYXN5bmNpby11ZHAtZWNoby1zZXJ2ZXItcHJvdG9jb2yUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby11ZHAtZWNoby1zZXJ2ZXItcHJvdG9jb2yUjA9VRFAgRWNobyBTZXJ2ZXKUdJSMEGFzeW5jaW8td2F0Y2hlcnOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXBvbGljeS5odG1sI2FzeW5jaW8td2F0Y2hlcnOUjBBQcm9jZXNzIFdhdGNoZXJzlHSUjBphc3luY2lvLXdpbmRvd3Mtc3VicHJvY2Vzc5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcGxhdGZvcm1zLmh0bWwjYXN5bmNpby13aW5kb3dzLXN1YnByb2Nlc3OUjB1TdWJwcm9jZXNzIFN1cHBvcnQgb24gV2luZG93c5R0lIwaYXN5bmNpb19leGFtcGxlX2NhbGxfbGF0ZXKUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1sI2FzeW5jaW8tZXhhbXBsZS1jYWxsLWxhdGVylIwqRGlzcGxheSB0aGUgY3VycmVudCBkYXRlIHdpdGggY2FsbF9sYXRlcigplHSUjCFhc3luY2lvX2V4YW1wbGVfY3JlYXRlX2Nvbm5lY3Rpb26UKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby1leGFtcGxlLWNyZWF0ZS1jb25uZWN0aW9ulIwbQ29ubmVjdGluZyBFeGlzdGluZyBTb2NrZXRzlHSUjClhc3luY2lvX2V4YW1wbGVfY3JlYXRlX2Nvbm5lY3Rpb24tc3RyZWFtc5QoagqPAABqC48AAIxfaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby1leGFtcGxlLWNyZWF0ZS1jb25uZWN0aW9uLXN0cmVhbXOUjDZSZWdpc3RlciBhbiBvcGVuIHNvY2tldCB0byB3YWl0IGZvciBkYXRhIHVzaW5nIHN0cmVhbXOUdJSMJmFzeW5jaW9fZXhhbXBsZV9jcmVhdGVfc3VicHJvY2Vzc19leGVjlChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLmh0bWwjYXN5bmNpby1leGFtcGxlLWNyZWF0ZS1zdWJwcm9jZXNzLWV4ZWOUag2PAAB0lIwWYXN5bmNpb19leGFtcGxlX2Z1dHVyZZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZnV0dXJlLmh0bWwjYXN5bmNpby1leGFtcGxlLWZ1dHVyZZRqDY8AAHSUjBZhc3luY2lvX2V4YW1wbGVfZ2F0aGVylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby1leGFtcGxlLWdhdGhlcpRqDY8AAHSUjCNhc3luY2lvX2V4YW1wbGVfbG93bGV2ZWxfaGVsbG93b3JsZJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby1leGFtcGxlLWxvd2xldmVsLWhlbGxvd29ybGSUlQcAAQAAAAAAjBxIZWxsbyBXb3JsZCB3aXRoIGNhbGxfc29vbigplHSUjBphc3luY2lvX2V4YW1wbGVfcXVldWVfZGlzdJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcXVldWUuaHRtbCNhc3luY2lvLWV4YW1wbGUtcXVldWUtZGlzdJRqDY8AAHSUjBVhc3luY2lvX2V4YW1wbGVfc2xlZXCUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLWV4YW1wbGUtc2xlZXCUag2PAAB0lIwWYXN5bmNpb19leGFtcGxlX3N0cmVhbZQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWwjYXN5bmNpby1leGFtcGxlLXN0cmVhbZRqDY8AAHSUjCBhc3luY2lvX2V4YW1wbGVfc3VicHJvY2Vzc19wcm90b5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wuaHRtbCNhc3luY2lvLWV4YW1wbGUtc3VicHJvY2Vzcy1wcm90b5SMLWxvb3Auc3VicHJvY2Vzc19leGVjKCkgYW5kIFN1YnByb2Nlc3NQcm90b2NvbJR0lIwgYXN5bmNpb19leGFtcGxlX3N1YnByb2Nlc3Nfc2hlbGyUKGoKjwAAaguPAACMWmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MuaHRtbCNhc3luY2lvLWV4YW1wbGUtc3VicHJvY2Vzcy1zaGVsbJRqDY8AAHSUjBphc3luY2lvX2V4YW1wbGVfc3luY19ldmVudJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3luYy5odG1sI2FzeW5jaW8tZXhhbXBsZS1zeW5jLWV2ZW50lGoNjwAAdJSMG2FzeW5jaW9fZXhhbXBsZV90YXNrX2NhbmNlbJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tdGFzay5odG1sI2FzeW5jaW8tZXhhbXBsZS10YXNrLWNhbmNlbJRqDY8AAHSUjChhc3luY2lvX2V4YW1wbGVfdGNwX2VjaG9fY2xpZW50X3Byb3RvY29slChqCo8AAGoLjwAAjGBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5odG1sI2FzeW5jaW8tZXhhbXBsZS10Y3AtZWNoby1jbGllbnQtcHJvdG9jb2yUjA9UQ1AgRWNobyBDbGllbnSUdJSMKGFzeW5jaW9fZXhhbXBsZV90Y3BfZWNob19zZXJ2ZXJfcHJvdG9jb2yUKGoKjwAAaguPAACMYGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWwjYXN5bmNpby1leGFtcGxlLXRjcC1lY2hvLXNlcnZlci1wcm90b2NvbJSMD1RDUCBFY2hvIFNlcnZlcpR0lIwcYXN5bmNpb19leGFtcGxlX3VuaXhfc2lnbmFsc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLmh0bWwjYXN5bmNpby1leGFtcGxlLXVuaXgtc2lnbmFsc5SMKlNldCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR0lOVCBhbmQgU0lHVEVSTZR0lIweYXN5bmNpb19leGFtcGxlX3dhaXRfY29yb3V0aW5llChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby1leGFtcGxlLXdhaXQtY29yb3V0aW5llGoNjwAAdJSMF2FzeW5jaW9fZXhhbXBsZV93YWl0Zm9ylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjYXN5bmNpby1leGFtcGxlLXdhaXRmb3KUag2PAAB0lIwYYXN5bmNpb19leGFtcGxlX3dhdGNoX2ZklChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AuaHRtbCNhc3luY2lvLWV4YW1wbGUtd2F0Y2gtZmSUjCdXYXRjaCBhIGZpbGUgZGVzY3JpcHRvciBmb3IgcmVhZCBldmVudHOUdJSMHGFzeW5jaW9fZ2VuZXJhdG9yX2Jhc2VkX2Nvcm+UKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXRhc2suaHRtbCNhc3luY2lvLWdlbmVyYXRvci1iYXNlZC1jb3JvlIwaR2VuZXJhdG9yLWJhc2VkIENvcm91dGluZXOUdJSMEmFzeW5jb3JlLWV4YW1wbGUtMZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWwjYXN5bmNvcmUtZXhhbXBsZS0xlIwiYXN5bmNvcmUgRXhhbXBsZSBiYXNpYyBIVFRQIGNsaWVudJR0lIwSYXN5bmNvcmUtZXhhbXBsZS0ylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNvcmUuaHRtbCNhc3luY29yZS1leGFtcGxlLTKUjCJhc3luY29yZSBFeGFtcGxlIGJhc2ljIGVjaG8gc2VydmVylHSUjA5hdGV4aXQtZXhhbXBsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F0ZXhpdC5odG1sI2F0ZXhpdC1leGFtcGxllIwOYXRleGl0IEV4YW1wbGWUdJSMEGF0b20taWRlbnRpZmllcnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYXRvbS1pZGVudGlmaWVyc5SME0lkZW50aWZpZXJzIChOYW1lcymUdJSMDWF0b20tbGl0ZXJhbHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYXRvbS1saXRlcmFsc5SMCExpdGVyYWxzlHSUjAVhdG9tc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNhdG9tc5SMBUF0b21zlHSUjBBhdHRyLXRhcmdldC1ub3RllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNhdHRyLXRhcmdldC1ub3RllGoNjwAAdJSMEGF0dHJpYnV0ZS1hY2Nlc3OUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2F0dHJpYnV0ZS1hY2Nlc3OUjBxDdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzlHSUjBRhdHRyaWJ1dGUtcmVmZXJlbmNlc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNhdHRyaWJ1dGUtcmVmZXJlbmNlc5SMFEF0dHJpYnV0ZSByZWZlcmVuY2VzlHSUjBVhdHRyaWJ1dGVzLW5zLW9iamVjdHOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI2F0dHJpYnV0ZXMtbnMtb2JqZWN0c5SMGlRoZSBBdHRyaWJ1dGVzTlMgSW50ZXJmYWNllHSUjBJhdHRyaWJ1dGVzLW9iamVjdHOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI2F0dHJpYnV0ZXMtb2JqZWN0c5SMGFRoZSBBdHRyaWJ1dGVzIEludGVyZmFjZZR0lIwPYXUtcmVhZC1vYmplY3RzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbCNhdS1yZWFkLW9iamVjdHOUjA9BVV9yZWFkIE9iamVjdHOUdJSMEGF1LXdyaXRlLW9iamVjdHOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdW5hdS5odG1sI2F1LXdyaXRlLW9iamVjdHOUjBBBVV93cml0ZSBPYmplY3RzlHSUjAxhdWRpdC1ldmVudHOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpdF9ldmVudHMuaHRtbCNhdWRpdC1ldmVudHOUag2PAAB0lIwIYXVkaXRpbmeUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNhdWRpdGluZ5RqDY8AAHSUjAlhdWdhc3NpZ26UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2F1Z2Fzc2lnbpSMH0F1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHOUdJSMDWF1dG8tc3BlY2NpbmeUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjYXV0by1zcGVjY2luZ5SMDEF1dG9zcGVjY2luZ5R0lIwMYXZhaWxhYmlsaXR5lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW50cm8uaHRtbCNhdmFpbGFiaWxpdHmUjBVOb3RlcyBvbiBhdmFpbGFiaWxpdHmUdJSMBWF3YWl0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2F3YWl0lIwQQXdhaXQgZXhwcmVzc2lvbpR0lIwNYmFja3RvZXhhbXBsZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjYmFja3RvZXhhbXBsZZSME0JhY2sgdG8gdGhlIEV4YW1wbGWUdJSMFGJhc2UtaGFuZGxlci1vYmplY3RzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNiYXNlLWhhbmRsZXItb2JqZWN0c5SME0Jhc2VIYW5kbGVyIE9iamVjdHOUdJSMFWJhc2Utcm90YXRpbmctaGFuZGxlcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNiYXNlLXJvdGF0aW5nLWhhbmRsZXKUjBNCYXNlUm90YXRpbmdIYW5kbGVylHSUjAZiaW5hcnmUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYmluYXJ5lIwcQmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9uc5R0lIwOYmluYXJ5LW9iamVjdHOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjYmluYXJ5LW9iamVjdHOUjA5CaW5hcnkgT2JqZWN0c5R0lIwRYmluYXJ5LXRyYW5zZm9ybXOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNiaW5hcnktdHJhbnNmb3Jtc5SMEUJpbmFyeSBUcmFuc2Zvcm1zlHSUjAliaW5hcnlzZXGUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JpbmFyeXNlcZSMNkJpbmFyeSBTZXF1ZW5jZSBUeXBlcyDigJQgYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlld5R0lIwOYmluYXJ5c2VydmljZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hcnkuaHRtbCNiaW5hcnlzZXJ2aWNlc5SMFEJpbmFyeSBEYXRhIFNlcnZpY2VzlHSUjApiaW5kX25hbWVzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI2JpbmQtbmFtZXOUjBBCaW5kaW5nIG9mIG5hbWVzlHSUjAxiaW5oZXgtbm90ZXOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5oZXguaHRtbCNiaW5oZXgtbm90ZXOUjAVOb3Rlc5R0lIwOYmlzZWN0LWV4YW1wbGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaXNlY3QuaHRtbCNiaXNlY3QtZXhhbXBsZZRqDY8AAHSUjA1iaXRzdHJpbmctb3BzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNiaXRzdHJpbmctb3BzlIwjQml0d2lzZSBPcGVyYXRpb25zIG9uIEludGVnZXIgVHlwZXOUdJSMB2JpdHdpc2WUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYml0d2lzZZSMGUJpbmFyeSBiaXR3aXNlIG9wZXJhdGlvbnOUdJSMC2JsYW5rLWxpbmVzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjYmxhbmstbGluZXOUjAtCbGFuayBsaW5lc5R0lIwUYmx0aW4tYm9vbGVhbi12YWx1ZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JsdGluLWJvb2xlYW4tdmFsdWVzlIwOQm9vbGVhbiBWYWx1ZXOUdJSMEmJsdGluLWNvZGUtb2JqZWN0c5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYmx0aW4tY29kZS1vYmplY3RzlIwMQ29kZSBPYmplY3RzlHSUjBVibHRpbi1lbGxpcHNpcy1vYmplY3SUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JsdGluLWVsbGlwc2lzLW9iamVjdJSME1RoZSBFbGxpcHNpcyBPYmplY3SUdJSMEGJsdGluLWV4Y2VwdGlvbnOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9leGNlcHRpb25zLmh0bWwjYmx0aW4tZXhjZXB0aW9uc5SME0J1aWx0LWluIEV4Y2VwdGlvbnOUdJSMG2JsdGluLW5vdGltcGxlbWVudGVkLW9iamVjdJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYmx0aW4tbm90aW1wbGVtZW50ZWQtb2JqZWN0lIwZVGhlIE5vdEltcGxlbWVudGVkIE9iamVjdJR0lIwRYmx0aW4tbnVsbC1vYmplY3SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JsdGluLW51bGwtb2JqZWN0lIwPVGhlIE51bGwgT2JqZWN0lHSUjBJibHRpbi10eXBlLW9iamVjdHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JsdGluLXR5cGUtb2JqZWN0c5SMDFR5cGUgT2JqZWN0c5R0lIwLYmx0aW4tdHlwZXOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2JsdGluLXR5cGVzlIwOQnVpbHQtaW4gVHlwZXOUdJSMB2Jvb2xlYW6UKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2Jvb2xlYW6UjCNCb29sZWFuIE9wZXJhdGlvbnMg4oCUIGFuZCwgb3IsIG5vdJR0lIwIYm9vbGVhbnOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjYm9vbGVhbnOUjBJCb29sZWFuIG9wZXJhdGlvbnOUdJSMC2Jvb2xvYmplY3RzlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Jvb2wuaHRtbCNib29sb2JqZWN0c5SMD0Jvb2xlYW4gT2JqZWN0c5R0lIwSYnBvLTM2MDg1LXdoYXRzbmV3lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuOC5odG1sI2Jwby0zNjA4NS13aGF0c25ld5RqDY8AAHSUjAVicmVha5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjYnJlYWuUjBNUaGUgYnJlYWsgc3RhdGVtZW50lHSUjBNicm93c2VyLWNvbnRyb2xsZXJzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2ViYnJvd3Nlci5odG1sI2Jyb3dzZXItY29udHJvbGxlcnOUjBpCcm93c2VyIENvbnRyb2xsZXIgT2JqZWN0c5R0lIwUYnVmZmVyLXJlcXVlc3QtdHlwZXOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWwjYnVmZmVyLXJlcXVlc3QtdHlwZXOUjBRCdWZmZXIgcmVxdWVzdCB0eXBlc5R0lIwOYnVmZmVyLXN0cnVjdHOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2J1ZmZlci1zdHJ1Y3RzlIwYQnVmZmVyIE9iamVjdCBTdHJ1Y3R1cmVzlHSUjBBidWZmZXItc3RydWN0dXJllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2J1ZmZlci1zdHJ1Y3R1cmWUjBBCdWZmZXIgc3RydWN0dXJllHSUjBBidWZmZXJlZC1sb2dnaW5nlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCNidWZmZXJlZC1sb2dnaW5nlIw8QnVmZmVyaW5nIGxvZ2dpbmcgbWVzc2FnZXMgYW5kIG91dHB1dHRpbmcgdGhlbSBjb25kaXRpb25hbGx5lHSUjA1idWZmZXJvYmplY3RzlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J1ZmZlci5odG1sI2J1ZmZlcm9iamVjdHOUjA9CdWZmZXIgUHJvdG9jb2yUdJSMCWJ1aWxkLWFwaZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjUuaHRtbCNidWlsZC1hcGmUjBdCdWlsZCBhbmQgQyBBUEkgQ2hhbmdlc5R0lIwIYnVpbGRpbmeUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2J1aWxkaW5nLmh0bWwjYnVpbGRpbmeUjB1CdWlsZGluZyBDIGFuZCBDKysgRXh0ZW5zaW9uc5R0lIwTYnVpbGRpbmctb24td2luZG93c5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvd2luZG93cy5odG1sI2J1aWxkaW5nLW9uLXdpbmRvd3OUjChCdWlsZGluZyBDIGFuZCBDKysgRXh0ZW5zaW9ucyBvbiBXaW5kb3dzlHSUjBdidWlsZGluZy1weXRob24tb24tdW5peJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy91bml4Lmh0bWwjYnVpbGRpbmctcHl0aG9uLW9uLXVuaXiUjA9CdWlsZGluZyBQeXRob26UdJSMCmJ1aWxkdmFsdWWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI2J1aWxkdmFsdWWUjBlCdWlsZGluZyBBcmJpdHJhcnkgVmFsdWVzlHSUjApidWlsdC1kaXN0lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNidWlsdC1kaXN0lIwcQ3JlYXRpbmcgQnVpbHQgRGlzdHJpYnV0aW9uc5R0lIwPYnVpbHQtaW4tY29uc3RzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uc3RhbnRzLmh0bWwjYnVpbHQtaW4tY29uc3RzlIwSQnVpbHQtaW4gQ29uc3RhbnRzlHSUjA5idWlsdC1pbi1mdW5jc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2J1aWx0LWluLWZ1bmNzlIwSQnVpbHQtaW4gRnVuY3Rpb25zlHSUjA1idWlsdGluY29kZWNzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCNidWlsdGluY29kZWNzlIwPQnVpbHQtaW4gQ29kZWNzlHSUjBBieXRlYXJyYXlvYmplY3RzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVhcnJheS5odG1sI2J5dGVhcnJheW9iamVjdHOUjBJCeXRlIEFycmF5IE9iamVjdHOUdJSMCWJ5dGVjb2Rlc5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI2J5dGVjb2Rlc5SMHFB5dGhvbiBCeXRlY29kZSBJbnN0cnVjdGlvbnOUdJSMEGJ5dGVzLWZvcm1hdHRpbmeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2J5dGVzLWZvcm1hdHRpbmeUjB1wcmludGYtc3R5bGUgQnl0ZXMgRm9ybWF0dGluZ5R0lIwNYnl0ZXMtbWV0aG9kc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjYnl0ZXMtbWV0aG9kc5SMHkJ5dGVzIGFuZCBCeXRlYXJyYXkgT3BlcmF0aW9uc5R0lIwMYnl0ZXNvYmplY3RzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2J5dGVzLmh0bWwjYnl0ZXNvYmplY3RzlIwNQnl0ZXMgT2JqZWN0c5R0lIwSYnoyLXVzYWdlLWV4YW1wbGVzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYnoyLmh0bWwjYnoyLXVzYWdlLWV4YW1wbGVzlIwRRXhhbXBsZXMgb2YgdXNhZ2WUdJSMC2MtYXBpLWluZGV4lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luZGV4Lmh0bWwjYy1hcGktaW5kZXiUjB1QeXRob24vQyBBUEkgUmVmZXJlbmNlIE1hbnVhbJR0lIwSYy13cmFwcGVyLXNvZnR3YXJllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2ZhcS9leHRlbmRpbmcuaHRtbCNjLXdyYXBwZXItc29mdHdhcmWUjC5Xcml0aW5nIEMgaXMgaGFyZDsgYXJlIHRoZXJlIGFueSBhbHRlcm5hdGl2ZXM/lHSUjANjOTmUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXMuaHRtbCNjOTmUag2PAAB0lIwDY2FilChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjY2FilIwLQ0FCIE9iamVjdHOUdJSMGGNhY2hlZnRwLWhhbmRsZXItb2JqZWN0c5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjY2FjaGVmdHAtaGFuZGxlci1vYmplY3RzlIwXQ2FjaGVGVFBIYW5kbGVyIE9iamVjdHOUdJSMEmNhbGwtZnVuY3Rpb24tdHJpb5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNjYWxsLWZ1bmN0aW9uLXRyaW+UjBRPbGRlciBoaWdoLWxldmVsIEFQSZR0lIwOY2FsbGFibGUtdHlwZXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2NhbGxhYmxlLXR5cGVzlIwaRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHOUdJSMDWNhbGxpbmdweXRob26UKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI2NhbGxpbmdweXRob26UjB9DYWxsaW5nIFB5dGhvbiBGdW5jdGlvbnMgZnJvbSBDlHSUjAVjYWxsc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNjYWxsc5SMBUNhbGxzlHSUjA9jYWxscy1hcy10dXBsZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjY2FsbHMtYXMtdHVwbGVzlGoNjwAAdJSMCGNhbGx0aXBzlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaWRsZS5odG1sI2NhbGx0aXBzlIwIQ2FsbHRpcHOUdJSMCGNhcHN1bGVzlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NhcHN1bGUuaHRtbCNjYXBzdWxlc5SMCENhcHN1bGVzlHSUjAxjZWxsLW9iamVjdHOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2VsbC5odG1sI2NlbGwtb2JqZWN0c5SMDENlbGwgT2JqZWN0c5R0lIwJY2dpLWludHJvlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpLmh0bWwjY2dpLWludHJvlGoNjwAAdJSMDGNnaS1zZWN1cml0eZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NnaS5odG1sI2NnaS1zZWN1cml0eZSMFUNhcmluZyBhYm91dCBzZWN1cml0eZR0lIwJY2hhbmdlbG9nlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3L2NoYW5nZWxvZy5odG1sI2NoYW5nZWxvZ5SMCUNoYW5nZWxvZ5R0lIwMY2hlY2stbW9kdWxllChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaWRsZS5odG1sI2NoZWNrLW1vZHVsZZRqDY8AAHSUjAVjbGFzc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNjbGFzc5SMEUNsYXNzIGRlZmluaXRpb25zlHSUjBNjbGFzcy1jdXN0b21pemF0aW9ulChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNjbGFzcy1jdXN0b21pemF0aW9ulIwaQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb26UdJSMFWNsYXNzLW9iamVjdC1jcmVhdGlvbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY2xhc3Mtb2JqZWN0LWNyZWF0aW9ulIwZQ3JlYXRpbmcgdGhlIGNsYXNzIG9iamVjdJR0lIwLY21kLWV4YW1wbGWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jbWQuaHRtbCNjbWQtZXhhbXBsZZSMC0NtZCBFeGFtcGxllHSUjAtjbWQtb2JqZWN0c5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1sI2NtZC1vYmplY3RzlIwLQ21kIE9iamVjdHOUdJSMC2NtZGFyZy1kYXNolChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRhcmctZGFzaJRqDY8AAHSUjA1jbWRhcmctc2NyaXB0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRhcmctc2NyaXB0lGoNjwAAdJSMDGNvZGUtY29udGV4dJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lkbGUuaHRtbCNjb2RlLWNvbnRleHSUjAxDb2RlIENvbnRleHSUdJSMEmNvZGVjLWJhc2UtY2xhc3Nlc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjLWJhc2UtY2xhc3Nlc5SMEkNvZGVjIEJhc2UgQ2xhc3Nlc5R0lIwbY29kZWMtaGFuZGxpbmctaW1wcm92ZW1lbnRzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNC5odG1sI2NvZGVjLWhhbmRsaW5nLWltcHJvdmVtZW50c5SMHkltcHJvdmVtZW50cyB0byBDb2RlYyBIYW5kbGluZ5R0lIwNY29kZWMtb2JqZWN0c5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2NvZGVjLW9iamVjdHOUjB9TdGF0ZWxlc3MgRW5jb2RpbmcgYW5kIERlY29kaW5nlHSUjA5jb2RlYy1yZWdpc3RyeZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb2RlYy5odG1sI2NvZGVjLXJlZ2lzdHJ5lIwkQ29kZWMgcmVnaXN0cnkgYW5kIHN1cHBvcnQgZnVuY3Rpb25zlHSUjAtjb2Rlb2JqZWN0c5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb2RlLmh0bWwjY29kZW9iamVjdHOUag2PAAB0lIwhY29sbGVjdGlvbnMtYWJzdHJhY3QtYmFzZS1jbGFzc2VzlChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLmh0bWwjY29sbGVjdGlvbnMtYWJzdHJhY3QtYmFzZS1jbGFzc2VzlIwhQ29sbGVjdGlvbnMgQWJzdHJhY3QgQmFzZSBDbGFzc2VzlHSUjAhjb21tZW50c5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2NvbW1lbnRzlIwIQ29tbWVudHOUdJSMDmNvbW1vbi1zdHJ1Y3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbCNjb21tb24tc3RydWN0c5SMGENvbW1vbiBPYmplY3QgU3RydWN0dXJlc5R0lIwUY29tcGFyaXNvbi13aXRoLWpzb26UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNjb21wYXJpc29uLXdpdGgtanNvbpSMFENvbXBhcmlzb24gd2l0aCBqc29ulHSUjAtjb21wYXJpc29uc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNjb21wYXJpc29uc5SMC0NvbXBhcmlzb25zlHSUjBBjb21wYXQzMl9tZXNzYWdllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZS5odG1sI2NvbXBhdDMyLW1lc3NhZ2WUjEtlbWFpbC5tZXNzYWdlLk1lc3NhZ2U6IFJlcHJlc2VudGluZyBhbiBlbWFpbCBtZXNzYWdlIHVzaW5nIHRoZSBjb21wYXQzMiBBUEmUdJSMC2NvbXBpbGF0aW9ulChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNjb21waWxhdGlvbpSMF0NvbXBpbGF0aW9uIGFuZCBMaW5rYWdllHSUjAljb21waWxpbmeUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI2NvbXBpbGluZ5SMLUNvbXBpbGluZyBhbmQgTGlua2luZyB1bmRlciBVbml4LWxpa2Ugc3lzdGVtc5R0lIwRY29tcGxldGVyLW9iamVjdHOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9ybGNvbXBsZXRlci5odG1sI2NvbXBsZXRlci1vYmplY3RzlIwRQ29tcGxldGVyIE9iamVjdHOUdJSMC2NvbXBsZXRpb25zlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaWRsZS5odG1sI2NvbXBsZXRpb25zlIwLQ29tcGxldGlvbnOUdJSMDmNvbXBsZXhvYmplY3RzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbXBsZXguaHRtbCNjb21wbGV4b2JqZWN0c5SMFkNvbXBsZXggTnVtYmVyIE9iamVjdHOUdJSMCGNvbXBvdW5klChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2NvbXBvdW5klIwTQ29tcG91bmQgc3RhdGVtZW50c5R0lIwOY29tcG91bmRzaGFwZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dXJ0bGUuaHRtbCNjb21wb3VuZHNoYXBlc5SMD0NvbXBvdW5kIHNoYXBlc5R0lIwOY29tcHJlaGVuc2lvbnOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjY29tcHJlaGVuc2lvbnOUjClEaXNwbGF5cyBmb3IgbGlzdHMsIHNldHMgYW5kIGRpY3Rpb25hcmllc5R0lIwIY29uY3JldGWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29uY3JldGUuaHRtbCNjb25jcmV0ZZSMFkNvbmNyZXRlIE9iamVjdHMgTGF5ZXKUdJSMDmNvbmNyZXRlLXBhdGhzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGF0aGxpYi5odG1sI2NvbmNyZXRlLXBhdGhzlIwOQ29uY3JldGUgcGF0aHOUdJSMC2NvbmN1cnJlbmN5lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVuY3kuaHRtbCNjb25jdXJyZW5jeZSMFENvbmN1cnJlbnQgRXhlY3V0aW9ulHSUjBFjb25kaXRpb24tb2JqZWN0c5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI2NvbmRpdGlvbi1vYmplY3RzlIwRQ29uZGl0aW9uIE9iamVjdHOUdJSMFGNvbmZpZ3BhcnNlci1vYmplY3RzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uZmlncGFyc2VyLmh0bWwjY29uZmlncGFyc2VyLW9iamVjdHOUjBRDb25maWdQYXJzZXIgT2JqZWN0c5R0lIwPY29uc29sZS1vYmplY3RzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZS5odG1sI2NvbnNvbGUtb2JqZWN0c5SMG0ludGVyYWN0aXZlIENvbnNvbGUgT2JqZWN0c5R0lIwJY29uc3RhbnRzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2lucmVnLmh0bWwjY29uc3RhbnRzlIwJQ29uc3RhbnRzlHSUjBdjb250ZW50LWhhbmRsZXItb2JqZWN0c5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI2NvbnRlbnQtaGFuZGxlci1vYmplY3RzlIwWQ29udGVudEhhbmRsZXIgT2JqZWN0c5R0lIwVY29udGVudHMtb2YtbW9kdWxlLXJllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNjb250ZW50cy1vZi1tb2R1bGUtcmWUjA9Nb2R1bGUgQ29udGVudHOUdJSMDGNvbnRleHQtaW5mb5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjY29udGV4dC1pbmZvlIw0QWRkaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8geW91ciBsb2dnaW5nIG91dHB1dJR0lIwPY29udGV4dC1tYW5hZ2VylChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCNjb250ZXh0LW1hbmFnZXKUjC1Vc2luZyBhIGNvbnRleHQgbWFuYWdlciBmb3Igc2VsZWN0aXZlIGxvZ2dpbmeUdJSMEGNvbnRleHQtbWFuYWdlcnOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2NvbnRleHQtbWFuYWdlcnOUjB9XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzlHSUjA1jb250ZXh0bGlibW9klChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI2NvbnRleHRsaWJtb2SUjBVUaGUgY29udGV4dGxpYiBtb2R1bGWUdJSMEmNvbnRleHR2YXJzb2JqZWN0c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb250ZXh0dmFycy5odG1sI2NvbnRleHR2YXJzb2JqZWN0c5SMGUNvbnRleHQgVmFyaWFibGVzIE9iamVjdHOUdJSMJWNvbnRleHR2YXJzb2JqZWN0c19wb2ludGVydHlwZV9jaGFuZ2WUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udGV4dHZhcnMuaHRtbCNjb250ZXh0dmFyc29iamVjdHMtcG9pbnRlcnR5cGUtY2hhbmdllGoNjwAAdJSMCGNvbnRpbnVllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNjb250aW51ZZSMFlRoZSBjb250aW51ZSBzdGF0ZW1lbnSUdJSMFmNvbnRyaWJ1dGluZy10by1weXRob26UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYnVncy5odG1sI2NvbnRyaWJ1dGluZy10by1weXRob26UjC9HZXR0aW5nIHN0YXJ0ZWQgY29udHJpYnV0aW5nIHRvIFB5dGhvbiB5b3Vyc2VsZpR0lIwLY29udmVyc2lvbnOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjY29udmVyc2lvbnOUjBZBcml0aG1ldGljIGNvbnZlcnNpb25zlHSUjBxjb252ZXJ0aW5nLWFyZ3VtZW50LXNlcXVlbmNllChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1sI2NvbnZlcnRpbmctYXJndW1lbnQtc2VxdWVuY2WUjDZDb252ZXJ0aW5nIGFuIGFyZ3VtZW50IHNlcXVlbmNlIHRvIGEgc3RyaW5nIG9uIFdpbmRvd3OUdJSMDmNvbnZlcnRpbmctc3RzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGFyc2VyLmh0bWwjY29udmVydGluZy1zdHOUjBVDb252ZXJ0aW5nIFNUIE9iamVjdHOUdJSMFmNvb2tib29rLXJvdGF0b3ItbmFtZXKUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2Nvb2tib29rLXJvdGF0b3ItbmFtZXKUjD5Vc2luZyBhIHJvdGF0b3IgYW5kIG5hbWVyIHRvIGN1c3RvbWl6ZSBsb2cgcm90YXRpb24gcHJvY2Vzc2luZ5R0lIwOY29va2llLWV4YW1wbGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZXMuaHRtbCNjb29raWUtZXhhbXBsZZSMB0V4YW1wbGWUdJSMEmNvb2tpZS1qYXItb2JqZWN0c5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjY29va2llLWphci1vYmplY3RzlIwjQ29va2llSmFyIGFuZCBGaWxlQ29va2llSmFyIE9iamVjdHOUdJSMDmNvb2tpZS1vYmplY3RzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVzLmh0bWwjY29va2llLW9iamVjdHOUjA5Db29raWUgT2JqZWN0c5R0lIwVY29va2llLXBvbGljeS1vYmplY3RzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHR0cC5jb29raWVqYXIuaHRtbCNjb29raWUtcG9saWN5LW9iamVjdHOUjBRDb29raWVQb2xpY3kgT2JqZWN0c5R0lIwMY29yby1vYmplY3RzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Nvcm8uaHRtbCNjb3JvLW9iamVjdHOUjBFDb3JvdXRpbmUgT2JqZWN0c5R0lIwJY29yb3V0aW5llChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWwjY29yb3V0aW5llIwKQ29yb3V0aW5lc5R0lIwRY29yb3V0aW5lLW9iamVjdHOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2Nvcm91dGluZS1vYmplY3RzlIwRQ29yb3V0aW5lIE9iamVjdHOUdJSMDGNvdW50aW5ncmVmc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9yZWZjb3VudGluZy5odG1sI2NvdW50aW5ncmVmc5SMElJlZmVyZW5jZSBDb3VudGluZ5R0lIwJY3BsdXNwbHVzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNjcGx1c3BsdXOUjBlXcml0aW5nIEV4dGVuc2lvbnMgaW4gQysrlHSUjA5jcG9ydGluZy1ob3d0b5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9jcG9ydGluZy5odG1sI2Nwb3J0aW5nLWhvd3RvlIwlUG9ydGluZyBFeHRlbnNpb24gTW9kdWxlcyB0byBQeXRob24gM5R0lIwNY3JlYXRpbmctcnBtc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjY3JlYXRpbmctcnBtc5SMFUNyZWF0aW5nIFJQTSBwYWNrYWdlc5R0lIwMY3JlYXRpbmctc3RzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGFyc2VyLmh0bWwjY3JlYXRpbmctc3RzlIwTQ3JlYXRpbmcgU1QgT2JqZWN0c5R0lIwQY3JlYXRpbmctd2luaW5zdJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjY3JlYXRpbmctd2luaW5zdJSMG0NyZWF0aW5nIFdpbmRvd3MgSW5zdGFsbGVyc5R0lIwVY3Jvc3MtY29tcGlsZS13aW5kb3dzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9idWlsdGRpc3QuaHRtbCNjcm9zcy1jb21waWxlLXdpbmRvd3OUjBpDcm9zcy1jb21waWxpbmcgb24gV2luZG93c5R0lIwGY3J5cHRvlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3J5cHRvLmh0bWwjY3J5cHRvlIwWQ3J5cHRvZ3JhcGhpYyBTZXJ2aWNlc5R0lIwMY3N2LWNvbnRlbnRzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3N2Lmh0bWwjY3N2LWNvbnRlbnRzlIwPTW9kdWxlIENvbnRlbnRzlHSUjAxjc3YtZXhhbXBsZXOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YtZXhhbXBsZXOUjAhFeGFtcGxlc5R0lIwOY3N2LWZtdC1wYXJhbXOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jc3YuaHRtbCNjc3YtZm10LXBhcmFtc5SMIkRpYWxlY3RzIGFuZCBGb3JtYXR0aW5nIFBhcmFtZXRlcnOUdJSMK2N0eXBlcy1hY2Nlc3NpbmctZnVuY3Rpb25zLWZyb20tbG9hZGVkLWRsbHOUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtYWNjZXNzaW5nLWZ1bmN0aW9ucy1mcm9tLWxvYWRlZC1kbGxzlIwkQWNjZXNzaW5nIGZ1bmN0aW9ucyBmcm9tIGxvYWRlZCBkbGxzlHSUjCpjdHlwZXMtYWNjZXNzaW5nLXZhbHVlcy1leHBvcnRlZC1mcm9tLWRsbHOUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtYWNjZXNzaW5nLXZhbHVlcy1leHBvcnRlZC1mcm9tLWRsbHOUjCNBY2Nlc3NpbmcgdmFsdWVzIGV4cG9ydGVkIGZyb20gZGxsc5R0lIwNY3R5cGVzLWFycmF5c5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1hcnJheXOUjAZBcnJheXOUdJSMFmN0eXBlcy1hcnJheXMtcG9pbnRlcnOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtYXJyYXlzLXBvaW50ZXJzlIwTQXJyYXlzIGFuZCBwb2ludGVyc5R0lIwmY3R5cGVzLWJpdC1maWVsZHMtaW4tc3RydWN0dXJlcy11bmlvbnOUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtYml0LWZpZWxkcy1pbi1zdHJ1Y3R1cmVzLXVuaW9uc5SMI0JpdCBmaWVsZHMgaW4gc3RydWN0dXJlcyBhbmQgdW5pb25zlHSUjBljdHlwZXMtY2FsbGJhY2stZnVuY3Rpb25zlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWNhbGxiYWNrLWZ1bmN0aW9uc5SMEkNhbGxiYWNrIGZ1bmN0aW9uc5R0lIwYY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zlIwRQ2FsbGluZyBmdW5jdGlvbnOUdJSMImN0eXBlcy1jYWxsaW5nLWZ1bmN0aW9ucy1jb250aW51ZWSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtY2FsbGluZy1mdW5jdGlvbnMtY29udGludWVklIwcQ2FsbGluZyBmdW5jdGlvbnMsIGNvbnRpbnVlZJR0lIwzY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zLXdpdGgtb3duLWN1c3RvbS1kYXRhLXR5cGVzlChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWNhbGxpbmctZnVuY3Rpb25zLXdpdGgtb3duLWN1c3RvbS1kYXRhLXR5cGVzlIwxQ2FsbGluZyBmdW5jdGlvbnMgd2l0aCB5b3VyIG93biBjdXN0b20gZGF0YSB0eXBlc5R0lIwXY3R5cGVzLWN0eXBlcy1yZWZlcmVuY2WUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtY3R5cGVzLXJlZmVyZW5jZZSMEGN0eXBlcyByZWZlcmVuY2WUdJSMFmN0eXBlcy1jdHlwZXMtdHV0b3JpYWyUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtY3R5cGVzLXR1dG9yaWFslIwPY3R5cGVzIHR1dG9yaWFslHSUjBFjdHlwZXMtZGF0YS10eXBlc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1kYXRhLXR5cGVzlIwKRGF0YSB0eXBlc5R0lIwfY3R5cGVzLWZpbmRpbmctc2hhcmVkLWxpYnJhcmllc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1maW5kaW5nLXNoYXJlZC1saWJyYXJpZXOUjBhGaW5kaW5nIHNoYXJlZCBsaWJyYXJpZXOUdJSMGGN0eXBlcy1mb3JlaWduLWZ1bmN0aW9uc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1mb3JlaWduLWZ1bmN0aW9uc5SMEUZvcmVpZ24gZnVuY3Rpb25zlHSUjBpjdHlwZXMtZnVuY3Rpb24tcHJvdG90eXBlc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1mdW5jdGlvbi1wcm90b3R5cGVzlIwTRnVuY3Rpb24gcHJvdG90eXBlc5R0lIwdY3R5cGVzLWZ1bmRhbWVudGFsLWRhdGEtdHlwZXOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtZnVuZGFtZW50YWwtZGF0YS10eXBlc5SMFkZ1bmRhbWVudGFsIGRhdGEgdHlwZXOUdJSMH2N0eXBlcy1mdW5kYW1lbnRhbC1kYXRhLXR5cGVzLTKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtZnVuZGFtZW50YWwtZGF0YS10eXBlcy0ylIwWRnVuZGFtZW50YWwgZGF0YSB0eXBlc5R0lIwXY3R5cGVzLWluY29tcGxldGUtdHlwZXOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtaW5jb21wbGV0ZS10eXBlc5SMEEluY29tcGxldGUgVHlwZXOUdJSMJWN0eXBlcy1sb2FkaW5nLWR5bmFtaWMtbGluay1saWJyYXJpZXOUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtbG9hZGluZy1keW5hbWljLWxpbmstbGlicmFyaWVzlIweTG9hZGluZyBkeW5hbWljIGxpbmsgbGlicmFyaWVzlHSUjB9jdHlwZXMtbG9hZGluZy1zaGFyZWQtbGlicmFyaWVzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLWxvYWRpbmctc2hhcmVkLWxpYnJhcmllc5SMGExvYWRpbmcgc2hhcmVkIGxpYnJhcmllc5R0lIwXY3R5cGVzLXBhc3NpbmctcG9pbnRlcnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtcGFzc2luZy1wb2ludGVyc5SMNlBhc3NpbmcgcG9pbnRlcnMgKG9yOiBwYXNzaW5nIHBhcmFtZXRlcnMgYnkgcmVmZXJlbmNlKZR0lIwPY3R5cGVzLXBvaW50ZXJzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXBvaW50ZXJzlIwIUG9pbnRlcnOUdJSME2N0eXBlcy1yZXR1cm4tdHlwZXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtcmV0dXJuLXR5cGVzlIwMUmV0dXJuIHR5cGVzlHSUjCljdHlwZXMtc3BlY2lmeWluZy1yZXF1aXJlZC1hcmd1bWVudC10eXBlc5QoagqPAABqC48AAIxXaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1zcGVjaWZ5aW5nLXJlcXVpcmVkLWFyZ3VtZW50LXR5cGVzlIw8U3BlY2lmeWluZyB0aGUgcmVxdWlyZWQgYXJndW1lbnQgdHlwZXMgKGZ1bmN0aW9uIHByb3RvdHlwZXMplHSUjBxjdHlwZXMtc3RydWN0dXJlZC1kYXRhLXR5cGVzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXN0cnVjdHVyZWQtZGF0YS10eXBlc5SMFVN0cnVjdHVyZWQgZGF0YSB0eXBlc5R0lIwYY3R5cGVzLXN0cnVjdHVyZXMtdW5pb25zlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXN0cnVjdHVyZXMtdW5pb25zlIwVU3RydWN0dXJlcyBhbmQgdW5pb25zlHSUjCpjdHlwZXMtc3RydWN0dXJldW5pb24tYWxpZ25tZW50LWJ5dGUtb3JkZXKUKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtc3RydWN0dXJldW5pb24tYWxpZ25tZW50LWJ5dGUtb3JkZXKUag2PAAB0lIwQY3R5cGVzLXN1cnByaXNlc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1sI2N0eXBlcy1zdXJwcmlzZXOUjAlTdXJwcmlzZXOUdJSMF2N0eXBlcy10eXBlLWNvbnZlcnNpb25zlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3R5cGVzLmh0bWwjY3R5cGVzLXR5cGUtY29udmVyc2lvbnOUjBBUeXBlIGNvbnZlcnNpb25zlHSUjBhjdHlwZXMtdXRpbGl0eS1mdW5jdGlvbnOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtdXRpbGl0eS1mdW5jdGlvbnOUjBFVdGlsaXR5IGZ1bmN0aW9uc5R0lIwgY3R5cGVzLXZhcmlhYmxlLXNpemVkLWRhdGEtdHlwZXOUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdHlwZXMuaHRtbCNjdHlwZXMtdmFyaWFibGUtc2l6ZWQtZGF0YS10eXBlc5SMGVZhcmlhYmxlLXNpemVkIGRhdGEgdHlwZXOUdJSMEGN1cnNlcy1mdW5jdGlvbnOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMuaHRtbCNjdXJzZXMtZnVuY3Rpb25zlIwJRnVuY3Rpb25zlHSUjAxjdXJzZXMtaG93dG+UKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vY3Vyc2VzLmh0bWwjY3Vyc2VzLWhvd3RvlIweQ3Vyc2VzIFByb2dyYW1taW5nIHdpdGggUHl0aG9ulHSUjBRjdXJzZXMtcGFuZWwtb2JqZWN0c5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5odG1sI2N1cnNlcy1wYW5lbC1vYmplY3RzlIwNUGFuZWwgT2JqZWN0c5R0lIwWY3Vyc2VzLXRleHRwYWQtb2JqZWN0c5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy10ZXh0cGFkLW9iamVjdHOUjA9UZXh0Ym94IG9iamVjdHOUdJSMFWN1cnNlcy13aW5kb3ctb2JqZWN0c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1sI2N1cnNlcy13aW5kb3ctb2JqZWN0c5SMDldpbmRvdyBPYmplY3RzlHSUjBVjdXJzZXNwYW5lbC1mdW5jdGlvbnOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbCNjdXJzZXNwYW5lbC1mdW5jdGlvbnOUjAlGdW5jdGlvbnOUdJSMF2N1c3RvbS1mb3JtYXQtZXhjZXB0aW9ulChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCNjdXN0b20tZm9ybWF0LWV4Y2VwdGlvbpSMH0N1c3RvbWl6ZWQgZXhjZXB0aW9uIGZvcm1hdHRpbmeUdJSMD2N1c3RvbS1oYW5kbGVyc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjY3VzdG9tLWhhbmRsZXJzlIwmQ3VzdG9taXppbmcgaGFuZGxlcnMgd2l0aCBkaWN0Q29uZmlnKCmUdJSMDWN1c3RvbS1sZXZlbHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy5odG1sI2N1c3RvbS1sZXZlbHOUjA1DdXN0b20gTGV2ZWxzlHSUjBBjdXN0b20tbG9ncmVjb3JklChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCNjdXN0b20tbG9ncmVjb3JklIwVQ3VzdG9taXppbmcgTG9nUmVjb3JklHSUjAxjdXN0b21pbnRlcnCUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXN0b21pbnRlcnAuaHRtbCNjdXN0b21pbnRlcnCUjBpDdXN0b20gUHl0aG9uIEludGVycHJldGVyc5R0lIwNY3VzdG9taXphdGlvbpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjY3VzdG9taXphdGlvbpSME0Jhc2ljIGN1c3RvbWl6YXRpb26UdJSMFGRhdGEtaGFuZGxlci1vYmplY3RzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNkYXRhLWhhbmRsZXItb2JqZWN0c5SME0RhdGFIYW5kbGVyIE9iamVjdHOUdJSMEGRhdGFiYXNlLW9iamVjdHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNkYXRhYmFzZS1vYmplY3RzlIwQRGF0YWJhc2UgT2JqZWN0c5R0lIwQZGF0YWdyYW0taGFuZGxlcpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNkYXRhZ3JhbS1oYW5kbGVylIwPRGF0YWdyYW1IYW5kbGVylHSUjAlkYXRhbW9kZWyUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI2RhdGFtb2RlbJSMCkRhdGEgbW9kZWyUdJSMCWRhdGF0eXBlc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGF0eXBlcy5odG1sI2RhdGF0eXBlc5SMCkRhdGEgVHlwZXOUdJSMDWRhdGV0aW1lLWRhdGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLWRhdGWUjAxkYXRlIE9iamVjdHOUdJSMEWRhdGV0aW1lLWRhdGV0aW1llChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS1kYXRldGltZZSMEGRhdGV0aW1lIE9iamVjdHOUdJSMFGRhdGV0aW1lLW5haXZlLWF3YXJllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS1uYWl2ZS1hd2FyZZSMF0F3YXJlIGFuZCBOYWl2ZSBPYmplY3RzlHSUjBBkYXRldGltZS1vYmplY3RzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1sI2RhdGV0aW1lLW9iamVjdHOUjBBEYXRlVGltZSBPYmplY3RzlHSUjA1kYXRldGltZS10aW1llChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS10aW1llIwMdGltZSBPYmplY3RzlHSUjBJkYXRldGltZS10aW1lZGVsdGGUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLXRpbWVkZWx0YZSMEXRpbWVkZWx0YSBPYmplY3RzlHSUjBFkYXRldGltZS10aW1lem9uZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGV0aW1lLmh0bWwjZGF0ZXRpbWUtdGltZXpvbmWUjBB0aW1lem9uZSBPYmplY3RzlHSUjA9kYXRldGltZS10emluZm+UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLXR6aW5mb5SMDnR6aW5mbyBPYmplY3RzlHSUjA9kYXRldGltZW9iamVjdHOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZW9iamVjdHOUjBBEYXRlVGltZSBPYmplY3RzlHSUjBJkZWJ1Zy1zZXR1cC1zY3JpcHSUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NldHVwc2NyaXB0Lmh0bWwjZGVidWctc2V0dXAtc2NyaXB0lIwaRGVidWdnaW5nIHRoZSBzZXR1cCBzY3JpcHSUdJSMCGRlYnVnZ2VylChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjZGVidWdnZXKUjBtwZGIg4oCUIFRoZSBQeXRob24gRGVidWdnZXKUdJSMEGRlYnVnZ2VyLWFsaWFzZXOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbCNkZWJ1Z2dlci1hbGlhc2VzlGoNjwAAdJSMEWRlYnVnZ2VyLWNvbW1hbmRzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGRiLmh0bWwjZGVidWdnZXItY29tbWFuZHOUjBFEZWJ1Z2dlciBDb21tYW5kc5R0lIwPZGVjaW1hbC1jb250ZXh0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwtY29udGV4dJSMD0NvbnRleHQgb2JqZWN0c5R0lIwPZGVjaW1hbC1kZWNpbWFslChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwtZGVjaW1hbJSMD0RlY2ltYWwgb2JqZWN0c5R0lIwLZGVjaW1hbC1mYXGUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC1mYXGUjAtEZWNpbWFsIEZBUZR0lIwNZGVjaW1hbC1ub3Rlc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLW5vdGVzlIwURmxvYXRpbmcgUG9pbnQgTm90ZXOUdJSMD2RlY2ltYWwtcmVjaXBlc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLXJlY2lwZXOUjAdSZWNpcGVzlHSUjBZkZWNpbWFsLXJvdW5kaW5nLW1vZGVzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2RlY2ltYWwtcm91bmRpbmctbW9kZXOUjAlDb25zdGFudHOUdJSMD2RlY2ltYWwtc2lnbmFsc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RlY2ltYWwuaHRtbCNkZWNpbWFsLXNpZ25hbHOUjAdTaWduYWxzlHSUjA9kZWNpbWFsLXRocmVhZHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC10aHJlYWRzlIwUV29ya2luZyB3aXRoIHRocmVhZHOUdJSMEGRlY2ltYWwtdHV0b3JpYWyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWwjZGVjaW1hbC10dXRvcmlhbJSMFFF1aWNrLXN0YXJ0IFR1dG9yaWFslHSUjBBkZWNvbXByZXNzLXdiaXRzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemxpYi5odG1sI2RlY29tcHJlc3Mtd2JpdHOUag2PAAB0lIwDZGVmlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2RlZpSMFEZ1bmN0aW9uIGRlZmluaXRpb25zlHSUjB1kZWZhdWx0LWNvb2tpZS1wb2xpY3ktb2JqZWN0c5QoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjZGVmYXVsdC1jb29raWUtcG9saWN5LW9iamVjdHOUjBtEZWZhdWx0Q29va2llUG9saWN5IE9iamVjdHOUdJSMGWRlZmF1bHQtbWVtb3J5LWFsbG9jYXRvcnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjZGVmYXVsdC1tZW1vcnktYWxsb2NhdG9yc5SMGURlZmF1bHQgTWVtb3J5IEFsbG9jYXRvcnOUdJSMFmRlZmF1bHQtd2FybmluZy1maWx0ZXKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXJuaW5ncy5odG1sI2RlZmF1bHQtd2FybmluZy1maWx0ZXKUjBZEZWZhdWx0IFdhcm5pbmcgRmlsdGVylHSUjA5kZWZhdWx0X3ZhbHVlc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9jbGluaWMuaHRtbCNkZWZhdWx0LXZhbHVlc5SMGFBhcmFtZXRlciBkZWZhdWx0IHZhbHVlc5R0lIwSZGVmaW5pbmctbmV3LXR5cGVzlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9uZXd0eXBlc190dXRvcmlhbC5odG1sI2RlZmluaW5nLW5ldy10eXBlc5SMIkRlZmluaW5nIEV4dGVuc2lvbiBUeXBlczogVHV0b3JpYWyUdJSMEGRlZnVzZWQtcGFja2FnZXOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuaHRtbCNkZWZ1c2VkLXBhY2thZ2VzlIwoVGhlIGRlZnVzZWR4bWwgYW5kIGRlZnVzZWRleHBhdCBQYWNrYWdlc5R0lIwDZGVslChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNkZWyUjBFUaGUgZGVsIHN0YXRlbWVudJR0lIwTZGVsZXRpbmctYXR0cmlidXRlc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbCNkZWxldGluZy1hdHRyaWJ1dGVzlIwTRGVsZXRpbmcgQXR0cmlidXRlc5R0lIwKZGVsaW1pdGVyc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2RlbGltaXRlcnOUjApEZWxpbWl0ZXJzlHSUjA5kZXByZWNhdGVkLTMuNJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCNkZXByZWNhdGVkLTMtNJSMCkRlcHJlY2F0ZWSUdJSMEmRlcHJlY2F0ZWQtYWxpYXNlc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjZGVwcmVjYXRlZC1hbGlhc2VzlIwSRGVwcmVjYXRlZCBhbGlhc2VzlHSUjBVkZXNjcmliaW5nLWV4dGVuc2lvbnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NldHVwc2NyaXB0Lmh0bWwjZGVzY3JpYmluZy1leHRlbnNpb25zlIwcRGVzY3JpYmluZyBleHRlbnNpb24gbW9kdWxlc5R0lIwaZGVzY3JpYmluZy13YXJuaW5nLWZpbHRlcnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXJuaW5ncy5odG1sI2Rlc2NyaWJpbmctd2FybmluZy1maWx0ZXJzlIwaRGVzY3JpYmluZyBXYXJuaW5nIEZpbHRlcnOUdJSMFWRlc2NyaXB0b3ItaW52b2NhdGlvbpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjZGVzY3JpcHRvci1pbnZvY2F0aW9ulIwUSW52b2tpbmcgRGVzY3JpcHRvcnOUdJSMEmRlc2NyaXB0b3Itb2JqZWN0c5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kZXNjcmlwdG9yLmh0bWwjZGVzY3JpcHRvci1vYmplY3RzlIwSRGVzY3JpcHRvciBPYmplY3RzlHSUjAtkZXNjcmlwdG9yc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjZGVzY3JpcHRvcnOUjBhJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnOUdJSMF2RldGVybWluaXN0aWMtcHJvZmlsaW5nlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI2RldGVybWluaXN0aWMtcHJvZmlsaW5nlIwgV2hhdCBJcyBEZXRlcm1pbmlzdGljIFByb2ZpbGluZz+UdJSMC2RldmVsb3BtZW50lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGV2ZWxvcG1lbnQuaHRtbCNkZXZlbG9wbWVudJSMEURldmVsb3BtZW50IFRvb2xzlHSUjA9kZXZwb2xsLW9iamVjdHOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNkZXZwb2xsLW9iamVjdHOUjBkvZGV2L3BvbGwgUG9sbGluZyBPYmplY3RzlHSUjARkaWN0lChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2RpY3SUjBNEaWN0aW9uYXJ5IGRpc3BsYXlzlHSUjApkaWN0LXZpZXdzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCNkaWN0LXZpZXdzlIwXRGljdGlvbmFyeSB2aWV3IG9iamVjdHOUdJSMC2RpY3RvYmplY3RzlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RpY3QuaHRtbCNkaWN0b2JqZWN0c5SMEkRpY3Rpb25hcnkgT2JqZWN0c5R0lIwPZGlmZmVyLWV4YW1wbGVzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlmZmxpYi5odG1sI2RpZmZlci1leGFtcGxlc5SMDkRpZmZlciBFeGFtcGxllHSUjA5kaWZmZXItb2JqZWN0c5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmZXItb2JqZWN0c5SMDkRpZmZlciBPYmplY3RzlHSUjBFkaWZmbGliLWludGVyZmFjZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RpZmZsaWIuaHRtbCNkaWZmbGliLWludGVyZmFjZZSMI0EgY29tbWFuZC1saW5lIGludGVyZmFjZSB0byBkaWZmbGlilHSUjAZkaXJfZmSUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI2Rpci1mZJRqDY8AAHSUjA5kaXJjbXAtb2JqZWN0c5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbCNkaXJjbXAtb2JqZWN0c5SMEFRoZSBkaXJjbXAgY2xhc3OUdJSMCGRpc3RpbmN0lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWwjZGlzdGluY3SUjAdOZXdUeXBllHSUjAxkaXN0cmlidXRpbmeUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2J1aWxkaW5nLmh0bWwjZGlzdHJpYnV0aW5nlIwjRGlzdHJpYnV0aW5nIHlvdXIgZXh0ZW5zaW9uIG1vZHVsZXOUdJSMEmRpc3RyaWJ1dGluZy1pbmRleJQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0cmlidXRpbmcvaW5kZXguaHRtbCNkaXN0cmlidXRpbmctaW5kZXiUjBtEaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXOUdJSMGmRpc3R1dGlscy1hZGRpdGlvbmFsLWZpbGVzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5odG1sI2Rpc3R1dGlscy1hZGRpdGlvbmFsLWZpbGVzlIwbSW5zdGFsbGluZyBBZGRpdGlvbmFsIEZpbGVzlHSUjBtkaXN0dXRpbHMtYnVpbGQtZXh0LWlucGxhY2WUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUuaHRtbCNkaXN0dXRpbHMtYnVpbGQtZXh0LWlucGxhY2WUag2PAAB0lIwSZGlzdHV0aWxzLWNvbmNlcHRzlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9pbnRyb2R1Y3Rpb24uaHRtbCNkaXN0dXRpbHMtY29uY2VwdHOUjBZDb25jZXB0cyAmIFRlcm1pbm9sb2d5lHSUjA9kaXN0dXRpbHMtaW5kZXiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2luZGV4Lmh0bWwjZGlzdHV0aWxzLWluZGV4lIwsRGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzIChMZWdhY3kgdmVyc2lvbimUdJSMIWRpc3R1dGlscy1pbnN0YWxsaW5nLXBhY2thZ2UtZGF0YZQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNkaXN0dXRpbHMtaW5zdGFsbGluZy1wYWNrYWdlLWRhdGGUjBdJbnN0YWxsaW5nIFBhY2thZ2UgRGF0YZR0lIwcZGlzdHV0aWxzLWluc3RhbGxpbmctc2NyaXB0c5QoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNkaXN0dXRpbHMtaW5zdGFsbGluZy1zY3JpcHRzlIwSSW5zdGFsbGluZyBTY3JpcHRzlHSUjA9kaXN0dXRpbHMtaW50cm+UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2ludHJvZHVjdGlvbi5odG1sI2Rpc3R1dGlscy1pbnRyb5SMHEFuIEludHJvZHVjdGlvbiB0byBEaXN0dXRpbHOUdJSMGGRpc3R1dGlscy1zaW1wbGUtZXhhbXBsZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvaW50cm9kdWN0aW9uLmh0bWwjZGlzdHV0aWxzLXNpbXBsZS1leGFtcGxllIwQQSBTaW1wbGUgRXhhbXBsZZR0lIwOZGlzdHV0aWxzLXRlcm2UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2ludHJvZHVjdGlvbi5odG1sI2Rpc3R1dGlscy10ZXJtlIweRGlzdHV0aWxzLXNwZWNpZmljIHRlcm1pbm9sb2d5lHSUjBJkaXN0dXRpbHNfZXhhbXBsZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjZGlzdHV0aWxzLWV4YW1wbGVzlIwSRGlzdHV0aWxzIEV4YW1wbGVzlHSUjApkbnQtYmFzaWNzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9uZXd0eXBlc190dXRvcmlhbC5odG1sI2RudC1iYXNpY3OUjApUaGUgQmFzaWNzlHSUjBBkbnQtdHlwZS1tZXRob2RzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9uZXd0eXBlcy5odG1sI2RudC10eXBlLW1ldGhvZHOUag2PAAB0lIwSZG9jLXhtbHJwYy1zZXJ2ZXJzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI2RvYy14bWxycGMtc2VydmVyc5SMF0RvY1hNTFJQQ1NlcnZlciBPYmplY3RzlHSUjBRkb2N0ZXN0LWFkdmFuY2VkLWFwaZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LWFkdmFuY2VkLWFwaZSMDEFkdmFuY2VkIEFQSZR0lIwRZG9jdGVzdC1iYXNpYy1hcGmUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1iYXNpYy1hcGmUjAlCYXNpYyBBUEmUdJSMEWRvY3Rlc3QtZGVidWdnaW5nlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZGVidWdnaW5nlIwJRGVidWdnaW5nlHSUjBJkb2N0ZXN0LWRpcmVjdGl2ZXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1kaXJlY3RpdmVzlIwKRGlyZWN0aXZlc5R0lIwPZG9jdGVzdC1kb2N0ZXN0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZG9jdGVzdJSMD0RvY1Rlc3QgT2JqZWN0c5R0lIwVZG9jdGVzdC1kb2N0ZXN0ZmluZGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZG9jdGVzdGZpbmRlcpSMFURvY1Rlc3RGaW5kZXIgb2JqZWN0c5R0lIwVZG9jdGVzdC1kb2N0ZXN0cGFyc2VylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZG9jdGVzdHBhcnNlcpSMFURvY1Rlc3RQYXJzZXIgb2JqZWN0c5R0lIwVZG9jdGVzdC1kb2N0ZXN0cnVubmVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZG9jdGVzdHJ1bm5lcpSMFURvY1Rlc3RSdW5uZXIgb2JqZWN0c5R0lIwPZG9jdGVzdC1leGFtcGxllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZXhhbXBsZZSMD0V4YW1wbGUgT2JqZWN0c5R0lIwSZG9jdGVzdC1leGNlcHRpb25zlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3QtZXhjZXB0aW9uc5SMFldoYXQgQWJvdXQgRXhjZXB0aW9ucz+UdJSMGWRvY3Rlc3QtZXhlY3V0aW9uLWNvbnRleHSUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1leGVjdXRpb24tY29udGV4dJSMH1doYXTigJlzIHRoZSBFeGVjdXRpb24gQ29udGV4dD+UdJSMGGRvY3Rlc3QtZmluZGluZy1leGFtcGxlc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LWZpbmRpbmctZXhhbXBsZXOUjCZIb3cgYXJlIERvY3N0cmluZyBFeGFtcGxlcyBSZWNvZ25pemVkP5R0lIwUZG9jdGVzdC1ob3ctaXQtd29ya3OUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1ob3ctaXQtd29ya3OUjAxIb3cgSXQgV29ya3OUdJSMD2RvY3Rlc3Qtb3B0aW9uc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LW9wdGlvbnOUjAxPcHRpb24gRmxhZ3OUdJSMFWRvY3Rlc3Qtb3V0cHV0Y2hlY2tlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LW91dHB1dGNoZWNrZXKUjBVPdXRwdXRDaGVja2VyIG9iamVjdHOUdJSMF2RvY3Rlc3Qtc2ltcGxlLXRlc3RmaWxllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2RvY3Rlc3Qtc2ltcGxlLXRlc3RmaWxllIwuU2ltcGxlIFVzYWdlOiBDaGVja2luZyBFeGFtcGxlcyBpbiBhIFRleHQgRmlsZZR0lIwWZG9jdGVzdC1zaW1wbGUtdGVzdG1vZJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNkb2N0ZXN0LXNpbXBsZS10ZXN0bW9klIwtU2ltcGxlIFVzYWdlOiBDaGVja2luZyBFeGFtcGxlcyBpbiBEb2NzdHJpbmdzlHSUjA9kb2N0ZXN0LXNvYXBib3iUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC1zb2FwYm94lIwHU29hcGJveJR0lIwUZG9jdGVzdC11bml0dGVzdC1hcGmUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC11bml0dGVzdC1hcGmUjAxVbml0dGVzdCBBUEmUdJSMEGRvY3Rlc3Qtd2FybmluZ3OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC13YXJuaW5nc5SMCFdhcm5pbmdzlHSUjBhkb2N0ZXN0LXdoaWNoLWRvY3N0cmluZ3OUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZG9jdGVzdC13aGljaC1kb2NzdHJpbmdzlIweV2hpY2ggRG9jc3RyaW5ncyBBcmUgRXhhbWluZWQ/lHSUjBRkb20tYWNjZXNzb3ItbWV0aG9kc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tYWNjZXNzb3ItbWV0aG9kc5SMEEFjY2Vzc29yIE1ldGhvZHOUdJSMEGRvbS1hdHRyLW9iamVjdHOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWF0dHItb2JqZWN0c5SMDEF0dHIgT2JqZWN0c5R0lIwZZG9tLWF0dHJpYnV0ZWxpc3Qtb2JqZWN0c5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tYXR0cmlidXRlbGlzdC1vYmplY3RzlIwUTmFtZWROb2RlTWFwIE9iamVjdHOUdJSME2RvbS1jb21tZW50LW9iamVjdHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWNvbW1lbnQtb2JqZWN0c5SMD0NvbW1lbnQgT2JqZWN0c5R0lIwPZG9tLWNvbmZvcm1hbmNllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1jb25mb3JtYW5jZZSMC0NvbmZvcm1hbmNllHSUjBRkb20tZG9jdW1lbnQtb2JqZWN0c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tZG9jdW1lbnQtb2JqZWN0c5SMEERvY3VtZW50IE9iamVjdHOUdJSMGGRvbS1kb2N1bWVudHR5cGUtb2JqZWN0c5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tZG9jdW1lbnR0eXBlLW9iamVjdHOUjBREb2N1bWVudFR5cGUgT2JqZWN0c5R0lIwTZG9tLWVsZW1lbnQtb2JqZWN0c5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbCNkb20tZWxlbWVudC1vYmplY3RzlIwPRWxlbWVudCBPYmplY3RzlHSUjAtkb20tZXhhbXBsZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI2RvbS1leGFtcGxllIwLRE9NIEV4YW1wbGWUdJSMDmRvbS1leGNlcHRpb25zlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1leGNlcHRpb25zlIwKRXhjZXB0aW9uc5R0lIwaZG9tLWltcGxlbWVudGF0aW9uLW9iamVjdHOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLWltcGxlbWVudGF0aW9uLW9iamVjdHOUjBlET01JbXBsZW1lbnRhdGlvbiBPYmplY3RzlHSUjBBkb20tbm9kZS1vYmplY3RzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1ub2RlLW9iamVjdHOUjAxOb2RlIE9iamVjdHOUdJSMFGRvbS1ub2RlbGlzdC1vYmplY3RzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1ub2RlbGlzdC1vYmplY3RzlIwQTm9kZUxpc3QgT2JqZWN0c5R0lIwLZG9tLW9iamVjdHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLW9iamVjdHOUjBJPYmplY3RzIGluIHRoZSBET02UdJSMDmRvbS1waS1vYmplY3RzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS1waS1vYmplY3RzlIwdUHJvY2Vzc2luZ0luc3RydWN0aW9uIE9iamVjdHOUdJSMEGRvbS10ZXh0LW9iamVjdHOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLmh0bWwjZG9tLXRleHQtb2JqZWN0c5SMHVRleHQgYW5kIENEQVRBU2VjdGlvbiBPYmplY3RzlHSUjBBkb20tdHlwZS1tYXBwaW5nlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmRvbS5odG1sI2RvbS10eXBlLW1hcHBpbmeUjAxUeXBlIE1hcHBpbmeUdJSMFmRvbWV2ZW50c3RyZWFtLW9iamVjdHOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbCNkb21ldmVudHN0cmVhbS1vYmplY3RzlIwWRE9NRXZlbnRTdHJlYW0gT2JqZWN0c5R0lIwTZHRkLWhhbmRsZXItb2JqZWN0c5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI2R0ZC1oYW5kbGVyLW9iamVjdHOUjBJEVERIYW5kbGVyIE9iamVjdHOUdJSMEGR5bmFtaWMtZmVhdHVyZXOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLmh0bWwjZHluYW1pYy1mZWF0dXJlc5SMIUludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc5R0lIwPZHluYW1pYy1saW5raW5nlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy93aW5kb3dzLmh0bWwjZHluYW1pYy1saW5raW5nlIwkRGlmZmVyZW5jZXMgQmV0d2VlbiBVbml4IGFuZCBXaW5kb3dzlHSUjBZlZGl0aW5nLWFuZC1uYXZpZ2F0aW9ulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaWRsZS5odG1sI2VkaXRpbmctYW5kLW5hdmlnYXRpb26UjBZFZGl0aW5nIGFuZCBuYXZpZ2F0aW9ulHSUjAdlZGl0b3JzlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2VkaXRvcnMuaHRtbCNlZGl0b3JzlIwQRWRpdG9ycyBhbmQgSURFc5R0lIweZWZmaWNpZW50X3N0cmluZ19jb25jYXRlbmF0aW9ulChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2ZhcS9wcm9ncmFtbWluZy5odG1sI2VmZmljaWVudC1zdHJpbmctY29uY2F0ZW5hdGlvbpSMRFdoYXQgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBjb25jYXRlbmF0ZSBtYW55IHN0cmluZ3MgdG9nZXRoZXI/lHSUjBhlbGVtZW50aW5jbHVkZS1mdW5jdGlvbnOUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50aW5jbHVkZS1mdW5jdGlvbnOUjAlGdW5jdGlvbnOUdJSMG2VsZW1lbnR0cmVlLWVsZW1lbnQtb2JqZWN0c5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLWVsZW1lbnQtb2JqZWN0c5SMD0VsZW1lbnQgT2JqZWN0c5R0lIwfZWxlbWVudHRyZWUtZWxlbWVudHRyZWUtb2JqZWN0c5QoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLWVsZW1lbnR0cmVlLW9iamVjdHOUjBNFbGVtZW50VHJlZSBPYmplY3RzlHSUjBVlbGVtZW50dHJlZS1mdW5jdGlvbnOUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50dHJlZS1mdW5jdGlvbnOUjAlGdW5jdGlvbnOUdJSMF2VsZW1lbnR0cmVlLXBhcnNpbmcteG1slChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUtcGFyc2luZy14bWyUjAtQYXJzaW5nIFhNTJR0lIwYZWxlbWVudHRyZWUtcHVsbC1wYXJzaW5nlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUtcHVsbC1wYXJzaW5nlIwhUHVsbCBBUEkgZm9yIG5vbi1ibG9ja2luZyBwYXJzaW5nlHSUjBllbGVtZW50dHJlZS1xbmFtZS1vYmplY3RzlChqCo8AAGoLjwAAjFZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUtcW5hbWUtb2JqZWN0c5SMDVFOYW1lIE9iamVjdHOUdJSME2VsZW1lbnR0cmVlLXNlY3Rpb26UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi43Lmh0bWwjZWxlbWVudHRyZWUtc2VjdGlvbpSMH1VwZGF0ZWQgbW9kdWxlOiBFbGVtZW50VHJlZSAxLjOUdJSMH2VsZW1lbnR0cmVlLXRyZWVidWlsZGVyLW9iamVjdHOUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50dHJlZS10cmVlYnVpbGRlci1vYmplY3RzlIwTVHJlZUJ1aWxkZXIgT2JqZWN0c5R0lIwUZWxlbWVudHRyZWUteGluY2x1ZGWUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUuaHRtbCNlbGVtZW50dHJlZS14aW5jbHVkZZSMEFhJbmNsdWRlIHN1cHBvcnSUdJSMHWVsZW1lbnR0cmVlLXhtbHBhcnNlci1vYmplY3RzlChqCo8AAGoLjwAAjFpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUteG1scGFyc2VyLW9iamVjdHOUjBFYTUxQYXJzZXIgT2JqZWN0c5R0lIwhZWxlbWVudHRyZWUteG1scHVsbHBhcnNlci1vYmplY3RzlChqCo8AAGoLjwAAjF5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWwjZWxlbWVudHRyZWUteG1scHVsbHBhcnNlci1vYmplY3RzlIwVWE1MUHVsbFBhcnNlciBPYmplY3RzlHSUjBFlbGVtZW50dHJlZS14cGF0aJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5odG1sI2VsZW1lbnR0cmVlLXhwYXRolIwNWFBhdGggc3VwcG9ydJR0lIwEZWxpZpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNlbGlmlIwQVGhlIGlmIHN0YXRlbWVudJR0lIwEZWxzZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNlbHNllIwQVGhlIGlmIHN0YXRlbWVudJR0lIwOZW1haWwtZXhhbXBsZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5leGFtcGxlcy5odG1sI2VtYWlsLWV4YW1wbGVzlIwPZW1haWw6IEV4YW1wbGVzlHSUjAllbWJlZGRpbmeUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI2VtYmVkZGluZ5SMJ0VtYmVkZGluZyBQeXRob24gaW4gQW5vdGhlciBBcHBsaWNhdGlvbpR0lIwQZW1iZWRkaW5nLWxvY2FsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvY2FsZS5odG1sI2VtYmVkZGluZy1sb2NhbGWUjDRGb3IgZXh0ZW5zaW9uIHdyaXRlcnMgYW5kIHByb2dyYW1zIHRoYXQgZW1iZWQgUHl0aG9ulHSUjBRlbWJlZGRpbmdpbmNwbHVzcGx1c5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWwjZW1iZWRkaW5naW5jcGx1c3BsdXOUjBdFbWJlZGRpbmcgUHl0aG9uIGluIEMrK5R0lIwJZW5jb2RpbmdzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZW5jb2RpbmdzlIwVRW5jb2RpbmcgZGVjbGFyYXRpb25zlHSUjBJlbmNvZGluZ3Mtb3ZlcnZpZXeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNlbmNvZGluZ3Mtb3ZlcnZpZXeUjBVFbmNvZGluZ3MgYW5kIFVuaWNvZGWUdJSMF2VudGl0eS1yZXNvbHZlci1vYmplY3RzlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWwjZW50aXR5LXJlc29sdmVyLW9iamVjdHOUjBZFbnRpdHlSZXNvbHZlciBPYmplY3RzlHSUjAxlbnRyeS1wb2ludHOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIubWV0YWRhdGEuaHRtbCNlbnRyeS1wb2ludHOUjAxFbnRyeSBwb2ludHOUdJSMBWVwb2NolChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI2Vwb2NolGoNjwAAdJSMDWVwb2xsLW9iamVjdHOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNlcG9sbC1vYmplY3RzlIwuRWRnZSBhbmQgTGV2ZWwgVHJpZ2dlciBQb2xsaW5nIChlcG9sbCkgT2JqZWN0c5R0lIwOZXJyb3ItaGFuZGxlcnOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNlcnJvci1oYW5kbGVyc5SMDkVycm9yIEhhbmRsZXJzlHSUjAlldmFsb3JkZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZXZhbG9yZGVylIwQRXZhbHVhdGlvbiBvcmRlcpR0lIwNZXZlbnQtb2JqZWN0c5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI2V2ZW50LW9iamVjdHOUjA1FdmVudCBPYmplY3RzlHSUjAxleGFtcGxlcy1pbXCUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXAuaHRtbCNleGFtcGxlcy1pbXCUjAhFeGFtcGxlc5R0lIwGZXhjZXB0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2V4Y2VwdJSMEVRoZSB0cnkgc3RhdGVtZW50lHSUjBFleGNlcHRpb24tY2hhbmdlZJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI2V4Y2VwdGlvbi1jaGFuZ2VklGoNjwAAdJSMEWV4Y2VwdGlvbmhhbmRsaW5nlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2V4Y2VwdGlvbnMuaHRtbCNleGNlcHRpb25oYW5kbGluZ5SMEkV4Y2VwdGlvbiBIYW5kbGluZ5R0lIwKZXhjZXB0aW9uc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwuaHRtbCNleGNlcHRpb25zlIwKRXhjZXB0aW9uc5R0lIwJZXhlY21vZGVslChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI2V4ZWNtb2RlbJSMD0V4ZWN1dGlvbiBtb2RlbJR0lIwUZXhwYXQtY29udGVudC1tb2RlbHOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weWV4cGF0Lmh0bWwjZXhwYXQtY29udGVudC1tb2RlbHOUjBpDb250ZW50IE1vZGVsIERlc2NyaXB0aW9uc5R0lIwMZXhwYXQtZXJyb3JzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI2V4cGF0LWVycm9yc5SMFUV4cGF0IGVycm9yIGNvbnN0YW50c5R0lIwNZXhwYXQtZXhhbXBsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZXhwYXQuaHRtbCNleHBhdC1leGFtcGxllIwHRXhhbXBsZZR0lIwSZXhwYXRlcnJvci1vYmplY3RzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI2V4cGF0ZXJyb3Itb2JqZWN0c5SMFUV4cGF0RXJyb3IgRXhjZXB0aW9uc5R0lIwQZXhwbGljaXQtam9pbmluZ5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2V4cGxpY2l0LWpvaW5pbmeUjBVFeHBsaWNpdCBsaW5lIGpvaW5pbmeUdJSMEGV4cHJlc3Npb24taW5wdXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNleHByZXNzaW9uLWlucHV0lIwQRXhwcmVzc2lvbiBpbnB1dJR0lIwLZXhwcmVzc2lvbnOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZXhwcmVzc2lvbnOUjAtFeHByZXNzaW9uc5R0lIwJZXhwcmxpc3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2V4cHJsaXN0c5SMEEV4cHJlc3Npb24gbGlzdHOUdJSMCWV4cHJzdG10c5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZXhwcnN0bXRzlIwVRXhwcmVzc2lvbiBzdGF0ZW1lbnRzlHSUjBNleHRlbmRpbmctZGlzdHV0aWxzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9leHRlbmRpbmcuaHRtbCNleHRlbmRpbmctZGlzdHV0aWxzlIwTRXh0ZW5kaW5nIERpc3R1dGlsc5R0lIwQZXh0ZW5kaW5nLWVycm9yc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjZXh0ZW5kaW5nLWVycm9yc5SMIUludGVybWV6em86IEVycm9ycyBhbmQgRXhjZXB0aW9uc5R0lIwPZXh0ZW5kaW5nLWluZGV4lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9pbmRleC5odG1sI2V4dGVuZGluZy1pbmRleJSMLkV4dGVuZGluZyBhbmQgRW1iZWRkaW5nIHRoZSBQeXRob24gSW50ZXJwcmV0ZXKUdJSMD2V4dGVuZGluZy1pbnRyb5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjZXh0ZW5kaW5nLWludHJvlIweRXh0ZW5kaW5nIFB5dGhvbiB3aXRoIEMgb3IgQysrlHSUjBdleHRlbmRpbmctc2ltcGxlZXhhbXBsZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjZXh0ZW5kaW5nLXNpbXBsZWV4YW1wbGWUjBBBIFNpbXBsZSBFeGFtcGxllHSUjBhleHRlbmRpbmctd2l0aC1lbWJlZGRpbmeUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2VtYmVkZGluZy5odG1sI2V4dGVuZGluZy13aXRoLWVtYmVkZGluZ5SMGUV4dGVuZGluZyBFbWJlZGRlZCBQeXRob26UdJSMCWYtc3RyaW5nc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2Ytc3RyaW5nc5SMGUZvcm1hdHRlZCBzdHJpbmcgbGl0ZXJhbHOUdJSMGWZhcS1hcmd1bWVudC12cy1wYXJhbWV0ZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZmFxL3Byb2dyYW1taW5nLmh0bWwjZmFxLWFyZ3VtZW50LXZzLXBhcmFtZXRlcpSMOFdoYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhcmd1bWVudHMgYW5kIHBhcmFtZXRlcnM/lHSUjCRmYXEtYXVnbWVudGVkLWFzc2lnbm1lbnQtdHVwbGUtZXJyb3KUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZmFxL3Byb2dyYW1taW5nLmh0bWwjZmFxLWF1Z21lbnRlZC1hc3NpZ25tZW50LXR1cGxlLWVycm9ylIxPV2h5IGRvZXMgYV90dXBsZVtpXSArPSBb4oCYaXRlbeKAmV0gcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGFkZGl0aW9uIHdvcmtzP5R0lIwJZmFxLWluZGV4lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2ZhcS9pbmRleC5odG1sI2ZhcS1pbmRleJSMIVB5dGhvbiBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uc5R0lIwZZmFxLW11bHRpZGltZW5zaW9uYWwtbGlzdJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9mYXEvcHJvZ3JhbW1pbmcuaHRtbCNmYXEtbXVsdGlkaW1lbnNpb25hbC1saXN0lIwoSG93IGRvIEkgY3JlYXRlIGEgbXVsdGlkaW1lbnNpb25hbCBsaXN0P5R0lIwdZmFxLXBvc2l0aW9uYWwtb25seS1hcmd1bWVudHOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZmFxL3Byb2dyYW1taW5nLmh0bWwjZmFxLXBvc2l0aW9uYWwtb25seS1hcmd1bWVudHOUjEBXaGF0IGRvZXMgdGhlIHNsYXNoKC8pIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCBvZiBhIGZ1bmN0aW9uIG1lYW4/lHSUjB1mYXEtcnVuLXByb2dyYW0tdW5kZXItd2luZG93c5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9mYXEvd2luZG93cy5odG1sI2ZhcS1ydW4tcHJvZ3JhbS11bmRlci13aW5kb3dzlIwsSG93IGRvIEkgcnVuIGEgUHl0aG9uIHByb2dyYW0gdW5kZXIgV2luZG93cz+UdJSMDWZhdWx0LW9iamVjdHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjZmF1bHQtb2JqZWN0c5SMDUZhdWx0IE9iamVjdHOUdJSMD2ZhdWx0aGFuZGxlci1mZJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5odG1sI2ZhdWx0aGFuZGxlci1mZJSMG0lzc3VlIHdpdGggZmlsZSBkZXNjcmlwdG9yc5R0lIwOZmRfaW5oZXJpdGFuY2WUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI2ZkLWluaGVyaXRhbmNllIwfSW5oZXJpdGFuY2Ugb2YgRmlsZSBEZXNjcmlwdG9yc5R0lIwIZmVhdHVyZXOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNmZWF0dXJlc5SMCEZlYXR1cmVzlHSUjBdmaWxlLWNvb2tpZS1qYXItY2xhc3Nlc5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llamFyLmh0bWwjZmlsZS1jb29raWUtamFyLWNsYXNzZXOUjDtGaWxlQ29va2llSmFyIHN1YmNsYXNzZXMgYW5kIGNvLW9wZXJhdGlvbiB3aXRoIHdlYiBicm93c2Vyc5R0lIwMZmlsZS1oYW5kbGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2ZpbGUtaGFuZGxlcpSMC0ZpbGVIYW5kbGVylHSUjBRmaWxlLWhhbmRsZXItb2JqZWN0c5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjZmlsZS1oYW5kbGVyLW9iamVjdHOUjBNGaWxlSGFuZGxlciBPYmplY3RzlHSUjApmaWxlLWlucHV0lChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWwjZmlsZS1pbnB1dJSMCkZpbGUgaW5wdXSUdJSMD2ZpbGUtb3BlcmF0aW9uc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI2ZpbGUtb3BlcmF0aW9uc5SMHkRpcmVjdG9yeSBhbmQgZmlsZXMgb3BlcmF0aW9uc5R0lIwLZmlsZWZvcm1hdHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9maWxlZm9ybWF0cy5odG1sI2ZpbGVmb3JtYXRzlIwMRmlsZSBGb3JtYXRzlHSUjAlmaWxlbW9kZXOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmaWxlbW9kZXOUag2PAAB0lIwLZmlsZW9iamVjdHOUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmlsZS5odG1sI2ZpbGVvYmplY3RzlIwMRmlsZSBPYmplY3RzlHSUjAVmaWxlc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5tZXRhZGF0YS5odG1sI2ZpbGVzlIwSRGlzdHJpYnV0aW9uIGZpbGVzlHSUjAdmaWxlc3lzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZXN5cy5odG1sI2ZpbGVzeXOUjBlGaWxlIGFuZCBEaXJlY3RvcnkgQWNjZXNzlHSUjBNmaWxlc3lzdGVtLWVuY29kaW5nlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNmaWxlc3lzdGVtLWVuY29kaW5nlIw9RmlsZSBOYW1lcywgQ29tbWFuZCBMaW5lIEFyZ3VtZW50cywgYW5kIEVudmlyb25tZW50IFZhcmlhYmxlc5R0lIwGZmlsdGVylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2ZpbHRlcpSMDkZpbHRlciBPYmplY3RzlHSUjBJmaWx0ZXItY2hhaW4tc3BlY3OUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sem1hLmh0bWwjZmlsdGVyLWNoYWluLXNwZWNzlIwfU3BlY2lmeWluZyBjdXN0b20gZmlsdGVyIGNoYWluc5R0lIwSZmlsdGVycy1jb250ZXh0dWFslChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCNmaWx0ZXJzLWNvbnRleHR1YWyUjC5Vc2luZyBGaWx0ZXJzIHRvIGltcGFydCBjb250ZXh0dWFsIGluZm9ybWF0aW9ulHSUjBJmaWx0ZXJzLWRpY3Rjb25maWeUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI2ZpbHRlcnMtZGljdGNvbmZpZ5SMJUNvbmZpZ3VyaW5nIGZpbHRlcnMgd2l0aCBkaWN0Q29uZmlnKCmUdJSMEWZpbmFsaXplLWV4YW1wbGVzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2Vha3JlZi5odG1sI2ZpbmFsaXplLWV4YW1wbGVzlIwRRmluYWxpemVyIE9iamVjdHOUdJSMB2ZpbmFsbHmUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZmluYWxseZSMEVRoZSB0cnkgc3RhdGVtZW50lHSUjA9maW5kaW5nX21vZHVsZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI2ZpbmRpbmctbW9kdWxlc5SMD0ZpbmRpbmcgbW9kdWxlc5R0lIwIZmxvYXRpbmeUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNmbG9hdGluZ5SMF0Zsb2F0aW5nIHBvaW50IGxpdGVyYWxzlHSUjAxmbG9hdG9iamVjdHOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbCNmbG9hdG9iamVjdHOUjBZGbG9hdGluZyBQb2ludCBPYmplY3RzlHSUjA9mb2xsb3dfc3ltbGlua3OUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI2ZvbGxvdy1zeW1saW5rc5RqDY8AAHSUjANmb3KUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZm9ylIwRVGhlIGZvciBzdGF0ZW1lbnSUdJSMEGZvcmstYW5kLXRocmVhZHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI2ZvcmstYW5kLXRocmVhZHOUjBVDYXV0aW9ucyBhYm91dCBmb3JrKCmUdJSMEWZvcm1hdC1jaGFyYWN0ZXJzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjZm9ybWF0LWNoYXJhY3RlcnOUjBFGb3JtYXQgQ2hhcmFjdGVyc5R0lIwLZm9ybWF0LW1lbnWUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pZGxlLmh0bWwjZm9ybWF0LW1lbnWUjCBGb3JtYXQgbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KZR0lIwNZm9ybWF0LXN0eWxlc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjZm9ybWF0LXN0eWxlc5SMJFVzZSBvZiBhbHRlcm5hdGl2ZSBmb3JtYXR0aW5nIHN0eWxlc5R0lIwOZm9ybWF0ZXhhbXBsZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNmb3JtYXRleGFtcGxlc5SMD0Zvcm1hdCBleGFtcGxlc5R0lIwKZm9ybWF0c3BlY5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI2Zvcm1hdHNwZWOUjCJGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdllHSUjA1mb3JtYXRzdHJpbmdzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjZm9ybWF0c3RyaW5nc5SMFEZvcm1hdCBTdHJpbmcgU3ludGF4lHSUjA9mb3JtYXR0ZXItaW1wbHOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbCNmb3JtYXR0ZXItaW1wbHOUjBlGb3JtYXR0ZXIgSW1wbGVtZW50YXRpb25zlHSUjBNmb3JtYXR0ZXItaW50ZXJmYWNllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjZm9ybWF0dGVyLWludGVyZmFjZZSMF1RoZSBGb3JtYXR0ZXIgSW50ZXJmYWNllHSUjBFmb3JtYXR0ZXItb2JqZWN0c5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNmb3JtYXR0ZXItb2JqZWN0c5SMEUZvcm1hdHRlciBPYmplY3RzlHSUjBFmb3JtYXR0aW5nLXN0eWxlc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjZm9ybWF0dGluZy1zdHlsZXOUjD5Vc2luZyBwYXJ0aWN1bGFyIGZvcm1hdHRpbmcgc3R5bGVzIHRocm91Z2hvdXQgeW91ciBhcHBsaWNhdGlvbpR0lIwNZnJhbWUtb2JqZWN0c5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZGF0YW1vZGVsLmh0bWwjZnJhbWUtb2JqZWN0c5RqDY8AAHSUjApmcmFtZXdvcmtzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnJhbWV3b3Jrcy5odG1sI2ZyYW1ld29ya3OUjBJQcm9ncmFtIEZyYW1ld29ya3OUdJSMGWZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzLmh0bWwjZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c5SMGUZyZXF1ZW50bHkgVXNlZCBBcmd1bWVudHOUdJSMBmZyaWUwOZQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjZnJpZTA5lGoNjwAAdJSMBGZyb22UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2Zyb22UjBRUaGUgaW1wb3J0IHN0YXRlbWVudJR0lIwTZnRwLWhhbmRsZXItb2JqZWN0c5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjZnRwLWhhbmRsZXItb2JqZWN0c5SMEkZUUEhhbmRsZXIgT2JqZWN0c5R0lIwLZnRwLW9iamVjdHOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdHBsaWIuaHRtbCNmdHAtb2JqZWN0c5SMC0ZUUCBPYmplY3RzlHSUjA5mdW5jLWJ5dGVhcnJheZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtYnl0ZWFycmF5lGoNjwAAdJSMCmZ1bmMtYnl0ZXOUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmdW5jLWJ5dGVzlGoNjwAAdJSMCWZ1bmMtZGljdJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtZGljdJRqDY8AAHSUjA5mdW5jLWZyb3plbnNldJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtZnJvemVuc2V0lGoNjwAAdJSMCWZ1bmMtbGlzdJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtbGlzdJRqDY8AAHSUjA9mdW5jLW1lbW9yeXZpZXeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmdW5jLW1lbW9yeXZpZXeUag2PAAB0lIwKZnVuYy1yYW5nZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtcmFuZ2WUag2PAAB0lIwIZnVuYy1zZXSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmdW5jLXNldJRqDY8AAHSUjAhmdW5jLXN0cpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2Z1bmMtc3RylGoNjwAAdJSMCmZ1bmMtdHVwbGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNmdW5jLXR1cGxllGoNjwAAdJSMCGZ1bmN0aW9ulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2Z1bmN0aW9ulIwURnVuY3Rpb24gZGVmaW5pdGlvbnOUdJSMEGZ1bmN0aW9uLW9iamVjdHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZnVuY3Rpb24uaHRtbCNmdW5jdGlvbi1vYmplY3RzlIwQRnVuY3Rpb24gT2JqZWN0c5R0lIwaZnVuY3Rpb25hbC1ob3d0by1pdGVyYXRvcnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vZnVuY3Rpb25hbC5odG1sI2Z1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzlIwJSXRlcmF0b3JzlHSUjAlmdW5jdGlvbnOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCNmdW5jdGlvbnOUjAlGdW5jdGlvbnOUdJSMF2Z1bmN0aW9ucy1pbi1jZ2ktbW9kdWxllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpLmh0bWwjZnVuY3Rpb25zLWluLWNnaS1tb2R1bGWUjAlGdW5jdGlvbnOUdJSMC2Z1bmRhbWVudGFslChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbmNyZXRlLmh0bWwjZnVuZGFtZW50YWyUjBNGdW5kYW1lbnRhbCBPYmplY3RzlHSUjBBmdXJ0aGVyLWV4YW1wbGVzlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5odG1sI2Z1cnRoZXItZXhhbXBsZXOUjBBGdXJ0aGVyIEV4YW1wbGVzlHSUjAZmdXR1cmWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2Z1dHVyZZSMEUZ1dHVyZSBzdGF0ZW1lbnRzlHSUjAtnZW4tb2JqZWN0c5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9nZW4uaHRtbCNnZW4tb2JqZWN0c5SMEUdlbmVyYXRvciBPYmplY3RzlHSUjBFnZW5lcmF0b3ItbWV0aG9kc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNnZW5lcmF0b3ItbWV0aG9kc5SMGkdlbmVyYXRvci1pdGVyYXRvciBtZXRob2RzlHSUjA9nZW5lcmF0b3ItdHlwZXOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI2dlbmVyYXRvci10eXBlc5SMD0dlbmVyYXRvciBUeXBlc5R0lIwcZ2VuZXJpYy1hdHRyaWJ1dGUtbWFuYWdlbWVudJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvbmV3dHlwZXMuaHRtbCNnZW5lcmljLWF0dHJpYnV0ZS1tYW5hZ2VtZW50lIwcR2VuZXJpYyBBdHRyaWJ1dGUgTWFuYWdlbWVudJR0lIwIZ2VuZXJpY3OUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90eXBpbmcuaHRtbCNnZW5lcmljc5SMCEdlbmVyaWNzlHSUjAdnZW5leHBylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dlbmV4cHKUjBVHZW5lcmF0b3IgZXhwcmVzc2lvbnOUdJSMCGdlbmluZGV4lChqCo8AAGoLjwAAjCdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dlbmluZGV4Lmh0bWyUjAVJbmRleJR0lIwLZ2V0dGluZy1vc3iUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvbWFjLmh0bWwjZ2V0dGluZy1vc3iUjCBHZXR0aW5nIGFuZCBJbnN0YWxsaW5nIE1hY1B5dGhvbpR0lIwPZ2V0dGluZy1zdGFydGVklChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5odG1sI2dldHRpbmctc3RhcnRlZJRqDY8AAHSUjAhnaWxzdGF0ZZQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjZ2lsc3RhdGWUjBpOb24tUHl0aG9uIGNyZWF0ZWQgdGhyZWFkc5R0lIwGZ2xvYmFslChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNnbG9iYWyUjBRUaGUgZ2xvYmFsIHN0YXRlbWVudJR0lIwQZ2xvYmFsLWNvbmYtdmFyc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjZ2xvYmFsLWNvbmYtdmFyc5SMHkdsb2JhbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlc5R0lIwIZ2xvc3NhcnmUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbCNnbG9zc2FyeZSMCEdsb3NzYXJ5lHSUjBNnemlwLXVzYWdlLWV4YW1wbGVzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3ppcC5odG1sI2d6aXAtdXNhZ2UtZXhhbXBsZXOUjBFFeGFtcGxlcyBvZiB1c2FnZZR0lIwNaGFuZGxlLW9iamVjdJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI2hhbmRsZS1vYmplY3SUjBdSZWdpc3RyeSBIYW5kbGUgT2JqZWN0c5R0lIwHaGFuZGxlcpQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNoYW5kbGVylIwPSGFuZGxlciBPYmplY3RzlHSUjA1oYW5kbGVyLWJhc2ljlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmcuaHRtbCNoYW5kbGVyLWJhc2ljlIwISGFuZGxlcnOUdJSMD2hhc2gtYWxnb3JpdGhtc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2hhc2hsaWIuaHRtbCNoYXNoLWFsZ29yaXRobXOUjA9IYXNoIGFsZ29yaXRobXOUdJSMCmhlYXAtdHlwZXOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI2hlYXAtdHlwZXOUjApIZWFwIFR5cGVzlHSUjAxoZWxwLXNvdXJjZXOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pZGxlLmh0bWwjaGVscC1zb3VyY2VzlIwMSGVscCBzb3VyY2VzlHSUjBRoaWdoLWxldmVsLWVtYmVkZGluZ5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWwjaGlnaC1sZXZlbC1lbWJlZGRpbmeUjBlWZXJ5IEhpZ2ggTGV2ZWwgRW1iZWRkaW5nlHSUjBNoaXN0b3J5LWFuZC1saWNlbnNllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpY2Vuc2UuaHRtbCNoaXN0b3J5LWFuZC1saWNlbnNllIwTSGlzdG9yeSBhbmQgTGljZW5zZZR0lIwOaGtleS1jb25zdGFudHOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbCNoa2V5LWNvbnN0YW50c5SMEEhLRVlfKiBDb25zdGFudHOUdJSMCWhvc3RfcG9ydJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI2hvc3QtcG9ydJRqDY8AAHSUjBVob3d0by1taW5pbWFsLWV4YW1wbGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy5odG1sI2hvd3RvLW1pbmltYWwtZXhhbXBsZZSMEEEgc2ltcGxlIGV4YW1wbGWUdJSME2h0bWxwYXJzZXItZXhhbXBsZXOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLnBhcnNlci5odG1sI2h0bWxwYXJzZXItZXhhbXBsZXOUjAhFeGFtcGxlc5R0lIwXaHR0cC1iYXNpYy1hdXRoLWhhbmRsZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI2h0dHAtYmFzaWMtYXV0aC1oYW5kbGVylIwcSFRUUEJhc2ljQXV0aEhhbmRsZXIgT2JqZWN0c5R0lIwVaHR0cC1jb29raWUtcHJvY2Vzc29ylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNodHRwLWNvb2tpZS1wcm9jZXNzb3KUjBtIVFRQQ29va2llUHJvY2Vzc29yIE9iamVjdHOUdJSMGGh0dHAtZGlnZXN0LWF1dGgtaGFuZGxlcpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjaHR0cC1kaWdlc3QtYXV0aC1oYW5kbGVylIwdSFRUUERpZ2VzdEF1dGhIYW5kbGVyIE9iamVjdHOUdJSMHGh0dHAtZXJyb3ItcHJvY2Vzc29yLW9iamVjdHOUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI2h0dHAtZXJyb3ItcHJvY2Vzc29yLW9iamVjdHOUjBpIVFRQRXJyb3JQcm9jZXNzb3IgT2JqZWN0c5R0lIwMaHR0cC1oYW5kbGVylChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI2h0dHAtaGFuZGxlcpSMC0hUVFBIYW5kbGVylHSUjBRodHRwLWhhbmRsZXItb2JqZWN0c5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjaHR0cC1oYW5kbGVyLW9iamVjdHOUjBNIVFRQSGFuZGxlciBPYmplY3RzlHSUjBFodHRwLXBhc3N3b3JkLW1ncpQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjaHR0cC1wYXNzd29yZC1tZ3KUjBdIVFRQUGFzc3dvcmRNZ3IgT2JqZWN0c5R0lIwhaHR0cC1wYXNzd29yZC1tZ3Itd2l0aC1wcmlvci1hdXRolChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNodHRwLXBhc3N3b3JkLW1nci13aXRoLXByaW9yLWF1dGiUjCRIVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoIE9iamVjdHOUdJSMFWh0dHAtcmVkaXJlY3QtaGFuZGxlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjaHR0cC1yZWRpcmVjdC1oYW5kbGVylIwbSFRUUFJlZGlyZWN0SGFuZGxlciBPYmplY3RzlHSUjA9odHRwLXNlcnZlci1jbGmUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1sI2h0dHAtc2VydmVyLWNsaZRqDY8AAHSUjBFodHRwLXN0YXR1cy1jb2Rlc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuaHRtbCNodHRwLXN0YXR1cy1jb2Rlc5SMEUhUVFAgc3RhdHVzIGNvZGVzlHSUjA5odHRwX2Vycm9yX25ubpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjaHR0cC1lcnJvci1ubm6Uag2PAAB0lIwWaHR0cGNvbm5lY3Rpb24tb2JqZWN0c5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cGNvbm5lY3Rpb24tb2JqZWN0c5SMFkhUVFBDb25uZWN0aW9uIE9iamVjdHOUdJSME2h0dHBtZXNzYWdlLW9iamVjdHOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNsaWVudC5odG1sI2h0dHBtZXNzYWdlLW9iamVjdHOUjBNIVFRQTWVzc2FnZSBPYmplY3RzlHSUjBRodHRwcmVzcG9uc2Utb2JqZWN0c5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWwjaHR0cHJlc3BvbnNlLW9iamVjdHOUjBRIVFRQUmVzcG9uc2UgT2JqZWN0c5R0lIwVaHR0cHMtaGFuZGxlci1vYmplY3RzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNodHRwcy1oYW5kbGVyLW9iamVjdHOUjBRIVFRQU0hhbmRsZXIgT2JqZWN0c5R0lIwEaTE4bpQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2kxOG4uaHRtbCNpMThulIwUSW50ZXJuYXRpb25hbGl6YXRpb26UdJSMCmlkLWNsYXNzZXOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNpZC1jbGFzc2VzlIwfUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc5R0lIwDaWRllChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL21hYy5odG1sI2lkZZSMB1RoZSBJREWUdJSMC2lkZW50aWZpZXJzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaWRlbnRpZmllcnOUjBhJZGVudGlmaWVycyBhbmQga2V5d29yZHOUdJSMBGlkbGWUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pZGxlLmh0bWwjaWRsZZSMBElETEWUdJSMAmlmlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2lmlIwQVGhlIGlmIHN0YXRlbWVudJR0lIwHaWZfZXhwcpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNpZi1leHBylIwXQ29uZGl0aW9uYWwgZXhwcmVzc2lvbnOUdJSMCWltYWdpbmFyeZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2ltYWdpbmFyeZSMEkltYWdpbmFyeSBsaXRlcmFsc5R0lIwNaW1hcDQtZXhhbXBsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwNC1leGFtcGxllIwNSU1BUDQgRXhhbXBsZZR0lIwNaW1hcDQtb2JqZWN0c5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbCNpbWFwNC1vYmplY3RzlIwNSU1BUDQgT2JqZWN0c5R0lIwPaW1wbGVtZW50YXRpb25zlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24uaHRtbCNpbXBsZW1lbnRhdGlvbnOUjBlBbHRlcm5hdGUgSW1wbGVtZW50YXRpb25zlHSUjCZpbXBsZW1lbnRpbmctdGhlLWFyaXRobWV0aWMtb3BlcmF0aW9uc5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L251bWJlcnMuaHRtbCNpbXBsZW1lbnRpbmctdGhlLWFyaXRobWV0aWMtb3BlcmF0aW9uc5SMJkltcGxlbWVudGluZyB0aGUgYXJpdGhtZXRpYyBvcGVyYXRpb25zlHSUjBBpbXBsaWNpdC1qb2luaW5nlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW1wbGljaXQtam9pbmluZ5SMFUltcGxpY2l0IGxpbmUgam9pbmluZ5R0lIwGaW1wb3J0lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNpbXBvcnSUjBRUaGUgaW1wb3J0IHN0YXRlbWVudJR0lIwQaW1wb3J0LW1vZC1hdHRyc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWwjaW1wb3J0LW1vZC1hdHRyc5SMIEltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzlHSUjAlpbXBvcnRpbmeUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWwjaW1wb3J0aW5nlIwRSW1wb3J0aW5nIE1vZHVsZXOUdJSMCWltcG9ydGxpYpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjMuaHRtbCNpbXBvcnRsaWKUjC9Vc2luZyBpbXBvcnRsaWIgYXMgdGhlIEltcGxlbWVudGF0aW9uIG9mIEltcG9ydJR0lIwSaW1wb3J0bGliLWV4YW1wbGVzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjaW1wb3J0bGliLWV4YW1wbGVzlIwIRXhhbXBsZXOUdJSMEWltcG9ydGxpYi1zZWN0aW9ulChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNy5odG1sI2ltcG9ydGxpYi1zZWN0aW9ulIwVTmV3IG1vZHVsZTogaW1wb3J0bGlilHSUjAxpbXBvcnRzeXN0ZW2UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2ltcG9ydC5odG1sI2ltcG9ydHN5c3RlbZSMEVRoZSBpbXBvcnQgc3lzdGVtlHSUjBxpbXByb3ZlZC1zaGVsbC1jb21wYXRpYmlsaXR5lChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNpbXByb3ZlZC1zaGVsbC1jb21wYXRpYmlsaXR5lIwiSW1wcm92ZWQgQ29tcGF0aWJpbGl0eSB3aXRoIFNoZWxsc5R0lIwCaW6UKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjaW6UjBpNZW1iZXJzaGlwIHRlc3Qgb3BlcmF0aW9uc5R0lIwbaW5jcmVtZW50YWwtZGVjb2Rlci1vYmplY3RzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjaW5jcmVtZW50YWwtZGVjb2Rlci1vYmplY3RzlIwaSW5jcmVtZW50YWxEZWNvZGVyIE9iamVjdHOUdJSMG2luY3JlbWVudGFsLWVuY29kZXItb2JqZWN0c5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGVjcy5odG1sI2luY3JlbWVudGFsLWVuY29kZXItb2JqZWN0c5SMGkluY3JlbWVudGFsRW5jb2RlciBPYmplY3RzlHSUjBppbmNyZW1lbnRhbC1wYXJzZXItb2JqZWN0c5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjaW5jcmVtZW50YWwtcGFyc2VyLW9iamVjdHOUjBlJbmNyZW1lbnRhbFBhcnNlciBPYmplY3RzlHSUjAtpbmRlbnRhdGlvbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2luZGVudGF0aW9ulIwLSW5kZW50YXRpb26UdJSMC2luaXQtY29uZmlnlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjaW5pdC1jb25maWeUjCNQeXRob24gSW5pdGlhbGl6YXRpb24gQ29uZmlndXJhdGlvbpR0lIwSaW5pdC1pc29sYXRlZC1jb25mlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXRfY29uZmlnLmh0bWwjaW5pdC1pc29sYXRlZC1jb25mlIwWSXNvbGF0ZWQgQ29uZmlndXJhdGlvbpR0lIwQaW5pdC1wYXRoLWNvbmZpZ5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2luaXQtcGF0aC1jb25maWeUjBJQYXRoIENvbmZpZ3VyYXRpb26UdJSMEmluaXQtcHl0aG9uLWNvbmZpZ5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1sI2luaXQtcHl0aG9uLWNvbmZpZ5SMFFB5dGhvbiBDb25maWd1cmF0aW9ulHSUjA5pbml0aWFsaXphdGlvbpQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjaW5pdGlhbGl6YXRpb26UjClJbml0aWFsaXphdGlvbiwgRmluYWxpemF0aW9uLCBhbmQgVGhyZWFkc5R0lIwUaW5pdGlhbGl6aW5nLW1vZHVsZXOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjaW5pdGlhbGl6aW5nLW1vZHVsZXOUjBZJbml0aWFsaXppbmcgQyBtb2R1bGVzlHSUjBRpbnB1dC1zb3VyY2Utb2JqZWN0c5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLmh0bWwjaW5wdXQtc291cmNlLW9iamVjdHOUjBNJbnB1dFNvdXJjZSBPYmplY3RzlHSUjBlpbnNwZWN0LWNsYXNzZXMtZnVuY3Rpb25zlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5zcGVjdC5odG1sI2luc3BlY3QtY2xhc3Nlcy1mdW5jdGlvbnOUjBVDbGFzc2VzIGFuZCBmdW5jdGlvbnOUdJSMEmluc3BlY3QtbW9kdWxlLWNsaZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LW1vZHVsZS1jbGmUjBZDb21tYW5kIExpbmUgSW50ZXJmYWNllHSUjBdpbnNwZWN0LW1vZHVsZS1jby1mbGFnc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LW1vZHVsZS1jby1mbGFnc5SMFkNvZGUgT2JqZWN0cyBCaXQgRmxhZ3OUdJSMGGluc3BlY3Qtc2lnbmF0dXJlLW9iamVjdJQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LXNpZ25hdHVyZS1vYmplY3SUjDFJbnRyb3NwZWN0aW5nIGNhbGxhYmxlcyB3aXRoIHRoZSBTaWduYXR1cmUgb2JqZWN0lHSUjA5pbnNwZWN0LXNvdXJjZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LXNvdXJjZZSMFlJldHJpZXZpbmcgc291cmNlIGNvZGWUdJSMDWluc3BlY3Qtc3RhY2uUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWwjaW5zcGVjdC1zdGFja5SMFVRoZSBpbnRlcnByZXRlciBzdGFja5R0lIwNaW5zcGVjdC10eXBlc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2luc3BlY3QuaHRtbCNpbnNwZWN0LXR5cGVzlIwRVHlwZXMgYW5kIG1lbWJlcnOUdJSMEGluc3QtYWx0LWluc3RhbGyUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtYWx0LWluc3RhbGyUjBZBbHRlcm5hdGUgSW5zdGFsbGF0aW9ulHSUjBVpbnN0LWFsdC1pbnN0YWxsLWhvbWWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtYWx0LWluc3RhbGwtaG9tZZSMJ0FsdGVybmF0ZSBpbnN0YWxsYXRpb246IHRoZSBob21lIHNjaGVtZZR0lIwcaW5zdC1hbHQtaW5zdGFsbC1wcmVmaXgtdW5peJSVIwABAAAAAAAoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1hbHQtaW5zdGFsbC1wcmVmaXgtdW5peJSMMEFsdGVybmF0ZSBpbnN0YWxsYXRpb246IFVuaXggKHRoZSBwcmVmaXggc2NoZW1lKZR0lIwfaW5zdC1hbHQtaW5zdGFsbC1wcmVmaXgtd2luZG93c5QoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1hbHQtaW5zdGFsbC1wcmVmaXgtd2luZG93c5SMM0FsdGVybmF0ZSBpbnN0YWxsYXRpb246IFdpbmRvd3MgKHRoZSBwcmVmaXggc2NoZW1lKZR0lIwVaW5zdC1hbHQtaW5zdGFsbC11c2VylChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWFsdC1pbnN0YWxsLXVzZXKUjCdBbHRlcm5hdGUgaW5zdGFsbGF0aW9uOiB0aGUgdXNlciBzY2hlbWWUdJSMEWluc3QtYnVpbGRpbmctZXh0lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWJ1aWxkaW5nLWV4dJSMJEJ1aWxkaW5nIEV4dGVuc2lvbnM6IFRpcHMgYW5kIFRyaWNrc5R0lIwVaW5zdC1jb25maWctZmlsZW5hbWVzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWNvbmZpZy1maWxlbmFtZXOUjCJMb2NhdGlvbiBhbmQgbmFtZXMgb2YgY29uZmlnIGZpbGVzlHSUjBFpbnN0LWNvbmZpZy1maWxlc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1jb25maWctZmlsZXOUjB1EaXN0dXRpbHMgQ29uZmlndXJhdGlvbiBGaWxlc5R0lIwSaW5zdC1jb25maWctc3ludGF4lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWNvbmZpZy1zeW50YXiUjBZTeW50YXggb2YgY29uZmlnIGZpbGVzlHSUjBNpbnN0LWN1c3RvbS1pbnN0YWxslChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWN1c3RvbS1pbnN0YWxslIwTQ3VzdG9tIEluc3RhbGxhdGlvbpR0lIwUaW5zdC1ob3ctYnVpbGQtd29ya3OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtaG93LWJ1aWxkLXdvcmtzlIwSSG93IGJ1aWxkaW5nIHdvcmtzlHSUjBZpbnN0LWhvdy1pbnN0YWxsLXdvcmtzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LWhvdy1pbnN0YWxsLXdvcmtzlIwWSG93IGluc3RhbGxhdGlvbiB3b3Jrc5R0lIwKaW5zdC1pbnRyb5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1pbnRyb5SMDEludHJvZHVjdGlvbpR0lIwRaW5zdC1uZXctc3RhbmRhcmSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaW5zdGFsbC9pbmRleC5odG1sI2luc3QtbmV3LXN0YW5kYXJklIwkRGlzdHV0aWxzIGJhc2VkIHNvdXJjZSBkaXN0cmlidXRpb25zlHSUjBVpbnN0LW5vbi1tcy1jb21waWxlcnOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaW5zdGFsbC9pbmRleC5odG1sI2luc3Qtbm9uLW1zLWNvbXBpbGVyc5SMKFVzaW5nIG5vbi1NaWNyb3NvZnQgY29tcGlsZXJzIG9uIFdpbmRvd3OUdJSMGGluc3QtcGxhdGZvcm0tdmFyaWF0aW9uc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1wbGF0Zm9ybS12YXJpYXRpb25zlIwTUGxhdGZvcm0gdmFyaWF0aW9uc5R0lIwQaW5zdC1zZWFyY2gtcGF0aJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1zZWFyY2gtcGF0aJSMIE1vZGlmeWluZyBQeXRob27igJlzIFNlYXJjaCBQYXRolHSUjBFpbnN0LXNwbGl0dGluZy11cJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC1zcGxpdHRpbmctdXCUjBRTcGxpdHRpbmcgdGhlIGpvYiB1cJR0lIwVaW5zdC1zdGFuZGFyZC1pbnN0YWxslChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0LXN0YW5kYXJkLWluc3RhbGyUjBpTdGFuZGFyZCBCdWlsZCBhbmQgSW5zdGFsbJR0lIwQaW5zdC10d2Vhay1mbGFnc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsL2luZGV4Lmh0bWwjaW5zdC10d2Vhay1mbGFnc5SMHlR3ZWFraW5nIGNvbXBpbGVyL2xpbmtlciBmbGFnc5R0lIwLaW5zdGFsbC1jbWSUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2NvbW1hbmRyZWYuaHRtbCNpbnN0YWxsLWNtZJSMLkluc3RhbGxpbmcgbW9kdWxlczogdGhlIGluc3RhbGwgY29tbWFuZCBmYW1pbHmUdJSMEGluc3RhbGwtZGF0YS1jbWSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2NvbW1hbmRyZWYuaHRtbCNpbnN0YWxsLWRhdGEtY21klIwMaW5zdGFsbF9kYXRhlHSUjA1pbnN0YWxsLWluZGV4lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbCNpbnN0YWxsLWluZGV4lIwqSW5zdGFsbGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24plHSUjBVpbnN0YWxsLWxheW91dC1vcHRpb26UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI2luc3RhbGwtbGF5b3V0LW9wdGlvbpSMHkluc3RhbGxpbmcgV2l0aG91dCBEb3dubG9hZGluZ5R0lIwUaW5zdGFsbC1xdWlldC1vcHRpb26UKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI2luc3RhbGwtcXVpZXQtb3B0aW9ulIwVSW5zdGFsbGluZyBXaXRob3V0IFVJlHSUjBNpbnN0YWxsLXNjcmlwdHMtY21klChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9jb21tYW5kcmVmLmh0bWwjaW5zdGFsbC1zY3JpcHRzLWNtZJSMD2luc3RhbGxfc2NyaXB0c5R0lIwQaW5zdGFsbGluZy1pbmRleJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsaW5nL2luZGV4Lmh0bWwjaW5zdGFsbGluZy1pbmRleJSMGUluc3RhbGxpbmcgUHl0aG9uIE1vZHVsZXOUdJSMFmluc3RhbmNlbWV0aG9kLW9iamVjdHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWV0aG9kLmh0bWwjaW5zdGFuY2VtZXRob2Qtb2JqZWN0c5SMF0luc3RhbmNlIE1ldGhvZCBPYmplY3RzlHSUjA9pbnN0cnVtZW50YXRpb26UKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vaW5zdHJ1bWVudGF0aW9uLmh0bWwjaW5zdHJ1bWVudGF0aW9ulIwvSW5zdHJ1bWVudGluZyBDUHl0aG9uIHdpdGggRFRyYWNlIGFuZCBTeXN0ZW1UYXCUdJSMCGludGVnZXJzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjaW50ZWdlcnOUjBBJbnRlZ2VyIGxpdGVyYWxzlHSUjAtpbnRlcmFjdGl2ZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI2ludGVyYWN0aXZllIwRSW50ZXJhY3RpdmUgaW5wdXSUdJSMCGludGVybmV0lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW50ZXJuZXQuaHRtbCNpbnRlcm5ldJSMHkludGVybmV0IFByb3RvY29scyBhbmQgU3VwcG9ydJR0lIwTaW50ZXJwcmV0ZXItb2JqZWN0c5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvZGUuaHRtbCNpbnRlcnByZXRlci1vYmplY3RzlIwfSW50ZXJhY3RpdmUgSW50ZXJwcmV0ZXIgT2JqZWN0c5R0lIwMaW50cm9kdWN0aW9ulChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24uaHRtbCNpbnRyb2R1Y3Rpb26UjAxJbnRyb2R1Y3Rpb26UdJSMC2lvLW92ZXJ2aWV3lChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbCNpby1vdmVydmlld5SMCE92ZXJ2aWV3lHSUjA9pcGFkZHJlc3MtaG93dG+UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vaXBhZGRyZXNzLmh0bWwjaXBhZGRyZXNzLWhvd3RvlIwnQW4gaW50cm9kdWN0aW9uIHRvIHRoZSBpcGFkZHJlc3MgbW9kdWxllHSUjANpcGOUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGMuaHRtbCNpcGOUjClOZXR3b3JraW5nIGFuZCBJbnRlcnByb2Nlc3MgQ29tbXVuaWNhdGlvbpR0lIwCaXOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjaXOUjBRJZGVudGl0eSBjb21wYXJpc29uc5R0lIwGaXMgbm90lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2lzLW5vdJSMFElkZW50aXR5IGNvbXBhcmlzb25zlHSUjAhpdGVyYXRvcpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pdGVyLmh0bWwjaXRlcmF0b3KUjBFJdGVyYXRvciBQcm90b2NvbJR0lIwQaXRlcmF0b3Itb2JqZWN0c5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pdGVyYXRvci5odG1sI2l0ZXJhdG9yLW9iamVjdHOUjBBJdGVyYXRvciBPYmplY3RzlHSUjBNpdGVydG9vbHMtZnVuY3Rpb25zlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWwjaXRlcnRvb2xzLWZ1bmN0aW9uc5SMEkl0ZXJ0b29sIGZ1bmN0aW9uc5R0lIwRaXRlcnRvb2xzLXJlY2lwZXOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pdGVydG9vbHMuaHRtbCNpdGVydG9vbHMtcmVjaXBlc5SMEUl0ZXJ0b29scyBSZWNpcGVzlHSUjBBqc29uLWNvbW1hbmRsaW5llChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24tY29tbWFuZGxpbmWUjBZDb21tYW5kIExpbmUgSW50ZXJmYWNllHSUjBBqc29uLXRvLXB5LXRhYmxllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI2pzb24tdG8tcHktdGFibGWUag2PAAB0lIwOa2V2ZW50LW9iamVjdHOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNrZXZlbnQtb2JqZWN0c5SMDktldmVudCBPYmplY3RzlHSUjBZrZXl3b3JkLW9ubHlfcGFyYW1ldGVylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwja2V5d29yZC1vbmx5LXBhcmFtZXRlcpRqDY8AAHSUjAhrZXl3b3Jkc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2tleXdvcmRzlIwIS2V5d29yZHOUdJSMDmtxdWV1ZS1vYmplY3RzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0Lmh0bWwja3F1ZXVlLW9iamVjdHOUjA5LcXVldWUgT2JqZWN0c5R0lIwGbGFtYmRhlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2xhbWJkYZSMB0xhbWJkYXOUdJSMB2xhbWJkYXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjbGFtYmRhc5SMB0xhbWJkYXOUdJSMCGxhbmd1YWdllChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbGFuZ3VhZ2UuaHRtbCNsYW5ndWFnZZSMGFB5dGhvbiBMYW5ndWFnZSBTZXJ2aWNlc5R0lIwIbGF1bmNoZXKUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI2xhdW5jaGVylIwbUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzlHSUjAZsYXlvdXSUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1sI2xheW91dHOUjAdMYXlvdXRzlHSUjBFsZWdhY3ktdW5pdC10ZXN0c5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjbGVnYWN5LXVuaXQtdGVzdHOUjBZSZS11c2luZyBvbGQgdGVzdCBjb2RllHSUjAZsZXZlbHOUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbGV2ZWxzlIwOTG9nZ2luZyBMZXZlbHOUdJSMB2xleGljYWyUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNsZXhpY2FslIwQTGV4aWNhbCBhbmFseXNpc5R0lIwObGlicmFyeS1jb25maWeUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy5odG1sI2xpYnJhcnktY29uZmlnlIwhQ29uZmlndXJpbmcgTG9nZ2luZyBmb3IgYSBMaWJyYXJ5lHSUjA1saWJyYXJ5LWluZGV4lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW5kZXguaHRtbCNsaWJyYXJ5LWluZGV4lIwbVGhlIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5lHSUjA1saWJyYXJ5LWludHJvlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW50cm8uaHRtbCNsaWJyYXJ5LWludHJvlIwMSW50cm9kdWN0aW9ulHSUjA5saW5lLXN0cnVjdHVyZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2xpbmUtc3RydWN0dXJllIwOTGluZSBzdHJ1Y3R1cmWUdJSMD2xpc3RpbmctbW9kdWxlc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNsaXN0aW5nLW1vZHVsZXOUjBpMaXN0aW5nIGluZGl2aWR1YWwgbW9kdWxlc5R0lIwQbGlzdGluZy1wYWNrYWdlc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbCNsaXN0aW5nLXBhY2thZ2VzlIwWTGlzdGluZyB3aG9sZSBwYWNrYWdlc5R0lIwLbGlzdG9iamVjdHOUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbGlzdC5odG1sI2xpc3RvYmplY3RzlIwMTGlzdCBPYmplY3RzlHSUjAVsaXN0c5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNsaXN0c5SMDUxpc3QgZGlzcGxheXOUdJSMCGxpdGVyYWxzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjbGl0ZXJhbHOUjAhMaXRlcmFsc5R0lIwObG9jYWxlLWdldHRleHSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbCNsb2NhbGUtZ2V0dGV4dJSMGkFjY2VzcyB0byBtZXNzYWdlIGNhdGFsb2dzlHSUjA9sb2NhdG9yLW9iamVjdHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnJlYWRlci5odG1sI2xvY2F0b3Itb2JqZWN0c5SMD0xvY2F0b3IgT2JqZWN0c5R0lIwMbG9jay1vYmplY3RzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGhyZWFkaW5nLmh0bWwjbG9jay1vYmplY3RzlIwMTG9jayBPYmplY3RzlHSUjApsb2ctcmVjb3JklChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZy1yZWNvcmSUjBFMb2dSZWNvcmQgT2JqZWN0c5R0lIwGbG9nZ2VylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5odG1sI2xvZ2dlcpSMDkxvZ2dlciBPYmplY3RzlHSUjA5sb2dnZXItYWRhcHRlcpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dnZXItYWRhcHRlcpSMFUxvZ2dlckFkYXB0ZXIgT2JqZWN0c5R0lIwZbG9nZ2luZy1hZHZhbmNlZC10dXRvcmlhbJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLmh0bWwjbG9nZ2luZy1hZHZhbmNlZC10dXRvcmlhbJSMGUFkdmFuY2VkIExvZ2dpbmcgVHV0b3JpYWyUdJSMFmxvZ2dpbmctYmFzaWMtdHV0b3JpYWyUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy5odG1sI2xvZ2dpbmctYmFzaWMtdHV0b3JpYWyUjBZCYXNpYyBMb2dnaW5nIFR1dG9yaWFslHSUjBJsb2dnaW5nLWNvbmZpZy1hcGmUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctY29uZmlnLWFwaZSMF0NvbmZpZ3VyYXRpb24gZnVuY3Rpb25zlHSUjB9sb2dnaW5nLWNvbmZpZy1kaWN0LWNvbm5lY3Rpb25zlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1kaWN0LWNvbm5lY3Rpb25zlIwST2JqZWN0IGNvbm5lY3Rpb25zlHSUjB9sb2dnaW5nLWNvbmZpZy1kaWN0LWV4dGVybmFsb2JqlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1kaWN0LWV4dGVybmFsb2JqlIwaQWNjZXNzIHRvIGV4dGVybmFsIG9iamVjdHOUdJSMH2xvZ2dpbmctY29uZmlnLWRpY3QtaW5jcmVtZW50YWyUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctY29uZmlnLWRpY3QtaW5jcmVtZW50YWyUjBlJbmNyZW1lbnRhbCBDb25maWd1cmF0aW9ulHSUjB9sb2dnaW5nLWNvbmZpZy1kaWN0LWludGVybmFsb2JqlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1kaWN0LWludGVybmFsb2JqlIwaQWNjZXNzIHRvIGludGVybmFsIG9iamVjdHOUdJSMG2xvZ2dpbmctY29uZmlnLWRpY3QtdXNlcmRlZpQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWwjbG9nZ2luZy1jb25maWctZGljdC11c2VyZGVmlIwUVXNlci1kZWZpbmVkIG9iamVjdHOUdJSMGWxvZ2dpbmctY29uZmlnLWRpY3RzY2hlbWGUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctY29uZmlnLWRpY3RzY2hlbWGUjB9Db25maWd1cmF0aW9uIGRpY3Rpb25hcnkgc2NoZW1hlHSUjBlsb2dnaW5nLWNvbmZpZy1maWxlZm9ybWF0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5jb25maWcuaHRtbCNsb2dnaW5nLWNvbmZpZy1maWxlZm9ybWF0lIwZQ29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdJR0lIwQbG9nZ2luZy1jb29rYm9va5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjbG9nZ2luZy1jb29rYm9va5SMEExvZ2dpbmcgQ29va2Jvb2uUdJSMEmxvZ2dpbmctZXhjZXB0aW9uc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLmh0bWwjbG9nZ2luZy1leGNlcHRpb25zlIwgRXhjZXB0aW9ucyByYWlzZWQgZHVyaW5nIGxvZ2dpbmeUdJSMGWxvZ2dpbmctaW1wb3J0LXJlc29sdXRpb26UKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5odG1sI2xvZ2dpbmctaW1wb3J0LXJlc29sdXRpb26UjCZJbXBvcnQgcmVzb2x1dGlvbiBhbmQgY3VzdG9tIGltcG9ydGVyc5R0lIwNbG9naWNhbC1saW5lc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2xvZ2ljYWwtbGluZXOUjA1Mb2dpY2FsIGxpbmVzlHSUjBZsb2dpY2FsX29wZXJhbmRzX2xhYmVslChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVjaW1hbC5odG1sI2xvZ2ljYWwtb3BlcmFuZHMtbGFiZWyUjBBMb2dpY2FsIG9wZXJhbmRzlHSUjBRsb2dyZWNvcmQtYXR0cmlidXRlc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbCNsb2dyZWNvcmQtYXR0cmlidXRlc5SMFExvZ1JlY29yZCBhdHRyaWJ1dGVzlHSUjAtsb25nb2JqZWN0c5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9sb25nLmh0bWwjbG9uZ29iamVjdHOUjA9JbnRlZ2VyIE9iamVjdHOUdJSMFWxvd2VyLWxldmVsLWVtYmVkZGluZ5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZW1iZWRkaW5nLmh0bWwjbG93ZXItbGV2ZWwtZW1iZWRkaW5nlIwtQmV5b25kIFZlcnkgSGlnaCBMZXZlbCBFbWJlZGRpbmc6IEFuIG92ZXJ2aWV3lHSUjBNtYWMtcGFja2FnZS1tYW5hZ2VylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL21hYy5odG1sI21hYy1wYWNrYWdlLW1hbmFnZXKUjCVJbnN0YWxsaW5nIEFkZGl0aW9uYWwgUHl0aG9uIFBhY2thZ2VzlHSUjBFtYWR2aXNlLWNvbnN0YW50c5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tYXAuaHRtbCNtYWR2aXNlLWNvbnN0YW50c5SMEE1BRFZfKiBDb25zdGFudHOUdJSMDW1hZ2ljLW1ldGhvZHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjbWFnaWMtbWV0aG9kc5SMFU1vY2tpbmcgTWFnaWMgTWV0aG9kc5R0lIwNbWFpbGJveC1iYWJ5bJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LWJhYnlslIwFQmFieWyUdJSMFG1haWxib3gtYmFieWxtZXNzYWdllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtYmFieWxtZXNzYWdllIwMQmFieWxNZXNzYWdllHSUjBBtYWlsYm94LWV4YW1wbGVzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtZXhhbXBsZXOUjAhFeGFtcGxlc5R0lIwPbWFpbGJveC1tYWlsZGlylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbWFpbGRpcpSMB01haWxkaXKUdJSMFm1haWxib3gtbWFpbGRpcm1lc3NhZ2WUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tYWlsZGlybWVzc2FnZZSMDk1haWxkaXJNZXNzYWdllHSUjAxtYWlsYm94LW1ib3iUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1tYm94lIwEbWJveJR0lIwTbWFpbGJveC1tYm94bWVzc2FnZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LW1ib3htZXNzYWdllIwLbWJveE1lc3NhZ2WUdJSMF21haWxib3gtbWVzc2FnZS1vYmplY3RzlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbWVzc2FnZS1vYmplY3RzlIwPTWVzc2FnZSBvYmplY3RzlHSUjAptYWlsYm94LW1olChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbWiUjAJNSJR0lIwRbWFpbGJveC1taG1lc3NhZ2WUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYWlsYm94Lmh0bWwjbWFpbGJveC1taG1lc3NhZ2WUjAlNSE1lc3NhZ2WUdJSMDG1haWxib3gtbW1kZpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbCNtYWlsYm94LW1tZGaUjARNTURGlHSUjBNtYWlsYm94LW1tZGZtZXNzYWdllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtbW1kZm1lc3NhZ2WUjAtNTURGTWVzc2FnZZR0lIwPbWFpbGJveC1vYmplY3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGJveC5odG1sI21haWxib3gtb2JqZWN0c5SMD01haWxib3ggb2JqZWN0c5R0lIwJbWFpbl9zcGVjlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9pbXBvcnQuaHRtbCNtYWluLXNwZWOUjBFfX21haW5fXy5fX3NwZWNfX5R0lIwIbWFuaWZlc3SUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NvdXJjZWRpc3QuaHRtbCNtYW5pZmVzdJSMIlNwZWNpZnlpbmcgdGhlIGZpbGVzIHRvIGRpc3RyaWJ1dGWUdJSMEG1hbmlmZXN0LW9wdGlvbnOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NvdXJjZWRpc3QuaHRtbCNtYW5pZmVzdC1vcHRpb25zlIwYTWFuaWZlc3QtcmVsYXRlZCBvcHRpb25zlHSUjAptYXBvYmplY3RzlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbmNyZXRlLmh0bWwjbWFwb2JqZWN0c5SMEUNvbnRhaW5lciBPYmplY3RzlHSUjAdtYXBwaW5nlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21hcHBpbmcuaHRtbCNtYXBwaW5nlIwQTWFwcGluZyBQcm90b2NvbJR0lIwPbWFwcGluZy1zdHJ1Y3RzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNtYXBwaW5nLXN0cnVjdHOUjBlNYXBwaW5nIE9iamVjdCBTdHJ1Y3R1cmVzlHSUjAZtYXJrdXCUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXJrdXAuaHRtbCNtYXJrdXCUjCJTdHJ1Y3R1cmVkIE1hcmt1cCBQcm9jZXNzaW5nIFRvb2xzlHSUjBFtYXJzaGFsbGluZy11dGlsc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXJzaGFsLmh0bWwjbWFyc2hhbGxpbmctdXRpbHOUjBhEYXRhIG1hcnNoYWxsaW5nIHN1cHBvcnSUdJSMDW1hdGNoLW9iamVjdHOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI21hdGNoLW9iamVjdHOUjA1NYXRjaCBPYmplY3RzlHSUjAhtYXgtcGF0aJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWwjbWF4LXBhdGiUjCBSZW1vdmluZyB0aGUgTUFYX1BBVEggTGltaXRhdGlvbpR0lIwXbWVtYmVyc2hpcC10ZXN0LWRldGFpbHOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjbWVtYmVyc2hpcC10ZXN0LWRldGFpbHOUjBpNZW1iZXJzaGlwIHRlc3Qgb3BlcmF0aW9uc5R0lIwGbWVtb3J5lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI21lbW9yeZSMEU1lbW9yeSBNYW5hZ2VtZW50lHSUjA5tZW1vcnktaGFuZGxlcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNtZW1vcnktaGFuZGxlcpSMDU1lbW9yeUhhbmRsZXKUdJSMDm1lbW9yeWV4YW1wbGVzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeS5odG1sI21lbW9yeWV4YW1wbGVzlIwIRXhhbXBsZXOUdJSMD21lbW9yeWludGVyZmFjZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNtZW1vcnlpbnRlcmZhY2WUjBBNZW1vcnkgSW50ZXJmYWNllHSUjA5tZW1vcnlvdmVydmlld5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbCNtZW1vcnlvdmVydmlld5SMCE92ZXJ2aWV3lHSUjBJtZW1vcnl2aWV3LW9iamVjdHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5dmlldy5odG1sI21lbW9yeXZpZXctb2JqZWN0c5RqDY8AAHSUjAltZXRhLWRhdGGUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NldHVwc2NyaXB0Lmh0bWwjbWV0YS1kYXRhlIwUQWRkaXRpb25hbCBtZXRhLWRhdGGUdJSMC21ldGFjbGFzc2VzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNtZXRhY2xhc3Nlc5SMC01ldGFjbGFzc2VzlHSUjAhtZXRhZGF0YZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcG9ydGxpYi5tZXRhZGF0YS5odG1sI21ldGFkYXRhlIwVRGlzdHJpYnV0aW9uIG1ldGFkYXRhlHSUjA5tZXRob2Qtb2JqZWN0c5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZXRob2QuaHRtbCNtZXRob2Qtb2JqZWN0c5SMDk1ldGhvZCBPYmplY3RzlHSUjAttZXRob2R0YWJsZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjbWV0aG9kdGFibGWUjDdUaGUgTW9kdWxl4oCZcyBNZXRob2QgVGFibGUgYW5kIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9ulHSUjBFtaW1ldHlwZXMtb2JqZWN0c5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21pbWV0eXBlcy5odG1sI21pbWV0eXBlcy1vYmplY3RzlIwRTWltZVR5cGVzIE9iamVjdHOUdJSMD21pbmlkb20tYW5kLWRvbZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI21pbmlkb20tYW5kLWRvbZSMHG1pbmlkb20gYW5kIHRoZSBET00gc3RhbmRhcmSUdJSMD21pbmlkb20tb2JqZWN0c5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1sI21pbmlkb20tb2JqZWN0c5SMC0RPTSBPYmplY3RzlHSUjARtaXNjlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWlzYy5odG1sI21pc2OUjBZNaXNjZWxsYW5lb3VzIFNlcnZpY2VzlHSUjBRtaXhlci1kZXZpY2Utb2JqZWN0c5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWwjbWl4ZXItZGV2aWNlLW9iamVjdHOUjBRNaXhlciBEZXZpY2UgT2JqZWN0c5R0lIwObWtkaXJfbW9kZWJpdHOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI21rZGlyLW1vZGViaXRzlGoNjwAAdJSMBm1tZWRpYZQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21tLmh0bWwjbW1lZGlhlIwTTXVsdGltZWRpYSBTZXJ2aWNlc5R0lIwIbW9kaW5kZXiUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcHktbW9kaW5kZXguaHRtbJSMDE1vZHVsZSBJbmRleJR0lIwNbW9kdWxlLWN0eXBlc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjUuaHRtbCNtb2R1bGUtY3R5cGVzlIwSVGhlIGN0eXBlcyBwYWNrYWdllHSUjAxtb2R1bGUtZXRyZWWUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi41Lmh0bWwjbW9kdWxlLWV0cmVllIwXVGhlIEVsZW1lbnRUcmVlIHBhY2thZ2WUdJSMDm1vZHVsZS1oYXNobGlilChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI21vZHVsZS1oYXNobGlilIwTVGhlIGhhc2hsaWIgcGFja2FnZZR0lIwNbW9kdWxlLXNxbGl0ZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjUuaHRtbCNtb2R1bGUtc3FsaXRllIwTVGhlIHNxbGl0ZTMgcGFja2FnZZR0lIwObW9kdWxlLXdzZ2lyZWaUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi41Lmh0bWwjbW9kdWxlLXdzZ2lyZWaUjBNUaGUgd3NnaXJlZiBwYWNrYWdllHSUjBRtb2R1bGVmaW5kZXItZXhhbXBsZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21vZHVsZWZpbmRlci5odG1sI21vZHVsZWZpbmRlci1leGFtcGxllIwdRXhhbXBsZSB1c2FnZSBvZiBNb2R1bGVGaW5kZXKUdJSMDW1vZHVsZW9iamVjdHOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbW9kdWxlLmh0bWwjbW9kdWxlb2JqZWN0c5SMDk1vZHVsZSBPYmplY3RzlHSUjAdtb2R1bGVzlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW9kdWxlcy5odG1sI21vZHVsZXOUjBFJbXBvcnRpbmcgTW9kdWxlc5R0lIwTbW9yZS1tZXRhY2hhcmFjdGVyc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9yZWdleC5odG1sI21vcmUtbWV0YWNoYXJhY3RlcnOUjBNNb3JlIE1ldGFjaGFyYWN0ZXJzlHSUjA5tb3JzZWwtb2JqZWN0c5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llcy5odG1sI21vcnNlbC1vYmplY3RzlIwOTW9yc2VsIE9iamVjdHOUdJSMDW1zaS1kaXJlY3RvcnmUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2ktZGlyZWN0b3J5lIwRRGlyZWN0b3J5IE9iamVjdHOUdJSMCm1zaS1lcnJvcnOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNtc2ktZXJyb3JzlIwGRXJyb3JzlHSUjAdtc2ktZ3VplChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpLWd1aZSMC0dVSSBjbGFzc2VzlHSUjAptc2ktdGFibGVzlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjbXNpLXRhYmxlc5SMElByZWNvbXB1dGVkIHRhYmxlc5R0lIwObXN2Y3J0LWNvbnNvbGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQtY29uc29sZZSMC0NvbnNvbGUgSS9PlHSUjAxtc3ZjcnQtZmlsZXOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbCNtc3ZjcnQtZmlsZXOUjA9GaWxlIE9wZXJhdGlvbnOUdJSMDG1zdmNydC1vdGhlcpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zdmNydC5odG1sI21zdmNydC1vdGhlcpSMD090aGVyIEZ1bmN0aW9uc5R0lIwXbXN3aW4tc3BlY2lmaWMtc2VydmljZXOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5kb3dzLmh0bWwjbXN3aW4tc3BlY2lmaWMtc2VydmljZXOUjBxNUyBXaW5kb3dzIFNwZWNpZmljIFNlcnZpY2VzlHSUjBptdWx0aS1waGFzZS1pbml0aWFsaXphdGlvbpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbCNtdWx0aS1waGFzZS1pbml0aWFsaXphdGlvbpSMGk11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9ulHSUjBVtdWx0aXBsZS1kZXN0aW5hdGlvbnOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI211bHRpcGxlLWRlc3RpbmF0aW9uc5SMIExvZ2dpbmcgdG8gbXVsdGlwbGUgZGVzdGluYXRpb25zlHSUjBJtdWx0aXBsZS1wcm9jZXNzZXOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI211bHRpcGxlLXByb2Nlc3Nlc5SMMExvZ2dpbmcgdG8gYSBzaW5nbGUgZmlsZSBmcm9tIG11bHRpcGxlIHByb2Nlc3Nlc5R0lIwfbXVsdGlwcm9jZXNzaW5nLWFkZHJlc3MtZm9ybWF0c5QoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1hZGRyZXNzLWZvcm1hdHOUjA9BZGRyZXNzIEZvcm1hdHOUdJSMGW11bHRpcHJvY2Vzc2luZy1hdXRoLWtleXOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbCNtdWx0aXByb2Nlc3NpbmctYXV0aC1rZXlzlIwTQXV0aGVudGljYXRpb24ga2V5c5R0lIwYbXVsdGlwcm9jZXNzaW5nLWV4YW1wbGVzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLWV4YW1wbGVzlIwIRXhhbXBsZXOUdJSMIW11bHRpcHJvY2Vzc2luZy1saXN0ZW5lcnMtY2xpZW50c5QoagqPAABqC48AAIxYaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1saXN0ZW5lcnMtY2xpZW50c5SMFUxpc3RlbmVycyBhbmQgQ2xpZW50c5R0lIwYbXVsdGlwcm9jZXNzaW5nLW1hbmFnZXJzlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLW1hbmFnZXJzlIwITWFuYWdlcnOUdJSMG211bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ5SMFlByb2dyYW1taW5nIGd1aWRlbGluZXOUdJSMHW11bHRpcHJvY2Vzc2luZy1wcm94eV9vYmplY3RzlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLmh0bWwjbXVsdGlwcm9jZXNzaW5nLXByb3h5LW9iamVjdHOUjA1Qcm94eSBPYmplY3RzlHSUjB1tdWx0aXByb2Nlc3Npbmctc3RhcnQtbWV0aG9kc5QoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5odG1sI211bHRpcHJvY2Vzc2luZy1zdGFydC1tZXRob2RzlGoNjwAAdJSMCW5hbWVzcGFjZZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjbmFtZXNwYWNllIwUVGhlIE5hbWVzcGFjZSBvYmplY3SUdJSMBm5hbWluZ5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwuaHRtbCNuYW1pbmeUjBJOYW1pbmcgYW5kIGJpbmRpbmeUdJSMB25ldGRhdGGUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uZXRkYXRhLmh0bWwjbmV0ZGF0YZSMFkludGVybmV0IERhdGEgSGFuZGxpbmeUdJSMDW5ldHJjLW9iamVjdHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9uZXRyYy5odG1sI25ldHJjLW9iamVjdHOUjA1uZXRyYyBPYmplY3RzlHSUjA9uZXR3b3JrLWxvZ2dpbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI25ldHdvcmstbG9nZ2luZ5SMNVNlbmRpbmcgYW5kIHJlY2VpdmluZyBsb2dnaW5nIGV2ZW50cyBhY3Jvc3MgYSBuZXR3b3JrlHSUjBduZXctMjUtY29udGV4dC1tYW5hZ2Vyc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjUuaHRtbCNuZXctMjUtY29udGV4dC1tYW5hZ2Vyc5SMGFdyaXRpbmcgQ29udGV4dCBNYW5hZ2Vyc5R0lIwXbmV3LTI2LWNvbnRleHQtbWFuYWdlcnOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi42Lmh0bWwjbmV3LTI2LWNvbnRleHQtbWFuYWdlcnOUjBhXcml0aW5nIENvbnRleHQgTWFuYWdlcnOUdJSMEm5ldy0yNi1pbnRlcnByZXRlcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjYuaHRtbCNuZXctMjYtaW50ZXJwcmV0ZXKUjBNJbnRlcnByZXRlciBDaGFuZ2VzlHSUjBJuZXctMjctaW50ZXJwcmV0ZXKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi43Lmh0bWwjbmV3LTI3LWludGVycHJldGVylIwTSW50ZXJwcmV0ZXIgQ2hhbmdlc5R0lIwLbmV3LWRlY2ltYWyUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy4zLmh0bWwjbmV3LWRlY2ltYWyUjAdkZWNpbWFslHSUjAluZXctZW1haWyUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy4zLmh0bWwjbmV3LWVtYWlslIwFZW1haWyUdJSMFW5ldy1tb2R1bGUtY29udGV4dGxpYpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjYuaHRtbCNuZXctbW9kdWxlLWNvbnRleHRsaWKUjBVUaGUgY29udGV4dGxpYiBtb2R1bGWUdJSMEG5ldy10eXBlcy10b3BpY3OUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL25ld3R5cGVzLmh0bWwjbmV3LXR5cGVzLXRvcGljc5SMKURlZmluaW5nIEV4dGVuc2lvbiBUeXBlczogQXNzb3J0ZWQgVG9waWNzlHSUjAhuZXd0eXBlc5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmppbXBsLmh0bWwjbmV3dHlwZXOUjB1PYmplY3QgSW1wbGVtZW50YXRpb24gU3VwcG9ydJR0lIwMbm50cC1vYmplY3RzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbm50cGxpYi5odG1sI25udHAtb2JqZWN0c5SMDE5OVFAgT2JqZWN0c5R0lIwKbm9uZW9iamVjdJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ub25lLmh0bWwjbm9uZW9iamVjdJSMD1RoZSBOb25lIE9iamVjdJR0lIwIbm9ubG9jYWyUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI25vbmxvY2FslIwWVGhlIG5vbmxvY2FsIHN0YXRlbWVudJR0lIwDbm90lChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI25vdJSMEkJvb2xlYW4gb3BlcmF0aW9uc5R0lIwGbm90IGlulChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI25vdC1pbpSMGk1lbWJlcnNoaXAgdGVzdCBvcGVyYXRpb25zlHSUjAhub3RhdGlvbpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLmh0bWwjbm90YXRpb26UjAhOb3RhdGlvbpR0lIwTbnQtZXZlbnRsb2ctaGFuZGxlcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNudC1ldmVudGxvZy1oYW5kbGVylIwRTlRFdmVudExvZ0hhbmRsZXKUdJSMDG51bGwtaGFuZGxlcpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNudWxsLWhhbmRsZXKUjAtOdWxsSGFuZGxlcpR0lIwMbnVsbHBvaW50ZXJzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNudWxscG9pbnRlcnOUjA1OVUxMIFBvaW50ZXJzlHSUjAZudW1iZXKUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbnVtYmVyLmh0bWwjbnVtYmVylIwPTnVtYmVyIFByb3RvY29slHSUjA5udW1iZXItc3RydWN0c5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjbnVtYmVyLXN0cnVjdHOUjBhOdW1iZXIgT2JqZWN0IFN0cnVjdHVyZXOUdJSMB251bWJlcnOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNudW1iZXJzlIwQTnVtZXJpYyBsaXRlcmFsc5R0lIwHbnVtZXJpY5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L251bWVyaWMuaHRtbCNudW1lcmljlIwgTnVtZXJpYyBhbmQgTWF0aGVtYXRpY2FsIE1vZHVsZXOUdJSMDG51bWVyaWMtaGFzaJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjbnVtZXJpYy1oYXNolIwYSGFzaGluZyBvZiBudW1lcmljIHR5cGVzlHSUjA1udW1lcmljLXR5cGVzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNudW1lcmljLXR5cGVzlIwXRW11bGF0aW5nIG51bWVyaWMgdHlwZXOUdJSMDm51bWVyaWNvYmplY3RzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvbmNyZXRlLmh0bWwjbnVtZXJpY29iamVjdHOUjA9OdW1lcmljIE9iamVjdHOUdJSMC29fYW1wZXJzYW5klChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FyZy5odG1sI28tYW1wZXJzYW5klGoNjwAAdJSMBm9iamVjdJQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9vYmplY3QuaHRtbCNvYmplY3SUjA9PYmplY3QgUHJvdG9jb2yUdJSMB29iamVjdHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI29iamVjdHOUjBlPYmplY3RzLCB2YWx1ZXMgYW5kIHR5cGVzlHSUjBVvbGQtc3RyaW5nLWZvcm1hdHRpbmeUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI29sZC1zdHJpbmctZm9ybWF0dGluZ5SMHnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZ5R0lIwSb3Bjb2RlX2NvbGxlY3Rpb25zlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLWNvbGxlY3Rpb25zlIwST3Bjb2RlIGNvbGxlY3Rpb25zlHSUjBZvcGVuLW5ld2xpbmUtcGFyYW1ldGVylChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjb3Blbi1uZXdsaW5lLXBhcmFtZXRlcpRqDY8AAHSUjBdvcGVuZXItZGlyZWN0b3Itb2JqZWN0c5QoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjb3BlbmVyLWRpcmVjdG9yLW9iamVjdHOUjBZPcGVuZXJEaXJlY3RvciBPYmplY3RzlHSUjAxvcGVyYXRvci1tYXCUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1sI29wZXJhdG9yLW1hcJSMHk1hcHBpbmcgT3BlcmF0b3JzIHRvIEZ1bmN0aW9uc5R0lIwQb3BlcmF0b3Itc3VtbWFyeZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNvcGVyYXRvci1zdW1tYXJ5lIwTT3BlcmF0b3IgcHJlY2VkZW5jZZR0lIwJb3BlcmF0b3JzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjb3BlcmF0b3JzlIwJT3BlcmF0b3JzlHSUjBtvcHRpb24tZmxhZ3MtYW5kLWRpcmVjdGl2ZXOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjb3B0aW9uLWZsYWdzLWFuZC1kaXJlY3RpdmVzlIwMT3B0aW9uIEZsYWdzlHSUjBtvcHRwYXJzZS1hZGRpbmctbmV3LWFjdGlvbnOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWFkZGluZy1uZXctYWN0aW9uc5SMEkFkZGluZyBuZXcgYWN0aW9uc5R0lIwZb3B0cGFyc2UtYWRkaW5nLW5ldy10eXBlc5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtYWRkaW5nLW5ldy10eXBlc5SMEEFkZGluZyBuZXcgdHlwZXOUdJSME29wdHBhcnNlLWJhY2tncm91bmSUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWJhY2tncm91bmSUjApCYWNrZ3JvdW5klHSUjBtvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTGUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNhbGxiYWNrLWV4YW1wbGUtMZSMJENhbGxiYWNrIGV4YW1wbGUgMTogdHJpdmlhbCBjYWxsYmFja5R0lIwbb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS0ylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTKUjCZDYWxsYmFjayBleGFtcGxlIDI6IGNoZWNrIG9wdGlvbiBvcmRlcpR0lIwbb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS0zlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTOUjDRDYWxsYmFjayBleGFtcGxlIDM6IGNoZWNrIG9wdGlvbiBvcmRlciAoZ2VuZXJhbGl6ZWQplHSUjBtvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTSUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNhbGxiYWNrLWV4YW1wbGUtNJSMLUNhbGxiYWNrIGV4YW1wbGUgNDogY2hlY2sgYXJiaXRyYXJ5IGNvbmRpdGlvbpR0lIwbb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS01lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTWUjCNDYWxsYmFjayBleGFtcGxlIDU6IGZpeGVkIGFyZ3VtZW50c5R0lIwbb3B0cGFyc2UtY2FsbGJhY2stZXhhbXBsZS02lChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1jYWxsYmFjay1leGFtcGxlLTaUjCZDYWxsYmFjayBleGFtcGxlIDY6IHZhcmlhYmxlIGFyZ3VtZW50c5R0lIwQb3B0cGFyc2UtY2xlYW51cJQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtY2xlYW51cJSMB0NsZWFudXCUdJSMIm9wdHBhcnNlLWNvbmZsaWN0cy1iZXR3ZWVuLW9wdGlvbnOUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNvbmZsaWN0cy1iZXR3ZWVuLW9wdGlvbnOUjBlDb25mbGljdHMgYmV0d2VlbiBvcHRpb25zlHSUjBhvcHRwYXJzZS1jcmVhdGluZy1wYXJzZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWNyZWF0aW5nLXBhcnNlcpSME0NyZWF0aW5nIHRoZSBwYXJzZXKUdJSMF29wdHBhcnNlLWRlZmF1bHQtdmFsdWVzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1kZWZhdWx0LXZhbHVlc5SMDkRlZmF1bHQgdmFsdWVzlHSUjCFvcHRwYXJzZS1kZWZpbmluZy1jYWxsYmFjay1vcHRpb26UKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWRlZmluaW5nLWNhbGxiYWNrLW9wdGlvbpSMGkRlZmluaW5nIGEgY2FsbGJhY2sgb3B0aW9ulHSUjBlvcHRwYXJzZS1kZWZpbmluZy1vcHRpb25zlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1kZWZpbmluZy1vcHRpb25zlIwQRGVmaW5pbmcgb3B0aW9uc5R0lIwbb3B0cGFyc2UtZXh0ZW5kaW5nLW9wdHBhcnNllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1leHRlbmRpbmctb3B0cGFyc2WUjBJFeHRlbmRpbmcgb3B0cGFyc2WUdJSMGG9wdHBhcnNlLWdlbmVyYXRpbmctaGVscJQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtZ2VuZXJhdGluZy1oZWxwlIwPR2VuZXJhdGluZyBoZWxwlHSUjCFvcHRwYXJzZS1oYW5kbGluZy1ib29sZWFuLW9wdGlvbnOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLWhhbmRsaW5nLWJvb2xlYW4tb3B0aW9uc5SMH0hhbmRsaW5nIGJvb2xlYW4gKGZsYWcpIG9wdGlvbnOUdJSMHW9wdHBhcnNlLWhvdy1jYWxsYmFja3MtY2FsbGVklChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1ob3ctY2FsbGJhY2tzLWNhbGxlZJSMGEhvdyBjYWxsYmFja3MgYXJlIGNhbGxlZJR0lIwkb3B0cGFyc2UtaG93LW9wdHBhcnNlLWhhbmRsZXMtZXJyb3JzlChqCo8AAGoLjwAAjFRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1ob3ctb3B0cGFyc2UtaGFuZGxlcy1lcnJvcnOUjBtIb3cgb3B0cGFyc2UgaGFuZGxlcyBlcnJvcnOUdJSMGm9wdHBhcnNlLW9wdGlvbi1hdHRyaWJ1dGVzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1vcHRpb24tYXR0cmlidXRlc5SMEU9wdGlvbiBhdHRyaWJ1dGVzlHSUjBlvcHRwYXJzZS1vcHRpb24tY2FsbGJhY2tzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1vcHRpb24tY2FsbGJhY2tzlIwQT3B0aW9uIENhbGxiYWNrc5R0lIwWb3B0cGFyc2Utb3RoZXItYWN0aW9uc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2Utb3RoZXItYWN0aW9uc5SMDU90aGVyIGFjdGlvbnOUdJSMFm9wdHBhcnNlLW90aGVyLW1ldGhvZHOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLW90aGVyLW1ldGhvZHOUjA1PdGhlciBtZXRob2RzlHSUjBpvcHRwYXJzZS1wYXJzaW5nLWFyZ3VtZW50c5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtcGFyc2luZy1hcmd1bWVudHOUjBFQYXJzaW5nIGFyZ3VtZW50c5R0lIwab3B0cGFyc2UtcG9wdWxhdGluZy1wYXJzZXKUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXBvcHVsYXRpbmctcGFyc2VylIwVUG9wdWxhdGluZyB0aGUgcGFyc2VylHSUjCBvcHRwYXJzZS1wcmludGluZy12ZXJzaW9uLXN0cmluZ5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtcHJpbnRpbmctdmVyc2lvbi1zdHJpbmeUjBlQcmludGluZyBhIHZlcnNpb24gc3RyaW5nlHSUjCBvcHRwYXJzZS1wdXR0aW5nLWl0LWFsbC10b2dldGhlcpQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtcHV0dGluZy1pdC1hbGwtdG9nZXRoZXKUjBdQdXR0aW5nIGl0IGFsbCB0b2dldGhlcpR0lIwsb3B0cGFyc2UtcXVlcnlpbmctbWFuaXB1bGF0aW5nLW9wdGlvbi1wYXJzZXKUKGoKjwAAaguPAACMXGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXF1ZXJ5aW5nLW1hbmlwdWxhdGluZy1vcHRpb24tcGFyc2VylIwsUXVlcnlpbmcgYW5kIG1hbmlwdWxhdGluZyB5b3VyIG9wdGlvbiBwYXJzZXKUdJSMI29wdHBhcnNlLXJhaXNpbmctZXJyb3JzLWluLWNhbGxiYWNrlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1yYWlzaW5nLWVycm9ycy1pbi1jYWxsYmFja5SMHFJhaXNpbmcgZXJyb3JzIGluIGEgY2FsbGJhY2uUdJSMGG9wdHBhcnNlLXJlZmVyZW5jZS1ndWlkZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2UtcmVmZXJlbmNlLWd1aWRllIwPUmVmZXJlbmNlIEd1aWRllHSUjCBvcHRwYXJzZS1zdGFuZGFyZC1vcHRpb24tYWN0aW9uc5QoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2Utc3RhbmRhcmQtb3B0aW9uLWFjdGlvbnOUjBdTdGFuZGFyZCBvcHRpb24gYWN0aW9uc5R0lIweb3B0cGFyc2Utc3RhbmRhcmQtb3B0aW9uLXR5cGVzlChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS1zdGFuZGFyZC1vcHRpb24tdHlwZXOUjBVTdGFuZGFyZCBvcHRpb24gdHlwZXOUdJSMFW9wdHBhcnNlLXN0b3JlLWFjdGlvbpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2Utc3RvcmUtYWN0aW9ulIwQVGhlIHN0b3JlIGFjdGlvbpR0lIwUb3B0cGFyc2UtdGVybWlub2xvZ3mUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXRlcm1pbm9sb2d5lIwLVGVybWlub2xvZ3mUdJSMEW9wdHBhcnNlLXR1dG9yaWFslChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS10dXRvcmlhbJSMCFR1dG9yaWFslHSUjCVvcHRwYXJzZS11bmRlcnN0YW5kaW5nLW9wdGlvbi1hY3Rpb25zlChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3B0cGFyc2UuaHRtbCNvcHRwYXJzZS11bmRlcnN0YW5kaW5nLW9wdGlvbi1hY3Rpb25zlIwcVW5kZXJzdGFuZGluZyBvcHRpb24gYWN0aW9uc5R0lIwZb3B0cGFyc2Utd2hhdC1vcHRpb25zLWZvcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29wdHBhcnNlLmh0bWwjb3B0cGFyc2Utd2hhdC1vcHRpb25zLWZvcpSMFVdoYXQgYXJlIG9wdGlvbnMgZm9yP5R0lIwmb3B0cGFyc2Utd2hhdC1wb3NpdGlvbmFsLWFyZ3VtZW50cy1mb3KUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1sI29wdHBhcnNlLXdoYXQtcG9zaXRpb25hbC1hcmd1bWVudHMtZm9ylIwiV2hhdCBhcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgZm9yP5R0lIwEb3B0c5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjUuaHRtbCNvcHRzlIwNT3B0aW1pemF0aW9uc5R0lIwCb3KUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjb3KUjBJCb29sZWFuIG9wZXJhdGlvbnOUdJSMEG9yZ2FuaXppbmctdGVzdHOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI29yZ2FuaXppbmctdGVzdHOUjBRPcmdhbml6aW5nIHRlc3QgY29kZZR0lIwCb3OUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjb3OUjBpPcGVyYXRpbmcgU3lzdGVtIFV0aWxpdGllc5R0lIwJb3MtZmQtb3BzlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy1mZC1vcHOUjBpGaWxlIERlc2NyaXB0b3IgT3BlcmF0aW9uc5R0lIwLb3MtZmlsZS1kaXKUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLWZpbGUtZGlylIwVRmlsZXMgYW5kIERpcmVjdG9yaWVzlHSUjAxvcy1maWxlbmFtZXOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLWZpbGVuYW1lc5SMPUZpbGUgTmFtZXMsIENvbW1hbmQgTGluZSBBcmd1bWVudHMsIGFuZCBFbnZpcm9ubWVudCBWYXJpYWJsZXOUdJSMDW9zLW5ld3N0cmVhbXOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1sI29zLW5ld3N0cmVhbXOUjBRGaWxlIE9iamVjdCBDcmVhdGlvbpR0lIwHb3MtcGF0aJQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MtcGF0aJSMIE1pc2NlbGxhbmVvdXMgU3lzdGVtIEluZm9ybWF0aW9ulHSUjApvcy1wcm9jZXNzlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCNvcy1wcm9jZXNzlIwSUHJvY2VzcyBNYW5hZ2VtZW50lHSUjAtvcy1wcm9jaW5mb5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjb3MtcHJvY2luZm+UjBJQcm9jZXNzIFBhcmFtZXRlcnOUdJSMF29zc2F1ZGlvLWRldmljZS1vYmplY3RzlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3NzYXVkaW9kZXYuaHRtbCNvc3NhdWRpby1kZXZpY2Utb2JqZWN0c5SMFEF1ZGlvIERldmljZSBPYmplY3RzlHSUjA9vc3gtZ3VpLXNjcmlwdHOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvbWFjLmh0bWwjb3N4LWd1aS1zY3JpcHRzlIwaUnVubmluZyBzY3JpcHRzIHdpdGggYSBHVUmUdJSMEm90aGVyLWd1aS1wYWNrYWdlc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L290aGVyZ3VpLmh0bWwjb3RoZXItZ3VpLXBhY2thZ2VzlIwnT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzlHSUjBZvdGhlci1pbXByb3ZlbWVudHMtMy40lChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNC5odG1sI290aGVyLWltcHJvdmVtZW50cy0zLTSUjBJPdGhlciBJbXByb3ZlbWVudHOUdJSMCm90aGVyLWxhbmeUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi41Lmh0bWwjb3RoZXItbGFuZ5SMFk90aGVyIExhbmd1YWdlIENoYW5nZXOUdJSMF290aGVyLW1ldGhvZHMtYW5kLWF0dHJzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNvdGhlci1tZXRob2RzLWFuZC1hdHRyc5RqDY8AAHSUjAxvdGhlci10b2tlbnOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNvdGhlci10b2tlbnOUjAxPdGhlciB0b2tlbnOUdJSMDG90aGVyb2JqZWN0c5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb25jcmV0ZS5odG1sI290aGVyb2JqZWN0c5SMEEZ1bmN0aW9uIE9iamVjdHOUdJSMDm93bmVyc2hpcHJ1bGVzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNvd25lcnNoaXBydWxlc5SMD093bmVyc2hpcCBSdWxlc5R0lIwNcGFja2FnZS1pbmRleJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvcGFja2FnZWluZGV4Lmh0bWwjcGFja2FnZS1pbmRleJSMH1RoZSBQeXRob24gUGFja2FnZSBJbmRleCAoUHlQSSmUdJSMEnBhY2thZ2UtcGF0aC1ydWxlc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWwjcGFja2FnZS1wYXRoLXJ1bGVzlIwPbW9kdWxlLl9fcGF0aF9flHSUjA1wYXJlbnRoZXNpemVklChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3BhcmVudGhlc2l6ZWSUjBNQYXJlbnRoZXNpemVkIGZvcm1zlHSUjApwYXJzZXR1cGxllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNwYXJzZXR1cGxllIwsRXh0cmFjdGluZyBQYXJhbWV0ZXJzIGluIEV4dGVuc2lvbiBGdW5jdGlvbnOUdJSMFXBhcnNldHVwbGVhbmRrZXl3b3Jkc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjcGFyc2V0dXBsZWFuZGtleXdvcmRzlIwqS2V5d29yZCBQYXJhbWV0ZXJzIGZvciBFeHRlbnNpb24gRnVuY3Rpb25zlHSUjBtwYXJzaW5nLWFzY2lpLWVuY29kZWQtYnl0ZXOUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCNwYXJzaW5nLWFzY2lpLWVuY29kZWQtYnl0ZXOUjBtQYXJzaW5nIEFTQ0lJIEVuY29kZWQgQnl0ZXOUdJSMD3BhcnRpYWwtb2JqZWN0c5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0b29scy5odG1sI3BhcnRpYWwtb2JqZWN0c5SMD3BhcnRpYWwgT2JqZWN0c5R0lIwEcGFzc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjcGFzc5SMElRoZSBwYXNzIHN0YXRlbWVudJR0lIwOcGF0Y2gtYnVpbHRpbnOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjcGF0Y2gtYnVpbHRpbnOUjA5wYXRjaCBidWlsdGluc5R0lIwMcGF0aC1vYmplY3RzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3BhdGgtb2JqZWN0c5SMDFBhdGggT2JqZWN0c5R0lIwHcGF0aF9mZJQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zLmh0bWwjcGF0aC1mZJRqDY8AAHSUjAhwZXAtMDM0M5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjYuaHRtbCNwZXAtMDM0M5SMIVBFUCAzNDM6IFRoZSDigJh3aXRo4oCZIHN0YXRlbWVudJR0lIwIcGVwLTAzNjaUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTAzNjaUjDVQRVAgMzY2OiBFeHBsaWNpdCBSZWxhdGl2ZSBJbXBvcnRzIEZyb20gYSBNYWluIE1vZHVsZZR0lIwIcGVwLTAzNzCUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTAzNzCUjClQRVAgMzcwOiBQZXItdXNlciBzaXRlLXBhY2thZ2VzIERpcmVjdG9yeZR0lIwIcGVwLTAzNzGUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTAzNzGUjCRQRVAgMzcxOiBUaGUgbXVsdGlwcm9jZXNzaW5nIFBhY2thZ2WUdJSMCHBlcC0wMzcylChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNy5odG1sI3BlcC0wMzcylIw0UEVQIDM3MjogQWRkaW5nIGFuIE9yZGVyZWQgRGljdGlvbmFyeSB0byBjb2xsZWN0aW9uc5R0lIwIcGVwLTAzNziUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi43Lmh0bWwjcGVwLTAzNziUjDFQRVAgMzc4OiBGb3JtYXQgU3BlY2lmaWVyIGZvciBUaG91c2FuZHMgU2VwYXJhdG9ylHSUjAdwZXAtMzA4lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMDiUjCBQRVAgMzA4OiBDb25kaXRpb25hbCBFeHByZXNzaW9uc5R0lIwHcGVwLTMwOZQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzA5lIwlUEVQIDMwOTogUGFydGlhbCBGdW5jdGlvbiBBcHBsaWNhdGlvbpR0lIwIcGVwLTMxMDGUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxMDGUjCRQRVAgMzEwMTogQWR2YW5jZWQgU3RyaW5nIEZvcm1hdHRpbmeUdJSMCHBlcC0zMTA1lChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNi5odG1sI3BlcC0zMTA1lIwdUEVQIDMxMDU6IHByaW50IEFzIGEgRnVuY3Rpb26UdJSMCHBlcC0zMTEwlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNi5odG1sI3BlcC0zMTEwlIwkUEVQIDMxMTA6IEV4Y2VwdGlvbi1IYW5kbGluZyBDaGFuZ2VzlHSUjAhwZXAtMzExMpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzExMpSMF1BFUCAzMTEyOiBCeXRlIExpdGVyYWxzlHSUjAhwZXAtMzExNpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzExNpSMGVBFUCAzMTE2OiBOZXcgSS9PIExpYnJhcnmUdJSMCHBlcC0zMTE4lChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNi5odG1sI3BlcC0zMTE4lIwhUEVQIDMxMTg6IFJldmlzZWQgQnVmZmVyIFByb3RvY29slHSUjA9wZXAtMzExOC11cGRhdGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy4zLmh0bWwjcGVwLTMxMTgtdXBkYXRllIxJUEVQIDMxMTg6IE5ldyBtZW1vcnl2aWV3IGltcGxlbWVudGF0aW9uIGFuZCBidWZmZXIgcHJvdG9jb2wgZG9jdW1lbnRhdGlvbpR0lIwIcGVwLTMxMTmUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi42Lmh0bWwjcGVwLTMxMTmUjB9QRVAgMzExOTogQWJzdHJhY3QgQmFzZSBDbGFzc2VzlHSUjAhwZXAtMzEyN5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzEyN5SMLFBFUCAzMTI3OiBJbnRlZ2VyIExpdGVyYWwgU3VwcG9ydCBhbmQgU3ludGF4lHSUjAhwZXAtMzEyOZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjYuaHRtbCNwZXAtMzEyOZSMGlBFUCAzMTI5OiBDbGFzcyBEZWNvcmF0b3JzlHSUjAdwZXAtMzE0lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMTSUjDNQRVAgMzE0OiBNZXRhZGF0YSBmb3IgUHl0aG9uIFNvZnR3YXJlIFBhY2thZ2VzIHYxLjGUdJSMCHBlcC0zMTQxlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNi5odG1sI3BlcC0zMTQxlIwmUEVQIDMxNDE6IEEgVHlwZSBIaWVyYXJjaHkgZm9yIE51bWJlcnOUdJSMCHBlcC0zMTUxlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuMy5odG1sI3BlcC0zMTUxlIw1UEVQIDMxNTE6IFJld29ya2luZyB0aGUgT1MgYW5kIElPIGV4Y2VwdGlvbiBoaWVyYXJjaHmUdJSMB3BlcC0zMjiUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi41Lmh0bWwjcGVwLTMyOJSMJlBFUCAzMjg6IEFic29sdXRlIGFuZCBSZWxhdGl2ZSBJbXBvcnRzlHSUjAdwZXAtMzM4lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zMziUjCVQRVAgMzM4OiBFeGVjdXRpbmcgTW9kdWxlcyBhcyBTY3JpcHRzlHSUjAdwZXAtMzQxlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zNDGUjCNQRVAgMzQxOiBVbmlmaWVkIHRyeS9leGNlcHQvZmluYWxseZR0lIwHcGVwLTM0MpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzQylIwfUEVQIDM0MjogTmV3IEdlbmVyYXRvciBGZWF0dXJlc5R0lIwHcGVwLTM0M5QoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjUuaHRtbCNwZXAtMzQzlIwhUEVQIDM0MzogVGhlIOKAmHdpdGjigJkgc3RhdGVtZW50lHSUjAdwZXAtMzUylChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zNTKUjChQRVAgMzUyOiBFeGNlcHRpb25zIGFzIE5ldy1TdHlsZSBDbGFzc2VzlHSUjAdwZXAtMzUzlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zNTOUjChQRVAgMzUzOiBVc2luZyBzc2l6ZV90IGFzIHRoZSBpbmRleCB0eXBllHSUjAdwZXAtMzU3lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BlcC0zNTeUjCNQRVAgMzU3OiBUaGUg4oCYX19pbmRleF9f4oCZIG1ldGhvZJR0lIwHcGVwLTM4MJQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjMuaHRtbCNwZXAtMzgwlIwwUEVQIDM4MDogU3ludGF4IGZvciBEZWxlZ2F0aW5nIHRvIGEgU3ViZ2VuZXJhdG9ylHSUjAdwZXAtMzkzlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuMy5odG1sI3BlcC0zOTOUjCdQRVAgMzkzOiBGbGV4aWJsZSBTdHJpbmcgUmVwcmVzZW50YXRpb26UdJSMB3BlcC0zOTeUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy4zLmh0bWwjcGVwLTM5N5SMJFBFUCAzOTc6IFB5dGhvbiBMYXVuY2hlciBmb3IgV2luZG93c5R0lIwHcGVwLTQwNZQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjMuaHRtbCNwZXAtNDA1lIwdUEVQIDQwNTogVmlydHVhbCBFbnZpcm9ubWVudHOUdJSMB3BlcC00MTKUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy4zLmh0bWwjcGVwLTQxMpSMH1BFUCA0MTI6IEtleS1TaGFyaW5nIERpY3Rpb25hcnmUdJSMB3BlcC00NzaUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjcGVwLTQ3NpSMTVBFUCA0NzY6IEVuYWJsaW5nIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBieSBkZWZhdWx0IGZvciBzdGRsaWIgaHR0cCBjbGllbnRzlHSUjAtwZXJzaXN0ZW5jZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BlcnNpc3RlbmNlLmh0bWwjcGVyc2lzdGVuY2WUjBBEYXRhIFBlcnNpc3RlbmNllHSUjA5waHlzaWNhbC1saW5lc5QoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI3BoeXNpY2FsLWxpbmVzlIwOUGh5c2ljYWwgbGluZXOUdJSMD3BpY2tsZS1kaXNwYXRjaJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS1kaXNwYXRjaJSMD0Rpc3BhdGNoIFRhYmxlc5R0lIwOcGlja2xlLWV4YW1wbGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUtZXhhbXBsZZSMCEV4YW1wbGVzlHSUjAtwaWNrbGUtaW5zdJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1sI3BpY2tsZS1pbnN0lIwYUGlja2xpbmcgQ2xhc3MgSW5zdGFuY2VzlHSUjApwaWNrbGUtb29ilChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLW9vYpSME091dC1vZi1iYW5kIEJ1ZmZlcnOUdJSMEXBpY2tsZS1wZXJzaXN0ZW50lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLXBlcnNpc3RlbnSUjB9QZXJzaXN0ZW5jZSBvZiBFeHRlcm5hbCBPYmplY3RzlHSUjBBwaWNrbGUtcGlja2xhYmxllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcGlja2xlLXBpY2tsYWJsZZSMIldoYXQgY2FuIGJlIHBpY2tsZWQgYW5kIHVucGlja2xlZD+UdJSMEHBpY2tsZS1wcm90b2NvbHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUtcHJvdG9jb2xzlIwSRGF0YSBzdHJlYW0gZm9ybWF0lHSUjA9waWNrbGUtcmVzdHJpY3SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUtcmVzdHJpY3SUjBNSZXN0cmljdGluZyBHbG9iYWxzlHSUjAxwaWNrbGUtc3RhdGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGUuaHRtbCNwaWNrbGUtc3RhdGWUjBlIYW5kbGluZyBTdGF0ZWZ1bCBPYmplY3RzlHSUjAxwb2xsLW9iamVjdHOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbCNwb2xsLW9iamVjdHOUjA9Qb2xsaW5nIE9iamVjdHOUdJSMDHBvcDMtZXhhbXBsZZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1sI3BvcDMtZXhhbXBsZZSMDFBPUDMgRXhhbXBsZZR0lIwMcG9wMy1vYmplY3RzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcG9wbGliLmh0bWwjcG9wMy1vYmplY3RzlIwMUE9QMyBPYmplY3RzlHSUjAdwb3J0aW5nlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BvcnRpbmeUjBVQb3J0aW5nIHRvIFB5dGhvbiAyLjWUdJSMFHBvcnRpbmctdG8tcHl0aG9uLTM3lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNy5odG1sI3BvcnRpbmctdG8tcHl0aG9uLTM3lIwVUG9ydGluZyB0byBQeXRob24gMy43lHSUjBFwb3J0aW5ncHl0aG9uY29kZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjMuaHRtbCNwb3J0aW5ncHl0aG9uY29kZZSME1BvcnRpbmcgUHl0aG9uIGNvZGWUdJSMBXBvcnRzlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNS5odG1sI3BvcnRzlIwVUG9ydC1TcGVjaWZpYyBDaGFuZ2VzlHSUjBlwb3NpdGlvbmFsLW9ubHlfcGFyYW1ldGVylChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2dsb3NzYXJ5Lmh0bWwjcG9zaXRpb25hbC1vbmx5LXBhcmFtZXRlcpRqDY8AAHSUjA5wb3NpeC1jb250ZW50c5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Bvc2l4Lmh0bWwjcG9zaXgtY29udGVudHOUjBdOb3RhYmxlIE1vZHVsZSBDb250ZW50c5R0lIwRcG9zaXgtbGFyZ2UtZmlsZXOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wb3NpeC5odG1sI3Bvc2l4LWxhcmdlLWZpbGVzlIwSTGFyZ2UgRmlsZSBTdXBwb3J0lHSUjBdwb3N0aW5zdGFsbGF0aW9uLXNjcmlwdJQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWwjcG9zdGluc3RhbGxhdGlvbi1zY3JpcHSUjBtUaGUgUG9zdGluc3RhbGxhdGlvbiBzY3JpcHSUdJSMBXBvd2VylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3Bvd2VylIwSVGhlIHBvd2VyIG9wZXJhdG9ylHSUjA5wcHJpbnQtZXhhbXBsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3BwcmludC1leGFtcGxllIwHRXhhbXBsZZR0lIwNcHJlLWluaXQtc2FmZZQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjcHJlLWluaXQtc2FmZZSMHEJlZm9yZSBQeXRob24gSW5pdGlhbGl6YXRpb26UdJSMC3ByZWZlcmVuY2VzlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaWRsZS5odG1sI3ByZWZlcmVuY2VzlIwTU2V0dGluZyBwcmVmZXJlbmNlc5R0lIwPcHJlZml4LW1hdGNoaW5nlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXJncGFyc2UuaHRtbCNwcmVmaXgtbWF0Y2hpbmeUjChBcmd1bWVudCBhYmJyZXZpYXRpb25zIChwcmVmaXggbWF0Y2hpbmcplHSUjAdwcmVwYXJllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNwcmVwYXJllIwdUHJlcGFyaW5nIHRoZSBjbGFzcyBuYW1lc3BhY2WUdJSMFXByZXR0eXByaW50ZXItb2JqZWN0c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BwcmludC5odG1sI3ByZXR0eXByaW50ZXItb2JqZWN0c5SMFVByZXR0eVByaW50ZXIgT2JqZWN0c5R0lIwJcHJpbWFyaWVzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3ByaW1hcmllc5SMCVByaW1hcmllc5R0lIwOcHJvY2Vzc2NvbnRyb2yUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjcHJvY2Vzc2NvbnRyb2yUjA9Qcm9jZXNzIENvbnRyb2yUdJSMG3Byb2Nlc3Nwb29sZXhlY3V0b3ItZXhhbXBsZZQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5odG1sI3Byb2Nlc3Nwb29sZXhlY3V0b3ItZXhhbXBsZZSMG1Byb2Nlc3NQb29sRXhlY3V0b3IgRXhhbXBsZZR0lIwHcHJvZmlsZZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxllIwUVGhlIFB5dGhvbiBQcm9maWxlcnOUdJSME3Byb2ZpbGUtY2FsaWJyYXRpb26UKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS1jYWxpYnJhdGlvbpSMC0NhbGlicmF0aW9ulHSUjA9wcm9maWxlLWluc3RhbnSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS1pbnN0YW50lIwXSW5zdGFudCBVc2Vy4oCZcyBNYW51YWyUdJSME3Byb2ZpbGUtbGltaXRhdGlvbnOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcm9maWxlLmh0bWwjcHJvZmlsZS1saW1pdGF0aW9uc5SMC0xpbWl0YXRpb25zlHSUjA1wcm9maWxlLXN0YXRzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUtc3RhdHOUjA9UaGUgU3RhdHMgQ2xhc3OUdJSMDnByb2ZpbGUtdGltZXJzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1sI3Byb2ZpbGUtdGltZXJzlIwUVXNpbmcgYSBjdXN0b20gdGltZXKUdJSMFXByb2ZpbGVyLWludHJvZHVjdGlvbpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Byb2ZpbGUuaHRtbCNwcm9maWxlci1pbnRyb2R1Y3Rpb26UjB1JbnRyb2R1Y3Rpb24gdG8gdGhlIHByb2ZpbGVyc5R0lIwJcHJvZmlsaW5nlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCNwcm9maWxpbmeUjBVQcm9maWxpbmcgYW5kIFRyYWNpbmeUdJSMDnByb2dfc3RydWN0dXJllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI3Byb2ctc3RydWN0dXJllIwWU3RydWN0dXJlIG9mIGEgcHJvZ3JhbZR0lIwIcHJvZ3JhbXOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbCNwcm9ncmFtc5SMGENvbXBsZXRlIFB5dGhvbiBwcm9ncmFtc5R0lIwWcHJvdG9jb2wtZXJyb3Itb2JqZWN0c5QoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5jbGllbnQuaHRtbCNwcm90b2NvbC1lcnJvci1vYmplY3RzlIwVUHJvdG9jb2xFcnJvciBPYmplY3RzlHSUjA1wcm90b2NvbF9vcGVulChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QuaHRtbCNwcm90b2NvbC1vcGVulGoNjwAAdJSMEHByb3RvY29sX3JlcXVlc3SUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3Byb3RvY29sLXJlcXVlc3SUag2PAAB0lIwRcHJvdG9jb2xfcmVzcG9uc2WUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3Byb3RvY29sLXJlc3BvbnNllGoNjwAAdJSMGHByb3h5LWJhc2ljLWF1dGgtaGFuZGxlcpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjcHJveHktYmFzaWMtYXV0aC1oYW5kbGVylIwdUHJveHlCYXNpY0F1dGhIYW5kbGVyIE9iamVjdHOUdJSMGXByb3h5LWRpZ2VzdC1hdXRoLWhhbmRsZXKUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3Byb3h5LWRpZ2VzdC1hdXRoLWhhbmRsZXKUjB5Qcm94eURpZ2VzdEF1dGhIYW5kbGVyIE9iamVjdHOUdJSMDXByb3h5LWhhbmRsZXKUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3Byb3h5LWhhbmRsZXKUjBRQcm94eUhhbmRsZXIgT2JqZWN0c5R0lIwacHVibGlzaGluZy1weXRob24tcGFja2FnZXOUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHJpYnV0aW5nL2luZGV4Lmh0bWwjcHVibGlzaGluZy1weXRob24tcGFja2FnZXOUjCdSZWFkaW5nIHRoZSBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGWUdJSMDnB1cmUtZW1iZWRkaW5nlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9lbWJlZGRpbmcuaHRtbCNwdXJlLWVtYmVkZGluZ5SMDlB1cmUgRW1iZWRkaW5nlHSUjAhwdXJlLW1vZJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvZXhhbXBsZXMuaHRtbCNwdXJlLW1vZJSMJFB1cmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiAoYnkgbW9kdWxlKZR0lIwKcHVyZS1wYXRoc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhdGhsaWIuaHRtbCNwdXJlLXBhdGhzlIwKUHVyZSBwYXRoc5R0lIwIcHVyZS1wa2eUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjcHVyZS1wa2eUjCVQdXJlIFB5dGhvbiBkaXN0cmlidXRpb24gKGJ5IHBhY2thZ2UplHSUjBBweS10by1qc29uLXRhYmxllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvanNvbi5odG1sI3B5LXRvLWpzb24tdGFibGWUag2PAAB0lIwdcHkyNy1tYWludGVuYW5jZS1lbmhhbmNlbWVudHOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi43Lmh0bWwjcHkyNy1tYWludGVuYW5jZS1lbmhhbmNlbWVudHOUjDVOZXcgRmVhdHVyZXMgQWRkZWQgdG8gUHl0aG9uIDIuNyBNYWludGVuYW5jZSBSZWxlYXNlc5R0lIwQcHljLWludmFsaWRhdGlvbpQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWwjcHljLWludmFsaWRhdGlvbpSMHENhY2hlZCBieXRlY29kZSBpbnZhbGlkYXRpb26UdJSMFHB5Y2xici1jbGFzcy1vYmplY3RzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHljbGJyLmh0bWwjcHljbGJyLWNsYXNzLW9iamVjdHOUjA1DbGFzcyBPYmplY3RzlHSUjBdweWNsYnItZnVuY3Rpb24tb2JqZWN0c5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5Y2xici5odG1sI3B5Y2xici1mdW5jdGlvbi1vYmplY3RzlIwQRnVuY3Rpb24gT2JqZWN0c5R0lIwIcHltYWxsb2OUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWVtb3J5Lmh0bWwjcHltYWxsb2OUjBZUaGUgcHltYWxsb2MgYWxsb2NhdG9ylHSUjA9weXBvcnRpbmctaG93dG+UKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vcHlwb3J0aW5nLmh0bWwjcHlwb3J0aW5nLWhvd3RvlIwhUG9ydGluZyBQeXRob24gMiBDb2RlIHRvIFB5dGhvbiAzlHSUjAZweXRob26UKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9weXRob24uaHRtbCNweXRob26UjBdQeXRob24gUnVudGltZSBTZXJ2aWNlc5R0lIwQcHl0aG9uLWludGVyZmFjZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWVpdC5odG1sI3B5dGhvbi1pbnRlcmZhY2WUjBBQeXRob24gSW50ZXJmYWNllHSUjAxweXRob24tc2hlbGyUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pZGxlLmh0bWwjcHl0aG9uLXNoZWxslGoNjwAAdJSMDHB5dGhvbi10ZXJtc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvaW50cm9kdWN0aW9uLmh0bWwjcHl0aG9uLXRlcm1zlIwaR2VuZXJhbCBQeXRob24gdGVybWlub2xvZ3mUdJSMEXB5emlwZmlsZS1vYmplY3RzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3B5emlwZmlsZS1vYmplY3RzlIwRUHlaaXBGaWxlIE9iamVjdHOUdJSMBnF0LWd1aZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLWNvb2tib29rLmh0bWwjcXQtZ3VplIwUQSBRdCBHVUkgZm9yIGxvZ2dpbmeUdJSMDHF1ZXJ5aW5nLXN0c5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3F1ZXJ5aW5nLXN0c5SMFVF1ZXJpZXMgb24gU1QgT2JqZWN0c5R0lIwNcXVldWUtaGFuZGxlcpQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNxdWV1ZS1oYW5kbGVylIwMUXVldWVIYW5kbGVylHSUjA5xdWV1ZS1saXN0ZW5lcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNxdWV1ZS1saXN0ZW5lcpSMDVF1ZXVlTGlzdGVuZXKUdJSMDHF1ZXVlb2JqZWN0c5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3F1ZXVlLmh0bWwjcXVldWVvYmplY3RzlIwNUXVldWUgT2JqZWN0c5R0lIwFcmFpc2WUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI3JhaXNllIwTVGhlIHJhaXNlIHN0YXRlbWVudJR0lHUojA9yYW5kb20tZXhhbXBsZXOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yYW5kb20uaHRtbCNyYW5kb20tZXhhbXBsZXOUjBRFeGFtcGxlcyBhbmQgUmVjaXBlc5R0lIwXcmF3Y29uZmlncGFyc2VyLW9iamVjdHOUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25maWdwYXJzZXIuaHRtbCNyYXdjb25maWdwYXJzZXItb2JqZWN0c5SMF1Jhd0NvbmZpZ1BhcnNlciBPYmplY3RzlHSUjAtyZS1leGFtcGxlc5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjcmUtZXhhbXBsZXOUjBtSZWd1bGFyIEV4cHJlc3Npb24gRXhhbXBsZXOUdJSMCnJlLW9iamVjdHOUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1sI3JlLW9iamVjdHOUjBpSZWd1bGFyIEV4cHJlc3Npb24gT2JqZWN0c5R0lIwJcmUtc3ludGF4lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmUuaHRtbCNyZS1zeW50YXiUjBlSZWd1bGFyIEV4cHJlc3Npb24gU3ludGF4lHSUjBByZWFkbGluZS1leGFtcGxllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbCNyZWFkbGluZS1leGFtcGxllIwHRXhhbXBsZZR0lIwOcmVjb3JkLW9iamVjdHOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbCNyZWNvcmQtb2JqZWN0c5SMDlJlY29yZCBPYmplY3RzlHSUjBByZWR1Y2VyX292ZXJyaWRllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlja2xlLmh0bWwjcmVkdWNlci1vdmVycmlkZZSMOEN1c3RvbSBSZWR1Y3Rpb24gZm9yIFR5cGVzLCBGdW5jdGlvbnMsIGFuZCBPdGhlciBPYmplY3RzlHSUjA1yZWVudHJhbnQtY21zlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI3JlZW50cmFudC1jbXOUjBpSZWVudHJhbnQgY29udGV4dCBtYW5hZ2Vyc5R0lIwJcmVmY291bnRzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9leHRlbmRpbmcuaHRtbCNyZWZjb3VudHOUjBBSZWZlcmVuY2UgQ291bnRzlHSUjBFyZWZjb3VudHNpbnB5dGhvbpQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjcmVmY291bnRzaW5weXRob26UjBxSZWZlcmVuY2UgQ291bnRpbmcgaW4gUHl0aG9ulHSUjAlyZWZlcmVuY2WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2NvbW1hbmRyZWYuaHRtbCNyZWZlcmVuY2WUjBFDb21tYW5kIFJlZmVyZW5jZZR0lIwPcmVmZXJlbmNlLWluZGV4lChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9pbmRleC5odG1sI3JlZmVyZW5jZS1pbmRleJSMHVRoZSBQeXRob24gTGFuZ3VhZ2UgUmVmZXJlbmNllHSUjApyZWZsZWN0aW9ulChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3JlZmxlY3Rpb24uaHRtbCNyZWZsZWN0aW9ulIwKUmVmbGVjdGlvbpR0lIwLcmVnZXgtaG93dG+UKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vcmVnZXguaHRtbCNyZWdleC1ob3d0b5SMGFJlZ3VsYXIgRXhwcmVzc2lvbiBIT1dUT5R0lIwIcmVncnRlc3SUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWwjcmVncnRlc3SUjC5SdW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNllHSUjA9yZWxhdGl2ZWltcG9ydHOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2ltcG9ydC5odG1sI3JlbGF0aXZlaW1wb3J0c5SMGFBhY2thZ2UgUmVsYXRpdmUgSW1wb3J0c5R0lIwOcmVwb3J0aW5nLWJ1Z3OUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYnVncy5odG1sI3JlcG9ydGluZy1idWdzlIwRRGVhbGluZyB3aXRoIEJ1Z3OUdJSMDHJlcHItb2JqZWN0c5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlcHJsaWIuaHRtbCNyZXByLW9iamVjdHOUjAxSZXByIE9iamVjdHOUdJSMD3JlcXVlc3Qtb2JqZWN0c5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjcmVxdWVzdC1vYmplY3RzlIwPUmVxdWVzdCBPYmplY3RzlHSUjAxyZXF1aXJlbWVudHOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIubWV0YWRhdGEuaHRtbCNyZXF1aXJlbWVudHOUjBlEaXN0cmlidXRpb24gcmVxdWlyZW1lbnRzlHSUjA1yZXNvbHZlX25hbWVzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI3Jlc29sdmUtbmFtZXOUjBNSZXNvbHV0aW9uIG9mIG5hbWVzlHSUjA1yZXN0cmljdF9leGVjlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5odG1sI3Jlc3RyaWN0LWV4ZWOUjCFCdWlsdGlucyBhbmQgcmVzdHJpY3RlZCBleGVjdXRpb26UdJSMBnJldHVybpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjcmV0dXJulIwUVGhlIHJldHVybiBzdGF0ZW1lbnSUdJSMDHJldXNhYmxlLWNtc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnRleHRsaWIuaHRtbCNyZXVzYWJsZS1jbXOUjBlSZXVzYWJsZSBjb250ZXh0IG1hbmFnZXJzlHSUjAxyaWNoY21wZnVuY3OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3JpY2hjbXBmdW5jc5RqDY8AAHSUjBJybGNvbXBsZXRlci1jb25maWeUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaXRlLmh0bWwjcmxjb21wbGV0ZXItY29uZmlnlIwWUmVhZGxpbmUgY29uZmlndXJhdGlvbpR0lIwNcmxvY2stb2JqZWN0c5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3Jsb2NrLW9iamVjdHOUjA1STG9jayBPYmplY3RzlHSUjBVyb3RhdGluZy1maWxlLWhhbmRsZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjcm90YXRpbmctZmlsZS1oYW5kbGVylIwTUm90YXRpbmdGaWxlSGFuZGxlcpR0lIwKcnVuLWN1c3RvbZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lkbGUuaHRtbCNydW4tY3VzdG9tlGoNjwAAdJSMCnJ1bi1tb2R1bGWUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pZGxlLmh0bWwjcnVuLW1vZHVsZZRqDY8AAHSUjBFzYXgtZXJyb3ItaGFuZGxlcpQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5odG1sI3NheC1lcnJvci1oYW5kbGVylIwURXJyb3JIYW5kbGVyIE9iamVjdHOUdJSMFXNheC1leGNlcHRpb24tb2JqZWN0c5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5zYXguaHRtbCNzYXgtZXhjZXB0aW9uLW9iamVjdHOUjBRTQVhFeGNlcHRpb24gT2JqZWN0c5R0lIwRc2NoZWR1bGVyLW9iamVjdHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zY2hlZC5odG1sI3NjaGVkdWxlci1vYmplY3RzlIwRU2NoZWR1bGVyIE9iamVjdHOUdJSMDnNjcmVlbnNwZWNpZmljlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWwjc2NyZWVuc3BlY2lmaWOUjDtNZXRob2RzIHNwZWNpZmljIHRvIFNjcmVlbiwgbm90IGluaGVyaXRlZCBmcm9tIFR1cnRsZVNjcmVlbpR0lIwJc2Rpc3QtY21klChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9jb21tYW5kcmVmLmh0bWwjc2Rpc3QtY21klIwxQ3JlYXRpbmcgYSBzb3VyY2UgZGlzdHJpYnV0aW9uOiB0aGUgc2Rpc3QgY29tbWFuZJR0lIwGc2VhcmNolChqCo8AAGoLjwAAjCVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3NlYXJjaC5odG1slIwLU2VhcmNoIFBhZ2WUdJSMD3NlYXJjaC12cy1tYXRjaJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWwjc2VhcmNoLXZzLW1hdGNolIwUc2VhcmNoKCkgdnMuIG1hdGNoKCmUdJSMDXNlY3QtcmVsbGlua3OUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi4yLmh0bWwjc2VjdC1yZWxsaW5rc5SMDVJlbGF0ZWQgTGlua3OUdJSMDHNlY3Rpb24tYm9vbJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLWJvb2yUjBdQRVAgMjg1OiBBIEJvb2xlYW4gVHlwZZR0lIwRc2VjdGlvbi1lbmNvZGluZ3OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1lbmNvZGluZ3OUjB5QRVAgMjYzOiBTb3VyY2UgQ29kZSBFbmNvZGluZ3OUdJSMEXNlY3Rpb24tZW51bWVyYXRllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tZW51bWVyYXRllIwUUEVQIDI3OTogZW51bWVyYXRlKCmUdJSMEnNlY3Rpb24tZ2VuZXJhdG9yc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLWdlbmVyYXRvcnOUjBpQRVAgMjU1OiBTaW1wbGUgR2VuZXJhdG9yc5R0lIwOc2VjdGlvbi1wZXAzMDGUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1wZXAzMDGUjDFQRVAgMzAxOiBQYWNrYWdlIEluZGV4IGFuZCBNZXRhZGF0YSBmb3IgRGlzdHV0aWxzlHSUjA5zZWN0aW9uLXBlcDMwMpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLXBlcDMwMpSMGVBFUCAzMDI6IE5ldyBJbXBvcnQgSG9va3OUdJSMDnNlY3Rpb24tcGVwMzA1lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tcGVwMzA1lIweUEVQIDMwNTogQ29tbWEtc2VwYXJhdGVkIEZpbGVzlHSUjA5zZWN0aW9uLXBlcDMwN5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjMuaHRtbCNzZWN0aW9uLXBlcDMwN5SMHFBFUCAzMDc6IFBpY2tsZSBFbmhhbmNlbWVudHOUdJSMEHNlY3Rpb24tcHltYWxsb2OUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi4zLmh0bWwjc2VjdGlvbi1weW1hbGxvY5SMKFB5bWFsbG9jOiBBIFNwZWNpYWxpemVkIE9iamVjdCBBbGxvY2F0b3KUdJSMDnNlY3Rpb24tc2xpY2VzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuMy5odG1sI3NlY3Rpb24tc2xpY2VzlIwPRXh0ZW5kZWQgU2xpY2VzlHSUjBJzZW1hcGhvcmUtZXhhbXBsZXOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCNzZW1hcGhvcmUtZXhhbXBsZXOUjBFTZW1hcGhvcmUgRXhhbXBsZZR0lIwRc2VtYXBob3JlLW9iamVjdHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCNzZW1hcGhvcmUtb2JqZWN0c5SMEVNlbWFwaG9yZSBPYmplY3RzlHSUjAhzZXF1ZW5jZZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zZXF1ZW5jZS5odG1sI3NlcXVlbmNllIwRU2VxdWVuY2UgUHJvdG9jb2yUdJSMEHNlcXVlbmNlLW1hdGNoZXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWwjc2VxdWVuY2UtbWF0Y2hlcpSMF1NlcXVlbmNlTWF0Y2hlciBPYmplY3RzlHSUjBBzZXF1ZW5jZS1zdHJ1Y3RzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNzZXF1ZW5jZS1zdHJ1Y3RzlIwaU2VxdWVuY2UgT2JqZWN0IFN0cnVjdHVyZXOUdJSMDnNlcXVlbmNlLXR5cGVzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNzZXF1ZW5jZS10eXBlc5SMGUVtdWxhdGluZyBjb250YWluZXIgdHlwZXOUdJSMGHNlcXVlbmNlbWF0Y2hlci1leGFtcGxlc5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RpZmZsaWIuaHRtbCNzZXF1ZW5jZW1hdGNoZXItZXhhbXBsZXOUjBhTZXF1ZW5jZU1hdGNoZXIgRXhhbXBsZXOUdJSMD3NlcXVlbmNlb2JqZWN0c5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb25jcmV0ZS5odG1sI3NlcXVlbmNlb2JqZWN0c5SMEFNlcXVlbmNlIE9iamVjdHOUdJSME3NlcnZlcnByb3h5LW9iamVjdHOUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjc2VydmVycHJveHktb2JqZWN0c5SME1NlcnZlclByb3h5IE9iamVjdHOUdJSMA3NldJQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNzZXSUjAxTZXQgZGlzcGxheXOUdJSMCnNldG9iamVjdHOUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWwjc2V0b2JqZWN0c5SMC1NldCBPYmplY3RzlHSUjA9zZXR0aW5nLWVudnZhcnOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI3NldHRpbmctZW52dmFyc5SMJ0V4Y3Vyc3VzOiBTZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlc5R0lIwMc2V0dXAtY29uZmlnlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9jb25maWdmaWxlLmh0bWwjc2V0dXAtY29uZmlnlIwkV3JpdGluZyB0aGUgU2V0dXAgQ29uZmlndXJhdGlvbiBGaWxllHSUjAxzZXR1cC1zY3JpcHSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NldHVwc2NyaXB0Lmh0bWwjc2V0dXAtc2NyaXB0lIwYV3JpdGluZyB0aGUgU2V0dXAgU2NyaXB0lHSUjBRzaGFsbG93X3ZzX2RlZXBfY29weZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvcHkuaHRtbCNzaGFsbG93LXZzLWRlZXAtY29weZRqDY8AAHSUjA5zaGVsdmUtZXhhbXBsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NoZWx2ZS5odG1sI3NoZWx2ZS1leGFtcGxllIwHRXhhbXBsZZR0lIwIc2hpZnRpbmeUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjc2hpZnRpbmeUjBNTaGlmdGluZyBvcGVyYXRpb25zlHSUjA1zaGxleC1vYmplY3RzlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2hsZXguaHRtbCNzaGxleC1vYmplY3RzlIwNc2hsZXggT2JqZWN0c5R0lIwTc2hsZXgtcGFyc2luZy1ydWxlc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWwjc2hsZXgtcGFyc2luZy1ydWxlc5SMDVBhcnNpbmcgUnVsZXOUdJSMGHNodXRpbC1hcmNoaXZpbmctZXhhbXBsZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC1hcmNoaXZpbmctZXhhbXBsZZSMEUFyY2hpdmluZyBleGFtcGxllHSUjBdzaHV0aWwtY29weXRyZWUtZXhhbXBsZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC1jb3B5dHJlZS1leGFtcGxllIwQY29weXRyZWUgZXhhbXBsZZR0lIwzc2h1dGlsLXBsYXRmb3JtLWRlcGVuZGVudC1lZmZpY2llbnQtY29weS1vcGVyYXRpb25zlChqCo8AAGoLjwAAjGFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWwjc2h1dGlsLXBsYXRmb3JtLWRlcGVuZGVudC1lZmZpY2llbnQtY29weS1vcGVyYXRpb25zlIwsUGxhdGZvcm0tZGVwZW5kZW50IGVmZmljaWVudCBjb3B5IG9wZXJhdGlvbnOUdJSMFXNodXRpbC1ybXRyZWUtZXhhbXBsZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NodXRpbC5odG1sI3NodXRpbC1ybXRyZWUtZXhhbXBsZZSMDnJtdHJlZSBleGFtcGxllHSUjA5zaWduYWwtZXhhbXBsZZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbC1leGFtcGxllIwHRXhhbXBsZZR0lIwTc2lnbmFscy1hbmQtdGhyZWFkc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1sI3NpZ25hbHMtYW5kLXRocmVhZHOUjBNTaWduYWxzIGFuZCB0aHJlYWRzlHSUjAZzaW1wbGWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI3NpbXBsZZSMEVNpbXBsZSBzdGF0ZW1lbnRzlHSUjBVzaW1wbGUteG1scnBjLXNlcnZlcnOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWwjc2ltcGxlLXhtbHJwYy1zZXJ2ZXJzlIwaU2ltcGxlWE1MUlBDU2VydmVyIE9iamVjdHOUdJSMGnNpbXBsZXhtbHJwY3NlcnZlci1leGFtcGxllChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLnNlcnZlci5odG1sI3NpbXBsZXhtbHJwY3NlcnZlci1leGFtcGxllIwaU2ltcGxlWE1MUlBDU2VydmVyIEV4YW1wbGWUdJSMOHNpbXBsaWZ5aW5nLXN1cHBvcnQtZm9yLXNpbmdsZS1vcHRpb25hbC1jb250ZXh0LW1hbmFnZXJzlChqCo8AAGoLjwAAjGpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI3NpbXBsaWZ5aW5nLXN1cHBvcnQtZm9yLXNpbmdsZS1vcHRpb25hbC1jb250ZXh0LW1hbmFnZXJzlGoNjwAAdJSMCnNpbmdsZS1leHSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2V4YW1wbGVzLmh0bWwjc2luZ2xlLWV4dJSMF1NpbmdsZSBleHRlbnNpb24gbW9kdWxllHSUjCVzaW5nbGUtdXNlLXJldXNhYmxlLWFuZC1yZWVudHJhbnQtY21zlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dGxpYi5odG1sI3NpbmdsZS11c2UtcmV1c2FibGUtYW5kLXJlZW50cmFudC1jbXOUjDNTaW5nbGUgdXNlLCByZXVzYWJsZSBhbmQgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnOUdJSMEHNpdGUtY29tbWFuZGxpbmWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaXRlLmh0bWwjc2l0ZS1jb21tYW5kbGluZZSMFkNvbW1hbmQgTGluZSBJbnRlcmZhY2WUdJSMDXNsaWNlLW9iamVjdHOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2xpY2UuaHRtbCNzbGljZS1vYmplY3RzlIwNU2xpY2UgT2JqZWN0c5R0lIwIc2xpY2luZ3OUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjc2xpY2luZ3OUjAhTbGljaW5nc5R0lIwNc2xvdC10eXBlZGVmc5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjaWQ1lIwSU2xvdCBUeXBlIHR5cGVkZWZzlHSUjBNzbG90LXR5cGVkZWZzLXRhYmxllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCNzbG90LXR5cGVkZWZzLXRhYmxllIwNc2xvdCB0eXBlZGVmc5R0lIwFc2xvdHOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3Nsb3RzlIwJX19zbG90c19flHSUjAxzbXRwLWV4YW1wbGWUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zbXRwbGliLmh0bWwjc210cC1leGFtcGxllIwMU01UUCBFeGFtcGxllHSUjAxzbXRwLWhhbmRsZXKUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjc210cC1oYW5kbGVylIwLU01UUEhhbmRsZXKUdJSMDHNtdHAtb2JqZWN0c5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NtdHBsaWIuaHRtbCNzbXRwLW9iamVjdHOUjAxTTVRQIE9iamVjdHOUdJSMDnNvY2tldC1leGFtcGxllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWwjc29ja2V0LWV4YW1wbGWUjAdFeGFtcGxllHSUjA5zb2NrZXQtaGFuZGxlcpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCNzb2NrZXQtaGFuZGxlcpSMDVNvY2tldEhhbmRsZXKUdJSMDHNvY2tldC1ob3d0b5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9zb2NrZXRzLmh0bWwjc29ja2V0LWhvd3RvlIwYU29ja2V0IFByb2dyYW1taW5nIEhPV1RPlHSUjA5zb2NrZXQtb2JqZWN0c5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC1vYmplY3RzlIwOU29ja2V0IE9iamVjdHOUdJSMD3NvY2tldC10aW1lb3V0c5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NvY2tldC5odG1sI3NvY2tldC10aW1lb3V0c5SMGE5vdGVzIG9uIHNvY2tldCB0aW1lb3V0c5R0lIwMc29ydGluZ2hvd3RvlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL3NvcnRpbmcuaHRtbCNzb3J0aW5naG93dG+UjA5Tb3J0aW5nIEhPVyBUT5R0lIwLc291cmNlLWRpc3SUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NvdXJjZWRpc3QuaHRtbCNzb3VyY2UtZGlzdJSMHkNyZWF0aW5nIGEgU291cmNlIERpc3RyaWJ1dGlvbpR0lIwOc3BlY2lhbC1sb29rdXCUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3NwZWNpYWwtbG9va3VwlIwVU3BlY2lhbCBtZXRob2QgbG9va3VwlHSUjAxzcGVjaWFsYXR0cnOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3NwZWNpYWxhdHRyc5SMElNwZWNpYWwgQXR0cmlidXRlc5R0lIwMc3BlY2lhbG5hbWVzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbCNzcGVjaWFsbmFtZXOUjBRTcGVjaWFsIG1ldGhvZCBuYW1lc5R0lIwPc3Bva2VuLW1lc3NhZ2VzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCNzcG9rZW4tbWVzc2FnZXOUjBlTcGVha2luZyBsb2dnaW5nIG1lc3NhZ2VzlHSUjBpzcWxpdGUzLWNvbm5lY3Rpb24tb2JqZWN0c5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NxbGl0ZTMuaHRtbCNzcWxpdGUzLWNvbm5lY3Rpb24tb2JqZWN0c5SMEkNvbm5lY3Rpb24gT2JqZWN0c5R0lIwgc3FsaXRlMy1jb250cm9sbGluZy10cmFuc2FjdGlvbnOUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy1jb250cm9sbGluZy10cmFuc2FjdGlvbnOUjBhDb250cm9sbGluZyBUcmFuc2FjdGlvbnOUdJSMFnNxbGl0ZTMtY3Vyc29yLW9iamVjdHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy1jdXJzb3Itb2JqZWN0c5SMDkN1cnNvciBPYmplY3RzlHSUjBJzcWxpdGUzLWV4Y2VwdGlvbnOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy1leGNlcHRpb25zlIwKRXhjZXB0aW9uc5R0lIwXc3FsaXRlMy1tb2R1bGUtY29udGVudHOUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy1tb2R1bGUtY29udGVudHOUjB5Nb2R1bGUgZnVuY3Rpb25zIGFuZCBjb25zdGFudHOUdJSME3NxbGl0ZTMtcm93LW9iamVjdHOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zcWxpdGUzLmh0bWwjc3FsaXRlMy1yb3ctb2JqZWN0c5SMC1JvdyBPYmplY3RzlHSUjA1zcWxpdGUzLXR5cGVzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1sI3NxbGl0ZTMtdHlwZXOUjBdTUUxpdGUgYW5kIFB5dGhvbiB0eXBlc5R0lIwQc3NsLWNlcnRpZmljYXRlc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC1jZXJ0aWZpY2F0ZXOUjAxDZXJ0aWZpY2F0ZXOUdJSMDHNzbC1saWJyZXNzbJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC1saWJyZXNzbJSMEExpYnJlU1NMIHN1cHBvcnSUdJSMD3NzbC1ub25ibG9ja2luZ5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NzbC5odG1sI3NzbC1ub25ibG9ja2luZ5SMHU5vdGVzIG9uIG5vbi1ibG9ja2luZyBzb2NrZXRzlHSUjAxzc2wtc2VjdXJpdHmUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wtc2VjdXJpdHmUjBdTZWN1cml0eSBjb25zaWRlcmF0aW9uc5R0lIwLc3NsLXRsc3YxXzOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zc2wuaHRtbCNzc2wtdGxzdjEtM5SMB1RMUyAxLjOUdJSMCXN0LWVycm9yc5QoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1sI3N0LWVycm9yc5SMHUV4Y2VwdGlvbnMgYW5kIEVycm9yIEhhbmRsaW5nlHSUjApzdC1vYmplY3RzlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGFyc2VyLmh0bWwjc3Qtb2JqZWN0c5SMClNUIE9iamVjdHOUdJSMBnN0YWJsZZQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zdGFibGUuaHRtbCNzdGFibGWUjCNTdGFibGUgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZZR0lIwSc3RhbmRhcmQtZW5jb2RpbmdzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjc3RhbmRhcmQtZW5jb2RpbmdzlIwSU3RhbmRhcmQgRW5jb2RpbmdzlHSUjBJzdGFuZGFyZGV4Y2VwdGlvbnOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI3N0YW5kYXJkZXhjZXB0aW9uc5SME1N0YW5kYXJkIEV4Y2VwdGlvbnOUdJSMGXN0YW5kYXJkd2FybmluZ2NhdGVnb3JpZXOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1sI3N0YW5kYXJkd2FybmluZ2NhdGVnb3JpZXOUjBtTdGFuZGFyZCBXYXJuaW5nIENhdGVnb3JpZXOUdJSMDnN0YXJ0LWFuZC1zdG9wlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3N0YXJ0LWFuZC1zdG9wlIwdcGF0Y2ggbWV0aG9kczogc3RhcnQgYW5kIHN0b3CUdJSMEHN0YXJ0ZXItdGVtcGxhdGWUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI3N0YXJ0ZXItdGVtcGxhdGWUjCJBIENMSSBhcHBsaWNhdGlvbiBzdGFydGVyIHRlbXBsYXRllHSUjA5zdGRjb21wYXJpc29uc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjc3RkY29tcGFyaXNvbnOUjAtDb21wYXJpc29uc5R0lIwOc3RyZWFtLWhhbmRsZXKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjc3RyZWFtLWhhbmRsZXKUjA1TdHJlYW1IYW5kbGVylHSUjBVzdHJlYW0tcmVhZGVyLW9iamVjdHOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNzdHJlYW0tcmVhZGVyLW9iamVjdHOUjBRTdHJlYW1SZWFkZXIgT2JqZWN0c5R0lIwUc3RyZWFtLXJlYWRlci13cml0ZXKUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNzdHJlYW0tcmVhZGVyLXdyaXRlcpSMGlN0cmVhbVJlYWRlcldyaXRlciBPYmplY3RzlHSUjBZzdHJlYW0tcmVjb2Rlci1vYmplY3RzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjc3RyZWFtLXJlY29kZXItb2JqZWN0c5SMFVN0cmVhbVJlY29kZXIgT2JqZWN0c5R0lIwVc3RyZWFtLXdyaXRlci1vYmplY3RzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjc3RyZWFtLXdyaXRlci1vYmplY3RzlIwUU3RyZWFtV3JpdGVyIE9iamVjdHOUdJSMGnN0cmZ0aW1lLXN0cnB0aW1lLWJlaGF2aW9ylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNzdHJmdGltZS1zdHJwdGltZS1iZWhhdmlvcpSMInN0cmZ0aW1lKCkgYW5kIHN0cnB0aW1lKCkgQmVoYXZpb3KUdJSMFHN0cmluZy1jb25jYXRlbmF0aW9ulChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjc3RyaW5nLWNvbmNhdGVuYXRpb26UjBxTdHJpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9ulHSUjBFzdHJpbmctY29udmVyc2lvbpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb252ZXJzaW9uLmh0bWwjc3RyaW5nLWNvbnZlcnNpb26UjCBTdHJpbmcgY29udmVyc2lvbiBhbmQgZm9ybWF0dGluZ5R0lIwRc3RyaW5nLWZvcm1hdHRpbmeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNzdHJpbmctZm9ybWF0dGluZ5SMGEN1c3RvbSBTdHJpbmcgRm9ybWF0dGluZ5R0lIwOc3RyaW5nLW1ldGhvZHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3N0cmluZy1tZXRob2RzlIwOU3RyaW5nIE1ldGhvZHOUdJSMB3N0cmluZ3OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNzdHJpbmdzlIwZU3RyaW5nIGFuZCBCeXRlcyBsaXRlcmFsc5R0lIwOc3RyaW5nc2VydmljZXOUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXh0Lmh0bWwjc3RyaW5nc2VydmljZXOUjBhUZXh0IFByb2Nlc3NpbmcgU2VydmljZXOUdJSMEHN0cnVjdC1hbGlnbm1lbnSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJ1Y3QuaHRtbCNzdHJ1Y3QtYWxpZ25tZW50lIwfQnl0ZSBPcmRlciwgU2l6ZSwgYW5kIEFsaWdubWVudJR0lIwPc3RydWN0LWV4YW1wbGVzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RydWN0Lmh0bWwjc3RydWN0LWV4YW1wbGVzlIwIRXhhbXBsZXOUdJSMFXN0cnVjdC1mb3JtYXQtc3RyaW5nc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC1mb3JtYXQtc3RyaW5nc5SMDkZvcm1hdCBTdHJpbmdzlHSUjA5zdHJ1Y3Qtb2JqZWN0c5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cnVjdC5odG1sI3N0cnVjdC1vYmplY3RzlIwHQ2xhc3Nlc5R0lIwXc3ViLWludGVycHJldGVyLXN1cHBvcnSUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI3N1Yi1pbnRlcnByZXRlci1zdXBwb3J0lIwXU3ViLWludGVycHJldGVyIHN1cHBvcnSUdJSMCXN1Yi1zbG90c5QoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjc3ViLXNsb3RzlGoNjwAAdJSMEXN1YmNsYXNzaW5nLXJlcHJzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVwcmxpYi5odG1sI3N1YmNsYXNzaW5nLXJlcHJzlIwYU3ViY2xhc3NpbmcgUmVwciBPYmplY3RzlHSUjBdzdWJwcm9jZXNzLXJlcGxhY2VtZW50c5QoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3MuaHRtbCNzdWJwcm9jZXNzLXJlcGxhY2VtZW50c5SMNFJlcGxhY2luZyBPbGRlciBGdW5jdGlvbnMgd2l0aCB0aGUgc3VicHJvY2VzcyBNb2R1bGWUdJSMDXN1YnNjcmlwdGlvbnOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjc3Vic2NyaXB0aW9uc5SMDVN1YnNjcmlwdGlvbnOUdJSMCHN1YnRlc3RzlChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCNzdWJ0ZXN0c5SMLURpc3Rpbmd1aXNoaW5nIHRlc3QgaXRlcmF0aW9ucyB1c2luZyBzdWJ0ZXN0c5R0lIwPc3VtbWFyeS1vYmplY3RzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXNpbGliLmh0bWwjc3VtbWFyeS1vYmplY3RzlIwbU3VtbWFyeSBJbmZvcm1hdGlvbiBPYmplY3RzlHSUjApzdXBlcnNlZGVklChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VwZXJzZWRlZC5odG1sI3N1cGVyc2VkZWSUjBJTdXBlcnNlZGVkIE1vZHVsZXOUdJSMGnN1cHBvcnRpbmctY3ljbGUtZGV0ZWN0aW9ulChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2djc3VwcG9ydC5odG1sI3N1cHBvcnRpbmctY3ljbGUtZGV0ZWN0aW9ulIwkU3VwcG9ydGluZyBDeWNsaWMgR2FyYmFnZSBDb2xsZWN0aW9ulHSUjA9zdXJyb2dhdGVlc2NhcGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlY3MuaHRtbCNzdXJyb2dhdGVlc2NhcGWUjA5FcnJvciBIYW5kbGVyc5R0lIwOc3lzbG9nLWhhbmRsZXKUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWwjc3lzbG9nLWhhbmRsZXKUjA1TeXNMb2dIYW5kbGVylHSUjA9zeXN0ZW1mdW5jdGlvbnOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc3lzLmh0bWwjc3lzdGVtZnVuY3Rpb25zlIwQU3lzdGVtIEZ1bmN0aW9uc5R0lIwMdGFyLWV4YW1wbGVzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3Rhci1leGFtcGxlc5SMCEV4YW1wbGVzlHSUjAt0YXItZm9ybWF0c5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXItZm9ybWF0c5SMFVN1cHBvcnRlZCB0YXIgZm9ybWF0c5R0lIwLdGFyLXVuaWNvZGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90YXJmaWxlLmh0bWwjdGFyLXVuaWNvZGWUjA5Vbmljb2RlIGlzc3Vlc5R0lIwTdGFyZmlsZS1jb21tYW5kbGluZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhcmZpbGUuaHRtbCN0YXJmaWxlLWNvbW1hbmRsaW5llIwWQ29tbWFuZC1MaW5lIEludGVyZmFjZZR0lIwPdGFyZmlsZS1vYmplY3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmZpbGUtb2JqZWN0c5SMD1RhckZpbGUgT2JqZWN0c5R0lIwPdGFyaW5mby1vYmplY3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1sI3RhcmluZm8tb2JqZWN0c5SVAwABAAAAAACMD1RhckluZm8gT2JqZWN0c5R0lIwOdGVsbmV0LWV4YW1wbGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZWxuZXRsaWIuaHRtbCN0ZWxuZXQtZXhhbXBsZZSMDlRlbG5ldCBFeGFtcGxllHSUjA50ZWxuZXQtb2JqZWN0c5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RlbG5ldGxpYi5odG1sI3RlbG5ldC1vYmplY3RzlIwOVGVsbmV0IE9iamVjdHOUdJSMEXRlbXBmaWxlLWV4YW1wbGVzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVtcGZpbGUuaHRtbCN0ZW1wZmlsZS1leGFtcGxlc5SMCEV4YW1wbGVzlHSUjBB0ZW1wbGF0ZS1vYmplY3RzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGlwZXMuaHRtbCN0ZW1wbGF0ZS1vYmplY3RzlIwQVGVtcGxhdGUgT2JqZWN0c5R0lIwQdGVtcGxhdGUtc3RyaW5nc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI3RlbXBsYXRlLXN0cmluZ3OUjBBUZW1wbGF0ZSBzdHJpbmdzlHSUjA10ZXJtaW5hbC1zaXpllChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvb3MuaHRtbCN0ZXJtaW5hbC1zaXpllIwfUXVlcnlpbmcgdGhlIHNpemUgb2YgYSB0ZXJtaW5hbJR0lIwPdGVybWlvcy1leGFtcGxllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVybWlvcy5odG1sI3Rlcm1pb3MtZXhhbXBsZZSMB0V4YW1wbGWUdJSMC3Rlc3QtcHJlZml4lChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QubW9jay5odG1sI3Rlc3QtcHJlZml4lIwLVEVTVF9QUkVGSViUdJSMEHRlc3RjYXNlLW9iamVjdHOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3Rlc3RjYXNlLW9iamVjdHOUjApUZXN0IGNhc2VzlHSUjBF0ZXN0c3VpdGUtb2JqZWN0c5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdGVzdHN1aXRlLW9iamVjdHOUjA5Hcm91cGluZyB0ZXN0c5R0lIwPdGV4dC10cmFuc2Zvcm1zlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWwjdGV4dC10cmFuc2Zvcm1zlIwPVGV4dCBUcmFuc2Zvcm1zlHSUjAd0ZXh0c2VxlChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0ZXh0c2VxlIwaVGV4dCBTZXF1ZW5jZSBUeXBlIOKAlCBzdHKUdJSMDHRleHRzZXJ2aWNlc5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RleHQuaHRtbCN0ZXh0c2VydmljZXOUjBhUZXh0IFByb2Nlc3NpbmcgU2VydmljZXOUdJSMFHRoZS1iYWNrc2xhc2gtcGxhZ3VllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL3JlZ2V4Lmh0bWwjdGhlLWJhY2tzbGFzaC1wbGFndWWUjBRUaGUgQmFja3NsYXNoIFBsYWd1ZZR0lIwHdGhpbmljZZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWwjdGhpbmljZZSMCFRoaW4gSWNllHSUjBR0aHJlYWQtbG9jYWwtc3RvcmFnZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0Lmh0bWwjdGhyZWFkLWxvY2FsLXN0b3JhZ2WUjBxUaHJlYWQgTG9jYWwgU3RvcmFnZSBTdXBwb3J0lHSUjBh0aHJlYWQtbG9jYWwtc3RvcmFnZS1hcGmUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI3RocmVhZC1sb2NhbC1zdG9yYWdlLWFwaZSMHlRocmVhZCBMb2NhbCBTdG9yYWdlIChUTFMpIEFQSZR0lIwOdGhyZWFkLW9iamVjdHOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN0aHJlYWQtb2JqZWN0c5SMDlRocmVhZCBPYmplY3RzlHSUjBt0aHJlYWQtc3BlY2lmaWMtc3RvcmFnZS1hcGmUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5pdC5odG1sI3RocmVhZC1zcGVjaWZpYy1zdG9yYWdlLWFwaZSMIVRocmVhZCBTcGVjaWZpYyBTdG9yYWdlIChUU1MpIEFQSZR0lIwadGhyZWFkcG9vbGV4ZWN1dG9yLWV4YW1wbGWUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbCN0aHJlYWRwb29sZXhlY3V0b3ItZXhhbXBsZZSMGlRocmVhZFBvb2xFeGVjdXRvciBFeGFtcGxllHSUjAd0aHJlYWRzlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbCN0aHJlYWRzlIwsVGhyZWFkIFN0YXRlIGFuZCB0aGUgR2xvYmFsIEludGVycHJldGVyIExvY2uUdJSMF3RpbWUtY2xvY2staWQtY29uc3RhbnRzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZS5odG1sI3RpbWUtY2xvY2staWQtY29uc3RhbnRzlIwSQ2xvY2sgSUQgQ29uc3RhbnRzlHSUjA50aW1lLWZ1bmN0aW9uc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbCN0aW1lLWZ1bmN0aW9uc5SMCUZ1bmN0aW9uc5R0lIwXdGltZS10aW1lem9uZS1jb25zdGFudHOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1lLmh0bWwjdGltZS10aW1lem9uZS1jb25zdGFudHOUjBJUaW1lem9uZSBDb25zdGFudHOUdJSMG3RpbWVkLXJvdGF0aW5nLWZpbGUtaGFuZGxlcpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMuaHRtbCN0aW1lZC1yb3RhdGluZy1maWxlLWhhbmRsZXKUjBhUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXKUdJSMHXRpbWVpdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGltZWl0Lmh0bWwjdGltZWl0LWNvbW1hbmQtbGluZS1pbnRlcmZhY2WUjBZDb21tYW5kLUxpbmUgSW50ZXJmYWNllHSUjA90aW1laXQtZXhhbXBsZXOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1laXQuaHRtbCN0aW1laXQtZXhhbXBsZXOUjAhFeGFtcGxlc5R0lIwNdGltZXItb2JqZWN0c5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1sI3RpbWVyLW9iamVjdHOUjA1UaW1lciBPYmplY3RzlHSUjAd0a2ludGVylChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGsuaHRtbCN0a2ludGVylIwhR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlcyB3aXRoIFRrlHSUjBV0a2ludGVyLWJhc2ljLW1hcHBpbmeUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLmh0bWwjdGtpbnRlci1iYXNpYy1tYXBwaW5nlIwdTWFwcGluZyBCYXNpYyBUayBpbnRvIFRraW50ZXKUdJSMFXRraW50ZXItZmlsZS1oYW5kbGVyc5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIuaHRtbCN0a2ludGVyLWZpbGUtaGFuZGxlcnOUjA1GaWxlIEhhbmRsZXJzlHSUjBd0a2ludGVyLXNldHRpbmctb3B0aW9uc5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIuaHRtbCN0a2ludGVyLXNldHRpbmctb3B0aW9uc5SMD1NldHRpbmcgT3B0aW9uc5R0lIwMdG9rZW5pemUtY2xplChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW5pemUuaHRtbCN0b2tlbml6ZS1jbGmUjBJDb21tYW5kLUxpbmUgVXNhZ2WUdJSMCXRvcC1sZXZlbJQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI3RvcC1sZXZlbJSMFFRvcC1sZXZlbCBjb21wb25lbnRzlHSUjA50cC1zbG90cy10YWJsZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWwjdHAtc2xvdHMtdGFibGWUjA7igJx0cCBzbG90c+KAnZR0lIwJdHJhY2UtYXBplChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbCN0cmFjZS1hcGmUjBZQcm9ncmFtbWF0aWMgSW50ZXJmYWNllHSUjAl0cmFjZS1jbGmUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZS5odG1sI3RyYWNlLWNsaZSMEkNvbW1hbmQtTGluZSBVc2FnZZR0lIwRdHJhY2ViYWNrLWV4YW1wbGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbCN0cmFjZWJhY2stZXhhbXBsZZSMElRyYWNlYmFjayBFeGFtcGxlc5R0lIwRdHJhY2ViYWNrLW9iamVjdHOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3RyYWNlYmFjay1vYmplY3RzlGoNjwAAdJSMBXRydXRolChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0cnV0aJSME1RydXRoIFZhbHVlIFRlc3RpbmeUdJSMA3RyeZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCN0cnmUjBFUaGUgdHJ5IHN0YXRlbWVudJR0lIwKdHRrc3R5bGluZ5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIudHRrLmh0bWwjdHRrc3R5bGluZ5SMC1R0ayBTdHlsaW5nlHSUjAx0dXBsZW9iamVjdHOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHVwbGUuaHRtbCN0dXBsZW9iamVjdHOUjA1UdXBsZSBPYmplY3RzlHSUjA90dXQtYW5ub3RhdGlvbnOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtYW5ub3RhdGlvbnOUjBRGdW5jdGlvbiBBbm5vdGF0aW9uc5R0lIwMdHV0LWFwcGVuZGl4lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWwjdHV0LWFwcGVuZGl4lIwIQXBwZW5kaXiUdJSMEXR1dC1hcmJpdHJhcnlhcmdzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWFyYml0cmFyeWFyZ3OUjBhBcmJpdHJhcnkgQXJndW1lbnQgTGlzdHOUdJSMDnR1dC1hcmdwYXNzaW5nlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWFyZ3Bhc3NpbmeUjBBBcmd1bWVudCBQYXNzaW5nlHSUjBZ0dXQtYmF0dGVyaWVzLWluY2x1ZGVklChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1iYXR0ZXJpZXMtaW5jbHVkZWSUjBJCYXR0ZXJpZXMgSW5jbHVkZWSUdJSMEnR1dC1iaW5hcnktZm9ybWF0c5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LWJpbmFyeS1mb3JtYXRzlIwnV29ya2luZyB3aXRoIEJpbmFyeSBEYXRhIFJlY29yZCBMYXlvdXRzlHSUjAl0dXQtYnJlYWuUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtYnJlYWuUjDhicmVhayBhbmQgY29udGludWUgU3RhdGVtZW50cywgYW5kIGVsc2UgQ2xhdXNlcyBvbiBMb29wc5R0lIwNdHV0LWJyaWVmdG91cpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIuaHRtbCN0dXQtYnJpZWZ0b3VylIwiQnJpZWYgVG91ciBvZiB0aGUgU3RhbmRhcmQgTGlicmFyeZR0lIwQdHV0LWJyaWVmdG91cnR3b5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LWJyaWVmdG91cnR3b5SMLkJyaWVmIFRvdXIgb2YgdGhlIFN0YW5kYXJkIExpYnJhcnkg4oCUIFBhcnQgSUmUdJSMDnR1dC1jYWxjdWxhdG9ylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5odG1sI3R1dC1jYWxjdWxhdG9ylIwcVXNpbmcgUHl0aG9uIGFzIGEgQ2FsY3VsYXRvcpR0lIwgdHV0LWNsYXNzLWFuZC1pbnN0YW5jZS12YXJpYWJsZXOUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1jbGFzcy1hbmQtaW5zdGFuY2UtdmFyaWFibGVzlIwcQ2xhc3MgYW5kIEluc3RhbmNlIFZhcmlhYmxlc5R0lIwTdHV0LWNsYXNzZGVmaW5pdGlvbpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWNsYXNzZGVmaW5pdGlvbpSMF0NsYXNzIERlZmluaXRpb24gU3ludGF4lHSUjAt0dXQtY2xhc3Nlc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWNsYXNzZXOUjAdDbGFzc2VzlHSUjBB0dXQtY2xhc3NvYmplY3RzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtY2xhc3NvYmplY3RzlIwNQ2xhc3MgT2JqZWN0c5R0lIwLdHV0LWNsZWFudXCUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZXJyb3JzLmh0bWwjdHV0LWNsZWFudXCUjBlEZWZpbmluZyBDbGVhbi11cCBBY3Rpb25zlHSUjBB0dXQtY2xlYW51cC13aXRolChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2Vycm9ycy5odG1sI3R1dC1jbGVhbnVwLXdpdGiUjBtQcmVkZWZpbmVkIENsZWFuLXVwIEFjdGlvbnOUdJSMD3R1dC1jb2RpbmdzdHlsZZQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1jb2RpbmdzdHlsZZSMGEludGVybWV6em86IENvZGluZyBTdHlsZZR0lIwadHV0LWNvbW1hbmQtbGluZS1hcmd1bWVudHOUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LWNvbW1hbmQtbGluZS1hcmd1bWVudHOUjBZDb21tYW5kIExpbmUgQXJndW1lbnRzlHSUjA50dXQtY29tbWVudGFyeZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5odG1sI3R1dC1jb21tZW50YXJ5lIwrQWx0ZXJuYXRpdmVzIHRvIHRoZSBJbnRlcmFjdGl2ZSBJbnRlcnByZXRlcpR0lIwNdHV0LWNvbXBhcmluZ5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1jb21wYXJpbmeUjCNDb21wYXJpbmcgU2VxdWVuY2VzIGFuZCBPdGhlciBUeXBlc5R0lIwOdHV0LWNvbmRpdGlvbnOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtY29uZGl0aW9uc5SMEk1vcmUgb24gQ29uZGl0aW9uc5R0lIwNdHV0LWN1c3RvbWl6ZZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9hcHBlbmRpeC5odG1sI3R1dC1jdXN0b21pemWUjBlUaGUgQ3VzdG9taXphdGlvbiBNb2R1bGVzlHSUjBR0dXQtZGF0YS1jb21wcmVzc2lvbpQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIuaHRtbCN0dXQtZGF0YS1jb21wcmVzc2lvbpSMEERhdGEgQ29tcHJlc3Npb26UdJSME3R1dC1kYXRlcy1hbmQtdGltZXOUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LWRhdGVzLWFuZC10aW1lc5SMD0RhdGVzIGFuZCBUaW1lc5R0lIwOdHV0LWRlY2ltYWwtZnCUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvc3RkbGliMi5odG1sI3R1dC1kZWNpbWFsLWZwlIwhRGVjaW1hbCBGbG9hdGluZyBQb2ludCBBcml0aG1ldGljlHSUjA90dXQtZGVmYXVsdGFyZ3OUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtZGVmYXVsdGFyZ3OUjBdEZWZhdWx0IEFyZ3VtZW50IFZhbHVlc5R0lIwMdHV0LWRlZmluaW5nlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWRlZmluaW5nlIwaTW9yZSBvbiBEZWZpbmluZyBGdW5jdGlvbnOUdJSMB3R1dC1kZWyUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtZGVslIwRVGhlIGRlbCBzdGF0ZW1lbnSUdJSMEHR1dC1kaWN0aW9uYXJpZXOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtZGljdGlvbmFyaWVzlIwMRGljdGlvbmFyaWVzlHSUjAd0dXQtZGlylChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtZGlylIwSVGhlIGRpcigpIEZ1bmN0aW9ulHSUjA50dXQtZG9jc3RyaW5nc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jb250cm9sZmxvdy5odG1sI3R1dC1kb2NzdHJpbmdzlIwVRG9jdW1lbnRhdGlvbiBTdHJpbmdzlHSUjAl0dXQtZXJyb3KUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvYXBwZW5kaXguaHRtbCN0dXQtZXJyb3KUjA5FcnJvciBIYW5kbGluZ5R0lIwKdHV0LWVycm9yc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtZXJyb3JzlIwVRXJyb3JzIGFuZCBFeGNlcHRpb25zlHSUjA50dXQtZXhjZXB0aW9uc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtZXhjZXB0aW9uc5SMCkV4Y2VwdGlvbnOUdJSMDXR1dC1mLXN0cmluZ3OUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvaW5wdXRvdXRwdXQuaHRtbCN0dXQtZi1zdHJpbmdzlIwZRm9ybWF0dGVkIFN0cmluZyBMaXRlcmFsc5R0lIwSdHV0LWZpbGUtd2lsZGNhcmRzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1maWxlLXdpbGRjYXJkc5SMDkZpbGUgV2lsZGNhcmRzlHSUjA90dXQtZmlsZW1ldGhvZHOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvaW5wdXRvdXRwdXQuaHRtbCN0dXQtZmlsZW1ldGhvZHOUjBdNZXRob2RzIG9mIEZpbGUgT2JqZWN0c5R0lIwJdHV0LWZpbGVzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2lucHV0b3V0cHV0Lmh0bWwjdHV0LWZpbGVzlIwZUmVhZGluZyBhbmQgV3JpdGluZyBGaWxlc5R0lIwQdHV0LWZpcnN0Y2xhc3Nlc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWZpcnN0Y2xhc3Nlc5SMF0EgRmlyc3QgTG9vayBhdCBDbGFzc2VzlHSUjA50dXQtZmlyc3RzdGVwc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9pbnRyb2R1Y3Rpb24uaHRtbCN0dXQtZmlyc3RzdGVwc5SMH0ZpcnN0IFN0ZXBzIFRvd2FyZHMgUHJvZ3JhbW1pbmeUdJSMB3R1dC1mb3KUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtZm9ylIwOZm9yIFN0YXRlbWVudHOUdJSMDnR1dC1mb3JtYXR0aW5nlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2lucHV0b3V0cHV0Lmh0bWwjdHV0LWZvcm1hdHRpbmeUjBlGYW5jaWVyIE91dHB1dCBGb3JtYXR0aW5nlHSUjAx0dXQtZnAtZXJyb3KUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZmxvYXRpbmdwb2ludC5odG1sI3R1dC1mcC1lcnJvcpSMFFJlcHJlc2VudGF0aW9uIEVycm9ylHSUjA10dXQtZnAtaXNzdWVzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQuaHRtbCN0dXQtZnAtaXNzdWVzlIwyRmxvYXRpbmcgUG9pbnQgQXJpdGhtZXRpYzogIElzc3VlcyBhbmQgTGltaXRhdGlvbnOUdJSMDXR1dC1mdW5jdGlvbnOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtZnVuY3Rpb25zlIwSRGVmaW5pbmcgRnVuY3Rpb25zlHSUjA50dXQtZ2VuZXJhdG9yc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWdlbmVyYXRvcnOUjApHZW5lcmF0b3JzlHSUjAt0dXQtZ2VuZXhwc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWdlbmV4cHOUjBVHZW5lcmF0b3IgRXhwcmVzc2lvbnOUdJSMDHR1dC1oYW5kbGluZ5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtaGFuZGxpbmeUjBNIYW5kbGluZyBFeGNlcHRpb25zlHSUjAZ0dXQtaWaUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtaWaUjA1pZiBTdGF0ZW1lbnRzlHSUjAx0dXQtaW5mb3JtYWyUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LWluZm9ybWFslIwiQW4gSW5mb3JtYWwgSW50cm9kdWN0aW9uIHRvIFB5dGhvbpR0lIwPdHV0LWluaGVyaXRhbmNllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtaW5oZXJpdGFuY2WUjAtJbmhlcml0YW5jZZR0lIwTdHV0LWluc3RhbmNlb2JqZWN0c5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LWluc3RhbmNlb2JqZWN0c5SMEEluc3RhbmNlIE9iamVjdHOUdJSMC3R1dC1pbnRlcmFjlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWwjdHV0LWludGVyYWOUjBBJbnRlcmFjdGl2ZSBNb2RllHSUjA90dXQtaW50ZXJhY3RpbmeUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvaW50ZXJhY3RpdmUuaHRtbCN0dXQtaW50ZXJhY3RpbmeUjDJJbnRlcmFjdGl2ZSBJbnB1dCBFZGl0aW5nIGFuZCBIaXN0b3J5IFN1YnN0aXR1dGlvbpR0lIwPdHV0LWludGVyYWN0aXZllChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWludGVyYWN0aXZllIwQSW50ZXJhY3RpdmUgTW9kZZR0lIwTdHV0LWludGVybmV0LWFjY2Vzc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIuaHRtbCN0dXQtaW50ZXJuZXQtYWNjZXNzlIwPSW50ZXJuZXQgQWNjZXNzlHSUjAp0dXQtaW50ZXJwlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LWludGVycJSMI1RoZSBJbnRlcnByZXRlciBhbmQgSXRzIEVudmlyb25tZW50lHSUjAl0dXQtaW50cm+UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvYXBwZXRpdGUuaHRtbCN0dXQtaW50cm+UjBZXaGV0dGluZyBZb3VyIEFwcGV0aXRllHSUjAx0dXQtaW52b2tpbmeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvaW50ZXJwcmV0ZXIuaHRtbCN0dXQtaW52b2tpbmeUjBhJbnZva2luZyB0aGUgSW50ZXJwcmV0ZXKUdJSMBnR1dC1pb5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9pbnB1dG91dHB1dC5odG1sI3R1dC1pb5SMEElucHV0IGFuZCBPdXRwdXSUdJSMDXR1dC1pdGVyYXRvcnOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1pdGVyYXRvcnOUjAlJdGVyYXRvcnOUdJSMCHR1dC1qc29ulChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2lucHV0b3V0cHV0Lmh0bWwjdHV0LWpzb26UjCBTYXZpbmcgc3RydWN0dXJlZCBkYXRhIHdpdGgganNvbpR0lIwPdHV0LWtleWJpbmRpbmdzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWwjdHV0LWtleWJpbmRpbmdzlIwiVGFiIENvbXBsZXRpb24gYW5kIEhpc3RvcnkgRWRpdGluZ5R0lIwPdHV0LWtleXdvcmRhcmdzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LWtleXdvcmRhcmdzlIwRS2V5d29yZCBBcmd1bWVudHOUdJSMCnR1dC1sYW1iZGGUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtbGFtYmRhlIwSTGFtYmRhIEV4cHJlc3Npb25zlHSUjA50dXQtbGlzdC10b29sc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LWxpc3QtdG9vbHOUjBxUb29scyBmb3IgV29ya2luZyB3aXRoIExpc3RzlHSUjA10dXQtbGlzdGNvbXBzlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LWxpc3Rjb21wc5SME0xpc3QgQ29tcHJlaGVuc2lvbnOUdJSMCXR1dC1saXN0c5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9pbnRyb2R1Y3Rpb24uaHRtbCN0dXQtbGlzdHOUjAVMaXN0c5R0lIwTdHV0LWxpc3RzLWFzLXF1ZXVlc5QoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1saXN0cy1hcy1xdWV1ZXOUjBVVc2luZyBMaXN0cyBhcyBRdWV1ZXOUdJSME3R1dC1saXN0cy1hcy1zdGFja3OUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtbGlzdHMtYXMtc3RhY2tzlIwVVXNpbmcgTGlzdHMgYXMgU3RhY2tzlHSUjAt0dXQtbG9nZ2luZ5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LWxvZ2dpbmeUjAdMb2dnaW5nlHSUjA50dXQtbG9vcGlkaW9tc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1sb29waWRpb21zlIwSTG9vcGluZyBUZWNobmlxdWVzlHSUjA90dXQtbWF0aGVtYXRpY3OUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvc3RkbGliLmh0bWwjdHV0LW1hdGhlbWF0aWNzlIwLTWF0aGVtYXRpY3OUdJSMEXR1dC1tZXRob2RvYmplY3RzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtbWV0aG9kb2JqZWN0c5SMDk1ldGhvZCBPYmplY3RzlHSUjAt0dXQtbW9kdWxlc5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9tb2R1bGVzLmh0bWwjdHV0LW1vZHVsZXOUjAdNb2R1bGVzlHSUjBR0dXQtbW9kdWxlc2Fzc2NyaXB0c5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9tb2R1bGVzLmh0bWwjdHV0LW1vZHVsZXNhc3NjcmlwdHOUjBxFeGVjdXRpbmcgbW9kdWxlcyBhcyBzY3JpcHRzlHSUjA90dXQtbW9yZWNvbnRyb2yUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtbW9yZWNvbnRyb2yUjBdNb3JlIENvbnRyb2wgRmxvdyBUb29sc5R0lIwNdHV0LW1vcmVsaXN0c5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1tb3JlbGlzdHOUjA1Nb3JlIG9uIExpc3RzlHSUjA90dXQtbW9yZW1vZHVsZXOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvbW9kdWxlcy5odG1sI3R1dC1tb3JlbW9kdWxlc5SMD01vcmUgb24gTW9kdWxlc5R0lIwTdHV0LW11bHRpLXRocmVhZGluZ5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIyLmh0bWwjdHV0LW11bHRpLXRocmVhZGluZ5SMD011bHRpLXRocmVhZGluZ5R0lIwMdHV0LW11bHRpcGxllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtbXVsdGlwbGWUjBRNdWx0aXBsZSBJbmhlcml0YW5jZZR0lIwLdHV0LW51bWJlcnOUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvaW50cm9kdWN0aW9uLmh0bWwjdHV0LW51bWJlcnOUjAdOdW1iZXJzlHSUjAp0dXQtb2JqZWN0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtb2JqZWN0lIweQSBXb3JkIEFib3V0IE5hbWVzIGFuZCBPYmplY3RzlHSUjAh0dXQtb2Rkc5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LW9kZHOUjA1PZGRzIGFuZCBFbmRzlHSUjBB0dXQtb3MtaW50ZXJmYWNllChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1vcy1pbnRlcmZhY2WUjBpPcGVyYXRpbmcgU3lzdGVtIEludGVyZmFjZZR0lIwVdHV0LW91dHB1dC1mb3JtYXR0aW5nlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtb3V0cHV0LWZvcm1hdHRpbmeUjBFPdXRwdXQgRm9ybWF0dGluZ5R0lIwMdHV0LXBhY2thZ2VzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtcGFja2FnZXOUjAhQYWNrYWdlc5R0lIwIdHV0LXBhc3OUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtcGFzc5SMD3Bhc3MgU3RhdGVtZW50c5R0lIwbdHV0LXBlcmZvcm1hbmNlLW1lYXN1cmVtZW50lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1wZXJmb3JtYW5jZS1tZWFzdXJlbWVudJSMF1BlcmZvcm1hbmNlIE1lYXN1cmVtZW50lHSUjBN0dXQtcGtnLWltcG9ydC1zdGFylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL21vZHVsZXMuaHRtbCN0dXQtcGtnLWltcG9ydC1zdGFylIwaSW1wb3J0aW5nICogRnJvbSBhIFBhY2thZ2WUdJSMC3R1dC1wcml2YXRllChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NsYXNzZXMuaHRtbCN0dXQtcHJpdmF0ZZSMEVByaXZhdGUgVmFyaWFibGVzlHSUjBN0dXQtcXVhbGl0eS1jb250cm9slChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1xdWFsaXR5LWNvbnRyb2yUjA9RdWFsaXR5IENvbnRyb2yUdJSMC3R1dC1yYWlzaW5nlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2Vycm9ycy5odG1sI3R1dC1yYWlzaW5nlIwSUmFpc2luZyBFeGNlcHRpb25zlHSUjAl0dXQtcmFuZ2WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY29udHJvbGZsb3cuaHRtbCN0dXQtcmFuZ2WUjBRUaGUgcmFuZ2UoKSBGdW5jdGlvbpR0lIwLdHV0LXJlbWFya3OUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1yZW1hcmtzlIwOUmFuZG9tIFJlbWFya3OUdJSMEHR1dC1zY29wZWV4YW1wbGWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvY2xhc3Nlcy5odG1sI3R1dC1zY29wZWV4YW1wbGWUjB1TY29wZXMgYW5kIE5hbWVzcGFjZXMgRXhhbXBsZZR0lIwKdHV0LXNjb3Blc5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9jbGFzc2VzLmh0bWwjdHV0LXNjb3Blc5SMHFB5dGhvbiBTY29wZXMgYW5kIE5hbWVzcGFjZXOUdJSMC3R1dC1zY3JpcHRzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWwjdHV0LXNjcmlwdHOUjBlFeGVjdXRhYmxlIFB5dGhvbiBTY3JpcHRzlHSUjA50dXQtc2VhcmNocGF0aJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9tb2R1bGVzLmh0bWwjdHV0LXNlYXJjaHBhdGiUjBZUaGUgTW9kdWxlIFNlYXJjaCBQYXRolHSUjAh0dXQtc2V0c5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5odG1sI3R1dC1zZXRzlIwEU2V0c5R0lIwTdHV0LXNvdXJjZS1lbmNvZGluZ5QoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9pbnRlcnByZXRlci5odG1sI3R1dC1zb3VyY2UtZW5jb2RpbmeUjBRTb3VyY2UgQ29kZSBFbmNvZGluZ5R0lIwTdHV0LXN0YW5kYXJkbW9kdWxlc5QoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9tb2R1bGVzLmh0bWwjdHV0LXN0YW5kYXJkbW9kdWxlc5SMEFN0YW5kYXJkIE1vZHVsZXOUdJSMC3R1dC1zdGFydHVwlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2FwcGVuZGl4Lmh0bWwjdHV0LXN0YXJ0dXCUjBxUaGUgSW50ZXJhY3RpdmUgU3RhcnR1cCBGaWxllHSUjAp0dXQtc3RkZXJylChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1zdGRlcnKUjDBFcnJvciBPdXRwdXQgUmVkaXJlY3Rpb24gYW5kIFByb2dyYW0gVGVybWluYXRpb26UdJSMEXR1dC1zdHJpbmctZm9ybWF0lChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2lucHV0b3V0cHV0Lmh0bWwjdHV0LXN0cmluZy1mb3JtYXSUjBpUaGUgU3RyaW5nIGZvcm1hdCgpIE1ldGhvZJR0lIwbdHV0LXN0cmluZy1wYXR0ZXJuLW1hdGNoaW5nlChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYi5odG1sI3R1dC1zdHJpbmctcGF0dGVybi1tYXRjaGluZ5SMF1N0cmluZyBQYXR0ZXJuIE1hdGNoaW5nlHSUjAt0dXQtc3RyaW5nc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9pbnRyb2R1Y3Rpb24uaHRtbCN0dXQtc3RyaW5nc5SMB1N0cmluZ3OUdJSMDnR1dC1zdHJ1Y3R1cmVzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLmh0bWwjdHV0LXN0cnVjdHVyZXOUjA9EYXRhIFN0cnVjdHVyZXOUdJSMEHR1dC1zeW50YXhlcnJvcnOUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZXJyb3JzLmh0bWwjdHV0LXN5bnRheGVycm9yc5SMDVN5bnRheCBFcnJvcnOUdJSMDnR1dC10ZW1wbGF0aW5nlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtdGVtcGxhdGluZ5SMClRlbXBsYXRpbmeUdJSMCnR1dC10dXBsZXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbCN0dXQtdHVwbGVzlIwUVHVwbGVzIGFuZCBTZXF1ZW5jZXOUdJSMF3R1dC11bnBhY2tpbmctYXJndW1lbnRzlChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWwjdHV0LXVucGFja2luZy1hcmd1bWVudHOUjBhVbnBhY2tpbmcgQXJndW1lbnQgTGlzdHOUdJSMEnR1dC11c2VyZXhjZXB0aW9uc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9lcnJvcnMuaHRtbCN0dXQtdXNlcmV4Y2VwdGlvbnOUjBdVc2VyLWRlZmluZWQgRXhjZXB0aW9uc5R0lIwJdHV0LXVzaW5nlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2ludGVycHJldGVyLmh0bWwjdHV0LXVzaW5nlIwcVXNpbmcgdGhlIFB5dGhvbiBJbnRlcnByZXRlcpR0lIwIdHV0LXZlbnaUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvdmVudi5odG1sI3R1dC12ZW52lIwhVmlydHVhbCBFbnZpcm9ubWVudHMgYW5kIFBhY2thZ2VzlHSUjBN0dXQtd2Vhay1yZWZlcmVuY2VzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYjIuaHRtbCN0dXQtd2Vhay1yZWZlcmVuY2VzlIwPV2VhayBSZWZlcmVuY2VzlHSUjAt0dXQtd2hhdG5vd5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC93aGF0bm93Lmh0bWwjdHV0LXdoYXRub3eUjAlXaGF0IE5vdz+UdJSMDnR1dG9yaWFsLWluZGV4lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2luZGV4Lmh0bWwjdHV0b3JpYWwtaW5kZXiUjBNUaGUgUHl0aG9uIFR1dG9yaWFslHSUjBV0eXBlLXNwZWNpZmljLW1ldGhvZHOUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3R5cGUtc3BlY2lmaWMtbWV0aG9kc5RqDY8AAHSUjAx0eXBlLXN0cnVjdHOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdHlwZW9iai5odG1sI3R5cGUtc3RydWN0c5SMDFR5cGUgT2JqZWN0c5R0lIwNdHlwZWJ5dGVhcnJheZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZWJ5dGVhcnJheZSMEUJ5dGVhcnJheSBPYmplY3RzlHSUjAl0eXBlYnl0ZXOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVieXRlc5SMDUJ5dGVzIE9iamVjdHOUdJSMEnR5cGVjb250ZXh0bWFuYWdlcpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZWNvbnRleHRtYW5hZ2VylIwVQ29udGV4dCBNYW5hZ2VyIFR5cGVzlHSUjBB0eXBlZGVmLWV4YW1wbGVzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGVvYmouaHRtbCN0eXBlZGVmLWV4YW1wbGVzlIwIRXhhbXBsZXOUdJSMCHR5cGVpdGVylChqCo8AAGoLjwAAjDhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlaXRlcpSMDkl0ZXJhdG9yIFR5cGVzlHSUjA50eXBlbWVtb3J5dmlld5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZW1lbW9yeXZpZXeUjAxNZW1vcnkgVmlld3OUdJSMC3R5cGVvYmplY3RzlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbCN0eXBlb2JqZWN0c5SMDFR5cGUgT2JqZWN0c5R0lIwFdHlwZXOUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2RhdGFtb2RlbC5odG1sI3R5cGVzlIwbVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5lHSUjAl0eXBlcy1zZXSUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzLXNldJSMHFNldCBUeXBlcyDigJQgc2V0LCBmcm96ZW5zZXSUdJSMDnR5cGVzZnVuY3Rpb25zlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc2Z1bmN0aW9uc5SMCUZ1bmN0aW9uc5R0lIwNdHlwZXNpbnRlcm5hbJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNpbnRlcm5hbJSMEEludGVybmFsIE9iamVjdHOUdJSMDHR5cGVzbWFwcGluZ5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNtYXBwaW5nlIwWTWFwcGluZyBUeXBlcyDigJQgZGljdJR0lIwMdHlwZXNtZXRob2RzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc21ldGhvZHOUjAdNZXRob2RzlHSUjAx0eXBlc21vZHVsZXOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzbW9kdWxlc5SMB01vZHVsZXOUdJSMDHR5cGVzbnVtZXJpY5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNudW1lcmljlIwlTnVtZXJpYyBUeXBlcyDigJQgaW50LCBmbG9hdCwgY29tcGxleJR0lIwMdHlwZXNvYmplY3RzlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc29iamVjdHOUjBtDbGFzc2VzIGFuZCBDbGFzcyBJbnN0YW5jZXOUdJSMCnR5cGVzb3RoZXKUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzb3RoZXKUjBRPdGhlciBCdWlsdC1pbiBUeXBlc5R0lIwIdHlwZXNzZXGUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzc2VxlIwlU2VxdWVuY2UgVHlwZXMg4oCUIGxpc3QsIHR1cGxlLCByYW5nZZR0lIwPdHlwZXNzZXEtY29tbW9ulChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc3NlcS1jb21tb26UjBpDb21tb24gU2VxdWVuY2UgT3BlcmF0aW9uc5R0lIwSdHlwZXNzZXEtaW1tdXRhYmxllChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc3NlcS1pbW11dGFibGWUjBhJbW11dGFibGUgU2VxdWVuY2UgVHlwZXOUdJSMDXR5cGVzc2VxLWxpc3SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzc2VxLWxpc3SUjAVMaXN0c5R0lIwQdHlwZXNzZXEtbXV0YWJsZZQoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjdHlwZXNzZXEtbXV0YWJsZZSMFk11dGFibGUgU2VxdWVuY2UgVHlwZXOUdJSMDnR5cGVzc2VxLXJhbmdllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbCN0eXBlc3NlcS1yYW5nZZSMBlJhbmdlc5R0lIwOdHlwZXNzZXEtdHVwbGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdGR0eXBlcy5odG1sI3R5cGVzc2VxLXR1cGxllIwGVHVwbGVzlHSUjAV1bmFyeZQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCN1bmFyeZSMJ1VuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9uc5R0lIwFdW5kb2OUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmRvYy5odG1sI3VuZG9jlIwUVW5kb2N1bWVudGVkIE1vZHVsZXOUdJSMDXVuaWNvZGUtaG93dG+UKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vdW5pY29kZS5odG1sI3VuaWNvZGUtaG93dG+UjA1Vbmljb2RlIEhPV1RPlHSUjBF1bmljb2RlZXhjZXB0aW9uc5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9leGNlcHRpb25zLmh0bWwjdW5pY29kZWV4Y2VwdGlvbnOUjBlVbmljb2RlIEV4Y2VwdGlvbiBPYmplY3RzlHSUjBZ1bmljb2RlbWV0aG9kc2FuZHNsb3RzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCN1bmljb2RlbWV0aG9kc2FuZHNsb3RzlIwaTWV0aG9kcyBhbmQgU2xvdCBGdW5jdGlvbnOUdJSMDnVuaWNvZGVvYmplY3RzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3VuaWNvZGUuaHRtbCN1bmljb2Rlb2JqZWN0c5SMGlVuaWNvZGUgT2JqZWN0cyBhbmQgQ29kZWNzlHSUjB91bml0dGVzdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNllChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5pdHRlc3QuaHRtbCN1bml0dGVzdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNllIwWQ29tbWFuZC1MaW5lIEludGVyZmFjZZR0lIwRdW5pdHRlc3QtY29udGVudHOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LWNvbnRlbnRzlIwVQ2xhc3NlcyBhbmQgZnVuY3Rpb25zlHSUjBh1bml0dGVzdC1taW5pbWFsLWV4YW1wbGWUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LW1pbmltYWwtZXhhbXBsZZSMDUJhc2ljIGV4YW1wbGWUdJSMEHVuaXR0ZXN0LXNlY3Rpb26UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi43Lmh0bWwjdW5pdHRlc3Qtc2VjdGlvbpSMGFVwZGF0ZWQgbW9kdWxlOiB1bml0dGVzdJR0lIwRdW5pdHRlc3Qtc2tpcHBpbmeUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI3VuaXR0ZXN0LXNraXBwaW5nlIwkU2tpcHBpbmcgdGVzdHMgYW5kIGV4cGVjdGVkIGZhaWx1cmVzlHSUjBd1bml0dGVzdC10ZXN0LWRpc2NvdmVyeZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdW5pdHRlc3QtdGVzdC1kaXNjb3ZlcnmUjA5UZXN0IERpc2NvdmVyeZR0lIwEdW5peJQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXguaHRtbCN1bml4lIwWVW5peCBTcGVjaWZpYyBTZXJ2aWNlc5R0lIwXdW5rbm93bi1oYW5kbGVyLW9iamVjdHOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3Vua25vd24taGFuZGxlci1vYmplY3RzlIwWVW5rbm93bkhhbmRsZXIgT2JqZWN0c5R0lIwXdXBncmFkaW5nLW9wdHBhcnNlLWNvZGWUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmdwYXJzZS5odG1sI3VwZ3JhZGluZy1vcHRwYXJzZS1jb2RllIwXVXBncmFkaW5nIG9wdHBhcnNlIGNvZGWUdJSMD3VybGxpYi1leGFtcGxlc5QoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0Lmh0bWwjdXJsbGliLWV4YW1wbGVzlGoNjwAAdJSMDHVybGxpYi1ob3d0b5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by91cmxsaWIyLmh0bWwjdXJsbGliLWhvd3RvlIw3SE9XVE8gRmV0Y2ggSW50ZXJuZXQgUmVzb3VyY2VzIFVzaW5nIFRoZSB1cmxsaWIgUGFja2FnZZR0lIwXdXJsbGliLXJlcXVlc3QtZXhhbXBsZXOUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1sI3VybGxpYi1yZXF1ZXN0LWV4YW1wbGVzlIwIRXhhbXBsZXOUdJSMFnVybHBhcnNlLXJlc3VsdC1vYmplY3SUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbCN1cmxwYXJzZS1yZXN1bHQtb2JqZWN0lIwYU3RydWN0dXJlZCBQYXJzZSBSZXN1bHRzlHSUjA91c2VmdWwtaGFuZGxlcnOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy5odG1sI3VzZWZ1bC1oYW5kbGVyc5SMD1VzZWZ1bCBIYW5kbGVyc5R0lIwFdXNpbmeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbXBvcnRsaWIubWV0YWRhdGEuaHRtbCN1c2luZ5SMGFVzaW5nIGltcG9ydGxpYi5tZXRhZGF0YZR0lIwOdXNpbmctY2Fwc3VsZXOUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL2V4dGVuZGluZy5odG1sI3VzaW5nLWNhcHN1bGVzlIwpUHJvdmlkaW5nIGEgQyBBUEkgZm9yIGFuIEV4dGVuc2lvbiBNb2R1bGWUdJSMC3VzaW5nLWluZGV4lChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2luZGV4Lmh0bWwjdXNpbmctaW5kZXiUjBZQeXRob24gU2V0dXAgYW5kIFVzYWdllHSUjBB1c2luZy1vbi1jbWRsaW5llChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1jbWRsaW5llIwMQ29tbWFuZCBsaW5llHSUjBB1c2luZy1vbi1lbnZ2YXJzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1lbnZ2YXJzlIwVRW52aXJvbm1lbnQgdmFyaWFibGVzlHSUjBB1c2luZy1vbi1nZW5lcmFslChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCN1c2luZy1vbi1nZW5lcmFslIwcQ29tbWFuZCBsaW5lIGFuZCBlbnZpcm9ubWVudJR0lIwadXNpbmctb24taW50ZXJmYWNlLW9wdGlvbnOUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI3VzaW5nLW9uLWludGVyZmFjZS1vcHRpb25zlIwRSW50ZXJmYWNlIG9wdGlvbnOUdJSMDHVzaW5nLW9uLW1hY5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9tYWMuaHRtbCN1c2luZy1vbi1tYWOUjBtVc2luZyBQeXRob24gb24gYSBNYWNpbnRvc2iUdJSMFXVzaW5nLW9uLW1pc2Mtb3B0aW9uc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjdXNpbmctb24tbWlzYy1vcHRpb25zlIwVTWlzY2VsbGFuZW91cyBvcHRpb25zlHSUjA11c2luZy1vbi11bml4lChqCo8AAGoLjwAAjDdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL3VuaXguaHRtbCN1c2luZy1vbi11bml4lIweVXNpbmcgUHl0aG9uIG9uIFVuaXggcGxhdGZvcm1zlHSUjBF1c2luZy1vbi13YXJuaW5nc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjdXNpbmctb24td2FybmluZ3OUag2PAAB0lIwQdXNpbmctb24td2luZG93c5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWwjdXNpbmctb24td2luZG93c5SMF1VzaW5nIFB5dGhvbiBvbiBXaW5kb3dzlHSUjBR1c2luZy10aGUtY2dpLW1vZHVsZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NnaS5odG1sI3VzaW5nLXRoZS1jZ2ktbW9kdWxllIwUVXNpbmcgdGhlIGNnaSBtb2R1bGWUdJSMEXVzaW5nLXRoZS10cmFja2VylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2J1Z3MuaHRtbCN1c2luZy10aGUtdHJhY2tlcpSMHlVzaW5nIHRoZSBQeXRob24gaXNzdWUgdHJhY2tlcpR0lIwOdXRjLWZvcm1hdHRpbmeUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vbG9nZ2luZy1jb29rYm9vay5odG1sI3V0Yy1mb3JtYXR0aW5nlIwyRm9ybWF0dGluZyB0aW1lcyB1c2luZyBVVEMgKEdNVCkgdmlhIGNvbmZpZ3VyYXRpb26UdJSMCXV0aWxpdGllc5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91dGlsaXRpZXMuaHRtbCN1dGlsaXRpZXOUjAlVdGlsaXRpZXOUdJSMDHV1aWQtZXhhbXBsZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3V1aWQuaHRtbCN1dWlkLWV4YW1wbGWUjAdFeGFtcGxllHSUjAt2YWx1ZS10eXBlc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dpbnJlZy5odG1sI3ZhbHVlLXR5cGVzlIwLVmFsdWUgVHlwZXOUdJSMCHZlbnYtYXBplChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdmVudi5odG1sI3ZlbnYtYXBplIwDQVBJlHSUjAh2ZW52LWRlZpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ZlbnYuaHRtbCN2ZW52LWRlZpRqDY8AAHSUjAd2ZXJzaW9ulChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLm1ldGFkYXRhLmh0bWwjdmVyc2lvbpSMFURpc3RyaWJ1dGlvbiB2ZXJzaW9uc5R0lIwIdmVyeWhpZ2iUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbCN2ZXJ5aGlnaJSMGVRoZSBWZXJ5IEhpZ2ggTGV2ZWwgTGF5ZXKUdJSMDHZpZXctb2JqZWN0c5QoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21zaWxpYi5odG1sI3ZpZXctb2JqZWN0c5SMDFZpZXcgT2JqZWN0c5R0lIwSd2FybmluZy1jYXRlZ29yaWVzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5nLWNhdGVnb3JpZXOUjBJXYXJuaW5nIENhdGVnb3JpZXOUdJSMIHdhcm5pbmctY2F0ZWdvcmllcy1hcy1leGNlcHRpb25zlChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1sI3dhcm5pbmctY2F0ZWdvcmllcy1hcy1leGNlcHRpb25zlIwIV2FybmluZ3OUdJSMD3dhcm5pbmctZGlzYWJsZZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZy1kaXNhYmxllIwdT3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBmaWx0ZXKUdJSMDndhcm5pbmctZmlsdGVylChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5nLWZpbHRlcpSME1RoZSBXYXJuaW5ncyBGaWx0ZXKUdJSMEXdhcm5pbmctZnVuY3Rpb25zlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2FybmluZ3MuaHRtbCN3YXJuaW5nLWZ1bmN0aW9uc5SME0F2YWlsYWJsZSBGdW5jdGlvbnOUdJSMD3dhcm5pbmctaWdub3JlZJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZy1pZ25vcmVklIwuVXBkYXRpbmcgQ29kZSBGb3IgTmV3IFZlcnNpb25zIG9mIERlcGVuZGVuY2llc5R0lIwQd2FybmluZy1zdXBwcmVzc5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhcm5pbmdzLmh0bWwjd2FybmluZy1zdXBwcmVzc5SMIFRlbXBvcmFyaWx5IFN1cHByZXNzaW5nIFdhcm5pbmdzlHSUjA93YXJuaW5nLXRlc3RpbmeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXJuaW5ncy5odG1sI3dhcm5pbmctdGVzdGluZ5SMEFRlc3RpbmcgV2FybmluZ3OUdJSMFHdhdGNoZWQtZmlsZS1oYW5kbGVylChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5odG1sI3dhdGNoZWQtZmlsZS1oYW5kbGVylIwSV2F0Y2hlZEZpbGVIYW5kbGVylHSUjBF3YXZlLXJlYWQtb2JqZWN0c5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dhdmUuaHRtbCN3YXZlLXJlYWQtb2JqZWN0c5SMEVdhdmVfcmVhZCBPYmplY3RzlHSUjBJ3YXZlLXdyaXRlLW9iamVjdHOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXZlLmh0bWwjd2F2ZS13cml0ZS1vYmplY3RzlIwSV2F2ZV93cml0ZSBPYmplY3RzlHSUjA93ZWFrcmVmLWV4YW1wbGWUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWwjd2Vha3JlZi1leGFtcGxllIwHRXhhbXBsZZR0lIwPd2Vha3JlZi1vYmplY3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2Vha3JlZi5odG1sI3dlYWtyZWYtb2JqZWN0c5SMFldlYWsgUmVmZXJlbmNlIE9iamVjdHOUdJSMD3dlYWtyZWYtc3VwcG9ydJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvbmV3dHlwZXMuaHRtbCN3ZWFrcmVmLXN1cHBvcnSUjBZXZWFrIFJlZmVyZW5jZSBTdXBwb3J0lHSUjA53ZWFrcmVmb2JqZWN0c5QoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS93ZWFrcmVmLmh0bWwjd2Vha3JlZm9iamVjdHOUjBZXZWFrIFJlZmVyZW5jZSBPYmplY3RzlHSUjBB3aGF0cy1uZXctaW4tMi42lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNi5odG1sI3doYXRzLW5ldy1pbi0yLTaUjBpXaGF04oCZcyBOZXcgaW4gUHl0aG9uIDIuNpR0lIwQd2hhdHNuZXctYXN5bmNpb5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldy1hc3luY2lvlIwHYXN5bmNpb5R0lIwSd2hhdHNuZXctZW5zdXJlcGlwlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNC5odG1sI3doYXRzbmV3LWVuc3VyZXBpcJSMCWVuc3VyZXBpcJR0lIwNd2hhdHNuZXctZW51bZQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldy1lbnVtlIwEZW51bZR0lIwOd2hhdHNuZXctaW5kZXiUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvaW5kZXguaHRtbCN3aGF0c25ldy1pbmRleJSMFldoYXTigJlzIE5ldyBpbiBQeXRob26UdJSMFndoYXRzbmV3LWlzb2xhdGVkLW1vZGWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctaXNvbGF0ZWQtbW9kZZRqDY8AAHSUjBF3aGF0c25ldy1scnVjYWNoZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjUuaHRtbCN3aGF0c25ldy1scnVjYWNoZZRqDY8AAHSUjBJ3aGF0c25ldy1tYXJzaGFsLTOUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctbWFyc2hhbC0zlIwHbWFyc2hhbJR0lIwgd2hhdHNuZXctbXVsdGlwcm9jZXNzaW5nLW5vLWZvcmuUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctbXVsdGlwcm9jZXNzaW5nLW5vLWZvcmuUag2PAAB0lIwUd2hhdHNuZXctb3JkZXJlZGRpY3SUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy41Lmh0bWwjd2hhdHNuZXctb3JkZXJlZGRpY3SUag2PAAB0lIwQd2hhdHNuZXctcGF0aGxpYpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldy1wYXRobGlilIwHcGF0aGxpYpR0lIwQd2hhdHNuZXctcGVwLTQzNpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldy1wZXAtNDM2lIwYUEVQIDQzNjogQXJndW1lbnQgQ2xpbmljlHSUjBB3aGF0c25ldy1wZXAtNDQylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNC5odG1sI3doYXRzbmV3LXBlcC00NDKUjCFQRVAgNDQyOiBTYWZlIE9iamVjdCBGaW5hbGl6YXRpb26UdJSMEHdoYXRzbmV3LXBlcC00NDWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctcGVwLTQ0NZSMM1BFUCA0NDU6IEN1c3RvbWl6YXRpb24gb2YgQ1B5dGhvbiBNZW1vcnkgQWxsb2NhdG9yc5R0lIwQd2hhdHNuZXctcGVwLTQ0NpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldy1wZXAtNDQ2lIw7UEVQIDQ0NjogTmV3bHkgQ3JlYXRlZCBGaWxlIERlc2NyaXB0b3JzIEFyZSBOb24tSW5oZXJpdGFibGWUdJSMEHdoYXRzbmV3LXBlcC00NDiUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy41Lmh0bWwjd2hhdHNuZXctcGVwLTQ0OJSMLlBFUCA0NDggLSBBZGRpdGlvbmFsIFVucGFja2luZyBHZW5lcmFsaXphdGlvbnOUdJSMEHdoYXRzbmV3LXBlcC00NTGUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctcGVwLTQ1MZSMMFBFUCA0NTE6IEEgTW9kdWxlU3BlYyBUeXBlIGZvciB0aGUgSW1wb3J0IFN5c3RlbZR0lIwQd2hhdHNuZXctcGVwLTQ1M5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldy1wZXAtNDUzlIw+UEVQIDQ1MzogRXhwbGljaXQgQm9vdHN0cmFwcGluZyBvZiBQSVAgaW4gUHl0aG9uIEluc3RhbGxhdGlvbnOUdJSMEHdoYXRzbmV3LXBlcC00NTaUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctcGVwLTQ1NpSMMlBFUCA0NTY6IFNlY3VyZSBhbmQgSW50ZXJjaGFuZ2VhYmxlIEhhc2ggQWxnb3JpdGhtlHSUjBB3aGF0c25ldy1wZXAtNDYxlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNS5odG1sI3doYXRzbmV3LXBlcC00NjGUjDxQRVAgNDYxIC0gcGVyY2VudCBmb3JtYXR0aW5nIHN1cHBvcnQgZm9yIGJ5dGVzIGFuZCBieXRlYXJyYXmUdJSMEHdoYXRzbmV3LXBlcC00NjWUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy41Lmh0bWwjd2hhdHNuZXctcGVwLTQ2NZSMPlBFUCA0NjUgLSBBIGRlZGljYXRlZCBpbmZpeCBvcGVyYXRvciBmb3IgbWF0cml4IG11bHRpcGxpY2F0aW9ulHSUjBB3aGF0c25ldy1wZXAtNDcxlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNS5odG1sI3doYXRzbmV3LXBlcC00NzGUjEpQRVAgNDcxIC0gb3Muc2NhbmRpcigpIGZ1bmN0aW9uIOKAkyBhIGJldHRlciBhbmQgZmFzdGVyIGRpcmVjdG9yeSBpdGVyYXRvcpR0lIwQd2hhdHNuZXctcGVwLTQ3NZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjUuaHRtbCN3aGF0c25ldy1wZXAtNDc1lIwuUEVQIDQ3NTogUmV0cnkgc3lzdGVtIGNhbGxzIGZhaWxpbmcgd2l0aCBFSU5UUpR0lIwQd2hhdHNuZXctcGVwLTQ3OZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjUuaHRtbCN3aGF0c25ldy1wZXAtNDc5lIw4UEVQIDQ3OTogQ2hhbmdlIFN0b3BJdGVyYXRpb24gaGFuZGxpbmcgaW5zaWRlIGdlbmVyYXRvcnOUdJSMEHdoYXRzbmV3LXBlcC00ODSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy41Lmh0bWwjd2hhdHNuZXctcGVwLTQ4NJSMFFBFUCA0ODQgLSBUeXBlIEhpbnRzlHSUjBB3aGF0c25ldy1wZXAtNDg1lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNS5odG1sI3doYXRzbmV3LXBlcC00ODWUjDRQRVAgNDg1OiBBIGZ1bmN0aW9uIGZvciB0ZXN0aW5nIGFwcHJveGltYXRlIGVxdWFsaXR5lHSUjBB3aGF0c25ldy1wZXAtNDg2lChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNS5odG1sI3doYXRzbmV3LXBlcC00ODaUjD9QRVAgNDg2OiBNYWtlIHRoZSBQeXRob24gTGF1bmNoZXIgYXdhcmUgb2YgdmlydHVhbCBlbnZpcm9ubWVudHOUdJSMEHdoYXRzbmV3LXBlcC00ODiUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy41Lmh0bWwjd2hhdHNuZXctcGVwLTQ4OJSMIVBFUCA0ODg6IEVsaW1pbmF0aW9uIG9mIFBZTyBmaWxlc5R0lIwQd2hhdHNuZXctcGVwLTQ4OZQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjUuaHRtbCN3aGF0c25ldy1wZXAtNDg5lIw0UEVQIDQ4OTogTXVsdGktcGhhc2UgZXh0ZW5zaW9uIG1vZHVsZSBpbml0aWFsaXphdGlvbpR0lIwQd2hhdHNuZXctcGVwLTQ5MpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjUuaHRtbCN3aGF0c25ldy1wZXAtNDkylIwwUEVQIDQ5MiAtIENvcm91dGluZXMgd2l0aCBhc3luYyBhbmQgYXdhaXQgc3ludGF4lHSUjBN3aGF0c25ldy1wcm90b2NvbC00lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNC5odG1sI3doYXRzbmV3LXByb3RvY29sLTSUjAZwaWNrbGWUdJSMEndoYXRzbmV3LXNlbGVjdG9yc5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldy1zZWxlY3RvcnOUjAlzZWxlY3RvcnOUdJSMF3doYXRzbmV3LXNpbmdsZWRpc3BhdGNolChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNC5odG1sI3doYXRzbmV3LXNpbmdsZWRpc3BhdGNolGoNjwAAdJSMFXdoYXRzbmV3LXNzbG1lbW9yeWJpb5QoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjUuaHRtbCN3aGF0c25ldy1zc2xtZW1vcnliaW+UjBJNZW1vcnkgQklPIFN1cHBvcnSUdJSME3doYXRzbmV3LXN0YXRpc3RpY3OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctc3RhdGlzdGljc5SMCnN0YXRpc3RpY3OUdJSME3doYXRzbmV3LXN1YnByb2Nlc3OUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy41Lmh0bWwjd2hhdHNuZXctc3VicHJvY2Vzc5SMCnN1YnByb2Nlc3OUdJSMEndoYXRzbmV3LXRscy0xMS0xMpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldy10bHMtMTEtMTKUag2PAAB0lIwSd2hhdHNuZXctdHJhY2ViYWNrlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNS5odG1sI3doYXRzbmV3LXRyYWNlYmFja5SMCXRyYWNlYmFja5R0lIwUd2hhdHNuZXctdHJhY2VtYWxsb2OUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctdHJhY2VtYWxsb2OUjAt0cmFjZW1hbGxvY5R0lIwPd2hhdHNuZXctemlwYXBwlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNS5odG1sI3doYXRzbmV3LXppcGFwcJSMBnppcGFwcJR0lIwTd2hhdHNuZXcyNy1jYXBzdWxlc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjcuaHRtbCN3aGF0c25ldzI3LWNhcHN1bGVzlIwIQ2Fwc3VsZXOUdJSME3doYXRzbmV3MjctcHl0aG9uMzGUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi43Lmh0bWwjd2hhdHNuZXcyNy1weXRob24zMZSMGVRoZSBGdXR1cmUgZm9yIFB5dGhvbiAyLniUdJSMDndoYXRzbmV3MzQtc25plChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNC5odG1sI3doYXRzbmV3MzQtc25plGoNjwAAdJSMFXdoYXRzbmV3MzQtc3NsY29udGV4dJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldzM0LXNzbGNvbnRleHSUag2PAAB0lIwZd2hhdHNuZXczNC13aW4tY2VydC1zdG9yZZQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCN3aGF0c25ldzM0LXdpbi1jZXJ0LXN0b3JllGoNjwAAdJSMFndoYXRzbmV3MzYtY29tcGFjdGRpY3SUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWwjd2hhdHNuZXczNi1jb21wYWN0ZGljdJSMF05ldyBkaWN0IGltcGxlbWVudGF0aW9ulHSUjBF3aGF0c25ldzM2LXBlcDQ2OJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjYuaHRtbCN3aGF0c25ldzM2LXBlcDQ2OJSMKlBFUCA0Njg6IFByZXNlcnZpbmcgS2V5d29yZCBBcmd1bWVudCBPcmRlcpR0lIwRd2hhdHNuZXczNi1wZXA0ODeUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWwjd2hhdHNuZXczNi1wZXA0ODeUjDBQRVAgNDg3OiBTaW1wbGVyIGN1c3RvbWl6YXRpb24gb2YgY2xhc3MgY3JlYXRpb26UdJSMHXdoYXRzbmV3MzYtcGVwNDg3LWRlc2NyaXB0b3JzlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNi5odG1sI3doYXRzbmV3MzYtcGVwNDg3LWRlc2NyaXB0b3JzlIwpUEVQIDQ4NzogRGVzY3JpcHRvciBQcm90b2NvbCBFbmhhbmNlbWVudHOUdJSMEXdoYXRzbmV3MzYtcGVwNDk1lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNi5odG1sI3doYXRzbmV3MzYtcGVwNDk1lIwiUEVQIDQ5NTogTG9jYWwgVGltZSBEaXNhbWJpZ3VhdGlvbpR0lIwRd2hhdHNuZXczNi1wZXA0OTiUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWwjd2hhdHNuZXczNi1wZXA0OTiUjCJQRVAgNDk4OiBGb3JtYXR0ZWQgc3RyaW5nIGxpdGVyYWxzlHSUjBF3aGF0c25ldzM2LXBlcDUwNpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjYuaHRtbCN3aGF0c25ldzM2LXBlcDUwNpSMB3NlY3JldHOUdJSMEXdoYXRzbmV3MzYtcGVwNTE1lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNi5odG1sI3doYXRzbmV3MzYtcGVwNTE1lIwoUEVQIDUxNTogVW5kZXJzY29yZXMgaW4gTnVtZXJpYyBMaXRlcmFsc5R0lIwRd2hhdHNuZXczNi1wZXA1MTmUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWwjd2hhdHNuZXczNi1wZXA1MTmUjCtQRVAgNTE5OiBBZGRpbmcgYSBmaWxlIHN5c3RlbSBwYXRoIHByb3RvY29slHSUjBF3aGF0c25ldzM2LXBlcDUyMJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjYuaHRtbCN3aGF0c25ldzM2LXBlcDUyMJSMNFBFUCA1MjA6IFByZXNlcnZpbmcgQ2xhc3MgQXR0cmlidXRlIERlZmluaXRpb24gT3JkZXKUdJSMEXdoYXRzbmV3MzYtcGVwNTIzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNi5odG1sI3doYXRzbmV3MzYtcGVwNTIzlIwxUEVQIDUyMzogQWRkaW5nIGEgZnJhbWUgZXZhbHVhdGlvbiBBUEkgdG8gQ1B5dGhvbpR0lIwRd2hhdHNuZXczNi1wZXA1MjWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWwjd2hhdHNuZXczNi1wZXA1MjWUjCBQRVAgNTI1OiBBc3luY2hyb25vdXMgR2VuZXJhdG9yc5R0lIwRd2hhdHNuZXczNi1wZXA1MjaUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWwjd2hhdHNuZXczNi1wZXA1MjaUjChQRVAgNTI2OiBTeW50YXggZm9yIHZhcmlhYmxlIGFubm90YXRpb25zlHSUjBF3aGF0c25ldzM2LXBlcDUyOJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjYuaHRtbCN3aGF0c25ldzM2LXBlcDUyOJSMMVBFUCA1Mjg6IENoYW5nZSBXaW5kb3dzIGNvbnNvbGUgZW5jb2RpbmcgdG8gVVRGLTiUdJSMEXdoYXRzbmV3MzYtcGVwNTI5lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNi5odG1sI3doYXRzbmV3MzYtcGVwNTI5lIw0UEVQIDUyOTogQ2hhbmdlIFdpbmRvd3MgZmlsZXN5c3RlbSBlbmNvZGluZyB0byBVVEYtOJR0lIwRd2hhdHNuZXczNi1wZXA1MzCUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWwjd2hhdHNuZXczNi1wZXA1MzCUjCRQRVAgNTMwOiBBc3luY2hyb25vdXMgQ29tcHJlaGVuc2lvbnOUdJSMF3doYXRzbmV3MzYtcHl0aG9ubWFsbG9jlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNi5odG1sI3doYXRzbmV3MzYtcHl0aG9ubWFsbG9jlIwhUFlUSE9OTUFMTE9DIGVudmlyb25tZW50IHZhcmlhYmxllHSUjBR3aGF0c25ldzM2LXRyYWNlYmFja5QoagqPAABqC48AAIxAaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjYuaHRtbCN3aGF0c25ldzM2LXRyYWNlYmFja5SMCXRyYWNlYmFja5R0lIwSd2hhdHNuZXczNi10cmFjaW5nlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNi5odG1sI3doYXRzbmV3MzYtdHJhY2luZ5SMJERUcmFjZSBhbmQgU3lzdGVtVGFwIHByb2Jpbmcgc3VwcG9ydJR0lIwRd2hhdHNuZXczNi10eXBpbmeUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWwjd2hhdHNuZXczNi10eXBpbmeUjAZ0eXBpbmeUdJSMHXdoYXRzbmV3MzctYXN5bmNpby1kZXByZWNhdGVklChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNy5odG1sI3doYXRzbmV3MzctYXN5bmNpby1kZXByZWNhdGVklIwHYXN5bmNpb5R0lIwXd2hhdHNuZXczNy1hc3luY2lvLXBlcmaUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy43Lmh0bWwjd2hhdHNuZXczNy1hc3luY2lvLXBlcmaUag2PAAB0lIwSd2hhdHNuZXczNy1kZXZtb2RllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNy5odG1sI3doYXRzbmV3MzctZGV2bW9kZZSMIERldmVsb3BtZW50IFJ1bnRpbWUgTW9kZTogLVggZGV2lHSUjBF3aGF0c25ldzM3LXBlcDUzOJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjcuaHRtbCN3aGF0c25ldzM3LXBlcDUzOJSMIVBFUCA1Mzg6IExlZ2FjeSBDIExvY2FsZSBDb2VyY2lvbpR0lIwRd2hhdHNuZXczNy1wZXA1MzmUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy43Lmh0bWwjd2hhdHNuZXczNy1wZXA1MzmUjCtQRVAgNTM5OiBOZXcgQyBBUEkgZm9yIFRocmVhZC1Mb2NhbCBTdG9yYWdllHSUjBF3aGF0c25ldzM3LXBlcDU0MJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjcuaHRtbCN3aGF0c25ldzM3LXBlcDU0MJSMIlBFUCA1NDA6IEZvcmNlZCBVVEYtOCBSdW50aW1lIE1vZGWUdJSMEXdoYXRzbmV3MzctcGVwNTQ1lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNy5odG1sI3doYXRzbmV3MzctcGVwNTQ1lIwqUEVQIDU0NTogUHl0aG9uIERvY3VtZW50YXRpb24gVHJhbnNsYXRpb25zlHSUjBF3aGF0c25ldzM3LXBlcDU1MpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjcuaHRtbCN3aGF0c25ldzM3LXBlcDU1MpSMHlBFUCA1NTI6IEhhc2gtYmFzZWQgLnB5YyBGaWxlc5R0lIwRd2hhdHNuZXczNy1wZXA1NTOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy43Lmh0bWwjd2hhdHNuZXczNy1wZXA1NTOUjB5QRVAgNTUzOiBCdWlsdC1pbiBicmVha3BvaW50KCmUdJSMEXdoYXRzbmV3MzctcGVwNTU3lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNy5odG1sI3doYXRzbmV3MzctcGVwNTU3lIwLZGF0YWNsYXNzZXOUdJSMEXdoYXRzbmV3MzctcGVwNTYwlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNy5odG1sI3doYXRzbmV3MzctcGVwNTYwlIw5UEVQIDU2MDogQ29yZSBTdXBwb3J0IGZvciB0eXBpbmcgbW9kdWxlIGFuZCBHZW5lcmljIFR5cGVzlHSUjBF3aGF0c25ldzM3LXBlcDU2MpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjcuaHRtbCN3aGF0c25ldzM3LXBlcDU2MpSMNVBFUCA1NjI6IEN1c3RvbWl6YXRpb24gb2YgQWNjZXNzIHRvIE1vZHVsZSBBdHRyaWJ1dGVzlHSUjBF3aGF0c25ldzM3LXBlcDU2M5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjcuaHRtbCN3aGF0c25ldzM3LXBlcDU2M5SMLFBFUCA1NjM6IFBvc3Rwb25lZCBFdmFsdWF0aW9uIG9mIEFubm90YXRpb25zlHSUjBF3aGF0c25ldzM3LXBlcDU2NJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjcuaHRtbCN3aGF0c25ldzM3LXBlcDU2NJSMNlBFUCA1NjQ6IE5ldyBUaW1lIEZ1bmN0aW9ucyBXaXRoIE5hbm9zZWNvbmQgUmVzb2x1dGlvbpR0lIwRd2hhdHNuZXczNy1wZXA1NjWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy43Lmh0bWwjd2hhdHNuZXczNy1wZXA1NjWUjCxQRVAgNTY1OiBTaG93IERlcHJlY2F0aW9uV2FybmluZyBpbiBfX21haW5fX5R0lIwRd2hhdHNuZXczNy1wZXA1NjeUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy43Lmh0bWwjd2hhdHNuZXczNy1wZXA1NjeUjAtjb250ZXh0dmFyc5R0lIwPd2hhdHNuZXczNy1wZXJmlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNy5odG1sI3doYXRzbmV3MzctcGVyZpSMDU9wdGltaXphdGlvbnOUdJSMEndoYXRzbmV3MzdfYXN5bmNpb5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjcuaHRtbCN3aGF0c25ldzM3LWFzeW5jaW+UjAdhc3luY2lvlHSUjB53aGF0c25ldzM3X2ltcG9ydGxpYl9yZXNvdXJjZXOUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy43Lmh0bWwjd2hhdHNuZXczNy1pbXBvcnRsaWItcmVzb3VyY2VzlIwTaW1wb3J0bGliLnJlc291cmNlc5R0lIwdd2hhdHNuZXdfZW1haWxfY29udGVudG1hbmFnZXKUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjd2hhdHNuZXctZW1haWwtY29udGVudG1hbmFnZXKUag2PAAB0lIwOd2hlcmUtdG8tcGF0Y2iUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5tb2NrLmh0bWwjd2hlcmUtdG8tcGF0Y2iUjA5XaGVyZSB0byBwYXRjaJR0lIwFd2hpbGWUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjd2hpbGWUjBNUaGUgd2hpbGUgc3RhdGVtZW50lHSUjAp3aGl0ZXNwYWNllChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjd2hpdGVzcGFjZZSMGVdoaXRlc3BhY2UgYmV0d2VlbiB0b2tlbnOUdJSMLndoeS1jYW4tdC1pLXVzZS1hbi1hc3NpZ25tZW50LWluLWFuLWV4cHJlc3Npb26UKGoKjwAAaguPAACMWGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZmFxL2Rlc2lnbi5odG1sI3doeS1jYW4tdC1pLXVzZS1hbi1hc3NpZ25tZW50LWluLWFuLWV4cHJlc3Npb26UjDFXaHkgY2Fu4oCZdCBJIHVzZSBhbiBhc3NpZ25tZW50IGluIGFuIGV4cHJlc3Npb24/lHSUjAh3aHktc2VsZpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9mYXEvZGVzaWduLmh0bWwjd2h5LXNlbGaUjEdXaHkgbXVzdCDigJhzZWxm4oCZIGJlIHVzZWQgZXhwbGljaXRseSBpbiBtZXRob2QgZGVmaW5pdGlvbnMgYW5kIGNhbGxzP5R0lIwMd2luLWNvb2tib29rlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy93aW5kb3dzLmh0bWwjd2luLWNvb2tib29rlIwTQSBDb29rYm9vayBBcHByb2FjaJR0lIwId2luLWRsbHOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL3dpbmRvd3MuaHRtbCN3aW4tZGxsc5SMFlVzaW5nIERMTHMgaW4gUHJhY3RpY2WUdJSMDXdpbi11dGY4LW1vZGWUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI3dpbi11dGY4LW1vZGWUjApVVEYtOCBtb2RllHSUjBJ3aW5kb3dzLWVtYmVkZGFibGWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvd2luZG93cy5odG1sI3dpbmRvd3MtZW1iZWRkYWJsZZSMFlRoZSBlbWJlZGRhYmxlIHBhY2thZ2WUdJSMC3dpbmRvd3MtZmFxlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2ZhcS93aW5kb3dzLmh0bWwjd2luZG93cy1mYXGUjBVQeXRob24gb24gV2luZG93cyBGQVGUdJSMDHdpbmRvd3MtZnVsbJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWwjd2luZG93cy1mdWxslIwSVGhlIGZ1bGwgaW5zdGFsbGVylHSUjA13aW5kb3dzLW51Z2V0lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL3dpbmRvd3MuaHRtbCN3aW5kb3dzLW51Z2V0lIwWVGhlIG51Z2V0Lm9yZyBwYWNrYWdlc5R0lIwQd2luZG93cy1wYXRoLW1vZJQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWwjd2luZG93cy1wYXRoLW1vZJSMHUZpbmRpbmcgdGhlIFB5dGhvbiBleGVjdXRhYmxllHSUjA13aW5kb3dzLXN0b3JllChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL3dpbmRvd3MuaHRtbCN3aW5kb3dzLXN0b3JllIwbVGhlIE1pY3Jvc29mdCBTdG9yZSBwYWNrYWdllHSUjAR3aXRolChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI3dpdGiUjBJUaGUgd2l0aCBzdGF0ZW1lbnSUdJSMCndpdGgtbG9ja3OUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aHJlYWRpbmcuaHRtbCN3aXRoLWxvY2tzlIw9VXNpbmcgbG9ja3MsIGNvbmRpdGlvbnMsIGFuZCBzZW1hcGhvcmVzIGluIHRoZSB3aXRoIHN0YXRlbWVudJR0lIwMd3JpdGVyLWltcGxzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZm9ybWF0dGVyLmh0bWwjd3JpdGVyLWltcGxzlIwWV3JpdGVyIEltcGxlbWVudGF0aW9uc5R0lIwQd3JpdGVyLWludGVyZmFjZZQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Zvcm1hdHRlci5odG1sI3dyaXRlci1pbnRlcmZhY2WUjBRUaGUgV3JpdGVyIEludGVyZmFjZZR0lIwNd3JpdGluZy10ZXN0c5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN3cml0aW5nLXRlc3RzlIwnV3JpdGluZyBVbml0IFRlc3RzIGZvciB0aGUgdGVzdCBwYWNrYWdllHSUjA54ZHItZXhjZXB0aW9uc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1sI3hkci1leGNlcHRpb25zlIwKRXhjZXB0aW9uc5R0lIwSeGRyLXBhY2tlci1vYmplY3RzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRyLXBhY2tlci1vYmplY3RzlIwOUGFja2VyIE9iamVjdHOUdJSMFHhkci11bnBhY2tlci1vYmplY3RzlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveGRybGliLmh0bWwjeGRyLXVucGFja2VyLW9iamVjdHOUjBBVbnBhY2tlciBPYmplY3RzlHSUjAN4bWyUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuaHRtbCN4bWyUjBZYTUwgUHJvY2Vzc2luZyBNb2R1bGVzlHSUjBN4bWwtdnVsbmVyYWJpbGl0aWVzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmh0bWwjeG1sLXZ1bG5lcmFiaWxpdGllc5SME1hNTCB2dWxuZXJhYmlsaXRpZXOUdJSMEXhtbHBhcnNlci1vYmplY3RzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1sI3htbHBhcnNlci1vYmplY3RzlIwRWE1MUGFyc2VyIE9iamVjdHOUdJSMEXhtbHJlYWRlci1vYmplY3RzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbCN4bWxyZWFkZXItb2JqZWN0c5SMEVhNTFJlYWRlciBPYmplY3RzlHSUjBV4bWxycGMtY2xpZW50LWV4YW1wbGWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuY2xpZW50Lmh0bWwjeG1scnBjLWNsaWVudC1leGFtcGxllIwXRXhhbXBsZSBvZiBDbGllbnQgVXNhZ2WUdJSMBXlpZWxklChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCN5aWVsZJSME1RoZSB5aWVsZCBzdGF0ZW1lbnSUdJSMCXlpZWxkZXhwcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCN5aWVsZGV4cHKUjBFZaWVsZCBleHByZXNzaW9uc5R0lIwPemVyb21xLWhhbmRsZXJzlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbCN6ZXJvbXEtaGFuZGxlcnOUjCtTdWJjbGFzc2luZyBRdWV1ZUhhbmRsZXIgLSBhIFplcm9NUSBleGFtcGxllHSUjB16aXBhcHAtY29tbWFuZC1saW5lLWludGVyZmFjZZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGFwcC5odG1sI3ppcGFwcC1jb21tYW5kLWxpbmUtaW50ZXJmYWNllIwWQ29tbWFuZC1MaW5lIEludGVyZmFjZZR0lIwPemlwYXBwLWV4YW1wbGVzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwYXBwLmh0bWwjemlwYXBwLWV4YW1wbGVzlIwIRXhhbXBsZXOUdJSMEXppcGFwcC1weXRob24tYXBplChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwYXBwLmh0bWwjemlwYXBwLXB5dGhvbi1hcGmUjApQeXRob24gQVBJlHSUjCF6aXBhcHAtc3BlY2lmeWluZy10aGUtaW50ZXJwcmV0ZXKUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBhcHAuaHRtbCN6aXBhcHAtc3BlY2lmeWluZy10aGUtaW50ZXJwcmV0ZXKUjBpTcGVjaWZ5aW5nIHRoZSBJbnRlcnByZXRlcpR0lIwTemlwZmlsZS1jb21tYW5kbGluZZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbCN6aXBmaWxlLWNvbW1hbmRsaW5llIwWQ29tbWFuZC1MaW5lIEludGVyZmFjZZR0lIwPemlwZmlsZS1vYmplY3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGZpbGUtb2JqZWN0c5SMD1ppcEZpbGUgT2JqZWN0c5R0lIwSemlwaW1wb3J0LWV4YW1wbGVzlChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWwjemlwaW1wb3J0LWV4YW1wbGVzlIwIRXhhbXBsZXOUdJSME3ppcGltcG9ydGVyLW9iamVjdHOUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96aXBpbXBvcnQuaHRtbCN6aXBpbXBvcnRlci1vYmplY3RzlIwTemlwaW1wb3J0ZXIgT2JqZWN0c5R0lIwPemlwaW5mby1vYmplY3RzlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwZmlsZS5odG1sI3ppcGluZm8tb2JqZWN0c5SMD1ppcEluZm8gT2JqZWN0c5R0lHWMCnN0ZDpvcGNvZGWUfZQojBFCRUZPUkVfQVNZTkNfV0lUSJQoagqPAABqC48AAIxDaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CRUZPUkVfQVNZTkNfV0lUSJRqDY8AAHSUjA1CRUdJTl9GSU5BTExZlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJFR0lOX0ZJTkFMTFmUag2PAAB0lIwKQklOQVJZX0FERJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfQURElGoNjwAAdJSMCkJJTkFSWV9BTkSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX0FORJRqDY8AAHSUjBNCSU5BUllfRkxPT1JfRElWSURFlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9GTE9PUl9ESVZJREWUag2PAAB0lIwNQklOQVJZX0xTSElGVJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfTFNISUZUlGoNjwAAdJSMFkJJTkFSWV9NQVRSSVhfTVVMVElQTFmUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX01BVFJJWF9NVUxUSVBMWZRqDY8AAHSUjA1CSU5BUllfTU9EVUxPlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9NT0RVTE+Uag2PAAB0lIwPQklOQVJZX01VTFRJUExZlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJJTkFSWV9NVUxUSVBMWZRqDY8AAHSUjAlCSU5BUllfT1KUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX09SlGoNjwAAdJSMDEJJTkFSWV9QT1dFUpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfUE9XRVKUag2PAAB0lIwNQklOQVJZX1JTSElGVJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfUlNISUZUlGoNjwAAdJSMDUJJTkFSWV9TVUJTQ1KUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1NVQlNDUpRqDY8AAHSUjA9CSU5BUllfU1VCVFJBQ1SUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQklOQVJZX1NVQlRSQUNUlGoNjwAAdJSMEkJJTkFSWV9UUlVFX0RJVklERZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfVFJVRV9ESVZJREWUag2PAAB0lIwKQklOQVJZX1hPUpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CSU5BUllfWE9SlGoNjwAAdJSME0JVSUxEX0NPTlNUX0tFWV9NQVCUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfQ09OU1RfS0VZX01BUJRqDY8AAHSUjApCVUlMRF9MSVNUlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX0xJU1SUag2PAAB0lIwRQlVJTERfTElTVF9VTlBBQ0uUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfTElTVF9VTlBBQ0uUag2PAAB0lIwJQlVJTERfTUFQlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX01BUJRqDY8AAHSUjBBCVUlMRF9NQVBfVU5QQUNLlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX01BUF9VTlBBQ0uUag2PAAB0lIwaQlVJTERfTUFQX1VOUEFDS19XSVRIX0NBTEyUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfTUFQX1VOUEFDS19XSVRIX0NBTEyUag2PAAB0lIwJQlVJTERfU0VUlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX1NFVJRqDY8AAHSUjBBCVUlMRF9TRVRfVU5QQUNLlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX1NFVF9VTlBBQ0uUag2PAAB0lIwLQlVJTERfU0xJQ0WUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfU0xJQ0WUag2PAAB0lIwMQlVJTERfU1RSSU5HlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUJVSUxEX1NUUklOR5RqDY8AAHSUjAtCVUlMRF9UVVBMRZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1CVUlMRF9UVVBMRZRqDY8AAHSUjBJCVUlMRF9UVVBMRV9VTlBBQ0uUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfVFVQTEVfVU5QQUNLlGoNjwAAdJSMHEJVSUxEX1RVUExFX1VOUEFDS19XSVRIX0NBTEyUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQlVJTERfVFVQTEVfVU5QQUNLX1dJVEhfQ0FMTJRqDY8AAHSUjAxDQUxMX0ZJTkFMTFmUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQ0FMTF9GSU5BTExZlGoNjwAAdJSMDUNBTExfRlVOQ1RJT06UKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQ0FMTF9GVU5DVElPTpRqDY8AAHSUjBBDQUxMX0ZVTkNUSU9OX0VYlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUNBTExfRlVOQ1RJT05fRViUag2PAAB0lIwQQ0FMTF9GVU5DVElPTl9LV5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1DQUxMX0ZVTkNUSU9OX0tXlGoNjwAAdJSMC0NBTExfTUVUSE9ElChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUNBTExfTUVUSE9ElGoNjwAAdJSMCkNPTVBBUkVfT1CUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtQ09NUEFSRV9PUJRqDY8AAHSUjAtERUxFVEVfQVRUUpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfQVRUUpRqDY8AAHSUjAxERUxFVEVfREVSRUaUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtREVMRVRFX0RFUkVGlGoNjwAAdJSMC0RFTEVURV9GQVNUlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURFTEVURV9GQVNUlGoNjwAAdJSMDURFTEVURV9HTE9CQUyUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtREVMRVRFX0dMT0JBTJRqDY8AAHSUjAtERUxFVEVfTkFNRZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ERUxFVEVfTkFNRZRqDY8AAHSUjA1ERUxFVEVfU1VCU0NSlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURFTEVURV9TVUJTQ1KUag2PAAB0lIwHRFVQX1RPUJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1EVVBfVE9QlGoNjwAAdJSMC0RVUF9UT1BfVFdPlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLURVUF9UT1BfVFdPlGoNjwAAdJSMDUVORF9BU1lOQ19GT1KUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtRU5EX0FTWU5DX0ZPUpRqDY8AAHSUjAtFTkRfRklOQUxMWZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1FTkRfRklOQUxMWZRqDY8AAHSUjAxFWFRFTkRFRF9BUkeUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtRVhURU5ERURfQVJHlGoNjwAAdJSMDEZPUk1BVF9WQUxVRZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1GT1JNQVRfVkFMVUWUag2PAAB0lIwIRk9SX0lURVKUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtRk9SX0lURVKUag2PAAB0lIwJR0VUX0FJVEVSlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUdFVF9BSVRFUpRqDY8AAHSUjAlHRVRfQU5FWFSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtR0VUX0FORVhUlGoNjwAAdJSMDUdFVF9BV0FJVEFCTEWUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtR0VUX0FXQUlUQUJMRZRqDY8AAHSUjAhHRVRfSVRFUpQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1HRVRfSVRFUpRqDY8AAHSUjBNHRVRfWUlFTERfRlJPTV9JVEVSlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUdFVF9ZSUVMRF9GUk9NX0lURVKUag2PAAB0lIwNSEFWRV9BUkdVTUVOVJQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1IQVZFX0FSR1VNRU5UlGoNjwAAdJSMC0lNUE9SVF9GUk9NlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlNUE9SVF9GUk9NlGoNjwAAdJSMC0lNUE9SVF9OQU1FlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlNUE9SVF9OQU1FlGoNjwAAdJSMC0lNUE9SVF9TVEFSlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlNUE9SVF9TVEFSlGoNjwAAdJSMC0lOUExBQ0VfQURElChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfQURElGoNjwAAdJSMC0lOUExBQ0VfQU5ElChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfQU5ElGoNjwAAdJSMFElOUExBQ0VfRkxPT1JfRElWSURFlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfRkxPT1JfRElWSURFlGoNjwAAdJSMDklOUExBQ0VfTFNISUZUlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfTFNISUZUlGoNjwAAdJSMF0lOUExBQ0VfTUFUUklYX01VTFRJUExZlChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfTUFUUklYX01VTFRJUExZlGoNjwAAdJSMDklOUExBQ0VfTU9EVUxPlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfTU9EVUxPlGoNjwAAdJSMEElOUExBQ0VfTVVMVElQTFmUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9NVUxUSVBMWZRqDY8AAHSUjApJTlBMQUNFX09SlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfT1KUag2PAAB0lIwNSU5QTEFDRV9QT1dFUpQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1JTlBMQUNFX1BPV0VSlGoNjwAAdJSMDklOUExBQ0VfUlNISUZUlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfUlNISUZUlGoNjwAAdJSMEElOUExBQ0VfU1VCVFJBQ1SUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9TVUJUUkFDVJRqDY8AAHSUjBNJTlBMQUNFX1RSVUVfRElWSURFlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUlOUExBQ0VfVFJVRV9ESVZJREWUag2PAAB0lIwLSU5QTEFDRV9YT1KUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSU5QTEFDRV9YT1KUag2PAAB0lIwNSlVNUF9BQlNPTFVURZQoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1KVU1QX0FCU09MVVRFlGoNjwAAdJSMDEpVTVBfRk9SV0FSRJQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1KVU1QX0ZPUldBUkSUag2PAAB0lIwUSlVNUF9JRl9GQUxTRV9PUl9QT1CUKGoKjwAAaguPAACMRmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtSlVNUF9JRl9GQUxTRV9PUl9QT1CUag2PAAB0lIwTSlVNUF9JRl9UUlVFX09SX1BPUJQoagqPAABqC48AAIxFaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1KVU1QX0lGX1RSVUVfT1JfUE9QlGoNjwAAdJSMC0xJU1RfQVBQRU5ElChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxJU1RfQVBQRU5ElGoNjwAAdJSMCUxPQURfQVRUUpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0FUVFKUag2PAAB0lIwQTE9BRF9CVUlMRF9DTEFTU5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0JVSUxEX0NMQVNTlGoNjwAAdJSMD0xPQURfQ0xBU1NERVJFRpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0NMQVNTREVSRUaUag2PAAB0lIwMTE9BRF9DTE9TVVJFlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfQ0xPU1VSRZRqDY8AAHSUjApMT0FEX0NPTlNUlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfQ09OU1SUag2PAAB0lIwKTE9BRF9ERVJFRpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0RFUkVGlGoNjwAAdJSMCUxPQURfRkFTVJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1MT0FEX0ZBU1SUag2PAAB0lIwLTE9BRF9HTE9CQUyUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTE9BRF9HTE9CQUyUag2PAAB0lIwLTE9BRF9NRVRIT0SUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTE9BRF9NRVRIT0SUag2PAAB0lIwJTE9BRF9OQU1FlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLUxPQURfTkFNRZRqDY8AAHSUjA1NQUtFX0ZVTkNUSU9OlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLU1BS0VfRlVOQ1RJT06Uag2PAAB0lIwHTUFQX0FERJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1NQVBfQURElGoNjwAAdJSMA05PUJQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1OT1CUag2PAAB0lIwJUE9QX0JMT0NLlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVBPUF9CTE9DS5RqDY8AAHSUjApQT1BfRVhDRVBUlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVBPUF9FWENFUFSUag2PAAB0lIwLUE9QX0ZJTkFMTFmUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUE9QX0ZJTkFMTFmUag2PAAB0lIwRUE9QX0pVTVBfSUZfRkFMU0WUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUE9QX0pVTVBfSUZfRkFMU0WUag2PAAB0lIwQUE9QX0pVTVBfSUZfVFJVRZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1QT1BfSlVNUF9JRl9UUlVFlGoNjwAAdJSMB1BPUF9UT1CUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUE9QX1RPUJRqDY8AAHSUjApQUklOVF9FWFBSlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVBSSU5UX0VYUFKUag2PAAB0lIwNUkFJU0VfVkFSQVJHU5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1SQUlTRV9WQVJBUkdTlGoNjwAAdJSMDFJFVFVSTl9WQUxVRZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1SRVRVUk5fVkFMVUWUag2PAAB0lIwIUk9UX0ZPVVKUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtUk9UX0ZPVVKUag2PAAB0lIwJUk9UX1RIUkVFlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVJPVF9USFJFRZRqDY8AAHSUjAdST1RfVFdPlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVJPVF9UV0+Uag2PAAB0lIwRU0VUVVBfQU5OT1RBVElPTlOUKGoKjwAAaguPAACMQ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0VUVVBfQU5OT1RBVElPTlOUag2PAAB0lIwQU0VUVVBfQVNZTkNfV0lUSJQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TRVRVUF9BU1lOQ19XSVRIlGoNjwAAdJSMDVNFVFVQX0ZJTkFMTFmUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU0VUVVBfRklOQUxMWZRqDY8AAHSUjApTRVRVUF9XSVRIlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNFVFVQX1dJVEiUag2PAAB0lIwHU0VUX0FERJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TRVRfQURElGoNjwAAdJSMClNUT1JFX0FUVFKUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtU1RPUkVfQVRUUpRqDY8AAHSUjAtTVE9SRV9ERVJFRpQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1TVE9SRV9ERVJFRpRqDY8AAHSUjApTVE9SRV9GQVNUlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX0ZBU1SUag2PAAB0lIwMU1RPUkVfR0xPQkFMlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX0dMT0JBTJRqDY8AAHSUjApTVE9SRV9OQU1FlChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX05BTUWUag2PAAB0lIwMU1RPUkVfU1VCU0NSlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVNUT1JFX1NVQlNDUpRqDY8AAHSUjAxVTkFSWV9JTlZFUlSUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5BUllfSU5WRVJUlGoNjwAAdJSMDlVOQVJZX05FR0FUSVZFlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVVOQVJZX05FR0FUSVZFlGoNjwAAdJSMCVVOQVJZX05PVJQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1VTkFSWV9OT1SUag2PAAB0lIwOVU5BUllfUE9TSVRJVkWUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5BUllfUE9TSVRJVkWUag2PAAB0lIwJVU5QQUNLX0VYlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLVVOUEFDS19FWJRqDY8AAHSUjA9VTlBBQ0tfU0VRVUVOQ0WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtVU5QQUNLX1NFUVVFTkNFlGoNjwAAdJSME1dJVEhfQ0xFQU5VUF9GSU5JU0iUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtV0lUSF9DTEVBTlVQX0ZJTklTSJRqDY8AAHSUjBJXSVRIX0NMRUFOVVBfU1RBUlSUKGoKjwAAaguPAACMRGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtV0lUSF9DTEVBTlVQX1NUQVJUlGoNjwAAdJSMCllJRUxEX0ZST02UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtWUlFTERfRlJPTZRqDY8AAHSUjAtZSUVMRF9WQUxVRZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1sI29wY29kZS1ZSUVMRF9WQUxVRZRqDY8AAHSUdYwKc3RkOmVudnZhcpR9lCiMElBZVEhPTkFTWU5DSU9ERUJVR5QoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkFTWU5DSU9ERUJVR5RqDY8AAHSUjBBQWVRIT05CUkVBS1BPSU5UlChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OQlJFQUtQT0lOVJRqDY8AAHSUjAxQWVRIT05DQVNFT0uUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05DQVNFT0uUag2PAAB0lIwTUFlUSE9OQ09FUkNFQ0xPQ0FMRZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkNPRVJDRUNMT0NBTEWUag2PAAB0lIwLUFlUSE9OREVCVUeUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05ERUJVR5RqDY8AAHSUjA1QWVRIT05ERVZNT0RFlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OREVWTU9ERZRqDY8AAHSUjBdQWVRIT05ET05UV1JJVEVCWVRFQ09ERZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkRPTlRXUklURUJZVEVDT0RFlGoNjwAAdJSMDlBZVEhPTkRVTVBSRUZTlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9ORFVNUFJFRlOUag2PAAB0lIwQUFlUSE9ORVhFQ1VUQUJMRZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkVYRUNVVEFCTEWUag2PAAB0lIwSUFlUSE9ORkFVTFRIQU5ETEVSlChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9ORkFVTFRIQU5ETEVSlGoNjwAAdJSMDlBZVEhPTkhBU0hTRUVElChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OSEFTSFNFRUSUag2PAAB0lIwKUFlUSE9OSE9NRZQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTkhPTUWUag2PAAB0lIwNUFlUSE9OSU5TUEVDVJQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTklOU1BFQ1SUag2PAAB0lIwQUFlUSE9OSU9FTkNPRElOR5QoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTklPRU5DT0RJTkeUag2PAAB0lIwdUFlUSE9OTEVHQUNZV0lORE9XU0ZTRU5DT0RJTkeUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05MRUdBQ1lXSU5ET1dTRlNFTkNPRElOR5RqDY8AAHSUjBhQWVRIT05MRUdBQ1lXSU5ET1dTU1RESU+UKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05MRUdBQ1lXSU5ET1dTU1RESU+Uag2PAAB0lIwMUFlUSE9OTUFMTE9DlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OTUFMTE9DlGoNjwAAdJSMEVBZVEhPTk1BTExPQ1NUQVRTlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OTUFMTE9DU1RBVFOUag2PAAB0lIwQUFlUSE9OTk9VU0VSU0lURZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTk5PVVNFUlNJVEWUag2PAAB0lIwOUFlUSE9OT1BUSU1JWkWUKGoKjwAAaguPAACMQmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05PUFRJTUlaRZRqDY8AAHSUjApQWVRIT05QQVRIlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OUEFUSJRqDY8AAHSUjBdQWVRIT05QUk9GSUxFSU1QT1JUVElNRZQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTlBST0ZJTEVJTVBPUlRUSU1FlGoNjwAAdJSME1BZVEhPTlBZQ0FDSEVQUkVGSViUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05QWUNBQ0hFUFJFRklYlGoNjwAAdJSMDVBZVEhPTlNUQVJUVVCUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05TVEFSVFVQlGoNjwAAdJSMEVBZVEhPTlRIUkVBRERFQlVHlChqCo8AAGoLjwAAjEVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OVEhSRUFEREVCVUeUag2PAAB0lIwRUFlUSE9OVFJBQ0VNQUxMT0OUKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05UUkFDRU1BTExPQ5RqDY8AAHSUjBBQWVRIT05VTkJVRkZFUkVElChqCo8AAGoLjwAAjERodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OVU5CVUZGRVJFRJRqDY8AAHSUjA5QWVRIT05VU0VSQkFTRZQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9jbWRsaW5lLmh0bWwjZW52dmFyLVBZVEhPTlVTRVJCQVNFlGoNjwAAdJSMClBZVEhPTlVURjiUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05VVEY4lGoNjwAAdJSMDVBZVEhPTlZFUkJPU0WUKGoKjwAAaguPAACMQWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05WRVJCT1NFlGoNjwAAdJSMDlBZVEhPTldBUk5JTkdTlChqCo8AAGoLjwAAjEJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OV0FSTklOR1OUag2PAAB0lHWMCXN0ZDp0b2tlbpR9lCiMBmFfZXhwcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWEtZXhwcpRqDY8AAHSUjAVhbGlnbpQoagqPAABqC48AAIxBaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tYWxpZ26Uag2PAAB0lIwIYW5kX2V4cHKUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1hbmQtZXhwcpRqDY8AAHSUjAhhbmRfdGVzdJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWFuZC10ZXN0lGoNjwAAdJSMGWFubm90YXRlZF9hc3NpZ25tZW50X3N0bXSUKGoKjwAAaguPAACMXWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYW5ub3RhdGVkLWFzc2lnbm1lbnQtc3RtdJRqDY8AAHSUjAhhcmdfbmFtZZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tYXJnLW5hbWWUag2PAAB0lIwNYXJndW1lbnRfbGlzdJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWFyZ3VtZW50LWxpc3SUag2PAAB0lIwLYXNzZXJ0X3N0bXSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYXNzZXJ0LXN0bXSUag2PAAB0lIwVYXNzaWdubWVudF9leHByZXNzaW9ulChqCo8AAGoLjwAAjFhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tYXNzaWdubWVudC1leHByZXNzaW9ulGoNjwAAdJSMD2Fzc2lnbm1lbnRfc3RtdJQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1hc3NpZ25tZW50LXN0bXSUag2PAAB0lIwOYXN5bmNfZm9yX3N0bXSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1hc3luYy1mb3Itc3RtdJRqDY8AAHSUjA1hc3luY19mdW5jZGVmlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYXN5bmMtZnVuY2RlZpRqDY8AAHSUjA9hc3luY193aXRoX3N0bXSUKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1hc3luYy13aXRoLXN0bXSUag2PAAB0lIwEYXRvbZQoagqPAABqC48AAIxHaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWF0b22Uag2PAAB0lIwOYXR0cmlidXRlX25hbWWUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLWF0dHJpYnV0ZS1uYW1llGoNjwAAdJSMDGF0dHJpYnV0ZXJlZpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWF0dHJpYnV0ZXJlZpRqDY8AAHSUjBlhdWdtZW50ZWRfYXNzaWdubWVudF9zdG10lChqCo8AAGoLjwAAjF1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWF1Z21lbnRlZC1hc3NpZ25tZW50LXN0bXSUag2PAAB0lIwFYXVnb3CUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tYXVnb3CUag2PAAB0lIwJYXVndGFyZ2V0lChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWF1Z3RhcmdldJRqDY8AAHSUjAphd2FpdF9leHBylChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tYXdhaXQtZXhwcpRqDY8AAHSUjAhiaW5kaWdpdJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tYmluZGlnaXSUag2PAAB0lIwKYmluaW50ZWdlcpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tYmluaW50ZWdlcpRqDY8AAHSUjApicmVha19zdG10lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWJyZWFrLXN0bXSUag2PAAB0lIwOYnl0ZXNlc2NhcGVzZXGUKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWJ5dGVzZXNjYXBlc2VxlGoNjwAAdJSMDGJ5dGVzbGl0ZXJhbJQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tYnl0ZXNsaXRlcmFslGoNjwAAdJSMC2J5dGVzcHJlZml4lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1ieXRlc3ByZWZpeJRqDY8AAHSUjARjYWxslChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY2FsbJRqDY8AAHSUjAhjbGFzc2RlZpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWNsYXNzZGVmlGoNjwAAdJSMCWNsYXNzbmFtZZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWNsYXNzbmFtZZRqDY8AAHSUjAhjb21wX2ZvcpQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWNvbXAtZm9ylGoNjwAAdJSMB2NvbXBfaWaUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1jb21wLWlmlGoNjwAAdJSMCWNvbXBfaXRlcpQoagqPAABqC48AAIxMaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWNvbXAtaXRlcpRqDY8AAHSUjA1jb21wX29wZXJhdG9ylChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcC1vcGVyYXRvcpRqDY8AAHSUjApjb21wYXJpc29ulChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcGFyaXNvbpRqDY8AAHSUjA1jb21wb3VuZF9zdG10lChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tY29tcG91bmQtc3RtdJRqDY8AAHSUjA1jb21wcmVoZW5zaW9ulChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29tcHJlaGVuc2lvbpRqDY8AAHSUjBZjb25kaXRpb25hbF9leHByZXNzaW9ulChqCo8AAGoLjwAAjFlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tY29uZGl0aW9uYWwtZXhwcmVzc2lvbpRqDY8AAHSUjA1jb250aW51ZV9zdG10lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWNvbnRpbnVlLXN0bXSUag2PAAB0lIwKY29udmVyc2lvbpQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tY29udmVyc2lvbpRqDY8AAHSUjApkZWNpbnRlZ2VylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1kZWNpbnRlZ2VylGoNjwAAdJSMCWRlY29yYXRvcpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWRlY29yYXRvcpRqDY8AAHSUjApkZWNvcmF0b3JzlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZGVjb3JhdG9yc5RqDY8AAHSUlQ8AAQAAAAAAjAxkZWZwYXJhbWV0ZXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1kZWZwYXJhbWV0ZXKUag2PAAB0lIwIZGVsX3N0bXSUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZGVsLXN0bXSUag2PAAB0lIwSZGljdF9jb21wcmVoZW5zaW9ulChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZGljdC1jb21wcmVoZW5zaW9ulGoNjwAAdJSMDGRpY3RfZGlzcGxheZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWRpY3QtZGlzcGxheZRqDY8AAHSUjAVkaWdpdJQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tZGlnaXSUag2PAAB0lIwJZGlnaXRwYXJ0lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1kaWdpdHBhcnSUag2PAAB0lIwJZGlyZWN0aXZllChqCo8AAGoLjwAAjEZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1sI2dyYW1tYXItdG9rZW4tZGlyZWN0aXZllGoNjwAAdJSMEGRpcmVjdGl2ZV9vcHRpb26UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kb2N0ZXN0Lmh0bWwjZ3JhbW1hci10b2tlbi1kaXJlY3RpdmUtb3B0aW9ulGoNjwAAdJSMFWRpcmVjdGl2ZV9vcHRpb25fbmFtZZQoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNncmFtbWFyLXRva2VuLWRpcmVjdGl2ZS1vcHRpb24tbmFtZZRqDY8AAHSUjBFkaXJlY3RpdmVfb3B0aW9uc5QoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNncmFtbWFyLXRva2VuLWRpcmVjdGl2ZS1vcHRpb25zlGoNjwAAdJSMC2RvdHRlZF9uYW1llChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZG90dGVkLW5hbWWUag2PAAB0lIwNZWxlbWVudF9pbmRleJQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tZWxlbWVudC1pbmRleJRqDY8AAHSUjAllbmNsb3N1cmWUKGoKjwAAaguPAACMTGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1lbmNsb3N1cmWUag2PAAB0lIwKZXZhbF9pbnB1dJQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI2dyYW1tYXItdG9rZW4tZXZhbC1pbnB1dJRqDY8AAHSUjAhleHBvbmVudJQoagqPAABqC48AAIxQaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tZXhwb25lbnSUag2PAAB0lIwNZXhwb25lbnRmbG9hdJQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tZXhwb25lbnRmbG9hdJRqDY8AAHSUjApleHByZXNzaW9ulChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZXhwcmVzc2lvbpRqDY8AAHSUjA9leHByZXNzaW9uX2xpc3SUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1leHByZXNzaW9uLWxpc3SUag2PAAB0lIwRZXhwcmVzc2lvbl9ub2NvbmSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1leHByZXNzaW9uLW5vY29uZJRqDY8AAHSUjA9leHByZXNzaW9uX3N0bXSUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZXhwcmVzc2lvbi1zdG10lGoNjwAAdJSMDGZfZXhwcmVzc2lvbpQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tZi1leHByZXNzaW9ulGoNjwAAdJSMCGZfc3RyaW5nlChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1mLXN0cmluZ5RqDY8AAHSUjAdmZWF0dXJllChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWZlYXR1cmWUag2PAAB0lIwKZmllbGRfbmFtZZQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1sI2dyYW1tYXItdG9rZW4tZmllbGQtbmFtZZRqDY8AAHSUjApmaWxlX2lucHV0lChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLmh0bWwjZ3JhbW1hci10b2tlbi1maWxlLWlucHV0lGoNjwAAdJSMBGZpbGyUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLWZpbGyUag2PAAB0lIwLZmxvYXRudW1iZXKUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWZsb2F0bnVtYmVylGoNjwAAdJSMCGZvcl9zdG10lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZm9yLXN0bXSUag2PAAB0lIwLZm9ybWF0X3NwZWOUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWZvcm1hdC1zcGVjlGoNjwAAdJSMCGZyYWN0aW9ulChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1mcmFjdGlvbpRqDY8AAHSUjAdmdW5jZGVmlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZnVuY2RlZpRqDY8AAHSUjAhmdW5jbmFtZZQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWZ1bmNuYW1llGoNjwAAdJSMC2Z1dHVyZV9zdG10lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLWZ1dHVyZS1zdG10lGoNjwAAdJSMFGdlbmVyYXRvcl9leHByZXNzaW9ulChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tZ2VuZXJhdG9yLWV4cHJlc3Npb26Uag2PAAB0lIwLZ2xvYmFsX3N0bXSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tZ2xvYmFsLXN0bXSUag2PAAB0lIwPZ3JvdXBpbmdfb3B0aW9ulChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1ncm91cGluZy1vcHRpb26Uag2PAAB0lIwIaGV4ZGlnaXSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWhleGRpZ2l0lGoNjwAAdJSMCmhleGludGVnZXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWhleGludGVnZXKUag2PAAB0lIwLaWRfY29udGludWWUKGoKjwAAaguPAACMU2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWlkLWNvbnRpbnVllGoNjwAAdJSMCGlkX3N0YXJ0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1pZC1zdGFydJRqDY8AAHSUjAppZGVudGlmaWVylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1pZGVudGlmaWVylGoNjwAAdJSMB2lmX3N0bXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1pZi1zdG10lGoNjwAAdJSMCmltYWdudW1iZXKUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWltYWdudW1iZXKUag2PAAB0lIwLaW1wb3J0X3N0bXSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4taW1wb3J0LXN0bXSUag2PAAB0lIwMaW5kZXhfc3RyaW5nlChqCo8AAGoLjwAAjEhodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1pbmRleC1zdHJpbmeUag2PAAB0lIwIaW5maW5pdHmUKGoKjwAAaguPAACMR2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNncmFtbWFyLXRva2VuLWluZmluaXR5lGoNjwAAdJSMC2luaGVyaXRhbmNllChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4taW5oZXJpdGFuY2WUag2PAAB0lIwHaW50ZWdlcpQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4taW50ZWdlcpRqDY8AAHSUjBFpbnRlcmFjdGl2ZV9pbnB1dJQoagqPAABqC48AAIxcaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5odG1sI2dyYW1tYXItdG9rZW4taW50ZXJhY3RpdmUtaW5wdXSUag2PAAB0lIwJa2V5X2RhdHVtlChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4ta2V5LWRhdHVtlGoNjwAAdJSMDmtleV9kYXR1bV9saXN0lChqCo8AAGoLjwAAjFFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4ta2V5LWRhdHVtLWxpc3SUag2PAAB0lIwMa2V5d29yZF9pdGVtlChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4ta2V5d29yZC1pdGVtlGoNjwAAdJSMEmtleXdvcmRzX2FyZ3VtZW50c5QoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWtleXdvcmRzLWFyZ3VtZW50c5RqDY8AAHSUjAtsYW1iZGFfZXhwcpQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxhbWJkYS1leHBylGoNjwAAdJSMEmxhbWJkYV9leHByX25vY29uZJQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxhbWJkYS1leHByLW5vY29uZJRqDY8AAHSUjAlsY19sZXR0ZXKUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2ludHJvZHVjdGlvbi5odG1sI2dyYW1tYXItdG9rZW4tbGMtbGV0dGVylGoNjwAAdJSMDGxpc3RfZGlzcGxheZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLWxpc3QtZGlzcGxheZRqDY8AAHSUjAdsaXRlcmFslChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbGl0ZXJhbJRqDY8AAHSUjAxsaXRlcmFsX2NoYXKUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxpdGVyYWwtY2hhcpRqDY8AAHSUjAlsb25nYnl0ZXOUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdieXRlc5RqDY8AAHSUjA1sb25nYnl0ZXNjaGFylChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1sb25nYnl0ZXNjaGFylGoNjwAAdJSMDWxvbmdieXRlc2l0ZW2UKGoKjwAAaguPAACMVWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdieXRlc2l0ZW2Uag2PAAB0lIwKbG9uZ3N0cmluZ5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tbG9uZ3N0cmluZ5RqDY8AAHSUjA5sb25nc3RyaW5nY2hhcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tbG9uZ3N0cmluZ2NoYXKUag2PAAB0lIwObG9uZ3N0cmluZ2l0ZW2UKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLWxvbmdzdHJpbmdpdGVtlGoNjwAAdJSMC2xvd2VyX2JvdW5klChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbG93ZXItYm91bmSUag2PAAB0lIwGbV9leHBylChqCo8AAGoLjwAAjElodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbS1leHBylGoNjwAAdJSMBm1vZHVsZZQoagqPAABqC48AAIxKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1tb2R1bGWUag2PAAB0lIwEbmFtZZQoagqPAABqC48AAIxIaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLmh0bWwjZ3JhbW1hci10b2tlbi1uYW1llGoNjwAAdJSMA25hbpQoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI2dyYW1tYXItdG9rZW4tbmFulGoNjwAAdJSMDW5vbmxvY2FsX3N0bXSUKGoKjwAAaguPAACMUWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tbm9ubG9jYWwtc3RtdJRqDY8AAHSUjAxub256ZXJvZGlnaXSUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLW5vbnplcm9kaWdpdJRqDY8AAHSUjAhub3RfdGVzdJQoagqPAABqC48AAIxLaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLW5vdC10ZXN0lGoNjwAAdJSMDm51bWVyaWNfc3RyaW5nlChqCo8AAGoLjwAAjE1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZ3JhbW1hci10b2tlbi1udW1lcmljLXN0cmluZ5RqDY8AAHSUjA1udW1lcmljX3ZhbHVllChqCo8AAGoLjwAAjExodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjZ3JhbW1hci10b2tlbi1udW1lcmljLXZhbHVllGoNjwAAdJSMCG9jdGRpZ2l0lChqCo8AAGoLjwAAjFBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1vY3RkaWdpdJRqDY8AAHSUjApvY3RpbnRlZ2VylChqCo8AAGoLjwAAjFJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1vY3RpbnRlZ2VylGoNjwAAdJSMCW9uX29yX29mZpQoagqPAABqC48AAIxGaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RvY3Rlc3QuaHRtbCNncmFtbWFyLXRva2VuLW9uLW9yLW9mZpRqDY8AAHSUjAdvcl9leHBylChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tb3ItZXhwcpRqDY8AAHSUjAdvcl90ZXN0lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tb3ItdGVzdJRqDY8AAHSUjAlwYXJhbWV0ZXKUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1wYXJhbWV0ZXKUag2PAAB0lIwOcGFyYW1ldGVyX2xpc3SUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1wYXJhbWV0ZXItbGlzdJRqDY8AAHSUjBlwYXJhbWV0ZXJfbGlzdF9ub19wb3Nvbmx5lChqCo8AAGoLjwAAjF9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tcGFyYW1ldGVyLWxpc3Qtbm8tcG9zb25seZRqDY8AAHSUjBdwYXJhbWV0ZXJfbGlzdF9zdGFyYXJnc5QoagqPAABqC48AAIxdaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXBhcmFtZXRlci1saXN0LXN0YXJhcmdzlGoNjwAAdJSMDHBhcmVudGhfZm9ybZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXBhcmVudGgtZm9ybZRqDY8AAHSUjAlwYXNzX3N0bXSUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tcGFzcy1zdG10lGoNjwAAdJSMCnBvaW50ZmxvYXSUKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXBvaW50ZmxvYXSUag2PAAB0lIwUcG9zaXRpb25hbF9hcmd1bWVudHOUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1wb3NpdGlvbmFsLWFyZ3VtZW50c5RqDY8AAHSUjA9wb3NpdGlvbmFsX2l0ZW2UKGoKjwAAaguPAACMUmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1wb3NpdGlvbmFsLWl0ZW2Uag2PAAB0lIwFcG93ZXKUKGoKjwAAaguPAACMSGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1wb3dlcpRqDY8AAHSUjAlwcmVjaXNpb26UKGoKjwAAaguPAACMRWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJpbmcuaHRtbCNncmFtbWFyLXRva2VuLXByZWNpc2lvbpRqDY8AAHSUjAdwcmltYXJ5lChqCo8AAGoLjwAAjEpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tcHJpbWFyeZRqDY8AAHSUjAxwcm9wZXJfc2xpY2WUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1wcm9wZXItc2xpY2WUag2PAAB0lIwKcmFpc2Vfc3RtdJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1yYWlzZS1zdG10lGoNjwAAdJSMD3JlbGF0aXZlX21vZHVsZZQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1yZWxhdGl2ZS1tb2R1bGWUag2PAAB0lIwRcmVwbGFjZW1lbnRfZmllbGSUKGoKjwAAaguPAACMWWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXJlcGxhY2VtZW50LWZpZWxklGoNjwAAdJSMC3JldHVybl9zdG10lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXJldHVybi1zdG10lGoNjwAAdJSMC3NldF9kaXNwbGF5lChqCo8AAGoLjwAAjE5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc2V0LWRpc3BsYXmUag2PAAB0lIwKc2hpZnRfZXhwcpQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXNoaWZ0LWV4cHKUag2PAAB0lIwKc2hvcnRieXRlc5QoagqPAABqC48AAIxSaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tc2hvcnRieXRlc5RqDY8AAHSUjA5zaG9ydGJ5dGVzY2hhcpQoagqPAABqC48AAIxWaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tc2hvcnRieXRlc2NoYXKUag2PAAB0lIwOc2hvcnRieXRlc2l0ZW2UKGoKjwAAaguPAACMVmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXNob3J0Ynl0ZXNpdGVtlGoNjwAAdJSMC3Nob3J0c3RyaW5nlChqCo8AAGoLjwAAjFNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1zaG9ydHN0cmluZ5RqDY8AAHSUjA9zaG9ydHN0cmluZ2NoYXKUKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXNob3J0c3RyaW5nY2hhcpRqDY8AAHSUjA9zaG9ydHN0cmluZ2l0ZW2UKGoKjwAAaguPAACMV2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXNob3J0c3RyaW5naXRlbZRqDY8AAHSUjARzaWdulChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi1zaWdulGoNjwAAdJSMC3NpbXBsZV9zdG10lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXNpbXBsZS1zdG10lGoNjwAAdJSMCnNsaWNlX2l0ZW2UKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zbGljZS1pdGVtlGoNjwAAdJSMCnNsaWNlX2xpc3SUKGoKjwAAaguPAACMTWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zbGljZS1saXN0lGoNjwAAdJSMB3NsaWNpbmeUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zbGljaW5nlGoNjwAAdJSMFHN0YXJyZWRfYW5kX2tleXdvcmRzlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc3RhcnJlZC1hbmQta2V5d29yZHOUag2PAAB0lIwSc3RhcnJlZF9leHByZXNzaW9ulChqCo8AAGoLjwAAjFVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4tc3RhcnJlZC1leHByZXNzaW9ulGoNjwAAdJSMDHN0YXJyZWRfaXRlbZQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXN0YXJyZWQtaXRlbZRqDY8AAHSUjAxzdGFycmVkX2xpc3SUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zdGFycmVkLWxpc3SUag2PAAB0lIwJc3RhdGVtZW50lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tc3RhdGVtZW50lGoNjwAAdJSMCXN0bXRfbGlzdJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXN0bXQtbGlzdJRqDY8AAHSUjAZzdHJpZGWUKGoKjwAAaguPAACMSWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zdHJpZGWUag2PAAB0lIwPc3RyaW5nZXNjYXBlc2VxlChqCo8AAGoLjwAAjFdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLmh0bWwjZ3JhbW1hci10b2tlbi1zdHJpbmdlc2NhcGVzZXGUag2PAAB0lIwNc3RyaW5nbGl0ZXJhbJQoagqPAABqC48AAIxVaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4tc3RyaW5nbGl0ZXJhbJRqDY8AAHSUjAxzdHJpbmdwcmVmaXiUKGoKjwAAaguPAACMVGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMuaHRtbCNncmFtbWFyLXRva2VuLXN0cmluZ3ByZWZpeJRqDY8AAHSUjAxzdWJzY3JpcHRpb26UKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjZ3JhbW1hci10b2tlbi1zdWJzY3JpcHRpb26Uag2PAAB0lIwFc3VpdGWUKGoKjwAAaguPAACMS2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi1zdWl0ZZRqDY8AAHSUjAZ0YXJnZXSUKGoKjwAAaguPAACMSmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4tdGFyZ2V0lGoNjwAAdJSMC3RhcmdldF9saXN0lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXRhcmdldC1saXN0lGoNjwAAdJSMCXRyeTFfc3RtdJQoagqPAABqC48AAIxPaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMuaHRtbCNncmFtbWFyLXRva2VuLXRyeTEtc3RtdJRqDY8AAHSUjAl0cnkyX3N0bXSUKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi10cnkyLXN0bXSUag2PAAB0lIwIdHJ5X3N0bXSUKGoKjwAAaguPAACMTmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi10cnktc3RtdJRqDY8AAHSUjAR0eXBllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi10eXBllGoNjwAAdJSMBnVfZXhwcpQoagqPAABqC48AAIxJaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXUtZXhwcpRqDY8AAHSUjAt1cHBlcl9ib3VuZJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXVwcGVyLWJvdW5klGoNjwAAdJSMCndoaWxlX3N0bXSUKGoKjwAAaguPAACMUGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi13aGlsZS1zdG10lGoNjwAAdJSMBXdpZHRolChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RyaW5nLmh0bWwjZ3JhbW1hci10b2tlbi13aWR0aJRqDY8AAHSUjAl3aXRoX2l0ZW2UKGoKjwAAaguPAACMT2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi13aXRoLWl0ZW2Uag2PAAB0lIwJd2l0aF9zdG10lChqCo8AAGoLjwAAjE9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5odG1sI2dyYW1tYXItdG9rZW4td2l0aC1zdG10lGoNjwAAdJSMDHhpZF9jb250aW51ZZQoagqPAABqC48AAIxUaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4teGlkLWNvbnRpbnVllGoNjwAAdJSMCXhpZF9zdGFydJQoagqPAABqC48AAIxRaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1sI2dyYW1tYXItdG9rZW4teGlkLXN0YXJ0lGoNjwAAdJSMCHhvcl9leHBylChqCo8AAGoLjwAAjEtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI2dyYW1tYXItdG9rZW4teG9yLWV4cHKUag2PAAB0lIwKeWllbGRfYXRvbZQoagqPAABqC48AAIxNaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXlpZWxkLWF0b22Uag2PAAB0lIwQeWllbGRfZXhwcmVzc2lvbpQoagqPAABqC48AAIxTaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNncmFtbWFyLXRva2VuLXlpZWxkLWV4cHJlc3Npb26Uag2PAAB0lIwKeWllbGRfc3RtdJQoagqPAABqC48AAIxOaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjZ3JhbW1hci10b2tlbi15aWVsZC1zdG10lGoNjwAAdJR1jAdzdGQ6ZG9jlH2UKIwFYWJvdXSUKGoKjwAAaguPAACMJGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYWJvdXQuaHRtbJSMFUFib3V0IHRoZXNlIGRvY3VtZW50c5R0lIwEYnVnc5QoagqPAABqC48AAIwjaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9idWdzLmh0bWyUjBFEZWFsaW5nIHdpdGggQnVnc5R0lIwOYy1hcGkvYWJzdHJhY3SUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYWJzdHJhY3QuaHRtbJSMFkFic3RyYWN0IE9iamVjdHMgTGF5ZXKUdJSMEGMtYXBpL2FsbG9jYXRpb26UKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYWxsb2NhdGlvbi5odG1slIweQWxsb2NhdGluZyBPYmplY3RzIG9uIHRoZSBIZWFwlHSUjBNjLWFwaS9hcGlhYml2ZXJzaW9ulChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2FwaWFiaXZlcnNpb24uaHRtbJSMFkFQSSBhbmQgQUJJIFZlcnNpb25pbmeUdJSMCWMtYXBpL2FyZ5QoagqPAABqC48AAIwoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9hcmcuaHRtbJSMJVBhcnNpbmcgYXJndW1lbnRzIGFuZCBidWlsZGluZyB2YWx1ZXOUdJSMCmMtYXBpL2Jvb2yUKGoKjwAAaguPAACMKWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYm9vbC5odG1slIwPQm9vbGVhbiBPYmplY3RzlHSUjAxjLWFwaS9idWZmZXKUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnVmZmVyLmh0bWyUjA9CdWZmZXIgUHJvdG9jb2yUdJSMD2MtYXBpL2J5dGVhcnJheZQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9ieXRlYXJyYXkuaHRtbJSMEkJ5dGUgQXJyYXkgT2JqZWN0c5R0lIwLYy1hcGkvYnl0ZXOUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvYnl0ZXMuaHRtbJSMDUJ5dGVzIE9iamVjdHOUdJSMDWMtYXBpL2NhcHN1bGWUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2Fwc3VsZS5odG1slIwIQ2Fwc3VsZXOUdJSMCmMtYXBpL2NlbGyUKGoKjwAAaguPAACMKWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY2VsbC5odG1slIwMQ2VsbCBPYmplY3RzlHSUjApjLWFwaS9jb2RllChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2NvZGUuaHRtbJSMDENvZGUgT2JqZWN0c5R0lIwLYy1hcGkvY29kZWOUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29kZWMuaHRtbJSMJENvZGVjIHJlZ2lzdHJ5IGFuZCBzdXBwb3J0IGZ1bmN0aW9uc5R0lIwNYy1hcGkvY29tcGxleJQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb21wbGV4Lmh0bWyUjBZDb21wbGV4IE51bWJlciBPYmplY3RzlHSUjA5jLWFwaS9jb25jcmV0ZZQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9jb25jcmV0ZS5odG1slIwWQ29uY3JldGUgT2JqZWN0cyBMYXllcpR0lIwRYy1hcGkvY29udGV4dHZhcnOUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udGV4dHZhcnMuaHRtbJSMGUNvbnRleHQgVmFyaWFibGVzIE9iamVjdHOUdJSMEGMtYXBpL2NvbnZlcnNpb26UKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29udmVyc2lvbi5odG1slIwgU3RyaW5nIGNvbnZlcnNpb24gYW5kIGZvcm1hdHRpbmeUdJSMCmMtYXBpL2Nvcm+UKGoKjwAAaguPAACMKWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvY29yby5odG1slIwRQ29yb3V0aW5lIE9iamVjdHOUdJSMDmMtYXBpL2RhdGV0aW1llChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2RhdGV0aW1lLmh0bWyUjBBEYXRlVGltZSBPYmplY3RzlHSUjBBjLWFwaS9kZXNjcmlwdG9ylChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Rlc2NyaXB0b3IuaHRtbJSMEkRlc2NyaXB0b3IgT2JqZWN0c5R0lIwKYy1hcGkvZGljdJQoagqPAABqC48AAIwpaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9kaWN0Lmh0bWyUjBJEaWN0aW9uYXJ5IE9iamVjdHOUdJSMEGMtYXBpL2V4Y2VwdGlvbnOUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZXhjZXB0aW9ucy5odG1slIwSRXhjZXB0aW9uIEhhbmRsaW5nlHSUjApjLWFwaS9maWxllChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ZpbGUuaHRtbJSMDEZpbGUgT2JqZWN0c5R0lIwLYy1hcGkvZmxvYXSUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZmxvYXQuaHRtbJSMFkZsb2F0aW5nIFBvaW50IE9iamVjdHOUdJSMDmMtYXBpL2Z1bmN0aW9ulChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2Z1bmN0aW9uLmh0bWyUjBBGdW5jdGlvbiBPYmplY3RzlHSUjA9jLWFwaS9nY3N1cHBvcnSUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvZ2NzdXBwb3J0Lmh0bWyUjCRTdXBwb3J0aW5nIEN5Y2xpYyBHYXJiYWdlIENvbGxlY3Rpb26UdJSMCWMtYXBpL2dlbpQoagqPAABqC48AAIwoaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9nZW4uaHRtbJSMEUdlbmVyYXRvciBPYmplY3RzlHSUjAxjLWFwaS9pbXBvcnSUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW1wb3J0Lmh0bWyUjBFJbXBvcnRpbmcgTW9kdWxlc5R0lIwLYy1hcGkvaW5kZXiUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaW5kZXguaHRtbJSMHVB5dGhvbi9DIEFQSSBSZWZlcmVuY2UgTWFudWFslHSUjApjLWFwaS9pbml0lChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2luaXQuaHRtbJSMKUluaXRpYWxpemF0aW9uLCBGaW5hbGl6YXRpb24sIGFuZCBUaHJlYWRzlHSUjBFjLWFwaS9pbml0X2NvbmZpZ5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9pbml0X2NvbmZpZy5odG1slIwjUHl0aG9uIEluaXRpYWxpemF0aW9uIENvbmZpZ3VyYXRpb26UdJSMC2MtYXBpL2ludHJvlChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2ludHJvLmh0bWyUjAxJbnRyb2R1Y3Rpb26UdJSMCmMtYXBpL2l0ZXKUKGoKjwAAaguPAACMKWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvaXRlci5odG1slIwRSXRlcmF0b3IgUHJvdG9jb2yUdJSMDmMtYXBpL2l0ZXJhdG9ylChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2l0ZXJhdG9yLmh0bWyUjBBJdGVyYXRvciBPYmplY3RzlHSUjApjLWFwaS9saXN0lChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL2xpc3QuaHRtbJSMDExpc3QgT2JqZWN0c5R0lIwKYy1hcGkvbG9uZ5QoagqPAABqC48AAIwpaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9sb25nLmh0bWyUjA9JbnRlZ2VyIE9iamVjdHOUdJSMDWMtYXBpL21hcHBpbmeUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvbWFwcGluZy5odG1slIwQTWFwcGluZyBQcm90b2NvbJR0lIwNYy1hcGkvbWFyc2hhbJQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tYXJzaGFsLmh0bWyUjBhEYXRhIG1hcnNoYWxsaW5nIHN1cHBvcnSUdJSMDGMtYXBpL21lbW9yeZQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tZW1vcnkuaHRtbJSMEU1lbW9yeSBNYW5hZ2VtZW50lHSUjBBjLWFwaS9tZW1vcnl2aWV3lChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21lbW9yeXZpZXcuaHRtbJSMEk1lbW9yeVZpZXcgb2JqZWN0c5R0lIwMYy1hcGkvbWV0aG9klChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL21ldGhvZC5odG1slIwXSW5zdGFuY2UgTWV0aG9kIE9iamVjdHOUdJSMDGMtYXBpL21vZHVsZZQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9tb2R1bGUuaHRtbJSMDk1vZHVsZSBPYmplY3RzlHSUjApjLWFwaS9ub25llChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL25vbmUuaHRtbJSMD1RoZSBOb25lIE9iamVjdJR0lIwMYy1hcGkvbnVtYmVylChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL251bWJlci5odG1slIwPTnVtYmVyIFByb3RvY29slHSUjA9jLWFwaS9vYmpidWZmZXKUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqYnVmZmVyLmh0bWyUjBNPbGQgQnVmZmVyIFByb3RvY29slHSUjAxjLWFwaS9vYmplY3SUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqZWN0Lmh0bWyUjA9PYmplY3QgUHJvdG9jb2yUdJSMDWMtYXBpL29iamltcGyUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvb2JqaW1wbC5odG1slIwdT2JqZWN0IEltcGxlbWVudGF0aW9uIFN1cHBvcnSUdJSMEWMtYXBpL3JlZmNvdW50aW5nlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3JlZmNvdW50aW5nLmh0bWyUjBJSZWZlcmVuY2UgQ291bnRpbmeUdJSMEGMtYXBpL3JlZmxlY3Rpb26UKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvcmVmbGVjdGlvbi5odG1slIwKUmVmbGVjdGlvbpR0lIwOYy1hcGkvc2VxdWVuY2WUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2VxdWVuY2UuaHRtbJSMEVNlcXVlbmNlIFByb3RvY29slHSUjAljLWFwaS9zZXSUKGoKjwAAaguPAACMKGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2V0Lmh0bWyUjAtTZXQgT2JqZWN0c5R0lIwLYy1hcGkvc2xpY2WUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvc2xpY2UuaHRtbJSMDVNsaWNlIE9iamVjdHOUdJSMDGMtYXBpL3N0YWJsZZQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS9zdGFibGUuaHRtbJSMI1N0YWJsZSBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNllHSUjBBjLWFwaS9zdHJ1Y3R1cmVzlChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N0cnVjdHVyZXMuaHRtbJSMGENvbW1vbiBPYmplY3QgU3RydWN0dXJlc5R0lIwJYy1hcGkvc3lzlChqCo8AAGoLjwAAjChodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3N5cy5odG1slIwaT3BlcmF0aW5nIFN5c3RlbSBVdGlsaXRpZXOUdJSMC2MtYXBpL3R1cGxllChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R1cGxlLmh0bWyUjA1UdXBsZSBPYmplY3RzlHSUjApjLWFwaS90eXBllChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2MtYXBpL3R5cGUuaHRtbJSMDFR5cGUgT2JqZWN0c5R0lIwNYy1hcGkvdHlwZW9iapQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS90eXBlb2JqLmh0bWyUjAxUeXBlIE9iamVjdHOUdJSMDWMtYXBpL3VuaWNvZGWUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdW5pY29kZS5odG1slIwaVW5pY29kZSBPYmplY3RzIGFuZCBDb2RlY3OUdJSMD2MtYXBpL3V0aWxpdGllc5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9jLWFwaS91dGlsaXRpZXMuaHRtbJSMCVV0aWxpdGllc5R0lIwOYy1hcGkvdmVyeWhpZ2iUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvdmVyeWhpZ2guaHRtbJSMGVRoZSBWZXJ5IEhpZ2ggTGV2ZWwgTGF5ZXKUdJSMDWMtYXBpL3dlYWtyZWaUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkvd2Vha3JlZi5odG1slIwWV2VhayBSZWZlcmVuY2UgT2JqZWN0c5R0lIwIY29udGVudHOUKGoKjwAAaguPAACMJ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvY29udGVudHMuaHRtbJSMHVB5dGhvbiBEb2N1bWVudGF0aW9uIGNvbnRlbnRzlHSUjAljb3B5cmlnaHSUKGoKjwAAaguPAACMKGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvY29weXJpZ2h0Lmh0bWyUjAlDb3B5cmlnaHSUdJSMEmRpc3RyaWJ1dGluZy9pbmRleJQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0cmlidXRpbmcvaW5kZXguaHRtbJSMG0Rpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlc5R0lIwgZGlzdHV0aWxzL19zZXR1cHRvb2xzX2Rpc2NsYWltZXKUKGoKjwAAaguPAACMP2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL19zZXR1cHRvb2xzX2Rpc2NsYWltZXIuaHRtbJSMCjxubyB0aXRsZT6UdJSMEGRpc3R1dGlscy9hcGlyZWaUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2FwaXJlZi5odG1slIwNQVBJIFJlZmVyZW5jZZR0lIwTZGlzdHV0aWxzL2J1aWx0ZGlzdJQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvYnVpbHRkaXN0Lmh0bWyUjBxDcmVhdGluZyBCdWlsdCBEaXN0cmlidXRpb25zlHSUjBRkaXN0dXRpbHMvY29tbWFuZHJlZpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvY29tbWFuZHJlZi5odG1slIwRQ29tbWFuZCBSZWZlcmVuY2WUdJSMFGRpc3R1dGlscy9jb25maWdmaWxllChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9jb25maWdmaWxlLmh0bWyUjCRXcml0aW5nIHRoZSBTZXR1cCBDb25maWd1cmF0aW9uIEZpbGWUdJSMEmRpc3R1dGlscy9leGFtcGxlc5QoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvZXhhbXBsZXMuaHRtbJSMEkRpc3R1dGlscyBFeGFtcGxlc5R0lIwTZGlzdHV0aWxzL2V4dGVuZGluZ5QoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvZXh0ZW5kaW5nLmh0bWyUjBNFeHRlbmRpbmcgRGlzdHV0aWxzlHSUjA9kaXN0dXRpbHMvaW5kZXiUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL2luZGV4Lmh0bWyUjCxEaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXMgKExlZ2FjeSB2ZXJzaW9uKZR0lIwWZGlzdHV0aWxzL2ludHJvZHVjdGlvbpQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvaW50cm9kdWN0aW9uLmh0bWyUjBxBbiBJbnRyb2R1Y3Rpb24gdG8gRGlzdHV0aWxzlHSUjBZkaXN0dXRpbHMvcGFja2FnZWluZGV4lChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXguaHRtbJSMH1RoZSBQeXRob24gUGFja2FnZSBJbmRleCAoUHlQSSmUdJSMFWRpc3R1dGlscy9zZXR1cHNjcmlwdJQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQuaHRtbJSMGFdyaXRpbmcgdGhlIFNldHVwIFNjcmlwdJR0lIwUZGlzdHV0aWxzL3NvdXJjZWRpc3SUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZGlzdHV0aWxzL3NvdXJjZWRpc3QuaHRtbJSMHkNyZWF0aW5nIGEgU291cmNlIERpc3RyaWJ1dGlvbpR0lIwTZGlzdHV0aWxzL3VwbG9hZGluZ5QoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9kaXN0dXRpbHMvdXBsb2FkaW5nLmh0bWyUjCdVcGxvYWRpbmcgUGFja2FnZXMgdG8gdGhlIFBhY2thZ2UgSW5kZXiUdJSMEmV4dGVuZGluZy9idWlsZGluZ5QoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvYnVpbGRpbmcuaHRtbJSMHUJ1aWxkaW5nIEMgYW5kIEMrKyBFeHRlbnNpb25zlHSUjBNleHRlbmRpbmcvZW1iZWRkaW5nlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2V4dGVuZGluZy9lbWJlZGRpbmcuaHRtbJSMJ0VtYmVkZGluZyBQeXRob24gaW4gQW5vdGhlciBBcHBsaWNhdGlvbpR0lIwTZXh0ZW5kaW5nL2V4dGVuZGluZ5QoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvZXh0ZW5kaW5nLmh0bWyUjB5FeHRlbmRpbmcgUHl0aG9uIHdpdGggQyBvciBDKyuUdJSMD2V4dGVuZGluZy9pbmRleJQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvaW5kZXguaHRtbJSMLkV4dGVuZGluZyBhbmQgRW1iZWRkaW5nIHRoZSBQeXRob24gSW50ZXJwcmV0ZXKUdJSMEmV4dGVuZGluZy9uZXd0eXBlc5QoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvbmV3dHlwZXMuaHRtbJSMKURlZmluaW5nIEV4dGVuc2lvbiBUeXBlczogQXNzb3J0ZWQgVG9waWNzlHSUjBtleHRlbmRpbmcvbmV3dHlwZXNfdHV0b3JpYWyUKGoKjwAAaguPAACMOmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZXh0ZW5kaW5nL25ld3R5cGVzX3R1dG9yaWFsLmh0bWyUjCJEZWZpbmluZyBFeHRlbnNpb24gVHlwZXM6IFR1dG9yaWFslHSUjBFleHRlbmRpbmcvd2luZG93c5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9leHRlbmRpbmcvd2luZG93cy5odG1slIwoQnVpbGRpbmcgQyBhbmQgQysrIEV4dGVuc2lvbnMgb24gV2luZG93c5R0lIwKZmFxL2Rlc2lnbpQoagqPAABqC48AAIwpaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9mYXEvZGVzaWduLmh0bWyUjBZEZXNpZ24gYW5kIEhpc3RvcnkgRkFRlHSUjA1mYXEvZXh0ZW5kaW5nlChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2ZhcS9leHRlbmRpbmcuaHRtbJSMF0V4dGVuZGluZy9FbWJlZGRpbmcgRkFRlHSUjAtmYXEvZ2VuZXJhbJQoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9mYXEvZ2VuZXJhbC5odG1slIwSR2VuZXJhbCBQeXRob24gRkFRlHSUjAdmYXEvZ3VplChqCo8AAGoLjwAAjCZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2ZhcS9ndWkuaHRtbJSMGkdyYXBoaWMgVXNlciBJbnRlcmZhY2UgRkFRlHSUjAlmYXEvaW5kZXiUKGoKjwAAaguPAACMKGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZmFxL2luZGV4Lmh0bWyUjCFQeXRob24gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnOUdJSMDWZhcS9pbnN0YWxsZWSUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZmFxL2luc3RhbGxlZC5odG1slIwx4oCcV2h5IGlzIFB5dGhvbiBJbnN0YWxsZWQgb24gbXkgQ29tcHV0ZXI/4oCdIEZBUZR0lIwLZmFxL2xpYnJhcnmUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZmFxL2xpYnJhcnkuaHRtbJSMGUxpYnJhcnkgYW5kIEV4dGVuc2lvbiBGQVGUdJSMD2ZhcS9wcm9ncmFtbWluZ5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9mYXEvcHJvZ3JhbW1pbmcuaHRtbJSMD1Byb2dyYW1taW5nIEZBUZR0lIwLZmFxL3dpbmRvd3OUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZmFxL3dpbmRvd3MuaHRtbJSMFVB5dGhvbiBvbiBXaW5kb3dzIEZBUZR0lIwIZ2xvc3NhcnmUKGoKjwAAaguPAACMJ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZ2xvc3NhcnkuaHRtbJSMCEdsb3NzYXJ5lHSUjA5ob3d0by9hcmdwYXJzZZQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9hcmdwYXJzZS5odG1slIwRQXJncGFyc2UgVHV0b3JpYWyUdJSMDGhvd3RvL2NsaW5pY5QoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9jbGluaWMuaHRtbJSMFkFyZ3VtZW50IENsaW5pYyBIb3ctVG+UdJSMDmhvd3RvL2Nwb3J0aW5nlChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2Nwb3J0aW5nLmh0bWyUjCVQb3J0aW5nIEV4dGVuc2lvbiBNb2R1bGVzIHRvIFB5dGhvbiAzlHSUjAxob3d0by9jdXJzZXOUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vY3Vyc2VzLmh0bWyUjB5DdXJzZXMgUHJvZ3JhbW1pbmcgd2l0aCBQeXRob26UdJSMEGhvd3RvL2Rlc2NyaXB0b3KUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vZGVzY3JpcHRvci5odG1slIwWRGVzY3JpcHRvciBIb3dUbyBHdWlkZZR0lIwQaG93dG8vZnVuY3Rpb25hbJQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9mdW5jdGlvbmFsLmh0bWyUjBxGdW5jdGlvbmFsIFByb2dyYW1taW5nIEhPV1RPlHSUjAtob3d0by9pbmRleJQoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9pbmRleC5odG1slIwNUHl0aG9uIEhPV1RPc5R0lIwVaG93dG8vaW5zdHJ1bWVudGF0aW9ulChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2luc3RydW1lbnRhdGlvbi5odG1slIwvSW5zdHJ1bWVudGluZyBDUHl0aG9uIHdpdGggRFRyYWNlIGFuZCBTeXN0ZW1UYXCUdJSMD2hvd3RvL2lwYWRkcmVzc5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9pcGFkZHJlc3MuaHRtbJSMJ0FuIGludHJvZHVjdGlvbiB0byB0aGUgaXBhZGRyZXNzIG1vZHVsZZR0lIwNaG93dG8vbG9nZ2luZ5QoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9sb2dnaW5nLmh0bWyUjA1Mb2dnaW5nIEhPV1RPlHSUjBZob3d0by9sb2dnaW5nLWNvb2tib29rlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL2xvZ2dpbmctY29va2Jvb2suaHRtbJSMEExvZ2dpbmcgQ29va2Jvb2uUdJSMD2hvd3RvL3B5cG9ydGluZ5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9weXBvcnRpbmcuaHRtbJSMIVBvcnRpbmcgUHl0aG9uIDIgQ29kZSB0byBQeXRob24gM5R0lIwLaG93dG8vcmVnZXiUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vcmVnZXguaHRtbJSMGFJlZ3VsYXIgRXhwcmVzc2lvbiBIT1dUT5R0lIwNaG93dG8vc29ja2V0c5QoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by9zb2NrZXRzLmh0bWyUjBhTb2NrZXQgUHJvZ3JhbW1pbmcgSE9XVE+UdJSMDWhvd3RvL3NvcnRpbmeUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vc29ydGluZy5odG1slIwOU29ydGluZyBIT1cgVE+UdJSMDWhvd3RvL3VuaWNvZGWUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vdW5pY29kZS5odG1slIwNVW5pY29kZSBIT1dUT5R0lIwNaG93dG8vdXJsbGliMpQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9ob3d0by91cmxsaWIyLmh0bWyUjDdIT1dUTyBGZXRjaCBJbnRlcm5ldCBSZXNvdXJjZXMgVXNpbmcgVGhlIHVybGxpYiBQYWNrYWdllHSUjA1pbnN0YWxsL2luZGV4lChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2luc3RhbGwvaW5kZXguaHRtbJSMKkluc3RhbGxpbmcgUHl0aG9uIE1vZHVsZXMgKExlZ2FjeSB2ZXJzaW9uKZR0lIwQaW5zdGFsbGluZy9pbmRleJQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9pbnN0YWxsaW5nL2luZGV4Lmh0bWyUjBlJbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzlHSUjAxsaWJyYXJ5LzJ0bzOUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWyUjC8ydG8zIC0gQXV0b21hdGVkIFB5dGhvbiAyIHRvIDMgY29kZSB0cmFuc2xhdGlvbpR0lIwSbGlicmFyeS9fX2Z1dHVyZV9flChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvX19mdXR1cmVfXy5odG1slIwrX19mdXR1cmVfXyDigJQgRnV0dXJlIHN0YXRlbWVudCBkZWZpbml0aW9uc5R0lIwQbGlicmFyeS9fX21haW5fX5QoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L19fbWFpbl9fLmh0bWyUjClfX21haW5fXyDigJQgVG9wLWxldmVsIHNjcmlwdCBlbnZpcm9ubWVudJR0lIwVbGlicmFyeS9fZHVtbXlfdGhyZWFklChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvX2R1bW15X3RocmVhZC5odG1slIw8X2R1bW15X3RocmVhZCDigJQgRHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIF90aHJlYWQgbW9kdWxllHSUjA9saWJyYXJ5L190aHJlYWSUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9fdGhyZWFkLmh0bWyUjCNfdGhyZWFkIOKAlCBMb3ctbGV2ZWwgdGhyZWFkaW5nIEFQSZR0lIwLbGlicmFyeS9hYmOUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hYmMuaHRtbJSMHWFiYyDigJQgQWJzdHJhY3QgQmFzZSBDbGFzc2VzlHSUjAxsaWJyYXJ5L2FpZmOUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9haWZjLmh0bWyUjCthaWZjIOKAlCBSZWFkIGFuZCB3cml0ZSBBSUZGIGFuZCBBSUZDIGZpbGVzlHSUjA1saWJyYXJ5L2FsbG9zlChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYWxsb3MuaHRtbJSMIUdlbmVyaWMgT3BlcmF0aW5nIFN5c3RlbSBTZXJ2aWNlc5R0lIwRbGlicmFyeS9hcmNoaXZpbmeUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcmNoaXZpbmcuaHRtbJSMHkRhdGEgQ29tcHJlc3Npb24gYW5kIEFyY2hpdmluZ5R0lIwQbGlicmFyeS9hcmdwYXJzZZQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWyUjEhhcmdwYXJzZSDigJQgUGFyc2VyIGZvciBjb21tYW5kLWxpbmUgb3B0aW9ucywgYXJndW1lbnRzIGFuZCBzdWItY29tbWFuZHOUdJSMDWxpYnJhcnkvYXJyYXmUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hcnJheS5odG1slIwsYXJyYXkg4oCUIEVmZmljaWVudCBhcnJheXMgb2YgbnVtZXJpYyB2YWx1ZXOUdJSMC2xpYnJhcnkvYXN0lChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN0Lmh0bWyUjB1hc3Qg4oCUIEFic3RyYWN0IFN5bnRheCBUcmVlc5R0lIwQbGlicmFyeS9hc3luY2hhdJQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaGF0Lmh0bWyUjDlhc3luY2hhdCDigJQgQXN5bmNocm9ub3VzIHNvY2tldCBjb21tYW5kL3Jlc3BvbnNlIGhhbmRsZXKUdJSMD2xpYnJhcnkvYXN5bmNpb5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8uaHRtbJSMHGFzeW5jaW8g4oCUIEFzeW5jaHJvbm91cyBJL0+UdJSMGWxpYnJhcnkvYXN5bmNpby1hcGktaW5kZXiUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWFwaS1pbmRleC5odG1slIwUSGlnaC1sZXZlbCBBUEkgSW5kZXiUdJSME2xpYnJhcnkvYXN5bmNpby1kZXaUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWRldi5odG1slIwXRGV2ZWxvcGluZyB3aXRoIGFzeW5jaW+UdJSMGWxpYnJhcnkvYXN5bmNpby1ldmVudGxvb3CUKGoKjwAAaguPAACMOGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5odG1slIwKRXZlbnQgTG9vcJR0lIwabGlicmFyeS9hc3luY2lvLWV4Y2VwdGlvbnOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWV4Y2VwdGlvbnMuaHRtbJSMCkV4Y2VwdGlvbnOUdJSMFmxpYnJhcnkvYXN5bmNpby1mdXR1cmWUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLWZ1dHVyZS5odG1slIwHRnV0dXJlc5R0lIwbbGlicmFyeS9hc3luY2lvLWxsYXBpLWluZGV4lChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1sbGFwaS1pbmRleC5odG1slIwTTG93LWxldmVsIEFQSSBJbmRleJR0lIwZbGlicmFyeS9hc3luY2lvLXBsYXRmb3Jtc5QoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcGxhdGZvcm1zLmh0bWyUjBBQbGF0Zm9ybSBTdXBwb3J0lHSUjBZsaWJyYXJ5L2FzeW5jaW8tcG9saWN5lChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby1wb2xpY3kuaHRtbJSMCFBvbGljaWVzlHSUjBhsaWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2yUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLmh0bWyUjBhUcmFuc3BvcnRzIGFuZCBQcm90b2NvbHOUdJSMFWxpYnJhcnkvYXN5bmNpby1xdWV1ZZQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tcXVldWUuaHRtbJSMBlF1ZXVlc5R0lIwWbGlicmFyeS9hc3luY2lvLXN0cmVhbZQoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLmh0bWyUjAdTdHJlYW1zlHSUjBpsaWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5odG1slIwMU3VicHJvY2Vzc2VzlHSUjBRsaWJyYXJ5L2FzeW5jaW8tc3luY5QoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jaW8tc3luYy5odG1slIwaU3luY2hyb25pemF0aW9uIFByaW1pdGl2ZXOUdJSMFGxpYnJhcnkvYXN5bmNpby10YXNrlChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYXN5bmNpby10YXNrLmh0bWyUjBRDb3JvdXRpbmVzIGFuZCBUYXNrc5R0lIwQbGlicmFyeS9hc3luY29yZZQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FzeW5jb3JlLmh0bWyUjChhc3luY29yZSDigJQgQXN5bmNocm9ub3VzIHNvY2tldCBoYW5kbGVylHSUjA5saWJyYXJ5L2F0ZXhpdJQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F0ZXhpdC5odG1slIwYYXRleGl0IOKAlCBFeGl0IGhhbmRsZXJzlHSUjA9saWJyYXJ5L2F1ZGlvb3CUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9hdWRpb29wLmh0bWyUjCVhdWRpb29wIOKAlCBNYW5pcHVsYXRlIHJhdyBhdWRpbyBkYXRhlHSUjBRsaWJyYXJ5L2F1ZGl0X2V2ZW50c5QoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2F1ZGl0X2V2ZW50cy5odG1slIwSQXVkaXQgZXZlbnRzIHRhYmxllHSUjA5saWJyYXJ5L2Jhc2U2NJQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Jhc2U2NC5odG1slIw4YmFzZTY0IOKAlCBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0LCBCYXNlODUgRGF0YSBFbmNvZGluZ3OUdJSMC2xpYnJhcnkvYmRilChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmRiLmh0bWyUjBpiZGIg4oCUIERlYnVnZ2VyIGZyYW1ld29ya5R0lIwObGlicmFyeS9iaW5hcnmUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5hcnkuaHRtbJSMFEJpbmFyeSBEYXRhIFNlcnZpY2VzlHSUjBBsaWJyYXJ5L2JpbmFzY2lplChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvYmluYXNjaWkuaHRtbJSMLWJpbmFzY2lpIOKAlCBDb252ZXJ0IGJldHdlZW4gYmluYXJ5IGFuZCBBU0NJSZR0lIwObGlicmFyeS9iaW5oZXiUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaW5oZXguaHRtbJSMKmJpbmhleCDigJQgRW5jb2RlIGFuZCBkZWNvZGUgYmluaGV4NCBmaWxlc5R0lIwObGlicmFyeS9iaXNlY3SUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iaXNlY3QuaHRtbJSMJGJpc2VjdCDigJQgQXJyYXkgYmlzZWN0aW9uIGFsZ29yaXRobZR0lIwQbGlicmFyeS9idWlsdGluc5QoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2J1aWx0aW5zLmh0bWyUjB1idWlsdGlucyDigJQgQnVpbHQtaW4gb2JqZWN0c5R0lIwLbGlicmFyeS9iejKUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9iejIuaHRtbJSMJWJ6MiDigJQgU3VwcG9ydCBmb3IgYnppcDIgY29tcHJlc3Npb26UdJSMEGxpYnJhcnkvY2FsZW5kYXKUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jYWxlbmRhci5odG1slIwvY2FsZW5kYXIg4oCUIEdlbmVyYWwgY2FsZW5kYXItcmVsYXRlZCBmdW5jdGlvbnOUdJSMC2xpYnJhcnkvY2dplChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpLmh0bWyUjChjZ2kg4oCUIENvbW1vbiBHYXRld2F5IEludGVyZmFjZSBzdXBwb3J0lHSUjA1saWJyYXJ5L2NnaXRilChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY2dpdGIuaHRtbJSMK2NnaXRiIOKAlCBUcmFjZWJhY2sgbWFuYWdlciBmb3IgQ0dJIHNjcmlwdHOUdJSMDWxpYnJhcnkvY2h1bmuUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jaHVuay5odG1slIwfY2h1bmsg4oCUIFJlYWQgSUZGIGNodW5rZWQgZGF0YZR0lIwNbGlicmFyeS9jbWF0aJQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtYXRoLmh0bWyUjDRjbWF0aCDigJQgTWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyBmb3IgY29tcGxleCBudW1iZXJzlHSUjAtsaWJyYXJ5L2NtZJQoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NtZC5odG1slIw2Y21kIOKAlCBTdXBwb3J0IGZvciBsaW5lLW9yaWVudGVkIGNvbW1hbmQgaW50ZXJwcmV0ZXJzlHSUjAxsaWJyYXJ5L2NvZGWUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2RlLmh0bWyUjCFjb2RlIOKAlCBJbnRlcnByZXRlciBiYXNlIGNsYXNzZXOUdJSMDmxpYnJhcnkvY29kZWNzlChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZWNzLmh0bWyUjCpjb2RlY3Mg4oCUIENvZGVjIHJlZ2lzdHJ5IGFuZCBiYXNlIGNsYXNzZXOUdJSMDmxpYnJhcnkvY29kZW9wlChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29kZW9wLmh0bWyUjB5jb2Rlb3Ag4oCUIENvbXBpbGUgUHl0aG9uIGNvZGWUdJSME2xpYnJhcnkvY29sbGVjdGlvbnOUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb2xsZWN0aW9ucy5odG1slIwjY29sbGVjdGlvbnMg4oCUIENvbnRhaW5lciBkYXRhdHlwZXOUdJSMF2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLmh0bWyUjDhjb2xsZWN0aW9ucy5hYmMg4oCUIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyBmb3IgQ29udGFpbmVyc5R0lIwQbGlicmFyeS9jb2xvcnN5c5QoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbG9yc3lzLmh0bWyUjC5jb2xvcnN5cyDigJQgQ29udmVyc2lvbnMgYmV0d2VlbiBjb2xvciBzeXN0ZW1zlHSUjBJsaWJyYXJ5L2NvbXBpbGVhbGyUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb21waWxlYWxsLmh0bWyUjCxjb21waWxlYWxsIOKAlCBCeXRlLWNvbXBpbGUgUHl0aG9uIGxpYnJhcmllc5R0lIwTbGlicmFyeS9jb25jdXJyZW5jeZQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmN1cnJlbmN5Lmh0bWyUjBRDb25jdXJyZW50IEV4ZWN1dGlvbpR0lIwSbGlicmFyeS9jb25jdXJyZW50lChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29uY3VycmVudC5odG1slIwWVGhlIGNvbmN1cnJlbnQgcGFja2FnZZR0lIwabGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXOUKGoKjwAAaguPAACMOWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMuaHRtbJSML2NvbmN1cnJlbnQuZnV0dXJlcyDigJQgTGF1bmNoaW5nIHBhcmFsbGVsIHRhc2tzlHSUjBRsaWJyYXJ5L2NvbmZpZ3BhcnNlcpQoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1slIwqY29uZmlncGFyc2VyIOKAlCBDb25maWd1cmF0aW9uIGZpbGUgcGFyc2VylHSUjBFsaWJyYXJ5L2NvbnN0YW50c5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvbnN0YW50cy5odG1slIwSQnVpbHQtaW4gQ29uc3RhbnRzlHSUjBJsaWJyYXJ5L2NvbnRleHRsaWKUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jb250ZXh0bGliLmh0bWyUjDRjb250ZXh0bGliIOKAlCBVdGlsaXRpZXMgZm9yIHdpdGgtc3RhdGVtZW50IGNvbnRleHRzlHSUjBNsaWJyYXJ5L2NvbnRleHR2YXJzlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29udGV4dHZhcnMuaHRtbJSMIWNvbnRleHR2YXJzIOKAlCBDb250ZXh0IFZhcmlhYmxlc5R0lIwMbGlicmFyeS9jb3B5lChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY29weS5odG1slIwpY29weSDigJQgU2hhbGxvdyBhbmQgZGVlcCBjb3B5IG9wZXJhdGlvbnOUdJSMD2xpYnJhcnkvY29weXJlZ5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NvcHlyZWcuaHRtbJSMLWNvcHlyZWcg4oCUIFJlZ2lzdGVyIHBpY2tsZSBzdXBwb3J0IGZ1bmN0aW9uc5R0lIwNbGlicmFyeS9jcnlwdJQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2NyeXB0Lmh0bWyUjCpjcnlwdCDigJQgRnVuY3Rpb24gdG8gY2hlY2sgVW5peCBwYXNzd29yZHOUdJSMDmxpYnJhcnkvY3J5cHRvlChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3J5cHRvLmh0bWyUjBZDcnlwdG9ncmFwaGljIFNlcnZpY2VzlHSUjAtsaWJyYXJ5L2NzdpQoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Nzdi5odG1slIwkY3N2IOKAlCBDU1YgRmlsZSBSZWFkaW5nIGFuZCBXcml0aW5nlHSUjA5saWJyYXJ5L2N0eXBlc5QoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N0eXBlcy5odG1slIwwY3R5cGVzIOKAlCBBIGZvcmVpZ24gZnVuY3Rpb24gbGlicmFyeSBmb3IgUHl0aG9ulHSUjA5saWJyYXJ5L2N1cnNlc5QoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2N1cnNlcy5odG1slIw4Y3Vyc2VzIOKAlCBUZXJtaW5hbCBoYW5kbGluZyBmb3IgY2hhcmFjdGVyLWNlbGwgZGlzcGxheXOUdJSMFGxpYnJhcnkvY3Vyc2VzLmFzY2lplChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLmh0bWyUjC9jdXJzZXMuYXNjaWkg4oCUIFV0aWxpdGllcyBmb3IgQVNDSUkgY2hhcmFjdGVyc5R0lIwUbGlicmFyeS9jdXJzZXMucGFuZWyUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXJzZXMucGFuZWwuaHRtbJSMM2N1cnNlcy5wYW5lbCDigJQgQSBwYW5lbCBzdGFjayBleHRlbnNpb24gZm9yIGN1cnNlc5R0lIwUbGlicmFyeS9jdXN0b21pbnRlcnCUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9jdXN0b21pbnRlcnAuaHRtbJSMGkN1c3RvbSBQeXRob24gSW50ZXJwcmV0ZXJzlHSUjBNsaWJyYXJ5L2RhdGFjbGFzc2VzlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0YWNsYXNzZXMuaHRtbJSMHGRhdGFjbGFzc2VzIOKAlCBEYXRhIENsYXNzZXOUdJSMEWxpYnJhcnkvZGF0YXR5cGVzlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0YXR5cGVzLmh0bWyUjApEYXRhIFR5cGVzlHSUjBBsaWJyYXJ5L2RhdGV0aW1llChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbJSMJmRhdGV0aW1lIOKAlCBCYXNpYyBkYXRlIGFuZCB0aW1lIHR5cGVzlHSUjAtsaWJyYXJ5L2RibZQoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RibS5odG1slIwqZGJtIOKAlCBJbnRlcmZhY2VzIHRvIFVuaXgg4oCcZGF0YWJhc2Vz4oCdlHSUjA1saWJyYXJ5L2RlYnVnlChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGVidWcuaHRtbJSMF0RlYnVnZ2luZyBhbmQgUHJvZmlsaW5nlHSUjA9saWJyYXJ5L2RlY2ltYWyUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kZWNpbWFsLmh0bWyUjD1kZWNpbWFsIOKAlCBEZWNpbWFsIGZpeGVkIHBvaW50IGFuZCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljlHSUjBNsaWJyYXJ5L2RldmVsb3BtZW50lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGV2ZWxvcG1lbnQuaHRtbJSMEURldmVsb3BtZW50IFRvb2xzlHSUjA9saWJyYXJ5L2RpZmZsaWKUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaWZmbGliLmh0bWyUjChkaWZmbGliIOKAlCBIZWxwZXJzIGZvciBjb21wdXRpbmcgZGVsdGFzlHSUjAtsaWJyYXJ5L2Rpc5QoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpcy5odG1slIwoZGlzIOKAlCBEaXNhc3NlbWJsZXIgZm9yIFB5dGhvbiBieXRlY29kZZR0lIwUbGlicmFyeS9kaXN0cmlidXRpb26UKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXN0cmlidXRpb24uaHRtbJSMI1NvZnR3YXJlIFBhY2thZ2luZyBhbmQgRGlzdHJpYnV0aW9ulHSUjBFsaWJyYXJ5L2Rpc3R1dGlsc5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Rpc3R1dGlscy5odG1slIw0ZGlzdHV0aWxzIOKAlCBCdWlsZGluZyBhbmQgaW5zdGFsbGluZyBQeXRob24gbW9kdWxlc5R0lIwPbGlicmFyeS9kb2N0ZXN0lChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZG9jdGVzdC5odG1slIwsZG9jdGVzdCDigJQgVGVzdCBpbnRlcmFjdGl2ZSBQeXRob24gZXhhbXBsZXOUdJSMF2xpYnJhcnkvZHVtbXlfdGhyZWFkaW5nlChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZHVtbXlfdGhyZWFkaW5nLmh0bWyUjEBkdW1teV90aHJlYWRpbmcg4oCUIERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSB0aHJlYWRpbmcgbW9kdWxllHSUjA1saWJyYXJ5L2VtYWlslChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaHRtbJSMLGVtYWlsIOKAlCBBbiBlbWFpbCBhbmQgTUlNRSBoYW5kbGluZyBwYWNrYWdllHSUjBVsaWJyYXJ5L2VtYWlsLmNoYXJzZXSUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5jaGFyc2V0Lmh0bWyUjCplbWFpbC5jaGFyc2V0OiBSZXByZXNlbnRpbmcgY2hhcmFjdGVyIHNldHOUdJSMHmxpYnJhcnkvZW1haWwuY29tcGF0MzItbWVzc2FnZZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbXBhdDMyLW1lc3NhZ2UuaHRtbJSMS2VtYWlsLm1lc3NhZ2UuTWVzc2FnZTogUmVwcmVzZW50aW5nIGFuIGVtYWlsIG1lc3NhZ2UgdXNpbmcgdGhlIGNvbXBhdDMyIEFQSZR0lIwcbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlcpQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLmh0bWyUjCtlbWFpbC5jb250ZW50bWFuYWdlcjogTWFuYWdpbmcgTUlNRSBDb250ZW50lHSUjBZsaWJyYXJ5L2VtYWlsLmVuY29kZXJzlChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMuaHRtbJSMGGVtYWlsLmVuY29kZXJzOiBFbmNvZGVyc5R0lIwUbGlicmFyeS9lbWFpbC5lcnJvcnOUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5lcnJvcnMuaHRtbJSMKmVtYWlsLmVycm9yczogRXhjZXB0aW9uIGFuZCBEZWZlY3QgY2xhc3Nlc5R0lIwWbGlicmFyeS9lbWFpbC5leGFtcGxlc5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2VtYWlsLmV4YW1wbGVzLmh0bWyUjA9lbWFpbDogRXhhbXBsZXOUdJSMF2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9ylChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLmh0bWyUjCplbWFpbC5nZW5lcmF0b3I6IEdlbmVyYXRpbmcgTUlNRSBkb2N1bWVudHOUdJSMFGxpYnJhcnkvZW1haWwuaGVhZGVylChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwuaGVhZGVyLmh0bWyUjCdlbWFpbC5oZWFkZXI6IEludGVybmF0aW9uYWxpemVkIGhlYWRlcnOUdJSMHGxpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnmUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5odG1slIwrZW1haWwuaGVhZGVycmVnaXN0cnk6IEN1c3RvbSBIZWFkZXIgT2JqZWN0c5R0lIwXbGlicmFyeS9lbWFpbC5pdGVyYXRvcnOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMuaHRtbJSMGmVtYWlsLml0ZXJhdG9yczogSXRlcmF0b3JzlHSUjBVsaWJyYXJ5L2VtYWlsLm1lc3NhZ2WUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbWFpbC5tZXNzYWdlLmh0bWyUjCxlbWFpbC5tZXNzYWdlOiBSZXByZXNlbnRpbmcgYW4gZW1haWwgbWVzc2FnZZR0lIwSbGlicmFyeS9lbWFpbC5taW1llChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwubWltZS5odG1slIw4ZW1haWwubWltZTogQ3JlYXRpbmcgZW1haWwgYW5kIE1JTUUgb2JqZWN0cyBmcm9tIHNjcmF0Y2iUdJSMFGxpYnJhcnkvZW1haWwucGFyc2VylChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucGFyc2VyLmh0bWyUjCRlbWFpbC5wYXJzZXI6IFBhcnNpbmcgZW1haWwgbWVzc2FnZXOUdJSMFGxpYnJhcnkvZW1haWwucG9saWN5lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwucG9saWN5Lmh0bWyUjBxlbWFpbC5wb2xpY3k6IFBvbGljeSBPYmplY3RzlHSUjBNsaWJyYXJ5L2VtYWlsLnV0aWxzlChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW1haWwudXRpbHMuaHRtbJSMJGVtYWlsLnV0aWxzOiBNaXNjZWxsYW5lb3VzIHV0aWxpdGllc5R0lIwRbGlicmFyeS9lbnN1cmVwaXCUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9lbnN1cmVwaXAuaHRtbJSMLWVuc3VyZXBpcCDigJQgQm9vdHN0cmFwcGluZyB0aGUgcGlwIGluc3RhbGxlcpR0lIwMbGlicmFyeS9lbnVtlChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZW51bS5odG1slIwhZW51bSDigJQgU3VwcG9ydCBmb3IgZW51bWVyYXRpb25zlHSUjA1saWJyYXJ5L2Vycm5vlChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXJybm8uaHRtbJSMJ2Vycm5vIOKAlCBTdGFuZGFyZCBlcnJubyBzeXN0ZW0gc3ltYm9sc5R0lIwSbGlicmFyeS9leGNlcHRpb25zlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZXhjZXB0aW9ucy5odG1slIwTQnVpbHQtaW4gRXhjZXB0aW9uc5R0lIwUbGlicmFyeS9mYXVsdGhhbmRsZXKUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mYXVsdGhhbmRsZXIuaHRtbJSMKmZhdWx0aGFuZGxlciDigJQgRHVtcCB0aGUgUHl0aG9uIHRyYWNlYmFja5R0lIwNbGlicmFyeS9mY250bJQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZjbnRsLmh0bWyUjCpmY250bCDigJQgVGhlIGZjbnRsIGFuZCBpb2N0bCBzeXN0ZW0gY2FsbHOUdJSMD2xpYnJhcnkvZmlsZWNtcJQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVjbXAuaHRtbJSMKmZpbGVjbXAg4oCUIEZpbGUgYW5kIERpcmVjdG9yeSBDb21wYXJpc29uc5R0lIwTbGlicmFyeS9maWxlZm9ybWF0c5QoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVmb3JtYXRzLmh0bWyUjAxGaWxlIEZvcm1hdHOUdJSMEWxpYnJhcnkvZmlsZWlucHV0lChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZmlsZWlucHV0Lmh0bWyUjDxmaWxlaW5wdXQg4oCUIEl0ZXJhdGUgb3ZlciBsaW5lcyBmcm9tIG11bHRpcGxlIGlucHV0IHN0cmVhbXOUdJSMD2xpYnJhcnkvZmlsZXN5c5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZpbGVzeXMuaHRtbJSMGUZpbGUgYW5kIERpcmVjdG9yeSBBY2Nlc3OUdJSMD2xpYnJhcnkvZm5tYXRjaJQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ZubWF0Y2guaHRtbJSMKmZubWF0Y2gg4oCUIFVuaXggZmlsZW5hbWUgcGF0dGVybiBtYXRjaGluZ5R0lIwRbGlicmFyeS9mb3JtYXR0ZXKUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mb3JtYXR0ZXIuaHRtbJSMJ2Zvcm1hdHRlciDigJQgR2VuZXJpYyBvdXRwdXQgZm9ybWF0dGluZ5R0lIwRbGlicmFyeS9mcmFjdGlvbnOUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mcmFjdGlvbnMuaHRtbJSMHmZyYWN0aW9ucyDigJQgUmF0aW9uYWwgbnVtYmVyc5R0lIwSbGlicmFyeS9mcmFtZXdvcmtzlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnJhbWV3b3Jrcy5odG1slIwSUHJvZ3JhbSBGcmFtZXdvcmtzlHSUjA5saWJyYXJ5L2Z0cGxpYpQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2Z0cGxpYi5odG1slIweZnRwbGliIOKAlCBGVFAgcHJvdG9jb2wgY2xpZW50lHSUjBJsaWJyYXJ5L2Z1bmN0aW9uYWyUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9mdW5jdGlvbmFsLmh0bWyUjB5GdW5jdGlvbmFsIFByb2dyYW1taW5nIE1vZHVsZXOUdJSMEWxpYnJhcnkvZnVuY3Rpb25zlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWyUjBJCdWlsdC1pbiBGdW5jdGlvbnOUdJSMEWxpYnJhcnkvZnVuY3Rvb2xzlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZnVuY3Rvb2xzLmh0bWyUjEdmdW5jdG9vbHMg4oCUIEhpZ2hlci1vcmRlciBmdW5jdGlvbnMgYW5kIG9wZXJhdGlvbnMgb24gY2FsbGFibGUgb2JqZWN0c5R0lIwKbGlicmFyeS9nY5QoagqPAABqC48AAIwpaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2djLmh0bWyUjCJnYyDigJQgR2FyYmFnZSBDb2xsZWN0b3IgaW50ZXJmYWNllHSUjA5saWJyYXJ5L2dldG9wdJQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldG9wdC5odG1slIwyZ2V0b3B0IOKAlCBDLXN0eWxlIHBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnOUdJSMD2xpYnJhcnkvZ2V0cGFzc5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dldHBhc3MuaHRtbJSMI2dldHBhc3Mg4oCUIFBvcnRhYmxlIHBhc3N3b3JkIGlucHV0lHSUjA9saWJyYXJ5L2dldHRleHSUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9nZXR0ZXh0Lmh0bWyUjDZnZXR0ZXh0IOKAlCBNdWx0aWxpbmd1YWwgaW50ZXJuYXRpb25hbGl6YXRpb24gc2VydmljZXOUdJSMDGxpYnJhcnkvZ2xvYpQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2dsb2IuaHRtbJSMLmdsb2Ig4oCUIFVuaXggc3R5bGUgcGF0aG5hbWUgcGF0dGVybiBleHBhbnNpb26UdJSMC2xpYnJhcnkvZ3JwlChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3JwLmh0bWyUjBpncnAg4oCUIFRoZSBncm91cCBkYXRhYmFzZZR0lIwMbGlicmFyeS9nemlwlChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZ3ppcC5odG1slIwfZ3ppcCDigJQgU3VwcG9ydCBmb3IgZ3ppcCBmaWxlc5R0lIwPbGlicmFyeS9oYXNobGlilChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGFzaGxpYi5odG1slIwtaGFzaGxpYiDigJQgU2VjdXJlIGhhc2hlcyBhbmQgbWVzc2FnZSBkaWdlc3RzlHSUjA1saWJyYXJ5L2hlYXBxlChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaGVhcHEuaHRtbJSMHmhlYXBxIOKAlCBIZWFwIHF1ZXVlIGFsZ29yaXRobZR0lIwMbGlicmFyeS9obWFjlChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaG1hYy5odG1slIwxaG1hYyDigJQgS2V5ZWQtSGFzaGluZyBmb3IgTWVzc2FnZSBBdXRoZW50aWNhdGlvbpR0lIwMbGlicmFyeS9odG1slChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaHRtbC5odG1slIwqaHRtbCDigJQgSHlwZXJUZXh0IE1hcmt1cCBMYW5ndWFnZSBzdXBwb3J0lHSUjBVsaWJyYXJ5L2h0bWwuZW50aXRpZXOUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLmVudGl0aWVzLmh0bWyUjDZodG1sLmVudGl0aWVzIOKAlCBEZWZpbml0aW9ucyBvZiBIVE1MIGdlbmVyYWwgZW50aXRpZXOUdJSME2xpYnJhcnkvaHRtbC5wYXJzZXKUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odG1sLnBhcnNlci5odG1slIwsaHRtbC5wYXJzZXIg4oCUIFNpbXBsZSBIVE1MIGFuZCBYSFRNTCBwYXJzZXKUdJSMDGxpYnJhcnkvaHR0cJQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuaHRtbJSMFWh0dHAg4oCUIEhUVFAgbW9kdWxlc5R0lIwTbGlicmFyeS9odHRwLmNsaWVudJQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY2xpZW50Lmh0bWyUjCRodHRwLmNsaWVudCDigJQgSFRUUCBwcm90b2NvbCBjbGllbnSUdJSMFmxpYnJhcnkvaHR0cC5jb29raWVqYXKUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLmNvb2tpZWphci5odG1slIwzaHR0cC5jb29raWVqYXIg4oCUIENvb2tpZSBoYW5kbGluZyBmb3IgSFRUUCBjbGllbnRzlHSUjBRsaWJyYXJ5L2h0dHAuY29va2llc5QoagqPAABqC48AAIwzaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2h0dHAuY29va2llcy5odG1slIwmaHR0cC5jb29raWVzIOKAlCBIVFRQIHN0YXRlIG1hbmFnZW1lbnSUdJSME2xpYnJhcnkvaHR0cC5zZXJ2ZXKUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9odHRwLnNlcnZlci5odG1slIwcaHR0cC5zZXJ2ZXIg4oCUIEhUVFAgc2VydmVyc5R0lIwMbGlicmFyeS9pMThulChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaTE4bi5odG1slIwUSW50ZXJuYXRpb25hbGl6YXRpb26UdJSMDGxpYnJhcnkvaWRsZZQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lkbGUuaHRtbJSMBElETEWUdJSMD2xpYnJhcnkvaW1hcGxpYpQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltYXBsaWIuaHRtbJSMIWltYXBsaWIg4oCUIElNQVA0IHByb3RvY29sIGNsaWVudJR0lIwObGlicmFyeS9pbWdoZHKUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbWdoZHIuaHRtbJSMKWltZ2hkciDigJQgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGFuIGltYWdllHSUjAtsaWJyYXJ5L2ltcJQoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ltcC5odG1slIwjaW1wIOKAlCBBY2Nlc3MgdGhlIGltcG9ydCBpbnRlcm5hbHOUdJSMEWxpYnJhcnkvaW1wb3J0bGlilChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWyUjCppbXBvcnRsaWIg4oCUIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBpbXBvcnSUdJSMGmxpYnJhcnkvaW1wb3J0bGliLm1ldGFkYXRhlChqCo8AAGoLjwAAjDlodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLm1ldGFkYXRhLmh0bWyUjBhVc2luZyBpbXBvcnRsaWIubWV0YWRhdGGUdJSMDWxpYnJhcnkvaW5kZXiUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbmRleC5odG1slIwbVGhlIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5lHSUjA9saWJyYXJ5L2luc3BlY3SUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnNwZWN0Lmh0bWyUjCBpbnNwZWN0IOKAlCBJbnNwZWN0IGxpdmUgb2JqZWN0c5R0lIwQbGlicmFyeS9pbnRlcm5ldJQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2ludGVybmV0Lmh0bWyUjB5JbnRlcm5ldCBQcm90b2NvbHMgYW5kIFN1cHBvcnSUdJSMDWxpYnJhcnkvaW50cm+UKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pbnRyby5odG1slIwMSW50cm9kdWN0aW9ulHSUjApsaWJyYXJ5L2lvlChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW8uaHRtbJSMKmlvIOKAlCBDb3JlIHRvb2xzIGZvciB3b3JraW5nIHdpdGggc3RyZWFtc5R0lIwRbGlicmFyeS9pcGFkZHJlc3OUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9pcGFkZHJlc3MuaHRtbJSMLGlwYWRkcmVzcyDigJQgSVB2NC9JUHY2IG1hbmlwdWxhdGlvbiBsaWJyYXJ5lHSUjAtsaWJyYXJ5L2lwY5QoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2lwYy5odG1slIwpTmV0d29ya2luZyBhbmQgSW50ZXJwcm9jZXNzIENvbW11bmljYXRpb26UdJSMEWxpYnJhcnkvaXRlcnRvb2xzlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaXRlcnRvb2xzLmh0bWyUjEBpdGVydG9vbHMg4oCUIEZ1bmN0aW9ucyBjcmVhdGluZyBpdGVyYXRvcnMgZm9yIGVmZmljaWVudCBsb29waW5nlHSUjAxsaWJyYXJ5L2pzb26UKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9qc29uLmh0bWyUjCFqc29uIOKAlCBKU09OIGVuY29kZXIgYW5kIGRlY29kZXKUdJSMD2xpYnJhcnkva2V5d29yZJQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2tleXdvcmQuaHRtbJSMJ2tleXdvcmQg4oCUIFRlc3RpbmcgZm9yIFB5dGhvbiBrZXl3b3Jkc5R0lIwQbGlicmFyeS9sYW5ndWFnZZQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xhbmd1YWdlLmh0bWyUjBhQeXRob24gTGFuZ3VhZ2UgU2VydmljZXOUdJSMEWxpYnJhcnkvbGluZWNhY2hllChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbGluZWNhY2hlLmh0bWyUjClsaW5lY2FjaGUg4oCUIFJhbmRvbSBhY2Nlc3MgdG8gdGV4dCBsaW5lc5R0lIwObGlicmFyeS9sb2NhbGWUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2NhbGUuaHRtbJSMKGxvY2FsZSDigJQgSW50ZXJuYXRpb25hbGl6YXRpb24gc2VydmljZXOUdJSMD2xpYnJhcnkvbG9nZ2luZ5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuaHRtbJSMJ2xvZ2dpbmcg4oCUIExvZ2dpbmcgZmFjaWxpdHkgZm9yIFB5dGhvbpR0lIwWbGlicmFyeS9sb2dnaW5nLmNvbmZpZ5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLmh0bWyUjChsb2dnaW5nLmNvbmZpZyDigJQgTG9nZ2luZyBjb25maWd1cmF0aW9ulHSUjBhsaWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLmh0bWyUjCVsb2dnaW5nLmhhbmRsZXJzIOKAlCBMb2dnaW5nIGhhbmRsZXJzlHSUjAxsaWJyYXJ5L2x6bWGUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sem1hLmh0bWyUjC1sem1hIOKAlCBDb21wcmVzc2lvbiB1c2luZyB0aGUgTFpNQSBhbGdvcml0aG2UdJSMD2xpYnJhcnkvbWFpbGJveJQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21haWxib3guaHRtbJSMM21haWxib3gg4oCUIE1hbmlwdWxhdGUgbWFpbGJveGVzIGluIHZhcmlvdXMgZm9ybWF0c5R0lIwPbGlicmFyeS9tYWlsY2FwlChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFpbGNhcC5odG1slIwhbWFpbGNhcCDigJQgTWFpbGNhcCBmaWxlIGhhbmRsaW5nlHSUjA5saWJyYXJ5L21hcmt1cJQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21hcmt1cC5odG1slIwiU3RydWN0dXJlZCBNYXJrdXAgUHJvY2Vzc2luZyBUb29sc5R0lIwPbGlicmFyeS9tYXJzaGFslChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbWFyc2hhbC5odG1slIwwbWFyc2hhbCDigJQgSW50ZXJuYWwgUHl0aG9uIG9iamVjdCBzZXJpYWxpemF0aW9ulHSUjAxsaWJyYXJ5L21hdGiUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tYXRoLmh0bWyUjB9tYXRoIOKAlCBNYXRoZW1hdGljYWwgZnVuY3Rpb25zlHSUjBFsaWJyYXJ5L21pbWV0eXBlc5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21pbWV0eXBlcy5odG1slIwpbWltZXR5cGVzIOKAlCBNYXAgZmlsZW5hbWVzIHRvIE1JTUUgdHlwZXOUdJSMDGxpYnJhcnkvbWlzY5QoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L21pc2MuaHRtbJSMFk1pc2NlbGxhbmVvdXMgU2VydmljZXOUdJSMCmxpYnJhcnkvbW2UKGoKjwAAaguPAACMKWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tbS5odG1slIwTTXVsdGltZWRpYSBTZXJ2aWNlc5R0lIwMbGlicmFyeS9tbWFwlChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW1hcC5odG1slIwjbW1hcCDigJQgTWVtb3J5LW1hcHBlZCBmaWxlIHN1cHBvcnSUdJSMFGxpYnJhcnkvbW9kdWxlZmluZGVylChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbW9kdWxlZmluZGVyLmh0bWyUjC5tb2R1bGVmaW5kZXIg4oCUIEZpbmQgbW9kdWxlcyB1c2VkIGJ5IGEgc2NyaXB0lHSUjA9saWJyYXJ5L21vZHVsZXOUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tb2R1bGVzLmh0bWyUjBFJbXBvcnRpbmcgTW9kdWxlc5R0lIwObGlicmFyeS9tc2lsaWKUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc2lsaWIuaHRtbJSMM21zaWxpYiDigJQgUmVhZCBhbmQgd3JpdGUgTWljcm9zb2Z0IEluc3RhbGxlciBmaWxlc5R0lIwObGlicmFyeS9tc3ZjcnSUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tc3ZjcnQuaHRtbJSMM21zdmNydCDigJQgVXNlZnVsIHJvdXRpbmVzIGZyb20gdGhlIE1TIFZDKysgcnVudGltZZR0lIwXbGlicmFyeS9tdWx0aXByb2Nlc3NpbmeUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcuaHRtbJSMLW11bHRpcHJvY2Vzc2luZyDigJQgUHJvY2Vzcy1iYXNlZCBwYXJhbGxlbGlzbZR0lIwlbGlicmFyeS9tdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeZQoagqPAABqC48AAIxEaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5zaGFyZWRfbWVtb3J5Lmh0bWyUjFxtdWx0aXByb2Nlc3Npbmcuc2hhcmVkX21lbW9yeSDigJQgIFByb3ZpZGVzIHNoYXJlZCBtZW1vcnkgZm9yIGRpcmVjdCBhY2Nlc3MgYWNyb3NzIHByb2Nlc3Nlc5R0lIwPbGlicmFyeS9uZXRkYXRhlChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbmV0ZGF0YS5odG1slIwWSW50ZXJuZXQgRGF0YSBIYW5kbGluZ5R0lIwNbGlicmFyeS9uZXRyY5QoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25ldHJjLmh0bWyUjB9uZXRyYyDigJQgbmV0cmMgZmlsZSBwcm9jZXNzaW5nlHSUjAtsaWJyYXJ5L25pc5QoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25pcy5odG1slIwvbmlzIOKAlCBJbnRlcmZhY2UgdG8gU3Vu4oCZcyBOSVMgKFllbGxvdyBQYWdlcymUdJSMD2xpYnJhcnkvbm50cGxpYpQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L25udHBsaWIuaHRtbJSMIG5udHBsaWIg4oCUIE5OVFAgcHJvdG9jb2wgY2xpZW50lHSUjA9saWJyYXJ5L251bWJlcnOUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9udW1iZXJzLmh0bWyUjCludW1iZXJzIOKAlCBOdW1lcmljIGFic3RyYWN0IGJhc2UgY2xhc3Nlc5R0lIwPbGlicmFyeS9udW1lcmljlChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbnVtZXJpYy5odG1slIwgTnVtZXJpYyBhbmQgTWF0aGVtYXRpY2FsIE1vZHVsZXOUdJSMEGxpYnJhcnkvb3BlcmF0b3KUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcGVyYXRvci5odG1slIwsb3BlcmF0b3Ig4oCUIFN0YW5kYXJkIG9wZXJhdG9ycyBhcyBmdW5jdGlvbnOUdJSMEGxpYnJhcnkvb3B0cGFyc2WUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcHRwYXJzZS5odG1slIwsb3B0cGFyc2Ug4oCUIFBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnOUdJSMCmxpYnJhcnkvb3OUKGoKjwAAaguPAACMKWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5odG1slIwwb3Mg4oCUIE1pc2NlbGxhbmVvdXMgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcmZhY2VzlHSUjA9saWJyYXJ5L29zLnBhdGiUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vcy5wYXRoLmh0bWyUjClvcy5wYXRoIOKAlCBDb21tb24gcGF0aG5hbWUgbWFuaXB1bGF0aW9uc5R0lIwTbGlicmFyeS9vc3NhdWRpb2RldpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L29zc2F1ZGlvZGV2Lmh0bWyUjDZvc3NhdWRpb2RldiDigJQgQWNjZXNzIHRvIE9TUy1jb21wYXRpYmxlIGF1ZGlvIGRldmljZXOUdJSMEGxpYnJhcnkvb3RoZXJndWmUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9vdGhlcmd1aS5odG1slIwnT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzlHSUjA5saWJyYXJ5L3BhcnNlcpQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BhcnNlci5odG1slIwkcGFyc2VyIOKAlCBBY2Nlc3MgUHl0aG9uIHBhcnNlIHRyZWVzlHSUjA9saWJyYXJ5L3BhdGhsaWKUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wYXRobGliLmh0bWyUjCxwYXRobGliIOKAlCBPYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRoc5R0lIwLbGlicmFyeS9wZGKUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wZGIuaHRtbJSMG3BkYiDigJQgVGhlIFB5dGhvbiBEZWJ1Z2dlcpR0lIwTbGlicmFyeS9wZXJzaXN0ZW5jZZQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BlcnNpc3RlbmNlLmh0bWyUjBBEYXRhIFBlcnNpc3RlbmNllHSUjA5saWJyYXJ5L3BpY2tsZZQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpY2tsZS5odG1slIwmcGlja2xlIOKAlCBQeXRob24gb2JqZWN0IHNlcmlhbGl6YXRpb26UdJSME2xpYnJhcnkvcGlja2xldG9vbHOUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9waWNrbGV0b29scy5odG1slIwrcGlja2xldG9vbHMg4oCUIFRvb2xzIGZvciBwaWNrbGUgZGV2ZWxvcGVyc5R0lIwNbGlicmFyeS9waXBlc5QoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BpcGVzLmh0bWyUjCZwaXBlcyDigJQgSW50ZXJmYWNlIHRvIHNoZWxsIHBpcGVsaW5lc5R0lIwPbGlicmFyeS9wa2d1dGlslChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGtndXRpbC5odG1slIwlcGtndXRpbCDigJQgUGFja2FnZSBleHRlbnNpb24gdXRpbGl0eZR0lIwQbGlicmFyeS9wbGF0Zm9ybZQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BsYXRmb3JtLmh0bWyUjEBwbGF0Zm9ybSDigJQgIEFjY2VzcyB0byB1bmRlcmx5aW5nIHBsYXRmb3Jt4oCZcyBpZGVudGlmeWluZyBkYXRhlHSUjBBsaWJyYXJ5L3BsaXN0bGlilChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcGxpc3RsaWIuaHRtbJSMNXBsaXN0bGliIOKAlCBHZW5lcmF0ZSBhbmQgcGFyc2UgTWFjIE9TIFggLnBsaXN0IGZpbGVzlHSUjA5saWJyYXJ5L3BvcGxpYpQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3BvcGxpYi5odG1slIwfcG9wbGliIOKAlCBQT1AzIHByb3RvY29sIGNsaWVudJR0lIwNbGlicmFyeS9wb3NpeJQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Bvc2l4Lmh0bWyUjCxwb3NpeCDigJQgVGhlIG1vc3QgY29tbW9uIFBPU0lYIHN5c3RlbSBjYWxsc5R0lIwObGlicmFyeS9wcHJpbnSUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9wcHJpbnQuaHRtbJSMHnBwcmludCDigJQgRGF0YSBwcmV0dHkgcHJpbnRlcpR0lIwPbGlicmFyeS9wcm9maWxllChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHJvZmlsZS5odG1slIwUVGhlIFB5dGhvbiBQcm9maWxlcnOUdJSMC2xpYnJhcnkvcHR5lChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHR5Lmh0bWyUjCFwdHkg4oCUIFBzZXVkby10ZXJtaW5hbCB1dGlsaXRpZXOUdJSMC2xpYnJhcnkvcHdklChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHdkLmh0bWyUjB1wd2Qg4oCUIFRoZSBwYXNzd29yZCBkYXRhYmFzZZR0lIwSbGlicmFyeS9weV9jb21waWxllChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlfY29tcGlsZS5odG1slIwqcHlfY29tcGlsZSDigJQgQ29tcGlsZSBQeXRob24gc291cmNlIGZpbGVzlHSUjA5saWJyYXJ5L3B5Y2xicpQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5Y2xici5odG1slIwocHljbGJyIOKAlCBQeXRob24gbW9kdWxlIGJyb3dzZXIgc3VwcG9ydJR0lIwNbGlicmFyeS9weWRvY5QoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3B5ZG9jLmh0bWyUjDhweWRvYyDigJQgRG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgYW5kIG9ubGluZSBoZWxwIHN5c3RlbZR0lIwPbGlicmFyeS9weWV4cGF0lChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHlleHBhdC5odG1slIwyeG1sLnBhcnNlcnMuZXhwYXQg4oCUIEZhc3QgWE1MIHBhcnNpbmcgdXNpbmcgRXhwYXSUdJSMDmxpYnJhcnkvcHl0aG9ulChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHl0aG9uLmh0bWyUjBdQeXRob24gUnVudGltZSBTZXJ2aWNlc5R0lIwNbGlicmFyeS9xdWV1ZZQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3F1ZXVlLmh0bWyUjCRxdWV1ZSDigJQgQSBzeW5jaHJvbml6ZWQgcXVldWUgY2xhc3OUdJSMDmxpYnJhcnkvcXVvcHJplChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcXVvcHJpLmh0bWyUjDdxdW9wcmkg4oCUIEVuY29kZSBhbmQgZGVjb2RlIE1JTUUgcXVvdGVkLXByaW50YWJsZSBkYXRhlHSUjA5saWJyYXJ5L3JhbmRvbZQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JhbmRvbS5odG1slIwpcmFuZG9tIOKAlCBHZW5lcmF0ZSBwc2V1ZG8tcmFuZG9tIG51bWJlcnOUdJSMCmxpYnJhcnkvcmWUKGoKjwAAaguPAACMKWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZS5odG1slIwkcmUg4oCUIFJlZ3VsYXIgZXhwcmVzc2lvbiBvcGVyYXRpb25zlHSUjBBsaWJyYXJ5L3JlYWRsaW5llChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVhZGxpbmUuaHRtbJSMI3JlYWRsaW5lIOKAlCBHTlUgcmVhZGxpbmUgaW50ZXJmYWNllHSUjA9saWJyYXJ5L3JlcHJsaWKUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9yZXBybGliLmh0bWyUjCtyZXBybGliIOKAlCBBbHRlcm5hdGUgcmVwcigpIGltcGxlbWVudGF0aW9ulHSUjBBsaWJyYXJ5L3Jlc291cmNllChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcmVzb3VyY2UuaHRtbJSMJ3Jlc291cmNlIOKAlCBSZXNvdXJjZSB1c2FnZSBpbmZvcm1hdGlvbpR0lIwTbGlicmFyeS9ybGNvbXBsZXRlcpQoagqPAABqC48AAIwyaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JsY29tcGxldGVyLmh0bWyUjDRybGNvbXBsZXRlciDigJQgQ29tcGxldGlvbiBmdW5jdGlvbiBmb3IgR05VIHJlYWRsaW5llHSUjA1saWJyYXJ5L3J1bnB5lChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcnVucHkuaHRtbJSML3J1bnB5IOKAlCBMb2NhdGluZyBhbmQgZXhlY3V0aW5nIFB5dGhvbiBtb2R1bGVzlHSUjA1saWJyYXJ5L3NjaGVklChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2NoZWQuaHRtbJSMGXNjaGVkIOKAlCBFdmVudCBzY2hlZHVsZXKUdJSMD2xpYnJhcnkvc2VjcmV0c5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NlY3JldHMuaHRtbJSMP3NlY3JldHMg4oCUIEdlbmVyYXRlIHNlY3VyZSByYW5kb20gbnVtYmVycyBmb3IgbWFuYWdpbmcgc2VjcmV0c5R0lIwObGlicmFyeS9zZWxlY3SUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zZWxlY3QuaHRtbJSMJXNlbGVjdCDigJQgV2FpdGluZyBmb3IgSS9PIGNvbXBsZXRpb26UdJSMEWxpYnJhcnkvc2VsZWN0b3JzlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2VsZWN0b3JzLmh0bWyUjClzZWxlY3RvcnMg4oCUIEhpZ2gtbGV2ZWwgSS9PIG11bHRpcGxleGluZ5R0lIwObGlicmFyeS9zaGVsdmWUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zaGVsdmUuaHRtbJSMJHNoZWx2ZSDigJQgUHl0aG9uIG9iamVjdCBwZXJzaXN0ZW5jZZR0lIwNbGlicmFyeS9zaGxleJQoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NobGV4Lmh0bWyUjCFzaGxleCDigJQgU2ltcGxlIGxleGljYWwgYW5hbHlzaXOUdJSMDmxpYnJhcnkvc2h1dGlslChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc2h1dGlsLmh0bWyUjCVzaHV0aWwg4oCUIEhpZ2gtbGV2ZWwgZmlsZSBvcGVyYXRpb25zlHSUjA5saWJyYXJ5L3NpZ25hbJQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpZ25hbC5odG1slIwvc2lnbmFsIOKAlCBTZXQgaGFuZGxlcnMgZm9yIGFzeW5jaHJvbm91cyBldmVudHOUdJSMDGxpYnJhcnkvc2l0ZZQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3NpdGUuaHRtbJSMKXNpdGUg4oCUIFNpdGUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBob29rlHSUjA1saWJyYXJ5L3NtdHBklChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGQuaHRtbJSMFXNtdHBkIOKAlCBTTVRQIFNlcnZlcpR0lIwPbGlicmFyeS9zbXRwbGlilChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc210cGxpYi5odG1slIwgc210cGxpYiDigJQgU01UUCBwcm90b2NvbCBjbGllbnSUdJSMDmxpYnJhcnkvc25kaGRylChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc25kaGRyLmh0bWyUjCdzbmRoZHIg4oCUIERldGVybWluZSB0eXBlIG9mIHNvdW5kIGZpbGWUdJSMDmxpYnJhcnkvc29ja2V0lChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc29ja2V0Lmh0bWyUjClzb2NrZXQg4oCUIExvdy1sZXZlbCBuZXR3b3JraW5nIGludGVyZmFjZZR0lIwUbGlicmFyeS9zb2NrZXRzZXJ2ZXKUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zb2NrZXRzZXJ2ZXIuaHRtbJSMMHNvY2tldHNlcnZlciDigJQgQSBmcmFtZXdvcmsgZm9yIG5ldHdvcmsgc2VydmVyc5R0lIwMbGlicmFyeS9zcHdklChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3B3ZC5odG1slIwlc3B3ZCDigJQgVGhlIHNoYWRvdyBwYXNzd29yZCBkYXRhYmFzZZR0lIwPbGlicmFyeS9zcWxpdGUzlChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3FsaXRlMy5odG1slIw1c3FsaXRlMyDigJQgREItQVBJIDIuMCBpbnRlcmZhY2UgZm9yIFNRTGl0ZSBkYXRhYmFzZXOUdJSMC2xpYnJhcnkvc3NslChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3NsLmh0bWyUjCpzc2wg4oCUIFRMUy9TU0wgd3JhcHBlciBmb3Igc29ja2V0IG9iamVjdHOUdJSMDGxpYnJhcnkvc3RhdJQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0YXQuaHRtbJSMJHN0YXQg4oCUIEludGVycHJldGluZyBzdGF0KCkgcmVzdWx0c5R0lIwSbGlicmFyeS9zdGF0aXN0aWNzlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RhdGlzdGljcy5odG1slIwwc3RhdGlzdGljcyDigJQgTWF0aGVtYXRpY2FsIHN0YXRpc3RpY3MgZnVuY3Rpb25zlHSUjBBsaWJyYXJ5L3N0ZHR5cGVzlChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3RkdHlwZXMuaHRtbJSMDkJ1aWx0LWluIFR5cGVzlHSUjA5saWJyYXJ5L3N0cmluZ5QoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZy5odG1slIwjc3RyaW5nIOKAlCBDb21tb24gc3RyaW5nIG9wZXJhdGlvbnOUdJSMEmxpYnJhcnkvc3RyaW5ncHJlcJQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N0cmluZ3ByZXAuaHRtbJSMKnN0cmluZ3ByZXAg4oCUIEludGVybmV0IFN0cmluZyBQcmVwYXJhdGlvbpR0lIwObGlicmFyeS9zdHJ1Y3SUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdHJ1Y3QuaHRtbJSMMHN0cnVjdCDigJQgSW50ZXJwcmV0IGJ5dGVzIGFzIHBhY2tlZCBiaW5hcnkgZGF0YZR0lIwSbGlicmFyeS9zdWJwcm9jZXNzlChqCo8AAGoLjwAAjDFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VicHJvY2Vzcy5odG1slIwkc3VicHJvY2VzcyDigJQgU3VicHJvY2VzcyBtYW5hZ2VtZW50lHSUjA1saWJyYXJ5L3N1bmF1lChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3VuYXUuaHRtbJSMJXN1bmF1IOKAlCBSZWFkIGFuZCB3cml0ZSBTdW4gQVUgZmlsZXOUdJSMEmxpYnJhcnkvc3VwZXJzZWRlZJQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1cGVyc2VkZWQuaHRtbJSMElN1cGVyc2VkZWQgTW9kdWxlc5R0lIwObGlicmFyeS9zeW1ib2yUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW1ib2wuaHRtbJSMMXN5bWJvbCDigJQgQ29uc3RhbnRzIHVzZWQgd2l0aCBQeXRob24gcGFyc2UgdHJlZXOUdJSMEGxpYnJhcnkvc3ltdGFibGWUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeW10YWJsZS5odG1slIw1c3ltdGFibGUg4oCUIEFjY2VzcyB0byB0aGUgY29tcGlsZXLigJlzIHN5bWJvbCB0YWJsZXOUdJSMC2xpYnJhcnkvc3lzlChqCo8AAGoLjwAAjCpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzLmh0bWyUjDBzeXMg4oCUIFN5c3RlbS1zcGVjaWZpYyBwYXJhbWV0ZXJzIGFuZCBmdW5jdGlvbnOUdJSMEWxpYnJhcnkvc3lzY29uZmlnlChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvc3lzY29uZmlnLmh0bWyUjERzeXNjb25maWcg4oCUIFByb3ZpZGUgYWNjZXNzIHRvIFB5dGhvbuKAmXMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbpR0lIwObGlicmFyeS9zeXNsb2eUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zeXNsb2cuaHRtbJSMJ3N5c2xvZyDigJQgVW5peCBzeXNsb2cgbGlicmFyeSByb3V0aW5lc5R0lIwQbGlicmFyeS90YWJuYW5ueZQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RhYm5hbm55Lmh0bWyUjC90YWJuYW5ueSDigJQgRGV0ZWN0aW9uIG9mIGFtYmlndW91cyBpbmRlbnRhdGlvbpR0lIwPbGlicmFyeS90YXJmaWxllChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGFyZmlsZS5odG1slIwsdGFyZmlsZSDigJQgUmVhZCBhbmQgd3JpdGUgdGFyIGFyY2hpdmUgZmlsZXOUdJSMEWxpYnJhcnkvdGVsbmV0bGlilChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGVsbmV0bGliLmh0bWyUjBt0ZWxuZXRsaWIg4oCUIFRlbG5ldCBjbGllbnSUdJSMEGxpYnJhcnkvdGVtcGZpbGWUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZW1wZmlsZS5odG1slIw1dGVtcGZpbGUg4oCUIEdlbmVyYXRlIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXOUdJSMD2xpYnJhcnkvdGVybWlvc5QoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlcm1pb3MuaHRtbJSMI3Rlcm1pb3Mg4oCUIFBPU0lYIHN0eWxlIHR0eSBjb250cm9slHSUjAxsaWJyYXJ5L3Rlc3SUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90ZXN0Lmh0bWyUjCx0ZXN0IOKAlCBSZWdyZXNzaW9uIHRlc3RzIHBhY2thZ2UgZm9yIFB5dGhvbpR0lIwMbGlicmFyeS90ZXh0lChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGV4dC5odG1slIwYVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzlHSUjBBsaWJyYXJ5L3RleHR3cmFwlChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGV4dHdyYXAuaHRtbJSMJnRleHR3cmFwIOKAlCBUZXh0IHdyYXBwaW5nIGFuZCBmaWxsaW5nlHSUjBFsaWJyYXJ5L3RocmVhZGluZ5QoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RocmVhZGluZy5odG1slIwmdGhyZWFkaW5nIOKAlCBUaHJlYWQtYmFzZWQgcGFyYWxsZWxpc22UdJSMDGxpYnJhcnkvdGltZZQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RpbWUuaHRtbJSMJHRpbWUg4oCUIFRpbWUgYWNjZXNzIGFuZCBjb252ZXJzaW9uc5R0lIwObGlicmFyeS90aW1laXSUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90aW1laXQuaHRtbJSMOHRpbWVpdCDigJQgTWVhc3VyZSBleGVjdXRpb24gdGltZSBvZiBzbWFsbCBjb2RlIHNuaXBwZXRzlHSUjApsaWJyYXJ5L3RrlChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGsuaHRtbJSMIUdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUa5R0lIwPbGlicmFyeS90a2ludGVylChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci5odG1slIwmdGtpbnRlciDigJQgUHl0aG9uIGludGVyZmFjZSB0byBUY2wvVGuUdJSMHGxpYnJhcnkvdGtpbnRlci5zY3JvbGxlZHRleHSUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnNjcm9sbGVkdGV4dC5odG1slIwtdGtpbnRlci5zY3JvbGxlZHRleHQg4oCUIFNjcm9sbGVkIFRleHQgV2lkZ2V0lHSUjBNsaWJyYXJ5L3RraW50ZXIudGl4lChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdGtpbnRlci50aXguaHRtbJSMKHRraW50ZXIudGl4IOKAlCBFeHRlbnNpb24gd2lkZ2V0cyBmb3IgVGuUdJSME2xpYnJhcnkvdGtpbnRlci50dGuUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90a2ludGVyLnR0ay5odG1slIwhdGtpbnRlci50dGsg4oCUIFRrIHRoZW1lZCB3aWRnZXRzlHSUjA1saWJyYXJ5L3Rva2VulChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdG9rZW4uaHRtbJSMMHRva2VuIOKAlCBDb25zdGFudHMgdXNlZCB3aXRoIFB5dGhvbiBwYXJzZSB0cmVlc5R0lIwQbGlicmFyeS90b2tlbml6ZZQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rva2VuaXplLmh0bWyUjCh0b2tlbml6ZSDigJQgVG9rZW5pemVyIGZvciBQeXRob24gc291cmNllHSUjA1saWJyYXJ5L3RyYWNllChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHJhY2UuaHRtbJSMM3RyYWNlIOKAlCBUcmFjZSBvciB0cmFjayBQeXRob24gc3RhdGVtZW50IGV4ZWN1dGlvbpR0lIwRbGlicmFyeS90cmFjZWJhY2uUKGoKjwAAaguPAACMMGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZWJhY2suaHRtbJSMMXRyYWNlYmFjayDigJQgUHJpbnQgb3IgcmV0cmlldmUgYSBzdGFjayB0cmFjZWJhY2uUdJSME2xpYnJhcnkvdHJhY2VtYWxsb2OUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90cmFjZW1hbGxvYy5odG1slIwodHJhY2VtYWxsb2Mg4oCUIFRyYWNlIG1lbW9yeSBhbGxvY2F0aW9uc5R0lIwLbGlicmFyeS90dHmUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS90dHkuaHRtbJSMInR0eSDigJQgVGVybWluYWwgY29udHJvbCBmdW5jdGlvbnOUdJSMDmxpYnJhcnkvdHVydGxllChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHVydGxlLmh0bWyUjBp0dXJ0bGUg4oCUIFR1cnRsZSBncmFwaGljc5R0lIwNbGlicmFyeS90eXBlc5QoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3R5cGVzLmh0bWyUjDx0eXBlcyDigJQgRHluYW1pYyB0eXBlIGNyZWF0aW9uIGFuZCBuYW1lcyBmb3IgYnVpbHQtaW4gdHlwZXOUdJSMDmxpYnJhcnkvdHlwaW5nlChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdHlwaW5nLmh0bWyUjCF0eXBpbmcg4oCUIFN1cHBvcnQgZm9yIHR5cGUgaGludHOUdJSMDWxpYnJhcnkvdW5kb2OUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmRvYy5odG1slIwUVW5kb2N1bWVudGVkIE1vZHVsZXOUdJSME2xpYnJhcnkvdW5pY29kZWRhdGGUKGoKjwAAaguPAACMMmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bmljb2RlZGF0YS5odG1slIwgdW5pY29kZWRhdGEg4oCUIFVuaWNvZGUgRGF0YWJhc2WUdJSMEGxpYnJhcnkvdW5pdHRlc3SUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1slIwjdW5pdHRlc3Qg4oCUIFVuaXQgdGVzdGluZyBmcmFtZXdvcmuUdJSMFWxpYnJhcnkvdW5pdHRlc3QubW9ja5QoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2suaHRtbJSMJXVuaXR0ZXN0Lm1vY2sg4oCUIG1vY2sgb2JqZWN0IGxpYnJhcnmUdJSMHmxpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMuaHRtbJSMIXVuaXR0ZXN0Lm1vY2sg4oCUIGdldHRpbmcgc3RhcnRlZJR0lIwMbGlicmFyeS91bml4lChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdW5peC5odG1slIwWVW5peCBTcGVjaWZpYyBTZXJ2aWNlc5R0lIwObGlicmFyeS91cmxsaWKUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIuaHRtbJSMH3VybGxpYiDigJQgVVJMIGhhbmRsaW5nIG1vZHVsZXOUdJSMFGxpYnJhcnkvdXJsbGliLmVycm9ylChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXJsbGliLmVycm9yLmh0bWyUjDt1cmxsaWIuZXJyb3Ig4oCUIEV4Y2VwdGlvbiBjbGFzc2VzIHJhaXNlZCBieSB1cmxsaWIucmVxdWVzdJR0lIwUbGlicmFyeS91cmxsaWIucGFyc2WUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucGFyc2UuaHRtbJSMK3VybGxpYi5wYXJzZSDigJQgUGFyc2UgVVJMcyBpbnRvIGNvbXBvbmVudHOUdJSMFmxpYnJhcnkvdXJsbGliLnJlcXVlc3SUKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91cmxsaWIucmVxdWVzdC5odG1slIw2dXJsbGliLnJlcXVlc3Qg4oCUIEV4dGVuc2libGUgbGlicmFyeSBmb3Igb3BlbmluZyBVUkxzlHSUjBpsaWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlcpQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlci5odG1slIwtdXJsbGliLnJvYm90cGFyc2VyIOKAlCAgUGFyc2VyIGZvciByb2JvdHMudHh0lHSUjApsaWJyYXJ5L3V1lChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXUuaHRtbJSMJ3V1IOKAlCBFbmNvZGUgYW5kIGRlY29kZSB1dWVuY29kZSBmaWxlc5R0lIwMbGlicmFyeS91dWlklChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdXVpZC5odG1slIwrdXVpZCDigJQgVVVJRCBvYmplY3RzIGFjY29yZGluZyB0byBSRkMgNDEyMpR0lIwMbGlicmFyeS92ZW52lChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvdmVudi5odG1slIwpdmVudiDigJQgQ3JlYXRpb24gb2YgdmlydHVhbCBlbnZpcm9ubWVudHOUdJSMEGxpYnJhcnkvd2FybmluZ3OUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93YXJuaW5ncy5odG1slIwcd2FybmluZ3Mg4oCUIFdhcm5pbmcgY29udHJvbJR0lIwMbGlicmFyeS93YXZllChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2F2ZS5odG1slIwhd2F2ZSDigJQgUmVhZCBhbmQgd3JpdGUgV0FWIGZpbGVzlHSUjA9saWJyYXJ5L3dlYWtyZWaUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93ZWFrcmVmLmh0bWyUjBt3ZWFrcmVmIOKAlCBXZWFrIHJlZmVyZW5jZXOUdJSMEmxpYnJhcnkvd2ViYnJvd3NlcpQoagqPAABqC48AAIwxaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3dlYmJyb3dzZXIuaHRtbJSMMHdlYmJyb3dzZXIg4oCUIENvbnZlbmllbnQgV2ViLWJyb3dzZXIgY29udHJvbGxlcpR0lIwPbGlicmFyeS93aW5kb3dzlChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvd2luZG93cy5odG1slIwcTVMgV2luZG93cyBTcGVjaWZpYyBTZXJ2aWNlc5R0lIwObGlicmFyeS93aW5yZWeUKGoKjwAAaguPAACMLWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5yZWcuaHRtbJSMIndpbnJlZyDigJQgV2luZG93cyByZWdpc3RyeSBhY2Nlc3OUdJSMEGxpYnJhcnkvd2luc291bmSUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93aW5zb3VuZC5odG1slIwwd2luc291bmQg4oCUIFNvdW5kLXBsYXlpbmcgaW50ZXJmYWNlIGZvciBXaW5kb3dzlHSUjA9saWJyYXJ5L3dzZ2lyZWaUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS93c2dpcmVmLmh0bWyUjDd3c2dpcmVmIOKAlCBXU0dJIFV0aWxpdGllcyBhbmQgUmVmZXJlbmNlIEltcGxlbWVudGF0aW9ulHSUjA5saWJyYXJ5L3hkcmxpYpQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3hkcmxpYi5odG1slIwleGRybGliIOKAlCBFbmNvZGUgYW5kIGRlY29kZSBYRFIgZGF0YZR0lIwLbGlicmFyeS94bWyUKGoKjwAAaguPAACMKmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuaHRtbJSMFlhNTCBQcm9jZXNzaW5nIE1vZHVsZXOUdJSMD2xpYnJhcnkveG1sLmRvbZQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20uaHRtbJSMKXhtbC5kb20g4oCUIFRoZSBEb2N1bWVudCBPYmplY3QgTW9kZWwgQVBJlHSUjBdsaWJyYXJ5L3htbC5kb20ubWluaWRvbZQoagqPAABqC48AAIw2aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5odG1slIwueG1sLmRvbS5taW5pZG9tIOKAlCBNaW5pbWFsIERPTSBpbXBsZW1lbnRhdGlvbpR0lIwXbGlicmFyeS94bWwuZG9tLnB1bGxkb22UKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuZG9tLnB1bGxkb20uaHRtbJSMOnhtbC5kb20ucHVsbGRvbSDigJQgU3VwcG9ydCBmb3IgYnVpbGRpbmcgcGFydGlhbCBET00gdHJlZXOUdJSMHWxpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLmh0bWyUjDF4bWwuZXRyZWUuRWxlbWVudFRyZWUg4oCUIFRoZSBFbGVtZW50VHJlZSBYTUwgQVBJlHSUjA9saWJyYXJ5L3htbC5zYXiUKGoKjwAAaguPAACMLmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4Lmh0bWyUjCR4bWwuc2F4IOKAlCBTdXBwb3J0IGZvciBTQVgyIHBhcnNlcnOUdJSMF2xpYnJhcnkveG1sLnNheC5oYW5kbGVylChqCo8AAGoLjwAAjDZodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLmh0bWyUjDF4bWwuc2F4LmhhbmRsZXIg4oCUIEJhc2UgY2xhc3NlcyBmb3IgU0FYIGhhbmRsZXJzlHSUjBZsaWJyYXJ5L3htbC5zYXgucmVhZGVylChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1sLnNheC5yZWFkZXIuaHRtbJSML3htbC5zYXgueG1scmVhZGVyIOKAlCBJbnRlcmZhY2UgZm9yIFhNTCBwYXJzZXJzlHSUjBVsaWJyYXJ5L3htbC5zYXgudXRpbHOUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWwuc2F4LnV0aWxzLmh0bWyUjCJ4bWwuc2F4LnNheHV0aWxzIOKAlCBTQVggVXRpbGl0aWVzlHSUjA5saWJyYXJ5L3htbHJwY5QoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3htbHJwYy5odG1slIwreG1scnBjIOKAlCBYTUxSUEMgc2VydmVyIGFuZCBjbGllbnQgbW9kdWxlc5R0lJUuAAEAAAAAAIwVbGlicmFyeS94bWxycGMuY2xpZW50lChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkveG1scnBjLmNsaWVudC5odG1slIwneG1scnBjLmNsaWVudCDigJQgWE1MLVJQQyBjbGllbnQgYWNjZXNzlHSUjBVsaWJyYXJ5L3htbHJwYy5zZXJ2ZXKUKGoKjwAAaguPAACMNGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS94bWxycGMuc2VydmVyLmh0bWyUjCd4bWxycGMuc2VydmVyIOKAlCBCYXNpYyBYTUwtUlBDIHNlcnZlcnOUdJSMDmxpYnJhcnkvemlwYXBwlChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwYXBwLmh0bWyUjDB6aXBhcHAg4oCUIE1hbmFnZSBleGVjdXRhYmxlIFB5dGhvbiB6aXAgYXJjaGl2ZXOUdJSMD2xpYnJhcnkvemlwZmlsZZQoagqPAABqC48AAIwuaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3ppcGZpbGUuaHRtbJSMInppcGZpbGUg4oCUIFdvcmsgd2l0aCBaSVAgYXJjaGl2ZXOUdJSMEWxpYnJhcnkvemlwaW1wb3J0lChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvemlwaW1wb3J0Lmh0bWyUjC56aXBpbXBvcnQg4oCUIEltcG9ydCBtb2R1bGVzIGZyb20gWmlwIGFyY2hpdmVzlHSUjAxsaWJyYXJ5L3psaWKUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS96bGliLmh0bWyUjCl6bGliIOKAlCBDb21wcmVzc2lvbiBjb21wYXRpYmxlIHdpdGggZ3ppcJR0lIwHbGljZW5zZZQoagqPAABqC48AAIwmaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWNlbnNlLmh0bWyUjBNIaXN0b3J5IGFuZCBMaWNlbnNllHSUjBhyZWZlcmVuY2UvY29tcG91bmRfc3RtdHOUKGoKjwAAaguPAACMN2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLmh0bWyUjBNDb21wb3VuZCBzdGF0ZW1lbnRzlHSUjBNyZWZlcmVuY2UvZGF0YW1vZGVslChqCo8AAGoLjwAAjDJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9kYXRhbW9kZWwuaHRtbJSMCkRhdGEgbW9kZWyUdJSMGHJlZmVyZW5jZS9leGVjdXRpb25tb2RlbJQoagqPAABqC48AAIw3aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwuaHRtbJSMD0V4ZWN1dGlvbiBtb2RlbJR0lIwVcmVmZXJlbmNlL2V4cHJlc3Npb25zlChqCo8AAGoLjwAAjDRodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1slIwLRXhwcmVzc2lvbnOUdJSMEXJlZmVyZW5jZS9ncmFtbWFylChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9ncmFtbWFyLmh0bWyUjBpGdWxsIEdyYW1tYXIgc3BlY2lmaWNhdGlvbpR0lIwQcmVmZXJlbmNlL2ltcG9ydJQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvaW1wb3J0Lmh0bWyUjBFUaGUgaW1wb3J0IHN5c3RlbZR0lIwPcmVmZXJlbmNlL2luZGV4lChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3JlZmVyZW5jZS9pbmRleC5odG1slIwdVGhlIFB5dGhvbiBMYW5ndWFnZSBSZWZlcmVuY2WUdJSMFnJlZmVyZW5jZS9pbnRyb2R1Y3Rpb26UKGoKjwAAaguPAACMNWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL2ludHJvZHVjdGlvbi5odG1slIwMSW50cm9kdWN0aW9ulHSUjBpyZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpc5QoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5odG1slIwQTGV4aWNhbCBhbmFseXNpc5R0lIwWcmVmZXJlbmNlL3NpbXBsZV9zdG10c5QoagqPAABqC48AAIw1aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWyUjBFTaW1wbGUgc3RhdGVtZW50c5R0lIwdcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHOUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMuaHRtbJSMFFRvcC1sZXZlbCBjb21wb25lbnRzlHSUjBF0dXRvcmlhbC9hcHBlbmRpeJQoagqPAABqC48AAIwwaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9hcHBlbmRpeC5odG1slIwIQXBwZW5kaXiUdJSMEXR1dG9yaWFsL2FwcGV0aXRllChqCo8AAGoLjwAAjDBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2FwcGV0aXRlLmh0bWyUjBZXaGV0dGluZyBZb3VyIEFwcGV0aXRllHSUjBB0dXRvcmlhbC9jbGFzc2VzlChqCo8AAGoLjwAAjC9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NsYXNzZXMuaHRtbJSMB0NsYXNzZXOUdJSMFHR1dG9yaWFsL2NvbnRyb2xmbG93lChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2NvbnRyb2xmbG93Lmh0bWyUjBdNb3JlIENvbnRyb2wgRmxvdyBUb29sc5R0lIwXdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXOUKGoKjwAAaguPAACMNmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMuaHRtbJSMD0RhdGEgU3RydWN0dXJlc5R0lIwPdHV0b3JpYWwvZXJyb3JzlChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2Vycm9ycy5odG1slIwVRXJyb3JzIGFuZCBFeGNlcHRpb25zlHSUjBZ0dXRvcmlhbC9mbG9hdGluZ3BvaW50lChqCo8AAGoLjwAAjDVodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQuaHRtbJSMMkZsb2F0aW5nIFBvaW50IEFyaXRobWV0aWM6ICBJc3N1ZXMgYW5kIExpbWl0YXRpb25zlHSUjA50dXRvcmlhbC9pbmRleJQoagqPAABqC48AAIwtaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9pbmRleC5odG1slIwTVGhlIFB5dGhvbiBUdXRvcmlhbJR0lIwUdHV0b3JpYWwvaW5wdXRvdXRwdXSUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvaW5wdXRvdXRwdXQuaHRtbJSMEElucHV0IGFuZCBPdXRwdXSUdJSMFHR1dG9yaWFsL2ludGVyYWN0aXZllChqCo8AAGoLjwAAjDNodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL2ludGVyYWN0aXZlLmh0bWyUjDJJbnRlcmFjdGl2ZSBJbnB1dCBFZGl0aW5nIGFuZCBIaXN0b3J5IFN1YnN0aXR1dGlvbpR0lIwUdHV0b3JpYWwvaW50ZXJwcmV0ZXKUKGoKjwAAaguPAACMM2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvaW50ZXJwcmV0ZXIuaHRtbJSMHFVzaW5nIHRoZSBQeXRob24gSW50ZXJwcmV0ZXKUdJSMFXR1dG9yaWFsL2ludHJvZHVjdGlvbpQoagqPAABqC48AAIw0aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9pbnRyb2R1Y3Rpb24uaHRtbJSMIkFuIEluZm9ybWFsIEludHJvZHVjdGlvbiB0byBQeXRob26UdJSMEHR1dG9yaWFsL21vZHVsZXOUKGoKjwAAaguPAACML2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdHV0b3JpYWwvbW9kdWxlcy5odG1slIwHTW9kdWxlc5R0lIwPdHV0b3JpYWwvc3RkbGlilChqCo8AAGoLjwAAjC5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3N0ZGxpYi5odG1slIwiQnJpZWYgVG91ciBvZiB0aGUgU3RhbmRhcmQgTGlicmFyeZR0lIwQdHV0b3JpYWwvc3RkbGliMpQoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC9zdGRsaWIyLmh0bWyUjC5CcmllZiBUb3VyIG9mIHRoZSBTdGFuZGFyZCBMaWJyYXJ5IOKAlCBQYXJ0IElJlHSUjA10dXRvcmlhbC92ZW52lChqCo8AAGoLjwAAjCxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3R1dG9yaWFsL3ZlbnYuaHRtbJSMIVZpcnR1YWwgRW52aXJvbm1lbnRzIGFuZCBQYWNrYWdlc5R0lIwQdHV0b3JpYWwvd2hhdG5vd5QoagqPAABqC48AAIwvaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRvcmlhbC93aGF0bm93Lmh0bWyUjAlXaGF0IE5vdz+UdJSMDXVzaW5nL2NtZGxpbmWUKGoKjwAAaguPAACMLGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvdXNpbmcvY21kbGluZS5odG1slIwcQ29tbWFuZCBsaW5lIGFuZCBlbnZpcm9ubWVudJR0lIwNdXNpbmcvZWRpdG9yc5QoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9lZGl0b3JzLmh0bWyUjBBFZGl0b3JzIGFuZCBJREVzlHSUjAt1c2luZy9pbmRleJQoagqPAABqC48AAIwqaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy9pbmRleC5odG1slIwWUHl0aG9uIFNldHVwIGFuZCBVc2FnZZR0lIwJdXNpbmcvbWFjlChqCo8AAGoLjwAAjChodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL21hYy5odG1slIwbVXNpbmcgUHl0aG9uIG9uIGEgTWFjaW50b3NolHSUjAp1c2luZy91bml4lChqCo8AAGoLjwAAjClodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3VzaW5nL3VuaXguaHRtbJSMHlVzaW5nIFB5dGhvbiBvbiBVbml4IHBsYXRmb3Jtc5R0lIwNdXNpbmcvd2luZG93c5QoagqPAABqC48AAIwsaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWyUjBdVc2luZyBQeXRob24gb24gV2luZG93c5R0lIwMd2hhdHNuZXcvMi4wlChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuMC5odG1slIwaV2hhdOKAmXMgTmV3IGluIFB5dGhvbiAyLjCUdJSMDHdoYXRzbmV3LzIuMZQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjEuaHRtbJSMGldoYXTigJlzIE5ldyBpbiBQeXRob24gMi4xlHSUjAx3aGF0c25ldy8yLjKUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi4yLmh0bWyUjBpXaGF04oCZcyBOZXcgaW4gUHl0aG9uIDIuMpR0lIwMd2hhdHNuZXcvMi4zlChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuMy5odG1slIwaV2hhdOKAmXMgTmV3IGluIFB5dGhvbiAyLjOUdJSMDHdoYXRzbmV3LzIuNJQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjQuaHRtbJSMGldoYXTigJlzIE5ldyBpbiBQeXRob24gMi40lHSUjAx3aGF0c25ldy8yLjWUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMi41Lmh0bWyUjBpXaGF04oCZcyBOZXcgaW4gUHl0aG9uIDIuNZR0lIwMd2hhdHNuZXcvMi42lChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzIuNi5odG1slIwaV2hhdOKAmXMgTmV3IGluIFB5dGhvbiAyLjaUdJSMDHdoYXRzbmV3LzIuN5QoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8yLjcuaHRtbJSMGldoYXTigJlzIE5ldyBpbiBQeXRob24gMi43lHSUjAx3aGF0c25ldy8zLjCUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy4wLmh0bWyUjBpXaGF04oCZcyBOZXcgSW4gUHl0aG9uIDMuMJR0lIwMd2hhdHNuZXcvMy4xlChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuMS5odG1slIwaV2hhdOKAmXMgTmV3IEluIFB5dGhvbiAzLjGUdJSMDHdoYXRzbmV3LzMuMpQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjIuaHRtbJSMGldoYXTigJlzIE5ldyBJbiBQeXRob24gMy4ylHSUjAx3aGF0c25ldy8zLjOUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy4zLmh0bWyUjBpXaGF04oCZcyBOZXcgSW4gUHl0aG9uIDMuM5R0lIwMd2hhdHNuZXcvMy40lChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNC5odG1slIwaV2hhdOKAmXMgTmV3IEluIFB5dGhvbiAzLjSUdJSMDHdoYXRzbmV3LzMuNZQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjUuaHRtbJSMGldoYXTigJlzIE5ldyBJbiBQeXRob24gMy41lHSUjAx3aGF0c25ldy8zLjaUKGoKjwAAaguPAACMK2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy42Lmh0bWyUjBpXaGF04oCZcyBOZXcgSW4gUHl0aG9uIDMuNpR0lIwMd2hhdHNuZXcvMy43lChqCo8AAGoLjwAAjCtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3LzMuNy5odG1slIwaV2hhdOKAmXMgTmV3IEluIFB5dGhvbiAzLjeUdJSMDHdoYXRzbmV3LzMuOJQoagqPAABqC48AAIwraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjguaHRtbJSMGldoYXTigJlzIE5ldyBJbiBQeXRob24gMy44lHSUjBJ3aGF0c25ldy9jaGFuZ2Vsb2eUKGoKjwAAaguPAACMMWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvY2hhbmdlbG9nLmh0bWyUjAlDaGFuZ2Vsb2eUdJSMDndoYXRzbmV3L2luZGV4lChqCo8AAGoLjwAAjC1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3L2luZGV4Lmh0bWyUjBZXaGF04oCZcyBOZXcgaW4gUHl0aG9ulHSUdYwNc3RkOjJ0bzNmaXhlcpR9lCiMBWFwcGx5lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1hcHBseZRqDY8AAHSUjAdhc3NlcnRzlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1hc3NlcnRzlGoNjwAAdJSMCmJhc2VzdHJpbmeUKGoKjwAAaguPAACMQGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWJhc2VzdHJpbmeUag2PAAB0lIwGYnVmZmVylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1idWZmZXKUag2PAAB0lIwEZGljdJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZGljdJRqDY8AAHSUjAZleGNlcHSUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWV4Y2VwdJRqDY8AAHSUjARleGVjlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1leGVjlGoNjwAAdJSMCGV4ZWNmaWxllChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1leGVjZmlsZZRqDY8AAHSUjAhleGl0ZnVuY5QoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZXhpdGZ1bmOUag2PAAB0lIwGZmlsdGVylChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1maWx0ZXKUag2PAAB0lIwJZnVuY2F0dHJzlChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1mdW5jYXR0cnOUag2PAAB0lIwGZnV0dXJllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1mdXR1cmWUag2PAAB0lIwHZ2V0Y3dkdZQoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItZ2V0Y3dkdZRqDY8AAHSUjAdoYXNfa2V5lChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1oYXNfa2V5lGoNjwAAdJSMBmlkaW9tc5QoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItaWRpb21zlGoNjwAAdJSMBmltcG9ydJQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItaW1wb3J0lGoNjwAAdJSMB2ltcG9ydHOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWltcG9ydHOUag2PAAB0lIwIaW1wb3J0czKUKGoKjwAAaguPAACMPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWltcG9ydHMylGoNjwAAdJSMBWlucHV0lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pbnB1dJRqDY8AAHSUjAZpbnRlcm6UKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLWludGVybpRqDY8AAHSUjAppc2luc3RhbmNllChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pc2luc3RhbmNllGoNjwAAdJSMCWl0ZXJ0b29sc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItaXRlcnRvb2xzlGoNjwAAdJSMEWl0ZXJ0b29sc19pbXBvcnRzlChqCo8AAGoLjwAAjEdodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1pdGVydG9vbHNfaW1wb3J0c5RqDY8AAHSUjARsb25nlChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1sb25nlGoNjwAAdJSMA21hcJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbWFwlGoNjwAAdJSMCW1ldGFjbGFzc5QoagqPAABqC48AAIw/aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbWV0YWNsYXNzlGoNjwAAdJSMC21ldGhvZGF0dHJzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1tZXRob2RhdHRyc5RqDY8AAHSUjAJuZZQoagqPAABqC48AAIw4aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbmWUag2PAAB0lIwEbmV4dJQoagqPAABqC48AAIw6aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItbmV4dJRqDY8AAHSUjAdub256ZXJvlChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1ub256ZXJvlGoNjwAAdJSMC251bWxpdGVyYWxzlChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1udW1saXRlcmFsc5RqDY8AAHSUjAhvcGVyYXRvcpQoagqPAABqC48AAIw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItb3BlcmF0b3KUag2PAAB0lIwFcGFyZW6UKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXBhcmVulGoNjwAAdJSMBXByaW50lChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1wcmludJRqDY8AAHSUjAVyYWlzZZQoagqPAABqC48AAIw7aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItcmFpc2WUag2PAAB0lIwJcmF3X2lucHV0lChqCo8AAGoLjwAAjD9odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1yYXdfaW5wdXSUag2PAAB0lIwGcmVkdWNllChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1yZWR1Y2WUag2PAAB0lIwGcmVsb2FklChqCo8AAGoLjwAAjDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1yZWxvYWSUag2PAAB0lIwHcmVuYW1lc5QoagqPAABqC48AAIw9aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItcmVuYW1lc5RqDY8AAHSUjARyZXBylChqCo8AAGoLjwAAjDpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1yZXBylGoNjwAAdJSMC3NldF9saXRlcmFslChqCo8AAGoLjwAAjEFodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1zZXRfbGl0ZXJhbJRqDY8AAHSUjA1zdGFuZGFyZGVycm9ylChqCo8AAGoLjwAAjENodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci1zdGFuZGFyZGVycm9ylGoNjwAAdJSMB3N5c19leGOUKGoKjwAAaguPAACMPWh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXN5c19leGOUag2PAAB0lIwFdGhyb3eUKGoKjwAAaguPAACMO2h0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXRocm93lGoNjwAAdJSMDHR1cGxlX3BhcmFtc5QoagqPAABqC48AAIxCaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItdHVwbGVfcGFyYW1zlGoNjwAAdJSMBXR5cGVzlChqCo8AAGoLjwAAjDtodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci10eXBlc5RqDY8AAHSUjAd1bmljb2RllChqCo8AAGoLjwAAjD1odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci11bmljb2RllGoNjwAAdJSMBnVybGxpYpQoagqPAABqC48AAIw8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItdXJsbGlilGoNjwAAdJSMCHdzX2NvbW1hlChqCo8AAGoLjwAAjD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci13c19jb21tYZRqDY8AAHSUjAZ4cmFuZ2WUKGoKjwAAaguPAACMPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwjMnRvM2ZpeGVyLXhyYW5nZZRqDY8AAHSUjAp4cmVhZGxpbmVzlChqCo8AAGoLjwAAjEBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sIzJ0bzNmaXhlci14cmVhZGxpbmVzlGoNjwAAdJSMA3ppcJQoagqPAABqC48AAIw5aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5LzJ0bzMuaHRtbCMydG8zZml4ZXItemlwlGoNjwAAdJR1dYeUaDRoM0rP64RefZQojAlweTptb2R1bGWUfZQojBloYW1jcmVzdC5jb3JlLmFzc2VydF90aGF0lCiMClB5SGFtY3Jlc3SUjAUyLjAuMpSMWWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvaW50ZWdyYXRpb24vI21vZHVsZS1oYW1jcmVzdC5jb3JlLmFzc2VydF90aGF0lGoNjwAAdJSMHmhhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbpQoaiwtAQBqLS0BAIxXaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9ulGoNjwAAdJSMGmhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVylChqLC0BAGotLQEAjFNodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlcpRqDY8AAHSUjBhoYW1jcmVzdC5jb3JlLmNvcmUuYWxsb2aUKGosLQEAai0tAQCMXWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbG9naWNhbF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5hbGxvZpRqDY8AAHSUjBhoYW1jcmVzdC5jb3JlLmNvcmUuYW55b2aUKGosLQEAai0tAQCMXWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbG9naWNhbF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5hbnlvZpRqDY8AAHSUjB9oYW1jcmVzdC5jb3JlLmNvcmUuZGVzY3JpYmVkX2FzlChqLC0BAGotLQEAjGZodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RlY29yYXRvcl9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5kZXNjcmliZWRfYXOUag2PAAB0lIwWaGFtY3Jlc3QuY29yZS5jb3JlLmlzX5QoaiwtAQBqLS0BAIxdaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kZWNvcmF0b3JfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuaXNflGoNjwAAdJSMHWhhbWNyZXN0LmNvcmUuY29yZS5pc2FueXRoaW5nlChqLC0BAGotLQEAjGJodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuaXNhbnl0aGluZ5RqDY8AAHSUjBpoYW1jcmVzdC5jb3JlLmNvcmUuaXNlcXVhbJQoaiwtAQBqLS0BAIxeaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuaXNlcXVhbJRqDY8AAHSUjB9oYW1jcmVzdC5jb3JlLmNvcmUuaXNpbnN0YW5jZW9mlChqLC0BAGotLQEAjGNodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5pc2luc3RhbmNlb2aUag2PAAB0lIwZaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm9uZZQoaiwtAQBqLS0BAIxdaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmNvcmUuaXNub25llGoNjwAAdJSMGGhhbWNyZXN0LmNvcmUuY29yZS5pc25vdJQoaiwtAQBqLS0BAIxdaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm90lGoNjwAAdJSMGWhhbWNyZXN0LmNvcmUuY29yZS5pc3NhbWWUKGosLQEAai0tAQCMXWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5jb3JlLmlzc2FtZZRqDY8AAHSUjBloYW1jcmVzdC5jb3JlLmNvcmUucmFpc2VzlChqLC0BAGotLQEAjF1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXOUag2PAAB0lIwZaGFtY3Jlc3QuY29yZS5kZXNjcmlwdGlvbpQoaiwtAQBqLS0BAIxSaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5kZXNjcmlwdGlvbpRqDY8AAHSUjB9oYW1jcmVzdC5jb3JlLmhlbHBlcnMuaGFzbWV0aG9klChqLC0BAGotLQEAjFtodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2hlbHBlcnMvI21vZHVsZS1oYW1jcmVzdC5jb3JlLmhlbHBlcnMuaGFzbWV0aG9klGoNjwAAdJSMImhhbWNyZXN0LmNvcmUuaGVscGVycy53cmFwX21hdGNoZXKUKGosLQEAai0tAQCMXmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvaGVscGVycy8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuaGVscGVycy53cmFwX21hdGNoZXKUag2PAAB0lIwVaGFtY3Jlc3QuY29yZS5tYXRjaGVylChqLC0BAGotLQEAjE5odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI21vZHVsZS1oYW1jcmVzdC5jb3JlLm1hdGNoZXKUag2PAAB0lIwcaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ5QoaiwtAQBqLS0BAIxVaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ5RqDY8AAHSUjCFoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5ndmFsdWWUKGosLQEAai0tAQCMWmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jbW9kdWxlLWhhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmd2YWx1ZZRqDY8AAHSUjCBoYW1jcmVzdC5jb3JlLnN0cmluZ19kZXNjcmlwdGlvbpQoaiwtAQBqLS0BAIxZaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNtb2R1bGUtaGFtY3Jlc3QuY29yZS5zdHJpbmdfZGVzY3JpcHRpb26Uag2PAAB0lIwkaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzX2VtcHR5lChqLC0BAGotLQEAjGpodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzX2VtcHR5lGoNjwAAdJSMLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ5QoaiwtAQBqLS0BAIx1aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kaWN0aW9uYXJ5X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nlGoNjwAAdJSMNGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2VudHJpZXOUKGosLQEAai0tAQCMfGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2VudHJpZXOUag2PAAB0lIwwaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5na2V5lChqLC0BAGotLQEAjHhodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdrZXmUag2PAAB0lIwyaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ndmFsdWWUKGosLQEAai0tAQCMemh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ3ZhbHVllGoNjwAAdJSMIGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2lulChqLC0BAGotLQEAjGZodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzaW6Uag2PAAB0lIwxaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ5QoaiwtAQBqLS0BAIx3aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmeUag2PAAB0lIw7aGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2luYW55b3JkZXKUKGosLQEAai0tAQCMgWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5hbnlvcmRlcpRqDY8AAHSUjDhoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlcpQoaiwtAQBqLS0BAIx+aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbm9yZGVylGoNjwAAdJSMNWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX29ubHljb250YWluaW5nlChqLC0BAGotLQEAjHtodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2Vfb25seWNvbnRhaW5pbmeUag2PAAB0lIwraGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eZQoaiwtAQBqLS0BAIxraHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9pbnRlZ3JhdGlvbi8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkuaW50ZWdyYXRpb24ubWF0Y2hfZXF1YWxpdHmUag2PAAB0lIwhaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvlChqLC0BAGotLQEAjGVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL251bWJlcl9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkubnVtYmVyLmlzY2xvc2V0b5RqDY8AAHSUjCtoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29ulChqLC0BAGotLQEAjG9odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL251bWJlcl9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb26Uag2PAAB0lIwhaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzbGVuZ3RolChqLC0BAGotLQEAjGVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc2xlbmd0aJRqDY8AAHSUjCNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNwcm9wZXJ0eZQoaiwtAQBqLS0BAIxnaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNwcm9wZXJ0eZRqDY8AAHSUjCFoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNzdHJpbmeUKGosLQEAai0tAQCMZWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzc3RyaW5nlGoNjwAAdJSMK2hhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX2Nhc2WUKGosLQEAai0tAQCMbWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX2Nhc2WUag2PAAB0lIwxaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3Jpbmdfd2hpdGVzcGFjZZQoaiwtAQBqLS0BAIxzaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3Jpbmdfd2hpdGVzcGFjZZRqDY8AAHSUjCRoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnOUKGosLQEAai0tAQCMZmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jbW9kdWxlLWhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdjb250YWluc5RqDY8AAHSUjCtoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnNpbm9yZGVylChqLC0BAGotLQEAjG1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnNpbm9yZGVylGoNjwAAdJSMJGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdlbmRzd2l0aJQoaiwtAQBqLS0BAIxmaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2VuZHN3aXRolGoNjwAAdJSMI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdtYXRjaGVzlChqLC0BAGotLQEAjGVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI21vZHVsZS1oYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nbWF0Y2hlc5RqDY8AAHSUjCZoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nc3RhcnRzd2l0aJQoaiwtAQBqLS0BAIxoaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ3N0YXJ0c3dpdGiUag2PAAB0lHWMC3B5OmZ1bmN0aW9ulH2UKIwlaGFtY3Jlc3QuY29yZS5hc3NlcnRfdGhhdC5hc3NlcnRfdGhhdJQoaiwtAQBqLS0BAIxeaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9pbnRlZ3JhdGlvbi8jaGFtY3Jlc3QuY29yZS5hc3NlcnRfdGhhdC5hc3NlcnRfdGhhdJRqDY8AAHSUjB9oYW1jcmVzdC5jb3JlLmNvcmUuYWxsb2YuYWxsX29mlChqLC0BAGotLQEAjF1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5hbGxvZi5hbGxfb2aUag2PAAB0lIwfaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mLmFueV9vZpQoaiwtAQBqLS0BAIxdaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuYW55b2YuYW55X29mlGoNjwAAdJSMLGhhbWNyZXN0LmNvcmUuY29yZS5kZXNjcmliZWRfYXMuZGVzY3JpYmVkX2FzlChqLC0BAGotLQEAjGxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RlY29yYXRvcl9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmRlc2NyaWJlZF9hcy5kZXNjcmliZWRfYXOUag2PAAB0lIwaaGFtY3Jlc3QuY29yZS5jb3JlLmlzXy5pc1+UKGosLQEAai0tAQCMWmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGVjb3JhdG9yX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNfLmlzX5RqDY8AAHSUjCZoYW1jcmVzdC5jb3JlLmNvcmUuaXNhbnl0aGluZy5hbnl0aGluZ5QoaiwtAQBqLS0BAIxkaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNhbnl0aGluZy5hbnl0aGluZ5RqDY8AAHSUjCNoYW1jcmVzdC5jb3JlLmNvcmUuaXNlcXVhbC5lcXVhbF90b5QoaiwtAQBqLS0BAIxgaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc2VxdWFsLmVxdWFsX3RvlGoNjwAAdJSMK2hhbWNyZXN0LmNvcmUuY29yZS5pc2luc3RhbmNlb2YuaW5zdGFuY2Vfb2aUKGosLQEAai0tAQCMaGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNpbnN0YW5jZW9mLmluc3RhbmNlX29mlGoNjwAAdJSMHmhhbWNyZXN0LmNvcmUuY29yZS5pc25vbmUubm9uZZQoaiwtAQBqLS0BAIxbaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc25vbmUubm9uZZRqDY8AAHSUjCJoYW1jcmVzdC5jb3JlLmNvcmUuaXNub25lLm5vdF9ub25llChqLC0BAGotLQEAjF9odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm9uZS5ub3Rfbm9uZZRqDY8AAHSUjB9oYW1jcmVzdC5jb3JlLmNvcmUuaXNub3QuaXNfbm90lChqLC0BAGotLQEAjF1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc25vdC5pc19ub3SUag2PAAB0lIwdaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm90Lm5vdF+UKGosLQEAai0tAQCMW2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbG9naWNhbF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm90Lm5vdF+Uag2PAAB0lIwnaGFtY3Jlc3QuY29yZS5jb3JlLmlzc2FtZS5zYW1lX2luc3RhbmNllChqLC0BAGotLQEAjGRodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzc2FtZS5zYW1lX2luc3RhbmNllGoNjwAAdJSMIWhhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMuY2FsbGluZ5QoaiwtAQBqLS0BAIxeaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMuY2FsbGluZ5RqDY8AAHSUjCBoYW1jcmVzdC5jb3JlLmNvcmUucmFpc2VzLnJhaXNlc5QoaiwtAQBqLS0BAIxdaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMucmFpc2VzlGoNjwAAdJSMKWhhbWNyZXN0LmNvcmUuaGVscGVycy5oYXNtZXRob2QuaGFzbWV0aG9klChqLC0BAGotLQEAjF5odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2hlbHBlcnMvI2hhbWNyZXN0LmNvcmUuaGVscGVycy5oYXNtZXRob2QuaGFzbWV0aG9klGoNjwAAdJSML2hhbWNyZXN0LmNvcmUuaGVscGVycy53cmFwX21hdGNoZXIud3JhcF9tYXRjaGVylChqLC0BAGotLQEAjGRodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2hlbHBlcnMvI2hhbWNyZXN0LmNvcmUuaGVscGVycy53cmFwX21hdGNoZXIud3JhcF9tYXRjaGVylGoNjwAAdJSMKWhhbWNyZXN0LmNvcmUuc3RyaW5nX2Rlc2NyaXB0aW9uLnRvc3RyaW5nlChqLC0BAGotLQEAjFtodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuc3RyaW5nX2Rlc2NyaXB0aW9uLnRvc3RyaW5nlGoNjwAAdJSMKmhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc19lbXB0eS5lbXB0eZQoaiwtAQBqLS0BAIxpaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzX2VtcHR5LmVtcHR5lGoNjwAAdJSMN2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZy5oYXNfZW50cnmUKGosLQEAai0tAQCMeGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nLmhhc19lbnRyeZRqDY8AAHSUjEBoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdlbnRyaWVzLmhhc19lbnRyaWVzlChqLC0BAGotLQEAjIFodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2VudHJpZXMuaGFzX2VudHJpZXOUag2PAAB0lIw4aGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5na2V5Lmhhc19rZXmUKGosLQEAai0tAQCMeWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5na2V5Lmhhc19rZXmUag2PAAB0lIw8aGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ndmFsdWUuaGFzX3ZhbHVllChqLC0BAGotLQEAjH1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ3ZhbHVlLmhhc192YWx1ZZRqDY8AAHSUjCZoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpbi5pc19pbpQoaiwtAQBqLS0BAIxlaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzaW4uaXNfaW6Uag2PAAB0lIw6aGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5oYXNfaXRlbZQoaiwtAQBqLS0BAIx5aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5oYXNfaXRlbZRqDY8AAHSUjDtoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5nLmhhc19pdGVtc5QoaiwtAQBqLS0BAIx6aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5oYXNfaXRlbXOUag2PAAB0lIxPaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2luYW55b3JkZXIuY29udGFpbnNfaW5hbnlvcmRlcpQoaiwtAQBqLS0BAIyOaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2luYW55b3JkZXIuY29udGFpbnNfaW5hbnlvcmRlcpRqDY8AAHSUjEloYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlci5jb250YWluc19leGFjdGx5lChqLC0BAGotLQEAjIhodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlci5jb250YWluc19leGFjdGx5lGoNjwAAdJSMQ2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX29ubHljb250YWluaW5nLm9ubHlfY29udGFpbnOUKGosLQEAai0tAQCMgmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX29ubHljb250YWluaW5nLm9ubHlfY29udGFpbnOUag2PAAB0lIw6aGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eS5tYXRjaF9lcXVhbGl0eZQoaiwtAQBqLS0BAIxzaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9pbnRlZ3JhdGlvbi8jaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eS5tYXRjaF9lcXVhbGl0eZRqDY8AAHSUjCpoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5pc2Nsb3NldG8uY2xvc2VfdG+UKGosLQEAai0tAQCMZ2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbnVtYmVyX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5pc2Nsb3NldG8uY2xvc2VfdG+Uag2PAAB0lIwraGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvLmlzbnVtZXJpY5QoaiwtAQBqLS0BAIxoaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLmlzY2xvc2V0by5pc251bWVyaWOUag2PAAB0lIw4aGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbi5ncmVhdGVyX3RoYW6UKGosLQEAai0tAQCMdWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbnVtYmVyX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLmdyZWF0ZXJfdGhhbpRqDY8AAHSUjERoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLmdyZWF0ZXJfdGhhbl9vcl9lcXVhbF90b5QoaiwtAQBqLS0BAIyBaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24uZ3JlYXRlcl90aGFuX29yX2VxdWFsX3RvlGoNjwAAdJSMNWhhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24ubGVzc190aGFulChqLC0BAGotLQEAjHJodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL251bWJlcl9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbi5sZXNzX3RoYW6Uag2PAAB0lIxBaGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbi5sZXNzX3RoYW5fb3JfZXF1YWxfdG+UKGosLQEAai0tAQCMfmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbnVtYmVyX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLmxlc3NfdGhhbl9vcl9lcXVhbF90b5RqDY8AAHSUjCxoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNsZW5ndGguaGFzX2xlbmd0aJQoaiwtAQBqLS0BAIxpaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc2xlbmd0aC5oYXNfbGVuZ3RolGoNjwAAdJSMMmhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3Byb3BlcnR5Lmhhc19wcm9wZXJ0aWVzlChqLC0BAGotLQEAjG9odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuaGFzX3Byb3BlcnRpZXOUag2PAAB0lIwwaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuaGFzX3Byb3BlcnR5lChqLC0BAGotLQEAjG1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuaGFzX3Byb3BlcnR5lGoNjwAAdJSMLGhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3N0cmluZy5oYXNfc3RyaW5nlChqLC0BAGotLQEAjGlodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzc3RyaW5nLmhhc19zdHJpbmeUag2PAAB0lIxCaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3JpbmdfY2FzZS5lcXVhbF90b19pZ25vcmluZ19jYXNllChqLC0BAGotLQEAjH1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX2Nhc2UuZXF1YWxfdG9faWdub3JpbmdfY2FzZZRqDY8AAHSUjE5oYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ193aGl0ZXNwYWNlLmVxdWFsX3RvX2lnbm9yaW5nX3doaXRlc3BhY2WUKGosLQEAai0tAQCMiWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3Jpbmdfd2hpdGVzcGFjZS5lcXVhbF90b19pZ25vcmluZ193aGl0ZXNwYWNllGoNjwAAdJSMNGhhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdjb250YWlucy5jb250YWluc19zdHJpbmeUKGosLQEAai0tAQCMb2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zLmNvbnRhaW5zX3N0cmluZ5RqDY8AAHSUjERoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnNpbm9yZGVyLnN0cmluZ19jb250YWluc19pbl9vcmRlcpQoaiwtAQBqLS0BAIx/aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnNpbm9yZGVyLnN0cmluZ19jb250YWluc19pbl9vcmRlcpRqDY8AAHSUjC5oYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nZW5kc3dpdGguZW5kc193aXRolChqLC0BAGotLQEAjGlodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdlbmRzd2l0aC5lbmRzX3dpdGiUag2PAAB0lIwyaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ21hdGNoZXMubWF0Y2hlc19yZWdleHCUKGosLQEAai0tAQCMbWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ21hdGNoZXMubWF0Y2hlc19yZWdleHCUag2PAAB0lIwyaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ3N0YXJ0c3dpdGguc3RhcnRzX3dpdGiUKGosLQEAai0tAQCMbWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ3N0YXJ0c3dpdGguc3RhcnRzX3dpdGiUag2PAAB0lHWMCHB5OmNsYXNzlH2UKIwuaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9uLkJhc2VEZXNjcmlwdGlvbpQoaiwtAQBqLS0BAIxgaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLmJhc2VfZGVzY3JpcHRpb24uQmFzZURlc2NyaXB0aW9ulGoNjwAAdJSMJmhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVylChqLC0BAGotLQEAjFhodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVylGoNjwAAdJSMHmhhbWNyZXN0LmNvcmUuY29yZS5hbGxvZi5BbGxPZpQoaiwtAQBqLS0BAIxcaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuYWxsb2YuQWxsT2aUag2PAAB0lIweaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mLkFueU9mlChqLC0BAGotLQEAjFxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5hbnlvZi5BbnlPZpRqDY8AAHSUjCtoYW1jcmVzdC5jb3JlLmNvcmUuZGVzY3JpYmVkX2FzLkRlc2NyaWJlZEFzlChqLC0BAGotLQEAjGtodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RlY29yYXRvcl9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmRlc2NyaWJlZF9hcy5EZXNjcmliZWRBc5RqDY8AAHSUjBloYW1jcmVzdC5jb3JlLmNvcmUuaXNfLklzlChqLC0BAGotLQEAjFlodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RlY29yYXRvcl9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzXy5Jc5RqDY8AAHSUjChoYW1jcmVzdC5jb3JlLmNvcmUuaXNhbnl0aGluZy5Jc0FueXRoaW5nlChqLC0BAGotLQEAjGZodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc2FueXRoaW5nLklzQW55dGhpbmeUag2PAAB0lIwiaGFtY3Jlc3QuY29yZS5jb3JlLmlzZXF1YWwuSXNFcXVhbJQoaiwtAQBqLS0BAIxfaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc2VxdWFsLklzRXF1YWyUag2PAAB0lIwsaGFtY3Jlc3QuY29yZS5jb3JlLmlzaW5zdGFuY2VvZi5Jc0luc3RhbmNlT2aUKGosLQEAai0tAQCMaWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNpbnN0YW5jZW9mLklzSW5zdGFuY2VPZpRqDY8AAHSUjCBoYW1jcmVzdC5jb3JlLmNvcmUuaXNub25lLklzTm9uZZQoaiwtAQBqLS0BAIxdaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc25vbmUuSXNOb25llGoNjwAAdJSMHmhhbWNyZXN0LmNvcmUuY29yZS5pc25vdC5Jc05vdJQoaiwtAQBqLS0BAIxcaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNub3QuSXNOb3SUag2PAAB0lIwgaGFtY3Jlc3QuY29yZS5jb3JlLmlzc2FtZS5Jc1NhbWWUKGosLQEAai0tAQCMXWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNzYW1lLklzU2FtZZRqDY8AAHSUjCBoYW1jcmVzdC5jb3JlLmNvcmUucmFpc2VzLlJhaXNlc5QoaiwtAQBqLS0BAIxdaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMuUmFpc2VzlGoNjwAAdJSMJWhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb26UKGosLQEAai0tAQCMV2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5kZXNjcmlwdGlvbi5EZXNjcmlwdGlvbpRqDY8AAHSUjB1oYW1jcmVzdC5jb3JlLm1hdGNoZXIuTWF0Y2hlcpQoaiwtAQBqLS0BAIxPaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLm1hdGNoZXIuTWF0Y2hlcpRqDY8AAHSUjCtoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5nLlNlbGZEZXNjcmliaW5nlChqLC0BAGotLQEAjF1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmcuU2VsZkRlc2NyaWJpbmeUag2PAAB0lIw1aGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3ZhbHVlLlNlbGZEZXNjcmliaW5nVmFsdWWUKGosLQEAai0tAQCMZ2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZ3ZhbHVlLlNlbGZEZXNjcmliaW5nVmFsdWWUag2PAAB0lIwyaGFtY3Jlc3QuY29yZS5zdHJpbmdfZGVzY3JpcHRpb24uU3RyaW5nRGVzY3JpcHRpb26UKGosLQEAai0tAQCMZGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5zdHJpbmdfZGVzY3JpcHRpb24uU3RyaW5nRGVzY3JpcHRpb26Uag2PAAB0lIwsaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzX2VtcHR5LklzRW1wdHmUKGosLQEAai0tAQCMa2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc19lbXB0eS5Jc0VtcHR5lGoNjwAAdJSMPmhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZy5Jc0RpY3RDb250YWluaW5nlChqLC0BAGotLQEAjH9odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZy5Jc0RpY3RDb250YWluaW5nlGoNjwAAdJSMTGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2VudHJpZXMuSXNEaWN0Q29udGFpbmluZ0VudHJpZXOUKGosLQEAai0tAQCMjWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nZW50cmllcy5Jc0RpY3RDb250YWluaW5nRW50cmllc5RqDY8AAHSUjERoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdrZXkuSXNEaWN0Q29udGFpbmluZ0tleZQoaiwtAQBqLS0BAIyFaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kaWN0aW9uYXJ5X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdrZXkuSXNEaWN0Q29udGFpbmluZ0tleZRqDY8AAHSUjEhoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmd2YWx1ZS5Jc0RpY3RDb250YWluaW5nVmFsdWWUKGosLQEAai0tAQCMiWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ndmFsdWUuSXNEaWN0Q29udGFpbmluZ1ZhbHVllGoNjwAAdJSMJWhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2luLklzSW6UKGosLQEAai0tAQCMZGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2luLklzSW6Uag2PAAB0lIxGaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5Jc1NlcXVlbmNlQ29udGFpbmluZ5QoaiwtAQBqLS0BAIyFaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5Jc1NlcXVlbmNlQ29udGFpbmluZ5RqDY8AAHSUjEtoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5nLklzU2VxdWVuY2VDb250YWluaW5nRXZlcnmUKGosLQEAai0tAQCMimh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmcuSXNTZXF1ZW5jZUNvbnRhaW5pbmdFdmVyeZRqDY8AAHSUjFpoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5hbnlvcmRlci5Jc1NlcXVlbmNlQ29udGFpbmluZ0luQW55T3JkZXKUKGosLQEAai0tAQCMmWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbmFueW9yZGVyLklzU2VxdWVuY2VDb250YWluaW5nSW5BbnlPcmRlcpRqDY8AAHSUjFRoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlci5Jc1NlcXVlbmNlQ29udGFpbmluZ0luT3JkZXKUKGosLQEAai0tAQCMk2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbm9yZGVyLklzU2VxdWVuY2VDb250YWluaW5nSW5PcmRlcpRqDY8AAHSUjE5oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9vbmx5Y29udGFpbmluZy5Jc1NlcXVlbmNlT25seUNvbnRhaW5pbmeUKGosLQEAai0tAQCMjWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX29ubHljb250YWluaW5nLklzU2VxdWVuY2VPbmx5Q29udGFpbmluZ5RqDY8AAHSUjCtoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5pc2Nsb3NldG8uSXNDbG9zZVRvlChqLC0BAGotLQEAjGhodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL251bWJlcl9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvLklzQ2xvc2VUb5RqDY8AAHSUjD5oYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLk9yZGVyaW5nQ29tcGFyaXNvbpQoaiwtAQBqLS0BAIx7aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24uT3JkZXJpbmdDb21wYXJpc29ulGoNjwAAdJSMK2hhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc2xlbmd0aC5IYXNMZW5ndGiUKGosLQEAai0tAQCMaGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNsZW5ndGguSGFzTGVuZ3RolGoNjwAAdJSMOGhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3Byb3BlcnR5LklzT2JqZWN0V2l0aFByb3BlcnR5lChqLC0BAGotLQEAjHVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuSXNPYmplY3RXaXRoUHJvcGVydHmUag2PAAB0lIwraGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzc3RyaW5nLkhhc1N0cmluZ5QoaiwtAQBqLS0BAIxoaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3N0cmluZy5IYXNTdHJpbmeUag2PAAB0lIw/aGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3JpbmdfY2FzZS5Jc0VxdWFsSWdub3JpbmdDYXNllChqLC0BAGotLQEAjHpodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX2Nhc2UuSXNFcXVhbElnbm9yaW5nQ2FzZZRqDY8AAHSUjEtoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ193aGl0ZXNwYWNlLklzRXF1YWxJZ25vcmluZ1doaXRlU3BhY2WUKGosLQEAai0tAQCMhmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3Jpbmdfd2hpdGVzcGFjZS5Jc0VxdWFsSWdub3JpbmdXaGl0ZVNwYWNllGoNjwAAdJSMM2hhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdjb250YWlucy5TdHJpbmdDb250YWluc5QoaiwtAQBqLS0BAIxuaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nY29udGFpbnMuU3RyaW5nQ29udGFpbnOUag2PAAB0lIxBaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zaW5vcmRlci5TdHJpbmdDb250YWluc0luT3JkZXKUKGosLQEAai0tAQCMfGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zaW5vcmRlci5TdHJpbmdDb250YWluc0luT3JkZXKUag2PAAB0lIwzaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2VuZHN3aXRoLlN0cmluZ0VuZHNXaXRolChqLC0BAGotLQEAjG5odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdlbmRzd2l0aC5TdHJpbmdFbmRzV2l0aJRqDY8AAHSUjDhoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nbWF0Y2hlcy5TdHJpbmdNYXRjaGVzUGF0dGVybpQoaiwtAQBqLS0BAIxzaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nbWF0Y2hlcy5TdHJpbmdNYXRjaGVzUGF0dGVybpRqDY8AAHSUjDdoYW1jcmVzdC5saWJyYXJ5LnRleHQuc3RyaW5nc3RhcnRzd2l0aC5TdHJpbmdTdGFydHNXaXRolChqLC0BAGotLQEAjHJodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3RleHRfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkudGV4dC5zdHJpbmdzdGFydHN3aXRoLlN0cmluZ1N0YXJ0c1dpdGiUag2PAAB0lHWMCXB5Om1ldGhvZJR9lCiMNWhhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb24uYXBwZW5klChqLC0BAGotLQEAjGdodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb24uYXBwZW5klGoNjwAAdJSMRGhhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb24uYXBwZW5kX2Rlc2NyaXB0aW9uX29mlChqLC0BAGotLQEAjHZodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb24uYXBwZW5kX2Rlc2NyaXB0aW9uX29mlGoNjwAAdJSMOmhhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb24uYXBwZW5kX2xpc3SUKGosLQEAai0tAQCMbGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5iYXNlX2Rlc2NyaXB0aW9uLkJhc2VEZXNjcmlwdGlvbi5hcHBlbmRfbGlzdJRqDY8AAHSUjDpoYW1jcmVzdC5jb3JlLmJhc2VfZGVzY3JpcHRpb24uQmFzZURlc2NyaXB0aW9uLmFwcGVuZF90ZXh0lChqLC0BAGotLQEAjGxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuYmFzZV9kZXNjcmlwdGlvbi5CYXNlRGVzY3JpcHRpb24uYXBwZW5kX3RleHSUag2PAAB0lIwvaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuX21hdGNoZXOUKGosLQEAai0tAQCMYWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuX21hdGNoZXOUag2PAAB0lIw1aGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuZGVzY3JpYmVfbWF0Y2iUKGosLQEAai0tAQCMZ2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuZGVzY3JpYmVfbWF0Y2iUag2PAAB0lIw4aGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUKGosLQEAai0tAQCMamh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUag2PAAB0lIwuaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIubWF0Y2hlc5QoaiwtAQBqLS0BAIxgaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlci5CYXNlTWF0Y2hlci5tYXRjaGVzlGoNjwAAdJSMMGhhbWNyZXN0LmNvcmUuY29yZS5hbGxvZi5BbGxPZi5kZXNjcmliZV9taXNtYXRjaJQoaiwtAQBqLS0BAIxuaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuYWxsb2YuQWxsT2YuZGVzY3JpYmVfbWlzbWF0Y2iUag2PAAB0lIwqaGFtY3Jlc3QuY29yZS5jb3JlLmFsbG9mLkFsbE9mLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjGhodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5hbGxvZi5BbGxPZi5kZXNjcmliZV90b5RqDY8AAHSUjCZoYW1jcmVzdC5jb3JlLmNvcmUuYWxsb2YuQWxsT2YubWF0Y2hlc5QoaiwtAQBqLS0BAIxkaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuYWxsb2YuQWxsT2YubWF0Y2hlc5RqDY8AAHSUjCpoYW1jcmVzdC5jb3JlLmNvcmUuYW55b2YuQW55T2YuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMaGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbG9naWNhbF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmFueW9mLkFueU9mLmRlc2NyaWJlX3RvlGoNjwAAdJSMPWhhbWNyZXN0LmNvcmUuY29yZS5kZXNjcmliZWRfYXMuRGVzY3JpYmVkQXMuZGVzY3JpYmVfbWlzbWF0Y2iUKGosLQEAai0tAQCMfWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGVjb3JhdG9yX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuZGVzY3JpYmVkX2FzLkRlc2NyaWJlZEFzLmRlc2NyaWJlX21pc21hdGNolGoNjwAAdJSMN2hhbWNyZXN0LmNvcmUuY29yZS5kZXNjcmliZWRfYXMuRGVzY3JpYmVkQXMuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMd2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGVjb3JhdG9yX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuZGVzY3JpYmVkX2FzLkRlc2NyaWJlZEFzLmRlc2NyaWJlX3RvlGoNjwAAdJSMM2hhbWNyZXN0LmNvcmUuY29yZS5kZXNjcmliZWRfYXMuRGVzY3JpYmVkQXMubWF0Y2hlc5QoaiwtAQBqLS0BAIxzaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kZWNvcmF0b3JfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5kZXNjcmliZWRfYXMuRGVzY3JpYmVkQXMubWF0Y2hlc5RqDY8AAHSUjCtoYW1jcmVzdC5jb3JlLmNvcmUuaXNfLklzLmRlc2NyaWJlX21pc21hdGNolChqLC0BAGotLQEAjGtodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RlY29yYXRvcl9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzXy5Jcy5kZXNjcmliZV9taXNtYXRjaJRqDY8AAHSUjCVoYW1jcmVzdC5jb3JlLmNvcmUuaXNfLklzLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjGVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RlY29yYXRvcl9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzXy5Jcy5kZXNjcmliZV90b5RqDY8AAHSUjCFoYW1jcmVzdC5jb3JlLmNvcmUuaXNfLklzLm1hdGNoZXOUKGosLQEAai0tAQCMYWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGVjb3JhdG9yX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNfLklzLm1hdGNoZXOUag2PAAB0lIw0aGFtY3Jlc3QuY29yZS5jb3JlLmlzYW55dGhpbmcuSXNBbnl0aGluZy5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIxyaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNhbnl0aGluZy5Jc0FueXRoaW5nLmRlc2NyaWJlX3RvlGoNjwAAdJSMLmhhbWNyZXN0LmNvcmUuY29yZS5pc2VxdWFsLklzRXF1YWwuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMa2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNlcXVhbC5Jc0VxdWFsLmRlc2NyaWJlX3RvlGoNjwAAdJSMOGhhbWNyZXN0LmNvcmUuY29yZS5pc2luc3RhbmNlb2YuSXNJbnN0YW5jZU9mLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjHVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzaW5zdGFuY2VvZi5Jc0luc3RhbmNlT2YuZGVzY3JpYmVfdG+Uag2PAAB0lIwsaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm9uZS5Jc05vbmUuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMaWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNub25lLklzTm9uZS5kZXNjcmliZV90b5RqDY8AAHSUjDBoYW1jcmVzdC5jb3JlLmNvcmUuaXNub3QuSXNOb3QuZGVzY3JpYmVfbWlzbWF0Y2iUKGosLQEAai0tAQCMbmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbG9naWNhbF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLmlzbm90LklzTm90LmRlc2NyaWJlX21pc21hdGNolGoNjwAAdJSMKmhhbWNyZXN0LmNvcmUuY29yZS5pc25vdC5Jc05vdC5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIxoaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9sb2dpY2FsX21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNub3QuSXNOb3QuZGVzY3JpYmVfdG+Uag2PAAB0lIwyaGFtY3Jlc3QuY29yZS5jb3JlLmlzc2FtZS5Jc1NhbWUuZGVzY3JpYmVfbWlzbWF0Y2iUKGosLQEAai0tAQCMb2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUuaXNzYW1lLklzU2FtZS5kZXNjcmliZV9taXNtYXRjaJRqDY8AAHSUjCxoYW1jcmVzdC5jb3JlLmNvcmUuaXNzYW1lLklzU2FtZS5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIxpaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5pc3NhbWUuSXNTYW1lLmRlc2NyaWJlX3RvlGoNjwAAdJSML2hhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMuUmFpc2VzLmRlc2NyaWJlX21hdGNolChqLC0BAGotLQEAjGxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QuY29yZS5jb3JlLnJhaXNlcy5SYWlzZXMuZGVzY3JpYmVfbWF0Y2iUag2PAAB0lIwyaGFtY3Jlc3QuY29yZS5jb3JlLnJhaXNlcy5SYWlzZXMuZGVzY3JpYmVfbWlzbWF0Y2iUKGosLQEAai0tAQCMb2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5jb3JlLmNvcmUucmFpc2VzLlJhaXNlcy5kZXNjcmliZV9taXNtYXRjaJRqDY8AAHSUjCxoYW1jcmVzdC5jb3JlLmNvcmUucmFpc2VzLlJhaXNlcy5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIxpaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvI2hhbWNyZXN0LmNvcmUuY29yZS5yYWlzZXMuUmFpc2VzLmRlc2NyaWJlX3RvlGoNjwAAdJSMO2hhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX2Rlc2NyaXB0aW9uX29mlChqLC0BAGotLQEAjG1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX2Rlc2NyaXB0aW9uX29mlGoNjwAAdJSMMWhhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX2xpc3SUKGosLQEAai0tAQCMY2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5kZXNjcmlwdGlvbi5EZXNjcmlwdGlvbi5hcHBlbmRfbGlzdJRqDY8AAHSUjDFoYW1jcmVzdC5jb3JlLmRlc2NyaXB0aW9uLkRlc2NyaXB0aW9uLmFwcGVuZF90ZXh0lChqLC0BAGotLQEAjGNodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvI2hhbWNyZXN0LmNvcmUuZGVzY3JpcHRpb24uRGVzY3JpcHRpb24uYXBwZW5kX3RleHSUag2PAAB0lIwsaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIuZGVzY3JpYmVfbWF0Y2iUKGosLQEAai0tAQCMXmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIuZGVzY3JpYmVfbWF0Y2iUag2PAAB0lIwvaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUKGosLQEAai0tAQCMYWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUag2PAAB0lIwlaGFtY3Jlc3QuY29yZS5tYXRjaGVyLk1hdGNoZXIubWF0Y2hlc5QoaiwtAQBqLS0BAIxXaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLm1hdGNoZXIuTWF0Y2hlci5tYXRjaGVzlGoNjwAAdJSMN2hhbWNyZXN0LmNvcmUuc2VsZmRlc2NyaWJpbmcuU2VsZkRlc2NyaWJpbmcuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMaWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5zZWxmZGVzY3JpYmluZy5TZWxmRGVzY3JpYmluZy5kZXNjcmliZV90b5RqDY8AAHSUjEFoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5ndmFsdWUuU2VsZkRlc2NyaWJpbmdWYWx1ZS5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIxzaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb3JlLyNoYW1jcmVzdC5jb3JlLnNlbGZkZXNjcmliaW5ndmFsdWUuU2VsZkRlc2NyaWJpbmdWYWx1ZS5kZXNjcmliZV90b5RqDY8AAHSUjDloYW1jcmVzdC5jb3JlLnN0cmluZ19kZXNjcmlwdGlvbi5TdHJpbmdEZXNjcmlwdGlvbi5hcHBlbmSUKGosLQEAai0tAQCMa2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29yZS8jaGFtY3Jlc3QuY29yZS5zdHJpbmdfZGVzY3JpcHRpb24uU3RyaW5nRGVzY3JpcHRpb24uYXBwZW5klGoNjwAAdJSMOGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc19lbXB0eS5Jc0VtcHR5LmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjHdodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNfZW1wdHkuSXNFbXB0eS5kZXNjcmliZV90b5RqDY8AAHSUjDRoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNfZW1wdHkuSXNFbXB0eS5tYXRjaGVzlChqLC0BAGotLQEAjHNodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNfZW1wdHkuSXNFbXB0eS5tYXRjaGVzlGoNjwAAdJSMSmhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZy5Jc0RpY3RDb250YWluaW5nLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjItodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZy5Jc0RpY3RDb250YWluaW5nLmRlc2NyaWJlX3RvlGoNjwAAdJSMXmhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2VudHJpZXMuSXNEaWN0Q29udGFpbmluZ0VudHJpZXMuZGVzY3JpYmVfa2V5dmFsdWWUKGosLQEAai0tAQCMn2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nZW50cmllcy5Jc0RpY3RDb250YWluaW5nRW50cmllcy5kZXNjcmliZV9rZXl2YWx1ZZRqDY8AAHSUjF5oYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdlbnRyaWVzLklzRGljdENvbnRhaW5pbmdFbnRyaWVzLmRlc2NyaWJlX21pc21hdGNolChqLC0BAGotLQEAjJ9odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2VudHJpZXMuSXNEaWN0Q29udGFpbmluZ0VudHJpZXMuZGVzY3JpYmVfbWlzbWF0Y2iUag2PAAB0lIxYaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5nZW50cmllcy5Jc0RpY3RDb250YWluaW5nRW50cmllcy5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIyZaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kaWN0aW9uYXJ5X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdlbnRyaWVzLklzRGljdENvbnRhaW5pbmdFbnRyaWVzLmRlc2NyaWJlX3RvlGoNjwAAdJSMVGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ2VudHJpZXMuSXNEaWN0Q29udGFpbmluZ0VudHJpZXMubWF0Y2hlc5QoaiwtAQBqLS0BAIyVaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kaWN0aW9uYXJ5X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNkaWN0X2NvbnRhaW5pbmdlbnRyaWVzLklzRGljdENvbnRhaW5pbmdFbnRyaWVzLm1hdGNoZXOUag2PAAB0lIxQaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5na2V5LklzRGljdENvbnRhaW5pbmdLZXkuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMkWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvZGljdGlvbmFyeV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5na2V5LklzRGljdENvbnRhaW5pbmdLZXkuZGVzY3JpYmVfdG+Uag2PAAB0lIxUaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzZGljdF9jb250YWluaW5ndmFsdWUuSXNEaWN0Q29udGFpbmluZ1ZhbHVlLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjJVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc2RpY3RfY29udGFpbmluZ3ZhbHVlLklzRGljdENvbnRhaW5pbmdWYWx1ZS5kZXNjcmliZV90b5RqDY8AAHSUjDFoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpbi5Jc0luLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjHBodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNpbi5Jc0luLmRlc2NyaWJlX3RvlGoNjwAAdJSMUmhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmcuSXNTZXF1ZW5jZUNvbnRhaW5pbmcuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMkWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmcuSXNTZXF1ZW5jZUNvbnRhaW5pbmcuZGVzY3JpYmVfdG+Uag2PAAB0lIxdaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5Jc1NlcXVlbmNlQ29udGFpbmluZ0V2ZXJ5LmRlc2NyaWJlX21pc21hdGNolChqLC0BAGotLQEAjJxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5nLklzU2VxdWVuY2VDb250YWluaW5nRXZlcnkuZGVzY3JpYmVfbWlzbWF0Y2iUag2PAAB0lIxXaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZy5Jc1NlcXVlbmNlQ29udGFpbmluZ0V2ZXJ5LmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjJZodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5nLklzU2VxdWVuY2VDb250YWluaW5nRXZlcnkuZGVzY3JpYmVfdG+Uag2PAAB0lIxsaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2luYW55b3JkZXIuSXNTZXF1ZW5jZUNvbnRhaW5pbmdJbkFueU9yZGVyLmRlc2NyaWJlX21pc21hdGNolChqLC0BAGotLQEAjKtodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5hbnlvcmRlci5Jc1NlcXVlbmNlQ29udGFpbmluZ0luQW55T3JkZXIuZGVzY3JpYmVfbWlzbWF0Y2iUag2PAAB0lIxmaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2luYW55b3JkZXIuSXNTZXF1ZW5jZUNvbnRhaW5pbmdJbkFueU9yZGVyLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjKVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5hbnlvcmRlci5Jc1NlcXVlbmNlQ29udGFpbmluZ0luQW55T3JkZXIuZGVzY3JpYmVfdG+Uag2PAAB0lIxiaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2luYW55b3JkZXIuSXNTZXF1ZW5jZUNvbnRhaW5pbmdJbkFueU9yZGVyLm1hdGNoZXOUKGosLQEAai0tAQCMoWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbmFueW9yZGVyLklzU2VxdWVuY2VDb250YWluaW5nSW5BbnlPcmRlci5tYXRjaGVzlGoNjwAAdJSMZmhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbm9yZGVyLklzU2VxdWVuY2VDb250YWluaW5nSW5PcmRlci5kZXNjcmliZV9taXNtYXRjaJQoaiwtAQBqLS0BAIylaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2lub3JkZXIuSXNTZXF1ZW5jZUNvbnRhaW5pbmdJbk9yZGVyLmRlc2NyaWJlX21pc21hdGNolGoNjwAAdJSMYGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbm9yZGVyLklzU2VxdWVuY2VDb250YWluaW5nSW5PcmRlci5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIyfaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5jb2xsZWN0aW9uLmlzc2VxdWVuY2VfY29udGFpbmluZ2lub3JkZXIuSXNTZXF1ZW5jZUNvbnRhaW5pbmdJbk9yZGVyLmRlc2NyaWJlX3RvlGoNjwAAdJSMXGhhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX2NvbnRhaW5pbmdpbm9yZGVyLklzU2VxdWVuY2VDb250YWluaW5nSW5PcmRlci5tYXRjaGVzlChqLC0BAGotLQEAjJtodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3NlcXVlbmNlX21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9jb250YWluaW5naW5vcmRlci5Jc1NlcXVlbmNlQ29udGFpbmluZ0luT3JkZXIubWF0Y2hlc5RqDY8AAHSUjFpoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24uaXNzZXF1ZW5jZV9vbmx5Y29udGFpbmluZy5Jc1NlcXVlbmNlT25seUNvbnRhaW5pbmcuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMmWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VxdWVuY2VfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkuY29sbGVjdGlvbi5pc3NlcXVlbmNlX29ubHljb250YWluaW5nLklzU2VxdWVuY2VPbmx5Q29udGFpbmluZy5kZXNjcmliZV90b5RqDY8AAHSUjD1oYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5pc2Nsb3NldG8uSXNDbG9zZVRvLmRlc2NyaWJlX21pc21hdGNolChqLC0BAGotLQEAjHpodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL251bWJlcl9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvLklzQ2xvc2VUby5kZXNjcmliZV9taXNtYXRjaJRqDY8AAHSUjDdoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5pc2Nsb3NldG8uSXNDbG9zZVRvLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjHRodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL251bWJlcl9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5udW1iZXIuaXNjbG9zZXRvLklzQ2xvc2VUby5kZXNjcmliZV90b5RqDY8AAHSUjEpoYW1jcmVzdC5saWJyYXJ5Lm51bWJlci5vcmRlcmluZ19jb21wYXJpc29uLk9yZGVyaW5nQ29tcGFyaXNvbi5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIyHaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9udW1iZXJfbWF0Y2hlcnMvI2hhbWNyZXN0LmxpYnJhcnkubnVtYmVyLm9yZGVyaW5nX2NvbXBhcmlzb24uT3JkZXJpbmdDb21wYXJpc29uLmRlc2NyaWJlX3RvlGoNjwAAdJSMPWhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc2xlbmd0aC5IYXNMZW5ndGguZGVzY3JpYmVfbWlzbWF0Y2iUKGosLQEAai0tAQCMemh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNsZW5ndGguSGFzTGVuZ3RoLmRlc2NyaWJlX21pc21hdGNolGoNjwAAdJSMN2hhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc2xlbmd0aC5IYXNMZW5ndGguZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMdGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNsZW5ndGguSGFzTGVuZ3RoLmRlc2NyaWJlX3RvlGoNjwAAdJSMSmhhbWNyZXN0LmxpYnJhcnkub2JqZWN0Lmhhc3Byb3BlcnR5LklzT2JqZWN0V2l0aFByb3BlcnR5LmRlc2NyaWJlX21pc21hdGNolChqLC0BAGotLQEAjIdodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuSXNPYmplY3RXaXRoUHJvcGVydHkuZGVzY3JpYmVfbWlzbWF0Y2iUag2PAAB0lIxEaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzcHJvcGVydHkuSXNPYmplY3RXaXRoUHJvcGVydHkuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMgWh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvb2JqZWN0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNwcm9wZXJ0eS5Jc09iamVjdFdpdGhQcm9wZXJ0eS5kZXNjcmliZV90b5RqDY8AAHSUjDdoYW1jcmVzdC5saWJyYXJ5Lm9iamVjdC5oYXNzdHJpbmcuSGFzU3RyaW5nLmRlc2NyaWJlX3RvlChqLC0BAGotLQEAjHRodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL29iamVjdF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS5vYmplY3QuaGFzc3RyaW5nLkhhc1N0cmluZy5kZXNjcmliZV90b5RqDY8AAHSUjEtoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ19jYXNlLklzRXF1YWxJZ25vcmluZ0Nhc2UuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMhmh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LmlzZXF1YWxfaWdub3JpbmdfY2FzZS5Jc0VxdWFsSWdub3JpbmdDYXNlLmRlc2NyaWJlX3RvlGoNjwAAdJSMV2hhbWNyZXN0LmxpYnJhcnkudGV4dC5pc2VxdWFsX2lnbm9yaW5nX3doaXRlc3BhY2UuSXNFcXVhbElnbm9yaW5nV2hpdGVTcGFjZS5kZXNjcmliZV90b5QoaiwtAQBqLS0BAIySaHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzLyNoYW1jcmVzdC5saWJyYXJ5LnRleHQuaXNlcXVhbF9pZ25vcmluZ193aGl0ZXNwYWNlLklzRXF1YWxJZ25vcmluZ1doaXRlU3BhY2UuZGVzY3JpYmVfdG+Uag2PAAB0lIxNaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zaW5vcmRlci5TdHJpbmdDb250YWluc0luT3JkZXIuZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMiGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ2NvbnRhaW5zaW5vcmRlci5TdHJpbmdDb250YWluc0luT3JkZXIuZGVzY3JpYmVfdG+Uag2PAAB0lIxEaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ21hdGNoZXMuU3RyaW5nTWF0Y2hlc1BhdHRlcm4uZGVzY3JpYmVfdG+UKGosLQEAai0tAQCMf2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvdGV4dF9tYXRjaGVycy8jaGFtY3Jlc3QubGlicmFyeS50ZXh0LnN0cmluZ21hdGNoZXMuU3RyaW5nTWF0Y2hlc1BhdHRlcm4uZGVzY3JpYmVfdG+Uag2PAAB0lHWMB3N0ZDpkb2OUfZQojARjb3JllChqLC0BAGotLQEAjDFodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2NvcmUvlIwIQ29yZSBBUEmUdJSMD2N1c3RvbV9tYXRjaGVyc5QoaiwtAQBqLS0BAIw8aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jdXN0b21fbWF0Y2hlcnMvlIwXV3JpdGluZyBDdXN0b20gTWF0Y2hlcnOUdJSMEmRlY29yYXRvcl9tYXRjaGVyc5QoaiwtAQBqLS0BAIw/aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9kZWNvcmF0b3JfbWF0Y2hlcnMvlIwSRGVjb3JhdG9yIE1hdGNoZXJzlHSUjBNkaWN0aW9uYXJ5X21hdGNoZXJzlChqLC0BAGotLQEAjEBodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2RpY3Rpb25hcnlfbWF0Y2hlcnMvlIwTRGljdGlvbmFyeSBNYXRjaGVyc5R0lIwHaGVscGVyc5QoaiwtAQBqLS0BAIw0aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9oZWxwZXJzL5SMB0hlbHBlcnOUdJSMBWluZGV4lChqLC0BAGotLQEAjDZodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL1B5SGFtY3Jlc3SUjA1kb2N1bWVudGF0aW9ulHSUjAtpbnRlZ3JhdGlvbpQoaiwtAQBqLS0BAIw4aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9pbnRlZ3JhdGlvbi+UjCtJbnRlZ3JhdGlvbiB3aXRoIFB5VW5pdCBhbmQgT3RoZXIgTGlicmFyaWVzlHSUjAdsaWJyYXJ5lChqLC0BAGotLQEAjDRodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xpYnJhcnkvlIwPTWF0Y2hlciBMaWJyYXJ5lHSUjBBsb2dpY2FsX21hdGNoZXJzlChqLC0BAGotLQEAjD1odHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL2xvZ2ljYWxfbWF0Y2hlcnMvlIwQTG9naWNhbCBNYXRjaGVyc5R0lIwPbnVtYmVyX21hdGNoZXJzlChqLC0BAGotLQEAjDxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL251bWJlcl9tYXRjaGVycy+UjA9OdW1iZXIgTWF0Y2hlcnOUdJSMD29iamVjdF9tYXRjaGVyc5QoaiwtAQBqLS0BAIw8aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9vYmplY3RfbWF0Y2hlcnMvlIwPT2JqZWN0IE1hdGNoZXJzlHSUjBFzZXF1ZW5jZV9tYXRjaGVyc5QoaiwtAQBqLS0BAIw+aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zZXF1ZW5jZV9tYXRjaGVycy+UjBFTZXF1ZW5jZSBNYXRjaGVyc5R0lIwNdGV4dF9tYXRjaGVyc5QoaiwtAQBqLS0BAIw6aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90ZXh0X21hdGNoZXJzL5SMDVRleHQgTWF0Y2hlcnOUdJSMCHR1dG9yaWFslChqLC0BAGotLQEAjDVodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3MuaW8vZW4vc3RhYmxlL3R1dG9yaWFsL5SME1B5SGFtY3Jlc3QgVHV0b3JpYWyUdJR1jAlzdGQ6bGFiZWyUfZQojAhnZW5pbmRleJQoaiwtAQBqLS0BAIw1aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9nZW5pbmRleC+UjAVJbmRleJR0lIwIbW9kaW5kZXiUKGosLQEAai0tAQCMOGh0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvcHktbW9kaW5kZXgvlIwMTW9kdWxlIEluZGV4lHSUjAZzZWFyY2iUKGosLQEAai0tAQCMM2h0dHBzOi8vcHloYW1jcmVzdC5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvc2VhcmNoL5SMC1NlYXJjaCBQYWdllHSUjAVzdWdhcpQoaiwtAQBqLS0BAIw7aHR0cHM6Ly9weWhhbWNyZXN0LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS90dXRvcmlhbC8jc3VnYXKUjA9TeW50YWN0aWMgc3VnYXKUdJR1dYeUaDdoNkrP64RefZQojAlweTptb2R1bGWUfZQojBxnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmJhdGNolCiMFmdvb2dsZS1jbG91ZC1kYXRhc3RvcmWUaD2MX2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvYmF0Y2hlcy5odG1sI21vZHVsZS1nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmJhdGNolGoNjwAAdJSMHWdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50lChq4i8BAGg9jF9odHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2NsaWVudC5odG1sI21vZHVsZS1nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudJRqDY8AAHSUjB1nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmVudGl0eZQoauIvAQBoPYxhaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9lbnRpdGllcy5odG1sI21vZHVsZS1nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmVudGl0eZRqDY8AAHSUjB5nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnOUKGriLwEAaD2MYWh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvaGVscGVycy5odG1sI21vZHVsZS1nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnOUag2PAAB0lIwaZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXmUKGriLwEAaD2MWmh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3Qva2V5cy5odG1sI21vZHVsZS1nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleZRqDY8AAHSUjBxnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5lChq4i8BAGg9jF9odHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3F1ZXJpZXMuaHRtbCNtb2R1bGUtZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeZRqDY8AAHSUjCJnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9ulChq4i8BAGg9jGpodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3RyYW5zYWN0aW9ucy5odG1sI21vZHVsZS1nb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9ulGoNjwAAdJR1jAhweTpjbGFzc5R9lCiMImdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuYmF0Y2guQmF0Y2iUKGriLwEAaD2MXmh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvYmF0Y2hlcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuYmF0Y2guQmF0Y2iUag2PAAB0lIwkZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50lChq4i8BAGg9jF9odHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2NsaWVudC5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudJRqDY8AAHSUjCRnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmVudGl0eS5FbnRpdHmUKGriLwEAaD2MYWh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvZW50aXRpZXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmVudGl0eS5FbnRpdHmUag2PAAB0lIwnZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5oZWxwZXJzLkdlb1BvaW50lChq4i8BAGg9jGNodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2hlbHBlcnMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnMuR2VvUG9pbnSUag2PAAB0lIweZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5lChq4i8BAGg9jFdodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2tleXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXmUag2PAAB0lIwlZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5JdGVyYXRvcpQoauIvAQBoPYxhaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9xdWVyaWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5JdGVyYXRvcpRqDY8AAHSUjCJnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5lChq4i8BAGg9jF5odHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3F1ZXJpZXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5lGoNjwAAdJSMLmdvb2dsZS5jbG91ZC5kYXRhc3RvcmUudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb26UKGriLwEAaD2Mb2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvdHJhbnNhY3Rpb25zLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbpRqDY8AAHSUdYwJcHk6bWV0aG9klH2UKIwoZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5iYXRjaC5CYXRjaC5iZWdpbpQoauIvAQBoPYxkaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9iYXRjaGVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5iYXRjaC5CYXRjaC5iZWdpbpRqDY8AAHSUjClnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmJhdGNoLkJhdGNoLmNvbW1pdJQoauIvAQBoPYxlaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9iYXRjaGVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5iYXRjaC5CYXRjaC5jb21taXSUag2PAAB0lIwqZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5iYXRjaC5CYXRjaC5jdXJyZW50lChq4i8BAGg9jGZodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2JhdGNoZXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmJhdGNoLkJhdGNoLmN1cnJlbnSUag2PAAB0lIwpZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5iYXRjaC5CYXRjaC5kZWxldGWUKGriLwEAaD2MZWh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvYmF0Y2hlcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuYmF0Y2guQmF0Y2guZGVsZXRllGoNjwAAdJSMLGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuYmF0Y2guQmF0Y2gubXV0YXRpb25zlChq4i8BAGg9jGhodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2JhdGNoZXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmJhdGNoLkJhdGNoLm11dGF0aW9uc5RqDY8AAHSUjCxnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmJhdGNoLkJhdGNoLm5hbWVzcGFjZZQoauIvAQBoPYxoaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9iYXRjaGVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5iYXRjaC5CYXRjaC5uYW1lc3BhY2WUag2PAAB0lIwqZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5iYXRjaC5CYXRjaC5wcm9qZWN0lChq4i8BAGg9jGZodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2JhdGNoZXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmJhdGNoLkJhdGNoLnByb2plY3SUag2PAAB0lIwmZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5iYXRjaC5CYXRjaC5wdXSUKGriLwEAaD2MYmh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvYmF0Y2hlcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuYmF0Y2guQmF0Y2gucHV0lGoNjwAAdJSMK2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuYmF0Y2guQmF0Y2gucm9sbGJhY2uUKGriLwEAaD2MZ2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvYmF0Y2hlcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuYmF0Y2guQmF0Y2gucm9sbGJhY2uUag2PAAB0lIwxZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50LmFsbG9jYXRlX2lkc5QoauIvAQBoPYxsaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9jbGllbnQuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuYWxsb2NhdGVfaWRzlGoNjwAAdJSMLWdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5iYXNlX3VybJQoauIvAQBoPYxoaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9jbGllbnQuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuYmFzZV91cmyUag2PAAB0lIwqZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50LmJhdGNolChq4i8BAGg9jGVodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2NsaWVudC5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5iYXRjaJRqDY8AAHSUjDJnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuY3VycmVudF9iYXRjaJQoauIvAQBoPYxtaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9jbGllbnQuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuY3VycmVudF9iYXRjaJRqDY8AAHSUjDhnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuY3VycmVudF90cmFuc2FjdGlvbpQoauIvAQBoPYxzaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9jbGllbnQuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuY3VycmVudF90cmFuc2FjdGlvbpRqDY8AAHSUjCtnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuZGVsZXRllChq4i8BAGg9jGZodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2NsaWVudC5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5kZWxldGWUag2PAAB0lIwxZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50LmRlbGV0ZV9tdWx0aZQoauIvAQBoPYxsaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9jbGllbnQuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuZGVsZXRlX211bHRplGoNjwAAdJSMKGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5nZXSUKGriLwEAaD2MY2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvY2xpZW50Lmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50LmdldJRqDY8AAHSUjC5nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuZ2V0X211bHRplChq4i8BAGg9jGlodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2NsaWVudC5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5nZXRfbXVsdGmUag2PAAB0lIwoZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50LmtleZQoauIvAQBoPYxjaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9jbGllbnQuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQua2V5lGoNjwAAdJSMKGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5wdXSUKGriLwEAaD2MY2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvY2xpZW50Lmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50LnB1dJRqDY8AAHSUjC5nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQucHV0X211bHRplChq4i8BAGg9jGlodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2NsaWVudC5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5wdXRfbXVsdGmUag2PAAB0lIwqZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50LnF1ZXJ5lChq4i8BAGg9jGVodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2NsaWVudC5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5xdWVyeZRqDY8AAHSUjDBnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQucmVzZXJ2ZV9pZHOUKGriLwEAaD2Ma2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvY2xpZW50Lmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5jbGllbnQuQ2xpZW50LnJlc2VydmVfaWRzlGoNjwAAdJSMMGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC50cmFuc2FjdGlvbpQoauIvAQBoPYxraHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9jbGllbnQuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQudHJhbnNhY3Rpb26Uag2PAAB0lIwrZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5lbnRpdHkuRW50aXR5Ll9fZXFfX5QoauIvAQBoPYxoaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9lbnRpdGllcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuZW50aXR5LkVudGl0eS5fX2VxX1+Uag2PAAB0lIwrZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5lbnRpdHkuRW50aXR5Ll9fbmVfX5QoauIvAQBoPYxoaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9lbnRpdGllcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuZW50aXR5LkVudGl0eS5fX25lX1+Uag2PAAB0lIwnZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5lbnRpdHkuRW50aXR5LmlklChq4i8BAGg9jGRodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2VudGl0aWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5lbnRpdHkuRW50aXR5LmlklGoNjwAAdJSMKWdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuZW50aXR5LkVudGl0eS5raW5klChq4i8BAGg9jGZodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2VudGl0aWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5lbnRpdHkuRW50aXR5LmtpbmSUag2PAAB0lIwuZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5oZWxwZXJzLkdlb1BvaW50Ll9fZXFfX5QoauIvAQBoPYxqaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9oZWxwZXJzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5oZWxwZXJzLkdlb1BvaW50Ll9fZXFfX5RqDY8AAHSUjC5nb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnMuR2VvUG9pbnQuX19uZV9flChq4i8BAGg9jGpodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2hlbHBlcnMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnMuR2VvUG9pbnQuX19uZV9flGoNjwAAdJSMM2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuaGVscGVycy5HZW9Qb2ludC50b19wcm90b2J1ZpQoauIvAQBoPYxvaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9oZWxwZXJzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5oZWxwZXJzLkdlb1BvaW50LnRvX3Byb3RvYnVmlGoNjwAAdJSMJWdvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS5fX2VxX1+UKGriLwEAaD2MXmh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3Qva2V5cy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS5fX2VxX1+Uag2PAAB0lIwnZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5Ll9faGFzaF9flChq4i8BAGg9jGBodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2tleXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXkuX19oYXNoX1+Uag2PAAB0lIwlZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5Ll9fbmVfX5QoauIvAQBoPYxeaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5Ll9fbmVfX5RqDY8AAHSUjCxnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXkuY29tcGxldGVkX2tleZQoauIvAQBoPYxlaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LmNvbXBsZXRlZF9rZXmUag2PAAB0lIwoZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LmZsYXRfcGF0aJQoauIvAQBoPYxhaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LmZsYXRfcGF0aJRqDY8AAHSUjDJnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXkuZnJvbV9sZWdhY3lfdXJsc2FmZZQoauIvAQBoPYxraHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LmZyb21fbGVnYWN5X3VybHNhZmWUag2PAAB0lIwhZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LmlklChq4i8BAGg9jFpodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2tleXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXkuaWSUag2PAAB0lIwpZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LmlkX29yX25hbWWUKGriLwEAaD2MYmh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3Qva2V5cy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS5pZF9vcl9uYW1llGoNjwAAdJSMKWdvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS5pc19wYXJ0aWFslChq4i8BAGg9jGJodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2tleXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXkuaXNfcGFydGlhbJRqDY8AAHSUjCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXkua2luZJQoauIvAQBoPYxcaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LmtpbmSUag2PAAB0lIwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5Lm5hbWWUKGriLwEAaD2MXGh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3Qva2V5cy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS5uYW1llGoNjwAAdJSMKGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS5uYW1lc3BhY2WUKGriLwEAaD2MYWh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3Qva2V5cy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS5uYW1lc3BhY2WUag2PAAB0lIwlZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LnBhcmVudJQoauIvAQBoPYxeaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LnBhcmVudJRqDY8AAHSUjCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXkucGF0aJQoauIvAQBoPYxcaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LnBhdGiUag2PAAB0lIwmZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LnByb2plY3SUKGriLwEAaD2MX2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3Qva2V5cy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS5wcm9qZWN0lGoNjwAAdJSMMGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS50b19sZWdhY3lfdXJsc2FmZZQoauIvAQBoPYxpaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LnRvX2xlZ2FjeV91cmxzYWZllGoNjwAAdJSMKmdvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleS50b19wcm90b2J1ZpQoauIvAQBoPYxjaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9rZXlzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5LnRvX3Byb3RvYnVmlGoNjwAAdJSMLWdvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkuYWRkX2ZpbHRlcpQoauIvAQBoPYxpaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9xdWVyaWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeS5hZGRfZmlsdGVylGoNjwAAdJSMK2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkuYW5jZXN0b3KUKGriLwEAaD2MZ2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvcXVlcmllcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkuYW5jZXN0b3KUag2PAAB0lIwuZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeS5kaXN0aW5jdF9vbpQoauIvAQBoPYxqaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9xdWVyaWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeS5kaXN0aW5jdF9vbpRqDY8AAHSUjChnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5LmZldGNolChq4i8BAGg9jGRodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3F1ZXJpZXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5LmZldGNolGoNjwAAdJSMKmdvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkuZmlsdGVyc5QoauIvAQBoPYxmaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9xdWVyaWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeS5maWx0ZXJzlGoNjwAAdJSMLWdvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkua2V5X2ZpbHRlcpQoauIvAQBoPYxpaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9xdWVyaWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeS5rZXlfZmlsdGVylGoNjwAAdJSMLGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkua2V5c19vbmx5lChq4i8BAGg9jGhodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3F1ZXJpZXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5LmtleXNfb25seZRqDY8AAHSUjCdnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5LmtpbmSUKGriLwEAaD2MY2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvcXVlcmllcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkua2luZJRqDY8AAHSUjCxnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5Lm5hbWVzcGFjZZQoauIvAQBoPYxoaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9xdWVyaWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeS5uYW1lc3BhY2WUag2PAAB0lIwoZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeS5vcmRlcpQoauIvAQBoPYxkaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9xdWVyaWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeS5vcmRlcpRqDY8AAHSUjCpnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5LnByb2plY3SUKGriLwEAaD2MZmh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvcXVlcmllcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkucHJvamVjdJRqDY8AAHSUjC1nb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5LnByb2plY3Rpb26UKGriLwEAaD2MaWh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvcXVlcmllcy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkucHJvamVjdGlvbpRqDY8AAHSUjDRnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uLmJlZ2lulChq4i8BAGg9jHVodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3RyYW5zYWN0aW9ucy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb24uYmVnaW6Uag2PAAB0lIw1Z29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbi5jb21taXSUKGriLwEAaD2Mdmh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvdHJhbnNhY3Rpb25zLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbi5jb21taXSUag2PAAB0lIw2Z29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbi5jdXJyZW50lChq4i8BAGg9jHdodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3RyYW5zYWN0aW9ucy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb24uY3VycmVudJRqDY8AAHSUjDVnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uLmRlbGV0ZZQoauIvAQBoPYx2aHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC90cmFuc2FjdGlvbnMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uLmRlbGV0ZZRqDY8AAHSUjDFnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uLmlklChq4i8BAGg9jHJodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3RyYW5zYWN0aW9ucy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb24uaWSUag2PAAB0lIw4Z29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbi5tdXRhdGlvbnOUKGriLwEAaD2MeWh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvdHJhbnNhY3Rpb25zLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbi5tdXRhdGlvbnOUag2PAAB0lIw4Z29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbi5uYW1lc3BhY2WUKGriLwEAaD2MeWh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvdHJhbnNhY3Rpb25zLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbi5uYW1lc3BhY2WUag2PAAB0lIw2Z29vZ2xlLmNsb3VkLmRhdGFzdG9yZS50cmFuc2FjdGlvbi5UcmFuc2FjdGlvbi5wcm9qZWN0lChq4i8BAGg9jHdodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3RyYW5zYWN0aW9ucy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb24ucHJvamVjdJRqDY8AAHSUjDJnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uLnB1dJQoauIvAQBoPYxzaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC90cmFuc2FjdGlvbnMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uLnB1dJRqDY8AAHSUjDdnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnRyYW5zYWN0aW9uLlRyYW5zYWN0aW9uLnJvbGxiYWNrlChq4i8BAGg9jHhodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3RyYW5zYWN0aW9ucy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUudHJhbnNhY3Rpb24uVHJhbnNhY3Rpb24ucm9sbGJhY2uUag2PAAB0lHWMDHB5OmF0dHJpYnV0ZZR9lCiMKmdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudC5TQ09QRZQoauIvAQBoPYxlaHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9jbGllbnQuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmNsaWVudC5DbGllbnQuU0NPUEWUlQAAAQAAAAAAag2PAAB0lIw5Z29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5lbnRpdHkuRW50aXR5LmV4Y2x1ZGVfZnJvbV9pbmRleGVzlChq4i8BAGg9jHZodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2VudGl0aWVzLmh0bWwjZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5lbnRpdHkuRW50aXR5LmV4Y2x1ZGVfZnJvbV9pbmRleGVzlGoNjwAAdJSMLGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUucXVlcnkuUXVlcnkuT1BFUkFUT1JTlChq4i8BAGg9jGhodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3F1ZXJpZXMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLnF1ZXJ5LlF1ZXJ5Lk9QRVJBVE9SU5RqDY8AAHSUdYwLcHk6ZnVuY3Rpb26UfZQojDNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnMuZW50aXR5X2Zyb21fcHJvdG9idWaUKGriLwEAaD2Mb2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvaGVscGVycy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuaGVscGVycy5lbnRpdHlfZnJvbV9wcm90b2J1ZpRqDY8AAHSUjDFnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnMuZW50aXR5X3RvX3Byb3RvYnVmlChq4i8BAGg9jG1odHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2hlbHBlcnMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnMuZW50aXR5X3RvX3Byb3RvYnVmlGoNjwAAdJSML2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuaGVscGVycy5nZXRfcmVhZF9vcHRpb25zlChq4i8BAGg9jGtodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2hlbHBlcnMuaHRtbCNnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnMuZ2V0X3JlYWRfb3B0aW9uc5RqDY8AAHSUjDBnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmhlbHBlcnMua2V5X2Zyb21fcHJvdG9idWaUKGriLwEAaD2MbGh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvaGVscGVycy5odG1sI2dvb2dsZS5jbG91ZC5kYXRhc3RvcmUuaGVscGVycy5rZXlfZnJvbV9wcm90b2J1ZpRqDY8AAHSUdYwHc3RkOmRvY5R9lCiMBlJFQURNRZQoauIvAQBoPYw6aHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9SRUFETUUuaHRtbJSMKFB5dGhvbiBDbGllbnQgZm9yIEdvb2dsZSBDbG91ZCBEYXRhc3RvcmWUdJSMB2JhdGNoZXOUKGriLwEAaD2MO2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvYmF0Y2hlcy5odG1slIwHQmF0Y2hlc5R0lIwJY2hhbmdlbG9nlChq4i8BAGg9jD1odHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L2NoYW5nZWxvZy5odG1slIwJQ2hhbmdlbG9nlHSUjAZjbGllbnSUKGriLwEAaD2MOmh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvY2xpZW50Lmh0bWyUjBBEYXRhc3RvcmUgQ2xpZW50lHSUjAhlbnRpdGllc5QoauIvAQBoPYw8aHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9lbnRpdGllcy5odG1slIwIRW50aXRpZXOUdJSMB2hlbHBlcnOUKGriLwEAaD2MO2h0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvaGVscGVycy5odG1slIwHSGVscGVyc5R0lIwFaW5kZXiUKGriLwEAaD2MOWh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvaW5kZXguaHRtbJSMKFB5dGhvbiBDbGllbnQgZm9yIEdvb2dsZSBDbG91ZCBEYXRhc3RvcmWUdJSMBGtleXOUKGriLwEAaD2MOGh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3Qva2V5cy5odG1slIwES2V5c5R0lIwHcXVlcmllc5QoauIvAQBoPYw7aHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9xdWVyaWVzLmh0bWyUjAdRdWVyaWVzlHSUjAx0cmFuc2FjdGlvbnOUKGriLwEAaD2MQGh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL2RhdGFzdG9yZS9sYXRlc3QvdHJhbnNhY3Rpb25zLmh0bWyUjAxUcmFuc2FjdGlvbnOUdJR1jAlzdGQ6bGFiZWyUfZQojAhnZW5pbmRleJQoauIvAQBoPYw8aHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9nZW5pbmRleC5odG1slIwFSW5kZXiUdJSMCG1vZGluZGV4lChq4i8BAGg9jD9odHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9kYXRhc3RvcmUvbGF0ZXN0L3B5LW1vZGluZGV4Lmh0bWyUjAxNb2R1bGUgSW5kZXiUdJSMBnNlYXJjaJQoauIvAQBoPYw6aHR0cHM6Ly9nb29nbGVhcGlzLmRldi9weXRob24vZGF0YXN0b3JlL2xhdGVzdC9zZWFyY2guaHRtbJSMC1NlYXJjaCBQYWdllHSUdXWHlHWMFWludGVyc3BoaW54X2ludmVudG9yeZR9lChq3y8BAH2UKGrhLwEAauQvAQBq5S8BAGrnLwEAaugvAQBq6i8BAGrrLwEAau0vAQBq7i8BAGrwLwEAavEvAQBq8y8BAGr0LwEAavYvAQBqKy0BAGovLQEAajAtAQBqMi0BAGozLQEAajUtAQBqNi0BAGo4LQEAajktAQBqOy0BAGo8LQEAaj4tAQBqPy0BAGpBLQEAakItAQBqRC0BAGpFLQEAakctAQBqSC0BAGpKLQEAakstAQBqTS0BAGpOLQEAalAtAQBqUS0BAGpTLQEAalQtAQBqVi0BAGpXLQEAalktAQBqWi0BAGpcLQEAal0tAQBqXy0BAGpgLQEAamItAQBqYy0BAGplLQEAamYtAQBqaC0BAGppLQEAamstAQBqbC0BAGpuLQEAam8tAQBqcS0BAGpyLQEAanQtAQBqdS0BAGp3LQEAangtAQBqei0BAGp7LQEAan0tAQBqfi0BAGqALQEAaoEtAQBqgy0BAGqELQEAaoYtAQBqhy0BAGqJLQEAaootAQBqjC0BAGqNLQEAao8tAQBqkC0BAGqSLQEAapMtAQBqlS0BAGqWLQEAapgtAQBqmS0BAGqbLQEAapwtAQBqni0BAGqfLQEAaqEtAQBqoi0BAGqkLQEAaqUtAQBqpy0BAGqoLQEAaqotAQBqqy0BAGqtLQEAaq4tAQBqsC0BAGp83wAAan7fAABqf98AAGqB3wAAaoLfAABqhN8AAGqF3wAAaoffAABqiN8AAGqK3wAAaovfAABqjd8AAGqO3wAAapDfAABqkd8AAGqT3wAAapTfAABqlt8AAGqX3wAAapnfAABqmt8AAGqc3wAAap3fAABqn98AAGqg3wAAaqLfAABqo98AAGql3wAAaqbfAABqqN8AAGqp3wAAaqvfAABqrN8AAGqu3wAAaq/fAABqsd8AAGqy3wAAarTfAABqtd8AAGq33wAAarjfAABqut8AAGq73wAAar3fAABqvt8AAGrA3wAAasHfAABqw98AAGrE3wAAasbfAABqx98AAGrJ3wAAasrfAABqzN8AAGrN3wAAas/fAABq0N8AAGrS3wAAatPfAABq1d8AAGrW3wAAatjfAABq2d8AAGrb3wAAatzfAABq3t8AAGrf3wAAauHfAABq4t8AAGrk3wAAauXfAABq598AAGro3wAAaurfAABq698AAGrt3wAAau7fAABq8N8AAGrx3wAAavPfAABq9N8AAGr23wAAavffAABq+d8AAGr63wAAavzfAABq/d8AAGr/3wAAagDgAABqAuAAAGoD4AAAagXgAABqBuAAAGoI4AAAagngAABqC+AAAGoM4AAAag7gAABqD+AAAGoR4AAAahLgAABqFOAAAGoV4AAAahfgAABqGOAAAGoa4AAAahvgAABqHeAAAGoe4AAAaiDgAABqIeAAAGoj4AAAaiTgAABqJuAAAGon4AAAaingAABqKuAAAGos4AAAai3gAABqL+AAAGow4AAAajLgAABqM+AAAGo14AAAajbgAABqOOAAAGo54AAAajvgAABqPOAAAGo+4AAAaj/gAABqQeAAAGpC4AAAakTgAABqReAAAGpH4AAAakjgAABqSuAAAGpL4AAAak3gAABqTuAAAGpQ4AAAalHgAABqU+AAAGpU4AAAalbgAABqV+AAAGpZ4AAAalrgAABqXOAAAGpd4AAAal/gAABqYOAAAGpi4AAAamPgAABqZeAAAGpm4AAAamjgAABqaeAAAGpr4AAAamzgAABqbuAAAGpv4AAAanHgAABqcuAAAGp04AAAanXgAABqd+AAAGp44AAAanrgAABqe+AAAGp94AAAan7gAABqgOAAAGqB4AAAaoPgAABqhOAAAGqG4AAAaofgAABqieAAAGqK4AAAaozgAABqjeAAAGqP4AAAapDgAABqkuAAAGqT4AAAapXgAABqluAAAGqY4AAAapngAABqm+AAAGqc4AAAap7gAABqn+AAAGqh4AAAaqLgAABqpOAAAGql4AAAaqfgAABqqOAAAGqq4AAAaqvgAABqreAAAGqu4AAAarDgAABqseAAAGqz4AAAarTgAABqtuAAAGq34AAAarngAABquuAAAGq84AAAar3gAABqv+AAAGrA4AAAasLgAABqw+AAAGrF4AAAasbgAABqyOAAAGrJ4AAAasvgAABqzOAAAGrO4AAAas/gAABq0eAAAGrS4AAAatTgAABq1eAAAGrX4AAAatjgAABq2uAAAGrb4AAAat3gAABq3uAAAGrg4AAAauHgAABq4+AAAGrk4AAAaubgAABq5+AAAGrp4AAAaurgAABq7OAAAGrt4AAAau/gAABq8OAAAGry4AAAavPgAABq9eAAAGr24AAAavjgAABq+eAAAGr74AAAavzgAABq/uAAAGr/4AAAagHhAABqAuEAAGoE4QAAagXhAABqB+EAAGoI4QAAagrhAABqC+EAAGoN4QAAag7hAABqEOEAAGoR4QAAahPhAABqFOEAAGoW4QAAahfhAABqGeEAAGoa4QAAahzhAABqHeEAAGof4QAAaiDhAABqIuEAAGoj4QAAaiXhAABqJuEAAGoo4QAAainhAABqK+EAAGos4QAAai7hAABqL+EAAGox4QAAajLhAABqNOEAAGo14QAAajfhAABqOOEAAGo64QAAajvhAABqPeEAAGo+4QAAakDhAABqQeEAAGpD4QAAakThAABqRuEAAGpH4QAAaknhAABqSuEAAGpM4QAAak3hAABqT+EAAGpQ4QAAalLhAABqU+EAAGpV4QAAalbhAABqWOEAAGpZ4QAAalvhAABqXOEAAGpe4QAAal/hAABqYeEAAGpi4QAAamThAABqZeEAAGpn4QAAamjhAABqauEAAGpr4QAAam3hAABqbuEAAGpw4QAAanHhAABqc+EAAGp04QAAanbhAABqd+EAAGp54QAAanrhAABqfOEAAGp94QAAan/hAABqgOEAAGqC4QAAaoPhAABqheEAAGqG4QAAaojhAABqieEAAGqL4QAAaozhAABqjuEAAGqP4QAAapHhAABqkuEAAGqU4QAAapXhAABql+EAAGqY4QAAaprhAABqm+EAAGqd4QAAap7hAABqoOEAAGqh4QAAaqPhAABqpOEAAGqm4QAAaqfhAABqqeEAAGqq4QAAaqzhAABqreEAAGqv4QAAarDhAABqsuEAAGqz4QAAarXhAABqtuEAAGq44QAAarnhAABqu+EAAGq84QAAar7hAABqv+EAAGrB4QAAasLhAABqxOEAAGrF4QAAasfhAABqyOEAAGrK4QAAasvhAABqzeEAAGrO4QAAatDhAABq0eEAAGrT4QAAatThAABq1uEAAGrX4QAAatnhAABq2uEAAGrc4QAAat3hAABq3+EAAGrg4QAAauLhAABq4+EAAGrl4QAAaubhAABq6OEAAGrp4QAAauvhAABq7OEAAGru4QAAau/hAABq8eEAAGry4QAAavThAABq9eEAAGr34QAAavjhAABq+uEAAGr74QAAav3hAABq/uEAAGoA4gAAagHiAABqA+IAAGoE4gAAagbiAABqB+IAAGoJ4gAAagriAABqDOIAAGoN4gAAag/iAABqEOIAAGoS4gAAahPiAABqFeIAAGoW4gAAahjiAABqGeIAAGob4gAAahziAABqHuIAAGof4gAAaiHiAABqIuIAAGok4gAAaiXiAABqJ+IAAGoo4gAAairiAABqK+IAAGot4gAAai7iAABqMOIAAGox4gAAajPiAABqNOIAAGo24gAAajfiAABqOeIAAGo64gAAajziAABqPeIAAGo/4gAAakDiAABqQuIAAGpD4gAAakXiAABqRuIAAGpI4gAAakniAABqS+IAAGpM4gAAak7iAABqT+IAAGpR4gAAalLiAABqVOIAAGpV4gAAalfiAABqWOIAAGpa4gAAalviAABqXeIAAGpe4gAAamDiAABqYeIAAGpj4gAAamTiAABqZuIAAGpn4gAAamniAABqauIAAGps4gAAam3iAABqb+IAAGpw4gAAanLiAABqc+IAAGp14gAAanbiAABqeOIAAGp54gAAanviAABqfOIAAGp+4gAAan/iAABqgeIAAGqC4gAAaoTiAABqheIAAGqH4gAAaojiAABqiuIAAGqL4gAAao3iAABqjuIAAGqQ4gAAapHiAABqk+IAAGqU4gAAapbiAABql+IAAGqZ4gAAapriAABqnOIAAGqd4gAAap/iAABqoOIAAGqi4gAAaqPiAABqpeIAAGqm4gAAaqjiAABqqeIAAGqr4gAAaqziAABqruIAAGqv4gAAarHiAABqsuIAAGq04gAAarXiAABqt+IAAGq44gAAarriAABqu+IAAGq94gAAar7iAABqwOIAAGrB4gAAasPiAABqxOIAAGrG4gAAasfiAABqyeIAAGrK4gAAasziAABqzeIAAGrP4gAAatDiAABq0uIAAGrT4gAAatXiAABq1uIAAGrY4gAAatniAABq2+IAAGrc4gAAat7iAABq3+IAAGrh4gAAauLiAABq5OIAAGrl4gAAaufiAABq6OIAAGrq4gAAauviAABq7eIAAGru4gAAavDiAABq8eIAAGrz4gAAavTiAABq9uIAAGr34gAAavniAABq+uIAAGr84gAAav3iAABq/+IAAGoA4wAAagLjAABqA+MAAGoF4wAAagbjAABqCOMAAGoJ4wAAagvjAABqDOMAAGoO4wAAag/jAABqEeMAAGoS4wAAahTjAABqFeMAAGoX4wAAahjjAABqGuMAAGob4wAAah3jAABqHuMAAGog4wAAaiHjAABqI+MAAGok4wAAaibjAABqJ+MAAGop4wAAairjAABqLOMAAGot4wAAai/jAABqMOMAAGoy4wAAajPjAABqNeMAAGo24wAAajjjAABqOeMAAGo74wAAajzjAABqPuMAAGo/4wAAakHjAABqQuMAAGpE4wAAakXjAABqR+MAAGpI4wAAakrjAAB1avcvAQB9lChq+S8BAGr7LwEAavwvAQBq/i8BAGr/LwEAagEwAQBqAjABAGoEMAEAagUwAQBqBzABAGoIMAEAagowAQBqCzABAGoNMAEAag4wAQBqEDABAGpCLgEAakQuAQBqRS4BAGpHLgEAakguAQBqSi4BAGpLLgEAak0uAQBqTi4BAGpQLgEAalEuAQBqUy4BAGpULgEAalYuAQBqVy4BAGpZLgEAalouAQBqXC4BAGpdLgEAal8uAQBqYC4BAGpiLgEAamMuAQBqZS4BAGpmLgEAamguAQBqaS4BAGprLgEAamwuAQBqbi4BAGpvLgEAanEuAQBqci4BAGp0LgEAanUuAQBqdy4BAGp4LgEAanouAQBqey4BAGp9LgEAan4uAQBqgC4BAGqBLgEAaoMuAQBqhC4BAGqGLgEAaocuAQBqiS4BAGqKLgEAaowuAQBqjS4BAGqPLgEAapAuAQBqki4BAGqTLgEAapUuAQBqli4BAGqYLgEAapkuAQBqmy4BAGqcLgEAap4uAQBqny4BAGqhLgEAaqIuAQBqpC4BAGqlLgEAaqcuAQBqqC4BAGqqLgEAaqsuAQBqrS4BAGquLgEAarAuAQBqsS4BAGqzLgEAarQuAQBqti4BAGq3LgEAarkuAQBqui4BAGq8LgEAapz8AABqnvwAAGqf/AAAaqH8AABqovwAAGqk/AAAaqX8AABqp/wAAGqo/AAAaqr8AABqq/wAAGqt/AAAaq78AABqsPwAAGqx/AAAarP8AABqtPwAAGq2/AAAarf8AABqufwAAGq6/AAAarz8AABqvfwAAGq//AAAasD8AABqwvwAAGrD/AAAasX8AABqxvwAAGrI/AAAasn8AABqy/wAAGrM/AAAas78AABqz/wAAGrR/AAAatL8AABq1PwAAGrV/AAAatf8AABq2PwAAGra/AAAatv8AABq3fwAAGre/AAAauD8AABq4fwAAGrj/AAAauT8AABq5vwAAGrn/AAAaun8AABq6vwAAGrs/AAAau38AABq7/wAAGrw/AAAavL8AABq8/wAAGr1/AAAavb8AABq+PwAAGr5/AAAavv8AABq/PwAAGr+/AAAav/8AABqAf0AAGoC/QAAagT9AABqBf0AAGoH/QAAagj9AABqCv0AAGoL/QAAag39AABqDv0AAGoQ/QAAahH9AABqE/0AAGoU/QAAahb9AABqF/0AAGoZ/QAAahr9AABqHP0AAGod/QAAah/9AABqIP0AAGoi/QAAaiP9AABqJf0AAGom/QAAaij9AABqKf0AAGor/QAAaiz9AABqLv0AAGov/QAAajH9AABqMv0AAGo0/QAAajX9AABqN/0AAGo4/QAAajr9AABqO/0AAGo9/QAAaj79AABqQP0AAGpB/QAAakP9AABqRP0AAGpG/QAAakf9AABqSf0AAGpK/QAAakz9AABqTf0AAGpP/QAAalD9AABqUv0AAGpT/QAAalX9AABqVv0AAGpY/QAAaln9AABqW/0AAGpc/QAAal79AABqX/0AAGph/QAAamL9AABqZP0AAGpl/QAAamf9AABqaP0AAGpq/QAAamv9AABqbf0AAGpu/QAAanD9AABqcf0AAGpz/QAAanT9AABqdv0AAGp3/QAAann9AABqev0AAGp8/QAAan39AABqf/0AAGqA/QAAaoL9AABqg/0AAGqF/QAAaob9AABqiP0AAGqJ/QAAaov9AABqjP0AAGqO/QAAao/9AABqkf0AAGqS/QAAapT9AABqlf0AAGqX/QAAapj9AABqmv0AAGqb/QAAap39AABqnv0AAGqg/QAAaqH9AABqo/0AAGqk/QAAaqb9AABqp/0AAGqp/QAAaqr9AABqrP0AAGqt/QAAaq/9AABqsP0AAGqy/QAAarP9AABqtf0AAGq2/QAAarj9AABquf0AAGq7/QAAarz9AABqvv0AAGq//QAAasH9AABqwv0AAGrE/QAAasX9AABqx/0AAGrI/QAAasr9AABqy/0AAGrN/QAAas79AABq0P0AAGrR/QAAatP9AABq1P0AAGrW/QAAatf9AABq2f0AAGra/QAAatz9AABq3f0AAGrf/QAAauD9AABq4v0AAGrj/QAAauX9AABq5v0AAGro/QAAaun9AABq6/0AAGrs/QAAau79AABq7/0AAGrx/QAAavL9AABq9P0AAGr1/QAAavf9AABq+P0AAGr6/QAAavv9AABq/f0AAGr+/QAAagD+AABqAf4AAGoD/gAAagT+AABqBv4AAGoH/gAAagn+AABqCv4AAGoM/gAAag3+AABqD/4AAGoQ/gAAahL+AABqE/4AAGoV/gAAahb+AABqGP4AAGoZ/gAAahv+AABqHP4AAGoe/gAAah/+AABqIf4AAGoi/gAAaiT+AABqJf4AAGon/gAAaij+AABqKv4AAGor/gAAai3+AABqLv4AAGow/gAAajH+AABqM/4AAGo0/gAAajb+AABqN/4AAGo5/gAAajr+AABqPP4AAGo9/gAAaj/+AABqQP4AAGpC/gAAakP+AABqRf4AAGpG/gAAakj+AABqSf4AAGpL/gAAakz+AABqTv4AAGpP/gAAalH+AABqUv4AAGpU/gAAalX+AABqV/4AAGpY/gAAalr+AABqW/4AAGpd/gAAal7+AABqYP4AAGph/gAAamP+AABqZP4AAGpm/gAAamf+AABqaf4AAGpq/gAAamz+AABqbf4AAGpv/gAAanD+AABqcv4AAGpz/gAAanX+AABqdv4AAGp4/gAAann+AABqe/4AAGp8/gAAan7+AABqf/4AAGqB/gAAaoL+AABqhP4AAGqF/gAAaof+AABqiP4AAGqK/gAAaov+AABqjf4AAGqO/gAAapD+AABqkf4AAGqT/gAAapT+AABqlv4AAGqX/gAAapn+AABqmv4AAGqc/gAAap3+AABqn/4AAGqg/gAAaqL+AABqo/4AAGql/gAAaqb+AABqqP4AAGqp/gAAaqv+AABqrP4AAGqu/gAAaq/+AABqsf4AAGqy/gAAarT+AABqtf4AAGq3/gAAarj+AABquv4AAGq7/gAAar3+AABqvv4AAGrA/gAAasH+AABqw/4AAGrE/gAAasb+AABqx/4AAGrJ/gAAasr+AABqzP4AAGrN/gAAas/+AABq0P4AAGrS/gAAatP+AABq1f4AAGrW/gAAatj+AABq2f4AAGrb/gAAatz+AABq3v4AAGrf/gAAauH+AABq4v4AAGrk/gAAauX+AABq5/4AAGro/gAAaur+AABq6/4AAGrt/gAAau7+AABq8P4AAGrx/gAAavP+AABq9P4AAGr2/gAAavf+AABq+f4AAGr6/gAAavz+AABq/f4AAGr//gAAagD/AABqAv8AAGoD/wAAagX/AABqBv8AAGoI/wAAagn/AABqC/8AAGoM/wAAag7/AABqD/8AAGoR/wAAahL/AABqFP8AAGoV/wAAahf/AABqGP8AAGoa/wAAahv/AABqHf8AAGoe/wAAaiD/AABqIf8AAGoj/wAAaiT/AABqJv8AAGon/wAAain/AABqKv8AAGos/wAAai3/AABqL/8AAGow/wAAajL/AABqM/8AAGo1/wAAajb/AABqOP8AAGo5/wAAajv/AABqPP8AAGo+/wAAaj//AABqQf8AAGpC/wAAakT/AABqRf8AAGpH/wAAakj/AABqSv8AAGpL/wAAak3/AABqTv8AAGpQ/wAAalH/AABqU/8AAGpU/wAAalb/AABqV/8AAGpZ/wAAalr/AABqXP8AAGpd/wAAal//AABqYP8AAGpi/wAAamP/AABqZf8AAGpm/wAAamj/AABqaf8AAGpr/wAAamz/AABqbv8AAGpv/wAAanH/AABqcv8AAGp0/wAAanX/AABqd/8AAGp4/wAAanr/AABqe/8AAGp9/wAAan7/AABqgP8AAGqB/wAAaoP/AABqhP8AAGqG/wAAaof/AABqif8AAGqK/wAAaoz/AABqjf8AAGqP/wAAapD/AABqkv8AAGqT/wAAapX/AABqlv8AAGqY/wAAapn/AABqm/8AAGqc/wAAap7/AABqn/8AAGqh/wAAaqL/AABqpP8AAGql/wAAaqf/AABqqP8AAGqq/wAAaqv/AABqrf8AAGqu/wAAarD/AABqsf8AAGqz/wAAarT/AABqtv8AAGq3/wAAarn/AABquv8AAGq8/wAAar3/AABqv/8AAGrA/wAAasL/AABqw/8AAGrF/wAAasb/AABqyP8AAGrJ/wAAasv/AABqzP8AAGrO/wAAas//AABq0f8AAGrS/wAAatT/AABq1f8AAGrX/wAAatj/AABq2v8AAGrb/wAAat3/AABq3v8AAGrg/wAAauH/AABq4/8AAGrk/wAAaub/AABq5/8AAGrp/wAAaur/AABq7P8AAGrt/wAAau//AABq8P8AAGry/wAAavP/AABq9f8AAGr2/wAAavj/AABq+f8AAGr7/wAAavz/AABq/v8AAGr//wAAagEAAQBqAgABAGoEAAEAagUAAQBqBwABAGoIAAEAagoAAQBqCwABAGoNAAEAag4AAQBqEAABAGoRAAEAahMAAQBqFAABAGoWAAEAahcAAQBqGQABAGoaAAEAahwAAQBqHQABAGofAAEAaiAAAQBqIgABAGojAAEAaiUAAQBqJgABAGooAAEAaikAAQBqKwABAGosAAEAai4AAQBqLwABAGoxAAEAajIAAQBqNAABAGo1AAEAajcAAQBqOAABAGo6AAEAajsAAQBqPQABAGo+AAEAakAAAQBqQQABAGpDAAEAakQAAQBqRgABAGpHAAEAakkAAQBqSgABAGpMAAEAak0AAQBqTwABAGpQAAEAalIAAQBqUwABAGpVAAEAalYAAQBqWAABAGpZAAEAalsAAQBqXAABAGpeAAEAal8AAQBqYQABAGpiAAEAamQAAQBqZQABAGpnAAEAamgAAQBqagABAGprAAEAam0AAQBqbgABAGpwAAEAanEAAQBqcwABAGp0AAEAanYAAQBqdwABAGp5AAEAanoAAQBqfAABAGp9AAEAan8AAQBqgAABAGqCAAEAaoMAAQBqhQABAGqGAAEAaogAAQBqiQABAGqLAAEAaowAAQBqjgABAGqPAAEAapEAAQBqkgABAGqUAAEAapUAAQBqlwABAGqYAAEAapoAAQBqmwABAGqdAAEAap4AAQBqoAABAGqhAAEAaqMAAQBqpAABAGqmAAEAaqcAAQBqqQABAGqqAAEAaqwAAQBqrQABAGqvAAEAarAAAQBqsgABAGqzAAEAarUAAQBqtgABAGq4AAEAarkAAQBquwABAGq8AAEAar4AAQBqvwABAGrBAAEAasIAAQBqxAABAGrFAAEAascAAQBqyAABAGrKAAEAassAAQBqzQABAGrOAAEAatAAAQBq0QABAGrTAAEAatQAAQBq1gABAGrXAAEAatkAAQBq2gABAGrcAAEAat0AAQBq3wABAGrgAAEAauIAAQBq4wABAGrlAAEAauYAAQBq6AABAGrpAAEAausAAQBq7AABAGruAAEAau8AAQBq8QABAGryAAEAavQAAQBq9QABAGr3AAEAavgAAQBq+gABAGr7AAEAav0AAQBq/gABAGoAAQEAagEBAQBqAwEBAGoEAQEAagYBAQBqBwEBAGoJAQEAagoBAQBqDAEBAGoNAQEAag8BAQBqEAEBAGoSAQEAahMBAQBqFQEBAGoWAQEAahgBAQBqGQEBAGobAQEAahwBAQBqHgEBAGofAQEAaiEBAQBqIgEBAGokAQEAaiUBAQBqJwEBAGooAQEAaioBAQBqKwEBAGotAQEAai4BAQBqMAEBAGoxAQEAajMBAQBqNAEBAGo2AQEAajcBAQBqOQEBAGo6AQEAajwBAQBqPQEBAGo/AQEAakABAQBqQgEBAGpDAQEAakUBAQBqRgEBAGpIAQEAakkBAQBqSwEBAGpMAQEAak4BAQBqTwEBAGpRAQEAalIBAQBqVAEBAGpVAQEAalcBAQBqWAEBAGpaAQEAalsBAQBqXQEBAGpeAQEAamABAQBqYQEBAGpjAQEAamQBAQBqZgEBAGpnAQEAamkBAQBqagEBAGpsAQEAam0BAQBqbwEBAGpwAQEAanIBAQBqcwEBAGp1AQEAanYBAQBqeAEBAGp5AQEAansBAQBqfAEBAGp+AQEAan8BAQBqgQEBAGqCAQEAaoQBAQBqhQEBAGqHAQEAaogBAQBqigEBAGqLAQEAao0BAQBqjgEBAGqQAQEAapEBAQBqkwEBAGqUAQEAapYBAQBqlwEBAGqZAQEAapoBAQBqnAEBAGqdAQEAap8BAQBqoAEBAGqiAQEAaqMBAQBqpQEBAGqmAQEAaqgBAQBqqQEBAGqrAQEAaqwBAQBqrgEBAGqvAQEAarEBAQBqsgEBAGq0AQEAarUBAQBqtwEBAGq4AQEAaroBAQBquwEBAGq9AQEAar4BAQBqwAEBAGrBAQEAasMBAQBqxAEBAGrGAQEAascBAQBqyQEBAGrKAQEAaswBAQBqzQEBAGrPAQEAatABAQBq0gEBAGrTAQEAatUBAQBq1gEBAGrYAQEAatkBAQBq2wEBAGrcAQEAat4BAQBq3wEBAGrhAQEAauIBAQBq5AEBAGrlAQEAaucBAQBq6AEBAGrqAQEAausBAQBq7QEBAGruAQEAavABAQBq8QEBAGrzAQEAavQBAQBq9gEBAGr3AQEAavkBAQBq+gEBAGr8AQEAav0BAQBq/wEBAGoAAgEAagICAQBqAwIBAGoFAgEAagYCAQBqCAIBAGoJAgEAagsCAQBqDAIBAGoOAgEAag8CAQBqEQIBAGoSAgEAahQCAQBqFQIBAGoXAgEAahgCAQBqGgIBAGobAgEAah0CAQBqHgIBAGogAgEAaiECAQBqIwIBAGokAgEAaiYCAQBqJwIBAGopAgEAaioCAQBqLAIBAGotAgEAai8CAQBqMAIBAGoyAgEAajMCAQBqNQIBAGo2AgEAajgCAQBqOQIBAGo7AgEAajwCAQBqPgIBAGo/AgEAakECAQBqQgIBAGpEAgEAakUCAQBqRwIBAGpIAgEAakoCAQBqSwIBAGpNAgEAak4CAQBqUAIBAGpRAgEAalMCAQBqVAIBAGpWAgEAalcCAQBqWQIBAGpaAgEAalwCAQBqXQIBAGpfAgEAamACAQBqYgIBAGpjAgEAamUCAQBqZgIBAGpoAgEAamkCAQBqawIBAGpsAgEAam4CAQBqbwIBAGpxAgEAanICAQBqdAIBAGp1AgEAancCAQBqeAIBAGp6AgEAansCAQBqfQIBAGp+AgEAaoACAQBqgQIBAGqDAgEAaoQCAQBqhgIBAGqHAgEAaokCAQBqigIBAGqMAgEAao0CAQBqjwIBAGqQAgEAapICAQBqkwIBAGqVAgEAapYCAQBqmAIBAGqZAgEAapsCAQBqnAIBAGqeAgEAap8CAQBqoQIBAGqiAgEAaqQCAQBqpQIBAGqnAgEAaqgCAQBqqgIBAGqrAgEAaq0CAQBqrgIBAGqwAgEAarECAQBqswIBAGq0AgEAarYCAQBqtwIBAGq5AgEAaroCAQBqvAIBAGq9AgEAar8CAQBqwAIBAGrCAgEAasMCAQBqxQIBAGrGAgEAasgCAQBqyQIBAGrLAgEAaswCAQBqzgIBAGrPAgEAatECAQBq0gIBAGrUAgEAatUCAQBq1wIBAGrYAgEAatoCAQBq2wIBAGrdAgEAat4CAQBq4AIBAGrhAgEAauMCAQBq5AIBAGrmAgEAaucCAQBq6QIBAGrqAgEAauwCAQBq7QIBAGrvAgEAavACAQBq8gIBAGrzAgEAavUCAQBq9gIBAGr4AgEAavkCAQBq+wIBAGr8AgEAav4CAQBq/wIBAGoBAwEAagIDAQBqBAMBAGoFAwEAagcDAQBqCAMBAGoKAwEAagsDAQBqDQMBAGoOAwEAahADAQBqEQMBAGoTAwEAahQDAQBqFgMBAGoXAwEAahkDAQBqGgMBAGocAwEAah0DAQBqHwMBAGogAwEAaiIDAQBqIwMBAGolAwEAaiYDAQBqKAMBAGopAwEAaisDAQBqLAMBAGouAwEAai8DAQBqMQMBAGoyAwEAajQDAQBqNQMBAGo3AwEAajgDAQBqOgMBAGo7AwEAaj0DAQBqPgMBAGpAAwEAakEDAQBqQwMBAGpEAwEAakYDAQBqRwMBAGpJAwEAakoDAQBqTAMBAGpNAwEAak8DAQBqUAMBAGpSAwEAalMDAQBqVQMBAGpWAwEAalgDAQBqWQMBAGpbAwEAalwDAQBqXgMBAGpfAwEAamEDAQBqYgMBAGpkAwEAamUDAQBqZwMBAGpoAwEAamoDAQBqawMBAGptAwEAam4DAQBqcAMBAGpxAwEAanMDAQBqdAMBAGp2AwEAancDAQBqeQMBAGp6AwEAanwDAQBqfQMBAGp/AwEAaoADAQBqggMBAGqDAwEAaoUDAQBqhgMBAGqIAwEAaokDAQBqiwMBAGqMAwEAao4DAQBqjwMBAGqRAwEAapIDAQBqlAMBAGqVAwEAapcDAQBqmAMBAGqaAwEAapsDAQBqnQMBAGqeAwEAaqADAQBqoQMBAGqjAwEAaqQDAQBqpgMBAGqnAwEAaqkDAQBqqgMBAGqsAwEAaq0DAQBqrwMBAGqwAwEAarIDAQBqswMBAGq1AwEAarYDAQBquAMBAGq5AwEAarsDAQBqvAMBAGq+AwEAar8DAQBqwQMBAGrCAwEAasQDAQBqxQMBAGrHAwEAasgDAQBqygMBAGrLAwEAas0DAQBqzgMBAGrQAwEAatEDAQBq0wMBAGrUAwEAatYDAQBq1wMBAGrZAwEAatoDAQBq3AMBAGrdAwEAat8DAQBq4AMBAGriAwEAauMDAQBq5QMBAGrmAwEAaugDAQBq6QMBAGrrAwEAauwDAQBq7gMBAGrvAwEAavEDAQBq8gMBAGr0AwEAavUDAQBq9wMBAGr4AwEAavoDAQBq+wMBAGr9AwEAav4DAQBqAAQBAGoBBAEAagMEAQBqBAQBAGoGBAEAagcEAQBqCQQBAGoKBAEAagwEAQBqDQQBAGoPBAEAahAEAQBqEgQBAGoTBAEAahUEAQBqFgQBAGoYBAEAahkEAQBqGwQBAGocBAEAah4EAQBqHwQBAGohBAEAaiIEAQBqJAQBAGolBAEAaicEAQBqKAQBAGoqBAEAaisEAQBqLQQBAGouBAEAajAEAQBqMQQBAGozBAEAajQEAQBqNgQBAGo3BAEAajkEAQBqOgQBAGo8BAEAaj0EAQBqPwQBAGpABAEAakIEAQBqQwQBAGpFBAEAakYEAQBqSAQBAGpJBAEAaksEAQBqTAQBAGpOBAEAak8EAQBqUQQBAGpSBAEAalQEAQBqVQQBAGpXBAEAalgEAQBqWgQBAGpbBAEAal0EAQBqXgQBAGpgBAEAamEEAQBqYwQBAGpkBAEAamYEAQBqZwQBAGppBAEAamoEAQBqbAQBAGptBAEAam8EAQBqcAQBAGpyBAEAanMEAQBqdQQBAGp2BAEAangEAQBqeQQBAGp7BAEAanwEAQBqfgQBAGp/BAEAaoEEAQBqggQBAGqEBAEAaoUEAQBqhwQBAGqIBAEAaooEAQBqiwQBAGqNBAEAao4EAQBqkAQBAGqRBAEAapMEAQBqlAQBAGqWBAEAapcEAQBqmQQBAGqaBAEAapwEAQBqnQQBAGqfBAEAaqAEAQBqogQBAGqjBAEAaqUEAQBqpgQBAGqoBAEAaqkEAQBqqwQBAGqsBAEAaq4EAQBqrwQBAGqxBAEAarIEAQBqtAQBAGq1BAEAarcEAQBquAQBAGq6BAEAarsEAQBqvQQBAGq+BAEAasAEAQBqwQQBAGrDBAEAasQEAQBqxgQBAGrHBAEAaskEAQBqygQBAGrMBAEAas0EAQBqzwQBAGrQBAEAatIEAQBq0wQBAGrVBAEAatYEAQBq2AQBAGrZBAEAatsEAQBq3AQBAGreBAEAat8EAQBq4QQBAGriBAEAauQEAQBq5QQBAGrnBAEAaugEAQBq6gQBAGrrBAEAau0EAQBq7gQBAGrwBAEAavEEAQBq8wQBAGr0BAEAavYEAQBq9wQBAGr5BAEAavoEAQBq/AQBAGr9BAEAav8EAQBqAAUBAGoCBQEAagMFAQBqBQUBAGoGBQEAaggFAQBqCQUBAGoLBQEAagwFAQBqDgUBAGoPBQEAahEFAQBqEgUBAGoUBQEAahUFAQBqFwUBAGoYBQEAahoFAQBqGwUBAGodBQEAah4FAQBqIAUBAGohBQEAaiMFAQBqJAUBAGomBQEAaicFAQBqKQUBAGoqBQEAaiwFAQBqLQUBAGovBQEAajAFAQBqMgUBAGozBQEAajUFAQBqNgUBAGo4BQEAajkFAQBqOwUBAGo8BQEAaj4FAQBqPwUBAGpBBQEAakIFAQBqRAUBAGpFBQEAakcFAQBqSAUBAGpKBQEAaksFAQBqTQUBAGpOBQEAalAFAQBqUQUBAGpTBQEAalQFAQBqVgUBAGpXBQEAalkFAQBqWgUBAGpcBQEAal0FAQBqXwUBAGpgBQEAamIFAQBqYwUBAGplBQEAamYFAQBqaAUBAGppBQEAamsFAQBqbAUBAGpuBQEAam8FAQBqcQUBAGpyBQEAanQFAQBqdQUBAGp3BQEAangFAQBqegUBAGp7BQEAan0FAQBqfgUBAGqABQEAaoEFAQBqgwUBAGqEBQEAaoYFAQBqhwUBAGqJBQEAaooFAQBqjAUBAGqNBQEAao8FAQBqkAUBAGqSBQEAapMFAQBqlQUBAGqWBQEAapgFAQBqmQUBAGqbBQEAapwFAQBqngUBAGqfBQEAaqEFAQBqogUBAGqkBQEAaqUFAQBqpwUBAGqoBQEAaqoFAQBqqwUBAGqtBQEAaq4FAQBqsAUBAGqxBQEAarMFAQBqtAUBAGq2BQEAarcFAQBquQUBAGq6BQEAarwFAQBqvQUBAGq/BQEAasAFAQBqwgUBAGrDBQEAasUFAQBqxgUBAGrIBQEAaskFAQBqywUBAGrMBQEAas4FAQBqzwUBAGrRBQEAatIFAQBq1AUBAGrVBQEAatcFAQBq2AUBAGraBQEAatsFAQBq3QUBAGreBQEAauAFAQBq4QUBAGrjBQEAauQFAQBq5gUBAGrnBQEAaukFAQBq6gUBAGrsBQEAau0FAQBq7wUBAGrwBQEAavIFAQBq8wUBAGr1BQEAavYFAQBq+AUBAGr5BQEAavsFAQB1ahEwAQB9lChqEzABAGoVMAEAahYwAQBqGDABAGoZMAEAahswAQBqHDABAGoeMAEAah8wAQBqITABAGoiMAEAaiQwAQBqJTABAGonMAEAaigwAQBqKjABAGorMAEAai0wAQBqLjABAGowMAEAajEwAQBqMzABAGo0MAEAajYwAQBqNzABAGo5MAEAajowAQBqPDABAGo9MAEAaj8wAQBqQDABAGpCMAEAakMwAQBqRTABAGpGMAEAakgwAQBqSTABAGpLMAEAakwwAQBqTjABAGpPMAEAalEwAQBqUjABAGpUMAEAalUwAQBqVzABAGpYMAEAalowAQBqWzABAGpdMAEAal4wAQBqYDABAGphMAEAamMwAQBqZDABAGpmMAEAamcwAQBqaTABAGpqMAEAamwwAQBqbTABAGpvMAEAanAwAQBqcjABAGpzMAEAanUwAQBqdjABAGp4MAEAankwAQBqezABAGp8MAEAan4wAQBqfzABAGqBMAEAaoIwAQBqhDABAGqFMAEAaocwAQBqiDABAGqKMAEAaoswAQBqjTABAGqOMAEAapAwAQBqkTABAGqTMAEAapQwAQBqljABAGqXMAEAapkwAQBqmjABAGqcMAEAap0wAQBqnzABAGqgMAEAaqIwAQBqozABAGqlMAEAaqYwAQBqqDABAGqpMAEAaqswAQBqrDABAGquMAEAaq8wAQBqsTABAGqyMAEAarQwAQBqtTABAGq3MAEAargwAQBqujABAGq7MAEAar0wAQBqvjABAGrAMAEAasEwAQBqwzABAGrEMAEAasYwAQBqxzABAGrJMAEAasowAQBqzDABAGrNMAEAas8wAQBq0DABAGrSMAEAatMwAQBq1TABAGrWMAEAatgwAQBq2TABAGrbMAEAatwwAQBq3jABAGrfMAEAauEwAQBq4jABAGrkMAEAar8uAQBqwS4BAGrCLgEAasQuAQBqxS4BAGrHLgEAasguAQBqyi4BAGrLLgEAas0uAQBqzi4BAGrQLgEAatEuAQBq0y4BAGrULgEAatYuAQBq1y4BAGrZLgEAatouAQBq3C4BAGrdLgEAat8uAQBq4C4BAGriLgEAauMuAQBq5S4BAGrmLgEAauguAQBq6S4BAGrrLgEAauwuAQBq7i4BAGrvLgEAavEuAQBq8i4BAGr0LgEAavUuAQBq9y4BAGr4LgEAavouAQBq+y4BAGr9LgEAav4uAQBqAC8BAGoBLwEAagMvAQBqBC8BAGoGLwEAagcvAQBqCS8BAGoKLwEAagwvAQBqDS8BAGoPLwEAahAvAQBqEi8BAGoTLwEAahUvAQBqFi8BAGoYLwEAahkvAQBqGy8BAGocLwEAah4vAQBqHy8BAGohLwEAaiIvAQBqJC8BAGolLwEAaicvAQBqKC8BAGoqLwEAaisvAQBqLS8BAGouLwEAajAvAQBqMS8BAGozLwEAajQvAQBqNi8BAGo3LwEAajkvAQBqOi8BAGo8LwEAaj0vAQBqPy8BAGpALwEAakIvAQBqQy8BAGpFLwEAakYvAQBqSC8BAGpJLwEAaksvAQBqTC8BAGpOLwEAak8vAQBqUS8BAGpSLwEAalQvAQBqVS8BAGpXLwEAalgvAQBqWi8BAGpbLwEAal0vAQBqXi8BAGpgLwEAamEvAQBqYy8BAGpkLwEAamYvAQBqZy8BAGppLwEAamovAQBqbC8BAGptLwEAam8vAQBqcC8BAGpyLwEAanMvAQBqdS8BAGp2LwEAangvAQBqeS8BAGp7LwEAanwvAQBqfi8BAGp/LwEAaoEvAQBqgi8BAGqELwEAaoUvAQBqhy8BAGqILwEAaoovAQBqiy8BAGqNLwEAao4vAQBqkC8BAGp9rQAAan+tAABqgK0AAGqCrQAAaoOtAABqha0AAGqGrQAAaoitAABqia0AAGqLrQAAaoytAABqjq0AAGqPrQAAapGtAABqkq0AAGqUrQAAapWtAABql60AAGqYrQAAapqtAABqm60AAGqdrQAAap6tAABqoK0AAGqhrQAAaqOtAABqpK0AAGqmrQAAaqetAABqqa0AAGqqrQAAaqytAABqra0AAGqvrQAAarCtAABqsq0AAGqzrQAAarWtAABqtq0AAGq4rQAAarmtAABqu60AAGq8rQAAar6tAABqv60AAGrBrQAAasKtAABqxK0AAGrFrQAAasetAABqyK0AAGrKrQAAasutAABqza0AAGrOrQAAatCtAABq0a0AAGrTrQAAatStAABq1q0AAGrXrQAAatmtAABq2q0AAGrcrQAAat2tAABq360AAGrgrQAAauKtAABq460AAGrlrQAAauatAABq6K0AAGrprQAAauutAABq7K0AAGrurQAAau+tAABq8a0AAGryrQAAavStAABq9a0AAGr3rQAAavitAABq+q0AAGr7rQAAav2tAABq/q0AAGoArgAAagGuAABqA64AAGoErgAAagauAABqB64AAGoJrgAAagquAABqDK4AAGoNrgAAag+uAABqEK4AAGoSrgAAahOuAABqFa4AAGoWrgAAahiuAABqGa4AAGobrgAAahyuAABqHq4AAGofrgAAaiGuAABqIq4AAGokrgAAaiWuAABqJ64AAGoorgAAaiquAABqK64AAGotrgAAai6uAABqMK4AAGoxrgAAajOuAABqNK4AAGo2rgAAajeuAABqOa4AAGo6rgAAajyuAABqPa4AAGo/rgAAakCuAABqQq4AAGpDrgAAakWuAABqRq4AAGpIrgAAakmuAABqS64AAGpMrgAAak6uAABqT64AAGpRrgAAalKuAABqVK4AAGpVrgAAaleuAABqWK4AAGpargAAaluuAABqXa4AAGpergAAamCuAABqYa4AAGpjrgAAamSuAABqZq4AAGpnrgAAammuAABqaq4AAGpsrgAAam2uAABqb64AAGpwrgAAanKuAABqc64AAGp1rgAAanauAABqeK4AAGp5rgAAanuuAABqfK4AAGp+rgAAan+uAABqga4AAGqCrgAAaoSuAABqha4AAGqHrgAAaoiuAABqiq4AAGqLrgAAao2uAABqjq4AAGqQrgAAapGuAABqk64AAGqUrgAAapauAABql64AAGqZrgAAapquAABqnK4AAGqdrgAAap+uAABqoK4AAGqirgAAaqOuAABqpa4AAGqmrgAAaqiuAABqqa4AAGqrrgAAaqyuAABqrq4AAGqvrgAAarGuAABqsq4AAGq0rgAAarWuAABqt64AAGq4rgAAarquAABqu64AAGq9rgAAar6uAABqwK4AAGrBrgAAasOuAABqxK4AAGrGrgAAaseuAABqya4AAGrKrgAAasyuAABqza4AAGrPrgAAatCuAABq0q4AAGrTrgAAatWuAABq1q4AAGrYrgAAatmuAABq264AAGrcrgAAat6uAABq364AAGrhrgAAauKuAABq5K4AAGrlrgAAaueuAABq6K4AAGrqrgAAauuuAABq7a4AAGrurgAAavCuAABq8a4AAGrzrgAAavSuAABq9q4AAGr3rgAAavmuAABq+q4AAGr8rgAAav2uAABq/64AAGoArwAAagKvAABqA68AAGoFrwAAagavAABqCK8AAGoJrwAAaguvAABqDK8AAGoOrwAAag+vAABqEa8AAGoSrwAAahSvAABqFa8AAGoXrwAAahivAABqGq8AAGobrwAAah2vAABqHq8AAGogrwAAaiGvAABqI68AAGokrwAAaiavAABqJ68AAGoprwAAaiqvAABqLK8AAGotrwAAai+vAABqMK8AAGoyrwAAajOvAABqNa8AAGo2rwAAajivAABqOa8AAGo7rwAAajyvAABqPq8AAGo/rwAAakGvAABqQq8AAGpErwAAakWvAABqR68AAGpIrwAAakqvAABqS68AAGpNrwAAak6vAABqUK8AAGpRrwAAalOvAABqVK8AAGpWrwAAalevAABqWa8AAGparwAAalyvAABqXa8AAGpfrwAAamCvAABqYq8AAGpjrwAAamWvAABqZq8AAGporwAAammvAABqa68AAGpsrwAAam6vAABqb68AAGpxrwAAanKvAABqdK8AAGp1rwAAanevAABqeK8AAGp6rwAAanuvAABqfa8AAGp+rwAAaoCvAABqga8AAGqDrwAAaoSvAABqhq8AAGqHrwAAaomvAABqiq8AAGqMrwAAao2vAABqj68AAGqQrwAAapKvAABqk68AAGqVrwAAapavAABqmK8AAGqZrwAAapuvAABqnK8AAGqerwAAap+vAABqoa8AAGqirwAAaqSvAABqpa8AAGqnrwAAaqivAABqqq8AAGqrrwAAaq2vAABqrq8AAGqwrwAAarGvAABqs68AAGq0rwAAaravAABqt68AAGq5rwAAarqvAABqvK8AAGq9rwAAar+vAABqwK8AAGrCrwAAasOvAABqxa8AAGrGrwAAasivAABqya8AAGrLrwAAasyvAABqzq8AAGrPrwAAatGvAABq0q8AAGrUrwAAatWvAABq168AAGrYrwAAatqvAABq268AAGrdrwAAat6vAABq4K8AAGrhrwAAauOvAABq5K8AAGrmrwAAauevAABq6a8AAGrqrwAAauyvAABq7a8AAGrvrwAAavCvAABq8q8AAGrzrwAAavWvAABq9q8AAGr4rwAAavmvAABq+68AAGr8rwAAav6vAABq/68AAGoBsAAAagKwAABqBLAAAGoFsAAAagewAABqCLAAAGoKsAAAaguwAABqDbAAAGoOsAAAahCwAABqEbAAAGoTsAAAahSwAABqFrAAAGoXsAAAahmwAABqGrAAAGocsAAAah2wAABqH7AAAGogsAAAaiKwAABqI7AAAGolsAAAaiawAABqKLAAAGopsAAAaiuwAABqLLAAAGousAAAai+wAABqMbAAAGoysAAAajSwAABqNbAAAGo3sAAAajiwAABqOrAAAGo7sAAAaj2wAABqPrAAAGpAsAAAakGwAABqQ7AAAGpEsAAAakawAABqR7AAAGpJsAAAakqwAABqTLAAAGpNsAAAak+wAABqULAAAGpSsAAAalOwAABqVbAAAGpWsAAAaliwAABqWbAAAGpbsAAAalywAABqXrAAAGpfsAAAamGwAABqYrAAAGpksAAAamWwAABqZ7AAAGposAAAamqwAABqa7AAAGptsAAAam6wAABqcLAAAGpxsAAAanOwAABqdLAAAGp2sAAAanewAABqebAAAGp6sAAAanywAABqfbAAAGp/sAAAaoCwAABqgrAAAGqDsAAAaoWwAABqhrAAAGqIsAAAaomwAABqi7AAAGqMsAAAao6wAABqj7AAAGqRsAAAapKwAABqlLAAAGqVsAAAapewAABqmLAAAGqasAAAapuwAABqnbAAAGqesAAAaqCwAABqobAAAGqjsAAAaqSwAABqprAAAGqnsAAAaqmwAABqqrAAAGqssAAAaq2wAABqr7AAAGqwsAAAarKwAABqs7AAAGq1sAAAarawAABquLAAAGq5sAAAaruwAABqvLAAAGq+sAAAar+wAABqwbAAAGrCsAAAasSwAABqxbAAAGrHsAAAasiwAABqyrAAAGrLsAAAas2wAABqzrAAAGrQsAAAatGwAABq07AAAGrUsAAAatawAABq17AAAGrZsAAAatqwAABq3LAAAGrdsAAAat+wAABq4LAAAGrisAAAauOwAABq5bAAAGrmsAAAauiwAABq6bAAAGrrsAAAauywAABq7rAAAGrvsAAAavGwAABq8rAAAGr0sAAAavWwAABq97AAAGr4sAAAavqwAABq+7AAAGr9sAAAav6wAABqALEAAGoBsQAAagOxAABqBLEAAGoGsQAAagexAABqCbEAAGoKsQAAagyxAABqDbEAAGoPsQAAahCxAABqErEAAGoTsQAAahWxAABqFrEAAGoYsQAAahmxAABqG7EAAGocsQAAah6xAABqH7EAAGohsQAAaiKxAABqJLEAAGolsQAAaiexAABqKLEAAGoqsQAAaiuxAABqLbEAAGousQAAajCxAABqMbEAAGozsQAAajSxAABqNrEAAGo3sQAAajmxAABqOrEAAGo8sQAAaj2xAABqP7EAAGpAsQAAakKxAABqQ7EAAGpFsQAAakaxAABqSLEAAGpJsQAAakuxAABqTLEAAGpOsQAAak+xAABqUbEAAGpSsQAAalSxAABqVbEAAGpXsQAAalixAABqWrEAAGpbsQAAal2xAABqXrEAAGpgsQAAamGxAABqY7EAAGpksQAAamaxAABqZ7EAAGppsQAAamqxAABqbLEAAGptsQAAam+xAABqcLEAAGpysQAAanOxAABqdbEAAGp2sQAAanixAABqebEAAGp7sQAAanyxAABqfrEAAGp/sQAAaoGxAABqgrEAAGqEsQAAaoWxAABqh7EAAGqIsQAAaoqxAABqi7EAAGqNsQAAao6xAABqkLEAAGqRsQAAapOxAABqlLEAAGqWsQAAapexAABqmbEAAGqasQAAapyxAABqnbEAAGqfsQAAaqCxAABqorEAAGqjsQAAaqWxAABqprEAAGqosQAAaqmxAABqq7EAAGqssQAAaq6xAABqr7EAAGqxsQAAarKxAABqtLEAAGq1sQAAarexAABquLEAAGq6sQAAaruxAABqvbEAAGq+sQAAasCxAABqwbEAAGrDsQAAasSxAABqxrEAAGrHsQAAasmxAABqyrEAAGrMsQAAas2xAABqz7EAAGrQsQAAatKxAABq07EAAGrVsQAAataxAABq2LEAAGrZsQAAatuxAABq3LEAAGresQAAat+xAABq4bEAAGrisQAAauSxAABq5bEAAGrnsQAAauixAABq6rEAAGrrsQAAau2xAABq7rEAAGrwsQAAavGxAABq87EAAGr0sQAAavaxAABq97EAAGr5sQAAavqxAABq/LEAAGr9sQAAav+xAABqALIAAGoCsgAAagOyAABqBbIAAGoGsgAAagiyAABqCbIAAGoLsgAAagyyAABqDrIAAGoPsgAAahGyAABqErIAAGoUsgAAahWyAABqF7IAAGoYsgAAahqyAABqG7IAAGodsgAAah6yAABqILIAAGohsgAAaiOyAABqJLIAAGomsgAAaieyAABqKbIAAGoqsgAAaiyyAABqLbIAAGovsgAAajCyAABqMrIAAGozsgAAajWyAABqNrIAAGo4sgAAajmyAABqO7IAAGo8sgAAaj6yAABqP7IAAGpBsgAAakKyAABqRLIAAGpFsgAAakeyAABqSLIAAGpKsgAAakuyAABqTbIAAGpOsgAAalCyAABqUbIAAGpTsgAAalSyAABqVrIAAGpXsgAAalmyAABqWrIAAGpcsgAAal2yAABqX7IAAGpgsgAAamKyAABqY7IAAGplsgAAamayAABqaLIAAGppsgAAamuyAABqbLIAAGpusgAAam+yAABqcbIAAGpysgAAanSyAABqdbIAAGp3sgAAaniyAABqerIAAGp7sgAAan2yAABqfrIAAGqAsgAAaoGyAABqg7IAAGqEsgAAaoayAABqh7IAAGqJsgAAaoqyAABqjLIAAGqNsgAAao+yAABqkLIAAGqSsgAAapOyAABqlbIAAGqWsgAAapiyAABqmbIAAGqbsgAAapyyAABqnrIAAGqfsgAAaqGyAABqorIAAGqksgAAaqWyAABqp7IAAGqosgAAaqqyAABqq7IAAGqtsgAAaq6yAABqsLIAAGqxsgAAarOyAABqtLIAAGq2sgAAareyAABqubIAAGq6sgAAaryyAABqvbIAAGq/sgAAasCyAABqwrIAAGrDsgAAasWyAABqxrIAAGrIsgAAasmyAABqy7IAAGrMsgAAas6yAABqz7IAAGrRsgAAatKyAABq1LIAAGrVsgAAateyAABq2LIAAGrasgAAatuyAABq3bIAAGresgAAauCyAABq4bIAAGrjsgAAauSyAABq5rIAAGrnsgAAaumyAABq6rIAAGrssgAAau2yAABq77IAAGrwsgAAavKyAABq87IAAGr1sgAAavayAABq+LIAAGr5sgAAavuyAABq/LIAAGr+sgAAav+yAABqAbMAAGoCswAAagSzAABqBbMAAGoHswAAagizAABqCrMAAGoLswAAag2zAABqDrMAAGoQswAAahGzAABqE7MAAGoUswAAahazAABqF7MAAGoZswAAahqzAABqHLMAAGodswAAah+zAABqILMAAGoiswAAaiOzAABqJbMAAGomswAAaiizAABqKbMAAGorswAAaiyzAABqLrMAAGovswAAajGzAABqMrMAAGo0swAAajWzAABqN7MAAGo4swAAajqzAABqO7MAAGo9swAAaj6zAABqQLMAAGpBswAAakOzAABqRLMAAGpGswAAakezAABqSbMAAGpKswAAakyzAABqTbMAAGpPswAAalCzAABqUrMAAGpTswAAalWzAABqVrMAAGpYswAAalmzAABqW7MAAGpcswAAal6zAABqX7MAAGphswAAamKzAABqZLMAAGplswAAamezAABqaLMAAGpqswAAamuzAABqbbMAAGpuswAAanCzAABqcbMAAGpzswAAanSzAABqdrMAAGp3swAAanmzAABqerMAAGp8swAAan2zAABqf7MAAGqAswAAaoKzAABqg7MAAGqFswAAaoazAABqiLMAAGqJswAAaouzAABqjLMAAGqOswAAao+zAABqkbMAAGqSswAAapSzAABqlbMAAGqXswAAapizAABqmrMAAGqbswAAap2zAABqnrMAAGqgswAAaqGzAABqo7MAAGqkswAAaqazAABqp7MAAGqpswAAaqqzAABqrLMAAGqtswAAaq+zAABqsLMAAGqyswAAarOzAABqtbMAAGq2swAAarizAABqubMAAGq7swAAaryzAABqvrMAAGq/swAAasGzAABqwrMAAGrEswAAasWzAABqx7MAAGrIswAAasqzAABqy7MAAGrNswAAas6zAABq0LMAAGrRswAAatOzAABq1LMAAGrWswAAatezAABq2bMAAGraswAAatyzAABq3bMAAGrfswAAauCzAABq4rMAAGrjswAAauWzAABq5rMAAGroswAAaumzAABq67MAAGrsswAAau6zAABq77MAAGrxswAAavKzAABq9LMAAGr1swAAavezAABq+LMAAGr6swAAavuzAABq/bMAAGr+swAAagC0AABqAbQAAGoDtAAAagS0AABqBrQAAGoHtAAAagm0AABqCrQAAGoMtAAAag20AABqD7QAAGoQtAAAahK0AABqE7QAAGoVtAAAaha0AABqGLQAAGoZtAAAahu0AABqHLQAAGoetAAAah+0AABqIbQAAGoitAAAaiS0AABqJbQAAGontAAAaii0AABqKrQAAGortAAAai20AABqLrQAAGowtAAAajG0AABqM7QAAGo0tAAAaja0AABqN7QAAGo5tAAAajq0AABqPLQAAGo9tAAAaj+0AABqQLQAAGpCtAAAakO0AABqRbQAAGpGtAAAaki0AABqSbQAAGpLtAAAaky0AABqTrQAAGpPtAAAalG0AABqUrQAAGpUtAAAalW0AABqV7QAAGpYtAAAalq0AABqW7QAAGpdtAAAal60AABqYLQAAGphtAAAamO0AABqZLQAAGpmtAAAame0AABqabQAAGpqtAAAamy0AABqbbQAAGpvtAAAanC0AABqcrQAAGpztAAAanW0AABqdrQAAGp4tAAAanm0AABqe7QAAGp8tAAAan60AABqf7QAAGqBtAAAaoK0AABqhLQAAGqFtAAAaoe0AABqiLQAAGqKtAAAaou0AABqjbQAAGqOtAAAapC0AABqkbQAAGqTtAAAapS0AABqlrQAAGqXtAAAapm0AABqmrQAAGqctAAAap20AABqn7QAAGqgtAAAaqK0AABqo7QAAGqltAAAaqa0AABqqLQAAGqptAAAaqu0AABqrLQAAGqutAAAaq+0AABqsbQAAGqytAAAarS0AABqtbQAAGq3tAAAari0AABqurQAAGq7tAAAar20AABqvrQAAGrAtAAAasG0AABqw7QAAGrEtAAAasa0AABqx7QAAGrJtAAAasq0AABqzLQAAGrNtAAAas+0AABq0LQAAGrStAAAatO0AABq1bQAAGrWtAAAati0AABq2bQAAGrbtAAAaty0AABq3rQAAGrftAAAauG0AABq4rQAAGrktAAAauW0AABq57QAAGrotAAAauq0AABq67QAAGrttAAAau60AABq8LQAAGrxtAAAavO0AABq9LQAAGr2tAAAave0AABq+bQAAGr6tAAAavy0AABq/bQAAGr/tAAAagC1AABqArUAAGoDtQAAagW1AABqBrUAAGoItQAAagm1AABqC7UAAGoMtQAAag61AABqD7UAAGoRtQAAahK1AABqFLUAAGoVtQAAahe1AABqGLUAAGoatQAAahu1AABqHbUAAGoetQAAaiC1AABqIbUAAGojtQAAaiS1AABqJrUAAGontQAAaim1AABqKrUAAGostQAAai21AABqL7UAAGowtQAAajK1AABqM7UAAGo1tQAAaja1AABqOLUAAGo5tQAAaju1AABqPLUAAGo+tQAAaj+1AABqQbUAAGpCtQAAakS1AABqRbUAAGpHtQAAaki1AABqSrUAAGpLtQAAak21AABqTrUAAGpQtQAAalG1AABqU7UAAGpUtQAAala1AABqV7UAAGpZtQAAalq1AABqXLUAAGpdtQAAal+1AABqYLUAAGpitQAAamO1AABqZbUAAGpmtQAAami1AABqabUAAGprtQAAamy1AABqbrUAAGpvtQAAanG1AABqcrUAAGp0tQAAanW1AABqd7UAAGp4tQAAanq1AABqe7UAAGp9tQAAan61AABqgLUAAGqBtQAAaoO1AABqhLUAAGqGtQAAaoe1AABqibUAAGqKtQAAaoy1AABqjbUAAGqPtQAAapC1AABqkrUAAGqTtQAAapW1AABqlrUAAGqYtQAAapm1AABqm7UAAGqctQAAap61AABqn7UAAGqhtQAAaqK1AABqpLUAAGqltQAAaqe1AABqqLUAAGqqtQAAaqu1AABqrbUAAGqutQAAarC1AABqsbUAAGqztQAAarS1AABqtrUAAGq3tQAAarm1AABqurUAAGq8tQAAar21AABqv7UAAGrAtQAAasK1AABqw7UAAGrFtQAAasa1AABqyLUAAGrJtQAAasu1AABqzLUAAGrOtQAAas+1AABq0bUAAGrStQAAatS1AABq1bUAAGrXtQAAati1AABq2rUAAGrbtQAAat21AABq3rUAAGrgtQAAauG1AABq47UAAGrktQAAaua1AABq57UAAGrptQAAauq1AABq7LUAAGrttQAAau+1AABq8LUAAGrytQAAavO1AABq9bUAAGr2tQAAavi1AABq+bUAAGr7tQAAavy1AABq/rUAAGr/tQAAagG2AABqArYAAGoEtgAAagW2AABqB7YAAGoItgAAagq2AABqC7YAAGoNtgAAag62AABqELYAAGoRtgAAahO2AABqFLYAAGoWtgAAahe2AABqGbYAAGoatgAAahy2AABqHbYAAGoftgAAaiC2AABqIrYAAGojtgAAaiW2AABqJrYAAGootgAAaim2AABqK7YAAGostgAAai62AABqL7YAAGoxtgAAajK2AABqNLYAAGo1tgAAaje2AABqOLYAAGo6tgAAaju2AABqPbYAAGo+tgAAakC2AABqQbYAAGpDtgAAakS2AABqRrYAAGpHtgAAakm2AABqSrYAAGpMtgAAak22AABqT7YAAGpQtgAAalK2AABqU7YAAGpVtgAAala2AABqWLYAAGpZtgAAalu2AABqXLYAAGpetgAAal+2AABqYbYAAGpitgAAamS2AABqZbYAAGpntgAAami2AABqarYAAGprtgAAam22AABqbrYAAGpwtgAAanG2AABqc7YAAGp0tgAAana2AABqd7YAAGp5tgAAanq2AABqfLYAAGp9tgAAan+2AABqgLYAAGqCtgAAaoO2AABqhbYAAGqGtgAAaoi2AABqibYAAGqLtgAAaoy2AABqjrYAAGqPtgAAapG2AABqkrYAAGqUtgAAapW2AABql7YAAGqYtgAAapq2AABqm7YAAGqdtgAAap62AABqoLYAAGqhtgAAaqO2AABqpLYAAGqmtgAAaqe2AABqqbYAAGqqtgAAaqy2AABqrbYAAGqvtgAAarC2AABqsrYAAGqztgAAarW2AABqtrYAAGq4tgAAarm2AABqu7YAAGq8tgAAar62AABqv7YAAGrBtgAAasK2AABqxLYAAGrFtgAAase2AABqyLYAAGrKtgAAasu2AABqzbYAAGrOtgAAatC2AABq0bYAAGrTtgAAatS2AABq1rYAAGrXtgAAatm2AABq2rYAAGrctgAAat22AABq37YAAGrgtgAAauK2AABq47YAAGrltgAAaua2AABq6LYAAGrptgAAauu2AABq7LYAAGrutgAAau+2AABq8bYAAGrytgAAavS2AABq9bYAAGr3tgAAavi2AABq+rYAAGr7tgAAav22AABq/rYAAGoAtwAAagG3AABqA7cAAGoEtwAAaga3AABqB7cAAGoJtwAAagq3AABqDLcAAGoNtwAAag+3AABqELcAAGoStwAAahO3AABqFbcAAGoWtwAAahi3AABqGbcAAGobtwAAahy3AABqHrcAAGoftwAAaiG3AABqIrcAAGoktwAAaiW3AABqJ7cAAGootwAAaiq3AABqK7cAAGottwAAai63AABqMLcAAGoxtwAAajO3AABqNLcAAGo2twAAaje3AABqObcAAGo6twAAajy3AABqPbcAAGo/twAAakC3AABqQrcAAGpDtwAAakW3AABqRrcAAGpItwAAakm3AABqS7cAAGpMtwAAak63AABqT7cAAGpRtwAAalK3AABqVLcAAGpVtwAAale3AABqWLcAAGpatwAAalu3AABqXbcAAGpetwAAamC3AABqYbcAAGpjtwAAamS3AABqZrcAAGpntwAAamm3AABqarcAAGpstwAAam23AABqb7cAAGpwtwAAanK3AABqc7cAAGp1twAAana3AABqeLcAAGp5twAAanu3AABqfLcAAGp+twAAan+3AABqgbcAAGqCtwAAaoS3AABqhbcAAGqHtwAAaoi3AABqircAAGqLtwAAao23AABqjrcAAGqQtwAAdShqkbcAAGqTtwAAapS3AABqlrcAAGqXtwAAapm3AABqmrcAAGqctwAAap23AABqn7cAAGqgtwAAaqK3AABqo7cAAGqltwAAaqa3AABqqLcAAGqptwAAaqu3AABqrLcAAGqutwAAaq+3AABqsbcAAGqytwAAarS3AABqtbcAAGq3twAAari3AABqurcAAGq7twAAar23AABqvrcAAGrAtwAAasG3AABqw7cAAGrEtwAAasa3AABqx7cAAGrJtwAAasq3AABqzLcAAGrNtwAAas+3AABq0LcAAGrStwAAatO3AABq1bcAAGrWtwAAati3AABq2bcAAGrbtwAAaty3AABq3rcAAGrftwAAauG3AABq4rcAAGrktwAAauW3AABq57cAAGrotwAAauq3AABq67cAAGrttwAAau63AABq8LcAAGrxtwAAavO3AABq9LcAAGr2twAAave3AABq+bcAAGr6twAAavy3AABq/bcAAGr/twAAagC4AABqArgAAGoDuAAAagW4AABqBrgAAGoIuAAAagm4AABqC7gAAGoMuAAAag64AABqD7gAAGoRuAAAahK4AABqFLgAAGoVuAAAahe4AABqGLgAAGoauAAAahu4AABqHbgAAGoeuAAAaiC4AABqIbgAAGojuAAAaiS4AABqJrgAAGonuAAAaim4AABqKrgAAGosuAAAai24AABqL7gAAGowuAAAajK4AABqM7gAAGo1uAAAaja4AABqOLgAAGo5uAAAaju4AABqPLgAAGo+uAAAaj+4AABqQbgAAGpCuAAAakS4AABqRbgAAGpHuAAAaki4AABqSrgAAGpLuAAAak24AABqTrgAAGpQuAAAalG4AABqU7gAAGpUuAAAala4AABqV7gAAGpZuAAAalq4AABqXLgAAGpduAAAal+4AABqYLgAAGpiuAAAamO4AABqZbgAAGpmuAAAami4AABqabgAAGpruAAAamy4AABqbrgAAGpvuAAAanG4AABqcrgAAGp0uAAAanW4AABqd7gAAGp4uAAAanq4AABqe7gAAGp9uAAAan64AABqgLgAAGqBuAAAaoO4AABqhLgAAGqGuAAAaoe4AABqibgAAGqKuAAAaoy4AABqjbgAAGqPuAAAapC4AABqkrgAAGqTuAAAapW4AABqlrgAAGqYuAAAapm4AABqm7gAAGqcuAAAap64AABqn7gAAGqhuAAAaqK4AABqpLgAAGqluAAAaqe4AABqqLgAAGqquAAAaqu4AABqrbgAAGquuAAAarC4AABqsbgAAGqzuAAAarS4AABqtrgAAGq3uAAAarm4AABqurgAAGq8uAAAar24AABqv7gAAGrAuAAAasK4AABqw7gAAGrFuAAAasa4AABqyLgAAGrJuAAAasu4AABqzLgAAGrOuAAAas+4AABq0bgAAGrSuAAAatS4AABq1bgAAGrXuAAAati4AABq2rgAAGrbuAAAat24AABq3rgAAGrguAAAauG4AABq47gAAGrkuAAAaua4AABq57gAAGrpuAAAauq4AABq7LgAAGrtuAAAau+4AABq8LgAAGryuAAAavO4AABq9bgAAGr2uAAAavi4AABq+bgAAGr7uAAAavy4AABq/rgAAGr/uAAAagG5AABqArkAAGoEuQAAagW5AABqB7kAAGoIuQAAagq5AABqC7kAAGoNuQAAag65AABqELkAAGoRuQAAahO5AABqFLkAAGoWuQAAahe5AABqGbkAAGoauQAAahy5AABqHbkAAGofuQAAaiC5AABqIrkAAGojuQAAaiW5AABqJrkAAGoouQAAaim5AABqK7kAAGosuQAAai65AABqL7kAAGoxuQAAajK5AABqNLkAAGo1uQAAaje5AABqOLkAAGo6uQAAaju5AABqPbkAAGo+uQAAakC5AABqQbkAAGpDuQAAakS5AABqRrkAAGpHuQAAakm5AABqSrkAAGpMuQAAak25AABqT7kAAGpQuQAAalK5AABqU7kAAGpVuQAAala5AABqWLkAAGpZuQAAalu5AABqXLkAAGpeuQAAal+5AABqYbkAAGpiuQAAamS5AABqZbkAAGpnuQAAami5AABqarkAAGpruQAAam25AABqbrkAAGpwuQAAanG5AABqc7kAAGp0uQAAana5AABqd7kAAGp5uQAAanq5AABqfLkAAGp9uQAAan+5AABqgLkAAGqCuQAAaoO5AABqhbkAAGqGuQAAaoi5AABqibkAAGqLuQAAaoy5AABqjrkAAGqPuQAAapG5AABqkrkAAGqUuQAAapW5AABql7kAAGqYuQAAapq5AABqm7kAAGqduQAAap65AABqoLkAAGqhuQAAaqO5AABqpLkAAGqmuQAAaqe5AABqqbkAAGqquQAAaqy5AABqrbkAAGqvuQAAarC5AABqsrkAAGqzuQAAarW5AABqtrkAAGq4uQAAarm5AABqu7kAAGq8uQAAar65AABqv7kAAGrBuQAAasK5AABqxLkAAGrFuQAAase5AABqyLkAAGrKuQAAasu5AABqzbkAAGrOuQAAatC5AABq0bkAAGrTuQAAatS5AABq1rkAAGrXuQAAatm5AABq2rkAAGrcuQAAat25AABq37kAAGrguQAAauK5AABq47kAAGrluQAAaua5AABq6LkAAGrpuQAAauu5AABq7LkAAGruuQAAau+5AABq8bkAAGryuQAAavS5AABq9bkAAGr3uQAAavi5AABq+rkAAGr7uQAAav25AABq/rkAAGoAugAAagG6AABqA7oAAGoEugAAaga6AABqB7oAAGoJugAAagq6AABqDLoAAGoNugAAag+6AABqELoAAGoSugAAahO6AABqFboAAGoWugAAahi6AABqGboAAGobugAAahy6AABqHroAAGofugAAaiG6AABqIroAAGokugAAaiW6AABqJ7oAAGoougAAaiq6AABqK7oAAGotugAAai66AABqMLoAAGoxugAAajO6AABqNLoAAGo2ugAAaje6AABqOboAAGo6ugAAajy6AABqPboAAGo/ugAAakC6AABqQroAAGpDugAAakW6AABqRroAAGpIugAAakm6AABqS7oAAGpMugAAak66AABqT7oAAGpRugAAalK6AABqVLoAAGpVugAAale6AABqWLoAAGpaugAAalu6AABqXboAAGpeugAAamC6AABqYboAAGpjugAAamS6AABqZroAAGpnugAAamm6AABqaroAAGpsugAAam26AABqb7oAAGpwugAAanK6AABqc7oAAGp1ugAAana6AABqeLoAAGp5ugAAanu6AABqfLoAAGp+ugAAan+6AABqgboAAGqCugAAaoS6AABqhboAAGqHugAAaoi6AABqiroAAGqLugAAao26AABqjroAAGqQugAAapG6AABqk7oAAGqUugAAapa6AABql7oAAGqZugAAapq6AABqnLoAAGqdugAAap+6AABqoLoAAGqiugAAaqO6AABqpboAAGqmugAAaqi6AABqqboAAGqrugAAaqy6AABqrroAAGqvugAAarG6AABqsroAAGq0ugAAarW6AABqt7oAAGq4ugAAarq6AABqu7oAAGq9ugAAar66AABqwLoAAGrBugAAasO6AABqxLoAAGrGugAAase6AABqyboAAGrKugAAasy6AABqzboAAGrPugAAatC6AABq0roAAGrTugAAatW6AABq1roAAGrYugAAatm6AABq27oAAGrcugAAat66AABq37oAAGrhugAAauK6AABq5LoAAGrlugAAaue6AABq6LoAAGrqugAAauu6AABq7boAAGruugAAavC6AABq8boAAGrzugAAavS6AABq9roAAGr3ugAAavm6AABq+roAAGr8ugAAav26AABq/7oAAGoAuwAAagK7AABqA7sAAGoFuwAAaga7AABqCLsAAGoJuwAAagu7AABqDLsAAGoOuwAAag+7AABqEbsAAGoSuwAAahS7AABqFbsAAGoXuwAAahi7AABqGrsAAGobuwAAah27AABqHrsAAGoguwAAaiG7AABqI7sAAGokuwAAaia7AABqJ7sAAGopuwAAaiq7AABqLLsAAGotuwAAai+7AABqMLsAAGoyuwAAajO7AABqNbsAAGo2uwAAaji7AABqObsAAGo7uwAAajy7AABqPrsAAGo/uwAAakG7AABqQrsAAGpEuwAAakW7AABqR7sAAGpIuwAAakq7AABqS7sAAGpNuwAAak67AABqULsAAGpRuwAAalO7AABqVLsAAGpWuwAAale7AABqWbsAAGpauwAAaly7AABqXbsAAGpfuwAAamC7AABqYrsAAGpjuwAAamW7AABqZrsAAGpouwAAamm7AABqa7sAAGpsuwAAam67AABqb7sAAGpxuwAAanK7AABqdLsAAGp1uwAAane7AABqeLsAAGp6uwAAanu7AABqfbsAAGp+uwAAaoC7AABqgbsAAGqDuwAAaoS7AABqhrsAAGqHuwAAaom7AABqirsAAGqMuwAAao27AABqj7sAAGqQuwAAapK7AABqk7sAAGqVuwAAapa7AABqmLsAAGqZuwAAapu7AABqnLsAAGqeuwAAap+7AABqobsAAGqiuwAAaqS7AABqpbsAAGqnuwAAaqi7AABqqrsAAGqruwAAaq27AABqrrsAAGqwuwAAarG7AABqs7sAAGq0uwAAara7AABqt7sAAGq5uwAAarq7AABqvLsAAGq9uwAAar+7AABqwLsAAGrCuwAAasO7AABqxbsAAGrGuwAAasi7AABqybsAAGrLuwAAasy7AABqzrsAAGrPuwAAatG7AABq0rsAAGrUuwAAatW7AABq17sAAGrYuwAAatq7AABq27sAAGrduwAAat67AABq4LsAAGrhuwAAauO7AABq5LsAAGrmuwAAaue7AABq6bsAAGrquwAAauy7AABq7bsAAGrvuwAAavC7AABq8rsAAGrzuwAAavW7AABq9rsAAGr4uwAAavm7AABq+7sAAGr8uwAAav67AABq/7sAAGoBvAAAagK8AABqBLwAAGoFvAAAage8AABqCLwAAGoKvAAAagu8AABqDbwAAGoOvAAAahC8AABqEbwAAGoTvAAAahS8AABqFrwAAGoXvAAAahm8AABqGrwAAGocvAAAah28AABqH7wAAGogvAAAaiK8AABqI7wAAGolvAAAaia8AABqKLwAAGopvAAAaiu8AABqLLwAAGouvAAAai+8AABqMbwAAGoyvAAAajS8AABqNbwAAGo3vAAAaji8AABqOrwAAGo7vAAAaj28AABqPrwAAGpAvAAAakG8AABqQ7wAAGpEvAAAaka8AABqR7wAAGpJvAAAakq8AABqTLwAAGpNvAAAak+8AABqULwAAGpSvAAAalO8AABqVbwAAGpWvAAAali8AABqWbwAAGpbvAAAaly8AABqXrwAAGpfvAAAamG8AABqYrwAAGpkvAAAamW8AABqZ7wAAGpovAAAamq8AABqa7wAAGptvAAAam68AABqcLwAAGpxvAAAanO8AABqdLwAAGp2vAAAane8AABqebwAAGp6vAAAany8AABqfbwAAGp/vAAAaoC8AABqgrwAAGqDvAAAaoW8AABqhrwAAGqIvAAAaom8AABqi7wAAGqMvAAAao68AABqj7wAAGqRvAAAapK8AABqlLwAAGqVvAAAape8AABqmLwAAGqavAAAapu8AABqnbwAAGqevAAAaqC8AABqobwAAGqjvAAAaqS8AABqprwAAGqnvAAAaqm8AABqqrwAAGqsvAAAaq28AABqr7wAAGqwvAAAarK8AABqs7wAAGq1vAAAara8AABquLwAAGq5vAAAaru8AABqvLwAAGq+vAAAar+8AABqwbwAAGrCvAAAasS8AABqxbwAAGrHvAAAasi8AABqyrwAAGrLvAAAas28AABqzrwAAGrQvAAAatG8AABq07wAAGrUvAAAata8AABq17wAAGrZvAAAatq8AABq3LwAAGrdvAAAat+8AABq4LwAAGrivAAAauO8AABq5bwAAGrmvAAAaui8AABq6bwAAGrrvAAAauy8AABq7rwAAGrvvAAAavG8AABq8rwAAGr0vAAAavW8AABq97wAAGr4vAAAavq8AABq+7wAAGr9vAAAav68AABqAL0AAGoBvQAAagO9AABqBL0AAGoGvQAAage9AABqCb0AAGoKvQAAagy9AABqDb0AAGoPvQAAahC9AABqEr0AAGoTvQAAahW9AABqFr0AAGoYvQAAahm9AABqG70AAGocvQAAah69AABqH70AAGohvQAAaiK9AABqJL0AAGolvQAAaie9AABqKL0AAGoqvQAAaiu9AABqLb0AAGouvQAAajC9AABqMb0AAGozvQAAajS9AABqNr0AAGo3vQAAajm9AABqOr0AAGo8vQAAaj29AABqP70AAGpAvQAAakK9AABqQ70AAGpFvQAAaka9AABqSL0AAGpJvQAAaku9AABqTL0AAGpOvQAAak+9AABqUb0AAGpSvQAAalS9AABqVb0AAGpXvQAAali9AABqWr0AAGpbvQAAal29AABqXr0AAGpgvQAAamG9AABqY70AAGpkvQAAama9AABqZ70AAGppvQAAamq9AABqbL0AAGptvQAAam+9AABqcL0AAGpyvQAAanO9AABqdb0AAGp2vQAAani9AABqeb0AAGp7vQAAany9AABqfr0AAGp/vQAAaoG9AABqgr0AAGqEvQAAaoW9AABqh70AAGqIvQAAaoq9AABqi70AAGqNvQAAao69AABqkL0AAGqRvQAAapO9AABqlL0AAGqWvQAAape9AABqmb0AAGqavQAAapy9AABqnb0AAGqfvQAAaqC9AABqor0AAGqjvQAAaqW9AABqpr0AAGqovQAAaqm9AABqq70AAGqsvQAAaq69AABqr70AAGqxvQAAarK9AABqtL0AAGq1vQAAare9AABquL0AAGq6vQAAaru9AABqvb0AAGq+vQAAasC9AABqwb0AAGrDvQAAasS9AABqxr0AAGrHvQAAasm9AABqyr0AAGrMvQAAas29AABqz70AAGrQvQAAatK9AABq070AAGrVvQAAata9AABq2L0AAGrZvQAAatu9AABq3L0AAGrevQAAat+9AABq4b0AAGrivQAAauS9AABq5b0AAGrnvQAAaui9AABq6r0AAGrrvQAAau29AABq7r0AAGrwvQAAavG9AABq870AAGr0vQAAava9AABq970AAGr5vQAAavq9AABq/L0AAGr9vQAAav+9AABqAL4AAGoCvgAAagO+AABqBb4AAGoGvgAAagi+AABqCb4AAGoLvgAAagy+AABqDr4AAGoPvgAAahG+AABqEr4AAGoUvgAAahW+AABqF74AAGoYvgAAahq+AABqG74AAGodvgAAah6+AABqIL4AAGohvgAAaiO+AABqJL4AAGomvgAAaie+AABqKb4AAGoqvgAAaiy+AABqLb4AAGovvgAAajC+AABqMr4AAGozvgAAajW+AABqNr4AAGo4vgAAajm+AABqO74AAGo8vgAAaj6+AABqP74AAGpBvgAAakK+AABqRL4AAGpFvgAAake+AABqSL4AAGpKvgAAaku+AABqTb4AAGpOvgAAalC+AABqUb4AAGpTvgAAalS+AABqVr4AAGpXvgAAalm+AABqWr4AAGpcvgAAal2+AABqX74AAGpgvgAAamK+AABqY74AAGplvgAAama+AABqaL4AAGppvgAAamu+AABqbL4AAGpuvgAAam++AABqcb4AAGpyvgAAanS+AABqdb4AAGp3vgAAani+AABqer4AAGp7vgAAan2+AABqfr4AAGqAvgAAaoG+AABqg74AAGqEvgAAaoa+AABqh74AAGqJvgAAaoq+AABqjL4AAGqNvgAAao++AABqkL4AAGqSvgAAapO+AABqlb4AAGqWvgAAapi+AABqmb4AAGqbvgAAapy+AABqnr4AAGqfvgAAaqG+AABqor4AAGqkvgAAaqW+AABqp74AAGqovgAAaqq+AABqq74AAGqtvgAAaq6+AABqsL4AAGqxvgAAarO+AABqtL4AAGq2vgAAare+AABqub4AAGq6vgAAary+AABqvb4AAGq/vgAAasC+AABqwr4AAGrDvgAAasW+AABqxr4AAGrIvgAAasm+AABqy74AAGrMvgAAas6+AABqz74AAGrRvgAAatK+AABq1L4AAGrVvgAAate+AABq2L4AAGravgAAatu+AABq3b4AAGrevgAAauC+AABq4b4AAGrjvgAAauS+AABq5r4AAGrnvgAAaum+AABq6r4AAGrsvgAAau2+AABq774AAGrwvgAAavK+AABq874AAGr1vgAAava+AABq+L4AAGr5vgAAavu+AABq/L4AAGr+vgAAav++AABqAb8AAGoCvwAAagS/AABqBb8AAGoHvwAAagi/AABqCr8AAGoLvwAAag2/AABqDr8AAGoQvwAAahG/AABqE78AAGoUvwAAaha/AABqF78AAGoZvwAAahq/AABqHL8AAGodvwAAah+/AABqIL8AAGoivwAAaiO/AABqJb8AAGomvwAAaii/AABqKb8AAGorvwAAaiy/AABqLr8AAGovvwAAajG/AABqMr8AAGo0vwAAajW/AABqN78AAGo4vwAAajq/AABqO78AAGo9vwAAaj6/AABqQL8AAGpBvwAAakO/AABqRL8AAGpGvwAAake/AABqSb8AAGpKvwAAaky/AABqTb8AAGpPvwAAalC/AABqUr8AAGpTvwAAalW/AABqVr8AAGpYvwAAalm/AABqW78AAGpcvwAAal6/AABqX78AAGphvwAAamK/AABqZL8AAGplvwAAame/AABqaL8AAGpqvwAAamu/AABqbb8AAGpuvwAAanC/AABqcb8AAGpzvwAAanS/AABqdr8AAGp3vwAAanm/AABqer8AAGp8vwAAan2/AABqf78AAGqAvwAAaoK/AABqg78AAGqFvwAAaoa/AABqiL8AAGqJvwAAaou/AABqjL8AAGqOvwAAao+/AABqkb8AAGqSvwAAapS/AABqlb8AAGqXvwAAapi/AABqmr8AAGqbvwAAap2/AABqnr8AAGqgvwAAaqG/AABqo78AAGqkvwAAaqa/AABqp78AAGqpvwAAaqq/AABqrL8AAGqtvwAAaq+/AABqsL8AAGqyvwAAarO/AABqtb8AAGq2vwAAari/AABqub8AAGq7vwAAary/AABqvr8AAGq/vwAAasG/AABqwr8AAGrEvwAAasW/AABqx78AAGrIvwAAasq/AABqy78AAGrNvwAAas6/AABq0L8AAGrRvwAAatO/AABq1L8AAGrWvwAAate/AABq2b8AAGravwAAaty/AABq3b8AAGrfvwAAauC/AABq4r8AAGrjvwAAauW/AABq5r8AAGrovwAAaum/AABq678AAGrsvwAAau6/AABq778AAGrxvwAAavK/AABq9L8AAGr1vwAAave/AABq+L8AAGr6vwAAavu/AABq/b8AAGr+vwAAagDAAABqAcAAAGoDwAAAagTAAABqBsAAAGoHwAAAagnAAABqCsAAAGoMwAAAag3AAABqD8AAAGoQwAAAahLAAABqE8AAAGoVwAAAahbAAABqGMAAAGoZwAAAahvAAABqHMAAAGoewAAAah/AAABqIcAAAGoiwAAAaiTAAABqJcAAAGonwAAAaijAAABqKsAAAGorwAAAai3AAABqLsAAAGowwAAAajHAAABqM8AAAGo0wAAAajbAAABqN8AAAGo5wAAAajrAAABqPMAAAGo9wAAAaj/AAABqQMAAAGpCwAAAakPAAABqRcAAAGpGwAAAakjAAABqScAAAGpLwAAAakzAAABqTsAAAGpPwAAAalHAAABqUsAAAGpUwAAAalXAAABqV8AAAGpYwAAAalrAAABqW8AAAGpdwAAAal7AAABqYMAAAGphwAAAamPAAABqZMAAAGpmwAAAamfAAABqacAAAGpqwAAAamzAAABqbcAAAGpvwAAAanDAAABqcsAAAGpzwAAAanXAAABqdsAAAGp4wAAAannAAABqe8AAAGp8wAAAan7AAABqf8AAAGqBwAAAaoLAAABqhMAAAGqFwAAAaofAAABqiMAAAGqKwAAAaovAAABqjcAAAGqOwAAAapDAAABqkcAAAGqTwAAAapTAAABqlsAAAGqXwAAAapnAAABqmsAAAGqcwAAAap3AAABqn8AAAGqgwAAAaqLAAABqo8AAAGqlwAAAaqbAAABqqMAAAGqpwAAAaqvAAABqrMAAAGquwAAAaq/AAABqscAAAGqywAAAarTAAABqtcAAAGq3wAAAarjAAABqusAAAGq7wAAAar3AAABqvsAAAGrAwAAAasHAAABqw8AAAGrEwAAAasbAAABqx8AAAGrJwAAAasrAAABqzMAAAGrNwAAAas/AAABq0MAAAGrSwAAAatPAAABq1cAAAGrWwAAAatjAAABq2cAAAGrbwAAAatzAAABq3sAAAGrfwAAAauHAAABq4sAAAGrkwAAAauXAAABq58AAAGrowAAAaurAAABq68AAAGrtwAAAau7AAABq8MAAAGrxwAAAavPAAABq9MAAAGr2wAAAavfAAABq+cAAAGr6wAAAavzAAABq/cAAAGr/wAAAagDBAABqAsEAAGoDwQAAagXBAABqBsEAAGoIwQAAagnBAABqC8EAAGoMwQAAag7BAABqD8EAAGoRwQAAahLBAABqFMEAAGoVwQAAahfBAABqGMEAAGoawQAAahvBAABqHcEAAGoewQAAaiDBAABqIcEAAGojwQAAaiTBAABqJsEAAGonwQAAainBAABqKsEAAGoswQAAai3BAABqL8EAAGowwQAAajLBAABqM8EAAGo1wQAAajbBAABqOMEAAGo5wQAAajvBAABqPMEAAGo+wQAAaj/BAABqQcEAAGpCwQAAakTBAABqRcEAAGpHwQAAakjBAABqSsEAAGpLwQAAak3BAABqTsEAAGpQwQAAalHBAABqU8EAAGpUwQAAalbBAABqV8EAAGpZwQAAalrBAABqXMEAAGpdwQAAal/BAABqYMEAAGpiwQAAamPBAABqZcEAAGpmwQAAamjBAABqacEAAGprwQAAamzBAABqbsEAAGpvwQAAanHBAABqcsEAAGp0wQAAanXBAABqd8EAAGp4wQAAanrBAABqe8EAAGp9wQAAan7BAABqgMEAAGqBwQAAaoPBAABqhMEAAGqGwQAAaofBAABqicEAAGqKwQAAaozBAABqjcEAAGqPwQAAapDBAABqksEAAGqTwQAAapXBAABqlsEAAGqYwQAAapnBAABqm8EAAGqcwQAAap7BAABqn8EAAGqhwQAAaqLBAABqpMEAAGqlwQAAaqfBAABqqMEAAGqqwQAAaqvBAABqrcEAAGquwQAAarDBAABqscEAAGqzwQAAarTBAABqtsEAAGq3wQAAarnBAABqusEAAGq8wQAAar3BAABqv8EAAGrAwQAAasLBAABqw8EAAGrFwQAAasbBAABqyMEAAGrJwQAAasvBAABqzMEAAGrOwQAAas/BAABq0cEAAGrSwQAAatTBAABq1cEAAGrXwQAAatjBAABq2sEAAGrbwQAAat3BAABq3sEAAGrgwQAAauHBAABq48EAAGrkwQAAaubBAABq58EAAGrpwQAAaurBAABq7MEAAGrtwQAAau/BAABq8MEAAGrywQAAavPBAABq9cEAAGr2wQAAavjBAABq+cEAAGr7wQAAavzBAABq/sEAAGr/wQAAagHCAABqAsIAAGoEwgAAagXCAABqB8IAAGoIwgAAagrCAABqC8IAAGoNwgAAag7CAABqEMIAAGoRwgAAahPCAABqFMIAAGoWwgAAahfCAABqGcIAAGoawgAAahzCAABqHcIAAGofwgAAaiDCAABqIsIAAGojwgAAaiXCAABqJsIAAGoowgAAainCAABqK8IAAGoswgAAai7CAABqL8IAAGoxwgAAajLCAABqNMIAAGo1wgAAajfCAABqOMIAAGo6wgAAajvCAABqPcIAAGo+wgAAakDCAABqQcIAAGpDwgAAakTCAABqRsIAAGpHwgAAaknCAABqSsIAAGpMwgAAak3CAABqT8IAAGpQwgAAalLCAABqU8IAAGpVwgAAalbCAABqWMIAAGpZwgAAalvCAABqXMIAAGpewgAAal/CAABqYcIAAGpiwgAAamTCAABqZcIAAGpnwgAAamjCAABqasIAAGprwgAAam3CAABqbsIAAGpwwgAAanHCAABqc8IAAGp0wgAAanbCAABqd8IAAGp5wgAAanrCAABqfMIAAGp9wgAAan/CAABqgMIAAGqCwgAAaoPCAABqhcIAAGqGwgAAaojCAABqicIAAGqLwgAAaozCAABqjsIAAGqPwgAAapHCAABqksIAAGqUwgAAapXCAABql8IAAGqYwgAAaprCAABqm8IAAGqdwgAAap7CAABqoMIAAGqhwgAAaqPCAABqpMIAAGqmwgAAaqfCAABqqcIAAGqqwgAAaqzCAABqrcIAAGqvwgAAarDCAABqssIAAGqzwgAAarXCAABqtsIAAGq4wgAAarnCAABqu8IAAGq8wgAAar7CAABqv8IAAGrBwgAAasLCAABqxMIAAGrFwgAAasfCAABqyMIAAGrKwgAAasvCAABqzcIAAGrOwgAAatDCAABq0cIAAGrTwgAAatTCAABq1sIAAGrXwgAAatnCAABq2sIAAGrcwgAAat3CAABq38IAAGrgwgAAauLCAABq48IAAGrlwgAAaubCAABq6MIAAGrpwgAAauvCAABq7MIAAGruwgAAau/CAABq8cIAAGrywgAAavTCAABq9cIAAGr3wgAAavjCAABq+sIAAGr7wgAAav3CAABq/sIAAGoAwwAAagHDAABqA8MAAGoEwwAAagbDAABqB8MAAGoJwwAAagrDAABqDMMAAGoNwwAAag/DAABqEMMAAGoSwwAAahPDAABqFcMAAGoWwwAAahjDAABqGcMAAGobwwAAahzDAABqHsMAAGofwwAAaiHDAABqIsMAAGokwwAAaiXDAABqJ8MAAGoowwAAairDAABqK8MAAGotwwAAai7DAABqMMMAAGoxwwAAajPDAABqNMMAAGo2wwAAajfDAABqOcMAAGo6wwAAajzDAABqPcMAAGo/wwAAakDDAABqQsMAAGpDwwAAakXDAABqRsMAAGpIwwAAdShqScMAAGpLwwAAakzDAABqTsMAAGpPwwAAalHDAABqUsMAAGpUwwAAalXDAABqV8MAAGpYwwAAalrDAABqW8MAAGpdwwAAal7DAABqYMMAAGphwwAAamPDAABqZMMAAGpmwwAAamfDAABqacMAAGpqwwAAamzDAABqbcMAAGpvwwAAanDDAABqcsMAAGpzwwAAanXDAABqdsMAAGp4wwAAannDAABqe8MAAGp8wwAAan7DAABqf8MAAGqBwwAAaoLDAABqhMMAAGqFwwAAaofDAABqiMMAAGqKwwAAaovDAABqjcMAAGqOwwAAapDDAABqkcMAAGqTwwAAapTDAABqlsMAAGqXwwAAapnDAABqmsMAAGqcwwAAap3DAABqn8MAAGqgwwAAaqLDAABqo8MAAGqlwwAAaqbDAABqqMMAAGqpwwAAaqvDAABqrMMAAGquwwAAaq/DAABqscMAAGqywwAAarTDAABqtcMAAGq3wwAAarjDAABqusMAAGq7wwAAar3DAABqvsMAAGrAwwAAasHDAABqw8MAAGrEwwAAasbDAABqx8MAAGrJwwAAasrDAABqzMMAAGrNwwAAas/DAABq0MMAAGrSwwAAatPDAABq1cMAAGrWwwAAatjDAABq2cMAAGrbwwAAatzDAABq3sMAAGrfwwAAauHDAABq4sMAAGrkwwAAauXDAABq58MAAGrowwAAaurDAABq68MAAGrtwwAAau7DAABq8MMAAGrxwwAAavPDAABq9MMAAGr2wwAAavfDAABq+cMAAGr6wwAAavzDAABq/cMAAGr/wwAAagDEAABqAsQAAGoDxAAAagXEAABqBsQAAGoIxAAAagnEAABqC8QAAGoMxAAAag7EAABqD8QAAGoRxAAAahLEAABqFMQAAGoVxAAAahfEAABqGMQAAGoaxAAAahvEAABqHcQAAGoexAAAaiDEAABqIcQAAGojxAAAaiTEAABqJsQAAGonxAAAainEAABqKsQAAGosxAAAai3EAABqL8QAAGowxAAAajLEAABqM8QAAGo1xAAAajbEAABqOMQAAGo5xAAAajvEAABqPMQAAGo+xAAAaj/EAABqQcQAAGpCxAAAakTEAABqRcQAAGpHxAAAakjEAABqSsQAAGpLxAAAak3EAABqTsQAAGpQxAAAalHEAABqU8QAAGpUxAAAalbEAABqV8QAAGpZxAAAalrEAABqXMQAAGpdxAAAal/EAABqYMQAAGpixAAAamPEAABqZcQAAGpmxAAAamjEAABqacQAAGprxAAAamzEAABqbsQAAGpvxAAAanHEAABqcsQAAGp0xAAAanXEAABqd8QAAGp4xAAAanrEAABqe8QAAGp9xAAAan7EAABqgMQAAGqBxAAAaoPEAABqhMQAAGqGxAAAaofEAABqicQAAGqKxAAAaozEAABqjcQAAGqPxAAAapDEAABqksQAAGqTxAAAapXEAABqlsQAAGqYxAAAapnEAABqm8QAAGqcxAAAap7EAABqn8QAAGqhxAAAaqLEAABqpMQAAGqlxAAAaqfEAABqqMQAAGqqxAAAaqvEAABqrcQAAGquxAAAarDEAABqscQAAGqzxAAAarTEAABqtsQAAGq3xAAAarnEAABqusQAAGq8xAAAar3EAABqv8QAAGrAxAAAasLEAABqw8QAAGrFxAAAasbEAABqyMQAAGrJxAAAasvEAABqzMQAAGrOxAAAas/EAABq0cQAAGrSxAAAatTEAABq1cQAAGrXxAAAatjEAABq2sQAAGrbxAAAat3EAABq3sQAAGrgxAAAauHEAABq48QAAGrkxAAAaubEAABq58QAAGrpxAAAaurEAABq7MQAAGrtxAAAau/EAABq8MQAAGryxAAAavPEAABq9cQAAGr2xAAAavjEAABq+cQAAGr7xAAAavzEAABq/sQAAGr/xAAAagHFAABqAsUAAGoExQAAagXFAABqB8UAAGoIxQAAagrFAABqC8UAAGoNxQAAag7FAABqEMUAAGoRxQAAahPFAABqFMUAAGoWxQAAahfFAABqGcUAAGoaxQAAahzFAABqHcUAAGofxQAAaiDFAABqIsUAAGojxQAAaiXFAABqJsUAAGooxQAAainFAABqK8UAAGosxQAAai7FAABqL8UAAGoxxQAAajLFAABqNMUAAGo1xQAAajfFAABqOMUAAGo6xQAAajvFAABqPcUAAGo+xQAAakDFAABqQcUAAGpDxQAAakTFAABqRsUAAGpHxQAAaknFAABqSsUAAGpMxQAAak3FAABqT8UAAGpQxQAAalLFAABqU8UAAGpVxQAAalbFAABqWMUAAGpZxQAAalvFAABqXMUAAGpexQAAal/FAABqYcUAAGpixQAAamTFAABqZcUAAGpnxQAAamjFAABqasUAAGprxQAAam3FAABqbsUAAGpwxQAAanHFAABqc8UAAGp0xQAAanbFAABqd8UAAGp5xQAAanrFAABqfMUAAGp9xQAAan/FAABqgMUAAGqCxQAAaoPFAABqhcUAAGqGxQAAaojFAABqicUAAGqLxQAAaozFAABqjsUAAGqPxQAAapHFAABqksUAAGqUxQAAapXFAABql8UAAGqYxQAAaprFAABqm8UAAGqdxQAAap7FAABqoMUAAGqhxQAAaqPFAABqpMUAAGqmxQAAaqfFAABqqcUAAGqqxQAAaqzFAABqrcUAAGqvxQAAarDFAABqssUAAGqzxQAAarXFAABqtsUAAGq4xQAAarnFAABqu8UAAGq8xQAAar7FAABqv8UAAGrBxQAAasLFAABqxMUAAGrFxQAAasfFAABqyMUAAGrKxQAAasvFAABqzcUAAGrOxQAAatDFAABq0cUAAGrTxQAAatTFAABq1sUAAGrXxQAAatnFAABq2sUAAGrcxQAAat3FAABq38UAAGrgxQAAauLFAABq48UAAGrlxQAAaubFAABq6MUAAGrpxQAAauvFAABq7MUAAGruxQAAau/FAABq8cUAAGryxQAAavTFAABq9cUAAGr3xQAAavjFAABq+sUAAGr7xQAAav3FAABq/sUAAGoAxgAAagHGAABqA8YAAGoExgAAagbGAABqB8YAAGoJxgAAagrGAABqDMYAAGoNxgAAag/GAABqEMYAAGoSxgAAahPGAABqFcYAAGoWxgAAahjGAABqGcYAAGobxgAAahzGAABqHsYAAGofxgAAaiHGAABqIsYAAGokxgAAaiXGAABqJ8YAAGooxgAAairGAABqK8YAAGotxgAAai7GAABqMMYAAGoxxgAAajPGAABqNMYAAGo2xgAAajfGAABqOcYAAGo6xgAAajzGAABqPcYAAGo/xgAAakDGAABqQsYAAGpDxgAAakXGAABqRsYAAGpIxgAAaknGAABqS8YAAGpMxgAAak7GAABqT8YAAGpRxgAAalLGAABqVMYAAGpVxgAAalfGAABqWMYAAGpaxgAAalvGAABqXcYAAGpexgAAamDGAABqYcYAAGpjxgAAamTGAABqZsYAAGpnxgAAamnGAABqasYAAGpsxgAAam3GAABqb8YAAGpwxgAAanLGAABqc8YAAGp1xgAAanbGAABqeMYAAGp5xgAAanvGAABqfMYAAGp+xgAAan/GAABqgcYAAGqCxgAAaoTGAABqhcYAAGqHxgAAaojGAABqisYAAGqLxgAAao3GAABqjsYAAGqQxgAAapHGAABqk8YAAGqUxgAAapbGAABql8YAAGqZxgAAaprGAABqnMYAAGqdxgAAap/GAABqoMYAAGqixgAAaqPGAABqpcYAAGqmxgAAaqjGAABqqcYAAGqrxgAAaqzGAABqrsYAAGqvxgAAarHGAABqssYAAGq0xgAAarXGAABqt8YAAGq4xgAAarrGAABqu8YAAGq9xgAAar7GAABqwMYAAGrBxgAAasPGAABqxMYAAGrGxgAAasfGAABqycYAAGrKxgAAaszGAABqzcYAAGrPxgAAatDGAABq0sYAAGrTxgAAatXGAABq1sYAAGrYxgAAatnGAABq28YAAGrcxgAAat7GAABq38YAAGrhxgAAauLGAABq5MYAAGrlxgAAaufGAABq6MYAAGrqxgAAauvGAABq7cYAAGruxgAAavDGAABq8cYAAGrzxgAAavTGAABq9sYAAGr3xgAAavnGAABq+sYAAGr8xgAAav3GAABq/8YAAGoAxwAAagLHAABqA8cAAGoFxwAAagbHAABqCMcAAGoJxwAAagvHAABqDMcAAGoOxwAAag/HAABqEccAAGoSxwAAahTHAABqFccAAGoXxwAAahjHAABqGscAAGobxwAAah3HAABqHscAAGogxwAAaiHHAABqI8cAAGokxwAAaibHAABqJ8cAAGopxwAAairHAABqLMcAAGotxwAAai/HAABqMMcAAGoyxwAAajPHAABqNccAAGo2xwAAajjHAABqOccAAGo7xwAAajzHAABqPscAAGo/xwAAakHHAABqQscAAGpExwAAakXHAABqR8cAAGpIxwAAakrHAABqS8cAAGpNxwAAak7HAABqUMcAAGpRxwAAalPHAABqVMcAAGpWxwAAalfHAABqWccAAGpaxwAAalzHAABqXccAAGpfxwAAamDHAABqYscAAGpjxwAAamXHAABqZscAAGpoxwAAamnHAABqa8cAAGpsxwAAam7HAABqb8cAAGpxxwAAanLHAABqdMcAAGp1xwAAanfHAABqeMcAAGp6xwAAanvHAABqfccAAGp+xwAAaoDHAABqgccAAGqDxwAAaoTHAABqhscAAGqHxwAAaonHAABqiscAAGqMxwAAao3HAABqj8cAAGqQxwAAapLHAABqk8cAAGqVxwAAapbHAABqmMcAAGqZxwAAapvHAABqnMcAAGqexwAAap/HAABqoccAAGqixwAAaqTHAABqpccAAGqnxwAAaqjHAABqqscAAGqrxwAAaq3HAABqrscAAGqwxwAAarHHAABqs8cAAGq0xwAAarbHAABqt8cAAGq5xwAAarrHAABqvMcAAGq9xwAAar/HAABqwMcAAGrCxwAAasPHAABqxccAAGrGxwAAasjHAABqyccAAGrLxwAAaszHAABqzscAAGrPxwAAatHHAABq0scAAGrUxwAAatXHAABq18cAAGrYxwAAatrHAABq28cAAGrdxwAAat7HAABq4McAAGrhxwAAauPHAABq5McAAGrmxwAAaufHAABq6ccAAGrqxwAAauzHAABq7ccAAGrvxwAAavDHAABq8scAAGrzxwAAavXHAABq9scAAGr4xwAAavnHAABq+8cAAGr8xwAAav7HAABq/8cAAGoByAAAagLIAABqBMgAAGoFyAAAagfIAABqCMgAAGoKyAAAagvIAABqDcgAAGoOyAAAahDIAABqEcgAAGoTyAAAahTIAABqFsgAAGoXyAAAahnIAABqGsgAAGocyAAAah3IAABqH8gAAGogyAAAaiLIAABqI8gAAGolyAAAaibIAABqKMgAAGopyAAAaivIAABqLMgAAGouyAAAai/IAABqMcgAAGoyyAAAajTIAABqNcgAAGo3yAAAajjIAABqOsgAAGo7yAAAaj3IAABqPsgAAGpAyAAAakHIAABqQ8gAAGpEyAAAakbIAABqR8gAAGpJyAAAakrIAABqTMgAAGpNyAAAak/IAABqUMgAAGpSyAAAalPIAABqVcgAAGpWyAAAaljIAABqWcgAAGpbyAAAalzIAABqXsgAAGpfyAAAamHIAABqYsgAAGpkyAAAamXIAABqZ8gAAGpoyAAAamrIAABqa8gAAGptyAAAam7IAABqcMgAAGpxyAAAanPIAABqdMgAAGp2yAAAanfIAABqecgAAGp6yAAAanzIAABqfcgAAGp/yAAAaoDIAABqgsgAAGqDyAAAaoXIAABqhsgAAGqIyAAAaonIAABqi8gAAGqMyAAAao7IAABqj8gAAGqRyAAAapLIAABqlMgAAGqVyAAAapfIAABqmMgAAGqayAAAapvIAABqncgAAGqeyAAAaqDIAABqocgAAGqjyAAAaqTIAABqpsgAAGqnyAAAaqnIAABqqsgAAGqsyAAAaq3IAABqr8gAAGqwyAAAarLIAABqs8gAAGq1yAAAarbIAABquMgAAGq5yAAAarvIAABqvMgAAGq+yAAAar/IAABqwcgAAGrCyAAAasTIAABqxcgAAGrHyAAAasjIAABqysgAAGrLyAAAas3IAABqzsgAAGrQyAAAatHIAABq08gAAGrUyAAAatbIAABq18gAAGrZyAAAatrIAABq3MgAAGrdyAAAat/IAABq4MgAAGriyAAAauPIAABq5cgAAGrmyAAAaujIAABq6cgAAGrryAAAauzIAABq7sgAAGrvyAAAavHIAABq8sgAAGr0yAAAavXIAABq98gAAGr4yAAAavrIAABq+8gAAGr9yAAAav7IAABqAMkAAGoByQAAagPJAABqBMkAAGoGyQAAagfJAABqCckAAGoKyQAAagzJAABqDckAAGoPyQAAahDJAABqEskAAGoTyQAAahXJAABqFskAAGoYyQAAahnJAABqG8kAAGocyQAAah7JAABqH8kAAGohyQAAaiLJAABqJMkAAGolyQAAaifJAABqKMkAAGoqyQAAaivJAABqLckAAGouyQAAajDJAABqMckAAGozyQAAajTJAABqNskAAGo3yQAAajnJAABqOskAAGo8yQAAaj3JAABqP8kAAGpAyQAAakLJAABqQ8kAAGpFyQAAakbJAABqSMkAAGpJyQAAakvJAABqTMkAAGpOyQAAak/JAABqUckAAGpSyQAAalTJAABqVckAAGpXyQAAaljJAABqWskAAGpbyQAAal3JAABqXskAAGpgyQAAamHJAABqY8kAAGpkyQAAambJAABqZ8kAAGppyQAAamrJAABqbMkAAGptyQAAam/JAABqcMkAAGpyyQAAanPJAABqdckAAGp2yQAAanjJAABqeckAAGp7yQAAanzJAABqfskAAGp/yQAAaoHJAABqgskAAGqEyQAAaoXJAABqh8kAAGqIyQAAaorJAABqi8kAAGqNyQAAao7JAABqkMkAAGqRyQAAapPJAABqlMkAAGqWyQAAapfJAABqmckAAGqayQAAapzJAABqnckAAGqfyQAAaqDJAABqoskAAGqjyQAAaqXJAABqpskAAGqoyQAAaqnJAABqq8kAAGqsyQAAaq7JAABqr8kAAGqxyQAAarLJAABqtMkAAGq1yQAAarfJAABquMkAAGq6yQAAarvJAABqvckAAGq+yQAAasDJAABqwckAAGrDyQAAasTJAABqxskAAGrHyQAAasnJAABqyskAAGrMyQAAas3JAABqz8kAAGrQyQAAatLJAABq08kAAGrVyQAAatbJAABq2MkAAGrZyQAAatvJAABq3MkAAGreyQAAat/JAABq4ckAAGriyQAAauTJAABq5ckAAGrnyQAAaujJAABq6skAAGrryQAAau3JAABq7skAAGrwyQAAavHJAABq88kAAGr0yQAAavbJAABq98kAAGr5yQAAavrJAABq/MkAAGr9yQAAav/JAABqAMoAAGoCygAAagPKAABqBcoAAGoGygAAagjKAABqCcoAAGoLygAAagzKAABqDsoAAGoPygAAahHKAABqEsoAAGoUygAAahXKAABqF8oAAGoYygAAahrKAABqG8oAAGodygAAah7KAABqIMoAAGohygAAaiPKAABqJMoAAGomygAAaifKAABqKcoAAGoqygAAaizKAABqLcoAAGovygAAajDKAABqMsoAAGozygAAajXKAABqNsoAAGo4ygAAajnKAABqO8oAAGo8ygAAaj7KAABqP8oAAGpBygAAakLKAABqRMoAAGpFygAAakfKAABqSMoAAGpKygAAakvKAABqTcoAAGpOygAAalDKAABqUcoAAGpTygAAalTKAABqVsoAAGpXygAAalnKAABqWsoAAGpcygAAal3KAABqX8oAAGpgygAAamLKAABqY8oAAGplygAAambKAABqaMoAAGppygAAamvKAABqbMoAAGpuygAAam/KAABqccoAAGpyygAAanTKAABqdcoAAGp3ygAAanjKAABqesoAAGp7ygAAan3KAABqfsoAAGqAygAAaoHKAABqg8oAAGqEygAAaobKAABqh8oAAGqJygAAaorKAABqjMoAAGqNygAAao/KAABqkMoAAGqSygAAapPKAABqlcoAAGqWygAAapjKAABqmcoAAGqbygAAapzKAABqnsoAAGqfygAAaqHKAABqosoAAGqkygAAaqXKAABqp8oAAGqoygAAaqrKAABqq8oAAGqtygAAaq7KAABqsMoAAGqxygAAarPKAABqtMoAAGq2ygAAarfKAABqucoAAGq6ygAAarzKAABqvcoAAGq/ygAAasDKAABqwsoAAGrDygAAasXKAABqxsoAAGrIygAAasnKAABqy8oAAGrMygAAas7KAABqz8oAAGrRygAAatLKAABq1MoAAGrVygAAatfKAABq2MoAAGraygAAatvKAABq3coAAGreygAAauDKAABq4coAAGrjygAAauTKAABq5soAAGrnygAAaunKAABq6soAAGrsygAAau3KAABq78oAAGrwygAAavLKAABq88oAAGr1ygAAavbKAABq+MoAAGr5ygAAavvKAABq/MoAAGr+ygAAav/KAABqAcsAAGoCywAAagTLAABqBcsAAGoHywAAagjLAABqCssAAGoLywAAag3LAABqDssAAGoQywAAahHLAABqE8sAAGoUywAAahbLAABqF8sAAGoZywAAahrLAABqHMsAAGodywAAah/LAABqIMsAAGoiywAAaiPLAABqJcsAAGomywAAaijLAABqKcsAAGorywAAaizLAABqLssAAGovywAAajHLAABqMssAAGo0ywAAajXLAABqN8sAAGo4ywAAajrLAABqO8sAAGo9ywAAaj7LAABqQMsAAGpBywAAakPLAABqRMsAAGpGywAAakfLAABqScsAAGpKywAAakzLAABqTcsAAGpPywAAalDLAABqUssAAGpTywAAalXLAABqVssAAGpYywAAalnLAABqW8sAAGpcywAAal7LAABqX8sAAGphywAAamLLAABqZMsAAGplywAAamfLAABqaMsAAGpqywAAamvLAABqbcsAAGpuywAAanDLAABqccsAAGpzywAAanTLAABqdssAAGp3ywAAannLAABqessAAGp8ywAAan3LAABqf8sAAGqAywAAaoLLAABqg8sAAGqFywAAaobLAABqiMsAAGqJywAAaovLAABqjMsAAGqOywAAao/LAABqkcsAAGqSywAAapTLAABqlcsAAGqXywAAapjLAABqmssAAGqbywAAap3LAABqnssAAGqgywAAaqHLAABqo8sAAGqkywAAaqbLAABqp8sAAGqpywAAaqrLAABqrMsAAGqtywAAaq/LAABqsMsAAGqyywAAarPLAABqtcsAAGq2ywAAarjLAABqucsAAGq7ywAAarzLAABqvssAAGq/ywAAasHLAABqwssAAGrEywAAasXLAABqx8sAAGrIywAAasrLAABqy8sAAGrNywAAas7LAABq0MsAAGrRywAAatPLAABq1MsAAGrWywAAatfLAABq2csAAGraywAAatzLAABq3csAAGrfywAAauDLAABq4ssAAGrjywAAauXLAABq5ssAAGroywAAaunLAABq68sAAGrsywAAau7LAABq78sAAGrxywAAavLLAABq9MsAAGr1ywAAavfLAABq+MsAAGr6ywAAavvLAABq/csAAGr+ywAAagDMAABqAcwAAGoDzAAAagTMAABqBswAAGoHzAAAagnMAABqCswAAGoMzAAAag3MAABqD8wAAGoQzAAAahLMAABqE8wAAGoVzAAAahbMAABqGMwAAGoZzAAAahvMAABqHMwAAGoezAAAah/MAABqIcwAAGoizAAAaiTMAABqJcwAAGonzAAAaijMAABqKswAAGorzAAAai3MAABqLswAAGowzAAAajHMAABqM8wAAGo0zAAAajbMAABqN8wAAGo5zAAAajrMAABqPMwAAGo9zAAAaj/MAABqQMwAAGpCzAAAakPMAABqRcwAAGpGzAAAakjMAABqScwAAGpLzAAAakzMAABqTswAAGpPzAAAalHMAABqUswAAGpUzAAAalXMAABqV8wAAGpYzAAAalrMAABqW8wAAGpdzAAAal7MAABqYMwAAGphzAAAamPMAABqZMwAAGpmzAAAamfMAABqacwAAGpqzAAAamzMAABqbcwAAGpvzAAAanDMAABqcswAAGpzzAAAanXMAABqdswAAGp4zAAAannMAABqe8wAAGp8zAAAan7MAABqf8wAAGqBzAAAaoLMAABqhMwAAGqFzAAAaofMAABqiMwAAGqKzAAAaovMAABqjcwAAGqOzAAAapDMAABqkcwAAGqTzAAAapTMAABqlswAAGqXzAAAapnMAABqmswAAGqczAAAap3MAABqn8wAAGqgzAAAaqLMAABqo8wAAGqlzAAAaqbMAABqqMwAAGqpzAAAaqvMAABqrMwAAGquzAAAaq/MAABqscwAAGqyzAAAarTMAABqtcwAAGq3zAAAarjMAABquswAAGq7zAAAar3MAABqvswAAGrAzAAAasHMAABqw8wAAGrEzAAAasbMAABqx8wAAGrJzAAAasrMAABqzMwAAGrNzAAAas/MAABq0MwAAGrSzAAAatPMAABq1cwAAGrWzAAAatjMAABq2cwAAGrbzAAAatzMAABq3swAAGrfzAAAauHMAABq4swAAGrkzAAAauXMAABq58wAAGrozAAAaurMAABq68wAAGrtzAAAau7MAABq8MwAAGrxzAAAavPMAABq9MwAAGr2zAAAavfMAABq+cwAAGr6zAAAavzMAABq/cwAAGr/zAAAagDNAABqAs0AAGoDzQAAagXNAABqBs0AAGoIzQAAagnNAABqC80AAGoMzQAAag7NAABqD80AAGoRzQAAahLNAABqFM0AAGoVzQAAahfNAABqGM0AAGoazQAAahvNAABqHc0AAGoezQAAaiDNAABqIc0AAGojzQAAaiTNAABqJs0AAGonzQAAainNAABqKs0AAGoszQAAai3NAABqL80AAGowzQAAajLNAABqM80AAGo1zQAAajbNAABqOM0AAGo5zQAAajvNAABqPM0AAGo+zQAAaj/NAABqQc0AAGpCzQAAakTNAABqRc0AAGpHzQAAakjNAABqSs0AAGpLzQAAak3NAABqTs0AAGpQzQAAalHNAABqU80AAGpUzQAAalbNAABqV80AAGpZzQAAalrNAABqXM0AAGpdzQAAal/NAABqYM0AAGpizQAAamPNAABqZc0AAGpmzQAAamjNAABqac0AAGprzQAAamzNAABqbs0AAGpvzQAAanHNAABqcs0AAGp0zQAAanXNAABqd80AAGp4zQAAanrNAABqe80AAGp9zQAAan7NAABqgM0AAGqBzQAAaoPNAABqhM0AAGqGzQAAaofNAABqic0AAGqKzQAAaozNAABqjc0AAGqPzQAAapDNAABqks0AAGqTzQAAapXNAABqls0AAGqYzQAAapnNAABqm80AAGqczQAAap7NAABqn80AAGqhzQAAaqLNAABqpM0AAGqlzQAAaqfNAABqqM0AAGqqzQAAaqvNAABqrc0AAGquzQAAarDNAABqsc0AAGqzzQAAarTNAABqts0AAGq3zQAAarnNAABqus0AAGq8zQAAar3NAABqv80AAGrAzQAAasLNAABqw80AAGrFzQAAasbNAABqyM0AAGrJzQAAasvNAABqzM0AAGrOzQAAas/NAABq0c0AAGrSzQAAatTNAABq1c0AAGrXzQAAatjNAABq2s0AAGrbzQAAat3NAABq3s0AAGrgzQAAauHNAABq480AAGrkzQAAaubNAABq580AAGrpzQAAaurNAABq7M0AAGrtzQAAau/NAABq8M0AAGryzQAAavPNAABq9c0AAGr2zQAAavjNAABq+c0AAGr7zQAAavzNAABq/s0AAGr/zQAAagHOAABqAs4AAGoEzgAAagXOAABqB84AAGoIzgAAagrOAABqC84AAGoNzgAAag7OAABqEM4AAGoRzgAAahPOAABqFM4AAGoWzgAAahfOAABqGc4AAGoazgAAahzOAABqHc4AAGofzgAAaiDOAABqIs4AAGojzgAAaiXOAABqJs4AAGoozgAAainOAABqK84AAGoszgAAai7OAABqL84AAGoxzgAAajLOAABqNM4AAGo1zgAAajfOAABqOM4AAGo6zgAAajvOAABqPc4AAGo+zgAAakDOAABqQc4AAGpDzgAAakTOAABqRs4AAGpHzgAAaknOAABqSs4AAGpMzgAAak3OAABqT84AAGpQzgAAalLOAABqU84AAGpVzgAAalbOAABqWM4AAGpZzgAAalvOAABqXM4AAGpezgAAal/OAABqYc4AAGpizgAAamTOAABqZc4AAGpnzgAAamjOAABqas4AAGprzgAAam3OAABqbs4AAGpwzgAAanHOAABqc84AAGp0zgAAanbOAABqd84AAGp5zgAAanrOAABqfM4AAGp9zgAAan/OAABqgM4AAGqCzgAAaoPOAABqhc4AAGqGzgAAaojOAABqic4AAGqLzgAAaozOAABqjs4AAGqPzgAAapHOAABqks4AAGqUzgAAapXOAABql84AAGqYzgAAaprOAABqm84AAGqdzgAAap7OAABqoM4AAGqhzgAAaqPOAABqpM4AAGqmzgAAaqfOAABqqc4AAGqqzgAAaqzOAABqrc4AAGqvzgAAarDOAABqss4AAGqzzgAAarXOAABqts4AAGq4zgAAarnOAABqu84AAGq8zgAAar7OAABqv84AAGrBzgAAasLOAABqxM4AAGrFzgAAasfOAABqyM4AAGrKzgAAasvOAABqzc4AAGrOzgAAatDOAABq0c4AAGrTzgAAatTOAABq1s4AAGrXzgAAatnOAABq2s4AAGrczgAAat3OAABq384AAGrgzgAAauLOAABq484AAGrlzgAAaubOAABq6M4AAGrpzgAAauvOAABq7M4AAGruzgAAau/OAABq8c4AAGryzgAAavTOAABq9c4AAGr3zgAAavjOAABq+s4AAGr7zgAAav3OAABq/s4AAGoAzwAAdShqAc8AAGoDzwAAagTPAABqBs8AAGoHzwAAagnPAABqCs8AAGoMzwAAag3PAABqD88AAGoQzwAAahLPAABqE88AAGoVzwAAahbPAABqGM8AAGoZzwAAahvPAABqHM8AAGoezwAAah/PAABqIc8AAGoizwAAaiTPAABqJc8AAGonzwAAaijPAABqKs8AAGorzwAAai3PAABqLs8AAGowzwAAajHPAABqM88AAGo0zwAAajbPAABqN88AAGo5zwAAajrPAABqPM8AAGo9zwAAaj/PAABqQM8AAGpCzwAAakPPAABqRc8AAGpGzwAAakjPAABqSc8AAGpLzwAAakzPAABqTs8AAGpPzwAAalHPAABqUs8AAGpUzwAAalXPAABqV88AAGpYzwAAalrPAABqW88AAGpdzwAAal7PAABqYM8AAGphzwAAamPPAABqZM8AAGpmzwAAamfPAABqac8AAGpqzwAAamzPAABqbc8AAGpvzwAAanDPAABqcs8AAGpzzwAAanXPAABqds8AAGp4zwAAannPAABqe88AAGp8zwAAan7PAABqf88AAGqBzwAAaoLPAABqhM8AAGqFzwAAaofPAABqiM8AAGqKzwAAaovPAABqjc8AAGqOzwAAapDPAABqkc8AAGqTzwAAapTPAABqls8AAGqXzwAAapnPAABqms8AAGqczwAAap3PAABqn88AAGqgzwAAaqLPAABqo88AAGqlzwAAaqbPAABqqM8AAGqpzwAAaqvPAABqrM8AAGquzwAAaq/PAABqsc8AAGqyzwAAarTPAABqtc8AAGq3zwAAarjPAABqus8AAGq7zwAAar3PAABqvs8AAGrAzwAAasHPAABqw88AAGrEzwAAasbPAABqx88AAGrJzwAAasrPAABqzM8AAGrNzwAAas/PAABq0M8AAGrSzwAAatPPAABq1c8AAGrWzwAAatjPAABq2c8AAGrbzwAAatzPAABq3s8AAGrfzwAAauHPAABq4s8AAGrkzwAAauXPAABq588AAGrozwAAaurPAABq688AAGrtzwAAau7PAABq8M8AAGrxzwAAavPPAABq9M8AAGr2zwAAavfPAABq+c8AAGr6zwAAavzPAABq/c8AAGr/zwAAagDQAABqAtAAAGoD0AAAagXQAABqBtAAAGoI0AAAagnQAABqC9AAAGoM0AAAag7QAABqD9AAAGoR0AAAahLQAABqFNAAAGoV0AAAahfQAABqGNAAAGoa0AAAahvQAABqHdAAAGoe0AAAaiDQAABqIdAAAGoj0AAAaiTQAABqJtAAAGon0AAAainQAABqKtAAAGos0AAAai3QAABqL9AAAGow0AAAajLQAABqM9AAAGo10AAAajbQAABqONAAAGo50AAAajvQAABqPNAAAGo+0AAAaj/QAABqQdAAAGpC0AAAakTQAABqRdAAAGpH0AAAakjQAABqStAAAGpL0AAAak3QAABqTtAAAGpQ0AAAalHQAABqU9AAAGpU0AAAalbQAABqV9AAAGpZ0AAAalrQAABqXNAAAGpd0AAAal/QAABqYNAAAGpi0AAAamPQAABqZdAAAGpm0AAAamjQAABqadAAAGpr0AAAamzQAABqbtAAAGpv0AAAanHQAABqctAAAGp00AAAanXQAABqd9AAAGp40AAAanrQAABqe9AAAGp90AAAan7QAABqgNAAAGqB0AAAaoPQAABqhNAAAGqG0AAAaofQAABqidAAAGqK0AAAaozQAABqjdAAAGqP0AAAapDQAABqktAAAGqT0AAAapXQAABqltAAAGqY0AAAapnQAABqm9AAAGqc0AAAap7QAABqn9AAAGqh0AAAaqLQAABqpNAAAGql0AAAaqfQAABqqNAAAGqq0AAAaqvQAABqrdAAAGqu0AAAarDQAABqsdAAAGqz0AAAarTQAABqttAAAGq30AAAarnQAABqutAAAGq80AAAar3QAABqv9AAAGrA0AAAasLQAABqw9AAAGrF0AAAasbQAABqyNAAAGrJ0AAAasvQAABqzNAAAGrO0AAAas/QAABq0dAAAGrS0AAAatTQAABq1dAAAGrX0AAAatjQAABq2tAAAGrb0AAAat3QAABq3tAAAGrg0AAAauHQAABq49AAAGrk0AAAaubQAABq59AAAGrp0AAAaurQAABq7NAAAGrt0AAAau/QAABq8NAAAGry0AAAavPQAABq9dAAAGr20AAAavjQAABq+dAAAGr70AAAavzQAABq/tAAAGr/0AAAagHRAABqAtEAAGoE0QAAagXRAABqB9EAAGoI0QAAagrRAABqC9EAAGoN0QAAag7RAABqENEAAGoR0QAAahPRAABqFNEAAGoW0QAAahfRAABqGdEAAGoa0QAAahzRAABqHdEAAGof0QAAaiDRAABqItEAAGoj0QAAaiXRAABqJtEAAGoo0QAAainRAABqK9EAAGos0QAAai7RAABqL9EAAGox0QAAajLRAABqNNEAAGo10QAAajfRAABqONEAAGo60QAAajvRAABqPdEAAGo+0QAAakDRAABqQdEAAGpD0QAAakTRAABqRtEAAGpH0QAAaknRAABqStEAAGpM0QAAak3RAABqT9EAAGpQ0QAAalLRAABqU9EAAGpV0QAAalbRAABqWNEAAGpZ0QAAalvRAABqXNEAAGpe0QAAal/RAABqYdEAAGpi0QAAamTRAABqZdEAAGpn0QAAamjRAABqatEAAGpr0QAAam3RAABqbtEAAGpw0QAAanHRAABqc9EAAGp00QAAanbRAABqd9EAAGp50QAAanrRAABqfNEAAGp90QAAan/RAABqgNEAAGqC0QAAaoPRAABqhdEAAGqG0QAAaojRAABqidEAAGqL0QAAaozRAABqjtEAAGqP0QAAapHRAABqktEAAGqU0QAAapXRAABql9EAAGqY0QAAaprRAABqm9EAAGqd0QAAap7RAABqoNEAAGqh0QAAaqPRAABqpNEAAGqm0QAAaqfRAABqqdEAAGqq0QAAaqzRAABqrdEAAGqv0QAAarDRAABqstEAAGqz0QAAarXRAABqttEAAGq40QAAarnRAABqu9EAAGq80QAAar7RAABqv9EAAGrB0QAAasLRAABqxNEAAGrF0QAAasfRAABqyNEAAGrK0QAAasvRAABqzdEAAGrO0QAAatDRAABq0dEAAGrT0QAAatTRAABq1tEAAGrX0QAAatnRAABq2tEAAGrc0QAAat3RAABq39EAAGrg0QAAauLRAABq49EAAGrl0QAAaubRAABq6NEAAGrp0QAAauvRAABq7NEAAGru0QAAau/RAABq8dEAAGry0QAAavTRAABq9dEAAGr30QAAdWrlMAEAfZQoaucwAQBq6TABAGrqMAEAauwwAQBq7TABAGrvMAEAamWiAABqZ6IAAGpoogAAamqiAABqa6IAAGptogAAam6iAABqcKIAAGpxogAAanOiAABqdKIAAGp2ogAAaneiAABqeaIAAGp6ogAAanyiAABqfaIAAGp/ogAAaoCiAABqgqIAAGqDogAAaoWiAABqhqIAAGqIogAAaomiAABqi6IAAGqMogAAao6iAABqj6IAAGqRogAAapKiAABqlKIAAGqVogAAapeiAABqmKIAAGqaogAAapuiAABqnaIAAGqeogAAaqCiAABqoaIAAGqjogAAaqSiAABqpqIAAGqnogAAaqmiAABqqqIAAGqsogAAaq2iAABqr6IAAGqwogAAarKiAABqs6IAAGq1ogAAaraiAABquKIAAGq5ogAAaruiAABqvKIAAGq+ogAAar+iAABqwaIAAGrCogAAasSiAABqxaIAAGrHogAAasiiAABqyqIAAGrLogAAas2iAABqzqIAAGrQogAAatGiAABq06IAAGrUogAAataiAABq16IAAGrZogAAatqiAABq3KIAAGrdogAAat+iAABq4KIAAGriogAAauOiAABq5aIAAGrmogAAauiiAABq6aIAAGrrogAAauyiAABq7qIAAGrvogAAavGiAABq8qIAAGr0ogAAavWiAABq96IAAGr4ogAAavqiAABq+6IAAGr9ogAAav6iAABqAKMAAGoBowAAagOjAABqBKMAAGoGowAAagejAABqCaMAAGoKowAAagyjAABqDaMAAGoPowAAahCjAABqEqMAAGoTowAAahWjAABqFqMAAGoYowAAahmjAABqG6MAAGocowAAah6jAABqH6MAAGohowAAaiKjAABqJKMAAGolowAAaiejAABqKKMAAGoqowAAaiujAABqLaMAAGouowAAajCjAABqMaMAAGozowAAajSjAABqNqMAAGo3owAAajmjAABqOqMAAGo8owAAaj2jAABqP6MAAGpAowAAakKjAABqQ6MAAGpFowAAakajAABqSKMAAGpJowAAakujAABqTKMAAGpOowAAak+jAABqUaMAAGpSowAAalSjAABqVaMAAGpXowAAalijAABqWqMAAGpbowAAal2jAABqXqMAAGpgowAAamGjAABqY6MAAGpkowAAamajAABqZ6MAAGppowAAamqjAABqbKMAAGptowAAam+jAABqcKMAAGpyowAAanOjAABqdaMAAGp2owAAanijAABqeaMAAGp7owAAanyjAABqfqMAAGp/owAAaoGjAABqgqMAAGqEowAAaoWjAABqh6MAAGqIowAAaoqjAABqi6MAAGqNowAAao6jAABqkKMAAGqRowAAapOjAABqlKMAAGqWowAAapejAABqmaMAAGqaowAAapyjAABqnaMAAGqfowAAaqCjAABqoqMAAGqjowAAaqWjAABqpqMAAGqoowAAaqmjAABqq6MAAGqsowAAaq6jAABqr6MAAGqxowAAarKjAABqtKMAAGq1owAAarejAABquKMAAGq6owAAarujAABqvaMAAGq+owAAasCjAABqwaMAAGrDowAAasSjAABqxqMAAGrHowAAasmjAABqyqMAAGrMowAAas2jAABqz6MAAGrQowAAatKjAABq06MAAGrVowAAatajAABq2KMAAGrZowAAatujAABq3KMAAGreowAAat+jAABq4aMAAGriowAAauSjAABq5aMAAGrnowAAauijAABq6qMAAGrrowAAau2jAABq7qMAAGrwowAAavGjAABq86MAAGr0owAAavajAABq96MAAGr5owAAavqjAABq/KMAAGr9owAAav+jAABqAKQAAGoCpAAAagOkAABqBaQAAGoGpAAAagikAABqCaQAAGoLpAAAagykAABqDqQAAGoPpAAAahGkAABqEqQAAGoUpAAAahWkAABqF6QAAGoYpAAAahqkAABqG6QAAGodpAAAah6kAABqIKQAAGohpAAAaiOkAABqJKQAAGompAAAaiekAABqKaQAAGoqpAAAaiykAABqLaQAAGovpAAAajCkAABqMqQAAGozpAAAajWkAABqNqQAAGo4pAAAajmkAABqO6QAAGo8pAAAaj6kAABqP6QAAGpBpAAAakKkAABqRKQAAGpFpAAAakekAABqSKQAAGpKpAAAakukAABqTaQAAGpOpAAAalCkAABqUaQAAGpTpAAAalSkAABqVqQAAGpXpAAAalmkAABqWqQAAGpcpAAAal2kAABqX6QAAGpgpAAAamKkAABqY6QAAGplpAAAamakAABqaKQAAGpppAAAamukAABqbKQAAGpupAAAam+kAABqcaQAAGpypAAAanSkAABqdaQAAGp3pAAAanikAABqeqQAAGp7pAAAan2kAABqfqQAAGqApAAAaoGkAABqg6QAAGqEpAAAaoakAABqh6QAAGqJpAAAaoqkAABqjKQAAGqNpAAAao+kAABqkKQAAGqSpAAAapOkAABqlaQAAGqWpAAAapikAABqmaQAAGqbpAAAapykAABqnqQAAGqfpAAAaqGkAABqoqQAAGqkpAAAaqWkAABqp6QAAGqopAAAaqqkAABqq6QAAGqtpAAAaq6kAABqsKQAAGqxpAAAarOkAABqtKQAAGq2pAAAarekAABquaQAAGq6pAAAarykAABqvaQAAGq/pAAAasCkAABqwqQAAGrDpAAAasWkAABqxqQAAGrIpAAAasmkAABqy6QAAGrMpAAAas6kAABqz6QAAGrRpAAAatKkAABq1KQAAGrVpAAAatekAABq2KQAAGrapAAAatukAABq3aQAAGrepAAAauCkAABq4aQAAGrjpAAAauSkAABq5qQAAGrnpAAAaumkAABq6qQAAGrspAAAau2kAABq76QAAGrwpAAAavKkAABq86QAAGr1pAAAavakAABq+KQAAGr5pAAAavukAABq/KQAAGr+pAAAav+kAABqAaUAAGoCpQAAagSlAABqBaUAAGoHpQAAagilAABqCqUAAGoLpQAAag2lAABqDqUAAGoQpQAAahGlAABqE6UAAGoUpQAAahalAABqF6UAAGoZpQAAahqlAABqHKUAAGodpQAAah+lAABqIKUAAGoipQAAaiOlAABqJaUAAGompQAAaiilAABqKaUAAGorpQAAaiylAABqLqUAAGovpQAAajGlAABqMqUAAGo0pQAAajWlAABqN6UAAGo4pQAAajqlAABqO6UAAGo9pQAAaj6lAABqQKUAAGpBpQAAakOlAABqRKUAAGpGpQAAakelAABqSaUAAGpKpQAAakylAABqTaUAAGpPpQAAalClAABqUqUAAGpTpQAAalWlAABqVqUAAGpYpQAAalmlAABqW6UAAGpcpQAAal6lAABqX6UAAGphpQAAamKlAABqZKUAAGplpQAAamelAABqaKUAAGpqpQAAamulAABqbaUAAGpupQAAanClAABqcaUAAGpzpQAAanSlAABqdqUAAGp3pQAAanmlAABqeqUAAGp8pQAAan2lAABqf6UAAGqApQAAaoKlAABqg6UAAGqFpQAAaoalAABqiKUAAGqJpQAAaoulAABqjKUAAGqOpQAAao+lAABqkaUAAGqSpQAAapSlAABqlaUAAGqXpQAAapilAABqmqUAAGqbpQAAap2lAABqnqUAAGqgpQAAaqGlAABqo6UAAGqkpQAAaqalAABqp6UAAGqppQAAaqqlAABqrKUAAGqtpQAAaq+lAABqsKUAAGqypQAAarOlAABqtaUAAGq2pQAAarilAABquaUAAGq7pQAAarylAABqvqUAAGq/pQAAasGlAABqwqUAAGrEpQAAasWlAABqx6UAAGrIpQAAasqlAABqy6UAAGrNpQAAas6lAABq0KUAAGrRpQAAatOlAABq1KUAAGrWpQAAatelAABq2aUAAGrapQAAatylAABq3aUAAGrfpQAAauClAABq4qUAAGrjpQAAauWlAABq5qUAAGropQAAaumlAABq66UAAGrspQAAau6lAABq76UAAGrxpQAAavKlAABq9KUAAGr1pQAAavelAABq+KUAAGr6pQAAavulAABq/aUAAGr+pQAAagCmAABqAaYAAGoDpgAAagSmAABqBqYAAGoHpgAAagmmAABqCqYAAGoMpgAAag2mAABqD6YAAGoQpgAAahKmAABqE6YAAGoVpgAAahamAABqGKYAAGoZpgAAahumAABqHKYAAGoepgAAah+mAABqIaYAAGoipgAAaiSmAABqJaYAAGonpgAAaiimAABqKqYAAGorpgAAai2mAABqLqYAAGowpgAAajGmAABqM6YAAGo0pgAAajamAABqN6YAAGo5pgAAajqmAABqPKYAAGo9pgAAaj+mAABqQKYAAGpCpgAAakOmAABqRaYAAGpGpgAAakimAABqSaYAAGpLpgAAakymAABqTqYAAGpPpgAAalGmAABqUqYAAGpUpgAAalWmAABqV6YAAGpYpgAAalqmAABqW6YAAGpdpgAAal6mAABqYKYAAGphpgAAamOmAABqZKYAAGpmpgAAamemAABqaaYAAGpqpgAAamymAABqbaYAAGpvpgAAanCmAABqcqYAAGpzpgAAanWmAABqdqYAAGp4pgAAanmmAABqe6YAAGp8pgAAan6mAABqf6YAAGqBpgAAaoKmAABqhKYAAGqFpgAAaoemAABqiKYAAGqKpgAAaoumAABqjaYAAGqOpgAAapCmAABqkaYAAGqTpgAAapSmAABqlqYAAGqXpgAAapmmAABqmqYAAGqcpgAAap2mAABqn6YAAGqgpgAAaqKmAABqo6YAAGqlpgAAaqamAABqqKYAAGqppgAAaqumAABqrKYAAGqupgAAaq+mAABqsaYAAGqypgAAarSmAABqtaYAAGq3pgAAarimAABquqYAAGq7pgAAar2mAABqvqYAAGrApgAAasGmAABqw6YAAGrEpgAAasamAABqx6YAAGrJpgAAasqmAABqzKYAAGrNpgAAas+mAABq0KYAAGrSpgAAatOmAABq1aYAAGrWpgAAatimAABq2aYAAGrbpgAAatymAABq3qYAAGrfpgAAauGmAABq4qYAAGrkpgAAauWmAABq56YAAGropgAAauqmAABq66YAAGrtpgAAau6mAABq8KYAAGrxpgAAavOmAABq9KYAAGr2pgAAavemAABq+aYAAGr6pgAAavymAABq/aYAAGr/pgAAagCnAABqAqcAAGoDpwAAagWnAABqBqcAAGoIpwAAagmnAABqC6cAAGoMpwAAag6nAABqD6cAAGoRpwAAahKnAABqFKcAAGoVpwAAahenAABqGKcAAGoapwAAahunAABqHacAAGoepwAAaiCnAABqIacAAGojpwAAaiSnAABqJqcAAGonpwAAaimnAABqKqcAAGospwAAai2nAABqL6cAAGowpwAAajKnAABqM6cAAGo1pwAAajanAABqOKcAAGo5pwAAajunAABqPKcAAGo+pwAAaj+nAABqQacAAGpCpwAAakSnAABqRacAAGpHpwAAakinAABqSqcAAGpLpwAAak2nAABqTqcAAGpQpwAAalGnAABqU6cAAGpUpwAAalanAABqV6cAAGpZpwAAalqnAABqXKcAAGpdpwAAal+nAABqYKcAAGpipwAAamOnAABqZacAAGpmpwAAaminAABqaacAAGprpwAAamynAABqbqcAAGpvpwAAanGnAABqcqcAAGp0pwAAanWnAABqd6cAAGp4pwAAanqnAABqe6cAAGp9pwAAan6nAABqgKcAAGqBpwAAaoOnAABqhKcAAGqGpwAAaoenAABqiacAAGqKpwAAaoynAABqjacAAGqPpwAAapCnAABqkqcAAGqTpwAAapWnAABqlqcAAGqYpwAAapmnAABqm6cAAGqcpwAAap6nAABqn6cAAGqhpwAAaqKnAABqpKcAAGqlpwAAaqenAABqqKcAAGqqpwAAaqunAABqracAAGqupwAAarCnAABqsacAAGqzpwAAarSnAABqtqcAAGq3pwAAarmnAABquqcAAGq8pwAAar2nAABqv6cAAGrApwAAasKnAABqw6cAAGrFpwAAasanAABqyKcAAGrJpwAAasunAABqzKcAAGrOpwAAas+nAABq0acAAGrSpwAAatSnAABq1acAAGrXpwAAatinAABq2qcAAGrbpwAAat2nAABq3qcAAGrgpwAAauGnAABq46cAAGrkpwAAauanAABq56cAAGrppwAAauqnAABq7KcAAGrtpwAAau+nAABq8KcAAGrypwAAavOnAABq9acAAGr2pwAAavinAABq+acAAGr7pwAAavynAABq/qcAAGr/pwAAagGoAABqAqgAAGoEqAAAagWoAABqB6gAAGoIqAAAagqoAABqC6gAAGoNqAAAag6oAABqEKgAAGoRqAAAahOoAABqFKgAAGoWqAAAaheoAABqGagAAGoaqAAAahyoAABqHagAAGofqAAAaiCoAABqIqgAAGojqAAAaiWoAABqJqgAAGooqAAAaimoAABqK6gAAGosqAAAai6oAABqL6gAAGoxqAAAajKoAABqNKgAAGo1qAAAajeoAABqOKgAAGo6qAAAajuoAABqPagAAGo+qAAAakCoAABqQagAAGpDqAAAakSoAABqRqgAAGpHqAAAakmoAABqSqgAAGpMqAAAak2oAABqT6gAAGpQqAAAalKoAABqU6gAAGpVqAAAalaoAABqWKgAAGpZqAAAaluoAABqXKgAAGpeqAAAal+oAABqYagAAGpiqAAAamSoAABqZagAAGpnqAAAamioAABqaqgAAGprqAAAam2oAABqbqgAAGpwqAAAanGoAABqc6gAAGp0qAAAanaoAABqd6gAAGp5qAAAanqoAABqfKgAAGp9qAAAan+oAABqgKgAAGqCqAAAaoOoAABqhagAAGqGqAAAaoioAABqiagAAGqLqAAAaoyoAABqjqgAAGqPqAAAapGoAABqkqgAAGqUqAAAapWoAABql6gAAGqYqAAAapqoAABqm6gAAGqdqAAAap6oAABqoKgAAGqhqAAAaqOoAABqpKgAAGqmqAAAaqeoAABqqagAAGqqqAAAaqyoAABqragAAGqvqAAAarCoAABqsqgAAGqzqAAAarWoAABqtqgAAGq4qAAAarmoAABqu6gAAGq8qAAAar6oAABqv6gAAGrBqAAAasKoAABqxKgAAGrFqAAAaseoAABqyKgAAGrKqAAAasuoAABqzagAAGrOqAAAatCoAABq0agAAGrTqAAAatSoAABq1qgAAGrXqAAAatmoAABq2qgAAGrcqAAAat2oAABq36gAAGrgqAAAauKoAABq46gAAGrlqAAAauaoAABq6KgAAGrpqAAAauuoAABq7KgAAGruqAAAau+oAABq8agAAGryqAAAavSoAABq9agAAGr3qAAAavioAABq+qgAAGr7qAAAav2oAABq/qgAAGoAqQAAagGpAABqA6kAAGoEqQAAagapAABqB6kAAGoJqQAAagqpAABqDKkAAGoNqQAAag+pAABqEKkAAGoSqQAAahOpAABqFakAAGoWqQAAahipAABqGakAAGobqQAAahypAABqHqkAAGofqQAAaiGpAABqIqkAAGokqQAAaiWpAABqJ6kAAGooqQAAaiqpAABqK6kAAGotqQAAai6pAABqMKkAAGoxqQAAajOpAABqNKkAAGo2qQAAajepAABqOakAAGo6qQAAajypAABqPakAAGo/qQAAakCpAABqQqkAAGpDqQAAakWpAABqRqkAAGpIqQAAakmpAABqS6kAAGpMqQAAak6pAABqT6kAAGpRqQAAalKpAABqVKkAAGpVqQAAalepAABqWKkAAGpaqQAAalupAABqXakAAGpeqQAAamCpAABqYakAAGpjqQAAamSpAABqZqkAAGpnqQAAammpAABqaqkAAGpsqQAAam2pAABqb6kAAGpwqQAAanKpAABqc6kAAGp1qQAAanapAABqeKkAAGp5qQAAanupAABqfKkAAGp+qQAAan+pAABqgakAAGqCqQAAaoSpAABqhakAAGqHqQAAaoipAABqiqkAAGqLqQAAao2pAABqjqkAAGqQqQAAapGpAABqk6kAAGqUqQAAapapAABql6kAAGqZqQAAapqpAABqnKkAAGqdqQAAap+pAABqoKkAAGqiqQAAaqOpAABqpakAAGqmqQAAaqipAABqqakAAGqrqQAAaqypAABqrqkAAGqvqQAAarGpAABqsqkAAGq0qQAAarWpAABqt6kAAGq4qQAAarqpAABqu6kAAGq9qQAAar6pAABqwKkAAGrBqQAAasOpAABqxKkAAGrGqQAAasepAABqyakAAGrKqQAAasypAABqzakAAGrPqQAAatCpAABq0qkAAGrTqQAAatWpAABq1qkAAGrYqQAAatmpAABq26kAAGrcqQAAat6pAABq36kAAGrhqQAAauKpAABq5KkAAGrlqQAAauepAABq6KkAAGrqqQAAauupAABq7akAAGruqQAAavCpAABq8akAAGrzqQAAavSpAABq9qkAAGr3qQAAavmpAABq+qkAAGr8qQAAav2pAABq/6kAAGoAqgAAagKqAABqA6oAAGoFqgAAagaqAABqCKoAAGoJqgAAaguqAABqDKoAAGoOqgAAag+qAABqEaoAAGoSqgAAahSqAABqFaoAAGoXqgAAahiqAABqGqoAAGobqgAAah2qAABqHqoAAGogqgAAaiGqAABqI6oAAGokqgAAaiaqAABqJ6oAAGopqgAAaiqqAABqLKoAAGotqgAAai+qAABqMKoAAGoyqgAAajOqAABqNaoAAGo2qgAAajiqAABqOaoAAGo7qgAAajyqAABqPqoAAGo/qgAAakGqAABqQqoAAGpEqgAAakWqAABqR6oAAGpIqgAAakqqAABqS6oAAGpNqgAAak6qAABqUKoAAGpRqgAAalOqAABqVKoAAGpWqgAAaleqAABqWaoAAGpaqgAAalyqAABqXaoAAGpfqgAAamCqAABqYqoAAGpjqgAAamWqAABqZqoAAGpoqgAAammqAABqa6oAAGpsqgAAam6qAABqb6oAAGpxqgAAanKqAABqdKoAAGp1qgAAaneqAABqeKoAAGp6qgAAanuqAABqfaoAAGp+qgAAaoCqAABqgaoAAGqDqgAAaoSqAABqhqoAAGqHqgAAaomqAABqiqoAAGqMqgAAao2qAABqj6oAAGqQqgAAapKqAABqk6oAAGqVqgAAapaqAABqmKoAAGqZqgAAapuqAABqnKoAAGqeqgAAap+qAABqoaoAAGqiqgAAaqSqAABqpaoAAGqnqgAAaqiqAABqqqoAAGqrqgAAaq2qAABqrqoAAGqwqgAAarGqAABqs6oAAGq0qgAAaraqAABqt6oAAGq5qgAAarqqAABqvKoAAGq9qgAAar+qAABqwKoAAGrCqgAAasOqAABqxaoAAGrGqgAAasiqAABqyaoAAGrLqgAAasyqAABqzqoAAGrPqgAAatGqAABq0qoAAGrUqgAAatWqAABq16oAAGrYqgAAatqqAABq26oAAGrdqgAAat6qAABq4KoAAGrhqgAAauOqAABq5KoAAGrmqgAAaueqAABq6aoAAGrqqgAAauyqAABq7aoAAGrvqgAAavCqAABq8qoAAGrzqgAAavWqAABq9qoAAGr4qgAAavmqAABq+6oAAGr8qgAAav6qAABq/6oAAGoBqwAAagKrAABqBKsAAGoFqwAAagerAABqCKsAAGoKqwAAagurAABqDasAAGoOqwAAahCrAABqEasAAGoTqwAAahSrAABqFqsAAGoXqwAAahmrAABqGqsAAGocqwAAah2rAABqH6sAAGogqwAAaiKrAABqI6sAAGolqwAAaiarAABqKKsAAGopqwAAaiurAABqLKsAAGouqwAAai+rAABqMasAAGoyqwAAajSrAABqNasAAGo3qwAAajirAABqOqsAAGo7qwAAaj2rAABqPqsAAGpAqwAAakGrAABqQ6sAAGpEqwAAakarAABqR6sAAGpJqwAAakqrAABqTKsAAGpNqwAAak+rAABqUKsAAGpSqwAAalOrAABqVasAAGpWqwAAalirAABqWasAAGpbqwAAalyrAABqXqsAAGpfqwAAamGrAABqYqsAAGpkqwAAamWrAABqZ6sAAGpoqwAAamqrAABqa6sAAGptqwAAam6rAABqcKsAAGpxqwAAanOrAABqdKsAAGp2qwAAanerAABqeasAAGp6qwAAanyrAABqfasAAGp/qwAAaoCrAABqgqsAAGqDqwAAaoWrAABqhqsAAGqIqwAAaomrAABqi6sAAGqMqwAAao6rAABqj6sAAGqRqwAAapKrAABqlKsAAGqVqwAAaperAABqmKsAAGqaqwAAapurAABqnasAAGqeqwAAaqCrAABqoasAAGqjqwAAaqSrAABqpqsAAGqnqwAAaqmrAABqqqsAAGqsqwAAaq2rAABqr6sAAGqwqwAAarKrAABqs6sAAGq1qwAAararAABquKsAAGq5qwAAarurAABqvKsAAGq+qwAAar+rAABqwasAAGrCqwAAasSrAABqxasAAGrHqwAAasirAABqyqsAAGrLqwAAas2rAABqzqsAAGrQqwAAatGrAABq06sAAGrUqwAAatarAABq16sAAGrZqwAAatqrAABq3KsAAGrdqwAAat+rAABq4KsAAGriqwAAauOrAABq5asAAGrmqwAAauirAABq6asAAGrrqwAAauyrAABq7qsAAGrvqwAAavGrAABq8qsAAGr0qwAAavWrAABq96sAAGr4qwAAavqrAABq+6sAAGr9qwAAav6rAABqAKwAAGoBrAAAagOsAABqBKwAAGoGrAAAagesAABqCawAAGoKrAAAagysAABqDawAAGoPrAAAahCsAABqEqwAAGoTrAAAahWsAABqFqwAAGoYrAAAahmsAABqG6wAAGocrAAAah6sAABqH6wAAGohrAAAaiKsAABqJKwAAGolrAAAaiesAABqKKwAAGoqrAAAaiusAABqLawAAGourAAAajCsAABqMawAAGozrAAAajSsAABqNqwAAGo3rAAAajmsAABqOqwAAGo8rAAAaj2sAABqP6wAAGpArAAAakKsAABqQ6wAAGpFrAAAakasAABqSKwAAGpJrAAAakusAABqTKwAAGpOrAAAak+sAABqUawAAGpSrAAAalSsAABqVawAAGpXrAAAalisAABqWqwAAGpbrAAAal2sAABqXqwAAGpgrAAAamGsAABqY6wAAGpkrAAAamasAABqZ6wAAGpprAAAamqsAABqbKwAAGptrAAAam+sAABqcKwAAGpyrAAAanOsAABqdawAAGp2rAAAanisAABqeawAAGp7rAAAanysAABqfqwAAGp/rAAAaoGsAABqgqwAAGqErAAAaoWsAABqh6wAAGqIrAAAaoqsAABqi6wAAGqNrAAAao6sAABqkKwAAGqRrAAAapOsAABqlKwAAGqWrAAAapesAABqmawAAGqarAAAapysAABqnawAAGqfrAAAaqCsAABqoqwAAGqjrAAAaqWsAABqpqwAAGqorAAAaqmsAABqq6wAAGqsrAAAaq6sAABqr6wAAGqxrAAAarKsAABqtKwAAGq1rAAAaresAABquKwAAGq6rAAAarusAABqvawAAGq+rAAAasCsAABqwawAAGrDrAAAasSsAABqxqwAAGrHrAAAasmsAABqyqwAAGrMrAAAas2sAABqz6wAAGrQrAAAatKsAABq06wAAGrVrAAAatasAABq2KwAAGrZrAAAatusAABq3KwAAGrerAAAat+sAABq4awAAGrirAAAauSsAABq5awAAGrnrAAAauisAABq6qwAAGrrrAAAau2sAABq7qwAAGrwrAAAavGsAABq86wAAGr0rAAAavasAABq96wAAGr5rAAAavqsAABq/KwAAGr9rAAAav+sAABqAK0AAGoCrQAAagOtAABqBa0AAGoGrQAAagitAABqCa0AAGoLrQAAagytAABqDq0AAGoPrQAAahGtAABqEq0AAGoUrQAAahWtAABqF60AAGoYrQAAahqtAABqG60AAGodrQAAah6tAABqIK0AAGohrQAAaiOtAABqJK0AAGomrQAAaietAABqKa0AAGoqrQAAaiytAABqLa0AAGovrQAAajCtAABqMq0AAGozrQAAajWtAABqNq0AAGo4rQAAajmtAABqO60AAGo8rQAAaj6tAABqP60AAGpBrQAAakKtAABqRK0AAGpFrQAAaketAABqSK0AAGpKrQAAakutAABqTa0AAGpOrQAAalCtAABqUa0AAGpTrQAAalStAABqVq0AAGpXrQAAalmtAABqWq0AAGpcrQAAal2tAABqX60AAGpgrQAAamKtAABqY60AAGplrQAAamatAABqaK0AAGpprQAAamutAABqbK0AAGpurQAAam+tAABqca0AAGpyrQAAanStAABqda0AAGp3rQAAanitAABqeq0AAHVq8DABAH2UKGryMAEAavQwAQBq9TABAGr3MAEAavgwAQBq+jABAGr7MAEAav0wAQBqsy0BAGq1LQEAarYtAQBquC0BAGq5LQEAarstAQBqvC0BAGq+LQEAar8tAQBqwS0BAGrCLQEAasQtAQBqxS0BAGrHLQEAasgtAQBqyi0BAGrLLQEAas0tAQBqzi0BAGrQLQEAatEtAQBq0y0BAGrULQEAatYtAQBq1y0BAGrZLQEAatotAQBq3C0BAGrdLQEAat8tAQBq4C0BAGriLQEAauMtAQBq5S0BAGrmLQEAaugtAQBq6S0BAGrrLQEAauwtAQBq7i0BAGrvLQEAavEtAQBq8i0BAGr0LQEAavUtAQBq9y0BAGr4LQEAavotAQBq+y0BAGr9LQEAav4tAQBqAC4BAGoBLgEAagMuAQBqBC4BAGoGLgEAagcuAQBqCS4BAGoKLgEAagwuAQBqDS4BAGoPLgEAahAuAQBqEi4BAGoTLgEAahUuAQBqFi4BAGoYLgEAahkuAQBqGy4BAGocLgEAah4uAQBqHy4BAGohLgEAaiIuAQBqJC4BAGolLgEAaicuAQBqKC4BAGoqLgEAaisuAQBqLS4BAGouLgEAajAuAQBqMS4BAGozLgEAajQuAQBqNi4BAGo3LgEAajkuAQBqOi4BAGo8LgEAaj0uAQBqPy4BAGpN4wAAak/jAABqUOMAAGpS4wAAalPjAABqVeMAAGpW4wAAaljjAABqWeMAAGpb4wAAalzjAABqXuMAAGpf4wAAamHjAABqYuMAAGpk4wAAamXjAABqZ+MAAGpo4wAAamrjAABqa+MAAGpt4wAAam7jAABqcOMAAGpx4wAAanPjAABqdOMAAGp24wAAanfjAABqeeMAAGp64wAAanzjAABqfeMAAGp/4wAAaoDjAABqguMAAGqD4wAAaoXjAABqhuMAAGqI4wAAaonjAABqi+MAAGqM4wAAao7jAABqj+MAAGqR4wAAapLjAABqlOMAAGqV4wAAapfjAABqmOMAAGqa4wAAapvjAABqneMAAGqe4wAAaqDjAABqoeMAAGqj4wAAaqTjAABqpuMAAGqn4wAAaqnjAABqquMAAGqs4wAAaq3jAABqr+MAAGqw4wAAarLjAABqs+MAAGq14wAAarbjAABquOMAAGq54wAAarvjAABqvOMAAGq+4wAAar/jAABqweMAAGrC4wAAasTjAABqxeMAAGrH4wAAasjjAABqyuMAAGrL4wAAas3jAABqzuMAAGrQ4wAAatHjAABq0+MAAGrU4wAAatbjAABq1+MAAGrZ4wAAatrjAABq3OMAAGrd4wAAat/jAABq4OMAAGri4wAAauPjAABq5eMAAGrm4wAAaujjAABq6eMAAGrr4wAAauzjAABq7uMAAGrv4wAAavHjAABq8uMAAGr04wAAavXjAABq9+MAAGr44wAAavrjAABq++MAAGr94wAAav7jAABqAOQAAGoB5AAAagPkAABqBOQAAGoG5AAAagfkAABqCeQAAGoK5AAAagzkAABqDeQAAGoP5AAAahDkAABqEuQAAGoT5AAAahXkAABqFuQAAGoY5AAAahnkAABqG+QAAGoc5AAAah7kAABqH+QAAGoh5AAAaiLkAABqJOQAAGol5AAAaifkAABqKOQAAGoq5AAAaivkAABqLeQAAGou5AAAajDkAABqMeQAAGoz5AAAajTkAABqNuQAAGo35AAAajnkAABqOuQAAGo85AAAaj3kAABqP+QAAGpA5AAAakLkAABqQ+QAAGpF5AAAakbkAABqSOQAAGpJ5AAAakvkAABqTOQAAGpO5AAAak/kAABqUeQAAGpS5AAAalTkAABqVeQAAGpX5AAAaljkAABqWuQAAGpb5AAAal3kAABqXuQAAGpg5AAAamHkAABqY+QAAGpk5AAAambkAABqZ+QAAGpp5AAAamrkAABqbOQAAGpt5AAAam/kAABqcOQAAGpy5AAAanPkAABqdeQAAGp25AAAanjkAABqeeQAAGp75AAAanzkAABqfuQAAGp/5AAAaoHkAABqguQAAGqE5AAAaoXkAABqh+QAAGqI5AAAaorkAABqi+QAAGqN5AAAao7kAABqkOQAAGqR5AAAapPkAABqlOQAAGqW5AAAapfkAABqmeQAAGqa5AAAapzkAABqneQAAGqf5AAAaqDkAABqouQAAGqj5AAAaqXkAABqpuQAAGqo5AAAaqnkAABqq+QAAGqs5AAAaq7kAABqr+QAAGqx5AAAarLkAABqtOQAAGq15AAAarfkAABquOQAAGq65AAAarvkAABqveQAAGq+5AAAasDkAABqweQAAGrD5AAAasTkAABqxuQAAGrH5AAAasnkAABqyuQAAGrM5AAAas3kAABqz+QAAGrQ5AAAatLkAABq0+QAAGrV5AAAatbkAABq2OQAAGrZ5AAAatvkAABq3OQAAGre5AAAat/kAABq4eQAAGri5AAAauTkAABq5eQAAGrn5AAAaujkAABq6uQAAGrr5AAAau3kAABq7uQAAGrw5AAAavHkAABq8+QAAGr05AAAavbkAABq9+QAAGr55AAAavrkAABq/OQAAGr95AAAav/kAABqAOUAAGoC5QAAagPlAABqBeUAAGoG5QAAagjlAABqCeUAAGoL5QAAagzlAABqDuUAAGoP5QAAahHlAABqEuUAAGoU5QAAahXlAABqF+UAAGoY5QAAahrlAABqG+UAAGod5QAAah7lAABqIOUAAGoh5QAAaiPlAABqJOUAAGom5QAAaiflAABqKeUAAGoq5QAAaizlAABqLeUAAGov5QAAajDlAABqMuUAAGoz5QAAajXlAABqNuUAAGo45QAAajnlAABqO+UAAGo85QAAaj7lAABqP+UAAGpB5QAAakLlAABqROUAAGpF5QAAakflAABqSOUAAGpK5QAAakvlAABqTeUAAGpO5QAAalDlAABqUeUAAGpT5QAAalTlAABqVuUAAGpX5QAAalnlAABqWuUAAGpc5QAAal3lAABqX+UAAGpg5QAAamLlAABqY+UAAGpl5QAAamblAABqaOUAAGpp5QAAamvlAABqbOUAAGpu5QAAam/lAABqceUAAGpy5QAAanTlAABqdeUAAGp35QAAanjlAABqeuUAAGp75QAAan3lAABqfuUAAGqA5QAAaoHlAABqg+UAAGqE5QAAaoblAABqh+UAAGqJ5QAAaorlAABqjOUAAGqN5QAAao/lAABqkOUAAGqS5QAAapPlAABqleUAAGqW5QAAapjlAABqmeUAAGqb5QAAapzlAABqnuUAAGqf5QAAaqHlAABqouUAAGqk5QAAaqXlAABqp+UAAGqo5QAAaqrlAABqq+UAAGqt5QAAaq7lAABqsOUAAGqx5QAAarPlAABqtOUAAGq25QAAarflAABqueUAAGq65QAAarzlAABqveUAAGq/5QAAasDlAABqwuUAAGrD5QAAasXlAABqxuUAAGrI5QAAasnlAABqy+UAAGrM5QAAas7lAABqz+UAAGrR5QAAatLlAABq1OUAAGrV5QAAatflAABq2OUAAGra5QAAatvlAABq3eUAAGre5QAAauDlAABq4eUAAGrj5QAAauTlAABq5uUAAGrn5QAAaunlAABq6uUAAGrs5QAAau3lAABq7+UAAGrw5QAAavLlAABq8+UAAGr15QAAavblAABq+OUAAGr55QAAavvlAABq/OUAAGr+5QAAav/lAABqAeYAAGoC5gAAagTmAABqBeYAAGoH5gAAagjmAABqCuYAAGoL5gAAag3mAABqDuYAAGoQ5gAAahHmAABqE+YAAGoU5gAAahbmAABqF+YAAGoZ5gAAahrmAABqHOYAAGod5gAAah/mAABqIOYAAGoi5gAAaiPmAABqJeYAAGom5gAAaijmAABqKeYAAGor5gAAaizmAABqLuYAAGov5gAAajHmAABqMuYAAGo05gAAajXmAABqN+YAAGo45gAAajrmAABqO+YAAGo95gAAaj7mAABqQOYAAGpB5gAAakPmAABqROYAAGpG5gAAakfmAABqSeYAAGpK5gAAakzmAABqTeYAAGpP5gAAalDmAABqUuYAAGpT5gAAalXmAABqVuYAAGpY5gAAalnmAABqW+YAAGpc5gAAal7mAABqX+YAAGph5gAAamLmAABqZOYAAGpl5gAAamfmAABqaOYAAGpq5gAAamvmAABqbeYAAGpu5gAAanDmAABqceYAAGpz5gAAanTmAABqduYAAGp35gAAannmAABqeuYAAGp85gAAan3mAABqf+YAAGqA5gAAaoLmAABqg+YAAGqF5gAAaobmAABqiOYAAGqJ5gAAaovmAABqjOYAAGqO5gAAao/mAABqkeYAAGqS5gAAapTmAABqleYAAGqX5gAAapjmAABqmuYAAGqb5gAAap3mAABqnuYAAGqg5gAAaqHmAABqo+YAAGqk5gAAaqbmAABqp+YAAGqp5gAAaqrmAABqrOYAAGqt5gAAaq/mAABqsOYAAGqy5gAAarPmAABqteYAAGq25gAAarjmAABqueYAAGq75gAAarzmAABqvuYAAGq/5gAAasHmAABqwuYAAGrE5gAAasXmAABqx+YAAGrI5gAAasrmAABqy+YAAGrN5gAAas7mAABq0OYAAGrR5gAAatPmAABq1OYAAGrW5gAAatfmAABq2eYAAGra5gAAatzmAABq3eYAAGrf5gAAauDmAABq4uYAAGrj5gAAauXmAABq5uYAAGro5gAAaunmAABq6+YAAGrs5gAAau7mAABq7+YAAGrx5gAAavLmAABq9OYAAGr15gAAavfmAABq+OYAAGr65gAAavvmAABq/eYAAGr+5gAAagDnAABqAecAAGoD5wAAagTnAABqBucAAGoH5wAAagnnAABqCucAAGoM5wAAag3nAABqD+cAAGoQ5wAAahLnAABqE+cAAGoV5wAAahbnAABqGOcAAGoZ5wAAahvnAABqHOcAAGoe5wAAah/nAABqIecAAGoi5wAAaiTnAABqJecAAGon5wAAaijnAABqKucAAGor5wAAai3nAABqLucAAGow5wAAajHnAABqM+cAAGo05wAAajbnAABqN+cAAGo55wAAajrnAABqPOcAAGo95wAAaj/nAABqQOcAAGpC5wAAakPnAABqRecAAGpG5wAAakjnAABqSecAAGpL5wAAakznAABqTucAAGpP5wAAalHnAABqUucAAGpU5wAAalXnAABqV+cAAGpY5wAAalrnAABqW+cAAGpd5wAAal7nAABqYOcAAGph5wAAamPnAABqZOcAAGpm5wAAamfnAABqaecAAGpq5wAAamznAABqbecAAGpv5wAAanDnAABqcucAAGpz5wAAanXnAABqducAAGp45wAAannnAABqe+cAAGp85wAAan7nAABqf+cAAGqB5wAAaoLnAABqhOcAAGqF5wAAaofnAABqiOcAAGqK5wAAaovnAABqjecAAGqO5wAAapDnAABqkecAAGqT5wAAapTnAABqlucAAGqX5wAAapnnAABqmucAAGqc5wAAap3nAABqn+cAAGqg5wAAaqLnAABqo+cAAGql5wAAaqbnAABqqOcAAGqp5wAAaqvnAABqrOcAAGqu5wAAaq/nAABqsecAAGqy5wAAarTnAABqtecAAGq35wAAarjnAABquucAAGq75wAAar3nAABqvucAAGrA5wAAasHnAABqw+cAAGrE5wAAasbnAABqx+cAAGrJ5wAAasrnAABqzOcAAGrN5wAAas/nAABq0OcAAGrS5wAAatPnAABq1ecAAGrW5wAAatjnAABq2ecAAGrb5wAAatznAABq3ucAAGrf5wAAauHnAABq4ucAAGrk5wAAauXnAABq5+cAAGro5wAAaurnAABq6+cAAGrt5wAAau7nAABq8OcAAGrx5wAAavPnAABq9OcAAGr25wAAavfnAABq+ecAAGr65wAAavznAABq/ecAAGr/5wAAagDoAABqAugAAGoD6AAAagXoAABqBugAAGoI6AAAagnoAABqC+gAAGoM6AAAag7oAABqD+gAAGoR6AAAahLoAABqFOgAAGoV6AAAahfoAABqGOgAAGoa6AAAahvoAABqHegAAGoe6AAAaiDoAABqIegAAGoj6AAAaiToAABqJugAAGon6AAAainoAABqKugAAGos6AAAai3oAABqL+gAAGow6AAAajLoAABqM+gAAGo16AAAajboAABqOOgAAGo56AAAajvoAABqPOgAAGo+6AAAaj/oAABqQegAAGpC6AAAakToAABqRegAAGpH6AAAakjoAABqSugAAGpL6AAAak3oAABqTugAAGpQ6AAAalHoAABqU+gAAGpU6AAAalboAABqV+gAAGpZ6AAAalroAABqXOgAAGpd6AAAal/oAABqYOgAAGpi6AAAamPoAABqZegAAGpm6AAAamjoAABqaegAAGpr6AAAamzoAABqbugAAGpv6AAAanHoAABqcugAAGp06AAAanXoAABqd+gAAGp46AAAanroAABqe+gAAGp96AAAan7oAABqgOgAAGqB6AAAaoPoAABqhOgAAGqG6AAAaofoAABqiegAAGqK6AAAaozoAABqjegAAGqP6AAAapDoAABqkugAAGqT6AAAapXoAABqlugAAGqY6AAAapnoAABqm+gAAGqc6AAAap7oAABqn+gAAGqh6AAAaqLoAABqpOgAAGql6AAAaqfoAABqqOgAAGqq6AAAaqvoAABqregAAGqu6AAAarDoAABqsegAAGqz6AAAarToAABqtugAAGq36AAAarnoAABquugAAGq86AAAar3oAABqv+gAAGrA6AAAasLoAABqw+gAAGrF6AAAasboAABqyOgAAGrJ6AAAasvoAABqzOgAAGrO6AAAas/oAABq0egAAGrS6AAAatToAABq1egAAGrX6AAAatjoAABq2ugAAGrb6AAAat3oAABq3ugAAGrg6AAAauHoAABq4+gAAGrk6AAAauboAABq5+gAAGrp6AAAauroAABq7OgAAGrt6AAAau/oAABq8OgAAGry6AAAavPoAABq9egAAGr26AAAavjoAABq+egAAGr76AAAavzoAABq/ugAAGr/6AAAagHpAABqAukAAGoE6QAAagXpAABqB+kAAGoI6QAAagrpAABqC+kAAGoN6QAAag7pAABqEOkAAGoR6QAAahPpAABqFOkAAGoW6QAAahfpAABqGekAAGoa6QAAahzpAABqHekAAGof6QAAaiDpAABqIukAAGoj6QAAaiXpAABqJukAAGoo6QAAainpAABqK+kAAGos6QAAai7pAABqL+kAAGox6QAAajLpAABqNOkAAGo16QAAajfpAABqOOkAAGo66QAAajvpAABqPekAAGo+6QAAakDpAABqQekAAGpD6QAAakTpAABqRukAAGpH6QAAaknpAABqSukAAGpM6QAAak3pAABqT+kAAGpQ6QAAalLpAABqU+kAAGpV6QAAalbpAABqWOkAAGpZ6QAAalvpAABqXOkAAGpe6QAAal/pAABqYekAAGpi6QAAamTpAABqZekAAGpn6QAAamjpAABqaukAAGpr6QAAam3pAABqbukAAGpw6QAAanHpAABqc+kAAGp06QAAanbpAABqd+kAAGp56QAAanrpAABqfOkAAGp96QAAan/pAABqgOkAAGqC6QAAaoPpAABqhekAAGqG6QAAaojpAABqiekAAGqL6QAAaozpAABqjukAAGqP6QAAapHpAABqkukAAGqU6QAAapXpAABql+kAAGqY6QAAaprpAABqm+kAAGqd6QAAap7pAABqoOkAAGqh6QAAaqPpAABqpOkAAGqm6QAAaqfpAABqqekAAGqq6QAAaqzpAABqrekAAGqv6QAAarDpAABqsukAAGqz6QAAarXpAABqtukAAGq46QAAarnpAABqu+kAAGq86QAAar7pAABqv+kAAGrB6QAAasLpAABqxOkAAGrF6QAAasfpAABqyOkAAGrK6QAAasvpAABqzekAAGrO6QAAatDpAABq0ekAAGrT6QAAatTpAABq1ukAAGrX6QAAatnpAABq2ukAAGrc6QAAat3pAABq3+kAAGrg6QAAauLpAABq4+kAAGrl6QAAaubpAABq6OkAAGrp6QAAauvpAABq7OkAAGru6QAAau/pAABq8ekAAGry6QAAavTpAABq9ekAAGr36QAAavjpAABq+ukAAGr76QAAav3pAABq/ukAAGoA6gAAagHqAABqA+oAAGoE6gAAagbqAABqB+oAAGoJ6gAAagrqAABqDOoAAGoN6gAAag/qAABqEOoAAGoS6gAAahPqAABqFeoAAGoW6gAAahjqAABqGeoAAGob6gAAahzqAABqHuoAAGof6gAAaiHqAABqIuoAAGok6gAAaiXqAABqJ+oAAGoo6gAAairqAABqK+oAAGot6gAAai7qAABqMOoAAGox6gAAajPqAABqNOoAAGo26gAAajfqAABqOeoAAGo66gAAajzqAABqPeoAAGo/6gAAakDqAABqQuoAAGpD6gAAakXqAABqRuoAAGpI6gAAaknqAABqS+oAAGpM6gAAak7qAABqT+oAAGpR6gAAalLqAABqVOoAAGpV6gAAalfqAABqWOoAAGpa6gAAalvqAABqXeoAAGpe6gAAamDqAABqYeoAAGpj6gAAamTqAABqZuoAAGpn6gAAamnqAABqauoAAGps6gAAam3qAABqb+oAAGpw6gAAanLqAABqc+oAAGp16gAAanbqAABqeOoAAGp56gAAanvqAABqfOoAAGp+6gAAan/qAABqgeoAAGqC6gAAaoTqAABqheoAAGqH6gAAaojqAABqiuoAAGqL6gAAao3qAABqjuoAAGqQ6gAAapHqAABqk+oAAGqU6gAAapbqAABql+oAAGqZ6gAAaprqAABqnOoAAGqd6gAAap/qAABqoOoAAGqi6gAAaqPqAABqpeoAAGqm6gAAaqjqAABqqeoAAGqr6gAAaqzqAABqruoAAGqv6gAAarHqAABqsuoAAGq06gAAarXqAABqt+oAAGq46gAAarrqAABqu+oAAGq96gAAar7qAABqwOoAAGrB6gAAasPqAABqxOoAAGrG6gAAasfqAABqyeoAAGrK6gAAaszqAABqzeoAAGrP6gAAatDqAABq0uoAAGrT6gAAatXqAABq1uoAAGrY6gAAatnqAABq2+oAAGrc6gAAat7qAABq3+oAAGrh6gAAauLqAABq5OoAAGrl6gAAaufqAABq6OoAAGrq6gAAauvqAABq7eoAAGru6gAAavDqAABq8eoAAGrz6gAAavTqAABq9uoAAGr36gAAavnqAABq+uoAAGr86gAAav3qAABq/+oAAGoA6wAAagLrAABqA+sAAGoF6wAAagbrAABqCOsAAGoJ6wAAagvrAABqDOsAAGoO6wAAag/rAABqEesAAGoS6wAAahTrAABqFesAAGoX6wAAahjrAABqGusAAGob6wAAah3rAABqHusAAGog6wAAaiHrAABqI+sAAGok6wAAaibrAABqJ+sAAGop6wAAairrAABqLOsAAGot6wAAai/rAABqMOsAAGoy6wAAajPrAABqNesAAGo26wAAajjrAABqOesAAGo76wAAajzrAABqPusAAGo/6wAAakHrAABqQusAAGpE6wAAakXrAABqR+sAAGpI6wAAakrrAABqS+sAAGpN6wAAak7rAABqUOsAAGpR6wAAalPrAABqVOsAAGpW6wAAalfrAABqWesAAGpa6wAAalzrAABqXesAAGpf6wAAamDrAABqYusAAGpj6wAAamXrAABqZusAAGpo6wAAamnrAABqa+sAAGps6wAAam7rAABqb+sAAGpx6wAAanLrAABqdOsAAGp16wAAanfrAABqeOsAAGp66wAAanvrAABqfesAAGp+6wAAaoDrAABqgesAAGqD6wAAaoTrAABqhusAAGqH6wAAaonrAABqiusAAGqM6wAAao3rAABqj+sAAGqQ6wAAapLrAABqk+sAAGqV6wAAapbrAABqmOsAAGqZ6wAAapvrAABqnOsAAGqe6wAAap/rAABqoesAAGqi6wAAaqTrAABqpesAAGqn6wAAaqjrAABqqusAAGqr6wAAaq3rAABqrusAAGqw6wAAarHrAABqs+sAAGq06wAAarbrAABqt+sAAGq56wAAarrrAABqvOsAAGq96wAAar/rAABqwOsAAGrC6wAAasPrAABqxesAAGrG6wAAasjrAABqyesAAGrL6wAAaszrAABqzusAAGrP6wAAatHrAABq0usAAGrU6wAAatXrAABq1+sAAGrY6wAAatrrAABq2+sAAGrd6wAAat7rAABq4OsAAGrh6wAAauPrAABq5OsAAGrm6wAAaufrAABq6esAAGrq6wAAauzrAABq7esAAGrv6wAAavDrAABq8usAAGrz6wAAavXrAABq9usAAGr46wAAavnrAABq++sAAGr86wAAav7rAABq/+sAAGoB7AAAagLsAABqBOwAAGoF7AAAagfsAABqCOwAAGoK7AAAagvsAABqDewAAGoO7AAAahDsAABqEewAAGoT7AAAahTsAABqFuwAAGoX7AAAahnsAABqGuwAAGoc7AAAah3sAABqH+wAAGog7AAAaiLsAABqI+wAAGol7AAAaibsAABqKOwAAGop7AAAaivsAABqLOwAAGou7AAAai/sAABqMewAAGoy7AAAajTsAABqNewAAGo37AAAajjsAABqOuwAAGo77AAAaj3sAABqPuwAAGpA7AAAakHsAABqQ+wAAGpE7AAAakbsAABqR+wAAGpJ7AAAakrsAABqTOwAAGpN7AAAak/sAABqUOwAAGpS7AAAalPsAABqVewAAGpW7AAAaljsAABqWewAAGpb7AAAalzsAABqXuwAAGpf7AAAamHsAABqYuwAAGpk7AAAamXsAABqZ+wAAGpo7AAAamrsAABqa+wAAGpt7AAAam7sAABqcOwAAGpx7AAAanPsAABqdOwAAGp27AAAanfsAABqeewAAGp67AAAanzsAABqfewAAGp/7AAAaoDsAABqguwAAGqD7AAAaoXsAABqhuwAAGqI7AAAaonsAABqi+wAAGqM7AAAao7sAABqj+wAAGqR7AAAapLsAABqlOwAAGqV7AAAapfsAABqmOwAAGqa7AAAapvsAABqnewAAGqe7AAAaqDsAABqoewAAGqj7AAAaqTsAABqpuwAAGqn7AAAaqnsAABqquwAAGqs7AAAaq3sAABqr+wAAGqw7AAAarLsAABqs+wAAGq17AAAarbsAABquOwAAGq57AAAarvsAABqvOwAAGq+7AAAar/sAABqwewAAGrC7AAAasTsAABqxewAAGrH7AAAasjsAABqyuwAAGrL7AAAas3sAABqzuwAAGrQ7AAAatHsAABq0+wAAGrU7AAAatbsAABq1+wAAGrZ7AAAatrsAABq3OwAAGrd7AAAat/sAABq4OwAAGri7AAAauPsAABq5ewAAGrm7AAAaujsAABq6ewAAGrr7AAAauzsAABq7uwAAGrv7AAAavHsAABq8uwAAGr07AAAavXsAABq9+wAAJUEAAEAAAAAAGr47AAAavrsAABq++wAAGr97AAAav7sAABqAO0AAGoB7QAAagPtAABqBO0AAGoG7QAAagftAABqCe0AAGoK7QAAagztAABqDe0AAGoP7QAAahDtAABqEu0AAGoT7QAAahXtAABqFu0AAGoY7QAAahntAABqG+0AAGoc7QAAah7tAABqH+0AAGoh7QAAaiLtAABqJO0AAGol7QAAaiftAABqKO0AAGoq7QAAaivtAABqLe0AAGou7QAAajDtAABqMe0AAGoz7QAAajTtAABqNu0AAGo37QAAajntAABqOu0AAGo87QAAaj3tAABqP+0AAGpA7QAAakLtAABqQ+0AAGpF7QAAakbtAABqSO0AAGpJ7QAAakvtAABqTO0AAGpO7QAAak/tAABqUe0AAGpS7QAAalTtAABqVe0AAGpX7QAAaljtAABqWu0AAGpb7QAAal3tAABqXu0AAGpg7QAAamHtAABqY+0AAGpk7QAAambtAABqZ+0AAGpp7QAAamrtAABqbO0AAGpt7QAAam/tAABqcO0AAGpy7QAAanPtAABqde0AAGp27QAAanjtAABqee0AAGp77QAAanztAABqfu0AAGp/7QAAaoHtAABqgu0AAGqE7QAAaoXtAABqh+0AAGqI7QAAaortAABqi+0AAGqN7QAAao7tAABqkO0AAGqR7QAAapPtAABqlO0AAGqW7QAAapftAABqme0AAGqa7QAAapztAABqne0AAGqf7QAAaqDtAABqou0AAGqj7QAAaqXtAABqpu0AAGqo7QAAaqntAABqq+0AAGqs7QAAaq7tAABqr+0AAGqx7QAAarLtAABqtO0AAGq17QAAarftAABquO0AAGq67QAAarvtAABqve0AAGq+7QAAasDtAABqwe0AAGrD7QAAasTtAABqxu0AAGrH7QAAasntAABqyu0AAGrM7QAAas3tAABqz+0AAGrQ7QAAatLtAABq0+0AAGrV7QAAatbtAABq2O0AAGrZ7QAAatvtAABq3O0AAGre7QAAat/tAABq4e0AAGri7QAAauTtAABq5e0AAGrn7QAAaujtAABq6u0AAGrr7QAAau3tAABq7u0AAGrw7QAAavHtAABq8+0AAGr07QAAavbtAABq9+0AAGr57QAAavrtAABq/O0AAGr97QAAav/tAABqAO4AAGoC7gAAagPuAABqBe4AAGoG7gAAagjuAABqCe4AAGoL7gAAagzuAABqDu4AAGoP7gAAahHuAABqEu4AAGoU7gAAahXuAABqF+4AAGoY7gAAahruAABqG+4AAGod7gAAah7uAABqIO4AAGoh7gAAaiPuAABqJO4AAGom7gAAaifuAABqKe4AAGoq7gAAaizuAABqLe4AAGov7gAAajDuAABqMu4AAGoz7gAAajXuAABqNu4AAGo47gAAajnuAABqO+4AAGo87gAAaj7uAABqP+4AAGpB7gAAakLuAABqRO4AAGpF7gAAakfuAABqSO4AAGpK7gAAakvuAABqTe4AAGpO7gAAalDuAABqUe4AAGpT7gAAalTuAABqVu4AAGpX7gAAalnuAABqWu4AAGpc7gAAal3uAABqX+4AAGpg7gAAamLuAABqY+4AAGpl7gAAambuAABqaO4AAGpp7gAAamvuAAB1KGps7gAAam7uAABqb+4AAGpx7gAAanLuAABqdO4AAGp17gAAanfuAABqeO4AAGp67gAAanvuAABqfe4AAGp+7gAAaoDuAABqge4AAGqD7gAAaoTuAABqhu4AAGqH7gAAaonuAABqiu4AAGqM7gAAao3uAABqj+4AAGqQ7gAAapLuAABqk+4AAGqV7gAAapbuAABqmO4AAGqZ7gAAapvuAABqnO4AAGqe7gAAap/uAABqoe4AAGqi7gAAaqTuAABqpe4AAGqn7gAAaqjuAABqqu4AAGqr7gAAaq3uAABqru4AAGqw7gAAarHuAABqs+4AAGq07gAAarbuAABqt+4AAGq57gAAarruAABqvO4AAGq97gAAar/uAABqwO4AAGrC7gAAasPuAABqxe4AAGrG7gAAasjuAABqye4AAGrL7gAAaszuAABqzu4AAGrP7gAAatHuAABq0u4AAGrU7gAAatXuAABq1+4AAGrY7gAAatruAABq2+4AAGrd7gAAat7uAABq4O4AAGrh7gAAauPuAABq5O4AAGrm7gAAaufuAABq6e4AAGrq7gAAauzuAABq7e4AAGrv7gAAavDuAABq8u4AAGrz7gAAavXuAABq9u4AAGr47gAAavnuAABq++4AAGr87gAAav7uAABq/+4AAGoB7wAAagLvAABqBO8AAGoF7wAAagfvAABqCO8AAGoK7wAAagvvAABqDe8AAGoO7wAAahDvAABqEe8AAGoT7wAAahTvAABqFu8AAGoX7wAAahnvAABqGu8AAGoc7wAAah3vAABqH+8AAGog7wAAaiLvAABqI+8AAGol7wAAaibvAABqKO8AAGop7wAAaivvAABqLO8AAGou7wAAai/vAABqMe8AAGoy7wAAajTvAABqNe8AAGo37wAAajjvAABqOu8AAGo77wAAaj3vAABqPu8AAGpA7wAAakHvAABqQ+8AAGpE7wAAakbvAABqR+8AAGpJ7wAAakrvAABqTO8AAGpN7wAAak/vAABqUO8AAGpS7wAAalPvAABqVe8AAGpW7wAAaljvAABqWe8AAGpb7wAAalzvAABqXu8AAGpf7wAAamHvAABqYu8AAGpk7wAAamXvAABqZ+8AAGpo7wAAamrvAABqa+8AAGpt7wAAam7vAABqcO8AAGpx7wAAanPvAABqdO8AAGp27wAAanfvAABqee8AAGp67wAAanzvAABqfe8AAGp/7wAAaoDvAABqgu8AAGqD7wAAaoXvAABqhu8AAGqI7wAAaonvAABqi+8AAGqM7wAAao7vAABqj+8AAGqR7wAAapLvAABqlO8AAGqV7wAAapfvAABqmO8AAGqa7wAAapvvAABqne8AAGqe7wAAaqDvAABqoe8AAGqj7wAAaqTvAABqpu8AAGqn7wAAaqnvAABqqu8AAGqs7wAAaq3vAABqr+8AAGqw7wAAarLvAABqs+8AAGq17wAAarbvAABquO8AAGq57wAAarvvAABqvO8AAGq+7wAAar/vAABqwe8AAGrC7wAAasTvAABqxe8AAGrH7wAAasjvAABqyu8AAGrL7wAAas3vAABqzu8AAGrQ7wAAatHvAABq0+8AAGrU7wAAatbvAABq1+8AAGrZ7wAAatrvAABq3O8AAGrd7wAAat/vAABq4O8AAGri7wAAauPvAABq5e8AAGrm7wAAaujvAABq6e8AAGrr7wAAauzvAABq7u8AAGrv7wAAavHvAABq8u8AAGr07wAAavXvAABq9+8AAGr47wAAavrvAABq++8AAGr97wAAav7vAABqAPAAAGoB8AAAagPwAABqBPAAAGoG8AAAagfwAABqCfAAAGoK8AAAagzwAABqDfAAAGoP8AAAahDwAABqEvAAAGoT8AAAahXwAABqFvAAAGoY8AAAahnwAABqG/AAAGoc8AAAah7wAABqH/AAAGoh8AAAaiLwAABqJPAAAGol8AAAaifwAABqKPAAAGoq8AAAaivwAABqLfAAAGou8AAAajDwAABqMfAAAGoz8AAAajTwAABqNvAAAGo38AAAajnwAABqOvAAAGo88AAAaj3wAABqP/AAAGpA8AAAakLwAABqQ/AAAGpF8AAAakbwAABqSPAAAGpJ8AAAakvwAABqTPAAAGpO8AAAak/wAABqUfAAAGpS8AAAalTwAABqVfAAAGpX8AAAaljwAABqWvAAAGpb8AAAal3wAABqXvAAAGpg8AAAamHwAABqY/AAAGpk8AAAambwAABqZ/AAAGpp8AAAamrwAABqbPAAAGpt8AAAam/wAABqcPAAAGpy8AAAanPwAABqdfAAAGp28AAAanjwAABqefAAAGp78AAAanzwAABqfvAAAGp/8AAAaoHwAABqgvAAAGqE8AAAaoXwAABqh/AAAGqI8AAAaorwAABqi/AAAGqN8AAAao7wAABqkPAAAGqR8AAAapPwAABqlPAAAGqW8AAAapfwAABqmfAAAGqa8AAAapzwAABqnfAAAGqf8AAAaqDwAABqovAAAGqj8AAAaqXwAABqpvAAAGqo8AAAaqnwAABqq/AAAGqs8AAAaq7wAABqr/AAAGqx8AAAarLwAABqtPAAAGq18AAAarfwAABquPAAAGq68AAAarvwAABqvfAAAGq+8AAAasDwAABqwfAAAGrD8AAAasTwAABqxvAAAGrH8AAAasnwAABqyvAAAGrM8AAAas3wAABqz/AAAGrQ8AAAatLwAABq0/AAAGrV8AAAatbwAABq2PAAAGrZ8AAAatvwAABq3PAAAGre8AAAat/wAABq4fAAAGri8AAAauTwAABq5fAAAGrn8AAAaujwAABq6vAAAGrr8AAAau3wAABq7vAAAGrw8AAAavHwAABq8/AAAGr08AAAavbwAABq9/AAAGr58AAAavrwAABq/PAAAGr98AAAav/wAABqAPEAAGoC8QAAagPxAABqBfEAAGoG8QAAagjxAABqCfEAAGoL8QAAagzxAABqDvEAAGoP8QAAahHxAABqEvEAAGoU8QAAahXxAABqF/EAAGoY8QAAahrxAABqG/EAAGod8QAAah7xAABqIPEAAGoh8QAAaiPxAABqJPEAAGom8QAAaifxAABqKfEAAGoq8QAAaizxAABqLfEAAGov8QAAajDxAABqMvEAAGoz8QAAajXxAABqNvEAAGo48QAAajnxAABqO/EAAGo88QAAaj7xAABqP/EAAGpB8QAAakLxAABqRPEAAGpF8QAAakfxAABqSPEAAGpK8QAAakvxAABqTfEAAGpO8QAAalDxAABqUfEAAGpT8QAAalTxAABqVvEAAGpX8QAAalnxAABqWvEAAGpc8QAAal3xAABqX/EAAGpg8QAAamLxAABqY/EAAGpl8QAAambxAABqaPEAAGpp8QAAamvxAABqbPEAAGpu8QAAam/xAABqcfEAAGpy8QAAanTxAABqdfEAAGp38QAAanjxAABqevEAAGp78QAAan3xAABqfvEAAGqA8QAAaoHxAABqg/EAAGqE8QAAaobxAABqh/EAAGqJ8QAAaorxAABqjPEAAGqN8QAAao/xAABqkPEAAGqS8QAAapPxAABqlfEAAGqW8QAAapjxAABqmfEAAGqb8QAAapzxAABqnvEAAGqf8QAAaqHxAABqovEAAGqk8QAAaqXxAABqp/EAAGqo8QAAaqrxAABqq/EAAGqt8QAAaq7xAABqsPEAAGqx8QAAarPxAABqtPEAAGq28QAAarfxAABqufEAAGq68QAAarzxAABqvfEAAGq/8QAAasDxAABqwvEAAGrD8QAAasXxAABqxvEAAGrI8QAAasnxAABqy/EAAGrM8QAAas7xAABqz/EAAGrR8QAAatLxAABq1PEAAGrV8QAAatfxAABq2PEAAGra8QAAatvxAABq3fEAAGre8QAAauDxAABq4fEAAGrj8QAAauTxAABq5vEAAGrn8QAAaunxAABq6vEAAGrs8QAAau3xAABq7/EAAGrw8QAAavLxAABq8/EAAGr18QAAavbxAABq+PEAAGr58QAAavvxAABq/PEAAGr+8QAAav/xAABqAfIAAGoC8gAAagTyAABqBfIAAGoH8gAAagjyAABqCvIAAGoL8gAAag3yAABqDvIAAGoQ8gAAahHyAABqE/IAAGoU8gAAahbyAABqF/IAAGoZ8gAAahryAABqHPIAAGod8gAAah/yAABqIPIAAGoi8gAAaiPyAABqJfIAAGom8gAAaijyAABqKfIAAGor8gAAaizyAABqLvIAAGov8gAAajHyAABqMvIAAGo08gAAajXyAABqN/IAAGo48gAAajryAABqO/IAAGo98gAAaj7yAABqQPIAAGpB8gAAakPyAABqRPIAAGpG8gAAakfyAABqSfIAAGpK8gAAakzyAABqTfIAAGpP8gAAalDyAABqUvIAAGpT8gAAalXyAABqVvIAAGpY8gAAalnyAABqW/IAAGpc8gAAal7yAABqX/IAAGph8gAAamLyAABqZPIAAGpl8gAAamfyAABqaPIAAGpq8gAAamvyAABqbfIAAGpu8gAAanDyAABqcfIAAGpz8gAAanTyAABqdvIAAGp38gAAannyAABqevIAAGp88gAAan3yAABqf/IAAGqA8gAAaoLyAABqg/IAAGqF8gAAaobyAABqiPIAAGqJ8gAAaovyAABqjPIAAGqO8gAAao/yAABqkfIAAGqS8gAAapTyAABqlfIAAGqX8gAAapjyAABqmvIAAGqb8gAAap3yAABqnvIAAGqg8gAAaqHyAABqo/IAAGqk8gAAaqbyAABqp/IAAGqp8gAAaqryAABqrPIAAGqt8gAAaq/yAABqsPIAAGqy8gAAarPyAABqtfIAAGq28gAAarjyAABqufIAAGq78gAAarzyAABqvvIAAGq/8gAAasHyAABqwvIAAGrE8gAAasXyAABqx/IAAGrI8gAAasryAABqy/IAAGrN8gAAas7yAABq0PIAAGrR8gAAatPyAABq1PIAAGrW8gAAatfyAABq2fIAAGra8gAAatzyAABq3fIAAGrf8gAAauDyAABq4vIAAGrj8gAAauXyAABq5vIAAGro8gAAaunyAABq6/IAAGrs8gAAau7yAABq7/IAAGrx8gAAavLyAABq9PIAAGr18gAAavfyAABq+PIAAGr68gAAavvyAABq/fIAAGr+8gAAagDzAABqAfMAAGoD8wAAagTzAABqBvMAAGoH8wAAagnzAABqCvMAAGoM8wAAag3zAABqD/MAAGoQ8wAAahLzAABqE/MAAGoV8wAAahbzAABqGPMAAGoZ8wAAahvzAABqHPMAAGoe8wAAah/zAABqIfMAAGoi8wAAaiTzAABqJfMAAGon8wAAaijzAABqKvMAAGor8wAAai3zAABqLvMAAGow8wAAajHzAABqM/MAAGo08wAAajbzAABqN/MAAGo58wAAajrzAABqPPMAAGo98wAAaj/zAABqQPMAAGpC8wAAakPzAABqRfMAAGpG8wAAakjzAABqSfMAAGpL8wAAakzzAABqTvMAAGpP8wAAalHzAABqUvMAAGpU8wAAalXzAABqV/MAAGpY8wAAalrzAABqW/MAAGpd8wAAal7zAABqYPMAAGph8wAAamPzAABqZPMAAGpm8wAAamfzAABqafMAAGpq8wAAamzzAABqbfMAAGpv8wAAanDzAABqcvMAAGpz8wAAanXzAABqdvMAAGp48wAAannzAABqe/MAAGp88wAAan7zAABqf/MAAGqB8wAAaoLzAABqhPMAAGqF8wAAaofzAABqiPMAAGqK8wAAaovzAABqjfMAAGqO8wAAapDzAABqkfMAAGqT8wAAapTzAABqlvMAAGqX8wAAapnzAABqmvMAAGqc8wAAap3zAABqn/MAAGqg8wAAaqLzAABqo/MAAGql8wAAaqbzAABqqPMAAGqp8wAAaqvzAABqrPMAAGqu8wAAaq/zAABqsfMAAGqy8wAAarTzAABqtfMAAGq38wAAarjzAABquvMAAGq78wAAar3zAABqvvMAAGrA8wAAasHzAABqw/MAAGrE8wAAasbzAABqx/MAAGrJ8wAAasrzAABqzPMAAGrN8wAAas/zAABq0PMAAGrS8wAAatPzAABq1fMAAGrW8wAAatjzAABq2fMAAGrb8wAAatzzAABq3vMAAGrf8wAAauHzAABq4vMAAGrk8wAAauXzAABq5/MAAGro8wAAaurzAABq6/MAAGrt8wAAau7zAABq8PMAAGrx8wAAavPzAABq9PMAAGr28wAAavfzAABq+fMAAGr68wAAavzzAABq/fMAAGr/8wAAagD0AABqAvQAAGoD9AAAagX0AABqBvQAAGoI9AAAagn0AABqC/QAAGoM9AAAag70AABqD/QAAGoR9AAAahL0AABqFPQAAGoV9AAAahf0AABqGPQAAGoa9AAAahv0AABqHfQAAGoe9AAAaiD0AABqIfQAAGoj9AAAaiT0AABqJvQAAGon9AAAain0AABqKvQAAGos9AAAai30AABqL/QAAGow9AAAajL0AABqM/QAAGo19AAAajb0AABqOPQAAGo59AAAajv0AABqPPQAAGo+9AAAaj/0AABqQfQAAGpC9AAAakT0AABqRfQAAGpH9AAAakj0AABqSvQAAGpL9AAAak30AABqTvQAAGpQ9AAAalH0AABqU/QAAGpU9AAAalb0AABqV/QAAGpZ9AAAalr0AABqXPQAAGpd9AAAal/0AABqYPQAAGpi9AAAamP0AABqZfQAAGpm9AAAamj0AABqafQAAGpr9AAAamz0AABqbvQAAGpv9AAAanH0AABqcvQAAGp09AAAanX0AABqd/QAAGp49AAAanr0AABqe/QAAGp99AAAan70AABqgPQAAGqB9AAAaoP0AABqhPQAAGqG9AAAaof0AABqifQAAGqK9AAAaoz0AABqjfQAAGqP9AAAapD0AABqkvQAAGqT9AAAapX0AABqlvQAAGqY9AAAapn0AABqm/QAAGqc9AAAap70AABqn/QAAGqh9AAAaqL0AABqpPQAAGql9AAAaqf0AABqqPQAAGqq9AAAaqv0AABqrfQAAGqu9AAAarD0AABqsfQAAGqz9AAAarT0AABqtvQAAGq39AAAarn0AABquvQAAGq89AAAar30AABqv/QAAGrA9AAAasL0AABqw/QAAGrF9AAAasb0AABqyPQAAGrJ9AAAasv0AABqzPQAAGrO9AAAas/0AABq0fQAAGrS9AAAatT0AABq1fQAAGrX9AAAatj0AABq2vQAAGrb9AAAat30AABq3vQAAGrg9AAAauH0AABq4/QAAGrk9AAAaub0AABq5/QAAGrp9AAAaur0AABq7PQAAGrt9AAAau/0AABq8PQAAGry9AAAavP0AABq9fQAAGr29AAAavj0AABq+fQAAGr79AAAavz0AABq/vQAAGr/9AAAagH1AABqAvUAAGoE9QAAagX1AABqB/UAAGoI9QAAagr1AABqC/UAAGoN9QAAag71AABqEPUAAGoR9QAAahP1AABqFPUAAGoW9QAAahf1AABqGfUAAGoa9QAAahz1AABqHfUAAGof9QAAaiD1AABqIvUAAGoj9QAAaiX1AABqJvUAAGoo9QAAain1AABqK/UAAGos9QAAai71AABqL/UAAGox9QAAajL1AABqNPUAAGo19QAAajf1AABqOPUAAGo69QAAajv1AABqPfUAAGo+9QAAakD1AABqQfUAAGpD9QAAakT1AABqRvUAAGpH9QAAakn1AABqSvUAAGpM9QAAak31AABqT/UAAGpQ9QAAalL1AABqU/UAAGpV9QAAalb1AABqWPUAAGpZ9QAAalv1AABqXPUAAGpe9QAAal/1AABqYfUAAGpi9QAAamT1AABqZfUAAGpn9QAAamj1AABqavUAAGpr9QAAam31AABqbvUAAGpw9QAAanH1AABqc/UAAGp09QAAanb1AABqd/UAAGp59QAAanr1AABqfPUAAGp99QAAan/1AABqgPUAAGqC9QAAaoP1AABqhfUAAGqG9QAAaoj1AABqifUAAGqL9QAAaoz1AABqjvUAAGqP9QAAapH1AABqkvUAAGqU9QAAapX1AABql/UAAGqY9QAAapr1AABqm/UAAGqd9QAAap71AABqoPUAAGqh9QAAaqP1AABqpPUAAGqm9QAAaqf1AABqqfUAAGqq9QAAaqz1AABqrfUAAGqv9QAAarD1AABqsvUAAGqz9QAAarX1AABqtvUAAGq49QAAarn1AABqu/UAAGq89QAAar71AABqv/UAAGrB9QAAasL1AABqxPUAAGrF9QAAasf1AABqyPUAAGrK9QAAasv1AABqzfUAAGrO9QAAatD1AABq0fUAAGrT9QAAatT1AABq1vUAAGrX9QAAatn1AABq2vUAAGrc9QAAat31AABq3/UAAGrg9QAAauL1AABq4/UAAGrl9QAAaub1AABq6PUAAGrp9QAAauv1AABq7PUAAGru9QAAau/1AABq8fUAAGry9QAAavT1AABq9fUAAGr39QAAavj1AABq+vUAAGr79QAAav31AABq/vUAAGoA9gAAagH2AABqA/YAAGoE9gAAagb2AABqB/YAAGoJ9gAAagr2AABqDPYAAGoN9gAAag/2AABqEPYAAGoS9gAAahP2AABqFfYAAGoW9gAAahj2AABqGfYAAGob9gAAahz2AABqHvYAAGof9gAAaiH2AABqIvYAAGok9gAAaiX2AABqJ/YAAGoo9gAAair2AABqK/YAAGot9gAAai72AABqMPYAAGox9gAAajP2AABqNPYAAGo29gAAajf2AABqOfYAAGo69gAAajz2AABqPfYAAGo/9gAAakD2AABqQvYAAGpD9gAAakX2AABqRvYAAGpI9gAAakn2AABqS/YAAGpM9gAAak72AABqT/YAAGpR9gAAalL2AABqVPYAAGpV9gAAalf2AABqWPYAAGpa9gAAalv2AABqXfYAAGpe9gAAamD2AABqYfYAAGpj9gAAamT2AABqZvYAAGpn9gAAamn2AABqavYAAGps9gAAam32AABqb/YAAGpw9gAAanL2AABqc/YAAGp19gAAanb2AABqePYAAGp59gAAanv2AABqfPYAAGp+9gAAan/2AABqgfYAAGqC9gAAaoT2AABqhfYAAGqH9gAAaoj2AABqivYAAGqL9gAAao32AABqjvYAAGqQ9gAAapH2AABqk/YAAGqU9gAAapb2AABql/YAAGqZ9gAAapr2AABqnPYAAGqd9gAAap/2AABqoPYAAGqi9gAAaqP2AABqpfYAAGqm9gAAaqj2AABqqfYAAGqr9gAAaqz2AABqrvYAAGqv9gAAarH2AABqsvYAAGq09gAAarX2AABqt/YAAGq49gAAarr2AABqu/YAAGq99gAAar72AABqwPYAAGrB9gAAasP2AABqxPYAAGrG9gAAasf2AABqyfYAAGrK9gAAasz2AABqzfYAAGrP9gAAatD2AABq0vYAAGrT9gAAatX2AABq1vYAAGrY9gAAatn2AABq2/YAAGrc9gAAat72AABq3/YAAGrh9gAAauL2AABq5PYAAGrl9gAAauf2AABq6PYAAGrq9gAAauv2AABq7fYAAGru9gAAavD2AABq8fYAAGrz9gAAavT2AABq9vYAAGr39gAAavn2AABq+vYAAGr89gAAav32AABq//YAAGoA9wAAagL3AABqA/cAAGoF9wAAagb3AABqCPcAAGoJ9wAAagv3AABqDPcAAGoO9wAAag/3AABqEfcAAGoS9wAAahT3AABqFfcAAGoX9wAAahj3AABqGvcAAGob9wAAah33AABqHvcAAGog9wAAaiH3AABqI/cAAGok9wAAaib3AABqJ/cAAGop9wAAair3AABqLPcAAGot9wAAai/3AABqMPcAAGoy9wAAajP3AABqNfcAAGo29wAAajj3AABqOfcAAGo79wAAajz3AABqPvcAAGo/9wAAakH3AABqQvcAAGpE9wAAakX3AABqR/cAAGpI9wAAakr3AABqS/cAAGpN9wAAak73AABqUPcAAGpR9wAAalP3AABqVPcAAGpW9wAAalf3AABqWfcAAGpa9wAAalz3AABqXfcAAGpf9wAAamD3AABqYvcAAGpj9wAAamX3AABqZvcAAGpo9wAAamn3AABqa/cAAGps9wAAam73AABqb/cAAGpx9wAAanL3AABqdPcAAGp19wAAanf3AABqePcAAGp69wAAanv3AABqffcAAGp+9wAAaoD3AABqgfcAAGqD9wAAaoT3AABqhvcAAGqH9wAAaon3AABqivcAAGqM9wAAao33AABqj/cAAGqQ9wAAapL3AABqk/cAAGqV9wAAapb3AABqmPcAAGqZ9wAAapv3AABqnPcAAGqe9wAAap/3AABqofcAAGqi9wAAaqT3AABqpfcAAGqn9wAAaqj3AABqqvcAAGqr9wAAaq33AABqrvcAAGqw9wAAarH3AABqs/cAAGq09wAAarb3AABqt/cAAGq59wAAarr3AABqvPcAAGq99wAAar/3AABqwPcAAGrC9wAAasP3AABqxfcAAGrG9wAAasj3AABqyfcAAGrL9wAAasz3AABqzvcAAGrP9wAAatH3AABq0vcAAGrU9wAAatX3AABq1/cAAGrY9wAAatr3AABq2/cAAGrd9wAAat73AABq4PcAAGrh9wAAauP3AABq5PcAAGrm9wAAauf3AABq6fcAAGrq9wAAauz3AABq7fcAAGrv9wAAavD3AABq8vcAAGrz9wAAavX3AABq9vcAAGr49wAAavn3AABq+/cAAGr89wAAav73AABq//cAAGoB+AAAagL4AABqBPgAAGoF+AAAagf4AABqCPgAAGoK+AAAagv4AABqDfgAAGoO+AAAahD4AABqEfgAAGoT+AAAahT4AABqFvgAAGoX+AAAahn4AABqGvgAAGoc+AAAah34AABqH/gAAGog+AAAaiL4AABqI/gAAGol+AAAaib4AABqKPgAAGop+AAAaiv4AABqLPgAAGou+AAAai/4AABqMfgAAGoy+AAAajT4AABqNfgAAGo3+AAAajj4AABqOvgAAGo7+AAAaj34AABqPvgAAGpA+AAAakH4AABqQ/gAAGpE+AAAakb4AABqR/gAAGpJ+AAAakr4AABqTPgAAGpN+AAAak/4AABqUPgAAGpS+AAAalP4AABqVfgAAGpW+AAAalj4AABqWfgAAGpb+AAAalz4AABqXvgAAGpf+AAAamH4AABqYvgAAGpk+AAAamX4AABqZ/gAAGpo+AAAamr4AABqa/gAAGpt+AAAam74AABqcPgAAGpx+AAAanP4AABqdPgAAGp2+AAAanf4AABqefgAAGp6+AAAanz4AABqffgAAGp/+AAAaoD4AABqgvgAAGqD+AAAaoX4AABqhvgAAGqI+AAAaon4AABqi/gAAGqM+AAAao74AABqj/gAAGqR+AAAapL4AABqlPgAAGqV+AAAapf4AABqmPgAAGqa+AAAapv4AABqnfgAAGqe+AAAaqD4AABqofgAAGqj+AAAaqT4AABqpvgAAGqn+AAAaqn4AABqqvgAAGqs+AAAaq34AABqr/gAAGqw+AAAarL4AABqs/gAAGq1+AAAarb4AABquPgAAGq5+AAAarv4AABqvPgAAGq++AAAar/4AABqwfgAAGrC+AAAasT4AABqxfgAAGrH+AAAasj4AABqyvgAAGrL+AAAas34AABqzvgAAGrQ+AAAatH4AABq0/gAAGrU+AAAatb4AABq1/gAAGrZ+AAAatr4AABq3PgAAGrd+AAAat/4AABq4PgAAGri+AAAauP4AABq5fgAAGrm+AAAauj4AABq6fgAAGrr+AAAauz4AABq7vgAAGrv+AAAavH4AABq8vgAAGr0+AAAavX4AABq9/gAAGr4+AAAavr4AABq+/gAAGr9+AAAav74AABqAPkAAGoB+QAAagP5AABqBPkAAGoG+QAAagf5AABqCfkAAGoK+QAAagz5AABqDfkAAGoP+QAAahD5AABqEvkAAGoT+QAAahX5AABqFvkAAGoY+QAAahn5AABqG/kAAGoc+QAAah75AABqH/kAAGoh+QAAaiL5AABqJPkAAGol+QAAaif5AABqKPkAAGoq+QAAaiv5AABqLfkAAGou+QAAajD5AABqMfkAAGoz+QAAajT5AABqNvkAAGo3+QAAajn5AABqOvkAAGo8+QAAaj35AABqP/kAAGpA+QAAakL5AABqQ/kAAGpF+QAAakb5AABqSPkAAGpJ+QAAakv5AABqTPkAAGpO+QAAak/5AABqUfkAAGpS+QAAalT5AABqVfkAAGpX+QAAalj5AABqWvkAAGpb+QAAal35AABqXvkAAGpg+QAAamH5AABqY/kAAGpk+QAAamb5AABqZ/kAAGpp+QAAamr5AABqbPkAAGpt+QAAam/5AABqcPkAAGpy+QAAanP5AABqdfkAAGp2+QAAanj5AABqefkAAGp7+QAAanz5AABqfvkAAGp/+QAAaoH5AABqgvkAAGqE+QAAaoX5AABqh/kAAGqI+QAAaor5AABqi/kAAGqN+QAAao75AABqkPkAAGqR+QAAapP5AABqlPkAAGqW+QAAapf5AABqmfkAAGqa+QAAapz5AABqnfkAAGqf+QAAaqD5AABqovkAAGqj+QAAaqX5AABqpvkAAGqo+QAAaqn5AABqq/kAAGqs+QAAaq75AABqr/kAAGqx+QAAarL5AABqtPkAAGq1+QAAarf5AABquPkAAGq6+QAAarv5AABqvfkAAGq++QAAasD5AABqwfkAAGrD+QAAasT5AABqxvkAAGrH+QAAasn5AABqyvkAAGrM+QAAas35AABqz/kAAGrQ+QAAatL5AABq0/kAAGrV+QAAatb5AABq2PkAAGrZ+QAAatv5AABq3PkAAGre+QAAat/5AABq4fkAAGri+QAAauT5AABq5fkAAGrn+QAAauj5AABq6vkAAGrr+QAAau35AABq7vkAAGrw+QAAavH5AABq8/kAAGr0+QAAavb5AABq9/kAAGr5+QAAavr5AABq/PkAAGr9+QAAav/5AABqAPoAAGoC+gAAagP6AABqBfoAAGoG+gAAagj6AABqCfoAAGoL+gAAagz6AABqDvoAAGoP+gAAahH6AABqEvoAAGoU+gAAahX6AABqF/oAAGoY+gAAahr6AABqG/oAAGod+gAAah76AABqIPoAAGoh+gAAaiP6AAB1KGok+gAAaib6AABqJ/oAAGop+gAAair6AABqLPoAAGot+gAAai/6AABqMPoAAGoy+gAAajP6AABqNfoAAGo2+gAAajj6AABqOfoAAGo7+gAAajz6AABqPvoAAGo/+gAAakH6AABqQvoAAGpE+gAAakX6AABqR/oAAGpI+gAAakr6AABqS/oAAGpN+gAAak76AABqUPoAAGpR+gAAalP6AABqVPoAAGpW+gAAalf6AABqWfoAAGpa+gAAalz6AABqXfoAAGpf+gAAamD6AABqYvoAAGpj+gAAamX6AABqZvoAAGpo+gAAamn6AABqa/oAAGps+gAAam76AABqb/oAAGpx+gAAanL6AABqdPoAAGp1+gAAanf6AABqePoAAGp6+gAAanv6AABqffoAAGp++gAAaoD6AABqgfoAAGqD+gAAaoT6AABqhvoAAGqH+gAAaon6AABqivoAAGqM+gAAao36AABqj/oAAGqQ+gAAapL6AABqk/oAAGqV+gAAapb6AABqmPoAAGqZ+gAAapv6AABqnPoAAGqe+gAAap/6AABqofoAAGqi+gAAaqT6AABqpfoAAGqn+gAAaqj6AABqqvoAAGqr+gAAaq36AABqrvoAAGqw+gAAarH6AABqs/oAAGq0+gAAarb6AABqt/oAAGq5+gAAarr6AABqvPoAAGq9+gAAar/6AABqwPoAAGrC+gAAasP6AABqxfoAAGrG+gAAasj6AABqyfoAAGrL+gAAasz6AABqzvoAAGrP+gAAatH6AABq0voAAGrU+gAAatX6AABq1/oAAGrY+gAAatr6AABq2/oAAGrd+gAAat76AABq4PoAAGrh+gAAauP6AABq5PoAAGrm+gAAauf6AABq6foAAGrq+gAAauz6AABq7foAAGrv+gAAavD6AABq8voAAGrz+gAAavX6AABq9voAAGr4+gAAavn6AABq+/oAAGr8+gAAav76AABq//oAAGoB+wAAagL7AABqBPsAAGoF+wAAagf7AABqCPsAAGoK+wAAagv7AABqDfsAAGoO+wAAahD7AABqEfsAAGoT+wAAahT7AABqFvsAAGoX+wAAahn7AABqGvsAAGoc+wAAah37AABqH/sAAGog+wAAaiL7AABqI/sAAGol+wAAaib7AABqKPsAAGop+wAAaiv7AABqLPsAAGou+wAAai/7AABqMfsAAGoy+wAAajT7AABqNfsAAGo3+wAAajj7AABqOvsAAGo7+wAAaj37AABqPvsAAGpA+wAAakH7AABqQ/sAAGpE+wAAakb7AABqR/sAAGpJ+wAAakr7AABqTPsAAGpN+wAAak/7AABqUPsAAGpS+wAAalP7AABqVfsAAGpW+wAAalj7AABqWfsAAGpb+wAAalz7AABqXvsAAGpf+wAAamH7AABqYvsAAGpk+wAAamX7AABqZ/sAAGpo+wAAamr7AABqa/sAAGpt+wAAam77AABqcPsAAGpx+wAAanP7AABqdPsAAGp2+wAAanf7AABqefsAAGp6+wAAanz7AABqffsAAGp/+wAAaoD7AABqgvsAAGqD+wAAaoX7AABqhvsAAGqI+wAAaon7AABqi/sAAGqM+wAAao77AABqj/sAAGqR+wAAapL7AABqlPsAAGqV+wAAapf7AABqmPsAAGqa+wAAapv7AABqnfsAAGqe+wAAaqD7AABqofsAAGqj+wAAaqT7AABqpvsAAGqn+wAAaqn7AABqqvsAAGqs+wAAaq37AABqr/sAAGqw+wAAarL7AABqs/sAAGq1+wAAarb7AABquPsAAGq5+wAAarv7AABqvPsAAGq++wAAar/7AABqwfsAAGrC+wAAasT7AABqxfsAAGrH+wAAasj7AABqyvsAAGrL+wAAas37AABqzvsAAGrQ+wAAatH7AABq0/sAAGrU+wAAatb7AABq1/sAAGrZ+wAAatr7AABq3PsAAGrd+wAAat/7AABq4PsAAGri+wAAauP7AABq5fsAAGrm+wAAauj7AABq6fsAAGrr+wAAauz7AABq7vsAAGrv+wAAavH7AABq8vsAAGr0+wAAavX7AABq9/sAAGr4+wAAavr7AABq+/sAAGr9+wAAav77AABqAPwAAGoB/AAAagP8AABqBPwAAGoG/AAAagf8AABqCfwAAGoK/AAAagz8AABqDfwAAGoP/AAAahD8AABqEvwAAGoT/AAA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DAEAai4MAQBqMQwBAGoyDAEAajUMAQBqNgwBAGo5DAEAajoMAQBqPQwBAGo+DAEAakEMAQBqQgwBAGpFDAEAakYMAQBqSQwBAGpKDAEAak0MAQBqTgwBAGpQDAEAalEMAQBqVAwBAGpVDAEAalgMAQBqWQwBAGpcDAEAal0MAQBqYAwBAGphDAEAamQMAQBqZQwBAGpoDAEAamkMAQBqawwBAGpsDAEAam8MAQBqcAwBAGpzDAEAanQMAQBqdwwBAGp4DAEAanoMAQBqewwBAGp+DAEAan8MAQBqggwBAGqDDAEAaoUMAQBqhgwBAGqJDAEAaooMAQBqjQwBAGqODAEAapEMAQBqkgwBAGqVDAEAapYMAQBqmQwBAGqaDAEAapwMAQBqnQwBAGqfDAEAaqAMAQBqowwBAGqkDAEAaqcMAQBqqAwBAGqrDAEAaqwMAQBqrwwBAGqwDAEAarMMAQBqtAwBAGq2DAEAarcMAQBqugwBAGq7DAEAar4MAQBqvwwBAGrCDAEAasMMAQBqxgwBAGrHDAEAasoMAQBqywwBAGrODAEAas8MAQBq0gwBAGrTDAEAatYMAQBq1wwBAGraDAEAatsMAQBq3gwBAGrfDAEAauIMAQBq4wwBAGrmDAEAaucMAQBq6gwBAGrrDAEAau4MAQBq7wwBAGryDAEAavMMAQBq9gwBAGr3DAEAavoMAQBq+wwBAGr+DAEAav8MAQBqAg0BAGoDDQEAagYNAQBqBw0BAGoKDQEAagsNAQBqDg0BAGoPDQEAahINAQBqEw0BAGoWDQEAahcNAQBqGg0BAGobDQEAah4NAQBqHw0BAGoiDQEAaiMNAQBqJg0BAGonDQEAaikNAQBqKg0BAGotDQEAai4NAQBqMQ0BAGoyDQEAajUNAQBqNg0BAGo5DQEAajoNAQBqPQ0BAGo+DQEAakENAQBqQg0BAGpFDQEAakYNAQBqSQ0BAGpKDQEAak0NAQBqTg0BAGpRDQEAalINAQBqVQ0BAGpWDQEAalkNAQBqWg0BAGpdDQEAal4NAQBqYQ0BAGpiDQEAamUNAQBqZg0BAGppDQEAamoNAQBqbQ0BAGpuDQEAanENAQBqcg0BAGp1DQEAanYNAQBqeQ0BAGp6DQEAan0NAQBqfg0BAGqBDQEAaoINAQBqhQ0BAGqGDQEAaokNAQBqig0BAGqNDQEAao4NAQBqkQ0BAGqSDQEAapUNAQBqlg0BAGqZDQEAapoNAQBqnQ0BAGqeDQEAaqENAQBqog0BAGqlDQEAaqYNAQBqqQ0BAGqqDQEAaq0NAQBqrg0BAGqxDQEAarINAQBqtQ0BAGq2DQEAarkNAQBqug0BAGq9DQEAar4NAQBqwQ0BAGrCDQEAasUNAQBqxg0BAGrJDQEAasoNAQBqzQ0BAGrODQEAatENAQBq0g0BAGrVDQEAatYNAQBq2Q0BAGraDQEAat0NAQBq3g0BAGrhDQEAauINAQBq5Q0BAGrmDQEAaukNAQBq6g0BAGrtDQEAau4NAQBq8Q0BAGryDQEAavQNAQBq9Q0BAGr4DQEAavkNAQBq/A0BAGr9DQEAagAOAQBqAQ4BAGoEDgEAagUOAQBqCA4BAGoJDgEAagwOAQBqDQ4BAGoQDgEAahEOAQBqFA4BAGoVDgEAahgOAQBqGQ4BAGocDgEAah0OAQBqIA4BAGohDgEAaiQOAQBqJQ4BAGooDgEAaikOAQBqLA4BAGotDgEAajAOAQBqMQ4BAGo0DgEAajUOAQBqOA4BAGo5DgEAajwOAQBqPQ4BAGpADgEAakEOAQBqRA4BAGpFDgEAakgOAQBqSQ4BAGpMDgEAak0OAQBqUA4BAGpRDgEAalQOAQBqVQ4BAGpYDgEAalkOAQBqXA4BAGpdDgEAamAOAQBqYQ4BAGpkDgEAamUOAQBqaA4BAGppDgEAamwOAQBqbQ4BAGpwDgEAanEOAQBqdA4BAGp1DgEAancOAQBqeA4BAGp7DgEAanwOAQBqfw4BAGqADgEAaoMOAQBqhA4BAGqHDgEAaogOAQBqiw4BAGqMDgEAao8OAQBqkA4BAGqTDgEAapQOAQBqlw4BAGqYDgEAapsOAQBqnA4BAGqfDgEAaqAOAQBqog4BAGqjDgEAaqYOAQBqpw4BAGqqDgEAaqsOAQBqrg4BAGqvDgEAarIOAQBqsw4BAGq2DgEAarcOAQBqug4BAGq7DgEAar4OAQBqvw4BAGrCDgEAasMOAQBqxg4BAGrHDgEAasoOAQBqyw4BAGrODgEAas8OAQBq0g4BAGrTDgEAatYOAQBq1w4BAGraDgEAatsOAQBq3g4BAGrfDgEAauIOAQBq4w4BAGrmDgEAaucOAQBq6g4BAGrrDgEAau4OAQBq7w4BAGry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aqkfAQBqqh8BAGqtHwEAaq4fAQBqsB8BAGqxHwEAarQfAQBqtR8BAGq4HwEAarkfAQBqvB8BAGq9HwEAar8fAQBqwB8BAGrDHwEAasQfAQBqxx8BAGrIHwEAassfAQBqzB8BAGrPHwEAatAfAQBq0x8BAGrUHwEAatYfAQBq1x8BAGrZHwEAatofAQBq3B8BAGrdHwEAauAfAQBq4R8BAGrkHwEAauUfAQBq6B8BAGrpHwEAauwfAQBq7R8BAGrwHwEAavEfAQBq9B8BAGr1HwEAavgfAQBq+R8BAGr8HwEAav0fAQBqACABAGoBIAEAagQgAQBqBSABAGoIIAEAagkgAQBqDCABAGoNIAEAahAgAQBqESABAGoUIAEAahUgAQBqGCABAGoZIAEAahwgAQBqHSABAGogIAEAaiEgAQBqJCABAGolIAEAaiggAQBqKSABAGosIAEAai0gAQBqMCABAGoxIAEAajMgAQBqNCABAGo3IAEAajggAQBqOyABAGo8IAEAaj8gAQBqQCABAGpDIAEAakQgAQBqRyABAGpIIAEAaksgAQBqTCABAGpPIAEAalAgAQBqUyABAGpUIAEAalcgAQBqWCABAGpbIAEAalwgAQBqXyABAGpgIAEAamMgAQBqZCABAGpnIAEAamggAQBqayABAGpsIAEAam8gAQBqcCABAGpzIAEAanQgAQBqdyABAGp4IAEAanogAQBqeyABAGp+IAEAan8gAQBqgiABAGqDIAEAaoYgAQBqhyABAGqKIAEAaosgAQBqjiABAGqPIAEAapIgAQBqkyABAGqWIAEAapcgAQBqmiABAGqbIAEAap4gAQBqnyABAGqiIAEAaqMgAQBqpiABAGqnIAEAaqogAQBqqyABAGquIAEAaq8gAQBqsiABAGqzIAEAarYgAQBqtyABAGq6IAEAarsgAQBqviABAGq/IAEAasIgAQBqwyABAGrGIAEAascgAQBqyiABAGrLIAEAas4gAQBqzyABAGrSIAEAatMgAQBq1iABAGrXIAEAatogAQBq2yABAGreIAEAat8gAQBq4iABAGrjIAEAauYgAQBq5yABAGrqIAEAausgAQBq7iABAGrvIAEAavIgAQBq8yABAGr2IAEAavcgAQBq+iABAGr7IAEAav4gAQBq/yABAGoCIQEAagMhAQBqBiEBAGoHIQEAagohAQBqCyEBAGoOIQEAag8hAQBqEiEBAGoTIQEAahYhAQB1agePAAB9lChqCY8AAGoOjwAAag+PAABqEY8AAGoSjwAAahSPAABqFY8AAGoXjwAAahiPAABqGo8AAGobjwAAah2PAABqHo8AAGogjwAAaiGPAABqI48AAGokjwAAaiaPAABqJ48AAGopjwAAaiqPAABqLI8AAGotjwAAai+PAABqMI8AAGoyjwAAajOPAABqNY8AAGo2jwAAajiPAABqOY8AAGo7jwAAajyPAABqPo8AAGo/jwAAakGPAABqQo8AAGpEjwAAakWPAABqR48AAGpIjwAAakqPAABqS48AAGpNjwAAak6PAABqUI8AAGpRjwAAalOPAABqVI8AAGpWjwAAalePAABqWY8AAGpajwAAalyPAABqXY8AAGpfjwAAamCPAABqYo8AAGpjjwAAamWPAABqZo8AAGpojwAAammPAABqa48AAGpsjwAAam6PAABqb48AAGpxjwAAanKPAABqdI8AAGp1jwAAanePAABqeI8AAGp6jwAAanuPAABqfY8AAGp+jwAAaoCPAABqgY8AAGqDjwAAaoSPAABqho8AAGqHjwAAaomPAABqio8AAGqMjwAAao2PAABqj48AAGqQjwAAapKPAABqk48AAGqVjwAAapaPAABqmI8AAGqZjwAAapuPAABqnI8AAGqejwAAap+PAABqoY8AAGqijwAAaqSPAABqpY8AAGqnjwAAaqiPAABqqo8AAGqrjwAAaq2PAABqro8AAGqwjwAAarGPAABqs48AAGq0jwAAaraPAABqt48AAGq5jwAAarqPAABqvI8AAGq9jwAAar+PAABqwI8AAGrCjwAAasOPAABqxY8AAGrGjwAAasiPAABqyY8AAGrLjwAAasyPAABqzo8AAGrPjwAAatGPAABq0o8AAGrUjwAAatWPAABq148AAGrYjwAAatqPAABq248AAGrdjwAAat6PAABq4I8AAGrhjwAAauOPAABq5I8AAGrmjwAAdWrnjwAAfZQoaumPAABq648AAGrsjwAAau6PAABq748AAGrxjwAAavKPAABq9I8AAGr1jwAAavePAABq+I8AAGr6jwAAavuPAABq/Y8AAGr+jwAAagCQAABqAZAAAGoDkAAAagSQAABqBpAAAGoHkAAAagmQAABqCpAAAGoMkAAAag2QAABqD5AAAGoQkAAAahKQAABqE5AAAGoVkAAAahaQAABqGJAAAGoZkAAAahuQAABqHJAAAGoekAAAah+QAABqIZAAAGoikAAAaiSQAABqJZAAAGonkAAAaiiQAABqKpAAAGorkAAAai2QAABqLpAAAGowkAAAajGQAABqM5AAAGo0kAAAajaQAABqN5AAAGo5kAAAajqQAABqPJAAAGo9kAAAaj+QAABqQJAAAGpCkAAAakOQAABqRZAAAGpGkAAAakiQAABqSZAAAGpLkAAAakyQAABqTpAAAGpPkAAAalGQAABqUpAAAGpUkAAAalWQAABqV5AAAGpYkAAAalqQAABqW5AAAGpdkAAAal6QAABqYJAAAGphkAAAamOQAABqZJAAAGpmkAAAameQAABqaZAAAGpqkAAAamyQAABqbZAAAGpvkAAAanCQAABqcpAAAGpzkAAAanWQAABqdpAAAGp4kAAAanmQAABqe5AAAGp8kAAAan6QAABqf5AAAGqBkAAAaoKQAABqhJAAAGqFkAAAaoeQAABqiJAAAGqKkAAAaouQAABqjZAAAGqOkAAAapCQAABqkZAAAGqTkAAAapSQAABqlpAAAGqXkAAAapmQAABqmpAAAGqckAAAap2QAABqn5AAAGqgkAAAaqKQAABqo5AAAGqlkAAAaqaQAABqqJAAAGqpkAAAaquQAABqrJAAAGqukAAAaq+QAABqsZAAAGqykAAAarSQAABqtZAAAGq3kAAAariQAABqupAAAGq7kAAAar2QAABqvpAAAGrAkAAAasGQAABqw5AAAGrEkAAAasaQAABqx5AAAGrJkAAAasqQAABqzJAAAGrNkAAAas+QAABq0JAAAGrSkAAAatOQAABq1ZAAAGrWkAAAatiQAABq2ZAAAGrbkAAAatyQAABq3pAAAGrfkAAAauGQAABq4pAAAGrkkAAAauWQAABq55AAAGrokAAAauqQAABq65AAAGrtkAAAau6QAABq8JAAAGrxkAAAavOQAABq9JAAAGr2kAAAaveQAABq+ZAAAGr6kAAAavyQAABq/ZAAAGr/kAAAagCRAABqApEAAHVqA5EAAH2UKGoFkQAAageRAABqCJEAAGoKkQAAaguRAABqDZEAAGoOkQAAahCRAABqEZEAAGoTkQAAahSRAABqFpEAAGoXkQAAahmRAABqGpEAAGockQAAah2RAABqH5EAAGogkQAAaiKRAABqI5EAAGolkQAAaiaRAABqKJEAAGopkQAAaiuRAABqLJEAAGoukQAAai+RAABqMZEAAGoykQAAajSRAABqNZEAAGo3kQAAajiRAABqOpEAAGo7kQAAaj2RAABqPpEAAGpAkQAAakGRAABqQ5EAAGpEkQAAakaRAABqR5EAAGpJkQAAakqRAABqTJEAAGpNkQAAak+RAABqUJEAAGpSkQAAalORAABqVZEAAGpWkQAAaliRAABqWZEAAGpbkQAAalyRAABqXpEAAGpfkQAAamGRAABqYpEAAGpkkQAAamWRAABqZ5EAAGpokQAAamqRAABqa5EAAGptkQAAam6RAABqcJEAAGpxkQAAanORAABqdJEAAGp2kQAAaneRAABqeZEAAGp6kQAAanyRAABqfZEAAGp/kQAAaoCRAABqgpEAAGqDkQAAaoWRAABqhpEAAGqIkQAAaomRAABqi5EAAGqMkQAAao6RAABqj5EAAGqRkQAAapKRAABqlJEAAGqVkQAAapeRAABqmJEAAGqakQAAapuRAABqnZEAAGqekQAAaqCRAABqoZEAAGqjkQAAaqSRAABqppEAAGqnkQAAaqmRAABqqpEAAGqskQAAaq2RAABqr5EAAGqwkQAAarKRAABqs5EAAGq1kQAAaraRAABquJEAAGq5kQAAaruRAABqvJEAAGq+kQAAar+RAABqwZEAAGrCkQAAasSRAABqxZEAAGrHkQAAasiRAABqypEAAGrLkQAAas2RAABqzpEAAGrQkQAAatGRAABq05EAAGrUkQAAataRAABq15EAAGrZkQAAatqRAABq3JEAAGrdkQAAat+RAABq4JEAAGrikQAAauORAABq5ZEAAGrmkQAAauiRAABq6ZEAAGrrkQAAauyRAABq7pEAAGrvkQAAavGRAABq8pEAAGr0kQAAavWRAABq95EAAGr4kQAAavqRAABq+5EAAGr9kQAAav6RAABqAJIAAGoBkgAAagOSAABqBJIAAGoGkgAAageSAABqCZIAAGoKkgAAagySAABqDZIAAGoPkgAAahCSAABqEpIAAGoTkgAAahWSAABqFpIAAGoYkgAAahmSAABqG5IAAGockgAAah6SAABqH5IAAGohkgAAaiKSAABqJJIAAGolkgAAaieSAABqKJIAAGoqkgAAaiuSAABqLZIAAGoukgAAajCSAABqMZIAAGozkgAAajSSAABqNpIAAGo3kgAAajmSAABqOpIAAGo8kgAAaj2SAABqP5IAAGpAkgAAakKSAABqQ5IAAGpFkgAAakaSAABqSJIAAGpJkgAAakuSAABqTJIAAGpOkgAAak+SAABqUZIAAGpSkgAAalSSAABqVZIAAGpXkgAAaliSAABqWpIAAGpbkgAAal2SAABqXpIAAGpgkgAAamGSAABqY5IAAGpkkgAAamaSAABqZ5IAAGppkgAAamqSAABqbJIAAGptkgAAam+SAABqcJIAAGpykgAAanOSAABqdZIAAGp2kgAAaniSAABqeZIAAGp7kgAAanySAABqfpIAAGp/kgAAaoGSAABqgpIAAGqEkgAAaoWSAABqh5IAAGqIkgAAaoqSAABqi5IAAGqNkgAAao6SAABqkJIAAGqRkgAAapOSAABqlJIAAGqWkgAAapeSAABqmZIAAGqakgAAapySAABqnZIAAGqfkgAAaqCSAABqopIAAGqjkgAAaqWSAABqppIAAGqokgAAaqmSAABqq5IAAGqskgAAaq6SAABqr5IAAGqxkgAAarKSAABqtJIAAGq1kgAAareSAABquJIAAGq6kgAAaruSAABqvZIAAGq+kgAAasCSAABqwZIAAGrDkgAAasSSAABqxpIAAGrHkgAAasmSAABqypIAAGrMkgAAas2SAABqz5IAAGrQkgAAatKSAABq05IAAGrVkgAAataSAABq2JIAAGrZkgAAatuSAABq3JIAAGrekgAAat+SAABq4ZIAAGrikgAAauSSAABq5ZIAAGrnkgAAauiSAABq6pIAAGrrkgAAau2SAABq7pIAAGrwkgAAavGSAABq85IAAGr0kgAAavaSAABq95IAAGr5kgAAavqSAABq/JIAAGr9kgAAav+SAABqAJMAAGoCkwAAagOTAABqBZMAAGoGkwAAagiTAABqCZMAAGoLkwAAagyTAABqDpMAAGoPkwAAahGTAABqEpMAAGoUkwAAahWTAABqF5MAAGoYkwAAahqTAABqG5MAAGodkwAAah6TAABqIJMAAGohkwAAaiOTAABqJJMAAGomkwAAaieTAABqKZMAAGoqkwAAaiyTAABqLZMAAGovkwAAajCTAABqMpMAAGozkwAAajWTAABqNpMAAGo4kwAAajmTAABqO5MAAGo8kwAAaj6TAABqP5MAAGpBkwAAakKTAABqRJMAAGpFkwAAakeTAABqSJMAAGpKkwAAakuTAABqTZMAAGpOkwAAalCTAABqUZMAAGpTkwAAalSTAABqVpMAAGpXkwAAalmTAABqWpMAAGpckwAAal2TAABqX5MAAGpgkwAAamKTAABqY5MAAGplkwAAamaTAABqaJMAAGppkwAAamuTAABqbJMAAGpukwAAam+TAABqcZMAAGpykwAAanSTAABqdZMAAGp3kwAAaniTAABqepMAAGp7kwAAan2TAABqfpMAAGqAkwAAaoGTAABqg5MAAGqEkwAAaoaTAABqh5MAAGqJkwAAaoqTAABqjJMAAGqNkwAAao+TAABqkJMAAGqSkwAAapOTAABqlZMAAGqWkwAAapiTAABqmZMAAGqbkwAAapyTAABqnpMAAGqfkwAAaqGTAABqopMAAGqkkwAAaqWTAABqp5MAAGqokwAAaqqTAABqq5MAAGqtkwAAaq6TAABqsJMAAGqxkwAAarOTAABqtJMAAGq2kwAAareTAABquZMAAGq6kwAAaryTAABqvZMAAGq/kwAAasCTAABqwpMAAGrDkwAAasWTAABqxpMAAGrIkwAAasmTAABqy5MAAGrMkwAAas6TAABqz5MAAGrRkwAAatKTAABq1JMAAGrVkwAAateTAABq2JMAAGrakwAAatuTAABq3ZMAAGrekwAAauCTAABq4ZMAAGrjkwAAauSTAABq5pMAAGrnkwAAaumTAABq6pMAAGrskwAAau2TAABq75MAAGrwkwAAavKTAABq85MAAGr1kwAAavaTAABq+JMAAGr5kwAAavuTAABq/JMAAGr+kwAAav+TAABqAZQAAGoClAAAagSUAABqBZQAAGoHlAAAagiUAABqCpQAAGoLlAAAag2UAABqDpQAAGoQlAAAahGUAABqE5QAAGoUlAAAahaUAABqF5QAAGoZlAAAahqUAABqHJQAAGodlAAAah+UAABqIJQAAGoilAAAaiOUAABqJZQAAGomlAAAaiiUAABqKZQAAGorlAAAaiyUAABqLpQAAGovlAAAajGUAABqMpQAAGo0lAAAajWUAABqN5QAAGo4lAAAajqUAABqO5QAAGo9lAAAaj6UAABqQJQAAGpBlAAAakOUAABqRJQAAGpGlAAAakeUAABqSZQAAGpKlAAAakyUAABqTZQAAGpPlAAAalCUAABqUpQAAGpTlAAAalWUAABqVpQAAGpYlAAAalmUAABqW5QAAGpclAAAal6UAABqX5QAAGphlAAAamKUAABqZJQAAGpllAAAameUAABqaJQAAGpqlAAAamuUAABqbZQAAGpulAAAanCUAABqcZQAAGpzlAAAanSUAABqdpQAAGp3lAAAanmUAABqepQAAGp8lAAAan2UAABqf5QAAGqAlAAAaoKUAABqg5QAAGqFlAAAaoaUAABqiJQAAGqJlAAAaouUAABqjJQAAGqOlAAAao+UAABqkZQAAGqSlAAAapSUAABqlZQAAGqXlAAAapiUAABqmpQAAGqblAAAap2UAABqnpQAAGqglAAAaqGUAABqo5QAAGqklAAAaqaUAABqp5QAAGqplAAAaqqUAABqrJQAAGqtlAAAaq+UAABqsJQAAGqylAAAarOUAABqtZQAAGq2lAAAariUAABquZQAAGq7lAAAaryUAABqvpQAAGq/lAAAasGUAABqwpQAAGrElAAAasWUAABqx5QAAGrIlAAAasqUAABqy5QAAGrNlAAAas6UAABq0JQAAGrRlAAAatOUAABq1JQAAGrWlAAAateUAABq2ZQAAGralAAAatyUAABq3ZQAAGrflAAAauCUAABq4pQAAGrjlAAAauWUAABq5pQAAGrolAAAaumUAABq65QAAGrslAAAau6UAABq75QAAGrxlAAAavKUAABq9JQAAGr1lAAAaveUAABq+JQAAGr6lAAAavuUAABq/ZQAAGr+lAAAagCVAABqAZUAAGoDlQAAagSVAABqBpUAAGoHlQAAagmVAABqCpUAAGoMlQAAag2VAABqD5UAAGoQlQAAahKVAABqE5UAAGoVlQAAahaVAABqGJUAAGoZlQAAahuVAABqHJUAAGoelQAAah+VAABqIZUAAGoilQAAaiSVAABqJZUAAGonlQAAaiiVAABqKpUAAGorlQAAai2VAABqLpUAAGowlQAAajGVAABqM5UAAGo0lQAAajaVAABqN5UAAGo5lQAAajqVAABqPJUAAGo9lQAAaj+VAABqQJUAAGpClQAAakOVAABqRZUAAGpGlQAAakiVAABqSZUAAGpLlQAAakyVAABqTpUAAGpPlQAAalGVAABqUpUAAGpUlQAAalWVAABqV5UAAGpYlQAAalqVAABqW5UAAGpdlQAAal6VAABqYJUAAGphlQAAamOVAABqZJUAAGpmlQAAameVAABqaZUAAGpqlQAAamyVAABqbZUAAGpvlQAAanCVAABqcpUAAGpzlQAAanWVAABqdpUAAGp4lQAAanmVAABqe5UAAGp8lQAAan6VAABqf5UAAGqBlQAAaoKVAABqhJUAAGqFlQAAaoeVAABqiJUAAGqKlQAAaouVAABqjZUAAGqOlQAAapCVAABqkZUAAGqTlQAAapSVAABqlpUAAGqXlQAAapmVAABqmpUAAGqclQAAap2VAABqn5UAAGqglQAAaqKVAABqo5UAAGqllQAAaqaVAABqqJUAAGqplQAAaquVAABqrJUAAGqulQAAaq+VAABqsZUAAGqylQAAarSVAABqtZUAAGq3lQAAariVAABqupUAAGq7lQAAar2VAABqvpUAAGrAlQAAasGVAABqw5UAAGrElQAAasaVAABqx5UAAGrJlQAAasqVAABqzJUAAGrNlQAAas+VAABq0JUAAGrSlQAAatOVAABq1ZUAAGrWlQAAatiVAABq2ZUAAGrblQAAatyVAABq3pUAAGrflQAAauGVAABq4pUAAGrklQAAauWVAABq55UAAGrolQAAauqVAABq65UAAGrtlQAAau6VAABq8JUAAGrxlQAAavOVAABq9JUAAGr2lQAAaveVAABq+ZUAAGr6lQAAavyVAABq/ZUAAGr/lQAAagCWAABqApYAAGoDlgAAagWWAABqBpYAAGoIlgAAagmWAABqC5YAAGoMlgAAag6WAABqD5YAAGoRlgAAahKWAABqFJYAAGoVlgAAaheWAABqGJYAAGoalgAAahuWAABqHZYAAGoelgAAaiCWAABqIZYAAGojlgAAaiSWAABqJpYAAGonlgAAaimWAABqKpYAAGoslgAAai2WAABqL5YAAGowlgAAajKWAABqM5YAAGo1lgAAajaWAABqOJYAAGo5lgAAajuWAABqPJYAAGo+lgAAaj+WAABqQZYAAGpClgAAakSWAABqRZYAAGpHlgAAakiWAABqSpYAAGpLlgAAak2WAABqTpYAAGpQlgAAalGWAABqU5YAAGpUlgAAalaWAABqV5YAAGpZlgAAalqWAABqXJYAAGpdlgAAal+WAABqYJYAAGpilgAAamOWAABqZZYAAGpmlgAAamiWAABqaZYAAGprlgAAamyWAABqbpYAAGpvlgAAanGWAABqcpYAAGp0lgAAanWWAABqd5YAAGp4lgAAanqWAABqe5YAAGp9lgAAan6WAABqgJYAAGqBlgAAaoOWAABqhJYAAGqGlgAAaoeWAABqiZYAAGqKlgAAaoyWAABqjZYAAGqPlgAAapCWAABqkpYAAGqTlgAAapWWAABqlpYAAGqYlgAAapmWAABqm5YAAGqclgAAap6WAABqn5YAAGqhlgAAaqKWAABqpJYAAGqllgAAaqeWAABqqJYAAGqqlgAAaquWAABqrZYAAGqulgAAarCWAABqsZYAAGqzlgAAarSWAABqtpYAAGq3lgAAarmWAABqupYAAGq8lgAAar2WAABqv5YAAGrAlgAAasKWAABqw5YAAGrFlgAAasaWAABqyJYAAGrJlgAAasuWAABqzJYAAGrOlgAAas+WAABq0ZYAAGrSlgAAatSWAABq1ZYAAGrXlgAAatiWAABq2pYAAGrblgAAat2WAABq3pYAAGrglgAAauGWAABq45YAAGrklgAAauaWAABq55YAAGrplgAAauqWAABq7JYAAGrtlgAAau+WAABq8JYAAGrylgAAavOWAABq9ZYAAGr2lgAAaviWAABq+ZYAAGr7lgAAavyWAABq/pYAAGr/lgAAagGXAABqApcAAGoElwAAagWXAABqB5cAAGoIlwAAagqXAABqC5cAAGoNlwAAag6XAABqEJcAAGoRlwAAahOXAABqFJcAAGoWlwAAaheXAABqGZcAAGoalwAAahyXAABqHZcAAGoflwAAaiCXAABqIpcAAGojlwAAaiWXAABqJpcAAGoolwAAaimXAABqK5cAAGoslwAAai6XAABqL5cAAGoxlwAAajKXAABqNJcAAGo1lwAAajeXAABqOJcAAGo6lwAAajuXAABqPZcAAGo+lwAAakCXAABqQZcAAGpDlwAAakSXAABqRpcAAGpHlwAAakmXAABqSpcAAGpMlwAAak2XAABqT5cAAGpQlwAAalKXAABqU5cAAGpVlwAAalaXAABqWJcAAGpZlwAAaluXAABqXJcAAGpelwAAal+XAABqYZcAAGpilwAAamSXAABqZZcAAGpnlwAAamiXAABqapcAAGprlwAAam2XAABqbpcAAGpwlwAAanGXAABqc5cAAGp0lwAAanaXAABqd5cAAGp5lwAAanqXAABqfJcAAGp9lwAAan+XAABqgJcAAGqClwAAaoOXAABqhZcAAGqGlwAAaoiXAABqiZcAAGqLlwAAaoyXAABqjpcAAGqPlwAAapGXAABqkpcAAGqUlwAAapWXAABql5cAAGqYlwAAapqXAABqm5cAAGqdlwAAap6XAABqoJcAAGqhlwAAaqOXAABqpJcAAGqmlwAAaqeXAABqqZcAAGqqlwAAaqyXAABqrZcAAGqvlwAAarCXAABqspcAAGqzlwAAarWXAABqtpcAAGq4lwAAarmXAABqu5cAAGq8lwAAar6XAABqv5cAAGrBlwAAasKXAABqxJcAAGrFlwAAaseXAABqyJcAAGrKlwAAasuXAABqzZcAAGrOlwAAatCXAABq0ZcAAGrTlwAAatSXAABq1pcAAGrXlwAAatmXAABq2pcAAGrclwAAat2XAABq35cAAGrglwAAauKXAABq45cAAGrllwAAauaXAABq6JcAAGrplwAAauuXAABq7JcAAGrulwAAau+XAABq8ZcAAGrylwAAavSXAABq9ZcAAGr3lwAAaviXAABq+pcAAGr7lwAAav2XAABq/pcAAGoAmAAAagGYAABqA5gAAGoEmAAAagaYAABqB5gAAGoJmAAAagqYAABqDJgAAGoNmAAAag+YAABqEJgAAGoSmAAAahOYAABqFZgAAGoWmAAAahiYAABqGZgAAGobmAAAahyYAABqHpgAAGofmAAAaiGYAABqIpgAAGokmAAAaiWYAABqJ5gAAGoomAAAaiqYAABqK5gAAGotmAAAai6YAABqMJgAAGoxmAAAajOYAABqNJgAAGo2mAAAajeYAABqOZgAAGo6mAAAajyYAABqPZgAAGo/mAAAakCYAABqQpgAAGpDmAAAakWYAABqRpgAAGpImAAAakmYAABqS5gAAGpMmAAAak6YAABqT5gAAGpRmAAAalKYAABqVJgAAGpVmAAAaleYAABqWJgAAGpamAAAaluYAABqXZgAAGpemAAAamCYAABqYZgAAGpjmAAAamSYAABqZpgAAGpnmAAAammYAABqapgAAGpsmAAAam2YAABqb5gAAGpwmAAAanKYAABqc5gAAGp1mAAAanaYAABqeJgAAGp5mAAAanuYAABqfJgAAGp+mAAAan+YAABqgZgAAGqCmAAAaoSYAABqhZgAAGqHmAAAaoiYAABqipgAAGqLmAAAao2YAABqjpgAAGqQmAAAapGYAABqk5gAAGqUmAAAapaYAABql5gAAGqZmAAAapqYAABqnJgAAGqdmAAAap+YAABqoJgAAGqimAAAaqOYAABqpZgAAGqmmAAAaqiYAABqqZgAAGqrmAAAaqyYAABqrpgAAGqvmAAAarGYAABqspgAAGq0mAAAarWYAABqt5gAAGq4mAAAarqYAABqu5gAAGq9mAAAar6YAABqwJgAAGrBmAAAasOYAABqxJgAAGrGmAAAaseYAABqyZgAAGrKmAAAasyYAABqzZgAAGrPmAAAatCYAABq0pgAAGrTmAAAatWYAABq1pgAAGrYmAAAatmYAABq25gAAGrcmAAAat6YAABq35gAAGrhmAAAauKYAABq5JgAAGrlmAAAaueYAABq6JgAAGrqmAAAauuYAABq7ZgAAGrumAAAavCYAABq8ZgAAGrzmAAAavSYAABq9pgAAGr3mAAAavmYAABq+pgAAGr8mAAAav2YAABq/5gAAGoAmQAAagKZAABqA5kAAGoFmQAAagaZAABqCJkAAGoJmQAAaguZAABqDJkAAGoOmQAAag+ZAABqEZkAAGoSmQAAahSZAABqFZkAAGoXmQAAahiZAABqGpkAAGobmQAAah2ZAABqHpkAAGogmQAAaiGZAABqI5kAAGokmQAAaiaZAABqJ5kAAGopmQAAaiqZAABqLJkAAGotmQAAai+ZAABqMJkAAGoymQAAajOZAABqNZkAAGo2mQAAajiZAABqOZkAAGo7mQAAajyZAABqPpkAAGo/mQAAakGZAABqQpkAAGpEmQAAakWZAABqR5kAAGpImQAAakqZAABqS5kAAGpNmQAAak6ZAABqUJkAAGpRmQAAalOZAABqVJkAAGpWmQAAaleZAABqWZkAAGpamQAAalyZAABqXZkAAGpfmQAAamCZAABqYpkAAGpjmQAAamWZAABqZpkAAGpomQAAammZAABqa5kAAGpsmQAAam6ZAABqb5kAAGpxmQAAanKZAABqdJkAAGp1mQAAaneZAABqeJkAAGp6mQAAanuZAABqfZkAAGp+mQAAaoCZAABqgZkAAGqDmQAAaoSZAABqhpkAAGqHmQAAaomZAABqipkAAGqMmQAAao2ZAABqj5kAAGqQmQAAapKZAABqk5kAAGqVmQAAapaZAABqmJkAAGqZmQAAapuZAABqnJkAAGqemQAAap+ZAABqoZkAAGqimQAAaqSZAABqpZkAAGqnmQAAaqiZAABqqpkAAGqrmQAAaq2ZAABqrpkAAGqwmQAAarGZAABqs5kAAGq0mQAAaraZAABqt5kAAGq5mQAAarqZAABqvJkAAGq9mQAAar+ZAABqwJkAAGrCmQAAasOZAABqxZkAAGrGmQAAasiZAABqyZkAAGrLmQAAasyZAABqzpkAAGrPmQAAatGZAABq0pkAAGrUmQAAatWZAABq15kAAGrYmQAAatqZAABq25kAAGrdmQAAat6ZAABq4JkAAGrhmQAAauOZAABq5JkAAGrmmQAAaueZAABq6ZkAAGrqmQAAauyZAABq7ZkAAGrvmQAAavCZAABq8pkAAGrzmQAAavWZAABq9pkAAGr4mQAAavmZAABq+5kAAGr8mQAAav6ZAABq/5kAAGoBmgAAagKaAABqBJoAAGoFmgAAageaAABqCJoAAGoKmgAAaguaAABqDZoAAGoOmgAAahCaAABqEZoAAGoTmgAAahSaAABqFpoAAGoXmgAAahmaAABqGpoAAGocmgAAah2aAABqH5oAAGogmgAAaiKaAABqI5oAAGolmgAAaiaaAABqKJoAAGopmgAAaiuaAABqLJoAAGoumgAAai+aAABqMZoAAGoymgAAajSaAABqNZoAAGo3mgAAajiaAABqOpoAAGo7mgAAaj2aAABqPpoAAGpAmgAAakGaAABqQ5oAAGpEmgAAakaaAABqR5oAAGpJmgAAakqaAABqTJoAAGpNmgAAak+aAABqUJoAAGpSmgAAalOaAABqVZoAAGpWmgAAaliaAABqWZoAAGpbmgAAalyaAABqXpoAAGpfmgAAamGaAABqYpoAAGpkmgAAamWaAABqZ5oAAGpomgAAamqaAABqa5oAAGptmgAAam6aAABqcJoAAGpxmgAAanOaAABqdJoAAGp2mgAAaneaAABqeZoAAGp6mgAAanyaAABqfZoAAGp/mgAAaoCaAABqgpoAAGqDmgAAaoWaAABqhpoAAGqImgAAaomaAABqi5oAAGqMmgAAao6aAABqj5oAAGqRmgAAapKaAABqlJoAAGqVmgAAapeaAABqmJoAAGqamgAAapuaAABqnZoAAGqemgAAaqCaAABqoZoAAGqjmgAAaqSaAABqppoAAGqnmgAAaqmaAABqqpoAAGqsmgAAaq2aAABqr5oAAGqwmgAAarKaAABqs5oAAGq1mgAAaraaAABquJoAAGq5mgAAaruaAABqvJoAAGq+mgAAar+aAABqwZoAAGrCmgAAasSaAABqxZoAAGrHmgAAasiaAABqypoAAGrLmgAAas2aAABqzpoAAGrQmgAAatGaAABq05oAAGrUmgAAataaAABq15oAAGrZmgAAatqaAABq3JoAAGrdmgAAat+aAABq4JoAAGrimgAAauOaAABq5ZoAAGrmmgAAauiaAABq6ZoAAGrrmgAAauyaAABq7poAAGrvmgAAavGaAABq8poAAGr0mgAAavWaAABq95oAAGr4mgAAavqaAABq+5oAAGr9mgAAav6aAABqAJsAAGoBmwAAagObAABqBJsAAGoGmwAAagebAABqCZsAAGoKmwAAagybAABqDZsAAGoPmwAAahCbAABqEpsAAGoTmwAAahWbAABqFpsAAGoYmwAAahmbAABqG5sAAGocmwAAah6bAABqH5sAAGohmwAAaiKbAABqJJsAAGolmwAAaiebAABqKJsAAGoqmwAAaiubAABqLZsAAGoumwAAajCbAABqMZsAAGozmwAAajSbAABqNpsAAGo3mwAAajmbAABqOpsAAGo8mwAAaj2bAABqP5sAAGpAmwAAakKbAABqQ5sAAGpFmwAAakabAABqSJsAAGpJmwAAakubAABqTJsAAGpOmwAAak+bAABqUZsAAGpSmwAAalSbAABqVZsAAGpXmwAAalibAABqWpsAAGpbmwAAal2bAABqXpsAAGpgmwAAamGbAABqY5sAAGpkmwAAamabAABqZ5sAAGppmwAAamqbAABqbJsAAGptmwAAam+bAABqcJsAAGpymwAAanObAABqdZsAAGp2mwAAanibAABqeZsAAGp7mwAAanybAABqfpsAAGp/mwAAaoGbAABqgpsAAGqEmwAAaoWbAABqh5sAAGqImwAAaoqbAABqi5sAAGqNmwAAao6bAABqkJsAAGqRmwAAapObAABqlJsAAGqWmwAAapebAABqmZsAAGqamwAAapybAABqnZsAAGqfmwAAaqCbAABqopsAAGqjmwAAaqWbAABqppsAAGqomwAAaqmbAABqq5sAAGqsmwAAaq6bAABqr5sAAGqxmwAAarKbAABqtJsAAGq1mwAAarebAABquJsAAGq6mwAAarubAABqvZsAAGq+mwAAasCbAABqwZsAAGrDmwAAasSbAABqxpsAAGrHmwAAasmbAABqypsAAGrMmwAAas2bAABqz5sAAGrQmwAAatKbAABq05sAAGrVmwAAatabAABq2JsAAGrZmwAAatubAABq3JsAAGremwAAat+bAABq4ZsAAGrimwAAauSbAABq5ZsAAGrnmwAAauibAABq6psAAGrrmwAAau2bAABq7psAAGrwmwAAavGbAABq85sAAGr0mwAAavabAABq95sAAGr5mwAAavqbAABq/JsAAGr9mwAAav+bAABqAJwAAGoCnAAAagOcAABqBZwAAGoGnAAAagicAABqCZwAAGoLnAAAagycAABqDpwAAGoPnAAAahGcAABqEpwAAGoUnAAAahWcAABqF5wAAGoYnAAAahqcAABqG5wAAGodnAAAah6cAABqIJwAAGohnAAAaiOcAABqJJwAAGomnAAAaiecAABqKZwAAGoqnAAAaiycAABqLZwAAGovnAAAajCcAABqMpwAAGoznAAAajWcAABqNpwAAGo4nAAAajmcAABqO5wAAGo8nAAAaj6cAAB1aj+cAAB9lChqQZwAAGpDnAAAakScAABqRpwAAGpHnAAAakmcAABqSpwAAGpMnAAAak2cAABqT5wAAGpQnAAAalKcAABqU5wAAGpVnAAAalacAABqWJwAAGpZnAAAalucAABqXJwAAGpenAAAal+cAABqYZwAAGpinAAAamScAABqZZwAAGpnnAAAamicAABqapwAAGprnAAAam2cAABqbpwAAGpwnAAAanGcAABqc5wAAGp0nAAAanacAABqd5wAAGp5nAAAanqcAABqfJwAAGp9nAAAan+cAABqgJwAAGqCnAAAaoOcAABqhZwAAGqGnAAAaoicAABqiZwAAGqLnAAAaoycAABqjpwAAGqPnAAAapGcAABqkpwAAGqUnAAAapWcAABql5wAAGqYnAAAapqcAABqm5wAAGqdnAAAap6cAABqoJwAAGqhnAAAaqOcAABqpJwAAGqmnAAAaqecAABqqZwAAGqqnAAAaqycAABqrZwAAGqvnAAAarCcAABqspwAAGqznAAAarWcAABqtpwAAGq4nAAAarmcAABqu5wAAGq8nAAAar6cAABqv5wAAGrBnAAAasKcAABqxJwAAGrFnAAAasecAABqyJwAAGrKnAAAasucAABqzZwAAGrOnAAAatCcAABq0ZwAAGrTnAAAatScAABq1pwAAGrXnAAAatmcAABq2pwAAGrcnAAAat2cAABq35wAAGrgnAAAauKcAABq45wAAGrlnAAAauacAABq6JwAAGrpnAAAauucAABq7JwAAGrunAAAau+cAABq8ZwAAGrynAAAavScAABq9ZwAAGr3nAAAavicAABq+pwAAGr7nAAAav2cAABq/pwAAGoAnQAAagGdAABqA50AAGoEnQAAagadAABqB50AAGoJnQAAagqdAABqDJ0AAGoNnQAAag+dAABqEJ0AAGoSnQAAahOdAABqFZ0AAGoWnQAAahidAABqGZ0AAGobnQAAahydAABqHp0AAGofnQAAaiGdAABqIp0AAGoknQAAaiWdAABqJ50AAGoonQAAaiqdAABqK50AAGotnQAAai6dAABqMJ0AAGoxnQAAajOdAABqNJ0AAGo2nQAAajedAABqOZ0AAGo6nQAAajydAABqPZ0AAGo/nQAAakCdAABqQp0AAGpDnQAAakWdAABqRp0AAGpInQAAakmdAABqS50AAGpMnQAAak6dAABqT50AAGpRnQAAalKdAABqVJ0AAGpVnQAAaledAABqWJ0AAGpanQAAaludAABqXZ0AAGpenQAAamCdAABqYZ0AAGpjnQAAamSdAABqZp0AAGpnnQAAammdAABqap0AAGpsnQAAam2dAABqb50AAGpwnQAAanKdAABqc50AAGp1nQAAanadAABqeJ0AAGp5nQAAanudAABqfJ0AAGp+nQAAan+dAABqgZ0AAGqCnQAAaoSdAABqhZ0AAGqHnQAAaoidAABqip0AAGqLnQAAao2dAABqjp0AAGqQnQAAapGdAABqk50AAGqUnQAAapadAABql50AAGqZnQAAapqdAABqnJ0AAGqdnQAAap+dAABqoJ0AAGqinQAAaqOdAABqpZ0AAGqmnQAAaqidAABqqZ0AAGqrnQAAaqydAABqrp0AAGqvnQAAarGdAABqsp0AAGq0nQAAarWdAABqt50AAGq4nQAAarqdAABqu50AAGq9nQAAar6dAABqwJ0AAGrBnQAAasOdAABqxJ0AAGrGnQAAasedAABqyZ0AAGrKnQAAasydAABqzZ0AAGrPnQAAatCdAABq0p0AAGrTnQAAatWdAABq1p0AAGrYnQAAatmdAABq250AAGrcnQAAat6dAABq350AAGrhnQAAauKdAABq5J0AAGrlnQAAauedAABq6J0AAGrqnQAAauudAABq7Z0AAGrunQAAavCdAABq8Z0AAGrznQAAavSdAABq9p0AAGr3nQAAavmdAABq+p0AAGr8nQAAav2dAABq/50AAGoAngAAagKeAABqA54AAGoFngAAagaeAABqCJ4AAGoJngAAagueAABqDJ4AAGoOngAAag+eAABqEZ4AAGoSngAAahSeAABqFZ4AAGoXngAAahieAABqGp4AAGobngAAah2eAABqHp4AAGogngAAaiGeAABqI54AAGokngAAaiaeAABqJ54AAGopngAAaiqeAABqLJ4AAGotngAAai+eAABqMJ4AAGoyngAAajOeAABqNZ4AAGo2ngAAajieAABqOZ4AAGo7ngAAajyeAABqPp4AAGo/ngAAakGeAABqQp4AAGpEngAAakWeAABqR54AAGpIngAAakqeAABqS54AAGpNngAAak6eAABqUJ4AAGpRngAAalOeAABqVJ4AAGpWngAAaleeAABqWZ4AAGpangAAalyeAABqXZ4AAGpfngAAamCeAABqYp4AAGpjngAAamWeAABqZp4AAGpongAAammeAABqa54AAGpsngAAam6eAABqb54AAGpxngAAanKeAABqdJ4AAGp1ngAAaneeAABqeJ4AAGp6ngAAanueAABqfZ4AAGp+ngAAaoCeAABqgZ4AAGqDngAAaoSeAABqhp4AAGqHngAAaomeAABqip4AAGqMngAAao2eAABqj54AAGqQngAAapKeAABqk54AAGqVngAAapaeAABqmJ4AAGqZngAAapueAABqnJ4AAGqengAAap+eAABqoZ4AAGqingAAaqSeAABqpZ4AAGqnngAAaqieAABqqp4AAGqrngAAaq2eAABqrp4AAGqwngAAdWqxngAAfZQoarOeAABqtZ4AAGq2ngAAarieAABquZ4AAGq7ngAAaryeAABqvp4AAGq/ngAAasGeAABqwp4AAGrEngAAasWeAABqx54AAGrIngAAasqeAABqy54AAGrNngAAas6eAABq0J4AAGrRngAAatOeAABq1J4AAGrWngAAateeAABq2Z4AAGrangAAatyeAABq3Z4AAGrfngAAauCeAABq4p4AAGrjngAAauWeAABq5p4AAGrongAAaumeAABq654AAGrsngAAau6eAABq754AAGrxngAAavKeAABq9J4AAGr1ngAAaveeAABq+J4AAGr6ngAAavueAABq/Z4AAGr+ngAAagCfAABqAZ8AAGoDnwAAagSfAABqBp8AAGoHnwAAagmfAABqCp8AAGoMnwAAag2fAABqD58AAGoQnwAAahKfAABqE58AAGoVnwAAahafAABqGJ8AAGoZnwAAahufAABqHJ8AAGoenwAAah+fAABqIZ8AAGoinwAAaiSfAABqJZ8AAGonnwAAaiifAABqKp8AAGornwAAai2fAABqLp8AAGownwAAajGfAABqM58AAGo0nwAAajafAABqN58AAGo5nwAAajqfAABqPJ8AAGo9nwAAaj+fAABqQJ8AAGpCnwAAakOfAABqRZ8AAGpGnwAAakifAABqSZ8AAGpLnwAAdWpMnwAAfZQoak6fAABqUJ8AAGpRnwAAalOfAABqVJ8AAGpWnwAAalefAABqWZ8AAGpanwAAalyfAABqXZ8AAGpfnwAAamCfAABqYp8AAGpjnwAAamWfAABqZp8AAGponwAAammfAABqa58AAGpsnwAAam6fAABqb58AAGpxnwAAanKfAABqdJ8AAGp1nwAAanefAABqeJ8AAGp6nwAAanufAABqfZ8AAGp+nwAAaoCfAABqgZ8AAGqDnwAAaoSfAABqhp8AAGqHnwAAaomfAABqip8AAGqMnwAAao2fAABqj58AAGqQnwAAapKfAABqk58AAGqVnwAAapafAABqmJ8AAGqZnwAAapufAABqnJ8AAGqenwAAap+fAABqoZ8AAGqinwAAaqSfAABqpZ8AAGqnnwAAaqifAABqqp8AAGqrnwAAaq2fAABqrp8AAGqwnwAAarGfAABqs58AAGq0nwAAarafAABqt58AAGq5nwAAarqfAABqvJ8AAGq9nwAAar+fAABqwJ8AAGrCnwAAasOfAABqxZ8AAGrGnwAAasifAABqyZ8AAGrLnwAAasyfAABqzp8AAGrPnwAAatGfAABq0p8AAGrUnwAAatWfAABq158AAGrYnwAAatqfAABq258AAGrdnwAAat6fAABq4J8AAGrhnwAAauOfAABq5J8AAGrmnwAAauefAABq6Z8AAGrqnwAAauyfAABq7Z8AAGrvnwAAavCfAABq8p8AAGrznwAAavWfAABq9p8AAGr4nwAAavmfAABq+58AAGr8nwAAav6fAABq/58AAGoBoAAAagKgAABqBKAAAGoFoAAAagegAABqCKAAAGoKoAAAagugAABqDaAAAGoOoAAAahCgAABqEaAAAGoToAAAahSgAABqFqAAAGoXoAAAahmgAABqGqAAAGocoAAAah2gAABqH6AAAGogoAAAaiKgAABqI6AAAGoloAAAaiagAABqKKAAAGopoAAAaiugAABqLKAAAGouoAAAai+gAABqMaAAAGoyoAAAajSgAABqNaAAAGo3oAAAajigAABqOqAAAGo7oAAAaj2gAABqPqAAAGpAoAAAakGgAABqQ6AAAGpEoAAAakagAABqR6AAAGpJoAAAakqgAABqTKAAAGpNoAAAak+gAABqUKAAAGpSoAAAalOgAABqVaAAAGpWoAAAaligAABqWaAAAGpboAAAalygAABqXqAAAGpfoAAAamGgAABqYqAAAGpkoAAAamWgAABqZ6AAAGpooAAAamqgAABqa6AAAGptoAAAam6gAABqcKAAAGpxoAAAanOgAABqdKAAAGp2oAAAanegAABqeaAAAGp6oAAAanygAABqfaAAAGp/oAAAaoCgAABqgqAAAGqDoAAAaoWgAABqhqAAAGqIoAAAaomgAABqi6AAAGqMoAAAao6gAABqj6AAAGqRoAAAapKgAABqlKAAAGqVoAAAapegAABqmKAAAGqaoAAAapugAABqnaAAAGqeoAAAaqCgAABqoaAAAGqjoAAAaqSgAABqpqAAAGqnoAAAaqmgAABqqqAAAGqsoAAAaq2gAABqr6AAAGqwoAAAarKgAABqs6AAAGq1oAAAaragAABquKAAAGq5oAAAarugAABqvKAAAGq+oAAAar+gAABqwaAAAGrCoAAAasSgAABqxaAAAGrHoAAAasigAABqyqAAAGrLoAAAas2gAABqzqAAAGrQoAAAatGgAABq06AAAGrUoAAAatagAABq16AAAGrZoAAAatqgAABq3KAAAGrdoAAAat+gAABq4KAAAGrioAAAauOgAABq5aAAAGrmoAAAauigAABq6aAAAGrroAAAauygAABq7qAAAGrvoAAAavGgAABq8qAAAGr0oAAAavWgAABq96AAAGr4oAAAavqgAABq+6AAAGr9oAAAav6gAABqAKEAAGoBoQAAagOhAABqBKEAAGoGoQAAagehAABqCaEAAGoKoQAAagyhAABqDaEAAGoPoQAAahChAABqEqEAAGoToQAAahWhAABqFqEAAGoYoQAAahmhAABqG6EAAGocoQAAah6hAABqH6EAAGohoQAAaiKhAABqJKEAAGoloQAAaiehAABqKKEAAGoqoQAAaiuhAABqLaEAAGouoQAAajChAABqMaEAAGozoQAAajShAABqNqEAAGo3oQAAajmhAABqOqEAAGo8oQAAaj2hAABqP6EAAGpAoQAAakKhAABqQ6EAAGpFoQAAakahAABqSKEAAGpJoQAAakuhAABqTKEAAGpOoQAAak+hAABqUaEAAGpSoQAAalShAABqVaEAAGpXoQAAalihAABqWqEAAGpboQAAal2hAABqXqEAAGpgoQAAamGhAABqY6EAAGpkoQAAamahAABqZ6EAAGppoQAAamqhAABqbKEAAGptoQAAam+hAABqcKEAAGpyoQAAanOhAABqdaEAAGp2oQAAanihAABqeaEAAGp7oQAAanyhAABqfqEAAGp/oQAAaoGhAABqgqEAAGqEoQAAaoWhAABqh6EAAGqIoQAAaoqhAABqi6EAAGqNoQAAao6hAABqkKEAAGqRoQAAapOhAABqlKEAAGqWoQAAapehAABqmaEAAGqaoQAAapyhAABqnaEAAGqfoQAAaqChAABqoqEAAGqjoQAAaqWhAABqpqEAAGqooQAAaqmhAABqq6EAAGqsoQAAaq6hAABqr6EAAGqxoQAAarKhAABqtKEAAGq1oQAAarehAABquKEAAGq6oQAAaruhAABqvaEAAGq+oQAAasChAABqwaEAAGrDoQAAasShAABqxqEAAGrHoQAAasmhAABqyqEAAGrMoQAAas2hAABqz6EAAGrQoQAAatKhAABq06EAAGrVoQAAatahAABq2KEAAGrZoQAAatuhAABq3KEAAGreoQAAat+hAABq4aEAAGrioQAAauShAABq5aEAAGrnoQAAauihAABq6qEAAGrroQAAau2hAABq7qEAAGrwoQAAavGhAABq86EAAGr0oQAAavahAABq96EAAGr5oQAAavqhAABq/KEAAGr9oQAAav+hAABqAKIAAGoCogAAagOiAABqBaIAAGoGogAAagiiAABqCaIAAGoLogAAagyiAABqDqIAAGoPogAAahGiAABqEqIAAGoUogAAahWiAABqF6IAAGoYogAAahqiAABqG6IAAGodogAAah6iAABqIKIAAGohogAAaiOiAABqJKIAAGomogAAaieiAABqKaIAAGoqogAAaiyiAABqLaIAAGovogAAajCiAABqMqIAAGozogAAajWiAABqNqIAAGo4ogAAajmiAABqO6IAAGo8ogAAaj6iAABqP6IAAGpBogAAakKiAABqRKIAAGpFogAAakeiAABqSKIAAGpKogAAakuiAABqTaIAAGpOogAAalCiAABqUaIAAGpTogAAalSiAABqVqIAAGpXogAAalmiAABqWqIAAGpcogAAal2iAABqX6IAAGpgogAAamKiAAB1avjRAAB9lChq+tEAAGr80QAAav3RAABq/9EAAGoA0gAAagLSAABqA9IAAGoF0gAAagbSAABqCNIAAGoJ0gAAagvSAABqDNIAAGoO0gAAag/SAABqEdIAAGoS0gAAahTSAABqFdIAAGoX0gAAahjSAABqGtIAAGob0gAAah3SAABqHtIAAGog0gAAaiHSAABqI9IAAGok0gAAaibSAABqJ9IAAGop0gAAairSAABqLNIAAGot0gAAai/SAABqMNIAAGoy0gAAajPSAABqNdIAAGo20gAAajjSAABqOdIAAGo70gAAajzSAABqPtIAAGo/0gAAakHSAABqQtIAAGpE0gAAakXSAABqR9IAAGpI0gAAakrSAABqS9IAAGpN0gAAak7SAABqUNIAAGpR0gAAalPSAABqVNIAAGpW0gAAalfSAABqWdIAAGpa0gAAalzSAABqXdIAAGpf0gAAamDSAABqYtIAAGpj0gAAamXSAABqZtIAAGpo0gAAamnSAABqa9IAAGps0gAAam7SAABqb9IAAGpx0gAAanLSAABqdNIAAGp10gAAanfSAABqeNIAAGp60gAAanvSAABqfdIAAGp+0gAAaoDSAABqgdIAAGqD0gAAaoTSAABqhtIAAGqH0gAAaonSAABqitIAAGqM0gAAao3SAABqj9IAAGqQ0gAAapLSAABqk9IAAGqV0gAAapbSAABqmNIAAGqZ0gAAapvSAABqnNIAAGqe0gAAap/SAABqodIAAGqi0gAAaqTSAABqpdIAAGqn0gAAaqjSAABqqtIAAGqr0gAAaq3SAABqrtIAAGqw0gAAarHSAABqs9IAAGq00gAAarbSAABqt9IAAGq50gAAarrSAABqvNIAAGq90gAAar/SAABqwNIAAGrC0gAAasPSAABqxdIAAGrG0gAAasjSAABqydIAAGrL0gAAaszSAABqztIAAGrP0gAAatHSAABq0tIAAGrU0gAAatXSAABq19IAAGrY0gAAatrSAABq29IAAGrd0gAAat7SAABq4NIAAGrh0gAAauPSAABq5NIAAGrm0gAAaufSAABq6dIAAGrq0gAAauzSAABq7dIAAGrv0gAAavDSAABq8tIAAGrz0gAAavXSAABq9tIAAGr40gAAavnSAABq+9IAAGr80gAAav7SAABq/9IAAGoB0wAAagLTAABqBNMAAGoF0wAAagfTAABqCNMAAGoK0wAAagvTAABqDdMAAGoO0wAAahDTAABqEdMAAGoT0wAAahTTAABqFtMAAGoX0wAAahnTAABqGtMAAGoc0wAAah3TAABqH9MAAGog0wAAaiLTAABqI9MAAGol0wAAaibTAABqKNMAAGop0wAAaivTAABqLNMAAGou0wAAai/TAABqMdMAAGoy0wAAajTTAABqNdMAAGo30wAAajjTAABqOtMAAGo70wAAaj3TAABqPtMAAGpA0wAAakHTAABqQ9MAAGpE0wAAakbTAABqR9MAAGpJ0wAAakrTAABqTNMAAGpN0wAAak/TAABqUNMAAGpS0wAAalPTAABqVdMAAGpW0wAAaljTAABqWdMAAGpb0wAAalzTAABqXtMAAGpf0wAAamHTAABqYtMAAGpk0wAAamXTAABqZ9MAAGpo0wAAamrTAABqa9MAAGpt0wAAam7TAABqcNMAAGpx0wAAanPTAABqdNMAAGp20wAAanfTAABqedMAAGp60wAAanzTAABqfdMAAGp/0wAAaoDTAABqgtMAAGqD0wAAaoXTAABqhtMAAGqI0wAAaonTAABqi9MAAGqM0wAAao7TAABqj9MAAGqR0wAAapLTAABqlNMAAGqV0wAAapfTAABqmNMAAGqa0wAAapvTAABqndMAAGqe0wAAaqDTAABqodMAAGqj0wAAaqTTAABqptMAAGqn0wAAaqnTAABqqtMAAGqs0wAAaq3TAABqr9MAAGqw0wAAarLTAABqs9MAAGq10wAAarbTAABquNMAAGq50wAAarvTAABqvNMAAGq+0wAAar/TAABqwdMAAGrC0wAAasTTAABqxdMAAGrH0wAAasjTAABqytMAAGrL0wAAas3TAABqztMAAGrQ0wAAatHTAABq09MAAGrU0wAAatbTAABq19MAAGrZ0wAAatrTAABq3NMAAGrd0wAAat/TAABq4NMAAGri0wAAauPTAABq5dMAAGrm0wAAaujTAABq6dMAAGrr0wAAauzTAABq7tMAAGrv0wAAavHTAABq8tMAAGr00wAAavXTAABq99MAAGr40wAAavrTAABq+9MAAGr90wAAav7TAABqANQAAGoB1AAAagPUAABqBNQAAGoG1AAAagfUAABqCdQAAGoK1AAAagzUAABqDdQAAGoP1AAAahDUAABqEtQAAGoT1AAAahXUAABqFtQAAGoY1AAAahnUAABqG9QAAGoc1AAAah7UAABqH9QAAGoh1AAAaiLUAABqJNQAAGol1AAAaifUAABqKNQAAGoq1AAAaivUAABqLdQAAGou1AAAajDUAABqMdQAAGoz1AAAajTUAABqNtQAAGo31AAAajnUAABqOtQAAGo81AAAaj3UAABqP9QAAGpA1AAAakLUAABqQ9QAAGpF1AAAakbUAABqSNQAAGpJ1AAAakvUAABqTNQAAGpO1AAAak/UAABqUdQAAGpS1AAAalTUAABqVdQAAGpX1AAAaljUAABqWtQAAGpb1AAAal3UAABqXtQAAGpg1AAAamHUAABqY9QAAGpk1AAAambUAABqZ9QAAGpp1AAAamrUAABqbNQAAGpt1AAAam/UAABqcNQAAGpy1AAAanPUAABqddQAAGp21AAAanjUAABqedQAAGp71AAAanzUAABqftQAAGp/1AAAaoHUAABqgtQAAGqE1AAAaoXUAABqh9QAAGqI1AAAaorUAABqi9QAAGqN1AAAao7UAABqkNQAAGqR1AAAapPUAABqlNQAAGqW1AAAapfUAABqmdQAAGqa1AAAapzUAABqndQAAGqf1AAAaqDUAABqotQAAGqj1AAAaqXUAABqptQAAGqo1AAAaqnUAABqq9QAAGqs1AAAaq7UAABqr9QAAGqx1AAAarLUAABqtNQAAGq11AAAarfUAABquNQAAGq61AAAarvUAABqvdQAAGq+1AAAasDUAABqwdQAAGrD1AAAasTUAABqxtQAAGrH1AAAasnUAABqytQAAGrM1AAAas3UAABqz9QAAGrQ1AAAatLUAABq09QAAGrV1AAAatbUAABq2NQAAGrZ1AAAatvUAABq3NQAAGre1AAAat/UAABq4dQAAGri1AAAauTUAABq5dQAAGrn1AAAaujUAABq6tQAAGrr1AAAau3UAABq7tQAAGrw1AAAavHUAABq89QAAGr01AAAavbUAABq99QAAGr51AAAavrUAABq/NQAAGr91AAAav/UAABqANUAAGoC1QAAagPVAABqBdUAAGoG1QAAagjVAABqCdUAAGoL1QAAagzVAABqDtUAAGoP1QAAahHVAABqEtUAAGoU1QAAahXVAABqF9UAAGoY1QAAahrVAABqG9UAAGod1QAAah7VAABqINUAAGoh1QAAaiPVAABqJNUAAGom1QAAaifVAABqKdUAAGoq1QAAaizVAABqLdUAAGov1QAAajDVAABqMtUAAGoz1QAAajXVAABqNtUAAGo41QAAajnVAABqO9UAAGo81QAAaj7VAABqP9UAAGpB1QAAakLVAABqRNUAAGpF1QAAakfVAABqSNUAAGpK1QAAakvVAABqTdUAAGpO1QAAalDVAABqUdUAAGpT1QAAalTVAABqVtUAAGpX1QAAalnVAABqWtUAAGpc1QAAal3VAABqX9UAAGpg1QAAamLVAABqY9UAAGpl1QAAambVAABqaNUAAGpp1QAAamvVAABqbNUAAGpu1QAAam/VAABqcdUAAGpy1QAAanTVAABqddUAAGp31QAAanjVAABqetUAAGp71QAAan3VAABqftUAAGqA1QAAaoHVAABqg9UAAGqE1QAAaobVAABqh9UAAGqJ1QAAaorVAABqjNUAAGqN1QAAao/VAABqkNUAAGqS1QAAapPVAABqldUAAGqW1QAAapjVAABqmdUAAGqb1QAAapzVAABqntUAAGqf1QAAaqHVAABqotUAAGqk1QAAaqXVAABqp9UAAGqo1QAAaqrVAABqq9UAAGqt1QAAaq7VAABqsNUAAGqx1QAAarPVAABqtNUAAGq21QAAarfVAABqudUAAGq61QAAarzVAABqvdUAAGq/1QAAasDVAABqwtUAAGrD1QAAasXVAABqxtUAAGrI1QAAasnVAABqy9UAAGrM1QAAas7VAABqz9UAAGrR1QAAatLVAABq1NUAAGrV1QAAatfVAABq2NUAAGra1QAAatvVAABq3dUAAGre1QAAauDVAABq4dUAAGrj1QAAauTVAABq5tUAAGrn1QAAaunVAABq6tUAAGrs1QAAau3VAABq79UAAGrw1QAAavLVAABq89UAAGr11QAAavbVAABq+NUAAGr51QAAavvVAABq/NUAAGr+1QAAav/VAABqAdYAAGoC1gAAagTWAABqBdYAAGoH1gAAagjWAABqCtYAAGoL1gAAag3WAABqDtYAAGoQ1gAAahHWAABqE9YAAGoU1gAAahbWAABqF9YAAGoZ1gAAahrWAABqHNYAAGod1gAAah/WAABqINYAAGoi1gAAaiPWAABqJdYAAGom1gAAaijWAABqKdYAAGor1gAAaizWAABqLtYAAGov1gAAajHWAABqMtYAAGo01gAAajXWAABqN9YAAGo41gAAajrWAABqO9YAAGo91gAAaj7WAABqQNYAAGpB1gAAakPWAABqRNYAAGpG1gAAakfWAABqSdYAAGpK1gAAakzWAABqTdYAAGpP1gAAalDWAABqUtYAAGpT1gAAalXWAABqVtYAAGpY1gAAalnWAABqW9YAAGpc1gAAal7WAABqX9YAAGph1gAAamLWAABqZNYAAGpl1gAAamfWAABqaNYAAGpq1gAAamvWAABqbdYAAGpu1gAAanDWAABqcdYAAGpz1gAAanTWAABqdtYAAGp31gAAannWAABqetYAAGp81gAAan3WAABqf9YAAGqA1gAAaoLWAABqg9YAAGqF1gAAaobWAABqiNYAAGqJ1gAAaovWAABqjNYAAGqO1gAAao/WAABqkdYAAGqS1gAAapTWAABqldYAAGqX1gAAapjWAABqmtYAAGqb1gAAap3WAABqntYAAGqg1gAAaqHWAABqo9YAAGqk1gAAaqbWAABqp9YAAGqp1gAAaqrWAABqrNYAAGqt1gAAaq/WAABqsNYAAGqy1gAAarPWAABqtdYAAGq21gAAarjWAABqudYAAGq71gAAarzWAABqvtYAAGq/1gAAasHWAABqwtYAAGrE1gAAasXWAABqx9YAAGrI1gAAasrWAABqy9YAAGrN1gAAas7WAABq0NYAAGrR1gAAatPWAABq1NYAAGrW1gAAatfWAABq2dYAAGra1gAAatzWAABq3dYAAGrf1gAAauDWAABq4tYAAGrj1gAAauXWAABq5tYAAGro1gAAaunWAABq69YAAGrs1gAAau7WAABq79YAAGrx1gAAavLWAABq9NYAAGr11gAAavfWAABq+NYAAGr61gAAavvWAABq/dYAAGr+1gAAagDXAABqAdcAAGoD1wAAagTXAABqBtcAAGoH1wAAagnXAABqCtcAAGoM1wAAag3XAABqD9cAAGoQ1wAAahLXAABqE9cAAGoV1wAAahbXAABqGNcAAGoZ1wAAahvXAABqHNcAAGoe1wAAah/XAABqIdcAAGoi1wAAaiTXAABqJdcAAGon1wAAaijXAABqKtcAAGor1wAAai3XAABqLtcAAGow1wAAajHXAABqM9cAAGo01wAAajbXAABqN9cAAGo51wAAajrXAABqPNcAAGo91wAAaj/XAABqQNcAAGpC1wAAakPXAABqRdcAAGpG1wAAakjXAABqSdcAAGpL1wAAakzXAABqTtcAAGpP1wAAalHXAABqUtcAAGpU1wAAalXXAABqV9cAAGpY1wAAalrXAABqW9cAAGpd1wAAal7XAABqYNcAAGph1wAAamPXAABqZNcAAGpm1wAAamfXAABqadcAAGpq1wAAamzXAABqbdcAAGpv1wAAanDXAABqctcAAGpz1wAAanXXAABqdtcAAGp41wAAannXAABqe9cAAGp81wAAan7XAABqf9cAAGqB1wAAaoLXAABqhNcAAGqF1wAAaofXAABqiNcAAGqK1wAAaovXAABqjdcAAGqO1wAAapDXAABqkdcAAGqT1wAAapTXAABqltcAAGqX1wAAapnXAABqmtcAAGqc1wAAap3XAABqn9cAAGqg1wAAaqLXAABqo9cAAGql1wAAaqbXAABqqNcAAGqp1wAAaqvXAABqrNcAAGqu1wAAaq/XAABqsdcAAGqy1wAAarTXAABqtdcAAGq31wAAarjXAABqutcAAGq71wAAar3XAABqvtcAAGrA1wAAasHXAABqw9cAAGrE1wAAasbXAABqx9cAAGrJ1wAAasrXAABqzNcAAGrN1wAAas/XAABq0NcAAGrS1wAAatPXAABq1dcAAGrW1wAAatjXAABq2dcAAGrb1wAAatzXAABq3tcAAGrf1wAAauHXAABq4tcAAGrk1wAAauXXAABq59cAAGro1wAAaurXAABq69cAAGrt1wAAau7XAABq8NcAAGrx1wAAavPXAABq9NcAAGr21wAAavfXAABq+dcAAGr61wAAavzXAABq/dcAAGr/1wAAagDYAABqAtgAAGoD2AAAagXYAABqBtgAAGoI2AAAagnYAABqC9gAAGoM2AAAag7YAABqD9gAAGoR2AAAahLYAABqFNgAAGoV2AAAahfYAABqGNgAAGoa2AAAahvYAABqHdgAAGoe2AAAaiDYAABqIdgAAGoj2AAAaiTYAABqJtgAAGon2AAAainYAABqKtgAAGos2AAAai3YAABqL9gAAGow2AAAajLYAABqM9gAAGo12AAAajbYAABqONgAAGo52AAAajvYAABqPNgAAGo+2AAAaj/YAABqQdgAAGpC2AAAakTYAABqRdgAAGpH2AAAakjYAABqStgAAGpL2AAAak3YAABqTtgAAGpQ2AAAalHYAABqU9gAAGpU2AAAalbYAABqV9gAAGpZ2AAAalrYAABqXNgAAGpd2AAAal/YAABqYNgAAGpi2AAAamPYAABqZdgAAGpm2AAAamjYAABqadgAAGpr2AAAamzYAABqbtgAAGpv2AAAanHYAABqctgAAGp02AAAanXYAABqd9gAAGp42AAAanrYAABqe9gAAGp92AAAan7YAABqgNgAAGqB2AAAaoPYAABqhNgAAGqG2AAAaofYAABqidgAAGqK2AAAaozYAABqjdgAAGqP2AAAapDYAABqktgAAGqT2AAAapXYAABqltgAAGqY2AAAapnYAABqm9gAAGqc2AAAap7YAABqn9gAAGqh2AAAaqLYAABqpNgAAGql2AAAaqfYAABqqNgAAGqq2AAAaqvYAABqrdgAAGqu2AAAarDYAABqsdgAAGqz2AAAarTYAABqttgAAGq32AAAarnYAABqutgAAGq82AAAar3YAABqv9gAAGrA2AAAasLYAABqw9gAAGrF2AAAasbYAABqyNgAAGrJ2AAAasvYAABqzNgAAGrO2AAAas/YAABq0dgAAGrS2AAAatTYAABq1dgAAGrX2AAAatjYAABq2tgAAGrb2AAAat3YAABq3tgAAGrg2AAAauHYAABq49gAAGrk2AAAaubYAABq59gAAGrp2AAAaurYAABq7NgAAGrt2AAAau/YAABq8NgAAGry2AAAavPYAABq9dgAAGr22AAAavjYAABq+dgAAGr72AAAavzYAABq/tgAAGr/2AAAagHZAABqAtkAAGoE2QAAagXZAABqB9kAAGoI2QAAagrZAABqC9kAAGoN2QAAag7ZAABqENkAAGoR2QAAahPZAABqFNkAAGoW2QAAahfZAABqGdkAAGoa2QAAahzZAABqHdkAAGof2QAAaiDZAABqItkAAGoj2QAAaiXZAABqJtkAAGoo2QAAainZAABqK9kAAGos2QAAai7ZAABqL9kAAGox2QAAajLZAABqNNkAAGo12QAAajfZAABqONkAAGo62QAAajvZAABqPdkAAGo+2QAAakDZAABqQdkAAGpD2QAAakTZAABqRtkAAGpH2QAAaknZAABqStkAAGpM2QAAak3ZAABqT9kAAGpQ2QAAalLZAABqU9kAAGpV2QAAalbZAABqWNkAAGpZ2QAAalvZAABqXNkAAGpe2QAAal/ZAABqYdkAAGpi2QAAamTZAABqZdkAAGpn2QAAamjZAABqatkAAGpr2QAAam3ZAABqbtkAAGpw2QAAanHZAABqc9kAAGp02QAAanbZAABqd9kAAGp52QAAanrZAABqfNkAAGp92QAAan/ZAABqgNkAAGqC2QAAaoPZAABqhdkAAGqG2QAAaojZAABqidkAAGqL2QAAaozZAABqjtkAAGqP2QAAapHZAABqktkAAGqU2QAAapXZAABql9kAAGqY2QAAaprZAABqm9kAAGqd2QAAap7ZAABqoNkAAGqh2QAAaqPZAABqpNkAAGqm2QAAaqfZAABqqdkAAGqq2QAAaqzZAABqrdkAAGqv2QAAarDZAABqstkAAGqz2QAAarXZAABqttkAAGq42QAAarnZAABqu9kAAGq82QAAar7ZAABqv9kAAGrB2QAAasLZAABqxNkAAGrF2QAAasfZAABqyNkAAGrK2QAAasvZAABqzdkAAGrO2QAAatDZAABq0dkAAGrT2QAAatTZAABq1tkAAGrX2QAAatnZAABq2tkAAGrc2QAAat3ZAABq39kAAGrg2QAAauLZAABq49kAAGrl2QAAaubZAABq6NkAAGrp2QAAauvZAABq7NkAAGru2QAAau/ZAABq8dkAAGry2QAAavTZAABq9dkAAGr32QAAavjZAABq+tkAAGr72QAAav3ZAABq/tkAAGoA2gAAagHaAABqA9oAAGoE2gAAagbaAABqB9oAAGoJ2gAAagraAABqDNoAAGoN2gAAag/aAABqENoAAGoS2gAAahPaAABqFdoAAGoW2gAAahjaAABqGdoAAGob2gAAahzaAABqHtoAAGof2gAAaiHaAABqItoAAGok2gAAaiXaAABqJ9oAAGoo2gAAairaAABqK9oAAGot2gAAai7aAABqMNoAAGox2gAAajPaAABqNNoAAGo22gAAajfaAABqOdoAAGo62gAAajzaAABqPdoAAGo/2gAAakDaAABqQtoAAGpD2gAAakXaAABqRtoAAGpI2gAAaknaAABqS9oAAGpM2gAAak7aAABqT9oAAGpR2gAAalLaAABqVNoAAGpV2gAAalfaAABqWNoAAGpa2gAAalvaAABqXdoAAGpe2gAAamDaAABqYdoAAGpj2gAAamTaAABqZtoAAGpn2gAAamnaAABqatoAAGps2gAAam3aAABqb9oAAGpw2gAAanLaAABqc9oAAGp12gAAanbaAABqeNoAAGp52gAAanvaAABqfNoAAGp+2gAAan/aAABqgdoAAGqC2gAAaoTaAABqhdoAAGqH2gAAaojaAABqitoAAGqL2gAAao3aAABqjtoAAGqQ2gAAapHaAABqk9oAAGqU2gAAapbaAABql9oAAGqZ2gAAapraAABqnNoAAGqd2gAAap/aAABqoNoAAGqi2gAAaqPaAABqpdoAAGqm2gAAaqjaAABqqdoAAGqr2gAAaqzaAABqrtoAAGqv2gAAarHaAABqstoAAGq02gAAarXaAABqt9oAAGq42gAAarraAABqu9oAAGq92gAAar7aAABqwNoAAGrB2gAAasPaAABqxNoAAGrG2gAAasfaAABqydoAAGrK2gAAaszaAABqzdoAAGrP2gAAatDaAABq0toAAGrT2gAAatXaAABq1toAAGrY2gAAatnaAABq29oAAGrc2gAAat7aAABq39oAAGrh2gAAauLaAABq5NoAAGrl2gAAaufaAABq6NoAAGrq2gAAauvaAABq7doAAGru2gAAavDaAABq8doAAGrz2gAAavTaAABq9toAAGr32gAAavnaAABq+toAAGr82gAAav3aAABq/9oAAGoA2wAAagLbAABqA9sAAGoF2wAAagbbAABqCNsAAGoJ2wAAagvbAABqDNsAAGoO2wAAag/bAABqEdsAAGoS2wAAahTbAABqFdsAAGoX2wAAahjbAABqGtsAAGob2wAAah3bAABqHtsAAGog2wAAaiHbAABqI9sAAGok2wAAaibbAABqJ9sAAGop2wAAairbAABqLNsAAGot2wAAai/bAABqMNsAAGoy2wAAajPbAABqNdsAAGo22wAAajjbAABqOdsAAGo72wAAajzbAABqPtsAAGo/2wAAakHbAABqQtsAAGpE2wAAakXbAABqR9sAAGpI2wAAakrbAABqS9sAAGpN2wAAak7bAABqUNsAAGpR2wAAalPbAABqVNsAAGpW2wAAalfbAABqWdsAAGpa2wAAalzbAABqXdsAAGpf2wAAamDbAABqYtsAAGpj2wAAamXbAABqZtsAAGpo2wAAamnbAABqa9sAAGps2wAAam7bAABqb9sAAGpx2wAAanLbAABqdNsAAGp12wAAanfbAABqeNsAAGp62wAAanvbAABqfdsAAGp+2wAAaoDbAABqgdsAAGqD2wAAaoTbAABqhtsAAGqH2wAAaonbAABqitsAAGqM2wAAao3bAABqj9sAAGqQ2wAAapLbAABqk9sAAGqV2wAAapbbAABqmNsAAGqZ2wAAapvbAABqnNsAAGqe2wAAap/bAABqodsAAGqi2wAAaqTbAABqpdsAAGqn2wAAaqjbAABqqtsAAGqr2wAAaq3bAABqrtsAAGqw2wAAarHbAABqs9sAAGq02wAAarbbAABqt9sAAGq52wAAarrbAABqvNsAAGq92wAAar/bAABqwNsAAGrC2wAAasPbAABqxdsAAGrG2wAAasjbAABqydsAAGrL2wAAaszbAABqztsAAGrP2wAAatHbAABq0tsAAGrU2wAAatXbAABq19sAAGrY2wAAatrbAABq29sAAGrd2wAAat7bAABq4NsAAGrh2wAAauPbAABq5NsAAGrm2wAAaufbAABq6dsAAGrq2wAAauzbAABq7dsAAGrv2wAAavDbAABq8tsAAGrz2wAAavXbAABq9tsAAGr42wAAavnbAABq+9sAAGr82wAAav7bAABq/9sAAGoB3AAAagLcAABqBNwAAGoF3AAAagfcAABqCNwAAGoK3AAAagvcAABqDdwAAGoO3AAAahDcAABqEdwAAGoT3AAAahTcAABqFtwAAGoX3AAAahncAABqGtwAAGoc3AAAah3cAABqH9wAAGog3AAAaiLcAABqI9wAAGol3AAAaibcAABqKNwAAGop3AAAaivcAABqLNwAAGou3AAAai/cAABqMdwAAGoy3AAAajTcAABqNdwAAGo33AAAajjcAABqOtwAAGo73AAAaj3cAABqPtwAAGpA3AAAakHcAABqQ9wAAGpE3AAAakbcAABqR9wAAGpJ3AAAakrcAABqTNwAAGpN3AAAak/cAABqUNwAAGpS3AAAalPcAABqVdwAAGpW3AAAaljcAABqWdwAAGpb3AAAalzcAABqXtwAAGpf3AAAamHcAABqYtwAAGpk3AAAamXcAABqZ9wAAGpo3AAAamrcAABqa9wAAGpt3AAAam7cAABqcNwAAGpx3AAAanPcAABqdNwAAGp23AAAanfcAABqedwAAGp63AAAanzcAABqfdwAAGp/3AAAaoDcAABqgtwAAGqD3AAAaoXcAABqhtwAAGqI3AAAaoncAABqi9wAAGqM3AAAao7cAABqj9wAAGqR3AAAapLcAABqlNwAAGqV3AAAapfcAABqmNwAAGqa3AAAapvcAABqndwAAGqe3AAAaqDcAABqodwAAGqj3AAAaqTcAABqptwAAGqn3AAAaqncAABqqtwAAGqs3AAAaq3cAABqr9wAAGqw3AAAarLcAABqs9wAAGq13AAAarbcAABquNwAAGq53AAAarvcAABqvNwAAGq+3AAAar/cAABqwdwAAGrC3AAAasTcAABqxdwAAGrH3AAAasjcAABqytwAAGrL3AAAas3cAABqztwAAGrQ3AAAatHcAABq09wAAGrU3AAAatbcAABq19wAAGrZ3AAAatrcAABq3NwAAGrd3AAAat/cAABq4NwAAGri3AAAauPcAABq5dwAAGrm3AAAaujcAABq6dwAAGrr3AAAauzcAABq7twAAGrv3AAAavHcAABq8twAAGr03AAAavXcAABq99wAAGr43AAAavrcAABq+9wAAGr93AAAav7cAABqAN0AAGoB3QAAagPdAABqBN0AAGoG3QAAagfdAABqCd0AAGoK3QAAagzdAABqDd0AAGoP3QAAahDdAABqEt0AAGoT3QAAahXdAABqFt0AAGoY3QAAahndAABqG90AAGoc3QAAah7dAABqH90AAGoh3QAAaiLdAABqJN0AAGol3QAAaifdAABqKN0AAGoq3QAAaivdAABqLd0AAGou3QAAajDdAABqMd0AAGoz3QAAajTdAABqNt0AAGo33QAAajndAABqOt0AAGo83QAAaj3dAABqP90AAGpA3QAAakLdAABqQ90AAGpF3QAAakbdAABqSN0AAGpJ3QAAakvdAABqTN0AAGpO3QAAak/dAABqUd0AAGpS3QAAalTdAABqVd0AAGpX3QAAaljdAABqWt0AAGpb3QAAal3dAABqXt0AAGpg3QAAamHdAABqY90AAGpk3QAAambdAABqZ90AAGpp3QAAamrdAABqbN0AAGpt3QAAam/dAABqcN0AAGpy3QAAanPdAABqdd0AAGp23QAAanjdAABqed0AAGp73QAAanzdAABqft0AAGp/3QAAaoHdAABqgt0AAGqE3QAAaoXdAABqh90AAGqI3QAAaordAABqi90AAGqN3QAAao7dAABqkN0AAGqR3QAAapPdAABqlN0AAGqW3QAAapfdAABqmd0AAGqa3QAAapzdAABqnd0AAGqf3QAAaqDdAABqot0AAGqj3QAAaqXdAABqpt0AAGqo3QAAaqndAABqq90AAGqs3QAAaq7dAABqr90AAGqx3QAAdShqst0AAGq03QAAarXdAABqt90AAGq43QAAarrdAABqu90AAGq93QAAar7dAABqwN0AAGrB3QAAasPdAABqxN0AAGrG3QAAasfdAABqyd0AAGrK3QAAaszdAABqzd0AAGrP3QAAatDdAABq0t0AAGrT3QAAatXdAABq1t0AAGrY3QAAatndAABq290AAGrc3QAAat7dAABq390AAGrh3QAAauLdAABq5N0AAGrl3QAAaufdAABq6N0AAGrq3QAAauvdAABq7d0AAGru3QAAavDdAABq8d0AAGrz3QAAavTdAABq9t0AAGr33QAAavndAABq+t0AAGr83QAAav3dAABq/90AAGoA3gAAagLeAABqA94AAGoF3gAAagbeAABqCN4AAGoJ3gAAagveAABqDN4AAGoO3gAAag/eAABqEd4AAGoS3gAAahTeAABqFd4AAGoX3gAAahjeAABqGt4AAGob3gAAah3eAABqHt4AAGog3gAAaiHeAABqI94AAGok3gAAaibeAABqJ94AAGop3gAAaireAABqLN4AAGot3gAAai/eAABqMN4AAGoy3gAAajPeAABqNd4AAGo23gAAajjeAABqOd4AAGo73gAAajzeAABqPt4AAGo/3gAAakHeAABqQt4AAGpE3gAAakXeAABqR94AAGpI3gAAakreAABqS94AAGpN3gAAak7eAABqUN4AAGpR3gAAalPeAABqVN4AAGpW3gAAalfeAABqWd4AAGpa3gAAalzeAABqXd4AAGpf3gAAamDeAABqYt4AAGpj3gAAamXeAABqZt4AAGpo3gAAamneAABqa94AAGps3gAAam7eAABqb94AAGpx3gAAanLeAABqdN4AAGp13gAAanfeAABqeN4AAGp63gAAanveAABqfd4AAGp+3gAAaoDeAABqgd4AAGqD3gAAaoTeAABqht4AAGqH3gAAaoneAABqit4AAGqM3gAAao3eAABqj94AAGqQ3gAAapLeAABqk94AAGqV3gAAapbeAABqmN4AAGqZ3gAAapveAABqnN4AAGqe3gAAap/eAABqod4AAGqi3gAAaqTeAABqpd4AAGqn3gAAaqjeAABqqt4AAGqr3gAAaq3eAABqrt4AAGqw3gAAarHeAABqs94AAGq03gAAarbeAABqt94AAGq53gAAarreAABqvN4AAGq93gAAar/eAABqwN4AAGrC3gAAasPeAABqxd4AAGrG3gAAasjeAABqyd4AAGrL3gAAaszeAABqzt4AAGrP3gAAatHeAABq0t4AAGrU3gAAatXeAABq194AAGrY3gAAatreAABq294AAGrd3gAAat7eAABq4N4AAGrh3gAAauPeAABq5N4AAGrm3gAAaufeAABq6d4AAGrq3gAAauzeAABq7d4AAGrv3gAAavDeAABq8t4AAGrz3gAAavXeAABq9t4AAGr43gAAavneAABq+94AAGr83gAAav7eAABq/94AAGoB3wAAagLfAABqBN8AAGoF3wAAagffAABqCN8AAGoK3wAAagvfAABqDd8AAGoO3wAAahDfAABqEd8AAGoT3wAAahTfAABqFt8AAGoX3wAAahnfAABqGt8AAGoc3wAAah3fAABqH98AAGog3wAAaiLfAABqI98AAGol3wAAaibfAABqKN8AAGop3wAAaivfAABqLN8AAGou3wAAai/fAABqMd8AAGoy3wAAajTfAABqNd8AAGo33wAAajjfAABqOt8AAGo73wAAaj3fAABqPt8AAGpA3wAAakHfAABqQ98AAGpE3wAAakbfAABqR98AAGpJ3wAAakrfAABqTN8AAGpN3wAAak/fAABqUN8AAGpS3wAAalPfAABqVd8AAGpW3wAAaljfAABqWd8AAGpb3wAAalzfAABqXt8AAGpf3wAAamHfAABqYt8AAGpk3wAAamXfAABqZ98AAGpo3wAAamrfAABqa98AAGpt3wAAam7fAABqcN8AAGpx3wAAanPfAABqdN8AAGp23wAAanffAABqed8AAHVq/AUBAH2UKGr+BQEAagAGAQBqAQYBAGoDBgEAagQGAQBqBgYBAGoHBgEAagkGAQBqCgYBAGoMBgEAag0GAQBqDwYBAGoQBgEAahIGAQBqEwYBAGoVBgEAahYGAQBqGAYBAGoZBgEAahsGAQBqHAYBAGoeBgEAah8GAQBqIQYBAGoiBgEAaiQGAQBqJQYBAGonBgEAaigGAQBqKgYBAGorBgEAai0GAQBqLgYBAGowBgEAajEGAQBqMwYBAGo0BgEAajYGAQBqNwYBAGo5BgEAajoGAQBqPAYBAGo9BgEAaj8GAQBqQAYBAGpCBgEAakMGAQBqRQYBAGpGBgEAakgGAQBqSQYBAGpLBgEAakwGAQBqTgYBAGpPBgEAalEGAQBqUgYBAGpUBgEAalUGAQBqVwYBAGpYBgEAaloGAQBqWwYBAGpdBgEAal4GAQBqYAYBAGphBgEAamMGAQBqZAYBAGpmBgEAamcGAQBqaQYBAHVqagYBAH2UKGpsBgEAam4GAQBqbwYBAGpxBgEAanIGAQBqdAYBAGp1BgEAancGAQBqeAYBAGp6BgEAansGAQBqfQYBAGp+BgEAaoAGAQBqgQYBAGqDBgEAaoQGAQBqhgYBAGqHBgEAaokGAQBqigYBAGqMBgEAao0GAQBqjwYBAGqQBgEAapIGAQBqkwYBAGqVBgEAapYGAQBqmAYBAGqZBgEAapsGAQBqnAYBAGqeBgEAap8GAQBqoQYBAGqiBgEAaqQGAQBqpQYBAGqnBgEAaqgGAQBqqgYBAGqrBgEAaq0GAQBqrgYBAGqwBgEAarEGAQBqswYBAGq0BgEAarYGAQBqtwYBAGq5BgEAaroGAQBqvAYBAGq9BgEAar8GAQBqwAYBAGrCBgEAasMGAQBqxQYBAGrGBgEAasgGAQBqyQYBAGrLBgEAaswGAQBqzgYBAGrPBgEAatEGAQBq0gYBAGrUBgEAatUGAQBq1wYBAGrYBgEAatoGAQBq2wYBAGrdBgEAat4GAQBq4AYBAGrhBgEAauMGAQBq5AYBAGrmBgEAaucGAQBq6QYBAGrqBgEAauwGAQBq7QYBAGrvBgEAavAGAQBq8gYBAGrzBgEAavUGAQBq9gYBAGr4BgEAavkGAQBq+wYBAGr8BgEAav4GAQBq/wYBAGoBBwEAagIHAQBqBAcBAGoFBwEAagcHAQBqCAcBAGoKBwEAagsHAQBqDQcBAGoOBwEAahAHAQBqEQcBAGoTBwEAahQHAQBqFgcBAGoXBwEAahkHAQBqGgcBAGocBwEAah0HAQBqHwcBAGogBwEAaiIHAQBqIwcBAGolBwEAaiYHAQBqKAcBAGopBwEAaisHAQBqLAcBAGouBwEAai8HAQBqMQcBAGoyBwEAajQHAQBqNQcBAGo3BwEAajgHAQBqOgcBAGo7BwEAaj0HAQBqPgcBAGpABwEAakEHAQBqQwcBAGpEBwEAakYHAQBqRwcBAGpJBwEAakoHAQBqTAcBAGpNBwEAak8HAQBqUAcBAGpSBwEAalMHAQBqVQcBAGpWBwEAalgHAQBqWQcBAGpbBwEAalwHAQBqXgcBAGpfBwEAamEHAQBqYgcBAGpkBwEAamUHAQBqZwcBAGpoBwEAamoHAQBqawcBAGptBwEAam4HAQBqcAcBAGpxBwEAanMHAQBqdAcBAGp2BwEAancHAQBqeQcBAGp6BwEAanwHAQBqfQcBAGp/BwEAaoAHAQBqggcBAGqDBwEAaoUHAQBqhgcBAGqIBwEAaokHAQBqiwcBAGqMBwEAao4HAQBqjwcBAGqRBwEAapIHAQBqlAcBAGqVBwEAapcHAQBqmAcBAGqaBwEAapsHAQBqnQcBAGqeBwEAaqAHAQBqoQcBAGqjBwEAaqQHAQBqpgcBAGqnBwEAaqkHAQBqqgcBAGqsBwEAaq0HAQBqrwcBAGqwBwEAarIHAQBqswcBAGq1BwEAarYHAQBquAcBAGq5BwEAarsHAQBqvAcBAGq+BwEAar8HAQBqwQcBAGrCBwEAasQHAQBqxQcBAGrHBwEAasgHAQBqygcBAGrLBwEAas0HAQBqzgcBAGrQBwEAatEHAQBq0wcBAGrUBwEAatYHAQBq1wcBAGrZBwEAatoHAQBq3AcBAGrdBwEAat8HAQBq4AcBAGriBwEAauMHAQBq5QcBAGrmBwEAaugHAQBq6QcBAGrrBwEAauwHAQBq7gcBAGrvBwEAavEHAQBq8gcBAGr0BwEAavUHAQBq9wcBAGr4BwEAavoHAQBq+wcBAGr9BwEAav4HAQBqAAgBAGoBCAEAagMIAQBqBAgBAGoGCAEAagcIAQBqCQgBAGoKCAEAagwIAQBqDQgBAGoPCAEAahAIAQBqEggBAGoTCAEAahUIAQBqFggBAGoYCAEAahkIAQBqGwgBAGocCAEAah4IAQBqHwgBAGohCAEAaiIIAQBqJAgBAGolCAEAaicIAQBqKAgBAGoqCAEAaisIAQBqLQgBAGouCAEAajAIAQBqMQgBAGozCAEAajQIAQBqNggBAHVqNwgBAH2UKGo5CAEAajsIAQBqPAgBAGo+CAEAaj8IAQBqQQgBAGpCCAEAakQIAQBqRQgBAGpHCAEAakgIAQBqSggBAGpLCAEAak0IAQBqTggBAGpQCAEAalEIAQBqUwgBAGpUCAEAalYIAQBqVwgBAGpZCAEAaloIAQBqXAgBAGpdCAEAal8IAQBqYAgBAGpiCAEAamMIAQBqZQgBAGpmCAEAamgIAQBqaQgBAGprCAEAamwIAQBqbggBAGpvCAEAanEIAQBqcggBAGp0CAEAanUIAQBqdwgBAGp4CAEAanoIAQBqewgBAGp9CAEAan4IAQBqgAgBAGqBCAEAaoMIAQBqhAgBAGqGCAEAaocIAQBqiQgBAGqKCAEAaowIAQBqjQgBAGqPCAEAapAIAQBqkggBAGqTCAEAapUIAQBqlggBAGqYCAEAapkIAQBqmwgBAGqcCAEAap4IAQBqnwgBAGqhCAEAaqIIAQBqpAgBAGqlCAEAaqcIAQBqqAgBAGqqCAEAaqsIAQBqrQgBAGquCAEAarAIAQBqsQgBAGqzCAEAarQIAQBqtggBAGq3CAEAarkIAQBquggBAGq8CAEAar0IAQBqvwgBAGrACAEAasIIAQBqwwgBAGrFCAEAasYIAQBqyAgBAGrJCAEAassIAQBqzAgBAGrOCAEAas8IAQBq0QgBAGrSCAEAatQIAQBq1QgBAGrXCAEAatgIAQBq2ggBAGrbCAEAat0IAQBq3ggBAGrgCAEAauEIAQBq4wgBAGrkCAEAauYIAQBq5wgBAGrpCAEAauoI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AQBqJC0BAGomLQEAdXWMG2ludGVyc3BoaW54X25hbWVkX2ludmVudG9yeZR9lChoNmreLwEAaDNqKC0BAGgwagaPAAB1jBFfdmlld2NvZGVfbW9kdWxlc5R9lCiMHmFwYWNoZV9iZWFtLmNvZGVycy5hdnJvX3JlY29yZJQoWLQEAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkF2cm9SZWNvcmQgZm9yIEF2cm9HZW5lcmljQ29kZXIuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKX19hbGxfXyA9IFsnQXZyb1JlY29yZCddCgoKY2xhc3MgQXZyb1JlY29yZChvYmplY3QpOgogICIiIlNpbXBsZSB3cmFwcGVyIGNsYXNzIGZvciBkaWN0aW9uYXJ5IHJlY29yZHMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKICAgIHNlbGYucmVjb3JkID0gdmFsdWUKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gaXNzdWJjbGFzcyh0eXBlKG90aGVyKSwgQXZyb1JlY29yZCkgYW5kIHNlbGYucmVjb3JkID09IG90aGVyLnJlY29yZAoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnJlY29yZCkKlH2UKIwTQXZyb1JlY29yZC5fX2luaXRfX5SMA2RlZpRLHUseh5SMEUF2cm9SZWNvcmQuX19lcV9flGpWMQEASyBLIYeUjBNBdnJvUmVjb3JkLl9faGFzaF9flGpWMQEASyNLJIeUjApBdnJvUmVjb3JklIwFY2xhc3OUSxtLJIeUdX2UjApBdnJvUmVjb3JklGo8AwAAc4weYXBhY2hlX2JlYW0uY29kZXJzLmF2cm9fcmVjb3JklHSUjBlhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzlChYLKEAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQ29sbGVjdGlvbiBvZiB1c2VmdWwgY29kZXJzLgoKT25seSB0aG9zZSBjb2RlcnMgbGlzdGVkIGluIF9fYWxsX18gYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgb2YgdGhpcyBtb2R1bGUuCiIiIgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGJhc2U2NAppbXBvcnQgc3lzCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORwpmcm9tIHR5cGluZyBpbXBvcnQgQW55CmZyb20gdHlwaW5nIGltcG9ydCBDYWxsYWJsZQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdApmcm9tIHR5cGluZyBpbXBvcnQgSXRlcmFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBTZXF1ZW5jZQpmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGUKZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGVWYXIKZnJvbSB0eXBpbmcgaW1wb3J0IG92ZXJsb2FkCgppbXBvcnQgZ29vZ2xlLnByb3RvYnVmLndyYXBwZXJzX3BiMgpmcm9tIGZ1dHVyZS5tb3ZlcyBpbXBvcnQgcGlja2xlCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IGNvZGVyX2ltcGwKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMuYXZyb19yZWNvcmQgaW1wb3J0IEF2cm9SZWNvcmQKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgcHl0aG9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBwcm90b191dGlscwoKaWYgVFlQRV9DSEVDS0lORzoKICBmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgbWVzc2FnZSAgIyBweWxpbnQ6IGRpc2FibGU9dW5ncm91cGVkLWltcG9ydHMKICBmcm9tIGFwYWNoZV9iZWFtLmNvZGVycy50eXBlY29kZXJzIGltcG9ydCBDb2RlclJlZ2lzdHJ5CiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQgaW1wb3J0IFBpcGVsaW5lQ29udGV4dAoKIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCnRyeToKICBmcm9tIC5zdHJlYW0gaW1wb3J0IGdldF92YXJpbnRfc2l6ZQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgZnJvbSAuc2xvd19zdHJlYW0gaW1wb3J0IGdldF92YXJpbnRfc2l6ZQojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwoKIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KIyBBdm9pZCBkZXBlbmRlbmNpZXMgb24gdGhlIGZ1bGwgU0RLLgp0cnk6CiAgIyBJbXBvcnQgZGlsbCBmcm9tIHRoZSBwaWNrbGVyIG1vZHVsZSB0byBtYWtlIHN1cmUgb3VyIG1vbmtleS1wYXRjaGluZyBvZiBkaWxsCiAgIyBvY2N1cnMuCiAgZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVyIGltcG9ydCBkaWxsCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAjIFdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc3RvY2sgZGlsbCBsaWJyYXJ5IGluIHRlc3RzIHRoYXQgZG9uJ3QgdXNlIHRoZQogICMgZnVsbCBQeXRob24gU0RLLgogIGltcG9ydCBkaWxsCgpfX2FsbF9fID0gWwogICAgJ0NvZGVyJywKICAgICdBdnJvR2VuZXJpY0NvZGVyJywKICAgICdCb29sZWFuQ29kZXInLAogICAgJ0J5dGVzQ29kZXInLAogICAgJ0RpbGxDb2RlcicsCiAgICAnRmFzdFByaW1pdGl2ZXNDb2RlcicsCiAgICAnRmxvYXRDb2RlcicsCiAgICAnSXRlcmFibGVDb2RlcicsCiAgICAnUGlja2xlQ29kZXInLAogICAgJ1Byb3RvQ29kZXInLAogICAgJ1NpbmdsZXRvbkNvZGVyJywKICAgICdTdHJVdGY4Q29kZXInLAogICAgJ1RpbWVzdGFtcENvZGVyJywKICAgICdUdXBsZUNvZGVyJywKICAgICdUdXBsZVNlcXVlbmNlQ29kZXInLAogICAgJ1ZhckludENvZGVyJywKICAgICdXaW5kb3dlZFZhbHVlQ29kZXInLAogICAgJ1BhcmFtV2luZG93ZWRWYWx1ZUNvZGVyJwpdCgpUID0gVHlwZVZhcignVCcpCkNvZGVyVCA9IFR5cGVWYXIoJ0NvZGVyVCcsIGJvdW5kPSdDb2RlcicpClByb3RvQ29kZXJUID0gVHlwZVZhcignUHJvdG9Db2RlclQnLCBib3VuZD0nUHJvdG9Db2RlcicpCkNvbnN0cnVjdG9yRm4gPSBDYWxsYWJsZVtbT3B0aW9uYWxbQW55XSwgTGlzdFsnQ29kZXInXSwgJ1BpcGVsaW5lQ29udGV4dCddLCBBbnldCgoKZGVmIHNlcmlhbGl6ZV9jb2Rlcihjb2Rlcik6CiAgZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgogIHJldHVybiBiJyVzJCVzJyAlICgKICAgICAgY29kZXIuX19jbGFzc19fLl9fbmFtZV9fLmVuY29kZSgndXRmLTgnKSwgcGlja2xlci5kdW1wcyhjb2RlcikpCgoKZGVmIGRlc2VyaWFsaXplX2NvZGVyKHNlcmlhbGl6ZWQpOgogIGZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKICByZXR1cm4gcGlja2xlci5sb2FkcyhzZXJpYWxpemVkLnNwbGl0KGInJCcsIDEpWzFdKQoKCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KCgpjbGFzcyBDb2RlcihvYmplY3QpOgogICIiIkJhc2UgY2xhc3MgZm9yIGNvZGVycy4iIiIKICBkZWYgZW5jb2RlKHNlbGYsIHZhbHVlKToKICAgICMgdHlwZTogKEFueSkgLT4gYnl0ZXMKCiAgICAiIiJFbmNvZGVzIHRoZSBnaXZlbiBvYmplY3QgaW50byBhIGJ5dGUgc3RyaW5nLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignRW5jb2RlIG5vdCBpbXBsZW1lbnRlZDogJXMuJyAlIHNlbGYpCgogIGRlZiBkZWNvZGUoc2VsZiwgZW5jb2RlZCk6CiAgICAiIiJEZWNvZGVzIHRoZSBnaXZlbiBieXRlIHN0cmluZyBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG9iamVjdC4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ0RlY29kZSBub3QgaW1wbGVtZW50ZWQ6ICVzLicgJSBzZWxmKQoKICBkZWYgZW5jb2RlX25lc3RlZChzZWxmLCB2YWx1ZSk6CiAgICAiIiJVc2VzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIHRvIGVuY29kZSBpbiBuZXN0ZWQgZm9ybWF0LiIiIgogICAgcmV0dXJuIHNlbGYuZ2V0X2ltcGwoKS5lbmNvZGVfbmVzdGVkKHZhbHVlKQoKICBkZWYgZGVjb2RlX25lc3RlZChzZWxmLCBlbmNvZGVkKToKICAgICIiIlVzZXMgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdG8gZGVjb2RlIGluIG5lc3RlZCBmb3JtYXQuIiIiCiAgICByZXR1cm4gc2VsZi5nZXRfaW1wbCgpLmRlY29kZV9uZXN0ZWQoZW5jb2RlZCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGJvb2wKCiAgICAiIiJXaGV0aGVyIHRoaXMgY29kZXIgaXMgZ3VhcmFudGVlZCB0byBlbmNvZGUgdmFsdWVzIGRldGVybWluaXN0aWNhbGx5LgoKICAgIEEgZGV0ZXJtaW5pc3RpYyBjb2RlciBpcyByZXF1aXJlZCBmb3Iga2V5IGNvZGVycyBpbiBHcm91cEJ5S2V5IG9wZXJhdGlvbnMKICAgIHRvIHByb2R1Y2UgY29uc2lzdGVudCByZXN1bHRzLgoKICAgIEZvciBleGFtcGxlLCBub3RlIHRoYXQgdGhlIGRlZmF1bHQgY29kZXIsIHRoZSBQaWNrbGVDb2RlciwgaXMgbm90CiAgICBkZXRlcm1pbmlzdGljOiB0aGUgb3JkZXJpbmcgb2YgcGlja2VkIGVudHJpZXMgaW4gbWFwcyBtYXkgdmFyeSBhY3Jvc3MKICAgIGV4ZWN1dGlvbnMgc2luY2UgdGhlcmUgaXMgbm8gZGVmaW5lZCBvcmRlciwgYW5kIHN1Y2ggYSBjb2RlciBpcyBub3QgaW4KICAgIGdlbmVyYWwgc3VpdGFibGUgZm9yIHVzYWdlIGFzIGEga2V5IGNvZGVyIGluIEdyb3VwQnlLZXkgb3BlcmF0aW9ucywgc2luY2UKICAgIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHNhbWUga2V5IG1heSBiZSBlbmNvZGVkIGRpZmZlcmVudGx5LgoKICAgIFJldHVybnM6CiAgICAgIFdoZXRoZXIgY29kZXIgaXMgZGV0ZXJtaW5pc3RpYy4KICAgICIiIgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBhc19kZXRlcm1pbmlzdGljX2NvZGVyKHNlbGYsIHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2U9Tm9uZSk6CiAgICAiIiJSZXR1cm5zIGEgZGV0ZXJtaW5pc3RpYyB2ZXJzaW9uIG9mIHNlbGYsIGlmIHBvc3NpYmxlLgoKICAgIE90aGVyd2lzZSByYWlzZXMgYSB2YWx1ZSBlcnJvci4KICAgICIiIgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm9yX21lc3NhZ2Ugb3IgIiclcycgY2Fubm90IGJlIG1hZGUgZGV0ZXJtaW5pc3RpYy4iKQoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmLCB2YWx1ZSk6CiAgICAiIiJFc3RpbWF0ZXMgdGhlIGVuY29kZWQgc2l6ZSBvZiB0aGUgZ2l2ZW4gdmFsdWUsIGluIGJ5dGVzLgoKICAgIERhdGFmbG93IGVzdGltYXRlcyB0aGUgZW5jb2RlZCBzaXplIG9mIGEgUENvbGxlY3Rpb24gcHJvY2Vzc2VkIGluIGEgcGlwZWxpbmUKICAgIHN0ZXAgYnkgdXNpbmcgdGhlIGVzdGltYXRlZCBzaXplIG9mIGEgcmFuZG9tIHNhbXBsZSBvZiBlbGVtZW50cyBpbiB0aGF0CiAgICBQQ29sbGVjdGlvbi4KCiAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBlbmNvZGVzIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJucyBpdHMgYnl0ZQogICAgc2l6ZS4gIElmIGEgY29kZXIgY2FuIHByb3ZpZGUgYSBmYXN0IGVzdGltYXRlIG9mIHRoZSBlbmNvZGVkIHNpemUgb2YgYSB2YWx1ZQogICAgKGUuZy4sIGlmIHRoZSBlbmNvZGluZyBoYXMgYSBmaXhlZCBzaXplKSwgaXQgY2FuIHByb3ZpZGUgaXRzIGVzdGltYXRlIGhlcmUKICAgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCgogICAgQXJndW1lbnRzOgogICAgICB2YWx1ZTogdGhlIHZhbHVlIHdob3NlIGVuY29kZWQgc2l6ZSBpcyB0byBiZSBlc3RpbWF0ZWQuCgogICAgUmV0dXJuczoKICAgICAgVGhlIGVzdGltYXRlZCBlbmNvZGVkIHNpemUgb2YgdGhlIGdpdmVuIHZhbHVlLgogICAgIiIiCiAgICByZXR1cm4gbGVuKHNlbGYuZW5jb2RlKHZhbHVlKSkKCiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAjIE1ldGhvZHMgYmVsb3cgYXJlIGludGVybmFsIFNESyBkZXRhaWxzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZSBtb2RpZmllZCBmb3IKICAjIHVzZXItZGVmaW5lZCBjb2RlcnMuCiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgICMgdHlwZTogKCkgLT4gY29kZXJfaW1wbC5Db2RlckltcGwKCiAgICAiIiJDcmVhdGVzIGEgQ29kZXJJbXBsIHRvIGRvIHRoZSBhY3R1YWwgZW5jb2RpbmcgYW5kIGRlY29kaW5nLgogICAgIiIiCiAgICByZXR1cm4gY29kZXJfaW1wbC5DYWxsYmFja0NvZGVySW1wbCgKICAgICAgICBzZWxmLmVuY29kZSwgc2VsZi5kZWNvZGUsIHNlbGYuZXN0aW1hdGVfc2l6ZSkKCiAgZGVmIGdldF9pbXBsKHNlbGYpOgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICAgIFJldHVybnMgdGhlIENvZGVySW1wbCBiYWNraW5nIHRoaXMgQ29kZXIuCiAgICAiIiIKICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfaW1wbCcpOgogICAgICBzZWxmLl9pbXBsID0gc2VsZi5fY3JlYXRlX2ltcGwoKQogICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLl9pbXBsLCBjb2Rlcl9pbXBsLkNvZGVySW1wbCkKICAgIHJldHVybiBzZWxmLl9pbXBsCgogIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fZGljdF93aXRob3V0X2ltcGwoKQoKICBkZWYgX2RpY3Rfd2l0aG91dF9pbXBsKHNlbGYpOgogICAgaWYgaGFzYXR0cihzZWxmLCAnX2ltcGwnKToKICAgICAgZCA9IGRpY3Qoc2VsZi5fX2RpY3RfXykKICAgICAgZGVsIGRbJ19pbXBsJ10KICAgICAgcmV0dXJuIGQKICAgIHJldHVybiBzZWxmLl9fZGljdF9fCgogIGRlZiB0b190eXBlX2hpbnQoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdCRUFNLTI3MTcnKQoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV90eXBlX2hpbnQoY2xzLCB1bnVzZWRfdHlwZWhpbnQsIHVudXNlZF9yZWdpc3RyeSk6CiAgICAjIHR5cGU6IChUeXBlW0NvZGVyVF0sIEFueSwgQ29kZXJSZWdpc3RyeSkgLT4gQ29kZXJUCiAgICAjIElmIG5vdCBvdmVycmlkZGVuLCBqdXN0IGNvbnN0cnVjdCB0aGUgY29kZXIgd2l0aG91dCBhcmd1bWVudHMuCiAgICByZXR1cm4gY2xzKCkKCiAgZGVmIGlzX2t2X2NvZGVyKHNlbGYpOgogICAgIyAoKSAtPiBib29sCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGtleV9jb2RlcihzZWxmKToKICAgICMgdHlwZTogKCkgLT4gQ29kZXIKICAgIGlmIHNlbGYuaXNfa3ZfY29kZXIoKToKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigna2V5X2NvZGVyOiAlcycgJSBzZWxmKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGEgS1YgY29kZXI6ICVzLicgJSBzZWxmKQoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IENvZGVyCiAgICBpZiBzZWxmLmlzX2t2X2NvZGVyKCk6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbHVlX2NvZGVyOiAlcycgJSBzZWxmKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGEgS1YgY29kZXI6ICVzLicgJSBzZWxmKQoKICBkZWYgX2dldF9jb21wb25lbnRfY29kZXJzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBTZXF1ZW5jZVtDb2Rlcl0KCiAgICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogICAgUmV0dXJucyB0aGUgaW50ZXJuYWwgY29tcG9uZW50IGNvZGVycyBvZiB0aGlzIGNvZGVyLiIiIgogICAgIyBUaGlzIGlzIGFuIGludGVybmFsIGRldGFpbCBvZiB0aGUgQ29kZXIgQVBJIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlCiAgICAjIHJlZmluZWQgaW4gdXNlci1kZWZpbmVkIENvZGVycy4KICAgIHJldHVybiBbXQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUpOgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICAgIFJldHVybnMgR29vZ2xlIENsb3VkIERhdGFmbG93IEFQSSBkZXNjcmlwdGlvbiBvZiB0aGlzIGNvZGVyLiIiIgogICAgIyBUaGlzIGlzIGFuIGludGVybmFsIGRldGFpbCBvZiB0aGUgQ29kZXIgQVBJIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlCiAgICAjIHJlZmluZWQgaW4gdXNlci1kZWZpbmVkIENvZGVycy4KCiAgICB2YWx1ZSA9IHsKICAgICAgICAjIFdlIHBhc3MgY29kZXJzIGluIHRoZSBmb3JtICI8Y29kZXJfbmFtZT4kPHBpY2tsZWRfZGF0YT4iIHRvIG1ha2UgdGhlCiAgICAgICAgIyBqb2IgZGVzY3JpcHRpb24gSlNPTiBtb3JlIHJlYWRhYmxlLiAgRGF0YSBiZWZvcmUgdGhlICQgaXMgaWdub3JlZCBieQogICAgICAgICMgdGhlIHdvcmtlci4KICAgICAgICAnQHR5cGUnOiBzZXJpYWxpemVfY29kZXIoc2VsZiksCiAgICAgICAgJ2NvbXBvbmVudF9lbmNvZGluZ3MnOiBbCiAgICAgICAgICAgIGNvbXBvbmVudC5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQpCiAgICAgICAgICAgIGZvciBjb21wb25lbnQgaW4gc2VsZi5fZ2V0X2NvbXBvbmVudF9jb2RlcnMoKQogICAgICAgIF0sCiAgICB9CgogICAgaWYgY29kZXJzX2NvbnRleHQ6CiAgICAgIHZhbHVlWydwaXBlbGluZV9wcm90b19jb2Rlcl9pZCddID0gY29kZXJzX2NvbnRleHQuZ2V0X2lkKHNlbGYpCgogICAgcmV0dXJuIHZhbHVlCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwoKICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKAogICAgICAgIHNlbGYuX19jbGFzc19fID09IG90aGVyLl9fY2xhc3NfXyBhbmQKICAgICAgICBzZWxmLl9kaWN0X3dpdGhvdXRfaW1wbCgpID09IG90aGVyLl9kaWN0X3dpdGhvdXRfaW1wbCgpKQoKICAjIHB5bGludDogZW5hYmxlPXByb3RlY3RlZC1hY2Nlc3MKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgogIF9rbm93bl91cm5zID0ge30gICMgdHlwZTogRGljdFtzdHIsIFR1cGxlW3R5cGUsIENvbnN0cnVjdG9yRm5dXQoKICBAY2xhc3NtZXRob2QKICBAb3ZlcmxvYWQKICBkZWYgcmVnaXN0ZXJfdXJuKAogICAgICBjbHMsCiAgICAgIHVybiwgICMgdHlwZTogc3RyCiAgICAgIHBhcmFtZXRlcl90eXBlLCAgIyB0eXBlOiBPcHRpb25hbFtUeXBlW1RdXQogICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IENhbGxhYmxlW1tDYWxsYWJsZVtbVCwgTGlzdFtDb2Rlcl0sIFBpcGVsaW5lQ29udGV4dF0sIEFueV1dLCBDYWxsYWJsZVtbVCwgTGlzdFtDb2Rlcl0sIFBpcGVsaW5lQ29udGV4dF0sIEFueV1dCiAgICBwYXNzCgogIEBjbGFzc21ldGhvZAogIEBvdmVybG9hZAogIGRlZiByZWdpc3Rlcl91cm4oY2xzLAogICAgICAgICAgICAgICAgICAgdXJuLCAgIyB0eXBlOiBzdHIKICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlLCAgIyB0eXBlOiBPcHRpb25hbFtUeXBlW1RdXQogICAgICAgICAgICAgICAgICAgZm4gICMgdHlwZTogQ2FsbGFibGVbW1QsIExpc3RbQ29kZXJdLCBQaXBlbGluZUNvbnRleHRdLCBBbnldCiAgICAgICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE5vbmUKICAgIHBhc3MKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsIHVybiwgcGFyYW1ldGVyX3R5cGUsIGZuPU5vbmUpOgogICAgIiIiUmVnaXN0ZXJzIGEgdXJuIHdpdGggYSBjb25zdHJ1Y3Rvci4KCiAgICBGb3IgZXhhbXBsZSwgaWYgJ2JlYW06Zm46Zm9vJyBoYWQgcGFyYW1ldGVyIHR5cGUgRm9vUGF5bG9hZCwgb25lIGNvdWxkCiAgICB3cml0ZSBgUnVubmVyQXBpRm4ucmVnaXN0ZXJfdXJuKCdiZWFuOmZuOmZvbycsIEZvb1BheWxvYWQsIGZvb19mcm9tX3Byb3RvKWAKICAgIHdoZXJlIGZvb19mcm9tX3Byb3RvIHRvb2sgYXMgYXJndW1lbnRzIGEgRm9vUGF5bG9hZCBhbmQgYSBQaXBlbGluZUNvbnRleHQuCiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IgcmF0aGVyIHRoYW4gcGFzc2luZyB0aGUKICAgIGNhbGxhYmxlIGluIGFzIHRoZSBmaW5hbCBwYXJhbWV0ZXIuCgogICAgQSBjb3JyZXNwb25kaW5nIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyIG1ldGhvZCB3b3VsZCBiZSBleHBlY3RlZCB0aGF0CiAgICByZXR1cm5zIHRoZSB0dXBsZSAoJ2JlYW06Zm46Zm9vJywgRm9vUGF5bG9hZCkKICAgICIiIgogICAgZGVmIHJlZ2lzdGVyKGZuKToKICAgICAgY2xzLl9rbm93bl91cm5zW3Vybl0gPSBwYXJhbWV0ZXJfdHlwZSwgZm4KICAgICAgcmV0dXJuIGZuCgogICAgaWYgZm46CiAgICAgICMgVXNlZCBhcyBhIHN0YXRlbWVudC4KICAgICAgcmVnaXN0ZXIoZm4pCiAgICBlbHNlOgogICAgICAjIFVzZWQgYXMgYSBkZWNvcmF0b3IuCiAgICAgIHJldHVybiByZWdpc3RlcgoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gYmVhbV9ydW5uZXJfYXBpX3BiMi5Db2RlcgogICAgdXJuLCB0eXBlZF9wYXJhbSwgY29tcG9uZW50cyA9IHNlbGYudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoY29udGV4dCkKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLkNvZGVyKAogICAgICAgIHNwZWM9YmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWMoCiAgICAgICAgICAgIHVybj11cm4sCiAgICAgICAgICAgIHBheWxvYWQ9dHlwZWRfcGFyYW0gaWYgaXNpbnN0YW5jZSh0eXBlZF9wYXJhbSwgKGJ5dGVzLCB0eXBlKE5vbmUpKSkKICAgICAgICAgICAgZWxzZSB0eXBlZF9wYXJhbS5TZXJpYWxpemVUb1N0cmluZygpKSwKICAgICAgICBjb21wb25lbnRfY29kZXJfaWRzPVtjb250ZXh0LmNvZGVycy5nZXRfaWQoYykgZm9yIGMgaW4gY29tcG9uZW50c10pCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkoY2xzLCBjb2Rlcl9wcm90bywgY29udGV4dCk6CiAgICAjIHR5cGU6IChUeXBlW0NvZGVyVF0sIGJlYW1fcnVubmVyX2FwaV9wYjIuQ29kZXIsIFBpcGVsaW5lQ29udGV4dCkgLT4gQ29kZXJUCgogICAgIiIiQ29udmVydHMgZnJvbSBhbiBGdW5jdGlvblNwZWMgdG8gYSBGbiBvYmplY3QuCgogICAgUHJlZmVyIHJlZ2lzdGVyaW5nIGEgdXJuIHdpdGggaXRzIHBhcmFtZXRlciB0eXBlIGFuZCBjb25zdHJ1Y3Rvci4KICAgICIiIgogICAgcGFyYW1ldGVyX3R5cGUsIGNvbnN0cnVjdG9yID0gY2xzLl9rbm93bl91cm5zW2NvZGVyX3Byb3RvLnNwZWMudXJuXQogICAgdHJ5OgogICAgICByZXR1cm4gY29uc3RydWN0b3IoCiAgICAgICAgICBwcm90b191dGlscy5wYXJzZV9CeXRlcyhjb2Rlcl9wcm90by5zcGVjLnBheWxvYWQsIHBhcmFtZXRlcl90eXBlKSwgWwogICAgICAgICAgICAgIGNvbnRleHQuY29kZXJzLmdldF9ieV9pZChjKQogICAgICAgICAgICAgIGZvciBjIGluIGNvZGVyX3Byb3RvLmNvbXBvbmVudF9jb2Rlcl9pZHMKICAgICAgICAgIF0sCiAgICAgICAgICBjb250ZXh0KQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgaWYgY29udGV4dC5hbGxvd19wcm90b19ob2xkZXJzOgogICAgICAgIHJldHVybiBSdW5uZXJBUElDb2RlckhvbGRlcigKICAgICAgICAgICAgY29kZXJfcHJvdG8pICAjIHR5cGU6IGlnbm9yZSAgIyB0b28gYW1iaWd1b3VzCiAgICAgIHJhaXNlCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKE9wdGlvbmFsW1BpcGVsaW5lQ29udGV4dF0pIC0+IFR1cGxlW3N0ciwgQW55LCBTZXF1ZW5jZVtDb2Rlcl1dCiAgICByZXR1cm4gKAogICAgICAgIHB5dGhvbl91cm5zLlBJQ0tMRURfQ09ERVIsCiAgICAgICAgZ29vZ2xlLnByb3RvYnVmLndyYXBwZXJzX3BiMi5CeXRlc1ZhbHVlKHZhbHVlPXNlcmlhbGl6ZV9jb2RlcihzZWxmKSksCiAgICAgICAgKCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgcmVnaXN0ZXJfc3RydWN0dXJlZF91cm4odXJuLCBjbHMpOgogICAgIyB0eXBlOiAoc3RyLCBUeXBlW0NvZGVyXSkgLT4gTm9uZQoKICAgICIiIlJlZ2lzdGVyIGEgY29kZXIgdGhhdCdzIGNvbXBsZXRlbHkgZGVmaW5lZCBieSBpdHMgdXJuIGFuZCBpdHMKICAgIGNvbXBvbmVudChzKSwgaWYgYW55LCB3aGljaCBhcmUgcGFzc2VkIHRvIGNvbnN0cnVjdCB0aGUgaW5zdGFuY2UuCiAgICAiIiIKICAgIGNscy50b19ydW5uZXJfYXBpX3BhcmFtZXRlciA9ICgKICAgICAgICBsYW1iZGEgc2VsZiwgdW51c2VkX2NvbnRleHQ6ICh1cm4sIE5vbmUsIHNlbGYuX2dldF9jb21wb25lbnRfY29kZXJzKCkpKQoKICAgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC12YXJpYWJsZQogICAgQENvZGVyLnJlZ2lzdGVyX3Vybih1cm4sIE5vbmUpCiAgICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcih1bnVzZWRfcGF5bG9hZCwgY29tcG9uZW50cywgdW51c2VkX2NvbnRleHQpOgogICAgICBpZiBjb21wb25lbnRzOgogICAgICAgIHJldHVybiBjbHMoKmNvbXBvbmVudHMpCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGNscygpCgoKQENvZGVyLnJlZ2lzdGVyX3VybigKICAgIHB5dGhvbl91cm5zLlBJQ0tMRURfQ09ERVIsIGdvb2dsZS5wcm90b2J1Zi53cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSkKZGVmIF9waWNrbGVfZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjb21wb25lbnRzLCBjb250ZXh0KToKICByZXR1cm4gZGVzZXJpYWxpemVfY29kZXIocGF5bG9hZC52YWx1ZSkKCgpjbGFzcyBTdHJVdGY4Q29kZXIoQ29kZXIpOgogICIiIkEgY29kZXIgdXNlZCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBzdHJpbmdzIGFzIFVURi04LiIiIgogIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgcmV0dXJuIHZhbHVlLmVuY29kZSgndXRmLTgnKQoKICBkZWYgZGVjb2RlKHNlbGYsIHZhbHVlKToKICAgIHJldHVybiB2YWx1ZS5kZWNvZGUoJ3V0Zi04JykKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIHVuaWNvZGUKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3Vybihjb21tb25fdXJucy5jb2RlcnMuU1RSSU5HX1VURjgudXJuLCBTdHJVdGY4Q29kZXIpCgoKY2xhc3MgVG9CeXRlc0NvZGVyKENvZGVyKToKICAiIiJBIGRlZmF1bHQgc3RyaW5nIGNvZGVyIHVzZWQgaWYgbm8gc2luayBjb2RlciBpcyBzcGVjaWZpZWQuIiIiCgogIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPT0gMjoKCiAgICBkZWYgZW5jb2RlKHNlbGYsIHZhbHVlKToKICAgICAgIyBweWxpbnQ6IGRpc2FibGU9dW5pY29kZS1idWlsdGluCiAgICAgIHJldHVybiAoCiAgICAgICAgICB2YWx1ZS5lbmNvZGUoJ3V0Zi04JykgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29kZSkgICMgbm9xYTogRjgyMQogICAgICAgICAgZWxzZSBzdHIodmFsdWUpKQoKICBlbHNlOgoKICAgIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgICByZXR1cm4gdmFsdWUgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYnl0ZXMpIGVsc2Ugc3RyKHZhbHVlKS5lbmNvZGUoJ3V0Zi04JykKCiAgZGVmIGRlY29kZShzZWxmLCBfKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1RvQnl0ZXNDb2RlciBjYW5ub3QgYmUgdXNlZCBmb3IgZGVjb2RpbmcuJykKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKCiMgYWxpYXMgdG8gdGhlIG9sZCBjbGFzcyBuYW1lIGZvciBhIGNvdXJ0ZXN5IHRvIHVzZXJzIHdobyByZWZlcmVuY2UgaXQKVG9TdHJpbmdDb2RlciA9IFRvQnl0ZXNDb2RlcgoKCmNsYXNzIEZhc3RDb2RlcihDb2Rlcik6CiAgIiIiQ29kZXIgc3ViY2xhc3MgdXNlZCB3aGVuIGEgKGZhc3RlcikgQ29kZXJJbXBsIGlzIHN1cHBsaWVkIGRpcmVjdGx5LgoKICBUaGUgQ29kZXIgY2xhc3MgZGVmaW5lcyBfY3JlYXRlX2ltcGwgaW4gdGVybXMgb2YgZW5jb2RlKCkgYW5kIGRlY29kZSgpOwogIHRoaXMgY2xhc3MgaW52ZXJ0cyB0aGF0IGJ5IGRlZmluaW5nIGVuY29kZSgpIGFuZCBkZWNvZGUoKSBpbiB0ZXJtcyBvZgogIF9jcmVhdGVfaW1wbCgpLgogICIiIgogIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgIiIiRW5jb2RlcyB0aGUgZ2l2ZW4gb2JqZWN0IGludG8gYSBieXRlIHN0cmluZy4iIiIKICAgIHJldHVybiBzZWxmLmdldF9pbXBsKCkuZW5jb2RlKHZhbHVlKQoKICBkZWYgZGVjb2RlKHNlbGYsIGVuY29kZWQpOgogICAgIiIiRGVjb2RlcyB0aGUgZ2l2ZW4gYnl0ZSBzdHJpbmcgaW50byB0aGUgY29ycmVzcG9uZGluZyBvYmplY3QuIiIiCiAgICByZXR1cm4gc2VsZi5nZXRfaW1wbCgpLmRlY29kZShlbmNvZGVkKQoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmLCB2YWx1ZSk6CiAgICByZXR1cm4gc2VsZi5nZXRfaW1wbCgpLmVzdGltYXRlX3NpemUodmFsdWUpCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgQnl0ZXNDb2RlcihGYXN0Q29kZXIpOgogICIiIkJ5dGUgc3RyaW5nIGNvZGVyLiIiIgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5CeXRlc0NvZGVySW1wbCgpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBib29sCiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIGJ5dGVzCgogIGRlZiBhc19jbG91ZF9vYmplY3Qoc2VsZiwgY29kZXJzX2NvbnRleHQ9Tm9uZSk6CiAgICByZXR1cm4gewogICAgICAgICdAdHlwZSc6ICdraW5kOmJ5dGVzJywKICAgIH0KCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKCkNvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuKGNvbW1vbl91cm5zLmNvZGVycy5CWVRFUy51cm4sIEJ5dGVzQ29kZXIpCgoKY2xhc3MgQm9vbGVhbkNvZGVyKEZhc3RDb2Rlcik6CiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkJvb2xlYW5Db2RlckltcGwoKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiB0b190eXBlX2hpbnQoc2VsZik6CiAgICByZXR1cm4gYm9vbAoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4oY29tbW9uX3VybnMuY29kZXJzLkJPT0wudXJuLCBCb29sZWFuQ29kZXIpCgoKY2xhc3MgVmFySW50Q29kZXIoRmFzdENvZGVyKToKICAiIiJWYXJpYWJsZS1sZW5ndGggaW50ZWdlciBjb2Rlci4iIiIKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuVmFySW50Q29kZXJJbXBsKCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGJvb2wKICAgIHJldHVybiBUcnVlCgogIGRlZiB0b190eXBlX2hpbnQoc2VsZik6CiAgICByZXR1cm4gaW50CgogIGRlZiBhc19jbG91ZF9vYmplY3Qoc2VsZiwgY29kZXJzX2NvbnRleHQ9Tm9uZSk6CiAgICByZXR1cm4gewogICAgICAgICdAdHlwZSc6ICdraW5kOnZhcmludCcsCiAgICB9CgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3Vybihjb21tb25fdXJucy5jb2RlcnMuVkFSSU5ULnVybiwgVmFySW50Q29kZXIpCgoKY2xhc3MgRmxvYXRDb2RlcihGYXN0Q29kZXIpOgogICIiIkEgY29kZXIgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgdmFsdWVzLiIiIgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5GbG9hdENvZGVySW1wbCgpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBib29sCiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIGZsb2F0CgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3Vybihjb21tb25fdXJucy5jb2RlcnMuRE9VQkxFLnVybiwgRmxvYXRDb2RlcikKCgpjbGFzcyBUaW1lc3RhbXBDb2RlcihGYXN0Q29kZXIpOgogICIiIkEgY29kZXIgdXNlZCBmb3IgdGltZXV0aWwuVGltZXN0YW1wIHZhbHVlcy4iIiIKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuVGltZXN0YW1wQ29kZXJJbXBsKCkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjICgpIC0+IGJvb2wKICAgIHJldHVybiBUcnVlCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2godHlwZShzZWxmKSkKCgpjbGFzcyBfVGltZXJDb2RlcihGYXN0Q29kZXIpOgogICIiIkEgY29kZXIgdXNlZCBmb3IgdGltZXIgdmFsdWVzLgoKICBGb3IgaW50ZXJuYWwgdXNlLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwYXlsb2FkX2NvZGVyKToKICAgICMgdHlwZTogKENvZGVyKSAtPiBOb25lCiAgICBzZWxmLl9wYXlsb2FkX2NvZGVyID0gcGF5bG9hZF9jb2RlcgoKICBkZWYgX2dldF9jb21wb25lbnRfY29kZXJzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBMaXN0W0NvZGVyXQogICAgcmV0dXJuIFtzZWxmLl9wYXlsb2FkX2NvZGVyXQoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuVGltZXJDb2RlckltcGwoc2VsZi5fcGF5bG9hZF9jb2Rlci5nZXRfaW1wbCgpKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgKCkgLT4gYm9vbAogICAgcmV0dXJuIHNlbGYuX3BheWxvYWRfY29kZXIuaXNfZGV0ZXJtaW5pc3RpYygpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICgKICAgICAgICB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZAogICAgICAgIHNlbGYuX3BheWxvYWRfY29kZXIgPT0gb3RoZXIuX3BheWxvYWRfY29kZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpICsgaGFzaChzZWxmLl9wYXlsb2FkX2NvZGVyKQoKCkNvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuKGNvbW1vbl91cm5zLmNvZGVycy5USU1FUi51cm4sIF9UaW1lckNvZGVyKQoKCmNsYXNzIFNpbmdsZXRvbkNvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQSBjb2RlciB0aGF0IGFsd2F5cyBlbmNvZGVzIGV4YWN0bHkgb25lIHZhbHVlLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5TaW5nbGV0b25Db2RlckltcGwoc2VsZi5fdmFsdWUpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgIyAoKSAtPiBib29sCiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLl92YWx1ZSA9PSBvdGhlci5fdmFsdWUKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5fdmFsdWUpCgoKZGVmIG1heWJlX2RpbGxfZHVtcHMobyk6CiAgIiIiUGlja2xlIHVzaW5nIGNQaWNrbGUgb3IgdGhlIERpbGwgcGlja2xlciBhcyBhIGZhbGxiYWNrLiIiIgogICMgV2UgbmVlZCB0byB1c2UgdGhlIGRpbGwgcGlja2xlciBmb3Igb2JqZWN0cyBvZiBjZXJ0YWluIGN1c3RvbSBjbGFzc2VzLAogICMgaW5jbHVkaW5nLCBmb3IgZXhhbXBsZSwgb25lcyB0aGF0IGNvbnRhaW4gbGFtYmRhcy4KICB0cnk6CiAgICByZXR1cm4gcGlja2xlLmR1bXBzKG8sIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKQogIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgIHJldHVybiBkaWxsLmR1bXBzKG8pCgoKZGVmIG1heWJlX2RpbGxfbG9hZHMobyk6CiAgIiIiVW5waWNrbGUgdXNpbmcgY1BpY2tsZSBvciB0aGUgRGlsbCBwaWNrbGVyIGFzIGEgZmFsbGJhY2suIiIiCiAgdHJ5OgogICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhvKQogIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgIHJldHVybiBkaWxsLmxvYWRzKG8pCgoKY2xhc3MgX1BpY2tsZUNvZGVyQmFzZShGYXN0Q29kZXIpOgogICIiIkJhc2UgY2xhc3MgZm9yIHBpY2tsaW5nIGNvZGVycy4iIiIKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgKCkgLT4gYm9vbAogICAgIyBOb3RlIHRoYXQgdGhlIGRlZmF1bHQgY29kZXIsIHRoZSBQaWNrbGVDb2RlciwgaXMgbm90IGRldGVybWluaXN0aWMgKGZvcgogICAgIyBleGFtcGxlLCB0aGUgb3JkZXJpbmcgb2YgcGlja2VkIGVudHJpZXMgaW4gbWFwcyBtYXkgdmFyeSBhY3Jvc3MKICAgICMgZXhlY3V0aW9ucyksIGFuZCBzbyBpcyBub3QgaW4gZ2VuZXJhbCBzdWl0YWJsZSBmb3IgdXNhZ2UgYXMgYSBrZXkgY29kZXIgaW4KICAgICMgR3JvdXBCeUtleSBvcGVyYXRpb25zLgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBhc19jbG91ZF9vYmplY3Qoc2VsZiwgY29kZXJzX2NvbnRleHQ9Tm9uZSwgaXNfcGFpcl9saWtlPVRydWUpOgogICAgdmFsdWUgPSBzdXBlcihfUGlja2xlQ29kZXJCYXNlLCBzZWxmKS5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQpCiAgICAjIFdlIGN1cnJlbnRseSB1c2UgdGhpcyBjb2RlciBpbiBwbGFjZXMgd2hlcmUgd2UgY2Fubm90IGluZmVyIHRoZSBjb2RlciB0bwogICAgIyB1c2UgZm9yIHRoZSB2YWx1ZSB0eXBlIGluIGEgbW9yZSBncmFudWxhciB3YXkuICBJbiBwbGFjZXMgd2hlcmUgdGhlCiAgICAjIHNlcnZpY2UgZXhwZWN0cyBhIHBhaXIsIGl0IGNoZWNrcyBmb3IgdGhlICJpc19wYWlyX2xpa2UiIGtleSwgaW4gd2hpY2gKICAgICMgY2FzZSB3ZSB3b3VsZCBmYWlsIHdpdGhvdXQgdGhlIGhhY2sgYmVsb3cuCiAgICBpZiBpc19wYWlyX2xpa2U6CiAgICAgIHZhbHVlWydpc19wYWlyX2xpa2UnXSA9IFRydWUKICAgICAgdmFsdWVbJ2NvbXBvbmVudF9lbmNvZGluZ3MnXSA9IFsKICAgICAgICAgIHNlbGYuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0LCBpc19wYWlyX2xpa2U9RmFsc2UpLAogICAgICAgICAgc2VsZi5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQsIGlzX3BhaXJfbGlrZT1GYWxzZSkKICAgICAgXQoKICAgIHJldHVybiB2YWx1ZQoKICAjIFdlIGFsbG93IC5rZXlfY29kZXIoKSBhbmQgLnZhbHVlX2NvZGVyKCkgdG8gYmUgY2FsbGVkIG9uIFBpY2tsZUNvZGVyIHNpbmNlCiAgIyB3ZSBjYW4ndCBhbHdheXMgaW5mZXIgdGhlIHJldHVybiB2YWx1ZXMgb2YgbGFtYmRhcyBpbiBQYXJEbyBvcGVyYXRpb25zLCB0aGUKICAjIHJlc3VsdCBvZiB3aGljaCBtYXkgYmUgdXNlZCBpbiBhIEdyb3VwQnlrZXkuCiAgZGVmIGlzX2t2X2NvZGVyKHNlbGYpOgogICAgIyAoKSAtPiBib29sCiAgICByZXR1cm4gVHJ1ZQoKICBkZWYga2V5X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKCmNsYXNzIFBpY2tsZUNvZGVyKF9QaWNrbGVDb2RlckJhc2UpOgogICIiIkNvZGVyIHVzaW5nIFB5dGhvbidzIHBpY2tsZSBmdW5jdGlvbmFsaXR5LiIiIgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICBkdW1wcyA9IHBpY2tsZS5kdW1wcwogICAgSElHSEVTVF9QUk9UT0NPTCA9IHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MCiAgICByZXR1cm4gY29kZXJfaW1wbC5DYWxsYmFja0NvZGVySW1wbCgKICAgICAgICBsYW1iZGEgeDogZHVtcHMoeCwgSElHSEVTVF9QUk9UT0NPTCksIHBpY2tsZS5sb2FkcykKCiAgZGVmIGFzX2RldGVybWluaXN0aWNfY29kZXIoc2VsZiwgc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZT1Ob25lKToKICAgIHJldHVybiBEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2RlcihzZWxmLCBzdGVwX2xhYmVsKQoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIEFueQoKCmNsYXNzIERpbGxDb2RlcihfUGlja2xlQ29kZXJCYXNlKToKICAiIiJDb2RlciB1c2luZyBkaWxsJ3MgcGlja2xlIGZ1bmN0aW9uYWxpdHkuIiIiCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkNhbGxiYWNrQ29kZXJJbXBsKG1heWJlX2RpbGxfZHVtcHMsIG1heWJlX2RpbGxfbG9hZHMpCgoKY2xhc3MgRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIoRmFzdENvZGVyKToKICAiIiJUaHJvd3MgcnVudGltZSBlcnJvcnMgd2hlbiBlbmNvZGluZyBub24tZGV0ZXJtaW5pc3RpYyB2YWx1ZXMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGVyLCBzdGVwX2xhYmVsKToKICAgIHNlbGYuX3VuZGVybHlpbmdfY29kZXIgPSBjb2RlcgogICAgc2VsZi5fc3RlcF9sYWJlbCA9IHN0ZXBfbGFiZWwKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkRldGVybWluaXN0aWNGYXN0UHJpbWl0aXZlc0NvZGVySW1wbCgKICAgICAgICBzZWxmLl91bmRlcmx5aW5nX2NvZGVyLmdldF9pbXBsKCksIHNlbGYuX3N0ZXBfbGFiZWwpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgIyAoKSAtPiBib29sCiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICAjICgpIC0+IGJvb2wKICAgIHJldHVybiBUcnVlCgogIGRlZiBrZXlfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIEFueQoKCmNsYXNzIEZhc3RQcmltaXRpdmVzQ29kZXIoRmFzdENvZGVyKToKICAiIiJFbmNvZGVzIHNpbXBsZSBwcmltaXRpdmVzIChlLmcuIHN0ciwgaW50KSBlZmZpY2llbnRseS4KCiAgRm9yIHVua25vd24gdHlwZXMsIGZhbGxzIGJhY2sgdG8gYW5vdGhlciBjb2RlciAoZS5nLiBQaWNrbGVDb2RlcikuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZhbGxiYWNrX2NvZGVyPVBpY2tsZUNvZGVyKCkpOgogICAgIyB0eXBlOiAoQ29kZXIpIC0+IE5vbmUKICAgIHNlbGYuX2ZhbGxiYWNrX2NvZGVyID0gZmFsbGJhY2tfY29kZXIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLkZhc3RQcmltaXRpdmVzQ29kZXJJbXBsKHNlbGYuX2ZhbGxiYWNrX2NvZGVyLmdldF9pbXBsKCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgIyAoKSAtPiBib29sCiAgICByZXR1cm4gc2VsZi5fZmFsbGJhY2tfY29kZXIuaXNfZGV0ZXJtaW5pc3RpYygpCgogIGRlZiBhc19kZXRlcm1pbmlzdGljX2NvZGVyKHNlbGYsIHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2U9Tm9uZSk6CiAgICBpZiBzZWxmLmlzX2RldGVybWluaXN0aWMoKToKICAgICAgcmV0dXJuIHNlbGYKICAgIGVsc2U6CiAgICAgIHJldHVybiBEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2RlcihzZWxmLCBzdGVwX2xhYmVsKQoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIEFueQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUsIGlzX3BhaXJfbGlrZT1UcnVlKToKICAgIHZhbHVlID0gc3VwZXIoRmFzdENvZGVyLCBzZWxmKS5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQpCiAgICAjIFdlIGN1cnJlbnRseSB1c2UgdGhpcyBjb2RlciBpbiBwbGFjZXMgd2hlcmUgd2UgY2Fubm90IGluZmVyIHRoZSBjb2RlciB0bwogICAgIyB1c2UgZm9yIHRoZSB2YWx1ZSB0eXBlIGluIGEgbW9yZSBncmFudWxhciB3YXkuICBJbiBwbGFjZXMgd2hlcmUgdGhlCiAgICAjIHNlcnZpY2UgZXhwZWN0cyBhIHBhaXIsIGl0IGNoZWNrcyBmb3IgdGhlICJpc19wYWlyX2xpa2UiIGtleSwgaW4gd2hpY2gKICAgICMgY2FzZSB3ZSB3b3VsZCBmYWlsIHdpdGhvdXQgdGhlIGhhY2sgYmVsb3cuCiAgICBpZiBpc19wYWlyX2xpa2U6CiAgICAgIHZhbHVlWydpc19wYWlyX2xpa2UnXSA9IFRydWUKICAgICAgdmFsdWVbJ2NvbXBvbmVudF9lbmNvZGluZ3MnXSA9IFsKICAgICAgICAgIHNlbGYuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0LCBpc19wYWlyX2xpa2U9RmFsc2UpLAogICAgICAgICAgc2VsZi5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQsIGlzX3BhaXJfbGlrZT1GYWxzZSkKICAgICAgXQoKICAgIHJldHVybiB2YWx1ZQoKICAjIFdlIGFsbG93IC5rZXlfY29kZXIoKSBhbmQgLnZhbHVlX2NvZGVyKCkgdG8gYmUgY2FsbGVkIG9uIEZhc3RQcmltaXRpdmVzQ29kZXIKICAjIHNpbmNlIHdlIGNhbid0IGFsd2F5cyBpbmZlciB0aGUgcmV0dXJuIHZhbHVlcyBvZiBsYW1iZGFzIGluIFBhckRvCiAgIyBvcGVyYXRpb25zLCB0aGUgcmVzdWx0IG9mIHdoaWNoIG1heSBiZSB1c2VkIGluIGEgR3JvdXBCeWtleS4KICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICAjICgpIC0+IGJvb2wKICAgIHJldHVybiBUcnVlCgogIGRlZiBrZXlfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKY2xhc3MgQmFzZTY0UGlja2xlQ29kZXIoQ29kZXIpOgogICIiIkNvZGVyIG9mIG9iamVjdHMgYnkgUHl0aG9uIHBpY2tsZSwgdGhlbiBiYXNlNjQgZW5jb2RpbmcuIiIiCgogICMgVE9ETyhyb2JlcnR3Yik6IERvIGJhc2U2NCBlbmNvZGluZyB3aGVyZSBpdCdzIG5lZWRlZCAoZS5nLiBpbiBqc29uKSByYXRoZXIKICAjIHRoYW4gdmlhIGEgc3BlY2lhbCBDb2Rlci4KCiAgZGVmIGVuY29kZShzZWxmLCB2YWx1ZSk6CiAgICByZXR1cm4gYmFzZTY0LmI2NGVuY29kZShwaWNrbGUuZHVtcHModmFsdWUsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKSkKCiAgZGVmIGRlY29kZShzZWxmLCBlbmNvZGVkKToKICAgIHJldHVybiBwaWNrbGUubG9hZHMoYmFzZTY0LmI2NGRlY29kZShlbmNvZGVkKSkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjICgpIC0+IGJvb2wKICAgICMgTm90ZSB0aGF0IHRoZSBCYXNlNjRQaWNrbGVDb2RlciBpcyBub3QgZGV0ZXJtaW5pc3RpYy4gIFNlZSB0aGUKICAgICMgY29ycmVzcG9uZGluZyBjb21tZW50cyBmb3IgUGlja2xlQ29kZXIgYWJvdmUuCiAgICByZXR1cm4gRmFsc2UKCiAgIyBXZSBhbGxvdyAua2V5X2NvZGVyKCkgYW5kIC52YWx1ZV9jb2RlcigpIHRvIGJlIGNhbGxlZCBvbiBCYXNlNjRQaWNrbGVDb2RlcgogICMgc2luY2Ugd2UgY2FuJ3QgYWx3YXlzIGluZmVyIHRoZSByZXR1cm4gdmFsdWVzIG9mIGxhbWJkYXMgaW4gUGFyRG8KICAjIG9wZXJhdGlvbnMsIHRoZSByZXN1bHQgb2Ygd2hpY2ggbWF5IGJlIHVzZWQgaW4gYSBHcm91cEJ5a2V5LgogICMKICAjIFRPRE8oY2N5KTogdGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGZvciBLViB2YWx1ZXMgZnJvbSBDcmVhdGUgdHJhbnNmb3Jtcy4KICAjIEludmVzdGlnYXRlIGEgd2F5IHRvIHVuaWZ5IHRoaXMgd2l0aCBQaWNrbGVDb2Rlci4KICBkZWYgaXNfa3ZfY29kZXIoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYga2V5X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYKCgpjbGFzcyBQcm90b0NvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQSBDb2RlciBmb3IgR29vZ2xlIFByb3RvY29sIEJ1ZmZlcnMuCgogIEl0IHN1cHBvcnRzIGJvdGggUHJvdG9jb2wgQnVmZmVycyBzeW50YXggdmVyc2lvbnMgMiBhbmQgMy4gSG93ZXZlciwKICB0aGUgcnVudGltZSB2ZXJzaW9uIG9mIHRoZSBweXRob24gcHJvdG9idWYgbGlicmFyeSBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlCiAgdmVyc2lvbiBvZiB0aGUgcHJvdG9jIGNvbXBpbGVyIHdoYXQgd2FzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHByb3RvYnVmCiAgbWVzc2FnZXMuCgogIFByb3RvQ29kZXIgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIENvZGVyUmVnaXN0cnkgYXMgdGhlIGRlZmF1bHQgY29kZXIgZm9yCiAgYW55IHByb3RvYnVmIE1lc3NhZ2Ugb2JqZWN0LgoKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcHJvdG9fbWVzc2FnZV90eXBlKToKICAgICMgdHlwZTogKGdvb2dsZS5wcm90b2J1Zi5tZXNzYWdlLk1lc3NhZ2UpIC0+IE5vbmUKICAgIHNlbGYucHJvdG9fbWVzc2FnZV90eXBlID0gcHJvdG9fbWVzc2FnZV90eXBlCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5Qcm90b0NvZGVySW1wbChzZWxmLnByb3RvX21lc3NhZ2VfdHlwZSkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjICgpIC0+IGJvb2wKICAgICMgVE9ETyh2aWthc3JrKTogQSBwcm90byBtZXNzYWdlIGNhbiBiZSBkZXRlcm1pbmlzdGljIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4KICAgICMgYSBNYXAuCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGFzX2RldGVybWluaXN0aWNfY29kZXIoc2VsZiwgc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZT1Ob25lKToKICAgIHJldHVybiBEZXRlcm1pbmlzdGljUHJvdG9Db2RlcihzZWxmLnByb3RvX21lc3NhZ2VfdHlwZSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKAogICAgICAgIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kCiAgICAgICAgc2VsZi5wcm90b19tZXNzYWdlX3R5cGUgPT0gb3RoZXIucHJvdG9fbWVzc2FnZV90eXBlKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnByb3RvX21lc3NhZ2VfdHlwZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3R5cGVfaGludCh0eXBlaGludCwgdW51c2VkX3JlZ2lzdHJ5KToKICAgIGlmIGlzc3ViY2xhc3ModHlwZWhpbnQsIGdvb2dsZS5wcm90b2J1Zi5tZXNzYWdlLk1lc3NhZ2UpOgogICAgICByZXR1cm4gUHJvdG9Db2Rlcih0eXBlaGludCkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKAogICAgICAgICAgJ0V4cGVjdGVkIGEgc3ViY2xhc3Mgb2YgZ29vZ2xlLnByb3RvYnVmLm1lc3NhZ2UuTWVzc2FnZScKICAgICAgICAgICcsIGJ1dCBnb3QgYSAlcycgJSB0eXBlaGludCkpCgoKY2xhc3MgRGV0ZXJtaW5pc3RpY1Byb3RvQ29kZXIoUHJvdG9Db2Rlcik6CiAgIiIiQSBkZXRlcm1pbmlzdGljIENvZGVyIGZvciBHb29nbGUgUHJvdG9jb2wgQnVmZmVycy4KCiAgSXQgc3VwcG9ydHMgYm90aCBQcm90b2NvbCBCdWZmZXJzIHN5bnRheCB2ZXJzaW9ucyAyIGFuZCAzLiBIb3dldmVyLAogIHRoZSBydW50aW1lIHZlcnNpb24gb2YgdGhlIHB5dGhvbiBwcm90b2J1ZiBsaWJyYXJ5IG11c3QgZXhhY3RseSBtYXRjaCB0aGUKICB2ZXJzaW9uIG9mIHRoZSBwcm90b2MgY29tcGlsZXIgd2hhdCB3YXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcHJvdG9idWYKICBtZXNzYWdlcy4KICAiIiIKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuRGV0ZXJtaW5pc3RpY1Byb3RvQ29kZXJJbXBsKHNlbGYucHJvdG9fbWVzc2FnZV90eXBlKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgKCkgLT4gYm9vbAogICAgcmV0dXJuIFRydWUKCiAgZGVmIGFzX2RldGVybWluaXN0aWNfY29kZXIoc2VsZiwgc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZT1Ob25lKToKICAgIHJldHVybiBzZWxmCgoKQVZST19HRU5FUklDX0NPREVSX1VSTiA9ICJiZWFtOmNvZGVyOmF2cm86Z2VuZXJpYzp2MSIKCgpjbGFzcyBBdnJvR2VuZXJpY0NvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQSBjb2RlciB1c2VkIGZvciBBdnJvUmVjb3JkIHZhbHVlcy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgc2NoZW1hKToKICAgIHNlbGYuc2NoZW1hID0gc2NoZW1hCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5BdnJvQ29kZXJJbXBsKHNlbGYuc2NoZW1hKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgVE9ETyhCRUFNLTc5MDMpOiBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBkZXRlcm1pbmlzdGljCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5zY2hlbWEgPT0gb3RoZXIuc2NoZW1hCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuc2NoZW1hKQoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIEF2cm9SZWNvcmQKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIEFWUk9fR0VORVJJQ19DT0RFUl9VUk4sIHNlbGYuc2NoZW1hLmVuY29kZSgndXRmLTgnKSwgKCkKCiAgQHN0YXRpY21ldGhvZAogIEBDb2Rlci5yZWdpc3Rlcl91cm4oQVZST19HRU5FUklDX0NPREVSX1VSTiwgYnl0ZXMpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIocGF5bG9hZCwgdW51c2VkX2NvbXBvbmVudHMsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBBdnJvR2VuZXJpY0NvZGVyKHBheWxvYWQuZGVjb2RlKCd1dGYtOCcpKQoKCmNsYXNzIFR1cGxlQ29kZXIoRmFzdENvZGVyKToKICAiIiJDb2RlciBvZiB0dXBsZSBvYmplY3RzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21wb25lbnRzKToKICAgICMgdHlwZTogKEl0ZXJhYmxlW0NvZGVyXSkgLT4gTm9uZQogICAgc2VsZi5fY29kZXJzID0gdHVwbGUoY29tcG9uZW50cykKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLlR1cGxlQ29kZXJJbXBsKFtjLmdldF9pbXBsKCkgZm9yIGMgaW4gc2VsZi5fY29kZXJzXSkKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICAjICgpIC0+IGJvb2wKICAgIHJldHVybiBhbGwoYy5pc19kZXRlcm1pbmlzdGljKCkgZm9yIGMgaW4gc2VsZi5fY29kZXJzKQoKICBkZWYgYXNfZGV0ZXJtaW5pc3RpY19jb2RlcihzZWxmLCBzdGVwX2xhYmVsLCBlcnJvcl9tZXNzYWdlPU5vbmUpOgogICAgaWYgc2VsZi5pc19kZXRlcm1pbmlzdGljKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBlbHNlOgogICAgICByZXR1cm4gVHVwbGVDb2RlcihbCiAgICAgICAgICBjLmFzX2RldGVybWluaXN0aWNfY29kZXIoc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZSkKICAgICAgICAgIGZvciBjIGluIHNlbGYuX2NvZGVycwogICAgICBdKQoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIHR5cGVoaW50cy5UdXBsZVt0dXBsZShjLnRvX3R5cGVfaGludCgpIGZvciBjIGluIHNlbGYuX2NvZGVycyldCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV90eXBlX2hpbnQodHlwZWhpbnQsIHJlZ2lzdHJ5KToKICAgICMgdHlwZTogKHR5cGVoaW50cy5UdXBsZUNvbnN0cmFpbnQsIENvZGVyUmVnaXN0cnkpIC0+IFR1cGxlQ29kZXIKICAgIHJldHVybiBUdXBsZUNvZGVyKFtyZWdpc3RyeS5nZXRfY29kZXIodCkgZm9yIHQgaW4gdHlwZWhpbnQudHVwbGVfdHlwZXNdKQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUpOgogICAgaWYgc2VsZi5pc19rdl9jb2RlcigpOgogICAgICByZXR1cm4gewogICAgICAgICAgJ0B0eXBlJzogJ2tpbmQ6cGFpcicsCiAgICAgICAgICAnaXNfcGFpcl9saWtlJzogVHJ1ZSwKICAgICAgICAgICdjb21wb25lbnRfZW5jb2RpbmdzJzogWwogICAgICAgICAgICAgIGNvbXBvbmVudC5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQpCiAgICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBzZWxmLl9nZXRfY29tcG9uZW50X2NvZGVycygpCiAgICAgICAgICBdLAogICAgICB9CgogICAgcmV0dXJuIHN1cGVyKFR1cGxlQ29kZXIsIHNlbGYpLmFzX2Nsb3VkX29iamVjdChjb2RlcnNfY29udGV4dCkKCiAgZGVmIF9nZXRfY29tcG9uZW50X2NvZGVycyhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gVHVwbGVbQ29kZXIsIC4uLl0KICAgIHJldHVybiBzZWxmLmNvZGVycygpCgogIGRlZiBjb2RlcnMoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IFR1cGxlW0NvZGVyLCAuLi5dCiAgICByZXR1cm4gc2VsZi5fY29kZXJzCgogIGRlZiBpc19rdl9jb2RlcihzZWxmKToKICAgICMgKCkgLT4gYm9vbAogICAgcmV0dXJuIGxlbihzZWxmLl9jb2RlcnMpID09IDIKCiAgZGVmIGtleV9jb2RlcihzZWxmKToKICAgICMgdHlwZTogKCkgLT4gQ29kZXIKICAgIGlmIGxlbihzZWxmLl9jb2RlcnMpICE9IDI6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1R1cGxlQ29kZXIgZG9lcyBub3QgaGF2ZSBleGFjdGx5IDIgY29tcG9uZW50cy4nKQogICAgcmV0dXJuIHNlbGYuX2NvZGVyc1swXQoKICBkZWYgdmFsdWVfY29kZXIoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IENvZGVyCiAgICBpZiBsZW4oc2VsZi5fY29kZXJzKSAhPSAyOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdUdXBsZUNvZGVyIGRvZXMgbm90IGhhdmUgZXhhY3RseSAyIGNvbXBvbmVudHMuJykKICAgIHJldHVybiBzZWxmLl9jb2RlcnNbMV0KCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdUdXBsZUNvZGVyWyVzXScgJSAnLCAnLmpvaW4oc3RyKGMpIGZvciBjIGluIHNlbGYuX2NvZGVycykKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5fY29kZXJzID09IG90aGVyLmNvZGVycygpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuX2NvZGVycykKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgaWYgc2VsZi5pc19rdl9jb2RlcigpOgogICAgICByZXR1cm4gY29tbW9uX3VybnMuY29kZXJzLktWLnVybiwgTm9uZSwgc2VsZi5jb2RlcnMoKQogICAgZWxzZToKICAgICAgcmV0dXJuIHN1cGVyKFR1cGxlQ29kZXIsIHNlbGYpLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGNvbnRleHQpCgogIEBzdGF0aWNtZXRob2QKICBAQ29kZXIucmVnaXN0ZXJfdXJuKGNvbW1vbl91cm5zLmNvZGVycy5LVi51cm4sIE5vbmUpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIodW51c2VkX3BheWxvYWQsIGNvbXBvbmVudHMsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBUdXBsZUNvZGVyKGNvbXBvbmVudHMpCgoKY2xhc3MgVHVwbGVTZXF1ZW5jZUNvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQ29kZXIgb2YgaG9tb2dlbmVvdXMgdHVwbGUgb2JqZWN0cy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgZWxlbV9jb2Rlcik6CiAgICAjIHR5cGU6IChDb2RlcikgLT4gTm9uZQogICAgc2VsZi5fZWxlbV9jb2RlciA9IGVsZW1fY29kZXIKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2VsZW1fY29kZXIKCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBjb2Rlcl9pbXBsLlR1cGxlU2VxdWVuY2VDb2RlckltcGwoc2VsZi5fZWxlbV9jb2Rlci5nZXRfaW1wbCgpKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgKCkgLT4gYm9vbAogICAgcmV0dXJuIHNlbGYuX2VsZW1fY29kZXIuaXNfZGV0ZXJtaW5pc3RpYygpCgogIGRlZiBhc19kZXRlcm1pbmlzdGljX2NvZGVyKHNlbGYsIHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2U9Tm9uZSk6CiAgICBpZiBzZWxmLmlzX2RldGVybWluaXN0aWMoKToKICAgICAgcmV0dXJuIHNlbGYKICAgIGVsc2U6CiAgICAgIHJldHVybiBUdXBsZVNlcXVlbmNlQ29kZXIoCiAgICAgICAgICBzZWxmLl9lbGVtX2NvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXIoc3RlcF9sYWJlbCwgZXJyb3JfbWVzc2FnZSkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV90eXBlX2hpbnQodHlwZWhpbnQsIHJlZ2lzdHJ5KToKICAgICMgdHlwZTogKEFueSwgQ29kZXJSZWdpc3RyeSkgLT4gVHVwbGVTZXF1ZW5jZUNvZGVyCiAgICByZXR1cm4gVHVwbGVTZXF1ZW5jZUNvZGVyKHJlZ2lzdHJ5LmdldF9jb2Rlcih0eXBlaGludC5pbm5lcl90eXBlKSkKCiAgZGVmIF9nZXRfY29tcG9uZW50X2NvZGVycyhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gVHVwbGVbQ29kZXIsIC4uLl0KICAgIHJldHVybiAoc2VsZi5fZWxlbV9jb2RlciwgKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1R1cGxlU2VxdWVuY2VDb2Rlclslcl0nICUgc2VsZi5fZWxlbV9jb2RlcgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoCiAgICAgICAgdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5fZWxlbV9jb2RlciA9PSBvdGhlci52YWx1ZV9jb2RlcigpKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fZWxlbV9jb2RlcikpCgoKY2xhc3MgSXRlcmFibGVDb2RlcihGYXN0Q29kZXIpOgogICIiIkNvZGVyIG9mIGl0ZXJhYmxlcyBvZiBob21vZ2VuZW91cyBvYmplY3RzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtX2NvZGVyKToKICAgICMgdHlwZTogKENvZGVyKSAtPiBOb25lCiAgICBzZWxmLl9lbGVtX2NvZGVyID0gZWxlbV9jb2RlcgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuSXRlcmFibGVDb2RlckltcGwoc2VsZi5fZWxlbV9jb2Rlci5nZXRfaW1wbCgpKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgKCkgLT4gYm9vbAogICAgcmV0dXJuIHNlbGYuX2VsZW1fY29kZXIuaXNfZGV0ZXJtaW5pc3RpYygpCgogIGRlZiBhc19kZXRlcm1pbmlzdGljX2NvZGVyKHNlbGYsIHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2U9Tm9uZSk6CiAgICBpZiBzZWxmLmlzX2RldGVybWluaXN0aWMoKToKICAgICAgcmV0dXJuIHNlbGYKICAgIGVsc2U6CiAgICAgIHJldHVybiBJdGVyYWJsZUNvZGVyKAogICAgICAgICAgc2VsZi5fZWxlbV9jb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVyKHN0ZXBfbGFiZWwsIGVycm9yX21lc3NhZ2UpKQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiAna2luZDpzdHJlYW0nLAogICAgICAgICdpc19zdHJlYW1fbGlrZSc6IFRydWUsCiAgICAgICAgJ2NvbXBvbmVudF9lbmNvZGluZ3MnOiBbCiAgICAgICAgICAgIHNlbGYuX2VsZW1fY29kZXIuYXNfY2xvdWRfb2JqZWN0KGNvZGVyc19jb250ZXh0KQogICAgICAgIF0sCiAgICB9CgogIGRlZiB2YWx1ZV9jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmLl9lbGVtX2NvZGVyCgogIGRlZiB0b190eXBlX2hpbnQoc2VsZik6CiAgICByZXR1cm4gdHlwZWhpbnRzLkl0ZXJhYmxlW3NlbGYuX2VsZW1fY29kZXIudG9fdHlwZV9oaW50KCldCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV90eXBlX2hpbnQodHlwZWhpbnQsIHJlZ2lzdHJ5KToKICAgICMgdHlwZTogKEFueSwgQ29kZXJSZWdpc3RyeSkgLT4gSXRlcmFibGVDb2RlcgogICAgcmV0dXJuIEl0ZXJhYmxlQ29kZXIocmVnaXN0cnkuZ2V0X2NvZGVyKHR5cGVoaW50LmlubmVyX3R5cGUpKQoKICBkZWYgX2dldF9jb21wb25lbnRfY29kZXJzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBUdXBsZVtDb2RlciwgLi4uXQogICAgcmV0dXJuIChzZWxmLl9lbGVtX2NvZGVyLCApCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnSXRlcmFibGVDb2Rlclslcl0nICUgc2VsZi5fZWxlbV9jb2RlcgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoCiAgICAgICAgdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5fZWxlbV9jb2RlciA9PSBvdGhlci52YWx1ZV9jb2RlcigpKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fZWxlbV9jb2RlcikpCgoKQ29kZXIucmVnaXN0ZXJfc3RydWN0dXJlZF91cm4oY29tbW9uX3VybnMuY29kZXJzLklURVJBQkxFLnVybiwgSXRlcmFibGVDb2RlcikKCgpjbGFzcyBHbG9iYWxXaW5kb3dDb2RlcihTaW5nbGV0b25Db2Rlcik6CiAgIiIiQ29kZXIgZm9yIGdsb2JhbCB3aW5kb3dzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CiAgICBzdXBlcihHbG9iYWxXaW5kb3dDb2Rlciwgc2VsZikuX19pbml0X18od2luZG93Lkdsb2JhbFdpbmRvdygpKQoKICBkZWYgYXNfY2xvdWRfb2JqZWN0KHNlbGYsIGNvZGVyc19jb250ZXh0PU5vbmUpOgogICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiAna2luZDpnbG9iYWxfd2luZG93JywKICAgIH0KCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybigKICAgIGNvbW1vbl91cm5zLmNvZGVycy5HTE9CQUxfV0lORE9XLnVybiwgR2xvYmFsV2luZG93Q29kZXIpCgoKY2xhc3MgSW50ZXJ2YWxXaW5kb3dDb2RlcihGYXN0Q29kZXIpOgogICIiIkNvZGVyIGZvciBhbiB3aW5kb3cgZGVmaW5lZCBieSBhIHN0YXJ0IHRpbWVzdGFtcCBhbmQgYSBkdXJhdGlvbi4iIiIKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuSW50ZXJ2YWxXaW5kb3dDb2RlckltcGwoKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgKCkgLT4gYm9vbAogICAgcmV0dXJuIFRydWUKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBjb2RlcnNfY29udGV4dD1Ob25lKToKICAgIHJldHVybiB7CiAgICAgICAgJ0B0eXBlJzogJ2tpbmQ6aW50ZXJ2YWxfd2luZG93JywKICAgIH0KCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKCkNvZGVyLnJlZ2lzdGVyX3N0cnVjdHVyZWRfdXJuKAogICAgY29tbW9uX3VybnMuY29kZXJzLklOVEVSVkFMX1dJTkRPVy51cm4sIEludGVydmFsV2luZG93Q29kZXIpCgoKY2xhc3MgV2luZG93ZWRWYWx1ZUNvZGVyKEZhc3RDb2Rlcik6CiAgIiIiQ29kZXIgZm9yIHdpbmRvd2VkIHZhbHVlcy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgd3JhcHBlZF92YWx1ZV9jb2Rlciwgd2luZG93X2NvZGVyPU5vbmUpOgogICAgIyB0eXBlOiAoQ29kZXIsIE9wdGlvbmFsW0NvZGVyXSkgLT4gTm9uZQogICAgaWYgbm90IHdpbmRvd19jb2RlcjoKICAgICAgd2luZG93X2NvZGVyID0gUGlja2xlQ29kZXIoKQogICAgc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyID0gd3JhcHBlZF92YWx1ZV9jb2RlcgogICAgc2VsZi50aW1lc3RhbXBfY29kZXIgPSBUaW1lc3RhbXBDb2RlcigpCiAgICBzZWxmLndpbmRvd19jb2RlciA9IHdpbmRvd19jb2RlcgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuV2luZG93ZWRWYWx1ZUNvZGVySW1wbCgKICAgICAgICBzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIuZ2V0X2ltcGwoKSwKICAgICAgICBzZWxmLnRpbWVzdGFtcF9jb2Rlci5nZXRfaW1wbCgpLAogICAgICAgIHNlbGYud2luZG93X2NvZGVyLmdldF9pbXBsKCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgIyAoKSAtPiBib29sCiAgICByZXR1cm4gYWxsKAogICAgICAgIGMuaXNfZGV0ZXJtaW5pc3RpYygpIGZvciBjIGluCiAgICAgICAgW3NlbGYud3JhcHBlZF92YWx1ZV9jb2Rlciwgc2VsZi50aW1lc3RhbXBfY29kZXIsIHNlbGYud2luZG93X2NvZGVyXSkKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBjb2RlcnNfY29udGV4dD1Ob25lKToKICAgIHJldHVybiB7CiAgICAgICAgJ0B0eXBlJzogJ2tpbmQ6d2luZG93ZWRfdmFsdWUnLAogICAgICAgICdpc193cmFwcGVyJzogVHJ1ZSwKICAgICAgICAnY29tcG9uZW50X2VuY29kaW5ncyc6IFsKICAgICAgICAgICAgY29tcG9uZW50LmFzX2Nsb3VkX29iamVjdChjb2RlcnNfY29udGV4dCkKICAgICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBzZWxmLl9nZXRfY29tcG9uZW50X2NvZGVycygpCiAgICAgICAgXSwKICAgIH0KCiAgZGVmIF9nZXRfY29tcG9uZW50X2NvZGVycyhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gTGlzdFtDb2Rlcl0KICAgIHJldHVybiBbc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLCBzZWxmLndpbmRvd19jb2Rlcl0KCiAgZGVmIGlzX2t2X2NvZGVyKHNlbGYpOgogICAgIyAoKSAtPiBib29sCiAgICByZXR1cm4gc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLmlzX2t2X2NvZGVyKCkKCiAgZGVmIGtleV9jb2RlcihzZWxmKToKICAgICMgdHlwZTogKCkgLT4gQ29kZXIKICAgIHJldHVybiBzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIua2V5X2NvZGVyKCkKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBDb2RlcgogICAgcmV0dXJuIHNlbGYud3JhcHBlZF92YWx1ZV9jb2Rlci52YWx1ZV9jb2RlcigpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnV2luZG93ZWRWYWx1ZUNvZGVyWyVzXScgJSBzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKAogICAgICAgIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kCiAgICAgICAgc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyID09IG90aGVyLndyYXBwZWRfdmFsdWVfY29kZXIgYW5kCiAgICAgICAgc2VsZi50aW1lc3RhbXBfY29kZXIgPT0gb3RoZXIudGltZXN0YW1wX2NvZGVyIGFuZAogICAgICAgIHNlbGYud2luZG93X2NvZGVyID09IG90aGVyLndpbmRvd19jb2RlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goCiAgICAgICAgKHNlbGYud3JhcHBlZF92YWx1ZV9jb2Rlciwgc2VsZi50aW1lc3RhbXBfY29kZXIsIHNlbGYud2luZG93X2NvZGVyKSkKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybigKICAgIGNvbW1vbl91cm5zLmNvZGVycy5XSU5ET1dFRF9WQUxVRS51cm4sIFdpbmRvd2VkVmFsdWVDb2RlcikKCgpjbGFzcyBQYXJhbVdpbmRvd2VkVmFsdWVDb2RlcihXaW5kb3dlZFZhbHVlQ29kZXIpOgogICIiIkEgY29kZXIgdXNlZCBmb3IgcGFyYW1ldGVyaXplZCB3aW5kb3dlZCB2YWx1ZXMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBheWxvYWQsIGNvbXBvbmVudHMpOgogICAgc3VwZXIoUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIsIHNlbGYpLl9faW5pdF9fKGNvbXBvbmVudHNbMF0sIGNvbXBvbmVudHNbMV0pCiAgICBzZWxmLnBheWxvYWQgPSBwYXlsb2FkCgogIGRlZiBfY3JlYXRlX2ltcGwoc2VsZik6CiAgICByZXR1cm4gY29kZXJfaW1wbC5QYXJhbVdpbmRvd2VkVmFsdWVDb2RlckltcGwoCiAgICAgICAgc2VsZi53cmFwcGVkX3ZhbHVlX2NvZGVyLmdldF9pbXBsKCksCiAgICAgICAgc2VsZi53aW5kb3dfY29kZXIuZ2V0X2ltcGwoKSwKICAgICAgICBzZWxmLnBheWxvYWQpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIHNlbGYud3JhcHBlZF92YWx1ZV9jb2Rlci5pc19kZXRlcm1pbmlzdGljKCkKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBjb2RlcnNfY29udGV4dD1Ob25lKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgImFzX2Nsb3VkX29iamVjdCBub3Qgc3VwcG9ydGVkIGZvciBQYXJhbVdpbmRvd2VkVmFsdWVDb2RlciIpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXJbJXNdJyAlIHNlbGYud3JhcHBlZF92YWx1ZV9jb2RlcgoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoCiAgICAgICAgdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQKICAgICAgICBzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIgPT0gb3RoZXIud3JhcHBlZF92YWx1ZV9jb2RlciBhbmQKICAgICAgICBzZWxmLndpbmRvd19jb2RlciA9PSBvdGhlci53aW5kb3dfY29kZXIgYW5kCiAgICAgICAgc2VsZi5wYXlsb2FkID09IG90aGVyLnBheWxvYWQpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLndyYXBwZWRfdmFsdWVfY29kZXIsIHNlbGYud2luZG93X2NvZGVyLCBzZWxmLnBheWxvYWQpKQoKICBAc3RhdGljbWV0aG9kCiAgQENvZGVyLnJlZ2lzdGVyX3Vybihjb21tb25fdXJucy5jb2RlcnMuUEFSQU1fV0lORE9XRURfVkFMVUUudXJuLCBieXRlcykKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjb21wb25lbnRzLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIocGF5bG9hZCwgY29tcG9uZW50cykKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuICgKICAgICAgICBjb21tb25fdXJucy5jb2RlcnMuUEFSQU1fV0lORE9XRURfVkFMVUUudXJuLAogICAgICAgIHNlbGYucGF5bG9hZCwgKHNlbGYud3JhcHBlZF92YWx1ZV9jb2Rlciwgc2VsZi53aW5kb3dfY29kZXIpKQoKCmNsYXNzIExlbmd0aFByZWZpeENvZGVyKEZhc3RDb2Rlcik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDb2RlciB3aGljaCBwcmVmaXhlcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGVkIG9iamVjdCBpbiB0aGUgc3RyZWFtLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZV9jb2Rlcik6CiAgICAjIHR5cGU6IChDb2RlcikgLT4gTm9uZQogICAgc2VsZi5fdmFsdWVfY29kZXIgPSB2YWx1ZV9jb2RlcgoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuTGVuZ3RoUHJlZml4Q29kZXJJbXBsKHNlbGYuX3ZhbHVlX2NvZGVyLmdldF9pbXBsKCkpCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgIyAoKSAtPiBib29sCiAgICByZXR1cm4gc2VsZi5fdmFsdWVfY29kZXIuaXNfZGV0ZXJtaW5pc3RpYygpCgogIGRlZiBlc3RpbWF0ZV9zaXplKHNlbGYsIHZhbHVlKToKICAgIHZhbHVlX3NpemUgPSBzZWxmLl92YWx1ZV9jb2Rlci5lc3RpbWF0ZV9zaXplKHZhbHVlKQogICAgcmV0dXJuIGdldF92YXJpbnRfc2l6ZSh2YWx1ZV9zaXplKSArIHZhbHVlX3NpemUKCiAgZGVmIHZhbHVlX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3ZhbHVlX2NvZGVyCgogIGRlZiBhc19jbG91ZF9vYmplY3Qoc2VsZiwgY29kZXJzX2NvbnRleHQ9Tm9uZSk6CiAgICByZXR1cm4gewogICAgICAgICdAdHlwZSc6ICdraW5kOmxlbmd0aF9wcmVmaXgnLAogICAgICAgICdjb21wb25lbnRfZW5jb2RpbmdzJzogWwogICAgICAgICAgICBzZWxmLl92YWx1ZV9jb2Rlci5hc19jbG91ZF9vYmplY3QoY29kZXJzX2NvbnRleHQpCiAgICAgICAgXSwKICAgIH0KCiAgZGVmIF9nZXRfY29tcG9uZW50X2NvZGVycyhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gVHVwbGVbQ29kZXIsIC4uLl0KICAgIHJldHVybiAoc2VsZi5fdmFsdWVfY29kZXIsICkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdMZW5ndGhQcmVmaXhDb2Rlclslcl0nICUgc2VsZi5fdmFsdWVfY29kZXIKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKAogICAgICAgIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kIHNlbGYuX3ZhbHVlX2NvZGVyID09IG90aGVyLl92YWx1ZV9jb2RlcikKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYuX3ZhbHVlX2NvZGVyKSkKCgpDb2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybigKICAgIGNvbW1vbl91cm5zLmNvZGVycy5MRU5HVEhfUFJFRklYLnVybiwgTGVuZ3RoUHJlZml4Q29kZXIpCgoKY2xhc3MgU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyKEZhc3RDb2Rlcik6CiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBlbGVtZW50X2NvZGVyLCAgIyB0eXBlOiBDb2RlcgogICAgICByZWFkX3N0YXRlPU5vbmUsICAjIHR5cGU6IE9wdGlvbmFsW2NvZGVyX2ltcGwuSXRlcmFibGVTdGF0ZVJlYWRlcl0KICAgICAgd3JpdGVfc3RhdGU9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbY29kZXJfaW1wbC5JdGVyYWJsZVN0YXRlV3JpdGVyXQogICAgICB3cml0ZV9zdGF0ZV90aHJlc2hvbGQ9MSk6CiAgICBzZWxmLl9lbGVtZW50X2NvZGVyID0gZWxlbWVudF9jb2RlcgogICAgc2VsZi5fcmVhZF9zdGF0ZSA9IHJlYWRfc3RhdGUKICAgIHNlbGYuX3dyaXRlX3N0YXRlID0gd3JpdGVfc3RhdGUKICAgIHNlbGYuX3dyaXRlX3N0YXRlX3RocmVzaG9sZCA9IHdyaXRlX3N0YXRlX3RocmVzaG9sZAoKICBkZWYgX2NyZWF0ZV9pbXBsKHNlbGYpOgogICAgcmV0dXJuIGNvZGVyX2ltcGwuSXRlcmFibGVDb2RlckltcGwoCiAgICAgICAgc2VsZi5fZWxlbWVudF9jb2Rlci5nZXRfaW1wbCgpLAogICAgICAgIHNlbGYuX3JlYWRfc3RhdGUsCiAgICAgICAgc2VsZi5fd3JpdGVfc3RhdGUsCiAgICAgICAgc2VsZi5fd3JpdGVfc3RhdGVfdGhyZXNob2xkKQoKICBkZWYgaXNfZGV0ZXJtaW5pc3RpYyhzZWxmKToKICAgICMgKCkgLT4gYm9vbAogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfZ2V0X2NvbXBvbmVudF9jb2RlcnMoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IFR1cGxlW0NvZGVyLCAuLi5dCiAgICByZXR1cm4gKHNlbGYuX2VsZW1lbnRfY29kZXIsICkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdTdGF0ZUJhY2tlZEl0ZXJhYmxlQ29kZXJbJXJdJyAlIHNlbGYuX2VsZW1lbnRfY29kZXIKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKAogICAgICAgIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kCiAgICAgICAgc2VsZi5fZWxlbWVudF9jb2RlciA9PSBvdGhlci5fZWxlbWVudF9jb2RlciBhbmQKICAgICAgICBzZWxmLl93cml0ZV9zdGF0ZV90aHJlc2hvbGQgPT0gb3RoZXIuX3dyaXRlX3N0YXRlX3RocmVzaG9sZCkKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYuX2VsZW1lbnRfY29kZXIsIHNlbGYuX3dyaXRlX3N0YXRlX3RocmVzaG9sZCkpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKE9wdGlvbmFsW1BpcGVsaW5lQ29udGV4dF0pIC0+IFR1cGxlW3N0ciwgQW55LCBTZXF1ZW5jZVtDb2Rlcl1dCiAgICByZXR1cm4gKAogICAgICAgIGNvbW1vbl91cm5zLmNvZGVycy5TVEFURV9CQUNLRURfSVRFUkFCTEUudXJuLAogICAgICAgIHN0cihzZWxmLl93cml0ZV9zdGF0ZV90aHJlc2hvbGQpLmVuY29kZSgnYXNjaWknKSwKICAgICAgICBzZWxmLl9nZXRfY29tcG9uZW50X2NvZGVycygpKQoKICBAc3RhdGljbWV0aG9kCiAgQENvZGVyLnJlZ2lzdGVyX3Vybihjb21tb25fdXJucy5jb2RlcnMuU1RBVEVfQkFDS0VEX0lURVJBQkxFLnVybiwgYnl0ZXMpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIocGF5bG9hZCwgY29tcG9uZW50cywgY29udGV4dCk6CiAgICByZXR1cm4gU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyKAogICAgICAgIGNvbXBvbmVudHNbMF0sCiAgICAgICAgcmVhZF9zdGF0ZT1jb250ZXh0Lml0ZXJhYmxlX3N0YXRlX3JlYWQsCiAgICAgICAgd3JpdGVfc3RhdGU9Y29udGV4dC5pdGVyYWJsZV9zdGF0ZV93cml0ZSwKICAgICAgICB3cml0ZV9zdGF0ZV90aHJlc2hvbGQ9aW50KHBheWxvYWQpKQoKCmNsYXNzIFJ1bm5lckFQSUNvZGVySG9sZGVyKENvZGVyKToKICAiIiJBIGBDb2RlcmAgdGhhdCBob2xkcyBhIHJ1bm5lciBBUEkgYENvZGVyYCBwcm90by4KCiAgVGhpcyBpcyB1c2VkIGZvciBjb2RlcnMgZm9yIHdoaWNoIGNvcnJlc3BvbmRpbmcgb2JqZWN0cyBjYW5ub3QgYmUKICBpbml0aWFsaXplZCBpbiBQeXRob24gU0RLLiBGb3IgZXhhbXBsZSwgY29kZXJzIGZvciByZW1vdGUgU0RLcyB0aGF0IG1heQogIGJlIGF2YWlsYWJsZSBpbiBQeXRob24gU0RLIHRyYW5zZm9ybSBncmFwaCB3aGVuIGV4cGFuZGluZyBhIGNyb3NzLWxhbmd1YWdlCiAgdHJhbnNmb3JtLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90byk6CiAgICBzZWxmLl9wcm90byA9IHByb3RvCgogIGRlZiBwcm90byhzZWxmKToKICAgIHJldHVybiBzZWxmLl9wcm90bwoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiBzZWxmLl9wcm90bwoKICBkZWYgdG9fdHlwZV9oaW50KHNlbGYpOgogICAgcmV0dXJuIEFueQqUfZQojA9zZXJpYWxpemVfY29kZXKUalYxAQBLaEtrh5SMEWRlc2VyaWFsaXplX2NvZGVylGpWMQEAS25LcIeUjAxDb2Rlci5lbmNvZGWUalYxAQBLeEt8h5SMDENvZGVyLmRlY29kZZRqVjEBAEt+S4CHlIwTQ29kZXIuZW5jb2RlX25lc3RlZJRqVjEBAEuCS4SHlIwTQ29kZXIuZGVjb2RlX25lc3RlZJRqVjEBAEuGS4iHlIwWQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqVjEBAEuKS5uHlIwcQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqVjEBAEudS6WHlIwTQ29kZXIuZXN0aW1hdGVfc2l6ZZRqVjEBAEunS7mHlIwSQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEAS8BLxoeUjA5Db2Rlci5nZXRfaW1wbJRqVjEBAEvIS9CHlIwSQ29kZXIuX19nZXRzdGF0ZV9flGpWMQEAS9JL04eUjBhDb2Rlci5fZGljdF93aXRob3V0X2ltcGyUalYxAQBL1Uvah5SMEkNvZGVyLnRvX3R5cGVfaGludJRqVjEBAEvcS92HlIwUQ29kZXIuZnJvbV90eXBlX2hpbnSUalYxAQBL30vjh5SMEUNvZGVyLmlzX2t2X2NvZGVylGpWMQEAS+VL54eUjA9Db2Rlci5rZXlfY29kZXKUalYxAQBL6Uvuh5SMEUNvZGVyLnZhbHVlX2NvZGVylGpWMQEAS/BL9YeUjBtDb2Rlci5fZ2V0X2NvbXBvbmVudF9jb2RlcnOUalYxAQBL90v/h5SMFUNvZGVyLmFzX2Nsb3VkX29iamVjdJRqVjEBAE0BAU0WAYeUjA5Db2Rlci5fX3JlcHJfX5RqVjEBAE0YAU0ZAYeUjAxDb2Rlci5fX2VxX1+UalYxAQBNHAFNHwGHlIwMQ29kZXIuX19uZV9flGpWMQEATSMBTSUBh5SMDkNvZGVyLl9faGFzaF9flGpWMQEATScBTSgBh5SMEkNvZGVyLnJlZ2lzdGVyX3VybpRqVjEBAE1AAU1WAYeUjBNDb2Rlci50b19ydW5uZXJfYXBplGpWMQEATVgBTWABh5SMFUNvZGVyLmZyb21fcnVubmVyX2FwaZRqVjEBAE1iAU12AYeUjB1Db2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE14AU19AYeUjB1Db2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybpRqVjEBAE1/AU2PAYeUjAVDb2RlcpRqXTEBAEt2TY8Bh5SMIV9waWNrbGVfZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE2SAU2VAYeUjBNTdHJVdGY4Q29kZXIuZW5jb2RllGpWMQEATZoBTZsBh5SME1N0clV0ZjhDb2Rlci5kZWNvZGWUalYxAQBNnQFNngGHlIwdU3RyVXRmOENvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBNoAFNoQGHlIwZU3RyVXRmOENvZGVyLnRvX3R5cGVfaGludJRqVjEBAE2jAU2kAYeUjAxTdHJVdGY4Q29kZXKUal0xAQBNmAFNpAGHlIwTVG9CeXRlc0NvZGVyLmVuY29kZZRqVjEBAE23AU24AYeUjBNUb0J5dGVzQ29kZXIuZGVjb2RllGpWMQEATboBTbsBh5SMHVRvQnl0ZXNDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATb0BTb4Bh5SMDFRvQnl0ZXNDb2RlcpRqXTEBAE2qAU2+AYeUjBBGYXN0Q29kZXIuZW5jb2RllGpWMQEATcwBTc4Bh5SMEEZhc3RDb2Rlci5kZWNvZGWUalYxAQBN0AFN0gGHlIwXRmFzdENvZGVyLmVzdGltYXRlX3NpemWUalYxAQBN1AFN1QGHlIwWRmFzdENvZGVyLl9jcmVhdGVfaW1wbJRqVjEBAE3XAU3YAYeUjAlGYXN0Q29kZXKUal0xAQBNxQFN2AGHlIwXQnl0ZXNDb2Rlci5fY3JlYXRlX2ltcGyUalYxAQBN3QFN3gGHlIwbQnl0ZXNDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATeABTeIBh5SMF0J5dGVzQ29kZXIudG9fdHlwZV9oaW50lGpWMQEATeQBTeUBh5SMGkJ5dGVzQ29kZXIuYXNfY2xvdWRfb2JqZWN0lGpWMQEATecBTeoBh5SMEUJ5dGVzQ29kZXIuX19lcV9flGpWMQEATewBTe0Bh5SME0J5dGVzQ29kZXIuX19oYXNoX1+UalYxAQBN7wFN8AGHlIwKQnl0ZXNDb2RlcpRqXTEBAE3bAU3wAYeUjBlCb29sZWFuQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATfcBTfgBh5SMHUJvb2xlYW5Db2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATfoBTfsBh5SMGUJvb2xlYW5Db2Rlci50b190eXBlX2hpbnSUalYxAQBN/QFN/gGHlIwTQm9vbGVhbkNvZGVyLl9fZXFfX5RqVjEBAE0AAk0BAoeUjBVCb29sZWFuQ29kZXIuX19oYXNoX1+UalYxAQBNAwJNBAKHlIwMQm9vbGVhbkNvZGVylGpdMQEATfYBTQQCh5SMGFZhckludENvZGVyLl9jcmVhdGVfaW1wbJRqVjEBAE0MAk0NAoeUjBxWYXJJbnRDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATQ8CTRECh5SMGFZhckludENvZGVyLnRvX3R5cGVfaGludJRqVjEBAE0TAk0UAoeUjBtWYXJJbnRDb2Rlci5hc19jbG91ZF9vYmplY3SUalYxAQBNFgJNGQKHlIwSVmFySW50Q29kZXIuX19lcV9flGpWMQEATRsCTRwCh5SMFFZhckludENvZGVyLl9faGFzaF9flGpWMQEATR4CTR8Ch5SMC1ZhckludENvZGVylGpdMQEATQoCTR8Ch5SMF0Zsb2F0Q29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATScCTSgCh5SMG0Zsb2F0Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqVjEBAE0qAk0sAoeUjBdGbG9hdENvZGVyLnRvX3R5cGVfaGludJRqVjEBAE0uAk0vAoeUjBFGbG9hdENvZGVyLl9fZXFfX5RqVjEBAE0xAk0yAoeUjBNGbG9hdENvZGVyLl9faGFzaF9flGpWMQEATTQCTTUCh5SMCkZsb2F0Q29kZXKUal0xAQBNJQJNNQKHlIwbVGltZXN0YW1wQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATT0CTT4Ch5SMH1RpbWVzdGFtcENvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBNQAJNQgKHlIwVVGltZXN0YW1wQ29kZXIuX19lcV9flGpWMQEATUQCTUUCh5SMF1RpbWVzdGFtcENvZGVyLl9faGFzaF9flGpWMQEATUcCTUgCh5SMDlRpbWVzdGFtcENvZGVylGpdMQEATTsCTUgCh5SMFF9UaW1lckNvZGVyLl9faW5pdF9flGpWMQEATU8CTVECh5SMIV9UaW1lckNvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc5RqVjEBAE1TAk1VAoeUjBhfVGltZXJDb2Rlci5fY3JlYXRlX2ltcGyUalYxAQBNVwJNWAKHlIwcX1RpbWVyQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqVjEBAE1aAk1cAoeUjBJfVGltZXJDb2Rlci5fX2VxX1+UalYxAQBNXgJNYQKHlIwUX1RpbWVyQ29kZXIuX19oYXNoX1+UalYxAQBNYwJNZAKHlIwLX1RpbWVyQ29kZXKUal0xAQBNSwJNZAKHlIwXU2luZ2xldG9uQ29kZXIuX19pbml0X1+UalYxAQBNbAJNbQKHlIwbU2luZ2xldG9uQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATW8CTXACh5SMH1NpbmdsZXRvbkNvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBNcgJNdAKHlIwVU2luZ2xldG9uQ29kZXIuX19lcV9flGpWMQEATXYCTXcCh5SMF1NpbmdsZXRvbkNvZGVyLl9faGFzaF9flGpWMQEATXkCTXoCh5SMDlNpbmdsZXRvbkNvZGVylGpdMQEATWoCTXoCh5SMEG1heWJlX2RpbGxfZHVtcHOUalYxAQBNfQJNhAKHlIwQbWF5YmVfZGlsbF9sb2Fkc5RqVjEBAE2HAk2MAoeUjCFfUGlja2xlQ29kZXJCYXNlLmlzX2RldGVybWluaXN0aWOUalYxAQBNkQJNlwKHlIwgX1BpY2tsZUNvZGVyQmFzZS5hc19jbG91ZF9vYmplY3SUalYxAQBNmQJNpgKHlIwcX1BpY2tsZUNvZGVyQmFzZS5pc19rdl9jb2RlcpRqVjEBAE2rAk2tAoeUjBpfUGlja2xlQ29kZXJCYXNlLmtleV9jb2RlcpRqVjEBAE2vAk2wAoeUjBxfUGlja2xlQ29kZXJCYXNlLnZhbHVlX2NvZGVylGpWMQEATbICTbMCh5SMF19QaWNrbGVDb2RlckJhc2UuX19lcV9flGpWMQEATbUCTbYCh5SMGV9QaWNrbGVDb2RlckJhc2UuX19oYXNoX1+UalYxAQBNuAJNuQKHlIwQX1BpY2tsZUNvZGVyQmFzZZRqXTEBAE2PAk25AoeUjBhQaWNrbGVDb2Rlci5fY3JlYXRlX2ltcGyUalYxAQBNvgJNwgKHlIwiUGlja2xlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqVjEBAE3EAk3FAoeUjBhQaWNrbGVDb2Rlci50b190eXBlX2hpbnSUalYxAQBNxwJNyAKHlIwLUGlja2xlQ29kZXKUal0xAQBNvAJNyAKHlIwWRGlsbENvZGVyLl9jcmVhdGVfaW1wbJRqVjEBAE3NAk3OAoeUjAlEaWxsQ29kZXKUal0xAQBNywJNzgKHlIwpRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIuX19pbml0X1+UalYxAQBN0wJN1QKHlIwtRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATdcCTdkCh5SMMURldGVybWluaXN0aWNGYXN0UHJpbWl0aXZlc0NvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBN2wJN3QKHlIwsRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIuaXNfa3ZfY29kZXKUalYxAQBN3wJN4QKHlIwqRGV0ZXJtaW5pc3RpY0Zhc3RQcmltaXRpdmVzQ29kZXIua2V5X2NvZGVylGpWMQEATeMCTeQCh5SMLERldGVybWluaXN0aWNGYXN0UHJpbWl0aXZlc0NvZGVyLnZhbHVlX2NvZGVylGpWMQEATeYCTecCh5SMLURldGVybWluaXN0aWNGYXN0UHJpbWl0aXZlc0NvZGVyLnRvX3R5cGVfaGludJRqVjEBAE3pAk3qAoeUjCBEZXRlcm1pbmlzdGljRmFzdFByaW1pdGl2ZXNDb2RlcpRqXTEBAE3RAk3qAoeUjBxGYXN0UHJpbWl0aXZlc0NvZGVyLl9faW5pdF9flGpWMQEATfICTfQCh5SMIEZhc3RQcmltaXRpdmVzQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATfYCTfcCh5SMJEZhc3RQcmltaXRpdmVzQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqVjEBAE35Ak37AoeUjCpGYXN0UHJpbWl0aXZlc0NvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXKUalYxAQBN/QJNAQOHlIwgRmFzdFByaW1pdGl2ZXNDb2Rlci50b190eXBlX2hpbnSUalYxAQBNAwNNBAOHlIwjRmFzdFByaW1pdGl2ZXNDb2Rlci5hc19jbG91ZF9vYmplY3SUalYxAQBNBgNNEwOHlIwfRmFzdFByaW1pdGl2ZXNDb2Rlci5pc19rdl9jb2RlcpRqVjEBAE0YA00aA4eUjB1GYXN0UHJpbWl0aXZlc0NvZGVyLmtleV9jb2RlcpRqVjEBAE0cA00dA4eUjB9GYXN0UHJpbWl0aXZlc0NvZGVyLnZhbHVlX2NvZGVylGpWMQEATR8DTSADh5SMGkZhc3RQcmltaXRpdmVzQ29kZXIuX19lcV9flGpWMQEATSIDTSMDh5SMHEZhc3RQcmltaXRpdmVzQ29kZXIuX19oYXNoX1+UalYxAQBNJQNNJgOHlIwTRmFzdFByaW1pdGl2ZXNDb2RlcpRqXTEBAE3tAk0mA4eUjBhCYXNlNjRQaWNrbGVDb2Rlci5lbmNvZGWUalYxAQBNLwNNMAOHlIwYQmFzZTY0UGlja2xlQ29kZXIuZGVjb2RllGpWMQEATTIDTTMDh5SMIkJhc2U2NFBpY2tsZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBNNQNNOQOHlIwdQmFzZTY0UGlja2xlQ29kZXIuaXNfa3ZfY29kZXKUalYxAQBNQQNNQgOHlIwbQmFzZTY0UGlja2xlQ29kZXIua2V5X2NvZGVylGpWMQEATUQDTUUDh5SMHUJhc2U2NFBpY2tsZUNvZGVyLnZhbHVlX2NvZGVylGpWMQEATUcDTUgDh5SMEUJhc2U2NFBpY2tsZUNvZGVylGpdMQEATSkDTUgDh5SME1Byb3RvQ29kZXIuX19pbml0X1+UalYxAQBNVwNNWQOHlIwXUHJvdG9Db2Rlci5fY3JlYXRlX2ltcGyUalYxAQBNWwNNXAOHlIwbUHJvdG9Db2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATV4DTWIDh5SMIVByb3RvQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqVjEBAE1kA01lA4eUjBFQcm90b0NvZGVyLl9fZXFfX5RqVjEBAE1nA01qA4eUjBNQcm90b0NvZGVyLl9faGFzaF9flGpWMQEATWwDTW0Dh5SMGVByb3RvQ29kZXIuZnJvbV90eXBlX2hpbnSUalYxAQBNbwNNdgOHlIwKUHJvdG9Db2RlcpRqXTEBAE1LA012A4eUjCREZXRlcm1pbmlzdGljUHJvdG9Db2Rlci5fY3JlYXRlX2ltcGyUalYxAQBNgQNNggOHlIwoRGV0ZXJtaW5pc3RpY1Byb3RvQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqVjEBAE2EA02GA4eUjC5EZXRlcm1pbmlzdGljUHJvdG9Db2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVylGpWMQEATYgDTYkDh5SMF0RldGVybWluaXN0aWNQcm90b0NvZGVylGpdMQEATXkDTYkDh5SMGUF2cm9HZW5lcmljQ29kZXIuX19pbml0X1+UalYxAQBNkQNNkgOHlIwdQXZyb0dlbmVyaWNDb2Rlci5fY3JlYXRlX2ltcGyUalYxAQBNlANNlQOHlIwhQXZyb0dlbmVyaWNDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATZcDTZkDh5SMF0F2cm9HZW5lcmljQ29kZXIuX19lcV9flGpWMQEATZsDTZwDh5SMGUF2cm9HZW5lcmljQ29kZXIuX19oYXNoX1+UalYxAQBNngNNnwOHlIwdQXZyb0dlbmVyaWNDb2Rlci50b190eXBlX2hpbnSUalYxAQBNoQNNogOHlIwoQXZyb0dlbmVyaWNDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE2kA02lA4eUjCpBdnJvR2VuZXJpY0NvZGVyLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNpwNNqgOHlIwQQXZyb0dlbmVyaWNDb2RlcpRqXTEBAE2PA02qA4eUjBNUdXBsZUNvZGVyLl9faW5pdF9flGpWMQEATa8DTbEDh5SMF1R1cGxlQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATbMDTbQDh5SMG1R1cGxlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqVjEBAE22A024A4eUjCFUdXBsZUNvZGVyLmFzX2RldGVybWluaXN0aWNfY29kZXKUalYxAQBNugNNwQOHlIwXVHVwbGVDb2Rlci50b190eXBlX2hpbnSUalYxAQBNwwNNxAOHlIwZVHVwbGVDb2Rlci5mcm9tX3R5cGVfaGludJRqVjEBAE3GA03JA4eUjBpUdXBsZUNvZGVyLmFzX2Nsb3VkX29iamVjdJRqVjEBAE3LA03WA4eUjCBUdXBsZUNvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc5RqVjEBAE3YA03aA4eUjBFUdXBsZUNvZGVyLmNvZGVyc5RqVjEBAE3cA03eA4eUjBZUdXBsZUNvZGVyLmlzX2t2X2NvZGVylGpWMQEATeADTeIDh5SMFFR1cGxlQ29kZXIua2V5X2NvZGVylGpWMQEATeQDTegDh5SMFlR1cGxlQ29kZXIudmFsdWVfY29kZXKUalYxAQBN6gNN7gOHlIwTVHVwbGVDb2Rlci5fX3JlcHJfX5RqVjEBAE3wA03xA4eUjBFUdXBsZUNvZGVyLl9fZXFfX5RqVjEBAE3zA030A4eUjBNUdXBsZUNvZGVyLl9faGFzaF9flGpWMQEATfYDTfcDh5SMIlR1cGxlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBN+QNN/QOHlIwkVHVwbGVDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATf8DTQIEh5SMClR1cGxlQ29kZXKUal0xAQBNrQNNAgSHlIwbVHVwbGVTZXF1ZW5jZUNvZGVyLl9faW5pdF9flGpWMQEATQcETQkEh5SMHlR1cGxlU2VxdWVuY2VDb2Rlci52YWx1ZV9jb2RlcpRqVjEBAE0LBE0MBIeUjB9UdXBsZVNlcXVlbmNlQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATQ4ETQ8Eh5SMI1R1cGxlU2VxdWVuY2VDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATREETRMEh5SMKVR1cGxlU2VxdWVuY2VDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVylGpWMQEATRUETRoEh5SMIVR1cGxlU2VxdWVuY2VDb2Rlci5mcm9tX3R5cGVfaGludJRqVjEBAE0cBE0fBIeUjChUdXBsZVNlcXVlbmNlQ29kZXIuX2dldF9jb21wb25lbnRfY29kZXJzlGpWMQEATSEETSMEh5SMG1R1cGxlU2VxdWVuY2VDb2Rlci5fX3JlcHJfX5RqVjEBAE0lBE0mBIeUjBlUdXBsZVNlcXVlbmNlQ29kZXIuX19lcV9flGpWMQEATSgETSoEh5SMG1R1cGxlU2VxdWVuY2VDb2Rlci5fX2hhc2hfX5RqVjEBAE0sBE0tBIeUjBJUdXBsZVNlcXVlbmNlQ29kZXKUal0xAQBNBQRNLQSHlIwWSXRlcmFibGVDb2Rlci5fX2luaXRfX5RqVjEBAE0yBE00BIeUjBpJdGVyYWJsZUNvZGVyLl9jcmVhdGVfaW1wbJRqVjEBAE02BE03BIeUjB5JdGVyYWJsZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBNOQRNOwSHlIwkSXRlcmFibGVDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVylGpWMQEATT0ETUIEh5SMHUl0ZXJhYmxlQ29kZXIuYXNfY2xvdWRfb2JqZWN0lGpWMQEATUQETUsEh5SMGUl0ZXJhYmxlQ29kZXIudmFsdWVfY29kZXKUalYxAQBNTQRNTgSHlIwaSXRlcmFibGVDb2Rlci50b190eXBlX2hpbnSUalYxAQBNUARNUQSHlIwcSXRlcmFibGVDb2Rlci5mcm9tX3R5cGVfaGludJRqVjEBAE1TBE1WBIeUjCNJdGVyYWJsZUNvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc5RqVjEBAE1YBE1aBIeUjBZJdGVyYWJsZUNvZGVyLl9fcmVwcl9flGpWMQEATVwETV0Eh5SMFEl0ZXJhYmxlQ29kZXIuX19lcV9flGpWMQEATV8ETWEEh5SMFkl0ZXJhYmxlQ29kZXIuX19oYXNoX1+UalYxAQBNYwRNZASHlIwNSXRlcmFibGVDb2RlcpRqXTEBAE0wBE1kBIeUjBpHbG9iYWxXaW5kb3dDb2Rlci5fX2luaXRfX5RqVjEBAE1sBE1uBIeUjCFHbG9iYWxXaW5kb3dDb2Rlci5hc19jbG91ZF9vYmplY3SUalYxAQBNcARNcwSHlIwRR2xvYmFsV2luZG93Q29kZXKUal0xAQBNagRNcwSHlIwgSW50ZXJ2YWxXaW5kb3dDb2Rlci5fY3JlYXRlX2ltcGyUalYxAQBNfARNfQSHlIwkSW50ZXJ2YWxXaW5kb3dDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATX8ETYEEh5SMI0ludGVydmFsV2luZG93Q29kZXIuYXNfY2xvdWRfb2JqZWN0lGpWMQEATYMETYYEh5SMGkludGVydmFsV2luZG93Q29kZXIuX19lcV9flGpWMQEATYgETYkEh5SMHEludGVydmFsV2luZG93Q29kZXIuX19oYXNoX1+UalYxAQBNiwRNjASHlIwTSW50ZXJ2YWxXaW5kb3dDb2RlcpRqXTEBAE16BE2MBIeUjBtXaW5kb3dlZFZhbHVlQ29kZXIuX19pbml0X1+UalYxAQBNlQRNmwSHlIwfV2luZG93ZWRWYWx1ZUNvZGVyLl9jcmVhdGVfaW1wbJRqVjEBAE2dBE2hBIeUjCNXaW5kb3dlZFZhbHVlQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqVjEBAE2jBE2nBIeUjCJXaW5kb3dlZFZhbHVlQ29kZXIuYXNfY2xvdWRfb2JqZWN0lGpWMQEATakETbEEh5SMKFdpbmRvd2VkVmFsdWVDb2Rlci5fZ2V0X2NvbXBvbmVudF9jb2RlcnOUalYxAQBNswRNtQSHlIweV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2t2X2NvZGVylGpWMQEATbcETbkEh5SMHFdpbmRvd2VkVmFsdWVDb2Rlci5rZXlfY29kZXKUalYxAQBNuwRNvQSHlIweV2luZG93ZWRWYWx1ZUNvZGVyLnZhbHVlX2NvZGVylGpWMQEATb8ETcEEh5SMG1dpbmRvd2VkVmFsdWVDb2Rlci5fX3JlcHJfX5RqVjEBAE3DBE3EBIeUjBlXaW5kb3dlZFZhbHVlQ29kZXIuX19lcV9flGpWMQEATcYETcsEh5SMG1dpbmRvd2VkVmFsdWVDb2Rlci5fX2hhc2hfX5RqVjEBAE3NBE3PBIeUjBJXaW5kb3dlZFZhbHVlQ29kZXKUal0xAQBNkwRNzwSHlIwgUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIuX19pbml0X1+UalYxAQBN2ARN2gSHlIwkUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIuX2NyZWF0ZV9pbXBslGpWMQEATdwETeAEh5SMKFBhcmFtV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBN4gRN4wSHlIwnUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIuYXNfY2xvdWRfb2JqZWN0lGpWMQEATeUETecEh5SMIFBhcmFtV2luZG93ZWRWYWx1ZUNvZGVyLl9fcmVwcl9flGpWMQEATekETeoEh5SMHlBhcmFtV2luZG93ZWRWYWx1ZUNvZGVyLl9fZXFfX5RqVjEBAE3sBE3xBIeUjCBQYXJhbVdpbmRvd2VkVmFsdWVDb2Rlci5fX2hhc2hfX5RqVjEBAE3zBE30BIeUjDFQYXJhbVdpbmRvd2VkVmFsdWVDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATfYETfkEh5SML1BhcmFtV2luZG93ZWRWYWx1ZUNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATfsETf4Eh5SMF1BhcmFtV2luZG93ZWRWYWx1ZUNvZGVylGpdMQEATdYETf4Eh5SMGkxlbmd0aFByZWZpeENvZGVyLl9faW5pdF9flGpWMQEATQUFTQcFh5SMHkxlbmd0aFByZWZpeENvZGVyLl9jcmVhdGVfaW1wbJRqVjEBAE0JBU0KBYeUjCJMZW5ndGhQcmVmaXhDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpWMQEATQwFTQ4Fh5SMH0xlbmd0aFByZWZpeENvZGVyLmVzdGltYXRlX3NpemWUalYxAQBNEAVNEgWHlIwdTGVuZ3RoUHJlZml4Q29kZXIudmFsdWVfY29kZXKUalYxAQBNFAVNFQWHlIwhTGVuZ3RoUHJlZml4Q29kZXIuYXNfY2xvdWRfb2JqZWN0lGpWMQEATRcFTR0Fh5SMJ0xlbmd0aFByZWZpeENvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc5RqVjEBAE0fBU0hBYeUjBpMZW5ndGhQcmVmaXhDb2Rlci5fX3JlcHJfX5RqVjEBAE0jBU0kBYeUjBhMZW5ndGhQcmVmaXhDb2Rlci5fX2VxX1+UalYxAQBNJgVNKAWHlIwaTGVuZ3RoUHJlZml4Q29kZXIuX19oYXNoX1+UalYxAQBNKgVNKwWHlIwRTGVuZ3RoUHJlZml4Q29kZXKUal0xAQBNAQVNKwWHlIwhU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLl9faW5pdF9flGpWMQEATTMFTTwFh5SMJVN0YXRlQmFja2VkSXRlcmFibGVDb2Rlci5fY3JlYXRlX2ltcGyUalYxAQBNPgVNQwWHlIwpU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBNRQVNRwWHlIwuU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLl9nZXRfY29tcG9uZW50X2NvZGVyc5RqVjEBAE1JBU1LBYeUjCFTdGF0ZUJhY2tlZEl0ZXJhYmxlQ29kZXIuX19yZXByX1+UalYxAQBNTQVNTgWHlIwfU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLl9fZXFfX5RqVjEBAE1QBU1UBYeUjCFTdGF0ZUJhY2tlZEl0ZXJhYmxlQ29kZXIuX19oYXNoX1+UalYxAQBNVgVNVwWHlIwwU3RhdGVCYWNrZWRJdGVyYWJsZUNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATVkFTV4Fh5SMMlN0YXRlQmFja2VkSXRlcmFibGVDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATWAFTWcFh5SMGFN0YXRlQmFja2VkSXRlcmFibGVDb2RlcpRqXTEBAE0yBU1nBYeUjB1SdW5uZXJBUElDb2RlckhvbGRlci5fX2luaXRfX5RqVjEBAE1yBU1zBYeUjBpSdW5uZXJBUElDb2RlckhvbGRlci5wcm90b5RqVjEBAE11BU12BYeUjCJSdW5uZXJBUElDb2RlckhvbGRlci50b19ydW5uZXJfYXBplGpWMQEATXgFTXkFh5SMIVJ1bm5lckFQSUNvZGVySG9sZGVyLnRvX3R5cGVfaGludJRqVjEBAE17BU18BYeUjBRSdW5uZXJBUElDb2RlckhvbGRlcpRqXTEBAE1qBU18BYeUdX2UKIwFQ29kZXKUalEDAACMDENvZGVyLmVuY29kZZRqUQMAAIwMQ29kZXIuZGVjb2RllGpRAwAAjBNDb2Rlci5lbmNvZGVfbmVzdGVklGpRAwAAjBNDb2Rlci5kZWNvZGVfbmVzdGVklGpRAwAAjBZDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjBxDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVylGpRAwAAjBNDb2Rlci5lc3RpbWF0ZV9zaXpllGpRAwAAjA5Db2Rlci5nZXRfaW1wbJRqUQMAAIwSQ29kZXIudG9fdHlwZV9oaW50lGpRAwAAjBRDb2Rlci5mcm9tX3R5cGVfaGludJRqUQMAAIwRQ29kZXIuaXNfa3ZfY29kZXKUalEDAACMD0NvZGVyLmtleV9jb2RlcpRqUQMAAIwRQ29kZXIudmFsdWVfY29kZXKUalEDAACMFUNvZGVyLmFzX2Nsb3VkX29iamVjdJRqUQMAAIwSQ29kZXIucmVnaXN0ZXJfdXJulGpRAwAAjBNDb2Rlci50b19ydW5uZXJfYXBplGpRAwAAjBVDb2Rlci5mcm9tX3J1bm5lcl9hcGmUalEDAACMHUNvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpRAwAAjB1Db2Rlci5yZWdpc3Rlcl9zdHJ1Y3R1cmVkX3VybpRqUQMAAIwMU3RyVXRmOENvZGVylGpRAwAAjBNTdHJVdGY4Q29kZXIuZW5jb2RllGpRAwAAjBNTdHJVdGY4Q29kZXIuZGVjb2RllGpRAwAAjB1TdHJVdGY4Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqUQMAAIwZU3RyVXRmOENvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwKQnl0ZXNDb2RlcpRqUQMAAIwbQnl0ZXNDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjBdCeXRlc0NvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwaQnl0ZXNDb2Rlci5hc19jbG91ZF9vYmplY3SUalEDAACMDEJvb2xlYW5Db2RlcpRqUQMAAIwdQm9vbGVhbkNvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMGUJvb2xlYW5Db2Rlci50b190eXBlX2hpbnSUalEDAACMC1ZhckludENvZGVylGpRAwAAjBxWYXJJbnRDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjBhWYXJJbnRDb2Rlci50b190eXBlX2hpbnSUalEDAACMG1ZhckludENvZGVyLmFzX2Nsb3VkX29iamVjdJRqUQMAAIwKRmxvYXRDb2RlcpRqUQMAAIwbRmxvYXRDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjBdGbG9hdENvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwOVGltZXN0YW1wQ29kZXKUalEDAACMH1RpbWVzdGFtcENvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMDlNpbmdsZXRvbkNvZGVylGpRAwAAjB9TaW5nbGV0b25Db2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjAtQaWNrbGVDb2RlcpRqUQMAAIwiUGlja2xlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqUQMAAIwYUGlja2xlQ29kZXIudG9fdHlwZV9oaW50lGpRAwAAjAlEaWxsQ29kZXKUalEDAACME0Zhc3RQcmltaXRpdmVzQ29kZXKUalEDAACMJEZhc3RQcmltaXRpdmVzQ29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqUQMAAIwqRmFzdFByaW1pdGl2ZXNDb2Rlci5hc19kZXRlcm1pbmlzdGljX2NvZGVylGpRAwAAjCBGYXN0UHJpbWl0aXZlc0NvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwjRmFzdFByaW1pdGl2ZXNDb2Rlci5hc19jbG91ZF9vYmplY3SUalEDAACMH0Zhc3RQcmltaXRpdmVzQ29kZXIuaXNfa3ZfY29kZXKUalEDAACMHUZhc3RQcmltaXRpdmVzQ29kZXIua2V5X2NvZGVylGpRAwAAjB9GYXN0UHJpbWl0aXZlc0NvZGVyLnZhbHVlX2NvZGVylGpRAwAAjApQcm90b0NvZGVylGpRAwAAjBtQcm90b0NvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMIVByb3RvQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqUQMAAIwZUHJvdG9Db2Rlci5mcm9tX3R5cGVfaGludJRqUQMAAIwQQXZyb0dlbmVyaWNDb2RlcpRqUQMAAIwhQXZyb0dlbmVyaWNDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjB1BdnJvR2VuZXJpY0NvZGVyLnRvX3R5cGVfaGludJRqUQMAAIwoQXZyb0dlbmVyaWNDb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqUQMAAIwqQXZyb0dlbmVyaWNDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpRAwAAjApUdXBsZUNvZGVylGpRAwAAjBtUdXBsZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMIVR1cGxlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqUQMAAIwXVHVwbGVDb2Rlci50b190eXBlX2hpbnSUalEDAACMGVR1cGxlQ29kZXIuZnJvbV90eXBlX2hpbnSUalEDAACMGlR1cGxlQ29kZXIuYXNfY2xvdWRfb2JqZWN0lGpRAwAAjBFUdXBsZUNvZGVyLmNvZGVyc5RqUQMAAIwWVHVwbGVDb2Rlci5pc19rdl9jb2RlcpRqUQMAAIwUVHVwbGVDb2Rlci5rZXlfY29kZXKUalEDAACMFlR1cGxlQ29kZXIudmFsdWVfY29kZXKUalEDAACMIlR1cGxlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalEDAACMJFR1cGxlQ29kZXIuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqUQMAAIwSVHVwbGVTZXF1ZW5jZUNvZGVylGpRAwAAjB5UdXBsZVNlcXVlbmNlQ29kZXIudmFsdWVfY29kZXKUalEDAACMI1R1cGxlU2VxdWVuY2VDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjClUdXBsZVNlcXVlbmNlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqUQMAAIwhVHVwbGVTZXF1ZW5jZUNvZGVyLmZyb21fdHlwZV9oaW50lGpRAwAAjA1JdGVyYWJsZUNvZGVylGpRAwAAjB5JdGVyYWJsZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMJEl0ZXJhYmxlQ29kZXIuYXNfZGV0ZXJtaW5pc3RpY19jb2RlcpRqUQMAAIwdSXRlcmFibGVDb2Rlci5hc19jbG91ZF9vYmplY3SUalEDAACMGUl0ZXJhYmxlQ29kZXIudmFsdWVfY29kZXKUalEDAACMGkl0ZXJhYmxlQ29kZXIudG9fdHlwZV9oaW50lGpRAwAAjBxJdGVyYWJsZUNvZGVyLmZyb21fdHlwZV9oaW50lGpRAwAAjBJXaW5kb3dlZFZhbHVlQ29kZXKUalEDAACMI1dpbmRvd2VkVmFsdWVDb2Rlci5pc19kZXRlcm1pbmlzdGljlGpRAwAAjCJXaW5kb3dlZFZhbHVlQ29kZXIuYXNfY2xvdWRfb2JqZWN0lGpRAwAAjB5XaW5kb3dlZFZhbHVlQ29kZXIuaXNfa3ZfY29kZXKUalEDAACMHFdpbmRvd2VkVmFsdWVDb2Rlci5rZXlfY29kZXKUalEDAACMHldpbmRvd2VkVmFsdWVDb2Rlci52YWx1ZV9jb2RlcpRqUQMAAIwXUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXKUalEDAACMKFBhcmFtV2luZG93ZWRWYWx1ZUNvZGVyLmlzX2RldGVybWluaXN0aWOUalEDAACMJ1BhcmFtV2luZG93ZWRWYWx1ZUNvZGVyLmFzX2Nsb3VkX29iamVjdJRqUQMAAIwxUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqUQMAAIwvUGFyYW1XaW5kb3dlZFZhbHVlQ29kZXIudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalEDAAB1jBlhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzlHSUjB1hcGFjaGVfYmVhbS5jb2RlcnMub2JzZXJ2YWJsZZQoWM0FAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk9ic2VydmFibGUgYmFzZSBjbGFzcyBmb3IgaXRlcmFibGVzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKCmNsYXNzIE9ic2VydmFibGVNaXhpbihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQW4gb2JzZXJ2YWJsZSBpdGVyYWJsZS4KCiAgU3ViY2xhc3NlcyBuZWVkIHRvIGNhbGwgc2VsZi5ub3RpZnlfb2JzZXJ2ZXJzIHdpdGggYW55IG9iamVjdCB5aWVsZGVkLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHNlbGYub2JzZXJ2ZXJzID0gW10KCiAgZGVmIHJlZ2lzdGVyX29ic2VydmVyKHNlbGYsIGNhbGxiYWNrKToKICAgIHNlbGYub2JzZXJ2ZXJzLmFwcGVuZChjYWxsYmFjaykKCiAgZGVmIG5vdGlmeV9vYnNlcnZlcnMoc2VsZiwgdmFsdWUsICoqa3dhcmdzKToKICAgICMgc2VsZi5vYnNlcnZlcnMgaXMgYWxtb3N0IGFsd2F5cyBlbXB0eQogICAgaWYgc2VsZi5vYnNlcnZlcnM6CiAgICAgIGZvciBvIGluIHNlbGYub2JzZXJ2ZXJzOgogICAgICAgIG8odmFsdWUsICoqa3dhcmdzKQqUfZQojBhPYnNlcnZhYmxlTWl4aW4uX19pbml0X1+UalYxAQBLJEslh5SMIU9ic2VydmFibGVNaXhpbi5yZWdpc3Rlcl9vYnNlcnZlcpRqVjEBAEsnSyiHlIwgT2JzZXJ2YWJsZU1peGluLm5vdGlmeV9vYnNlcnZlcnOUalYxAQBLKksuh5SMD09ic2VydmFibGVNaXhpbpRqXTEBAEsdSy6HlHV9lCiMD09ic2VydmFibGVNaXhpbpRqbQMAAIwhT2JzZXJ2YWJsZU1peGluLnJlZ2lzdGVyX29ic2VydmVylGptAwAAjCBPYnNlcnZhYmxlTWl4aW4ubm90aWZ5X29ic2VydmVyc5RqbQMAAHWMHWFwYWNoZV9iZWFtLmNvZGVycy5vYnNlcnZhYmxllHSUjBxhcGFjaGVfYmVhbS5jb2RlcnMucm93X2NvZGVylChYsxkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpdGVydG9vbHMKZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyX2ltcGwgaW1wb3J0IFN0cmVhbUNvZGVySW1wbApmcm9tIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMgaW1wb3J0IEJ5dGVzQ29kZXIKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzIGltcG9ydCBDb2Rlcgpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMgaW1wb3J0IEZhc3RDb2Rlcgpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMgaW1wb3J0IEZsb2F0Q29kZXIKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzIGltcG9ydCBJdGVyYWJsZUNvZGVyCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycyBpbXBvcnQgU3RyVXRmOENvZGVyCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycyBpbXBvcnQgVHVwbGVDb2Rlcgpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycy5jb2RlcnMgaW1wb3J0IFZhckludENvZGVyCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IGNvbW1vbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBzY2hlbWFfcGIyCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMgaW1wb3J0IG5hbWVkX3R1cGxlX2Zyb21fc2NoZW1hCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXMgaW1wb3J0IG5hbWVkX3R1cGxlX3RvX3NjaGVtYQoKX19hbGxfXyA9IFsiUm93Q29kZXIiXQoKCmNsYXNzIFJvd0NvZGVyKEZhc3RDb2Rlcik6CiAgIiIiIENvZGVyIGZvciBgdHlwaW5nLk5hbWVkVHVwbGVgIGluc3RhbmNlcy4KCiAgSW1wbGVtZW50cyB0aGUgYmVhbTpjb2Rlcjpyb3c6djEgc3RhbmRhcmQgY29kZXIgc3BlYy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc2NoZW1hKToKICAgICIiIkluaXRpYWxpemVzIGEgOmNsYXNzOmBSb3dDb2RlcmAuCgogICAgQXJnczoKICAgICAgc2NoZW1hIChhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc2NoZW1hX3BiMi5TY2hlbWEpOiBUaGUgcHJvdG9idWYKICAgICAgICByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NoZW1hIG9mIHRoZSBkYXRhIHRoYXQgdGhlIFJvd0NvZGVyIHdpbGwgYmUgdXNlZAogICAgICAgIHRvIGVuY29kZS9kZWNvZGUuCiAgICAiIiIKICAgIHNlbGYuc2NoZW1hID0gc2NoZW1hCiAgICBzZWxmLmNvbXBvbmVudHMgPSBbCiAgICAgICAgUm93Q29kZXIuY29kZXJfZnJvbV90eXBlKGZpZWxkLnR5cGUpIGZvciBmaWVsZCBpbiBzZWxmLnNjaGVtYS5maWVsZHMKICAgIF0KCiAgZGVmIF9jcmVhdGVfaW1wbChzZWxmKToKICAgIHJldHVybiBSb3dDb2RlckltcGwoc2VsZi5zY2hlbWEsIHNlbGYuY29tcG9uZW50cykKCiAgZGVmIGlzX2RldGVybWluaXN0aWMoc2VsZik6CiAgICByZXR1cm4gYWxsKGMuaXNfZGV0ZXJtaW5pc3RpYygpIGZvciBjIGluIHNlbGYuY29tcG9uZW50cykKCiAgZGVmIHRvX3R5cGVfaGludChzZWxmKToKICAgIHJldHVybiBuYW1lZF90dXBsZV9mcm9tX3NjaGVtYShzZWxmLnNjaGVtYSkKCiAgZGVmIGFzX2Nsb3VkX29iamVjdChzZWxmLCBjb2RlcnNfY29udGV4dD1Ob25lKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImFzX2Nsb3VkX29iamVjdCBub3Qgc3VwcG9ydGVkIGZvciBSb3dDb2RlciIpCgogIF9faGFzaF9fID0gTm9uZSAgIyB0eXBlOiBpZ25vcmVbYXNzaWdubWVudF0KCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5zY2hlbWEgPT0gb3RoZXIuc2NoZW1hCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gKGNvbW1vbl91cm5zLmNvZGVycy5ST1cudXJuLCBzZWxmLnNjaGVtYSwgW10pCgogIEBzdGF0aWNtZXRob2QKICBAQ29kZXIucmVnaXN0ZXJfdXJuKGNvbW1vbl91cm5zLmNvZGVycy5ST1cudXJuLCBzY2hlbWFfcGIyLlNjaGVtYSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjb21wb25lbnRzLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gUm93Q29kZXIocGF5bG9hZCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3R5cGVfaGludChuYW1lZF90dXBsZV90eXBlLCByZWdpc3RyeSk6CiAgICByZXR1cm4gUm93Q29kZXIobmFtZWRfdHVwbGVfdG9fc2NoZW1hKG5hbWVkX3R1cGxlX3R5cGUpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGNvZGVyX2Zyb21fdHlwZShmaWVsZF90eXBlKToKICAgIHR5cGVfaW5mbyA9IGZpZWxkX3R5cGUuV2hpY2hPbmVvZigidHlwZV9pbmZvIikKICAgIGlmIHR5cGVfaW5mbyA9PSAiYXRvbWljX3R5cGUiOgogICAgICBpZiBmaWVsZF90eXBlLmF0b21pY190eXBlIGluIChzY2hlbWFfcGIyLklOVDMyLCBzY2hlbWFfcGIyLklOVDY0KToKICAgICAgICByZXR1cm4gVmFySW50Q29kZXIoKQogICAgICBlbGlmIGZpZWxkX3R5cGUuYXRvbWljX3R5cGUgPT0gc2NoZW1hX3BiMi5ET1VCTEU6CiAgICAgICAgcmV0dXJuIEZsb2F0Q29kZXIoKQogICAgICBlbGlmIGZpZWxkX3R5cGUuYXRvbWljX3R5cGUgPT0gc2NoZW1hX3BiMi5TVFJJTkc6CiAgICAgICAgcmV0dXJuIFN0clV0ZjhDb2RlcigpCiAgICBlbGlmIHR5cGVfaW5mbyA9PSAiYXJyYXlfdHlwZSI6CiAgICAgIHJldHVybiBJdGVyYWJsZUNvZGVyKAogICAgICAgICAgUm93Q29kZXIuY29kZXJfZnJvbV90eXBlKGZpZWxkX3R5cGUuYXJyYXlfdHlwZS5lbGVtZW50X3R5cGUpKQoKICAgICMgVGhlIEphdmEgU0RLIHN1cHBvcnRzIHNldmVyYWwgbW9yZSB0eXBlcywgYnV0IHRoZSBjb2RlcnMgYXJlIG5vdCB5ZXQKICAgICMgc3RhbmRhcmQsIGFuZCBhcmUgbm90IGltcGxlbWVudGVkIGluIFB5dGhvbi4KICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgIkVuY291bnRlcmVkIGEgdHlwZSB0aGF0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IFJvd0NvZGVyOiAlcyIgJQogICAgICAgIGZpZWxkX3R5cGUpCgoKY2xhc3MgUm93Q29kZXJJbXBsKFN0cmVhbUNvZGVySW1wbCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgogIFNJWkVfQ09ERVIgPSBWYXJJbnRDb2RlcigpLmdldF9pbXBsKCkKICBOVUxMX01BUktFUl9DT0RFUiA9IEJ5dGVzQ29kZXIoKS5nZXRfaW1wbCgpCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzY2hlbWEsIGNvbXBvbmVudHMpOgogICAgc2VsZi5zY2hlbWEgPSBzY2hlbWEKICAgIHNlbGYuY29uc3RydWN0b3IgPSBuYW1lZF90dXBsZV9mcm9tX3NjaGVtYShzY2hlbWEpCiAgICBzZWxmLmNvbXBvbmVudHMgPSBsaXN0KGMuZ2V0X2ltcGwoKSBmb3IgYyBpbiBjb21wb25lbnRzKQogICAgc2VsZi5oYXNfbnVsbGFibGVfZmllbGRzID0gYW55KAogICAgICAgIGZpZWxkLnR5cGUubnVsbGFibGUgZm9yIGZpZWxkIGluIHNlbGYuc2NoZW1hLmZpZWxkcykKCiAgZGVmIGVuY29kZV90b19zdHJlYW0oc2VsZiwgdmFsdWUsIG91dCwgbmVzdGVkKToKICAgIG52YWxzID0gbGVuKHNlbGYuc2NoZW1hLmZpZWxkcykKICAgIHNlbGYuU0laRV9DT0RFUi5lbmNvZGVfdG9fc3RyZWFtKG52YWxzLCBvdXQsIFRydWUpCiAgICBhdHRycyA9IFtnZXRhdHRyKHZhbHVlLCBmLm5hbWUpIGZvciBmIGluIHNlbGYuc2NoZW1hLmZpZWxkc10KCiAgICB3b3JkcyA9IGFycmF5KCdCJykKICAgIGlmIHNlbGYuaGFzX251bGxhYmxlX2ZpZWxkczoKICAgICAgbnVsbHMgPSBsaXN0KGF0dHIgaXMgTm9uZSBmb3IgYXR0ciBpbiBhdHRycykKICAgICAgaWYgYW55KG51bGxzKToKICAgICAgICB3b3JkcyA9IGFycmF5KCdCJywgaXRlcnRvb2xzLnJlcGVhdCgwLCAobnZhbHMgKyA3KSAvLyA4KSkKICAgICAgICBmb3IgaSwgaXNfbnVsbCBpbiBlbnVtZXJhdGUobnVsbHMpOgogICAgICAgICAgd29yZHNbaSAvLyA4XSB8PSBpc19udWxsIDw8IChpICUgOCkKCiAgICBzZWxmLk5VTExfTUFSS0VSX0NPREVSLmVuY29kZV90b19zdHJlYW0od29yZHMudG9zdHJpbmcoKSwgb3V0LCBUcnVlKQoKICAgIGZvciBjLCBmaWVsZCwgYXR0ciBpbiB6aXAoc2VsZi5jb21wb25lbnRzLCBzZWxmLnNjaGVtYS5maWVsZHMsIGF0dHJzKToKICAgICAgaWYgYXR0ciBpcyBOb25lOgogICAgICAgIGlmIG5vdCBmaWVsZC50eXBlLm51bGxhYmxlOgogICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAiQXR0ZW1wdGVkIHRvIGVuY29kZSBudWxsIGZvciBub24tbnVsbGFibGUgZmllbGQgXCJ7fVwiLiIuZm9ybWF0KAogICAgICAgICAgICAgICAgICBmaWVsZC5uYW1lKSkKICAgICAgICBjb250aW51ZQogICAgICBjLmVuY29kZV90b19zdHJlYW0oYXR0ciwgb3V0LCBUcnVlKQoKICBkZWYgZGVjb2RlX2Zyb21fc3RyZWFtKHNlbGYsIGluX3N0cmVhbSwgbmVzdGVkKToKICAgIG52YWxzID0gc2VsZi5TSVpFX0NPREVSLmRlY29kZV9mcm9tX3N0cmVhbShpbl9zdHJlYW0sIFRydWUpCiAgICB3b3JkcyA9IGFycmF5KCdCJykKICAgIHdvcmRzLmZyb21zdHJpbmcoc2VsZi5OVUxMX01BUktFUl9DT0RFUi5kZWNvZGVfZnJvbV9zdHJlYW0oaW5fc3RyZWFtLCBUcnVlKSkKCiAgICBpZiB3b3JkczoKICAgICAgbnVsbHMgPSAoKHdvcmRzW2kgLy8gOF0gPj4gKGkgJSA4KSkgJiAweDAxIGZvciBpIGluIHJhbmdlKG52YWxzKSkKICAgIGVsc2U6CiAgICAgIG51bGxzID0gaXRlcnRvb2xzLnJlcGVhdChGYWxzZSwgbnZhbHMpCgogICAgIyBJZiB0aGlzIGNvZGVyJ3Mgc2NoZW1hIGhhcyBtb3JlIGF0dHJpYnV0ZXMgdGhhbiB0aGUgZW5jb2RlZCB2YWx1ZSwgdGhlbgogICAgIyB0aGUgc2NoZW1hIG11c3QgaGF2ZSBjaGFuZ2VkLiBQb3B1bGF0ZSB0aGUgdW5lbmNvZGVkIGZpZWxkcyB3aXRoIG51bGxzLgogICAgaWYgbGVuKHNlbGYuY29tcG9uZW50cykgPiBudmFsczoKICAgICAgbnVsbHMgPSBpdGVydG9vbHMuY2hhaW4oCiAgICAgICAgICBudWxscywgaXRlcnRvb2xzLnJlcGVhdChUcnVlLCBsZW4oc2VsZi5jb21wb25lbnRzKSAtIG52YWxzKSkKCiAgICAjIE5vdGUgdGhhdCBpZiB0aGlzIGNvZGVyJ3Mgc2NoZW1hIGhhcyAqZmV3ZXIqIGF0dHJpYnV0ZXMgdGhhbiB0aGUgZW5jb2RlZAogICAgIyB2YWx1ZSwgd2UganVzdCBuZWVkIHRvIGlnbm9yZSB0aGUgYWRkaXRpb25hbCB2YWx1ZXMsIHdoaWNoIHdpbGwgb2NjdXIKICAgICMgaGVyZSBiZWNhdXNlIHdlIG9ubHkgZGVjb2RlIGFzIG1hbnkgdmFsdWVzIGFzIHdlIGhhdmUgY29kZXJzIGZvci4KICAgIHJldHVybiBzZWxmLmNvbnN0cnVjdG9yKAogICAgICAgICooCiAgICAgICAgICAgIE5vbmUgaWYgaXNfbnVsbCBlbHNlIGMuZGVjb2RlX2Zyb21fc3RyZWFtKGluX3N0cmVhbSwgVHJ1ZSkgZm9yIGMsCiAgICAgICAgICAgIGlzX251bGwgaW4gemlwKHNlbGYuY29tcG9uZW50cywgbnVsbHMpKSkKCiAgZGVmIF9tYWtlX3ZhbHVlX2NvZGVyKHNlbGYsIG51bGxzPWl0ZXJ0b29scy5yZXBlYXQoRmFsc2UpKToKICAgIGNvbXBvbmVudHMgPSBbCiAgICAgICAgY29tcG9uZW50IGZvciBjb21wb25lbnQsCiAgICAgICAgaXNfbnVsbCBpbiB6aXAoc2VsZi5jb21wb25lbnRzLCBudWxscykgaWYgbm90IGlzX251bGwKICAgIF0gaWYgc2VsZi5oYXNfbnVsbGFibGVfZmllbGRzIGVsc2Ugc2VsZi5jb21wb25lbnRzCiAgICByZXR1cm4gVHVwbGVDb2Rlcihjb21wb25lbnRzKS5nZXRfaW1wbCgpCpSVAAABAAAAAAB9lCiMEVJvd0NvZGVyLl9faW5pdF9flGpWMQEASy9LOoeUjBVSb3dDb2Rlci5fY3JlYXRlX2ltcGyUalYxAQBLPEs9h5SMGVJvd0NvZGVyLmlzX2RldGVybWluaXN0aWOUalYxAQBLP0tAh5SMFVJvd0NvZGVyLnRvX3R5cGVfaGludJRqVjEBAEtCS0OHlIwYUm93Q29kZXIuYXNfY2xvdWRfb2JqZWN0lGpWMQEAS0VLRoeUjA9Sb3dDb2Rlci5fX2VxX1+UalYxAQBLSktLh5SMIFJvd0NvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEAS01LToeUjCJSb3dDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEAS1BLU4eUjBdSb3dDb2Rlci5mcm9tX3R5cGVfaGludJRqVjEBAEtVS1eHlIwYUm93Q29kZXIuY29kZXJfZnJvbV90eXBllGpWMQEAS1lLa4eUjAhSb3dDb2RlcpRqXTEBAEsqS2uHlIwVUm93Q29kZXJJbXBsLl9faW5pdF9flGpWMQEAS3NLeIeUjB1Sb3dDb2RlckltcGwuZW5jb2RlX3RvX3N0cmVhbZRqVjEBAEt6S5CHlIwfUm93Q29kZXJJbXBsLmRlY29kZV9mcm9tX3N0cmVhbZRqVjEBAEuSS6iHlIweUm93Q29kZXJJbXBsLl9tYWtlX3ZhbHVlX2NvZGVylGpWMQEAS6pLr4eUjAxSb3dDb2RlckltcGyUal0xAQBLbkuvh5R1fZQojAhSb3dDb2RlcpRqAgQAAIwZUm93Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqAgQAAIwVUm93Q29kZXIudG9fdHlwZV9oaW50lGoCBAAAjBhSb3dDb2Rlci5hc19jbG91ZF9vYmplY3SUagIEAACMIFJvd0NvZGVyLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGoCBAAAjCJSb3dDb2Rlci5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGoCBAAAjBdSb3dDb2Rlci5mcm9tX3R5cGVfaGludJRqAgQAAIwYUm93Q29kZXIuY29kZXJfZnJvbV90eXBllGoCBAAAdYwcYXBhY2hlX2JlYW0uY29kZXJzLnJvd19jb2RlcpR0lIweYXBhY2hlX2JlYW0uY29kZXJzLnNsb3dfc3RyZWFtlChY6RUAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBzdHJlYW0ucHl4LgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBzdHJ1Y3QKaW1wb3J0IHN5cwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBjaHIKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CgoKY2xhc3MgT3V0cHV0U3RyZWFtKG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHN0cmVhbS5PdXRwdXRTdHJlYW0uIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5kYXRhID0gW10gICMgdHlwZTogTGlzdFtieXRlc10KICAgIHNlbGYuYnl0ZV9jb3VudCA9IDAKCiAgZGVmIHdyaXRlKHNlbGYsIGIsIG5lc3RlZD1GYWxzZSk6CiAgICAjIHR5cGU6IChieXRlcywgYm9vbCkgLT4gTm9uZQogICAgYXNzZXJ0IGlzaW5zdGFuY2UoYiwgYnl0ZXMpCiAgICBpZiBuZXN0ZWQ6CiAgICAgIHNlbGYud3JpdGVfdmFyX2ludDY0KGxlbihiKSkKICAgIHNlbGYuZGF0YS5hcHBlbmQoYikKICAgIHNlbGYuYnl0ZV9jb3VudCArPSBsZW4oYikKCiAgZGVmIHdyaXRlX2J5dGUoc2VsZiwgdmFsKToKICAgIHNlbGYuZGF0YS5hcHBlbmQoY2hyKHZhbCkuZW5jb2RlKCdsYXRpbi0xJykpCiAgICBzZWxmLmJ5dGVfY291bnQgKz0gMQoKICBkZWYgd3JpdGVfdmFyX2ludDY0KHNlbGYsIHYpOgogICAgIyB0eXBlOiAoaW50KSAtPiBOb25lCiAgICBpZiB2IDwgMDoKICAgICAgdiArPSAxIDw8IDY0CiAgICAgIGlmIHYgPD0gMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdWYWx1ZSB0b28gbGFyZ2UgKG5lZ2F0aXZlKS4nKQogICAgd2hpbGUgVHJ1ZToKICAgICAgYml0cyA9IHYgJiAweDdGCiAgICAgIHYgPj49IDcKICAgICAgaWYgdjoKICAgICAgICBiaXRzIHw9IDB4ODAKICAgICAgc2VsZi53cml0ZV9ieXRlKGJpdHMpCiAgICAgIGlmIG5vdCB2OgogICAgICAgIGJyZWFrCgogIGRlZiB3cml0ZV9iaWdlbmRpYW5faW50NjQoc2VsZiwgdik6CiAgICBzZWxmLndyaXRlKHN0cnVjdC5wYWNrKCc+cScsIHYpKQoKICBkZWYgd3JpdGVfYmlnZW5kaWFuX3VpbnQ2NChzZWxmLCB2KToKICAgIHNlbGYud3JpdGUoc3RydWN0LnBhY2soJz5RJywgdikpCgogIGRlZiB3cml0ZV9iaWdlbmRpYW5faW50MzIoc2VsZiwgdik6CiAgICBzZWxmLndyaXRlKHN0cnVjdC5wYWNrKCc+aScsIHYpKQoKICBkZWYgd3JpdGVfYmlnZW5kaWFuX2RvdWJsZShzZWxmLCB2KToKICAgIHNlbGYud3JpdGUoc3RydWN0LnBhY2soJz5kJywgdikpCgogIGRlZiBnZXQoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGJ5dGVzCiAgICByZXR1cm4gYicnLmpvaW4oc2VsZi5kYXRhKQoKICBkZWYgc2l6ZShzZWxmKToKICAgICMgdHlwZTogKCkgLT4gaW50CiAgICByZXR1cm4gc2VsZi5ieXRlX2NvdW50CgogIGRlZiBfY2xlYXIoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IE5vbmUKICAgIHNlbGYuZGF0YSA9IFtdCiAgICBzZWxmLmJ5dGVfY291bnQgPSAwCgoKY2xhc3MgQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtKE91dHB1dFN0cmVhbSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHN0cmVhbS5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgIyBOb3RlIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGFueSBvZiB0aGUgZGF0YSBpbml0aWFsaXplZCBieSBvdXIgc3VwZXIuCiAgICBzdXBlcihCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuY291bnQgPSAwCgogIGRlZiB3cml0ZShzZWxmLCBieXRlX2FycmF5LCBuZXN0ZWQ9RmFsc2UpOgogICAgIyB0eXBlOiAoYnl0ZXMsIGJvb2wpIC0+IE5vbmUKICAgIGJsZW4gPSBsZW4oYnl0ZV9hcnJheSkKICAgIGlmIG5lc3RlZDoKICAgICAgc2VsZi53cml0ZV92YXJfaW50NjQoYmxlbikKICAgIHNlbGYuY291bnQgKz0gYmxlbgoKICBkZWYgd3JpdGVfYnl0ZShzZWxmLCBfKToKICAgIHNlbGYuY291bnQgKz0gMQoKICBkZWYgZ2V0X2NvdW50KHNlbGYpOgogICAgcmV0dXJuIHNlbGYuY291bnQKCiAgZGVmIGdldChzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJzwlcyAlcz4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmNvdW50KQoKCmNsYXNzIElucHV0U3RyZWFtKG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHN0cmVhbS5JbnB1dFN0cmVhbS4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CiAgICAjIHR5cGU6IChieXRlcykgLT4gTm9uZQogICAgc2VsZi5kYXRhID0gZGF0YQogICAgc2VsZi5wb3MgPSAwCgogICAgIyBUaGUgYmVoYXZpb3Igb2YgbG9vcGluZyBvdmVyIGEgYnl0ZS1zdHJpbmcgYW5kIG9idGFpbmluZyBieXRlIGNoYXJhY3RlcnMKICAgICMgaGFzIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHB5dGhvbiAyIGFuZCAzLgogICAgIyBiID0gYidceGZmXHgwMScKICAgICMgUHl0aG9uIDI6CiAgICAjIGJbMF0gPSAnXHhmZicKICAgICMgb3JkKGJbMF0pID0gMjU1CiAgICAjIFB5dGhvbiAzOgogICAgIyBiWzBdID0gMjU1CiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDM6CiAgICAgIHNlbGYucmVhZF9ieXRlID0gc2VsZi5yZWFkX2J5dGVfcHkzCiAgICBlbHNlOgogICAgICBzZWxmLnJlYWRfYnl0ZSA9IHNlbGYucmVhZF9ieXRlX3B5MgoKICBkZWYgc2l6ZShzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5kYXRhKSAtIHNlbGYucG9zCgogIGRlZiByZWFkKHNlbGYsIHNpemUpOgogICAgIyB0eXBlOiAoaW50KSAtPiBieXRlcwogICAgc2VsZi5wb3MgKz0gc2l6ZQogICAgcmV0dXJuIHNlbGYuZGF0YVtzZWxmLnBvcyAtIHNpemU6c2VsZi5wb3NdCgogIGRlZiByZWFkX2FsbChzZWxmLCBuZXN0ZWQpOgogICAgIyB0eXBlOiAoYm9vbCkgLT4gYnl0ZXMKICAgIHJldHVybiBzZWxmLnJlYWQoc2VsZi5yZWFkX3Zhcl9pbnQ2NCgpIGlmIG5lc3RlZCBlbHNlIHNlbGYuc2l6ZSgpKQoKICBkZWYgcmVhZF9ieXRlX3B5MihzZWxmKToKICAgICMgdHlwZTogKCkgLT4gaW50CiAgICBzZWxmLnBvcyArPSAxCiAgICAjIG15cHkgdGVzdHMgYWdhaW5zdCBweXRob24gMy54LCB3aGVyZSB0aGlzIGlzIGFuIGVycm9yOgogICAgcmV0dXJuIG9yZChzZWxmLmRhdGFbc2VsZi5wb3MgLSAxXSkgICMgdHlwZTogaWdub3JlW2FyZy10eXBlXQoKICBkZWYgcmVhZF9ieXRlX3B5MyhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gaW50CiAgICBzZWxmLnBvcyArPSAxCiAgICByZXR1cm4gc2VsZi5kYXRhW3NlbGYucG9zIC0gMV0KCiAgZGVmIHJlYWRfdmFyX2ludDY0KHNlbGYpOgogICAgc2hpZnQgPSAwCiAgICByZXN1bHQgPSAwCiAgICB3aGlsZSBUcnVlOgogICAgICBieXRlID0gc2VsZi5yZWFkX2J5dGUoKQogICAgICBpZiBieXRlIDwgMDoKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1Zhckxvbmcgbm90IHRlcm1pbmF0ZWQuJykKCiAgICAgIGJpdHMgPSBieXRlICYgMHg3RgogICAgICBpZiBzaGlmdCA+PSA2NCBvciAoc2hpZnQgPj0gNjMgYW5kIGJpdHMgPiAxKToKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1ZhckxvbmcgdG9vIGxvbmcuJykKICAgICAgcmVzdWx0IHw9IGJpdHMgPDwgc2hpZnQKICAgICAgc2hpZnQgKz0gNwogICAgICBpZiBub3QgYnl0ZSAmIDB4ODA6CiAgICAgICAgYnJlYWsKICAgIGlmIHJlc3VsdCA+PSAxIDw8IDYzOgogICAgICByZXN1bHQgLT0gMSA8PCA2NAogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgcmVhZF9iaWdlbmRpYW5faW50NjQoc2VsZik6CiAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPnEnLCBzZWxmLnJlYWQoOCkpWzBdCgogIGRlZiByZWFkX2JpZ2VuZGlhbl91aW50NjQoc2VsZik6CiAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPlEnLCBzZWxmLnJlYWQoOCkpWzBdCgogIGRlZiByZWFkX2JpZ2VuZGlhbl9pbnQzMihzZWxmKToKICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+aScsIHNlbGYucmVhZCg0KSlbMF0KCiAgZGVmIHJlYWRfYmlnZW5kaWFuX2RvdWJsZShzZWxmKToKICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+ZCcsIHNlbGYucmVhZCg4KSlbMF0KCgpkZWYgZ2V0X3ZhcmludF9zaXplKHYpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gaW50ZWdlciB2YWx1ZSB3aGVuIGVuY29kZSBhcyBhIFZhckludC4iIiIKICBpZiB2IDwgMDoKICAgIHYgKz0gMSA8PCA2NAogICAgaWYgdiA8PSAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdWYWx1ZSB0b28gbGFyZ2UgKG5lZ2F0aXZlKS4nKQogIHZhcmludF9zaXplID0gMAogIHdoaWxlIFRydWU6CiAgICB2YXJpbnRfc2l6ZSArPSAxCiAgICB2ID4+PSA3CiAgICBpZiBub3QgdjoKICAgICAgYnJlYWsKICByZXR1cm4gdmFyaW50X3NpemUKlH2UKIwVT3V0cHV0U3RyZWFtLl9faW5pdF9flGpWMQEASyVLJ4eUjBJPdXRwdXRTdHJlYW0ud3JpdGWUalYxAQBLKUsvh5SMF091dHB1dFN0cmVhbS53cml0ZV9ieXRllGpWMQEASzFLM4eUjBxPdXRwdXRTdHJlYW0ud3JpdGVfdmFyX2ludDY0lGpWMQEASzVLQoeUjCJPdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX2ludDY0lGpWMQEAS0RLRYeUjCNPdXRwdXRTdHJlYW0ud3JpdGVfYmlnZW5kaWFuX3VpbnQ2NJRqVjEBAEtHS0iHlIwiT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9pbnQzMpRqVjEBAEtKS0uHlIwjT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9kb3VibGWUalYxAQBLTUtOh5SMEE91dHB1dFN0cmVhbS5nZXSUalYxAQBLUEtSh5SMEU91dHB1dFN0cmVhbS5zaXpllGpWMQEAS1RLVoeUjBNPdXRwdXRTdHJlYW0uX2NsZWFylGpWMQEAS1hLW4eUjAxPdXRwdXRTdHJlYW2Ual0xAQBLIUtbh5SMIUJ5dGVDb3VudGluZ091dHB1dFN0cmVhbS5fX2luaXRfX5RqVjEBAEtiS2WHlIweQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLndyaXRllGpWMQEAS2dLbIeUjCNCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0ud3JpdGVfYnl0ZZRqVjEBAEtuS2+HlIwiQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLmdldF9jb3VudJRqVjEBAEtxS3KHlIwcQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLmdldJRqVjEBAEt0S3WHlIwgQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtLl9fc3RyX1+UalYxAQBLd0t4h5SMGEJ5dGVDb3VudGluZ091dHB1dFN0cmVhbZRqXTEBAEteS3iHlIwUSW5wdXRTdHJlYW0uX19pbml0X1+UalYxAQBLf0uPh5SMEElucHV0U3RyZWFtLnNpemWUalYxAQBLkUuSh5SMEElucHV0U3RyZWFtLnJlYWSUalYxAQBLlEuXh5SMFElucHV0U3RyZWFtLnJlYWRfYWxslGpWMQEAS5lLm4eUjBlJbnB1dFN0cmVhbS5yZWFkX2J5dGVfcHkylGpWMQEAS51LoYeUjBlJbnB1dFN0cmVhbS5yZWFkX2J5dGVfcHkzlGpWMQEAS6NLpoeUjBpJbnB1dFN0cmVhbS5yZWFkX3Zhcl9pbnQ2NJRqVjEBAEuoS7mHlIwgSW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5faW50NjSUalYxAQBLu0u8h5SMIUlucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX3VpbnQ2NJRqVjEBAEu+S7+HlIwgSW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5faW50MzKUalYxAQBLwUvCh5SMIUlucHV0U3RyZWFtLnJlYWRfYmlnZW5kaWFuX2RvdWJsZZRqVjEBAEvES8WHlIwLSW5wdXRTdHJlYW2Ual0xAQBLe0vFh5SMD2dldF92YXJpbnRfc2l6ZZRqVjEBAEvIS9aHlHV9lCiMDE91dHB1dFN0cmVhbZRq4wMAAIwST3V0cHV0U3RyZWFtLndyaXRllGrjAwAAjBdPdXRwdXRTdHJlYW0ud3JpdGVfYnl0ZZRq4wMAAIwcT3V0cHV0U3RyZWFtLndyaXRlX3Zhcl9pbnQ2NJRq4wMAAIwiT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl9pbnQ2NJRq4wMAAIwjT3V0cHV0U3RyZWFtLndyaXRlX2JpZ2VuZGlhbl91aW50NjSUauMDAACMIk91dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5faW50MzKUauMDAACMI091dHB1dFN0cmVhbS53cml0ZV9iaWdlbmRpYW5fZG91YmxllGrjAwAAjBBPdXRwdXRTdHJlYW0uZ2V0lGrjAwAAjBFPdXRwdXRTdHJlYW0uc2l6ZZRq4wMAAIwYQnl0ZUNvdW50aW5nT3V0cHV0U3RyZWFtlGrjAwAAjB5CeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0ud3JpdGWUauMDAACMI0J5dGVDb3VudGluZ091dHB1dFN0cmVhbS53cml0ZV9ieXRllGrjAwAAjCJCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uZ2V0X2NvdW50lGrjAwAAjBxCeXRlQ291bnRpbmdPdXRwdXRTdHJlYW0uZ2V0lGrjAwAAjAtJbnB1dFN0cmVhbZRq4wMAAIwQSW5wdXRTdHJlYW0uc2l6ZZRq4wMAAIwQSW5wdXRTdHJlYW0ucmVhZJRq4wMAAIwUSW5wdXRTdHJlYW0ucmVhZF9hbGyUauMDAACMGUlucHV0U3RyZWFtLnJlYWRfYnl0ZV9weTKUauMDAACMGUlucHV0U3RyZWFtLnJlYWRfYnl0ZV9weTOUauMDAACMGklucHV0U3RyZWFtLnJlYWRfdmFyX2ludDY0lGrjAwAAjCBJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9pbnQ2NJRq4wMAAIwhSW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5fdWludDY0lGrjAwAAjCBJbnB1dFN0cmVhbS5yZWFkX2JpZ2VuZGlhbl9pbnQzMpRq4wMAAIwhSW5wdXRTdHJlYW0ucmVhZF9iaWdlbmRpYW5fZG91YmxllGrjAwAAjA9nZXRfdmFyaW50X3NpemWUauMDAAB1jB5hcGFjaGVfYmVhbS5jb2RlcnMuc2xvd19zdHJlYW2UdJSMEWFwYWNoZV9iZWFtLmVycm9ylChYNgYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUHl0aG9uIERhdGFmbG93IGVycm9yIGNsYXNzZXMuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKCmNsYXNzIEJlYW1FcnJvcihFeGNlcHRpb24pOgogICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBCZWFtIGVycm9ycy4iIiIKCgpjbGFzcyBQaXBlbGluZUVycm9yKEJlYW1FcnJvcik6CiAgIiIiQW4gZXJyb3IgaW4gdGhlIHBpcGVsaW5lIG9iamVjdCAoZS5nLiBhIFBWYWx1ZSBub3QgbGlua2VkIHRvIGl0KS4iIiIKCgpjbGFzcyBQVmFsdWVFcnJvcihCZWFtRXJyb3IpOgogICIiIkFuIGVycm9yIHJlbGF0ZWQgdG8gYSBQVmFsdWUgb2JqZWN0IChlLmcuIHZhbHVlIGlzIG5vdCBjb21wdXRlZCkuIiIiCgoKY2xhc3MgUnVubmVyRXJyb3IoQmVhbUVycm9yKToKICAiIiJBbiBlcnJvciByZWxhdGVkIHRvIGEgUnVubmVyIG9iamVjdCAoZS5nLiBjYW5ub3QgZmluZCBhIHJ1bm5lciB0byBydW4pLiIiIgoKCmNsYXNzIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3IoUnVudGltZUVycm9yKToKICAiIiJBbiBlcnJvciByZWxhdGVkIHRvIGEgVmFsdWVQcm92aWRlciBvYmplY3QgcmFpc2VkIGR1cmluZyBydW50aW1lLiIiIgoKCmNsYXNzIFNpZGVJbnB1dEVycm9yKEJlYW1FcnJvcik6CiAgIiIiQW4gZXJyb3IgcmVsYXRlZCB0byBhIHNpZGUgaW5wdXQgdG8gYSBwYXJhbGxlbCBEbyBvcGVyYXRpb24uIiIiCgoKY2xhc3MgVHJhbnNmb3JtRXJyb3IoQmVhbUVycm9yKToKICAiIiJBbiBlcnJvciByZWxhdGVkIHRvIGEgUFRyYW5zZm9ybSBvYmplY3QuIiIiCpR9lCiMCUJlYW1FcnJvcpRqXTEBAEsZSxqHlIwNUGlwZWxpbmVFcnJvcpRqXTEBAEsdSx6HlIwLUFZhbHVlRXJyb3KUal0xAQBLIUsih5SMC1J1bm5lckVycm9ylGpdMQEASyVLJoeUjBlSdW50aW1lVmFsdWVQcm92aWRlckVycm9ylGpdMQEASylLKoeUjA5TaWRlSW5wdXRFcnJvcpRqXTEBAEstSy6HlIwOVHJhbnNmb3JtRXJyb3KUal0xAQBLMUsyh5R1fZQoan93AABq1AMAAGqBdwAAatQDAABqg3cAAGrUAwAAaoV3AABq1AMAAGqHdwAAatQDAABqiXcAAGrUAwAAaot3AABq1AMAAHWMEWFwYWNoZV9iZWFtLmVycm9ylHSUjB1hcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuYXV0aJQoWOsSAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkRhdGFmbG93IGNyZWRlbnRpYWxzIGFuZCBhdXRoZW50aWNhdGlvbi4iIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgc29ja2V0CmltcG9ydCB0aHJlYWRpbmcKCmZyb20gb2F1dGgyY2xpZW50LmNsaWVudCBpbXBvcnQgR29vZ2xlQ3JlZGVudGlhbHMKCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5CgojIFByb3RlY3QgYWdhaW5zdCBlbnZpcm9ubWVudHMgd2hlcmUgYXBpdG9vbHMgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLgp0cnk6CiAgZnJvbSBhcGl0b29scy5iYXNlLnB5LmNyZWRlbnRpYWxzX2xpYiBpbXBvcnQgR2NlQXNzZXJ0aW9uQ3JlZGVudGlhbHMKZXhjZXB0IEltcG9ydEVycm9yOgogIEdjZUFzc2VydGlvbkNyZWRlbnRpYWxzID0gTm9uZQoKIyBXaGVuIHdlIGFyZSBydW5uaW5nIGluIEdDRSwgd2UgY2FuIGF1dGhlbnRpY2F0ZSB3aXRoIFZNIGNyZWRlbnRpYWxzLgppc19ydW5uaW5nX2luX2djZSA9IEZhbHNlCgojIFdoZW4gd2UgYXJlIHJ1bm5pbmcgaW4gR0NFLCB0aGlzIHZhbHVlIGlzIHNldCBiYXNlZCBvbiB3b3JrZXIgc3RhcnR1cAojIGluZm9ybWF0aW9uLgpleGVjdXRpbmdfcHJvamVjdCA9IE5vbmUKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCmlmIEdjZUFzc2VydGlvbkNyZWRlbnRpYWxzIGlzIG5vdCBOb25lOgoKICBjbGFzcyBfR2NlQXNzZXJ0aW9uQ3JlZGVudGlhbHMoR2NlQXNzZXJ0aW9uQ3JlZGVudGlhbHMpOgogICAgIiIiR2NlQXNzZXJ0aW9uQ3JlZGVudGlhbHMgd2l0aCByZXRyeSB3cmFwcGVyLgoKICAgIEZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAgICIiIgogICAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgICBkZWYgX2RvX3JlZnJlc2hfcmVxdWVzdChzZWxmLCBodHRwX3JlcXVlc3QpOgogICAgICByZXR1cm4gc3VwZXIoX0djZUFzc2VydGlvbkNyZWRlbnRpYWxzLAogICAgICAgICAgICAgICAgICAgc2VsZikuX2RvX3JlZnJlc2hfcmVxdWVzdChodHRwX3JlcXVlc3QpCgoKZGVmIHNldF9ydW5uaW5nX2luX2djZSh3b3JrZXJfZXhlY3V0aW5nX3Byb2plY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgSW5mb3JtcyB0aGUgYXV0aGVudGljYXRpb24gbGlicmFyeSB0aGF0IHdlIGFyZSBydW5uaW5nIGluIEdDRS4KCiAgV2hlbiB3ZSBhcmUgcnVubmluZyBpbiBHQ0UsIHdlIGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyB0aGUgVk0gbWV0YWRhdGEKICBjcmVkZW50aWFscyBmb3IgYXV0aGVudGljYXRpb24gdG8gR29vZ2xlIHNlcnZpY2VzLgoKICBBcmdzOgogICAgd29ya2VyX2V4ZWN1dGluZ19wcm9qZWN0OiBUaGUgcHJvamVjdCBydW5uaW5nIHRoZSB3b3JrZmxvdy4gVGhpcyBpbmZvcm1hdGlvbgogICAgICBjb21lcyBmcm9tIHdvcmtlciBzdGFydHVwIGluZm9ybWF0aW9uLgogICIiIgogIGdsb2JhbCBpc19ydW5uaW5nX2luX2djZQogIGdsb2JhbCBleGVjdXRpbmdfcHJvamVjdAogIGlzX3J1bm5pbmdfaW5fZ2NlID0gVHJ1ZQogIGV4ZWN1dGluZ19wcm9qZWN0ID0gd29ya2VyX2V4ZWN1dGluZ19wcm9qZWN0CgoKZGVmIGdldF9zZXJ2aWNlX2NyZWRlbnRpYWxzKCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBHZXQgY3JlZGVudGlhbHMgdG8gYWNjZXNzIEdvb2dsZSBzZXJ2aWNlcy4KCiAgUmV0dXJuczoKICAgIEEgYGBvYXV0aDJjbGllbnQuY2xpZW50Lk9BdXRoMkNyZWRlbnRpYWxzYGAgb2JqZWN0IG9yIE5vbmUgaWYgY3JlZGVudGlhbHMKICAgIG5vdCBmb3VuZC4gUmV0dXJuZWQgb2JqZWN0IGlzIHRocmVhZC1zYWZlLgogICIiIgogIHJldHVybiBfQ3JlZGVudGlhbHMuZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHMoKQoKCmNsYXNzIF9DcmVkZW50aWFscyhvYmplY3QpOgogIF9jcmVkZW50aWFsc19sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogIF9jcmVkZW50aWFsc19pbml0ID0gRmFsc2UKICBfY3JlZGVudGlhbHMgPSBOb25lCgogIEBjbGFzc21ldGhvZAogIGRlZiBnZXRfc2VydmljZV9jcmVkZW50aWFscyhjbHMpOgogICAgaWYgY2xzLl9jcmVkZW50aWFsc19pbml0OgogICAgICByZXR1cm4gY2xzLl9jcmVkZW50aWFscwoKICAgIHdpdGggY2xzLl9jcmVkZW50aWFsc19sb2NrOgogICAgICBpZiBjbHMuX2NyZWRlbnRpYWxzX2luaXQ6CiAgICAgICAgcmV0dXJuIGNscy5fY3JlZGVudGlhbHMKCiAgICAgICMgYXBpdG9vbHMgdXNlIHVybGxpYiB3aXRoIHRoZSBnbG9iYWwgdGltZW91dC4gU2V0IGl0IHRvIDYwIHNlY29uZHMKICAgICAgIyB0byBwcmV2ZW50IG5ldHdvcmsgcmVsYXRlZCBzdHVja25lc3MgaXNzdWVzLgogICAgICBpZiBub3Qgc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCk6CiAgICAgICAgX0xPR0dFUi5pbmZvKCJTZXR0aW5nIHNvY2tldCBkZWZhdWx0IHRpbWVvdXQgdG8gNjAgc2Vjb25kcy4iKQogICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKICAgICAgX0xPR0dFUi5pbmZvKAogICAgICAgICAgInNvY2tldCBkZWZhdWx0IHRpbWVvdXQgaXMgJXMgc2Vjb25kcy4iLCBzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSkKCiAgICAgIGNscy5fY3JlZGVudGlhbHMgPSBjbHMuX2dldF9zZXJ2aWNlX2NyZWRlbnRpYWxzKCkKICAgICAgY2xzLl9jcmVkZW50aWFsc19pbml0ID0gVHJ1ZQoKICAgIHJldHVybiBjbHMuX2NyZWRlbnRpYWxzCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2dldF9zZXJ2aWNlX2NyZWRlbnRpYWxzKCk6CiAgICBpZiBpc19ydW5uaW5nX2luX2djZToKICAgICAgIyBXZSBhcmUgY3VycmVudGx5IHJ1bm5pbmcgYXMgYSBHQ0UgdGFza3J1bm5lciB3b3JrZXIuCiAgICAgIHJldHVybiBfR2NlQXNzZXJ0aW9uQ3JlZGVudGlhbHModXNlcl9hZ2VudD0nYmVhbS1weXRob24tc2RrLzEuMCcpCiAgICBlbHNlOgogICAgICBjbGllbnRfc2NvcGVzID0gWwogICAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvYmlncXVlcnknLAogICAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvY2xvdWQtcGxhdGZvcm0nLAogICAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvZGV2c3RvcmFnZS5mdWxsX2NvbnRyb2wnLAogICAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvdXNlcmluZm8uZW1haWwnLAogICAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvZGF0YXN0b3JlJywKICAgICAgICAgICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL3NwYW5uZXIuYWRtaW4nLAogICAgICAgICAgJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvc3Bhbm5lci5kYXRhJwogICAgICBdCiAgICAgIHRyeToKICAgICAgICBjcmVkZW50aWFscyA9IEdvb2dsZUNyZWRlbnRpYWxzLmdldF9hcHBsaWNhdGlvbl9kZWZhdWx0KCkKICAgICAgICBjcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzLmNyZWF0ZV9zY29wZWQoY2xpZW50X3Njb3BlcykKICAgICAgICBsb2dnaW5nLmRlYnVnKAogICAgICAgICAgICAnQ29ubmVjdGluZyB1c2luZyBHb29nbGUgQXBwbGljYXRpb24gRGVmYXVsdCAnCiAgICAgICAgICAgICdDcmVkZW50aWFscy4nKQogICAgICAgIHJldHVybiBjcmVkZW50aWFscwogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgICAnVW5hYmxlIHRvIGZpbmQgZGVmYXVsdCBjcmVkZW50aWFscyB0byB1c2U6ICVzXG4nCiAgICAgICAgICAgICdDb25uZWN0aW5nIGFub255bW91c2x5LicsCiAgICAgICAgICAgIGUpCiAgICAgICAgcmV0dXJuIE5vbmUKlH2UKIwsX0djZUFzc2VydGlvbkNyZWRlbnRpYWxzLl9kb19yZWZyZXNoX3JlcXVlc3SUalYxAQBLNks6h5SMGF9HY2VBc3NlcnRpb25DcmVkZW50aWFsc5RqXTEBAEsxSzqHlIwSc2V0X3J1bm5pbmdfaW5fZ2NllGpWMQEASz1LTIeUjBdnZXRfc2VydmljZV9jcmVkZW50aWFsc5RqVjEBAEtPS1iHlIwkX0NyZWRlbnRpYWxzLmdldF9zZXJ2aWNlX2NyZWRlbnRpYWxzlGpWMQEAS2BLdIeUjCVfQ3JlZGVudGlhbHMuX2dldF9zZXJ2aWNlX2NyZWRlbnRpYWxzlGpWMQEAS3ZLkYeUjAxfQ3JlZGVudGlhbHOUal0xAQBLW0uRh5R1fZQojBJzZXRfcnVubmluZ19pbl9nY2WUatgDAACMF2dldF9zZXJ2aWNlX2NyZWRlbnRpYWxzlGrYAwAAdYwdYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmF1dGiUdJSMI2FwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVllChY2xcAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiSlNPTiBjb252ZXJzaW9uIHV0aWxpdHkgZnVuY3Rpb25zLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgbG9uZwpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgVmFsdWVQcm92aWRlcgoKIyBQcm90ZWN0IGFnYWluc3QgZW52aXJvbm1lbnRzIHdoZXJlIGFwaXRvb2xzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4KIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KdHJ5OgogIGZyb20gYXBpdG9vbHMuYmFzZS5weSBpbXBvcnQgZXh0cmFfdHlwZXMKZXhjZXB0IEltcG9ydEVycm9yOgogIGV4dHJhX3R5cGVzID0gTm9uZQojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgpfTUFYSU5UNjQgPSAoMSA8PCA2MykgLSAxCl9NSU5JTlQ2NCA9IC0oMSA8PCA2MykKCgpkZWYgZ2V0X3R5cGVkX3ZhbHVlX2Rlc2NyaXB0b3Iob2JqKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIENvbnZlcnRzIGEgYmFzaWMgdHlwZSBpbnRvIGEgQHR5cGUvdmFsdWUgZGljdGlvbmFyeS4KCiAgQXJnczoKICAgIG9iajogQSBieXRlcywgdW5pY29kZSwgYm9vbCwgaW50LCBvciBmbG9hdCB0byBiZSBjb252ZXJ0ZWQuCgogIFJldHVybnM6CiAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUga2V5cyBgYEB0eXBlYGAgYW5kIGBgdmFsdWVgYCB3aXRoIHRoZSB2YWx1ZSBmb3IKICAgIHRoZSBgYEB0eXBlYGAgb2YgYXBwcm9wcmlhdGUgdHlwZS4KCiAgUmFpc2VzOgogICAgVHlwZUVycm9yOiBpZiB0aGUgUHl0aG9uIG9iamVjdCBoYXMgYSB0eXBlIHRoYXQgaXMgbm90CiAgICAgIHN1cHBvcnRlZC4KICAiIiIKICBpZiBpc2luc3RhbmNlKG9iaiwgKGJ5dGVzLCB1bmljb2RlKSk6CiAgICB0eXBlX25hbWUgPSAnVGV4dCcKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBib29sKToKICAgIHR5cGVfbmFtZSA9ICdCb29sZWFuJwogIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCk6CiAgICB0eXBlX25hbWUgPSAnSW50ZWdlcicKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBmbG9hdCk6CiAgICB0eXBlX25hbWUgPSAnRmxvYXQnCiAgZWxzZToKICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGdldCBhIHR5cGUgZGVzY3JpcHRvciBmb3IgJXMuJyAlIHJlcHIob2JqKSkKICByZXR1cm4geydAdHlwZSc6ICdodHRwOi8vc2NoZW1hLm9yZy8lcycgJSB0eXBlX25hbWUsICd2YWx1ZSc6IG9ian0KCgpkZWYgdG9fanNvbl92YWx1ZShvYmosIHdpdGhfdHlwZT1GYWxzZSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBDb252ZXJ0cyBQeXRob24gb2JqZWN0cyBpbnRvIGV4dHJhX3R5cGVzLkpzb25WYWx1ZSBvYmplY3RzLgoKICBBcmdzOgogICAgb2JqOiBQeXRob24gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZC4gQ2FuIGJlIDpkYXRhOmBOb25lYC4KICAgIHdpdGhfdHlwZTogSWYgdHJ1ZSB0aGVuIHRoZSBiYXNpYyB0eXBlcyAoYGBieXRlc2BgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwKICAgICAgYGBmbG9hdGBgLCBgYGJvb2xgYCkgd2lsbCBiZSB3cmFwcGVkIGluIGBgQHR5cGU6dmFsdWVgYCBkaWN0aW9uYXJpZXMuCiAgICAgIE90aGVyd2lzZSB0aGUgc3RyYWlnaHQgdmFsdWUgaXMgZW5jb2RlZCBpbnRvIGEgYGBKc29uVmFsdWVgYC4KCiAgUmV0dXJuczoKICAgIEEgYGBKc29uVmFsdWVgYCBvYmplY3QgdXNpbmcgYGBKc29uVmFsdWVgYCwgYGBKc29uQXJyYXlgYCBhbmQgYGBKc29uT2JqZWN0YGAKICAgIHR5cGVzIGZvciB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMsIGxpc3RzLCBvciBkaWN0aW9uYXJpZXMuCgogIFJhaXNlczoKICAgIFR5cGVFcnJvcjogaWYgdGhlIFB5dGhvbiBvYmplY3QgY29udGFpbnMgYSB0eXBlIHRoYXQgaXMgbm90CiAgICAgIHN1cHBvcnRlZC4KCiAgVGhlIHR5cGVzIHN1cHBvcnRlZCBhcmUgYGBzdHJgYCwgYGBib29sYGAsIGBgbGlzdGBgLCBgYHR1cGxlYGAsIGBgZGljdGBgLCBhbmQKICBgYE5vbmVgYC4gVGhlIERhdGFmbG93IEFQSSByZXF1aXJlcyBKc29uVmFsdWUocykgaW4gbWFueSBwbGFjZXMsIGFuZCBpdCBpcwogIHF1aXRlIGNvbnZlbmllbnQgdG8gYmUgYWJsZSB0byBzcGVjaWZ5IHRoZXNlIGhpZXJhcmNoaWNhbCBvYmplY3RzIHVzaW5nCiAgUHl0aG9uIHN5bnRheC4KICAiIiIKICBpZiBvYmogaXMgTm9uZToKICAgIHJldHVybiBleHRyYV90eXBlcy5Kc29uVmFsdWUoaXNfbnVsbD1UcnVlKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIChsaXN0LCB0dXBsZSkpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZSgKICAgICAgICBhcnJheV92YWx1ZT1leHRyYV90eXBlcy5Kc29uQXJyYXkoCiAgICAgICAgICAgIGVudHJpZXM9W3RvX2pzb25fdmFsdWUobywgd2l0aF90eXBlPXdpdGhfdHlwZSkgZm9yIG8gaW4gb2JqXSkpCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CiAgICBqc29uX29iamVjdCA9IGV4dHJhX3R5cGVzLkpzb25PYmplY3QoKQogICAgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCk6CiAgICAgIGpzb25fb2JqZWN0LnByb3BlcnRpZXMuYXBwZW5kKAogICAgICAgICAgZXh0cmFfdHlwZXMuSnNvbk9iamVjdC5Qcm9wZXJ0eSgKICAgICAgICAgICAgICBrZXk9aywgdmFsdWU9dG9fanNvbl92YWx1ZSh2LCB3aXRoX3R5cGU9d2l0aF90eXBlKSkpCiAgICByZXR1cm4gZXh0cmFfdHlwZXMuSnNvblZhbHVlKG9iamVjdF92YWx1ZT1qc29uX29iamVjdCkKICBlbGlmIHdpdGhfdHlwZToKICAgIHJldHVybiB0b19qc29uX3ZhbHVlKGdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yKG9iaiksIHdpdGhfdHlwZT1GYWxzZSkKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCAoc3RyLCB1bmljb2RlKSk6CiAgICByZXR1cm4gZXh0cmFfdHlwZXMuSnNvblZhbHVlKHN0cmluZ192YWx1ZT1vYmopCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgYnl0ZXMpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShzdHJpbmdfdmFsdWU9b2JqLmRlY29kZSgndXRmOCcpKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIGJvb2wpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShib29sZWFuX3ZhbHVlPW9iaikKICBlbGlmIGlzaW5zdGFuY2Uob2JqLCAoaW50LCBsb25nKSk6CiAgICBpZiBfTUlOSU5UNjQgPD0gb2JqIDw9IF9NQVhJTlQ2NDoKICAgICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShpbnRlZ2VyX3ZhbHVlPW9iaikKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2FuIG5vdCBlbmNvZGUge30gYXMgYSA2NC1iaXQgaW50ZWdlcicuZm9ybWF0KG9iaikpCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZmxvYXQpOgogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShkb3VibGVfdmFsdWU9b2JqKQogIGVsaWYgaXNpbnN0YW5jZShvYmosIFZhbHVlUHJvdmlkZXIpOgogICAgaWYgb2JqLmlzX2FjY2Vzc2libGUoKToKICAgICAgcmV0dXJuIHRvX2pzb25fdmFsdWUob2JqLmdldCgpKQogICAgcmV0dXJuIGV4dHJhX3R5cGVzLkpzb25WYWx1ZShpc19udWxsPVRydWUpCiAgZWxzZToKICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgJXMgdG8gYSBKU09OIHZhbHVlLicgJSByZXByKG9iaikpCgoKZGVmIGZyb21fanNvbl92YWx1ZSh2KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIENvbnZlcnRzIGBgZXh0cmFfdHlwZXMuSnNvblZhbHVlYGAgb2JqZWN0cyBpbnRvIFB5dGhvbiBvYmplY3RzLgoKICBBcmdzOgogICAgdjogYGBKc29uVmFsdWVgYCBvYmplY3QgdG8gYmUgY29udmVydGVkLgoKICBSZXR1cm5zOgogICAgQSBQeXRob24gb2JqZWN0IHN0cnVjdHVyZWQgYXMgdmFsdWVzLCBsaXN0cywgYW5kIGRpY3Rpb25hcmllcyBjb3JyZXNwb25kaW5nCiAgICB0byBgYEpzb25WYWx1ZWBgLCBgYEpzb25BcnJheWBgIGFuZCBgYEpzb25PYmplY3RgYCB0eXBlcy4KCiAgUmFpc2VzOgogICAgVHlwZUVycm9yOiBpZiB0aGUgYGBKc29uVmFsdWVgYCBvYmplY3QgY29udGFpbnMgYSB0eXBlIHRoYXQgaXMKICAgICAgbm90IHN1cHBvcnRlZC4KCiAgVGhlIHR5cGVzIHN1cHBvcnRlZCBhcmUgYGBzdHJgYCwgYGBib29sYGAsIGBgbGlzdGBgLCBgYGRpY3RgYCwgYW5kIGBgTm9uZWBgLgogIFRoZSBEYXRhZmxvdyBBUEkgcmV0dXJucyBKc29uVmFsdWUocykgaW4gbWFueSBwbGFjZXMgYW5kIGl0IGlzIHF1aXRlCiAgY29udmVuaWVudCB0byBiZSBhYmxlIHRvIGNvbnZlcnQgdGhlc2UgaGllcmFyY2hpY2FsIG9iamVjdHMgdG8gbXVjaCBzaW1wbGVyCiAgUHl0aG9uIG9iamVjdHMuCiAgIiIiCiAgaWYgaXNpbnN0YW5jZSh2LCBleHRyYV90eXBlcy5Kc29uVmFsdWUpOgogICAgaWYgdi5zdHJpbmdfdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiB2LnN0cmluZ192YWx1ZQogICAgZWxpZiB2LmJvb2xlYW5fdmFsdWUgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiB2LmJvb2xlYW5fdmFsdWUKICAgIGVsaWYgdi5pbnRlZ2VyX3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gdi5pbnRlZ2VyX3ZhbHVlCiAgICBlbGlmIHYuZG91YmxlX3ZhbHVlIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gdi5kb3VibGVfdmFsdWUKICAgIGVsaWYgdi5hcnJheV92YWx1ZSBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIGZyb21fanNvbl92YWx1ZSh2LmFycmF5X3ZhbHVlKQogICAgZWxpZiB2Lm9iamVjdF92YWx1ZSBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIGZyb21fanNvbl92YWx1ZSh2Lm9iamVjdF92YWx1ZSkKICAgIGVsaWYgdi5pc19udWxsOgogICAgICByZXR1cm4gTm9uZQogIGVsaWYgaXNpbnN0YW5jZSh2LCBleHRyYV90eXBlcy5Kc29uQXJyYXkpOgogICAgcmV0dXJuIFtmcm9tX2pzb25fdmFsdWUoZSkgZm9yIGUgaW4gdi5lbnRyaWVzXQogIGVsaWYgaXNpbnN0YW5jZSh2LCBleHRyYV90eXBlcy5Kc29uT2JqZWN0KToKICAgIHJldHVybiB7cC5rZXk6IGZyb21fanNvbl92YWx1ZShwLnZhbHVlKSBmb3IgcCBpbiB2LnByb3BlcnRpZXN9CiAgcmFpc2UgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAlcyBmcm9tIGEgSlNPTiB2YWx1ZS4nICUgcmVwcih2KSkKlH2UKIwaZ2V0X3R5cGVkX3ZhbHVlX2Rlc2NyaXB0b3KUalYxAQBLKUtDh5SMDXRvX2pzb25fdmFsdWWUalYxAQBLRkt/h5SMD2Zyb21fanNvbl92YWx1ZZRqVjEBAEuCS6qHlHV9lCiMGmdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9ylGq6AwAAjA10b19qc29uX3ZhbHVllGq6AwAAjA9mcm9tX2pzb25fdmFsdWWUaroDAAB1jCNhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZZR0lIwgYXBhY2hlX2JlYW0uaW50ZXJuYWwuaHR0cF9jbGllbnSUKFipCQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGZvciBjcmVhdGluZyBhIGNvbW1vbiBIdHRwIGNsaWVudCBmcm9tIGh0dHBsaWIyLgoKRm9yIGludGVybmFsIHVzZSBvbmx5LiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgcmUKCmltcG9ydCBodHRwbGliMgoKIyBUaGlzIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGUgbGlicmFyeSB3aWxsIHdhaXQgZm9yIEdDUyBvcGVyYXRpb25zIHRvCiMgY29tcGxldGUuCkRFRkFVTFRfSFRUUF9USU1FT1VUX1NFQ09ORFMgPSA2MAoKCmRlZiBwcm94eV9pbmZvX2Zyb21fZW52aXJvbm1lbnRfdmFyKHByb3h5X2Vudl92YXIpOgogICIiIlJlYWRzIHByb3h5IGluZm8gZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIGNvbnZlcnRzIHRvIGh0dHBsaWIyLlByb3h5SW5mby4KCiAgQXJnczoKICAgIHByb3h5X2Vudl92YXI6IGVudmlyb25tZW50IHZhcmlhYmxlIHN0cmluZyB0byByZWFkLCBodHRwX3Byb3h5IG9yCiAgICAgICBodHRwc19wcm94eSAoaW4gbG93ZXIgY2FzZSkuCiAgICAgICBFeGFtcGxlOiBodHRwOi8vbXlwcm94eS5kb21haW4uY29tOjgwODAKCiAgUmV0dXJuczoKICAgIGh0dHBsaWIyLlByb3h5SW5mbyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCBzdHJpbmcuCiAgIiIiCiAgcHJveHlfdXJsID0gb3MuZW52aXJvbi5nZXQocHJveHlfZW52X3ZhcikKICBpZiBub3QgcHJveHlfdXJsOgogICAgcmV0dXJuIE5vbmUKICBwcm94eV9wcm90b2NvbCA9IHByb3h5X2Vudl92YXIubG93ZXIoKS5zcGxpdCgnXycpWzBdCiAgaWYgbm90IHJlLm1hdGNoKCdeaHR0cHM/Oi8vJywgcHJveHlfdXJsLCBmbGFncz1yZS5JR05PUkVDQVNFKToKICAgIGxvZ2dpbmcud2FybmluZygKICAgICAgICAicHJveHlfaW5mb19mcm9tX3VybCByZXF1aXJlcyBhIHByb3RvY29sLCB3aGljaCBpcyBhbHdheXMgIgogICAgICAgICJodHRwIG9yIGh0dHBzLiIpCiAgICBwcm94eV91cmwgPSBwcm94eV9wcm90b2NvbCArICc6Ly8nICsgcHJveHlfdXJsCiAgcmV0dXJuIGh0dHBsaWIyLnByb3h5X2luZm9fZnJvbV91cmwocHJveHlfdXJsLCBtZXRob2Q9cHJveHlfcHJvdG9jb2wpCgoKZGVmIGdldF9uZXdfaHR0cCgpOgogICIiIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaHR0cGxpYjIuSHR0cCBpbnN0YW5jZS4KCiAgUmV0dXJuczoKICAgIEFuIGluaXRpYWxpemVkIGh0dHBsaWIyLkh0dHAgaW5zdGFuY2UuCiAgIiIiCiAgcHJveHlfaW5mbyA9IE5vbmUKICBmb3IgcHJveHlfZW52X3ZhciBpbiBbJ2h0dHBfcHJveHknLCAnaHR0cHNfcHJveHknXToKICAgIGlmIG9zLmVudmlyb24uZ2V0KHByb3h5X2Vudl92YXIpOgogICAgICBwcm94eV9pbmZvID0gcHJveHlfaW5mb19mcm9tX2Vudmlyb25tZW50X3Zhcihwcm94eV9lbnZfdmFyKQogICAgICBicmVhawogICMgVXNlIGEgbm9uLWluZmluaXRlIFNTTCB0aW1lb3V0IHRvIGF2b2lkIGhhbmdzIGR1cmluZyBuZXR3b3JrIGZsYWtpbmVzcy4KICByZXR1cm4gaHR0cGxpYjIuSHR0cCgKICAgICAgcHJveHlfaW5mbz1wcm94eV9pbmZvLCB0aW1lb3V0PURFRkFVTFRfSFRUUF9USU1FT1VUX1NFQ09ORFMpCpR9lCiMH3Byb3h5X2luZm9fZnJvbV9lbnZpcm9ubWVudF92YXKUalYxAQBLJUs5h5SMDGdldF9uZXdfaHR0cJRqVjEBAEs8S0mHlHV9lCiMH3Byb3h5X2luZm9fZnJvbV9lbnZpcm9ubWVudF92YXKUahoEAACMDGdldF9uZXdfaHR0cJRqGgQAAHWMIGFwYWNoZV9iZWFtLmludGVybmFsLmh0dHBfY2xpZW50lHSUjBxhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVylChYnSkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUGlja2xlciBmb3IgdmFsdWVzLCBmdW5jdGlvbnMsIGFuZCBjbGFzc2VzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5LiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKUGlja2xlcyBjcmVhdGVkIGJ5IHRoZSBwaWNrbGluZyBsaWJyYXJ5IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIHNvCndlIGJhc2U2NC1lbmNvZGUgdGhlIHJlc3VsdHMgc28gdGhhdCB3ZSBjYW4gcHV0IHRoZW0gaW4gYSBKU09OIG9iamVjdHMuClRoZSBwaWNrbGVyIGlzIHVzZWQgdG8gZW1iZWQgRmxhdE1hcCBjYWxsYWJsZSBvYmplY3RzIGludG8gdGhlIHdvcmtmbG93IEpTT04KZGVzY3JpcHRpb24uCgpUaGUgcGlja2xlciBtb2R1bGUgc2hvdWxkIGJlIHVzZWQgdG8gcGlja2xlIGZ1bmN0aW9ucyBhbmQgbW9kdWxlczsgZm9yIHZhbHVlcywKdGhlIGNvZGVycy4qUGlja2xlQ29kZXIgY2xhc3NlcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYmFzZTY0CmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdHJhY2ViYWNrCmltcG9ydCB0eXBlcwppbXBvcnQgemxpYgpmcm9tIHR5cGluZyBpbXBvcnQgQW55CmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQoKaW1wb3J0IGRpbGwKCgpjbGFzcyBfTm9PcENvbnRleHRNYW5hZ2VyKG9iamVjdCk6CiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHBhc3MKCiAgZGVmIF9fZXhpdF9fKHNlbGYsICp1bnVzZWRfZXhjX2luZm8pOgogICAgcGFzcwoKCmlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPiAyOgogICMgUGlja2xpbmcsIGVzcGVjaWFsbHkgdW5waWNrbGluZywgY2F1c2VzIGJyb2tlbiBtb2R1bGUgaW1wb3J0cyBvbiBQeXRob24gMwogICMgaWYgZXhlY3V0ZWQgY29uY3VycmVudGx5LCBzZWU6IEJFQU0tODY1MSwgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM4ODg0LgogIHBpY2tsZV9sb2NrX3VubGVzc19weTIgPSB0aHJlYWRpbmcuUkxvY2soKQplbHNlOgogICMgQXZvaWQgc2xvdyByZWVudHJhbnQgbG9ja3Mgb24gUHkyLiBTZWU6IGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzAwMS4KICBwaWNrbGVfbG9ja191bmxlc3NfcHkyID0gX05vT3BDb250ZXh0TWFuYWdlcigpCiMgRGlsbCAwLjI4LjAgcmVuYW1lZCBkaWxsLmRpbGwgdG8gZGlsbC5fZGlsbDoKIyBodHRwczovL2dpdGh1Yi5jb20vdXFmb3VuZGF0aW9uL2RpbGwvY29tbWl0L2YwOTcyZWNjN2E0MWQwYjhhY2FkYTYwNDJkNTU3MDY4Y2FjNjliYWEKIyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIEJlYW0gZGVwZW5kcyBvbiBkaWxsID49IDAuMi44CmlmIG5vdCBnZXRhdHRyKGRpbGwsICdkaWxsJywgTm9uZSk6CiAgZGlsbC5kaWxsID0gZGlsbC5fZGlsbAogIHN5cy5tb2R1bGVzWydkaWxsLmRpbGwnXSA9IGRpbGwuX2RpbGwKCiMgVE9ETzogUmVtb3ZlIG9uY2UgRGF0YWZsb3cgaGFzIGNvbnRhaW5lcnMgd2l0aCBhIHByZWluc3RhbGxlZCBkaWxsID49IDAuMi44CmlmIG5vdCBnZXRhdHRyKGRpbGwsICdfZGlsbCcsIE5vbmUpOgogIGRpbGwuX2RpbGwgPSBkaWxsLmRpbGwKICBzeXMubW9kdWxlc1snZGlsbC5fZGlsbCddID0gZGlsbC5kaWxsCgoKZGVmIF9pc19uZXN0ZWRfY2xhc3MoY2xzKToKICAiIiJSZXR1cm5zIHRydWUgaWYgYXJndW1lbnQgaXMgYSBjbGFzcyBvYmplY3QgdGhhdCBhcHBlYXJzIHRvIGJlIG5lc3RlZC4iIiIKICByZXR1cm4gKAogICAgICBpc2luc3RhbmNlKGNscywgdHlwZSkgYW5kIGNscy5fX21vZHVsZV9fIGlzIG5vdCBOb25lIGFuZAogICAgICBjbHMuX19tb2R1bGVfXyAhPSAnYnVpbHRpbnMnICAjIFB5dGhvbiAzCiAgICAgIGFuZCBjbHMuX19tb2R1bGVfXyAhPSAnX19idWlsdGluX18nICAjIFB5dGhvbiAyCiAgICAgIGFuZCBjbHMuX19uYW1lX18gbm90IGluIHN5cy5tb2R1bGVzW2Nscy5fX21vZHVsZV9fXS5fX2RpY3RfXykKCgpkZWYgX2ZpbmRfY29udGFpbmluZ19jbGFzcyhuZXN0ZWRfY2xhc3MpOgogICIiIkZpbmRzIGNvbnRhaW5pbmcgY2xhc3Mgb2YgYSBuZXN0ZWQgY2xhc3MgcGFzc2VkIGFzIGFyZ3VtZW50LiIiIgoKICBzZWVuID0gc2V0KCkKCiAgZGVmIF9maW5kX2NvbnRhaW5pbmdfY2xhc3NfaW5uZXIob3V0ZXIpOgogICAgaWYgb3V0ZXIgaW4gc2VlbjoKICAgICAgcmV0dXJuIE5vbmUKICAgIHNlZW4uYWRkKG91dGVyKQogICAgZm9yIGssIHYgaW4gb3V0ZXIuX19kaWN0X18uaXRlbXMoKToKICAgICAgaWYgdiBpcyBuZXN0ZWRfY2xhc3M6CiAgICAgICAgcmV0dXJuIG91dGVyLCBrCiAgICAgIGVsaWYgaXNpbnN0YW5jZSh2LCB0eXBlKSBhbmQgaGFzYXR0cih2LCAnX19kaWN0X18nKToKICAgICAgICByZXMgPSBfZmluZF9jb250YWluaW5nX2NsYXNzX2lubmVyKHYpCiAgICAgICAgaWYgcmVzOiByZXR1cm4gcmVzCgogIHJldHVybiBfZmluZF9jb250YWluaW5nX2NsYXNzX2lubmVyKHN5cy5tb2R1bGVzW25lc3RlZF9jbGFzcy5fX21vZHVsZV9fXSkKCgpkZWYgX25lc3RlZF90eXBlX3dyYXBwZXIoZnVuKToKICAiIiJBIHdyYXBwZXIgZm9yIHRoZSBzdGFuZGFyZCBwaWNrbGVyIGhhbmRsZXIgZm9yIGNsYXNzIG9iamVjdHMuCgogIEFyZ3M6CiAgICBmdW46IE9yaWdpbmFsIHBpY2tsZXIgaGFuZGxlciBmb3IgdHlwZSBvYmplY3RzLgoKICBSZXR1cm5zOgogICAgQSB3cmFwcGVyIGZvciB0eXBlIG9iamVjdHMgdGhhdCBoYW5kbGVzIG5lc3RlZCBjbGFzc2VzLgoKICBUaGUgd3JhcHBlciBkZXRlY3RzIGlmIGFuIG9iamVjdCBiZWluZyBwaWNrbGVkIGlzIGEgbmVzdGVkIGNsYXNzIG9iamVjdC4KICBGb3IgbmVzdGVkIGNsYXNzIG9iamVjdCBvbmx5IGl0IHdpbGwgc2F2ZSB0aGUgY29udGFpbmluZyBjbGFzcyBvYmplY3Qgc28KICB0aGUgbmVzdGVkIHN0cnVjdHVyZSBpcyByZWNyZWF0ZWQgZHVyaW5nIHVucGlja2xlLgogICIiIgogIGRlZiB3cmFwcGVyKHBpY2tsZXIsIG9iaik6CiAgICAjIFdoZW4gdGhlIG5lc3RlZCBjbGFzcyBpcyBkZWZpbmVkIGluIHRoZSBfX21haW5fXyBtb2R1bGUgd2UgZG8gbm90IGhhdmUgdG8KICAgICMgZG8gYW55dGhpbmcgc3BlY2lhbCBiZWNhdXNlIHRoZSBwaWNrbGVyIGl0c2VsZiB3aWxsIHNhdmUgdGhlIGNvbnN0aXR1ZW50CiAgICAjIHBhcnRzIG9mIHRoZSB0eXBlIChpLmUuLCBuYW1lLCBiYXNlIGNsYXNzZXMsIGRpY3Rpb25hcnkpIGFuZCB0aGVuCiAgICAjIHJlY3JlYXRlIGl0IGR1cmluZyB1bnBpY2tsaW5nLgogICAgaWYgX2lzX25lc3RlZF9jbGFzcyhvYmopIGFuZCBvYmouX19tb2R1bGVfXyAhPSAnX19tYWluX18nOgogICAgICBjb250YWluaW5nX2NsYXNzX2FuZF9uYW1lID0gX2ZpbmRfY29udGFpbmluZ19jbGFzcyhvYmopCiAgICAgIGlmIGNvbnRhaW5pbmdfY2xhc3NfYW5kX25hbWUgaXMgbm90IE5vbmU6CiAgICAgICAgcmV0dXJuIHBpY2tsZXIuc2F2ZV9yZWR1Y2UoZ2V0YXR0ciwgY29udGFpbmluZ19jbGFzc19hbmRfbmFtZSwgb2JqPW9iaikKICAgIHRyeToKICAgICAgcmV0dXJuIGZ1bihwaWNrbGVyLCBvYmopCiAgICBleGNlcHQgZGlsbC5kaWxsLlBpY2tsaW5nRXJyb3I6CiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgcmV0dXJuIHBpY2tsZXIuc2F2ZV9yZWR1Y2UoCiAgICAgICAgICBkaWxsLmRpbGwuX2NyZWF0ZV90eXBlLAogICAgICAgICAgKAogICAgICAgICAgICAgIHR5cGUob2JqKSwKICAgICAgICAgICAgICBvYmouX19uYW1lX18sCiAgICAgICAgICAgICAgb2JqLl9fYmFzZXNfXywKICAgICAgICAgICAgICBkaWxsLmRpbGwuX2RpY3RfZnJvbV9kaWN0cHJveHkob2JqLl9fZGljdF9fKSksCiAgICAgICAgICBvYmo9b2JqKQogICAgICAjIHB5bGludDogZW5hYmxlPXByb3RlY3RlZC1hY2Nlc3MKCiAgcmV0dXJuIHdyYXBwZXIKCgojIE1vbmtleSBwYXRjaCB0aGUgc3RhbmRhcmQgcGlja2xlciBkaXNwYXRjaCB0YWJsZSBlbnRyeSBmb3IgdHlwZSBvYmplY3RzLgojIERpbGwsIGZvciBjZXJ0YWluIHR5cGVzLCBkZWZlcnMgdG8gdGhlIHN0YW5kYXJkIHBpY2tsZXIgKGluY2x1ZGluZyB0eXBlCiMgb2JqZWN0cykuIFdlIHdyYXAgdGhlIHN0YW5kYXJkIGhhbmRsZXIgdXNpbmcgdHlwZV93cmFwcGVyKCkgYmVjYXVzZQojIGZvciBuZXN0ZWQgY2xhc3Mgd2Ugd2FudCB0byBwaWNrbGUgdGhlIGFjdHVhbCBlbmNsb3NpbmcgY2xhc3Mgb2JqZWN0IHNvIHdlCiMgY2FuIHJlY3JlYXRlIGl0IGR1cmluZyB1bnBpY2tsaW5nLgojIFRPRE8oc2lsdml1Yyk6IE1ha2Ugc3VyZSB3ZSBzdWJtaXQgdGhlIGZpeCB1cHN0cmVhbSB0byBHaXRIdWIgZGlsbCBwcm9qZWN0LgpkaWxsLmRpbGwuUGlja2xlci5kaXNwYXRjaFt0eXBlXSA9IF9uZXN0ZWRfdHlwZV93cmFwcGVyKAogICAgZGlsbC5kaWxsLlBpY2tsZXIuZGlzcGF0Y2hbdHlwZV0pCgoKIyBEaWxsIHBpY2tsZXMgZ2VuZXJhdG9ycyBvYmplY3RzIHdpdGhvdXQgY29tcGxhaW50LCBidXQgdW5waWNrbGluZyBwcm9kdWNlcwojIFR5cGVFcnJvcjogb2JqZWN0Ll9fbmV3X18oZ2VuZXJhdG9yKSBpcyBub3Qgc2FmZSwgdXNlIGdlbmVyYXRvci5fX25ld19fKCkKIyBvbiBzb21lIHZlcnNpb25zIG9mIFB5dGhvbi4KZGVmIF9yZWplY3RfZ2VuZXJhdG9ycyh1bnVzZWRfcGlja2xlciwgdW51c2VkX29iaik6CiAgcmFpc2UgVHlwZUVycm9yKCJjYW4ndCAoc2FmZWx5KSBwaWNrbGUgZ2VuZXJhdG9yIG9iamVjdHMiKQoKCmRpbGwuZGlsbC5QaWNrbGVyLmRpc3BhdGNoW3R5cGVzLkdlbmVyYXRvclR5cGVdID0gX3JlamVjdF9nZW5lcmF0b3JzCgojIFRoaXMgaWYgZ3VhcmRzIGFnYWluc3QgZGlsbCBub3QgYmVpbmcgZnVsbCBpbml0aWFsaXplZCB3aGVuIGdlbmVyYXRpbmcgZG9jcy4KaWYgJ3NhdmVfbW9kdWxlJyBpbiBkaXIoZGlsbC5kaWxsKToKCiAgIyBBbHdheXMgcGlja2xlIG5vbi1tYWluIG1vZHVsZXMgYnkgbmFtZS4KICBvbGRfc2F2ZV9tb2R1bGUgPSBkaWxsLmRpbGwuc2F2ZV9tb2R1bGUKCiAgQGRpbGwuZGlsbC5yZWdpc3RlcihkaWxsLmRpbGwuTW9kdWxlVHlwZSkKICBkZWYgc2F2ZV9tb2R1bGUocGlja2xlciwgb2JqKToKICAgIGlmIGRpbGwuZGlsbC5pc19kaWxsKHBpY2tsZXIpIGFuZCBvYmogaXMgcGlja2xlci5fbWFpbjoKICAgICAgcmV0dXJuIG9sZF9zYXZlX21vZHVsZShwaWNrbGVyLCBvYmopCiAgICBlbHNlOgogICAgICBkaWxsLmRpbGwubG9nLmluZm8oJ00yOiAlcycgJSBvYmopCiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgcGlja2xlci5zYXZlX3JlZHVjZShkaWxsLmRpbGwuX2ltcG9ydF9tb2R1bGUsIChvYmouX19uYW1lX18sICksIG9iaj1vYmopCiAgICAgICMgcHlsaW50OiBlbmFibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICBkaWxsLmRpbGwubG9nLmluZm8oJyMgTTInKQoKICAjIFBpY2tsZSBtb2R1bGUgZGljdGlvbmFyaWVzIChjb21tb25seSBmb3VuZCBpbiBsYW1iZGEncyBnbG9iYWxzKQogICMgYnkgcmVmZXJlbmNpbmcgdGhlaXIgbW9kdWxlLgogIG9sZF9zYXZlX21vZHVsZV9kaWN0ID0gZGlsbC5kaWxsLnNhdmVfbW9kdWxlX2RpY3QKICBrbm93bl9tb2R1bGVfZGljdHMgPSB7CiAgfSAgIyB0eXBlOiBEaWN0W2ludCwgVHVwbGVbdHlwZXMuTW9kdWxlVHlwZSwgRGljdFtzdHIsIEFueV1dXQoKICBAZGlsbC5kaWxsLnJlZ2lzdGVyKGRpY3QpCiAgZGVmIG5ld19zYXZlX21vZHVsZV9kaWN0KHBpY2tsZXIsIG9iaik6CiAgICBvYmpfaWQgPSBpZChvYmopCiAgICBpZiBub3Qga25vd25fbW9kdWxlX2RpY3RzIG9yICdfX2ZpbGVfXycgaW4gb2JqIG9yICdfX3BhY2thZ2VfXycgaW4gb2JqOgogICAgICBpZiBvYmpfaWQgbm90IGluIGtub3duX21vZHVsZV9kaWN0czoKICAgICAgICAjIFRyaWdnZXIgbG9hZGluZyBvZiBsYXppbHkgbG9hZGVkIG1vZHVsZXMgKHN1Y2ggYXMgcHl0ZXN0IHZlbmRvcmVkCiAgICAgICAgIyBtb2R1bGVzKS4KICAgICAgICAjIFRoaXMgZmlyc3QgcGFzcyBvdmVyIHN5cy5tb2R1bGVzIG5lZWRzIHRvIGl0ZXJhdGUgb24gYSBjb3B5IG9mCiAgICAgICAgIyBzeXMubW9kdWxlcyBzaW5jZSBsYXp5IGxvYWRpbmcgbW9kaWZpZXMgdGhlIGRpY3Rpb25hcnksIGhlbmNlIHRoZSB1c2UKICAgICAgICAjIG9mIGxpc3QoKS4KICAgICAgICBmb3IgbSBpbiBsaXN0KHN5cy5tb2R1bGVzLnZhbHVlcygpKToKICAgICAgICAgIHRyeToKICAgICAgICAgICAgXyA9IG0uX19kaWN0X18KICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgcGFzcwoKICAgICAgICBmb3IgbSBpbiBzeXMubW9kdWxlcy52YWx1ZXMoKToKICAgICAgICAgIHRyeToKICAgICAgICAgICAgaWYgKG0gYW5kIG0uX19uYW1lX18gIT0gJ19fbWFpbl9fJyBhbmQKICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UobSwgZGlsbC5kaWxsLk1vZHVsZVR5cGUpKToKICAgICAgICAgICAgICBkID0gbS5fX2RpY3RfXwogICAgICAgICAgICAgIGtub3duX21vZHVsZV9kaWN0c1tpZChkKV0gPSBtLCBkCiAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICMgU2tpcCBtb2R1bGVzIHRoYXQgZG8gbm90IGhhdmUgdGhlIF9fbmFtZV9fIGF0dHJpYnV0ZS4KICAgICAgICAgICAgcGFzcwogICAgaWYgb2JqX2lkIGluIGtub3duX21vZHVsZV9kaWN0cyBhbmQgZGlsbC5kaWxsLmlzX2RpbGwocGlja2xlcik6CiAgICAgIG0gPSBrbm93bl9tb2R1bGVfZGljdHNbb2JqX2lkXVswXQogICAgICB0cnk6CiAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICAgIGRpbGwuZGlsbC5faW1wb3J0X21vZHVsZShtLl9fbmFtZV9fKQogICAgICAgIHJldHVybiBwaWNrbGVyLnNhdmVfcmVkdWNlKAogICAgICAgICAgICBnZXRhdHRyLCAoa25vd25fbW9kdWxlX2RpY3RzW29ial9pZF1bMF0sICdfX2RpY3RfXycpLCBvYmo9b2JqKQogICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgcmV0dXJuIG9sZF9zYXZlX21vZHVsZV9kaWN0KHBpY2tsZXIsIG9iaikKICAgIGVsc2U6CiAgICAgIHJldHVybiBvbGRfc2F2ZV9tb2R1bGVfZGljdChwaWNrbGVyLCBvYmopCgogIGRpbGwuZGlsbC5zYXZlX21vZHVsZV9kaWN0ID0gbmV3X3NhdmVfbW9kdWxlX2RpY3QKCiAgZGVmIF9uZXN0X2RpbGxfbG9nZ2luZygpOgogICAgIiIiUHJlZml4IGFsbCBkaWxsIGxvZ2dpbmcgd2l0aCBpdHMgZGVwdGggaW4gdGhlIGNhbGxzdGFjay4KCiAgICBVc2VmdWwgZm9yIGRlYnVnZ2luZyBwaWNrbGluZyBvZiBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZXMuCiAgICAiIiIKICAgIG9sZF9sb2dfaW5mbyA9IGRpbGwuZGlsbC5sb2cuaW5mbwoKICAgIGRlZiBuZXdfbG9nX2luZm8obXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICBvbGRfbG9nX2luZm8oCiAgICAgICAgICAoJzEgMiAzIDQgNSA2IDcgOCA5IDAgJyAqIDEwKVs6bGVuKHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKCkpXSArIG1zZywKICAgICAgICAgICphcmdzLAogICAgICAgICAgKiprd2FyZ3MpCgogICAgZGlsbC5kaWxsLmxvZy5pbmZvID0gbmV3X2xvZ19pbmZvCgoKIyBUdXJuIG9mZiB2ZXJib3NlIGxvZ2dpbmcgZnJvbSB0aGUgZGlsbCBwaWNrbGVyLgpsb2dnaW5nLmdldExvZ2dlcignZGlsbCcpLnNldExldmVsKGxvZ2dpbmcuV0FSTikKCgojIFRPRE8oY2N5KTogQ3VycmVudGx5LCB0aGVyZSBhcmUgc3RpbGwgaW5zdGFuY2VzIG9mIHBpY2tsZXIuZHVtcHMoKSBhbmQKIyBwaWNrbGVyLmxvYWRzKCkgYmVpbmcgdXNlZCBmb3IgZGF0YSwgd2hpY2ggcmVzdWx0cyBpbiBhbiB1bm5lY2Vzc2FyeSBiYXNlNjQKIyBlbmNvZGluZy4gIFRoaXMgc2hvdWxkIGJlIGNsZWFuZWQgdXAuCmRlZiBkdW1wcyhvLCBlbmFibGVfdHJhY2U9VHJ1ZSk6CiAgIyB0eXBlOiAoLi4uKSAtPiBieXRlcwoKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCiAgd2l0aCBwaWNrbGVfbG9ja191bmxlc3NfcHkyOgogICAgdHJ5OgogICAgICBzID0gZGlsbC5kdW1wcyhvKQogICAgZXhjZXB0IEV4Y2VwdGlvbjogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICBpZiBlbmFibGVfdHJhY2U6CiAgICAgICAgZGlsbC5kaWxsLl90cmFjZShUcnVlKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICAgIHMgPSBkaWxsLmR1bXBzKG8pCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UKICAgIGZpbmFsbHk6CiAgICAgIGRpbGwuZGlsbC5fdHJhY2UoRmFsc2UpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgogICMgQ29tcHJlc3MgYXMgY29tcGFjdGx5IGFzIHBvc3NpYmxlIHRvIGRlY3JlYXNlIHBlYWsgbWVtb3J5IHVzYWdlIChvZiBtdWx0aXBsZQogICMgaW4tbWVtb3J5IGNvcGllcykgYW5kIGZyZWUgdXAgc29tZSBwb3NzaWJseSBsYXJnZSBhbmQgbm8tbG9uZ2VyLW5lZWRlZAogICMgbWVtb3J5LgogIGMgPSB6bGliLmNvbXByZXNzKHMsIDkpCiAgZGVsIHMKCiAgcmV0dXJuIGJhc2U2NC5iNjRlbmNvZGUoYykKCgpkZWYgbG9hZHMoZW5jb2RlZCwgZW5hYmxlX3RyYWNlPVRydWUpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKCiAgYyA9IGJhc2U2NC5iNjRkZWNvZGUoZW5jb2RlZCkKCiAgcyA9IHpsaWIuZGVjb21wcmVzcyhjKQogIGRlbCBjICAjIEZyZWUgdXAgc29tZSBwb3NzaWJseSBsYXJnZSBhbmQgbm8tbG9uZ2VyLW5lZWRlZCBtZW1vcnkuCgogIHdpdGggcGlja2xlX2xvY2tfdW5sZXNzX3B5MjoKICAgIHRyeToKICAgICAgcmV0dXJuIGRpbGwubG9hZHMocykKICAgIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgaWYgZW5hYmxlX3RyYWNlOgogICAgICAgIGRpbGwuZGlsbC5fdHJhY2UoVHJ1ZSkgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgICAgICByZXR1cm4gZGlsbC5sb2FkcyhzKQogICAgICBlbHNlOgogICAgICAgIHJhaXNlCiAgICBmaW5hbGx5OgogICAgICBkaWxsLmRpbGwuX3RyYWNlKEZhbHNlKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwoKCmRlZiBkdW1wX3Nlc3Npb24oZmlsZV9wYXRoKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFBpY2tsZSB0aGUgY3VycmVudCBweXRob24gc2Vzc2lvbiB0byBiZSB1c2VkIGluIHRoZSB3b3JrZXIuCgogIE5vdGU6IER1ZSB0byB0aGUgaW5jb25zaXN0ZW5jeSBpbiB0aGUgZmlyc3QgZHVtcCBvZiBkaWxsIGR1bXBfc2Vzc2lvbiB3ZQogIGNyZWF0ZSBhbmQgbG9hZCB0aGUgZHVtcCB0d2ljZSB0byBoYXZlIGNvbnNpc3RlbnQgcmVzdWx0cyBpbiB0aGUgd29ya2VyIGFuZAogIHRoZSBydW5uaW5nIHNlc3Npb24uIENoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vdXFmb3VuZGF0aW9uL2RpbGwvaXNzdWVzLzE5NQogICIiIgogIHdpdGggcGlja2xlX2xvY2tfdW5sZXNzX3B5MjoKICAgIGRpbGwuZHVtcF9zZXNzaW9uKGZpbGVfcGF0aCkKICAgIGRpbGwubG9hZF9zZXNzaW9uKGZpbGVfcGF0aCkKICAgIHJldHVybiBkaWxsLmR1bXBfc2Vzc2lvbihmaWxlX3BhdGgpCgoKZGVmIGxvYWRfc2Vzc2lvbihmaWxlX3BhdGgpOgogIHdpdGggcGlja2xlX2xvY2tfdW5sZXNzX3B5MjoKICAgIHJldHVybiBkaWxsLmxvYWRfc2Vzc2lvbihmaWxlX3BhdGgpCpR9lCiMHV9Ob09wQ29udGV4dE1hbmFnZXIuX19lbnRlcl9flGpWMQEASzJLM4eUjBxfTm9PcENvbnRleHRNYW5hZ2VyLl9fZXhpdF9flGpWMQEASzVLNoeUjBNfTm9PcENvbnRleHRNYW5hZ2VylGpdMQEASzFLNoeUjBBfaXNfbmVzdGVkX2NsYXNzlGpWMQEAS01LU4eUjBZfZmluZF9jb250YWluaW5nX2NsYXNzlGpWMQEAS1ZLZoeUjBRfbmVzdGVkX3R5cGVfd3JhcHBlcpRqVjEBAEtpS42HlIwSX3JlamVjdF9nZW5lcmF0b3JzlGpWMQEAS51LnoeUjAtzYXZlX21vZHVsZZRqVjEBAEupS7KHlIwUbmV3X3NhdmVfbW9kdWxlX2RpY3SUalYxAQBLukvdh5SMEl9uZXN0X2RpbGxfbG9nZ2luZ5RqVjEBAEvhS+6HlIwFZHVtcHOUalYxAQBL+E0OAYeUjAVsb2Fkc5RqVjEBAE0RAU0jAYeUjAxkdW1wX3Nlc3Npb26UalYxAQBNJgFNMgGHlIwMbG9hZF9zZXNzaW9ulGpWMQEATTUBTTcBh5R1fZQojAtzYXZlX21vZHVsZZRqEwQAAIwUbmV3X3NhdmVfbW9kdWxlX2RpY3SUahMEAACMBWR1bXBzlGoTBAAAjAVsb2Fkc5RqEwQAAIwMZHVtcF9zZXNzaW9ulGoTBAAAjAxsb2FkX3Nlc3Npb26UahMEAAB1jBxhcGFjaGVfYmVhbS5pbnRlcm5hbC5waWNrbGVylHSUjBlhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlslChYtBYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXRpbGl0eSBmdW5jdGlvbnMgdXNlZCB0aHJvdWdob3V0IHRoZSBwYWNrYWdlLgoKRm9yIGludGVybmFsIHVzZSBvbmx5LiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB3ZWFrcmVmCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBUaHJlYWRQb29sCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKZnJvbSB0eXBpbmcgaW1wb3J0IEl0ZXJhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQpmcm9tIHR5cGluZyBpbXBvcnQgVHlwZQpmcm9tIHR5cGluZyBpbXBvcnQgVHlwZVZhcgpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24KClQgPSBUeXBlVmFyKCdUJykKCgpjbGFzcyBBcmd1bWVudFBsYWNlaG9sZGVyKG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBIHBsYWNlIGhvbGRlciBvYmplY3QgcmVwbGFjaW5nIFBWYWx1ZXMgaW4gYXJndW1lbnQgbGlzdHMuCgogIEEgRm4gb2JqZWN0IGNhbiB0YWtlIGFueSBudW1iZXIgb2YgInNpZGUgaW5wdXRzIiwgd2hpY2ggYXJlIFBWYWx1ZXMgdGhhdCB3aWxsCiAgYmUgZXZhbHVhdGVkIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24gYW5kIHdpbGwgYmUgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uCiAgYXQgdGhlIG1vbWVudCBvZiBpdHMgZXhlY3V0aW9uIGFzIHBvc2l0aW9uYWwgb3Iga2V5d29yZCBhcmd1bWVudHMuCgogIFRoaXMgaXMgdXNlZCBvbmx5IGludGVybmFsbHkgYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkIGJ5IHVzZXIgY29kZS4gQSBjdXN0b20KICBGbiBvYmplY3QgYnkgdGhlIHRpbWUgaXQgZXhlY3V0ZXMgd2lsbCBoYXZlIHN1Y2ggdmFsdWVzIHJlcGxhY2VkIHdpdGggcmVhbAogIGNvbXB1dGVkIHZhbHVlcy4KICAiIiIKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICIiIlRlc3RzIGZvciBlcXVhbGl0eSBvZiB0d28gcGxhY2Vob2xkZXIgb2JqZWN0cy4KCiAgICBBcmdzOgogICAgICBvdGhlcjogQW5vdGhlciBwbGFjZWhvbGRlciBvYmplY3QgdG8gY29tcGFyZSB0by4KCiAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIG9ubHkgZm9yIHRlc3QgY29kZS4gQWxsIHBsYWNlaG9sZGVyIG9iamVjdHMgYXJlCiAgICBlcXVhbCB0byBlYWNoIG90aGVyLgogICAgIiIiCiAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgQXJndW1lbnRQbGFjZWhvbGRlcikKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgoKZGVmIHJlbW92ZV9vYmplY3RzX2Zyb21fYXJncyhhcmdzLCAgIyB0eXBlOiBJdGVyYWJsZVtBbnldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmdzLCAgIyB0eXBlOiBEaWN0W3N0ciwgQW55XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB2YWx1ZV9jbGFzcyAgIyB0eXBlOiBVbmlvbltUeXBlW1RdLCBUdXBsZVtUeXBlW1RdLCAuLi5dXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKToKICAjIHR5cGU6ICguLi4pIC0+IFR1cGxlW0xpc3RbQW55XSwgRGljdFtzdHIsIEFueV0sIExpc3RbVF1dCgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgUmVwbGFjZXMgYWxsIG9iamVjdHMgb2YgYSBnaXZlbiB0eXBlIGluIGFyZ3Mva3dhcmdzIHdpdGggYSBwbGFjZWhvbGRlci4KCiAgQXJnczoKICAgIGFyZ3M6IEEgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KICAgIGt3YXJnczogQSBkaWN0aW9uYXJ5IG9mIGtleXdvcmQgYXJndW1lbnRzLgogICAgcHZhbHVlX2NsYXNzOiBBIGNsYXNzIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHR5cGVzIG9mIGFyZ3VtZW50cyB0aGF0IG11c3QKICAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIHBsYWNlaG9sZGVyIHZhbHVlIChpbnN0YW5jZSBvZiBBcmd1bWVudFBsYWNlaG9sZGVyKS4KCiAgUmV0dXJuczoKICAgIEEgMy10dXBsZSBjb250YWluaW5nIGEgbW9kaWZpZWQgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cywgYSBtb2RpZmllZAogICAgZGljdGlvbmFyeSBvZiBrZXl3b3JkIGFyZ3VtZW50cywgYW5kIGEgbGlzdCBvZiBhbGwgb2JqZWN0cyByZXBsYWNlZCB3aXRoCiAgICBhIHBsYWNlaG9sZGVyIHZhbHVlLgogICIiIgogIHB2YWxzID0gW10KCiAgZGVmIHN3YXBwZXIodmFsdWUpOgogICAgcHZhbHMuYXBwZW5kKHZhbHVlKQogICAgcmV0dXJuIEFyZ3VtZW50UGxhY2Vob2xkZXIoKQoKICBuZXdfYXJncyA9IFtzd2FwcGVyKHYpIGlmIGlzaW5zdGFuY2UodiwgcHZhbHVlX2NsYXNzKSBlbHNlIHYgZm9yIHYgaW4gYXJnc10KICAjIE1ha2Ugc3VyZSB0aGUgb3JkZXIgaW4gd2hpY2ggd2UgcHJvY2VzcyB0aGUgZGljdGlvbmFyeSBrZXlzIGlzIHByZWRpY3RhYmxlCiAgIyBieSBzb3J0aW5nIHRoZSBlbnRyaWVzIGZpcnN0LiBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IHdoZW4gcHV0dGluZyBiYWNrCiAgIyBQVmFsdWVzLgogIG5ld19rd2FyZ3MgPSBkaWN0KChrLCBzd2FwcGVyKHYpKSBpZiBpc2luc3RhbmNlKHYsIHB2YWx1ZV9jbGFzcykgZWxzZSAoaywgdikKICAgICAgICAgICAgICAgICAgICBmb3IgaywKICAgICAgICAgICAgICAgICAgICB2IGluIHNvcnRlZChrd2FyZ3MuaXRlbXMoKSkpCiAgcmV0dXJuIChuZXdfYXJncywgbmV3X2t3YXJncywgcHZhbHMpCgoKZGVmIGluc2VydF92YWx1ZXNfaW5fYXJncyhhcmdzLCBrd2FyZ3MsIHZhbHVlcyk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBSZXBsYWNlcyBhbGwgcGxhY2Vob2xkZXJzIGluIGFyZ3Mva3dhcmdzIHdpdGggYWN0dWFsIHZhbHVlcy4KCiAgQXJnczoKICAgIGFyZ3M6IEEgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KICAgIGt3YXJnczogQSBkaWN0aW9uYXJ5IG9mIGtleXdvcmQgYXJndW1lbnRzLgogICAgdmFsdWVzOiBBIGxpc3Qgb2YgdmFsdWVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UgcGxhY2Vob2xkZXIgdmFsdWVzLgoKICBSZXR1cm5zOgogICAgQSAyLXR1cGxlIGNvbnRhaW5pbmcgYSBtb2RpZmllZCBsaXN0IG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzLCBhbmQgYQogICAgbW9kaWZpZWQgZGljdGlvbmFyeSBvZiBrZXl3b3JkIGFyZ3VtZW50cy4KICAiIiIKICAjIFVzZSBhIGxvY2FsIGl0ZXJhdG9yIHNvIHRoYXQgd2UgZG9uJ3QgbW9kaWZ5IHZhbHVlcy4KICB2X2l0ZXIgPSBpdGVyKHZhbHVlcykKICBuZXdfYXJncyA9IFsKICAgICAgbmV4dCh2X2l0ZXIpIGlmIGlzaW5zdGFuY2UoYXJnLCBBcmd1bWVudFBsYWNlaG9sZGVyKSBlbHNlIGFyZwogICAgICBmb3IgYXJnIGluIGFyZ3MKICBdCiAgbmV3X2t3YXJncyA9IGRpY3QoCiAgICAgIChrLCBuZXh0KHZfaXRlcikpIGlmIGlzaW5zdGFuY2UodiwgQXJndW1lbnRQbGFjZWhvbGRlcikgZWxzZSAoaywgdikgZm9yIGssCiAgICAgIHYgaW4gc29ydGVkKGt3YXJncy5pdGVtcygpKSkKICByZXR1cm4gKG5ld19hcmdzLCBuZXdfa3dhcmdzKQoKCmRlZiBydW5fdXNpbmdfdGhyZWFkcG9vbChmbl90b19leGVjdXRlLCBpbnB1dHMsIHBvb2xfc2l6ZSk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBSdW5zIHRoZSBnaXZlbiBmdW5jdGlvbiBvbiBnaXZlbiBpbnB1dHMgdXNpbmcgYSB0aHJlYWQgcG9vbC4KCiAgQXJnczoKICAgIGZuX3RvX2V4ZWN1dGU6IEZ1bmN0aW9uIHRvIGV4ZWN1dGUKICAgIGlucHV0czogSW5wdXRzIG9uIHdoaWNoIGdpdmVuIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwuCiAgICBwb29sX3NpemU6IFNpemUgb2YgdGhyZWFkIHBvb2wuCiAgUmV0dXJuczoKICAgIFJlc3VsdHMgcmV0cmlldmVkIGFmdGVyIGV4ZWN1dGluZyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb24gZ2l2ZW4gaW5wdXRzLgogICIiIgoKICAjIFRocmVhZFBvb2wgY3Jhc2hlcyBpbiBvbGQgdmVyc2lvbnMgb2YgUHl0aG9uICg8IDIuNy41KSBpZiBjcmVhdGVkCiAgIyBmcm9tIGEgY2hpbGQgdGhyZWFkLiAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEwMDE1KQogIGlmIG5vdCBoYXNhdHRyKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCAnX2NoaWxkcmVuJyk6CiAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5fY2hpbGRyZW4gPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKICBwb29sID0gVGhyZWFkUG9vbChtaW4ocG9vbF9zaXplLCBsZW4oaW5wdXRzKSkpCiAgdHJ5OgogICAgIyBXZSByZWNvcmQgYW5kIHJlc2V0IGxvZ2dpbmcgbGV2ZWwgaGVyZSBzaW5jZSAnYXBpdG9vbHMnIGxpYnJhcnkgQmVhbQogICAgIyBkZXBlbmRzIG9uIHVwZGF0ZXMgdGhlIGxvZ2dpbmcgbGV2ZWwgd2hlbiB1c2VkIHdpdGggYSB0aHJlYWRwb29sIC0KICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9hcGl0b29scy9pc3N1ZXMvMTQxCiAgICAjIFRPRE86IFJlbW92ZSB0aGlzIG9uY2UgYWJvdmUgaXNzdWUgaW4gJ2FwaXRvb2xzJyBpcyBmaXhlZC4KICAgIG9sZF9sZXZlbCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkubGV2ZWwKICAgIHJldHVybiBwb29sLm1hcChmbl90b19leGVjdXRlLCBpbnB1dHMpCiAgZmluYWxseToKICAgIHBvb2wudGVybWluYXRlKCkKICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwob2xkX2xldmVsKQqUfZQojBpBcmd1bWVudFBsYWNlaG9sZGVyLl9fZXFfX5RqVjEBAEs5S0KHlIwaQXJndW1lbnRQbGFjZWhvbGRlci5fX25lX1+UalYxAQBLREtGh5SMHEFyZ3VtZW50UGxhY2Vob2xkZXIuX19oYXNoX1+UalYxAQBLSEtJh5SME0FyZ3VtZW50UGxhY2Vob2xkZXKUal0xAQBLLEtJh5SMGHJlbW92ZV9vYmplY3RzX2Zyb21fYXJnc5RqVjEBAEtMS26HlIwVaW5zZXJ0X3ZhbHVlc19pbl9hcmdzlGpWMQEAS3FLiIeUjBRydW5fdXNpbmdfdGhyZWFkcG9vbJRqVjEBAEuLS6aHlHV9lCiME0FyZ3VtZW50UGxhY2Vob2xkZXKUasADAACMGHJlbW92ZV9vYmplY3RzX2Zyb21fYXJnc5RqwAMAAIwVaW5zZXJ0X3ZhbHVlc19pbl9hcmdzlGrAAwAAjBRydW5fdXNpbmdfdGhyZWFkcG9vbJRqwAMAAHWMGWFwYWNoZV9iZWFtLmludGVybmFsLnV0aWyUdJSMFWFwYWNoZV9iZWFtLmlvLmF2cm9pb5QoWIVVAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiImBgUFRyYW5zZm9ybXNgYCBmb3IgcmVhZGluZyBmcm9tIGFuZCB3cml0aW5nIHRvIEF2cm8gZmlsZXMuCgpQcm92aWRlcyB0d28gcmVhZCBgYFBUcmFuc2Zvcm1gYHMsIGBgUmVhZEZyb21BdnJvYGAgYW5kIGBgUmVhZEFsbEZyb21BdnJvYGAsCnRoYXQgcHJvZHVjZXMgYSBgYFBDb2xsZWN0aW9uYGAgb2YgcmVjb3Jkcy4KRWFjaCByZWNvcmQgb2YgdGhpcyBgYFBDb2xsZWN0aW9uYGAgd2lsbCBjb250YWluIGEgc2luZ2xlIHJlY29yZCByZWFkIGZyb20KYW4gQXZybyBmaWxlLiBSZWNvcmRzIHRoYXQgYXJlIG9mIHNpbXBsZSB0eXBlcyB3aWxsIGJlIG1hcHBlZCBpbnRvCmNvcnJlc3BvbmRpbmcgUHl0aG9uIHR5cGVzLiBSZWNvcmRzIHRoYXQgYXJlIG9mIEF2cm8gdHlwZSAnUkVDT1JEJyB3aWxsIGJlCm1hcHBlZCB0byBQeXRob24gZGljdGlvbmFyaWVzIHRoYXQgY29tcGx5IHdpdGggdGhlIHNjaGVtYSBjb250YWluZWQgaW4gdGhlCkF2cm8gZmlsZSB0aGF0IGNvbnRhaW5zIHRob3NlIHJlY29yZHMuIEluIHRoaXMgY2FzZSwga2V5cyBvZiBlYWNoIGRpY3Rpb25hcnkKd2lsbCBjb250YWluIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIG5hbWVzIGFuZCB3aWxsIGJlIG9mIHR5cGUgYGBzdHJpbmdgYAp3aGlsZSB0aGUgdmFsdWVzIG9mIHRoZSBkaWN0aW9uYXJ5IHdpbGwgYmUgb2YgdGhlIHR5cGUgZGVmaW5lZCBpbiB0aGUKY29ycmVzcG9uZGluZyBBdnJvIHNjaGVtYS4KCkZvciBleGFtcGxlLCBpZiBzY2hlbWEgb2YgdGhlIEF2cm8gZmlsZSBpcyB0aGUgZm9sbG93aW5nLgp7Im5hbWVzcGFjZSI6ICJleGFtcGxlLmF2cm8iLCJ0eXBlIjogInJlY29yZCIsIm5hbWUiOiAiVXNlciIsImZpZWxkcyI6Clt7Im5hbWUiOiAibmFtZSIsICJ0eXBlIjogInN0cmluZyJ9LAp7Im5hbWUiOiAiZmF2b3JpdGVfbnVtYmVyIiwgICJ0eXBlIjogWyJpbnQiLCAibnVsbCJdfSwKeyJuYW1lIjogImZhdm9yaXRlX2NvbG9yIiwgInR5cGUiOiBbInN0cmluZyIsICJudWxsIl19XX0KClRoZW4gcmVjb3JkcyBnZW5lcmF0ZWQgYnkgcmVhZCB0cmFuc2Zvcm1zIHdpbGwgYmUgZGljdGlvbmFyaWVzIG9mIHRoZQpmb2xsb3dpbmcgZm9ybS4Ke3UnbmFtZSc6IHUnQWx5c3NhJywgdSdmYXZvcml0ZV9udW1iZXInOiAyNTYsIHUnZmF2b3JpdGVfY29sb3InOiBOb25lfSkuCgpBZGRpdGlvbmFsbHksIHRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgd3JpdGUgYGBQVHJhbnNmb3JtYGAgYGBXcml0ZVRvQXZyb2BgCnRoYXQgY2FuIGJlIHVzZWQgdG8gd3JpdGUgYSBnaXZlbiBgYFBDb2xsZWN0aW9uYGAgb2YgUHl0aG9uIG9iamVjdHMgdG8gYW4KQXZybyBmaWxlLgoiIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpbwppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgd2FybmluZ3MKaW1wb3J0IHpsaWIKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCgppbXBvcnQgYXZybwpmcm9tIGF2cm8gaW1wb3J0IGlvIGFzIGF2cm9pbwpmcm9tIGF2cm8gaW1wb3J0IGRhdGFmaWxlCmZyb20gZmFzdGF2cm8ucmVhZCBpbXBvcnQgYmxvY2tfcmVhZGVyCmZyb20gZmFzdGF2cm8ud3JpdGUgaW1wb3J0IFdyaXRlcgoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc2luawpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgUmVhZApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwp0cnk6CiAgZnJvbSBhdnJvLnNjaGVtYSBpbXBvcnQgUGFyc2UgICMgYXZyby1weXRob24zIGxpYnJhcnkgZm9yIHB5dGhvbjMKZXhjZXB0IEltcG9ydEVycm9yOgogIGZyb20gYXZyby5zY2hlbWEgaW1wb3J0IHBhcnNlIGFzIFBhcnNlICAjIGF2cm8gbGlicmFyeSBmb3IgcHl0aG9uMgojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwoKX19hbGxfXyA9IFsnUmVhZEZyb21BdnJvJywgJ1JlYWRBbGxGcm9tQXZybycsICdXcml0ZVRvQXZybyddCgoKZGVmIF91c2VfZmFzdGF2cm8oKToKICByZXR1cm4gc3lzLnZlcnNpb25faW5mb1swXSA+PSAzCgoKY2xhc3MgUmVhZEZyb21BdnJvKFBUcmFuc2Zvcm0pOgogICIiIkEgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIGZvciByZWFkaW5nIGF2cm8KICBmaWxlcy4iIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0dGVybj1Ob25lLAogICAgICBtaW5fYnVuZGxlX3NpemU9MCwKICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgdXNlX2Zhc3RhdnJvPV91c2VfZmFzdGF2cm8oKSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YFJlYWRGcm9tQXZyb2AuCgogICAgVXNlcyBzb3VyY2UgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uX0F2cm9Tb3VyY2VgIHRvIHJlYWQgYSBzZXQgb2YgQXZybwogICAgZmlsZXMgZGVmaW5lZCBieSBhIGdpdmVuIGZpbGUgcGF0dGVybi4KCiAgICBJZiBgYC9teXBhdGgvbXlhdnJvZmlsZXMqYGAgaXMgYSBmaWxlLXBhdHRlcm4gdGhhdCBwb2ludHMgdG8gYSBzZXQgb2YgQXZybwogICAgZmlsZXMsIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBmb3IgdGhlIHJlY29yZHMgaW4KICAgIHRoZXNlIEF2cm8gZmlsZXMgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuCgogICAgLi4gdGVzdGNvZGU6OgoKICAgICAgd2l0aCBiZWFtLlBpcGVsaW5lKCkgYXMgcDoKICAgICAgICByZWNvcmRzID0gcCB8ICdSZWFkJyA+PiBiZWFtLmlvLlJlYWRGcm9tQXZybygnL215cGF0aC9teWF2cm9maWxlcyonKQoKICAgIC4uIE5PVEU6IFdlJ3JlIG5vdCBhY3R1YWxseSBpbnRlcmVzdGVkIGluIHRoaXMgZXJyb3I7IGJ1dCBpZiB3ZSBnZXQgaGVyZSwKICAgICAgIGl0IG1lYW5zIHRoYXQgdGhlIHdheSBvZiBjYWxsaW5nIHRoaXMgdHJhbnNmb3JtIGhhc24ndCBjaGFuZ2VkLgoKICAgIC4uIHRlc3RvdXRwdXQ6OgogICAgICA6aGlkZToKCiAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgogICAgICBPU0Vycm9yOiBObyBmaWxlcyBmb3VuZCBiYXNlZCBvbiB0aGUgZmlsZSBwYXR0ZXJuCgogICAgRWFjaCByZWNvcmQgb2YgdGhpcyA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIHdpbGwgY29udGFpbgogICAgYSBzaW5nbGUgcmVjb3JkIHJlYWQgZnJvbSBhIHNvdXJjZS4gUmVjb3JkcyB0aGF0IGFyZSBvZiBzaW1wbGUgdHlwZXMgd2lsbCBiZQogICAgbWFwcGVkIGludG8gY29ycmVzcG9uZGluZyBQeXRob24gdHlwZXMuIFJlY29yZHMgdGhhdCBhcmUgb2YgQXZybyB0eXBlCiAgICBgYFJFQ09SRGBgIHdpbGwgYmUgbWFwcGVkIHRvIFB5dGhvbiBkaWN0aW9uYXJpZXMgdGhhdCBjb21wbHkgd2l0aCB0aGUgc2NoZW1hCiAgICBjb250YWluZWQgaW4gdGhlIEF2cm8gZmlsZSB0aGF0IGNvbnRhaW5zIHRob3NlIHJlY29yZHMuIEluIHRoaXMgY2FzZSwga2V5cwogICAgb2YgZWFjaCBkaWN0aW9uYXJ5IHdpbGwgY29udGFpbiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBuYW1lcyBhbmQgd2lsbCBiZSBvZgogICAgdHlwZSA6Y2xhc3M6YHN0cmAgd2hpbGUgdGhlIHZhbHVlcyBvZiB0aGUgZGljdGlvbmFyeSB3aWxsIGJlIG9mIHRoZSB0eXBlCiAgICBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIEF2cm8gc2NoZW1hLgoKICAgIEZvciBleGFtcGxlLCBpZiBzY2hlbWEgb2YgdGhlIEF2cm8gZmlsZSBpcyB0aGUgZm9sbG93aW5nLiA6OgoKICAgICAgewogICAgICAgICJuYW1lc3BhY2UiOiAiZXhhbXBsZS5hdnJvIiwKICAgICAgICAidHlwZSI6ICJyZWNvcmQiLAogICAgICAgICJuYW1lIjogIlVzZXIiLAogICAgICAgICJmaWVsZHMiOiBbCgogICAgICAgICAgeyJuYW1lIjogIm5hbWUiLAogICAgICAgICAgICJ0eXBlIjogInN0cmluZyJ9LAoKICAgICAgICAgIHsibmFtZSI6ICJmYXZvcml0ZV9udW1iZXIiLAogICAgICAgICAgICJ0eXBlIjogWyJpbnQiLCAibnVsbCJdfSwKCiAgICAgICAgICB7Im5hbWUiOiAiZmF2b3JpdGVfY29sb3IiLAogICAgICAgICAgICJ0eXBlIjogWyJzdHJpbmciLCAibnVsbCJdfQoKICAgICAgICBdCiAgICAgIH0KCiAgICBUaGVuIHJlY29yZHMgZ2VuZXJhdGVkIGJ5IDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLl9BdnJvU291cmNlYCB3aWxsIGJlCiAgICBkaWN0aW9uYXJpZXMgb2YgdGhlIGZvbGxvd2luZyBmb3JtLiA6OgoKICAgICAge3UnbmFtZSc6IHUnQWx5c3NhJywgdSdmYXZvcml0ZV9udW1iZXInOiAyNTYsIHUnZmF2b3JpdGVfY29sb3InOiBOb25lfSkuCgogICAgQXJnczoKICAgICAgZmlsZV9wYXR0ZXJuIChzdHIpOiB0aGUgZmlsZSBnbG9iIHRvIHJlYWQKICAgICAgbWluX2J1bmRsZV9zaXplIChpbnQpOiB0aGUgbWluaW11bSBzaXplIGluIGJ5dGVzLCB0byBiZSBjb25zaWRlcmVkIHdoZW4KICAgICAgICBzcGxpdHRpbmcgdGhlIGlucHV0IGludG8gYnVuZGxlcy4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlcyBleGlzdCBkdXJpbmcgdGhlIHBpcGVsaW5lCiAgICAgICAgY3JlYXRpb24gdGltZS4KICAgICAgdXNlX2Zhc3RhdnJvIChib29sKTsgd2hlbiBzZXQsIHVzZSB0aGUgYGZhc3RhdnJvYCBsaWJyYXJ5IGZvciBJTywgd2hpY2gKICAgICAgICBpcyBzaWduaWZpY2FudGx5IGZhc3RlciwgYW5kIHdpbGwgbGlrZWx5IGJlY29tZSB0aGUgZGVmYXVsdAogICAgIiIiCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgYW5kIG5vdCB1c2VfZmFzdGF2cm86CiAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAiRHVlIHRvIGEga25vd24gaXNzdWUgaW4gYXZyby1weXRob24zIHBhY2thZ2UsIGl0IGlzICIKICAgICAgICAgICJyZWNvbW1lbmRlZCB0byB1c2UgZmFzdGF2cm8gd2l0aCBCZWFtIEF2cm8gSU8gb24gIgogICAgICAgICAgIlB5dGhvbiAzIHVudGlsIEJFQU0tNjUyMiBpcyBhZGRyZXNzZWQuIikKICAgIHN1cGVyKFJlYWRGcm9tQXZybywgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fc291cmNlID0gX2NyZWF0ZV9hdnJvX3NvdXJjZSgKICAgICAgICBmaWxlX3BhdHRlcm4sCiAgICAgICAgbWluX2J1bmRsZV9zaXplLAogICAgICAgIHZhbGlkYXRlPXZhbGlkYXRlLAogICAgICAgIHVzZV9mYXN0YXZybz11c2VfZmFzdGF2cm8pCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJldHVybiBwdmFsdWUucGlwZWxpbmUgfCBSZWFkKHNlbGYuX3NvdXJjZSkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NvdXJjZV9kZCc6IHNlbGYuX3NvdXJjZX0KCgpjbGFzcyBSZWFkQWxsRnJvbUF2cm8oUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3IgcmVhZGluZyBgYFBDb2xsZWN0aW9uYGAgb2YgQXZybyBmaWxlcy4KCiAgIFVzZXMgc291cmNlICdfQXZyb1NvdXJjZScgdG8gcmVhZCBhIGBgUENvbGxlY3Rpb25gYCBvZiBBdnJvIGZpbGVzIG9yCiAgIGZpbGUgcGF0dGVybnMgYW5kIHByb2R1Y2UgYSBgYFBDb2xsZWN0aW9uYGAgb2YgQXZybyByZWNvcmRzLgogICIiIgoKICBERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkUgPSA2NCAqIDEwMjQgKiAxMDI0ICAjIDY0TUIKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBtaW5fYnVuZGxlX3NpemU9MCwKICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZT1ERUZBVUxUX0RFU0lSRURfQlVORExFX1NJWkUsCiAgICAgIHVzZV9mYXN0YXZybz1fdXNlX2Zhc3RhdnJvKCksCiAgICAgIGxhYmVsPSdSZWFkQWxsRmlsZXMnKToKICAgICIiIkluaXRpYWxpemVzIGBgUmVhZEFsbEZyb21BdnJvYGAuCgogICAgQXJnczoKICAgICAgbWluX2J1bmRsZV9zaXplOiB0aGUgbWluaW11bSBzaXplIGluIGJ5dGVzLCB0byBiZSBjb25zaWRlcmVkIHdoZW4KICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRpbmcgdGhlIGlucHV0IGludG8gYnVuZGxlcy4KICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZTogdGhlIGRlc2lyZWQgc2l6ZSBpbiBieXRlcywgdG8gYmUgY29uc2lkZXJlZCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nIHRoZSBpbnB1dCBpbnRvIGJ1bmRsZXMuCiAgICAiIiIKICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyBhbmQgbm90IHVzZV9mYXN0YXZybzoKICAgICAgd2FybmluZ3Mud2FybigKICAgICAgICAgICJEdWUgdG8gYSBrbm93biBpc3N1ZSBpbiBhdnJvLXB5dGhvbjMgcGFja2FnZSwgaXQgaXMgIgogICAgICAgICAgInJlY29tbWVuZGVkIHRvIHVzZSBmYXN0YXZybyB3aXRoIEJlYW0gQXZybyBJTyBvbiAiCiAgICAgICAgICAiUHl0aG9uIDMgdW50aWwgQkVBTS02NTIyIGlzIGFkZHJlc3NlZC4iKQogICAgc291cmNlX2Zyb21fZmlsZSA9IHBhcnRpYWwoCiAgICAgICAgX2NyZWF0ZV9hdnJvX3NvdXJjZSwKICAgICAgICBtaW5fYnVuZGxlX3NpemU9bWluX2J1bmRsZV9zaXplLAogICAgICAgIHVzZV9mYXN0YXZybz11c2VfZmFzdGF2cm8pCiAgICBzZWxmLl9yZWFkX2FsbF9maWxlcyA9IGZpbGViYXNlZHNvdXJjZS5SZWFkQWxsRmlsZXMoCiAgICAgICAgVHJ1ZSwKICAgICAgICBDb21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZSwKICAgICAgICBtaW5fYnVuZGxlX3NpemUsCiAgICAgICAgc291cmNlX2Zyb21fZmlsZSkKCiAgICBzZWxmLmxhYmVsID0gbGFiZWwKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZSB8IHNlbGYubGFiZWwgPj4gc2VsZi5fcmVhZF9hbGxfZmlsZXMKCgpjbGFzcyBfQXZyb1V0aWxzKG9iamVjdCk6CiAgQHN0YXRpY21ldGhvZAogIGRlZiByZWFkX21ldGFfZGF0YV9mcm9tX2ZpbGUoZik6CiAgICAiIiJSZWFkcyBtZXRhZGF0YSBmcm9tIGEgZ2l2ZW4gQXZybyBmaWxlLgoKICAgIEFyZ3M6CiAgICAgIGY6IEF2cm8gZmlsZSB0byByZWFkLgogICAgUmV0dXJuczoKICAgICAgYSB0dXBsZSBjb250YWluaW5nIHRoZSBjb2RlYywgc2NoZW1hLCBhbmQgdGhlIHN5bmMgbWFya2VyIG9mIHRoZSBBdnJvCiAgICAgIGZpbGUuCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBpZiB0aGUgZmlsZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBieXRlIHNlcXVlbmNlIGRlZmluZWQgaW4KICAgICAgICAgICAgICAgICAgdGhlIHNwZWNpZmljYXRpb24uCiAgICAiIiIKICAgIGlmIGYudGVsbCgpID4gMDoKICAgICAgZi5zZWVrKDApCiAgICBkZWNvZGVyID0gYXZyb2lvLkJpbmFyeURlY29kZXIoZikKICAgIGhlYWRlciA9IGF2cm9pby5EYXR1bVJlYWRlcigpLnJlYWRfZGF0YSgKICAgICAgICBkYXRhZmlsZS5NRVRBX1NDSEVNQSwgZGF0YWZpbGUuTUVUQV9TQ0hFTUEsIGRlY29kZXIpCiAgICBpZiBoZWFkZXIuZ2V0KCdtYWdpYycpICE9IGRhdGFmaWxlLk1BR0lDOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ05vdCBhbiBBdnJvIGZpbGUuIEZpbGUgaGVhZGVyIHNob3VsZCBzdGFydCB3aXRoICVzIGJ1dCcKICAgICAgICAgICdzdGFydGVkIHdpdGggJXMgaW5zdGVhZC4nICUgKGRhdGFmaWxlLk1BR0lDLCBoZWFkZXIuZ2V0KCdtYWdpYycpKSkKCiAgICBtZXRhID0gaGVhZGVyWydtZXRhJ10KCiAgICBpZiBkYXRhZmlsZS5DT0RFQ19LRVkgaW4gbWV0YToKICAgICAgY29kZWMgPSBtZXRhW2RhdGFmaWxlLkNPREVDX0tFWV0KICAgIGVsc2U6CiAgICAgIGNvZGVjID0gYidudWxsJwoKICAgIHNjaGVtYV9zdHJpbmcgPSBtZXRhW2RhdGFmaWxlLlNDSEVNQV9LRVldLmRlY29kZSgndXRmLTgnKQogICAgc3luY19tYXJrZXIgPSBoZWFkZXJbJ3N5bmMnXQoKICAgIHJldHVybiBjb2RlYywgc2NoZW1hX3N0cmluZywgc3luY19tYXJrZXIKCiAgQHN0YXRpY21ldGhvZAogIGRlZiByZWFkX2Jsb2NrX2Zyb21fZmlsZShmLCBjb2RlYywgc2NoZW1hLCBleHBlY3RlZF9zeW5jX21hcmtlcik6CiAgICAiIiJSZWFkcyBhIGJsb2NrIGZyb20gYSBnaXZlbiBBdnJvIGZpbGUuCgogICAgQXJnczoKICAgICAgZjogQXZybyBmaWxlIHRvIHJlYWQuCiAgICAgIGNvZGVjOiBUaGUgY29kZWMgdG8gdXNlIGZvciBibG9jay1sZXZlbCBkZWNvbXByZXNzaW9uLgogICAgICAgIFN1cHBvcnRlZCBjb2RlY3M6ICdudWxsJywgJ2RlZmxhdGUnLCAnc25hcHB5JwogICAgICBzY2hlbWE6IEF2cm8gU2NoZW1hIGRlZmluaXRpb24gcmVwcmVzZW50ZWQgYXMgSlNPTiBzdHJpbmcuCiAgICAgIGV4cGVjdGVkX3N5bmNfbWFya2VyOiBBdnJvIHN5bmNocm9uaXphdGlvbiBtYXJrZXIuIElmIHRoZSBibG9jaydzIHN5bmMKICAgICAgICBtYXJrZXIgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGlzIHBhcmFtZXRlciB0aGVuIFZhbHVlRXJyb3IgaXMgdGhyb3duLgogICAgUmV0dXJuczoKICAgICAgQSBzaW5nbGUgX0F2cm9CbG9jay4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IElmIHRoZSBibG9jayBjYW5ub3QgYmUgcmVhZCBwcm9wZXJseSBiZWNhdXNlIHRoZSBmaWxlIGRvZXNuJ3QKICAgICAgICBtYXRjaCB0aGUgc3BlY2lmaWNhdGlvbi4KICAgICIiIgogICAgb2Zmc2V0ID0gZi50ZWxsKCkKICAgIGRlY29kZXIgPSBhdnJvaW8uQmluYXJ5RGVjb2RlcihmKQogICAgbnVtX3JlY29yZHMgPSBkZWNvZGVyLnJlYWRfbG9uZygpCiAgICBibG9ja19zaXplID0gZGVjb2Rlci5yZWFkX2xvbmcoKQogICAgYmxvY2tfYnl0ZXMgPSBkZWNvZGVyLnJlYWQoYmxvY2tfc2l6ZSkKICAgIHN5bmNfbWFya2VyID0gZGVjb2Rlci5yZWFkKGxlbihleHBlY3RlZF9zeW5jX21hcmtlcikpCiAgICBpZiBzeW5jX21hcmtlciAhPSBleHBlY3RlZF9zeW5jX21hcmtlcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdVbmV4cGVjdGVkIHN5bmMgbWFya2VyIChhY3R1YWwgIiVzIiB2cyBleHBlY3RlZCAiJXMiKS4gJwogICAgICAgICAgJ01heWJlIHRoZSB1bmRlcmx5aW5nIGF2cm8gZmlsZSBpcyBjb3JydXB0ZWQ/JyAlCiAgICAgICAgICAoc3luY19tYXJrZXIsIGV4cGVjdGVkX3N5bmNfbWFya2VyKSkKICAgIHNpemUgPSBmLnRlbGwoKSAtIG9mZnNldAogICAgcmV0dXJuIF9BdnJvQmxvY2soYmxvY2tfYnl0ZXMsIG51bV9yZWNvcmRzLCBjb2RlYywgc2NoZW1hLCBvZmZzZXQsIHNpemUpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgYWR2YW5jZV9maWxlX3Bhc3RfbmV4dF9zeW5jX21hcmtlcihmLCBzeW5jX21hcmtlcik6CiAgICBidWZfc2l6ZSA9IDEwMDAwCgogICAgZGF0YSA9IGYucmVhZChidWZfc2l6ZSkKICAgIHdoaWxlIGRhdGE6CiAgICAgIHBvcyA9IGRhdGEuZmluZChzeW5jX21hcmtlcikKICAgICAgaWYgcG9zID49IDA6CiAgICAgICAgIyBBZGp1c3RpbmcgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgc3luYwogICAgICAgICMgbWFya2VyLgogICAgICAgIGJhY2t0cmFjayA9IGxlbihkYXRhKSAtIHBvcyAtIGxlbihzeW5jX21hcmtlcikKICAgICAgICBmLnNlZWsoLTEgKiBiYWNrdHJhY2ssIG9zLlNFRUtfQ1VSKQogICAgICAgIHJldHVybiBUcnVlCiAgICAgIGVsc2U6CiAgICAgICAgaWYgZi50ZWxsKCkgPj0gbGVuKHN5bmNfbWFya2VyKToKICAgICAgICAgICMgQmFja3RyYWNraW5nIGluIGNhc2Ugd2UgcGFydGlhbGx5IHJlYWQgdGhlIHN5bmMgbWFya2VyIGR1cmluZyB0aGUKICAgICAgICAgICMgcHJldmlvdXMgcmVhZC4gV2Ugb25seSBoYXZlIHRvIGJhY2t0cmFjayBpZiB0aGVyZSBhcmUgYXQgbGVhc3QKICAgICAgICAgICMgbGVuKHN5bmNfbWFya2VyKSBieXRlcyBiZWZvcmUgY3VycmVudCBwb3NpdGlvbi4gV2Ugb25seSBoYXZlIHRvCiAgICAgICAgICAjIGJhY2t0cmFjayAobGVuKHN5bmNfbWFya2VyKSAtIDEpIGJ5dGVzLgogICAgICAgICAgZi5zZWVrKC0xICogKGxlbihzeW5jX21hcmtlcikgLSAxKSwgb3MuU0VFS19DVVIpCiAgICAgICAgZGF0YSA9IGYucmVhZChidWZfc2l6ZSkKCgpkZWYgX2NyZWF0ZV9hdnJvX3NvdXJjZSgKICAgIGZpbGVfcGF0dGVybj1Ob25lLAogICAgbWluX2J1bmRsZV9zaXplPTAsCiAgICB2YWxpZGF0ZT1GYWxzZSwKICAgIHVzZV9mYXN0YXZybz1fdXNlX2Zhc3RhdnJvKCkpOgogIHJldHVybiBcCiAgICAgIF9GYXN0QXZyb1NvdXJjZSgKICAgICAgICAgIGZpbGVfcGF0dGVybj1maWxlX3BhdHRlcm4sCiAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9bWluX2J1bmRsZV9zaXplLAogICAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUKICAgICAgKSBcCiAgICAgIGlmIHVzZV9mYXN0YXZybyBcCiAgICAgIGVsc2UgXAogICAgICBfQXZyb1NvdXJjZSgKICAgICAgICAgIGZpbGVfcGF0dGVybj1maWxlX3BhdHRlcm4sCiAgICAgICAgICBtaW5fYnVuZGxlX3NpemU9bWluX2J1bmRsZV9zaXplLAogICAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUKICAgICAgKQoKCmNsYXNzIF9BdnJvQmxvY2sob2JqZWN0KToKICAiIiJSZXByZXNlbnRzIGEgYmxvY2sgb2YgYW4gQXZybyBmaWxlLiIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgYmxvY2tfYnl0ZXMsIG51bV9yZWNvcmRzLCBjb2RlYywgc2NoZW1hX3N0cmluZywgb2Zmc2V0LCBzaXplKToKICAgICMgRGVjb21wcmVzcyBkYXRhIGVhcmx5IG9uIChpZiBuZWVkZWQpIGFuZCB0aHVzIGRlY3JlYXNlIHRoZSBudW1iZXIgb2YKICAgICMgcGFyYWxsZWwgY29waWVzIG9mIHRoZSBkYXRhIGluIG1lbW9yeSBhdCBhbnkgZ2l2ZW4gdGltZSBkdXJpbmcgYmxvY2sKICAgICMgaXRlcmF0aW9uLgogICAgc2VsZi5fZGVjb21wcmVzc2VkX2Jsb2NrX2J5dGVzID0gc2VsZi5fZGVjb21wcmVzc19ieXRlcyhibG9ja19ieXRlcywgY29kZWMpCiAgICBzZWxmLl9udW1fcmVjb3JkcyA9IG51bV9yZWNvcmRzCiAgICBzZWxmLl9zY2hlbWEgPSBQYXJzZShzY2hlbWFfc3RyaW5nKQogICAgc2VsZi5fb2Zmc2V0ID0gb2Zmc2V0CiAgICBzZWxmLl9zaXplID0gc2l6ZQoKICBkZWYgc2l6ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9zaXplCgogIGRlZiBvZmZzZXQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fb2Zmc2V0CgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2RlY29tcHJlc3NfYnl0ZXMoZGF0YSwgY29kZWMpOgogICAgaWYgY29kZWMgPT0gYidudWxsJzoKICAgICAgcmV0dXJuIGRhdGEKICAgIGVsaWYgY29kZWMgPT0gYidkZWZsYXRlJzoKICAgICAgIyB6bGliLk1BWF9XQklUUyBpcyB0aGUgd2luZG93IHNpemUuICctJyBzaWduIGluZGljYXRlcyB0aGF0IHRoaXMgaXMKICAgICAgIyByYXcgZGF0YSAod2l0aG91dCBoZWFkZXJzKS4gU2VlIHpsaWIgYW5kIEF2cm8gZG9jdW1lbnRhdGlvbnMgZm9yIG1vcmUKICAgICAgIyBkZXRhaWxzLgogICAgICByZXR1cm4gemxpYi5kZWNvbXByZXNzKGRhdGEsIC16bGliLk1BWF9XQklUUykKICAgIGVsaWYgY29kZWMgPT0gYidzbmFwcHknOgogICAgICAjIFNuYXBweSBpcyBhbiBvcHRpb25hbCBhdnJvIGNvZGVjLgogICAgICAjIFNlZSBTbmFwcHkgYW5kIEF2cm8gZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogICAgICB0cnk6CiAgICAgICAgaW1wb3J0IHNuYXBweQogICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigncHl0aG9uLXNuYXBweSBkb2VzIG5vdCBzZWVtIHRvIGJlIGluc3RhbGxlZC4nKQoKICAgICAgIyBDb21wcmVzc2VkIGRhdGEgaW5jbHVkZXMgYSA0LWJ5dGUgQ1JDMzIgY2hlY2tzdW0gd2hpY2ggd2UgdmVyaWZ5LgogICAgICAjIFdlIHRha2UgY2FyZSB0byBhdm9pZCBleHRyYSBjb3BpZXMgb2YgZGF0YSB3aGlsZSBzbGljaW5nIGxhcmdlIG9iamVjdHMKICAgICAgIyBieSB1c2Ugb2YgYSBtZW1vcnl2aWV3LgogICAgICByZXN1bHQgPSBzbmFwcHkuZGVjb21wcmVzcyhtZW1vcnl2aWV3KGRhdGEpWzotNF0pCiAgICAgIGF2cm9pby5CaW5hcnlEZWNvZGVyKGlvLkJ5dGVzSU8oZGF0YVstNDpdKSkuY2hlY2tfY3JjMzIocmVzdWx0KQogICAgICByZXR1cm4gcmVzdWx0CiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmtub3duIGNvZGVjOiAlcicgJSBjb2RlYykKCiAgZGVmIG51bV9yZWNvcmRzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX251bV9yZWNvcmRzCgogIGRlZiByZWNvcmRzKHNlbGYpOgogICAgZGVjb2RlciA9IGF2cm9pby5CaW5hcnlEZWNvZGVyKGlvLkJ5dGVzSU8oc2VsZi5fZGVjb21wcmVzc2VkX2Jsb2NrX2J5dGVzKSkKCiAgICB3cml0ZXJfc2NoZW1hID0gc2VsZi5fc2NoZW1hCiAgICByZWFkZXJfc2NoZW1hID0gc2VsZi5fc2NoZW1hCiAgICByZWFkZXIgPSBhdnJvaW8uRGF0dW1SZWFkZXIod3JpdGVyX3NjaGVtYSwgcmVhZGVyX3NjaGVtYSkKCiAgICBjdXJyZW50X3JlY29yZCA9IDAKICAgIHdoaWxlIGN1cnJlbnRfcmVjb3JkIDwgc2VsZi5fbnVtX3JlY29yZHM6CiAgICAgIHlpZWxkIHJlYWRlci5yZWFkKGRlY29kZXIpCiAgICAgIGN1cnJlbnRfcmVjb3JkICs9IDEKCgpjbGFzcyBfQXZyb1NvdXJjZShmaWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlKToKICAiIiJBIHNvdXJjZSBmb3IgcmVhZGluZyBBdnJvIGZpbGVzLgoKICBgYF9BdnJvU291cmNlYGAgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGZpbGUtYmFzZWQgc291cmNlIGZyYW1ld29yayBhdmFpbGFibGUKICBpbiBtb2R1bGUgJ2ZpbGViYXNlZHNvdXJjZScuIEhlbmNlIHBsZWFzZSByZWZlciB0byBtb2R1bGUgJ2ZpbGViYXNlZHNvdXJjZScKICB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHNvdXJjZSBpbXBsZW1lbnRzIG9wZXJhdGlvbnMgY29tbW9uIHRvIGFsbAogIGZpbGUtYmFzZWQgc291cmNlcyBzdWNoIGFzIGZpbGUtcGF0dGVybiBleHBhbnNpb24gYW5kIHNwbGl0dGluZyBpbnRvIGJ1bmRsZXMKICBmb3IgcGFyYWxsZWwgcHJvY2Vzc2luZy4KICAiIiIKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICBuZXh0X2Jsb2NrX3N0YXJ0ID0gLTEKCiAgICBkZWYgc3BsaXRfcG9pbnRzX3VuY2xhaW1lZChzdG9wX3Bvc2l0aW9uKToKICAgICAgaWYgbmV4dF9ibG9ja19zdGFydCA+PSBzdG9wX3Bvc2l0aW9uOgogICAgICAgICMgTmV4dCBibG9jayBzdGFydHMgYXQgb3IgYWZ0ZXIgdGhlIHN1Z2dlc3RlZCBzdG9wIHBvc2l0aW9uLiBIZW5jZQogICAgICAgICMgdGhlcmUgd2lsbCBub3QgYmUgc3BsaXQgcG9pbnRzIHRvIGJlIGNsYWltZWQgZm9yIHRoZSByYW5nZSBlbmRpbmcgYXQKICAgICAgICAjIHN1Z2dlc3RlZCBzdG9wIHBvc2l0aW9uLgogICAgICAgIHJldHVybiAwCgogICAgICByZXR1cm4gaW9iYXNlLlJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTgoKICAgIHJhbmdlX3RyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soc3BsaXRfcG9pbnRzX3VuY2xhaW1lZCkKCiAgICBzdGFydF9vZmZzZXQgPSByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIGlmIHN0YXJ0X29mZnNldCBpcyBOb25lOgogICAgICBzdGFydF9vZmZzZXQgPSAwCgogICAgd2l0aCBzZWxmLm9wZW5fZmlsZShmaWxlX25hbWUpIGFzIGY6CiAgICAgIGNvZGVjLCBzY2hlbWFfc3RyaW5nLCBzeW5jX21hcmtlciA9IFwKICAgICAgICBfQXZyb1V0aWxzLnJlYWRfbWV0YV9kYXRhX2Zyb21fZmlsZShmKQoKICAgICAgIyBXZSBoYXZlIHRvIHN0YXJ0IGF0IGN1cnJlbnQgcG9zaXRpb24gaWYgcHJldmlvdXMgYnVuZGxlIGVuZGVkIGF0IHRoZQogICAgICAjIGVuZCBvZiBhIHN5bmMgbWFya2VyLgogICAgICBzdGFydF9vZmZzZXQgPSBtYXgoMCwgc3RhcnRfb2Zmc2V0IC0gbGVuKHN5bmNfbWFya2VyKSkKICAgICAgZi5zZWVrKHN0YXJ0X29mZnNldCkKICAgICAgX0F2cm9VdGlscy5hZHZhbmNlX2ZpbGVfcGFzdF9uZXh0X3N5bmNfbWFya2VyKGYsIHN5bmNfbWFya2VyKQoKICAgICAgbmV4dF9ibG9ja19zdGFydCA9IGYudGVsbCgpCgogICAgICB3aGlsZSByYW5nZV90cmFja2VyLnRyeV9jbGFpbShuZXh0X2Jsb2NrX3N0YXJ0KToKICAgICAgICBibG9jayA9IF9BdnJvVXRpbHMucmVhZF9ibG9ja19mcm9tX2ZpbGUoCiAgICAgICAgICAgIGYsIGNvZGVjLCBzY2hlbWFfc3RyaW5nLCBzeW5jX21hcmtlcikKICAgICAgICBuZXh0X2Jsb2NrX3N0YXJ0ID0gYmxvY2sub2Zmc2V0KCkgKyBibG9jay5zaXplKCkKICAgICAgICBmb3IgcmVjb3JkIGluIGJsb2NrLnJlY29yZHMoKToKICAgICAgICAgIHlpZWxkIHJlY29yZAoKCmNsYXNzIF9GYXN0QXZyb1NvdXJjZShmaWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlKToKICAiIiJBIHNvdXJjZSBmb3IgcmVhZGluZyBBdnJvIGZpbGVzIHVzaW5nIHRoZSBgZmFzdGF2cm9gIGxpYnJhcnkuCgogIGBgX0Zhc3RBdnJvU291cmNlYGAgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGZpbGUtYmFzZWQgc291cmNlIGZyYW1ld29yawogIGF2YWlsYWJsZSBpbiBtb2R1bGUgJ2ZpbGViYXNlZHNvdXJjZScuIEhlbmNlIHBsZWFzZSByZWZlciB0byBtb2R1bGUKICAnZmlsZWJhc2Vkc291cmNlJyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGlzIHNvdXJjZSBpbXBsZW1lbnRzIG9wZXJhdGlvbnMKICBjb21tb24gdG8gYWxsIGZpbGUtYmFzZWQgc291cmNlcyBzdWNoIGFzIGZpbGUtcGF0dGVybiBleHBhbnNpb24gYW5kIHNwbGl0dGluZwogIGludG8gYnVuZGxlcyBmb3IgcGFyYWxsZWwgcHJvY2Vzc2luZy4KCiAgVE9ETzogcmVtb3ZlIGBgX0F2cm9Tb3VyY2VgYCBpbiBmYXZvciBvZiB1c2luZyBgYF9GYXN0QXZyb1NvdXJjZWBgCiAgZXZlcnl3aGVyZSBvbmNlIGl0IGhhcyBiZWVuIG1vcmUgd2lkZWx5IHRlc3RlZAogICIiIgogIGRlZiByZWFkX3JlY29yZHMoc2VsZiwgZmlsZV9uYW1lLCByYW5nZV90cmFja2VyKToKICAgIG5leHRfYmxvY2tfc3RhcnQgPSAtMQoKICAgIGRlZiBzcGxpdF9wb2ludHNfdW5jbGFpbWVkKHN0b3BfcG9zaXRpb24pOgogICAgICBpZiBuZXh0X2Jsb2NrX3N0YXJ0ID49IHN0b3BfcG9zaXRpb246CiAgICAgICAgIyBOZXh0IGJsb2NrIHN0YXJ0cyBhdCBvciBhZnRlciB0aGUgc3VnZ2VzdGVkIHN0b3AgcG9zaXRpb24uIEhlbmNlCiAgICAgICAgIyB0aGVyZSB3aWxsIG5vdCBiZSBzcGxpdCBwb2ludHMgdG8gYmUgY2xhaW1lZCBmb3IgdGhlIHJhbmdlIGVuZGluZyBhdAogICAgICAgICMgc3VnZ2VzdGVkIHN0b3AgcG9zaXRpb24uCiAgICAgICAgcmV0dXJuIDAKCiAgICAgIHJldHVybiBpb2Jhc2UuUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOCgogICAgcmFuZ2VfdHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayhzcGxpdF9wb2ludHNfdW5jbGFpbWVkKQoKICAgIHN0YXJ0X29mZnNldCA9IHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKQogICAgaWYgc3RhcnRfb2Zmc2V0IGlzIE5vbmU6CiAgICAgIHN0YXJ0X29mZnNldCA9IDAKCiAgICB3aXRoIHNlbGYub3Blbl9maWxlKGZpbGVfbmFtZSkgYXMgZjoKICAgICAgYmxvY2tzID0gYmxvY2tfcmVhZGVyKGYpCiAgICAgIHN5bmNfbWFya2VyID0gYmxvY2tzLl9oZWFkZXJbJ3N5bmMnXQoKICAgICAgIyBXZSBoYXZlIHRvIHN0YXJ0IGF0IGN1cnJlbnQgcG9zaXRpb24gaWYgcHJldmlvdXMgYnVuZGxlIGVuZGVkIGF0IHRoZQogICAgICAjIGVuZCBvZiBhIHN5bmMgbWFya2VyLgogICAgICBzdGFydF9vZmZzZXQgPSBtYXgoMCwgc3RhcnRfb2Zmc2V0IC0gbGVuKHN5bmNfbWFya2VyKSkKICAgICAgZi5zZWVrKHN0YXJ0X29mZnNldCkKICAgICAgX0F2cm9VdGlscy5hZHZhbmNlX2ZpbGVfcGFzdF9uZXh0X3N5bmNfbWFya2VyKGYsIHN5bmNfbWFya2VyKQoKICAgICAgbmV4dF9ibG9ja19zdGFydCA9IGYudGVsbCgpCgogICAgICB3aGlsZSByYW5nZV90cmFja2VyLnRyeV9jbGFpbShuZXh0X2Jsb2NrX3N0YXJ0KToKICAgICAgICBibG9jayA9IG5leHQoYmxvY2tzKQogICAgICAgIG5leHRfYmxvY2tfc3RhcnQgPSBibG9jay5vZmZzZXQgKyBibG9jay5zaXplCiAgICAgICAgZm9yIHJlY29yZCBpbiBibG9jazoKICAgICAgICAgIHlpZWxkIHJlY29yZAoKCmNsYXNzIFdyaXRlVG9BdnJvKGJlYW0udHJhbnNmb3Jtcy5QVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciB3cml0aW5nIGF2cm8gZmlsZXMuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICBzY2hlbWEsCiAgICAgIGNvZGVjPSdkZWZsYXRlJywKICAgICAgZmlsZV9uYW1lX3N1ZmZpeD0nJywKICAgICAgbnVtX3NoYXJkcz0wLAogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPU5vbmUsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24veC1hdnJvJywKICAgICAgdXNlX2Zhc3RhdnJvPV91c2VfZmFzdGF2cm8oKSk6CiAgICAiIiJJbml0aWFsaXplIGEgV3JpdGVUb0F2cm8gdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aF9wcmVmaXg6IFRoZSBmaWxlIHBhdGggdG8gd3JpdGUgdG8uIFRoZSBmaWxlcyB3cml0dGVuIHdpbGwgYmVnaW4KICAgICAgICB3aXRoIHRoaXMgcHJlZml4LCBmb2xsb3dlZCBieSBhIHNoYXJkIGlkZW50aWZpZXIgKHNlZSBudW1fc2hhcmRzKSwgYW5kCiAgICAgICAgZW5kIGluIGEgY29tbW9uIGV4dGVuc2lvbiwgaWYgZ2l2ZW4gYnkgZmlsZV9uYW1lX3N1ZmZpeC4gSW4gbW9zdCBjYXNlcywKICAgICAgICBvbmx5IHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIGFuZCBudW1fc2hhcmRzLCBzaGFyZF9uYW1lX3RlbXBsYXRlLCBhbmQKICAgICAgICBmaWxlX25hbWVfc3VmZml4IHVzZSBkZWZhdWx0IHZhbHVlcy4KICAgICAgc2NoZW1hOiBUaGUgc2NoZW1hIHRvIHVzZSwgYXMgcmV0dXJuZWQgYnkgYXZyby5zY2hlbWEuUGFyc2UKICAgICAgY29kZWM6IFRoZSBjb2RlYyB0byB1c2UgZm9yIGJsb2NrLWxldmVsIGNvbXByZXNzaW9uLiBBbnkgc3RyaW5nIHN1cHBvcnRlZAogICAgICAgIGJ5IHRoZSBBdnJvIHNwZWNpZmljYXRpb24gaXMgYWNjZXB0ZWQgKGZvciBleGFtcGxlICdudWxsJykuCiAgICAgIGZpbGVfbmFtZV9zdWZmaXg6IFN1ZmZpeCBmb3IgdGhlIGZpbGVzIHdyaXR0ZW4uCiAgICAgIG51bV9zaGFyZHM6IFRoZSBudW1iZXIgb2YgZmlsZXMgKHNoYXJkcykgdXNlZCBmb3Igb3V0cHV0LiBJZiBub3Qgc2V0LCB0aGUKICAgICAgICBzZXJ2aWNlIHdpbGwgZGVjaWRlIG9uIHRoZSBvcHRpbWFsIG51bWJlciBvZiBzaGFyZHMuCiAgICAgICAgQ29uc3RyYWluaW5nIHRoZSBudW1iZXIgb2Ygc2hhcmRzIGlzIGxpa2VseSB0byByZWR1Y2UKICAgICAgICB0aGUgcGVyZm9ybWFuY2Ugb2YgYSBwaXBlbGluZS4gIFNldHRpbmcgdGhpcyB2YWx1ZSBpcyBub3QgcmVjb21tZW5kZWQKICAgICAgICB1bmxlc3MgeW91IHJlcXVpcmUgYSBzcGVjaWZpYyBudW1iZXIgb2Ygb3V0cHV0IGZpbGVzLgogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlOiBBIHRlbXBsYXRlIHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyBmb3IKICAgICAgICB0aGUgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudC4gV2hlbiBjb25zdHJ1Y3RpbmcgYSBmaWxlbmFtZSBmb3IgYQogICAgICAgIHBhcnRpY3VsYXIgc2hhcmQgbnVtYmVyLCB0aGUgdXBwZXItY2FzZSBsZXR0ZXJzICdTJyBhbmQgJ04nIGFyZQogICAgICAgIHJlcGxhY2VkIHdpdGggdGhlIDAtcGFkZGVkIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQgcmVzcGVjdGl2ZWx5LgogICAgICAgIFRoaXMgYXJndW1lbnQgY2FuIGJlICcnIGluIHdoaWNoIGNhc2UgaXQgYmVoYXZlcyBhcyBpZiBudW1fc2hhcmRzIHdhcwogICAgICAgIHNldCB0byAxIGFuZCBvbmx5IG9uZSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgZGVmYXVsdCBwYXR0ZXJuIHVzZWQKICAgICAgICBpcyAnLVNTU1NTLW9mLU5OTk5OJyBpZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgc2hhcmRfbmFtZV90ZW1wbGF0ZS4KICAgICAgbWltZV90eXBlOiBUaGUgTUlNRSB0eXBlIHRvIHVzZSBmb3IgdGhlIHByb2R1Y2VkIGZpbGVzLCBpZiB0aGUgZmlsZXN5c3RlbQogICAgICAgIHN1cHBvcnRzIHNwZWNpZnlpbmcgTUlNRSB0eXBlcy4KICAgICAgdXNlX2Zhc3RhdnJvOiB3aGVuIHNldCwgdXNlIHRoZSBgZmFzdGF2cm9gIGxpYnJhcnkgZm9yIElPCgogICAgUmV0dXJuczoKICAgICAgQSBXcml0ZVRvQXZybyB0cmFuc2Zvcm0gdXNhYmxlIGZvciB3cml0aW5nLgogICAgIiIiCiAgICBzZWxmLl9zaW5rID0gXAogICAgICBfY3JlYXRlX2F2cm9fc2luaygKICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICBzY2hlbWEsCiAgICAgICAgICBjb2RlYywKICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICBudW1fc2hhcmRzLAogICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICAgIG1pbWVfdHlwZSwKICAgICAgICAgIHVzZV9mYXN0YXZybwogICAgICApCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgYmVhbS5pby5pb2Jhc2UuV3JpdGUoc2VsZi5fc2luaykKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NpbmtfZGQnOiBzZWxmLl9zaW5rfQoKCmRlZiBfY3JlYXRlX2F2cm9fc2luaygKICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICBzY2hlbWEsCiAgICBjb2RlYywKICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICBudW1fc2hhcmRzLAogICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgIG1pbWVfdHlwZSwKICAgIHVzZV9mYXN0YXZybyk6CiAgcmV0dXJuIFwKICAgICAgX0Zhc3RBdnJvU2luaygKICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICBzY2hlbWEsCiAgICAgICAgICBjb2RlYywKICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICBudW1fc2hhcmRzLAogICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICAgIG1pbWVfdHlwZQogICAgICApIFwKICAgICAgaWYgdXNlX2Zhc3RhdnJvIFwKICAgICAgZWxzZSBcCiAgICAgIF9BdnJvU2luaygKICAgICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgICBzY2hlbWEsCiAgICAgICAgICBjb2RlYywKICAgICAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgICBudW1fc2hhcmRzLAogICAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICAgIG1pbWVfdHlwZQogICAgICApCgoKY2xhc3MgX0Jhc2VBdnJvU2luayhmaWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmspOgogICIiIkEgYmFzZSBmb3IgYSBzaW5rIGZvciBhdnJvIGZpbGVzLiAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgIHNjaGVtYSwKICAgICAgY29kZWMsCiAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgIG51bV9zaGFyZHMsCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgIG1pbWVfdHlwZSk6CiAgICBzdXBlcihfQmFzZUF2cm9TaW5rLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgIGZpbGVfbmFtZV9zdWZmaXg9ZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICBudW1fc2hhcmRzPW51bV9zaGFyZHMsCiAgICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZT1zaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgIGNvZGVyPU5vbmUsCiAgICAgICAgbWltZV90eXBlPW1pbWVfdHlwZSwKICAgICAgICAjIENvbXByZXNzaW9uIGhhcHBlbnMgYXQgdGhlIGJsb2NrIGxldmVsIHVzaW5nIHRoZSBzdXBwbGllZCBjb2RlYywgYW5kCiAgICAgICAgIyBub3QgYXQgdGhlIGZpbGUgbGV2ZWwuCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRCkKICAgIHNlbGYuX3NjaGVtYSA9IHNjaGVtYQogICAgc2VsZi5fY29kZWMgPSBjb2RlYwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmVzID0gc3VwZXIoX0Jhc2VBdnJvU2luaywgc2VsZikuZGlzcGxheV9kYXRhKCkKICAgIHJlc1snY29kZWMnXSA9IHN0cihzZWxmLl9jb2RlYykKICAgIHJlc1snc2NoZW1hJ10gPSBzdHIoc2VsZi5fc2NoZW1hKQogICAgcmV0dXJuIHJlcwoKCmNsYXNzIF9BdnJvU2luayhfQmFzZUF2cm9TaW5rKToKICAiIiJBIHNpbmsgZm9yIGF2cm8gZmlsZXMgdXNpbmcgQXZyby4gIiIiCiAgZGVmIG9wZW4oc2VsZiwgdGVtcF9wYXRoKToKICAgIGZpbGVfaGFuZGxlID0gc3VwZXIoX0F2cm9TaW5rLCBzZWxmKS5vcGVuKHRlbXBfcGF0aCkKICAgIHJldHVybiBhdnJvLmRhdGFmaWxlLkRhdGFGaWxlV3JpdGVyKAogICAgICAgIGZpbGVfaGFuZGxlLCBhdnJvLmlvLkRhdHVtV3JpdGVyKCksIHNlbGYuX3NjaGVtYSwgc2VsZi5fY29kZWMpCgogIGRlZiB3cml0ZV9yZWNvcmQoc2VsZiwgd3JpdGVyLCB2YWx1ZSk6CiAgICB3cml0ZXIuYXBwZW5kKHZhbHVlKQoKCmNsYXNzIF9GYXN0QXZyb1NpbmsoX0Jhc2VBdnJvU2luayk6CiAgIiIiQSBzaW5rIGZvciBhdnJvIGZpbGVzIHVzaW5nIEZhc3RBdnJvLiAiIiIKICBkZWYgb3BlbihzZWxmLCB0ZW1wX3BhdGgpOgogICAgZmlsZV9oYW5kbGUgPSBzdXBlcihfRmFzdEF2cm9TaW5rLCBzZWxmKS5vcGVuKHRlbXBfcGF0aCkKICAgIHJldHVybiBXcml0ZXIoZmlsZV9oYW5kbGUsIHNlbGYuX3NjaGVtYSwgc2VsZi5fY29kZWMpCgogIGRlZiB3cml0ZV9yZWNvcmQoc2VsZiwgd3JpdGVyLCB2YWx1ZSk6CiAgICB3cml0ZXIud3JpdGUodmFsdWUpCgogIGRlZiBjbG9zZShzZWxmLCB3cml0ZXIpOgogICAgd3JpdGVyLmZsdXNoKCkKICAgIHdyaXRlci5mby5jbG9zZSgpCpR9lCiMDV91c2VfZmFzdGF2cm+UalYxAQBLUUtSh5SMFVJlYWRGcm9tQXZyby5fX2luaXRfX5RqVjEBAEtYS6uHlIwTUmVhZEZyb21BdnJvLmV4cGFuZJRqVjEBAEutS66HlIwZUmVhZEZyb21BdnJvLmRpc3BsYXlfZGF0YZRqVjEBAEuwS7GHlIwMUmVhZEZyb21BdnJvlGpdMQEAS1VLsYeUjBhSZWFkQWxsRnJvbUF2cm8uX19pbml0X1+UalYxAQBLvUvbh5SMFlJlYWRBbGxGcm9tQXZyby5leHBhbmSUalYxAQBL3Uveh5SMD1JlYWRBbGxGcm9tQXZyb5RqXTEBAEu0S96HlIwjX0F2cm9VdGlscy5yZWFkX21ldGFfZGF0YV9mcm9tX2ZpbGWUalYxAQBL4k0EAYeUjB9fQXZyb1V0aWxzLnJlYWRfYmxvY2tfZnJvbV9maWxllGpWMQEATQYBTSQBh5SMLV9BdnJvVXRpbHMuYWR2YW5jZV9maWxlX3Bhc3RfbmV4dF9zeW5jX21hcmtlcpRqVjEBAE0mAU06AYeUjApfQXZyb1V0aWxzlGpdMQEAS+FNOgGHlIwTX2NyZWF0ZV9hdnJvX3NvdXJjZZRqVjEBAE09AU1OAYeUjBNfQXZyb0Jsb2NrLl9faW5pdF9flGpWMQEATVMBTVwBh5SMD19BdnJvQmxvY2suc2l6ZZRqVjEBAE1eAU1fAYeUjBFfQXZyb0Jsb2NrLm9mZnNldJRqVjEBAE1hAU1iAYeUjBxfQXZyb0Jsb2NrLl9kZWNvbXByZXNzX2J5dGVzlGpWMQEATWQBTXwBh5SMFl9BdnJvQmxvY2subnVtX3JlY29yZHOUalYxAQBNfgFNfwGHlIwSX0F2cm9CbG9jay5yZWNvcmRzlGpWMQEATYEBTYsBh5SMCl9BdnJvQmxvY2uUal0xAQBNUQFNiwGHlIwYX0F2cm9Tb3VyY2UucmVhZF9yZWNvcmRzlGpWMQEATZcBTboBh5SMC19BdnJvU291cmNllGpdMQEATY4BTboBh5SMHF9GYXN0QXZyb1NvdXJjZS5yZWFkX3JlY29yZHOUalYxAQBNyQFN6wGHlIwPX0Zhc3RBdnJvU291cmNllGpdMQEATb0BTesBh5SMFFdyaXRlVG9BdnJvLl9faW5pdF9flGpWMQEATfABTSMCh5SMEldyaXRlVG9BdnJvLmV4cGFuZJRqVjEBAE0lAk0mAoeUjBhXcml0ZVRvQXZyby5kaXNwbGF5X2RhdGGUalYxAQBNKAJNKQKHlIwLV3JpdGVUb0F2cm+Ual0xAQBN7gFNKQKHlIwRX2NyZWF0ZV9hdnJvX3NpbmuUalYxAQBNLAJNSQKHlIwWX0Jhc2VBdnJvU2luay5fX2luaXRfX5RqVjEBAE1OAk1iAoeUlTcEAQAAAAAAjBpfQmFzZUF2cm9TaW5rLmRpc3BsYXlfZGF0YZRqVjEBAE1kAk1oAoeUjA1fQmFzZUF2cm9TaW5rlGpdMQEATUwCTWgCh5SMDl9BdnJvU2luay5vcGVulGpWMQEATW0CTXACh5SMFl9BdnJvU2luay53cml0ZV9yZWNvcmSUalYxAQBNcgJNcwKHlIwJX0F2cm9TaW5rlGpdMQEATWsCTXMCh5SMEl9GYXN0QXZyb1Npbmsub3BlbpRqVjEBAE14Ak16AoeUjBpfRmFzdEF2cm9TaW5rLndyaXRlX3JlY29yZJRqVjEBAE18Ak19AoeUjBNfRmFzdEF2cm9TaW5rLmNsb3NllGpWMQEATX8CTYECh5SMDV9GYXN0QXZyb1NpbmuUal0xAQBNdgJNgQKHlHV9lCiMDFJlYWRGcm9tQXZyb5RqTwMAAIwTUmVhZEZyb21BdnJvLmV4cGFuZJRqTwMAAIwZUmVhZEZyb21BdnJvLmRpc3BsYXlfZGF0YZRqTwMAAIwPUmVhZEFsbEZyb21BdnJvlGpPAwAAjBZSZWFkQWxsRnJvbUF2cm8uZXhwYW5klGpPAwAAjAtXcml0ZVRvQXZyb5RqTwMAAIwSV3JpdGVUb0F2cm8uZXhwYW5klGpPAwAAjBhXcml0ZVRvQXZyby5kaXNwbGF5X2RhdGGUak8DAAB1jBVhcGFjaGVfYmVhbS5pby5hdnJvaW+UdJSMKmFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmJvdG8zX2NsaWVudJQoWJwdAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzIGltcG9ydCBtZXNzYWdlcwoKdHJ5OgogICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgIyBweWxpbnQ6IGRpc2FibGU9dW5ncm91cGVkLWltcG9ydHMKICBpbXBvcnQgYm90bzMKCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBib3RvMyA9IE5vbmUKCgpjbGFzcyBDbGllbnQob2JqZWN0KToKICAiIiIKICBXcmFwcGVyIGZvciBib3RvMyBsaWJyYXJ5CiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgYXNzZXJ0IGJvdG8zIGlzIG5vdCBOb25lLCAnTWlzc2luZyBib3RvMyByZXF1aXJlbWVudCcKICAgIHNlbGYuY2xpZW50ID0gYm90bzMuY2xpZW50KCdzMycpCgogIGRlZiBnZXRfb2JqZWN0X21ldGFkYXRhKHNlbGYsIHJlcXVlc3QpOgogICAgciIiIlJldHJpZXZlcyBhbiBvYmplY3QncyBtZXRhZGF0YS4KCiAgICBBcmdzOgogICAgICByZXF1ZXN0OiAoR2V0UmVxdWVzdCkgaW5wdXQgbWVzc2FnZQoKICAgIFJldHVybnM6CiAgICAgIChPYmplY3QpIFRoZSByZXNwb25zZSBtZXNzYWdlLgogICAgIiIiCiAgICBrd2FyZ3MgPSB7J0J1Y2tldCc6IHJlcXVlc3QuYnVja2V0LCAnS2V5JzogcmVxdWVzdC5vYmplY3R9CgogICAgdHJ5OgogICAgICBib3RvX3Jlc3BvbnNlID0gc2VsZi5jbGllbnQuaGVhZF9vYmplY3QoKiprd2FyZ3MpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgIG1lc3NhZ2UgPSBlLnJlc3BvbnNlWydFcnJvciddWydNZXNzYWdlJ10KICAgICAgY29kZSA9IGUucmVzcG9uc2VbJ1Jlc3BvbnNlTWV0YWRhdGEnXVsnSFRUUFN0YXR1c0NvZGUnXQogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKG1lc3NhZ2UsIGNvZGUpCgogICAgaXRlbSA9IG1lc3NhZ2VzLkl0ZW0oCiAgICAgICAgYm90b19yZXNwb25zZVsnRVRhZyddLAogICAgICAgIHJlcXVlc3Qub2JqZWN0LAogICAgICAgIGJvdG9fcmVzcG9uc2VbJ0xhc3RNb2RpZmllZCddLAogICAgICAgIGJvdG9fcmVzcG9uc2VbJ0NvbnRlbnRMZW5ndGgnXSwKICAgICAgICBib3RvX3Jlc3BvbnNlWydDb250ZW50VHlwZSddKQoKICAgIHJldHVybiBpdGVtCgogIGRlZiBnZXRfcmFuZ2Uoc2VsZiwgcmVxdWVzdCwgc3RhcnQsIGVuZCk6CiAgICByIiIiUmV0cmlldmVzIGFuIG9iamVjdCdzIGNvbnRlbnRzLgoKICAgICAgQXJnczoKICAgICAgICByZXF1ZXN0OiAoR2V0UmVxdWVzdCkgcmVxdWVzdAogICAgICBSZXR1cm5zOgogICAgICAgIChieXRlcykgVGhlIHJlc3BvbnNlIG1lc3NhZ2UuCiAgICAgICIiIgogICAgdHJ5OgogICAgICBib3RvX3Jlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0X29iamVjdCgKICAgICAgICAgIEJ1Y2tldD1yZXF1ZXN0LmJ1Y2tldCwKICAgICAgICAgIEtleT1yZXF1ZXN0Lm9iamVjdCwKICAgICAgICAgIFJhbmdlPSdieXRlcz17fS17fScuZm9ybWF0KHN0YXJ0LCBlbmQgLSAxKSkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgbWVzc2FnZSA9IGUucmVzcG9uc2VbJ0Vycm9yJ11bJ01lc3NhZ2UnXQogICAgICBjb2RlID0gZS5yZXNwb25zZVsnUmVzcG9uc2VNZXRhZGF0YSddWydIVFRQU3RhdHVzQ29kZSddCiAgICAgIHJhaXNlIG1lc3NhZ2VzLlMzQ2xpZW50RXJyb3IobWVzc2FnZSwgY29kZSkKCiAgICByZXR1cm4gYm90b19yZXNwb25zZVsnQm9keSddLnJlYWQoKSAgIyBBIGJ5dGVzIG9iamVjdAoKICBkZWYgbGlzdChzZWxmLCByZXF1ZXN0KToKICAgIHIiIiJSZXRyaWV2ZXMgYSBsaXN0IG9mIG9iamVjdHMgbWF0Y2hpbmcgdGhlIGNyaXRlcmlhLgoKICAgIEFyZ3M6CiAgICAgIHJlcXVlc3Q6IChMaXN0UmVxdWVzdCkgaW5wdXQgbWVzc2FnZQogICAgUmV0dXJuczoKICAgICAgKExpc3RSZXNwb25zZSkgVGhlIHJlc3BvbnNlIG1lc3NhZ2UuCiAgICAiIiIKICAgIGt3YXJncyA9IHsnQnVja2V0JzogcmVxdWVzdC5idWNrZXQsICdQcmVmaXgnOiByZXF1ZXN0LnByZWZpeH0KCiAgICBpZiByZXF1ZXN0LmNvbnRpbnVhdGlvbl90b2tlbiBpcyBub3QgTm9uZToKICAgICAga3dhcmdzWydDb250aW51YXRpb25Ub2tlbiddID0gcmVxdWVzdC5jb250aW51YXRpb25fdG9rZW4KCiAgICB0cnk6CiAgICAgIGJvdG9fcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5saXN0X29iamVjdHNfdjIoKiprd2FyZ3MpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgIG1lc3NhZ2UgPSBlLnJlc3BvbnNlWydFcnJvciddWydNZXNzYWdlJ10KICAgICAgY29kZSA9IGUucmVzcG9uc2VbJ1Jlc3BvbnNlTWV0YWRhdGEnXVsnSFRUUFN0YXR1c0NvZGUnXQogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKG1lc3NhZ2UsIGNvZGUpCgogICAgaWYgYm90b19yZXNwb25zZVsnS2V5Q291bnQnXSA9PSAwOgogICAgICBtZXNzYWdlID0gJ1RyaWVkIHRvIGxpc3Qgbm9uZXhpc3RlbnQgUzMgcGF0aDogczM6Ly8lcy8lcycgJSAoCiAgICAgICAgICByZXF1ZXN0LmJ1Y2tldCwgcmVxdWVzdC5wcmVmaXgpCiAgICAgIHJhaXNlIG1lc3NhZ2VzLlMzQ2xpZW50RXJyb3IobWVzc2FnZSwgNDA0KQoKICAgIGl0ZW1zID0gWwogICAgICAgIG1lc3NhZ2VzLkl0ZW0oCiAgICAgICAgICAgIGV0YWc9Y29udGVudFsnRVRhZyddLAogICAgICAgICAgICBrZXk9Y29udGVudFsnS2V5J10sCiAgICAgICAgICAgIGxhc3RfbW9kaWZpZWQ9Y29udGVudFsnTGFzdE1vZGlmaWVkJ10sCiAgICAgICAgICAgIHNpemU9Y29udGVudFsnU2l6ZSddKSBmb3IgY29udGVudCBpbiBib3RvX3Jlc3BvbnNlWydDb250ZW50cyddCiAgICBdCgogICAgdHJ5OgogICAgICBuZXh0X3Rva2VuID0gYm90b19yZXNwb25zZVsnTmV4dENvbnRpbnVhdGlvblRva2VuJ10KICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgbmV4dF90b2tlbiA9IE5vbmUKCiAgICByZXNwb25zZSA9IG1lc3NhZ2VzLkxpc3RSZXNwb25zZShpdGVtcywgbmV4dF90b2tlbikKICAgIHJldHVybiByZXNwb25zZQoKICBkZWYgY3JlYXRlX211bHRpcGFydF91cGxvYWQoc2VsZiwgcmVxdWVzdCk6CiAgICByIiIiSW5pdGF0ZXMgYSBtdWx0aXBhcnQgdXBsb2FkIHRvIFMzIGZvciBhIGdpdmVuIG9iamVjdAoKICAgIEFyZ3M6CiAgICAgIHJlcXVlc3Q6IChVcGxvYWRSZXF1ZXN0KSBpbnB1dCBtZXNzYWdlCiAgICBSZXR1cm5zOgogICAgICAoVXBsb2FkUmVzcG9uc2UpIFRoZSByZXNwb25zZSBtZXNzYWdlLgogICAgIiIiCiAgICB0cnk6CiAgICAgIGJvdG9fcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5jcmVhdGVfbXVsdGlwYXJ0X3VwbG9hZCgKICAgICAgICAgIEJ1Y2tldD1yZXF1ZXN0LmJ1Y2tldCwKICAgICAgICAgIEtleT1yZXF1ZXN0Lm9iamVjdCwKICAgICAgICAgIENvbnRlbnRUeXBlPXJlcXVlc3QubWltZV90eXBlKQogICAgICByZXNwb25zZSA9IG1lc3NhZ2VzLlVwbG9hZFJlc3BvbnNlKGJvdG9fcmVzcG9uc2VbJ1VwbG9hZElkJ10pCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgIG1lc3NhZ2UgPSBlLnJlc3BvbnNlWydFcnJvciddWydNZXNzYWdlJ10KICAgICAgY29kZSA9IGUucmVzcG9uc2VbJ1Jlc3BvbnNlTWV0YWRhdGEnXVsnSFRUUFN0YXR1c0NvZGUnXQogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKG1lc3NhZ2UsIGNvZGUpCiAgICByZXR1cm4gcmVzcG9uc2UKCiAgZGVmIHVwbG9hZF9wYXJ0KHNlbGYsIHJlcXVlc3QpOgogICAgciIiIlVwbG9hZHMgcGFydCBvZiBhIGZpbGUgdG8gUzMgZHVyaW5nIGEgbXVsdGlwYXJ0IHVwbG9hZAoKICAgIEFyZ3M6CiAgICAgIHJlcXVlc3Q6IChVcGxvYWRQYXJ0UmVxdWVzdCkgaW5wdXQgbWVzc2FnZQogICAgUmV0dXJuczoKICAgICAgKFVwbG9hZFBhcnRSZXNwb25zZSkgVGhlIHJlc3BvbnNlIG1lc3NhZ2UuCiAgICAiIiIKICAgIHRyeToKICAgICAgYm90b19yZXNwb25zZSA9IHNlbGYuY2xpZW50LnVwbG9hZF9wYXJ0KAogICAgICAgICAgQm9keT1yZXF1ZXN0LmJ5dGVzLAogICAgICAgICAgQnVja2V0PXJlcXVlc3QuYnVja2V0LAogICAgICAgICAgS2V5PXJlcXVlc3Qub2JqZWN0LAogICAgICAgICAgUGFydE51bWJlcj1yZXF1ZXN0LnBhcnRfbnVtYmVyLAogICAgICAgICAgVXBsb2FkSWQ9cmVxdWVzdC51cGxvYWRfaWQpCiAgICAgIHJlc3BvbnNlID0gbWVzc2FnZXMuVXBsb2FkUGFydFJlc3BvbnNlKAogICAgICAgICAgYm90b19yZXNwb25zZVsnRVRhZyddLCByZXF1ZXN0LnBhcnRfbnVtYmVyKQogICAgICByZXR1cm4gcmVzcG9uc2UKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgbWVzc2FnZSA9IGUucmVzcG9uc2VbJ0Vycm9yJ11bJ01lc3NhZ2UnXQogICAgICBjb2RlID0gZS5yZXNwb25zZVsnUmVzcG9uc2VNZXRhZGF0YSddWydIVFRQU3RhdHVzQ29kZSddCiAgICAgIHJhaXNlIG1lc3NhZ2VzLlMzQ2xpZW50RXJyb3IobWVzc2FnZSwgY29kZSkKCiAgZGVmIGNvbXBsZXRlX211bHRpcGFydF91cGxvYWQoc2VsZiwgcmVxdWVzdCk6CiAgICByIiIiQ29tcGxldGVzIGEgbXVsdGlwYXJ0IHVwbG9hZCB0byBTMwoKICAgIEFyZ3M6CiAgICAgIHJlcXVlc3Q6IChVcGxvYWRQYXJ0UmVxdWVzdCkgaW5wdXQgbWVzc2FnZQogICAgUmV0dXJuczoKICAgICAgKFZvaWQpIFRoZSByZXNwb25zZSBtZXNzYWdlLgogICAgIiIiCiAgICBwYXJ0cyA9IHsnUGFydHMnOiByZXF1ZXN0LnBhcnRzfQogICAgdHJ5OgogICAgICBzZWxmLmNsaWVudC5jb21wbGV0ZV9tdWx0aXBhcnRfdXBsb2FkKAogICAgICAgICAgQnVja2V0PXJlcXVlc3QuYnVja2V0LAogICAgICAgICAgS2V5PXJlcXVlc3Qub2JqZWN0LAogICAgICAgICAgVXBsb2FkSWQ9cmVxdWVzdC51cGxvYWRfaWQsCiAgICAgICAgICBNdWx0aXBhcnRVcGxvYWQ9cGFydHMpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgIG1lc3NhZ2UgPSBlLnJlc3BvbnNlWydFcnJvciddWydNZXNzYWdlJ10KICAgICAgY29kZSA9IGUucmVzcG9uc2VbJ1Jlc3BvbnNlTWV0YWRhdGEnXVsnSFRUUFN0YXR1c0NvZGUnXQogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKG1lc3NhZ2UsIGNvZGUpCgogIGRlZiBkZWxldGUoc2VsZiwgcmVxdWVzdCk6CiAgICByIiIiRGVsZXRlcyBnaXZlbiBvYmplY3QgZnJvbSBidWNrZXQKICAgIEFyZ3M6CiAgICAgICAgcmVxdWVzdDogKERlbGV0ZVJlcXVlc3QpIGlucHV0IG1lc3NhZ2UKICAgICAgUmV0dXJuczoKICAgICAgICAodm9pZCkgVm9pZCwgb3RoZXJ3aXNlIHdpbGwgcmFpc2UgaWYgYW4gZXJyb3Igb2NjdXJzCiAgICAiIiIKICAgIHRyeToKICAgICAgc2VsZi5jbGllbnQuZGVsZXRlX29iamVjdChCdWNrZXQ9cmVxdWVzdC5idWNrZXQsIEtleT1yZXF1ZXN0Lm9iamVjdCkKCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgIG1lc3NhZ2UgPSBlLnJlc3BvbnNlWydFcnJvciddWydNZXNzYWdlJ10KICAgICAgY29kZSA9IGUucmVzcG9uc2VbJ1Jlc3BvbnNlTWV0YWRhdGEnXVsnSFRUUFN0YXR1c0NvZGUnXQogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKG1lc3NhZ2UsIGNvZGUpCgogIGRlZiBkZWxldGVfYmF0Y2goc2VsZiwgcmVxdWVzdCk6CgogICAgYXdzX3JlcXVlc3QgPSB7CiAgICAgICAgJ0J1Y2tldCc6IHJlcXVlc3QuYnVja2V0LAogICAgICAgICdEZWxldGUnOiB7CiAgICAgICAgICAgICdPYmplY3RzJzogW3sKICAgICAgICAgICAgICAgICdLZXknOiBvYmplY3QKICAgICAgICAgICAgfSBmb3Igb2JqZWN0IGluIHJlcXVlc3Qub2JqZWN0c10KICAgICAgICB9CiAgICB9CgogICAgdHJ5OgogICAgICBhd3NfcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5kZWxldGVfb2JqZWN0cygqKmF3c19yZXF1ZXN0KQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICBtZXNzYWdlID0gZS5yZXNwb25zZVsnRXJyb3InXVsnTWVzc2FnZSddCiAgICAgIGNvZGUgPSBpbnQoZS5yZXNwb25zZVsnUmVzcG9uc2VNZXRhZGF0YSddWydIVFRQU3RhdHVzQ29kZSddKQogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKG1lc3NhZ2UsIGNvZGUpCgogICAgZGVsZXRlZCA9IFtvYmpbJ0tleSddIGZvciBvYmogaW4gYXdzX3Jlc3BvbnNlLmdldCgnRGVsZXRlZCcsIFtdKV0KCiAgICBmYWlsZWQgPSBbb2JqWydLZXknXSBmb3Igb2JqIGluIGF3c19yZXNwb25zZS5nZXQoJ0Vycm9ycycsIFtdKV0KCiAgICBlcnJvcnMgPSBbCiAgICAgICAgbWVzc2FnZXMuUzNDbGllbnRFcnJvcihvYmpbJ01lc3NhZ2UnXSwgb2JqWydDb2RlJ10pCiAgICAgICAgZm9yIG9iaiBpbiBhd3NfcmVzcG9uc2UuZ2V0KCdFcnJvcnMnLCBbXSkKICAgIF0KCiAgICByZXR1cm4gbWVzc2FnZXMuRGVsZXRlQmF0Y2hSZXNwb25zZShkZWxldGVkLCBmYWlsZWQsIGVycm9ycykKCiAgZGVmIGNvcHkoc2VsZiwgcmVxdWVzdCk6CiAgICB0cnk6CiAgICAgIGNvcHlfc3JjID0geydCdWNrZXQnOiByZXF1ZXN0LnNyY19idWNrZXQsICdLZXknOiByZXF1ZXN0LnNyY19rZXl9CiAgICAgIHNlbGYuY2xpZW50LmNvcHkoY29weV9zcmMsIHJlcXVlc3QuZGVzdF9idWNrZXQsIHJlcXVlc3QuZGVzdF9rZXkpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgIG1lc3NhZ2UgPSBlLnJlc3BvbnNlWydFcnJvciddWydNZXNzYWdlJ10KICAgICAgY29kZSA9IGUucmVzcG9uc2VbJ1Jlc3BvbnNlTWV0YWRhdGEnXVsnSFRUUFN0YXR1c0NvZGUnXQogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKG1lc3NhZ2UsIGNvZGUpCpR9lCiMD0NsaWVudC5fX2luaXRfX5RqVjEBAEslSyeHlIwaQ2xpZW50LmdldF9vYmplY3RfbWV0YWRhdGGUalYxAQBLKUtCh5SMEENsaWVudC5nZXRfcmFuZ2WUalYxAQBLREtWh5SMC0NsaWVudC5saXN0lGpWMQEAS1hLf4eUjB5DbGllbnQuY3JlYXRlX211bHRpcGFydF91cGxvYWSUalYxAQBLgUuTh5SMEkNsaWVudC51cGxvYWRfcGFydJRqVjEBAEuVS6qHlIwgQ2xpZW50LmNvbXBsZXRlX211bHRpcGFydF91cGxvYWSUalYxAQBLrEu+h5SMDUNsaWVudC5kZWxldGWUalYxAQBLwEvNh5SME0NsaWVudC5kZWxldGVfYmF0Y2iUalYxAQBLz0vqh5SMC0NsaWVudC5jb3B5lGpWMQEAS+xL84eUjAZDbGllbnSUal0xAQBLIUvzh5R1fZQojAZDbGllbnSUamsDAACMGkNsaWVudC5nZXRfb2JqZWN0X21ldGFkYXRhlGprAwAAjBBDbGllbnQuZ2V0X3JhbmdllGprAwAAjAtDbGllbnQubGlzdJRqawMAAIweQ2xpZW50LmNyZWF0ZV9tdWx0aXBhcnRfdXBsb2FklGprAwAAjBJDbGllbnQudXBsb2FkX3BhcnSUamsDAACMIENsaWVudC5jb21wbGV0ZV9tdWx0aXBhcnRfdXBsb2FklGprAwAAjA1DbGllbnQuZGVsZXRllGprAwAAjBNDbGllbnQuZGVsZXRlX2JhdGNolGprAwAAjAtDbGllbnQuY29weZRqawMAAHWMKmFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmJvdG8zX2NsaWVudJR0lIwpYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMuZmFrZV9jbGllbnSUKFhmHgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCB0aW1lCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzIGltcG9ydCBtZXNzYWdlcwoKCmNsYXNzIEZha2VGaWxlKG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1Y2tldCwga2V5LCBjb250ZW50cywgZXRhZz1Ob25lKToKICAgIHNlbGYuYnVja2V0ID0gYnVja2V0CiAgICBzZWxmLmtleSA9IGtleQogICAgc2VsZi5jb250ZW50cyA9IGNvbnRlbnRzCgogICAgc2VsZi5sYXN0X21vZGlmaWVkID0gdGltZS50aW1lKCkKCiAgICBpZiBub3QgZXRhZzoKICAgICAgc2VsZi5ldGFnID0gJyIlcy0xIicgJSAoJ3gnICogMzIpCiAgICBlbHNlOgogICAgICBzZWxmLmV0YWcgPSBldGFnCgogIGRlZiBnZXRfbWV0YWRhdGEoc2VsZik6CiAgICBsYXN0X21vZGlmaWVkX2RhdGV0aW1lID0gTm9uZQogICAgaWYgc2VsZi5sYXN0X21vZGlmaWVkOgogICAgICBsYXN0X21vZGlmaWVkX2RhdGV0aW1lID0gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgKICAgICAgICAgIHNlbGYubGFzdF9tb2RpZmllZCkKCiAgICByZXR1cm4gbWVzc2FnZXMuSXRlbSgKICAgICAgICBzZWxmLmV0YWcsCiAgICAgICAgc2VsZi5rZXksCiAgICAgICAgbGFzdF9tb2RpZmllZF9kYXRldGltZSwKICAgICAgICBsZW4oc2VsZi5jb250ZW50cyksCiAgICAgICAgbWltZV90eXBlPU5vbmUpCgoKY2xhc3MgRmFrZVMzQ2xpZW50KG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5maWxlcyA9IHt9CiAgICBzZWxmLmxpc3RfY29udGludWF0aW9uX3Rva2VucyA9IHt9CiAgICBzZWxmLm11bHRpcGFydF91cGxvYWRzID0ge30KCiAgICAjIGJvdG8zIGhhcyBkaWZmZXJlbnQgYmVoYXZpb3Igd2hlbiBydW5uaW5nIHNvbWUgb3BlcmF0aW9ucyBhZ2FpbnN0IGEgYnVja2V0CiAgICAjIHRoYXQgZXhpc3RzIHZzLiBhZ2FpbnN0IG9uZSB0aGF0IGRvZXNuJ3QuIFRvIGVtdWxhdGUgdGhhdCBiZWhhdmlvciwgdGhlCiAgICAjIG1vY2sgY2xpZW50IGtlZXBzIGEgc2V0IG9mIGJ1Y2tldCBuYW1lcyB0aGF0IGl0IGtub3dzICJleGlzdCIuCiAgICBzZWxmLmtub3duX2J1Y2tldHMgPSBzZXQoKQoKICBkZWYgYWRkX2ZpbGUoc2VsZiwgZik6CiAgICBzZWxmLmZpbGVzWyhmLmJ1Y2tldCwgZi5rZXkpXSA9IGYKICAgIGlmIGYuYnVja2V0IG5vdCBpbiBzZWxmLmtub3duX2J1Y2tldHM6CiAgICAgIHNlbGYua25vd25fYnVja2V0cy5hZGQoZi5idWNrZXQpCgogIGRlZiBnZXRfZmlsZShzZWxmLCBidWNrZXQsIG9iaik6CiAgICB0cnk6CiAgICAgIHJldHVybiBzZWxmLmZpbGVzW2J1Y2tldCwgb2JqXQogICAgZXhjZXB0OgogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKCdOb3QgRm91bmQnLCA0MDQpCgogIGRlZiBkZWxldGVfZmlsZShzZWxmLCBidWNrZXQsIG9iaik6CiAgICBkZWwgc2VsZi5maWxlc1soYnVja2V0LCBvYmopXQoKICBkZWYgZ2V0X29iamVjdF9tZXRhZGF0YShzZWxmLCByZXF1ZXN0KToKICAgIHIiIiJSZXRyaWV2ZXMgYW4gb2JqZWN0J3MgbWV0YWRhdGEuCgogICAgQXJnczoKICAgICAgcmVxdWVzdDogKEdldFJlcXVlc3QpIGlucHV0IG1lc3NhZ2UKCiAgICBSZXR1cm5zOgogICAgICAoSXRlbSkgVGhlIHJlc3BvbnNlIG1lc3NhZ2UuCiAgICAiIiIKICAgICMgVE9ETzogRG8gd2Ugd2FudCB0byBtb2NrIG91dCBhIGxhY2sgb2YgY3JlZGVudGlhbHM/CiAgICBmaWxlXyA9IHNlbGYuZ2V0X2ZpbGUocmVxdWVzdC5idWNrZXQsIHJlcXVlc3Qub2JqZWN0KQogICAgcmV0dXJuIGZpbGVfLmdldF9tZXRhZGF0YSgpCgogIGRlZiBsaXN0KHNlbGYsIHJlcXVlc3QpOgogICAgYnVja2V0ID0gcmVxdWVzdC5idWNrZXQKICAgIHByZWZpeCA9IHJlcXVlc3QucHJlZml4IG9yICcnCiAgICBtYXRjaGluZ19maWxlcyA9IFtdCgogICAgZm9yIGZpbGVfYnVja2V0LCBmaWxlX25hbWUgaW4gc29ydGVkKGl0ZXIoc2VsZi5maWxlcykpOgogICAgICBpZiBidWNrZXQgPT0gZmlsZV9idWNrZXQgYW5kIGZpbGVfbmFtZS5zdGFydHN3aXRoKHByZWZpeCk6CiAgICAgICAgZmlsZV9vYmplY3QgPSBzZWxmLmdldF9maWxlKGZpbGVfYnVja2V0LCBmaWxlX25hbWUpLmdldF9tZXRhZGF0YSgpCiAgICAgICAgbWF0Y2hpbmdfZmlsZXMuYXBwZW5kKGZpbGVfb2JqZWN0KQoKICAgIGlmIG5vdCBtYXRjaGluZ19maWxlczoKICAgICAgbWVzc2FnZSA9ICdUcmllZCB0byBsaXN0IG5vbmV4aXN0ZW50IFMzIHBhdGg6IHMzOi8vJXMvJXMnICUgKAogICAgICAgICAgYnVja2V0LCBwcmVmaXgpCiAgICAgIHJhaXNlIG1lc3NhZ2VzLlMzQ2xpZW50RXJyb3IobWVzc2FnZSwgNDA0KQoKICAgICMgSGFuZGxlIHBhZ2luYXRpb24uCiAgICBpdGVtc19wZXJfcGFnZSA9IDUKICAgIGlmIG5vdCByZXF1ZXN0LmNvbnRpbnVhdGlvbl90b2tlbjoKICAgICAgcmFuZ2Vfc3RhcnQgPSAwCiAgICBlbHNlOgogICAgICBpZiByZXF1ZXN0LmNvbnRpbnVhdGlvbl90b2tlbiBub3QgaW4gc2VsZi5saXN0X2NvbnRpbnVhdGlvbl90b2tlbnM6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBwYWdlIHRva2VuLicpCiAgICAgIHJhbmdlX3N0YXJ0ID0gc2VsZi5saXN0X2NvbnRpbnVhdGlvbl90b2tlbnNbcmVxdWVzdC5jb250aW51YXRpb25fdG9rZW5dCiAgICAgIGRlbCBzZWxmLmxpc3RfY29udGludWF0aW9uX3Rva2Vuc1tyZXF1ZXN0LmNvbnRpbnVhdGlvbl90b2tlbl0KCiAgICByZXN1bHQgPSBtZXNzYWdlcy5MaXN0UmVzcG9uc2UoCiAgICAgICAgaXRlbXM9bWF0Y2hpbmdfZmlsZXNbcmFuZ2Vfc3RhcnQ6cmFuZ2Vfc3RhcnQgKyBpdGVtc19wZXJfcGFnZV0pCgogICAgaWYgcmFuZ2Vfc3RhcnQgKyBpdGVtc19wZXJfcGFnZSA8IGxlbihtYXRjaGluZ19maWxlcyk6CiAgICAgIG5leHRfcmFuZ2Vfc3RhcnQgPSByYW5nZV9zdGFydCArIGl0ZW1zX3Blcl9wYWdlCiAgICAgIG5leHRfY29udGludWF0aW9uX3Rva2VuID0gJ19wYWdlX3Rva2VuXyVzXyVzXyVkJyAlICgKICAgICAgICAgIGJ1Y2tldCwgcHJlZml4LCBuZXh0X3JhbmdlX3N0YXJ0KQogICAgICBzZWxmLmxpc3RfY29udGludWF0aW9uX3Rva2Vuc1tuZXh0X2NvbnRpbnVhdGlvbl90b2tlbl0gPSBuZXh0X3JhbmdlX3N0YXJ0CiAgICAgIHJlc3VsdC5uZXh0X3Rva2VuID0gbmV4dF9jb250aW51YXRpb25fdG9rZW4KCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBnZXRfcmFuZ2Uoc2VsZiwgcmVxdWVzdCwgc3RhcnQsIGVuZCk6CiAgICByIiIiUmV0cmlldmVzIGFuIG9iamVjdC4KCiAgICAgIEFyZ3M6CiAgICAgICAgcmVxdWVzdDogKEdldFJlcXVlc3QpIHJlcXVlc3QKICAgICAgUmV0dXJuczoKICAgICAgICAoYnl0ZXMpIFRoZSByZXNwb25zZSBtZXNzYWdlLgogICAgICAiIiIKCiAgICBmaWxlXyA9IHNlbGYuZ2V0X2ZpbGUocmVxdWVzdC5idWNrZXQsIHJlcXVlc3Qub2JqZWN0KQoKICAgICMgUmVwbGljYXRlcyBTMydzIGJlaGF2aW9yLCBwZXIgdGhlIHNwZWMgaGVyZToKICAgICMgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTQuaHRtbCNzZWMxNC4zNQogICAgaWYgc3RhcnQgPCAwIG9yIGVuZCA8PSBzdGFydDoKICAgICAgcmV0dXJuIGZpbGVfLmNvbnRlbnRzCgogICAgcmV0dXJuIGZpbGVfLmNvbnRlbnRzW3N0YXJ0OmVuZF0KCiAgZGVmIGRlbGV0ZShzZWxmLCByZXF1ZXN0KToKICAgIGlmIHJlcXVlc3QuYnVja2V0IG5vdCBpbiBzZWxmLmtub3duX2J1Y2tldHM6CiAgICAgIHJhaXNlIG1lc3NhZ2VzLlMzQ2xpZW50RXJyb3IoJ1RoZSBzcGVjaWZpZWQgYnVja2V0IGRvZXMgbm90IGV4aXN0JywgNDA0KQoKICAgIGlmIChyZXF1ZXN0LmJ1Y2tldCwgcmVxdWVzdC5vYmplY3QpIGluIHNlbGYuZmlsZXM6CiAgICAgIHNlbGYuZGVsZXRlX2ZpbGUocmVxdWVzdC5idWNrZXQsIHJlcXVlc3Qub2JqZWN0KQogICAgZWxzZToKICAgICAgIyBTMyBkb2Vzbid0IHJhaXNlIGFuIGVycm9yIGlmIHlvdSB0cnkgdG8gZGVsZXRlIGEgbm9uZXhpc3RlbnQgZmlsZSBmcm9tCiAgICAgICMgYW4gZXh0YW50IGJ1Y2tldAogICAgICByZXR1cm4KCiAgZGVmIGRlbGV0ZV9iYXRjaChzZWxmLCByZXF1ZXN0KToKCiAgICBkZWxldGVkLCBmYWlsZWQsIGVycm9ycyA9IFtdLCBbXSwgW10KICAgIGZvciBvYmplY3QgaW4gcmVxdWVzdC5vYmplY3RzOgogICAgICB0cnk6CiAgICAgICAgZGVsZXRlX3JlcXVlc3QgPSBtZXNzYWdlcy5EZWxldGVSZXF1ZXN0KHJlcXVlc3QuYnVja2V0LCBvYmplY3QpCiAgICAgICAgc2VsZi5kZWxldGUoZGVsZXRlX3JlcXVlc3QpCiAgICAgICAgZGVsZXRlZC5hcHBlbmQob2JqZWN0KQogICAgICBleGNlcHQgbWVzc2FnZXMuUzNDbGllbnRFcnJvciBhcyBlOgogICAgICAgIGZhaWxlZC5hcHBlbmQob2JqZWN0KQogICAgICAgIGVycm9ycy5hcHBlbmQoZSkKCiAgICByZXR1cm4gbWVzc2FnZXMuRGVsZXRlQmF0Y2hSZXNwb25zZShkZWxldGVkLCBmYWlsZWQsIGVycm9ycykKCiAgZGVmIGNvcHkoc2VsZiwgcmVxdWVzdCk6CgogICAgc3JjX2ZpbGUgPSBzZWxmLmdldF9maWxlKHJlcXVlc3Quc3JjX2J1Y2tldCwgcmVxdWVzdC5zcmNfa2V5KQogICAgZGVzdF9maWxlID0gRmFrZUZpbGUoCiAgICAgICAgcmVxdWVzdC5kZXN0X2J1Y2tldCwgcmVxdWVzdC5kZXN0X2tleSwgc3JjX2ZpbGUuY29udGVudHMpCiAgICBzZWxmLmFkZF9maWxlKGRlc3RfZmlsZSkKCiAgZGVmIGNyZWF0ZV9tdWx0aXBhcnRfdXBsb2FkKHNlbGYsIHJlcXVlc3QpOgogICAgIyBDcmVhdGUgaGFzaCBvZiBidWNrZXQgYW5kIGtleQogICAgIyBTdG9yZSB1cGxvYWRfaWQgaW50ZXJuYWxseQogICAgdXBsb2FkX2lkID0gcmVxdWVzdC5idWNrZXQgKyByZXF1ZXN0Lm9iamVjdAogICAgc2VsZi5tdWx0aXBhcnRfdXBsb2Fkc1t1cGxvYWRfaWRdID0ge30KICAgIHJldHVybiBtZXNzYWdlcy5VcGxvYWRSZXNwb25zZSh1cGxvYWRfaWQpCgogIGRlZiB1cGxvYWRfcGFydChzZWxmLCByZXF1ZXN0KToKICAgICMgU2F2ZSBvZmYgYnl0ZXMgcGFzc2VkIHRvIGludGVybmFsIGRhdGEgc3RvcmUKICAgIHVwbG9hZF9pZCwgcGFydF9udW1iZXIgPSByZXF1ZXN0LnVwbG9hZF9pZCwgcmVxdWVzdC5wYXJ0X251bWJlcgoKICAgIGlmIHBhcnRfbnVtYmVyIDwgMCBvciBub3QgaXNpbnN0YW5jZShwYXJ0X251bWJlciwgaW50KToKICAgICAgcmFpc2UgbWVzc2FnZXMuUzNDbGllbnRFcnJvcigKICAgICAgICAgICdQYXJhbSB2YWxpZGF0aW9uIGZhaWxlZCBvbiBwYXJ0IG51bWJlcicsIDQwMCkKCiAgICBpZiB1cGxvYWRfaWQgbm90IGluIHNlbGYubXVsdGlwYXJ0X3VwbG9hZHM6CiAgICAgIHJhaXNlIG1lc3NhZ2VzLlMzQ2xpZW50RXJyb3IoJ1RoZSBzcGVjaWZpZWQgdXBsb2FkIGRvZXMgbm90IGV4aXN0JywgNDA0KQoKICAgIHNlbGYubXVsdGlwYXJ0X3VwbG9hZHNbdXBsb2FkX2lkXVtwYXJ0X251bWJlcl0gPSByZXF1ZXN0LmJ5dGVzCgogICAgZXRhZyA9ICciJXMiJyAlICgneCcgKiAzMikKICAgIHJldHVybiBtZXNzYWdlcy5VcGxvYWRQYXJ0UmVzcG9uc2UoZXRhZywgcGFydF9udW1iZXIpCgogIGRlZiBjb21wbGV0ZV9tdWx0aXBhcnRfdXBsb2FkKHNlbGYsIHJlcXVlc3QpOgogICAgTUlOX1BBUlRfU0laRSA9IDUgKiAyKioxMCAgIyA1IEtpQgoKICAgIHBhcnRzX3JlY2VpdmVkID0gc2VsZi5tdWx0aXBhcnRfdXBsb2Fkc1tyZXF1ZXN0LnVwbG9hZF9pZF0KCiAgICAjIENoZWNrIHRoYXQgd2UgZ290IGFsbCB0aGUgcGFydHMgdGhhdCB0aGV5IGludGVuZGVkIHRvIHNlbmQKICAgIHBhcnRfbnVtYmVyc190b19jb25maXJtID0gc2V0KHBhcnRbJ1BhcnROdW1iZXInXSBmb3IgcGFydCBpbiByZXF1ZXN0LnBhcnRzKQoKICAgICMgTWFrZSBzdXJlIGFsbCB0aGUgZXhwZWN0ZWQgcGFydHMgYXJlIHByZXNlbnQKICAgIGlmIHBhcnRfbnVtYmVyc190b19jb25maXJtICE9IHNldChwYXJ0c19yZWNlaXZlZC5rZXlzKCkpOgogICAgICByYWlzZSBtZXNzYWdlcy5TM0NsaWVudEVycm9yKAogICAgICAgICAgJ09uZSBvciBtb3JlIG9mIHRoZSBzcGVjaWZpZWQgcGFydHMgY291bGQgbm90IGJlIGZvdW5kJywgNDAwKQoKICAgICMgU29ydCBieSBwYXJ0IG51bWJlcgogICAgc29ydGVkX3BhcnRzID0gc29ydGVkKHBhcnRzX3JlY2VpdmVkLml0ZW1zKCksIGtleT1sYW1iZGEgcGFpcjogcGFpclswXSkKICAgIHNvcnRlZF9ieXRlcyA9IFtieXRlc18gZm9yIChfLCBieXRlc18pIGluIHNvcnRlZF9wYXJ0c10KCiAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBwYXJ0cyBhcmVuJ3QgdG9vIHNtYWxsIChleGNlcHQgdGhlIGxhc3QgcGFydCkKICAgIHBhcnRfc2l6ZXMgPSBbbGVuKGJ5dGVzXykgZm9yIGJ5dGVzXyBpbiBzb3J0ZWRfYnl0ZXNdCiAgICBpZiBhbnkoc2l6ZSA8IE1JTl9QQVJUX1NJWkUgZm9yIHNpemUgaW4gcGFydF9zaXplc1s6LTFdKToKICAgICAgZV9tZXNzYWdlID0gIiIiCiAgICAgIEFsbCBwYXJ0cyBidXQgdGhlIGxhc3QgbXVzdCBiZSBsYXJnZXIgdGhhbiAlZCBieXRlcwogICAgICAiIiIgJSBNSU5fUEFSVF9TSVpFCiAgICAgIHJhaXNlIG1lc3NhZ2VzLlMzQ2xpZW50RXJyb3IoZV9tZXNzYWdlLCA0MDApCgogICAgIyBTdHJpbmcgdG9nZXRoZXIgYWxsIGJ5dGVzIGZvciB0aGUgZ2l2ZW4gdXBsb2FkCiAgICBmaW5hbF9jb250ZW50cyA9IGInJy5qb2luKHNvcnRlZF9ieXRlcykKCiAgICAjIENyZWF0ZSBGYWtlRmlsZSBvYmplY3QKICAgIG51bV9wYXJ0cyA9IGxlbihwYXJ0c19yZWNlaXZlZCkKICAgIGV0YWcgPSAnIiVzLSVkIicgJSAoJ3gnICogMzIsIG51bV9wYXJ0cykKICAgIGZpbGVfID0gRmFrZUZpbGUocmVxdWVzdC5idWNrZXQsIHJlcXVlc3Qub2JqZWN0LCBmaW5hbF9jb250ZW50cywgZXRhZz1ldGFnKQoKICAgICMgU3RvcmUgRmFrZUZpbGUgaW4gc2VsZi5maWxlcwogICAgc2VsZi5hZGRfZmlsZShmaWxlXykKlH2UKIwRRmFrZUZpbGUuX19pbml0X1+UalYxAQBLHUsnh5SMFUZha2VGaWxlLmdldF9tZXRhZGF0YZRqVjEBAEspSzSHlIwIRmFrZUZpbGWUal0xAQBLHEs0h5SMFUZha2VTM0NsaWVudC5fX2luaXRfX5RqVjEBAEs4S0CHlIwVRmFrZVMzQ2xpZW50LmFkZF9maWxllGpWMQEAS0JLRYeUjBVGYWtlUzNDbGllbnQuZ2V0X2ZpbGWUalYxAQBLR0tLh5SMGEZha2VTM0NsaWVudC5kZWxldGVfZmlsZZRqVjEBAEtNS06HlIwgRmFrZVMzQ2xpZW50LmdldF9vYmplY3RfbWV0YWRhdGGUalYxAQBLUEtbh5SMEUZha2VTM0NsaWVudC5saXN0lGpWMQEAS11LgIeUjBZGYWtlUzNDbGllbnQuZ2V0X3JhbmdllGpWMQEAS4JLkoeUjBNGYWtlUzNDbGllbnQuZGVsZXRllGpWMQEAS5RLnYeUjBlGYWtlUzNDbGllbnQuZGVsZXRlX2JhdGNolGpWMQEAS59Lq4eUjBFGYWtlUzNDbGllbnQuY29weZRqVjEBAEutS7KHlIwkRmFrZVMzQ2xpZW50LmNyZWF0ZV9tdWx0aXBhcnRfdXBsb2FklGpWMQEAS7RLuYeUjBhGYWtlUzNDbGllbnQudXBsb2FkX3BhcnSUalYxAQBLu0vJh5SMJkZha2VTM0NsaWVudC5jb21wbGV0ZV9tdWx0aXBhcnRfdXBsb2FklGpWMQEAS8tL7YeUjAxGYWtlUzNDbGllbnSUal0xAQBLN0vth5R1fZQojAhGYWtlRmlsZZRq7QMAAIwVRmFrZUZpbGUuZ2V0X21ldGFkYXRhlGrtAwAAjAxGYWtlUzNDbGllbnSUau0DAACMFUZha2VTM0NsaWVudC5hZGRfZmlsZZRq7QMAAIwVRmFrZVMzQ2xpZW50LmdldF9maWxllGrtAwAAjBhGYWtlUzNDbGllbnQuZGVsZXRlX2ZpbGWUau0DAACMIEZha2VTM0NsaWVudC5nZXRfb2JqZWN0X21ldGFkYXRhlGrtAwAAjBFGYWtlUzNDbGllbnQubGlzdJRq7QMAAIwWRmFrZVMzQ2xpZW50LmdldF9yYW5nZZRq7QMAAIwTRmFrZVMzQ2xpZW50LmRlbGV0ZZRq7QMAAIwZRmFrZVMzQ2xpZW50LmRlbGV0ZV9iYXRjaJRq7QMAAIwRRmFrZVMzQ2xpZW50LmNvcHmUau0DAACMJEZha2VTM0NsaWVudC5jcmVhdGVfbXVsdGlwYXJ0X3VwbG9hZJRq7QMAAIwYRmFrZVMzQ2xpZW50LnVwbG9hZF9wYXJ0lGrtAwAAjCZGYWtlUzNDbGllbnQuY29tcGxldGVfbXVsdGlwYXJ0X3VwbG9hZJRq7QMAAHWMKWFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzLmZha2VfY2xpZW50lHSUjCZhcGFjaGVfYmVhbS5pby5hd3MuY2xpZW50cy5zMy5tZXNzYWdlc5QoWN8PAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgoKY2xhc3MgR2V0UmVxdWVzdCgpOgogICIiIgogIFMzIHJlcXVlc3Qgb2JqZWN0IGZvciBgR2V0YCBjb21tYW5kCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1Y2tldCwgb2JqZWN0KToKICAgIHNlbGYuYnVja2V0ID0gYnVja2V0CiAgICBzZWxmLm9iamVjdCA9IG9iamVjdAoKCmNsYXNzIFVwbG9hZFJlc3BvbnNlKCk6CiAgIiIiCiAgUzMgcmVzcG9uc2Ugb2JqZWN0IGZvciBgU3RhcnRVcGxvYWRgIGNvbW1hbmQKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgdXBsb2FkX2lkKToKICAgIHNlbGYudXBsb2FkX2lkID0gdXBsb2FkX2lkCgoKY2xhc3MgVXBsb2FkUmVxdWVzdCgpOgogICIiIgogIFMzIHJlcXVlc3Qgb2JqZWN0IGZvciBgU3RhcnRVcGxvYWRgIGNvbW1hbmQKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgYnVja2V0LCBvYmplY3QsIG1pbWVfdHlwZSk6CiAgICBzZWxmLmJ1Y2tldCA9IGJ1Y2tldAogICAgc2VsZi5vYmplY3QgPSBvYmplY3QKICAgIHNlbGYubWltZV90eXBlID0gbWltZV90eXBlCgoKY2xhc3MgVXBsb2FkUGFydFJlcXVlc3QoKToKICAiIiIKICBTMyByZXF1ZXN0IG9iamVjdCBmb3IgYFVwbG9hZFBhcnRgIGNvbW1hbmQKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgYnVja2V0LCBvYmplY3QsIHVwbG9hZF9pZCwgcGFydF9udW1iZXIsIGJ5dGVzKToKICAgIHNlbGYuYnVja2V0ID0gYnVja2V0CiAgICBzZWxmLm9iamVjdCA9IG9iamVjdAogICAgc2VsZi51cGxvYWRfaWQgPSB1cGxvYWRfaWQKICAgIHNlbGYucGFydF9udW1iZXIgPSBwYXJ0X251bWJlcgogICAgc2VsZi5ieXRlcyA9IGJ5dGVzCiAgICAjIHNlbGYubWltZV90eXBlID0gbWltZV90eXBlCgoKY2xhc3MgVXBsb2FkUGFydFJlc3BvbnNlKCk6CiAgIiIiCiAgUzMgcmVzcG9uc2Ugb2JqZWN0IGZvciBgVXBsb2FkUGFydGAgY29tbWFuZAogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBldGFnLCBwYXJ0X251bWJlcik6CiAgICBzZWxmLmV0YWcgPSBldGFnCiAgICBzZWxmLnBhcnRfbnVtYmVyID0gcGFydF9udW1iZXIKCgpjbGFzcyBDb21wbGV0ZU11bHRpcGFydFVwbG9hZFJlcXVlc3QoKToKICAiIiIKICBTMyByZXF1ZXN0IG9iamVjdCBmb3IgYFVwbG9hZFBhcnRgIGNvbW1hbmQKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgYnVja2V0LCBvYmplY3QsIHVwbG9hZF9pZCwgcGFydHMpOgogICAgIyBwYXJ0cyBpcyBhIGxpc3Qgb2Ygb2JqZWN0cyBvZiB0aGUgZm9ybQogICAgIyB7J0VUYWcnOiByZXNwb25zZS5ldGFnLCAnUGFydE51bWJlcic6IHJlc3BvbnNlLnBhcnRfbnVtYmVyfQogICAgc2VsZi5idWNrZXQgPSBidWNrZXQKICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0CiAgICBzZWxmLnVwbG9hZF9pZCA9IHVwbG9hZF9pZAogICAgc2VsZi5wYXJ0cyA9IHBhcnRzCiAgICAjIHNlbGYubWltZV90eXBlID0gbWltZV90eXBlCgoKY2xhc3MgTGlzdFJlcXVlc3QoKToKICAiIiIKICBTMyByZXF1ZXN0IG9iamVjdCBmb3IgYExpc3RgIGNvbW1hbmQKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgYnVja2V0LCBwcmVmaXgsIGNvbnRpbnVhdGlvbl90b2tlbj1Ob25lKToKICAgIHNlbGYuYnVja2V0ID0gYnVja2V0CiAgICBzZWxmLnByZWZpeCA9IHByZWZpeAogICAgc2VsZi5jb250aW51YXRpb25fdG9rZW4gPSBjb250aW51YXRpb25fdG9rZW4KCgpjbGFzcyBMaXN0UmVzcG9uc2UoKToKICAiIiIKICBTMyByZXNwb25zZSBvYmplY3QgZm9yIGBMaXN0YCBjb21tYW5kCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW1zLCBuZXh0X3Rva2VuPU5vbmUpOgogICAgc2VsZi5pdGVtcyA9IGl0ZW1zCiAgICBzZWxmLm5leHRfdG9rZW4gPSBuZXh0X3Rva2VuCgoKY2xhc3MgSXRlbSgpOgogICIiIgogIEFuIGl0ZW0gaW4gUzMKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZXRhZywga2V5LCBsYXN0X21vZGlmaWVkLCBzaXplLCBtaW1lX3R5cGU9Tm9uZSk6CiAgICBzZWxmLmV0YWcgPSBldGFnCiAgICBzZWxmLmtleSA9IGtleQogICAgc2VsZi5sYXN0X21vZGlmaWVkID0gbGFzdF9tb2RpZmllZAogICAgc2VsZi5zaXplID0gc2l6ZQogICAgc2VsZi5taW1lX3R5cGUgPSBtaW1lX3R5cGUKCgpjbGFzcyBEZWxldGVSZXF1ZXN0KCk6CiAgIiIiCiAgUzMgcmVxdWVzdCBvYmplY3QgZm9yIGBEZWxldGVgIGNvbW1hbmQKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgYnVja2V0LCBvYmplY3QpOgogICAgc2VsZi5idWNrZXQgPSBidWNrZXQKICAgIHNlbGYub2JqZWN0ID0gb2JqZWN0CgoKY2xhc3MgRGVsZXRlQmF0Y2hSZXF1ZXN0KCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGJ1Y2tldCwgb2JqZWN0cyk6CiAgICAjIGBvYmplY3RzYCBpcyBhIGxpc3Qgb2Ygc3RyaW5ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXlzIHRvIGJlIGRlbGV0ZWQKICAgICMgaW4gdGhlIGJ1Y2tldAogICAgc2VsZi5idWNrZXQgPSBidWNrZXQKICAgIHNlbGYub2JqZWN0cyA9IG9iamVjdHMKCgpjbGFzcyBEZWxldGVCYXRjaFJlc3BvbnNlKCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGRlbGV0ZWQsIGZhaWxlZCwgZXJyb3JzKToKICAgICMgYGRlbGV0ZWRgIGlzIGEgbGlzdCBvZiBzdHJpbmdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleXMgdGhhdCB3ZXJlIGRlbGV0ZWQKICAgICMgYGZhaWxlZGAgaXMgYSBsaXN0IG9mIHN0cmluZ3MgY29ycmVzcG9uZGluZyB0byB0aGUga2V5cyB0aGF0IGNhdXNlZCBlcnJvcnMKICAgICMgYGVycm9yc2AgaXMgYSBsaXN0IG9mIFMzQ2xpZW50RXJyb3JzLCBhbGlnbmVkIHdpdGggdGhlIG9yZGVyIG9mIGBmYWlsZWRgCiAgICBzZWxmLmRlbGV0ZWQgPSBkZWxldGVkCiAgICBzZWxmLmZhaWxlZCA9IGZhaWxlZAogICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKCgpjbGFzcyBDb3B5UmVxdWVzdCgpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBzcmNfYnVja2V0LCBzcmNfa2V5LCBkZXN0X2J1Y2tldCwgZGVzdF9rZXkpOgogICAgc2VsZi5zcmNfYnVja2V0ID0gc3JjX2J1Y2tldAogICAgc2VsZi5zcmNfa2V5ID0gc3JjX2tleQogICAgc2VsZi5kZXN0X2J1Y2tldCA9IGRlc3RfYnVja2V0CiAgICBzZWxmLmRlc3Rfa2V5ID0gZGVzdF9rZXkKCgpjbGFzcyBTM0NsaWVudEVycm9yKEV4Y2VwdGlvbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2U9Tm9uZSwgY29kZT1Ob25lKToKICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKICAgIHNlbGYuY29kZSA9IGNvZGUKlH2UKIwTR2V0UmVxdWVzdC5fX2luaXRfX5RqVjEBAEsbSx2HlIwKR2V0UmVxdWVzdJRqXTEBAEsXSx2HlIwXVXBsb2FkUmVzcG9uc2UuX19pbml0X1+UalYxAQBLJEslh5SMDlVwbG9hZFJlc3BvbnNllGpdMQEASyBLJYeUjBZVcGxvYWRSZXF1ZXN0Ll9faW5pdF9flGpWMQEASyxLL4eUjA1VcGxvYWRSZXF1ZXN0lGpdMQEASyhLL4eUjBpVcGxvYWRQYXJ0UmVxdWVzdC5fX2luaXRfX5RqVjEBAEs2SzuHlIwRVXBsb2FkUGFydFJlcXVlc3SUal0xAQBLMks7h5SMG1VwbG9hZFBhcnRSZXNwb25zZS5fX2luaXRfX5RqVjEBAEtDS0WHlIwSVXBsb2FkUGFydFJlc3BvbnNllGpdMQEASz9LRYeUjCdDb21wbGV0ZU11bHRpcGFydFVwbG9hZFJlcXVlc3QuX19pbml0X1+UalYxAQBLTEtSh5SMHkNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkUmVxdWVzdJRqXTEBAEtIS1KHlIwUTGlzdFJlcXVlc3QuX19pbml0X1+UalYxAQBLWktdh5SMC0xpc3RSZXF1ZXN0lGpdMQEAS1ZLXYeUjBVMaXN0UmVzcG9uc2UuX19pbml0X1+UalYxAQBLZEtmh5SMDExpc3RSZXNwb25zZZRqXTEBAEtgS2aHlIwNSXRlbS5fX2luaXRfX5RqVjEBAEttS3KHlIwESXRlbZRqXTEBAEtpS3KHlIwWRGVsZXRlUmVxdWVzdC5fX2luaXRfX5RqVjEBAEt5S3uHlIwNRGVsZXRlUmVxdWVzdJRqXTEBAEt1S3uHlIwbRGVsZXRlQmF0Y2hSZXF1ZXN0Ll9faW5pdF9flGpWMQEAS39Lg4eUjBJEZWxldGVCYXRjaFJlcXVlc3SUal0xAQBLfkuDh5SMHERlbGV0ZUJhdGNoUmVzcG9uc2UuX19pbml0X1+UalYxAQBLh0uNh5SME0RlbGV0ZUJhdGNoUmVzcG9uc2WUal0xAQBLhkuNh5SMFENvcHlSZXF1ZXN0Ll9faW5pdF9flGpWMQEAS5FLlYeUjAtDb3B5UmVxdWVzdJRqXTEBAEuQS5WHlIwWUzNDbGllbnRFcnJvci5fX2luaXRfX5RqVjEBAEuZS5uHlIwNUzNDbGllbnRFcnJvcpRqXTEBAEuYS5uHlHV9lCiMCkdldFJlcXVlc3SUakIDAACMDlVwbG9hZFJlc3BvbnNllGpCAwAAjA1VcGxvYWRSZXF1ZXN0lGpCAwAAjBFVcGxvYWRQYXJ0UmVxdWVzdJRqQgMAAIwSVXBsb2FkUGFydFJlc3BvbnNllGpCAwAAjB5Db21wbGV0ZU11bHRpcGFydFVwbG9hZFJlcXVlc3SUakIDAACMC0xpc3RSZXF1ZXN0lGpCAwAAjAxMaXN0UmVzcG9uc2WUakIDAACMBEl0ZW2UakIDAACMDURlbGV0ZVJlcXVlc3SUakIDAACMEkRlbGV0ZUJhdGNoUmVxdWVzdJRqQgMAAIwTRGVsZXRlQmF0Y2hSZXNwb25zZZRqQgMAAIwLQ29weVJlcXVlc3SUakIDAABqSXgAAGpCAwAAdYwmYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXOUdJSMH2FwYWNoZV9iZWFtLmlvLmF3cy5zM2ZpbGVzeXN0ZW2UKFiFJAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJTMyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBmb3IgYWNjZXNzaW5nIGZpbGVzIG9uIEFXUyBTMy4iIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgaXRlcml0ZW1zCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmF3cyBpbXBvcnQgczNpbwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3NlZEZpbGUKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZU1ldGFkYXRhCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQoKX19hbGxfXyA9IFsnUzNGaWxlU3lzdGVtJ10KCgpjbGFzcyBTM0ZpbGVTeXN0ZW0oRmlsZVN5c3RlbSk6CiAgIiIiQW4gUzMgYEZpbGVTeXN0ZW1gIGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcgZmlsZXMgb24gQVdTIFMzCiAgIiIiCgogIENIVU5LX1NJWkUgPSBzM2lvLk1BWF9CQVRDSF9PUEVSQVRJT05fU0laRQogIFMzX1BSRUZJWCA9ICdzMzovLycKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNjaGVtZShjbHMpOgogICAgIiIiVVJJIHNjaGVtZSBmb3IgdGhlIEZpbGVTeXN0ZW0KICAgICIiIgogICAgcmV0dXJuICdzMycKCiAgZGVmIGpvaW4oc2VsZiwgYmFzZXBhdGgsICpwYXRocyk6CiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIG9mIHRoZSByZXR1cm4gbnVsbGVkIGNvbXBvbmVudHMKICAgICIiIgogICAgaWYgbm90IGJhc2VwYXRoLnN0YXJ0c3dpdGgoUzNGaWxlU3lzdGVtLlMzX1BSRUZJWCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Jhc2VwYXRoICVyIG11c3QgYmUgUzMgcGF0aC4nICUgYmFzZXBhdGgpCgogICAgcGF0aCA9IGJhc2VwYXRoCiAgICBmb3IgcCBpbiBwYXRoczoKICAgICAgcGF0aCA9IHBhdGgucnN0cmlwKCcvJykgKyAnLycgKyBwLmxzdHJpcCgnLycpCiAgICByZXR1cm4gcGF0aAoKICBkZWYgc3BsaXQoc2VsZiwgcGF0aCk6CiAgICAiIiJTcGxpdHMgdGhlIGdpdmVuIHBhdGggaW50byB0d28gcGFydHMuCgogICAgU3BsaXRzIHRoZSBwYXRoIGludG8gYSBwYWlyIChoZWFkLCB0YWlsKSBzdWNoIHRoYXQgdGFpbCBjb250YWlucyB0aGUgbGFzdAogICAgY29tcG9uZW50IG9mIHRoZSBwYXRoIGFuZCBoZWFkIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdXAgdG8gdGhhdC4KCiAgICBIZWFkIHdpbGwgaW5jbHVkZSB0aGUgUzMgcHJlZml4ICgnczM6Ly8nKS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBwYXRoIGFzIGEgc3RyaW5nCiAgICBSZXR1cm5zOgogICAgICBhIHBhaXIgb2YgcGF0aCBjb21wb25lbnRzIGFzIHN0cmluZ3MuCiAgICAiIiIKICAgIHBhdGggPSBwYXRoLnN0cmlwKCkKICAgIGlmIG5vdCBwYXRoLnN0YXJ0c3dpdGgoUzNGaWxlU3lzdGVtLlMzX1BSRUZJWCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1BhdGggJXIgbXVzdCBiZSBTMyBwYXRoLicgJSBwYXRoKQoKICAgIHByZWZpeF9sZW4gPSBsZW4oUzNGaWxlU3lzdGVtLlMzX1BSRUZJWCkKICAgIGxhc3Rfc2VwID0gcGF0aFtwcmVmaXhfbGVuOl0ucmZpbmQoJy8nKQogICAgaWYgbGFzdF9zZXAgPj0gMDoKICAgICAgbGFzdF9zZXAgKz0gcHJlZml4X2xlbgoKICAgIGlmIGxhc3Rfc2VwID4gMDoKICAgICAgcmV0dXJuIChwYXRoWzpsYXN0X3NlcF0sIHBhdGhbbGFzdF9zZXAgKyAxOl0pCiAgICBlbGlmIGxhc3Rfc2VwIDwgMDoKICAgICAgcmV0dXJuIChwYXRoLCAnJykKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgcGF0aDogJXMnICUgcGF0aCkKCiAgZGVmIG1rZGlycyhzZWxmLCBwYXRoKToKICAgICIiIlJlY3Vyc2l2ZWx5IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgdGhlIHByb3ZpZGVkIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdGhhdCBzaG91bGQgYmUgY3JlYXRlZAoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgbGVhZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCiAgICAiIiIKICAgIHBhc3MKCiAgZGVmIGhhc19kaXJzKHNlbGYpOgogICAgIiIiV2hldGhlciB0aGlzIEZpbGVTeXN0ZW0gc3VwcG9ydHMgZGlyZWN0b3JpZXMuIiIiCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9saXN0KHNlbGYsIGRpcl9vcl9wcmVmaXgpOgogICAgIiIiTGlzdCBmaWxlcyBpbiBhIGxvY2F0aW9uLgoKICAgIExpc3RpbmcgaXMgbm9uLXJlY3Vyc2l2ZSwgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgc3VwcG9ydCBkaXJlY3Rvcmllcy4KCiAgICBBcmdzOgogICAgICBkaXJfb3JfcHJlZml4OiAoc3RyaW5nKSBBIGRpcmVjdG9yeSBvciBsb2NhdGlvbiBwcmVmaXggKGZvciBmaWxlc3lzdGVtcwogICAgICAgIHRoYXQgZG9uJ3QgaGF2ZSBkaXJlY3RvcmllcykuCgogICAgUmV0dXJuczoKICAgICAgR2VuZXJhdG9yIG9mIGBgRmlsZU1ldGFkYXRhYGAgb2JqZWN0cy4KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgbGlzdGluZyBmYWlscywgYnV0IG5vdCBpZiBubyBmaWxlcyB3ZXJlIGZvdW5kLgogICAgIiIiCiAgICB0cnk6CiAgICAgIGZvciBwYXRoLCBzaXplIGluIGl0ZXJpdGVtcyhzM2lvLlMzSU8oKS5saXN0X3ByZWZpeChkaXJfb3JfcHJlZml4KSk6CiAgICAgICAgeWllbGQgRmlsZU1ldGFkYXRhKHBhdGgsIHNpemUpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIkxpc3Qgb3BlcmF0aW9uIGZhaWxlZCIsIHtkaXJfb3JfcHJlZml4OiBlfSkKCiAgZGVmIF9wYXRoX29wZW4oCiAgICAgIHNlbGYsCiAgICAgIHBhdGgsCiAgICAgIG1vZGUsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiSGVscGVyIGZ1bmN0aW9ucyB0byBvcGVuIGEgZmlsZSBpbiB0aGUgcHJvdmlkZWQgbW9kZS4KICAgICIiIgogICAgY29tcHJlc3Npb25fdHlwZSA9IEZpbGVTeXN0ZW0uX2dldF9jb21wcmVzc2lvbl90eXBlKHBhdGgsIGNvbXByZXNzaW9uX3R5cGUpCiAgICBtaW1lX3R5cGUgPSBDb21wcmVzc2lvblR5cGVzLm1pbWVfdHlwZShjb21wcmVzc2lvbl90eXBlLCBtaW1lX3R5cGUpCiAgICByYXdfZmlsZSA9IHMzaW8uUzNJTygpLm9wZW4ocGF0aCwgbW9kZSwgbWltZV90eXBlPW1pbWVfdHlwZSkKICAgIGlmIGNvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQ6CiAgICAgIHJldHVybiByYXdfZmlsZQogICAgcmV0dXJuIENvbXByZXNzZWRGaWxlKHJhd19maWxlLCBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUpCgogIGRlZiBjcmVhdGUoCiAgICAgIHNlbGYsCiAgICAgIHBhdGgsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiUmV0dXJucyBhIHdyaXRlIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbQogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QKCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgY2xvc2UgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZQogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGF0aF9vcGVuKHBhdGgsICd3YicsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIG9wZW4oCiAgICAgIHNlbGYsCiAgICAgIHBhdGgsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiUmV0dXJucyBhIHJlYWQgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIGZpbGUgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlsZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtCiAgICAgIG1pbWVfdHlwZTogTUlNRSB0eXBlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29udGVudCBpbiB0aGUgZmlsZSBvYmplY3QKICAgICAgY29tcHJlc3Npb25fdHlwZTogVHlwZSBvZiBjb21wcmVzc2lvbiB0byBiZSB1c2VkIGZvciB0aGlzIG9iamVjdAoKICAgIFJldHVybnM6IGZpbGUgaGFuZGxlIHdpdGggYSBjbG9zZSBmdW5jdGlvbiBmb3IgdGhlIHVzZXIgdG8gdXNlCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9wYXRoX29wZW4ocGF0aCwgJ3JiJywgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgY29weShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZWN1cnNpdmVseSBjb3B5IHRoZSBmaWxlIHRyZWUgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBsaXN0IG9mIHNvdXJjZSBmaWxlIG9iamVjdHMgdGhhdCBuZWVkcyB0byBiZSBjb3BpZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogbGlzdCBvZiBkZXN0aW5hdGlvbiBvZiB0aGUgbmV3IG9iamVjdAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBhbnkgb2YgdGhlIGNvcHkgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIGlmIG5vdCBsZW4oc291cmNlX2ZpbGVfbmFtZXMpID09IGxlbihkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICAgbWVzc2FnZSA9ICdVbmFibGUgdG8gY29weSB1bmVxdWFsIG51bWJlciBvZiBzb3VyY2VzIGFuZCBkZXN0aW5hdGlvbnMnCiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKG1lc3NhZ2UpCiAgICBzcmNfZGVzdF9wYWlycyA9IGxpc3QoemlwKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKSkKICAgIHJldHVybiBzM2lvLlMzSU8oKS5jb3B5X3BhdGhzKHNyY19kZXN0X3BhaXJzKQoKICBkZWYgcmVuYW1lKHNlbGYsIHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICIiIlJlbmFtZSB0aGUgZmlsZXMgYXQgdGhlIHNvdXJjZSBsaXN0IHRvIHRoZSBkZXN0aW5hdGlvbiBsaXN0LgogICAgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBsaXN0cyBzaG91bGQgYmUgb2YgdGhlIHNhbWUgc2l6ZS4KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogTGlzdCBvZiBmaWxlIHBhdGhzIHRoYXQgbmVlZCB0byBiZSBtb3ZlZAogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBMaXN0IG9mIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgZm9yIHRoZSBmaWxlcwoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBhbnkgb2YgdGhlIHJlbmFtZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbm90IGxlbihzb3VyY2VfZmlsZV9uYW1lcykgPT0gbGVuKGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICBtZXNzYWdlID0gJ1VuYWJsZSB0byByZW5hbWUgdW5lcXVhbCBudW1iZXIgb2Ygc291cmNlcyBhbmQgZGVzdGluYXRpb25zJwogICAgICByYWlzZSBCZWFtSU9FcnJvcihtZXNzYWdlKQogICAgc3JjX2Rlc3RfcGFpcnMgPSBsaXN0KHppcChzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcykpCiAgICByZXN1bHRzID0gczNpby5TM0lPKCkucmVuYW1lX2ZpbGVzKHNyY19kZXN0X3BhaXJzKQogICAgZXhjZXB0aW9ucyA9IHsoc3JjLCBkZXN0KTogZXJyb3IKICAgICAgICAgICAgICAgICAgZm9yIChzcmMsIGRlc3QsIGVycm9yKSBpbiByZXN1bHRzIGlmIGVycm9yIGlzIG5vdCBOb25lfQogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIlJlbmFtZSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKCiAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKICAgICIiIkNoZWNrIGlmIHRoZSBwcm92aWRlZCBwYXRoIGV4aXN0cyBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQuCgogICAgUmV0dXJuczogYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgaWYgcGF0aCBleGlzdHMKICAgICIiIgogICAgdHJ5OgogICAgICByZXR1cm4gczNpby5TM0lPKCkuZXhpc3RzKHBhdGgpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoImV4aXN0cygpIG9wZXJhdGlvbiBmYWlsZWQiLCB7cGF0aDogZX0pCgogIGRlZiBzaXplKHNlbGYsIHBhdGgpOgogICAgIiIiR2V0IHNpemUgb2YgcGF0aCBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBpbiBxdWVzdGlvbi4KCiAgICBSZXR1cm5zOiBpbnQgc2l6ZSBvZiBwYXRoIGFjY29yZGluZyB0byB0aGUgRmlsZVN5c3RlbS4KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgcGF0aCBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICB0cnk6CiAgICAgIHJldHVybiBzM2lvLlMzSU8oKS5zaXplKHBhdGgpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoInNpemUoKSBvcGVyYXRpb24gZmFpbGVkIiwge3BhdGg6IGV9KQoKICBkZWYgbGFzdF91cGRhdGVkKHNlbGYsIHBhdGgpOgogICAgIiIiR2V0IFVOSVggRXBvY2ggdGltZSBpbiBzZWNvbmRzIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIGZpbGUuCgogICAgUmV0dXJuczogZmxvYXQgVU5JWCBFcG9jaCB0aW1lCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIHBhdGggZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgdHJ5OgogICAgICByZXR1cm4gczNpby5TM0lPKCkubGFzdF91cGRhdGVkKHBhdGgpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoImxhc3RfdXBkYXRlZCBvcGVyYXRpb24gZmFpbGVkIiwge3BhdGg6IGV9KQoKICBkZWYgY2hlY2tzdW0oc2VsZiwgcGF0aCk6CiAgICAiIiJGZXRjaCBjaGVja3N1bSBtZXRhZGF0YSBvZiBhIGZpbGUgb24gdGhlCiAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkZpbGVTeXN0ZW1gLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIGEgZmlsZS4KCiAgICBSZXR1cm5zOiBzdHJpbmcgY29udGFpbmluZyBjaGVja3N1bQoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBwYXRoIGlzbid0IGEgZmlsZSBvciBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICB0cnk6CiAgICAgIHJldHVybiBzM2lvLlMzSU8oKS5jaGVja3N1bShwYXRoKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJDaGVja3N1bSBvcGVyYXRpb24gZmFpbGVkIiwge3BhdGg6IGV9KQoKICBkZWYgZGVsZXRlKHNlbGYsIHBhdGhzKToKICAgICIiIkRlbGV0ZXMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYXQgdGhlIHByb3ZpZGVkIHBhdGhzLgogICAgRGlyZWN0b3JpZXMgd2lsbCBiZSBkZWxldGVkIHJlY3Vyc2l2ZWx5LgoKICAgIEFyZ3M6CiAgICAgIHBhdGhzOiBsaXN0IG9mIHBhdGhzIHRoYXQgZ2l2ZSB0aGUgZmlsZSBvYmplY3RzIHRvIGJlIGRlbGV0ZWQKICAgICIiIgogICAgcmVzdWx0cyA9IHMzaW8uUzNJTygpLmRlbGV0ZV9wYXRocyhwYXRocykKICAgIGV4Y2VwdGlvbnMgPSB7CiAgICAgICAgcGF0aDogZXJyb3IKICAgICAgICBmb3IgKHBhdGgsIGVycm9yKSBpbiByZXN1bHRzLml0ZW1zKCkgaWYgZXJyb3IgaXMgbm90IE5vbmUKICAgIH0KICAgIGlmIGV4Y2VwdGlvbnM6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJEZWxldGUgb3BlcmF0aW9uIGZhaWxlZCIsIGV4Y2VwdGlvbnMpCpR9lCiME1MzRmlsZVN5c3RlbS5zY2hlbWWUalYxAQBLK0svh5SMEVMzRmlsZVN5c3RlbS5qb2lulGpWMQEASzFLQIeUjBJTM0ZpbGVTeXN0ZW0uc3BsaXSUalYxAQBLQktdh5SME1MzRmlsZVN5c3RlbS5ta2RpcnOUalYxAQBLX0toh5SMFVMzRmlsZVN5c3RlbS5oYXNfZGlyc5RqVjEBAEtqS2yHlIwSUzNGaWxlU3lzdGVtLl9saXN0lGpWMQEAS25LgYeUjBdTM0ZpbGVTeXN0ZW0uX3BhdGhfb3BlbpRqVjEBAEuDS5CHlIwTUzNGaWxlU3lzdGVtLmNyZWF0ZZRqVjEBAEuSS6CHlIwRUzNGaWxlU3lzdGVtLm9wZW6UalYxAQBLokuwh5SMEVMzRmlsZVN5c3RlbS5jb3B5lGpWMQEAS7JLwIeUjBNTM0ZpbGVTeXN0ZW0ucmVuYW1llGpWMQEAS8JL1YeUjBNTM0ZpbGVTeXN0ZW0uZXhpc3RzlGpWMQEAS9dL4oeUjBFTM0ZpbGVTeXN0ZW0uc2l6ZZRqVjEBAEvkS/KHlIwZUzNGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZJRqVjEBAEv0TQIBh5SMFVMzRmlsZVN5c3RlbS5jaGVja3N1bZRqVjEBAE0EAU0TAYeUjBNTM0ZpbGVTeXN0ZW0uZGVsZXRllGpWMQEATRUBTSIBh5SMDFMzRmlsZVN5c3RlbZRqXTEBAEskTSIBh5R1fZQojAxTM0ZpbGVTeXN0ZW2Uag0EAACME1MzRmlsZVN5c3RlbS5zY2hlbWWUag0EAACMEVMzRmlsZVN5c3RlbS5qb2lulGoNBAAAjBJTM0ZpbGVTeXN0ZW0uc3BsaXSUag0EAACME1MzRmlsZVN5c3RlbS5ta2RpcnOUag0EAACMFVMzRmlsZVN5c3RlbS5oYXNfZGlyc5RqDQQAAIwTUzNGaWxlU3lzdGVtLmNyZWF0ZZRqDQQAAIwRUzNGaWxlU3lzdGVtLm9wZW6Uag0EAACMEVMzRmlsZVN5c3RlbS5jb3B5lGoNBAAAjBNTM0ZpbGVTeXN0ZW0ucmVuYW1llGoNBAAAjBNTM0ZpbGVTeXN0ZW0uZXhpc3RzlGoNBAAAjBFTM0ZpbGVTeXN0ZW0uc2l6ZZRqDQQAAIwZUzNGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZJRqDQQAAIwVUzNGaWxlU3lzdGVtLmNoZWNrc3VtlGoNBAAAjBNTM0ZpbGVTeXN0ZW0uZGVsZXRllGoNBAAAdYwfYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbZR0lIwXYXBhY2hlX2JlYW0uaW8uYXdzLnMzaW+UKFgvUgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBV1MgUzMgY2xpZW50CiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBlcnJubwppbXBvcnQgaW8KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJlCmltcG9ydCB0aW1lCmltcG9ydCB0cmFjZWJhY2sKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGFwYWNoZV9iZWFtLmlvLmF3cy5jbGllbnRzLnMzIGltcG9ydCBtZXNzYWdlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbyBpbXBvcnQgRG93bmxvYWRlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbyBpbXBvcnQgRG93bmxvYWRlclN0cmVhbQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbyBpbXBvcnQgVXBsb2FkZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtaW8gaW1wb3J0IFVwbG9hZGVyU3RyZWFtCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5Cgp0cnk6CiAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAjIHB5bGludDogZGlzYWJsZT11bmdyb3VwZWQtaW1wb3J0cwogIGZyb20gYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMgaW1wb3J0IGJvdG8zX2NsaWVudAogIEJPVE8zX0lOU1RBTExFRCA9IFRydWUKZXhjZXB0IEltcG9ydEVycm9yOgogIEJPVE8zX0lOU1RBTExFRCA9IEZhbHNlCgpNQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgPSAxMDAKCgpkZWYgcGFyc2VfczNfcGF0aChzM19wYXRoLCBvYmplY3Rfb3B0aW9uYWw9RmFsc2UpOgogICIiIlJldHVybiB0aGUgYnVja2V0IGFuZCBvYmplY3QgbmFtZXMgb2YgdGhlIGdpdmVuIHMzOi8vIHBhdGguIiIiCiAgbWF0Y2ggPSByZS5tYXRjaCgnXnMzOi8vKFteL10rKS8oLiopJCcsIHMzX3BhdGgpCiAgaWYgbWF0Y2ggaXMgTm9uZSBvciAobWF0Y2guZ3JvdXAoMikgPT0gJycgYW5kIG5vdCBvYmplY3Rfb3B0aW9uYWwpOgogICAgcmFpc2UgVmFsdWVFcnJvcignUzMgcGF0aCBtdXN0IGJlIGluIHRoZSBmb3JtIHMzOi8vPGJ1Y2tldD4vPG9iamVjdD4uJykKICByZXR1cm4gbWF0Y2guZ3JvdXAoMSksIG1hdGNoLmdyb3VwKDIpCgoKY2xhc3MgUzNJTyhvYmplY3QpOgogICIiIlMzIEkvTyBjbGllbnQuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaWVudD1Ob25lKToKICAgIGlmIGNsaWVudCBpcyBub3QgTm9uZToKICAgICAgc2VsZi5jbGllbnQgPSBjbGllbnQKICAgIGVsaWYgQk9UTzNfSU5TVEFMTEVEOgogICAgICBzZWxmLmNsaWVudCA9IGJvdG8zX2NsaWVudC5DbGllbnQoKQogICAgZWxzZToKICAgICAgbWVzc2FnZSA9ICdBV1MgZGVwZW5kZW5jaWVzIGFyZSBub3QgaW5zdGFsbGVkLCBhbmQgbm8gYWx0ZXJuYXRpdmUgJyBcCiAgICAgICdjbGllbnQgd2FzIHByb3ZpZGVkIHRvIFMzSU8uJwogICAgICByYWlzZSBSdW50aW1lRXJyb3IobWVzc2FnZSkKCiAgZGVmIG9wZW4oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVuYW1lLAogICAgICBtb2RlPSdyJywKICAgICAgcmVhZF9idWZmZXJfc2l6ZT0xNiAqIDEwMjQgKiAxMDI0LAogICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOgogICAgIiIiT3BlbiBhbiBTMyBmaWxlIHBhdGggZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4KCiAgICBBcmdzOgogICAgICBmaWxlbmFtZSAoc3RyKTogUzMgZmlsZSBwYXRoIGluIHRoZSBmb3JtIGBgczM6Ly88YnVja2V0Pi88b2JqZWN0PmBgLgogICAgICBtb2RlIChzdHIpOiBgYCdyJ2BgIGZvciByZWFkaW5nIG9yIGBgJ3cnYGAgZm9yIHdyaXRpbmcuCiAgICAgIHJlYWRfYnVmZmVyX3NpemUgKGludCk6IEJ1ZmZlciBzaXplIHRvIHVzZSBkdXJpbmcgcmVhZCBvcGVyYXRpb25zLgogICAgICBtaW1lX3R5cGUgKHN0cik6IE1pbWUgdHlwZSB0byBzZXQgZm9yIHdyaXRlIG9wZXJhdGlvbnMuCgogICAgUmV0dXJuczoKICAgICAgUzMgZmlsZSBvYmplY3QuCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBJbnZhbGlkIG9wZW4gZmlsZSBtb2RlLgogICAgIiIiCiAgICBpZiBtb2RlID09ICdyJyBvciBtb2RlID09ICdyYic6CiAgICAgIGRvd25sb2FkZXIgPSBTM0Rvd25sb2FkZXIoCiAgICAgICAgICBzZWxmLmNsaWVudCwgZmlsZW5hbWUsIGJ1ZmZlcl9zaXplPXJlYWRfYnVmZmVyX3NpemUpCiAgICAgIHJldHVybiBpby5CdWZmZXJlZFJlYWRlcigKICAgICAgICAgIERvd25sb2FkZXJTdHJlYW0oZG93bmxvYWRlciwgbW9kZT1tb2RlKSwgYnVmZmVyX3NpemU9cmVhZF9idWZmZXJfc2l6ZSkKICAgIGVsaWYgbW9kZSA9PSAndycgb3IgbW9kZSA9PSAnd2InOgogICAgICB1cGxvYWRlciA9IFMzVXBsb2FkZXIoc2VsZi5jbGllbnQsIGZpbGVuYW1lLCBtaW1lX3R5cGUpCiAgICAgIHJldHVybiBpby5CdWZmZXJlZFdyaXRlcigKICAgICAgICAgIFVwbG9hZGVyU3RyZWFtKHVwbG9hZGVyLCBtb2RlPW1vZGUpLCBidWZmZXJfc2l6ZT0xMjggKiAxMDI0KQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBmaWxlIG9wZW4gbW9kZTogJXMuJyAlIG1vZGUpCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgbGlzdF9wcmVmaXgoc2VsZiwgcGF0aCk6CiAgICAiIiJMaXN0cyBmaWxlcyBtYXRjaGluZyB0aGUgcHJlZml4LgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IFMzIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIHMzOi8vPGJ1Y2tldD4vW25hbWVdLgoKICAgIFJldHVybnM6CiAgICAgIERpY3Rpb25hcnkgb2YgZmlsZSBuYW1lIC0+IHNpemUuCiAgICAiIiIKICAgIGJ1Y2tldCwgcHJlZml4ID0gcGFyc2VfczNfcGF0aChwYXRoLCBvYmplY3Rfb3B0aW9uYWw9VHJ1ZSkKICAgIHJlcXVlc3QgPSBtZXNzYWdlcy5MaXN0UmVxdWVzdChidWNrZXQ9YnVja2V0LCBwcmVmaXg9cHJlZml4KQoKICAgIGZpbGVfc2l6ZXMgPSB7fQogICAgY291bnRlciA9IDAKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQoKICAgIGxvZ2dpbmcuaW5mbygiU3RhcnRpbmcgdGhlIHNpemUgZXN0aW1hdGlvbiBvZiB0aGUgaW5wdXQiKQoKICAgIHdoaWxlIFRydWU6CiAgICAgICNUaGUgbGlzdCBvcGVyYXRpb24gd2lsbCByYWlzZSBhbiBleGNlcHRpb24KICAgICAgI3doZW4gdHJ5aW5nIHRvIGxpc3QgYSBub25leGlzdGVudCBTMyBwYXRoLgogICAgICAjVGhpcyBzaG91bGQgbm90IGJlIGFuIGlzc3VlIGhlcmUuCiAgICAgICNJZ25vcmUgdGhpcyBleGNlcHRpb24gb3IgaXQgd2lsbCBicmVhayB0aGUgcHJvY2VkdXJlLgogICAgICB0cnk6CiAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5saXN0KHJlcXVlc3QpCiAgICAgIGV4Y2VwdCBtZXNzYWdlcy5TM0NsaWVudEVycm9yIGFzIGU6CiAgICAgICAgaWYgZS5jb2RlID09IDQwNDoKICAgICAgICAgIGJyZWFrCiAgICAgICAgZWxzZToKICAgICAgICAgIHJhaXNlIGUKCiAgICAgIGZvciBpdGVtIGluIHJlc3BvbnNlLml0ZW1zOgogICAgICAgIGZpbGVfbmFtZSA9ICdzMzovLyVzLyVzJyAlIChidWNrZXQsIGl0ZW0ua2V5KQogICAgICAgIGZpbGVfc2l6ZXNbZmlsZV9uYW1lXSA9IGl0ZW0uc2l6ZQogICAgICAgIGNvdW50ZXIgKz0gMQogICAgICAgIGlmIGNvdW50ZXIgJSAxMDAwMCA9PSAwOgogICAgICAgICAgbG9nZ2luZy5pbmZvKCJGaW5pc2hlZCBjb21wdXRpbmcgc2l6ZSBvZjogJXMgZmlsZXMiLCBsZW4oZmlsZV9zaXplcykpCiAgICAgIGlmIHJlc3BvbnNlLm5leHRfdG9rZW46CiAgICAgICAgcmVxdWVzdC5jb250aW51YXRpb25fdG9rZW4gPSByZXNwb25zZS5uZXh0X3Rva2VuCiAgICAgIGVsc2U6CiAgICAgICAgYnJlYWsKCiAgICBsb2dnaW5nLmluZm8oCiAgICAgICAgIkZpbmlzaGVkIGxpc3RpbmcgJXMgZmlsZXMgaW4gJXMgc2Vjb25kcy4iLAogICAgICAgIGNvdW50ZXIsCiAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF90aW1lKQoKICAgIHJldHVybiBmaWxlX3NpemVzCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgY2hlY2tzdW0oc2VsZiwgcGF0aCk6CiAgICAiIiJMb29rcyB1cCB0aGUgY2hlY2tzdW0gb2YgYW4gUzMgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IFMzIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIHMzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfczNfcGF0aChwYXRoKQogICAgcmVxdWVzdCA9IG1lc3NhZ2VzLkdldFJlcXVlc3QoYnVja2V0LCBvYmplY3RfcGF0aCkKICAgIGl0ZW0gPSBzZWxmLmNsaWVudC5nZXRfb2JqZWN0X21ldGFkYXRhKHJlcXVlc3QpCiAgICByZXR1cm4gaXRlbS5ldGFnCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgY29weShzZWxmLCBzcmMsIGRlc3QpOgogICAgIiIiQ29waWVzIGEgc2luZ2xlIFMzIGZpbGUgb2JqZWN0IGZyb20gc3JjIHRvIGRlc3QuCgogICAgQXJnczoKICAgICAgc3JjOiBTMyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBzMzovLzxidWNrZXQ+LzxuYW1lPi4KICAgICAgZGVzdDogUzMgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gczM6Ly88YnVja2V0Pi88bmFtZT4uCgogICAgUmFpc2VzOgogICAgICBUaW1lb3V0RXJyb3I6IG9uIHRpbWVvdXQuCiAgICAiIiIKICAgIHNyY19idWNrZXQsIHNyY19rZXkgPSBwYXJzZV9zM19wYXRoKHNyYykKICAgIGRlc3RfYnVja2V0LCBkZXN0X2tleSA9IHBhcnNlX3MzX3BhdGgoZGVzdCkKICAgIHJlcXVlc3QgPSBtZXNzYWdlcy5Db3B5UmVxdWVzdChzcmNfYnVja2V0LCBzcmNfa2V5LCBkZXN0X2J1Y2tldCwgZGVzdF9rZXkpCiAgICBzZWxmLmNsaWVudC5jb3B5KHJlcXVlc3QpCgogICMgV2UgaW50ZW50aW9uYWxseSBkbyBub3QgZGVjb3JhdGUgdGhpcyBtZXRob2Qgd2l0aCBhIHJldHJ5LCBzaW5jZSB0aGUKICAjIHVuZGVybHlpbmcgY29weSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgaWRlbXBvdGVudCBvcGVyYXRpb25zCiAgIyBwcm90ZWN0ZWQgYnkgcmV0cnkgZGVjb3JhdG9ycy4KICBkZWYgY29weV9wYXRocyhzZWxmLCBzcmNfZGVzdF9wYWlycyk6CiAgICAiIiJDb3BpZXMgdGhlIGdpdmVuIFMzIG9iamVjdHMgZnJvbSBzcmMgdG8gZGVzdC4gVGhpcyBjYW4gaGFuZGxlIGRpcmVjdG9yeQogICAgb3IgZmlsZSBwYXRocy4KCiAgICBBcmdzOgogICAgICBzcmNfZGVzdF9wYWlyczogbGlzdCBvZiAoc3JjLCBkZXN0KSB0dXBsZXMgb2YgczM6Ly88YnVja2V0Pi88bmFtZT4gZmlsZQogICAgICAgICAgICAgICAgICAgICAgcGF0aHMgdG8gY29weSBmcm9tIHNyYyB0byBkZXN0CiAgICBSZXR1cm5zOiBMaXN0IG9mIHR1cGxlcyBvZiAoc3JjLCBkZXN0LCBleGNlcHRpb24pIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQogICAgICAgICAgICBzcmNfZGVzdF9wYWlycyBhcmd1bWVudCwgd2hlcmUgZXhjZXB0aW9uIGlzIE5vbmUgaWYgdGhlIG9wZXJhdGlvbgogICAgICAgICAgICBzdWNjZWVkZWQgb3IgdGhlIHJlbGV2YW50IGV4Y2VwdGlvbiBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC4KICAgICIiIgogICAgaWYgbm90IHNyY19kZXN0X3BhaXJzOiByZXR1cm4gW10KCiAgICByZXN1bHRzID0gW10KCiAgICBmb3Igc3JjX3BhdGgsIGRlc3RfcGF0aCBpbiBzcmNfZGVzdF9wYWlyczoKCiAgICAgICMgQ29weSBhIGRpcmVjdG9yeSB3aXRoIHNlbGYuY29weV90cmVlCiAgICAgIGlmIHNyY19wYXRoLmVuZHN3aXRoKCcvJykgYW5kIGRlc3RfcGF0aC5lbmRzd2l0aCgnLycpOgogICAgICAgIHRyeToKICAgICAgICAgIHJlc3VsdHMgKz0gc2VsZi5jb3B5X3RyZWUoc3JjX3BhdGgsIGRlc3RfcGF0aCkKICAgICAgICBleGNlcHQgbWVzc2FnZXMuUzNDbGllbnRFcnJvciBhcyBlcnI6CiAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoc3JjX3BhdGgsIGRlc3RfcGF0aCwgZXJyKSkKCiAgICAgICMgQ29weSBpbmRpdmlkdWFsIGZpbGVzIHdpdGggc2VsZi5jb3B5CiAgICAgIGVsaWYgbm90IHNyY19wYXRoLmVuZHN3aXRoKCcvJykgYW5kIG5vdCBkZXN0X3BhdGguZW5kc3dpdGgoJy8nKToKICAgICAgICBzcmNfYnVja2V0LCBzcmNfa2V5ID0gcGFyc2VfczNfcGF0aChzcmNfcGF0aCkKICAgICAgICBkZXN0X2J1Y2tldCwgZGVzdF9rZXkgPSBwYXJzZV9zM19wYXRoKGRlc3RfcGF0aCkKICAgICAgICByZXF1ZXN0ID0gbWVzc2FnZXMuQ29weVJlcXVlc3QoCiAgICAgICAgICAgIHNyY19idWNrZXQsIHNyY19rZXksIGRlc3RfYnVja2V0LCBkZXN0X2tleSkKCiAgICAgICAgdHJ5OgogICAgICAgICAgc2VsZi5jbGllbnQuY29weShyZXF1ZXN0KQogICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKHNyY19wYXRoLCBkZXN0X3BhdGgsIE5vbmUpKQogICAgICAgIGV4Y2VwdCBtZXNzYWdlcy5TM0NsaWVudEVycm9yIGFzIGU6CiAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoc3JjX3BhdGgsIGRlc3RfcGF0aCwgZSkpCgogICAgICAjIE1pc21hdGNoZWQgcGF0aHMgKG9uZSBkaXJlY3RvcnksIG9uZSBub24tZGlyZWN0b3J5KSBnZXQgYW4gZXJyb3IgcmVzdWx0CiAgICAgIGVsc2U6CiAgICAgICAgZXJyID0gbWVzc2FnZXMuUzNDbGllbnRFcnJvcigKICAgICAgICAgICAgIkNhbid0IGNvcHkgbWlzbWF0Y2hlZCBwYXRocyAob25lIGRpcmVjdG9yeSwgb25lIG5vbi1kaXJlY3RvcnkpOiIgKwogICAgICAgICAgICAnICVzLCAlcycgJSAoc3JjX3BhdGgsIGRlc3RfcGF0aCksCiAgICAgICAgICAgIDQwMCkKICAgICAgICByZXN1bHRzLmFwcGVuZCgoc3JjX3BhdGgsIGRlc3RfcGF0aCwgZXJyKSkKCiAgICByZXR1cm4gcmVzdWx0cwoKICAjIFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlY29yYXRlIHRoaXMgbWV0aG9kIHdpdGggYSByZXRyeSwgc2luY2UgdGhlCiAgIyB1bmRlcmx5aW5nIGNvcHkgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IGlkZW1wb3RlbnQgb3BlcmF0aW9ucwogICMgcHJvdGVjdGVkIGJ5IHJldHJ5IGRlY29yYXRvcnMuCiAgZGVmIGNvcHlfdHJlZShzZWxmLCBzcmMsIGRlc3QpOgogICAgIiIiUmVuYW1lcyB0aGUgZ2l2ZW4gUzMgZGlyZWN0b3J5IGFuZCBpdCdzIGNvbnRlbnRzIHJlY3Vyc2l2ZWx5CiAgICBmcm9tIHNyYyB0byBkZXN0LgoKICAgIEFyZ3M6CiAgICAgIHNyYzogUzMgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gczM6Ly88YnVja2V0Pi88bmFtZT4vLgogICAgICBkZXN0OiBTMyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBzMzovLzxidWNrZXQ+LzxuYW1lPi8uCgogICAgUmV0dXJuczoKICAgICAgTGlzdCBvZiB0dXBsZXMgb2YgKHNyYywgZGVzdCwgZXhjZXB0aW9uKSB3aGVyZSBleGNlcHRpb24gaXMgTm9uZSBpZiB0aGUKICAgICAgb3BlcmF0aW9uIHN1Y2NlZWRlZCBvciB0aGUgcmVsZXZhbnQgZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgogICAgIiIiCiAgICBhc3NlcnQgc3JjLmVuZHN3aXRoKCcvJykKICAgIGFzc2VydCBkZXN0LmVuZHN3aXRoKCcvJykKCiAgICByZXN1bHRzID0gW10KICAgIGZvciBlbnRyeSBpbiBzZWxmLmxpc3RfcHJlZml4KHNyYyk6CiAgICAgIHJlbF9wYXRoID0gZW50cnlbbGVuKHNyYyk6XQogICAgICB0cnk6CiAgICAgICAgc2VsZi5jb3B5KGVudHJ5LCBkZXN0ICsgcmVsX3BhdGgpCiAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGVudHJ5LCBkZXN0ICsgcmVsX3BhdGgsIE5vbmUpKQogICAgICBleGNlcHQgbWVzc2FnZXMuUzNDbGllbnRFcnJvciBhcyBlOgogICAgICAgIHJlc3VsdHMuYXBwZW5kKChlbnRyeSwgZGVzdCArIHJlbF9wYXRoLCBlKSkKCiAgICByZXR1cm4gcmVzdWx0cwoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGRlbGV0ZShzZWxmLCBwYXRoKToKICAgICIiIkRlbGV0ZXMgYSBzaW5nbGUgUzMgZmlsZSBvYmplY3QgZnJvbSBzcmMgdG8gZGVzdC4KCiAgICBBcmdzOgogICAgICBzcmM6IFMzIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIHMzOi8vPGJ1Y2tldD4vPG5hbWU+Ly4KICAgICAgZGVzdDogUzMgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gczM6Ly88YnVja2V0Pi88bmFtZT4vLgoKICAgIFJldHVybnM6CiAgICAgIExpc3Qgb2YgdHVwbGVzIG9mIChzcmMsIGRlc3QsIGV4Y2VwdGlvbikgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCiAgICAgIHNyY19kZXN0X3BhaXJzIGFyZ3VtZW50LCB3aGVyZSBleGNlcHRpb24gaXMgTm9uZSBpZiB0aGUgb3BlcmF0aW9uCiAgICAgIHN1Y2NlZWRlZCBvciB0aGUgcmVsZXZhbnQgZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfczNfcGF0aChwYXRoKQogICAgcmVxdWVzdCA9IG1lc3NhZ2VzLkRlbGV0ZVJlcXVlc3QoYnVja2V0LCBvYmplY3RfcGF0aCkKCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50LmRlbGV0ZShyZXF1ZXN0KQogICAgZXhjZXB0IG1lc3NhZ2VzLlMzQ2xpZW50RXJyb3IgYXMgZToKICAgICAgaWYgZS5jb2RlID09IDQwNDoKICAgICAgICByZXR1cm4gICMgU2FtZSBiZWhhdmlvciBhcyBHQ1MgLSBkb24ndCBzdXJmYWNlIGEgNDA0IGVycm9yCiAgICAgIGVsc2U6CiAgICAgICAgbG9nZ2luZy5lcnJvcignSFRUUCBlcnJvciB3aGlsZSBkZWxldGluZyBmaWxlICVzOiAlcycsIHBhdGgsIDMpCiAgICAgICAgcmFpc2UgZQoKICAjIFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlY29yYXRlIHRoaXMgbWV0aG9kIHdpdGggYSByZXRyeSwgc2luY2UgdGhlCiAgIyB1bmRlcmx5aW5nIGNvcHkgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IGlkZW1wb3RlbnQgb3BlcmF0aW9ucwogICMgcHJvdGVjdGVkIGJ5IHJldHJ5IGRlY29yYXRvcnMuCiAgZGVmIGRlbGV0ZV9wYXRocyhzZWxmLCBwYXRocyk6CiAgICAiIiJEZWxldGVzIHRoZSBnaXZlbiBTMyBvYmplY3RzIGZyb20gc3JjIHRvIGRlc3QuIFRoaXMgY2FuIGhhbmRsZSBkaXJlY3RvcnkKICAgIG9yIGZpbGUgcGF0aHMuCgogICAgQXJnczoKICAgICAgc3JjOiBTMyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBzMzovLzxidWNrZXQ+LzxuYW1lPi8uCiAgICAgIGRlc3Q6IFMzIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIHMzOi8vPGJ1Y2tldD4vPG5hbWU+Ly4KCiAgICBSZXR1cm5zOgogICAgICBMaXN0IG9mIHR1cGxlcyBvZiAoc3JjLCBkZXN0LCBleGNlcHRpb24pIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZQogICAgICBzcmNfZGVzdF9wYWlycyBhcmd1bWVudCwgd2hlcmUgZXhjZXB0aW9uIGlzIE5vbmUgaWYgdGhlIG9wZXJhdGlvbgogICAgICBzdWNjZWVkZWQgb3IgdGhlIHJlbGV2YW50IGV4Y2VwdGlvbiBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC4KICAgICIiIgogICAgZGlyZWN0b3JpZXMsIG5vdF9kaXJlY3RvcmllcyA9IFtdLCBbXQogICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgIGlmIHBhdGguZW5kc3dpdGgoJy8nKTogZGlyZWN0b3JpZXMuYXBwZW5kKHBhdGgpCiAgICAgIGVsc2U6IG5vdF9kaXJlY3Rvcmllcy5hcHBlbmQocGF0aCkKCiAgICByZXN1bHRzID0ge30KCiAgICBmb3IgZGlyZWN0b3J5IGluIGRpcmVjdG9yaWVzOgogICAgICBkaXJfcmVzdWx0ID0gZGljdChzZWxmLmRlbGV0ZV90cmVlKGRpcmVjdG9yeSkpCiAgICAgIHJlc3VsdHMudXBkYXRlKGRpcl9yZXN1bHQpCgogICAgbm90X2RpcmVjdG9yeV9yZXN1bHRzID0gZGljdChzZWxmLmRlbGV0ZV9maWxlcyhub3RfZGlyZWN0b3JpZXMpKQogICAgcmVzdWx0cy51cGRhdGUobm90X2RpcmVjdG9yeV9yZXN1bHRzKQoKICAgIHJldHVybiByZXN1bHRzCgogICMgV2UgaW50ZW50aW9uYWxseSBkbyBub3QgZGVjb3JhdGUgdGhpcyBtZXRob2Qgd2l0aCBhIHJldHJ5LCBzaW5jZSB0aGUKICAjIHVuZGVybHlpbmcgY29weSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgaWRlbXBvdGVudCBvcGVyYXRpb25zCiAgIyBwcm90ZWN0ZWQgYnkgcmV0cnkgZGVjb3JhdG9ycy4KICBkZWYgZGVsZXRlX2ZpbGVzKHNlbGYsIHBhdGhzLCBtYXhfYmF0Y2hfc2l6ZT0xMDAwKToKICAgICIiIkRlbGV0ZXMgdGhlIGdpdmVuIFMzIGZpbGUgb2JqZWN0IGZyb20gc3JjIHRvIGRlc3QuCgogICAgQXJnczoKICAgICAgcGF0aHM6IExpc3Qgb2YgUzMgZmlsZSBwYXRocyBpbiB0aGUgZm9ybSBzMzovLzxidWNrZXQ+LzxuYW1lPgogICAgICBtYXhfYmF0Y2hfc2l6ZTogTGFyZ2VzdCBudW1iZXIgb2Yga2V5cyB0byBzZW5kIHRvIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZAogICAgICBzaW11bHRhbmVvdXNseQoKICAgIFJldHVybnM6IExpc3Qgb2YgdHVwbGVzIG9mIChwYXRoLCBleGNlcHRpb24pIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBwYXRocwogICAgICAgICAgICAgYXJndW1lbnQsIHdoZXJlIGV4Y2VwdGlvbiBpcyBOb25lIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkIG9yCiAgICAgICAgICAgICB0aGUgcmVsZXZhbnQgZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3QgcGF0aHM6IHJldHVybiBbXQoKICAgICMgU29ydCBwYXRocyBpbnRvIGJ1Y2tldDogW2tleXNdCiAgICBidWNrZXRzLCBrZXlzID0gemlwKCpbcGFyc2VfczNfcGF0aChwYXRoKSBmb3IgcGF0aCBpbiBwYXRoc10pCiAgICBncm91cGVkX2tleXMgPSB7YnVja2V0OiBbXSBmb3IgYnVja2V0IGluIGJ1Y2tldHN9CiAgICBmb3IgYnVja2V0LCBrZXkgaW4gemlwKGJ1Y2tldHMsIGtleXMpOgogICAgICBncm91cGVkX2tleXNbYnVja2V0XS5hcHBlbmQoa2V5KQoKICAgICMgRm9yIGVhY2ggYnVja2V0LCBkZWxldGUgbWluaWJhdGNoZXMgb2Yga2V5cwogICAgcmVzdWx0cyA9IHt9CiAgICBmb3IgYnVja2V0LCBrZXlzIGluIGdyb3VwZWRfa2V5cy5pdGVtcygpOgogICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oa2V5cyksIG1heF9iYXRjaF9zaXplKToKICAgICAgICBtaW5pYmF0Y2hfa2V5cyA9IGtleXNbaTppICsgbWF4X2JhdGNoX3NpemVdCiAgICAgICAgcmVzdWx0cy51cGRhdGUoc2VsZi5fZGVsZXRlX21pbmliYXRjaChidWNrZXQsIG1pbmliYXRjaF9rZXlzKSkKCiAgICAjIE9yZ2FuaXplIGZpbmFsIHJlc3VsdHMKICAgIGZpbmFsX3Jlc3VsdHMgPSBbKHBhdGgsIHJlc3VsdHNbcGFyc2VfczNfcGF0aChwYXRoKV0pIGZvciBwYXRoIGluIHBhdGhzXQoKICAgIHJldHVybiBmaW5hbF9yZXN1bHRzCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2RlbGV0ZV9taW5pYmF0Y2goc2VsZiwgYnVja2V0LCBrZXlzKToKICAgICIiIkEgaGVscGVyIG1ldGhvZC4gQm90bzMgYWxsb3dzIGJhdGNoIGRlbGV0aW9ucwogICAgZm9yIGZpbGVzIHdpdGhpbiB0aGUgc2FtZSBidWNrZXQuCgogICAgQXJnczoKICAgICAgYnVja2V0OiBTdHJpbmcgYnVja2V0IG5hbWUKICAgICAga2V5czogTGlzdCBvZiBrZXlzIHRvIGJlIGRlbGV0ZWQgaW4gdGhlIGJ1Y2tldAoKICAgIFJldHVybnM6IGRpY3Qgb2YgdGhlIGZvcm0geyhidWNrZXQsIGtleSk6IGVycm9yfSwgd2hlcmUgZXJyb3IgaXMgTm9uZSBpZiB0aGUKICAgIG9wZXJhdGlvbiBzdWNjZWVkZWQKICAgICIiIgogICAgcmVxdWVzdCA9IG1lc3NhZ2VzLkRlbGV0ZUJhdGNoUmVxdWVzdChidWNrZXQsIGtleXMpCiAgICByZXN1bHRzID0ge30KICAgIHRyeToKICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5kZWxldGVfYmF0Y2gocmVxdWVzdCkKCiAgICAgIGZvciBrZXkgaW4gcmVzcG9uc2UuZGVsZXRlZDoKICAgICAgICByZXN1bHRzWyhidWNrZXQsIGtleSldID0gTm9uZQoKICAgICAgZm9yIGtleSwgZXJyb3IgaW4gemlwKHJlc3BvbnNlLmZhaWxlZCwgcmVzcG9uc2UuZXJyb3JzKToKICAgICAgICByZXN1bHRzWyhidWNrZXQsIGtleSldID0gZXJyb3IKCiAgICBleGNlcHQgbWVzc2FnZXMuUzNDbGllbnRFcnJvciBhcyBlOgogICAgICBmb3Iga2V5IGluIGtleXM6CiAgICAgICAgcmVzdWx0c1soYnVja2V0LCBrZXkpXSA9IGUKCiAgICByZXR1cm4gcmVzdWx0cwoKICAjIFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlY29yYXRlIHRoaXMgbWV0aG9kIHdpdGggYSByZXRyeSwgc2luY2UgdGhlCiAgIyB1bmRlcmx5aW5nIGNvcHkgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IGlkZW1wb3RlbnQgb3BlcmF0aW9ucwogICMgcHJvdGVjdGVkIGJ5IHJldHJ5IGRlY29yYXRvcnMuCiAgZGVmIGRlbGV0ZV90cmVlKHNlbGYsIHJvb3QpOgogICAgIiIiRGVsZXRlcyBhbGwgb2JqZWN0cyB1bmRlciB0aGUgZ2l2ZW4gUzMgZGlyZWN0b3J5LgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IFMzIHJvb3QgcGF0aCBpbiB0aGUgZm9ybSBzMzovLzxidWNrZXQ+LzxuYW1lPi8gKGVuZGluZyB3aXRoIGEgIi8iKQoKICAgIFJldHVybnM6IExpc3Qgb2YgdHVwbGVzIG9mIChwYXRoLCBleGNlcHRpb24pLCB3aGVyZSBlYWNoIHBhdGggaXMgYW4gb2JqZWN0CiAgICAgICAgICAgIHVuZGVyIHRoZSBnaXZlbiByb290LiBleGNlcHRpb24gaXMgTm9uZSBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZAogICAgICAgICAgICBvciB0aGUgcmVsZXZhbnQgZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgogICAgIiIiCiAgICBhc3NlcnQgcm9vdC5lbmRzd2l0aCgnLycpCgogICAgcGF0aHMgPSBzZWxmLmxpc3RfcHJlZml4KHJvb3QpCiAgICByZXR1cm4gc2VsZi5kZWxldGVfZmlsZXMocGF0aHMpCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgc2l6ZShzZWxmLCBwYXRoKToKICAgICIiIlJldHVybnMgdGhlIHNpemUgb2YgYSBzaW5nbGUgUzMgb2JqZWN0LgoKICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gZ2xvYiBleHBhbnNpb24uIEhlbmNlIHRoZSBnaXZlbiBwYXRoIG11c3QgYmUKICAgIGZvciBhIHNpbmdsZSBTMyBvYmplY3QuCgogICAgUmV0dXJuczogc2l6ZSBvZiB0aGUgUzMgb2JqZWN0IGluIGJ5dGVzLgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfczNfcGF0aChwYXRoKQogICAgcmVxdWVzdCA9IG1lc3NhZ2VzLkdldFJlcXVlc3QoYnVja2V0LCBvYmplY3RfcGF0aCkKICAgIGl0ZW0gPSBzZWxmLmNsaWVudC5nZXRfb2JqZWN0X21ldGFkYXRhKHJlcXVlc3QpCiAgICByZXR1cm4gaXRlbS5zaXplCgogICMgV2UgaW50ZW50aW9uYWxseSBkbyBub3QgZGVjb3JhdGUgdGhpcyBtZXRob2Qgd2l0aCBhIHJldHJ5LCBzaW5jZSB0aGUKICAjIHVuZGVybHlpbmcgY29weSBhbmQgZGVsZXRlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgaWRlbXBvdGVudCBvcGVyYXRpb25zCiAgIyBwcm90ZWN0ZWQgYnkgcmV0cnkgZGVjb3JhdG9ycy4KICBkZWYgcmVuYW1lKHNlbGYsIHNyYywgZGVzdCk6CiAgICAiIiJSZW5hbWVzIHRoZSBnaXZlbiBTMyBvYmplY3QgZnJvbSBzcmMgdG8gZGVzdC4KCiAgICBBcmdzOgogICAgICBzcmM6IFMzIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIHMzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgICBkZXN0OiBTMyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBzMzovLzxidWNrZXQ+LzxuYW1lPi4KICAgICIiIgogICAgc2VsZi5jb3B5KHNyYywgZGVzdCkKICAgIHNlbGYuZGVsZXRlKHNyYykKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBsYXN0X3VwZGF0ZWQoc2VsZiwgcGF0aCk6CiAgICAiIiJSZXR1cm5zIHRoZSBsYXN0IHVwZGF0ZWQgZXBvY2ggdGltZSBvZiBhIHNpbmdsZSBTMyBvYmplY3QuCgogICAgVGhpcyBtZXRob2QgZG9lcyBub3QgcGVyZm9ybSBnbG9iIGV4cGFuc2lvbi4gSGVuY2UgdGhlIGdpdmVuIHBhdGggbXVzdCBiZQogICAgZm9yIGEgc2luZ2xlIFMzIG9iamVjdC4KCiAgICBSZXR1cm5zOiBsYXN0IHVwZGF0ZWQgdGltZSBvZiB0aGUgUzMgb2JqZWN0IGluIHNlY29uZC4KICAgICIiIgogICAgYnVja2V0LCBvYmplY3QgPSBwYXJzZV9zM19wYXRoKHBhdGgpCiAgICByZXF1ZXN0ID0gbWVzc2FnZXMuR2V0UmVxdWVzdChidWNrZXQsIG9iamVjdCkKICAgIGRhdGV0aW1lID0gc2VsZi5jbGllbnQuZ2V0X29iamVjdF9tZXRhZGF0YShyZXF1ZXN0KS5sYXN0X21vZGlmaWVkCiAgICByZXR1cm4gKAogICAgICAgIHRpbWUubWt0aW1lKGRhdGV0aW1lLnRpbWV0dXBsZSgpKSAtIHRpbWUudGltZXpvbmUgKwogICAgICAgIGRhdGV0aW1lLm1pY3Jvc2Vjb25kIC8gMTAwMDAwMC4wKQoKICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgogICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBTMyBvYmplY3QgZXhpc3RzLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IFMzIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIHMzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdCA9IHBhcnNlX3MzX3BhdGgocGF0aCkKICAgIHJlcXVlc3QgPSBtZXNzYWdlcy5HZXRSZXF1ZXN0KGJ1Y2tldCwgb2JqZWN0KQogICAgdHJ5OgogICAgICBzZWxmLmNsaWVudC5nZXRfb2JqZWN0X21ldGFkYXRhKHJlcXVlc3QpCiAgICAgIHJldHVybiBUcnVlCiAgICBleGNlcHQgbWVzc2FnZXMuUzNDbGllbnRFcnJvciBhcyBlOgogICAgICBpZiBlLmNvZGUgPT0gNDA0OgogICAgICAgICMgSFRUUCA0MDQgaW5kaWNhdGVzIHRoYXQgdGhlIGZpbGUgZGlkIG5vdCBleGlzdAogICAgICAgIHJldHVybiBGYWxzZQogICAgICBlbHNlOgogICAgICAgICMgV2UgcmUtcmFpc2UgYWxsIG90aGVyIGV4Y2VwdGlvbnMKICAgICAgICByYWlzZQoKICBkZWYgcmVuYW1lX2ZpbGVzKHNlbGYsIHNyY19kZXN0X3BhaXJzKToKICAgICIiIlJlbmFtZXMgdGhlIGdpdmVuIFMzIG9iamVjdHMgZnJvbSBzcmMgdG8gZGVzdC4KCiAgICBBcmdzOgogICAgICBzcmNfZGVzdF9wYWlyczogbGlzdCBvZiAoc3JjLCBkZXN0KSB0dXBsZXMgb2YgczM6Ly88YnVja2V0Pi88bmFtZT4gZmlsZQogICAgICAgICAgICAgICAgICAgICAgcGF0aHMgdG8gcmVuYW1lIGZyb20gc3JjIHRvIGRlc3QKICAgIFJldHVybnM6IExpc3Qgb2YgdHVwbGVzIG9mIChzcmMsIGRlc3QsIGV4Y2VwdGlvbikgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCiAgICAgICAgICAgIHNyY19kZXN0X3BhaXJzIGFyZ3VtZW50LCB3aGVyZSBleGNlcHRpb24gaXMgTm9uZSBpZiB0aGUgb3BlcmF0aW9uCiAgICAgICAgICAgIHN1Y2NlZWRlZCBvciB0aGUgcmVsZXZhbnQgZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3Qgc3JjX2Rlc3RfcGFpcnM6IHJldHVybiBbXQoKICAgICMgVE9ETzogVGhyb3cgdmFsdWUgZXJyb3IgaWYgcGF0aCBoYXMgZGlyZWN0b3J5CiAgICBmb3Igc3JjLCBkZXN0IGluIHNyY19kZXN0X3BhaXJzOgogICAgICBpZiBzcmMuZW5kc3dpdGgoJy8nKSBvciBkZXN0LmVuZHN3aXRoKCcvJyk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IHJlbmFtZSBhIGRpcmVjdG9yeScpCgogICAgY29weV9yZXN1bHRzID0gc2VsZi5jb3B5X3BhdGhzKHNyY19kZXN0X3BhaXJzKQogICAgcGF0aHNfdG9fZGVsZXRlID0gW3NyYyBmb3IgKHNyYywgXywgZXJyKSBpbiBjb3B5X3Jlc3VsdHMgaWYgZXJyIGlzIE5vbmVdCiAgICBkZWxldGVfcmVzdWx0cyA9IHNlbGYuZGVsZXRlX2ZpbGVzKHBhdGhzX3RvX2RlbGV0ZSkKCiAgICBkZWxldGVfcmVzdWx0c19kaWN0ID0ge3NyYzogZXJyIGZvciAoc3JjLCBlcnIpIGluIGRlbGV0ZV9yZXN1bHRzfQogICAgcmVuYW1lX3Jlc3VsdHMgPSBbXQogICAgZm9yIHNyYywgZGVzdCwgZXJyIGluIGNvcHlfcmVzdWx0czoKICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOiByZW5hbWVfcmVzdWx0cy5hcHBlbmQoKHNyYywgZGVzdCwgZXJyKSkKICAgICAgZWxpZiBkZWxldGVfcmVzdWx0c19kaWN0W3NyY10gaXMgbm90IE5vbmU6CiAgICAgICAgcmVuYW1lX3Jlc3VsdHMuYXBwZW5kKHNyYywgZGVzdCwgZGVsZXRlX3Jlc3VsdHNfZGljdFtzcmNdKQogICAgICBlbHNlOgogICAgICAgIHJlbmFtZV9yZXN1bHRzLmFwcGVuZCgoc3JjLCBkZXN0LCBOb25lKSkKCiAgICByZXR1cm4gcmVuYW1lX3Jlc3VsdHMKCgpjbGFzcyBTM0Rvd25sb2FkZXIoRG93bmxvYWRlcik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaWVudCwgcGF0aCwgYnVmZmVyX3NpemUpOgogICAgc2VsZi5fY2xpZW50ID0gY2xpZW50CiAgICBzZWxmLl9wYXRoID0gcGF0aAogICAgc2VsZi5fYnVja2V0LCBzZWxmLl9uYW1lID0gcGFyc2VfczNfcGF0aChwYXRoKQogICAgc2VsZi5fYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQoKICAgICMgR2V0IG9iamVjdCBzdGF0ZS4KICAgIHNlbGYuX2dldF9yZXF1ZXN0ID0gKAogICAgICAgIG1lc3NhZ2VzLkdldFJlcXVlc3QoYnVja2V0PXNlbGYuX2J1Y2tldCwgb2JqZWN0PXNlbGYuX25hbWUpKQoKICAgIHRyeToKICAgICAgbWV0YWRhdGEgPSBzZWxmLl9nZXRfb2JqZWN0X21ldGFkYXRhKHNlbGYuX2dldF9yZXF1ZXN0KQoKICAgIGV4Y2VwdCBtZXNzYWdlcy5TM0NsaWVudEVycm9yIGFzIGU6CiAgICAgIGlmIGUuY29kZSA9PSA0MDQ6CiAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FTk9FTlQsICdOb3QgZm91bmQ6ICVzJyAlIHNlbGYuX3BhdGgpCiAgICAgIGVsc2U6CiAgICAgICAgbG9nZ2luZy5lcnJvcignSFRUUCBlcnJvciB3aGlsZSByZXF1ZXN0aW5nIGZpbGUgJXM6ICVzJywgc2VsZi5fcGF0aCwgMykKICAgICAgICByYWlzZQoKICAgIHNlbGYuX3NpemUgPSBtZXRhZGF0YS5zaXplCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2dldF9vYmplY3RfbWV0YWRhdGEoc2VsZiwgZ2V0X3JlcXVlc3QpOgogICAgcmV0dXJuIHNlbGYuX2NsaWVudC5nZXRfb2JqZWN0X21ldGFkYXRhKGdldF9yZXF1ZXN0KQoKICBAcHJvcGVydHkKICBkZWYgc2l6ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9zaXplCgogIGRlZiBnZXRfcmFuZ2Uoc2VsZiwgc3RhcnQsIGVuZCk6CiAgICByZXR1cm4gc2VsZi5fY2xpZW50LmdldF9yYW5nZShzZWxmLl9nZXRfcmVxdWVzdCwgc3RhcnQsIGVuZCkKCgpjbGFzcyBTM1VwbG9hZGVyKFVwbG9hZGVyKToKICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50LCBwYXRoLCBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOgogICAgc2VsZi5fY2xpZW50ID0gY2xpZW50CiAgICBzZWxmLl9wYXRoID0gcGF0aAogICAgc2VsZi5fYnVja2V0LCBzZWxmLl9uYW1lID0gcGFyc2VfczNfcGF0aChwYXRoKQogICAgc2VsZi5fbWltZV90eXBlID0gbWltZV90eXBlCgogICAgc2VsZi5wYXJ0X251bWJlciA9IDEKICAgIHNlbGYuYnVmZmVyID0gYicnCgogICAgc2VsZi5sYXN0X2Vycm9yID0gTm9uZQoKICAgIHNlbGYudXBsb2FkX2lkID0gTm9uZQoKICAgIHNlbGYucGFydHMgPSBbXQoKICAgIHNlbGYuX3N0YXJ0X3VwbG9hZCgpCgogICMgVGhlcmUgaXMgcmV0cnkgbG9naWMgaW4gdGhlIHVuZGVybHlpbmcgdHJhbnNmZXIgbGlicmFyeSBidXQgd2Ugc2hvdWxkIG1ha2UKICAjIGl0IG1vcmUgZXhwbGljaXQgc28gd2UgY2FuIGNvbnRyb2wgdGhlIHJldHJ5IHBhcmFtZXRlcnMuCiAgQHJldHJ5Lm5vX3JldHJpZXMgICMgVXNpbmcgbm9fcmV0cmllcyBtYXJrcyB0aGlzIGFzIGFuIGludGVncmF0aW9uIHBvaW50LgogIGRlZiBfc3RhcnRfdXBsb2FkKHNlbGYpOgogICAgIyBUaGUgdXBsb2FkZXIgYnkgZGVmYXVsdCB0cmFuc2ZlcnMgZGF0YSBpbiBjaHVua3Mgb2YgMTAyNCAqIDEwMjQgYnl0ZXMgYXQKICAgICMgYSB0aW1lLCBidWZmZXJpbmcgd3JpdGVzIHVudGlsIHRoYXQgc2l6ZSBpcyByZWFjaGVkLgogICAgdHJ5OgogICAgICByZXF1ZXN0ID0gbWVzc2FnZXMuVXBsb2FkUmVxdWVzdCgKICAgICAgICAgIHNlbGYuX2J1Y2tldCwgc2VsZi5fbmFtZSwgc2VsZi5fbWltZV90eXBlKQogICAgICByZXNwb25zZSA9IHNlbGYuX2NsaWVudC5jcmVhdGVfbXVsdGlwYXJ0X3VwbG9hZChyZXF1ZXN0KQogICAgICBzZWxmLnVwbG9hZF9pZCA9IHJlc3BvbnNlLnVwbG9hZF9pZAogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgIGxvZ2dpbmcuZXJyb3IoCiAgICAgICAgICAnRXJyb3IgaW4gX3N0YXJ0X3VwbG9hZCB3aGlsZSBpbnNlcnRpbmcgZmlsZSAlczogJXMnLAogICAgICAgICAgc2VsZi5fcGF0aCwKICAgICAgICAgIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCiAgICAgIHNlbGYubGFzdF9lcnJvciA9IGUKICAgICAgcmFpc2UgZQoKICBkZWYgcHV0KHNlbGYsIGRhdGEpOgoKICAgIE1JTl9XUklURV9TSVpFID0gNSAqIDEwMjQgKiAxMDI0CiAgICBNQVhfV1JJVEVfU0laRSA9IDUgKiAxMDI0ICogMTAyNCAqIDEwMjQKCiAgICAjIFRPRE86IEJ5dGUgc3RyaW5ncyBtaWdodCBub3QgYmUgdGhlIG1vc3QgcGVyZm9ybWFudCB3YXkgdG8gaGFuZGxlIHRoaXMKICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9ieXRlcygpCgogICAgd2hpbGUgbGVuKHNlbGYuYnVmZmVyKSA+PSBNSU5fV1JJVEVfU0laRToKICAgICAgIyBUYWtlIHRoZSBmaXJzdCBjaHVuayBvZmYgdGhlIGJ1ZmZlciBhbmQgd3JpdGUgaXQgdG8gUzMKICAgICAgY2h1bmsgPSBzZWxmLmJ1ZmZlcls6TUFYX1dSSVRFX1NJWkVdCiAgICAgIHNlbGYuX3dyaXRlX3RvX3MzKGNodW5rKQogICAgICAjIFJlbW92ZSB0aGUgd3JpdHRlbiBjaHVuayBmcm9tIHRoZSBidWZmZXIKICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlcltNQVhfV1JJVEVfU0laRTpdCgogIGRlZiBfd3JpdGVfdG9fczMoc2VsZiwgZGF0YSk6CgogICAgdHJ5OgogICAgICByZXF1ZXN0ID0gbWVzc2FnZXMuVXBsb2FkUGFydFJlcXVlc3QoCiAgICAgICAgICBzZWxmLl9idWNrZXQsIHNlbGYuX25hbWUsIHNlbGYudXBsb2FkX2lkLCBzZWxmLnBhcnRfbnVtYmVyLCBkYXRhKQogICAgICByZXNwb25zZSA9IHNlbGYuX2NsaWVudC51cGxvYWRfcGFydChyZXF1ZXN0KQogICAgICBzZWxmLnBhcnRzLmFwcGVuZCh7CiAgICAgICAgICAnRVRhZyc6IHJlc3BvbnNlLmV0YWcsICdQYXJ0TnVtYmVyJzogcmVzcG9uc2UucGFydF9udW1iZXIKICAgICAgfSkKICAgICAgc2VsZi5wYXJ0X251bWJlciA9IHNlbGYucGFydF9udW1iZXIgKyAxCiAgICBleGNlcHQgbWVzc2FnZXMuUzNDbGllbnRFcnJvciBhcyBlOgogICAgICBzZWxmLmxhc3RfZXJyb3IgPSBlCiAgICAgIGlmIGUuY29kZSA9PSA0MDQ6CiAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FTk9FTlQsICdOb3QgZm91bmQ6ICVzJyAlIHNlbGYuX3BhdGgpCiAgICAgIGVsc2U6CiAgICAgICAgbG9nZ2luZy5lcnJvcignSFRUUCBlcnJvciB3aGlsZSByZXF1ZXN0aW5nIGZpbGUgJXM6ICVzJywgc2VsZi5fcGF0aCwgMykKICAgICAgICByYWlzZQoKICBkZWYgZmluaXNoKHNlbGYpOgoKICAgIHNlbGYuX3dyaXRlX3RvX3MzKHNlbGYuYnVmZmVyKQoKICAgIGlmIHNlbGYubGFzdF9lcnJvciBpcyBub3QgTm9uZToKICAgICAgcmFpc2Ugc2VsZi5sYXN0X2Vycm9yICAjIHB5bGludDogZGlzYWJsZT1yYWlzaW5nLWJhZC10eXBlCgogICAgcmVxdWVzdCA9IG1lc3NhZ2VzLkNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkUmVxdWVzdCgKICAgICAgICBzZWxmLl9idWNrZXQsIHNlbGYuX25hbWUsIHNlbGYudXBsb2FkX2lkLCBzZWxmLnBhcnRzKQogICAgc2VsZi5fY2xpZW50LmNvbXBsZXRlX211bHRpcGFydF91cGxvYWQocmVxdWVzdCkKlH2UKIwNcGFyc2VfczNfcGF0aJRqVjEBAEszSziHlIwNUzNJTy5fX2luaXRfX5RqVjEBAEs9S0WHlIwJUzNJTy5vcGVulGpWMQEAS0dLZYeUjBBTM0lPLmxpc3RfcHJlZml4lGpWMQEAS2dLmIeUjA1TM0lPLmNoZWNrc3VtlGpWMQEAS5pLpYeUjAlTM0lPLmNvcHmUalYxAQBLp0u2h5SMD1MzSU8uY29weV9wYXRoc5RqVjEBAEu7S+iHlIwOUzNJTy5jb3B5X3RyZWWUalYxAQBL7U0FAYeUjAtTM0lPLmRlbGV0ZZRqVjEBAE0HAU0fAYeUjBFTM0lPLmRlbGV0ZV9wYXRoc5RqVjEBAE0kAU0/AYeUjBFTM0lPLmRlbGV0ZV9maWxlc5RqVjEBAE1EAU1iAYeUjBZTM0lPLl9kZWxldGVfbWluaWJhdGNolGpWMQEATWQBTYABh5SMEFMzSU8uZGVsZXRlX3RyZWWUalYxAQBNhQFNkgGHlIwJUzNJTy5zaXpllGpWMQEATZQBTaEBh5SMC1MzSU8ucmVuYW1llGpWMQEATaYBTa4Bh5SMEVMzSU8ubGFzdF91cGRhdGVklGpWMQEATbABTb8Bh5SMC1MzSU8uZXhpc3RzlGpWMQEATcEBTdIBh5SMEVMzSU8ucmVuYW1lX2ZpbGVzlGpWMQEATdQBTfIBh5SMBFMzSU+Ual0xAQBLO03yAYeUjBVTM0Rvd25sb2FkZXIuX19pbml0X1+UalYxAQBN9gFNCgKHlIwhUzNEb3dubG9hZGVyLl9nZXRfb2JqZWN0X21ldGFkYXRhlGpWMQEATQwCTQ8Ch5SMEVMzRG93bmxvYWRlci5zaXpllGpWMQEATRECTRMCh5SMFlMzRG93bmxvYWRlci5nZXRfcmFuZ2WUalYxAQBNFQJNFgKHlIwMUzNEb3dubG9hZGVylGpdMQEATfUBTRYCh5SME1MzVXBsb2FkZXIuX19pbml0X1+UalYxAQBNGgJNKQKHlIwYUzNVcGxvYWRlci5fc3RhcnRfdXBsb2FklGpWMQEATS0CTTwCh5SMDlMzVXBsb2FkZXIucHV0lGpWMQEATT4CTUsCh5SMF1MzVXBsb2FkZXIuX3dyaXRlX3RvX3MzlGpWMQEATU0CTV0Ch5SMEVMzVXBsb2FkZXIuZmluaXNolGpWMQEATV8CTWgCh5SMClMzVXBsb2FkZXKUal0xAQBNGQJNaAKHlHV9lCiMDXBhcnNlX3MzX3BhdGiUakwDAACMBFMzSU+UakwDAACMCVMzSU8ub3BlbpRqTAMAAIwQUzNJTy5saXN0X3ByZWZpeJRqTAMAAIwNUzNJTy5jaGVja3N1bZRqTAMAAIwJUzNJTy5jb3B5lGpMAwAAjA9TM0lPLmNvcHlfcGF0aHOUakwDAACMDlMzSU8uY29weV90cmVllGpMAwAAjAtTM0lPLmRlbGV0ZZRqTAMAAIwRUzNJTy5kZWxldGVfcGF0aHOUakwDAACMEVMzSU8uZGVsZXRlX2ZpbGVzlGpMAwAAjBBTM0lPLmRlbGV0ZV90cmVllGpMAwAAjAlTM0lPLnNpemWUakwDAACMC1MzSU8ucmVuYW1llGpMAwAAjBFTM0lPLmxhc3RfdXBkYXRlZJRqTAMAAIwLUzNJTy5leGlzdHOUakwDAACMEVMzSU8ucmVuYW1lX2ZpbGVzlGpMAwAAjAxTM0Rvd25sb2FkZXKUakwDAACMFlMzRG93bmxvYWRlci5nZXRfcmFuZ2WUakwDAACMClMzVXBsb2FkZXKUakwDAACMDlMzVXBsb2FkZXIucHV0lGpMAwAAjBFTM1VwbG9hZGVyLmZpbmlzaJRqTAMAAHWMF2FwYWNoZV9iZWFtLmlvLmF3cy5zM2lvlHSUjBxhcGFjaGVfYmVhbS5pby5jb25jYXRfc291cmNllChY8CgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKQ29uY2F0IFNvdXJjZSwgd2hpY2ggcmVhZHMgdGhlIHVuaW9uIG9mIHNldmVyYWwgb3RoZXIgc291cmNlcy4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBiaXNlY3QKaW1wb3J0IHRocmVhZGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQoKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCgoKY2xhc3MgQ29uY2F0U291cmNlKGlvYmFzZS5Cb3VuZGVkU291cmNlKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgYGBCb3VuZGVkU291cmNlYGAgdGhhdCBjYW4gZ3JvdXAgYSBzZXQgb2YgYGBCb3VuZGVkU291cmNlc2BgLgoKICBQcmltYXJpbHkgZm9yIGludGVybmFsIHVzZSwgdXNlIHRoZSBgYGFwYWNoZV9iZWFtLkZsYXR0ZW5gYCB0cmFuc2Zvcm0KICB0byBjcmVhdGUgdGhlIHVuaW9uIG9mIHNldmVyYWwgcmVhZHMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZXMpOgogICAgc2VsZi5fc291cmNlX2J1bmRsZXMgPSBbCiAgICAgICAgc291cmNlIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBpb2Jhc2UuU291cmNlQnVuZGxlKSBlbHNlCiAgICAgICAgaW9iYXNlLlNvdXJjZUJ1bmRsZShOb25lLCBzb3VyY2UsIE5vbmUsIE5vbmUpIGZvciBzb3VyY2UgaW4gc291cmNlcwogICAgXQoKICBAcHJvcGVydHkKICBkZWYgc291cmNlcyhzZWxmKToKICAgIHJldHVybiBbcy5zb3VyY2UgZm9yIHMgaW4gc2VsZi5fc291cmNlX2J1bmRsZXNdCgogIGRlZiBlc3RpbWF0ZV9zaXplKHNlbGYpOgogICAgcmV0dXJuIHN1bShzLnNvdXJjZS5lc3RpbWF0ZV9zaXplKCkgZm9yIHMgaW4gc2VsZi5fc291cmNlX2J1bmRsZXMpCgogIGRlZiBzcGxpdCgKICAgICAgc2VsZiwgZGVzaXJlZF9idW5kbGVfc2l6ZT1Ob25lLCBzdGFydF9wb3NpdGlvbj1Ob25lLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICAgaWYgc3RhcnRfcG9zaXRpb24gb3Igc3RvcF9wb3NpdGlvbjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdNdWx0aS1sZXZlbCBpbml0aWFsIHNwbGl0dGluZyBpcyBub3Qgc3VwcG9ydGVkLiBFeHBlY3RlZCBzdGFydCBhbmQgJwogICAgICAgICAgJ3N0b3AgcG9zaXRpb25zIHRvIGJlIE5vbmUuIFJlY2VpdmVkICVyIGFuZCAlciByZXNwZWN0aXZlbHkuJyAlCiAgICAgICAgICAoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pKQoKICAgIGZvciBzb3VyY2UgaW4gc2VsZi5fc291cmNlX2J1bmRsZXM6CiAgICAgICMgV2UgYXNzdW1lIGFsbCBzdWItc291cmNlcyB0byBwcm9kdWNlIGJ1bmRsZXMgdGhhdCBzcGVjaWZ5IHdlaWdodCB1c2luZwogICAgICAjIHRoZSBzYW1lIHVuaXQuIEZvciBleGFtcGxlLCBhbGwgc3ViLXNvdXJjZXMgbWF5IHNwZWNpZnkgdGhlIHNpemUgaW4KICAgICAgIyBieXRlcyBhcyB0aGVpciB3ZWlnaHQuCiAgICAgIGZvciBidW5kbGUgaW4gc291cmNlLnNvdXJjZS5zcGxpdChkZXNpcmVkX2J1bmRsZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnN0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnN0b3BfcG9zaXRpb24pOgogICAgICAgIHlpZWxkIGJ1bmRsZQoKICBkZWYgZ2V0X3JhbmdlX3RyYWNrZXIoc2VsZiwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lKToKICAgIGlmIHN0YXJ0X3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0YXJ0X3Bvc2l0aW9uID0gKDAsIE5vbmUpCiAgICBpZiBzdG9wX3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0b3BfcG9zaXRpb24gPSAobGVuKHNlbGYuX3NvdXJjZV9idW5kbGVzKSwgTm9uZSkKICAgIHJldHVybiBDb25jYXRSYW5nZVRyYWNrZXIoCiAgICAgICAgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24sIHNlbGYuX3NvdXJjZV9idW5kbGVzKQoKICBkZWYgcmVhZChzZWxmLCByYW5nZV90cmFja2VyKToKICAgIHN0YXJ0X3NvdXJjZSwgXyA9IHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKQogICAgc3RvcF9zb3VyY2UsIHN0b3BfcG9zID0gcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkKICAgIGlmIHN0b3BfcG9zIGlzIG5vdCBOb25lOgogICAgICBzdG9wX3NvdXJjZSArPSAxCiAgICBmb3Igc291cmNlX2l4IGluIHJhbmdlKHN0YXJ0X3NvdXJjZSwgc3RvcF9zb3VyY2UpOgogICAgICBpZiBub3QgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0oKHNvdXJjZV9peCwgTm9uZSkpOgogICAgICAgIGJyZWFrCiAgICAgIGZvciByZWNvcmQgaW4gc2VsZi5fc291cmNlX2J1bmRsZXNbc291cmNlX2l4XS5zb3VyY2UucmVhZCgKICAgICAgICAgIHJhbmdlX3RyYWNrZXIuc3ViX3JhbmdlX3RyYWNrZXIoc291cmNlX2l4KSk6CiAgICAgICAgeWllbGQgcmVjb3JkCgogIGRlZiBkZWZhdWx0X291dHB1dF9jb2RlcihzZWxmKToKICAgIGlmIHNlbGYuX3NvdXJjZV9idW5kbGVzOgogICAgICAjIEdldHRpbmcgY29kZXIgZnJvbSB0aGUgZmlyc3Qgc3ViLXNvdXJjZXMuIFRoaXMgYXNzdW1lcyBhbGwgc3ViLXNvdXJjZXMKICAgICAgIyB0byBwcm9kdWNlIHRoZSBzYW1lIGNvZGVyLgogICAgICByZXR1cm4gc2VsZi5fc291cmNlX2J1bmRsZXNbMF0uc291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkKICAgIGVsc2U6CiAgICAgIHJldHVybiBzdXBlcihDb25jYXRTb3VyY2UsIHNlbGYpLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkKCgpjbGFzcyBDb25jYXRSYW5nZVRyYWNrZXIoaW9iYXNlLlJhbmdlVHJhY2tlcik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBSYW5nZSB0cmFja2VyIGZvciBDb25jYXRTb3VyY2UiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnQsIGVuZCwgc291cmNlX2J1bmRsZXMpOgogICAgIiIiSW5pdGlhbGl6ZXMgYGBDb25jYXRSYW5nZVRyYWNrZXJgYAoKICAgIEFyZ3M6CiAgICAgIHN0YXJ0OiBzdGFydCBwb3NpdGlvbiwgYSB0dXBsZSBvZiAoc291cmNlX2luZGV4LCBzb3VyY2VfcG9zaXRpb24pCiAgICAgIGVuZDogZW5kIHBvc2l0aW9uLCBhIHR1cGxlIG9mIChzb3VyY2VfaW5kZXgsIHNvdXJjZV9wb3NpdGlvbikKICAgICAgc291cmNlX2J1bmRsZXM6IHRoZSBsaXN0IG9mIHNvdXJjZSBidW5kbGVzIGluIHRoZSBDb25jYXRTb3VyY2UKICAgICIiIgogICAgc3VwZXIoQ29uY2F0UmFuZ2VUcmFja2VyLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLl9zdGFydCA9IHN0YXJ0CiAgICBzZWxmLl9lbmQgPSBlbmQKICAgIHNlbGYuX3NvdXJjZV9idW5kbGVzID0gc291cmNlX2J1bmRsZXMKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuUkxvY2soKQogICAgIyBMYXppbHktaW5pdGlhbGl6ZWQgbGlzdCBvZiBSYW5nZVRyYWNrZXJzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBzb3VyY2UuCiAgICBzZWxmLl9yYW5nZV90cmFja2VycyA9IFtOb25lXSAqIGxlbihzb3VyY2VfYnVuZGxlcykKICAgICMgVGhlIGN1cnJlbnRseS1iZWluZy1pdGVyYXRlZC1vdmVyIChhbmQgbGF0ZXN0IGNsYWltZWQpIHNvdXJjZS4KICAgIHNlbGYuX2NsYWltZWRfc291cmNlX2l4ID0gc2VsZi5fc3RhcnRbMF0KICAgICMgTm93IGNvbXB1dGUgY3VtdWxhdGl2ZSBwcm9ncmVzcyB0aHJvdWdoIHRoZSBzb3VyY2VzIGZvciBjb252ZXJ0aW5nCiAgICAjIGJldHdlZW4gZ2xvYmFsIGZyYWN0aW9ucyBhbmQgZnJhY3Rpb25zIHdpdGhpbiBzcGVjaWZpYyBzb3VyY2VzLgogICAgIyBUT0RPKHJvYmVydHdiKTogSW1wbGVtZW50IGZyYWN0aW9uLWF0LXBvc2l0aW9uIHRvIHByb3Blcmx5IHNjYWxlCiAgICAjIHBhcnRpYWwgc3RhcnQgYW5kIGVuZCBzb3VyY2VzLgogICAgIyBOb3RlLCBob3dldmVyLCB0aGF0IGluIHByYWN0aWNlIHNwbGl0cyBhcmUgdHlwaWNhbGx5IG9uIHNvdXJjZQogICAgIyBib3VuZGFyaWVzIGFueXdheXMuCiAgICBsYXN0ID0gZW5kWzBdIGlmIGVuZFsxXSBpcyBOb25lIGVsc2UgZW5kWzBdICsgMQogICAgc2VsZi5fY3VtdWxhdGl2ZV93ZWlnaHRzID0gKAogICAgICAgIFswXSAqIHN0YXJ0WzBdICsKICAgICAgICBzZWxmLl9jb21wdXRlX2N1bXVsYXRpdmVfd2VpZ2h0cyhzb3VyY2VfYnVuZGxlc1tzdGFydFswXTpsYXN0XSkgKyBbMV0gKgogICAgICAgIChsZW4oc291cmNlX2J1bmRsZXMpIC0gbGFzdCAtIHN0YXJ0WzBdKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfY29tcHV0ZV9jdW11bGF0aXZlX3dlaWdodHMoc291cmNlX2J1bmRsZXMpOgogICAgIyBUd28gYWRqYWNlbnQgc291cmNlcyBtdXN0IGRpZmZlciBzbyB0aGF0IHRoZXkgY2FuIGJlIHVuaXF1ZWx5CiAgICAjIGlkZW50aWZpZWQgYnkgYSBzaW5nbGUgZ2xvYmFsIGZyYWN0aW9uLiAgTGV0IG1pbl9kaWZmIGJlIHRoZQogICAgIyBzbWFsbGVzdCBhbGxvd2FibGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNvdXJjZXMuCiAgICBtaW5fZGlmZiA9IDFlLTUKICAgICMgRm9yIHRoZSBjb21wdXRhdGlvbiBiZWxvdywgd2UgbmVlZCB3ZWlnaHRzIGZvciBhbGwgc291cmNlcy4KICAgICMgU3Vic3RpdHV0ZSBhdmVyYWdlIHdlaWdodHMgZm9yIHRob3NlIHdob3NlIHdlaWdodHMgYXJlCiAgICAjIHVuc3BlY2lmaWVkIChvciAxLjAgZm9yIGV2ZXJ5dGhpbmcgaWYgbm9uZSBhcmUga25vd24pLgogICAga25vd24gPSBbcy53ZWlnaHQgZm9yIHMgaW4gc291cmNlX2J1bmRsZXMgaWYgcy53ZWlnaHQgaXMgbm90IE5vbmVdCiAgICBhdmcgPSBzdW0oa25vd24pIC8gbGVuKGtub3duKSBpZiBrbm93biBlbHNlIDEuMAogICAgd2VpZ2h0cyA9IFtzLndlaWdodCBvciBhdmcgZm9yIHMgaW4gc291cmNlX2J1bmRsZXNdCgogICAgIyBOb3cgY29tcHV0ZSBydW5uaW5nIHRvdGFscyBvZiB0aGUgcGVyY2VudCBkb25lIHVwb24gcmVhY2hpbmcKICAgICMgZWFjaCBzb3VyY2UsIHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMuCiAgICAjIEUuZy4gaWYgdGhlIHdlaWdodHMgd2VyZSBbMTAwLCAyMCwgM10gd2Ugd291bGQgcHJvZHVjZQogICAgIyBbMC4wLCAxMDAvMTIzLCAxMjAvMTIzLCAxLjBdCiAgICB0b3RhbCA9IGZsb2F0KHN1bSh3ZWlnaHRzKSkKICAgIHJ1bm5pbmdfdG90YWwgPSBbMF0KICAgIGZvciB3IGluIHdlaWdodHM6CiAgICAgIHJ1bm5pbmdfdG90YWwuYXBwZW5kKG1heChtaW5fZGlmZiwgbWluKDEsIHJ1bm5pbmdfdG90YWxbLTFdICsgdyAvIHRvdGFsKSkpCiAgICBydW5uaW5nX3RvdGFsWy0xXSA9IDEgICMgSW4gY2FzZSBvZiByb3VuZGluZyBlcnJvci4KICAgICMgVGhlcmUgYXJlIGlzc3VlcyBpZiwgZHVlIHRvIHJvdWRpbmcgZXJyb3Igb3IgZ3JlYXRseSBkaWZmZXJpbmcgc2l6ZXMsCiAgICAjIHR3byBhZGphY2VudCBydW5uaW5nIHRvdGFsIHdlaWdodHMgYXJlIGVxdWFsLiBOb3JtYWxpemUgdGhpcyB0aGluZ3Mgc28KICAgICMgdGhhdCB0aGlzIG5ldmVyIGhhcHBlbnMuCiAgICBmb3IgayBpbiByYW5nZSgxLCBsZW4ocnVubmluZ190b3RhbCkpOgogICAgICBpZiBydW5uaW5nX3RvdGFsW2tdID09IHJ1bm5pbmdfdG90YWxbayAtIDFdOgogICAgICAgIGZvciBqIGluIHJhbmdlKGspOgogICAgICAgICAgcnVubmluZ190b3RhbFtqXSAqPSAoMSAtIG1pbl9kaWZmKQogICAgcmV0dXJuIHJ1bm5pbmdfdG90YWwKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3N0YXJ0CgogIGRlZiBzdG9wX3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2VuZAoKICBkZWYgdHJ5X2NsYWltKHNlbGYsIHBvcyk6CiAgICBzb3VyY2VfaXgsIHNvdXJjZV9wb3MgPSBwb3MKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc291cmNlX2l4ID4gc2VsZi5fZW5kWzBdOgogICAgICAgIHJldHVybiBGYWxzZQogICAgICBlbGlmIHNvdXJjZV9peCA9PSBzZWxmLl9lbmRbMF0gYW5kIHNlbGYuX2VuZFsxXSBpcyBOb25lOgogICAgICAgIHJldHVybiBGYWxzZQogICAgICBlbHNlOgogICAgICAgIGFzc2VydCBzb3VyY2VfaXggPj0gc2VsZi5fY2xhaW1lZF9zb3VyY2VfaXgKICAgICAgICBzZWxmLl9jbGFpbWVkX3NvdXJjZV9peCA9IHNvdXJjZV9peAogICAgICAgIGlmIHNvdXJjZV9wb3MgaXMgTm9uZToKICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgIHJldHVybiBzZWxmLnN1Yl9yYW5nZV90cmFja2VyKHNvdXJjZV9peCkudHJ5X2NsYWltKHNvdXJjZV9wb3MpCgogIGRlZiB0cnlfc3BsaXQoc2VsZiwgcG9zKToKICAgIHNvdXJjZV9peCwgc291cmNlX3BvcyA9IHBvcwogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzb3VyY2VfaXggPCBzZWxmLl9jbGFpbWVkX3NvdXJjZV9peDoKICAgICAgICAjIEFscmVhZHkgY2xhaW1lZC4KICAgICAgICByZXR1cm4gTm9uZQogICAgICBlbGlmIHNvdXJjZV9peCA+IHNlbGYuX2VuZFswXToKICAgICAgICAjIEFmdGVyIGVuZC4KICAgICAgICByZXR1cm4gTm9uZQogICAgICBlbGlmIHNvdXJjZV9peCA9PSBzZWxmLl9lbmRbMF0gYW5kIHNlbGYuX2VuZFsxXSBpcyBOb25lOgogICAgICAgICMgQXQvYWZ0ZXIgZW5kLgogICAgICAgIHJldHVybiBOb25lCiAgICAgIGVsc2U6CiAgICAgICAgaWYgc291cmNlX2l4ID4gc2VsZi5fY2xhaW1lZF9zb3VyY2VfaXg6CiAgICAgICAgICAjIFByZWZlciB0byBzcGxpdCBvbiBldmVuIGJvdW5kYXJ5LgogICAgICAgICAgc3BsaXRfcG9zID0gTm9uZQogICAgICAgICAgcmF0aW8gPSBzZWxmLl9jdW11bGF0aXZlX3dlaWdodHNbc291cmNlX2l4XQogICAgICAgIGVsc2U6CiAgICAgICAgICAjIFNwbGl0IHRoZSBjdXJyZW50IHN1YnNvdXJjZS4KICAgICAgICAgIHNwbGl0ID0gc2VsZi5zdWJfcmFuZ2VfdHJhY2tlcihzb3VyY2VfaXgpLnRyeV9zcGxpdChzb3VyY2VfcG9zKQogICAgICAgICAgaWYgbm90IHNwbGl0OgogICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgc3BsaXRfcG9zLCBmcmFjID0gc3BsaXQKICAgICAgICAgIHJhdGlvID0gc2VsZi5sb2NhbF90b19nbG9iYWwoc291cmNlX2l4LCBmcmFjKQoKICAgICAgICBzZWxmLl9lbmQgPSBzb3VyY2VfaXgsIHNwbGl0X3BvcwogICAgICAgIHNlbGYuX2N1bXVsYXRpdmVfd2VpZ2h0cyA9IFsKICAgICAgICAgICAgbWluKHcgLyByYXRpbywgMSkgZm9yIHcgaW4gc2VsZi5fY3VtdWxhdGl2ZV93ZWlnaHRzCiAgICAgICAgXQogICAgICAgIHJldHVybiAoc291cmNlX2l4LCBzcGxpdF9wb3MpLCByYXRpbwoKICBkZWYgc2V0X2N1cnJlbnRfcG9zaXRpb24oc2VsZiwgcG9zKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ1Nob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBzdWItdHJhY2tlcnMnKQoKICBkZWYgcG9zaXRpb25fYXRfZnJhY3Rpb24oc2VsZiwgZnJhY3Rpb24pOgogICAgc291cmNlX2l4LCBzb3VyY2VfZnJhYyA9IHNlbGYuZ2xvYmFsX3RvX2xvY2FsKGZyYWN0aW9uKQogICAgbGFzdCA9IHNlbGYuX2VuZFswXSBpZiBzZWxmLl9lbmRbMV0gaXMgTm9uZSBlbHNlIHNlbGYuX2VuZFswXSArIDEKICAgIGlmIHNvdXJjZV9peCA9PSBsYXN0OgogICAgICByZXR1cm4gKHNvdXJjZV9peCwgTm9uZSkKICAgIGVsc2U6CiAgICAgIHJldHVybiAoCiAgICAgICAgICBzb3VyY2VfaXgsCiAgICAgICAgICBzZWxmLnN1Yl9yYW5nZV90cmFja2VyKHNvdXJjZV9peCkucG9zaXRpb25fYXRfZnJhY3Rpb24oc291cmNlX2ZyYWMpKQoKICBkZWYgZnJhY3Rpb25fY29uc3VtZWQoc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLmxvY2FsX3RvX2dsb2JhbCgKICAgICAgICAgIHNlbGYuX2NsYWltZWRfc291cmNlX2l4LAogICAgICAgICAgc2VsZi5zdWJfcmFuZ2VfdHJhY2tlcihzZWxmLl9jbGFpbWVkX3NvdXJjZV9peCkuZnJhY3Rpb25fY29uc3VtZWQoKSkKCiAgZGVmIGxvY2FsX3RvX2dsb2JhbChzZWxmLCBzb3VyY2VfaXgsIHNvdXJjZV9mcmFjKToKICAgIGN3ID0gc2VsZi5fY3VtdWxhdGl2ZV93ZWlnaHRzCiAgICAjIFRoZSBnbG9iYWwgZnJhY3Rpb24gaXMgdGhlIGZyYWN0aW9uIHRvIHNvdXJjZV9peCBwbHVzIHNvbWUgcG9ydGlvbiBvZgogICAgIyB0aGUgd2F5IHRvd2FyZHMgdGhlIG5leHQgc291cmNlLgogICAgcmV0dXJuIGN3W3NvdXJjZV9peF0gKyBzb3VyY2VfZnJhYyAqIChjd1tzb3VyY2VfaXggKyAxXSAtIGN3W3NvdXJjZV9peF0pCgogIGRlZiBnbG9iYWxfdG9fbG9jYWwoc2VsZiwgZnJhYyk6CiAgICBpZiBmcmFjID09IDE6CiAgICAgIGxhc3QgPSBzZWxmLl9lbmRbMF0gaWYgc2VsZi5fZW5kWzFdIGlzIE5vbmUgZWxzZSBzZWxmLl9lbmRbMF0gKyAxCiAgICAgIHJldHVybiAobGFzdCwgTm9uZSkKICAgIGVsc2U6CiAgICAgIGN3ID0gc2VsZi5fY3VtdWxhdGl2ZV93ZWlnaHRzCiAgICAgICMgRmluZCB0aGUgbGFzdCBzb3VyY2UgdGhhdCBzdGFydHMgYXQgb3IgYmVmb3JlIGZyYWMuCiAgICAgIHNvdXJjZV9peCA9IGJpc2VjdC5iaXNlY3QoY3csIGZyYWMpIC0gMQogICAgICAjIFJldHVybiB0aGlzIHNvdXJjZSwgY29udmVydGluZyB3aGF0J3MgbGVmdCBvZiBmcmFjIGFmdGVyIHN0YXJ0aW5nCiAgICAgICMgdGhpcyBzb3VyY2UgaW50byBhIHZhbHVlIGluIFswLjAsIDEuMCkgcmVwcmVzZW50aW5nIGhvdyBmYXIgd2UgYXJlCiAgICAgICMgdG93YXJkcyB0aGUgbmV4dCBzb3VyY2UuCiAgICAgIHJldHVybiAoCiAgICAgICAgICBzb3VyY2VfaXgsCiAgICAgICAgICAoZnJhYyAtIGN3W3NvdXJjZV9peF0pIC8gKGN3W3NvdXJjZV9peCArIDFdIC0gY3dbc291cmNlX2l4XSkpCgogIGRlZiBzdWJfcmFuZ2VfdHJhY2tlcihzZWxmLCBzb3VyY2VfaXgpOgogICAgYXNzZXJ0IHNlbGYuX3N0YXJ0WzBdIDw9IHNvdXJjZV9peCA8PSBzZWxmLl9lbmRbMF0KICAgIGlmIHNlbGYuX3JhbmdlX3RyYWNrZXJzW3NvdXJjZV9peF0gaXMgTm9uZToKICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgIGlmIHNlbGYuX3JhbmdlX3RyYWNrZXJzW3NvdXJjZV9peF0gaXMgTm9uZToKICAgICAgICAgIHNvdXJjZSA9IHNlbGYuX3NvdXJjZV9idW5kbGVzW3NvdXJjZV9peF0KICAgICAgICAgIGlmIHNvdXJjZV9peCA9PSBzZWxmLl9zdGFydFswXSBhbmQgc2VsZi5fc3RhcnRbMV0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5fc3RhcnRbMV0KICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIHN0YXJ0ID0gc291cmNlLnN0YXJ0X3Bvc2l0aW9uCiAgICAgICAgICBpZiBzb3VyY2VfaXggPT0gc2VsZi5fZW5kWzBdIGFuZCBzZWxmLl9lbmRbMV0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgIHN0b3AgPSBzZWxmLl9lbmRbMV0KICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIHN0b3AgPSBzb3VyY2Uuc3RvcF9wb3NpdGlvbgogICAgICAgICAgc2VsZi5fcmFuZ2VfdHJhY2tlcnNbc291cmNlX2l4XSA9IHNvdXJjZS5zb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoCiAgICAgICAgICAgICAgc3RhcnQsIHN0b3ApCiAgICByZXR1cm4gc2VsZi5fcmFuZ2VfdHJhY2tlcnNbc291cmNlX2l4XQqUla02AQAAAAAAfZQojBVDb25jYXRTb3VyY2UuX19pbml0X1+UalYxAQBLKksuh5SMFENvbmNhdFNvdXJjZS5zb3VyY2VzlGpWMQEASzBLMoeUjBpDb25jYXRTb3VyY2UuZXN0aW1hdGVfc2l6ZZRqVjEBAEs0SzWHlIwSQ29uY2F0U291cmNlLnNwbGl0lGpWMQEASzdLRoeUjB5Db25jYXRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXKUalYxAQBLSEtOh5SMEUNvbmNhdFNvdXJjZS5yZWFklGpWMQEAS1BLWoeUjCFDb25jYXRTb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXKUalYxAQBLXEtih5SMDENvbmNhdFNvdXJjZZRqXTEBAEsiS2KHlIwbQ29uY2F0UmFuZ2VUcmFja2VyLl9faW5pdF9flGpWMQEAS2lLhIeUjC5Db25jYXRSYW5nZVRyYWNrZXIuX2NvbXB1dGVfY3VtdWxhdGl2ZV93ZWlnaHRzlGpWMQEAS4ZLo4eUjCFDb25jYXRSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb26UalYxAQBLpUumh5SMIENvbmNhdFJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9ulGpWMQEAS6hLqYeUjBxDb25jYXRSYW5nZVRyYWNrZXIudHJ5X2NsYWltlGpWMQEAS6tLuIeUjBxDb25jYXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0lGpWMQEAS7pL14eUjCdDb25jYXRSYW5nZVRyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb26UalYxAQBL2Uvah5SMJ0NvbmNhdFJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbpRqVjEBAEvcS+SHlIwkQ29uY2F0UmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVklGpWMQEAS+ZL6oeUjCJDb25jYXRSYW5nZVRyYWNrZXIubG9jYWxfdG9fZ2xvYmFslGpWMQEAS+xL8IeUjCJDb25jYXRSYW5nZVRyYWNrZXIuZ2xvYmFsX3RvX2xvY2FslGpWMQEAS/JL/4eUjCRDb25jYXRSYW5nZVRyYWNrZXIuc3ViX3JhbmdlX3RyYWNrZXKUalYxAQBNAQFNEQGHlIwSQ29uY2F0UmFuZ2VUcmFja2VylGpdMQEAS2VNEQGHlHV9lCiMDENvbmNhdFNvdXJjZZRquQMAAIwaQ29uY2F0U291cmNlLmVzdGltYXRlX3NpemWUarkDAACMEkNvbmNhdFNvdXJjZS5zcGxpdJRquQMAAIweQ29uY2F0U291cmNlLmdldF9yYW5nZV90cmFja2VylGq5AwAAjBFDb25jYXRTb3VyY2UucmVhZJRquQMAAIwhQ29uY2F0U291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVylGq5AwAAjBJDb25jYXRSYW5nZVRyYWNrZXKUarkDAACMIUNvbmNhdFJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbpRquQMAAIwgQ29uY2F0UmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb26UarkDAACMHENvbmNhdFJhbmdlVHJhY2tlci50cnlfY2xhaW2UarkDAACMHENvbmNhdFJhbmdlVHJhY2tlci50cnlfc3BsaXSUarkDAACMJ0NvbmNhdFJhbmdlVHJhY2tlci5zZXRfY3VycmVudF9wb3NpdGlvbpRquQMAAIwnQ29uY2F0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9ulGq5AwAAjCRDb25jYXRSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWSUarkDAACMIkNvbmNhdFJhbmdlVHJhY2tlci5sb2NhbF90b19nbG9iYWyUarkDAACMIkNvbmNhdFJhbmdlVHJhY2tlci5nbG9iYWxfdG9fbG9jYWyUarkDAACMJENvbmNhdFJhbmdlVHJhY2tlci5zdWJfcmFuZ2VfdHJhY2tlcpRquQMAAHWMHGFwYWNoZV9iZWFtLmlvLmNvbmNhdF9zb3VyY2WUdJSMImFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmdjcC5wdWJzdWKUKFhrGQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHR5cGluZwoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcCBpbXBvcnQgcHVic3ViCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgTWFwCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbCBpbXBvcnQgRXh0ZXJuYWxUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsIGltcG9ydCBOYW1lZFR1cGxlQmFzZWRQYXlsb2FkQnVpbGRlcgoKUmVhZEZyb21QdWJzdWJTY2hlbWEgPSB0eXBpbmcuTmFtZWRUdXBsZSgKICAgICdSZWFkRnJvbVB1YnN1YlNjaGVtYScsCiAgICBbCiAgICAgICAgKCd0b3BpYycsIHR5cGluZy5PcHRpb25hbFt1bmljb2RlXSksCiAgICAgICAgKCdzdWJzY3JpcHRpb24nLCB0eXBpbmcuT3B0aW9uYWxbdW5pY29kZV0pLAogICAgICAgICgnaWRfbGFiZWwnLCB0eXBpbmcuT3B0aW9uYWxbdW5pY29kZV0pLAogICAgICAgICgnd2l0aF9hdHRyaWJ1dGVzJywgYm9vbCksCiAgICAgICAgKCd0aW1lc3RhbXBfYXR0cmlidXRlJywgdHlwaW5nLk9wdGlvbmFsW3VuaWNvZGVdKSwKICAgIF0pCgoKY2xhc3MgUmVhZEZyb21QdWJTdWIoYmVhbS5QVHJhbnNmb3JtKToKICAiIiJBbiBleHRlcm5hbCBgYFBUcmFuc2Zvcm1gYCBmb3IgcmVhZGluZyBmcm9tIENsb3VkIFB1Yi9TdWIuCgogIEV4cGVyaW1lbnRhbDsgbm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4gIEl0IHJlcXVpcmVzIHNwZWNpYWwKICBwcmVwYXJhdGlvbiBvZiB0aGUgSmF2YSBTREsuICBTZWUgQkVBTS03ODcwLgogICIiIgoKICBVUk4gPSAnYmVhbTpleHRlcm5hbDpqYXZhOnB1YnN1YjpyZWFkOnYxJwoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIHRvcGljPU5vbmUsCiAgICAgIHN1YnNjcmlwdGlvbj1Ob25lLAogICAgICBpZF9sYWJlbD1Ob25lLAogICAgICB3aXRoX2F0dHJpYnV0ZXM9RmFsc2UsCiAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU9Tm9uZSwKICAgICAgZXhwYW5zaW9uX3NlcnZpY2U9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplcyBgYFJlYWRGcm9tUHViU3ViYGAuCgogICAgQXJnczoKICAgICAgdG9waWM6IENsb3VkIFB1Yi9TdWIgdG9waWMgaW4gdGhlIGZvcm0KICAgICAgICAicHJvamVjdHMvPHByb2plY3Q+L3RvcGljcy88dG9waWM+Ii4gSWYgcHJvdmlkZWQsIHN1YnNjcmlwdGlvbiBtdXN0IGJlCiAgICAgICAgTm9uZS4KICAgICAgc3Vic2NyaXB0aW9uOiBFeGlzdGluZyBDbG91ZCBQdWIvU3ViIHN1YnNjcmlwdGlvbiB0byB1c2UgaW4gdGhlCiAgICAgICAgZm9ybSAicHJvamVjdHMvPHByb2plY3Q+L3N1YnNjcmlwdGlvbnMvPHN1YnNjcmlwdGlvbj4iLiBJZiBub3QKICAgICAgICBzcGVjaWZpZWQsIGEgdGVtcG9yYXJ5IHN1YnNjcmlwdGlvbiB3aWxsIGJlIGNyZWF0ZWQgZnJvbSB0aGUgc3BlY2lmaWVkCiAgICAgICAgdG9waWMuIElmIHByb3ZpZGVkLCB0b3BpYyBtdXN0IGJlIE5vbmUuCiAgICAgIGlkX2xhYmVsOiBUaGUgYXR0cmlidXRlIG9uIGluY29taW5nIFB1Yi9TdWIgbWVzc2FnZXMgdG8gdXNlIGFzIGEgdW5pcXVlCiAgICAgICAgcmVjb3JkIGlkZW50aWZpZXIuIFdoZW4gc3BlY2lmaWVkLCB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgKHdoaWNoCiAgICAgICAgY2FuIGJlIGFueSBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZWNvcmQpIHdpbGwgYmUgdXNlZCBmb3IKICAgICAgICBkZWR1cGxpY2F0aW9uIG9mIG1lc3NhZ2VzLiBJZiBub3QgcHJvdmlkZWQsIHdlIGNhbm5vdCBndWFyYW50ZWUKICAgICAgICB0aGF0IG5vIGR1cGxpY2F0ZSBkYXRhIHdpbGwgYmUgZGVsaXZlcmVkIG9uIHRoZSBQdWIvU3ViIHN0cmVhbS4gSW4gdGhpcwogICAgICAgIGNhc2UsIGRlZHVwbGljYXRpb24gb2YgdGhlIHN0cmVhbSB3aWxsIGJlIHN0cmljdGx5IGJlc3QgZWZmb3J0LgogICAgICB3aXRoX2F0dHJpYnV0ZXM6CiAgICAgICAgVHJ1ZSAtIG91dHB1dCBlbGVtZW50cyB3aWxsIGJlCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5QdWJzdWJNZXNzYWdlYCBvYmplY3RzLgogICAgICAgIEZhbHNlIC0gb3V0cHV0IGVsZW1lbnRzIHdpbGwgYmUgb2YgdHlwZSBgYGJ5dGVzYGAgKG1lc3NhZ2UKICAgICAgICBkYXRhIG9ubHkpLgogICAgICB0aW1lc3RhbXBfYXR0cmlidXRlOiBNZXNzYWdlIHZhbHVlIHRvIHVzZSBhcyBlbGVtZW50IHRpbWVzdGFtcC4gSWYgTm9uZSwKICAgICAgICB1c2VzIG1lc3NhZ2UgcHVibGlzaGluZyB0aW1lIGFzIHRoZSB0aW1lc3RhbXAuCgogICAgICAgIFRpbWVzdGFtcCB2YWx1ZXMgc2hvdWxkIGJlIGluIG9uZSBvZiB0d28gZm9ybWF0czoKCiAgICAgICAgLSBBIG51bWVyaWNhbCB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlCiAgICAgICAgICBVbml4IGVwb2NoLgogICAgICAgIC0gQSBzdHJpbmcgaW4gUkZDIDMzMzkgZm9ybWF0LCBVVEMgdGltZXpvbmUuIEV4YW1wbGU6CiAgICAgICAgICBgYDIwMTUtMTAtMjlUMjM6NDE6NDEuMTIzWmBgLiBUaGUgc3ViLXNlY29uZCBjb21wb25lbnQgb2YgdGhlCiAgICAgICAgICB0aW1lc3RhbXAgaXMgb3B0aW9uYWwsIGFuZCBkaWdpdHMgYmV5b25kIHRoZSBmaXJzdCB0aHJlZSAoaS5lLiwgdGltZQogICAgICAgICAgdW5pdHMgc21hbGxlciB0aGFuIG1pbGxpc2Vjb25kcykgbWF5IGJlIGlnbm9yZWQuCiAgICAiIiIKICAgIHNlbGYucGFyYW1zID0gUmVhZEZyb21QdWJzdWJTY2hlbWEoCiAgICAgICAgdG9waWM9dG9waWMsCiAgICAgICAgc3Vic2NyaXB0aW9uPXN1YnNjcmlwdGlvbiwKICAgICAgICBpZF9sYWJlbD1pZF9sYWJlbCwKICAgICAgICB3aXRoX2F0dHJpYnV0ZXM9d2l0aF9hdHRyaWJ1dGVzLAogICAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU9dGltZXN0YW1wX2F0dHJpYnV0ZSkKICAgIHNlbGYuZXhwYW5zaW9uX3NlcnZpY2UgPSBleHBhbnNpb25fc2VydmljZQoKICBkZWYgZXhwYW5kKHNlbGYsIHBiZWdpbik6CiAgICBwY29sbCA9IHBiZWdpbi5hcHBseSgKICAgICAgICBFeHRlcm5hbFRyYW5zZm9ybSgKICAgICAgICAgICAgc2VsZi5VUk4sCiAgICAgICAgICAgIE5hbWVkVHVwbGVCYXNlZFBheWxvYWRCdWlsZGVyKHNlbGYucGFyYW1zKSwKICAgICAgICAgICAgc2VsZi5leHBhbnNpb25fc2VydmljZSkpCgogICAgaWYgc2VsZi5wYXJhbXMud2l0aF9hdHRyaWJ1dGVzOgogICAgICBwY29sbCA9IHBjb2xsIHwgJ0Zyb21Qcm90bycgPj4gTWFwKHB1YnN1Yi5QdWJzdWJNZXNzYWdlLl9mcm9tX3Byb3RvX3N0cikKICAgICAgcGNvbGwuZWxlbWVudF90eXBlID0gcHVic3ViLlB1YnN1Yk1lc3NhZ2UKICAgIGVsc2U6CiAgICAgIHBjb2xsLmVsZW1lbnRfdHlwZSA9IGJ5dGVzCiAgICByZXR1cm4gcGNvbGwKCgpXcml0ZVRvUHVic3ViU2NoZW1hID0gdHlwaW5nLk5hbWVkVHVwbGUoCiAgICAnV3JpdGVUb1B1YnN1YlNjaGVtYScsCiAgICBbCiAgICAgICAgKCd0b3BpYycsIHVuaWNvZGUpLAogICAgICAgICgnaWRfbGFiZWwnLCB0eXBpbmcuT3B0aW9uYWxbdW5pY29kZV0pLAogICAgICAgICMgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0IG9uIHRoZSBKYXZhIHNpZGU6CiAgICAgICAgIyAoJ3dpdGhfYXR0cmlidXRlcycsIGJvb2wpLAogICAgICAgICgndGltZXN0YW1wX2F0dHJpYnV0ZScsIHR5cGluZy5PcHRpb25hbFt1bmljb2RlXSksCiAgICBdKQoKCmNsYXNzIFdyaXRlVG9QdWJTdWIoYmVhbS5QVHJhbnNmb3JtKToKICAiIiJBbiBleHRlcm5hbCBgYFBUcmFuc2Zvcm1gYCBmb3Igd3JpdGluZyBtZXNzYWdlcyB0byBDbG91ZCBQdWIvU3ViLgoKICBFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuICBJdCByZXF1aXJlcyBzcGVjaWFsCiAgcHJlcGFyYXRpb24gb2YgdGhlIEphdmEgU0RLLiAgU2VlIEJFQU0tNzg3MC4KICAiIiIKCiAgVVJOID0gJ2JlYW06ZXh0ZXJuYWw6amF2YTpwdWJzdWI6d3JpdGU6djEnCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgdG9waWMsCiAgICAgIHdpdGhfYXR0cmlidXRlcz1GYWxzZSwKICAgICAgaWRfbGFiZWw9Tm9uZSwKICAgICAgdGltZXN0YW1wX2F0dHJpYnV0ZT1Ob25lLAogICAgICBleHBhbnNpb25fc2VydmljZT1Ob25lKToKICAgICIiIkluaXRpYWxpemVzIGBgV3JpdGVUb1B1YlN1YmBgLgoKICAgIEFyZ3M6CiAgICAgIHRvcGljOiBDbG91ZCBQdWIvU3ViIHRvcGljIGluIHRoZSBmb3JtICIvdG9waWNzLzxwcm9qZWN0Pi88dG9waWM+Ii4KICAgICAgd2l0aF9hdHRyaWJ1dGVzOgogICAgICAgIFRydWUgLSBpbnB1dCBlbGVtZW50cyB3aWxsIGJlCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yi5QdWJzdWJNZXNzYWdlYCBvYmplY3RzLgogICAgICAgIEZhbHNlIC0gaW5wdXQgZWxlbWVudHMgd2lsbCBiZSBvZiB0eXBlIGBgYnl0ZXNgYCAobWVzc2FnZQogICAgICAgIGRhdGEgb25seSkuCiAgICAgIGlkX2xhYmVsOiBJZiBzZXQsIHdpbGwgc2V0IGFuIGF0dHJpYnV0ZSBmb3IgZWFjaCBDbG91ZCBQdWIvU3ViIG1lc3NhZ2UKICAgICAgICB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBhIHVuaXF1ZSB2YWx1ZS4gVGhpcyBhdHRyaWJ1dGUgY2FuIHRoZW4gYmUgdXNlZAogICAgICAgIGluIGEgUmVhZEZyb21QdWJTdWIgUFRyYW5zZm9ybSB0byBkZWR1cGxpY2F0ZSBtZXNzYWdlcy4KICAgICAgdGltZXN0YW1wX2F0dHJpYnV0ZTogSWYgc2V0LCB3aWxsIHNldCBhbiBhdHRyaWJ1dGUgZm9yIGVhY2ggQ2xvdWQgUHViL1N1YgogICAgICAgIG1lc3NhZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgdGhlIG1lc3NhZ2UncyBwdWJsaXNoIHRpbWUgYXMgdGhlIHZhbHVlLgogICAgIiIiCiAgICBzZWxmLnBhcmFtcyA9IFdyaXRlVG9QdWJzdWJTY2hlbWEoCiAgICAgICAgdG9waWM9dG9waWMsCiAgICAgICAgaWRfbGFiZWw9aWRfbGFiZWwsCiAgICAgICAgIyB3aXRoX2F0dHJpYnV0ZXM9d2l0aF9hdHRyaWJ1dGVzLAogICAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU9dGltZXN0YW1wX2F0dHJpYnV0ZSkKICAgIHNlbGYuZXhwYW5zaW9uX3NlcnZpY2UgPSBleHBhbnNpb25fc2VydmljZQogICAgc2VsZi53aXRoX2F0dHJpYnV0ZXMgPSB3aXRoX2F0dHJpYnV0ZXMKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgaWYgc2VsZi53aXRoX2F0dHJpYnV0ZXM6CiAgICAgIHBjb2xsID0gcHZhbHVlIHwgJ1RvUHJvdG8nID4+IE1hcChwdWJzdWIuV3JpdGVUb1B1YlN1Yi50b19wcm90b19zdHIpCiAgICBlbHNlOgogICAgICBwY29sbCA9IHB2YWx1ZSB8ICdUb1Byb3RvJyA+PiBNYXAoCiAgICAgICAgICBsYW1iZGEgeDogcHVic3ViLlB1YnN1Yk1lc3NhZ2UoeCwge30pLl90b19wcm90b19zdHIoKSkKICAgIHBjb2xsLmVsZW1lbnRfdHlwZSA9IGJ5dGVzCgogICAgcmV0dXJuIHBjb2xsLmFwcGx5KAogICAgICAgIEV4dGVybmFsVHJhbnNmb3JtKAogICAgICAgICAgICBzZWxmLlVSTiwKICAgICAgICAgICAgTmFtZWRUdXBsZUJhc2VkUGF5bG9hZEJ1aWxkZXIoc2VsZi5wYXJhbXMpLAogICAgICAgICAgICBzZWxmLmV4cGFuc2lvbl9zZXJ2aWNlKSkKlH2UKIwXUmVhZEZyb21QdWJTdWIuX19pbml0X1+UalYxAQBLNEtjh5SMFVJlYWRGcm9tUHViU3ViLmV4cGFuZJRqVjEBAEtlS3GHlIwOUmVhZEZyb21QdWJTdWKUal0xAQBLK0txh5SMFldyaXRlVG9QdWJTdWIuX19pbml0X1+UalYxAQBLiEukh5SMFFdyaXRlVG9QdWJTdWIuZXhwYW5klGpWMQEAS6ZLsoeUjA1Xcml0ZVRvUHViU3VilGpdMQEAS39LsoeUdX2UKIwOUmVhZEZyb21QdWJTdWKUahQEAACMFVJlYWRGcm9tUHViU3ViLmV4cGFuZJRqFAQAAIwNV3JpdGVUb1B1YlN1YpRqFAQAAIwUV3JpdGVUb1B1YlN1Yi5leHBhbmSUahQEAAB1jCJhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nY3AucHVic3VilHSUjClhcGFjaGVfYmVhbS5pby5leHRlcm5hbC5nZW5lcmF0ZV9zZXF1ZW5jZZQoWOEJAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwgaW1wb3J0IEV4dGVybmFsVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbCBpbXBvcnQgSW1wbGljaXRTY2hlbWFQYXlsb2FkQnVpbGRlcgoKCmNsYXNzIEdlbmVyYXRlU2VxdWVuY2UoRXh0ZXJuYWxUcmFuc2Zvcm0pOgogICIiIgogICAgQW4gZXh0ZXJuYWwgUFRyYW5zZm9ybSB3aGljaCBwcm92aWRlcyBhIGJvdW5kZWQgb3IgdW5ib3VuZGVkIHN0cmVhbSBvZgogICAgaW50ZWdlcnMuCgogICAgTm90ZTogVG8gdXNlIHRoaXMgdHJhbnNmb3JtLCB5b3UgbmVlZCB0byBzdGFydCB0aGUgSmF2YSBleHBhbnNpb24gc2VydmljZS4KICAgIFBsZWFzZSByZWZlciB0byB0aGUgcG9ydGFiaWxpdHkgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gZG8gdGhhdC4gVGhlCiAgICBleHBhbnNpb24gc2VydmljZSBhZGRyZXNzIGhhcyB0byBiZSBwcm92aWRlZCB3aGVuIGluc3RhbnRpYXRpbmcgdGhpcwogICAgdHJhbnNmb3JtLiBEdXJpbmcgcGlwZWxpbmUgdHJhbnNsYXRpb24gdGhpcyB0cmFuc2Zvcm0gd2lsbCBiZSByZXBsYWNlZCBieQogICAgdGhlIEphdmEgU0RLJ3MgR2VuZXJhdGVTZXF1ZW5jZS4KCiAgICBJZiB5b3Ugc3RhcnQgRmxpbmsncyBqb2Igc2VydmVyLCB0aGUgZXhwYW5zaW9uIHNlcnZpY2Ugd2lsbCBiZSBzdGFydGVkIG9uCiAgICBwb3J0IDgwOTcuIFRoaXMgaXMgYWxzbyB0aGUgY29uZmlndXJlZCBkZWZhdWx0IGZvciB0aGlzIHRyYW5zZm9ybS4gRm9yIGEKICAgIGRpZmZlcmVudCBhZGRyZXNzLCBwbGVhc2Ugc2V0IHRoZSBleHBhbnNpb25fc2VydmljZSBwYXJhbWV0ZXIuCgogICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOgogICAgLSBodHRwczovL2JlYW0uYXBhY2hlLm9yZy9kb2N1bWVudGF0aW9uL3J1bm5lcnMvZmxpbmsvCiAgICAtIGh0dHBzOi8vYmVhbS5hcGFjaGUub3JnL3JvYWRtYXAvcG9ydGFiaWxpdHkvCgogICAgTm90ZTogUnVubmVycyBuZWVkIHRvIHN1cHBvcnQgdHJhbnNsYXRpbmcgUmVhZCBvcGVyYXRpb25zIGluIG9yZGVyIHRvIHVzZQogICAgdGhpcyBzb3VyY2UuIEF0IHRoZSBtb21lbnQgb25seSB0aGUgRmxpbmsgUnVubmVyIHN1cHBvcnRzIHRoaXMuCgogICAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICIiIgogIFVSTiA9ICdiZWFtOmV4dGVybmFsOmphdmE6Z2VuZXJhdGVfc2VxdWVuY2U6djEnCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgc3RhcnQsCiAgICAgIHN0b3A9Tm9uZSwKICAgICAgZWxlbWVudHNfcGVyX3BlcmlvZD1Ob25lLAogICAgICBtYXhfcmVhZF90aW1lPU5vbmUsCiAgICAgIGV4cGFuc2lvbl9zZXJ2aWNlPU5vbmUpOgogICAgc3VwZXIoR2VuZXJhdGVTZXF1ZW5jZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgc2VsZi5VUk4sCiAgICAgICAgSW1wbGljaXRTY2hlbWFQYXlsb2FkQnVpbGRlcih7CiAgICAgICAgICAgICdzdGFydCc6IHN0YXJ0LAogICAgICAgICAgICAnc3RvcCc6IHN0b3AsCiAgICAgICAgICAgICdlbGVtZW50c19wZXJfcGVyaW9kJzogZWxlbWVudHNfcGVyX3BlcmlvZCwKICAgICAgICAgICAgJ21heF9yZWFkX3RpbWUnOiBtYXhfcmVhZF90aW1lLAogICAgICAgIH0pLAogICAgICAgIGV4cGFuc2lvbl9zZXJ2aWNlKQqUfZQojBlHZW5lcmF0ZVNlcXVlbmNlLl9faW5pdF9flGpWMQEASzRLQ4eUjBBHZW5lcmF0ZVNlcXVlbmNllGpdMQEASxpLQ4eUdX2UjBBHZW5lcmF0ZVNlcXVlbmNllGqiAwAAc4wpYXBhY2hlX2JlYW0uaW8uZXh0ZXJuYWwuZ2VuZXJhdGVfc2VxdWVuY2WUdJSMHWFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthlChYuBsAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiCiAgUFRyYW5zZm9ybXMgZm9yIHN1cHBvcnRpbmcgS2Fma2EgaW4gUHl0aG9uIHBpcGVsaW5lcy4gVGhlc2UgdHJhbnNmb3JtcyBkbyBub3QKICBydW4gYSBLYWZrYSBjbGllbnQgaW4gUHl0aG9uLiBJbnN0ZWFkLCB0aGV5IGV4cGFuZCB0byBFeHRlcm5hbFRyYW5zZm9ybXMKICB3aGljaCB0aGUgRXhwYW5zaW9uIFNlcnZpY2UgcmVzb2x2ZXMgdG8gdGhlIEphdmEgU0RLJ3MgS2Fma2FJTy4gSW4gb3RoZXIKICB3b3JkczogdGhleSBhcmUgY3Jvc3MtbGFuZ3VhZ2UgdHJhbnNmb3Jtcy4KCiAgTm90ZTogVG8gdXNlIHRoZXNlIHRyYW5zZm9ybXMsIHlvdSBuZWVkIHRvIHN0YXJ0IGEgSmF2YSBFeHBhbnNpb24gU2VydmljZS4KICBQbGVhc2UgcmVmZXIgdG8gdGhlIHBvcnRhYmlsaXR5IGRvY3VtZW50YXRpb24gb24gaG93IHRvIGRvIHRoYXQuIEZsaW5rIFVzZXJzCiAgY2FuIHVzZSB0aGUgYnVpbHQtaW4gRXhwYW5zaW9uIFNlcnZpY2Ugb2YgdGhlIEZsaW5rIFJ1bm5lcidzIEpvYiBTZXJ2ZXIuIFRoZQogIGV4cGFuc2lvbiBzZXJ2aWNlIGFkZHJlc3MgaGFzIHRvIGJlIHByb3ZpZGVkIHdoZW4gaW5zdGFudGlhdGluZyB0aGUKICB0cmFuc2Zvcm1zLgoKICBJZiB5b3Ugc3RhcnQgRmxpbmsncyBKb2IgU2VydmVyLCB0aGUgZXhwYW5zaW9uIHNlcnZpY2Ugd2lsbCBiZSBzdGFydGVkIG9uCiAgcG9ydCA4MDk3LiBUaGlzIGlzIGFsc28gdGhlIGNvbmZpZ3VyZWQgZGVmYXVsdCBmb3IgdGhpcyB0cmFuc2Zvcm0uIEZvciBhCiAgZGlmZmVyZW50IGFkZHJlc3MsIHBsZWFzZSBzZXQgdGhlIGV4cGFuc2lvbl9zZXJ2aWNlIHBhcmFtZXRlci4KCiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOgogIC0gaHR0cHM6Ly9iZWFtLmFwYWNoZS5vcmcvZG9jdW1lbnRhdGlvbi9ydW5uZXJzL2ZsaW5rLwogIC0gaHR0cHM6Ly9iZWFtLmFwYWNoZS5vcmcvcm9hZG1hcC9wb3J0YWJpbGl0eS8KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHR5cGluZwoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwgaW1wb3J0IEV4dGVybmFsVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbCBpbXBvcnQgTmFtZWRUdXBsZUJhc2VkUGF5bG9hZEJ1aWxkZXIKClJlYWRGcm9tS2Fma2FTY2hlbWEgPSB0eXBpbmcuTmFtZWRUdXBsZSgKICAgICdSZWFkRnJvbUthZmthU2NoZW1hJywKICAgIFsKICAgICAgICAoJ2NvbnN1bWVyX2NvbmZpZycsIHR5cGluZy5MaXN0W3R5cGluZy5UdXBsZVt1bmljb2RlLCB1bmljb2RlXV0pLAogICAgICAgICgndG9waWNzJywgdHlwaW5nLkxpc3RbdW5pY29kZV0pLAogICAgICAgICgna2V5X2Rlc2VyaWFsaXplcicsIHVuaWNvZGUpLAogICAgICAgICgndmFsdWVfZGVzZXJpYWxpemVyJywgdW5pY29kZSksCiAgICBdKQoKCmNsYXNzIFJlYWRGcm9tS2Fma2EoRXh0ZXJuYWxUcmFuc2Zvcm0pOgogICIiIgogICAgQW4gZXh0ZXJuYWwgUFRyYW5zZm9ybSB3aGljaCByZWFkcyBmcm9tIEthZmthIGFuZCByZXR1cm5zIGEgS1YgcGFpciBmb3IKICAgIGVhY2ggaXRlbSBpbiB0aGUgc3BlY2lmaWVkIEthZmthIHRvcGljcy4gSWYgbm8gS2Fma2EgRGVzZXJpYWxpemVyIGZvcgogICAga2V5L3ZhbHVlIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSByYXcgYnl0ZSBhcnJheS4KCiAgICBOb3RlOiBSdW5uZXJzIG5lZWQgdG8gc3VwcG9ydCB0cmFuc2xhdGluZyBSZWFkIG9wZXJhdGlvbnMgaW4gb3JkZXIgdG8gdXNlCiAgICB0aGlzIHNvdXJjZS4gQXQgdGhlIG1vbWVudCBvbmx5IHRoZSBGbGluayBSdW5uZXIgc3VwcG9ydHMgdGhpcy4KCiAgICBFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuICBJdCByZXF1aXJlcyBzcGVjaWFsCiAgICBwcmVwYXJhdGlvbiBvZiB0aGUgSmF2YSBTREsuICBTZWUgQkVBTS03ODcwLgogICIiIgoKICAjIFJldHVybnMgdGhlIGtleS92YWx1ZSBkYXRhIGFzIHJhdyBieXRlIGFycmF5cwogIGJ5dGVfYXJyYXlfZGVzZXJpYWxpemVyID0gJ29yZy5hcGFjaGUua2Fma2EuY29tbW9uLnNlcmlhbGl6YXRpb24uJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQnl0ZUFycmF5RGVzZXJpYWxpemVyJwoKICBVUk4gPSAnYmVhbTpleHRlcm5hbDpqYXZhOmthZmthOnJlYWQ6djEnCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgY29uc3VtZXJfY29uZmlnLAogICAgICB0b3BpY3MsCiAgICAgIGtleV9kZXNlcmlhbGl6ZXI9Ynl0ZV9hcnJheV9kZXNlcmlhbGl6ZXIsCiAgICAgIHZhbHVlX2Rlc2VyaWFsaXplcj1ieXRlX2FycmF5X2Rlc2VyaWFsaXplciwKICAgICAgZXhwYW5zaW9uX3NlcnZpY2U9Tm9uZSk6CiAgICAiIiIKICAgIEluaXRpYWxpemVzIGEgcmVhZCBvcGVyYXRpb24gZnJvbSBLYWZrYS4KCiAgICA6cGFyYW0gY29uc3VtZXJfY29uZmlnOiBBIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY29uc3VtZXIgY29uZmlndXJhdGlvbi4KICAgIDpwYXJhbSB0b3BpY3M6IEEgbGlzdCBvZiB0b3BpYyBzdHJpbmdzLgogICAgOnBhcmFtIGtleV9kZXNlcmlhbGl6ZXI6IEEgZnVsbHktcXVhbGlmaWVkIEphdmEgY2xhc3MgbmFtZSBvZiBhIEthZmthCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzZXJpYWxpemVyIGZvciB0aGUgdG9waWMncyBrZXksIGUuZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JnLmFwYWNoZS5rYWZrYS5jb21tb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbi5Mb25nRGVzZXJpYWxpemVyJy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAnb3JnLmFwYWNoZS5rYWZrYS5jb21tb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbi5CeXRlQXJyYXlEZXNlcmlhbGl6ZXInLgogICAgOnBhcmFtIHZhbHVlX2Rlc2VyaWFsaXplcjogQSBmdWxseS1xdWFsaWZpZWQgSmF2YSBjbGFzcyBuYW1lIG9mIGEgS2Fma2EKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2VyaWFsaXplciBmb3IgdGhlIHRvcGljJ3MgdmFsdWUsIGUuZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmcuYXBhY2hlLmthZmthLmNvbW1vbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb24uTG9uZ0Rlc2VyaWFsaXplcicuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAnb3JnLmFwYWNoZS5rYWZrYS5jb21tb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9uLkJ5dGVBcnJheURlc2VyaWFsaXplcicuCiAgICA6cGFyYW0gZXhwYW5zaW9uX3NlcnZpY2U6IFRoZSBhZGRyZXNzIChob3N0OnBvcnQpIG9mIHRoZSBFeHBhbnNpb25TZXJ2aWNlLgogICAgIiIiCiAgICBzdXBlcihSZWFkRnJvbUthZmthLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBzZWxmLlVSTiwKICAgICAgICBOYW1lZFR1cGxlQmFzZWRQYXlsb2FkQnVpbGRlcigKICAgICAgICAgICAgUmVhZEZyb21LYWZrYVNjaGVtYSgKICAgICAgICAgICAgICAgIGNvbnN1bWVyX2NvbmZpZz1saXN0KGNvbnN1bWVyX2NvbmZpZy5pdGVtcygpKSwKICAgICAgICAgICAgICAgIHRvcGljcz10b3BpY3MsCiAgICAgICAgICAgICAgICBrZXlfZGVzZXJpYWxpemVyPWtleV9kZXNlcmlhbGl6ZXIsCiAgICAgICAgICAgICAgICB2YWx1ZV9kZXNlcmlhbGl6ZXI9dmFsdWVfZGVzZXJpYWxpemVyLAogICAgICAgICAgICApKSwKICAgICAgICBleHBhbnNpb25fc2VydmljZSkKCgpXcml0ZVRvS2Fma2FTY2hlbWEgPSB0eXBpbmcuTmFtZWRUdXBsZSgKICAgICdXcml0ZVRvS2Fma2FTY2hlbWEnLAogICAgWwogICAgICAgICgncHJvZHVjZXJfY29uZmlnJywgdHlwaW5nLkxpc3RbdHlwaW5nLlR1cGxlW3VuaWNvZGUsIHVuaWNvZGVdXSksCiAgICAgICAgKCd0b3BpYycsIHVuaWNvZGUpLAogICAgICAgICgna2V5X3NlcmlhbGl6ZXInLCB1bmljb2RlKSwKICAgICAgICAoJ3ZhbHVlX3NlcmlhbGl6ZXInLCB1bmljb2RlKSwKICAgIF0pCgoKY2xhc3MgV3JpdGVUb0thZmthKEV4dGVybmFsVHJhbnNmb3JtKToKICAiIiIKICAgIEFuIGV4dGVybmFsIFBUcmFuc2Zvcm0gd2hpY2ggd3JpdGVzIEtWIGRhdGEgdG8gYSBzcGVjaWZpZWQgS2Fma2EgdG9waWMuCiAgICBJZiBubyBLYWZrYSBTZXJpYWxpemVyIGZvciBrZXkvdmFsdWUgaXMgcHJvdmlkZWQsIHRoZW4ga2V5L3ZhbHVlIGFyZQogICAgYXNzdW1lZCB0byBiZSBieXRlIGFycmF5cy4KCiAgICBFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuICBJdCByZXF1aXJlcyBzcGVjaWFsCiAgICBwcmVwYXJhdGlvbiBvZiB0aGUgSmF2YSBTREsuICBTZWUgQkVBTS03ODcwLgogICIiIgoKICAjIERlZmF1bHQgc2VyaWFsaXplciB3aGljaCBwYXNzZXMgcmF3IGJ5dGVzIHRvIEthZmthCiAgYnl0ZV9hcnJheV9zZXJpYWxpemVyID0gJ29yZy5hcGFjaGUua2Fma2EuY29tbW9uLnNlcmlhbGl6YXRpb24uJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0J5dGVBcnJheVNlcmlhbGl6ZXInCgogIFVSTiA9ICdiZWFtOmV4dGVybmFsOmphdmE6a2Fma2E6d3JpdGU6djEnCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgcHJvZHVjZXJfY29uZmlnLAogICAgICB0b3BpYywKICAgICAga2V5X3NlcmlhbGl6ZXI9Ynl0ZV9hcnJheV9zZXJpYWxpemVyLAogICAgICB2YWx1ZV9zZXJpYWxpemVyPWJ5dGVfYXJyYXlfc2VyaWFsaXplciwKICAgICAgZXhwYW5zaW9uX3NlcnZpY2U9Tm9uZSk6CiAgICAiIiIKICAgIEluaXRpYWxpemVzIGEgd3JpdGUgb3BlcmF0aW9uIHRvIEthZmthLgoKICAgIDpwYXJhbSBjb25zdW1lcl9jb25maWc6IEEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBwcm9kdWNlciBjb25maWd1cmF0aW9uLgogICAgOnBhcmFtIHRvcGljOiBBIEthZmthIHRvcGljIG5hbWUuCiAgICA6cGFyYW0ga2V5X2Rlc2VyaWFsaXplcjogQSBmdWxseS1xdWFsaWZpZWQgSmF2YSBjbGFzcyBuYW1lIG9mIGEgS2Fma2EKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVyIGZvciB0aGUgdG9waWMncyBrZXksIGUuZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JnLmFwYWNoZS5rYWZrYS5jb21tb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbi5Mb25nU2VyaWFsaXplcicuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogJ29yZy5hcGFjaGUua2Fma2EuY29tbW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb24uQnl0ZUFycmF5U2VyaWFsaXplcicuCiAgICA6cGFyYW0gdmFsdWVfZGVzZXJpYWxpemVyOiBBIGZ1bGx5LXF1YWxpZmllZCBKYXZhIGNsYXNzIG5hbWUgb2YgYSBLYWZrYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplciBmb3IgdGhlIHRvcGljJ3MgdmFsdWUsIGUuZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmcuYXBhY2hlLmthZmthLmNvbW1vbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb24uTG9uZ1NlcmlhbGl6ZXInLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogJ29yZy5hcGFjaGUua2Fma2EuY29tbW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphdGlvbi5CeXRlQXJyYXlTZXJpYWxpemVyJy4KICAgIDpwYXJhbSBleHBhbnNpb25fc2VydmljZTogVGhlIGFkZHJlc3MgKGhvc3Q6cG9ydCkgb2YgdGhlIEV4cGFuc2lvblNlcnZpY2UuCiAgICAiIiIKICAgIHN1cGVyKFdyaXRlVG9LYWZrYSwgc2VsZikuX19pbml0X18oCiAgICAgICAgc2VsZi5VUk4sCiAgICAgICAgTmFtZWRUdXBsZUJhc2VkUGF5bG9hZEJ1aWxkZXIoCiAgICAgICAgICAgIFdyaXRlVG9LYWZrYVNjaGVtYSgKICAgICAgICAgICAgICAgIHByb2R1Y2VyX2NvbmZpZz1saXN0KHByb2R1Y2VyX2NvbmZpZy5pdGVtcygpKSwKICAgICAgICAgICAgICAgIHRvcGljPXRvcGljLAogICAgICAgICAgICAgICAga2V5X3NlcmlhbGl6ZXI9a2V5X3NlcmlhbGl6ZXIsCiAgICAgICAgICAgICAgICB2YWx1ZV9zZXJpYWxpemVyPXZhbHVlX3NlcmlhbGl6ZXIsCiAgICAgICAgICAgICkpLAogICAgICAgIGV4cGFuc2lvbl9zZXJ2aWNlKQqUfZQojBZSZWFkRnJvbUthZmthLl9faW5pdF9flGpWMQEAS09LcoeUjA1SZWFkRnJvbUthZmthlGpdMQEASzxLcoeUjBVXcml0ZVRvS2Fma2EuX19pbml0X1+UalYxAQBLj0uyh5SMDFdyaXRlVG9LYWZrYZRqXTEBAEt/S7KHlHV9lCiMDVJlYWRGcm9tS2Fma2GUatEDAACMDFdyaXRlVG9LYWZrYZRq0QMAAHWMHWFwYWNoZV9iZWFtLmlvLmV4dGVybmFsLmthZmthlHSUjBxhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rlChYyjsAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRmlsZS1iYXNlZCBzaW5rLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgcmUKaW1wb3J0IHRpbWUKaW1wb3J0IHV1aWQKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgaXRlcml0ZW1zCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgdXRpbApmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzaW9uVHlwZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcyBpbXBvcnQgRmlsZVN5c3RlbXMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBTdGF0aWNWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IGNoZWNrX2FjY2Vzc2libGUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQoKREVGQVVMVF9TSEFSRF9OQU1FX1RFTVBMQVRFID0gJy1TU1NTUy1vZi1OTk5OTicKCl9fYWxsX18gPSBbJ0ZpbGVCYXNlZFNpbmsnXQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIEZpbGVCYXNlZFNpbmsoaW9iYXNlLlNpbmspOgogICIiIkEgc2luayB0byBhIEdDUyBvciBsb2NhbCBmaWxlcy4KCiAgVG8gaW1wbGVtZW50IGEgZmlsZS1iYXNlZCBzaW5rLCBleHRlbmQgdGhpcyBjbGFzcyBhbmQgb3ZlcnJpZGUKICBlaXRoZXIgOm1ldGg6YC53cml0ZV9yZWNvcmQoKWAgb3IgOm1ldGg6YC53cml0ZV9lbmNvZGVkX3JlY29yZCgpYC4KCiAgSWYgbmVlZGVkLCBhbHNvIG92ZXJ3cml0ZSA6bWV0aDpgLm9wZW4oKWAgYW5kL29yIDptZXRoOmAuY2xvc2UoKWAgdG8gY3VzdG9taXplCiAgdGhlIGZpbGUgaGFuZGxpbmcgb3Igd3JpdGUgaGVhZGVycyBhbmQgZm9vdGVycy4KCiAgVGhlIG91dHB1dCBvZiB0aGlzIHdyaXRlIGlzIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBvZgogIGFsbCB3cml0dGVuIHNoYXJkcy4KICAiIiIKCiAgIyBNYXggbnVtYmVyIG9mIHRocmVhZHMgdG8gYmUgdXNlZCBmb3IgcmVuYW1pbmcuCiAgX01BWF9SRU5BTUVfVEhSRUFEUyA9IDY0CiAgX19oYXNoX18gPSBOb25lICAjIHR5cGU6IGlnbm9yZVthc3NpZ25tZW50XQoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgIGNvZGVyLAogICAgICBmaWxlX25hbWVfc3VmZml4PScnLAogICAgICBudW1fc2hhcmRzPTAsCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU9Tm9uZSwKICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiIKICAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogaWYgZmlsZSBwYXRoIHBhcmFtZXRlcnMgYXJlIG5vdCBhIDpjbGFzczpgc3RyYCBvcgogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuVmFsdWVQcm92aWRlcmAsIG9yIGlmCiAgICAgICAgKipjb21wcmVzc2lvbl90eXBlKiogaXMgbm90IG1lbWJlciBvZgogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlc2AuCiAgICAgIFZhbHVlRXJyb3I6IGlmICoqc2hhcmRfbmFtZV90ZW1wbGF0ZSoqIGlzIG5vdCBvZiBleHBlY3RlZAogICAgICAgIGZvcm1hdC4KICAgICIiIgogICAgaWYgbm90IGlzaW5zdGFuY2UoZmlsZV9wYXRoX3ByZWZpeCwgKChzdHIsIHVuaWNvZGUpLCBWYWx1ZVByb3ZpZGVyKSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdmaWxlX3BhdGhfcHJlZml4IG11c3QgYmUgYSBzdHJpbmcgb3IgVmFsdWVQcm92aWRlcjsnCiAgICAgICAgICAnZ290ICVyIGluc3RlYWQnICUgZmlsZV9wYXRoX3ByZWZpeCkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbGVfbmFtZV9zdWZmaXgsICgoc3RyLCB1bmljb2RlKSwgVmFsdWVQcm92aWRlcikpOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnZmlsZV9uYW1lX3N1ZmZpeCBtdXN0IGJlIGEgc3RyaW5nIG9yIFZhbHVlUHJvdmlkZXI7JwogICAgICAgICAgJ2dvdCAlciBpbnN0ZWFkJyAlIGZpbGVfbmFtZV9zdWZmaXgpCgogICAgaWYgbm90IENvbXByZXNzaW9uVHlwZXMuaXNfdmFsaWRfY29tcHJlc3Npb25fdHlwZShjb21wcmVzc2lvbl90eXBlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ2NvbXByZXNzaW9uX3R5cGUgbXVzdCBiZSBDb21wcmVzc2lvblR5cGUgb2JqZWN0IGJ1dCAnCiAgICAgICAgICAnd2FzICVzJyAlIHR5cGUoY29tcHJlc3Npb25fdHlwZSkpCiAgICBpZiBzaGFyZF9uYW1lX3RlbXBsYXRlIGlzIE5vbmU6CiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUgPSBERUZBVUxUX1NIQVJEX05BTUVfVEVNUExBVEUKICAgIGVsaWYgc2hhcmRfbmFtZV90ZW1wbGF0ZSA9PSAnJzoKICAgICAgbnVtX3NoYXJkcyA9IDEKICAgIGlmIGlzaW5zdGFuY2UoZmlsZV9wYXRoX3ByZWZpeCwgKHN0ciwgdW5pY29kZSkpOgogICAgICBmaWxlX3BhdGhfcHJlZml4ID0gU3RhdGljVmFsdWVQcm92aWRlcihzdHIsIGZpbGVfcGF0aF9wcmVmaXgpCiAgICBpZiBpc2luc3RhbmNlKGZpbGVfbmFtZV9zdWZmaXgsIChzdHIsIHVuaWNvZGUpKToKICAgICAgZmlsZV9uYW1lX3N1ZmZpeCA9IFN0YXRpY1ZhbHVlUHJvdmlkZXIoc3RyLCBmaWxlX25hbWVfc3VmZml4KQogICAgc2VsZi5maWxlX3BhdGhfcHJlZml4ID0gZmlsZV9wYXRoX3ByZWZpeAogICAgc2VsZi5maWxlX25hbWVfc3VmZml4ID0gZmlsZV9uYW1lX3N1ZmZpeAogICAgc2VsZi5udW1fc2hhcmRzID0gbnVtX3NoYXJkcwogICAgc2VsZi5jb2RlciA9IGNvZGVyCiAgICBzZWxmLnNoYXJkX25hbWVfZm9ybWF0ID0gc2VsZi5fdGVtcGxhdGVfdG9fZm9ybWF0KHNoYXJkX25hbWVfdGVtcGxhdGUpCiAgICBzZWxmLnNoYXJkX25hbWVfZ2xvYl9mb3JtYXQgPSBzZWxmLl90ZW1wbGF0ZV90b19nbG9iX2Zvcm1hdCgKICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlKQogICAgc2VsZi5jb21wcmVzc2lvbl90eXBlID0gY29tcHJlc3Npb25fdHlwZQogICAgc2VsZi5taW1lX3R5cGUgPSBtaW1lX3R5cGUKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7CiAgICAgICAgJ3NoYXJkcyc6IERpc3BsYXlEYXRhSXRlbShzZWxmLm51bV9zaGFyZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nTnVtYmVyIG9mIFNoYXJkcycpLmRyb3BfaWZfZGVmYXVsdCgwKSwKICAgICAgICAnY29tcHJlc3Npb24nOiBEaXNwbGF5RGF0YUl0ZW0oc3RyKHNlbGYuY29tcHJlc3Npb25fdHlwZSkpLAogICAgICAgICdmaWxlX3BhdHRlcm4nOiBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgICAgICd7fXt9e30nLmZvcm1hdCgKICAgICAgICAgICAgICAgIHNlbGYuZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICAgICAgICAgIHNlbGYuc2hhcmRfbmFtZV9mb3JtYXQsCiAgICAgICAgICAgICAgICBzZWxmLmZpbGVfbmFtZV9zdWZmaXgpLAogICAgICAgICAgICBsYWJlbD0nRmlsZSBQYXR0ZXJuJykKICAgIH0KCiAgQGNoZWNrX2FjY2Vzc2libGUoWydmaWxlX3BhdGhfcHJlZml4J10pCiAgZGVmIG9wZW4oc2VsZiwgdGVtcF9wYXRoKToKICAgICIiIk9wZW5zIGBgdGVtcF9wYXRoYGAsIHJldHVybmluZyBhbiBvcGFxdWUgZmlsZSBoYW5kbGUgb2JqZWN0LgoKICAgIFRoZSByZXR1cm5lZCBmaWxlIGhhbmRsZSBpcyBwYXNzZWQgdG8gYGB3cml0ZV9bZW5jb2RlZF9dcmVjb3JkYGAgYW5kCiAgICBgYGNsb3NlYGAuCiAgICAiIiIKICAgIHJldHVybiBGaWxlU3lzdGVtcy5jcmVhdGUodGVtcF9wYXRoLCBzZWxmLm1pbWVfdHlwZSwgc2VsZi5jb21wcmVzc2lvbl90eXBlKQoKICBkZWYgd3JpdGVfcmVjb3JkKHNlbGYsIGZpbGVfaGFuZGxlLCB2YWx1ZSk6CiAgICAiIiJXcml0ZXMgYSBzaW5nbGUgcmVjb3JkIGdvIHRoZSBmaWxlIGhhbmRsZSByZXR1cm5lZCBieSBgYG9wZW4oKWBgLgoKICAgIEJ5IGRlZmF1bHQsIGNhbGxzIGBgd3JpdGVfZW5jb2RlZF9yZWNvcmRgYCBhZnRlciBlbmNvZGluZyB0aGUgcmVjb3JkIHdpdGgKICAgIHRoaXMgc2luaydzIENvZGVyLgogICAgIiIiCiAgICBzZWxmLndyaXRlX2VuY29kZWRfcmVjb3JkKGZpbGVfaGFuZGxlLCBzZWxmLmNvZGVyLmVuY29kZSh2YWx1ZSkpCgogIGRlZiB3cml0ZV9lbmNvZGVkX3JlY29yZChzZWxmLCBmaWxlX2hhbmRsZSwgZW5jb2RlZF92YWx1ZSk6CiAgICAiIiJXcml0ZXMgYSBzaW5nbGUgZW5jb2RlZCByZWNvcmQgdG8gdGhlIGZpbGUgaGFuZGxlIHJldHVybmVkIGJ5IGBgb3BlbigpYGAuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGNsb3NlKHNlbGYsIGZpbGVfaGFuZGxlKToKICAgICIiIkZpbmFsaXplIGFuZCBjbG9zZSB0aGUgZmlsZSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBgYG9wZW4oKWBgLgoKICAgIENhbGxlZCBhZnRlciBhbGwgcmVjb3JkcyBhcmUgd3JpdHRlbi4KCiAgICBCeSBkZWZhdWx0LCBjYWxscyBgYGZpbGVfaGFuZGxlLmNsb3NlKClgYCBpZmYgaXQgaXMgbm90IE5vbmUuCiAgICAiIiIKICAgIGlmIGZpbGVfaGFuZGxlIGlzIG5vdCBOb25lOgogICAgICBmaWxlX2hhbmRsZS5jbG9zZSgpCgogIEBjaGVja19hY2Nlc3NpYmxlKFsnZmlsZV9wYXRoX3ByZWZpeCcsICdmaWxlX25hbWVfc3VmZml4J10pCiAgZGVmIGluaXRpYWxpemVfd3JpdGUoc2VsZik6CiAgICBmaWxlX3BhdGhfcHJlZml4ID0gc2VsZi5maWxlX3BhdGhfcHJlZml4LmdldCgpCgogICAgdG1wX2RpciA9IHNlbGYuX2NyZWF0ZV90ZW1wX2RpcihmaWxlX3BhdGhfcHJlZml4KQogICAgRmlsZVN5c3RlbXMubWtkaXJzKHRtcF9kaXIpCiAgICByZXR1cm4gdG1wX2RpcgoKICBkZWYgX2NyZWF0ZV90ZW1wX2RpcihzZWxmLCBmaWxlX3BhdGhfcHJlZml4KToKICAgIGJhc2VfcGF0aCwgbGFzdF9jb21wb25lbnQgPSBGaWxlU3lzdGVtcy5zcGxpdChmaWxlX3BhdGhfcHJlZml4KQogICAgaWYgbm90IGxhc3RfY29tcG9uZW50OgogICAgICAjIFRyeWluZyB0byByZS1zcGxpdCB0aGUgYmFzZV9wYXRoIHRvIGNoZWNrIGlmIGl0J3MgYSByb290LgogICAgICBuZXdfYmFzZV9wYXRoLCBfID0gRmlsZVN5c3RlbXMuc3BsaXQoYmFzZV9wYXRoKQogICAgICBpZiBiYXNlX3BhdGggPT0gbmV3X2Jhc2VfcGF0aDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnQ2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIHJvb3QgcGF0aCAnCiAgICAgICAgICAgICdwcmVmaXggJXMuIFBsZWFzZSBzcGVjaWZ5IGEgZmlsZSBwYXRoIHByZWZpeCB3aXRoICcKICAgICAgICAgICAgJ2F0IGxlYXN0IHR3byBjb21wb25lbnRzLicgJSBmaWxlX3BhdGhfcHJlZml4KQogICAgcGF0aF9jb21wb25lbnRzID0gWwogICAgICAgIGJhc2VfcGF0aCwgJ2JlYW0tdGVtcC0nICsgbGFzdF9jb21wb25lbnQgKyAnLScgKyB1dWlkLnV1aWQxKCkuaGV4CiAgICBdCiAgICByZXR1cm4gRmlsZVN5c3RlbXMuam9pbigqcGF0aF9jb21wb25lbnRzKQoKICBAY2hlY2tfYWNjZXNzaWJsZShbJ2ZpbGVfcGF0aF9wcmVmaXgnLCAnZmlsZV9uYW1lX3N1ZmZpeCddKQogIGRlZiBvcGVuX3dyaXRlcihzZWxmLCBpbml0X3Jlc3VsdCwgdWlkKToKICAgICMgQSBwcm9wZXIgc3VmZml4IGlzIG5lZWRlZCBmb3IgQVVUTyBjb21wcmVzc2lvbiBkZXRlY3Rpb24uCiAgICAjIFdlIGFsc28gZW5zdXJlIHRoZXJlIHdpbGwgYmUgbm8gY29sbGlzaW9ucyB3aXRoIHVpZCBhbmQgYQogICAgIyAocG9zc2libHkgdW5zaGFyZGVkKSBmaWxlX3BhdGhfcHJlZml4IGFuZCBhIChwb3NzaWJseSBlbXB0eSkKICAgICMgZmlsZV9uYW1lX3N1ZmZpeC4KICAgIGZpbGVfcGF0aF9wcmVmaXggPSBzZWxmLmZpbGVfcGF0aF9wcmVmaXguZ2V0KCkKICAgIGZpbGVfbmFtZV9zdWZmaXggPSBzZWxmLmZpbGVfbmFtZV9zdWZmaXguZ2V0KCkKICAgIHN1ZmZpeCA9ICgnLicgKyBvcy5wYXRoLmJhc2VuYW1lKGZpbGVfcGF0aF9wcmVmaXgpICsgZmlsZV9uYW1lX3N1ZmZpeCkKICAgIHdyaXRlcl9wYXRoID0gRmlsZVN5c3RlbXMuam9pbihpbml0X3Jlc3VsdCwgdWlkKSArIHN1ZmZpeAogICAgcmV0dXJuIEZpbGVCYXNlZFNpbmtXcml0ZXIoc2VsZiwgd3JpdGVyX3BhdGgpCgogIEBjaGVja19hY2Nlc3NpYmxlKFsnZmlsZV9wYXRoX3ByZWZpeCcsICdmaWxlX25hbWVfc3VmZml4J10pCiAgZGVmIF9nZXRfZmluYWxfbmFtZShzZWxmLCBzaGFyZF9udW0sIG51bV9zaGFyZHMpOgogICAgcmV0dXJuICcnLmpvaW4oWwogICAgICAgIHNlbGYuZmlsZV9wYXRoX3ByZWZpeC5nZXQoKSwKICAgICAgICBzZWxmLnNoYXJkX25hbWVfZm9ybWF0ICUKICAgICAgICBkaWN0KHNoYXJkX251bT1zaGFyZF9udW0sIG51bV9zaGFyZHM9bnVtX3NoYXJkcyksCiAgICAgICAgc2VsZi5maWxlX25hbWVfc3VmZml4LmdldCgpCiAgICBdKQoKICBAY2hlY2tfYWNjZXNzaWJsZShbJ2ZpbGVfcGF0aF9wcmVmaXgnLCAnZmlsZV9uYW1lX3N1ZmZpeCddKQogIGRlZiBfZ2V0X2ZpbmFsX25hbWVfZ2xvYihzZWxmLCBudW1fc2hhcmRzKToKICAgIHJldHVybiAnJy5qb2luKFsKICAgICAgICBzZWxmLmZpbGVfcGF0aF9wcmVmaXguZ2V0KCksCiAgICAgICAgc2VsZi5zaGFyZF9uYW1lX2dsb2JfZm9ybWF0ICUgZGljdChudW1fc2hhcmRzPW51bV9zaGFyZHMpLAogICAgICAgIHNlbGYuZmlsZV9uYW1lX3N1ZmZpeC5nZXQoKQogICAgXSkKCiAgZGVmIHByZV9maW5hbGl6ZShzZWxmLCBpbml0X3Jlc3VsdCwgd3JpdGVyX3Jlc3VsdHMpOgogICAgbnVtX3NoYXJkcyA9IGxlbihsaXN0KHdyaXRlcl9yZXN1bHRzKSkKICAgIGRzdF9nbG9iID0gc2VsZi5fZ2V0X2ZpbmFsX25hbWVfZ2xvYihudW1fc2hhcmRzKQogICAgZHN0X2dsb2JfZmlsZXMgPSBbCiAgICAgICAgZmlsZV9tZXRhZGF0YS5wYXRoIGZvciBtciBpbiBGaWxlU3lzdGVtcy5tYXRjaChbZHN0X2dsb2JdKQogICAgICAgIGZvciBmaWxlX21ldGFkYXRhIGluIG1yLm1ldGFkYXRhX2xpc3QKICAgIF0KCiAgICBpZiBkc3RfZ2xvYl9maWxlczoKICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgJ0RlbGV0aW5nICVkIGV4aXN0aW5nIGZpbGVzIGluIHRhcmdldCBwYXRoIG1hdGNoaW5nOiAlcycsCiAgICAgICAgICBsZW4oZHN0X2dsb2JfZmlsZXMpLAogICAgICAgICAgc2VsZi5zaGFyZF9uYW1lX2dsb2JfZm9ybWF0KQogICAgICBGaWxlU3lzdGVtcy5kZWxldGUoZHN0X2dsb2JfZmlsZXMpCgogIGRlZiBfY2hlY2tfc3RhdGVfZm9yX2ZpbmFsaXplX3dyaXRlKHNlbGYsIHdyaXRlcl9yZXN1bHRzLCBudW1fc2hhcmRzKToKICAgICIiIkNoZWNrcyB3cml0ZXIgb3V0cHV0IGZpbGVzJyBzdGF0ZXMuCgogICAgUmV0dXJuczoKICAgICAgc3JjX2ZpbGVzLCBkc3RfZmlsZXM6IExpc3RzIG9mIGZpbGVzIHRvIHJlbmFtZS4gRm9yIGVhY2ggaSwgZmluYWxpemVfd3JpdGUKICAgICAgICBzaG91bGQgcmVuYW1lKHNyY19maWxlc1tpXSwgZHN0X2ZpbGVzW2ldKS4KICAgICAgZGVsZXRlX2ZpbGVzOiBTcmMgZmlsZXMgdG8gZGVsZXRlLiBUaGVzZSBjb3VsZCBiZSBsZWZ0b3ZlcnMgZnJvbSBhbgogICAgICAgIGluY29tcGxldGUgKG5vbi1hdG9taWMpIHJlbmFtZSBvcGVyYXRpb24uCiAgICAgIG51bV9za2lwcGVkOiBUYWxseSBvZiB3cml0ZXIgcmVzdWx0cyBmaWxlcyBhbHJlYWR5IHJlbmFtZWQsIHN1Y2ggYXMgZnJvbQogICAgICAgIGEgcHJldmlvdXMgcnVuIG9mIGZpbmFsaXplX3dyaXRlKCkuCiAgICAiIiIKICAgIGlmIG5vdCB3cml0ZXJfcmVzdWx0czoKICAgICAgcmV0dXJuIFtdLCBbXSwgW10sIDAKCiAgICBzcmNfZ2xvYiA9IEZpbGVTeXN0ZW1zLmpvaW4oRmlsZVN5c3RlbXMuc3BsaXQod3JpdGVyX3Jlc3VsdHNbMF0pWzBdLCAnKicpCiAgICBkc3RfZ2xvYiA9IHNlbGYuX2dldF9maW5hbF9uYW1lX2dsb2IobnVtX3NoYXJkcykKICAgIHNyY19nbG9iX2ZpbGVzID0gc2V0KAogICAgICAgIGZpbGVfbWV0YWRhdGEucGF0aCBmb3IgbXIgaW4gRmlsZVN5c3RlbXMubWF0Y2goW3NyY19nbG9iXSkKICAgICAgICBmb3IgZmlsZV9tZXRhZGF0YSBpbiBtci5tZXRhZGF0YV9saXN0KQogICAgZHN0X2dsb2JfZmlsZXMgPSBzZXQoCiAgICAgICAgZmlsZV9tZXRhZGF0YS5wYXRoIGZvciBtciBpbiBGaWxlU3lzdGVtcy5tYXRjaChbZHN0X2dsb2JdKQogICAgICAgIGZvciBmaWxlX21ldGFkYXRhIGluIG1yLm1ldGFkYXRhX2xpc3QpCgogICAgc3JjX2ZpbGVzID0gW10KICAgIGRzdF9maWxlcyA9IFtdCiAgICBkZWxldGVfZmlsZXMgPSBbXQogICAgbnVtX3NraXBwZWQgPSAwCiAgICBmb3Igc2hhcmRfbnVtLCBzcmMgaW4gZW51bWVyYXRlKHdyaXRlcl9yZXN1bHRzKToKICAgICAgZmluYWxfbmFtZSA9IHNlbGYuX2dldF9maW5hbF9uYW1lKHNoYXJkX251bSwgbnVtX3NoYXJkcykKICAgICAgZHN0ID0gZmluYWxfbmFtZQogICAgICBzcmNfZXhpc3RzID0gc3JjIGluIHNyY19nbG9iX2ZpbGVzCiAgICAgIGRzdF9leGlzdHMgPSBkc3QgaW4gZHN0X2dsb2JfZmlsZXMKICAgICAgaWYgbm90IHNyY19leGlzdHMgYW5kIG5vdCBkc3RfZXhpc3RzOgogICAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKAogICAgICAgICAgICAnc3JjIGFuZCBkc3QgZmlsZXMgZG8gbm90IGV4aXN0LiBzcmM6ICVzLCBkc3Q6ICVzJyAlIChzcmMsIGRzdCkpCiAgICAgIGlmIG5vdCBzcmNfZXhpc3RzIGFuZCBkc3RfZXhpc3RzOgogICAgICAgIF9MT0dHRVIuZGVidWcoJ3NyYzogJXMgLT4gZHN0OiAlcyBhbHJlYWR5IHJlbmFtZWQsIHNraXBwaW5nJywgc3JjLCBkc3QpCiAgICAgICAgbnVtX3NraXBwZWQgKz0gMQogICAgICAgIGNvbnRpbnVlCiAgICAgIGlmIChzcmNfZXhpc3RzIGFuZCBkc3RfZXhpc3RzIGFuZAogICAgICAgICAgRmlsZVN5c3RlbXMuY2hlY2tzdW0oc3JjKSA9PSBGaWxlU3lzdGVtcy5jaGVja3N1bShkc3QpKToKICAgICAgICBfTE9HR0VSLmRlYnVnKCdzcmM6ICVzID09IGRzdDogJXMsIGRlbGV0aW5nIHNyYycsIHNyYywgZHN0KQogICAgICAgIGRlbGV0ZV9maWxlcy5hcHBlbmQoc3JjKQogICAgICAgIGNvbnRpbnVlCgogICAgICBzcmNfZmlsZXMuYXBwZW5kKHNyYykKICAgICAgZHN0X2ZpbGVzLmFwcGVuZChkc3QpCiAgICByZXR1cm4gc3JjX2ZpbGVzLCBkc3RfZmlsZXMsIGRlbGV0ZV9maWxlcywgbnVtX3NraXBwZWQKCiAgQGNoZWNrX2FjY2Vzc2libGUoWydmaWxlX3BhdGhfcHJlZml4J10pCiAgZGVmIGZpbmFsaXplX3dyaXRlKAogICAgICBzZWxmLCBpbml0X3Jlc3VsdCwgd3JpdGVyX3Jlc3VsdHMsIHVudXNlZF9wcmVfZmluYWxpemVfcmVzdWx0cyk6CiAgICB3cml0ZXJfcmVzdWx0cyA9IHNvcnRlZCh3cml0ZXJfcmVzdWx0cykKICAgIG51bV9zaGFyZHMgPSBsZW4od3JpdGVyX3Jlc3VsdHMpCgogICAgc3JjX2ZpbGVzLCBkc3RfZmlsZXMsIGRlbGV0ZV9maWxlcywgbnVtX3NraXBwZWQgPSAoCiAgICAgICAgc2VsZi5fY2hlY2tfc3RhdGVfZm9yX2ZpbmFsaXplX3dyaXRlKHdyaXRlcl9yZXN1bHRzLCBudW1fc2hhcmRzKSkKICAgIG51bV9za2lwcGVkICs9IGxlbihkZWxldGVfZmlsZXMpCiAgICBGaWxlU3lzdGVtcy5kZWxldGUoZGVsZXRlX2ZpbGVzKQogICAgbnVtX3NoYXJkc190b19maW5hbGl6ZSA9IGxlbihzcmNfZmlsZXMpCiAgICBtaW5fdGhyZWFkcyA9IG1pbihudW1fc2hhcmRzX3RvX2ZpbmFsaXplLCBGaWxlQmFzZWRTaW5rLl9NQVhfUkVOQU1FX1RIUkVBRFMpCiAgICBudW1fdGhyZWFkcyA9IG1heCgxLCBtaW5fdGhyZWFkcykKCiAgICBjaHVua19zaXplID0gRmlsZVN5c3RlbXMuZ2V0X2NodW5rX3NpemUoc2VsZi5maWxlX3BhdGhfcHJlZml4LmdldCgpKQogICAgc291cmNlX2ZpbGVfYmF0Y2ggPSBbCiAgICAgICAgc3JjX2ZpbGVzW2k6aSArIGNodW5rX3NpemVdCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNyY19maWxlcyksIGNodW5rX3NpemUpCiAgICBdCiAgICBkZXN0aW5hdGlvbl9maWxlX2JhdGNoID0gWwogICAgICAgIGRzdF9maWxlc1tpOmkgKyBjaHVua19zaXplXQogICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkc3RfZmlsZXMpLCBjaHVua19zaXplKQogICAgXQoKICAgIGlmIG51bV9zaGFyZHNfdG9fZmluYWxpemU6CiAgICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAgICdTdGFydGluZyBmaW5hbGl6ZV93cml0ZSB0aHJlYWRzIHdpdGggbnVtX3NoYXJkczogJWQgKHNraXBwZWQ6ICVkKSwgJwogICAgICAgICAgJ2JhdGNoZXM6ICVkLCBudW1fdGhyZWFkczogJWQnLAogICAgICAgICAgbnVtX3NoYXJkc190b19maW5hbGl6ZSwKICAgICAgICAgIG51bV9za2lwcGVkLAogICAgICAgICAgbGVuKHNvdXJjZV9maWxlX2JhdGNoKSwKICAgICAgICAgIG51bV90aHJlYWRzKQogICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKCiAgICAgICMgVXNlIGEgdGhyZWFkIHBvb2wgZm9yIHJlbmFtaW5nIG9wZXJhdGlvbnMuCiAgICAgIGRlZiBfcmVuYW1lX2JhdGNoKGJhdGNoKToKICAgICAgICAiIiJfcmVuYW1lX2JhdGNoIGV4ZWN1dGVzIGJhdGNoIHJlbmFtZSBvcGVyYXRpb25zLiIiIgogICAgICAgIHNvdXJjZV9maWxlcywgZGVzdGluYXRpb25fZmlsZXMgPSBiYXRjaAogICAgICAgIGV4Y2VwdGlvbnMgPSBbXQogICAgICAgIHRyeToKICAgICAgICAgIEZpbGVTeXN0ZW1zLnJlbmFtZShzb3VyY2VfZmlsZXMsIGRlc3RpbmF0aW9uX2ZpbGVzKQogICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbnMKICAgICAgICBleGNlcHQgQmVhbUlPRXJyb3IgYXMgZXhwOgogICAgICAgICAgaWYgZXhwLmV4Y2VwdGlvbl9kZXRhaWxzIGlzIE5vbmU6CiAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICBmb3IgKHNyYywgZHN0KSwgZXhjZXB0aW9uIGluIGl0ZXJpdGVtcyhleHAuZXhjZXB0aW9uX2RldGFpbHMpOgogICAgICAgICAgICBpZiBleGNlcHRpb246CiAgICAgICAgICAgICAgX0xPR0dFUi5lcnJvcigKICAgICAgICAgICAgICAgICAgKCdFeGNlcHRpb24gaW4gX3JlbmFtZV9iYXRjaC4gc3JjOiAlcywgJwogICAgICAgICAgICAgICAgICAgJ2RzdDogJXMsIGVycjogJXMnKSwKICAgICAgICAgICAgICAgICAgc3JjLAogICAgICAgICAgICAgICAgICBkc3QsCiAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbikKICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGNlcHRpb24pCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgX0xPR0dFUi5kZWJ1ZygnUmVuYW1lIHN1Y2Nlc3NmdWw6ICVzIC0+ICVzJywgc3JjLCBkc3QpCiAgICAgICAgICByZXR1cm4gZXhjZXB0aW9ucwoKICAgICAgZXhjZXB0aW9uX2JhdGNoZXMgPSB1dGlsLnJ1bl91c2luZ190aHJlYWRwb29sKAogICAgICAgICAgX3JlbmFtZV9iYXRjaCwKICAgICAgICAgIGxpc3QoemlwKHNvdXJjZV9maWxlX2JhdGNoLCBkZXN0aW5hdGlvbl9maWxlX2JhdGNoKSksCiAgICAgICAgICBudW1fdGhyZWFkcykKCiAgICAgIGFsbF9leGNlcHRpb25zID0gWwogICAgICAgICAgZSBmb3IgZXhjZXB0aW9uX2JhdGNoIGluIGV4Y2VwdGlvbl9iYXRjaGVzIGZvciBlIGluIGV4Y2VwdGlvbl9iYXRjaAogICAgICBdCiAgICAgIGlmIGFsbF9leGNlcHRpb25zOgogICAgICAgIHJhaXNlIEV4Y2VwdGlvbigKICAgICAgICAgICAgJ0VuY291bnRlcmVkIGV4Y2VwdGlvbnMgaW4gZmluYWxpemVfd3JpdGU6ICVzJyAlIGFsbF9leGNlcHRpb25zKQoKICAgICAgZm9yIGZpbmFsX25hbWUgaW4gZHN0X2ZpbGVzOgogICAgICAgIHlpZWxkIGZpbmFsX25hbWUKCiAgICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAgICdSZW5hbWVkICVkIHNoYXJkcyBpbiAlLjJmIHNlY29uZHMuJywKICAgICAgICAgIG51bV9zaGFyZHNfdG9fZmluYWxpemUsCiAgICAgICAgICB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUpCiAgICBlbHNlOgogICAgICBfTE9HR0VSLndhcm5pbmcoCiAgICAgICAgICAnTm8gc2hhcmRzIGZvdW5kIHRvIGZpbmFsaXplLiBudW1fc2hhcmRzOiAlZCwgc2tpcHBlZDogJWQnLAogICAgICAgICAgbnVtX3NoYXJkcywKICAgICAgICAgIG51bV9za2lwcGVkKQoKICAgIHRyeToKICAgICAgRmlsZVN5c3RlbXMuZGVsZXRlKFtpbml0X3Jlc3VsdF0pCiAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgIyBNYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KICAgICAgcGFzcwoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF90ZW1wbGF0ZV9yZXBsYWNlX251bV9zaGFyZHMoc2hhcmRfbmFtZV90ZW1wbGF0ZSk6CiAgICBtYXRjaCA9IHJlLnNlYXJjaCgnTisnLCBzaGFyZF9uYW1lX3RlbXBsYXRlKQogICAgaWYgbWF0Y2g6CiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUgPSBzaGFyZF9uYW1lX3RlbXBsYXRlLnJlcGxhY2UoCiAgICAgICAgICBtYXRjaC5ncm91cCgwKSwgJyUlKG51bV9zaGFyZHMpMCVkZCcgJSBsZW4obWF0Y2guZ3JvdXAoMCkpKQogICAgcmV0dXJuIHNoYXJkX25hbWVfdGVtcGxhdGUKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfdGVtcGxhdGVfdG9fZm9ybWF0KHNoYXJkX25hbWVfdGVtcGxhdGUpOgogICAgaWYgbm90IHNoYXJkX25hbWVfdGVtcGxhdGU6CiAgICAgIHJldHVybiAnJwogICAgbWF0Y2ggPSByZS5zZWFyY2goJ1MrJywgc2hhcmRfbmFtZV90ZW1wbGF0ZSkKICAgIGlmIG1hdGNoIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAiU2hhcmQgbnVtYmVyIHBhdHRlcm4gUysgbm90IGZvdW5kIGluIHNoYXJkX25hbWVfdGVtcGxhdGU6ICVzIiAlCiAgICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlKQogICAgc2hhcmRfbmFtZV9mb3JtYXQgPSBzaGFyZF9uYW1lX3RlbXBsYXRlLnJlcGxhY2UoCiAgICAgICAgbWF0Y2guZ3JvdXAoMCksICclJShzaGFyZF9udW0pMCVkZCcgJSBsZW4obWF0Y2guZ3JvdXAoMCkpKQogICAgcmV0dXJuIEZpbGVCYXNlZFNpbmsuX3RlbXBsYXRlX3JlcGxhY2VfbnVtX3NoYXJkcyhzaGFyZF9uYW1lX2Zvcm1hdCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfdGVtcGxhdGVfdG9fZ2xvYl9mb3JtYXQoc2hhcmRfbmFtZV90ZW1wbGF0ZSk6CiAgICBpZiBub3Qgc2hhcmRfbmFtZV90ZW1wbGF0ZToKICAgICAgcmV0dXJuICcnCiAgICBtYXRjaCA9IHJlLnNlYXJjaCgnUysnLCBzaGFyZF9uYW1lX3RlbXBsYXRlKQogICAgaWYgbWF0Y2ggaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJTaGFyZCBudW1iZXIgcGF0dGVybiBTKyBub3QgZm91bmQgaW4gc2hhcmRfbmFtZV90ZW1wbGF0ZTogJXMiICUKICAgICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUpCiAgICBzaGFyZF9uYW1lX2Zvcm1hdCA9IHNoYXJkX25hbWVfdGVtcGxhdGUucmVwbGFjZShtYXRjaC5ncm91cCgwKSwgJyonKQogICAgcmV0dXJuIEZpbGVCYXNlZFNpbmsuX3RlbXBsYXRlX3JlcGxhY2VfbnVtX3NoYXJkcyhzaGFyZF9uYW1lX2Zvcm1hdCkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE86IENsZWFuIHVwIHdvcmtpdGVtX3Rlc3Qgd2hpY2ggdXNlcyB0aGlzLgogICAgIyBweWxpbnQ6IGRpc2FibGU9dW5pZGlvbWF0aWMtdHlwZWNoZWNrCiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXwoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCgpjbGFzcyBGaWxlQmFzZWRTaW5rV3JpdGVyKGlvYmFzZS5Xcml0ZXIpOgogICIiIlRoZSB3cml0ZXIgZm9yIEZpbGVCYXNlZFNpbmsuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNpbmssIHRlbXBfc2hhcmRfcGF0aCk6CiAgICBzZWxmLnNpbmsgPSBzaW5rCiAgICBzZWxmLnRlbXBfc2hhcmRfcGF0aCA9IHRlbXBfc2hhcmRfcGF0aAogICAgc2VsZi50ZW1wX2hhbmRsZSA9IHNlbGYuc2luay5vcGVuKHRlbXBfc2hhcmRfcGF0aCkKCiAgZGVmIHdyaXRlKHNlbGYsIHZhbHVlKToKICAgIHNlbGYuc2luay53cml0ZV9yZWNvcmQoc2VsZi50ZW1wX2hhbmRsZSwgdmFsdWUpCgogIGRlZiBjbG9zZShzZWxmKToKICAgIHNlbGYuc2luay5jbG9zZShzZWxmLnRlbXBfaGFuZGxlKQogICAgcmV0dXJuIHNlbGYudGVtcF9zaGFyZF9wYXRoCpR9lCiMFkZpbGVCYXNlZFNpbmsuX19pbml0X1+UalYxAQBLRUt0h5SMGkZpbGVCYXNlZFNpbmsuZGlzcGxheV9kYXRhlGpWMQEAS3ZLgYeUjBJGaWxlQmFzZWRTaW5rLm9wZW6UalYxAQBLg0uKh5SMGkZpbGVCYXNlZFNpbmsud3JpdGVfcmVjb3JklGpWMQEAS4xLkoeUjCJGaWxlQmFzZWRTaW5rLndyaXRlX2VuY29kZWRfcmVjb3JklGpWMQEAS5RLl4eUjBNGaWxlQmFzZWRTaW5rLmNsb3NllGpWMQEAS5lLoYeUjB5GaWxlQmFzZWRTaW5rLmluaXRpYWxpemVfd3JpdGWUalYxAQBLo0uph5SMHkZpbGVCYXNlZFNpbmsuX2NyZWF0ZV90ZW1wX2RpcpRqVjEBAEurS7iHlIwZRmlsZUJhc2VkU2luay5vcGVuX3dyaXRlcpRqVjEBAEu6S8SHlIwdRmlsZUJhc2VkU2luay5fZ2V0X2ZpbmFsX25hbWWUalYxAQBLxkvNh5SMIkZpbGVCYXNlZFNpbmsuX2dldF9maW5hbF9uYW1lX2dsb2KUalYxAQBLz0vVh5SMGkZpbGVCYXNlZFNpbmsucHJlX2ZpbmFsaXpllGpWMQEAS9dL5IeUjC1GaWxlQmFzZWRTaW5rLl9jaGVja19zdGF0ZV9mb3JfZmluYWxpemVfd3JpdGWUalYxAQBL5k0VAYeUjCpGaWxlQmFzZWRTaW5rLmZpbmFsaXplX3dyaXRlLl9yZW5hbWVfYmF0Y2iUalYxAQBNOgFNTwGHlIwcRmlsZUJhc2VkU2luay5maW5hbGl6ZV93cml0ZZRqVjEBAE0XAU1uAYeUjCpGaWxlQmFzZWRTaW5rLl90ZW1wbGF0ZV9yZXBsYWNlX251bV9zaGFyZHOUalYxAQBNcAFNdgGHlIwhRmlsZUJhc2VkU2luay5fdGVtcGxhdGVfdG9fZm9ybWF0lGpWMQEATXgBTYMBh5SMJkZpbGVCYXNlZFNpbmsuX3RlbXBsYXRlX3RvX2dsb2JfZm9ybWF0lGpWMQEATYUBTY8Bh5SMFEZpbGVCYXNlZFNpbmsuX19lcV9flGpWMQEATZEBTZQBh5SMFEZpbGVCYXNlZFNpbmsuX19uZV9flGpWMQEATZYBTZgBh5SMDUZpbGVCYXNlZFNpbmuUal0xAQBLNE2YAYeUjBxGaWxlQmFzZWRTaW5rV3JpdGVyLl9faW5pdF9flGpWMQEATZ4BTaEBh5SMGUZpbGVCYXNlZFNpbmtXcml0ZXIud3JpdGWUalYxAQBNowFNpAGHlIwZRmlsZUJhc2VkU2lua1dyaXRlci5jbG9zZZRqVjEBAE2mAU2oAYeUjBNGaWxlQmFzZWRTaW5rV3JpdGVylGpdMQEATZsBTagBh5R1fZQojA1GaWxlQmFzZWRTaW5rlGrvAwAAjBpGaWxlQmFzZWRTaW5rLmRpc3BsYXlfZGF0YZRq7wMAAIwSRmlsZUJhc2VkU2luay5vcGVulGrvAwAAjBpGaWxlQmFzZWRTaW5rLndyaXRlX3JlY29yZJRq7wMAAIwiRmlsZUJhc2VkU2luay53cml0ZV9lbmNvZGVkX3JlY29yZJRq7wMAAIwTRmlsZUJhc2VkU2luay5jbG9zZZRq7wMAAIweRmlsZUJhc2VkU2luay5pbml0aWFsaXplX3dyaXRllGrvAwAAjBlGaWxlQmFzZWRTaW5rLm9wZW5fd3JpdGVylGrvAwAAjBpGaWxlQmFzZWRTaW5rLnByZV9maW5hbGl6ZZRq7wMAAIwcRmlsZUJhc2VkU2luay5maW5hbGl6ZV93cml0ZZRq7wMAAHWMHGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNpbmuUdJSMHmFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZZQoWGlEAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIHNvdXJjZXMgZm9yIG5ldyBmaWxlIHR5cGVzLgoKVG8gY3JlYXRlIGEgc291cmNlIGZvciBhIG5ldyBmaWxlIHR5cGUgYSBzdWItY2xhc3Mgb2YgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgCnNob3VsZCBiZSBjcmVhdGVkLiBTdWItY2xhc3NlcyBvZiA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAgbXVzdCBpbXBsZW1lbnQgdGhlCm1ldGhvZCA6bWV0aDpgRmlsZUJhc2VkU291cmNlLnJlYWRfcmVjb3JkcygpYC4gUGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YKdGhhdCBtZXRob2QgZm9yIG1vcmUgZGV0YWlscy4KCkZvciBhbiBleGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgRmlsZUJhc2VkU291cmNlYCBzZWUKOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uX0F2cm9Tb3VyY2VgLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgbG9uZwpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgY29uY2F0X3NvdXJjZQpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgcmFuZ2VfdHJhY2tlcnMKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMgaW1wb3J0IEZpbGVTeXN0ZW1zCmZyb20gYXBhY2hlX2JlYW0uaW8ucmVzdHJpY3Rpb25fdHJhY2tlcnMgaW1wb3J0IE9mZnNldFJhbmdlCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgU3RhdGljVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBjaGVja19hY2Nlc3NpYmxlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBQYXJEbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlsIGltcG9ydCBSZXNodWZmbGUKCk1BWF9OVU1fVEhSRUFEU19GT1JfU0laRV9FU1RJTUFUSU9OID0gMjUKCl9fYWxsX18gPSBbJ0ZpbGVCYXNlZFNvdXJjZSddCgoKY2xhc3MgRmlsZUJhc2VkU291cmNlKGlvYmFzZS5Cb3VuZGVkU291cmNlKToKICAiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYCBmb3IgcmVhZGluZyBhIGZpbGUgZ2xvYiBvZgogIGEgZ2l2ZW4gdHlwZS4iIiIKCiAgTUlOX05VTUJFUl9PRl9GSUxFU19UT19TVEFUID0gMTAwCiAgTUlOX0ZSQUNUSU9OX09GX0ZJTEVTX1RPX1NUQVQgPSAwLjAxCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICBtaW5fYnVuZGxlX3NpemU9MCwKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgIHNwbGl0dGFibGU9VHJ1ZSwKICAgICAgdmFsaWRhdGU9VHJ1ZSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAuCgogICAgQXJnczoKICAgICAgZmlsZV9wYXR0ZXJuIChzdHIpOiB0aGUgZmlsZSBnbG9iIHRvIHJlYWQgYSBzdHJpbmcgb3IgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIuVmFsdWVQcm92aWRlcmAKICAgICAgICAocGxhY2Vob2xkZXIgdG8gaW5qZWN0IGEgcnVudGltZSB2YWx1ZSkuCiAgICAgIG1pbl9idW5kbGVfc2l6ZSAoaW50KTogbWluaW11bSBzaXplIG9mIGJ1bmRsZXMgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkCiAgICAgICAgd2hlbiBwZXJmb3JtaW5nIGluaXRpYWwgc3BsaXR0aW5nIG9uIHRoaXMgc291cmNlLgogICAgICBjb21wcmVzc2lvbl90eXBlIChzdHIpOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIG91dHB1dCBmaWxlcy4KICAgICAgICBUeXBpY2FsIHZhbHVlIGlzIDphdHRyOmBDb21wcmVzc2lvblR5cGVzLkFVVE8KICAgICAgICA8YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkFVVE8+YCwKICAgICAgICBpbiB3aGljaCBjYXNlIHRoZSBmaW5hbCBmaWxlIHBhdGgncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVjdAogICAgICAgIHRoZSBjb21wcmVzc2lvbi4KICAgICAgc3BsaXR0YWJsZSAoYm9vbCk6IHdoZXRoZXIgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgIHNob3VsZCB0cnkgdG8KICAgICAgICBsb2dpY2FsbHkgc3BsaXQgYSBzaW5nbGUgZmlsZSBpbnRvIGRhdGEgcmFuZ2VzIHNvIHRoYXQgZGlmZmVyZW50IHBhcnRzCiAgICAgICAgb2YgdGhlIHNhbWUgZmlsZSBjYW4gYmUgcmVhZCBpbiBwYXJhbGxlbC4gSWYgc2V0IHRvIDpkYXRhOmBGYWxzZWAsCiAgICAgICAgOmNsYXNzOmBGaWxlQmFzZWRTb3VyY2VgIHdpbGwgcHJldmVudCBib3RoIGluaXRpYWwgYW5kIGR5bmFtaWMgc3BsaXR0aW5nCiAgICAgICAgb2Ygc291cmNlcyBmb3Igc2luZ2xlIGZpbGVzLiBGaWxlIHBhdHRlcm5zIHRoYXQgcmVwcmVzZW50IG11bHRpcGxlIGZpbGVzCiAgICAgICAgbWF5IHN0aWxsIGdldCBzcGxpdCBpbnRvIHNvdXJjZXMgZm9yIGluZGl2aWR1YWwgZmlsZXMuIEV2ZW4gaWYgc2V0IHRvCiAgICAgICAgOmRhdGE6YFRydWVgIGJ5IHRoZSB1c2VyLCA6Y2xhc3M6YEZpbGVCYXNlZFNvdXJjZWAgbWF5IGNob29zZSB0byBub3QKICAgICAgICBzcGxpdCB0aGUgZmlsZSwgZm9yIGV4YW1wbGUsIGZvciBjb21wcmVzc2VkIGZpbGVzIHdoZXJlIGN1cnJlbnRseSBpdCBpcwogICAgICAgIG5vdCBwb3NzaWJsZSB0byBlZmZpY2llbnRseSByZWFkIGEgZGF0YSByYW5nZSB3aXRob3V0IGRlY29tcHJlc3NpbmcgdGhlCiAgICAgICAgd2hvbGUgZmlsZS4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBCb29sZWFuIGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUKICAgICAgICBwaXBlbGluZSBjcmVhdGlvbiB0aW1lLgoKICAgIFJhaXNlczoKICAgICAgVHlwZUVycm9yOiB3aGVuICoqY29tcHJlc3Npb25fdHlwZSoqIGlzIG5vdCB2YWxpZCBvciBpZgogICAgICAgICoqZmlsZV9wYXR0ZXJuKiogaXMgbm90IGEgOmNsYXNzOmBzdHJgIG9yIGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXJgLgogICAgICBWYWx1ZUVycm9yOiB3aGVuIGNvbXByZXNzaW9uIGFuZCBzcGxpdHRhYmxlIGZpbGVzIGFyZQogICAgICAgIHNwZWNpZmllZC4KICAgICAgSU9FcnJvcjogd2hlbiB0aGUgZmlsZSBwYXR0ZXJuIHNwZWNpZmllZCB5aWVsZHMgYW4gZW1wdHkKICAgICAgICByZXN1bHQuCiAgICAiIiIKCiAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlX3BhdHRlcm4sICgoc3RyLCB1bmljb2RlKSwgVmFsdWVQcm92aWRlcikpOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnJXM6IGZpbGVfcGF0dGVybiBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nJwogICAgICAgICAgJyBvciBWYWx1ZVByb3ZpZGVyOyBnb3QgJXIgaW5zdGVhZCcgJQogICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBmaWxlX3BhdHRlcm4pKQoKICAgIGlmIGlzaW5zdGFuY2UoZmlsZV9wYXR0ZXJuLCAoc3RyLCB1bmljb2RlKSk6CiAgICAgIGZpbGVfcGF0dGVybiA9IFN0YXRpY1ZhbHVlUHJvdmlkZXIoc3RyLCBmaWxlX3BhdHRlcm4pCiAgICBzZWxmLl9wYXR0ZXJuID0gZmlsZV9wYXR0ZXJuCgogICAgc2VsZi5fY29uY2F0X3NvdXJjZSA9IE5vbmUKICAgIHNlbGYuX21pbl9idW5kbGVfc2l6ZSA9IG1pbl9idW5kbGVfc2l6ZQogICAgaWYgbm90IENvbXByZXNzaW9uVHlwZXMuaXNfdmFsaWRfY29tcHJlc3Npb25fdHlwZShjb21wcmVzc2lvbl90eXBlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ2NvbXByZXNzaW9uX3R5cGUgbXVzdCBiZSBDb21wcmVzc2lvblR5cGUgb2JqZWN0IGJ1dCAnCiAgICAgICAgICAnd2FzICVzJyAlIHR5cGUoY29tcHJlc3Npb25fdHlwZSkpCiAgICBzZWxmLl9jb21wcmVzc2lvbl90eXBlID0gY29tcHJlc3Npb25fdHlwZQogICAgc2VsZi5fc3BsaXR0YWJsZSA9IHNwbGl0dGFibGUKICAgIGlmIHZhbGlkYXRlIGFuZCBmaWxlX3BhdHRlcm4uaXNfYWNjZXNzaWJsZSgpOgogICAgICBzZWxmLl92YWxpZGF0ZSgpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdmaWxlX3BhdHRlcm4nOiBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgICAgIHN0cihzZWxmLl9wYXR0ZXJuKSwgbGFiZWw9IkZpbGUgUGF0dGVybiIpLAogICAgICAgICdjb21wcmVzc2lvbic6IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICAgICAgc3RyKHNlbGYuX2NvbXByZXNzaW9uX3R5cGUpLCBsYWJlbD0nQ29tcHJlc3Npb24gVHlwZScpCiAgICB9CgogIEBjaGVja19hY2Nlc3NpYmxlKFsnX3BhdHRlcm4nXSkKICBkZWYgX2dldF9jb25jYXRfc291cmNlKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBjb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZQogICAgaWYgc2VsZi5fY29uY2F0X3NvdXJjZSBpcyBOb25lOgogICAgICBwYXR0ZXJuID0gc2VsZi5fcGF0dGVybi5nZXQoKQoKICAgICAgc2luZ2xlX2ZpbGVfc291cmNlcyA9IFtdCiAgICAgIG1hdGNoX3Jlc3VsdCA9IEZpbGVTeXN0ZW1zLm1hdGNoKFtwYXR0ZXJuXSlbMF0KICAgICAgZmlsZXNfbWV0YWRhdGEgPSBtYXRjaF9yZXN1bHQubWV0YWRhdGFfbGlzdAoKICAgICAgIyBXZSBjcmVhdGUgYSByZWZlcmVuY2UgZm9yIEZpbGVCYXNlZFNvdXJjZSB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhbG9uZwogICAgICAjIHdpdGggZWFjaCBfU2luZ2xlRmlsZVNvdXJjZS4gVG8gcHJldmVudCB0aGlzIEZpbGVCYXNlZFNvdXJjZSBmcm9tIGhhdmluZwogICAgICAjIGEgcmVmZXJlbmNlIHRvIENvbmNhdFNvdXJjZSAocmVzdWx0aW5nIGluIHF1YWRyYXRpYyBzcGFjZSBjb21wbGV4aXR5KQogICAgICAjIHdlIGNsb25lIGl0IGhlcmUuCiAgICAgIGZpbGVfYmFzZWRfc291cmNlX3JlZiA9IHBpY2tsZXIubG9hZHMocGlja2xlci5kdW1wcyhzZWxmKSkKCiAgICAgIGZvciBmaWxlX21ldGFkYXRhIGluIGZpbGVzX21ldGFkYXRhOgogICAgICAgIGZpbGVfbmFtZSA9IGZpbGVfbWV0YWRhdGEucGF0aAogICAgICAgIGZpbGVfc2l6ZSA9IGZpbGVfbWV0YWRhdGEuc2l6ZV9pbl9ieXRlcwogICAgICAgIGlmIGZpbGVfc2l6ZSA9PSAwOgogICAgICAgICAgY29udGludWUgICMgSWdub3JpbmcgZW1wdHkgZmlsZS4KCiAgICAgICAgIyBXZSBkZXRlcm1pbmUgc3BsaXR0YWJpbGl0eSBvZiB0aGlzIHNwZWNpZmljIGZpbGUuCiAgICAgICAgc3BsaXR0YWJsZSA9ICgKICAgICAgICAgICAgc2VsZi5zcGxpdHRhYmxlIGFuZCBfZGV0ZXJtaW5lX3NwbGl0dGFiaWxpdHlfZnJvbV9jb21wcmVzc2lvbl90eXBlKAogICAgICAgICAgICAgICAgZmlsZV9uYW1lLCBzZWxmLl9jb21wcmVzc2lvbl90eXBlKSkKCiAgICAgICAgc2luZ2xlX2ZpbGVfc291cmNlID0gX1NpbmdsZUZpbGVTb3VyY2UoCiAgICAgICAgICAgIGZpbGVfYmFzZWRfc291cmNlX3JlZiwKICAgICAgICAgICAgZmlsZV9uYW1lLAogICAgICAgICAgICAwLAogICAgICAgICAgICBmaWxlX3NpemUsCiAgICAgICAgICAgIG1pbl9idW5kbGVfc2l6ZT1zZWxmLl9taW5fYnVuZGxlX3NpemUsCiAgICAgICAgICAgIHNwbGl0dGFibGU9c3BsaXR0YWJsZSkKICAgICAgICBzaW5nbGVfZmlsZV9zb3VyY2VzLmFwcGVuZChzaW5nbGVfZmlsZV9zb3VyY2UpCiAgICAgIHNlbGYuX2NvbmNhdF9zb3VyY2UgPSBjb25jYXRfc291cmNlLkNvbmNhdFNvdXJjZShzaW5nbGVfZmlsZV9zb3VyY2VzKQogICAgcmV0dXJuIHNlbGYuX2NvbmNhdF9zb3VyY2UKCiAgZGVmIG9wZW5fZmlsZShzZWxmLCBmaWxlX25hbWUpOgogICAgcmV0dXJuIEZpbGVTeXN0ZW1zLm9wZW4oCiAgICAgICAgZmlsZV9uYW1lLAogICAgICAgICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICAgIGNvbXByZXNzaW9uX3R5cGU9c2VsZi5fY29tcHJlc3Npb25fdHlwZSkKCiAgQGNoZWNrX2FjY2Vzc2libGUoWydfcGF0dGVybiddKQogIGRlZiBfdmFsaWRhdGUoc2VsZik6CiAgICAiIiJWYWxpZGF0ZSBpZiB0aGVyZSBhcmUgYWN0dWFsIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZ2xvYiBwYXR0ZXJuCiAgICAiIiIKICAgIHBhdHRlcm4gPSBzZWxmLl9wYXR0ZXJuLmdldCgpCgogICAgIyBMaW1pdCB0aGUgcmVzcG9uc2VzIGFzIHdlIG9ubHkgd2FudCB0byBjaGVjayBpZiBzb21ldGhpbmcgZXhpc3RzCiAgICBtYXRjaF9yZXN1bHQgPSBGaWxlU3lzdGVtcy5tYXRjaChbcGF0dGVybl0sIGxpbWl0cz1bMV0pWzBdCiAgICBpZiBsZW4obWF0Y2hfcmVzdWx0Lm1ldGFkYXRhX2xpc3QpIDw9IDA6CiAgICAgIHJhaXNlIElPRXJyb3IoJ05vIGZpbGVzIGZvdW5kIGJhc2VkIG9uIHRoZSBmaWxlIHBhdHRlcm4gJXMnICUgcGF0dGVybikKCiAgZGVmIHNwbGl0KAogICAgICBzZWxmLCBkZXNpcmVkX2J1bmRsZV9zaXplPU5vbmUsIHN0YXJ0X3Bvc2l0aW9uPU5vbmUsIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgICByZXR1cm4gc2VsZi5fZ2V0X2NvbmNhdF9zb3VyY2UoKS5zcGxpdCgKICAgICAgICBkZXNpcmVkX2J1bmRsZV9zaXplPWRlc2lyZWRfYnVuZGxlX3NpemUsCiAgICAgICAgc3RhcnRfcG9zaXRpb249c3RhcnRfcG9zaXRpb24sCiAgICAgICAgc3RvcF9wb3NpdGlvbj1zdG9wX3Bvc2l0aW9uKQoKICBAY2hlY2tfYWNjZXNzaWJsZShbJ19wYXR0ZXJuJ10pCiAgZGVmIGVzdGltYXRlX3NpemUoc2VsZik6CiAgICBwYXR0ZXJuID0gc2VsZi5fcGF0dGVybi5nZXQoKQogICAgbWF0Y2hfcmVzdWx0ID0gRmlsZVN5c3RlbXMubWF0Y2goW3BhdHRlcm5dKVswXQogICAgcmV0dXJuIHN1bShbZi5zaXplX2luX2J5dGVzIGZvciBmIGluIG1hdGNoX3Jlc3VsdC5tZXRhZGF0YV9saXN0XSkKCiAgZGVmIHJlYWQoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICByZXR1cm4gc2VsZi5fZ2V0X2NvbmNhdF9zb3VyY2UoKS5yZWFkKHJhbmdlX3RyYWNrZXIpCgogIGRlZiBnZXRfcmFuZ2VfdHJhY2tlcihzZWxmLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbik6CiAgICByZXR1cm4gc2VsZi5fZ2V0X2NvbmNhdF9zb3VyY2UoKS5nZXRfcmFuZ2VfdHJhY2tlcigKICAgICAgICBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikKCiAgZGVmIHJlYWRfcmVjb3JkcyhzZWxmLCBmaWxlX25hbWUsIG9mZnNldF9yYW5nZV90cmFja2VyKToKICAgICIiIlJldHVybnMgYSBnZW5lcmF0b3Igb2YgcmVjb3JkcyBjcmVhdGVkIGJ5IHJlYWRpbmcgZmlsZSAnZmlsZV9uYW1lJy4KCiAgICBBcmdzOgogICAgICBmaWxlX25hbWU6IGEgYGBzdHJpbmdgYCB0aGF0IGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHJlYWQuIE1ldGhvZAogICAgICAgICAgICAgICAgIGBgRmlsZUJhc2VkU291cmNlLm9wZW5fZmlsZSgpYGAgbXVzdCBiZSB1c2VkIHRvIG9wZW4gdGhlIGZpbGUKICAgICAgICAgICAgICAgICBhbmQgY3JlYXRlIGEgc2Vla2FibGUgZmlsZSBvYmplY3QuCiAgICAgIG9mZnNldF9yYW5nZV90cmFja2VyOiBhIG9iamVjdCBvZiB0eXBlIGBgT2Zmc2V0UmFuZ2VUcmFja2VyYGAuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZXMgdGhlIGJ5dGUgcmFuZ2Ugb2YgdGhlIGZpbGUgdGhhdCBzaG91bGQgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQuIFNlZSBkb2N1bWVudGF0aW9uIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYGlvYmFzZS5Cb3VuZGVkU291cmNlLnJlYWQoKWBgIGZvciBtb3JlIGluZm9ybWF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiByZWFkaW5nIHJlY29yZHMgd2hpbGUgY29tcGx5aW5nIHRvIHRoZSByYW5nZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBieSBhIGdpdmVuIGBgUmFuZ2VUcmFja2VyYGAuCgogICAgUmV0dXJuczoKICAgICAgYW4gaXRlcmF0b3IgdGhhdCBnaXZlcyB0aGUgcmVjb3JkcyByZWFkIGZyb20gdGhlIGdpdmVuIGZpbGUuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQHByb3BlcnR5CiAgZGVmIHNwbGl0dGFibGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3BsaXR0YWJsZQoKCmRlZiBfZGV0ZXJtaW5lX3NwbGl0dGFiaWxpdHlfZnJvbV9jb21wcmVzc2lvbl90eXBlKGZpbGVfcGF0aCwgY29tcHJlc3Npb25fdHlwZSk6CiAgaWYgY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkFVVE86CiAgICBjb21wcmVzc2lvbl90eXBlID0gQ29tcHJlc3Npb25UeXBlcy5kZXRlY3RfY29tcHJlc3Npb25fdHlwZShmaWxlX3BhdGgpCgogIHJldHVybiBjb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VECgoKY2xhc3MgX1NpbmdsZUZpbGVTb3VyY2UoaW9iYXNlLkJvdW5kZWRTb3VyY2UpOgogICIiIkRlbm90ZXMgYSBzb3VyY2UgZm9yIGEgc3BlY2lmaWMgZmlsZSB0eXBlLiIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZmlsZV9iYXNlZF9zb3VyY2UsCiAgICAgIGZpbGVfbmFtZSwKICAgICAgc3RhcnRfb2Zmc2V0LAogICAgICBzdG9wX29mZnNldCwKICAgICAgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgIHNwbGl0dGFibGU9VHJ1ZSk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShzdGFydF9vZmZzZXQsIChpbnQsIGxvbmcpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ3N0YXJ0X29mZnNldCBtdXN0IGJlIGEgbnVtYmVyLiBSZWNlaXZlZDogJXInICUgc3RhcnRfb2Zmc2V0KQogICAgaWYgc3RvcF9vZmZzZXQgIT0gcmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWToKICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3RvcF9vZmZzZXQsIChpbnQsIGxvbmcpKToKICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICdzdG9wX29mZnNldCBtdXN0IGJlIGEgbnVtYmVyLiBSZWNlaXZlZDogJXInICUgc3RvcF9vZmZzZXQpCiAgICAgIGlmIHN0YXJ0X29mZnNldCA+PSBzdG9wX29mZnNldDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnc3RhcnRfb2Zmc2V0IG11c3QgYmUgc21hbGxlciB0aGFuIHN0b3Bfb2Zmc2V0LiBSZWNlaXZlZCAlZCBhbmQgJWQgJwogICAgICAgICAgICAnZm9yIHN0YXJ0IGFuZCBzdG9wIG9mZnNldHMgcmVzcGVjdGl2ZWx5JyAlCiAgICAgICAgICAgIChzdGFydF9vZmZzZXQsIHN0b3Bfb2Zmc2V0KSkKCiAgICBzZWxmLl9maWxlX25hbWUgPSBmaWxlX25hbWUKICAgIHNlbGYuX2lzX2djc19maWxlID0gZmlsZV9uYW1lLnN0YXJ0c3dpdGgoJ2dzOi8vJykgaWYgZmlsZV9uYW1lIGVsc2UgRmFsc2UKICAgIHNlbGYuX3N0YXJ0X29mZnNldCA9IHN0YXJ0X29mZnNldAogICAgc2VsZi5fc3RvcF9vZmZzZXQgPSBzdG9wX29mZnNldAogICAgc2VsZi5fbWluX2J1bmRsZV9zaXplID0gbWluX2J1bmRsZV9zaXplCiAgICBzZWxmLl9maWxlX2Jhc2VkX3NvdXJjZSA9IGZpbGVfYmFzZWRfc291cmNlCiAgICBzZWxmLl9zcGxpdHRhYmxlID0gc3BsaXR0YWJsZQoKICBkZWYgc3BsaXQoc2VsZiwgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc3RhcnRfb2Zmc2V0PU5vbmUsIHN0b3Bfb2Zmc2V0PU5vbmUpOgogICAgaWYgc3RhcnRfb2Zmc2V0IGlzIE5vbmU6CiAgICAgIHN0YXJ0X29mZnNldCA9IHNlbGYuX3N0YXJ0X29mZnNldAogICAgaWYgc3RvcF9vZmZzZXQgaXMgTm9uZToKICAgICAgc3RvcF9vZmZzZXQgPSBzZWxmLl9zdG9wX29mZnNldAoKICAgIGlmIHNlbGYuX3NwbGl0dGFibGU6CiAgICAgIHNwbGl0cyA9IE9mZnNldFJhbmdlKHN0YXJ0X29mZnNldCwgc3RvcF9vZmZzZXQpLnNwbGl0KAogICAgICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc2VsZi5fbWluX2J1bmRsZV9zaXplKQogICAgICBmb3Igc3BsaXQgaW4gc3BsaXRzOgogICAgICAgIHlpZWxkIGlvYmFzZS5Tb3VyY2VCdW5kbGUoCiAgICAgICAgICAgIHNwbGl0LnN0b3AgLSBzcGxpdC5zdGFydCwKICAgICAgICAgICAgX1NpbmdsZUZpbGVTb3VyY2UoCiAgICAgICAgICAgICAgICAjIENvcHlpbmcgdGhpcyBzbyB0aGF0IGVhY2ggc3ViLXNvdXJjZSBnZXRzIGEgZnJlc2ggaW5zdGFuY2UuCiAgICAgICAgICAgICAgICBwaWNrbGVyLmxvYWRzKHBpY2tsZXIuZHVtcHMoc2VsZi5fZmlsZV9iYXNlZF9zb3VyY2UpKSwKICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVfbmFtZSwKICAgICAgICAgICAgICAgIHNwbGl0LnN0YXJ0LAogICAgICAgICAgICAgICAgc3BsaXQuc3RvcCwKICAgICAgICAgICAgICAgIG1pbl9idW5kbGVfc2l6ZT1zZWxmLl9taW5fYnVuZGxlX3NpemUsCiAgICAgICAgICAgICAgICBzcGxpdHRhYmxlPXNlbGYuX3NwbGl0dGFibGUpLAogICAgICAgICAgICBzcGxpdC5zdGFydCwKICAgICAgICAgICAgc3BsaXQuc3RvcCkKICAgIGVsc2U6CiAgICAgICMgUmV0dXJuaW5nIGEgc2luZ2xlIHN1Yi1zb3VyY2Ugd2l0aCBlbmQgb2Zmc2V0IHNldCB0byBPRkZTRVRfSU5GSU5JVFkgKHNvCiAgICAgICMgdGhhdCBhbGwgZGF0YSBvZiB0aGUgc291cmNlIGdldHMgcmVhZCkgc2luY2UgdGhpcyBzb3VyY2UgaXMKICAgICAgIyB1bnNwbGl0dGFibGUuIENob29zaW5nIHNpemUgb2YgdGhlIGZpbGUgYXMgZW5kIG9mZnNldCB3aWxsIGJlIHdyb25nIGZvcgogICAgICAjIGNlcnRhaW4gdW5zcGxpdHRhYmxlIHNvdXJjZSwgZS5nLiwgY29tcHJlc3NlZCBzb3VyY2VzLgogICAgICB5aWVsZCBpb2Jhc2UuU291cmNlQnVuZGxlKAogICAgICAgICAgc3RvcF9vZmZzZXQgLSBzdGFydF9vZmZzZXQsCiAgICAgICAgICBfU2luZ2xlRmlsZVNvdXJjZSgKICAgICAgICAgICAgICBzZWxmLl9maWxlX2Jhc2VkX3NvdXJjZSwKICAgICAgICAgICAgICBzZWxmLl9maWxlX25hbWUsCiAgICAgICAgICAgICAgc3RhcnRfb2Zmc2V0LAogICAgICAgICAgICAgIHJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5PRkZTRVRfSU5GSU5JVFksCiAgICAgICAgICAgICAgbWluX2J1bmRsZV9zaXplPXNlbGYuX21pbl9idW5kbGVfc2l6ZSwKICAgICAgICAgICAgICBzcGxpdHRhYmxlPXNlbGYuX3NwbGl0dGFibGUpLAogICAgICAgICAgc3RhcnRfb2Zmc2V0LAogICAgICAgICAgcmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyLk9GRlNFVF9JTkZJTklUWSkKCiAgZGVmIGVzdGltYXRlX3NpemUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3RvcF9vZmZzZXQgLSBzZWxmLl9zdGFydF9vZmZzZXQKCiAgZGVmIGdldF9yYW5nZV90cmFja2VyKHNlbGYsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKToKICAgIGlmIHN0YXJ0X3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0YXJ0X3Bvc2l0aW9uID0gc2VsZi5fc3RhcnRfb2Zmc2V0CiAgICBpZiBzdG9wX3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgICMgSWYgZmlsZSBpcyB1bnNwbGl0dGFibGUgd2UgY2hvb3NlIE9GRlNFVF9JTkZJTklUWSBhcyB0aGUgZGVmYXVsdCBlbmQKICAgICAgIyBvZmZzZXQgc28gdGhhdCBhbGwgZGF0YSBvZiB0aGUgc291cmNlIGdldHMgcmVhZC4gQ2hvb3Npbmcgc2l6ZSBvZiB0aGUKICAgICAgIyBmaWxlIGFzIGVuZCBvZmZzZXQgd2lsbCBiZSB3cm9uZyBmb3IgY2VydGFpbiB1bnNwbGl0dGFibGUgc291cmNlLCBmb3IKICAgICAgIyBlLmcuLCBjb21wcmVzc2VkIHNvdXJjZXMuCiAgICAgIHN0b3BfcG9zaXRpb24gPSAoCiAgICAgICAgICBzZWxmLl9zdG9wX29mZnNldCBpZiBzZWxmLl9zcGxpdHRhYmxlIGVsc2UKICAgICAgICAgIHJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlci5PRkZTRVRfSU5GSU5JVFkpCgogICAgcmFuZ2VfdHJhY2tlciA9IHJhbmdlX3RyYWNrZXJzLk9mZnNldFJhbmdlVHJhY2tlcigKICAgICAgICBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikKICAgIGlmIG5vdCBzZWxmLl9zcGxpdHRhYmxlOgogICAgICByYW5nZV90cmFja2VyID0gcmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyKHJhbmdlX3RyYWNrZXIpCgogICAgcmV0dXJuIHJhbmdlX3RyYWNrZXIKCiAgZGVmIHJlYWQoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICByZXR1cm4gc2VsZi5fZmlsZV9iYXNlZF9zb3VyY2UucmVhZF9yZWNvcmRzKHNlbGYuX2ZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcikKCiAgZGVmIGRlZmF1bHRfb3V0cHV0X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2ZpbGVfYmFzZWRfc291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkKCgpjbGFzcyBfRXhwYW5kSW50b1JhbmdlcyhEb0ZuKToKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIHNwbGl0dGFibGUsIGNvbXByZXNzaW9uX3R5cGUsIGRlc2lyZWRfYnVuZGxlX3NpemUsIG1pbl9idW5kbGVfc2l6ZSk6CiAgICBzZWxmLl9kZXNpcmVkX2J1bmRsZV9zaXplID0gZGVzaXJlZF9idW5kbGVfc2l6ZQogICAgc2VsZi5fbWluX2J1bmRsZV9zaXplID0gbWluX2J1bmRsZV9zaXplCiAgICBzZWxmLl9zcGxpdHRhYmxlID0gc3BsaXR0YWJsZQogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIG1hdGNoX3Jlc3VsdHMgPSBGaWxlU3lzdGVtcy5tYXRjaChbZWxlbWVudF0pCiAgICBmb3IgbWV0YWRhdGEgaW4gbWF0Y2hfcmVzdWx0c1swXS5tZXRhZGF0YV9saXN0OgogICAgICBzcGxpdHRhYmxlID0gKAogICAgICAgICAgc2VsZi5fc3BsaXR0YWJsZSBhbmQgX2RldGVybWluZV9zcGxpdHRhYmlsaXR5X2Zyb21fY29tcHJlc3Npb25fdHlwZSgKICAgICAgICAgICAgICBtZXRhZGF0YS5wYXRoLCBzZWxmLl9jb21wcmVzc2lvbl90eXBlKSkKCiAgICAgIGlmIHNwbGl0dGFibGU6CiAgICAgICAgZm9yIHNwbGl0IGluIE9mZnNldFJhbmdlKDAsIG1ldGFkYXRhLnNpemVfaW5fYnl0ZXMpLnNwbGl0KAogICAgICAgICAgICBzZWxmLl9kZXNpcmVkX2J1bmRsZV9zaXplLCBzZWxmLl9taW5fYnVuZGxlX3NpemUpOgogICAgICAgICAgeWllbGQgKG1ldGFkYXRhLCBzcGxpdCkKICAgICAgZWxzZToKICAgICAgICB5aWVsZCAoCiAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICBPZmZzZXRSYW5nZSgwLCByYW5nZV90cmFja2Vycy5PZmZzZXRSYW5nZVRyYWNrZXIuT0ZGU0VUX0lORklOSVRZKSkKCgpjbGFzcyBfUmVhZFJhbmdlKERvRm4pOgogIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2VfZnJvbV9maWxlKToKICAgICMgdHlwZTogKENhbGxhYmxlW1tzdHJdLCBpb2Jhc2UuQm91bmRlZFNvdXJjZV0pIC0+IE5vbmUKICAgIHNlbGYuX3NvdXJjZV9mcm9tX2ZpbGUgPSBzb3VyY2VfZnJvbV9maWxlCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICBtZXRhZGF0YSwgcmFuZ2UgPSBlbGVtZW50CiAgICBzb3VyY2UgPSBzZWxmLl9zb3VyY2VfZnJvbV9maWxlKG1ldGFkYXRhLnBhdGgpCiAgICAjIEZvbGxvd2luZyBzcGxpdCgpIG9wZXJhdGlvbiBoYXMgdG8gYmUgcGVyZm9ybWVkIHRvIGNyZWF0ZSBhIHByb3BlcgogICAgIyBfU2luZ2xlRmlsZVNvdXJjZS4gT3RoZXJ3aXNlIHdoYXQgd2UgaGF2ZSBpcyBhIENvbmNhdFNvdXJjZSB0aGF0IGNvbnRhaW5zCiAgICAjIGEgc2luZ2xlIF9TaW5nbGVGaWxlU291cmNlLiBDb25jYXRTb3VyY2UucmVhZCgpIGV4cGVjdHMgYSBSYW5nZVRyYWtlciBmb3IKICAgICMgc3ViLXNvdXJjZSByYW5nZSBhbmQgcmVhZHMgZnVsbCBzdWItc291cmNlcyAobm90IGJ5dGUgcmFuZ2VzKS4KICAgIHNvdXJjZSA9IGxpc3Qoc291cmNlLnNwbGl0KGZsb2F0KCdpbmYnKSkpWzBdLnNvdXJjZQogICAgZm9yIHJlY29yZCBpbiBzb3VyY2UucmVhZChyYW5nZS5uZXdfdHJhY2tlcigpKToKICAgICAgeWllbGQgcmVjb3JkCgoKY2xhc3MgUmVhZEFsbEZpbGVzKFBUcmFuc2Zvcm0pOgogICIiIkEgUmVhZCB0cmFuc2Zvcm0gdGhhdCByZWFkcyBhIFBDb2xsZWN0aW9uIG9mIGZpbGVzLgoKICBQaXBlbGluZSBhdXRob3JzIHNob3VsZCBub3QgdXNlIHRoaXMgZGlyZWN0bHkuIFRoaXMgaXMgdG8gYmUgdXNlZCBieSBSZWFkCiAgUFRyYW5zZm9ybSBhdXRob3JzIHdobyB3aXNoZXMgdG8gaW1wbGVtZW50IGZpbGUtYmFzZWQgUmVhZCB0cmFuc2Zvcm1zIHRoYXQKICByZWFkIGEgUENvbGxlY3Rpb24gb2YgZmlsZXMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBzcGxpdHRhYmxlLCAgIyB0eXBlOiBib29sCiAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemUsICAjIHR5cGU6IGludAogICAgICAgICAgICAgICBtaW5fYnVuZGxlX3NpemUsICAjIHR5cGU6IGludAogICAgICAgICAgICAgICBzb3VyY2VfZnJvbV9maWxlLCAgIyB0eXBlOiBDYWxsYWJsZVtbc3RyXSwgaW9iYXNlLkJvdW5kZWRTb3VyY2VdCiAgICAgICAgICAgICAgKToKICAgICIiIgogICAgQXJnczoKICAgICAgc3BsaXR0YWJsZTogSWYgRmFsc2UsIGZpbGVzIHdvbid0IGJlIHNwbGl0IGludG8gc3ViLXJhbmdlcy4gSWYgVHJ1ZSwKICAgICAgICAgICAgICAgICAgZmlsZXMgbWF5IG9yIG1heSBub3QgYmUgc3BsaXQgaW50byBkYXRhIHJhbmdlcy4KICAgICAgY29tcHJlc3Npb25fdHlwZTogQSBgYENvbXByZXNzaW9uVHlwZWBgIG9iamVjdCB0aGF0IHNwZWNpZmllcyB0aGUKICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSBvZiB0aGUgZmlsZXMgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZC4gSWYKICAgICAgICAgICAgICAgICAgYGBDb21wcmVzc2lvblR5cGUuQVVUT2BgLCBzeXN0ZW0gd2lsbCB0cnkgdG8gYXV0b21hdGljYWxseQogICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgdGhlIGNvbXByZXNzaW9uIHR5cGUgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZgogICAgICAgICAgICAgICAgICBmaWxlcy4KICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZTogdGhlIGRlc2lyZWQgc2l6ZSBvZiBkYXRhIHJhbmdlcyB0aGF0IHNob3VsZCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgd2hlbiBzcGxpdHRpbmcgYSBmaWxlIGludG8gZGF0YSByYW5nZXMuCiAgICAgIG1pbl9idW5kbGVfc2l6ZTogbWluaW11bSBzaXplIG9mIGRhdGEgcmFuZ2VzIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGluZyBhIGZpbGUgaW50byBkYXRhIHJhbmdlcy4KICAgICAgc291cmNlX2Zyb21fZmlsZTogYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGEgYGBCb3VuZGVkU291cmNlYGAgZ2l2ZW4gYQogICAgICAgICAgICAgICAgICAgICAgICBmaWxlIG5hbWUuIFN5c3RlbSB3aWxsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdlbmVyYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGBgQm91bmRlZFNvdXJjZWBgIG9iamVjdHMgZm9yIGZpbGUgcGF0aHMuIE5vdGUgdGhhdCBmaWxlCiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzIHBhc3NlZCB0byB0aGlzIHdpbGwgYmUgZm9yIGluZGl2aWR1YWwgZmlsZXMsIG5vdAogICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZSBwYXR0ZXJucyBldmVuIGlmIHRoZSBgYFBDb2xsZWN0aW9uYGAgb2YgZmlsZXMKICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIGJ5IHRoZSB0cmFuc2Zvcm0gY29uc2lzdCBvZiBmaWxlIHBhdHRlcm5zLgogICAgIiIiCiAgICBzZWxmLl9zcGxpdHRhYmxlID0gc3BsaXR0YWJsZQogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKICAgIHNlbGYuX2Rlc2lyZWRfYnVuZGxlX3NpemUgPSBkZXNpcmVkX2J1bmRsZV9zaXplCiAgICBzZWxmLl9taW5fYnVuZGxlX3NpemUgPSBtaW5fYnVuZGxlX3NpemUKICAgIHNlbGYuX3NvdXJjZV9mcm9tX2ZpbGUgPSBzb3VyY2VfZnJvbV9maWxlCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJldHVybiAoCiAgICAgICAgcHZhbHVlCiAgICAgICAgfCAnRXhwYW5kSW50b1JhbmdlcycgPj4gUGFyRG8oCiAgICAgICAgICAgIF9FeHBhbmRJbnRvUmFuZ2VzKAogICAgICAgICAgICAgICAgc2VsZi5fc3BsaXR0YWJsZSwKICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICAgICAgICBzZWxmLl9kZXNpcmVkX2J1bmRsZV9zaXplLAogICAgICAgICAgICAgICAgc2VsZi5fbWluX2J1bmRsZV9zaXplKSkKICAgICAgICB8ICdSZXNoYXJkJyA+PiBSZXNodWZmbGUoKQogICAgICAgIHwgJ1JlYWRSYW5nZScgPj4gUGFyRG8oX1JlYWRSYW5nZShzZWxmLl9zb3VyY2VfZnJvbV9maWxlKSkpCpR9lCiMGEZpbGVCYXNlZFNvdXJjZS5fX2luaXRfX5RqVjEBAEtCS4CHlIwcRmlsZUJhc2VkU291cmNlLmRpc3BsYXlfZGF0YZRqVjEBAEuCS4iHlIwiRmlsZUJhc2VkU291cmNlLl9nZXRfY29uY2F0X3NvdXJjZZRqVjEBAEuKS66HlIwZRmlsZUJhc2VkU291cmNlLm9wZW5fZmlsZZRqVjEBAEuwS7SHlIwZRmlsZUJhc2VkU291cmNlLl92YWxpZGF0ZZRqVjEBAEu2S7+HlIwVRmlsZUJhc2VkU291cmNlLnNwbGl0lGpWMQEAS8FLxoeUjB1GaWxlQmFzZWRTb3VyY2UuZXN0aW1hdGVfc2l6ZZRqVjEBAEvIS8yHlIwURmlsZUJhc2VkU291cmNlLnJlYWSUalYxAQBLzkvPh5SMIUZpbGVCYXNlZFNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcpRqVjEBAEvRS9OHlIwcRmlsZUJhc2VkU291cmNlLnJlYWRfcmVjb3Jkc5RqVjEBAEvVS+aHlIwaRmlsZUJhc2VkU291cmNlLnNwbGl0dGFibGWUalYxAQBL6Evqh5SMD0ZpbGVCYXNlZFNvdXJjZZRqXTEBAEs7S+qHlIwuX2RldGVybWluZV9zcGxpdHRhYmlsaXR5X2Zyb21fY29tcHJlc3Npb25fdHlwZZRqVjEBAEvtS/GHlIwaX1NpbmdsZUZpbGVTb3VyY2UuX19pbml0X1+UalYxAQBL9k0RAYeUjBdfU2luZ2xlRmlsZVNvdXJjZS5zcGxpdJRqVjEBAE0TAU04AYeUjB9fU2luZ2xlRmlsZVNvdXJjZS5lc3RpbWF0ZV9zaXpllGpWMQEATToBTTsBh5SMI19TaW5nbGVGaWxlU291cmNlLmdldF9yYW5nZV90cmFja2VylGpWMQEATT0BTU4Bh5SMFl9TaW5nbGVGaWxlU291cmNlLnJlYWSUalYxAQBNUAFNUQGHlIwmX1NpbmdsZUZpbGVTb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXKUalYxAQBNUwFNVAGHlIwRX1NpbmdsZUZpbGVTb3VyY2WUal0xAQBL9E1UAYeUjBpfRXhwYW5kSW50b1Jhbmdlcy5fX2luaXRfX5RqVjEBAE1YAU1dAYeUjBlfRXhwYW5kSW50b1Jhbmdlcy5wcm9jZXNzlGpWMQEATV8BTW0Bh5SMEV9FeHBhbmRJbnRvUmFuZ2VzlGpdMQEATVcBTW0Bh5SME19SZWFkUmFuZ2UuX19pbml0X1+UalYxAQBNcQFNcwGHlIwSX1JlYWRSYW5nZS5wcm9jZXNzlGpWMQEATXUBTX4Bh5SMCl9SZWFkUmFuZ2WUal0xAQBNcAFNfgGHlIwVUmVhZEFsbEZpbGVzLl9faW5pdF9flGpWMQEATYkBTagBh5SME1JlYWRBbGxGaWxlcy5leHBhbmSUalYxAQBNqgFNtAGHlIwMUmVhZEFsbEZpbGVzlGpdMQEATYEBTbQBh5R1fZQojA9GaWxlQmFzZWRTb3VyY2WUaokDAACMHEZpbGVCYXNlZFNvdXJjZS5kaXNwbGF5X2RhdGGUaokDAACMGUZpbGVCYXNlZFNvdXJjZS5vcGVuX2ZpbGWUaokDAACMFUZpbGVCYXNlZFNvdXJjZS5zcGxpdJRqiQMAAIwdRmlsZUJhc2VkU291cmNlLmVzdGltYXRlX3NpemWUaokDAACMFEZpbGVCYXNlZFNvdXJjZS5yZWFklGqJAwAAjCFGaWxlQmFzZWRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXKUaokDAACMHEZpbGVCYXNlZFNvdXJjZS5yZWFkX3JlY29yZHOUaokDAAB1jB5hcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2WUdJSMFWFwYWNoZV9iZWFtLmlvLmZpbGVpb5QoWFhiAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiImBgUFRyYW5zZm9ybXNgYCBmb3IgbWFuaXB1bGF0aW5nIGZpbGVzIGluIEFwYWNoZSBCZWFtLgoKUHJvdmlkZXMgcmVhZGluZyBgYFBUcmFuc2Zvcm1gYFxccywgYGBNYXRjaEZpbGVzYGAsCmBgTWF0Y2hBbGxgYCwgdGhhdCBwcm9kdWNlcyBhIGBgUENvbGxlY3Rpb25gYCBvZiByZWNvcmRzIHJlcHJlc2VudGluZyBhIGZpbGUKYW5kIGl0cyBtZXRhZGF0YTsgYW5kIGBgUmVhZE1hdGNoZXNgYCwgd2hpY2ggdGFrZXMgaW4gYSBgYFBDb2xsZWN0aW9uYGAgb2YgZmlsZQptZXRhZGF0YSByZWNvcmRzLCBhbmQgcHJvZHVjZXMgYSBgYFBDb2xsZWN0aW9uYGAgb2YgYGBSZWFkYWJsZUZpbGVgYCBvYmplY3RzLgpUaGVzZSB0cmFuc2Zvcm1zIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgYnkgdGhlbXNlbHZlcy4KCldyaXRpbmcgdG8gRmlsZXMKPT09PT09PT09PT09PT09PQoKVGhlIHRyYW5zZm9ybXMgaW4gdGhpcyBmaWxlIGluY2x1ZGUgYGBXcml0ZVRvRmlsZXNgYCwgd2hpY2ggYWxsb3dzIHlvdSB0byB3cml0ZQphIGBgYmVhbS5QQ29sbGVjdGlvbmBgIHRvIGZpbGVzLCBhbmQgZ2l2ZXMgeW91IG1hbnkgb3B0aW9ucyB0byBjdXN0b21pemUgaG93IHRvCmRvIHRoaXMuCgpUaGUgYGBXcml0ZVRvRmlsZXNgYCB0cmFuc2Zvcm0gc3VwcG9ydHMgYm91bmRlZCBhbmQgdW5ib3VuZGVkIFBDb2xsZWN0aW9ucwooaS5lLiBpdCBjYW4gYmUgdXNlZCBib3RoIGJhdGNoIGFuZCBzdHJlYW1pbmcgcGlwZWxpbmVzKS4gRm9yIHN0cmVhbWluZwpwaXBlbGluZXMsIGl0IGN1cnJlbnRseSBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIG11bHRpcGxlIHRyaWdnZXIgZmlyaW5ncwpvbiB0aGUgc2FtZSB3aW5kb3cuCgpGaWxlIE5hbWluZwotLS0tLS0tLS0tLQpPbmUgb2YgdGhlIHBhcmFtZXRlcnMgcmVjZWl2ZWQgYnkgYGBXcml0ZVRvRmlsZXNgYCBpcyBhIGZ1bmN0aW9uIHNwZWNpZnlpbmcgaG93CnRvIG5hbWUgdGhlIGZpbGVzIHRoYXQgYXJlIHdyaXR0ZW4uIFRoaXMgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGluIHRoZQpmb2xsb3dpbmcgcGFyYW1ldGVyczoKCi0gd2luZG93Ci0gcGFuZQotIHNoYXJkX2luZGV4Ci0gdG90YWxfc2hhcmRzCi0gY29tcHJlc3Npb24KLSBkZXN0aW5hdGlvbgoKSXQgc2hvdWxkIHJldHVybiBhIGZpbGUgbmFtZSB0aGF0IGlzIHVuaXF1ZSBmb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVzZQpwYXJhbWV0ZXJzLgoKVGhlIGRlZmF1bHQgbmFtaW5nIHN0cmF0ZWd5IGlzIHRvIG5hbWUgZmlsZXMKaW4gdGhlIGZvcm1hdApgJHByZWZpeC0kc3RhcnQtJGVuZC0kcGFuZS0kc2hhcmQtb2YtJG51bVNoYXJkcyRzdWZmaXgkY29tcHJlc3Npb25TdWZmaXhgLAp3aGVyZToKCi0gYCRwcmVmaXhgIGlzLCBieSBkZWZhdWx0LCBgIm91dHB1dCJgLgotIGAkc3RhcnRgIGFuZCBgJGVuZGAgYXJlIHRoZSBib3VuZGFyaWVzIG9mIHRoZSB3aW5kb3cgZm9yIHRoZSBkYXRhIGJlaW5nCiAgd3JpdHRlbi4gVGhlc2UgYXJlIG9taXR0ZWQgaWYgd2UncmUgdXNpbmcgdGhlIEdsb2JhbCB3aW5kb3cuCi0gYCRwYW5lYCBpcyB0aGUgaW5kZXggZm9yIHRoZSBudW1iZXIgb2YgZmlyaW5nIGZvciBhIHdpbmRvdy4KLSBgJHNoYXJkYCBhbmQgYCRudW1TaGFyZHNgIGFyZSB0aGUgY3VycmVudCBzaGFyZCBudW1iZXIsIGFuZCB0aGUgdG90YWwgbnVtYmVyCiAgb2Ygc2hhcmRzIGZvciB0aGlzIHdpbmRvdyBmaXJpbmcuCi0gYCRzdWZmaXhgIGlzLCBieSBkZWZhdWx0LCBhbiBlbXB0eSBzdHJpbmcsIGJ1dCBpdCBjYW4gYmUgc2V0IGJ5IHRoZSB1c2VyIHZpYQogIGBgZGVmYXVsdF9maWxlX25hbWluZ2BgLgoKRHluYW1pYyBEZXN0aW5hdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0KSWYgdGhlIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBgYGJlYW0uUENvbGxlY3Rpb25gYCBjYW4gYmUgcGFydGl0aW9uZWQgaW50byBncm91cHMKdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBkaWZmZXJlbnRseSAoZS5nLiBzb21lIGV2ZW50cyBhcmUgdG8gYmUgc3RvcmVkIGFzIENTViwKd2hpbGUgc29tZSBvdGhlcnMgYXJlIHRvIGJlIHN0b3JlZCBhcyBBdnJvIGZpbGVzKSwgaXQgaXMgcG9zc2libGUgdG8gZG8gdGhpcwpieSBwYXNzaW5nIGEgYGRlc3RpbmF0aW9uYCBwYXJhbWV0ZXIgdG8gYGBXcml0ZVRvRmlsZXNgYC4gU29tZXRoaW5nIGxpa2UgdGhlCmZvbGxvd2luZzo6CgogICAgbXlfcGNvbGxlY3Rpb24gfCBiZWFtLmlvLmZpbGVpby5Xcml0ZVRvRmlsZXMoCiAgICAgICAgICBwYXRoPScvbXkvZmlsZS9wYXRoJywKICAgICAgICAgIGRlc3RpbmF0aW9uPWxhbWJkYSByZWNvcmQ6ICdhdnJvJyBpZiByZWNvcmRbJ3R5cGUnXSA9PSAnQScgZWxzZSAnY3N2JywKICAgICAgICAgIHNpbms9bGFtYmRhIGRlc3Q6IEF2cm9TaW5rKCkgaWYgZGVzdCA9PSAnYXZybycgZWxzZSBDc3ZTaW5rKCksCiAgICAgICAgICBmaWxlX25hbWluZz1iZWFtLmlvLmZpbGVpby5kZXN0aW5hdGlvbl9wcmVmaXhfbmFtaW5nKCkpCgpJbiB0aGlzIHRyYW5zZm9ybSwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGEgcmVjb3JkLCBpdCB3aWxsIGJlIHdyaXR0ZW4gZG93biB0bwphIGRlc3RpbmF0aW9uIG5hbWVkIGAnYXZybydgLCBvciBgJ2NzdidgLiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlCmBkZXN0aW5hdGlvbmAgY2FsbCBpcyB0aGVuIHBhc3NlZCB0byB0aGUgYHNpbmtgIGNhbGwsIHRvIGRldGVybWluZSB3aGF0IHNvcnQgb2YKc2luayB3aWxsIGJlIHVzZWQgZm9yIGVhY2ggZGVzdGluYXRpb24uIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYGRlc3RpbmF0aW9uYApwYXJhbWV0ZXIgY2FuIGJlIGFueXRoaW5nLCBhcyBsb25nIGFzIGVsZW1lbnRzIGNhbiBiZSBncm91cGVkIGJ5IGl0LgoKTm8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiBFdmVyeXRoaW5nIGluIHRoaXMgbW9kdWxlIGlzIGV4cGVyaW1lbnRhbC4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBsb2dnaW5nCmltcG9ydCByYW5kb20KaW1wb3J0IHV1aWQKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgQmluYXJ5SU8gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBEZWZhdWx0RGljdApmcm9tIHR5cGluZyBpbXBvcnQgRGljdApmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZXN5c3RlbQpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlc3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBTdGF0aWNWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBHbG9iYWxXaW5kb3cKZnJvbSBhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucyBpbXBvcnQgZXhwZXJpbWVudGFsCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEJvdW5kZWRXaW5kb3cKCl9fYWxsX18gPSBbCiAgICAnRW1wdHlNYXRjaFRyZWF0bWVudCcsCiAgICAnTWF0Y2hGaWxlcycsCiAgICAnTWF0Y2hBbGwnLAogICAgJ1JlYWRhYmxlRmlsZScsCiAgICAnUmVhZE1hdGNoZXMnCl0KCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBFbXB0eU1hdGNoVHJlYXRtZW50KG9iamVjdCk6CiAgIiIiSG93IHRvIHRyZWF0IGVtcHR5IG1hdGNoZXMgaW4gYGBNYXRjaEFsbGBgIGFuZCBgYE1hdGNoRmlsZXNgYCB0cmFuc2Zvcm1zLgoKICBJZiBlbXB0eSBtYXRjaGVzIGFyZSBkaXNhbGxvd2VkLCBhbiBlcnJvciB3aWxsIGJlIHRocm93biBpZiBhIHBhdHRlcm4gZG9lcyBub3QKICBtYXRjaCBhbnkgZmlsZXMuIiIiCgogIEFMTE9XID0gJ0FMTE9XJwogIERJU0FMTE9XID0gJ0RJU0FMTE9XJwogIEFMTE9XX0lGX1dJTERDQVJEID0gJ0FMTE9XX0lGX1dJTERDQVJEJwoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGFsbG93X2VtcHR5X21hdGNoKHBhdHRlcm4sIHNldHRpbmcpOgogICAgaWYgc2V0dGluZyA9PSBFbXB0eU1hdGNoVHJlYXRtZW50LkFMTE9XOgogICAgICByZXR1cm4gVHJ1ZQogICAgZWxpZiBzZXR0aW5nID09IEVtcHR5TWF0Y2hUcmVhdG1lbnQuQUxMT1dfSUZfV0lMRENBUkQgYW5kICcqJyBpbiBwYXR0ZXJuOgogICAgICByZXR1cm4gVHJ1ZQogICAgZWxpZiBzZXR0aW5nID09IEVtcHR5TWF0Y2hUcmVhdG1lbnQuRElTQUxMT1c6CiAgICAgIHJldHVybiBGYWxzZQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcihzZXR0aW5nKQoKCmNsYXNzIF9NYXRjaEFsbEZuKGJlYW0uRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGVtcHR5X21hdGNoX3RyZWF0bWVudCk6CiAgICBzZWxmLl9lbXB0eV9tYXRjaF90cmVhdG1lbnQgPSBlbXB0eV9tYXRjaF90cmVhdG1lbnQKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZmlsZV9wYXR0ZXJuKToKICAgICMgVE9ETzogU2hvdWxkIHdlIGJhdGNoIHRoZSBsb29rdXBzPwogICAgbWF0Y2hfcmVzdWx0cyA9IGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLm1hdGNoKFtmaWxlX3BhdHRlcm5dKQogICAgbWF0Y2hfcmVzdWx0ID0gbWF0Y2hfcmVzdWx0c1swXQoKICAgIGlmIChub3QgbWF0Y2hfcmVzdWx0Lm1ldGFkYXRhX2xpc3QgYW5kCiAgICAgICAgbm90IEVtcHR5TWF0Y2hUcmVhdG1lbnQuYWxsb3dfZW1wdHlfbWF0Y2goZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2VtcHR5X21hdGNoX3RyZWF0bWVudCkpOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigKICAgICAgICAgICdFbXB0eSBtYXRjaCBmb3IgcGF0dGVybiAlcy4gRGlzYWxsb3dlZC4nICUgZmlsZV9wYXR0ZXJuKQoKICAgIHJldHVybiBtYXRjaF9yZXN1bHQubWV0YWRhdGFfbGlzdAoKCkBleHBlcmltZW50YWwoKQpjbGFzcyBNYXRjaEZpbGVzKGJlYW0uUFRyYW5zZm9ybSk6CiAgIiIiTWF0Y2hlcyBhIGZpbGUgcGF0dGVybiB1c2luZyBgYEZpbGVTeXN0ZW1zLm1hdGNoYGAuCgogIFRoaXMgYGBQVHJhbnNmb3JtYGAgcmV0dXJucyBhIGBgUENvbGxlY3Rpb25gYCBvZiBtYXRjaGluZyBmaWxlcyBpbiB0aGUgZm9ybQogIG9mIGBgRmlsZU1ldGFkYXRhYGAgb2JqZWN0cy4iIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0dGVybiwKICAgICAgZW1wdHlfbWF0Y2hfdHJlYXRtZW50PUVtcHR5TWF0Y2hUcmVhdG1lbnQuQUxMT1dfSUZfV0lMRENBUkQpOgogICAgc2VsZi5fZmlsZV9wYXR0ZXJuID0gZmlsZV9wYXR0ZXJuCiAgICBzZWxmLl9lbXB0eV9tYXRjaF90cmVhdG1lbnQgPSBlbXB0eV9tYXRjaF90cmVhdG1lbnQKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwucGlwZWxpbmUgfCBiZWFtLkNyZWF0ZShbc2VsZi5fZmlsZV9wYXR0ZXJuXSkgfCBNYXRjaEFsbCgpCgoKQGV4cGVyaW1lbnRhbCgpCmNsYXNzIE1hdGNoQWxsKGJlYW0uUFRyYW5zZm9ybSk6CiAgIiIiTWF0Y2hlcyBmaWxlIHBhdHRlcm5zIGZyb20gdGhlIGlucHV0IFBDb2xsZWN0aW9uIHZpYSBgYEZpbGVTeXN0ZW1zLm1hdGNoYGAuCgogIFRoaXMgYGBQVHJhbnNmb3JtYGAgcmV0dXJucyBhIGBgUENvbGxlY3Rpb25gYCBvZiBtYXRjaGluZyBmaWxlcyBpbiB0aGUgZm9ybQogIG9mIGBgRmlsZU1ldGFkYXRhYGAgb2JqZWN0cy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgZW1wdHlfbWF0Y2hfdHJlYXRtZW50PUVtcHR5TWF0Y2hUcmVhdG1lbnQuQUxMT1cpOgogICAgc2VsZi5fZW1wdHlfbWF0Y2hfdHJlYXRtZW50ID0gZW1wdHlfbWF0Y2hfdHJlYXRtZW50CgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgYmVhbS5QYXJEbyhfTWF0Y2hBbGxGbihzZWxmLl9lbXB0eV9tYXRjaF90cmVhdG1lbnQpKQoKCmNsYXNzIF9SZWFkTWF0Y2hlc0ZuKGJlYW0uRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbXByZXNzaW9uLCBza2lwX2RpcmVjdG9yaWVzKToKICAgIHNlbGYuX2NvbXByZXNzaW9uID0gY29tcHJlc3Npb24KICAgIHNlbGYuX3NraXBfZGlyZWN0b3JpZXMgPSBza2lwX2RpcmVjdG9yaWVzCgogIGRlZiBwcm9jZXNzKHNlbGYsIGZpbGVfbWV0YWRhdGEpOgogICAgbWV0YWRhdGEgPSAoCiAgICAgICAgZmlsZXN5c3RlbS5GaWxlTWV0YWRhdGEoZmlsZV9tZXRhZGF0YSwgMCkgaWYgaXNpbnN0YW5jZSgKICAgICAgICAgICAgZmlsZV9tZXRhZGF0YSwgKHN0ciwgdW5pY29kZSkpIGVsc2UgZmlsZV9tZXRhZGF0YSkKCiAgICBpZiAoKG1ldGFkYXRhLnBhdGguZW5kc3dpdGgoJy8nKSBvciBtZXRhZGF0YS5wYXRoLmVuZHN3aXRoKCdcXCcpKSBhbmQKICAgICAgICBzZWxmLl9za2lwX2RpcmVjdG9yaWVzKToKICAgICAgcmV0dXJuCiAgICBlbGlmIG1ldGFkYXRhLnBhdGguZW5kc3dpdGgoJy8nKSBvciBtZXRhZGF0YS5wYXRoLmVuZHN3aXRoKCdcXCcpOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigKICAgICAgICAgICdEaXJlY3RvcmllcyBhcmUgbm90IGFsbG93ZWQgaW4gUmVhZE1hdGNoZXMgdHJhbnNmb3JtLicKICAgICAgICAgICdGb3VuZCAlcy4nICUgbWV0YWRhdGEucGF0aCkKCiAgICAjIFRPRE86IE1pbWUgdHlwZT8gT3RoZXIgYXJndW1lbnRzPyBNYXliZSBhcmd1bWVudHMgcGFzc2VkIGluIHRvIHRyYW5zZm9ybT8KICAgIHlpZWxkIFJlYWRhYmxlRmlsZShtZXRhZGF0YSwgc2VsZi5fY29tcHJlc3Npb24pCgoKY2xhc3MgUmVhZGFibGVGaWxlKG9iamVjdCk6CiAgIiIiQSB1dGlsaXR5IGNsYXNzIGZvciBhY2Nlc3NpbmcgZmlsZXMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGFkYXRhLCBjb21wcmVzc2lvbj1Ob25lKToKICAgIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YQogICAgc2VsZi5fY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbgoKICBkZWYgb3BlbihzZWxmLCBtaW1lX3R5cGU9J3RleHQvcGxhaW4nLCBjb21wcmVzc2lvbl90eXBlPU5vbmUpOgogICAgY29tcHJlc3Npb24gPSAoCiAgICAgICAgY29tcHJlc3Npb25fdHlwZSBvciBzZWxmLl9jb21wcmVzc2lvbiBvcgogICAgICAgIGZpbGVzeXN0ZW1zLkNvbXByZXNzaW9uVHlwZXMuQVVUTykKICAgIHJldHVybiBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5vcGVuKAogICAgICAgIHNlbGYubWV0YWRhdGEucGF0aCwgbWltZV90eXBlPW1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbikKCiAgZGVmIHJlYWQoc2VsZiwgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKToKICAgIHJldHVybiBzZWxmLm9wZW4obWltZV90eXBlKS5yZWFkKCkKCiAgZGVmIHJlYWRfdXRmOChzZWxmKToKICAgIHJldHVybiBzZWxmLm9wZW4oKS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCgoKQGV4cGVyaW1lbnRhbCgpCmNsYXNzIFJlYWRNYXRjaGVzKGJlYW0uUFRyYW5zZm9ybSk6CiAgIiIiQ29udmVydHMgZWFjaCByZXN1bHQgb2YgTWF0Y2hGaWxlcygpIG9yIE1hdGNoQWxsKCkgdG8gYSBSZWFkYWJsZUZpbGUuCgogICBUaGlzIGhlbHBzIHJlYWQgaW4gYSBmaWxlJ3MgY29udGVudHMgb3Igb2J0YWluIGEgZmlsZSBkZXNjcmlwdG9yLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21wcmVzc2lvbj1Ob25lLCBza2lwX2RpcmVjdG9yaWVzPVRydWUpOgogICAgc2VsZi5fY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbgogICAgc2VsZi5fc2tpcF9kaXJlY3RvcmllcyA9IHNraXBfZGlyZWN0b3JpZXMKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBiZWFtLlBhckRvKAogICAgICAgIF9SZWFkTWF0Y2hlc0ZuKHNlbGYuX2NvbXByZXNzaW9uLCBzZWxmLl9za2lwX2RpcmVjdG9yaWVzKSkKCgpjbGFzcyBGaWxlU2luayhvYmplY3QpOgogICIiIlNwZWNpZmllcyBob3cgdG8gd3JpdGUgZWxlbWVudHMgdG8gaW5kaXZpZHVhbCBmaWxlcyBpbiBgYFdyaXRlVG9GaWxlc2BgLgoKICAqKk5PVEU6IFRISVMgQ0xBU1MgSVMgRVhQRVJJTUVOVEFMLioqCgogIEEgU2luayBjbGFzcyBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nOgoKICAgLSBUaGUgYGBvcGVuYGAgbWV0aG9kLCB3aGljaCBpbml0aWFsaXplcyB3cml0aW5nIHRvIGEgZmlsZSBoYW5kbGVyIChpdCBpcyBub3QKICAgICByZXNwb25zaWJsZSBmb3Igb3BlbmluZyB0aGUgZmlsZSBoYW5kbGVyIGl0c2VsZikuCiAgIC0gVGhlIGBgd3JpdGVgYCBtZXRob2QsIHdoaWNoIHdyaXRlcyBhbiBlbGVtZW50IHRvIHRoZSBmaWxlIHRoYXQgd2FzIHBhc3NlZAogICAgIGluIGBgb3BlbmBgLgogICAtIFRoZSBgYGZsdXNoYGAgbWV0aG9kLCB3aGljaCBmbHVzaGVzIGFueSBidWZmZXJlZCBzdGF0ZS4gVGhpcyBpcyBtb3N0IG9mdGVuCiAgICAgY2FsbGVkIGJlZm9yZSBjbG9zaW5nIGEgZmlsZSAoYnV0IG5vdCBleGNsdXNpdmVseSBjYWxsZWQgaW4gdGhhdAogICAgIHNpdHVhdGlvbikuIFRoZSBzaW5rIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgY2xvc2luZyB0aGUgZmlsZSBoYW5kbGVyLgogICAiIiIKICBkZWYgb3BlbihzZWxmLCBmaCk6CiAgICAjIHR5cGU6IChCaW5hcnlJTykgLT4gTm9uZQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgd3JpdGUoc2VsZiwgcmVjb3JkKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGZsdXNoKHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCkBiZWFtLnR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHN0cikKY2xhc3MgVGV4dFNpbmsoRmlsZVNpbmspOgogICIiIkEgc2luayB0aGF0IGVuY29kZXMgdXRmOCBlbGVtZW50cywgYW5kIHdyaXRlcyB0byBmaWxlIGhhbmRsZXJzLgoKICAqKk5PVEU6IFRISVMgQ0xBU1MgSVMgRVhQRVJJTUVOVEFMLioqCgogIFRoaXMgc2luayBzaW1wbHkgY2FsbHMgZmlsZV9oYW5kbGVyLndyaXRlKHJlY29yZC5lbmNvZGUoJ3V0ZjgnKSArICdcbicpIG9uIGFsbAogIHJlY29yZHMgdGhhdCBjb21lIGludG8gaXQuCiAgIiIiCiAgZGVmIG9wZW4oc2VsZiwgZmgpOgogICAgc2VsZi5fZmggPSBmaAoKICBkZWYgd3JpdGUoc2VsZiwgcmVjb3JkKToKICAgIHNlbGYuX2ZoLndyaXRlKHJlY29yZC5lbmNvZGUoJ3V0ZjgnKSkKICAgIHNlbGYuX2ZoLndyaXRlKGInXG4nKQoKICBkZWYgZmx1c2goc2VsZik6CiAgICBzZWxmLl9maC5mbHVzaCgpCgoKZGVmIHByZWZpeF9uYW1pbmcocHJlZml4KToKICByZXR1cm4gZGVmYXVsdF9maWxlX25hbWluZyhwcmVmaXgpCgoKX0RFRkFVTFRfRklMRV9OQU1FX1RFTVBMQVRFID0gKAogICAgJ3twcmVmaXh9LXtzdGFydH0te2VuZH0te3BhbmV9LScKICAgICd7c2hhcmQ6MDVkfS17dG90YWxfc2hhcmRzOjA1ZH0nCiAgICAne3N1ZmZpeH17Y29tcHJlc3Npb259JykKCgpkZWYgZGVzdGluYXRpb25fcHJlZml4X25hbWluZygpOgogIGRlZiBfaW5uZXIod2luZG93LCBwYW5lLCBzaGFyZF9pbmRleCwgdG90YWxfc2hhcmRzLCBjb21wcmVzc2lvbiwgZGVzdGluYXRpb24pOgogICAga3dhcmdzID0gewogICAgICAgICdwcmVmaXgnOiBzdHIoZGVzdGluYXRpb24pLAogICAgICAgICdzdGFydCc6ICcnLAogICAgICAgICdlbmQnOiAnJywKICAgICAgICAncGFuZSc6ICcnLAogICAgICAgICdzaGFyZCc6IDAsCiAgICAgICAgJ3RvdGFsX3NoYXJkcyc6IDAsCiAgICAgICAgJ3N1ZmZpeCc6ICcnLAogICAgICAgICdjb21wcmVzc2lvbic6ICcnCiAgICB9CiAgICBpZiB0b3RhbF9zaGFyZHMgaXMgbm90IE5vbmUgYW5kIHNoYXJkX2luZGV4IGlzIG5vdCBOb25lOgogICAgICBrd2FyZ3NbJ3NoYXJkJ10gPSBpbnQoc2hhcmRfaW5kZXgpCiAgICAgIGt3YXJnc1sndG90YWxfc2hhcmRzJ10gPSBpbnQodG90YWxfc2hhcmRzKQoKICAgIGlmIHdpbmRvdyAhPSBHbG9iYWxXaW5kb3coKToKICAgICAga3dhcmdzWydzdGFydCddID0gd2luZG93LnN0YXJ0LnRvX3V0Y19kYXRldGltZSgpLmlzb2Zvcm1hdCgpCiAgICAgIGt3YXJnc1snZW5kJ10gPSB3aW5kb3cuZW5kLnRvX3V0Y19kYXRldGltZSgpLmlzb2Zvcm1hdCgpCgogICAgIyBUT0RPKEJFQU0tMzc1OSk6IEFkZCBzdXBwb3J0IGZvciBQYW5lSW5mbwogICAgIyBJZiB0aGUgUEFORSBpcyB0aGUgT05MWSBmaXJpbmcgaW4gdGhlIHdpbmRvdywgd2UgZG9uJ3QgYWRkIGl0LgogICAgI2lmIHBhbmUgYW5kIG5vdCAocGFuZS5pc19maXJzdCBhbmQgcGFuZS5pc19sYXN0KToKICAgICMgIGt3YXJnc1sncGFuZSddID0gcGFuZS5pbmRleAoKICAgIGlmIGNvbXByZXNzaW9uOgogICAgICBrd2FyZ3NbJ2NvbXByZXNzaW9uJ10gPSAnLiVzJyAlIGNvbXByZXNzaW9uCgogICAgcmV0dXJuIF9ERUZBVUxUX0ZJTEVfTkFNRV9URU1QTEFURS5mb3JtYXQoKiprd2FyZ3MpCgogIHJldHVybiBfaW5uZXIKCgpkZWYgZGVmYXVsdF9maWxlX25hbWluZyhwcmVmaXgsIHN1ZmZpeD1Ob25lKToKICBkZWYgX2lubmVyKHdpbmRvdywgcGFuZSwgc2hhcmRfaW5kZXgsIHRvdGFsX3NoYXJkcywgY29tcHJlc3Npb24sIGRlc3RpbmF0aW9uKToKICAgIGt3YXJncyA9IHsKICAgICAgICAncHJlZml4JzogcHJlZml4LAogICAgICAgICdzdGFydCc6ICcnLAogICAgICAgICdlbmQnOiAnJywKICAgICAgICAncGFuZSc6ICcnLAogICAgICAgICdzaGFyZCc6IDAsCiAgICAgICAgJ3RvdGFsX3NoYXJkcyc6IDAsCiAgICAgICAgJ3N1ZmZpeCc6ICcnLAogICAgICAgICdjb21wcmVzc2lvbic6ICcnCiAgICB9CiAgICBpZiB0b3RhbF9zaGFyZHMgaXMgbm90IE5vbmUgYW5kIHNoYXJkX2luZGV4IGlzIG5vdCBOb25lOgogICAgICBrd2FyZ3NbJ3NoYXJkJ10gPSBpbnQoc2hhcmRfaW5kZXgpCiAgICAgIGt3YXJnc1sndG90YWxfc2hhcmRzJ10gPSBpbnQodG90YWxfc2hhcmRzKQoKICAgIGlmIHdpbmRvdyAhPSBHbG9iYWxXaW5kb3coKToKICAgICAga3dhcmdzWydzdGFydCddID0gd2luZG93LnN0YXJ0LnRvX3V0Y19kYXRldGltZSgpLmlzb2Zvcm1hdCgpCiAgICAgIGt3YXJnc1snZW5kJ10gPSB3aW5kb3cuZW5kLnRvX3V0Y19kYXRldGltZSgpLmlzb2Zvcm1hdCgpCgogICAgIyBUT0RPKHBhYmxvZW0pOiBBZGQgc3VwcG9ydCBmb3IgUGFuZUluZm8KICAgICMgSWYgdGhlIFBBTkUgaXMgdGhlIE9OTFkgZmlyaW5nIGluIHRoZSB3aW5kb3csIHdlIGRvbid0IGFkZCBpdC4KICAgICNpZiBwYW5lIGFuZCBub3QgKHBhbmUuaXNfZmlyc3QgYW5kIHBhbmUuaXNfbGFzdCk6CiAgICAjICBrd2FyZ3NbJ3BhbmUnXSA9IHBhbmUuaW5kZXgKCiAgICBpZiBjb21wcmVzc2lvbjoKICAgICAga3dhcmdzWydjb21wcmVzc2lvbiddID0gJy4lcycgJSBjb21wcmVzc2lvbgogICAgaWYgc3VmZml4OgogICAgICBrd2FyZ3NbJ3N1ZmZpeCddID0gc3VmZml4CgogICAgcmV0dXJuIF9ERUZBVUxUX0ZJTEVfTkFNRV9URU1QTEFURS5mb3JtYXQoKiprd2FyZ3MpCgogIHJldHVybiBfaW5uZXIKCgpfRmlsZVJlc3VsdCA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCiAgICAnRmlsZVJlc3VsdCcsIFsKICAgICAgICAnZmlsZV9uYW1lJywKICAgICAgICAnc2hhcmRfaW5kZXgnLAogICAgICAgICd0b3RhbF9zaGFyZHMnLAogICAgICAgICd3aW5kb3cnLAogICAgICAgICdwYW5lJywKICAgICAgICAnZGVzdGluYXRpb24nCiAgICBdKQoKCiMgQWRkaW5nIGEgY2xhc3MgdG8gY29udGFpbiBQeURvYy4KY2xhc3MgRmlsZVJlc3VsdChfRmlsZVJlc3VsdCk6CiAgIiIiQSBkZXNjcmlwdG9yIG9mIGEgZmlsZSB0aGF0IGhhcyBiZWVuIHdyaXR0ZW4uIiIiCiAgcGFzcwoKCkBleHBlcmltZW50YWwoKQpjbGFzcyBXcml0ZVRvRmlsZXMoYmVhbS5QVHJhbnNmb3JtKToKICAiIiJXcml0ZSB0aGUgaW5jb21pbmcgUENvbGxlY3Rpb24gdG8gYSBzZXQgb2Ygb3V0cHV0IGZpbGVzLgoKICBUaGUgaW5jb21pbmcgYGBQQ29sbGVjdGlvbmBgIG1heSBiZSBib3VuZGVkIG9yIHVuYm91bmRlZC4KCiAgKipOb3RlOioqIEZvciB1bmJvdW5kZWQgYGBQQ29sbGVjdGlvbmBgcywgdGhpcyB0cmFuc2Zvcm0gZG9lcyBub3Qgc3VwcG9ydAogIG11bHRpcGxlIGZpcmluZ3MgcGVyIFdpbmRvdyAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgZmlsZXMgYXJlIG5hbWVkIG9ubHkgYnkKICB0aGVpciBkZXN0aW5hdGlvbiwgYW5kIHdpbmRvdywgYXQgdGhlIG1vbWVudCkuCiAgIiIiCgogICMgV2UgYWxsb3cgdXAgdG8gMjAgZGlmZmVyZW50IGRlc3RpbmF0aW9ucyB0byBiZSB3cml0dGVuIGluIGEgc2luZ2xlIGJ1bmRsZS4KICAjIFRvbyBtYW55IGZpbGVzIHdpbGwgYWRkIG1lbW9yeSBwcmVzc3VyZSB0byB0aGUgd29ya2VyLCBzbyB3ZSBsZXQgaXQgYmUgMjAuCiAgTUFYX05VTV9XUklURVJTX1BFUl9CVU5ETEUgPSAyMAoKICBERUZBVUxUX1NIQVJESU5HID0gNQoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIHBhdGgsCiAgICAgIGZpbGVfbmFtaW5nPU5vbmUsCiAgICAgIGRlc3RpbmF0aW9uPU5vbmUsCiAgICAgIHRlbXBfZGlyZWN0b3J5PU5vbmUsCiAgICAgIHNpbms9Tm9uZSwKICAgICAgc2hhcmRzPU5vbmUsCiAgICAgIG91dHB1dF9mbj1Ob25lLAogICAgICBtYXhfd3JpdGVyc19wZXJfYnVuZGxlPU1BWF9OVU1fV1JJVEVSU19QRVJfQlVORExFKToKICAgICIiIkluaXRpYWxpemVzIGEgV3JpdGVUb0ZpbGVzIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBwYXRoIChzdHIsIFZhbHVlUHJvdmlkZXIpOiBUaGUgZGlyZWN0b3J5IHRvIHdyaXRlIGZpbGVzIGludG8uCiAgICAgIGZpbGVfbmFtaW5nIChjYWxsYWJsZSk6IEEgY2FsbGFibGUgdGhhdCB0YWtlcyBpbiBhIHdpbmRvdywgcGFuZSwKICAgICAgICBzaGFyZF9pbmRleCwgdG90YWxfc2hhcmRzIGFuZCBjb21wcmVzc2lvbjsgYW5kIHJldHVybnMgYSBmaWxlIG5hbWUuCiAgICAgIGRlc3RpbmF0aW9uIChjYWxsYWJsZSk6IElmIHRoaXMgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBzaW5rIHBhcmFtZXRlcgogICAgICAgIG11c3QgYWxzbyBiZSBhIGNhbGxhYmxlLgogICAgICB0ZW1wX2RpcmVjdG9yeSAoc3RyLCBWYWx1ZVByb3ZpZGVyKTogVG8gZW5zdXJlIGF0b21pY2l0eSBpbiB0aGUgdHJhbnNmb3JtLAogICAgICAgIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiBpbnRvIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggYXJlIHdyaXR0ZW4gdG8gYQogICAgICAgIGRpcmVjdG9yeSB0aGF0IGlzIG1lYW50IHRvIGJlIHRlbXBvcmFyeSBhcyB3ZWxsLiBPbmNlIHRoZSB3aG9sZSBvdXRwdXQKICAgICAgICBoYXMgYmVlbiB3cml0dGVuLCB0aGUgZmlsZXMgYXJlIG1vdmVkIGludG8gdGhlaXIgZmluYWwgZGVzdGluYXRpb24sIGFuZAogICAgICAgIGdpdmVuIHRoZWlyIGZpbmFsIG5hbWVzLiBCeSBkZWZhdWx0LCB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3aWxsIGJlCiAgICAgICAgIHdpdGhpbiB0aGUgdGVtcF9sb2NhdGlvbiBvZiB5b3VyIHBpcGVsaW5lLgogICAgICBzaW5rIChjYWxsYWJsZSwgRmlsZVNpbmspOiBUaGUgc2luayB0byB1c2UgdG8gd3JpdGUgaW50byBhIGZpbGUuIEl0IHNob3VsZAogICAgICAgIGltcGxlbWVudCB0aGUgbWV0aG9kcyBvZiBhIGBgRmlsZVNpbmtgYC4gSWYgbm9uZSBpcyBwcm92aWRlZCwgYQogICAgICAgIGBgVGV4dFNpbmtgYCBpcyB1c2VkLgogICAgICBzaGFyZHMgKGludCk6IFRoZSBudW1iZXIgb2Ygc2hhcmRzIHBlciBkZXN0aW5hdGlvbiBhbmQgdHJpZ2dlciBmaXJpbmcuCiAgICAgIG1heF93cml0ZXJzX3Blcl9idW5kbGUgKGludCk6IFRoZSBudW1iZXIgb2Ygd3JpdGVycyB0aGF0IGNhbiBiZSBvcGVuCiAgICAgICAgY29uY3VycmVudGx5IGluIGEgc2luZ2xlIHdvcmtlciB0aGF0J3MgcHJvY2Vzc2luZyBvbmUgYnVuZGxlLgogICAgIiIiCiAgICBzZWxmLnBhdGggPSAoCiAgICAgICAgcGF0aCBpZiBpc2luc3RhbmNlKHBhdGgsIFZhbHVlUHJvdmlkZXIpIGVsc2UgU3RhdGljVmFsdWVQcm92aWRlcigKICAgICAgICAgICAgc3RyLCBwYXRoKSkKICAgIHNlbGYuZmlsZV9uYW1pbmdfZm4gPSBmaWxlX25hbWluZyBvciBkZWZhdWx0X2ZpbGVfbmFtaW5nKCdvdXRwdXQnKQogICAgc2VsZi5kZXN0aW5hdGlvbl9mbiA9IHNlbGYuX2dldF9kZXN0aW5hdGlvbl9mbihkZXN0aW5hdGlvbikKICAgIHNlbGYuX3RlbXBfZGlyZWN0b3J5ID0gdGVtcF9kaXJlY3RvcnkKICAgIHNlbGYuc2lua19mbiA9IHNlbGYuX2dldF9zaW5rX2ZuKHNpbmspCiAgICBzZWxmLnNoYXJkcyA9IHNoYXJkcyBvciBXcml0ZVRvRmlsZXMuREVGQVVMVF9TSEFSRElORwogICAgc2VsZi5vdXRwdXRfZm4gPSBvdXRwdXRfZm4gb3IgKGxhbWJkYSB4OiB4KQoKICAgIHNlbGYuX21heF9udW1fd3JpdGVyc19wZXJfYnVuZGxlID0gbWF4X3dyaXRlcnNfcGVyX2J1bmRsZQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9nZXRfc2lua19mbihpbnB1dF9zaW5rKToKICAgICMgdHlwZTogKC4uLikgLT4gQ2FsbGFibGVbW0FueV0sIEZpbGVTaW5rXQogICAgaWYgaXNpbnN0YW5jZShpbnB1dF9zaW5rLCBGaWxlU2luayk6CiAgICAgIHJldHVybiBsYW1iZGEgeDogaW5wdXRfc2luawogICAgZWxpZiBjYWxsYWJsZShpbnB1dF9zaW5rKToKICAgICAgcmV0dXJuIGlucHV0X3NpbmsKICAgIGVsc2U6CiAgICAgIHJldHVybiBsYW1iZGEgeDogVGV4dFNpbmsoKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9nZXRfZGVzdGluYXRpb25fZm4oZGVzdGluYXRpb24pOgogICAgIyB0eXBlOiAoLi4uKSAtPiBDYWxsYWJsZVtbQW55XSwgc3RyXQogICAgaWYgaXNpbnN0YW5jZShkZXN0aW5hdGlvbiwgVmFsdWVQcm92aWRlcik6CiAgICAgIHJldHVybiBsYW1iZGEgZWxtOiBkZXN0aW5hdGlvbi5nZXQoKQogICAgZWxpZiBjYWxsYWJsZShkZXN0aW5hdGlvbik6CiAgICAgIHJldHVybiBkZXN0aW5hdGlvbgogICAgZWxzZToKICAgICAgcmV0dXJuIGxhbWJkYSBlbG06IGRlc3RpbmF0aW9uCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcCA9IHBjb2xsLnBpcGVsaW5lCgogICAgaWYgbm90IHNlbGYuX3RlbXBfZGlyZWN0b3J5OgogICAgICB0ZW1wX2xvY2F0aW9uID0gKAogICAgICAgICAgcC5vcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS50ZW1wX2xvY2F0aW9uIG9yCiAgICAgICAgICBzZWxmLnBhdGguZ2V0KCkpCiAgICAgIGRpcl91aWQgPSBzdHIodXVpZC51dWlkNCgpKQogICAgICBzZWxmLl90ZW1wX2RpcmVjdG9yeSA9IFN0YXRpY1ZhbHVlUHJvdmlkZXIoCiAgICAgICAgICBzdHIsIGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmpvaW4odGVtcF9sb2NhdGlvbiwgJy50ZW1wJXMnICUgZGlyX3VpZCkpCiAgICAgIF9MT0dHRVIuaW5mbygnQWRkZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlcycsIHNlbGYuX3RlbXBfZGlyZWN0b3J5LmdldCgpKQoKICAgIG91dHB1dCA9ICgKICAgICAgICBwY29sbAogICAgICAgIHwgYmVhbS5QYXJEbygKICAgICAgICAgICAgX1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuKAogICAgICAgICAgICAgICAgYmFzZV9wYXRoPXNlbGYuX3RlbXBfZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgZGVzdGluYXRpb25fZm49c2VsZi5kZXN0aW5hdGlvbl9mbiwKICAgICAgICAgICAgICAgIHNpbmtfZm49c2VsZi5zaW5rX2ZuLAogICAgICAgICAgICAgICAgbWF4X3dyaXRlcnNfcGVyX2J1bmRsZT1zZWxmLl9tYXhfbnVtX3dyaXRlcnNfcGVyX2J1bmRsZSkpLgogICAgICAgIHdpdGhfb3V0cHV0cygKICAgICAgICAgICAgX1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuLlNQSUxMRURfUkVDT1JEUywKICAgICAgICAgICAgX1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuLldSSVRURU5fRklMRVMpKQoKICAgIHdyaXR0ZW5fZmlsZXNfcGMgPSBvdXRwdXRbX1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuLldSSVRURU5fRklMRVNdCiAgICBzcGlsbGVkX3JlY29yZHNfcGMgPSBvdXRwdXRbX1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuLlNQSUxMRURfUkVDT1JEU10KCiAgICBtb3JlX3dyaXR0ZW5fZmlsZXNfcGMgPSAoCiAgICAgICAgc3BpbGxlZF9yZWNvcmRzX3BjCiAgICAgICAgfCBiZWFtLlBhckRvKAogICAgICAgICAgICBfQXBwZW5kU2hhcmRlZERlc3RpbmF0aW9uKHNlbGYuZGVzdGluYXRpb25fZm4sIHNlbGYuc2hhcmRzKSkKICAgICAgICB8ICJHcm91cFJlY29yZHNCeURlc3RpbmF0aW9uQW5kU2hhcmQiID4+IGJlYW0uR3JvdXBCeUtleSgpCiAgICAgICAgfCBiZWFtLlBhckRvKAogICAgICAgICAgICBfV3JpdGVTaGFyZGVkUmVjb3Jkc0ZuKAogICAgICAgICAgICAgICAgc2VsZi5fdGVtcF9kaXJlY3RvcnksIHNlbGYuc2lua19mbiwgc2VsZi5zaGFyZHMpKSkKCiAgICBmaWxlc19ieV9kZXN0aW5hdGlvbl9wYyA9ICgKICAgICAgICAod3JpdHRlbl9maWxlc19wYywgbW9yZV93cml0dGVuX2ZpbGVzX3BjKQogICAgICAgIHwgYmVhbS5GbGF0dGVuKCkKICAgICAgICB8IGJlYW0uTWFwKGxhbWJkYSBmaWxlX3Jlc3VsdDogKGZpbGVfcmVzdWx0LmRlc3RpbmF0aW9uLCBmaWxlX3Jlc3VsdCkpCiAgICAgICAgfCAiR3JvdXBUZW1wRmlsZXNCeURlc3RpbmF0aW9uIiA+PiBiZWFtLkdyb3VwQnlLZXkoKSkKCiAgICAjIE5vdyB3ZSBzaG91bGQgdGFrZSB0aGUgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgd3JpdGUgdGhlbSB0byB0aGUgZmluYWwKICAgICMgZGVzdGluYXRpb24sIHdpdGggdGhlaXIgcHJvcGVyIG5hbWVzLgoKICAgIGZpbGVfcmVzdWx0cyA9ICgKICAgICAgICBmaWxlc19ieV9kZXN0aW5hdGlvbl9wYwogICAgICAgIHwgYmVhbS5QYXJEbygKICAgICAgICAgICAgX01vdmVUZW1wRmlsZXNJbnRvRmluYWxEZXN0aW5hdGlvbkZuKAogICAgICAgICAgICAgICAgc2VsZi5wYXRoLCBzZWxmLmZpbGVfbmFtaW5nX2ZuLCBzZWxmLl90ZW1wX2RpcmVjdG9yeSkpKQoKICAgIHJldHVybiBmaWxlX3Jlc3VsdHMKCgpkZWYgX2NyZWF0ZV93cml0ZXIoYmFzZV9wYXRoLCB3cml0ZXJfa2V5KToKICB0cnk6CiAgICBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5ta2RpcnMoYmFzZV9wYXRoKQogIGV4Y2VwdCBJT0Vycm9yOgogICAgIyBEaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCiAgICBwYXNzCgogICMgVGhlIGZpbGUgbmFtZSBoYXMgYSBwcmVmaXggZGV0ZXJtaW5lZCBieSBkZXN0aW5hdGlvbit3aW5kb3csIGFsb25nIHdpdGgKICAjIGEgcmFuZG9tIHN0cmluZy4gVGhpcyBhbGxvd3MgdXMgdG8gcmV0cmlldmUgb3JwaGFuZWQgZmlsZXMgbGF0ZXIgb24uCiAgZmlsZV9uYW1lID0gJyVzXyVzJyAlIChhYnMoaGFzaCh3cml0ZXJfa2V5KSksIHV1aWQudXVpZDQoKSkKICBmdWxsX2ZpbGVfbmFtZSA9IGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmpvaW4oYmFzZV9wYXRoLCBmaWxlX25hbWUpCiAgcmV0dXJuIGZ1bGxfZmlsZV9uYW1lLCBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5jcmVhdGUoZnVsbF9maWxlX25hbWUpCgoKY2xhc3MgX01vdmVUZW1wRmlsZXNJbnRvRmluYWxEZXN0aW5hdGlvbkZuKGJlYW0uRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGZpbGVfbmFtaW5nX2ZuLCB0ZW1wX2Rpcik6CiAgICBzZWxmLnBhdGggPSBwYXRoCiAgICBzZWxmLmZpbGVfbmFtaW5nX2ZuID0gZmlsZV9uYW1pbmdfZm4KICAgIHNlbGYudGVtcG9yYXJ5X2RpcmVjdG9yeSA9IHRlbXBfZGlyCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHc9YmVhbS5Eb0ZuLldpbmRvd1BhcmFtKToKICAgIGRlc3RpbmF0aW9uID0gZWxlbWVudFswXQogICAgZmlsZV9yZXN1bHRzID0gbGlzdChlbGVtZW50WzFdKQoKICAgIGZvciBpLCByIGluIGVudW1lcmF0ZShmaWxlX3Jlc3VsdHMpOgogICAgICAjIFRPRE8ocGFibG9lbSk6IEhhbmRsZSBjb21wcmVzc2lvbiBmb3IgZmlsZXMuCiAgICAgIGZpbmFsX2ZpbGVfbmFtZSA9IHNlbGYuZmlsZV9uYW1pbmdfZm4oCiAgICAgICAgICByLndpbmRvdywgci5wYW5lLCBpLCBsZW4oZmlsZV9yZXN1bHRzKSwgJycsIGRlc3RpbmF0aW9uKQoKICAgICAgX0xPR0dFUi5pbmZvKAogICAgICAgICAgJ01vdmluZyB0ZW1wb3JhcnkgZmlsZSAlcyB0byBkaXI6ICVzIGFzICVzLiBSZXM6ICVzJywKICAgICAgICAgIHIuZmlsZV9uYW1lLAogICAgICAgICAgc2VsZi5wYXRoLmdldCgpLAogICAgICAgICAgZmluYWxfZmlsZV9uYW1lLAogICAgICAgICAgcikKCiAgICAgIGZpbmFsX2Z1bGxfcGF0aCA9IGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmpvaW4oCiAgICAgICAgICBzZWxmLnBhdGguZ2V0KCksIGZpbmFsX2ZpbGVfbmFtZSkKCiAgICAgICMgVE9ETyhwYWJsb2VtKTogQmF0Y2ggcmVuYW1lIHJlcXVlc3RzPwogICAgICB0cnk6CiAgICAgICAgZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMucmVuYW1lKFtyLmZpbGVfbmFtZV0sIFtmaW5hbF9mdWxsX3BhdGhdKQogICAgICBleGNlcHQgQmVhbUlPRXJyb3I6CiAgICAgICAgIyBUaGlzIGVycm9yIGlzIG5vdCBzZXJpb3VzLCBiZWNhdXNlIGl0IG1heSBoYXBwZW4gb24gYSByZXRyeSBvZiB0aGUKICAgICAgICAjIGJ1bmRsZS4gV2Ugc2ltcGx5IGxvZyBpdC4KICAgICAgICBfTE9HR0VSLmRlYnVnKAogICAgICAgICAgICAnRmlsZSAlcyBmYWlsZWQgdG8gYmUgY29waWVkLiBUaGlzIG1heSBiZSBkdWUgdG8gYSBidW5kbGUnCiAgICAgICAgICAgICcgYmVpbmcgcmV0cmllZC4nLAogICAgICAgICAgICByLmZpbGVfbmFtZSkKCiAgICAgIHlpZWxkIEZpbGVSZXN1bHQoCiAgICAgICAgICBmaW5hbF9maWxlX25hbWUsIGksIGxlbihmaWxlX3Jlc3VsdHMpLCByLndpbmRvdywgci5wYW5lLCBkZXN0aW5hdGlvbikKCiAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgJ0NhdXRpb3VzbHkgcmVtb3ZpbmcgdGVtcG9yYXJ5IGZpbGVzIGZvcicKICAgICAgICAnIGRlc3RpbmF0aW9uICVzIGFuZCB3aW5kb3cgJXMnLAogICAgICAgIGRlc3RpbmF0aW9uLAogICAgICAgIHcpCiAgICB3cml0ZXJfa2V5ID0gKGRlc3RpbmF0aW9uLCB3KQogICAgc2VsZi5fcmVtb3ZlX3RlbXBvcmFyeV9maWxlcyh3cml0ZXJfa2V5KQoKICBkZWYgX3JlbW92ZV90ZW1wb3JhcnlfZmlsZXMoc2VsZiwgd3JpdGVyX2tleSk6CiAgICB0cnk6CiAgICAgIHByZWZpeCA9IGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmpvaW4oCiAgICAgICAgICBzZWxmLnRlbXBvcmFyeV9kaXJlY3RvcnkuZ2V0KCksIHN0cihhYnMoaGFzaCh3cml0ZXJfa2V5KSkpKQogICAgICBtYXRjaF9yZXN1bHQgPSBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5tYXRjaChbJyVzKicgJSBwcmVmaXhdKQogICAgICBvcnBoYW5lZF9maWxlcyA9IFttLnBhdGggZm9yIG0gaW4gbWF0Y2hfcmVzdWx0WzBdLm1ldGFkYXRhX2xpc3RdCgogICAgICBfTE9HR0VSLmRlYnVnKCdEZWxldGluZyBvcnBoYW5lZCBmaWxlczogJXMnLCBvcnBoYW5lZF9maWxlcykKICAgICAgZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZGVsZXRlKG9ycGhhbmVkX2ZpbGVzKQogICAgZXhjZXB0IEJlYW1JT0Vycm9yIGFzIGU6CiAgICAgIF9MT0dHRVIuZGVidWcoJ0V4Y2VwdGlvbnMgd2hlbiBkZWxldGluZyBmaWxlczogJXMnLCBlKQoKCmNsYXNzIF9Xcml0ZVNoYXJkZWRSZWNvcmRzRm4oYmVhbS5Eb0ZuKToKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGJhc2VfcGF0aCwKICAgICAgICAgICAgICAgc2lua19mbiwgICMgdHlwZTogQ2FsbGFibGVbW0FueV0sIEZpbGVTaW5rXQogICAgICAgICAgICAgICBzaGFyZHMgICMgdHlwZTogaW50CiAgICAgICAgICAgICAgKToKICAgIHNlbGYuYmFzZV9wYXRoID0gYmFzZV9wYXRoCiAgICBzZWxmLnNpbmtfZm4gPSBzaW5rX2ZuCiAgICBzZWxmLnNoYXJkcyA9IHNoYXJkcwoKICBkZWYgcHJvY2VzcygKICAgICAgc2VsZiwgZWxlbWVudCwgdz1iZWFtLkRvRm4uV2luZG93UGFyYW0sIHBhbmU9YmVhbS5Eb0ZuLlBhbmVJbmZvUGFyYW0pOgogICAgZGVzdGluYXRpb25fYW5kX3NoYXJkID0gZWxlbWVudFswXQogICAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbl9hbmRfc2hhcmRbMF0KICAgIHNoYXJkID0gZGVzdGluYXRpb25fYW5kX3NoYXJkWzFdCiAgICByZWNvcmRzID0gZWxlbWVudFsxXQoKICAgIGZ1bGxfZmlsZV9uYW1lLCB3cml0ZXIgPSBfY3JlYXRlX3dyaXRlcihiYXNlX3BhdGg9c2VsZi5iYXNlX3BhdGguZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyX2tleT0oZGVzdGluYXRpb24sIHcpKQogICAgc2luayA9IHNlbGYuc2lua19mbihkZXN0aW5hdGlvbikKICAgIHNpbmsub3Blbih3cml0ZXIpCgogICAgZm9yIHIgaW4gcmVjb3JkczoKICAgICAgc2luay53cml0ZShyKQoKICAgIHNpbmsuZmx1c2goKQogICAgd3JpdGVyLmNsb3NlKCkKCiAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgJ1dyaXRpbmcgZmlsZSAlcyBmb3IgZGVzdGluYXRpb24gJXMgYW5kIHNoYXJkICVzJywKICAgICAgICBmdWxsX2ZpbGVfbmFtZSwKICAgICAgICBkZXN0aW5hdGlvbiwKICAgICAgICByZXByKHNoYXJkKSkKCiAgICB5aWVsZCBGaWxlUmVzdWx0KAogICAgICAgIGZ1bGxfZmlsZV9uYW1lLAogICAgICAgIHNoYXJkX2luZGV4PXNoYXJkLAogICAgICAgIHRvdGFsX3NoYXJkcz1zZWxmLnNoYXJkcywKICAgICAgICB3aW5kb3c9dywKICAgICAgICBwYW5lPXBhbmUsCiAgICAgICAgZGVzdGluYXRpb249ZGVzdGluYXRpb24pCgoKY2xhc3MgX0FwcGVuZFNoYXJkZWREZXN0aW5hdGlvbihiZWFtLkRvRm4pOgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZGVzdGluYXRpb24sICAjIHR5cGU6IENhbGxhYmxlW1tBbnldLCBzdHJdCiAgICAgIHNoYXJkcyAgIyB0eXBlOiBpbnQKICApOgogICAgc2VsZi5kZXN0aW5hdGlvbl9mbiA9IGRlc3RpbmF0aW9uCiAgICBzZWxmLnNoYXJkcyA9IHNoYXJkcwoKICAgICMgV2Ugc3RhcnQgdGhlIHNoYXJkcyBmb3IgYSBzaW5nbGUgZGVzdGluYXRpb24gYXQgYW4gYXJiaXRyYXJ5IHBvaW50LgogICAgc2VsZi5fc2hhcmRfY291bnRlciA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KAogICAgICAgIGxhbWJkYTogcmFuZG9tLnJhbmRyYW5nZShzZWxmLnNoYXJkcykpICAjIHR5cGU6IERlZmF1bHREaWN0W3N0ciwgaW50XQoKICBkZWYgX25leHRfc2hhcmRfZm9yX2Rlc3RpbmF0aW9uKHNlbGYsIGRlc3RpbmF0aW9uKToKICAgIHNlbGYuX3NoYXJkX2NvdW50ZXJbZGVzdGluYXRpb25dID0gKChzZWxmLl9zaGFyZF9jb3VudGVyW2Rlc3RpbmF0aW9uXSArIDEpICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2hhcmRzKQoKICAgIHJldHVybiBzZWxmLl9zaGFyZF9jb3VudGVyW2Rlc3RpbmF0aW9uXQoKICBkZWYgcHJvY2VzcyhzZWxmLCByZWNvcmQpOgogICAgZGVzdGluYXRpb24gPSBzZWxmLmRlc3RpbmF0aW9uX2ZuKHJlY29yZCkKICAgIHNoYXJkID0gc2VsZi5fbmV4dF9zaGFyZF9mb3JfZGVzdGluYXRpb24oZGVzdGluYXRpb24pCgogICAgeWllbGQgKChkZXN0aW5hdGlvbiwgc2hhcmQpLCByZWNvcmQpCgoKY2xhc3MgX1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuKGJlYW0uRG9Gbik6CgogIFNQSUxMRURfUkVDT1JEUyA9ICdzcGlsbGVkX3JlY29yZHMnCiAgV1JJVFRFTl9GSUxFUyA9ICd3cml0dGVuX2ZpbGVzJwoKICBfd3JpdGVyc19hbmRfc2lua3MgPSBOb25lICAjIHR5cGU6IERpY3RbVHVwbGVbc3RyLCBCb3VuZGVkV2luZG93XSwgVHVwbGVbQmluYXJ5SU8sIEZpbGVTaW5rXV0KICBfZmlsZV9uYW1lcyA9IE5vbmUgICMgdHlwZTogRGljdFtUdXBsZVtzdHIsIEJvdW5kZWRXaW5kb3ddLCBzdHJdCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgYmFzZV9wYXRoLAogICAgICBkZXN0aW5hdGlvbl9mbiwKICAgICAgc2lua19mbiwKICAgICAgbWF4X3dyaXRlcnNfcGVyX2J1bmRsZT1Xcml0ZVRvRmlsZXMuTUFYX05VTV9XUklURVJTX1BFUl9CVU5ETEUpOgogICAgc2VsZi5iYXNlX3BhdGggPSBiYXNlX3BhdGgKICAgIHNlbGYuZGVzdGluYXRpb25fZm4gPSBkZXN0aW5hdGlvbl9mbgogICAgc2VsZi5zaW5rX2ZuID0gc2lua19mbgogICAgc2VsZi5tYXhfbnVtX3dyaXRlcnNfcGVyX2J1bmRsZSA9IG1heF93cml0ZXJzX3Blcl9idW5kbGUKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX3dyaXRlcnNfYW5kX3NpbmtzID0ge30KICAgIHNlbGYuX2ZpbGVfbmFtZXMgPSB7fQoKICBkZWYgcHJvY2VzcygKICAgICAgc2VsZiwgcmVjb3JkLCB3PWJlYW0uRG9Gbi5XaW5kb3dQYXJhbSwgcGFuZT1iZWFtLkRvRm4uUGFuZUluZm9QYXJhbSk6CiAgICBkZXN0aW5hdGlvbiA9IHNlbGYuZGVzdGluYXRpb25fZm4ocmVjb3JkKQoKICAgIHdyaXRlciwgc2luayA9IHNlbGYuX2dldF9vcl9jcmVhdGVfd3JpdGVyX2FuZF9zaW5rKGRlc3RpbmF0aW9uLCB3KQoKICAgIGlmIG5vdCB3cml0ZXI6CiAgICAgIHJldHVybiBbYmVhbS5wdmFsdWUuVGFnZ2VkT3V0cHV0KHNlbGYuU1BJTExFRF9SRUNPUkRTLCByZWNvcmQpXQogICAgZWxzZToKICAgICAgc2luay53cml0ZShyZWNvcmQpCgogIGRlZiBfZ2V0X29yX2NyZWF0ZV93cml0ZXJfYW5kX3Npbmsoc2VsZiwgZGVzdGluYXRpb24sIHdpbmRvdyk6CiAgICAiIiJSZXR1cm5zIGEgdHVwbGUgb2Ygd3JpdGVyLCBzaW5rLiIiIgogICAgd3JpdGVyX2tleSA9IChkZXN0aW5hdGlvbiwgd2luZG93KQoKICAgIGlmIHdyaXRlcl9rZXkgaW4gc2VsZi5fd3JpdGVyc19hbmRfc2lua3M6CiAgICAgIHJldHVybiBzZWxmLl93cml0ZXJzX2FuZF9zaW5rcy5nZXQod3JpdGVyX2tleSkKICAgIGVsaWYgbGVuKHNlbGYuX3dyaXRlcnNfYW5kX3NpbmtzKSA+PSBzZWxmLm1heF9udW1fd3JpdGVyc19wZXJfYnVuZGxlOgogICAgICAjIFRoZSB3cml0ZXIgZG9lcyBub3QgZXhpc3QsIGFuZCB3ZSBoYXZlIHRvbyBtYW55IHdyaXRlcnMgYWxyZWFkeS4KICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAgIGVsc2U6CiAgICAgICMgVGhlIHdyaXRlciBkb2VzIG5vdCBleGlzdCwgYnV0IHdlIGNhbiBzdGlsbCBjcmVhdGUgYSBuZXcgb25lLgogICAgICBmdWxsX2ZpbGVfbmFtZSwgd3JpdGVyID0gX2NyZWF0ZV93cml0ZXIoYmFzZV9wYXRoPXNlbGYuYmFzZV9wYXRoLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyX2tleT13cml0ZXJfa2V5KQogICAgICBzaW5rID0gc2VsZi5zaW5rX2ZuKGRlc3RpbmF0aW9uKQoKICAgICAgc2luay5vcGVuKHdyaXRlcikKCiAgICAgIHNlbGYuX3dyaXRlcnNfYW5kX3NpbmtzW3dyaXRlcl9rZXldID0gKHdyaXRlciwgc2luaykKICAgICAgc2VsZi5fZmlsZV9uYW1lc1t3cml0ZXJfa2V5XSA9IGZ1bGxfZmlsZV9uYW1lCiAgICAgIHJldHVybiBzZWxmLl93cml0ZXJzX2FuZF9zaW5rc1t3cml0ZXJfa2V5XQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIGZvciBrZXksICh3cml0ZXIsIHNpbmspIGluIHNlbGYuX3dyaXRlcnNfYW5kX3NpbmtzLml0ZW1zKCk6CgogICAgICBzaW5rLmZsdXNoKCkKICAgICAgd3JpdGVyLmNsb3NlKCkKCiAgICAgIGZpbGVfcmVzdWx0ID0gRmlsZVJlc3VsdChzZWxmLl9maWxlX25hbWVzW2tleV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZF9pbmRleD0tMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3NoYXJkcz0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93PWtleVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmU9Tm9uZSwgICMgVE9ETyhwYWJsb2VtKTogZ2V0IHRoZSBwYW5lIGluZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uPWtleVswXSkKCiAgICAgIHlpZWxkIGJlYW0ucHZhbHVlLlRhZ2dlZE91dHB1dCgKICAgICAgICAgIHNlbGYuV1JJVFRFTl9GSUxFUywKICAgICAgICAgIGJlYW0udHJhbnNmb3Jtcy53aW5kb3cuV2luZG93ZWRWYWx1ZSgKICAgICAgICAgICAgICBmaWxlX3Jlc3VsdCwKICAgICAgICAgICAgICB0aW1lc3RhbXA9a2V5WzFdLnN0YXJ0LAogICAgICAgICAgICAgIHdpbmRvd3M9W2tleVsxXV0gICMgVE9ETyhwYWJsb2VtKSBIT1cgRE8gV0UgR0VUIFRIRSBQQU5FCiAgICAgICAgICApKQqUlTUAAQAAAAAAfZQojCVFbXB0eU1hdGNoVHJlYXRtZW50LmFsbG93X2VtcHR5X21hdGNolGpWMQEAS49LmIeUjBNFbXB0eU1hdGNoVHJlYXRtZW50lGpdMQEAS4VLmIeUjBRfTWF0Y2hBbGxGbi5fX2luaXRfX5RqVjEBAEucS52HlIwTX01hdGNoQWxsRm4ucHJvY2Vzc5RqVjEBAEufS6qHlIwLX01hdGNoQWxsRm6Ual0xAQBLm0uqh5SME01hdGNoRmlsZXMuX19pbml0X1+UalYxAQBLs0u4h5SMEU1hdGNoRmlsZXMuZXhwYW5klGpWMQEAS7pLu4eUjApNYXRjaEZpbGVzlGpdMQEAS61Lu4eUjBFNYXRjaEFsbC5fX2luaXRfX5RqVjEBAEvES8WHlIwPTWF0Y2hBbGwuZXhwYW5klGpWMQEAS8dLyIeUjAhNYXRjaEFsbJRqXTEBAEu+S8iHlIwXX1JlYWRNYXRjaGVzRm4uX19pbml0X1+UalYxAQBLzEvOh5SMFl9SZWFkTWF0Y2hlc0ZuLnByb2Nlc3OUalYxAQBL0Eveh5SMDl9SZWFkTWF0Y2hlc0ZulGpdMQEAS8tL3oeUjBVSZWFkYWJsZUZpbGUuX19pbml0X1+UalYxAQBL40vlh5SMEVJlYWRhYmxlRmlsZS5vcGVulGpWMQEAS+dL7IeUjBFSZWFkYWJsZUZpbGUucmVhZJRqVjEBAEvuS++HlIwWUmVhZGFibGVGaWxlLnJlYWRfdXRmOJRqVjEBAEvxS/KHlIwMUmVhZGFibGVGaWxllGpdMQEAS+FL8oeUjBRSZWFkTWF0Y2hlcy5fX2luaXRfX5RqVjEBAEv6S/yHlIwSUmVhZE1hdGNoZXMuZXhwYW5klGpWMQEAS/5NAAGHlIwLUmVhZE1hdGNoZXOUal0xAQBL9U0AAYeUjA1GaWxlU2luay5vcGVulGpWMQEATRIBTRQBh5SMDkZpbGVTaW5rLndyaXRllGpWMQEATRYBTRcBh5SMDkZpbGVTaW5rLmZsdXNolGpWMQEATRkBTRoBh5SMCEZpbGVTaW5rlGpdMQEATQMBTRoBh5SMDVRleHRTaW5rLm9wZW6UalYxAQBNJgFNJwGHlIwOVGV4dFNpbmsud3JpdGWUalYxAQBNKQFNKwGHlIwOVGV4dFNpbmsuZmx1c2iUalYxAQBNLQFNLgGHlIwIVGV4dFNpbmuUal0xAQBNHQFNLgGHlIwNcHJlZml4X25hbWluZ5RqVjEBAE0xAU0yAYeUjBlkZXN0aW5hdGlvbl9wcmVmaXhfbmFtaW5nlGpWMQEATTsBTVkBh5SME2RlZmF1bHRfZmlsZV9uYW1pbmeUalYxAQBNXAFNfAGHlIwKRmlsZVJlc3VsdJRqXTEBAE2LAU2NAYeUjBVXcml0ZVRvRmlsZXMuX19pbml0X1+UalYxAQBNoQFNygGHlIwZV3JpdGVUb0ZpbGVzLl9nZXRfc2lua19mbpRqVjEBAE3MAU3UAYeUjCBXcml0ZVRvRmlsZXMuX2dldF9kZXN0aW5hdGlvbl9mbpRqVjEBAE3WAU3eAYeUjBNXcml0ZVRvRmlsZXMuZXhwYW5klGpWMQEATeABTRMCh5SMDFdyaXRlVG9GaWxlc5RqXTEBAE2QAU0TAoeUjA5fY3JlYXRlX3dyaXRlcpRqVjEBAE0WAk0hAoeUjC1fTW92ZVRlbXBGaWxlc0ludG9GaW5hbERlc3RpbmF0aW9uRm4uX19pbml0X1+UalYxAQBNJQJNKAKHlIwsX01vdmVUZW1wRmlsZXNJbnRvRmluYWxEZXN0aW5hdGlvbkZuLnByb2Nlc3OUalYxAQBNKgJNUQKHlIw8X01vdmVUZW1wRmlsZXNJbnRvRmluYWxEZXN0aW5hdGlvbkZuLl9yZW1vdmVfdGVtcG9yYXJ5X2ZpbGVzlGpWMQEATVMCTV0Ch5SMJF9Nb3ZlVGVtcEZpbGVzSW50b0ZpbmFsRGVzdGluYXRpb25GbpRqXTEBAE0kAk1dAoeUjB9fV3JpdGVTaGFyZGVkUmVjb3Jkc0ZuLl9faW5pdF9flGpWMQEATWICTWkCh5SMHl9Xcml0ZVNoYXJkZWRSZWNvcmRzRm4ucHJvY2Vzc5RqVjEBAE1rAk2JAoeUjBZfV3JpdGVTaGFyZGVkUmVjb3Jkc0ZulGpdMQEATWACTYkCh5SMIl9BcHBlbmRTaGFyZGVkRGVzdGluYXRpb24uX19pbml0X1+UalYxAQBNjQJNlwKHlIw1X0FwcGVuZFNoYXJkZWREZXN0aW5hdGlvbi5fbmV4dF9zaGFyZF9mb3JfZGVzdGluYXRpb26UalYxAQBNmQJNnQKHlIwhX0FwcGVuZFNoYXJkZWREZXN0aW5hdGlvbi5wcm9jZXNzlGpWMQEATZ8CTaMCh5SMGV9BcHBlbmRTaGFyZGVkRGVzdGluYXRpb26Ual0xAQBNjAJNowKHlIwhX1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuLl9faW5pdF9flGpWMQEATa4CTbcCh5SMJV9Xcml0ZVVuc2hhcmRlZFJlY29yZHNGbi5zdGFydF9idW5kbGWUalYxAQBNuQJNuwKHlIwgX1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuLnByb2Nlc3OUalYxAQBNvQJNxgKHlIw3X1dyaXRlVW5zaGFyZGVkUmVjb3Jkc0ZuLl9nZXRfb3JfY3JlYXRlX3dyaXRlcl9hbmRfc2lua5RqVjEBAE3IAk3bAoeUjCZfV3JpdGVVbnNoYXJkZWRSZWNvcmRzRm4uZmluaXNoX2J1bmRsZZRqVjEBAE3dAk3wAoeUjBhfV3JpdGVVbnNoYXJkZWRSZWNvcmRzRm6Ual0xAQBNpgJN8AKHlHV9lCiME0VtcHR5TWF0Y2hUcmVhdG1lbnSUavwDAACMJUVtcHR5TWF0Y2hUcmVhdG1lbnQuYWxsb3dfZW1wdHlfbWF0Y2iUavwDAACMCk1hdGNoRmlsZXOUavwDAACMEU1hdGNoRmlsZXMuZXhwYW5klGr8AwAAjAhNYXRjaEFsbJRq/AMAAIwPTWF0Y2hBbGwuZXhwYW5klGr8AwAAjAxSZWFkYWJsZUZpbGWUavwDAACMEVJlYWRhYmxlRmlsZS5vcGVulGr8AwAAjBFSZWFkYWJsZUZpbGUucmVhZJRq/AMAAIwWUmVhZGFibGVGaWxlLnJlYWRfdXRmOJRq/AMAAIwLUmVhZE1hdGNoZXOUavwDAACMElJlYWRNYXRjaGVzLmV4cGFuZJRq/AMAAHWMFWFwYWNoZV9iZWFtLmlvLmZpbGVpb5R0lIwZYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbZQoWOxvAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZpbGUgc3lzdGVtIGFic3RyYWN0aW9uIGZvciBmaWxlLWJhc2VkIHNvdXJjZXMgYW5kIHNpbmtzLgoKTm90ZSB0byBpbXBsZW1lbnRvcnM6CiAgInBhdGgiIGFyZ3VtZW50cyB3aWxsIGJlIFVSTHMgaW4gdGhlIGZvcm0gc2NoZW1lOi8vZm9vL2Jhci4gVGhlIGV4Y2VwdGlvbiBpcwogIExvY2FsRmlsZVN5c3RlbSwgd2hpY2ggZ2V0cyB1bml4LXN0eWxlIHBhdGhzIGluIHRoZSBmb3JtIC9mb28vYmFyLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBhYmMKaW1wb3J0IGJ6MgppbXBvcnQgaW8KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCBwb3NpeHBhdGgKaW1wb3J0IHJlCmltcG9ydCB0aW1lCmltcG9ydCB6bGliCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCB6aXAKZnJvbSB0eXBpbmcgaW1wb3J0IEJpbmFyeUlPICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IHdpdGhfbWV0YWNsYXNzCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgbG9uZwpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCmZyb20gYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luIGltcG9ydCBCZWFtUGx1Z2luCgpsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCkRFRkFVTFRfUkVBRF9CVUZGRVJfU0laRSA9IDE2ICogMTAyNCAqIDEwMjQKCl9fYWxsX18gPSBbCiAgICAnQ29tcHJlc3Npb25UeXBlcycsCiAgICAnQ29tcHJlc3NlZEZpbGUnLAogICAgJ0ZpbGVNZXRhZGF0YScsCiAgICAnRmlsZVN5c3RlbScsCiAgICAnTWF0Y2hSZXN1bHQnCl0KCgpjbGFzcyBDb21wcmVzc2lvblR5cGVzKG9iamVjdCk6CiAgIiIiRW51bS1saWtlIGNsYXNzIHJlcHJlc2VudGluZyBrbm93biBjb21wcmVzc2lvbiB0eXBlcy4iIiIKCiAgIyBEZXRlY3QgY29tcHJlc3Npb24gYmFzZWQgb24gZmlsZW5hbWUgZXh0ZW5zaW9uLgogICMKICAjIFRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5IHJlY29nbml6ZWQgYnkgYXV0by1kZXRlY3Rpb246CiAgIyAgIC5iejIgKGltcGxpZXMgQlpJUDIgYXMgZGVzY3JpYmVkIGJlbG93KS4KICAjICAgLmd6ICAoaW1wbGllcyBHWklQIGFzIGRlc2NyaWJlZCBiZWxvdykKICAjICAgLmRlZmxhdGUgKGltcGxpZXMgREVGTEFURSBhcyBkZXNjcmliZWQgYmVsb3cpCiAgIyBBbnkgbm9uLXJlY29nbml6ZWQgZXh0ZW5zaW9uIGltcGxpZXMgVU5DT01QUkVTU0VEIGFzIGRlc2NyaWJlZCBiZWxvdy4KICBBVVRPID0gJ2F1dG8nCgogICMgQlpJUDIgY29tcHJlc3Npb24uCiAgQlpJUDIgPSAnYnppcDInCgogICMgREVGTEFURSBjb21wcmVzc2lvbgogIERFRkxBVEUgPSAnZGVmbGF0ZScKCiAgIyBHWklQIGNvbXByZXNzaW9uIChkZWZsYXRlIHdpdGggR1pJUCBoZWFkZXJzKS4KICBHWklQID0gJ2d6aXAnCgogICMgVW5jb21wcmVzc2VkIChpLmUuLCBtYXkgYmUgc3BsaXQpLgogIFVOQ09NUFJFU1NFRCA9ICd1bmNvbXByZXNzZWQnCgogIEBjbGFzc21ldGhvZAogIGRlZiBpc192YWxpZF9jb21wcmVzc2lvbl90eXBlKGNscywgY29tcHJlc3Npb25fdHlwZSk6CiAgICAiIiJSZXR1cm5zIFRydWUgZm9yIHZhbGlkIGNvbXByZXNzaW9uIHR5cGVzLCBGYWxzZSBvdGhlcndpc2UuIiIiCiAgICB0eXBlcyA9IHNldChbCiAgICAgICAgQ29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICAgIENvbXByZXNzaW9uVHlwZXMuQlpJUDIsCiAgICAgICAgQ29tcHJlc3Npb25UeXBlcy5ERUZMQVRFLAogICAgICAgIENvbXByZXNzaW9uVHlwZXMuR1pJUCwKICAgICAgICBDb21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRAogICAgXSkKICAgIHJldHVybiBjb21wcmVzc2lvbl90eXBlIGluIHR5cGVzCgogIEBjbGFzc21ldGhvZAogIGRlZiBtaW1lX3R5cGUoY2xzLCBjb21wcmVzc2lvbl90eXBlLCBkZWZhdWx0PSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKToKICAgIG1pbWVfdHlwZXNfYnlfY29tcHJlc3Npb25fdHlwZSA9IHsKICAgICAgICBjbHMuQlpJUDI6ICdhcHBsaWNhdGlvbi94LWJ6MicsCiAgICAgICAgY2xzLkRFRkxBVEU6ICdhcHBsaWNhdGlvbi94LWRlZmxhdGUnLAogICAgICAgIGNscy5HWklQOiAnYXBwbGljYXRpb24veC1nemlwJywKICAgIH0KICAgIHJldHVybiBtaW1lX3R5cGVzX2J5X2NvbXByZXNzaW9uX3R5cGUuZ2V0KGNvbXByZXNzaW9uX3R5cGUsIGRlZmF1bHQpCgogIEBjbGFzc21ldGhvZAogIGRlZiBkZXRlY3RfY29tcHJlc3Npb25fdHlwZShjbHMsIGZpbGVfcGF0aCk6CiAgICAiIiJSZXR1cm5zIHRoZSBjb21wcmVzc2lvbiB0eXBlIG9mIGEgZmlsZSAoYmFzZWQgb24gaXRzIHN1ZmZpeCkuIiIiCiAgICBjb21wcmVzc2lvbl90eXBlc19ieV9zdWZmaXggPSB7CiAgICAgICAgJy5iejInOiBjbHMuQlpJUDIsICcuZGVmbGF0ZSc6IGNscy5ERUZMQVRFLCAnLmd6JzogY2xzLkdaSVAKICAgIH0KICAgIGxvd2VyY2FzZWRfcGF0aCA9IGZpbGVfcGF0aC5sb3dlcigpCiAgICBmb3Igc3VmZml4LCBjb21wcmVzc2lvbl90eXBlIGluIGNvbXByZXNzaW9uX3R5cGVzX2J5X3N1ZmZpeC5pdGVtcygpOgogICAgICBpZiBsb3dlcmNhc2VkX3BhdGguZW5kc3dpdGgoc3VmZml4KToKICAgICAgICByZXR1cm4gY29tcHJlc3Npb25fdHlwZQogICAgcmV0dXJuIGNscy5VTkNPTVBSRVNTRUQKCgpjbGFzcyBDb21wcmVzc2VkRmlsZShvYmplY3QpOgogICIiIkZpbGUgd3JhcHBlciBmb3IgZWFzaWVyIGhhbmRsaW5nIG9mIGNvbXByZXNzZWQgZmlsZXMuIiIiCiAgIyBYWFg6IFRoaXMgY2xhc3MgaXMgbm90IHRocmVhZCBzYWZlIGluIHRoZSByZWFkIHBhdGguCgogICMgVGhlIGJpdCBtYXNrIHRvIHVzZSBmb3IgdGhlIHdiaXRzIHBhcmFtZXRlcnMgb2YgdGhlIHpsaWIgY29tcHJlc3NvciBhbmQKICAjIGRlY29tcHJlc3NvciBvYmplY3RzLgogIF9nemlwX21hc2sgPSB6bGliLk1BWF9XQklUUyB8IDE2ICAjIE1hc2sgd2hlbiB1c2luZyBHWklQIGhlYWRlcnMuCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZmlsZW9iaiwKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkdaSVAsCiAgICAgIHJlYWRfc2l6ZT1ERUZBVUxUX1JFQURfQlVGRkVSX1NJWkUpOgogICAgaWYgbm90IGZpbGVvYmo6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ZpbGUgb2JqZWN0IG11c3Qgbm90IGJlIE5vbmUnKQoKICAgIGlmIG5vdCBDb21wcmVzc2lvblR5cGVzLmlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGUoY29tcHJlc3Npb25fdHlwZSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdjb21wcmVzc2lvbl90eXBlIG11c3QgYmUgQ29tcHJlc3Npb25UeXBlIG9iamVjdCBidXQgJwogICAgICAgICAgJ3dhcyAlcycgJSB0eXBlKGNvbXByZXNzaW9uX3R5cGUpKQogICAgaWYgY29tcHJlc3Npb25fdHlwZSBpbiAoQ29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0Nhbm5vdCBjcmVhdGUgb2JqZWN0IHdpdGggdW5zcGVjaWZpZWQgb3Igbm8gY29tcHJlc3Npb24nKQoKICAgIHNlbGYuX2ZpbGUgPSBmaWxlb2JqCiAgICBzZWxmLl9jb21wcmVzc2lvbl90eXBlID0gY29tcHJlc3Npb25fdHlwZQoKICAgIGlmIHNlbGYuX2ZpbGUudGVsbCgpICE9IDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnRmlsZSBvYmplY3QgbXVzdCBiZSBhdCBwb3NpdGlvbiAwIGJ1dCB3YXMgJWQnICUgc2VsZi5fZmlsZS50ZWxsKCkpCiAgICBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24gPSAwCiAgICBzZWxmLl91bmNvbXByZXNzZWRfc2l6ZSA9IE5vbmUKCiAgICBpZiBzZWxmLnJlYWRhYmxlKCk6CiAgICAgIHNlbGYuX3JlYWRfc2l6ZSA9IHJlYWRfc2l6ZQogICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9IGlvLkJ5dGVzSU8oKQogICAgICBzZWxmLl9yZWFkX3Bvc2l0aW9uID0gMAogICAgICBzZWxmLl9yZWFkX2VvZiA9IEZhbHNlCgogICAgICBzZWxmLl9pbml0aWFsaXplX2RlY29tcHJlc3NvcigpCiAgICBlbHNlOgogICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCgogICAgaWYgc2VsZi53cml0ZWFibGUoKToKICAgICAgc2VsZi5faW5pdGlhbGl6ZV9jb21wcmVzc29yKCkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBOb25lCgogIGRlZiBfaW5pdGlhbGl6ZV9kZWNvbXByZXNzb3Ioc2VsZik6CiAgICBpZiBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuQlpJUDI6CiAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKQogICAgZWxpZiBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuREVGTEFURToKICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gemxpYi5kZWNvbXByZXNzb2JqKCkKICAgIGVsc2U6CiAgICAgIGFzc2VydCBzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuR1pJUAogICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSB6bGliLmRlY29tcHJlc3NvYmooc2VsZi5fZ3ppcF9tYXNrKQoKICBkZWYgX2luaXRpYWxpemVfY29tcHJlc3NvcihzZWxmKToKICAgIGlmIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5CWklQMjoKICAgICAgc2VsZi5fY29tcHJlc3NvciA9IGJ6Mi5CWjJDb21wcmVzc29yKCkKICAgIGVsaWYgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkRFRkxBVEU6CiAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSB6bGliLmNvbXByZXNzb2JqKAogICAgICAgICAgemxpYi5aX0RFRkFVTFRfQ09NUFJFU1NJT04sIHpsaWIuREVGTEFURUQpCiAgICBlbHNlOgogICAgICBhc3NlcnQgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkdaSVAKICAgICAgc2VsZi5fY29tcHJlc3NvciA9IHpsaWIuY29tcHJlc3NvYmooCiAgICAgICAgICB6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwgemxpYi5ERUZMQVRFRCwgc2VsZi5fZ3ppcF9tYXNrKQoKICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICBtb2RlID0gc2VsZi5fZmlsZS5tb2RlCiAgICByZXR1cm4gJ3InIGluIG1vZGUgb3IgJ2EnIGluIG1vZGUKCiAgZGVmIHdyaXRlYWJsZShzZWxmKToKICAgIG1vZGUgPSBzZWxmLl9maWxlLm1vZGUKICAgIHJldHVybiAndycgaW4gbW9kZSBvciAnYScgaW4gbW9kZQoKICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CiAgICAiIiJXcml0ZSBkYXRhIHRvIGZpbGUuIiIiCiAgICBpZiBub3Qgc2VsZi5fY29tcHJlc3NvcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignY29tcHJlc3NvciBub3QgaW5pdGlhbGl6ZWQnKQogICAgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uICs9IGxlbihkYXRhKQogICAgY29tcHJlc3NlZCA9IHNlbGYuX2NvbXByZXNzb3IuY29tcHJlc3MoZGF0YSkKICAgIGlmIGNvbXByZXNzZWQ6CiAgICAgIHNlbGYuX2ZpbGUud3JpdGUoY29tcHJlc3NlZCkKCiAgZGVmIF9mZXRjaF90b19pbnRlcm5hbF9idWZmZXIoc2VsZiwgbnVtX2J5dGVzKToKICAgICIiIkZldGNoIHVwIHRvIG51bV9ieXRlcyBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXIuIiIiCiAgICBpZiAobm90IHNlbGYuX3JlYWRfZW9mIGFuZCBzZWxmLl9yZWFkX3Bvc2l0aW9uID4gMCBhbmQKICAgICAgICAoc2VsZi5fcmVhZF9idWZmZXIudGVsbCgpIC0gc2VsZi5fcmVhZF9wb3NpdGlvbikgPCBudW1fYnl0ZXMpOgogICAgICAjIFRoZXJlIGFyZW4ndCBlbm91Z2ggbnVtYmVyIG9mIGJ5dGVzIHRvIGFjY29tbW9kYXRlIGEgcmVhZCwgc28gd2UKICAgICAgIyBwcmVwYXJlIGZvciBhIHBvc3NpYmx5IGxhcmdlIHJlYWQgYnkgY2xlYXJpbmcgdXAgYWxsIGludGVybmFsIGJ1ZmZlcnMKICAgICAgIyBidXQgd2l0aG91dCBkcm9wcGluZyBhbnkgcHJldmlvdXMgaGVsZCBkYXRhLgogICAgICBzZWxmLl9yZWFkX2J1ZmZlci5zZWVrKHNlbGYuX3JlYWRfcG9zaXRpb24pCiAgICAgIGRhdGEgPSBzZWxmLl9yZWFkX2J1ZmZlci5yZWFkKCkKICAgICAgc2VsZi5fY2xlYXJfcmVhZF9idWZmZXIoKQogICAgICBzZWxmLl9yZWFkX2J1ZmZlci53cml0ZShkYXRhKQoKICAgIHdoaWxlIG5vdCBzZWxmLl9yZWFkX2VvZiBhbmQgKHNlbGYuX3JlYWRfYnVmZmVyLnRlbGwoKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3Bvc2l0aW9uKSA8IG51bV9ieXRlczoKICAgICAgIyBDb250aW51ZSByZWFkaW5nIGZyb20gdGhlIHVuZGVybHlpbmcgZmlsZSBvYmplY3QgdW50aWwgZW5vdWdoIGJ5dGVzIGFyZQogICAgICAjIGF2YWlsYWJsZSwgb3IgRU9GIGlzIHJlYWNoZWQuCiAgICAgIGlmIG5vdCBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGE6CiAgICAgICAgYnVmID0gc2VsZi5fZmlsZS5yZWFkKHNlbGYuX3JlYWRfc2l6ZSkKICAgICAgZWxzZToKICAgICAgICAjIEFueSB1bmNvbXByZXNzZWQgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gb2YgYSBnemlwIG9yIGJ6aXAyCiAgICAgICAgIyBmaWxlIHRoYXQgaXMgbm90IGNvcnJ1cHRlZCBwb2ludHMgdG8gYSBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZAogICAgICAgICMgZmlsZS4gV2UgcmVhZCBjb25jYXRlbmF0ZWQgZmlsZXMgYnkgcmVjdXJzaXZlbHkgY3JlYXRpbmcgZGVjb21wcmVzc29yCiAgICAgICAgIyBvYmplY3RzIGZvciB0aGUgdW51c2VkIGNvbXByZXNzZWQgZGF0YS4KICAgICAgICBidWYgPSBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGEKICAgICAgICBzZWxmLl9pbml0aWFsaXplX2RlY29tcHJlc3NvcigpCiAgICAgIGlmIGJ1ZjoKICAgICAgICBkZWNvbXByZXNzZWQgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhidWYpCiAgICAgICAgZGVsIGJ1ZiAgIyBGcmVlIHVwIHNvbWUgcG9zc2libHkgbGFyZ2UgYW5kIG5vLWxvbmdlci1uZWVkZWQgbWVtb3J5LgogICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyLndyaXRlKGRlY29tcHJlc3NlZCkKICAgICAgZWxzZToKICAgICAgICAjIEVPRiBvZiBjdXJyZW50IHN0cmVhbSByZWFjaGVkLgogICAgICAgIGlmIChzZWxmLl9jb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuQlpJUDIgb3IKICAgICAgICAgICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkRFRkxBVEUgb3IKICAgICAgICAgICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLkdaSVApOgogICAgICAgICAgcGFzcwogICAgICAgIGVsc2U6CiAgICAgICAgICAjIERlZmxhdGUsIEd6aXAgYW5kIGJ6aXAyIGZvcm1hdHMgZG8gbm90IHJlcXVpcmUgZmx1c2hpbmcKICAgICAgICAgICMgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGRlY29tcHJlc3NvciBpbnRvIHRoZSByZWFkIGJ1ZmZlciB3aGVuCiAgICAgICAgICAjIGZ1bGx5IGRlY29tcHJlc3NpbmcgZmlsZXMuCiAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlci53cml0ZShzZWxmLl9kZWNvbXByZXNzb3IuZmx1c2goKSkKCiAgICAgICAgIyBSZWNvcmQgdGhhdCB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGZpbGUsIHNvIHdlIHdvbid0IHVubmVjZXNzYXJpbHkKICAgICAgICAjIHJlcGVhdCB0aGUgY29tcGxldGVuZXNzIHZlcmlmaWNhdGlvbiBzdGVwIGFib3ZlLgogICAgICAgIHNlbGYuX3JlYWRfZW9mID0gVHJ1ZQoKICBkZWYgX3JlYWRfZnJvbV9pbnRlcm5hbF9idWZmZXIoc2VsZiwgcmVhZF9mbik6CiAgICAiIiJSZWFkIGZyb20gdGhlIGludGVybmFsIGJ1ZmZlciBieSB1c2luZyB0aGUgc3VwcGxpZWQgcmVhZF9mbi4iIiIKICAgIHNlbGYuX3JlYWRfYnVmZmVyLnNlZWsoc2VsZi5fcmVhZF9wb3NpdGlvbikKICAgIHJlc3VsdCA9IHJlYWRfZm4oKQogICAgc2VsZi5fcmVhZF9wb3NpdGlvbiArPSBsZW4ocmVzdWx0KQogICAgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uICs9IGxlbihyZXN1bHQpCiAgICBzZWxmLl9yZWFkX2J1ZmZlci5zZWVrKDAsIG9zLlNFRUtfRU5EKSAgIyBBbGxvdyBmdXR1cmUgd3JpdGVzLgogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgcmVhZChzZWxmLCBudW1fYnl0ZXMpOgogICAgaWYgbm90IHNlbGYuX2RlY29tcHJlc3NvcjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignZGVjb21wcmVzc29yIG5vdCBpbml0aWFsaXplZCcpCgogICAgc2VsZi5fZmV0Y2hfdG9faW50ZXJuYWxfYnVmZmVyKG51bV9ieXRlcykKICAgIHJldHVybiBzZWxmLl9yZWFkX2Zyb21faW50ZXJuYWxfYnVmZmVyKAogICAgICAgIGxhbWJkYTogc2VsZi5fcmVhZF9idWZmZXIucmVhZChudW1fYnl0ZXMpKQoKICBkZWYgcmVhZGxpbmUoc2VsZik6CiAgICAiIiJFcXVpdmFsZW50IHRvIHN0YW5kYXJkIGZpbGUucmVhZGxpbmUoKS4gU2FtZSByZXR1cm4gY29udmVudGlvbnMgYXBwbHkuIiIiCiAgICBpZiBub3Qgc2VsZi5fZGVjb21wcmVzc29yOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdkZWNvbXByZXNzb3Igbm90IGluaXRpYWxpemVkJykKCiAgICBieXRlc19pbyA9IGlvLkJ5dGVzSU8oKQogICAgd2hpbGUgVHJ1ZToKICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgYnVmZmVyIGhhcyBhdCBsZWFzdCBoYWxmIHRoZSByZWFkX3NpemUuIEdvaW5nCiAgICAgICMgd2l0aCBoYWxmIHRoZSBfcmVhZF9zaXplIChhcyBvcHBvc2VkIHRvIGEgZnVsbCBfcmVhZF9zaXplKSB0byBlbnN1cmUKICAgICAgIyB0aGF0IGFjdHVhbCBmZXRjaGVzIGFyZSBtb3JlIGV2ZW5seSBzcHJlYWQgb3V0LCBhcyBvcHBvc2VkIHRvIGhhdmluZyAyCiAgICAgICMgY29uc2VjdXRpdmUgcmVhZHMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHJlYWQuCiAgICAgIHNlbGYuX2ZldGNoX3RvX2ludGVybmFsX2J1ZmZlcihzZWxmLl9yZWFkX3NpemUgLy8gMikKICAgICAgbGluZSA9IHNlbGYuX3JlYWRfZnJvbV9pbnRlcm5hbF9idWZmZXIoCiAgICAgICAgICBsYW1iZGE6IHNlbGYuX3JlYWRfYnVmZmVyLnJlYWRsaW5lKCkpCiAgICAgIGJ5dGVzX2lvLndyaXRlKGxpbmUpCiAgICAgIGlmIGxpbmUuZW5kc3dpdGgoYidcbicpIG9yIG5vdCBsaW5lOgogICAgICAgIGJyZWFrICAjIE5ld2xpbmUgb3IgRU9GIHJlYWNoZWQuCgogICAgcmV0dXJuIGJ5dGVzX2lvLmdldHZhbHVlKCkKCiAgZGVmIGNsb3NlZChzZWxmKToKICAgIHJldHVybiBub3Qgc2VsZi5fZmlsZSBvciBzZWxmLl9maWxlLmNsb3NlZCgpCgogIGRlZiBjbG9zZShzZWxmKToKICAgIGlmIHNlbGYucmVhZGFibGUoKToKICAgICAgc2VsZi5fcmVhZF9idWZmZXIuY2xvc2UoKQoKICAgIGlmIHNlbGYud3JpdGVhYmxlKCk6CiAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc2VsZi5fY29tcHJlc3Nvci5mbHVzaCgpKQoKICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQoKICBkZWYgZmx1c2goc2VsZik6CiAgICBpZiBzZWxmLndyaXRlYWJsZSgpOgogICAgICBzZWxmLl9maWxlLndyaXRlKHNlbGYuX2NvbXByZXNzb3IuZmx1c2goKSkKICAgIHNlbGYuX2ZpbGUuZmx1c2goKQoKICBAcHJvcGVydHkKICBkZWYgc2Vla2FibGUoc2VsZik6CiAgICByZXR1cm4gJ3InIGluIHNlbGYuX2ZpbGUubW9kZQoKICBkZWYgX2NsZWFyX3JlYWRfYnVmZmVyKHNlbGYpOgogICAgIiIiQ2xlYXJzIHRoZSByZWFkIGJ1ZmZlciBieSByZW1vdmluZyBhbGwgdGhlIGNvbnRlbnRzIGFuZAogICAgcmVzZXR0aW5nIF9yZWFkX3Bvc2l0aW9uIHRvIDAiIiIKICAgIHNlbGYuX3JlYWRfcG9zaXRpb24gPSAwCiAgICBzZWxmLl9yZWFkX2J1ZmZlci5zZWVrKDApCiAgICBzZWxmLl9yZWFkX2J1ZmZlci50cnVuY2F0ZSgwKQoKICBkZWYgX3Jld2luZF9maWxlKHNlbGYpOgogICAgIiIiU2Vla3MgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgZmlsZS4gSW5wdXQgZmlsZSdzIEVPRiBtYXJrZXIKICAgIGlzIGNsZWFyZWQgYW5kIF91bmNvbXByZXNzZWRfcG9zaXRpb24gaXMgcmVzZXQgdG8gemVybyIiIgogICAgc2VsZi5fZmlsZS5zZWVrKDAsIG9zLlNFRUtfU0VUKQogICAgc2VsZi5fcmVhZF9lb2YgPSBGYWxzZQogICAgc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uID0gMAoKICBkZWYgX3Jld2luZChzZWxmKToKICAgICIiIlNlZWtzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0IGZpbGUgYW5kIHJlc2V0cyB0aGUgaW50ZXJuYWwgcmVhZAogICAgYnVmZmVyLiBUaGUgZGVjb21wcmVzc29yIG9iamVjdCBpcyByZS1pbml0aWFsaXplZCB0byBlbnN1cmUgdGhhdCBubyBkYXRhCiAgICBsZWZ0IGluIGl0J3MgYnVmZmVyLiIiIgogICAgc2VsZi5fY2xlYXJfcmVhZF9idWZmZXIoKQogICAgc2VsZi5fcmV3aW5kX2ZpbGUoKQoKICAgICMgUmUtaW5pdGlhbGl6ZSBkZWNvbXByZXNzb3IgdG8gY2xlYXIgYW55IGRhdGEgYnVmZmVyZWQgcHJpb3IgdG8gcmV3aW5kCiAgICBzZWxmLl9pbml0aWFsaXplX2RlY29tcHJlc3NvcigpCgogIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPW9zLlNFRUtfU0VUKToKICAgICIiIlNldCB0aGUgZmlsZSdzIGN1cnJlbnQgb2Zmc2V0LgoKICAgIFNlZWtpbmcgYmVoYXZpb3I6CgogICAgICAqIHNlZWtpbmcgZnJvbSB0aGUgZW5kIDpkYXRhOmBvcy5TRUVLX0VORGAgdGhlIHdob2xlIGZpbGUgaXMgZGVjb21wcmVzc2VkCiAgICAgICAgb25jZSB0byBkZXRlcm1pbmUgaXRzIHNpemUuIFRoZXJlZm9yZSBpdCBpcyBwcmVmZXJyZWQgdG8gdXNlCiAgICAgICAgOmRhdGE6YG9zLlNFRUtfU0VUYCBvciA6ZGF0YTpgb3MuU0VFS19DVVJgIHRvIGF2b2lkIHRoZSBwcm9jZXNzaW5nCiAgICAgICAgb3ZlcmhlYWQKICAgICAgKiBzZWVraW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIHJld2luZHMgdGhlIGZpbGUgdG8gYGAwYGAKICAgICAgICBhbmQgZGVjb21wcmVzc2VzIHRoZSBjaHVua3MgdG8gdGhlIHJlcXVlc3RlZCBvZmZzZXQKICAgICAgKiBzZWVraW5nIGlzIG9ubHkgc3VwcG9ydGVkIGluIGZpbGVzIG9wZW5lZCBmb3IgcmVhZGluZwogICAgICAqIGlmIHRoZSBuZXcgb2Zmc2V0IGlzIG91dCBvZiBib3VuZCwgaXQgaXMgYWRqdXN0ZWQgdG8gZWl0aGVyIGBgMGBgIG9yCiAgICAgICAgYGBFT0ZgYC4KCiAgICBBcmdzOgogICAgICBvZmZzZXQgKGludCk6IHNlZWsgb2Zmc2V0IGluIHRoZSB1bmNvbXByZXNzZWQgY29udGVudCByZXByZXNlbnRlZCBhcwogICAgICAgIG51bWJlcgogICAgICB3aGVuY2UgKGludCk6IHNlZWsgbW9kZS4gU3VwcG9ydGVkIG1vZGVzIGFyZSA6ZGF0YTpgb3MuU0VFS19TRVRgCiAgICAgICAgKGFic29sdXRlIHNlZWspLCA6ZGF0YTpgb3MuU0VFS19DVVJgIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50CiAgICAgICAgcG9zaXRpb24pLCBhbmQgOmRhdGE6YG9zLlNFRUtfRU5EYCAoc2VlayByZWxhdGl2ZSB0byB0aGUgZW5kLCBvZmZzZXQKICAgICAgICBzaG91bGQgYmUgbmVnYXRpdmUpLgoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogV2hlbiB0aGlzIGJ1ZmZlciBpcyBjbG9zZWQuCiAgICAgIFZhbHVlRXJyb3I6IFdoZW4gd2hlbmNlIGlzIGludmFsaWQgb3IgdGhlIGZpbGUgaXMgbm90IHNlZWthYmxlCiAgICAiIiIKICAgIGlmIHdoZW5jZSA9PSBvcy5TRUVLX1NFVDoKICAgICAgYWJzb2x1dGVfb2Zmc2V0ID0gb2Zmc2V0CiAgICBlbGlmIHdoZW5jZSA9PSBvcy5TRUVLX0NVUjoKICAgICAgYWJzb2x1dGVfb2Zmc2V0ID0gc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uICsgb2Zmc2V0CiAgICBlbGlmIHdoZW5jZSA9PSBvcy5TRUVLX0VORDoKICAgICAgIyBEZXRlcm1pbmUgYW5kIGNhY2hlIHRoZSB1bmNvbXByZXNzZWQgc2l6ZSBvZiB0aGUgZmlsZQogICAgICBpZiBub3Qgc2VsZi5fdW5jb21wcmVzc2VkX3NpemU6CiAgICAgICAgbG9nZ2VyLndhcm5pbmcoCiAgICAgICAgICAgICJTZWVraW5nIHJlbGF0aXZlIGZyb20gZW5kIG9mIGZpbGUgaXMgcmVxdWVzdGVkLiAiCiAgICAgICAgICAgICJOZWVkIHRvIGRlY29tcHJlc3MgdGhlIHdob2xlIGZpbGUgb25jZSB0byBkZXRlcm1pbmUgIgogICAgICAgICAgICAiaXRzIHNpemUuIFRoaXMgbWlnaHQgdGFrZSBhIHdoaWxlLi4uIikKICAgICAgICB1bmNvbXByZXNzX3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgIHdoaWxlIHNlbGYucmVhZChzZWxmLl9yZWFkX3NpemUpOgogICAgICAgICAgcGFzcwogICAgICAgIHVuY29tcHJlc3NfZW5kX3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgIGxvZ2dlci53YXJuaW5nKAogICAgICAgICAgICAiRnVsbCBmaWxlIGRlY29tcHJlc3Npb24gZm9yIHNlZWsgIgogICAgICAgICAgICAiZnJvbSBlbmQgdG9vayAlLjJmIHNlY3MiLAogICAgICAgICAgICAodW5jb21wcmVzc19lbmRfdGltZSAtIHVuY29tcHJlc3Nfc3RhcnRfdGltZSkpCiAgICAgICAgc2VsZi5fdW5jb21wcmVzc2VkX3NpemUgPSBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24KICAgICAgYWJzb2x1dGVfb2Zmc2V0ID0gc2VsZi5fdW5jb21wcmVzc2VkX3NpemUgKyBvZmZzZXQKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIldoZW5jZSBtb2RlICVyIGlzIGludmFsaWQuIiAlIHdoZW5jZSkKCiAgICAjIERldGVybWluZSBob3cgbWFueSBieXRlcyBuZWVkcyB0byBiZSByZWFkIGJlZm9yZSB3ZSByZWFjaAogICAgIyB0aGUgcmVxdWVzdGVkIG9mZnNldC4gUmV3aW5kIGlmIHdlIGFscmVhZHkgcGFzc2VkIHRoZSBwb3NpdGlvbi4KICAgIGlmIGFic29sdXRlX29mZnNldCA8IHNlbGYuX3VuY29tcHJlc3NlZF9wb3NpdGlvbjoKICAgICAgc2VsZi5fcmV3aW5kKCkKICAgIGJ5dGVzX3RvX3NraXAgPSBhYnNvbHV0ZV9vZmZzZXQgLSBzZWxmLl91bmNvbXByZXNzZWRfcG9zaXRpb24KCiAgICAjIFJlYWQgdW50aWwgdGhlIGRlc2lyZWQgcG9zaXRpb24gaXMgcmVhY2hlZCBvciBFT0Ygb2NjdXJzLgogICAgd2hpbGUgYnl0ZXNfdG9fc2tpcDoKICAgICAgZGF0YSA9IHNlbGYucmVhZChtaW4oc2VsZi5fcmVhZF9zaXplLCBieXRlc190b19za2lwKSkKICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgYnJlYWsKICAgICAgYnl0ZXNfdG9fc2tpcCAtPSBsZW4oZGF0YSkKCiAgZGVmIHRlbGwoc2VsZik6CiAgICAiIiJSZXR1cm5zIGN1cnJlbnQgcG9zaXRpb24gaW4gdW5jb21wcmVzc2VkIGZpbGUuIiIiCiAgICByZXR1cm4gc2VsZi5fdW5jb21wcmVzc2VkX3Bvc2l0aW9uCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19leGl0X18oc2VsZiwgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgdHJhY2ViYWNrKToKICAgIHNlbGYuY2xvc2UoKQoKCmNsYXNzIEZpbGVNZXRhZGF0YShvYmplY3QpOgogICIiIk1ldGFkYXRhIGFib3V0IGEgZmlsZSBwYXRoIHRoYXQgaXMgdGhlIG91dHB1dCBvZiBGaWxlU3lzdGVtLm1hdGNoLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBzaXplX2luX2J5dGVzKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHBhdGgsIChzdHIsIHVuaWNvZGUpKSBhbmQgcGF0aCwgIlBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIgogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2l6ZV9pbl9ieXRlcywgKGludCwgbG9uZykpIGFuZCBzaXplX2luX2J5dGVzID49IDAsIFwKICAgICAgICAiSW52YWxpZCB2YWx1ZSBmb3Igc2l6ZV9pbl9ieXRlcyBzaG91bGQgJXMgKG9mIHR5cGUgJXMpIiAlICgKICAgICAgICAgICAgc2l6ZV9pbl9ieXRlcywgdHlwZShzaXplX2luX2J5dGVzKSkKICAgIHNlbGYucGF0aCA9IHBhdGgKICAgIHNlbGYuc2l6ZV9pbl9ieXRlcyA9IHNpemVfaW5fYnl0ZXMKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAiIiJOb3RlOiBUaGlzIGlzIG9ubHkgdXNlZCBpbiB0ZXN0cyB3aGVyZSB3ZSB2ZXJpZnkgdGhhdCBtb2NrIG9iamVjdHMgbWF0Y2guCiAgICAiIiIKICAgIHJldHVybiAoCiAgICAgICAgaXNpbnN0YW5jZShvdGhlciwgRmlsZU1ldGFkYXRhKSBhbmQgc2VsZi5wYXRoID09IG90aGVyLnBhdGggYW5kCiAgICAgICAgc2VsZi5zaXplX2luX2J5dGVzID09IG90aGVyLnNpemVfaW5fYnl0ZXMpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLnBhdGgsIHNlbGYuc2l6ZV9pbl9ieXRlcykpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0ZpbGVNZXRhZGF0YSglcywgJXMpJyAlIChzZWxmLnBhdGgsIHNlbGYuc2l6ZV9pbl9ieXRlcykKCgpjbGFzcyBNYXRjaFJlc3VsdChvYmplY3QpOgogICIiIlJlc3VsdCBmcm9tIHRoZSBgYEZpbGVTeXN0ZW1gYCBtYXRjaCBvcGVyYXRpb24gd2hpY2ggY29udGFpbnMgdGhlIGxpc3QKICAgb2YgbWF0Y2hlZCBgYEZpbGVNZXRhZGF0YWBgLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwYXR0ZXJuLCBtZXRhZGF0YV9saXN0KToKICAgIHNlbGYubWV0YWRhdGFfbGlzdCA9IG1ldGFkYXRhX2xpc3QKICAgIHNlbGYucGF0dGVybiA9IHBhdHRlcm4KCgpjbGFzcyBCZWFtSU9FcnJvcihJT0Vycm9yKToKICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBleGNlcHRpb25fZGV0YWlscz1Ob25lKToKICAgICIiIkNsYXNzIHJlcHJlc2VudGluZyB0aGUgZXJyb3JzIHRocm93biBpbiB0aGUgYmF0Y2ggZmlsZSBvcGVyYXRpb25zLgogICAgQXJnczoKICAgICAgbXNnOiBNZXNzYWdlIHN0cmluZyBmb3IgdGhlIGV4Y2VwdGlvbiB0aHJvd24KICAgICAgZXhjZXB0aW9uX2RldGFpbHM6IE9wdGlvbmFsIG1hcCBvZiBpbmRpdmlkdWFsIGlucHV0IHRvIGV4Y2VwdGlvbiBmb3IKICAgICAgICBmYWlsZWQgb3BlcmF0aW9ucyBpbiBiYXRjaC4gVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgc28gaWYgc3BlY2lmaWVkCiAgICAgICAgdGhlIHVzZXIgY2FuIGFzc3VtZSB0aGF0IHRoZSBhbGwgZXJyb3JzIGluIHRoZSBmaWxlc3lzdGVtIG9wZXJhdGlvbgogICAgICAgIGhhdmUgYmVlbiByZXBvcnRlZC4gV2hlbiB0aGUgZGV0YWlscyBhcmUgbWlzc2luZyB0aGVuIHRoZSBvcGVyYXRpb24KICAgICAgICBtYXkgaGF2ZSBmYWlsZWQgYW55d2hlcmUgc28gdGhlIHVzZXIgc2hvdWxkIHVzZSBtYXRjaCB0byBkZXRlcm1pbmUKICAgICAgICB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtLgogICAgIiIiCiAgICBtZXNzYWdlID0gIiVzIHdpdGggZXhjZXB0aW9ucyAlcyIgJSAobXNnLCBleGNlcHRpb25fZGV0YWlscykKICAgIHN1cGVyKEJlYW1JT0Vycm9yLCBzZWxmKS5fX2luaXRfXyhtZXNzYWdlKQogICAgc2VsZi5leGNlcHRpb25fZGV0YWlscyA9IGV4Y2VwdGlvbl9kZXRhaWxzCgoKY2xhc3MgRmlsZVN5c3RlbSh3aXRoX21ldGFjbGFzcyhhYmMuQUJDTWV0YSwgQmVhbVBsdWdpbikpOiAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAiIiJBIGNsYXNzIHRoYXQgZGVmaW5lcyB0aGUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBhIGZpbGVzeXN0ZW0uCgogIEFsbCBtZXRob2RzIGFyZSBhYnN0cmFjdCBhbmQgdGhleSBhcmUgZm9yIGZpbGUgc3lzdGVtIHByb3ZpZGVycyB0bwogIGltcGxlbWVudC4gQ2xpZW50cyBzaG91bGQgdXNlIHRoZSBGaWxlU3lzdGVtcyBjbGFzcyB0byBpbnRlcmFjdCB3aXRoCiAgdGhlIGNvcnJlY3QgZmlsZSBzeXN0ZW0gYmFzZWQgb24gdGhlIHByb3ZpZGVkIGZpbGUgcGF0dGVybiBzY2hlbWUuCiAgIiIiCiAgQ0hVTktfU0laRSA9IDEgICMgQ2h1Y2sgc2l6ZSBpbiB0aGUgYmF0Y2ggb3BlcmF0aW9ucwoKICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmVfb3B0aW9ucyk6CiAgICAiIiIKICAgIEFyZ3M6CiAgICAgIHBpcGVsaW5lX29wdGlvbnM6IEluc3RhbmNlIG9mIGBgUGlwZWxpbmVPcHRpb25zYGAgb3IgZGljdCBvZiBvcHRpb25zIGFuZAogICAgICAgIHZhbHVlcyAobGlrZSBgYFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9uc2BgKS4KICAgICIiIgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9nZXRfY29tcHJlc3Npb25fdHlwZShwYXRoLCBjb21wcmVzc2lvbl90eXBlKToKICAgIGlmIGNvbXByZXNzaW9uX3R5cGUgPT0gQ29tcHJlc3Npb25UeXBlcy5BVVRPOgogICAgICBjb21wcmVzc2lvbl90eXBlID0gQ29tcHJlc3Npb25UeXBlcy5kZXRlY3RfY29tcHJlc3Npb25fdHlwZShwYXRoKQogICAgZWxpZiBub3QgQ29tcHJlc3Npb25UeXBlcy5pc192YWxpZF9jb21wcmVzc2lvbl90eXBlKGNvbXByZXNzaW9uX3R5cGUpOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnY29tcHJlc3Npb25fdHlwZSBtdXN0IGJlIENvbXByZXNzaW9uVHlwZSBvYmplY3QgYnV0ICcKICAgICAgICAgICd3YXMgJXMnICUgdHlwZShjb21wcmVzc2lvbl90eXBlKSkKICAgIHJldHVybiBjb21wcmVzc2lvbl90eXBlCgogIEBjbGFzc21ldGhvZAogIGRlZiBzY2hlbWUoY2xzKToKICAgICIiIlVSSSBzY2hlbWUgZm9yIHRoZSBGaWxlU3lzdGVtCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBqb2luKHNlbGYsIGJhc2VwYXRoLCAqcGF0aHMpOgogICAgIyB0eXBlOiAoc3RyLCAqc3RyKSAtPiBzdHIKCiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cwogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgc3BsaXQoc2VsZiwgcGF0aCk6CiAgICAjIHR5cGU6IChzdHIpIC0+IFR1cGxlW3N0ciwgc3RyXQoKICAgICIiIlNwbGl0cyB0aGUgZ2l2ZW4gcGF0aCBpbnRvIHR3byBwYXJ0cy4KCiAgICBTcGxpdHMgdGhlIHBhdGggaW50byBhIHBhaXIgKGhlYWQsIHRhaWwpIHN1Y2ggdGhhdCB0YWlsIGNvbnRhaW5zIHRoZSBsYXN0CiAgICBjb21wb25lbnQgb2YgdGhlIHBhdGggYW5kIGhlYWQgY29udGFpbnMgZXZlcnl0aGluZyB1cCB0byB0aGF0LgoKICAgIEZvciBmaWxlLXN5c3RlbXMgb3RoZXIgdGhhbiB0aGUgbG9jYWwgZmlsZS1zeXN0ZW0sIGhlYWQgc2hvdWxkIGluY2x1ZGUgdGhlCiAgICBwcmVmaXguCgogICAgQXJnczoKICAgICAgcGF0aDogcGF0aCBhcyBhIHN0cmluZwogICAgUmV0dXJuczoKICAgICAgYSBwYWlyIG9mIHBhdGggY29tcG9uZW50cyBhcyBzdHJpbmdzLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgbWtkaXJzKHNlbGYsIHBhdGgpOgogICAgIiIiUmVjdXJzaXZlbHkgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciB0aGUgcHJvdmlkZWQgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSB0aGF0IHNob3VsZCBiZSBjcmVhdGVkCgogICAgUmFpc2VzOgogICAgICBJT0Vycm9yOiBpZiBsZWFmIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGhhc19kaXJzKHNlbGYpOgogICAgIiIiV2hldGhlciB0aGlzIEZpbGVTeXN0ZW0gc3VwcG9ydHMgZGlyZWN0b3JpZXMuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgX2xpc3Qoc2VsZiwgZGlyX29yX3ByZWZpeCk6CiAgICAiIiJMaXN0IGZpbGVzIGluIGEgbG9jYXRpb24uCgogICAgTGlzdGluZyBpcyBub24tcmVjdXJzaXZlIChmb3IgZmlsZXN5c3RlbXMgdGhhdCBzdXBwb3J0IGRpcmVjdG9yaWVzKS4KCiAgICBBcmdzOgogICAgICBkaXJfb3JfcHJlZml4OiAoc3RyaW5nKSBBIGRpcmVjdG9yeSBvciBsb2NhdGlvbiBwcmVmaXggKGZvciBmaWxlc3lzdGVtcwogICAgICAgIHRoYXQgZG9uJ3QgaGF2ZSBkaXJlY3RvcmllcykuCgogICAgUmV0dXJuczoKICAgICAgR2VuZXJhdG9yIG9mIGBgRmlsZU1ldGFkYXRhYGAgb2JqZWN0cy4KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgbGlzdGluZyBmYWlscywgYnV0IG5vdCBpZiBubyBmaWxlcyB3ZXJlIGZvdW5kLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX3NwbGl0X3NjaGVtZSh1cmxfb3JfcGF0aCk6CiAgICBtYXRjaCA9IHJlLm1hdGNoKHInKF5bYS16XSspOi8vKC4qKScsIHVybF9vcl9wYXRoKQogICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiBtYXRjaC5ncm91cHMoKQogICAgcmV0dXJuIE5vbmUsIHVybF9vcl9wYXRoCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2NvbWJpbmVfc2NoZW1lKHNjaGVtZSwgcGF0aCk6CiAgICBpZiBzY2hlbWUgaXMgTm9uZToKICAgICAgcmV0dXJuIHBhdGgKICAgIHJldHVybiAne306Ly97fScuZm9ybWF0KHNjaGVtZSwgcGF0aCkKCiAgZGVmIF91cmxfZGlybmFtZShzZWxmLCB1cmxfb3JfcGF0aCk6CiAgICAiIiJMaWtlIHBvc2l4cGF0aC5kaXJuYW1lLCBidXQgcHJlc2VydmVzIHNjaGVtZTovLyBwcmVmaXguCgogICAgQXJnczoKICAgICAgdXJsX29yX3BhdGg6IEEgc3RyaW5nIGluIHRoZSBmb3JtIG9mIHNjaGVtZTovL3NvbWUvcGF0aCBPUiAvc29tZS9wYXRoLgogICAgIiIiCiAgICBzY2hlbWUsIHBhdGggPSBzZWxmLl9zcGxpdF9zY2hlbWUodXJsX29yX3BhdGgpCiAgICByZXR1cm4gc2VsZi5fY29tYmluZV9zY2hlbWUoc2NoZW1lLCBwb3NpeHBhdGguZGlybmFtZShwYXRoKSkKCiAgZGVmIG1hdGNoX2ZpbGVzKHNlbGYsIGZpbGVfbWV0YXMsIHBhdHRlcm4pOgogICAgIiIiRmlsdGVyIDpjbGFzczpgRmlsZU1ldGFkYXRhYCBvYmplY3RzIGJ5ICpwYXR0ZXJuKgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfbWV0YXMgKGxpc3Qgb2YgOmNsYXNzOmBGaWxlTWV0YWRhdGFgKToKICAgICAgICBGaWxlcyB0byBjb25zaWRlciB3aGVuIG1hdGNoaW5nCiAgICAgIHBhdHRlcm4gKHN0cik6IEZpbGUgcGF0dGVybgoKICAgIFNlZSBBbHNvOgogICAgICA6bWV0aDpgdHJhbnNsYXRlX3BhdHRlcm5gCgogICAgUmV0dXJuczoKICAgICAgR2VuZXJhdG9yIG9mIG1hdGNoaW5nIDpjbGFzczpgRmlsZU1ldGFkYXRhYAogICAgIiIiCiAgICByZV9wYXR0ZXJuID0gcmUuY29tcGlsZShzZWxmLnRyYW5zbGF0ZV9wYXR0ZXJuKHBhdHRlcm4pKQogICAgbWF0Y2ggPSByZV9wYXR0ZXJuLm1hdGNoCiAgICBmb3IgZmlsZV9tZXRhZGF0YSBpbiBmaWxlX21ldGFzOgogICAgICBpZiBtYXRjaChmaWxlX21ldGFkYXRhLnBhdGgpOgogICAgICAgIHlpZWxkIGZpbGVfbWV0YWRhdGEKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB0cmFuc2xhdGVfcGF0dGVybihwYXR0ZXJuKToKICAgICIiIgogICAgVHJhbnNsYXRlIGEgKnBhdHRlcm4qIHRvIGEgcmVndWxhciBleHByZXNzaW9uLgogICAgVGhlcmUgaXMgbm8gd2F5IHRvIHF1b3RlIG1ldGEtY2hhcmFjdGVycy4KCiAgICBQYXR0ZXJuIHN5bnRheDoKICAgICAgVGhlIHBhdHRlcm4gc3ludGF4IGlzIGJhc2VkIG9uIHRoZSBmbm1hdGNoXyBzeW50YXgsIHdpdGggdGhlIGZvbGxvd2luZwogICAgICBkaWZmZXJlbmNlczoKCiAgICAgIC0gICBgYCpgYCBJcyBlcXVpdmFsZW50IHRvIGBgW14vXFxdKmBgIHJhdGhlciB0aGFuIGBgLipgYC4KICAgICAgLSAgIGBgKipgYCBJcyBlcXVpdmFsZW50IHRvIGBgLipgYC4KCiAgICBTZWUgYWxzbzoKICAgICAgOm1ldGg6YG1hdGNoYCB1c2VzIHRoaXMgbWV0aG9kCgogICAgVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gYFB5dGhvbiAyLjcncyBmbm1hdGNoLnRyYW5zbGF0ZWBfLgogICAgVGhlIGNvZGUgaW4gdGhpcyBtZXRob2QgaXMgbGljZW5zZWQgdW5kZXIKICAgIFBZVEhPTiBTT0ZUV0FSRSBGT1VOREFUSU9OIExJQ0VOU0UgVkVSU0lPTiAyLgoKICAgIC4uIF9gZm5tYXRjaGA6IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9mbm1hdGNoLmh0bWwKCiAgICAuLiBfYFB5dGhvbiAyLjcncyBmbm1hdGNoLnRyYW5zbGF0ZWA6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRob24vY3B5dGhvblwKL2Jsb2IvMTcwZWE4Y2NkNDIzNWQyODUzOGFiNzEzMDQxNTAyZDA3YWQxY2FjZC9MaWIvZm5tYXRjaC5weSNMODUtTDEyMAogICAgIiIiCiAgICBpLCBuID0gMCwgbGVuKHBhdHRlcm4pCiAgICByZXMgPSAnJwogICAgd2hpbGUgaSA8IG46CiAgICAgIGMgPSBwYXR0ZXJuW2ldCiAgICAgIGkgPSBpICsgMQogICAgICBpZiBjID09ICcqJzoKICAgICAgICAjIE9uZSBjaGFyIGxvb2thaGVhZCBmb3IgIioqIgogICAgICAgIGlmIGkgPCBuIGFuZCBwYXR0ZXJuW2ldID09ICIqIjoKICAgICAgICAgIHJlcyA9IHJlcyArICcuKicKICAgICAgICAgIGkgPSBpICsgMQogICAgICAgIGVsc2U6CiAgICAgICAgICByZXMgPSByZXMgKyByJ1teL1xcXSonCiAgICAgIGVsaWYgYyA9PSAnPyc6CiAgICAgICAgcmVzID0gcmVzICsgJy4nCiAgICAgIGVsaWYgYyA9PSAnWyc6CiAgICAgICAgaiA9IGkKICAgICAgICBpZiBqIDwgbiBhbmQgcGF0dGVybltqXSA9PSAnISc6CiAgICAgICAgICBqID0gaiArIDEKICAgICAgICBpZiBqIDwgbiBhbmQgcGF0dGVybltqXSA9PSAnXSc6CiAgICAgICAgICBqID0gaiArIDEKICAgICAgICB3aGlsZSBqIDwgbiBhbmQgcGF0dGVybltqXSAhPSAnXSc6CiAgICAgICAgICBqID0gaiArIDEKICAgICAgICBpZiBqID49IG46CiAgICAgICAgICByZXMgPSByZXMgKyByJ1xbJwogICAgICAgIGVsc2U6CiAgICAgICAgICBzdHVmZiA9IHBhdHRlcm5baTpqXS5yZXBsYWNlKCdcXCcsICdcXFxcJykKICAgICAgICAgIGkgPSBqICsgMQogICAgICAgICAgaWYgc3R1ZmZbMF0gPT0gJyEnOgogICAgICAgICAgICBzdHVmZiA9ICdeJyArIHN0dWZmWzE6XQogICAgICAgICAgZWxpZiBzdHVmZlswXSA9PSAnXic6CiAgICAgICAgICAgIHN0dWZmID0gJ1xcJyArIHN0dWZmCiAgICAgICAgICByZXMgPSAnJXNbJXNdJyAlIChyZXMsIHN0dWZmKQogICAgICBlbHNlOgogICAgICAgIHJlcyA9IHJlcyArIHJlLmVzY2FwZShjKQoKICAgIGxvZ2dlci5kZWJ1ZygndHJhbnNsYXRlX3BhdHRlcm46ICVyIC0+ICVyJywgcGF0dGVybiwgcmVzKQogICAgcmV0dXJuIHJlcyArIHInXFooP21zKScKCiAgZGVmIG1hdGNoKHNlbGYsIHBhdHRlcm5zLCBsaW1pdHM9Tm9uZSk6CiAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBwYXRocyB0byB0aGUgcGF0dGVybnMgcHJvdmlkZWQuCgogICAgU2VlIEFsc286CiAgICAgIDptZXRoOmB0cmFuc2xhdGVfcGF0dGVybmAKCiAgICBQYXR0ZXJucyBlbmRpbmcgd2l0aCAnLycgb3IgJ1xcJyB3aWxsIGJlIGFwcGVuZGVkIHdpdGggJyonLgoKICAgIEFyZ3M6CiAgICAgIHBhdHRlcm5zOiBsaXN0IG9mIHN0cmluZyBmb3IgdGhlIGZpbGUgcGF0aCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QKICAgICAgbGltaXRzOiBsaXN0IG9mIG1heGltdW0gbnVtYmVyIG9mIHJlc3BvbnNlcyB0aGF0IG5lZWQgdG8gYmUgZmV0Y2hlZAoKICAgIFJldHVybnM6IGxpc3Qgb2YgYGBNYXRjaFJlc3VsdGBgIG9iamVjdHMuCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIGFueSBvZiB0aGUgcGF0dGVybiBtYXRjaCBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbGltaXRzIGlzIE5vbmU6CiAgICAgIGxpbWl0cyA9IFtOb25lXSAqIGxlbihwYXR0ZXJucykKICAgIGVsc2U6CiAgICAgIGVycl9tc2cgPSAiUGF0dGVybnMgYW5kIGxpbWl0cyBzaG91bGQgYmUgZXF1YWwgaW4gbGVuZ3RoIgogICAgICBhc3NlcnQgbGVuKHBhdHRlcm5zKSA9PSBsZW4obGltaXRzKSwgZXJyX21zZwoKICAgIGRlZiBfbWF0Y2gocGF0dGVybiwgbGltaXQpOgogICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBwYXRocyB0byB0aGUgcGF0dGVybiBwcm92aWRlZC4iIiIKICAgICAgaWYgcGF0dGVybi5lbmRzd2l0aCgnLycpIG9yIHBhdHRlcm4uZW5kc3dpdGgoJ1xcJyk6CiAgICAgICAgcGF0dGVybiArPSAnKicKICAgICAgIyBHZXQgdGhlIHBhcnQgb2YgdGhlIHBhdHRlcm4gYmVmb3JlIHRoZSBmaXJzdCBnbG9iYmluZyBjaGFyYWN0ZXIuCiAgICAgICMgRm9yIGV4YW1wbGUgc2NoZW1lOi8vcGF0aC9mb28qIHdpbGwgYmVjb21lIHNjaGVtZTovL3BhdGgvZm9vIGZvcgogICAgICAjIGZpbGVzeXN0ZW1zIGxpa2UgR0NTLCBvciBjb252ZXJ0ZWQgdG8gc2NoZW1lOi8vcGF0aCBmb3IgZmlsZXN5c3RlbXMgd2l0aAogICAgICAjIGRpcmVjdG9yaWVzLgogICAgICBwcmVmaXhfb3JfZGlyID0gcmUubWF0Y2goJ15bXlsqP10qJywgcGF0dGVybikuZ3JvdXAoMCkKCiAgICAgIGZpbGVfbWV0YWRhdGFzID0gW10KICAgICAgaWYgcHJlZml4X29yX2RpciA9PSBwYXR0ZXJuOgogICAgICAgICMgU2hvcnQtY2lyY3VpdCBjYWxsaW5nIHNlbGYubGlzdCgpIGlmIHRoZXJlJ3Mgbm8gZ2xvYiBwYXR0ZXJuIHRvIG1hdGNoLgogICAgICAgIGlmIHNlbGYuZXhpc3RzKHBhdHRlcm4pOgogICAgICAgICAgZmlsZV9tZXRhZGF0YXMgPSBbRmlsZU1ldGFkYXRhKHBhdHRlcm4sIHNlbGYuc2l6ZShwYXR0ZXJuKSldCiAgICAgIGVsc2U6CiAgICAgICAgaWYgc2VsZi5oYXNfZGlycygpOgogICAgICAgICAgcHJlZml4X2Rpcm5hbWUgPSBzZWxmLl91cmxfZGlybmFtZShwcmVmaXhfb3JfZGlyKQogICAgICAgICAgaWYgbm90IHByZWZpeF9kaXJuYW1lID09IHByZWZpeF9vcl9kaXI6CiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygKICAgICAgICAgICAgICAgICJDaGFuZ2VkIHByZWZpeF9vcl9kaXIgJXIgLT4gJXIiLCBwcmVmaXhfb3JfZGlyLCBwcmVmaXhfZGlybmFtZSkKICAgICAgICAgICAgcHJlZml4X29yX2RpciA9IHByZWZpeF9kaXJuYW1lCgogICAgICAgIGxvZ2dlci5kZWJ1ZygiTGlzdGluZyBmaWxlcyBpbiAlciIsIHByZWZpeF9vcl9kaXIpCiAgICAgICAgZmlsZV9tZXRhZGF0YXMgPSBzZWxmLl9saXN0KHByZWZpeF9vcl9kaXIpCgogICAgICBtZXRhZGF0YV9saXN0ID0gW10KICAgICAgZm9yIGZpbGVfbWV0YWRhdGEgaW4gc2VsZi5tYXRjaF9maWxlcyhmaWxlX21ldGFkYXRhcywgcGF0dGVybik6CiAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmUgYW5kIGxlbihtZXRhZGF0YV9saXN0KSA+PSBsaW1pdDoKICAgICAgICAgIGJyZWFrCiAgICAgICAgbWV0YWRhdGFfbGlzdC5hcHBlbmQoZmlsZV9tZXRhZGF0YSkKCiAgICAgIHJldHVybiBNYXRjaFJlc3VsdChwYXR0ZXJuLCBtZXRhZGF0YV9saXN0KQoKICAgIGV4Y2VwdGlvbnMgPSB7fQogICAgcmVzdWx0ID0gW10KICAgIGZvciBwYXR0ZXJuLCBsaW1pdCBpbiB6aXAocGF0dGVybnMsIGxpbWl0cyk6CiAgICAgIHRyeToKICAgICAgICByZXN1bHQuYXBwZW5kKF9tYXRjaChwYXR0ZXJuLCBsaW1pdCkpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbcGF0dGVybl0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIk1hdGNoIG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQogICAgcmV0dXJuIHJlc3VsdAoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGNyZWF0ZSgKICAgICAgc2VsZiwKICAgICAgcGF0aCwKICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAjIHR5cGU6ICguLi4pIC0+IEJpbmFyeUlPCgogICAgIiIiUmV0dXJucyBhIHdyaXRlIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbQogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QKCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgY2xvc2UgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZQogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgb3BlbigKICAgICAgc2VsZiwKICAgICAgcGF0aCwKICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAjIHR5cGU6ICguLi4pIC0+IEJpbmFyeUlPCgogICAgIiIiUmV0dXJucyBhIHJlYWQgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIGZpbGUgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlsZSBvYmplY3QgdG8gYmUgcmVhZAogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QKCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgY2xvc2UgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZQogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgY29weShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZWN1cnNpdmVseSBjb3B5IHRoZSBmaWxlIHRyZWUgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBsaXN0IG9mIHNvdXJjZSBmaWxlIG9iamVjdHMgdGhhdCBuZWVkcyB0byBiZSBjb3BpZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogbGlzdCBvZiBkZXN0aW5hdGlvbiBvZiB0aGUgbmV3IG9iamVjdAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBhbnkgb2YgdGhlIGNvcHkgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiByZW5hbWUoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVuYW1lIHRoZSBmaWxlcyBhdCB0aGUgc291cmNlIGxpc3QgdG8gdGhlIGRlc3RpbmF0aW9uIGxpc3QuCiAgICBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGxpc3RzIHNob3VsZCBiZSBvZiB0aGUgc2FtZSBzaXplLgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBMaXN0IG9mIGZpbGUgcGF0aHMgdGhhdCBuZWVkIHRvIGJlIG1vdmVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IExpc3Qgb2YgZGVzdGluYXRpb25fZmlsZV9uYW1lcyBmb3IgdGhlIGZpbGVzCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIGFueSBvZiB0aGUgcmVuYW1lIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgogICAgIyB0eXBlOiAoc3RyKSAtPiBib29sCgogICAgIiIiQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIHBhdGggZXhpc3RzIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIHRoYXQgbmVlZHMgdG8gYmUgY2hlY2tlZC4KCiAgICBSZXR1cm5zOiBib29sZWFuIGZsYWcgaW5kaWNhdGluZyBpZiBwYXRoIGV4aXN0cwogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgc2l6ZShzZWxmLCBwYXRoKToKICAgICMgdHlwZTogKHN0cikgLT4gaW50CgogICAgIiIiR2V0IHNpemUgaW4gYnl0ZXMgb2YgYSBmaWxlIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBmaWxlcGF0aCBvZiBmaWxlLgoKICAgIFJldHVybnM6IGludCBzaXplIG9mIGZpbGUgYWNjb3JkaW5nIHRvIHRoZSBGaWxlU3lzdGVtLgoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBwYXRoIGRvZXNuJ3QgZXhpc3QuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBsYXN0X3VwZGF0ZWQoc2VsZiwgcGF0aCk6CiAgICAiIiJHZXQgVU5JWCBFcG9jaCB0aW1lIGluIHNlY29uZHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgZmlsZS4KCiAgICBSZXR1cm5zOiBmbG9hdCBVTklYIEVwb2NoIHRpbWUKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgcGF0aCBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjaGVja3N1bShzZWxmLCBwYXRoKToKICAgICIiIkZldGNoIGNoZWNrc3VtIG1ldGFkYXRhIG9mIGEgZmlsZSBvbiB0aGUKICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbWAuCgogICAgVGhpcyBvcGVyYXRpb24gcmV0dXJucyBjaGVja3N1bSBtZXRhZGF0YSBhcyBzdG9yZWQgaW4gdGhlIHVuZGVybHlpbmcKICAgIEZpbGVTeXN0ZW0uIEl0IHNob3VsZCBub3QgbmVlZCB0byByZWFkIGZpbGUgZGF0YSB0byBvYnRhaW4gdGhpcyB2YWx1ZS4KICAgIENoZWNrc3VtIHR5cGUgYW5kIGZvcm1hdCBhcmUgRmlsZVN5c3RlbSBkZXBlbmRlbnQgYW5kIGFyZSBub3QgY29tcGF0aWJsZQogICAgYmV0d2VlbiBGaWxlU3lzdGVtcy4KICAgIEZpbGVTeXN0ZW0gaW1wbGVtZW50YXRpb25zIG1heSByZXR1cm4gZmlsZSBzaXplIGlmIGEgY2hlY2tzdW0gaXNuJ3QKICAgIGF2YWlsYWJsZS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiBhIGZpbGUuCgogICAgUmV0dXJuczogc3RyaW5nIGNvbnRhaW5pbmcgY2hlY2tzdW0KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgcGF0aCBpc24ndCBhIGZpbGUgb3IgZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGRlbGV0ZShzZWxmLCBwYXRocyk6CiAgICAiIiJEZWxldGVzIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGF0IHRoZSBwcm92aWRlZCBwYXRocy4KICAgIERpcmVjdG9yaWVzIHdpbGwgYmUgZGVsZXRlZCByZWN1cnNpdmVseS4KCiAgICBBcmdzOgogICAgICBwYXRoczogbGlzdCBvZiBwYXRocyB0aGF0IGdpdmUgdGhlIGZpbGUgb2JqZWN0cyB0byBiZSBkZWxldGVkCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIGFueSBvZiB0aGUgZGVsZXRlIG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCpR9lCiMKkNvbXByZXNzaW9uVHlwZXMuaXNfdmFsaWRfY29tcHJlc3Npb25fdHlwZZRqVjEBAEtXS2GHlIwaQ29tcHJlc3Npb25UeXBlcy5taW1lX3R5cGWUalYxAQBLY0tqh5SMKENvbXByZXNzaW9uVHlwZXMuZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGWUalYxAQBLbEt2h5SMEENvbXByZXNzaW9uVHlwZXOUal0xAQBLP0t2h5SMF0NvbXByZXNzZWRGaWxlLl9faW5pdF9flGpWMQEAS4FLqIeUjCdDb21wcmVzc2VkRmlsZS5faW5pdGlhbGl6ZV9kZWNvbXByZXNzb3KUalYxAQBLqkuxh5SMJUNvbXByZXNzZWRGaWxlLl9pbml0aWFsaXplX2NvbXByZXNzb3KUalYxAQBLs0u8h5SMF0NvbXByZXNzZWRGaWxlLnJlYWRhYmxllGpWMQEAS75LwIeUjBhDb21wcmVzc2VkRmlsZS53cml0ZWFibGWUalYxAQBLwkvEh5SMFENvbXByZXNzZWRGaWxlLndyaXRllGpWMQEAS8ZLzYeUjChDb21wcmVzc2VkRmlsZS5fZmV0Y2hfdG9faW50ZXJuYWxfYnVmZmVylGpWMQEAS89L+oeUjClDb21wcmVzc2VkRmlsZS5fcmVhZF9mcm9tX2ludGVybmFsX2J1ZmZlcpRqVjEBAEv8TQMBh5SME0NvbXByZXNzZWRGaWxlLnJlYWSUalYxAQBNBQFNCwGHlIwXQ29tcHJlc3NlZEZpbGUucmVhZGxpbmWUalYxAQBNDQFNHwGHlIwVQ29tcHJlc3NlZEZpbGUuY2xvc2VklGpWMQEATSEBTSIBh5SMFENvbXByZXNzZWRGaWxlLmNsb3NllGpWMQEATSQBTSsBh5SMFENvbXByZXNzZWRGaWxlLmZsdXNolGpWMQEATS0BTTABh5SMF0NvbXByZXNzZWRGaWxlLnNlZWthYmxllGpWMQEATTIBTTQBh5SMIUNvbXByZXNzZWRGaWxlLl9jbGVhcl9yZWFkX2J1ZmZlcpRqVjEBAE02AU07AYeUjBtDb21wcmVzc2VkRmlsZS5fcmV3aW5kX2ZpbGWUalYxAQBNPQFNQgGHlIwWQ29tcHJlc3NlZEZpbGUuX3Jld2luZJRqVjEBAE1EAU1MAYeUjBNDb21wcmVzc2VkRmlsZS5zZWVrlGpWMQEATU4BTYwBh5SME0NvbXByZXNzZWRGaWxlLnRlbGyUalYxAQBNjgFNkAGHlIwYQ29tcHJlc3NlZEZpbGUuX19lbnRlcl9flGpWMQEATZIBTZMBh5SMF0NvbXByZXNzZWRGaWxlLl9fZXhpdF9flGpWMQEATZUBTZYBh5SMDkNvbXByZXNzZWRGaWxllGpdMQEAS3lNlgGHlIwVRmlsZU1ldGFkYXRhLl9faW5pdF9flGpWMQEATZsBTaEBh5SME0ZpbGVNZXRhZGF0YS5fX2VxX1+UalYxAQBNowFNqAGHlIwVRmlsZU1ldGFkYXRhLl9faGFzaF9flGpWMQEATaoBTasBh5SME0ZpbGVNZXRhZGF0YS5fX25lX1+UalYxAQBNrQFNrwGHlIwVRmlsZU1ldGFkYXRhLl9fcmVwcl9flGpWMQEATbEBTbIBh5SMDEZpbGVNZXRhZGF0YZRqXTEBAE2ZAU2yAYeUjBRNYXRjaFJlc3VsdC5fX2luaXRfX5RqVjEBAE25AU27AYeUjAtNYXRjaFJlc3VsdJRqXTEBAE21AU27AYeUjBRCZWFtSU9FcnJvci5fX2luaXRfX5RqVjEBAE2/AU3MAYeUjAtCZWFtSU9FcnJvcpRqXTEBAE2+AU3MAYeUjBNGaWxlU3lzdGVtLl9faW5pdF9flGpWMQEATdgBTd0Bh5SMIEZpbGVTeXN0ZW0uX2dldF9jb21wcmVzc2lvbl90eXBllGpWMQEATd8BTecBh5SMEUZpbGVTeXN0ZW0uc2NoZW1llGpWMQEATekBTe0Bh5SMD0ZpbGVTeXN0ZW0uam9pbpRqVjEBAE3vAU37AYeUjBBGaWxlU3lzdGVtLnNwbGl0lGpWMQEATf0BTQ4Ch5SMEUZpbGVTeXN0ZW0ubWtkaXJzlGpWMQEATRACTRoCh5SME0ZpbGVTeXN0ZW0uaGFzX2RpcnOUalYxAQBNHAJNHwKHlIwQRmlsZVN5c3RlbS5fbGlzdJRqVjEBAE0hAk0xAoeUjBhGaWxlU3lzdGVtLl9zcGxpdF9zY2hlbWWUalYxAQBNMwJNOAKHlIwaRmlsZVN5c3RlbS5fY29tYmluZV9zY2hlbWWUalYxAQBNOgJNPgKHlIwXRmlsZVN5c3RlbS5fdXJsX2Rpcm5hbWWUalYxAQBNQAJNRwKHlIwWRmlsZVN5c3RlbS5tYXRjaF9maWxlc5RqVjEBAE1JAk1bAoeUjBxGaWxlU3lzdGVtLnRyYW5zbGF0ZV9wYXR0ZXJulGpWMQEATV0CTZoCh5SMEEZpbGVTeXN0ZW0ubWF0Y2iUalYxAQBNnAJN3wKHlIwRRmlsZVN5c3RlbS5jcmVhdGWUalYxAQBN4QJN8gKHlIwPRmlsZVN5c3RlbS5vcGVulGpWMQEATfQCTQUDh5SMD0ZpbGVTeXN0ZW0uY29weZRqVjEBAE0HA00SA4eUjBFGaWxlU3lzdGVtLnJlbmFtZZRqVjEBAE0UA00gA4eUjBFGaWxlU3lzdGVtLmV4aXN0c5RqVjEBAE0iA00tA4eUjA9GaWxlU3lzdGVtLnNpemWUalYxAQBNLwNNPQOHlIwXRmlsZVN5c3RlbS5sYXN0X3VwZGF0ZWSUalYxAQBNPwNNSwOHlIwTRmlsZVN5c3RlbS5jaGVja3N1bZRqVjEBAE1NA01gA4eUjBFGaWxlU3lzdGVtLmRlbGV0ZZRqVjEBAE1iA01tA4eUjApGaWxlU3lzdGVtlGpdMQEATc8BTW0Dh5R1fZQojBBDb21wcmVzc2lvblR5cGVzlGqvAwAAjCpDb21wcmVzc2lvblR5cGVzLmlzX3ZhbGlkX2NvbXByZXNzaW9uX3R5cGWUaq8DAACMGkNvbXByZXNzaW9uVHlwZXMubWltZV90eXBllGqvAwAAjChDb21wcmVzc2lvblR5cGVzLmRldGVjdF9jb21wcmVzc2lvbl90eXBllGqvAwAAjA5Db21wcmVzc2VkRmlsZZRqrwMAAIwXQ29tcHJlc3NlZEZpbGUucmVhZGFibGWUaq8DAACMGENvbXByZXNzZWRGaWxlLndyaXRlYWJsZZRqrwMAAIwUQ29tcHJlc3NlZEZpbGUud3JpdGWUaq8DAACME0NvbXByZXNzZWRGaWxlLnJlYWSUaq8DAACMF0NvbXByZXNzZWRGaWxlLnJlYWRsaW5llGqvAwAAjBVDb21wcmVzc2VkRmlsZS5jbG9zZWSUaq8DAACMFENvbXByZXNzZWRGaWxlLmNsb3NllGqvAwAAjBRDb21wcmVzc2VkRmlsZS5mbHVzaJRqrwMAAIwTQ29tcHJlc3NlZEZpbGUuc2Vla5RqrwMAAIwTQ29tcHJlc3NlZEZpbGUudGVsbJRqrwMAAIwMRmlsZU1ldGFkYXRhlGqvAwAAjAtNYXRjaFJlc3VsdJRqrwMAAIwKRmlsZVN5c3RlbZRqrwMAAIwRRmlsZVN5c3RlbS5zY2hlbWWUaq8DAACMD0ZpbGVTeXN0ZW0uam9pbpRqrwMAAIwQRmlsZVN5c3RlbS5zcGxpdJRqrwMAAIwRRmlsZVN5c3RlbS5ta2RpcnOUaq8DAACME0ZpbGVTeXN0ZW0uaGFzX2RpcnOUaq8DAACMFkZpbGVTeXN0ZW0ubWF0Y2hfZmlsZXOUaq8DAACMHEZpbGVTeXN0ZW0udHJhbnNsYXRlX3BhdHRlcm6Uaq8DAACMEEZpbGVTeXN0ZW0ubWF0Y2iUaq8DAACMEUZpbGVTeXN0ZW0uY3JlYXRllGqvAwAAjA9GaWxlU3lzdGVtLm9wZW6Uaq8DAACMD0ZpbGVTeXN0ZW0uY29weZRqrwMAAIwRRmlsZVN5c3RlbS5yZW5hbWWUaq8DAACMEUZpbGVTeXN0ZW0uZXhpc3RzlGqvAwAAjA9GaWxlU3lzdGVtLnNpemWUaq8DAACMF0ZpbGVTeXN0ZW0ubGFzdF91cGRhdGVklGqvAwAAjBNGaWxlU3lzdGVtLmNoZWNrc3VtlGqvAwAAjBFGaWxlU3lzdGVtLmRlbGV0ZZRqrwMAAHWMGWFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW2UdJSMG2FwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pb5QoWMsgAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdGllcyBmb3IgYGBGaWxlU3lzdGVtYGAgaW1wbGVtZW50YXRpb25zLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhYmMKaW1wb3J0IGlvCmltcG9ydCBvcwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCB3aXRoX21ldGFjbGFzcwoKX19hbGxfXyA9IFsKICAgICdEb3dubG9hZGVyJywKICAgICdVcGxvYWRlcicsCiAgICAnRG93bmxvYWRlclN0cmVhbScsCiAgICAnVXBsb2FkZXJTdHJlYW0nLAogICAgJ1BpcGVTdHJlYW0nCl0KCgpjbGFzcyBEb3dubG9hZGVyKHdpdGhfbWV0YWNsYXNzKGFiYy5BQkNNZXRhLCBvYmplY3QpKTogICMgdHlwZTogaWdub3JlW21pc2NdCiAgIiIiRG93bmxvYWQgaW50ZXJmYWNlIGZvciBhIHNpbmdsZSBmaWxlLgoKICBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHN1cHBvcnQgcmFuZG9tIGFjY2VzcyByZWFkcy4KICAiIiIKICBAYWJjLmFic3RyYWN0cHJvcGVydHkKICBkZWYgc2l6ZShzZWxmKToKICAgICIiIlNpemUgb2YgZmlsZSB0byBkb3dubG9hZC4iIiIKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBnZXRfcmFuZ2Uoc2VsZiwgc3RhcnQsIGVuZCk6CiAgICAiIiJSZXRyaWV2ZSBhIGdpdmVuIGJ5dGUgcmFuZ2UgW3N0YXJ0LCBlbmQpIGZyb20gdGhpcyBkb3dubG9hZC4KCiAgICBSYW5nZSBtdXN0IGJlIGluIHRoaXMgZm9ybToKICAgICAgMCA8PSBzdGFydCA8IGVuZDogRmV0Y2ggdGhlIGJ5dGVzIGZyb20gc3RhcnQgdG8gZW5kLgoKICAgIEFyZ3M6CiAgICAgIHN0YXJ0OiAoaW50KSBJbml0aWFsIGJ5dGUgb2Zmc2V0LgogICAgICBlbmQ6IChpbnQpIEZpbmFsIGJ5dGUgb2Zmc2V0LCBleGNsdXNpdmUuCgogICAgUmV0dXJuczoKICAgICAgKHN0cmluZykgQSBidWZmZXIgY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIGRhdGEuCiAgICAiIiIKCgpjbGFzcyBVcGxvYWRlcih3aXRoX21ldGFjbGFzcyhhYmMuQUJDTWV0YSwgb2JqZWN0KSk6ICAjIHR5cGU6IGlnbm9yZVttaXNjXQogICIiIlVwbG9hZCBpbnRlcmZhY2UgZm9yIGEgc2luZ2xlIGZpbGUuIiIiCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBwdXQoc2VsZiwgZGF0YSk6CiAgICAiIiJXcml0ZSBkYXRhIHRvIGZpbGUgc2VxdWVudGlhbGx5LgoKICAgIEFyZ3M6CiAgICAgIGRhdGE6IChtZW1vcnl2aWV3KSBEYXRhIHRvIHdyaXRlLgogICAgIiIiCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgZmluaXNoKHNlbGYpOgogICAgIiIiU2lnbmFsIHRvIHVwbG9hZCBhbnkgcmVtYWluaW5nIGRhdGEgYW5kIGNsb3NlIHRoZSBmaWxlLgoKICAgIEZpbGUgc2hvdWxkIGJlIGZ1bGx5IHdyaXR0ZW4gdXBvbiByZXR1cm4gZnJvbSB0aGlzIG1ldGhvZC4KCiAgICBSYWlzZXM6CiAgICAgIEFueSBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIHVwbG9hZC4KICAgICIiIgoKCmNsYXNzIERvd25sb2FkZXJTdHJlYW0oaW8uUmF3SU9CYXNlKToKICAiIiJQcm92aWRlcyBhIHN0cmVhbSBpbnRlcmZhY2UgZm9yIERvd25sb2FkZXIgb2JqZWN0cy4iIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIGRvd25sb2FkZXIsIHJlYWRfYnVmZmVyX3NpemU9aW8uREVGQVVMVF9CVUZGRVJfU0laRSwgbW9kZT0ncmInKToKICAgICIiIkluaXRpYWxpemVzIHRoZSBzdHJlYW0uCgogICAgQXJnczoKICAgICAgZG93bmxvYWRlcjogKERvd25sb2FkZXIpIEZpbGVzeXN0ZW0gZGVwZW5kZW50IGltcGxlbWVudGF0aW9uLgogICAgICByZWFkX2J1ZmZlcl9zaXplOiAoaW50KSBCdWZmZXIgc2l6ZSB0byB1c2UgZHVyaW5nIHJlYWQgb3BlcmF0aW9ucy4KICAgICAgbW9kZTogKHN0cmluZykgUHl0aG9uIG1vZGUgYXR0cmlidXRlIGZvciB0aGlzIHN0cmVhbS4KICAgICIiIgogICAgc2VsZi5fZG93bmxvYWRlciA9IGRvd25sb2FkZXIKICAgIHNlbGYubW9kZSA9IG1vZGUKICAgIHNlbGYuX3Bvc2l0aW9uID0gMAogICAgc2VsZi5fcmVhZGVyX2J1ZmZlcl9zaXplID0gcmVhZF9idWZmZXJfc2l6ZQoKICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAiIiJSZWFkIHVwIHRvIGxlbihiKSBieXRlcyBpbnRvIGIuCgogICAgUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoMCBmb3IgRU9GKS4KCiAgICBBcmdzOgogICAgICBiOiAoYnl0ZWFycmF5L21lbW9yeXZpZXcpIEJ1ZmZlciB0byByZWFkIGludG8uCiAgICAiIiIKICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKICAgIGlmIHNlbGYuX3Bvc2l0aW9uID49IHNlbGYuX2Rvd25sb2FkZXIuc2l6ZToKICAgICAgcmV0dXJuIDAKCiAgICBzdGFydCA9IHNlbGYuX3Bvc2l0aW9uCiAgICBlbmQgPSBtaW4oc2VsZi5fcG9zaXRpb24gKyBsZW4oYiksIHNlbGYuX2Rvd25sb2FkZXIuc2l6ZSkKICAgIGRhdGEgPSBzZWxmLl9kb3dubG9hZGVyLmdldF9yYW5nZShzdGFydCwgZW5kKQogICAgc2VsZi5fcG9zaXRpb24gKz0gbGVuKGRhdGEpCiAgICBiWzpsZW4oZGF0YSldID0gZGF0YQogICAgcmV0dXJuIGxlbihkYXRhKQoKICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1vcy5TRUVLX1NFVCk6CiAgICAiIiJTZXQgdGhlIHN0cmVhbSdzIGN1cnJlbnQgb2Zmc2V0LgoKICAgIE5vdGUgaWYgdGhlIG5ldyBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kLCBpdCBpcyBhZGp1c3RlZCB0byBlaXRoZXIgMCBvciBFT0YuCgogICAgQXJnczoKICAgICAgb2Zmc2V0OiBzZWVrIG9mZnNldCBhcyBudW1iZXIuCiAgICAgIHdoZW5jZTogc2VlayBtb2RlLiBTdXBwb3J0ZWQgbW9kZXMgYXJlIG9zLlNFRUtfU0VUIChhYnNvbHV0ZSBzZWVrKSwKICAgICAgICBvcy5TRUVLX0NVUiAoc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbiksIGFuZCBvcy5TRUVLX0VORAogICAgICAgIChzZWVrIHJlbGF0aXZlIHRvIHRoZSBlbmQsIG9mZnNldCBzaG91bGQgYmUgbmVnYXRpdmUpLgoKICAgIFJhaXNlczoKICAgICAgYGBWYWx1ZUVycm9yYGA6IFdoZW4gdGhpcyBzdHJlYW0gaXMgY2xvc2VkIG9yIGlmIHdoZW5jZSBpcyBpbnZhbGlkLgogICAgIiIiCiAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCgogICAgaWYgd2hlbmNlID09IG9zLlNFRUtfU0VUOgogICAgICBzZWxmLl9wb3NpdGlvbiA9IG9mZnNldAogICAgZWxpZiB3aGVuY2UgPT0gb3MuU0VFS19DVVI6CiAgICAgIHNlbGYuX3Bvc2l0aW9uICs9IG9mZnNldAogICAgZWxpZiB3aGVuY2UgPT0gb3MuU0VFS19FTkQ6CiAgICAgIHNlbGYuX3Bvc2l0aW9uID0gc2VsZi5fZG93bmxvYWRlci5zaXplICsgb2Zmc2V0CiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdXaGVuY2UgbW9kZSAlciBpcyBpbnZhbGlkLicgJSB3aGVuY2UpCgogICAgc2VsZi5fcG9zaXRpb24gPSBtaW4oc2VsZi5fcG9zaXRpb24sIHNlbGYuX2Rvd25sb2FkZXIuc2l6ZSkKICAgIHNlbGYuX3Bvc2l0aW9uID0gbWF4KHNlbGYuX3Bvc2l0aW9uLCAwKQogICAgcmV0dXJuIHNlbGYuX3Bvc2l0aW9uCgogIGRlZiB0ZWxsKHNlbGYpOgogICAgIiIiVGVsbCB0aGUgc3RyZWFtJ3MgY3VycmVudCBvZmZzZXQuCgogICAgUmV0dXJuczoKICAgICAgY3VycmVudCBvZmZzZXQgaW4gcmVhZGluZyB0aGlzIHN0cmVhbS4KCiAgICBSYWlzZXM6CiAgICAgIGBgVmFsdWVFcnJvcmBgOiBXaGVuIHRoaXMgc3RyZWFtIGlzIGNsb3NlZC4KICAgICIiIgogICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgcmV0dXJuIHNlbGYuX3Bvc2l0aW9uCgogIGRlZiBzZWVrYWJsZShzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiByZWFkYWJsZShzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiByZWFkYWxsKHNlbGYpOgogICAgIiIiUmVhZCB1bnRpbCBFT0YsIHVzaW5nIG11bHRpcGxlIHJlYWQoKSBjYWxsLiIiIgogICAgcmVzID0gW10KICAgIHdoaWxlIFRydWU6CiAgICAgIGRhdGEgPSBzZWxmLnJlYWQoc2VsZi5fcmVhZGVyX2J1ZmZlcl9zaXplKQogICAgICBpZiBub3QgZGF0YToKICAgICAgICBicmVhawogICAgICByZXMuYXBwZW5kKGRhdGEpCiAgICByZXR1cm4gYicnLmpvaW4ocmVzKQoKCmNsYXNzIFVwbG9hZGVyU3RyZWFtKGlvLlJhd0lPQmFzZSk6CiAgIiIiUHJvdmlkZXMgYSBzdHJlYW0gaW50ZXJmYWNlIGZvciBVcGxvYWRlciBvYmplY3RzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB1cGxvYWRlciwgbW9kZT0nd2InKToKICAgICIiIkluaXRpYWxpemVzIHRoZSBzdHJlYW0uCgogICAgQXJnczoKICAgICAgdXBsb2FkZXI6IChVcGxvYWRlcikgRmlsZXN5c3RlbSBkZXBlbmRlbnQgaW1wbGVtZW50YXRpb24uCiAgICAgIG1vZGU6IChzdHJpbmcpIFB5dGhvbiBtb2RlIGF0dHJpYnV0ZSBmb3IgdGhpcyBzdHJlYW0uCiAgICAiIiIKICAgIHNlbGYuX3VwbG9hZGVyID0gdXBsb2FkZXIKICAgIHNlbGYubW9kZSA9IG1vZGUKICAgIHNlbGYuX3Bvc2l0aW9uID0gMAoKICBkZWYgdGVsbChzZWxmKToKICAgIHJldHVybiBzZWxmLl9wb3NpdGlvbgoKICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAiIiJXcml0ZSBieXRlcyBmcm9tIGIuCgogICAgUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiAoPD0gbGVuKGIpKS4KCiAgICBBcmdzOgogICAgICBiOiAobWVtb3J5dmlldykgQnVmZmVyIHdpdGggZGF0YSB0byB3cml0ZS4KICAgICIiIgogICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgc2VsZi5fdXBsb2FkZXIucHV0KGIpCgogICAgYnl0ZXNfd3JpdHRlbiA9IGxlbihiKQogICAgc2VsZi5fcG9zaXRpb24gKz0gYnl0ZXNfd3JpdHRlbgogICAgcmV0dXJuIGJ5dGVzX3dyaXR0ZW4KCiAgZGVmIGNsb3NlKHNlbGYpOgogICAgIiIiQ29tcGxldGUgdGhlIHVwbG9hZCBhbmQgY2xvc2UgdGhpcyBzdHJlYW0uCgogICAgVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLgoKICAgIFJhaXNlczoKICAgICAgQW55IGVycm9yIGVuY291bnRlcmVkIGJ5IHRoZSB1cGxvYWRlci4KICAgICIiIgogICAgaWYgbm90IHNlbGYuY2xvc2VkOgogICAgICBzZWxmLl91cGxvYWRlci5maW5pc2goKQoKICAgIHN1cGVyKFVwbG9hZGVyU3RyZWFtLCBzZWxmKS5jbG9zZSgpCgogIGRlZiB3cml0YWJsZShzZWxmKToKICAgIHJldHVybiBUcnVlCgoKY2xhc3MgUGlwZVN0cmVhbShvYmplY3QpOgogICIiIkEgY2xhc3MgdGhhdCBwcmVzZW50cyBhIHBpcGUgY29ubmVjdGlvbiBhcyBhIHJlYWRhYmxlIHN0cmVhbS4KCiAgTm90IHRocmVhZC1zYWZlLgoKICBSZW1lbWJlcnMgdGhlIGxhc3QgYGBzaXplYGAgYnl0ZXMgcmVhZCBhbmQgYWxsb3dzIHJld2luZGluZyB0aGUgc3RyZWFtIGJ5IHRoYXQKICBhbW91bnQgZXhhY3RseS4gU2VlIEJFQU0tNjM4MCBmb3IgbW9yZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9waXBlKToKICAgIHNlbGYuY29ubiA9IHJlY3ZfcGlwZQogICAgc2VsZi5jbG9zZWQgPSBGYWxzZQogICAgc2VsZi5wb3NpdGlvbiA9IDAKICAgIHNlbGYucmVtYWluaW5nID0gYicnCgogICAgIyBEYXRhIGFuZCBwb3NpdGlvbiBvZiBsYXN0IGJsb2NrIHN0cmVhbWVkLiBBbGxvd3MgbGltaXRlZCBzZWVraW5nIGJhY2t3YXJkcwogICAgIyBvZiBzdHJlYW0uCiAgICBzZWxmLmxhc3RfYmxvY2tfcG9zaXRpb24gPSBOb25lCiAgICBzZWxmLmxhc3RfYmxvY2sgPSBiJycKCiAgZGVmIHJlYWQoc2VsZiwgc2l6ZSk6CiAgICAiIiJSZWFkIGRhdGEgZnJvbSB0aGUgd3JhcHBlZCBwaXBlIGNvbm5lY3Rpb24uCgogICAgQXJnczoKICAgICAgc2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIEFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpcyBhbHdheXMKICAgICAgICAgICAgZXF1YWwgdG8gc2l6ZSB1bmxlc3MgRU9GIGlzIHJlYWNoZWQuCgogICAgUmV0dXJuczoKICAgICAgZGF0YSByZWFkIGFzIHN0ci4KICAgICIiIgogICAgZGF0YV9saXN0ID0gW10KICAgIGJ5dGVzX3JlYWQgPSAwCiAgICBzZWxmLmxhc3RfYmxvY2tfcG9zaXRpb24gPSBzZWxmLnBvc2l0aW9uCgogICAgd2hpbGUgYnl0ZXNfcmVhZCA8IHNpemU6CiAgICAgIGJ5dGVzX2Zyb21fcmVtYWluaW5nID0gbWluKHNpemUgLSBieXRlc19yZWFkLCBsZW4oc2VsZi5yZW1haW5pbmcpKQogICAgICBkYXRhX2xpc3QuYXBwZW5kKHNlbGYucmVtYWluaW5nWzA6Ynl0ZXNfZnJvbV9yZW1haW5pbmddKQogICAgICBzZWxmLnJlbWFpbmluZyA9IHNlbGYucmVtYWluaW5nW2J5dGVzX2Zyb21fcmVtYWluaW5nOl0KICAgICAgc2VsZi5wb3NpdGlvbiArPSBieXRlc19mcm9tX3JlbWFpbmluZwogICAgICBieXRlc19yZWFkICs9IGJ5dGVzX2Zyb21fcmVtYWluaW5nCiAgICAgIGlmIG5vdCBzZWxmLnJlbWFpbmluZzoKICAgICAgICB0cnk6CiAgICAgICAgICBzZWxmLnJlbWFpbmluZyA9IHNlbGYuY29ubi5yZWN2X2J5dGVzKCkKICAgICAgICBleGNlcHQgRU9GRXJyb3I6CiAgICAgICAgICBicmVhawogICAgc2VsZi5sYXN0X2Jsb2NrID0gYicnLmpvaW4oZGF0YV9saXN0KQogICAgcmV0dXJuIHNlbGYubGFzdF9ibG9jawoKICBkZWYgdGVsbChzZWxmKToKICAgICIiIlRlbGwgdGhlIGZpbGUncyBjdXJyZW50IG9mZnNldC4KCiAgICBSZXR1cm5zOgogICAgICBjdXJyZW50IG9mZnNldCBpbiByZWFkaW5nIHRoaXMgZmlsZS4KCiAgICBSYWlzZXM6CiAgICAgIGBgVmFsdWVFcnJvcmBgOiBXaGVuIHRoaXMgc3RyZWFtIGlzIGNsb3NlZC4KICAgICIiIgogICAgc2VsZi5fY2hlY2tfb3BlbigpCiAgICByZXR1cm4gc2VsZi5wb3NpdGlvbgoKICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1vcy5TRUVLX1NFVCk6CiAgICAjIFRoZSBhcGl0b29scyBsaWJyYXJ5IHVzZWQgYnkgdGhlIGdjc2lvLlVwbG9hZGVyIGNsYXNzIGluc2lzdHMgb24gc2Vla2luZwogICAgIyB0byB0aGUgZW5kIG9mIGEgc3RyZWFtIHRvIGRvIGEgY2hlY2sgYmVmb3JlIGNvbXBsZXRpbmcgYW4gdXBsb2FkLCBzbyB3ZQogICAgIyBtdXN0IGhhdmUgdGhpcyBuby1vcCBtZXRob2QgaGVyZSBpbiB0aGF0IGNhc2UuCiAgICBpZiB3aGVuY2UgPT0gb3MuU0VFS19FTkQgYW5kIG9mZnNldCA9PSAwOgogICAgICByZXR1cm4KICAgIGVsaWYgd2hlbmNlID09IG9zLlNFRUtfU0VUOgogICAgICBpZiBvZmZzZXQgPT0gc2VsZi5wb3NpdGlvbjoKICAgICAgICByZXR1cm4KICAgICAgZWxpZiBvZmZzZXQgPT0gc2VsZi5sYXN0X2Jsb2NrX3Bvc2l0aW9uIGFuZCBzZWxmLmxhc3RfYmxvY2s6CiAgICAgICAgc2VsZi5wb3NpdGlvbiA9IG9mZnNldAogICAgICAgIHNlbGYucmVtYWluaW5nID0gYicnLmpvaW4oW3NlbGYubGFzdF9ibG9jaywgc2VsZi5yZW1haW5pbmddKQogICAgICAgIHNlbGYubGFzdF9ibG9jayA9IGInJwogICAgICAgIHJldHVybgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAnb2Zmc2V0OiAlcywgd2hlbmNlOiAlcywgcG9zaXRpb246ICVzLCBsYXN0OiAlcycgJQogICAgICAgIChvZmZzZXQsIHdoZW5jZSwgc2VsZi5wb3NpdGlvbiwgc2VsZi5sYXN0X2Jsb2NrX3Bvc2l0aW9uKSkKCiAgZGVmIF9jaGVja19vcGVuKHNlbGYpOgogICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgIHJhaXNlIElPRXJyb3IoJ1N0cmVhbSBpcyBjbG9zZWQuJykKlH2UKIwPRG93bmxvYWRlci5zaXpllGpWMQEASy1LL4eUjBREb3dubG9hZGVyLmdldF9yYW5nZZRqVjEBAEsxSz6HlIwKRG93bmxvYWRlcpRqXTEBAEsoSz6HlIwMVXBsb2FkZXIucHV0lGpWMQEAS0NLSYeUjA9VcGxvYWRlci5maW5pc2iUalYxAQBLS0tTh5SMCFVwbG9hZGVylGpdMQEAS0FLU4eUjBlEb3dubG9hZGVyU3RyZWFtLl9faW5pdF9flGpWMQEAS1hLZIeUjBlEb3dubG9hZGVyU3RyZWFtLnJlYWRpbnRvlGpWMQEAS2ZLd4eUjBVEb3dubG9hZGVyU3RyZWFtLnNlZWuUalYxAQBLeUuUh5SMFURvd25sb2FkZXJTdHJlYW0udGVsbJRqVjEBAEuWS6CHlIwZRG93bmxvYWRlclN0cmVhbS5zZWVrYWJsZZRqVjEBAEuiS6OHlIwZRG93bmxvYWRlclN0cmVhbS5yZWFkYWJsZZRqVjEBAEulS6aHlIwYRG93bmxvYWRlclN0cmVhbS5yZWFkYWxslGpWMQEAS6hLsIeUjBBEb3dubG9hZGVyU3RyZWFtlGpdMQEAS1ZLsIeUjBdVcGxvYWRlclN0cmVhbS5fX2luaXRfX5RqVjEBAEu1S76HlIwTVXBsb2FkZXJTdHJlYW0udGVsbJRqVjEBAEvAS8GHlIwUVXBsb2FkZXJTdHJlYW0ud3JpdGWUalYxAQBLw0vQh5SMFFVwbG9hZGVyU3RyZWFtLmNsb3NllGpWMQEAS9JL3YeUjBdVcGxvYWRlclN0cmVhbS53cml0YWJsZZRqVjEBAEvfS+CHlIwOVXBsb2FkZXJTdHJlYW2Ual0xAQBLs0vgh5SME1BpcGVTdHJlYW0uX19pbml0X1+UalYxAQBL60v0h5SMD1BpcGVTdHJlYW0ucmVhZJRqVjEBAEv2TRABh5SMD1BpcGVTdHJlYW0udGVsbJRqVjEBAE0SAU0cAYeUjA9QaXBlU3RyZWFtLnNlZWuUalYxAQBNHgFNLgGHlIwWUGlwZVN0cmVhbS5fY2hlY2tfb3BlbpRqVjEBAE0wAU0yAYeUjApQaXBlU3RyZWFtlGpdMQEAS+NNMgGHlHV9lCiMCkRvd25sb2FkZXKUai0DAACMFERvd25sb2FkZXIuZ2V0X3JhbmdllGotAwAAjAhVcGxvYWRlcpRqLQMAAIwMVXBsb2FkZXIucHV0lGotAwAAjA9VcGxvYWRlci5maW5pc2iUai0DAACMEERvd25sb2FkZXJTdHJlYW2Uai0DAACMGURvd25sb2FkZXJTdHJlYW0ucmVhZGludG+Uai0DAACMFURvd25sb2FkZXJTdHJlYW0uc2Vla5RqLQMAAIwVRG93bmxvYWRlclN0cmVhbS50ZWxslGotAwAAjBlEb3dubG9hZGVyU3RyZWFtLnNlZWthYmxllGotAwAAjBlEb3dubG9hZGVyU3RyZWFtLnJlYWRhYmxllGotAwAAjBhEb3dubG9hZGVyU3RyZWFtLnJlYWRhbGyUai0DAACMDlVwbG9hZGVyU3RyZWFtlGotAwAAjBNVcGxvYWRlclN0cmVhbS50ZWxslGotAwAAjBRVcGxvYWRlclN0cmVhbS53cml0ZZRqLQMAAIwUVXBsb2FkZXJTdHJlYW0uY2xvc2WUai0DAACMF1VwbG9hZGVyU3RyZWFtLndyaXRhYmxllGotAwAAjApQaXBlU3RyZWFtlGotAwAAjA9QaXBlU3RyZWFtLnJlYWSUai0DAACMD1BpcGVTdHJlYW0udGVsbJRqLQMAAIwPUGlwZVN0cmVhbS5zZWVrlGotAwAAdYwbYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvlHSUjANhYmOUKFjMFQAAIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCgoiIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGFjY29yZGluZyB0byBQRVAgMzExOS4iIiIKCgpkZWYgYWJzdHJhY3RtZXRob2QoZnVuY29iaik6CiAgICAiIiJBIGRlY29yYXRvciBpbmRpY2F0aW5nIGFic3RyYWN0IG1ldGhvZHMuCgogICAgUmVxdWlyZXMgdGhhdCB0aGUgbWV0YWNsYXNzIGlzIEFCQ01ldGEgb3IgZGVyaXZlZCBmcm9tIGl0LiAgQQogICAgY2xhc3MgdGhhdCBoYXMgYSBtZXRhY2xhc3MgZGVyaXZlZCBmcm9tIEFCQ01ldGEgY2Fubm90IGJlCiAgICBpbnN0YW50aWF0ZWQgdW5sZXNzIGFsbCBvZiBpdHMgYWJzdHJhY3QgbWV0aG9kcyBhcmUgb3ZlcnJpZGRlbi4KICAgIFRoZSBhYnN0cmFjdCBtZXRob2RzIGNhbiBiZSBjYWxsZWQgdXNpbmcgYW55IG9mIHRoZSBub3JtYWwKICAgICdzdXBlcicgY2FsbCBtZWNoYW5pc21zLgoKICAgIFVzYWdlOgoKICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1BQkNNZXRhKToKICAgICAgICAgICAgQGFic3RyYWN0bWV0aG9kCiAgICAgICAgICAgIGRlZiBteV9hYnN0cmFjdF9tZXRob2Qoc2VsZiwgLi4uKToKICAgICAgICAgICAgICAgIC4uLgogICAgIiIiCiAgICBmdW5jb2JqLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gVHJ1ZQogICAgcmV0dXJuIGZ1bmNvYmoKCgpjbGFzcyBhYnN0cmFjdGNsYXNzbWV0aG9kKGNsYXNzbWV0aG9kKToKICAgICIiIkEgZGVjb3JhdG9yIGluZGljYXRpbmcgYWJzdHJhY3QgY2xhc3NtZXRob2RzLgoKICAgIFNpbWlsYXIgdG8gYWJzdHJhY3RtZXRob2QuCgogICAgVXNhZ2U6CgogICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPUFCQ01ldGEpOgogICAgICAgICAgICBAYWJzdHJhY3RjbGFzc21ldGhvZAogICAgICAgICAgICBkZWYgbXlfYWJzdHJhY3RfY2xhc3NtZXRob2QoY2xzLCAuLi4pOgogICAgICAgICAgICAgICAgLi4uCgogICAgJ2Fic3RyYWN0Y2xhc3NtZXRob2QnIGlzIGRlcHJlY2F0ZWQuIFVzZSAnY2xhc3NtZXRob2QnIHdpdGgKICAgICdhYnN0cmFjdG1ldGhvZCcgaW5zdGVhZC4KICAgICIiIgoKICAgIF9faXNhYnN0cmFjdG1ldGhvZF9fID0gVHJ1ZQoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsYWJsZSk6CiAgICAgICAgY2FsbGFibGUuX19pc2Fic3RyYWN0bWV0aG9kX18gPSBUcnVlCiAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhjYWxsYWJsZSkKCgpjbGFzcyBhYnN0cmFjdHN0YXRpY21ldGhvZChzdGF0aWNtZXRob2QpOgogICAgIiIiQSBkZWNvcmF0b3IgaW5kaWNhdGluZyBhYnN0cmFjdCBzdGF0aWNtZXRob2RzLgoKICAgIFNpbWlsYXIgdG8gYWJzdHJhY3RtZXRob2QuCgogICAgVXNhZ2U6CgogICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPUFCQ01ldGEpOgogICAgICAgICAgICBAYWJzdHJhY3RzdGF0aWNtZXRob2QKICAgICAgICAgICAgZGVmIG15X2Fic3RyYWN0X3N0YXRpY21ldGhvZCguLi4pOgogICAgICAgICAgICAgICAgLi4uCgogICAgJ2Fic3RyYWN0c3RhdGljbWV0aG9kJyBpcyBkZXByZWNhdGVkLiBVc2UgJ3N0YXRpY21ldGhvZCcgd2l0aAogICAgJ2Fic3RyYWN0bWV0aG9kJyBpbnN0ZWFkLgogICAgIiIiCgogICAgX19pc2Fic3RyYWN0bWV0aG9kX18gPSBUcnVlCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxhYmxlKToKICAgICAgICBjYWxsYWJsZS5fX2lzYWJzdHJhY3RtZXRob2RfXyA9IFRydWUKICAgICAgICBzdXBlcigpLl9faW5pdF9fKGNhbGxhYmxlKQoKCmNsYXNzIGFic3RyYWN0cHJvcGVydHkocHJvcGVydHkpOgogICAgIiIiQSBkZWNvcmF0b3IgaW5kaWNhdGluZyBhYnN0cmFjdCBwcm9wZXJ0aWVzLgoKICAgIFJlcXVpcmVzIHRoYXQgdGhlIG1ldGFjbGFzcyBpcyBBQkNNZXRhIG9yIGRlcml2ZWQgZnJvbSBpdC4gIEEKICAgIGNsYXNzIHRoYXQgaGFzIGEgbWV0YWNsYXNzIGRlcml2ZWQgZnJvbSBBQkNNZXRhIGNhbm5vdCBiZQogICAgaW5zdGFudGlhdGVkIHVubGVzcyBhbGwgb2YgaXRzIGFic3RyYWN0IHByb3BlcnRpZXMgYXJlIG92ZXJyaWRkZW4uCiAgICBUaGUgYWJzdHJhY3QgcHJvcGVydGllcyBjYW4gYmUgY2FsbGVkIHVzaW5nIGFueSBvZiB0aGUgbm9ybWFsCiAgICAnc3VwZXInIGNhbGwgbWVjaGFuaXNtcy4KCiAgICBVc2FnZToKCiAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICAgICAgICAgIEBhYnN0cmFjdHByb3BlcnR5CiAgICAgICAgICAgIGRlZiBteV9hYnN0cmFjdF9wcm9wZXJ0eShzZWxmKToKICAgICAgICAgICAgICAgIC4uLgoKICAgIFRoaXMgZGVmaW5lcyBhIHJlYWQtb25seSBwcm9wZXJ0eTsgeW91IGNhbiBhbHNvIGRlZmluZSBhIHJlYWQtd3JpdGUKICAgIGFic3RyYWN0IHByb3BlcnR5IHVzaW5nIHRoZSAnbG9uZycgZm9ybSBvZiBwcm9wZXJ0eSBkZWNsYXJhdGlvbjoKCiAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICAgICAgICAgIGRlZiBnZXR4KHNlbGYpOiAuLi4KICAgICAgICAgICAgZGVmIHNldHgoc2VsZiwgdmFsdWUpOiAuLi4KICAgICAgICAgICAgeCA9IGFic3RyYWN0cHJvcGVydHkoZ2V0eCwgc2V0eCkKCiAgICAnYWJzdHJhY3Rwcm9wZXJ0eScgaXMgZGVwcmVjYXRlZC4gVXNlICdwcm9wZXJ0eScgd2l0aCAnYWJzdHJhY3RtZXRob2QnCiAgICBpbnN0ZWFkLgogICAgIiIiCgogICAgX19pc2Fic3RyYWN0bWV0aG9kX18gPSBUcnVlCgoKdHJ5OgogICAgZnJvbSBfYWJjIGltcG9ydCAoZ2V0X2NhY2hlX3Rva2VuLCBfYWJjX2luaXQsIF9hYmNfcmVnaXN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICBfYWJjX2luc3RhbmNlY2hlY2ssIF9hYmNfc3ViY2xhc3NjaGVjaywgX2dldF9kdW1wLAogICAgICAgICAgICAgICAgICAgICAgX3Jlc2V0X3JlZ2lzdHJ5LCBfcmVzZXRfY2FjaGVzKQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBmcm9tIF9weV9hYmMgaW1wb3J0IEFCQ01ldGEsIGdldF9jYWNoZV90b2tlbgogICAgQUJDTWV0YS5fX21vZHVsZV9fID0gJ2FiYycKZWxzZToKICAgIGNsYXNzIEFCQ01ldGEodHlwZSk6CiAgICAgICAgIiIiTWV0YWNsYXNzIGZvciBkZWZpbmluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpLgoKICAgICAgICBVc2UgdGhpcyBtZXRhY2xhc3MgdG8gY3JlYXRlIGFuIEFCQy4gIEFuIEFCQyBjYW4gYmUgc3ViY2xhc3NlZAogICAgICAgIGRpcmVjdGx5LCBhbmQgdGhlbiBhY3RzIGFzIGEgbWl4LWluIGNsYXNzLiAgWW91IGNhbiBhbHNvIHJlZ2lzdGVyCiAgICAgICAgdW5yZWxhdGVkIGNvbmNyZXRlIGNsYXNzZXMgKGV2ZW4gYnVpbHQtaW4gY2xhc3NlcykgYW5kIHVucmVsYXRlZAogICAgICAgIEFCQ3MgYXMgJ3ZpcnR1YWwgc3ViY2xhc3NlcycgLS0gdGhlc2UgYW5kIHRoZWlyIGRlc2NlbmRhbnRzIHdpbGwKICAgICAgICBiZSBjb25zaWRlcmVkIHN1YmNsYXNzZXMgb2YgdGhlIHJlZ2lzdGVyaW5nIEFCQyBieSB0aGUgYnVpbHQtaW4KICAgICAgICBpc3N1YmNsYXNzKCkgZnVuY3Rpb24sIGJ1dCB0aGUgcmVnaXN0ZXJpbmcgQUJDIHdvbid0IHNob3cgdXAgaW4KICAgICAgICB0aGVpciBNUk8gKE1ldGhvZCBSZXNvbHV0aW9uIE9yZGVyKSBub3Igd2lsbCBtZXRob2QKICAgICAgICBpbXBsZW1lbnRhdGlvbnMgZGVmaW5lZCBieSB0aGUgcmVnaXN0ZXJpbmcgQUJDIGJlIGNhbGxhYmxlIChub3QKICAgICAgICBldmVuIHZpYSBzdXBlcigpKS4KICAgICAgICAiIiIKICAgICAgICBkZWYgX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3YXJncyk6CiAgICAgICAgICAgIGNscyA9IHN1cGVyKCkuX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3YXJncykKICAgICAgICAgICAgX2FiY19pbml0KGNscykKICAgICAgICAgICAgcmV0dXJuIGNscwoKICAgICAgICBkZWYgcmVnaXN0ZXIoY2xzLCBzdWJjbGFzcyk6CiAgICAgICAgICAgICIiIlJlZ2lzdGVyIGEgdmlydHVhbCBzdWJjbGFzcyBvZiBhbiBBQkMuCgogICAgICAgICAgICBSZXR1cm5zIHRoZSBzdWJjbGFzcywgdG8gYWxsb3cgdXNhZ2UgYXMgYSBjbGFzcyBkZWNvcmF0b3IuCiAgICAgICAgICAgICIiIgogICAgICAgICAgICByZXR1cm4gX2FiY19yZWdpc3RlcihjbHMsIHN1YmNsYXNzKQoKICAgICAgICBkZWYgX19pbnN0YW5jZWNoZWNrX18oY2xzLCBpbnN0YW5jZSk6CiAgICAgICAgICAgICIiIk92ZXJyaWRlIGZvciBpc2luc3RhbmNlKGluc3RhbmNlLCBjbHMpLiIiIgogICAgICAgICAgICByZXR1cm4gX2FiY19pbnN0YW5jZWNoZWNrKGNscywgaW5zdGFuY2UpCgogICAgICAgIGRlZiBfX3N1YmNsYXNzY2hlY2tfXyhjbHMsIHN1YmNsYXNzKToKICAgICAgICAgICAgIiIiT3ZlcnJpZGUgZm9yIGlzc3ViY2xhc3Moc3ViY2xhc3MsIGNscykuIiIiCiAgICAgICAgICAgIHJldHVybiBfYWJjX3N1YmNsYXNzY2hlY2soY2xzLCBzdWJjbGFzcykKCiAgICAgICAgZGVmIF9kdW1wX3JlZ2lzdHJ5KGNscywgZmlsZT1Ob25lKToKICAgICAgICAgICAgIiIiRGVidWcgaGVscGVyIHRvIHByaW50IHRoZSBBQkMgcmVnaXN0cnkuIiIiCiAgICAgICAgICAgIHByaW50KGYiQ2xhc3M6IHtjbHMuX19tb2R1bGVfX30ue2Nscy5fX3F1YWxuYW1lX199IiwgZmlsZT1maWxlKQogICAgICAgICAgICBwcmludChmIkludi4gY291bnRlcjoge2dldF9jYWNoZV90b2tlbigpfSIsIGZpbGU9ZmlsZSkKICAgICAgICAgICAgKF9hYmNfcmVnaXN0cnksIF9hYmNfY2FjaGUsIF9hYmNfbmVnYXRpdmVfY2FjaGUsCiAgICAgICAgICAgICBfYWJjX25lZ2F0aXZlX2NhY2hlX3ZlcnNpb24pID0gX2dldF9kdW1wKGNscykKICAgICAgICAgICAgcHJpbnQoZiJfYWJjX3JlZ2lzdHJ5OiB7X2FiY19yZWdpc3RyeSFyfSIsIGZpbGU9ZmlsZSkKICAgICAgICAgICAgcHJpbnQoZiJfYWJjX2NhY2hlOiB7X2FiY19jYWNoZSFyfSIsIGZpbGU9ZmlsZSkKICAgICAgICAgICAgcHJpbnQoZiJfYWJjX25lZ2F0aXZlX2NhY2hlOiB7X2FiY19uZWdhdGl2ZV9jYWNoZSFyfSIsIGZpbGU9ZmlsZSkKICAgICAgICAgICAgcHJpbnQoZiJfYWJjX25lZ2F0aXZlX2NhY2hlX3ZlcnNpb246IHtfYWJjX25lZ2F0aXZlX2NhY2hlX3ZlcnNpb24hcn0iLAogICAgICAgICAgICAgICAgICBmaWxlPWZpbGUpCgogICAgICAgIGRlZiBfYWJjX3JlZ2lzdHJ5X2NsZWFyKGNscyk6CiAgICAgICAgICAgICIiIkNsZWFyIHRoZSByZWdpc3RyeSAoZm9yIGRlYnVnZ2luZyBvciB0ZXN0aW5nKS4iIiIKICAgICAgICAgICAgX3Jlc2V0X3JlZ2lzdHJ5KGNscykKCiAgICAgICAgZGVmIF9hYmNfY2FjaGVzX2NsZWFyKGNscyk6CiAgICAgICAgICAgICIiIkNsZWFyIHRoZSBjYWNoZXMgKGZvciBkZWJ1Z2dpbmcgb3IgdGVzdGluZykuIiIiCiAgICAgICAgICAgIF9yZXNldF9jYWNoZXMoY2xzKQoKCmNsYXNzIEFCQyhtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICAiIiJIZWxwZXIgY2xhc3MgdGhhdCBwcm92aWRlcyBhIHN0YW5kYXJkIHdheSB0byBjcmVhdGUgYW4gQUJDIHVzaW5nCiAgICBpbmhlcml0YW5jZS4KICAgICIiIgogICAgX19zbG90c19fID0gKCkKlH2UKIwOYWJzdHJhY3RtZXRob2SUalYxAQBLB0sYh5SMHGFic3RyYWN0Y2xhc3NtZXRob2QuX19pbml0X1+UalYxAQBLLUsvh5SME2Fic3RyYWN0Y2xhc3NtZXRob2SUal0xAQBLG0svh5SMHWFic3RyYWN0c3RhdGljbWV0aG9kLl9faW5pdF9flGpWMQEAS0RLRoeUjBRhYnN0cmFjdHN0YXRpY21ldGhvZJRqXTEBAEsyS0aHlIwQYWJzdHJhY3Rwcm9wZXJ0eZRqXTEBAEtJS2WHlIwPQUJDTWV0YS5fX25ld19flGpWMQEAS31LgIeUjBBBQkNNZXRhLnJlZ2lzdGVylGpWMQEAS4JLh4eUjBlBQkNNZXRhLl9faW5zdGFuY2VjaGVja19flGpWMQEAS4lLi4eUjBlBQkNNZXRhLl9fc3ViY2xhc3NjaGVja19flGpWMQEAS41Lj4eUjBZBQkNNZXRhLl9kdW1wX3JlZ2lzdHJ5lGpWMQEAS5FLm4eUjBtBQkNNZXRhLl9hYmNfcmVnaXN0cnlfY2xlYXKUalYxAQBLnUufh5SMGUFCQ01ldGEuX2FiY19jYWNoZXNfY2xlYXKUalYxAQBLoUujh5SMB0FCQ01ldGGUal0xAQBLcEujh5SMA0FCQ5RqXTEBAEumS6qHlHV9lIwbYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvlHSUjBphcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtc5QoWK0rAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZpbGVTeXN0ZW1zIGludGVyZmFjZSBjbGFzcyBmb3IgYWNjZXNzaW5nIHRoZSBjb3JyZWN0IGZpbGVzeXN0ZW0iIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgcmUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gdHlwaW5nIGltcG9ydCBCaW5hcnlJTyAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBSdW50aW1lVmFsdWVQcm92aWRlcgoKIyBBbGwgZmlsZXN5c3RlbSBpbXBsZW1lbnRzIHNob3VsZCBiZSBhZGRlZCBoZXJlIGFzCiMgYmVzdCBlZmZvcnQgaW1wb3J0cy4gV2UgZG9uJ3Qgd2FudCB0byBmb3JjZSBsb2FkaW5nCiMgYSBtb2R1bGUgaWYgdGhlIHVzZXIgZG9lc24ndCBzdXBwbHkgdGhlIGNvcnJlY3QKIyBwYWNrYWdlcyB0aGF0IHRoZXNlIGZpbGVzeXN0ZW1zIHJlbHkgb24uCiMKIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bnVzZWQtaW1wb3J0CnRyeToKICBmcm9tIGFwYWNoZV9iZWFtLmlvLmhhZG9vcGZpbGVzeXN0ZW0gaW1wb3J0IEhhZG9vcEZpbGVTeXN0ZW0KZXhjZXB0IEltcG9ydEVycm9yOgogIHBhc3MKCnRyeToKICBmcm9tIGFwYWNoZV9iZWFtLmlvLmxvY2FsZmlsZXN5c3RlbSBpbXBvcnQgTG9jYWxGaWxlU3lzdGVtCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBwYXNzCgp0cnk6CiAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbSBpbXBvcnQgR0NTRmlsZVN5c3RlbQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcGFzcwoKdHJ5OgogIGZyb20gYXBhY2hlX2JlYW0uaW8uYXdzLnMzZmlsZXN5c3RlbSBpbXBvcnQgUzNGaWxlU3lzdGVtCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBwYXNzCgojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1wb3NpdGlvbiwgdW51c2VkLWltcG9ydAoKX19hbGxfXyA9IFsnRmlsZVN5c3RlbXMnXQoKCmNsYXNzIEZpbGVTeXN0ZW1zKG9iamVjdCk6CiAgIiIiQSBjbGFzcyB0aGF0IGRlZmluZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYSBmaWxlc3lzdGVtLgogIEFsbCBtZXRob2RzIGFyZSBzdGF0aWMgYW5kIGFjY2VzcyB0aGUgdW5kZXJseWluZyByZWdpc3RlcmVkIGZpbGVzeXN0ZW1zLgogICIiIgogIFVSSV9TQ0hFTUFfUEFUVEVSTiA9IHJlLmNvbXBpbGUoJyg/UDxzY2hlbWU+W2EtekEtWl1bLWEtekEtWjAtOSsuXSopOi8vLionKQoKICBfcGlwZWxpbmVfb3B0aW9ucyA9IE5vbmUKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNldF9vcHRpb25zKGNscywgcGlwZWxpbmVfb3B0aW9ucyk6CiAgICAiIiJTZXQgZmlsZXN5c3RlbSBvcHRpb25zLgoKICAgIEFyZ3M6CiAgICAgIHBpcGVsaW5lX29wdGlvbnM6IEluc3RhbmNlIG9mIGBgUGlwZWxpbmVPcHRpb25zYGAuCiAgICAiIiIKICAgIGNscy5fcGlwZWxpbmVfb3B0aW9ucyA9IHBpcGVsaW5lX29wdGlvbnMKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfc2NoZW1lKHBhdGgpOgogICAgbWF0Y2hfcmVzdWx0ID0gRmlsZVN5c3RlbXMuVVJJX1NDSEVNQV9QQVRURVJOLm1hdGNoKHBhdGguc3RyaXAoKSkKICAgIGlmIG1hdGNoX3Jlc3VsdCBpcyBOb25lOgogICAgICByZXR1cm4gTm9uZQogICAgcmV0dXJuIG1hdGNoX3Jlc3VsdC5ncm91cGRpY3QoKVsnc2NoZW1lJ10KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfZmlsZXN5c3RlbShwYXRoKToKICAgICMgdHlwZTogKHN0cikgLT4gRmlsZVN5c3RlbXMKCiAgICAiIiJHZXQgdGhlIGNvcnJlY3QgZmlsZXN5c3RlbSBmb3IgdGhlIHNwZWNpZmllZCBwYXRoCiAgICAiIiIKICAgIHRyeToKICAgICAgcGF0aF9zY2hlbWUgPSBGaWxlU3lzdGVtcy5nZXRfc2NoZW1lKHBhdGgpCiAgICAgIHN5c3RlbXMgPSBbCiAgICAgICAgICBmcyBmb3IgZnMgaW4gRmlsZVN5c3RlbS5nZXRfYWxsX3N1YmNsYXNzZXMoKQogICAgICAgICAgaWYgZnMuc2NoZW1lKCkgPT0gcGF0aF9zY2hlbWUKICAgICAgXQogICAgICBpZiBsZW4oc3lzdGVtcykgPT0gMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnVW5hYmxlIHRvIGdldCBmaWxlc3lzdGVtIGZyb20gc3BlY2lmaWVkIHBhdGgsIHBsZWFzZSB1c2UgdGhlICcKICAgICAgICAgICAgJ2NvcnJlY3QgcGF0aCBvciBlbnN1cmUgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY3kgaXMgaW5zdGFsbGVkLCAnCiAgICAgICAgICAgICdlLmcuLCBwaXAgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdLiBQYXRoIHNwZWNpZmllZDogJXMnICUgcGF0aCkKICAgICAgZWxpZiBsZW4oc3lzdGVtcykgPT0gMToKICAgICAgICAjIFBpcGVsaW5lIG9wdGlvbnMgY291bGQgY29tZSBlaXRoZXIgZnJvbSB0aGUgUGlwZWxpbmUgaXRzZWxmICh1c2luZwogICAgICAgICMgZGlyZWN0IHJ1bm5lciksIG9yIHZpYSBSdW50aW1lVmFsdWVQcm92aWRlciAob3RoZXIgcnVubmVycykuCiAgICAgICAgb3B0aW9ucyA9ICgKICAgICAgICAgICAgRmlsZVN5c3RlbXMuX3BpcGVsaW5lX29wdGlvbnMgb3IKICAgICAgICAgICAgUnVudGltZVZhbHVlUHJvdmlkZXIucnVudGltZV9vcHRpb25zKQogICAgICAgIHJldHVybiBzeXN0ZW1zWzBdKHBpcGVsaW5lX29wdGlvbnM9b3B0aW9ucykKICAgICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdGb3VuZCBtb3JlIHRoYW4gb25lIGZpbGVzeXN0ZW0gZm9yIHBhdGggJXMnICUgcGF0aCkKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICByYWlzZQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICByYWlzZSBCZWFtSU9FcnJvcignVW5hYmxlIHRvIGdldCB0aGUgRmlsZXN5c3RlbScsIHtwYXRoOiBlfSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBqb2luKGJhc2VwYXRoLCAqcGF0aHMpOgogICAgIyB0eXBlOiAoc3RyLCAqc3RyKSAtPiBzdHIKCiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cwogICAgIiIiCiAgICBmaWxlc3lzdGVtID0gRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW0oYmFzZXBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5qb2luKGJhc2VwYXRoLCAqcGF0aHMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgc3BsaXQocGF0aCk6CiAgICAiIiJTcGxpdHMgdGhlIGdpdmVuIHBhdGggaW50byB0d28gcGFydHMuCgogICAgU3BsaXRzIHRoZSBwYXRoIGludG8gYSBwYWlyIChoZWFkLCB0YWlsKSBzdWNoIHRoYXQgdGFpbCBjb250YWlucyB0aGUgbGFzdAogICAgY29tcG9uZW50IG9mIHRoZSBwYXRoIGFuZCBoZWFkIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgdXAgdG8gdGhhdC4KCiAgICBGb3IgZmlsZS1zeXN0ZW1zIG90aGVyIHRoYW4gdGhlIGxvY2FsIGZpbGUtc3lzdGVtLCBoZWFkIHNob3VsZCBpbmNsdWRlIHRoZQogICAgcHJlZml4LgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHBhdGggYXMgYSBzdHJpbmcKICAgIFJldHVybnM6CiAgICAgIGEgcGFpciBvZiBwYXRoIGNvbXBvbmVudHMgYXMgc3RyaW5ncy4KICAgICIiIgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5zcGxpdChwYXRoKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG1rZGlycyhwYXRoKToKICAgICIiIlJlY3Vyc2l2ZWx5IGNyZWF0ZSBkaXJlY3RvcmllcyBmb3IgdGhlIHByb3ZpZGVkIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgdGhhdCBzaG91bGQgYmUgY3JlYXRlZAoKICAgIFJhaXNlczoKICAgICAgSU9FcnJvcjogaWYgbGVhZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMuCiAgICAiIiIKICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXRoKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0ubWtkaXJzKHBhdGgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgbWF0Y2gocGF0dGVybnMsIGxpbWl0cz1Ob25lKToKICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHBhdGhzIHRvIHRoZSBwYXR0ZXJucyBwcm92aWRlZC4KCiAgICBQYXR0ZXJuIG1hdGNoaW5nIGlzIGRvbmUgdXNpbmcgZWFjaCBmaWxlc3lzdGVtJ3MgYGBtYXRjaGBgIG1ldGhvZCAoZS5nLgogICAgOm1ldGg6YC5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ubWF0Y2hgKS4KCiAgICAuLiBub3RlOjoKICAgICAgLSBEZXBlbmRpbmcgb24gdGhlIDpjbGFzczpgLkZpbGVTeXN0ZW1gIGltcGxlbWVudGF0aW9uLCBmaWxlIGxpc3RpbmdzCiAgICAgICAgKHRoZSBgYC5GaWxlU3lzdGVtLl9saXN0YGAgbWV0aG9kKSBtYXkgbm90IGJlIHJlY3Vyc2l2ZS4KICAgICAgLSBJZiB0aGUgZmlsZSBsaXN0aW5nIGlzIG5vdCByZWN1cnNpdmUsIGEgcGF0dGVybiBsaWtlCiAgICAgICAgYGBzY2hlbWU6Ly9wYXRoLyovZm9vYGAgd2lsbCBub3QgYmUgYWJsZSB0byBtYWNoIGFueSBmaWxlcy4KCiAgICBTZWUgQWxzbzoKICAgICAgOm1ldGg6YC5maWxlc3lzdGVtLkZpbGVTeXN0ZW0ubWF0Y2hgCgogICAgUGF0dGVybiBzeW50YXg6CiAgICAgIFRoZSBwYXR0ZXJuIHN5bnRheCBpcyBiYXNlZCBvbiB0aGUgZm5tYXRjaF8gc3ludGF4LCB3aXRoIHRoZSBmb2xsb3dpbmcKICAgICAgZGlmZmVyZW5jZXM6CgogICAgICAtICAgYGAqYGAgSXMgZXF1aXZhbGVudCB0byBgYFteL1xcXSpgYCByYXRoZXIgdGhhbiBgYC4qYGAuCiAgICAgIC0gICBgYCoqYGAgSXMgZXF1aXZhbGVudCB0byBgYC4qYGAuCgogICAgLi4gX2Bmbm1hdGNoYDogaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2ZubWF0Y2guaHRtbAoKICAgIEFyZ3M6CiAgICAgIHBhdHRlcm5zOiBsaXN0IG9mIHN0cmluZyBmb3IgdGhlIGZpbGUgcGF0aCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QKICAgICAgbGltaXRzOiBsaXN0IG9mIG1heGltdW0gbnVtYmVyIG9mIHJlc3BvbnNlcyB0aGF0IG5lZWQgdG8gYmUgZmV0Y2hlZAoKICAgIFJldHVybnM6IGxpc3Qgb2YgYGBNYXRjaFJlc3VsdGBgIG9iamVjdHMuCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIGFueSBvZiB0aGUgcGF0dGVybiBtYXRjaCBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbGVuKHBhdHRlcm5zKSA9PSAwOgogICAgICByZXR1cm4gW10KICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXR0ZXJuc1swXSkKICAgIHJldHVybiBmaWxlc3lzdGVtLm1hdGNoKHBhdHRlcm5zLCBsaW1pdHMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgY3JlYXRlKAogICAgICBwYXRoLAogICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICMgdHlwZTogKC4uLikgLT4gQmluYXJ5SU8KCiAgICAiIiJSZXR1cm5zIGEgd3JpdGUgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIGZpbGUgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlsZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtCiAgICAgIG1pbWVfdHlwZTogTUlNRSB0eXBlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29udGVudCBpbiB0aGUgZmlsZSBvYmplY3QKICAgICAgY29tcHJlc3Npb25fdHlwZTogVHlwZSBvZiBjb21wcmVzc2lvbiB0byBiZSB1c2VkIGZvciB0aGlzIG9iamVjdC4gU2VlCiAgICAgICAgYGBDb21wcmVzc2lvblR5cGVzYGAgZm9yIHBvc3NpYmxlIHZhbHVlcy4KCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgYGBjbG9zZWBgIGZ1bmN0aW9uIGZvciB0aGUgdXNlciB0byB1c2UuCiAgICAiIiIKICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXRoKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0uY3JlYXRlKHBhdGgsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBvcGVuKAogICAgICBwYXRoLAogICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICMgdHlwZTogKC4uLikgLT4gQmluYXJ5SU8KCiAgICAiIiJSZXR1cm5zIGEgcmVhZCBjaGFubmVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaWxlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0KICAgICAgbWltZV90eXBlOiBNSU1FIHR5cGUgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBjb250ZW50IGluIHRoZSBmaWxlIG9iamVjdAogICAgICBjb21wcmVzc2lvbl90eXBlOiBUeXBlIG9mIGNvbXByZXNzaW9uIHRvIGJlIHVzZWQgZm9yIHRoaXMgb2JqZWN0LiBTZWUKICAgICAgICBgYENvbXByZXNzaW9uVHlwZXNgYCBmb3IgcG9zc2libGUgdmFsdWVzLgoKICAgIFJldHVybnM6IGZpbGUgaGFuZGxlIHdpdGggYSBgYGNsb3NlYGAgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZS4KICAgICIiIgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5vcGVuKHBhdGgsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBjb3B5KHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICIiIlJlY3Vyc2l2ZWx5IGNvcHkgdGhlIGZpbGUgbGlzdCBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uCgogICAgQXJnczoKICAgICAgc291cmNlX2ZpbGVfbmFtZXM6IGxpc3Qgb2Ygc291cmNlIGZpbGUgb2JqZWN0cyB0aGF0IG5lZWRzIHRvIGJlIGNvcGllZAogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBsaXN0IG9mIGRlc3RpbmF0aW9uIG9mIHRoZSBuZXcgb2JqZWN0CgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIGFueSBvZiB0aGUgY29weSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSAwOgogICAgICByZXR1cm4KICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShzb3VyY2VfZmlsZV9uYW1lc1swXSkKICAgIHJldHVybiBmaWxlc3lzdGVtLmNvcHkoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgcmVuYW1lKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICIiIlJlbmFtZSB0aGUgZmlsZXMgYXQgdGhlIHNvdXJjZSBsaXN0IHRvIHRoZSBkZXN0aW5hdGlvbiBsaXN0LgogICAgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBsaXN0cyBzaG91bGQgYmUgb2YgdGhlIHNhbWUgc2l6ZS4KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogTGlzdCBvZiBmaWxlIHBhdGhzIHRoYXQgbmVlZCB0byBiZSBtb3ZlZAogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBMaXN0IG9mIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgZm9yIHRoZSBmaWxlcwoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBhbnkgb2YgdGhlIHJlbmFtZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSAwOgogICAgICByZXR1cm4KICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShzb3VyY2VfZmlsZV9uYW1lc1swXSkKICAgIHJldHVybiBmaWxlc3lzdGVtLnJlbmFtZShzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBleGlzdHMocGF0aCk6CiAgICAiIiJDaGVjayBpZiB0aGUgcHJvdmlkZWQgcGF0aCBleGlzdHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggdGhhdCBuZWVkcyB0byBiZSBjaGVja2VkLgoKICAgIFJldHVybnM6IGJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIGlmIHBhdGggZXhpc3RzCiAgICAiIiIKICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXRoKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0uZXhpc3RzKHBhdGgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgbGFzdF91cGRhdGVkKHBhdGgpOgogICAgIiIiR2V0IFVOSVggRXBvY2ggdGltZSBpbiBzZWNvbmRzIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIGZpbGUuCgogICAgUmV0dXJuczogZmxvYXQgVU5JWCBFcG9jaCB0aW1lCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIHBhdGggZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgZmlsZXN5c3RlbSA9IEZpbGVTeXN0ZW1zLmdldF9maWxlc3lzdGVtKHBhdGgpCiAgICByZXR1cm4gZmlsZXN5c3RlbS5sYXN0X3VwZGF0ZWQocGF0aCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBjaGVja3N1bShwYXRoKToKICAgICIiIkZldGNoIGNoZWNrc3VtIG1ldGFkYXRhIG9mIGEgZmlsZSBvbiB0aGUKICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbWAuCgogICAgVGhpcyBvcGVyYXRpb24gcmV0dXJucyBjaGVja3N1bSBtZXRhZGF0YSBhcyBzdG9yZWQgaW4gdGhlIHVuZGVybHlpbmcKICAgIEZpbGVTeXN0ZW0uIEl0IHNob3VsZCBub3QgcmVhZCBhbnkgZmlsZSBkYXRhLiBDaGVja3N1bSB0eXBlIGFuZCBmb3JtYXQgYXJlCiAgICBGaWxlU3lzdGVtIGRlcGVuZGVudCBhbmQgYXJlIG5vdCBjb21wYXRpYmxlIGJldHdlZW4gRmlsZVN5c3RlbXMuCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgYSBmaWxlLgoKICAgIFJldHVybnM6IHN0cmluZyBjb250YWluaW5nIGNoZWNrc3VtCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIHBhdGggaXNuJ3QgYSBmaWxlIG9yIGRvZXNuJ3QgZXhpc3QuCiAgICAiIiIKICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXRoKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0uY2hlY2tzdW0ocGF0aCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBkZWxldGUocGF0aHMpOgogICAgIiIiRGVsZXRlcyBmaWxlcyBvciBkaXJlY3RvcmllcyBhdCB0aGUgcHJvdmlkZWQgcGF0aHMuCiAgICBEaXJlY3RvcmllcyB3aWxsIGJlIGRlbGV0ZWQgcmVjdXJzaXZlbHkuCgogICAgQXJnczoKICAgICAgcGF0aHM6IGxpc3Qgb2YgcGF0aHMgdGhhdCBnaXZlIHRoZSBmaWxlIG9iamVjdHMgdG8gYmUgZGVsZXRlZAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBhbnkgb2YgdGhlIGRlbGV0ZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgaWYgaXNpbnN0YW5jZShwYXRocywgKHN0ciwgdW5pY29kZSkpOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigKICAgICAgICAgICdEZWxldGUgcGFzc2VkIHN0cmluZyBhcmd1bWVudCBpbnN0ZWFkIG9mIGxpc3Q6ICVzJyAlIHBhdGhzKQogICAgaWYgbGVuKHBhdGhzKSA9PSAwOgogICAgICByZXR1cm4KICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXRoc1swXSkKICAgIHJldHVybiBmaWxlc3lzdGVtLmRlbGV0ZShwYXRocykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfY2h1bmtfc2l6ZShwYXRoKToKICAgICIiIkdldCB0aGUgY29ycmVjdCBjaHVuayBzaXplIGZvciB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQuCgogICAgUmV0dXJuczogaW50ZWdlciBzaXplIGZvciBwYXJhbGxlbGl6YXRpb24gaW4gdGhlIEZTIG9wZXJhdGlvbnMuCiAgICAiIiIKICAgIGZpbGVzeXN0ZW0gPSBGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbShwYXRoKQogICAgcmV0dXJuIGZpbGVzeXN0ZW0uQ0hVTktfU0laRQqUfZQojBdGaWxlU3lzdGVtcy5zZXRfb3B0aW9uc5RqVjEBAEtKS1GHlIwWRmlsZVN5c3RlbXMuZ2V0X3NjaGVtZZRqVjEBAEtTS1iHlIwaRmlsZVN5c3RlbXMuZ2V0X2ZpbGVzeXN0ZW2UalYxAQBLWkt3h5SMEEZpbGVTeXN0ZW1zLmpvaW6UalYxAQBLeUuGh5SMEUZpbGVTeXN0ZW1zLnNwbGl0lGpWMQEAS4hLmIeUjBJGaWxlU3lzdGVtcy5ta2RpcnOUalYxAQBLmkulh5SMEUZpbGVTeXN0ZW1zLm1hdGNolGpWMQEAS6dLzIeUjBJGaWxlU3lzdGVtcy5jcmVhdGWUalYxAQBLzkvgh5SMEEZpbGVTeXN0ZW1zLm9wZW6UalYxAQBL4kv0h5SMEEZpbGVTeXN0ZW1zLmNvcHmUalYxAQBL9k0EAYeUjBJGaWxlU3lzdGVtcy5yZW5hbWWUalYxAQBNBgFNFQGHlIwSRmlsZVN5c3RlbXMuZXhpc3RzlGpWMQEATRcBTSEBh5SMGEZpbGVTeXN0ZW1zLmxhc3RfdXBkYXRlZJRqVjEBAE0jAU0wAYeUjBRGaWxlU3lzdGVtcy5jaGVja3N1bZRqVjEBAE0yAU1EAYeUjBJGaWxlU3lzdGVtcy5kZWxldGWUalYxAQBNRgFNVwGHlIwaRmlsZVN5c3RlbXMuZ2V0X2NodW5rX3NpemWUalYxAQBNWQFNYwGHlIwLRmlsZVN5c3RlbXOUal0xAQBLQk1jAYeUdX2UKIwLRmlsZVN5c3RlbXOUaoEDAACMF0ZpbGVTeXN0ZW1zLnNldF9vcHRpb25zlGqBAwAAjBZGaWxlU3lzdGVtcy5nZXRfc2NoZW1llGqBAwAAjBpGaWxlU3lzdGVtcy5nZXRfZmlsZXN5c3RlbZRqgQMAAIwQRmlsZVN5c3RlbXMuam9pbpRqgQMAAIwRRmlsZVN5c3RlbXMuc3BsaXSUaoEDAACMEkZpbGVTeXN0ZW1zLm1rZGlyc5RqgQMAAIwRRmlsZVN5c3RlbXMubWF0Y2iUaoEDAACMEkZpbGVTeXN0ZW1zLmNyZWF0ZZRqgQMAAIwQRmlsZVN5c3RlbXMub3BlbpRqgQMAAIwQRmlsZVN5c3RlbXMuY29weZRqgQMAAIwSRmlsZVN5c3RlbXMucmVuYW1llGqBAwAAjBJGaWxlU3lzdGVtcy5leGlzdHOUaoEDAACMGEZpbGVTeXN0ZW1zLmxhc3RfdXBkYXRlZJRqgQMAAIwURmlsZVN5c3RlbXMuY2hlY2tzdW2UaoEDAACMEkZpbGVTeXN0ZW1zLmRlbGV0ZZRqgQMAAIwaRmlsZVN5c3RlbXMuZ2V0X2NodW5rX3NpemWUaoEDAAB1jBphcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtc5R0lIwzYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNllChY7QoAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiCkEgUFRyYW5zZm9ybSB0aGF0IHByb3ZpZGVzIGFuIHVuYm91bmRlZCwgc3RyZWFtaW5nIHNvdXJjZSBvZiBlbXB0eSBieXRlIGFycmF5cy4KClRoaXMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBmbGluayBydW5uZXIuCiIiIgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGpzb24KZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBXaW5kb3dpbmcKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEdsb2JhbFdpbmRvd3MKCgpjbGFzcyBGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UoUFRyYW5zZm9ybSk6CiAgVVJOID0gImZsaW5rOnRyYW5zZm9ybTpzdHJlYW1pbmdfaW1wdWxzZTp2MSIKCiAgY29uZmlnID0ge30gICMgdHlwZTogRGljdFtzdHIsIEFueV0KCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocGJlZ2luLCBwdmFsdWUuUEJlZ2luKSwgKAogICAgICAgICdJbnB1dCB0byB0cmFuc2Zvcm0gbXVzdCBiZSBhIFBCZWdpbiBidXQgZm91bmQgJXMnICUgcGJlZ2luKQogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbihwYmVnaW4ucGlwZWxpbmUsIGlzX2JvdW5kZWQ9RmFsc2UpCgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIGlucHV0cyk6CiAgICByZXR1cm4gV2luZG93aW5nKEdsb2JhbFdpbmRvd3MoKSkKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIHVudXNlZF9pbnB1dF90eXBlKToKICAgIHJldHVybiBieXRlcwoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UpLCBcCiAgICAgICJleHBlY3RlZCBpbnN0YW5jZSBvZiBTdHJlYW1pbmdJbXB1bHNlU291cmNlLCBidXQgZ290ICVzIiAlIHNlbGYuX19jbGFzc19fCiAgICByZXR1cm4gKHNlbGYuVVJOLCBqc29uLmR1bXBzKHNlbGYuY29uZmlnKSkKCiAgZGVmIHNldF9pbnRlcnZhbF9tcyhzZWxmLCBpbnRlcnZhbF9tcyk6CiAgICAiIiJTZXRzIHRoZSBpbnRlcnZhbCAoaW4gbWlsbGlzZWNvbmRzKSBiZXR3ZWVuIG1lc3NhZ2VzIGluIHRoZSBzdHJlYW0uCiAgICAiIiIKICAgIHNlbGYuY29uZmlnWyJpbnRlcnZhbF9tcyJdID0gaW50ZXJ2YWxfbXMKICAgIHJldHVybiBzZWxmCgogIGRlZiBzZXRfbWVzc2FnZV9jb3VudChzZWxmLCBtZXNzYWdlX2NvdW50KToKICAgICIiIklmIG5vbi16ZXJvLCB0aGUgc3RyZWFtIHdpbGwgcHJvZHVjZSBvbmx5IHRoaXMgbWFueSB0b3RhbCBtZXNzYWdlcy4KICAgIE90aGVyd2lzZSBwcm9kdWNlcyBhbiB1bmJvdW5kZWQgbnVtYmVyIG9mIG1lc3NhZ2VzLgogICAgIiIiCiAgICBzZWxmLmNvbmZpZ1sibWVzc2FnZV9jb3VudCJdID0gbWVzc2FnZV9jb3VudAogICAgcmV0dXJuIHNlbGYKCiAgQHN0YXRpY21ldGhvZAogIEBQVHJhbnNmb3JtLnJlZ2lzdGVyX3VybigiZmxpbms6dHJhbnNmb3JtOnN0cmVhbWluZ19pbXB1bHNlOnYxIiwgTm9uZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihzcGVjX3BhcmFtZXRlciwgX3VudXNlZF9jb250ZXh0KToKICAgIGNvbmZpZyA9IGpzb24ubG9hZHMoc3BlY19wYXJhbWV0ZXIpCiAgICBpbnN0YW5jZSA9IEZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZSgpCiAgICBpZiAiaW50ZXJ2YWxfbXMiIGluIGNvbmZpZzoKICAgICAgaW5zdGFuY2Uuc2V0X2ludGVydmFsX21zKGNvbmZpZ1siaW50ZXJ2YWxfbXMiXSkKICAgIGlmICJtZXNzYWdlX2NvdW50IiBpbiBjb25maWc6CiAgICAgIGluc3RhbmNlLnNldF9tZXNzYWdlX2NvdW50KGNvbmZpZ1sibWVzc2FnZV9jb3VudCJdKQoKICAgIHJldHVybiBpbnN0YW5jZQqUlQUTAAAAAAAAfZQojCJGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UuZXhwYW5klGpWMQEASypLLYeUjClGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UuZ2V0X3dpbmRvd2luZ5RqVjEBAEsvSzCHlIwtRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmluZmVyX291dHB1dF90eXBllGpWMQEASzJLM4eUjDNGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2UudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBLNUs4h5SMK0ZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5zZXRfaW50ZXJ2YWxfbXOUalYxAQBLOks+h5SMLUZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5zZXRfbWVzc2FnZV9jb3VudJRqVjEBAEtAS0WHlIw1RmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBLR0tRh5SMG0ZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZZRqXTEBAEslS1GHlHV9lCiMG0ZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZZRqYwMAAIwiRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmV4cGFuZJRqYwMAAIwpRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLmdldF93aW5kb3dpbmeUamMDAACMLUZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5pbmZlcl9vdXRwdXRfdHlwZZRqYwMAAIwzRmxpbmtTdHJlYW1pbmdJbXB1bHNlU291cmNlLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpjAwAAjCtGbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Uuc2V0X2ludGVydmFsX21zlGpjAwAAjC1GbGlua1N0cmVhbWluZ0ltcHVsc2VTb3VyY2Uuc2V0X21lc3NhZ2VfY291bnSUamMDAACMNUZsaW5rU3RyZWFtaW5nSW1wdWxzZVNvdXJjZS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpjAwAAdYwzYXBhY2hlX2JlYW0uaW8uZmxpbmsuZmxpbmtfc3RyZWFtaW5nX2ltcHVsc2Vfc291cmNllHSUjDRhcGFjaGVfYmVhbS5pby5nY3AuYmlnX3F1ZXJ5X3F1ZXJ5X3RvX3RhYmxlX3BpcGVsaW5llChYnw4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiSm9iIHRoYXQgcmVhZHMgYW5kIHdyaXRlcyBkYXRhIHRvIEJpZ1F1ZXJ5LgoKQSBEYXRhZmxvdyBqb2IgdGhhdCByZWFkcyBmcm9tIEJRIHVzaW5nIGEgcXVlcnkgYW5kIHRoZW4gd3JpdGVzIHRvIGEKYmlnIHF1ZXJ5IHRhYmxlIGF0IHRoZSBlbmQgb2YgdGhlIHBpcGVsaW5lLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXJncGFyc2UKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzIGltcG9ydCBwYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29uCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZSBpbXBvcnQgVGVzdFBpcGVsaW5lCgoKZGVmIHJ1bl9icV9waXBlbGluZShhcmd2PU5vbmUpOgogICIiIlJ1biB0aGUgc2FtcGxlIEJpZ1F1ZXJ5IHBpcGVsaW5lLgoKICBBcmdzOgogICAgYXJndjogQXJndW1lbnRzIHRvIHRoZSBydW4gZnVuY3Rpb24uCiAgIiIiCiAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLXF1ZXJ5JywgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nUXVlcnkgdG8gcHJvY2VzcyBmb3IgdGhlIHRhYmxlLicpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tb3V0cHV0JywgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nT3V0cHV0IEJRIHRhYmxlIHRvIHdyaXRlIHJlc3VsdHMgdG8uJykKICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAnLS1vdXRwdXRfc2NoZW1hJywKICAgICAgZGVzdD0nb3V0cHV0X3NjaGVtYScsCiAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgIGhlbHA9J1NjaGVtYSBmb3Igb3V0cHV0IEJRIHRhYmxlLicpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tdXNlX3N0YW5kYXJkX3NxbCcsCiAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgIGRlc3Q9J3VzZV9zdGFuZGFyZF9zcWwnLAogICAgICBoZWxwPSdPdXRwdXQgQlEgdGFibGUgdG8gd3JpdGUgcmVzdWx0cyB0by4nKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLWttc19rZXknLCBkZWZhdWx0PU5vbmUsIGhlbHA9J1VzZSB0aGlzIENsb3VkIEtNUyBrZXkgd2l0aCBCaWdRdWVyeS4nKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLW5hdGl2ZScsCiAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgIGhlbHA9J1VzZSBOYXRpdmVTb3VyY2VzIGFuZCBTaW5rcy4nKQogIGtub3duX2FyZ3MsIHBpcGVsaW5lX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQoKICB0YWJsZV9zY2hlbWEgPSBwYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29uKGtub3duX2FyZ3Mub3V0cHV0X3NjaGVtYSkKICBrbXNfa2V5ID0ga25vd25fYXJncy5rbXNfa2V5CgogIG9wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMocGlwZWxpbmVfYXJncykKICBwID0gVGVzdFBpcGVsaW5lKG9wdGlvbnM9b3B0aW9ucykKCiAgIyBOb3RlIHRvIGZ1dHVyZSBtb2RpZmllcnM6IEtlZXAgdXNpbmcgQmlnUXVlcnlTb3VyY2UgaWYga25vd25fYXJncy5uYXRpdmUgaXMKICAjIFRydWUuCiAgaWYga25vd25fYXJncy5uYXRpdmU6CiAgICBkYXRhID0gcCB8ICdyZWFkJyA+PiBiZWFtLmlvLlJlYWQoCiAgICAgICAgYmVhbS5pby5CaWdRdWVyeVNvdXJjZSgKICAgICAgICAgICAgcXVlcnk9a25vd25fYXJncy5xdWVyeSwKICAgICAgICAgICAgdXNlX3N0YW5kYXJkX3NxbD1rbm93bl9hcmdzLnVzZV9zdGFuZGFyZF9zcWwsCiAgICAgICAgICAgIGttc19rZXk9a21zX2tleSkpCiAgZWxzZToKICAgIGRhdGEgPSBwIHwgJ3JlYWQnID4+IGJlYW0uaW8uZ2NwLmJpZ3F1ZXJ5Ll9SZWFkRnJvbUJpZ1F1ZXJ5KAogICAgICAgIHF1ZXJ5PWtub3duX2FyZ3MucXVlcnksCiAgICAgICAgcHJvamVjdD1vcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS5wcm9qZWN0LAogICAgICAgIHVzZV9zdGFuZGFyZF9zcWw9a25vd25fYXJncy51c2Vfc3RhbmRhcmRfc3FsLAogICAgICAgIGttc19rZXk9a21zX2tleSkKICBpZiBrbm93bl9hcmdzLm5hdGl2ZToKICAgIF8gPSBkYXRhIHwgJ3dyaXRlJyA+PiBiZWFtLmlvLldyaXRlKAogICAgICAgIGJlYW0uaW8uQmlnUXVlcnlTaW5rKAogICAgICAgICAgICBrbm93bl9hcmdzLm91dHB1dCwKICAgICAgICAgICAgc2NoZW1hPXRhYmxlX3NjaGVtYSwKICAgICAgICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uPWJlYW0uaW8uQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVELAogICAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1iZWFtLmlvLkJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFksCiAgICAgICAgICAgIGttc19rZXk9a21zX2tleSkpCiAgZWxzZToKICAgIF8gPSBkYXRhIHwgJ3dyaXRlJyA+PiBiZWFtLmlvLldyaXRlVG9CaWdRdWVyeSgKICAgICAgICBrbm93bl9hcmdzLm91dHB1dCwKICAgICAgICBzY2hlbWE9dGFibGVfc2NoZW1hLAogICAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbj1iZWFtLmlvLkJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRCwKICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1iZWFtLmlvLkJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFksCiAgICAgICAga21zX2tleT1rbXNfa2V5KQoKICByZXN1bHQgPSBwLnJ1bigpCiAgcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKlH2UjA9ydW5fYnFfcGlwZWxpbmWUalYxAQBLJktph5RzfZSMD3J1bl9icV9waXBlbGluZZRqjgMAAHOMNGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdfcXVlcnlfcXVlcnlfdG9fdGFibGVfcGlwZWxpbmWUdJSMG2FwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeZQoWC4FAQAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkJpZ1F1ZXJ5IHNvdXJjZXMgYW5kIHNpbmtzLgoKVGhpcyBtb2R1bGUgaW1wbGVtZW50cyByZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgdG8gQmlnUXVlcnkgdGFibGVzLiBJdCByZWxpZXMKb24gc2V2ZXJhbCBjbGFzc2VzIGV4cG9zZWQgYnkgdGhlIEJpZ1F1ZXJ5IEFQSTogVGFibGVTY2hlbWEsIFRhYmxlRmllbGRTY2hlbWEsClRhYmxlUm93LCBhbmQgVGFibGVDZWxsLiBUaGUgZGVmYXVsdCBtb2RlIGlzIHRvIHJldHVybiB0YWJsZSByb3dzIHJlYWQgZnJvbSBhCkJpZ1F1ZXJ5IHNvdXJjZSBhcyBkaWN0aW9uYXJpZXMuIFNpbWlsYXJseSBhIFdyaXRlIHRyYW5zZm9ybSB0byBhIEJpZ1F1ZXJ5U2luawphY2NlcHRzIFBDb2xsZWN0aW9ucyBvZiBkaWN0aW9uYXJpZXMuIFRoaXMgaXMgZG9uZSBmb3IgbW9yZSBjb252ZW5pZW50CnByb2dyYW1taW5nLiAgSWYgZGVzaXJlZCwgdGhlIG5hdGl2ZSBUYWJsZVJvdyBvYmplY3RzIGNhbiBiZSB1c2VkIHRocm91Z2hvdXQgdG8KcmVwcmVzZW50IHJvd3MgKHVzZSBhbiBpbnN0YW5jZSBvZiBUYWJsZVJvd0pzb25Db2RlciBhcyBhIGNvZGVyIGFyZ3VtZW50IHdoZW4KY3JlYXRpbmcgdGhlIHNvdXJjZXMgb3Igc2lua3MgcmVzcGVjdGl2ZWx5KS4KCkFsc28sIGZvciBwcm9ncmFtbWluZyBjb252ZW5pZW5jZSwgaW5zdGFuY2VzIG9mIFRhYmxlUmVmZXJlbmNlIGFuZCBUYWJsZVNjaGVtYQpoYXZlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50czoKCiAgLSBUYWJsZVJlZmVyZW5jZSBjYW4gYmUgYSBQUk9KRUNUOkRBVEFTRVQuVEFCTEUgb3IgREFUQVNFVC5UQUJMRSBzdHJpbmcuCiAgLSBUYWJsZVNjaGVtYSBjYW4gYmUgYSBOQU1FOlRZUEV7LE5BTUU6VFlQRX0qIHN0cmluZwogICAgKGUuZy4gJ21vbnRoOlNUUklORyxldmVudF9jb3VudDpJTlRFR0VSJykuCgpUaGUgc3ludGF4IHN1cHBvcnRlZCBpcyBkZXNjcmliZWQgaGVyZToKaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2JxLWNvbW1hbmQtbGluZS10b29sLXF1aWNrc3RhcnQKCkJpZ1F1ZXJ5IHNvdXJjZXMgY2FuIGJlIHVzZWQgYXMgbWFpbiBpbnB1dHMgb3Igc2lkZSBpbnB1dHMuIEEgbWFpbiBpbnB1dAooY29tbW9uIGNhc2UpIGlzIGV4cGVjdGVkIHRvIGJlIG1hc3NpdmUgYW5kIHdpbGwgYmUgc3BsaXQgaW50byBtYW5hZ2VhYmxlIGNodW5rcwphbmQgcHJvY2Vzc2VkIGluIHBhcmFsbGVsLiBTaWRlIGlucHV0cyBhcmUgZXhwZWN0ZWQgdG8gYmUgc21hbGwgYW5kIHdpbGwgYmUgcmVhZApjb21wbGV0ZWx5IGV2ZXJ5IHRpbWUgYSBQYXJEbyBEb0ZuIGdldHMgZXhlY3V0ZWQuIEluIHRoZSBleGFtcGxlIGJlbG93IHRoZQpsYW1iZGEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBEb0ZuIGZvciB0aGUgTWFwIHRyYW5zZm9ybSB3aWxsIGdldCBvbiBlYWNoCmNhbGwgKm9uZSogcm93IG9mIHRoZSBtYWluIHRhYmxlIGFuZCAqYWxsKiByb3dzIG9mIHRoZSBzaWRlIHRhYmxlLiBUaGUgcnVubmVyCm1heSB1c2Ugc29tZSBjYWNoaW5nIHRlY2huaXF1ZXMgdG8gc2hhcmUgdGhlIHNpZGUgaW5wdXRzIGJldHdlZW4gY2FsbHMgaW4gb3JkZXIKdG8gYXZvaWQgZXhjZXNzaXZlIHJlYWRpbmc6OjoKCiAgbWFpbl90YWJsZSA9IHBpcGVsaW5lIHwgJ1ZlcnlCaWcnID4+IGJlYW0uaW8uUmVhZChiZWFtLmlvLkJpZ1F1ZXJ5U291cmNlKCkKICBzaWRlX3RhYmxlID0gcGlwZWxpbmUgfCAnTm90QmlnJyA+PiBiZWFtLmlvLlJlYWQoYmVhbS5pby5CaWdRdWVyeVNvdXJjZSgpCiAgcmVzdWx0cyA9ICgKICAgICAgbWFpbl90YWJsZQogICAgICB8ICdQcm9jZXNzRGF0YScgPj4gYmVhbS5NYXAoCiAgICAgICAgICBsYW1iZGEgZWxlbWVudCwgc2lkZV9pbnB1dDogLi4uLCBBc0xpc3Qoc2lkZV90YWJsZSkpKQoKVGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBpbiBob3cgbWFpbiBhbmQgc2lkZSBpbnB1dHMgYXJlIHJlYWQuIFdoYXQgbWFrZXMgdGhlCnNpZGVfdGFibGUgYSAnc2lkZSBpbnB1dCcgaXMgdGhlIEFzTGlzdCB3cmFwcGVyIHVzZWQgd2hlbiBwYXNzaW5nIHRoZSB0YWJsZQphcyBhIHBhcmFtZXRlciB0byB0aGUgTWFwIHRyYW5zZm9ybS4gQXNMaXN0IHNpZ25hbHMgdG8gdGhlIGV4ZWN1dGlvbiBmcmFtZXdvcmsKdGhhdCBpdHMgaW5wdXQgc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIHdob2xlLgoKVGhlIG1haW4gYW5kIHNpZGUgaW5wdXRzIGFyZSBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseS4gUmVhZGluZyBhIEJpZ1F1ZXJ5IHRhYmxlCmFzIG1haW4gaW5wdXQgZW50YWlscyBleHBvcnRpbmcgdGhlIHRhYmxlIHRvIGEgc2V0IG9mIEdDUyBmaWxlcyAoY3VycmVudGx5IGluCkpTT04gZm9ybWF0KSBhbmQgdGhlbiBwcm9jZXNzaW5nIHRob3NlIGZpbGVzLiBSZWFkaW5nIHRoZSBzYW1lIHRhYmxlIGFzIGEgc2lkZQppbnB1dCBlbnRhaWxzIHF1ZXJ5aW5nIHRoZSB0YWJsZSBmb3IgYWxsIGl0cyByb3dzLiBUaGUgY29kZXIgYXJndW1lbnQgb24KQmlnUXVlcnlTb3VyY2UgY29udHJvbHMgdGhlIHJlYWRpbmcgb2YgdGhlIGxpbmVzIGluIHRoZSBleHBvcnQgZmlsZXMgKGkuZS4sCnRyYW5zZm9ybSBhIEpTT04gb2JqZWN0IGludG8gYSBQQ29sbGVjdGlvbiBlbGVtZW50KS4gVGhlIGNvZGVyIGlzIG5vdCBpbnZvbHZlZAp3aGVuIHRoZSBzYW1lIHRhYmxlIGlzIHJlYWQgYXMgYSBzaWRlIGlucHV0IHNpbmNlIHRoZXJlIGlzIG5vIGludGVybWVkaWF0ZQpmb3JtYXQgaW52b2x2ZWQuIFdlIGdldCB0aGUgdGFibGUgcm93cyBkaXJlY3RseSBmcm9tIHRoZSBCaWdRdWVyeSBzZXJ2aWNlIHdpdGgKYSBxdWVyeS4KClVzZXJzIG1heSBwcm92aWRlIGEgcXVlcnkgdG8gcmVhZCBmcm9tIHJhdGhlciB0aGFuIHJlYWRpbmcgYWxsIG9mIGEgQmlnUXVlcnkKdGFibGUuIElmIHNwZWNpZmllZCwgdGhlIHJlc3VsdCBvYnRhaW5lZCBieSBleGVjdXRpbmcgdGhlIHNwZWNpZmllZCBxdWVyeSB3aWxsCmJlIHVzZWQgYXMgdGhlIGRhdGEgb2YgdGhlIGlucHV0IHRyYW5zZm9ybS46OgoKICBxdWVyeV9yZXN1bHRzID0gcGlwZWxpbmUgfCBiZWFtLmlvLlJlYWQoYmVhbS5pby5CaWdRdWVyeVNvdXJjZSgKICAgICAgcXVlcnk9J1NFTEVDVCB5ZWFyLCBtZWFuX3RlbXAgRlJPTSBzYW1wbGVzLndlYXRoZXJfc3RhdGlvbnMnKSkKCldoZW4gY3JlYXRpbmcgYSBCaWdRdWVyeSBpbnB1dCB0cmFuc2Zvcm0sIHVzZXJzIHNob3VsZCBwcm92aWRlIGVpdGhlciBhIHF1ZXJ5Cm9yIGEgdGFibGUuIFBpcGVsaW5lIGNvbnN0cnVjdGlvbiB3aWxsIGZhaWwgd2l0aCBhIHZhbGlkYXRpb24gZXJyb3IgaWYgbmVpdGhlcgpvciBib3RoIGFyZSBzcGVjaWZpZWQuCgpXcml0aW5nIERhdGEgdG8gQmlnUXVlcnkKPT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgYFdyaXRlVG9CaWdRdWVyeWAgdHJhbnNmb3JtIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkgb2Ygd3JpdGluZyBkYXRhIHRvCkJpZ1F1ZXJ5LiBJdCBzdXBwb3J0cyBhIGxhcmdlIHNldCBvZiBwYXJhbWV0ZXJzIHRvIGN1c3RvbWl6ZSBob3cgeW91J2QgbGlrZSB0bwp3cml0ZSB0byBCaWdRdWVyeS4KClRhYmxlIFJlZmVyZW5jZXMKLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyB0cmFuc2Zvcm0gYWxsb3dzIHlvdSB0byBwcm92aWRlIHN0YXRpYyBgcHJvamVjdGAsIGBkYXRhc2V0YCBhbmQgYHRhYmxlYApwYXJhbWV0ZXJzIHdoaWNoIHBvaW50IHRvIGEgc3BlY2lmaWMgQmlnUXVlcnkgdGFibGUgdG8gYmUgY3JlYXRlZC4gVGhlIGB0YWJsZWAKcGFyYW1ldGVyIGNhbiBhbHNvIGJlIGEgZHluYW1pYyBwYXJhbWV0ZXIgKGkuZS4gYSBjYWxsYWJsZSksIHdoaWNoIHJlY2VpdmVzIGFuCmVsZW1lbnQgdG8gYmUgd3JpdHRlbiB0byBCaWdRdWVyeSwgYW5kIHJldHVybnMgdGhlIHRhYmxlIHRoYXQgdGhhdCBlbGVtZW50CnNob3VsZCBiZSBzZW50IHRvLgoKWW91IG1heSBhbHNvIHByb3ZpZGUgYSB0dXBsZSBvZiBQQ29sbGVjdGlvblZpZXcgZWxlbWVudHMgdG8gYmUgcGFzc2VkIGFzIHNpZGUKaW5wdXRzIHRvIHlvdXIgY2FsbGFibGUuIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoYXQgb25lIHdpc2hlcyB0byBzZW5kCmV2ZW50cyBvZiBkaWZmZXJlbnQgdHlwZXMgdG8gZGlmZmVyZW50IHRhYmxlcywgYW5kIHRoZSB0YWJsZSBuYW1lcyBhcmUKY29tcHV0ZWQgYXQgcGlwZWxpbmUgcnVudGltZSwgb25lIG1heSBkbyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOjoKCiAgICB3aXRoIFBpcGVsaW5lKCkgYXMgcDoKICAgICAgZWxlbWVudHMgPSAocCB8IGJlYW0uQ3JlYXRlKFsKICAgICAgICB7J3R5cGUnOiAnZXJyb3InLCAndGltZXN0YW1wJzogJzEyOjM0OjU2JywgJ21lc3NhZ2UnOiAnYmFkJ30sCiAgICAgICAgeyd0eXBlJzogJ3VzZXJfbG9nJywgJ3RpbWVzdGFtcCc6ICcxMjozNDo1OScsICdxdWVyeSc6ICdmbHUgc3ltcHRvbSd9LAogICAgICBdKSkKCiAgICAgIHRhYmxlX25hbWVzID0gKHAgfCBiZWFtLkNyZWF0ZShbCiAgICAgICAgKCdlcnJvcicsICdteV9wcm9qZWN0OmRhdGFzZXQxLmVycm9yX3RhYmxlX2Zvcl90b2RheScpLAogICAgICAgICgndXNlcl9sb2cnLCAnbXlfcHJvamVjdDpkYXRhc2V0MS5xdWVyeV90YWJsZV9mb3JfdG9kYXknKSwKICAgICAgXSkKCiAgICAgIHRhYmxlX25hbWVzX2RpY3QgPSBiZWFtLnB2YWx1ZS5Bc0RpY3QodGFibGVfbmFtZXMpCgogICAgICBlbGVtZW50cyB8IGJlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeSgKICAgICAgICB0YWJsZT1sYW1iZGEgcm93LCB0YWJsZV9kaWN0OiB0YWJsZV9kaWN0W3Jvd1sndHlwZSddXSwKICAgICAgICB0YWJsZV9zaWRlX2lucHV0cz0odGFibGVfbmFtZXNfZGljdCwpKQoKSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBgdGFibGVfZGljdGAgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBpbgpgdGFibGVfZGljdGAgaXMgdGhlIHNpZGUgaW5wdXQgY29taW5nIGZyb20gYHRhYmxlX25hbWVzX2RpY3RgLCB3aGljaCBpcyBwYXNzZWQKYXMgcGFydCBvZiB0aGUgYHRhYmxlX3NpZGVfaW5wdXRzYCBhcmd1bWVudC4KClNjaGVtYXMKLS0tLS0tLS0tCgpUaGlzIHRyYW5zZm9ybSBhbHNvIGFsbG93cyB5b3UgdG8gcHJvdmlkZSBhIHN0YXRpYyBvciBkeW5hbWljIGBzY2hlbWFgCnBhcmFtZXRlciAoaS5lLiBhIGNhbGxhYmxlKS4KCklmIHByb3ZpZGluZyBhIGNhbGxhYmxlLCB0aGlzIHNob3VsZCB0YWtlIGluIGEgdGFibGUgcmVmZXJlbmNlIChhcyByZXR1cm5lZCBieQp0aGUgYHRhYmxlYCBwYXJhbWV0ZXIpLCBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHNjaGVtYSBmb3IgdGhhdCB0YWJsZS4KVGhpcyBhbGxvd3MgdG8gcHJvdmlkZSBkaWZmZXJlbnQgc2NoZW1hcyBmb3IgZGlmZmVyZW50IHRhYmxlczo6CgogICAgZGVmIGNvbXB1dGVfdGFibGVfbmFtZShyb3cpOgogICAgICAuLi4KCiAgICBlcnJvcnNfc2NoZW1hID0geydmaWVsZHMnOiBbCiAgICAgIHsnbmFtZSc6ICd0eXBlJywgJ3R5cGUnOiAnU1RSSU5HJywgJ21vZGUnOiAnTlVMTEFCTEUnfSwKICAgICAgeyduYW1lJzogJ21lc3NhZ2UnLCAndHlwZSc6ICdTVFJJTkcnLCAnbW9kZSc6ICdOVUxMQUJMRSd9XX0KICAgIHF1ZXJpZXNfc2NoZW1hID0geydmaWVsZHMnOiBbCiAgICAgIHsnbmFtZSc6ICd0eXBlJywgJ3R5cGUnOiAnU1RSSU5HJywgJ21vZGUnOiAnTlVMTEFCTEUnfSwKICAgICAgeyduYW1lJzogJ3F1ZXJ5JywgJ3R5cGUnOiAnU1RSSU5HJywgJ21vZGUnOiAnTlVMTEFCTEUnfV19CgogICAgd2l0aCBQaXBlbGluZSgpIGFzIHA6CiAgICAgIGVsZW1lbnRzID0gKHAgfCBiZWFtLkNyZWF0ZShbCiAgICAgICAgeyd0eXBlJzogJ2Vycm9yJywgJ3RpbWVzdGFtcCc6ICcxMjozNDo1NicsICdtZXNzYWdlJzogJ2JhZCd9LAogICAgICAgIHsndHlwZSc6ICd1c2VyX2xvZycsICd0aW1lc3RhbXAnOiAnMTI6MzQ6NTknLCAncXVlcnknOiAnZmx1IHN5bXB0b20nfSwKICAgICAgXSkpCgogICAgICBlbGVtZW50cyB8IGJlYW0uaW8uZ2NwLmJpZ3F1ZXJ5LldyaXRlVG9CaWdRdWVyeSgKICAgICAgICB0YWJsZT1jb21wdXRlX3RhYmxlX25hbWUsCiAgICAgICAgc2NoZW1hPWxhbWJkYSB0YWJsZTogKGVycm9yc19zY2hlbWEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2Vycm9ycycgaW4gdGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBxdWVyaWVzX3NjaGVtYSkpCgpJdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCBzY2hlbWFzIGFyZSBjb21wdXRlZCBhdCBwaXBlbGluZSBydW50aW1lLiBJbiBjYXNlcwpsaWtlIHRoZXNlLCBvbmUgY2FuIGFsc28gcHJvdmlkZSBhIGBzY2hlbWFfc2lkZV9pbnB1dHNgIHBhcmFtZXRlciwgd2hpY2ggaXMKYSB0dXBsZSBvZiBQQ29sbGVjdGlvblZpZXdzIHRvIGJlIHBhc3NlZCB0byB0aGUgc2NoZW1hIGNhbGxhYmxlIChtdWNoIGxpa2UKdGhlIGB0YWJsZV9zaWRlX2lucHV0c2AgcGFyYW1ldGVyKS4KCkFkZGl0aW9uYWwgUGFyYW1ldGVycyBmb3IgQmlnUXVlcnkgVGFibGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHNpbmsgaXMgYWJsZSB0byBjcmVhdGUgdGFibGVzIGluIEJpZ1F1ZXJ5IGlmIHRoZXkgZG9uJ3QgYWxyZWFkeSBleGlzdC4gSXQKYWxzbyByZWxpZXMgb24gY3JlYXRpbmcgdGVtcG9yYXJ5IHRhYmxlcyB3aGVuIHBlcmZvcm1pbmcgZmlsZSBsb2Fkcy4KClRoZSBXcml0ZVRvQmlnUXVlcnkgdHJhbnNmb3JtIGNyZWF0ZXMgdGFibGVzIHVzaW5nIHRoZSBCaWdRdWVyeSBBUEkgYnkKaW5zZXJ0aW5nIGEgbG9hZCBqb2IgKHNlZSB0aGUgQVBJIHJlZmVyZW5jZSBbMV0pLCBvciBieSBpbnNlcnRpbmcgYSBuZXcgdGFibGUKKHNlZSB0aGUgQVBJIHJlZmVyZW5jZSBmb3IgdGhhdCBbMl1bM10pLgoKV2hlbiBjcmVhdGluZyBhIG5ldyBCaWdRdWVyeSB0YWJsZSwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGV4dHJhIHBhcmFtZXRlcnMKdGhhdCBvbmUgbWF5IG5lZWQgdG8gc3BlY2lmeS4gRm9yIGV4YW1wbGUsIGNsdXN0ZXJpbmcsIHBhcnRpdGlvbmluZywgZGF0YQplbmNvZGluZywgZXRjLiBJdCBpcyBwb3NzaWJsZSB0byBwcm92aWRlIHRoZXNlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBieQpwYXNzaW5nIGEgUHl0aG9uIGRpY3Rpb25hcnkgYXMgYGFkZGl0aW9uYWxfYnFfcGFyYW1ldGVyc2AgdG8gdGhlIHRyYW5zZm9ybS4KQXMgYW4gZXhhbXBsZSwgdG8gY3JlYXRlIGEgdGFibGUgdGhhdCBoYXMgc3BlY2lmaWMgcGFydGl0aW9uaW5nLCBhbmQKY2x1c3RlcmluZyBwcm9wZXJ0aWVzLCBvbmUgd291bGQgZG8gdGhlIGZvbGxvd2luZzo6CgogICAgYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzID0gewogICAgICAndGltZVBhcnRpdGlvbmluZyc6IHsndHlwZSc6ICdEQVknfSwKICAgICAgJ2NsdXN0ZXJpbmcnOiB7J2ZpZWxkcyc6IFsnY291bnRyeSddfX0KICAgIHdpdGggUGlwZWxpbmUoKSBhcyBwOgogICAgICBlbGVtZW50cyA9IChwIHwgYmVhbS5DcmVhdGUoWwogICAgICAgIHsnY291bnRyeSc6ICdtZXhpY28nLCAndGltZXN0YW1wJzogJzEyOjM0OjU2JywgJ3F1ZXJ5JzogJ2FjYXB1bGNvJ30sCiAgICAgICAgeydjb3VudHJ5JzogJ2NhbmFkYScsICd0aW1lc3RhbXAnOiAnMTI6MzQ6NTknLCAncXVlcnknOiAnaW5mbHVlbnphJ30sCiAgICAgIF0pKQoKICAgICAgZWxlbWVudHMgfCBiZWFtLmlvLmdjcC5iaWdxdWVyeS5Xcml0ZVRvQmlnUXVlcnkoCiAgICAgICAgdGFibGU9J3Byb2plY3RfbmFtZTE6ZGF0YXNldF8yLnF1ZXJ5X2V2ZW50c190YWJsZScsCiAgICAgICAgYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzPWFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycykKCk11Y2ggbGlrZSB0aGUgc2NoZW1hIGNhc2UsIHRoZSBwYXJhbWV0ZXIgd2l0aCBgYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzYCBjYW4KYWxzbyB0YWtlIGEgY2FsbGFibGUgdGhhdCByZWNlaXZlcyBhIHRhYmxlIHJlZmVyZW5jZS4KCgpbMV0gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3Jlc3QvdjIvam9icyNcCmNvbmZpZ3VyYXRpb24ubG9hZApbMl0gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3Jlc3QvdjIvdGFibGVzL2luc2VydApbM10gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3Jlc3QvdjIvdGFibGVzI3Jlc291cmNlCgoKKioqIFNob3J0IGludHJvZHVjdGlvbiB0byBCaWdRdWVyeSBjb25jZXB0cyAqKioKVGFibGVzIGhhdmUgcm93cyAoVGFibGVSb3cpIGFuZCBlYWNoIHJvdyBoYXMgY2VsbHMgKFRhYmxlQ2VsbCkuCkEgdGFibGUgaGFzIGEgc2NoZW1hIChUYWJsZVNjaGVtYSksIHdoaWNoIGluIHR1cm4gZGVzY3JpYmVzIHRoZSBzY2hlbWEgb2YgZWFjaApjZWxsIChUYWJsZUZpZWxkU2NoZW1hKS4gVGhlIHRlcm1zIGZpZWxkIGFuZCBjZWxsIGFyZSB1c2VkIGludGVyY2hhbmdlYWJseS4KClRhYmxlU2NoZW1hOiBEZXNjcmliZXMgdGhlIHNjaGVtYSAodHlwZXMgYW5kIG9yZGVyKSBmb3IgdmFsdWVzIGluIGVhY2ggcm93LgogIEhhcyBvbmUgYXR0cmlidXRlLCAnZmllbGQnLCB3aGljaCBpcyBsaXN0IG9mIFRhYmxlRmllbGRTY2hlbWEgb2JqZWN0cy4KClRhYmxlRmllbGRTY2hlbWE6IERlc2NyaWJlcyB0aGUgc2NoZW1hICh0eXBlLCBuYW1lKSBmb3Igb25lIGZpZWxkLgogIEhhcyBzZXZlcmFsIGF0dHJpYnV0ZXMsIGluY2x1ZGluZyAnbmFtZScgYW5kICd0eXBlJy4gQ29tbW9uIHZhbHVlcyBmb3IKICB0aGUgdHlwZSBhdHRyaWJ1dGUgYXJlOiAnU1RSSU5HJywgJ0lOVEVHRVInLCAnRkxPQVQnLCAnQk9PTEVBTicsICdOVU1FUklDJywKICAnR0VPR1JBUEhZJy4KICBBbGwgcG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgYXQ6CiAgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9kYXRhLXR5cGVzCgpUYWJsZVJvdzogSG9sZHMgYWxsIHZhbHVlcyBpbiBhIHRhYmxlIHJvdy4gSGFzIG9uZSBhdHRyaWJ1dGUsICdmJywgd2hpY2ggaXMgYQogIGxpc3Qgb2YgVGFibGVDZWxsIGluc3RhbmNlcy4KClRhYmxlQ2VsbDogSG9sZHMgdGhlIHZhbHVlIGZvciBvbmUgY2VsbCAob3IgZmllbGQpLiAgSGFzIG9uZSBhdHRyaWJ1dGUsCiAgJ3YnLCB3aGljaCBpcyBhIEpzb25WYWx1ZSBpbnN0YW5jZS4gVGhpcyBjbGFzcyBpcyBkZWZpbmVkIGluCiAgYXBpdG9vbHMuYmFzZS5weS5leHRyYV90eXBlcy5weSBtb2R1bGUuCgpBcyBvZiBCZWFtIDIuNy4wLCB0aGUgTlVNRVJJQyBkYXRhIHR5cGUgaXMgc3VwcG9ydGVkLiBUaGlzIGRhdGEgdHlwZSBzdXBwb3J0cwpoaWdoLXByZWNpc2lvbiBkZWNpbWFsIG51bWJlcnMgKHByZWNpc2lvbiBvZiAzOCBkaWdpdHMsIHNjYWxlIG9mIDkgZGlnaXRzKS4KVGhlIEdFT0dSQVBIWSBkYXRhIHR5cGUgd29ya3Mgd2l0aCBXZWxsLUtub3duIFRleHQgKFNlZQpodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWxsLWtub3duX3RleHQpIGZvcm1hdCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZwp0byBCaWdRdWVyeS4KQmlnUXVlcnkgSU8gcmVxdWlyZXMgdmFsdWVzIG9mIEJZVEVTIGRhdGF0eXBlIHRvIGJlIGVuY29kZWQgdXNpbmcgYmFzZTY0CmVuY29kaW5nIHdoZW4gd3JpdGluZyB0byBCaWdRdWVyeS4gV2hlbiBieXRlcyBhcmUgcmVhZCBmcm9tIEJpZ1F1ZXJ5IHRoZXkgYXJlCnJldHVybmVkIGFzIGJhc2U2NC1lbmNvZGVkIGJ5dGVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGRlY2ltYWwKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGltZQppbXBvcnQgdXVpZApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgaXRlcnZhbHVlcwpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZSBpbXBvcnQgZnJvbV9qc29uX3ZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwLmpzb25fdmFsdWUgaW1wb3J0IHRvX2pzb25fdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcyBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIGltcG9ydCBGaWxlU3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcCBpbXBvcnQgYmlncXVlcnlfdG9vbHMKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cyBpbXBvcnQgYmlncXVlcnkKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IEJvdW5kZWRTb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJhbmdlVHJhY2tlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgU291cmNlQnVuZGxlCmZyb20gYXBhY2hlX2JlYW0uaW8udGV4dGlvIGltcG9ydCBfVGV4dFNvdXJjZSBhcyBUZXh0U291cmNlCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucyBpbXBvcnQgdmFsdWVfcHJvdmlkZXIgYXMgdnAKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IERlYnVnT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTdGFuZGFyZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyIGltcG9ydCBTdGF0aWNWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvIGltcG9ydCBpb2Jhc2UgYXMgZGF0YWZsb3dfaW8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgR2xvYmFsV2luZG93cwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCByZXRyeQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIGltcG9ydCBkZXByZWNhdGVkCmZyb20gYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnMgaW1wb3J0IGV4cGVyaW1lbnRhbAoKX19hbGxfXyA9IFsKICAgICdUYWJsZVJvd0pzb25Db2RlcicsCiAgICAnQmlnUXVlcnlEaXNwb3NpdGlvbicsCiAgICAnQmlnUXVlcnlTb3VyY2UnLAogICAgJ0JpZ1F1ZXJ5U2luaycsCiAgICAnV3JpdGVUb0JpZ1F1ZXJ5JywKICAgICdfUmVhZEZyb21CaWdRdWVyeScsCiAgICAnU0NIRU1BX0FVVE9ERVRFQ1QnLApdCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKQGRlcHJlY2F0ZWQoc2luY2U9JzIuMTEuMCcsIGN1cnJlbnQ9ImJpZ3F1ZXJ5X3Rvb2xzLnBhcnNlX3RhYmxlX3JlZmVyZW5jZSIpCmRlZiBfcGFyc2VfdGFibGVfcmVmZXJlbmNlKHRhYmxlLCBkYXRhc2V0PU5vbmUsIHByb2plY3Q9Tm9uZSk6CiAgcmV0dXJuIGJpZ3F1ZXJ5X3Rvb2xzLnBhcnNlX3RhYmxlX3JlZmVyZW5jZSh0YWJsZSwgZGF0YXNldCwgcHJvamVjdCkKCgpAZGVwcmVjYXRlZCgKICAgIHNpbmNlPScyLjExLjAnLCBjdXJyZW50PSJiaWdxdWVyeV90b29scy5wYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29uIikKZGVmIHBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb24oc2NoZW1hX3N0cmluZyk6CiAgcmV0dXJuIGJpZ3F1ZXJ5X3Rvb2xzLnBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb24oc2NoZW1hX3N0cmluZykKCgpAZGVwcmVjYXRlZChzaW5jZT0nMi4xMS4wJywgY3VycmVudD0iYmlncXVlcnlfdG9vbHMuZGVmYXVsdF9lbmNvZGVyIikKZGVmIGRlZmF1bHRfZW5jb2RlcihvYmopOgogIHJldHVybiBiaWdxdWVyeV90b29scy5kZWZhdWx0X2VuY29kZXIob2JqKQoKCkBkZXByZWNhdGVkKHNpbmNlPScyLjExLjAnLCBjdXJyZW50PSJiaWdxdWVyeV90b29scy5Sb3dBc0RpY3RKc29uQ29kZXIiKQpkZWYgUm93QXNEaWN0SnNvbkNvZGVyKCphcmdzLCAqKmt3YXJncyk6CiAgcmV0dXJuIGJpZ3F1ZXJ5X3Rvb2xzLlJvd0FzRGljdEpzb25Db2RlcigqYXJncywgKiprd2FyZ3MpCgoKQGRlcHJlY2F0ZWQoc2luY2U9JzIuMTEuMCcsIGN1cnJlbnQ9ImJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5UmVhZGVyIikKZGVmIEJpZ1F1ZXJ5UmVhZGVyKCphcmdzLCAqKmt3YXJncyk6CiAgcmV0dXJuIGJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5UmVhZGVyKCphcmdzLCAqKmt3YXJncykKCgpAZGVwcmVjYXRlZChzaW5jZT0nMi4xMS4wJywgY3VycmVudD0iYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcml0ZXIiKQpkZWYgQmlnUXVlcnlXcml0ZXIoKmFyZ3MsICoqa3dhcmdzKToKICByZXR1cm4gYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcml0ZXIoKmFyZ3MsICoqa3dhcmdzKQoKCkBkZXByZWNhdGVkKHNpbmNlPScyLjExLjAnLCBjdXJyZW50PSJiaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIiKQpkZWYgQmlnUXVlcnlXcmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CiAgcmV0dXJuIGJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlcigqYXJncywgKiprd2FyZ3MpCgoKY2xhc3MgVGFibGVSb3dKc29uQ29kZXIoY29kZXJzLkNvZGVyKToKICAiIiJBIGNvZGVyIGZvciBhIFRhYmxlUm93IGluc3RhbmNlIHRvL2Zyb20gYSBKU09OIHN0cmluZy4KCiAgTm90ZSB0aGF0IHRoZSBlbmNvZGluZyBvcGVyYXRpb24gKHVzZWQgd2hlbiB3cml0aW5nIHRvIHNpbmtzKSByZXF1aXJlcyB0aGUKICB0YWJsZSBzY2hlbWEgaW4gb3JkZXIgdG8gb2J0YWluIHRoZSBvcmRlcmVkIGxpc3Qgb2YgZmllbGQgbmFtZXMuIFJlYWRpbmcgZnJvbQogIHNvdXJjZXMgb24gdGhlIG90aGVyIGhhbmQgZG9lcyBub3QgbmVlZCB0aGUgdGFibGUgc2NoZW1hLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZV9zY2hlbWE9Tm9uZSk6CiAgICAjIFRoZSB0YWJsZSBzY2hlbWEgaXMgbmVlZGVkIGZvciBlbmNvZGluZyBUYWJsZVJvd3MgYXMgSlNPTiAod3JpdGluZyB0bwogICAgIyBzaW5rcykgYmVjYXVzZSB0aGUgb3JkZXJlZCBsaXN0IG9mIGZpZWxkIG5hbWVzIGlzIHVzZWQgaW4gdGhlIEpTT04KICAgICMgcmVwcmVzZW50YXRpb24uCiAgICBzZWxmLnRhYmxlX3NjaGVtYSA9IHRhYmxlX3NjaGVtYQogICAgIyBQcmVjb21wdXRlIGZpZWxkIG5hbWVzIHNpbmNlIHdlIG5lZWQgdGhlbSBmb3Igcm93IGVuY29kaW5nLgogICAgaWYgc2VsZi50YWJsZV9zY2hlbWE6CiAgICAgIHNlbGYuZmllbGRfbmFtZXMgPSB0dXBsZShmcy5uYW1lIGZvciBmcyBpbiBzZWxmLnRhYmxlX3NjaGVtYS5maWVsZHMpCiAgICAgIHNlbGYuZmllbGRfdHlwZXMgPSB0dXBsZShmcy50eXBlIGZvciBmcyBpbiBzZWxmLnRhYmxlX3NjaGVtYS5maWVsZHMpCgogIGRlZiBlbmNvZGUoc2VsZiwgdGFibGVfcm93KToKICAgIGlmIHNlbGYudGFibGVfc2NoZW1hIGlzIE5vbmU6CiAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAogICAgICAgICAgJ1RoZSBUYWJsZVJvd0pzb25Db2RlciByZXF1aXJlcyBhIHRhYmxlIHNjaGVtYSBmb3IgJwogICAgICAgICAgJ2VuY29kaW5nIG9wZXJhdGlvbnMuIFBsZWFzZSBzcGVjaWZ5IGEgdGFibGVfc2NoZW1hIGFyZ3VtZW50LicpCiAgICB0cnk6CiAgICAgIHJldHVybiBqc29uLmR1bXBzKAogICAgICAgICAgY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoCiAgICAgICAgICAgICAgemlwKAogICAgICAgICAgICAgICAgICBzZWxmLmZpZWxkX25hbWVzLAogICAgICAgICAgICAgICAgICBbZnJvbV9qc29uX3ZhbHVlKGYudikgZm9yIGYgaW4gdGFibGVfcm93LmZdKSksCiAgICAgICAgICBhbGxvd19uYW49RmFsc2UsCiAgICAgICAgICBkZWZhdWx0PWJpZ3F1ZXJ5X3Rvb2xzLmRlZmF1bHRfZW5jb2RlcikKICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzLiAlcycgJSAoZSwgYmlncXVlcnlfdG9vbHMuSlNPTl9DT01QTElBTkNFX0VSUk9SKSkKCiAgZGVmIGRlY29kZShzZWxmLCBlbmNvZGVkX3RhYmxlX3Jvdyk6CiAgICBvZCA9IGpzb24ubG9hZHMoCiAgICAgICAgZW5jb2RlZF90YWJsZV9yb3csIG9iamVjdF9wYWlyc19ob29rPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQogICAgcmV0dXJuIGJpZ3F1ZXJ5LlRhYmxlUm93KAogICAgICAgIGY9W2JpZ3F1ZXJ5LlRhYmxlQ2VsbCh2PXRvX2pzb25fdmFsdWUoZSkpIGZvciBlIGluIGl0ZXJ2YWx1ZXMob2QpXSkKCgpjbGFzcyBCaWdRdWVyeURpc3Bvc2l0aW9uKG9iamVjdCk6CiAgIiIiQ2xhc3MgaG9sZGluZyBzdGFuZGFyZCBzdHJpbmdzIHVzZWQgZm9yIGNyZWF0ZSBhbmQgd3JpdGUgZGlzcG9zaXRpb25zLiIiIgoKICBDUkVBVEVfTkVWRVIgPSAnQ1JFQVRFX05FVkVSJwogIENSRUFURV9JRl9ORUVERUQgPSAnQ1JFQVRFX0lGX05FRURFRCcKICBXUklURV9UUlVOQ0FURSA9ICdXUklURV9UUlVOQ0FURScKICBXUklURV9BUFBFTkQgPSAnV1JJVEVfQVBQRU5EJwogIFdSSVRFX0VNUFRZID0gJ1dSSVRFX0VNUFRZJwoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHZhbGlkYXRlX2NyZWF0ZShkaXNwb3NpdGlvbik6CiAgICB2YWx1ZXMgPSAoCiAgICAgICAgQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfTkVWRVIsIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRCkKICAgIGlmIGRpc3Bvc2l0aW9uIG5vdCBpbiB2YWx1ZXM6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnSW52YWxpZCBjcmVhdGUgZGlzcG9zaXRpb24gJXMuIEV4cGVjdGluZyAlcycgJSAoZGlzcG9zaXRpb24sIHZhbHVlcykpCiAgICByZXR1cm4gZGlzcG9zaXRpb24KCiAgQHN0YXRpY21ldGhvZAogIGRlZiB2YWxpZGF0ZV93cml0ZShkaXNwb3NpdGlvbik6CiAgICB2YWx1ZXMgPSAoCiAgICAgICAgQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURSwKICAgICAgICBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORCwKICAgICAgICBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZKQogICAgaWYgZGlzcG9zaXRpb24gbm90IGluIHZhbHVlczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdJbnZhbGlkIHdyaXRlIGRpc3Bvc2l0aW9uICVzLiBFeHBlY3RpbmcgJXMnICUgKGRpc3Bvc2l0aW9uLCB2YWx1ZXMpKQogICAgcmV0dXJuIGRpc3Bvc2l0aW9uCgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJpZ1F1ZXJ5U291cmNlLCBCaWdRdWVyeVNpbmsuCgoKY2xhc3MgQmlnUXVlcnlTb3VyY2UoZGF0YWZsb3dfaW8uTmF0aXZlU291cmNlKToKICAiIiJBIHNvdXJjZSBiYXNlZCBvbiBhIEJpZ1F1ZXJ5IHRhYmxlLiIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgdGFibGU9Tm9uZSwKICAgICAgZGF0YXNldD1Ob25lLAogICAgICBwcm9qZWN0PU5vbmUsCiAgICAgIHF1ZXJ5PU5vbmUsCiAgICAgIHZhbGlkYXRlPUZhbHNlLAogICAgICBjb2Rlcj1Ob25lLAogICAgICB1c2Vfc3RhbmRhcmRfc3FsPUZhbHNlLAogICAgICBmbGF0dGVuX3Jlc3VsdHM9VHJ1ZSwKICAgICAga21zX2tleT1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSA6Y2xhc3M6YEJpZ1F1ZXJ5U291cmNlYC4KCiAgICBBcmdzOgogICAgICB0YWJsZSAoc3RyKTogVGhlIElEIG9mIGEgQmlnUXVlcnkgdGFibGUuIElmIHNwZWNpZmllZCBhbGwgZGF0YSBvZiB0aGUKICAgICAgICB0YWJsZSB3aWxsIGJlIHVzZWQgYXMgaW5wdXQgb2YgdGhlIGN1cnJlbnQgc291cmNlLiBUaGUgSUQgbXVzdCBjb250YWluCiAgICAgICAgb25seSBsZXR0ZXJzIGBgYS16YGAsIGBgQS1aYGAsIG51bWJlcnMgYGAwLTlgYCwgb3IgdW5kZXJzY29yZXMKICAgICAgICBgYF9gYC4gSWYgZGF0YXNldCBhbmQgcXVlcnkgYXJndW1lbnRzIGFyZSA6ZGF0YTpgTm9uZWAgdGhlbiB0aGUgdGFibGUKICAgICAgICBhcmd1bWVudCBtdXN0IGNvbnRhaW4gdGhlIGVudGlyZSB0YWJsZSByZWZlcmVuY2Ugc3BlY2lmaWVkIGFzOgogICAgICAgIGBgJ0RBVEFTRVQuVEFCTEUnYGAgb3IgYGAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJ2BgLgogICAgICBkYXRhc2V0IChzdHIpOiBUaGUgSUQgb2YgdGhlIGRhdGFzZXQgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgICAgOmRhdGE6YE5vbmVgIGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50IG9yIGEgcXVlcnkgaXMgc3BlY2lmaWVkLgogICAgICBwcm9qZWN0IChzdHIpOiBUaGUgSUQgb2YgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgICAgOmRhdGE6YE5vbmVgIGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50IG9yIGEgcXVlcnkgaXMgc3BlY2lmaWVkLgogICAgICBxdWVyeSAoc3RyKTogQSBxdWVyeSB0byBiZSB1c2VkIGluc3RlYWQgb2YgYXJndW1lbnRzIHRhYmxlLCBkYXRhc2V0LCBhbmQKICAgICAgICBwcm9qZWN0LgogICAgICB2YWxpZGF0ZSAoYm9vbCk6IElmIDpkYXRhOmBUcnVlYCwgdmFyaW91cyBjaGVja3Mgd2lsbCBiZSBkb25lIHdoZW4gc291cmNlCiAgICAgICAgZ2V0cyBpbml0aWFsaXplZCAoZS5nLiwgaXMgdGFibGUgcHJlc2VudD8pLiBUaGlzIHNob3VsZCBiZQogICAgICAgIDpkYXRhOmBUcnVlYCBmb3IgbW9zdCBzY2VuYXJpb3MgaW4gb3JkZXIgdG8gY2F0Y2ggZXJyb3JzIGFzIGVhcmx5IGFzCiAgICAgICAgcG9zc2libGUgKHBpcGVsaW5lIGNvbnN0cnVjdGlvbiBpbnN0ZWFkIG9mIHBpcGVsaW5lIGV4ZWN1dGlvbikuIEl0CiAgICAgICAgc2hvdWxkIGJlIDpkYXRhOmBGYWxzZWAgaWYgdGhlIHRhYmxlIGlzIGNyZWF0ZWQgZHVyaW5nIHBpcGVsaW5lCiAgICAgICAgZXhlY3V0aW9uIGJ5IGEgcHJldmlvdXMgc3RlcC4KICAgICAgY29kZXIgKH5hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyKTogVGhlIGNvZGVyIGZvciB0aGUgdGFibGUKICAgICAgICByb3dzIGlmIHNlcmlhbGl6ZWQgdG8gZGlzay4gSWYgOmRhdGE6YE5vbmVgLCB0aGVuIHRoZSBkZWZhdWx0IGNvZGVyIGlzCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJvd0FzRGljdEpzb25Db2RlcmAsCiAgICAgICAgd2hpY2ggd2lsbCBpbnRlcnByZXQgZXZlcnkgbGluZSBpbiBhIGZpbGUgYXMgYSBKU09OIHNlcmlhbGl6ZWQKICAgICAgICBkaWN0aW9uYXJ5LiBUaGlzIGFyZ3VtZW50IG5lZWRzIGEgdmFsdWUgb25seSBpbiBzcGVjaWFsIGNhc2VzIHdoZW4KICAgICAgICByZXR1cm5pbmcgdGFibGUgcm93cyBhcyBkaWN0aW9uYXJpZXMgaXMgbm90IGRlc2lyYWJsZS4KICAgICAgdXNlX3N0YW5kYXJkX3NxbCAoYm9vbCk6IFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBCaWdRdWVyeSdzIHN0YW5kYXJkIFNRTAogICAgICAgIGRpYWxlY3QgZm9yIHRoaXMgcXVlcnkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDpkYXRhOmBGYWxzZWAuCiAgICAgICAgSWYgc2V0IHRvIDpkYXRhOmBUcnVlYCwgdGhlIHF1ZXJ5IHdpbGwgdXNlIEJpZ1F1ZXJ5J3MgdXBkYXRlZCBTUUwKICAgICAgICBkaWFsZWN0IHdpdGggaW1wcm92ZWQgc3RhbmRhcmRzIGNvbXBsaWFuY2UuCiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBmb3IgdGFibGUgaW5wdXRzLgogICAgICBmbGF0dGVuX3Jlc3VsdHMgKGJvb2wpOiBGbGF0dGVucyBhbGwgbmVzdGVkIGFuZCByZXBlYXRlZCBmaWVsZHMgaW4gdGhlCiAgICAgICAgcXVlcnkgcmVzdWx0cy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOmRhdGE6YFRydWVgLgogICAgICBrbXNfa2V5IChzdHIpOiBFeHBlcmltZW50YWwuIE9wdGlvbmFsIENsb3VkIEtNUyBrZXkgbmFtZSBmb3IgdXNlIHdoZW4KICAgICAgICBjcmVhdGluZyBuZXcgdGFibGVzLgoKICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKCiAgICAgICAgMSkgdGhlIHRhYmxlIHJlZmVyZW5jZSBhcyBhIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0CiAgICAgICAgMikgbmVpdGhlciBhIHRhYmxlIG5vciBhIHF1ZXJ5IGlzIHNwZWNpZmllZAogICAgICAgIDMpIGJvdGggYSB0YWJsZSBhbmQgYSBxdWVyeSBpcyBzcGVjaWZpZWQuCiAgICAiIiIKCiAgICAjIEltcG9ydCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0aGUgZGVwZW5kZW5jeSBmb3IgbG9jYWwgcnVubmluZyBzY2VuYXJpb3MuCiAgICB0cnk6CiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICAgIGZyb20gYXBpdG9vbHMuYmFzZSBpbXBvcnQgcHkgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICAgICAnR29vZ2xlIENsb3VkIElPIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAgICdwbGVhc2UgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdJykKCiAgICBpZiB0YWJsZSBpcyBub3QgTm9uZSBhbmQgcXVlcnkgaXMgbm90IE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnQm90aCBhIEJpZ1F1ZXJ5IHRhYmxlIGFuZCBhIHF1ZXJ5IHdlcmUgc3BlY2lmaWVkLicKICAgICAgICAgICcgUGxlYXNlIHNwZWNpZnkgb25seSBvbmUgb2YgdGhlc2UuJykKICAgIGVsaWYgdGFibGUgaXMgTm9uZSBhbmQgcXVlcnkgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQSBCaWdRdWVyeSB0YWJsZSBvciBhIHF1ZXJ5IG11c3QgYmUgc3BlY2lmaWVkJykKICAgIGVsaWYgdGFibGUgaXMgbm90IE5vbmU6CiAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlID0gYmlncXVlcnlfdG9vbHMucGFyc2VfdGFibGVfcmVmZXJlbmNlKAogICAgICAgICAgdGFibGUsIGRhdGFzZXQsIHByb2plY3QpCiAgICAgIHNlbGYucXVlcnkgPSBOb25lCiAgICAgIHNlbGYudXNlX2xlZ2FjeV9zcWwgPSBUcnVlCiAgICBlbHNlOgogICAgICBzZWxmLnF1ZXJ5ID0gcXVlcnkKICAgICAgIyBUT0RPKEJFQU0tMTA4Mik6IENoYW5nZSB0aGUgaW50ZXJuYWwgZmxhZyB0byBiZSBzdGFuZGFyZF9zcWwKICAgICAgc2VsZi51c2VfbGVnYWN5X3NxbCA9IG5vdCB1c2Vfc3RhbmRhcmRfc3FsCiAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlID0gTm9uZQoKICAgIHNlbGYudmFsaWRhdGUgPSB2YWxpZGF0ZQogICAgc2VsZi5mbGF0dGVuX3Jlc3VsdHMgPSBmbGF0dGVuX3Jlc3VsdHMKICAgIHNlbGYuY29kZXIgPSBjb2RlciBvciBiaWdxdWVyeV90b29scy5Sb3dBc0RpY3RKc29uQ29kZXIoKQogICAgc2VsZi5rbXNfa2V5ID0ga21zX2tleQoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgaWYgc2VsZi5xdWVyeSBpcyBub3QgTm9uZToKICAgICAgcmVzID0geydxdWVyeSc6IERpc3BsYXlEYXRhSXRlbShzZWxmLnF1ZXJ5LCBsYWJlbD0nUXVlcnknKX0KICAgIGVsc2U6CiAgICAgIGlmIHNlbGYudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCBpcyBub3QgTm9uZToKICAgICAgICB0YWJsZVNwZWMgPSAne306e30ue30nLmZvcm1hdCgKICAgICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQsCiAgICAgICAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQpCiAgICAgIGVsc2U6CiAgICAgICAgdGFibGVTcGVjID0gJ3t9Lnt9Jy5mb3JtYXQoCiAgICAgICAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwgc2VsZi50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgICAgcmVzID0geyd0YWJsZSc6IERpc3BsYXlEYXRhSXRlbSh0YWJsZVNwZWMsIGxhYmVsPSdUYWJsZScpfQoKICAgIHJlc1sndmFsaWRhdGlvbiddID0gRGlzcGxheURhdGFJdGVtKAogICAgICAgIHNlbGYudmFsaWRhdGUsIGxhYmVsPSdWYWxpZGF0aW9uIEVuYWJsZWQnKQogICAgcmV0dXJuIHJlcwoKICBAcHJvcGVydHkKICBkZWYgZm9ybWF0KHNlbGYpOgogICAgIiIiU291cmNlIGZvcm1hdCBuYW1lIHJlcXVpcmVkIGZvciByZW1vdGUgZXhlY3V0aW9uLiIiIgogICAgcmV0dXJuICdiaWdxdWVyeScKCiAgZGVmIHJlYWRlcihzZWxmLCB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudD1Ob25lKToKICAgIHJldHVybiBiaWdxdWVyeV90b29scy5CaWdRdWVyeVJlYWRlcigKICAgICAgICBzb3VyY2U9c2VsZiwKICAgICAgICB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudD10ZXN0X2JpZ3F1ZXJ5X2NsaWVudCwKICAgICAgICB1c2VfbGVnYWN5X3NxbD1zZWxmLnVzZV9sZWdhY3lfc3FsLAogICAgICAgIGZsYXR0ZW5fcmVzdWx0cz1zZWxmLmZsYXR0ZW5fcmVzdWx0cywKICAgICAgICBrbXNfa2V5PXNlbGYua21zX2tleSkKCgpGaWVsZFNjaGVtYSA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoJ0ZpZWxkU2NoZW1hJywgJ2ZpZWxkcyBtb2RlIG5hbWUgdHlwZScpCgoKZGVmIF90b19ib29sKHZhbHVlKToKICByZXR1cm4gdmFsdWUgPT0gJ3RydWUnCgoKZGVmIF90b19kZWNpbWFsKHZhbHVlKToKICByZXR1cm4gZGVjaW1hbC5EZWNpbWFsKHZhbHVlKQoKCmRlZiBfdG9fYnl0ZXModmFsdWUpOgogICIiIkNvbnZlcnRzIHZhbHVlIGZyb20gc3RyIHRvIGJ5dGVzIG9uIFB5dGhvbiAzLnguIERvZXMgbm90aGluZyBvbgogIFB5dGhvbiAyLjcuIiIiCiAgcmV0dXJuIHZhbHVlLmVuY29kZSgndXRmLTgnKQoKCmNsYXNzIF9Kc29uVG9EaWN0Q29kZXIoY29kZXJzLkNvZGVyKToKICAiIiJBIGNvZGVyIGZvciBhIEpTT04gc3RyaW5nIHRvIGEgUHl0aG9uIGRpY3QuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRhYmxlX3NjaGVtYSk6CiAgICBzZWxmLmZpZWxkcyA9IHNlbGYuX2NvbnZlcnRfdG9fdHVwbGUodGFibGVfc2NoZW1hLmZpZWxkcykKICAgIHNlbGYuX2NvbnZlcnRlcnMgPSB7CiAgICAgICAgJ0lOVEVHRVInOiBpbnQsCiAgICAgICAgJ0lOVDY0JzogaW50LAogICAgICAgICdGTE9BVCc6IGZsb2F0LAogICAgICAgICdCT09MRUFOJzogX3RvX2Jvb2wsCiAgICAgICAgJ05VTUVSSUMnOiBfdG9fZGVjaW1hbCwKICAgICAgICAnQllURVMnOiBfdG9fYnl0ZXMsCiAgICB9CgogIEBjbGFzc21ldGhvZAogIGRlZiBfY29udmVydF90b190dXBsZShjbHMsIHRhYmxlX2ZpZWxkX3NjaGVtYXMpOgogICAgIiIiUmVjdXJzaXZlbHkgY29udmVydHMgdGhlIGxpc3Qgb2YgVGFibGVGaWVsZFNjaGVtYSBpbnN0YW5jZXMgdG8gdGhlCiAgICBsaXN0IG9mIHR1cGxlcyB0byBwcmV2ZW50IGVycm9ycyB3aGVuIHBpY2tsaW5nIGFuZCB1bnBpY2tsaW5nCiAgICBUYWJsZUZpZWxkU2NoZW1hIGluc3RhbmNlcy4KICAgICIiIgogICAgaWYgbm90IHRhYmxlX2ZpZWxkX3NjaGVtYXM6CiAgICAgIHJldHVybiBbXQoKICAgIHJldHVybiBbCiAgICAgICAgRmllbGRTY2hlbWEoY2xzLl9jb252ZXJ0X3RvX3R1cGxlKHguZmllbGRzKSwgeC5tb2RlLCB4Lm5hbWUsIHgudHlwZSkKICAgICAgICBmb3IgeCBpbiB0YWJsZV9maWVsZF9zY2hlbWFzCiAgICBdCgogIGRlZiBkZWNvZGUoc2VsZiwgdmFsdWUpOgogICAgdmFsdWUgPSBqc29uLmxvYWRzKHZhbHVlLmRlY29kZSgndXRmLTgnKSkKICAgIHJldHVybiBzZWxmLl9kZWNvZGVfd2l0aF9zY2hlbWEodmFsdWUsIHNlbGYuZmllbGRzKQoKICBkZWYgX2RlY29kZV93aXRoX3NjaGVtYShzZWxmLCB2YWx1ZSwgc2NoZW1hX2ZpZWxkcyk6CiAgICBmb3IgZmllbGQgaW4gc2NoZW1hX2ZpZWxkczoKICAgICAgaWYgZmllbGQubmFtZSBub3QgaW4gdmFsdWU6CiAgICAgICAgIyBUaGUgZmllbGQgZXhpc3RzIGluIHRoZSBzY2hlbWEsIGJ1dCBpdCBkb2Vzbid0IGV4aXN0IGluIHRoaXMgcm93LgogICAgICAgICMgSXQgcHJvYmFibHkgbWVhbnMgaXRzIHZhbHVlIHdhcyBudWxsLCBhcyB0aGUgZXh0cmFjdCB0byBKU09OIGpvYgogICAgICAgICMgZG9lc24ndCBwcmVzZXJ2ZSBudWxsIGZpZWxkcwogICAgICAgIHZhbHVlW2ZpZWxkLm5hbWVdID0gTm9uZQogICAgICAgIGNvbnRpbnVlCgogICAgICBpZiBmaWVsZC50eXBlID09ICdSRUNPUkQnOgogICAgICAgIHZhbHVlW2ZpZWxkLm5hbWVdID0gc2VsZi5fZGVjb2RlX3dpdGhfc2NoZW1hKAogICAgICAgICAgICB2YWx1ZVtmaWVsZC5uYW1lXSwgZmllbGQuZmllbGRzKQogICAgICBlbHNlOgogICAgICAgIHRyeToKICAgICAgICAgIGNvbnZlcnRlciA9IHNlbGYuX2NvbnZlcnRlcnNbZmllbGQudHlwZV0KICAgICAgICAgIHZhbHVlW2ZpZWxkLm5hbWVdID0gY29udmVydGVyKHZhbHVlW2ZpZWxkLm5hbWVdKQogICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICMgTm8gbmVlZCB0byBkbyBhbnkgY29udmVyc2lvbgogICAgICAgICAgcGFzcwogICAgcmV0dXJuIHZhbHVlCgogIGRlZiBpc19kZXRlcm1pbmlzdGljKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIHRvX3R5cGVfaGludChzZWxmKToKICAgIHJldHVybiBkaWN0CgoKY2xhc3MgX0N1c3RvbUJpZ1F1ZXJ5U291cmNlKEJvdW5kZWRTb3VyY2UpOgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZ2NzX2xvY2F0aW9uPU5vbmUsCiAgICAgIHRhYmxlPU5vbmUsCiAgICAgIGRhdGFzZXQ9Tm9uZSwKICAgICAgcHJvamVjdD1Ob25lLAogICAgICBxdWVyeT1Ob25lLAogICAgICB2YWxpZGF0ZT1GYWxzZSwKICAgICAgY29kZXI9Tm9uZSwKICAgICAgdXNlX3N0YW5kYXJkX3NxbD1GYWxzZSwKICAgICAgZmxhdHRlbl9yZXN1bHRzPVRydWUsCiAgICAgIGttc19rZXk9Tm9uZSk6CiAgICBpZiB0YWJsZSBpcyBub3QgTm9uZSBhbmQgcXVlcnkgaXMgbm90IE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnQm90aCBhIEJpZ1F1ZXJ5IHRhYmxlIGFuZCBhIHF1ZXJ5IHdlcmUgc3BlY2lmaWVkLicKICAgICAgICAgICcgUGxlYXNlIHNwZWNpZnkgb25seSBvbmUgb2YgdGhlc2UuJykKICAgIGVsaWYgdGFibGUgaXMgTm9uZSBhbmQgcXVlcnkgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQSBCaWdRdWVyeSB0YWJsZSBvciBhIHF1ZXJ5IG11c3QgYmUgc3BlY2lmaWVkJykKICAgIGVsaWYgdGFibGUgaXMgbm90IE5vbmU6CiAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlID0gYmlncXVlcnlfdG9vbHMucGFyc2VfdGFibGVfcmVmZXJlbmNlKAogICAgICAgICAgdGFibGUsIGRhdGFzZXQsIHByb2plY3QpCiAgICAgIHNlbGYucXVlcnkgPSBOb25lCiAgICAgIHNlbGYudXNlX2xlZ2FjeV9zcWwgPSBUcnVlCiAgICBlbHNlOgogICAgICBzZWxmLnF1ZXJ5ID0gcXVlcnkKICAgICAgIyBUT0RPKEJFQU0tMTA4Mik6IENoYW5nZSB0aGUgaW50ZXJuYWwgZmxhZyB0byBiZSBzdGFuZGFyZF9zcWwKICAgICAgc2VsZi51c2VfbGVnYWN5X3NxbCA9IG5vdCB1c2Vfc3RhbmRhcmRfc3FsCiAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlID0gTm9uZQoKICAgIHNlbGYuZ2NzX2xvY2F0aW9uID0gZ2NzX2xvY2F0aW9uCiAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CiAgICBzZWxmLnZhbGlkYXRlID0gdmFsaWRhdGUKICAgIHNlbGYuZmxhdHRlbl9yZXN1bHRzID0gZmxhdHRlbl9yZXN1bHRzCiAgICBzZWxmLmNvZGVyID0gY29kZXIgb3IgX0pzb25Ub0RpY3RDb2RlcgogICAgc2VsZi5rbXNfa2V5ID0ga21zX2tleQogICAgc2VsZi5zcGxpdF9yZXN1bHQgPSBOb25lCgogIGRlZiBlc3RpbWF0ZV9zaXplKHNlbGYpOgogICAgYnEgPSBiaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIoKQogICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UgaXMgbm90IE5vbmU6CiAgICAgIHRhYmxlID0gYnEuZ2V0X3RhYmxlKAogICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKICAgICAgcmV0dXJuIGludCh0YWJsZS5udW1CeXRlcykKICAgIGVsc2U6CiAgICAgIGpvYiA9IGJxLl9zdGFydF9xdWVyeV9qb2IoCiAgICAgICAgICBzZWxmLnByb2plY3QsCiAgICAgICAgICBzZWxmLnF1ZXJ5LAogICAgICAgICAgc2VsZi51c2VfbGVnYWN5X3NxbCwKICAgICAgICAgIHNlbGYuZmxhdHRlbl9yZXN1bHRzLAogICAgICAgICAgam9iX2lkPXV1aWQudXVpZDQoKS5oZXgsCiAgICAgICAgICBkcnlfcnVuPVRydWUsCiAgICAgICAgICBrbXNfa2V5PXNlbGYua21zX2tleSkKICAgICAgc2l6ZSA9IGludChqb2Iuc3RhdGlzdGljcy50b3RhbEJ5dGVzUHJvY2Vzc2VkKQogICAgICByZXR1cm4gc2l6ZQoKICBkZWYgc3BsaXQoc2VsZiwgZGVzaXJlZF9idW5kbGVfc2l6ZSwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lKToKICAgIGlmIHNlbGYuc3BsaXRfcmVzdWx0IGlzIE5vbmU6CiAgICAgIGJxID0gYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyKCkKCiAgICAgIGlmIHNlbGYucXVlcnkgaXMgbm90IE5vbmU6CiAgICAgICAgc2VsZi5fc2V0dXBfdGVtcG9yYXJ5X2RhdGFzZXQoYnEpCiAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UgPSBzZWxmLl9leGVjdXRlX3F1ZXJ5KGJxKQoKICAgICAgc2NoZW1hLCBtZXRhZGF0YV9saXN0ID0gc2VsZi5fZXhwb3J0X2ZpbGVzKGJxKQogICAgICBzZWxmLnNwbGl0X3Jlc3VsdCA9IFsKICAgICAgICAgIFRleHRTb3VyY2UoCiAgICAgICAgICAgICAgbWV0YWRhdGEucGF0aCwKICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgIENvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VELAogICAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgICAgc2VsZi5jb2RlcihzY2hlbWEpKSBmb3IgbWV0YWRhdGEgaW4gbWV0YWRhdGFfbGlzdAogICAgICBdCgogICAgICBpZiBzZWxmLnF1ZXJ5IGlzIG5vdCBOb25lOgogICAgICAgIGJxLmNsZWFuX3VwX3RlbXBvcmFyeV9kYXRhc2V0KHNlbGYucHJvamVjdCkKCiAgICBmb3Igc291cmNlIGluIHNlbGYuc3BsaXRfcmVzdWx0OgogICAgICB5aWVsZCBTb3VyY2VCdW5kbGUoMCwgc291cmNlLCBOb25lLCBOb25lKQoKICBkZWYgZ2V0X3JhbmdlX3RyYWNrZXIoc2VsZiwgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pOgogICAgY2xhc3MgQ3VzdG9tQmlnUXVlcnlTb3VyY2VSYW5nZVRyYWNrZXIoUmFuZ2VUcmFja2VyKToKICAgICAgIiIiQSBSYW5nZVRyYWNrZXIgdGhhdCBhbHdheXMgcmV0dXJucyBwb3NpdGlvbnMgYXMgTm9uZS4iIiIKICAgICAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgICAgIHJldHVybiBOb25lCgogICAgICBkZWYgc3RvcF9wb3NpdGlvbihzZWxmKToKICAgICAgICByZXR1cm4gTm9uZQoKICAgIHJldHVybiBDdXN0b21CaWdRdWVyeVNvdXJjZVJhbmdlVHJhY2tlcigpCgogIGRlZiByZWFkKHNlbGYsIHJhbmdlX3RyYWNrZXIpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignQmlnUXVlcnkgc291cmNlIG11c3QgYmUgc3BsaXQgYmVmb3JlIGJlaW5nIHJlYWQnKQoKICBkZWYgX3NldHVwX3RlbXBvcmFyeV9kYXRhc2V0KHNlbGYsIGJxKToKICAgIGxvY2F0aW9uID0gYnEuZ2V0X3F1ZXJ5X2xvY2F0aW9uKAogICAgICAgIHNlbGYucHJvamVjdCwgc2VsZi5xdWVyeSwgc2VsZi51c2VfbGVnYWN5X3NxbCkKICAgIGJxLmNyZWF0ZV90ZW1wb3JhcnlfZGF0YXNldChzZWxmLnByb2plY3QsIGxvY2F0aW9uKQoKICBkZWYgX2V4ZWN1dGVfcXVlcnkoc2VsZiwgYnEpOgogICAgam9iID0gYnEuX3N0YXJ0X3F1ZXJ5X2pvYigKICAgICAgICBzZWxmLnByb2plY3QsCiAgICAgICAgc2VsZi5xdWVyeSwKICAgICAgICBzZWxmLnVzZV9sZWdhY3lfc3FsLAogICAgICAgIHNlbGYuZmxhdHRlbl9yZXN1bHRzLAogICAgICAgIGpvYl9pZD11dWlkLnV1aWQ0KCkuaGV4LAogICAgICAgIGttc19rZXk9c2VsZi5rbXNfa2V5KQogICAgam9iX3JlZiA9IGpvYi5qb2JSZWZlcmVuY2UKICAgIGJxLndhaXRfZm9yX2JxX2pvYihqb2JfcmVmKQogICAgcmV0dXJuIGJxLl9nZXRfdGVtcF90YWJsZShzZWxmLnByb2plY3QpCgogIGRlZiBfZXhwb3J0X2ZpbGVzKHNlbGYsIGJxKToKICAgICIiIlJ1bnMgYSBCaWdRdWVyeSBleHBvcnQgam9iLgoKICAgIFJldHVybnM6CiAgICAgIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hIGluc3RhbmNlLCBhIGxpc3Qgb2YgRmlsZU1ldGFkYXRhIGluc3RhbmNlcwogICAgIiIiCiAgICBqb2JfaWQgPSB1dWlkLnV1aWQ0KCkuaGV4CiAgICBqb2JfcmVmID0gYnEucGVyZm9ybV9leHRyYWN0X2pvYihbc2VsZi5nY3NfbG9jYXRpb25dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWdxdWVyeV90b29scy5FeHBvcnRGaWxlRm9ybWF0LkpTT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2hlYWRlcj1GYWxzZSkKICAgIGJxLndhaXRfZm9yX2JxX2pvYihqb2JfcmVmKQogICAgbWV0YWRhdGFfbGlzdCA9IEZpbGVTeXN0ZW1zLm1hdGNoKFtzZWxmLmdjc19sb2NhdGlvbl0pWzBdLm1ldGFkYXRhX2xpc3QKCiAgICB0YWJsZSA9IGJxLmdldF90YWJsZSgKICAgICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQsCiAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQpCgogICAgcmV0dXJuIHRhYmxlLnNjaGVtYSwgbWV0YWRhdGFfbGlzdAoKCkBkZXByZWNhdGVkKHNpbmNlPScyLjExLjAnLCBjdXJyZW50PSJXcml0ZVRvQmlnUXVlcnkiKQpjbGFzcyBCaWdRdWVyeVNpbmsoZGF0YWZsb3dfaW8uTmF0aXZlU2luayk6CiAgIiIiQSBzaW5rIGJhc2VkIG9uIGEgQmlnUXVlcnkgdGFibGUuCgogIFRoaXMgQmlnUXVlcnkgc2luayB0cmlnZ2VycyBhIERhdGFmbG93IG5hdGl2ZSBzaW5rIGZvciBCaWdRdWVyeQogIHRoYXQgb25seSBzdXBwb3J0cyBiYXRjaCBwaXBlbGluZXMuCiAgSW5zdGVhZCBvZiB1c2luZyB0aGlzIHNpbmsgZGlyZWN0bHksIHBsZWFzZSB1c2UgV3JpdGVUb0JpZ1F1ZXJ5CiAgdHJhbnNmb3JtIHRoYXQgd29ya3MgZm9yIGJvdGggYmF0Y2ggYW5kIHN0cmVhbWluZyBwaXBlbGluZXMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICB0YWJsZSwKICAgICAgZGF0YXNldD1Ob25lLAogICAgICBwcm9qZWN0PU5vbmUsCiAgICAgIHNjaGVtYT1Ob25lLAogICAgICBjcmVhdGVfZGlzcG9zaXRpb249QmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfSUZfTkVFREVELAogICAgICB3cml0ZV9kaXNwb3NpdGlvbj1CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZLAogICAgICB2YWxpZGF0ZT1GYWxzZSwKICAgICAgY29kZXI9Tm9uZSwKICAgICAga21zX2tleT1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSBCaWdRdWVyeVNpbmsuCgogICAgQXJnczoKICAgICAgdGFibGUgKHN0cik6IFRoZSBJRCBvZiB0aGUgdGFibGUuIFRoZSBJRCBtdXN0IGNvbnRhaW4gb25seSBsZXR0ZXJzCiAgICAgICAgYGBhLXpgYCwgYGBBLVpgYCwgbnVtYmVycyBgYDAtOWBgLCBvciB1bmRlcnNjb3JlcyBgYF9gYC4gSWYKICAgICAgICAqKmRhdGFzZXQqKiBhcmd1bWVudCBpcyA6ZGF0YTpgTm9uZWAgdGhlbiB0aGUgdGFibGUgYXJndW1lbnQgbXVzdAogICAgICAgIGNvbnRhaW4gdGhlIGVudGlyZSB0YWJsZSByZWZlcmVuY2Ugc3BlY2lmaWVkIGFzOiBgYCdEQVRBU0VULlRBQkxFJ2BgIG9yCiAgICAgICAgYGAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJ2BgLgogICAgICBkYXRhc2V0IChzdHIpOiBUaGUgSUQgb2YgdGhlIGRhdGFzZXQgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgICAgOmRhdGE6YE5vbmVgIGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50LgogICAgICBwcm9qZWN0IChzdHIpOiBUaGUgSUQgb2YgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgICAgOmRhdGE6YE5vbmVgIGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZQogICAgICAgIGFyZ3VtZW50LgogICAgICBzY2hlbWEgKHN0cik6IFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzCiAgICAgICAgdG8gYmUgY3JlYXRlZC4gVGhpcyBjYW4gYmUgZWl0aGVyIHNwZWNpZmllZCBhcyBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmludGVybmFsLmNsaWVudHMuYmlncXVlcnkuXApiaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYWAgb2JqZWN0IG9yIGEgc2luZ2xlIHN0cmluZyAgb2YgdGhlIGZvcm0KICAgICAgICBgYCdmaWVsZDE6dHlwZTEsZmllbGQyOnR5cGUyLGZpZWxkMzp0eXBlMydgYCB0aGF0IGRlZmluZXMgYSBjb21tYQogICAgICAgIHNlcGFyYXRlZCBsaXN0IG9mIGZpZWxkcy4gSGVyZSBgYCd0eXBlJ2BgIHNob3VsZCBzcGVjaWZ5IHRoZSBCaWdRdWVyeQogICAgICAgIHR5cGUgb2YgdGhlIGZpZWxkLiBTaW5nbGUgc3RyaW5nIGJhc2VkIHNjaGVtYXMgZG8gbm90IHN1cHBvcnQgbmVzdGVkCiAgICAgICAgZmllbGRzLCByZXBlYXRlZCBmaWVsZHMsIG9yIHNwZWNpZnlpbmcgYSBCaWdRdWVyeSBtb2RlIGZvciBmaWVsZHMgKG1vZGUKICAgICAgICB3aWxsIGFsd2F5cyBiZSBzZXQgdG8gYGAnTlVMTEFCTEUnYGApLgogICAgICBjcmVhdGVfZGlzcG9zaXRpb24gKEJpZ1F1ZXJ5RGlzcG9zaXRpb24pOiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQKICAgICAgICBoYXBwZW5zIGlmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdC4gUG9zc2libGUgdmFsdWVzIGFyZToKCiAgICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLkNSRUFURV9JRl9ORUVERURgOiBjcmVhdGUgaWYgZG9lcyBub3QKICAgICAgICAgICAgZXhpc3QuCiAgICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLkNSRUFURV9ORVZFUmA6IGZhaWwgdGhlIHdyaXRlIGlmIGRvZXMgbm90CiAgICAgICAgICAgIGV4aXN0LgoKICAgICAgd3JpdGVfZGlzcG9zaXRpb24gKEJpZ1F1ZXJ5RGlzcG9zaXRpb24pOiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQKICAgICAgICBoYXBwZW5zIGlmIHRoZSB0YWJsZSBoYXMgYWxyZWFkeSBzb21lIGRhdGEuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CgogICAgICAgICAgKiA6YXR0cjpgQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9UUlVOQ0FURWA6IGRlbGV0ZSBleGlzdGluZyByb3dzLgogICAgICAgICAgKiA6YXR0cjpgQmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9BUFBFTkRgOiBhZGQgdG8gZXhpc3Rpbmcgcm93cy4KICAgICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFlgOiBmYWlsIHRoZSB3cml0ZSBpZiB0YWJsZSBub3QKICAgICAgICAgICAgZW1wdHkuCgogICAgICB2YWxpZGF0ZSAoYm9vbCk6IElmIDpkYXRhOmBUcnVlYCwgdmFyaW91cyBjaGVja3Mgd2lsbCBiZSBkb25lIHdoZW4gc2luawogICAgICAgIGdldHMgaW5pdGlhbGl6ZWQgKGUuZy4sIGlzIHRhYmxlIHByZXNlbnQgZ2l2ZW4gdGhlIGRpc3Bvc2l0aW9uCiAgICAgICAgYXJndW1lbnRzPykuIFRoaXMgc2hvdWxkIGJlIDpkYXRhOmBUcnVlYCBmb3IgbW9zdCBzY2VuYXJpb3MgaW4gb3JkZXIgdG8KICAgICAgICBjYXRjaCBlcnJvcnMgYXMgZWFybHkgYXMgcG9zc2libGUgKHBpcGVsaW5lIGNvbnN0cnVjdGlvbiBpbnN0ZWFkIG9mCiAgICAgICAgcGlwZWxpbmUgZXhlY3V0aW9uKS4gSXQgc2hvdWxkIGJlIDpkYXRhOmBGYWxzZWAgaWYgdGhlIHRhYmxlIGlzIGNyZWF0ZWQKICAgICAgICBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uIGJ5IGEgcHJldmlvdXMgc3RlcC4KICAgICAgY29kZXIgKH5hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyKTogVGhlIGNvZGVyIGZvciB0aGUKICAgICAgICB0YWJsZSByb3dzIGlmIHNlcmlhbGl6ZWQgdG8gZGlzay4gSWYgOmRhdGE6YE5vbmVgLCB0aGVuIHRoZSBkZWZhdWx0CiAgICAgICAgY29kZXIgaXMgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5X3Rvb2xzLlJvd0FzRGljdEpzb25Db2RlcmAsCiAgICAgICAgd2hpY2ggd2lsbCBpbnRlcnByZXQgZXZlcnkgZWxlbWVudCB3cml0dGVuIHRvIHRoZSBzaW5rIGFzIGEgZGljdGlvbmFyeQogICAgICAgIHRoYXQgd2lsbCBiZSBKU09OIHNlcmlhbGl6ZWQgYXMgYSBsaW5lIGluIGEgZmlsZS4gVGhpcyBhcmd1bWVudCBuZWVkcyBhCiAgICAgICAgdmFsdWUgb25seSBpbiBzcGVjaWFsIGNhc2VzIHdoZW4gd3JpdGluZyB0YWJsZSByb3dzIGFzIGRpY3Rpb25hcmllcyBpcwogICAgICAgIG5vdCBkZXNpcmFibGUuCiAgICAgIGttc19rZXkgKHN0cik6IEV4cGVyaW1lbnRhbC4gT3B0aW9uYWwgQ2xvdWQgS01TIGtleSBuYW1lIGZvciB1c2Ugd2hlbgogICAgICAgIGNyZWF0aW5nIG5ldyB0YWJsZXMuCgogICAgUmFpc2VzOgogICAgICBUeXBlRXJyb3I6IGlmIHRoZSBzY2hlbWEgYXJndW1lbnQgaXMgbm90IGEgOmNsYXNzOmBzdHJgIG9yIGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cy5iaWdxdWVyeS5cCmJpZ3F1ZXJ5X3YyX21lc3NhZ2VzLlRhYmxlU2NoZW1hYCBvYmplY3QuCiAgICAgIFZhbHVlRXJyb3I6IGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgYXMgYSBzdHJpbmcgZG9lcyBub3QKICAgICAgICBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgIiIiCiAgICAjIEltcG9ydCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0aGUgZGVwZW5kZW5jeSBmb3IgbG9jYWwgcnVubmluZyBzY2VuYXJpb3MuCiAgICB0cnk6CiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICAgIGZyb20gYXBpdG9vbHMuYmFzZSBpbXBvcnQgcHkgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICAgICAnR29vZ2xlIENsb3VkIElPIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAgICdwbGVhc2UgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdJykKCiAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZSA9IGJpZ3F1ZXJ5X3Rvb2xzLnBhcnNlX3RhYmxlX3JlZmVyZW5jZSgKICAgICAgICB0YWJsZSwgZGF0YXNldCwgcHJvamVjdCkKICAgICMgVHJhbnNmb3JtIHRoZSB0YWJsZSBzY2hlbWEgaW50byBhIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hIGluc3RhbmNlLgogICAgaWYgaXNpbnN0YW5jZShzY2hlbWEsIChzdHIsIHVuaWNvZGUpKToKICAgICAgIyBUT0RPKHNpbHZpdWMpOiBTaG91bGQgYWRkIGEgcmVnZXgtYmFzZWQgdmFsaWRhdGlvbiBvZiB0aGUgZm9ybWF0LgogICAgICB0YWJsZV9zY2hlbWEgPSBiaWdxdWVyeS5UYWJsZVNjaGVtYSgpCiAgICAgIHNjaGVtYV9saXN0ID0gW3Muc3RyaXAoJyAnKSBmb3IgcyBpbiBzY2hlbWEuc3BsaXQoJywnKV0KICAgICAgZm9yIGZpZWxkX2FuZF90eXBlIGluIHNjaGVtYV9saXN0OgogICAgICAgIGZpZWxkX25hbWUsIGZpZWxkX3R5cGUgPSBmaWVsZF9hbmRfdHlwZS5zcGxpdCgnOicpCiAgICAgICAgZmllbGRfc2NoZW1hID0gYmlncXVlcnkuVGFibGVGaWVsZFNjaGVtYSgpCiAgICAgICAgZmllbGRfc2NoZW1hLm5hbWUgPSBmaWVsZF9uYW1lCiAgICAgICAgZmllbGRfc2NoZW1hLnR5cGUgPSBmaWVsZF90eXBlCiAgICAgICAgZmllbGRfc2NoZW1hLm1vZGUgPSAnTlVMTEFCTEUnCiAgICAgICAgdGFibGVfc2NoZW1hLmZpZWxkcy5hcHBlbmQoZmllbGRfc2NoZW1hKQogICAgICBzZWxmLnRhYmxlX3NjaGVtYSA9IHRhYmxlX3NjaGVtYQogICAgZWxpZiBzY2hlbWEgaXMgTm9uZToKICAgICAgIyBUT0RPKHNpbHZpdWMpOiBTaG91bGQgY2hlY2sgdGhhdCB0YWJsZSBleGlzdHMgaWYgbm8gc2NoZW1hIHNwZWNpZmllZC4KICAgICAgc2VsZi50YWJsZV9zY2hlbWEgPSBzY2hlbWEKICAgIGVsaWYgaXNpbnN0YW5jZShzY2hlbWEsIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKToKICAgICAgc2VsZi50YWJsZV9zY2hlbWEgPSBzY2hlbWEKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignVW5leHBlY3RlZCBzY2hlbWEgYXJndW1lbnQ6ICVzLicgJSBzY2hlbWEpCgogICAgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24gPSBCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX2NyZWF0ZSgKICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb24pCiAgICBzZWxmLndyaXRlX2Rpc3Bvc2l0aW9uID0gQmlnUXVlcnlEaXNwb3NpdGlvbi52YWxpZGF0ZV93cml0ZSgKICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbikKICAgIHNlbGYudmFsaWRhdGUgPSB2YWxpZGF0ZQogICAgc2VsZi5jb2RlciA9IGNvZGVyIG9yIGJpZ3F1ZXJ5X3Rvb2xzLlJvd0FzRGljdEpzb25Db2RlcigpCiAgICBzZWxmLmttc19rZXkgPSBrbXNfa2V5CgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXMgPSB7fQogICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UgaXMgbm90IE5vbmU6CiAgICAgIHRhYmxlU3BlYyA9ICd7fS57fScuZm9ybWF0KAogICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLCBzZWxmLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgICBpZiBzZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgaXMgbm90IE5vbmU6CiAgICAgICAgdGFibGVTcGVjID0gJ3t9Ont9Jy5mb3JtYXQoc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLCB0YWJsZVNwZWMpCiAgICAgIHJlc1sndGFibGUnXSA9IERpc3BsYXlEYXRhSXRlbSh0YWJsZVNwZWMsIGxhYmVsPSdUYWJsZScpCgogICAgcmVzWyd2YWxpZGF0aW9uJ10gPSBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgc2VsZi52YWxpZGF0ZSwgbGFiZWw9IlZhbGlkYXRpb24gRW5hYmxlZCIpCiAgICByZXR1cm4gcmVzCgogIGRlZiBzY2hlbWFfYXNfanNvbihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIFRhYmxlU2NoZW1hIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2luayBhcyBhIEpTT04gc3RyaW5nLiIiIgogICAgZGVmIHNjaGVtYV9saXN0X2FzX29iamVjdChzY2hlbWFfbGlzdCk6CiAgICAgICIiIlJldHVybnMgYSBsaXN0IG9mIFRhYmxlRmllbGRTY2hlbWEgb2JqZWN0cyBhcyBhIGxpc3Qgb2YgZGljdHMuIiIiCiAgICAgIGZpZWxkcyA9IFtdCiAgICAgIGZvciBmIGluIHNjaGVtYV9saXN0OgogICAgICAgIGZzID0geyduYW1lJzogZi5uYW1lLCAndHlwZSc6IGYudHlwZX0KICAgICAgICBpZiBmLmRlc2NyaXB0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgZnNbJ2Rlc2NyaXB0aW9uJ10gPSBmLmRlc2NyaXB0aW9uCiAgICAgICAgaWYgZi5tb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgZnNbJ21vZGUnXSA9IGYubW9kZQogICAgICAgIGlmIGYudHlwZS5sb3dlcigpID09ICdyZWNvcmQnOgogICAgICAgICAgZnNbJ2ZpZWxkcyddID0gc2NoZW1hX2xpc3RfYXNfb2JqZWN0KGYuZmllbGRzKQogICAgICAgIGZpZWxkcy5hcHBlbmQoZnMpCiAgICAgIHJldHVybiBmaWVsZHMKCiAgICByZXR1cm4ganNvbi5kdW1wcygKICAgICAgICB7J2ZpZWxkcyc6IHNjaGVtYV9saXN0X2FzX29iamVjdChzZWxmLnRhYmxlX3NjaGVtYS5maWVsZHMpfSkKCiAgQHByb3BlcnR5CiAgZGVmIGZvcm1hdChzZWxmKToKICAgICIiIlNpbmsgZm9ybWF0IG5hbWUgcmVxdWlyZWQgZm9yIHJlbW90ZSBleGVjdXRpb24uIiIiCiAgICByZXR1cm4gJ2JpZ3F1ZXJ5JwoKICBkZWYgd3JpdGVyKHNlbGYsIHRlc3RfYmlncXVlcnlfY2xpZW50PU5vbmUsIGJ1ZmZlcl9zaXplPU5vbmUpOgogICAgcmV0dXJuIGJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JpdGVyKAogICAgICAgIHNpbms9c2VsZiwKICAgICAgICB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudD10ZXN0X2JpZ3F1ZXJ5X2NsaWVudCwKICAgICAgICBidWZmZXJfc2l6ZT1idWZmZXJfc2l6ZSkKCgpjbGFzcyBCaWdRdWVyeVdyaXRlRm4oRG9Gbik6CiAgIiIiQSBgYERvRm5gYCB0aGF0IHN0cmVhbXMgd3JpdGVzIHRvIEJpZ1F1ZXJ5IG9uY2UgdGhlIHRhYmxlIGlzIGNyZWF0ZWQuIiIiCgogIERFRkFVTFRfTUFYX0JVRkZFUkVEX1JPV1MgPSAyMDAwCiAgREVGQVVMVF9NQVhfQkFUQ0hfU0laRSA9IDUwMAoKICBGQUlMRURfUk9XUyA9ICdGYWlsZWRSb3dzJwoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGJhdGNoX3NpemUsCiAgICAgIHNjaGVtYT1Ob25lLAogICAgICBjcmVhdGVfZGlzcG9zaXRpb249Tm9uZSwKICAgICAgd3JpdGVfZGlzcG9zaXRpb249Tm9uZSwKICAgICAga21zX2tleT1Ob25lLAogICAgICB0ZXN0X2NsaWVudD1Ob25lLAogICAgICBtYXhfYnVmZmVyZWRfcm93cz1Ob25lLAogICAgICByZXRyeV9zdHJhdGVneT1Ob25lLAogICAgICBhZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnM9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIGEgV3JpdGVUb0JpZ1F1ZXJ5IHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBiYXRjaF9zaXplOiBOdW1iZXIgb2Ygcm93cyB0byBiZSB3cml0dGVuIHRvIEJRIHBlciBzdHJlYW1pbmcgQVBJIGluc2VydC4KICAgICAgc2NoZW1hOiBUaGUgc2NoZW1hIHRvIGJlIHVzZWQgaWYgdGhlIEJpZ1F1ZXJ5IHRhYmxlIHRvIHdyaXRlIGhhcyB0byBiZQogICAgICAgIGNyZWF0ZWQuIFRoaXMgY2FuIGJlIGVpdGhlciBzcGVjaWZpZWQgYXMgYSAnYmlncXVlcnkuVGFibGVTY2hlbWEnIG9iamVjdAogICAgICAgIG9yIGEgc2luZ2xlIHN0cmluZyAgb2YgdGhlIGZvcm0gJ2ZpZWxkMTp0eXBlMSxmaWVsZDI6dHlwZTIsZmllbGQzOnR5cGUzJwogICAgICAgIHRoYXQgZGVmaW5lcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZpZWxkcy4gSGVyZSAndHlwZScgc2hvdWxkCiAgICAgICAgc3BlY2lmeSB0aGUgQmlnUXVlcnkgdHlwZSBvZiB0aGUgZmllbGQuIFNpbmdsZSBzdHJpbmcgYmFzZWQgc2NoZW1hcyBkbwogICAgICAgIG5vdCBzdXBwb3J0IG5lc3RlZCBmaWVsZHMsIHJlcGVhdGVkIGZpZWxkcywgb3Igc3BlY2lmeWluZyBhIEJpZ1F1ZXJ5CiAgICAgICAgbW9kZSBmb3IgZmllbGRzIChtb2RlIHdpbGwgYWx3YXlzIGJlIHNldCB0byAnTlVMTEFCTEUnKS4KICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uOiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgaGFwcGVucyBpZiB0aGUgdGFibGUgZG9lcyBub3QKICAgICAgICBleGlzdC4gUG9zc2libGUgdmFsdWVzIGFyZToKICAgICAgICAtIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRDogY3JlYXRlIGlmIGRvZXMgbm90IGV4aXN0LgogICAgICAgIC0gQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfTkVWRVI6IGZhaWwgdGhlIHdyaXRlIGlmIGRvZXMgbm90IGV4aXN0LgogICAgICB3cml0ZV9kaXNwb3NpdGlvbjogQSBzdHJpbmcgZGVzY3JpYmluZyB3aGF0IGhhcHBlbnMgaWYgdGhlIHRhYmxlIGhhcwogICAgICAgIGFscmVhZHkgc29tZSBkYXRhLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogICAgICAgIC0gIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEU6IGRlbGV0ZSBleGlzdGluZyByb3dzLgogICAgICAgIC0gIEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfQVBQRU5EOiBhZGQgdG8gZXhpc3Rpbmcgcm93cy4KICAgICAgICAtICBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZOiBmYWlsIHRoZSB3cml0ZSBpZiB0YWJsZSBub3QgZW1wdHkuCiAgICAgICAgRm9yIHN0cmVhbWluZyBwaXBlbGluZXMgV3JpdGVUcnVuY2F0ZSBjYW4gbm90IGJlIHVzZWQuCiAgICAgIGttc19rZXk6IEV4cGVyaW1lbnRhbC4gT3B0aW9uYWwgQ2xvdWQgS01TIGtleSBuYW1lIGZvciB1c2Ugd2hlbiBjcmVhdGluZwogICAgICAgIG5ldyB0YWJsZXMuCiAgICAgIHRlc3RfY2xpZW50OiBPdmVycmlkZSB0aGUgZGVmYXVsdCBiaWdxdWVyeSBjbGllbnQgdXNlZCBmb3IgdGVzdGluZy4KCiAgICAgIG1heF9idWZmZXJlZF9yb3dzOiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0aGF0IGFyZSBhbGxvd2VkIHRvIHN0YXkKICAgICAgICBidWZmZXJlZCB3aGVuIHJ1bm5pbmcgZHluYW1pYyBkZXN0aW5hdGlvbnMuIFdoZW4gZGVzdGluYXRpb25zIGFyZQogICAgICAgIGR5bmFtaWMsIGl0IGlzIGltcG9ydGFudCB0byBrZWVwIGNhY2hlcyBzbWFsbCBldmVuIHdoZW4gYSBzaW5nbGUKICAgICAgICBiYXRjaCBoYXMgbm90IGJlZW4gY29tcGxldGVseSBmaWxsZWQgdXAuCiAgICAgIHJldHJ5X3N0cmF0ZWd5OiBUaGUgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcmV0cnlpbmcgc3RyZWFtaW5nIGluc2VydHMKICAgICAgICBpbnRvIEJpZ1F1ZXJ5LiBPcHRpb25zIGFyZSBzaG93biBpbiBiaWdxdWVyeV90b29scy5SZXRyeVN0cmF0ZWd5IGF0dHJzLgogICAgICBhZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnMgKGRpY3QsIGNhbGxhYmxlKTogQSBzZXQgb2YgYWRkaXRpb25hbCBwYXJhbWV0ZXJzCiAgICAgICAgdG8gYmUgcGFzc2VkIHdoZW4gY3JlYXRpbmcgYSBCaWdRdWVyeSB0YWJsZS4gVGhlc2UgYXJlIHBhc3NlZCB3aGVuCiAgICAgICAgdHJpZ2dlcmluZyBhIGxvYWQgam9iIGZvciBGSUxFX0xPQURTLCBhbmQgd2hlbiBjcmVhdGluZyBhIG5ldyB0YWJsZSBmb3IKICAgICAgICBTVFJFQU1JTkdfSU5TRVJUUy4KICAgICIiIgogICAgc2VsZi5zY2hlbWEgPSBzY2hlbWEKICAgIHNlbGYudGVzdF9jbGllbnQgPSB0ZXN0X2NsaWVudAogICAgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24gPSBjcmVhdGVfZGlzcG9zaXRpb24KICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24gPSB3cml0ZV9kaXNwb3NpdGlvbgogICAgc2VsZi5fcm93c19idWZmZXIgPSBbXQogICAgc2VsZi5fcmVzZXRfcm93c19idWZmZXIoKQogICAgc2VsZi5fb2JzZXJ2ZWRfdGFibGVzID0gc2V0KCkKCiAgICBzZWxmLl90b3RhbF9idWZmZXJlZF9yb3dzID0gMAogICAgc2VsZi5rbXNfa2V5ID0ga21zX2tleQogICAgc2VsZi5fbWF4X2JhdGNoX3NpemUgPSBiYXRjaF9zaXplIG9yIEJpZ1F1ZXJ5V3JpdGVGbi5ERUZBVUxUX01BWF9CQVRDSF9TSVpFCiAgICBzZWxmLl9tYXhfYnVmZmVyZWRfcm93cyA9ICgKICAgICAgICBtYXhfYnVmZmVyZWRfcm93cyBvciBCaWdRdWVyeVdyaXRlRm4uREVGQVVMVF9NQVhfQlVGRkVSRURfUk9XUykKICAgIHNlbGYuX3JldHJ5X3N0cmF0ZWd5ID0gKAogICAgICAgIHJldHJ5X3N0cmF0ZWd5IG9yIGJpZ3F1ZXJ5X3Rvb2xzLlJldHJ5U3RyYXRlZ3kuUkVUUllfQUxXQVlTKQoKICAgIHNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzID0gYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzIG9yIHt9CgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdtYXhfYmF0Y2hfc2l6ZSc6IHNlbGYuX21heF9iYXRjaF9zaXplLAogICAgICAgICdtYXhfYnVmZmVyZWRfcm93cyc6IHNlbGYuX21heF9idWZmZXJlZF9yb3dzLAogICAgICAgICdyZXRyeV9zdHJhdGVneSc6IHNlbGYuX3JldHJ5X3N0cmF0ZWd5LAogICAgICAgICdjcmVhdGVfZGlzcG9zaXRpb24nOiBzdHIoc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24pLAogICAgICAgICd3cml0ZV9kaXNwb3NpdGlvbic6IHN0cihzZWxmLndyaXRlX2Rpc3Bvc2l0aW9uKSwKICAgICAgICAnYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzJzogc3RyKHNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzKQogICAgfQoKICBkZWYgX3Jlc2V0X3Jvd3NfYnVmZmVyKHNlbGYpOgogICAgc2VsZi5fcm93c19idWZmZXIgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsYW1iZGE6IFtdKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdldF90YWJsZV9zY2hlbWEoc2NoZW1hKToKICAgICIiIlRyYW5zZm9ybSB0aGUgdGFibGUgc2NoZW1hIGludG8gYSBiaWdxdWVyeS5UYWJsZVNjaGVtYSBpbnN0YW5jZS4KCiAgICBBcmdzOgogICAgICBzY2hlbWE6IFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzIHRvIGJlCiAgICAgICAgY3JlYXRlZC4gVGhpcyBpcyBhIGRpY3Rpb25hcnkgb2JqZWN0IGNyZWF0ZWQgaW4gdGhlIFdyaXRlVG9CaWdRdWVyeQogICAgICAgIHRyYW5zZm9ybS4KICAgIFJldHVybnM6CiAgICAgIHRhYmxlX3NjaGVtYTogVGhlIHNjaGVtYSB0byBiZSB1c2VkIGlmIHRoZSBCaWdRdWVyeSB0YWJsZSB0byB3cml0ZSBoYXMKICAgICAgICAgdG8gYmUgY3JlYXRlZCBidXQgaW4gdGhlIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hIGZvcm1hdC4KICAgICIiIgogICAgaWYgc2NoZW1hIGlzIE5vbmU6CiAgICAgIHJldHVybiBzY2hlbWEKICAgIGVsaWYgaXNpbnN0YW5jZShzY2hlbWEsIChzdHIsIHVuaWNvZGUpKToKICAgICAgcmV0dXJuIGJpZ3F1ZXJ5X3Rvb2xzLnBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb24oc2NoZW1hKQogICAgZWxpZiBpc2luc3RhbmNlKHNjaGVtYSwgZGljdCk6CiAgICAgIHJldHVybiBiaWdxdWVyeV90b29scy5wYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29uKGpzb24uZHVtcHMoc2NoZW1hKSkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignVW5leHBlY3RlZCBzY2hlbWEgYXJndW1lbnQ6ICVzLicgJSBzY2hlbWEpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLl9yZXNldF9yb3dzX2J1ZmZlcigpCgogICAgc2VsZi5iaWdxdWVyeV93cmFwcGVyID0gYmlncXVlcnlfdG9vbHMuQmlnUXVlcnlXcmFwcGVyKAogICAgICAgIGNsaWVudD1zZWxmLnRlc3RfY2xpZW50KQoKICAgIHNlbGYuX29ic2VydmVkX3RhYmxlcyA9IHNldCgpCgogICAgc2VsZi5fYmFja29mZl9jYWxjdWxhdG9yID0gaXRlcigKICAgICAgICByZXRyeS5GdXp6ZWRFeHBvbmVudGlhbEludGVydmFscygKICAgICAgICAgICAgaW5pdGlhbF9kZWxheV9zZWNzPTAuMiwgbnVtX3JldHJpZXM9MTAwMDAsIG1heF9kZWxheV9zZWNzPTE1MDApKQoKICBkZWYgX2NyZWF0ZV90YWJsZV9pZl9uZWVkZWQoc2VsZiwgdGFibGVfcmVmZXJlbmNlLCBzY2hlbWE9Tm9uZSk6CiAgICBzdHJfdGFibGVfcmVmZXJlbmNlID0gJyVzOiVzLiVzJyAlICgKICAgICAgICB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgIHRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQsCiAgICAgICAgdGFibGVfcmVmZXJlbmNlLnRhYmxlSWQpCiAgICBpZiBzdHJfdGFibGVfcmVmZXJlbmNlIGluIHNlbGYuX29ic2VydmVkX3RhYmxlczoKICAgICAgcmV0dXJuCgogICAgaWYgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24gPT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfTkVWRVI6CiAgICAgICMgSWYgd2UgbmV2ZXIgd2FudCB0byBjcmVhdGUgdGhlIHRhYmxlLCB3ZSBhc3N1bWUgaXQgYWxyZWFkeSBleGlzdHMsCiAgICAgICMgYW5kIGF2b2lkIHRoZSBnZXQtb3ItY3JlYXRlIHN0ZXAuCiAgICAgIHJldHVybgoKICAgIF9MT0dHRVIuZGVidWcoCiAgICAgICAgJ0NyZWF0aW5nIG9yIGdldHRpbmcgdGFibGUgJXMgd2l0aCBzY2hlbWEgJXMuJywgdGFibGVfcmVmZXJlbmNlLCBzY2hlbWEpCgogICAgdGFibGVfc2NoZW1hID0gc2VsZi5nZXRfdGFibGVfc2NoZW1hKHNjaGVtYSkKCiAgICBpZiB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIE5vbmU6CiAgICAgIHRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgPSB2cC5SdW50aW1lVmFsdWVQcm92aWRlci5nZXRfdmFsdWUoCiAgICAgICAgICAncHJvamVjdCcsIHN0ciwgJycpCiAgICBzZWxmLmJpZ3F1ZXJ5X3dyYXBwZXIuZ2V0X29yX2NyZWF0ZV90YWJsZSgKICAgICAgICB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgIHRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQsCiAgICAgICAgdGFibGVfcmVmZXJlbmNlLnRhYmxlSWQsCiAgICAgICAgdGFibGVfc2NoZW1hLAogICAgICAgIHNlbGYuY3JlYXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24sCiAgICAgICAgYWRkaXRpb25hbF9jcmVhdGVfcGFyYW1ldGVycz1zZWxmLmFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycykKICAgIHNlbGYuX29ic2VydmVkX3RhYmxlcy5hZGQoc3RyX3RhYmxlX3JlZmVyZW5jZSkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgKnNjaGVtYV9zaWRlX2lucHV0cyk6CiAgICBkZXN0aW5hdGlvbiA9IGVsZW1lbnRbMF0KCiAgICBpZiBjYWxsYWJsZShzZWxmLnNjaGVtYSk6CiAgICAgIHNjaGVtYSA9IHNlbGYuc2NoZW1hKGRlc3RpbmF0aW9uLCAqc2NoZW1hX3NpZGVfaW5wdXRzKQogICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuc2NoZW1hLCB2cC5WYWx1ZVByb3ZpZGVyKToKICAgICAgc2NoZW1hID0gc2VsZi5zY2hlbWEuZ2V0KCkKICAgIGVsc2U6CiAgICAgIHNjaGVtYSA9IHNlbGYuc2NoZW1hCgogICAgc2VsZi5fY3JlYXRlX3RhYmxlX2lmX25lZWRlZCgKICAgICAgICBiaWdxdWVyeV90b29scy5wYXJzZV90YWJsZV9yZWZlcmVuY2UoZGVzdGluYXRpb24pLCBzY2hlbWEpCgogICAgZGVzdGluYXRpb24gPSBiaWdxdWVyeV90b29scy5nZXRfaGFzaGFibGVfZGVzdGluYXRpb24oZGVzdGluYXRpb24pCgogICAgcm93X2FuZF9pbnNlcnRfaWQgPSBlbGVtZW50WzFdCiAgICBzZWxmLl9yb3dzX2J1ZmZlcltkZXN0aW5hdGlvbl0uYXBwZW5kKHJvd19hbmRfaW5zZXJ0X2lkKQogICAgc2VsZi5fdG90YWxfYnVmZmVyZWRfcm93cyArPSAxCiAgICBpZiBsZW4oc2VsZi5fcm93c19idWZmZXJbZGVzdGluYXRpb25dKSA+PSBzZWxmLl9tYXhfYmF0Y2hfc2l6ZToKICAgICAgcmV0dXJuIHNlbGYuX2ZsdXNoX2JhdGNoKGRlc3RpbmF0aW9uKQogICAgZWxpZiBzZWxmLl90b3RhbF9idWZmZXJlZF9yb3dzID49IHNlbGYuX21heF9idWZmZXJlZF9yb3dzOgogICAgICByZXR1cm4gc2VsZi5fZmx1c2hfYWxsX2JhdGNoZXMoKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9mbHVzaF9hbGxfYmF0Y2hlcygpCgogIGRlZiBfZmx1c2hfYWxsX2JhdGNoZXMoc2VsZik6CiAgICBfTE9HR0VSLmRlYnVnKAogICAgICAgICdBdHRlbXB0aW5nIHRvIGZsdXNoIHRvIGFsbCBkZXN0aW5hdGlvbnMuIFRvdGFsIGJ1ZmZlcmVkOiAlcycsCiAgICAgICAgc2VsZi5fdG90YWxfYnVmZmVyZWRfcm93cykKCiAgICByZXR1cm4gaXRlcnRvb2xzLmNoYWluKAogICAgICAgICpbCiAgICAgICAgICAgIHNlbGYuX2ZsdXNoX2JhdGNoKGRlc3RpbmF0aW9uKQogICAgICAgICAgICBmb3IgZGVzdGluYXRpb24gaW4gbGlzdChzZWxmLl9yb3dzX2J1ZmZlci5rZXlzKCkpCiAgICAgICAgICAgIGlmIHNlbGYuX3Jvd3NfYnVmZmVyW2Rlc3RpbmF0aW9uXQogICAgICAgIF0pCgogIGRlZiBfZmx1c2hfYmF0Y2goc2VsZiwgZGVzdGluYXRpb24pOgoKICAgICMgRmx1c2ggdGhlIGN1cnJlbnQgYmF0Y2ggb2Ygcm93cyB0byBCaWdRdWVyeS4KICAgIHJvd3NfYW5kX2luc2VydF9pZHMgPSBzZWxmLl9yb3dzX2J1ZmZlcltkZXN0aW5hdGlvbl0KICAgIHRhYmxlX3JlZmVyZW5jZSA9IGJpZ3F1ZXJ5X3Rvb2xzLnBhcnNlX3RhYmxlX3JlZmVyZW5jZShkZXN0aW5hdGlvbikKCiAgICBpZiB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIE5vbmU6CiAgICAgIHRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgPSB2cC5SdW50aW1lVmFsdWVQcm92aWRlci5nZXRfdmFsdWUoCiAgICAgICAgICAncHJvamVjdCcsIHN0ciwgJycpCgogICAgX0xPR0dFUi5kZWJ1ZygKICAgICAgICAnRmx1c2hpbmcgZGF0YSB0byAlcy4gVG90YWwgJXMgcm93cy4nLAogICAgICAgIGRlc3RpbmF0aW9uLAogICAgICAgIGxlbihyb3dzX2FuZF9pbnNlcnRfaWRzKSkKCiAgICByb3dzID0gW3JbMF0gZm9yIHIgaW4gcm93c19hbmRfaW5zZXJ0X2lkc10KICAgIGluc2VydF9pZHMgPSBbclsxXSBmb3IgciBpbiByb3dzX2FuZF9pbnNlcnRfaWRzXQoKICAgIHdoaWxlIFRydWU6CiAgICAgIHBhc3NlZCwgZXJyb3JzID0gc2VsZi5iaWdxdWVyeV93cmFwcGVyLmluc2VydF9yb3dzKAogICAgICAgICAgcHJvamVjdF9pZD10YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgZGF0YXNldF9pZD10YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgdGFibGVfaWQ9dGFibGVfcmVmZXJlbmNlLnRhYmxlSWQsCiAgICAgICAgICByb3dzPXJvd3MsCiAgICAgICAgICBpbnNlcnRfaWRzPWluc2VydF9pZHMsCiAgICAgICAgICBza2lwX2ludmFsaWRfcm93cz1UcnVlKQoKICAgICAgaWYgbm90IHBhc3NlZDoKICAgICAgICBfTE9HR0VSLmluZm8oIlRoZXJlIHdlcmUgZXJyb3JzIGluc2VydGluZyB0byBCaWdRdWVyeTogJXMiLCBlcnJvcnMpCiAgICAgIGZhaWxlZF9yb3dzID0gW3Jvd3NbZW50cnkuaW5kZXhdIGZvciBlbnRyeSBpbiBlcnJvcnNdCiAgICAgIHNob3VsZF9yZXRyeSA9IGFueSgKICAgICAgICAgIGJpZ3F1ZXJ5X3Rvb2xzLlJldHJ5U3RyYXRlZ3kuc2hvdWxkX3JldHJ5KAogICAgICAgICAgICAgIHNlbGYuX3JldHJ5X3N0cmF0ZWd5LCBlbnRyeS5lcnJvcnNbMF0ucmVhc29uKSBmb3IgZW50cnkgaW4gZXJyb3JzKQogICAgICByb3dzID0gZmFpbGVkX3Jvd3MKCiAgICAgIGlmIG5vdCBzaG91bGRfcmV0cnk6CiAgICAgICAgYnJlYWsKICAgICAgZWxzZToKICAgICAgICByZXRyeV9iYWNrb2ZmID0gbmV4dChzZWxmLl9iYWNrb2ZmX2NhbGN1bGF0b3IpCiAgICAgICAgX0xPR0dFUi5pbmZvKAogICAgICAgICAgICAnU2xlZXBpbmcgJXMgc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmcgaW5zZXJ0aW9uLicsIHJldHJ5X2JhY2tvZmYpCiAgICAgICAgdGltZS5zbGVlcChyZXRyeV9iYWNrb2ZmKQoKICAgIHNlbGYuX3RvdGFsX2J1ZmZlcmVkX3Jvd3MgLT0gbGVuKHNlbGYuX3Jvd3NfYnVmZmVyW2Rlc3RpbmF0aW9uXSkKICAgIGRlbCBzZWxmLl9yb3dzX2J1ZmZlcltkZXN0aW5hdGlvbl0KCiAgICByZXR1cm4gWwogICAgICAgIHB2YWx1ZS5UYWdnZWRPdXRwdXQoCiAgICAgICAgICAgIEJpZ1F1ZXJ5V3JpdGVGbi5GQUlMRURfUk9XUywKICAgICAgICAgICAgR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZSgoZGVzdGluYXRpb24sIHJvdykpKQogICAgICAgIGZvciByb3cgaW4gZmFpbGVkX3Jvd3MKICAgIF0KCgpjbGFzcyBfU3RyZWFtVG9CaWdRdWVyeShQVHJhbnNmb3JtKToKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIHRhYmxlX3JlZmVyZW5jZSwKICAgICAgdGFibGVfc2lkZV9pbnB1dHMsCiAgICAgIHNjaGVtYV9zaWRlX2lucHV0cywKICAgICAgc2NoZW1hLAogICAgICBiYXRjaF9zaXplLAogICAgICBjcmVhdGVfZGlzcG9zaXRpb24sCiAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uLAogICAgICBrbXNfa2V5LAogICAgICByZXRyeV9zdHJhdGVneSwKICAgICAgYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzLAogICAgICB0ZXN0X2NsaWVudD1Ob25lKToKICAgIHNlbGYudGFibGVfcmVmZXJlbmNlID0gdGFibGVfcmVmZXJlbmNlCiAgICBzZWxmLnRhYmxlX3NpZGVfaW5wdXRzID0gdGFibGVfc2lkZV9pbnB1dHMKICAgIHNlbGYuc2NoZW1hX3NpZGVfaW5wdXRzID0gc2NoZW1hX3NpZGVfaW5wdXRzCiAgICBzZWxmLnNjaGVtYSA9IHNjaGVtYQogICAgc2VsZi5iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZQogICAgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24gPSBjcmVhdGVfZGlzcG9zaXRpb24KICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24gPSB3cml0ZV9kaXNwb3NpdGlvbgogICAgc2VsZi5rbXNfa2V5ID0ga21zX2tleQogICAgc2VsZi5yZXRyeV9zdHJhdGVneSA9IHJldHJ5X3N0cmF0ZWd5CiAgICBzZWxmLnRlc3RfY2xpZW50ID0gdGVzdF9jbGllbnQKICAgIHNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzID0gYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzCgogIGNsYXNzIEluc2VydElkUHJlZml4Rm4oRG9Gbik6CiAgICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgICBzZWxmLnByZWZpeCA9IHN0cih1dWlkLnV1aWQ0KCkpCiAgICAgIHNlbGYuX3Jvd19jb3VudCA9IDAKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgICAga2V5ID0gZWxlbWVudFswXQogICAgICB2YWx1ZSA9IGVsZW1lbnRbMV0KCiAgICAgIGluc2VydF9pZCA9ICclcy0lcycgJSAoc2VsZi5wcmVmaXgsIHNlbGYuX3Jvd19jb3VudCkKICAgICAgc2VsZi5fcm93X2NvdW50ICs9IDEKICAgICAgeWllbGQgKGtleSwgKHZhbHVlLCBpbnNlcnRfaWQpKQoKICBkZWYgZXhwYW5kKHNlbGYsIGlucHV0KToKICAgIGJpZ3F1ZXJ5X3dyaXRlX2ZuID0gQmlnUXVlcnlXcml0ZUZuKAogICAgICAgIHNjaGVtYT1zZWxmLnNjaGVtYSwKICAgICAgICBiYXRjaF9zaXplPXNlbGYuYmF0Y2hfc2l6ZSwKICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb249c2VsZi5jcmVhdGVfZGlzcG9zaXRpb24sCiAgICAgICAgd3JpdGVfZGlzcG9zaXRpb249c2VsZi53cml0ZV9kaXNwb3NpdGlvbiwKICAgICAgICBrbXNfa2V5PXNlbGYua21zX2tleSwKICAgICAgICByZXRyeV9zdHJhdGVneT1zZWxmLnJldHJ5X3N0cmF0ZWd5LAogICAgICAgIHRlc3RfY2xpZW50PXNlbGYudGVzdF9jbGllbnQsCiAgICAgICAgYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzPXNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzKQoKICAgIHJldHVybiAoCiAgICAgICAgaW5wdXQKICAgICAgICB8ICdBcHBlbmREZXN0aW5hdGlvbicgPj4gYmVhbS5QYXJEbygKICAgICAgICAgICAgYmlncXVlcnlfdG9vbHMuQXBwZW5kRGVzdGluYXRpb25zRm4oc2VsZi50YWJsZV9yZWZlcmVuY2UpLAogICAgICAgICAgICAqc2VsZi50YWJsZV9zaWRlX2lucHV0cykKICAgICAgICB8ICdBZGRJbnNlcnRJZHMnID4+IGJlYW0uUGFyRG8oX1N0cmVhbVRvQmlnUXVlcnkuSW5zZXJ0SWRQcmVmaXhGbigpKQogICAgICAgIHwgJ0NvbW1pdEluc2VydElkcycgPj4gYmVhbS5SZXNodWZmbGUoKQogICAgICAgIHwgJ1N0cmVhbUluc2VydFJvd3MnID4+IFBhckRvKAogICAgICAgICAgICBiaWdxdWVyeV93cml0ZV9mbiwgKnNlbGYuc2NoZW1hX3NpZGVfaW5wdXRzKS53aXRoX291dHB1dHMoCiAgICAgICAgICAgICAgICBCaWdRdWVyeVdyaXRlRm4uRkFJTEVEX1JPV1MsIG1haW49J21haW4nKSkKCgojIEZsYWcgdG8gYmUgcGFzc2VkIHRvIFdyaXRlVG9CaWdRdWVyeSB0byBmb3JjZSBzY2hlbWEgYXV0b2RldGVjdGlvbgpTQ0hFTUFfQVVUT0RFVEVDVCA9ICdTQ0hFTUFfQVVUT0RFVEVDVCcKCgpjbGFzcyBXcml0ZVRvQmlnUXVlcnkoUFRyYW5zZm9ybSk6CiAgIiIiV3JpdGUgZGF0YSB0byBCaWdRdWVyeS4KCiAgVGhpcyB0cmFuc2Zvcm0gcmVjZWl2ZXMgYSBQQ29sbGVjdGlvbiBvZiBlbGVtZW50cyB0byBiZSBpbnNlcnRlZCBpbnRvIEJpZ1F1ZXJ5CiAgdGFibGVzLiBUaGUgZWxlbWVudHMgd291bGQgY29tZSBpbiBhcyBQeXRob24gZGljdGlvbmFyaWVzLCBvciBhcyBgVGFibGVSb3dgCiAgaW5zdGFuY2VzLgogICIiIgogIGNsYXNzIE1ldGhvZChvYmplY3QpOgogICAgREVGQVVMVCA9ICdERUZBVUxUJwogICAgU1RSRUFNSU5HX0lOU0VSVFMgPSAnU1RSRUFNSU5HX0lOU0VSVFMnCiAgICBGSUxFX0xPQURTID0gJ0ZJTEVfTE9BRFMnCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgdGFibGUsCiAgICAgIGRhdGFzZXQ9Tm9uZSwKICAgICAgcHJvamVjdD1Ob25lLAogICAgICBzY2hlbWE9Tm9uZSwKICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uPUJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX0lGX05FRURFRCwKICAgICAgd3JpdGVfZGlzcG9zaXRpb249QmlnUXVlcnlEaXNwb3NpdGlvbi5XUklURV9BUFBFTkQsCiAgICAgIGttc19rZXk9Tm9uZSwKICAgICAgYmF0Y2hfc2l6ZT1Ob25lLAogICAgICBtYXhfZmlsZV9zaXplPU5vbmUsCiAgICAgIG1heF9maWxlc19wZXJfYnVuZGxlPU5vbmUsCiAgICAgIHRlc3RfY2xpZW50PU5vbmUsCiAgICAgIGN1c3RvbV9nY3NfdGVtcF9sb2NhdGlvbj1Ob25lLAogICAgICBtZXRob2Q9Tm9uZSwKICAgICAgaW5zZXJ0X3JldHJ5X3N0cmF0ZWd5PU5vbmUsCiAgICAgIGFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycz1Ob25lLAogICAgICB0YWJsZV9zaWRlX2lucHV0cz1Ob25lLAogICAgICBzY2hlbWFfc2lkZV9pbnB1dHM9Tm9uZSwKICAgICAgdHJpZ2dlcmluZ19mcmVxdWVuY3k9Tm9uZSwKICAgICAgdmFsaWRhdGU9VHJ1ZSk6CiAgICAiIiJJbml0aWFsaXplIGEgV3JpdGVUb0JpZ1F1ZXJ5IHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICB0YWJsZSAoc3RyLCBjYWxsYWJsZSwgVmFsdWVQcm92aWRlcik6IFRoZSBJRCBvZiB0aGUgdGFibGUsIG9yIGEgY2FsbGFibGUKICAgICAgICAgdGhhdCByZXR1cm5zIGl0LiBUaGUgSUQgbXVzdCBjb250YWluIG9ubHkgbGV0dGVycyBgYGEtemBgLCBgYEEtWmBgLAogICAgICAgICBudW1iZXJzIGBgMC05YGAsIG9yIHVuZGVyc2NvcmVzIGBgX2BgLiBJZiBkYXRhc2V0IGFyZ3VtZW50IGlzCiAgICAgICAgIDpkYXRhOmBOb25lYCB0aGVuIHRoZSB0YWJsZSBhcmd1bWVudCBtdXN0IGNvbnRhaW4gdGhlIGVudGlyZSB0YWJsZQogICAgICAgICByZWZlcmVuY2Ugc3BlY2lmaWVkIGFzOiBgYCdEQVRBU0VULlRBQkxFJ2BgCiAgICAgICAgIG9yIGBgJ1BST0pFQ1Q6REFUQVNFVC5UQUJMRSdgYC4gSWYgaXQncyBhIGNhbGxhYmxlLCBpdCBtdXN0IHJlY2VpdmUgb25lCiAgICAgICAgIGFyZ3VtZW50IHJlcHJlc2VudGluZyBhbiBlbGVtZW50IHRvIGJlIHdyaXR0ZW4gdG8gQmlnUXVlcnksIGFuZCByZXR1cm4KICAgICAgICAgYSBUYWJsZVJlZmVyZW5jZSwgb3IgYSBzdHJpbmcgdGFibGUgbmFtZSBhcyBzcGVjaWZpZWQgYWJvdmUuCiAgICAgICAgIE11bHRpcGxlIGRlc3RpbmF0aW9ucyBhcmUgb25seSBzdXBwb3J0ZWQgb24gQmF0Y2ggcGlwZWxpbmVzIGF0IHRoZQogICAgICAgICBtb21lbnQuCiAgICAgIGRhdGFzZXQgKHN0cik6IFRoZSBJRCBvZiB0aGUgZGF0YXNldCBjb250YWluaW5nIHRoaXMgdGFibGUgb3IKICAgICAgICA6ZGF0YTpgTm9uZWAgaWYgdGhlIHRhYmxlIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlCiAgICAgICAgYXJndW1lbnQuCiAgICAgIHByb2plY3QgKHN0cik6IFRoZSBJRCBvZiB0aGUgcHJvamVjdCBjb250YWluaW5nIHRoaXMgdGFibGUgb3IKICAgICAgICA6ZGF0YTpgTm9uZWAgaWYgdGhlIHRhYmxlIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlCiAgICAgICAgYXJndW1lbnQuCiAgICAgIHNjaGVtYSAoc3RyLGRpY3QsVmFsdWVQcm92aWRlcixjYWxsYWJsZSk6IFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUKICAgICAgICBCaWdRdWVyeSB0YWJsZSB0byB3cml0ZSBoYXMgdG8gYmUgY3JlYXRlZC4gVGhpcyBjYW4gYmUgZWl0aGVyIHNwZWNpZmllZAogICAgICAgIGFzIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmludGVybmFsLmNsaWVudHMuYmlncXVlcnkuXApiaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYWAuIG9yIGEgYFZhbHVlUHJvdmlkZXJgIHRoYXQgaGFzIGEgSlNPTiBzdHJpbmcsCiAgICAgICAgb3IgYSBweXRob24gZGljdGlvbmFyeSwgb3IgdGhlIHN0cmluZyBvciBkaWN0aW9uYXJ5IGl0c2VsZiwKICAgICAgICBvYmplY3Qgb3IgYSBzaW5nbGUgc3RyaW5nICBvZiB0aGUgZm9ybQogICAgICAgIGBgJ2ZpZWxkMTp0eXBlMSxmaWVsZDI6dHlwZTIsZmllbGQzOnR5cGUzJ2BgIHRoYXQgZGVmaW5lcyBhIGNvbW1hCiAgICAgICAgc2VwYXJhdGVkIGxpc3Qgb2YgZmllbGRzLiBIZXJlIGBgJ3R5cGUnYGAgc2hvdWxkIHNwZWNpZnkgdGhlIEJpZ1F1ZXJ5CiAgICAgICAgdHlwZSBvZiB0aGUgZmllbGQuIFNpbmdsZSBzdHJpbmcgYmFzZWQgc2NoZW1hcyBkbyBub3Qgc3VwcG9ydCBuZXN0ZWQKICAgICAgICBmaWVsZHMsIHJlcGVhdGVkIGZpZWxkcywgb3Igc3BlY2lmeWluZyBhIEJpZ1F1ZXJ5IG1vZGUgZm9yIGZpZWxkcwogICAgICAgIChtb2RlIHdpbGwgYWx3YXlzIGJlIHNldCB0byBgYCdOVUxMQUJMRSdgYCkuCiAgICAgICAgSWYgYSBjYWxsYWJsZSwgdGhlbiBpdCBzaG91bGQgcmVjZWl2ZSBhIGRlc3RpbmF0aW9uIChpbiB0aGUgZm9ybSBvZgogICAgICAgIGEgVGFibGVSZWZlcmVuY2Ugb3IgYSBzdHJpbmcsIGFuZCByZXR1cm4gYSBzdHIsIGRpY3Qgb3IgVGFibGVTY2hlbWEuCiAgICAgICAgT25lIG1heSBhbHNvIHBhc3MgYGBTQ0hFTUFfQVVUT0RFVEVDVGBgIGhlcmUsIGFuZCBCaWdRdWVyeSB3aWxsIHRyeSB0bwogICAgICAgIGluZmVyIHRoZSBzY2hlbWEgZm9yIHRoZSBmaWxlcyB0aGF0IGFyZSBiZWluZyBsb2FkZWQuCiAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbiAoQmlnUXVlcnlEaXNwb3NpdGlvbik6IEEgc3RyaW5nIGRlc2NyaWJpbmcgd2hhdAogICAgICAgIGhhcHBlbnMgaWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoKICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLkNSRUFURV9JRl9ORUVERURgOiBjcmVhdGUgaWYgZG9lcyBub3QKICAgICAgICAgIGV4aXN0LgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uQ1JFQVRFX05FVkVSYDogZmFpbCB0aGUgd3JpdGUgaWYgZG9lcyBub3QKICAgICAgICAgIGV4aXN0LgoKICAgICAgd3JpdGVfZGlzcG9zaXRpb24gKEJpZ1F1ZXJ5RGlzcG9zaXRpb24pOiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgaGFwcGVucwogICAgICAgIGlmIHRoZSB0YWJsZSBoYXMgYWxyZWFkeSBzb21lIGRhdGEuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEVgOiBkZWxldGUgZXhpc3Rpbmcgcm93cy4KICAgICAgICAqIDphdHRyOmBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0FQUEVORGA6IGFkZCB0byBleGlzdGluZyByb3dzLgogICAgICAgICogOmF0dHI6YEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfRU1QVFlgOiBmYWlsIHRoZSB3cml0ZSBpZiB0YWJsZSBub3QKICAgICAgICAgIGVtcHR5LgoKICAgICAgICBGb3Igc3RyZWFtaW5nIHBpcGVsaW5lcyBXcml0ZVRydW5jYXRlIGNhbiBub3QgYmUgdXNlZC4KICAgICAga21zX2tleSAoc3RyKTogRXhwZXJpbWVudGFsLiBPcHRpb25hbCBDbG91ZCBLTVMga2V5IG5hbWUgZm9yIHVzZSB3aGVuCiAgICAgICAgY3JlYXRpbmcgbmV3IHRhYmxlcy4KICAgICAgYmF0Y2hfc2l6ZSAoaW50KTogTnVtYmVyIG9mIHJvd3MgdG8gYmUgd3JpdHRlbiB0byBCUSBwZXIgc3RyZWFtaW5nIEFQSQogICAgICAgIGluc2VydC4gVGhlIGRlZmF1bHQgaXMgNTAwLgogICAgICAgIGluc2VydC4KICAgICAgdGVzdF9jbGllbnQ6IE92ZXJyaWRlIHRoZSBkZWZhdWx0IGJpZ3F1ZXJ5IGNsaWVudCB1c2VkIGZvciB0ZXN0aW5nLgogICAgICBtYXhfZmlsZV9zaXplIChpbnQpOiBUaGUgbWF4aW11bSBzaXplIGZvciBhIGZpbGUgdG8gYmUgd3JpdHRlbiBhbmQgdGhlbgogICAgICAgIGxvYWRlZCBpbnRvIEJpZ1F1ZXJ5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0VEIsIHdoaWNoIGlzIDgwJSBvZiB0aGUKICAgICAgICBsaW1pdCBvZiA1VEIgZm9yIEJpZ1F1ZXJ5IHRvIGxvYWQgYW55IGZpbGUuCiAgICAgIG1heF9maWxlc19wZXJfYnVuZGxlKGludCk6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0byBiZSBjb25jdXJyZW50bHkKICAgICAgICB3cml0dGVuIGJ5IGEgd29ya2VyLiBUaGUgZGVmYXVsdCBoZXJlIGlzIDIwLiBMYXJnZXIgdmFsdWVzIHdpbGwgYWxsb3cKICAgICAgICB3cml0aW5nIHRvIG11bHRpcGxlIGRlc3RpbmF0aW9ucyB3aXRob3V0IGhhdmluZyB0byByZXNoYXJkIC0gYnV0IHRoZXkKICAgICAgICBpbmNyZWFzZSB0aGUgbWVtb3J5IGJ1cmRlbiBvbiB0aGUgd29ya2Vycy4KICAgICAgY3VzdG9tX2djc190ZW1wX2xvY2F0aW9uIChzdHIpOiBBIEdDUyBsb2NhdGlvbiB0byBzdG9yZSBmaWxlcyB0byBiZSB1c2VkCiAgICAgICAgZm9yIGZpbGUgbG9hZHMgaW50byBCaWdRdWVyeS4gQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHVzZSB0aGUgcGlwZWxpbmUncwogICAgICAgIHRlbXBfbG9jYXRpb24sIGJ1dCBmb3IgcGlwZWxpbmVzIHdob3NlIHRlbXBfbG9jYXRpb24gaXMgbm90IGFwcHJvcHJpYXRlCiAgICAgICAgZm9yIEJRIEZpbGUgTG9hZHMsIHVzZXJzIHNob3VsZCBwYXNzIGEgc3BlY2lmaWMgb25lLgogICAgICBtZXRob2Q6IFRoZSBtZXRob2QgdG8gdXNlIHRvIHdyaXRlIHRvIEJpZ1F1ZXJ5LiBJdCBtYXkgYmUKICAgICAgICBTVFJFQU1JTkdfSU5TRVJUUywgRklMRV9MT0FEUywgb3IgREVGQVVMVC4gQW4gaW50cm9kdWN0aW9uIG9uIGxvYWRpbmcKICAgICAgICBkYXRhIHRvIEJpZ1F1ZXJ5OiBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9sb2FkaW5nLWRhdGEuCiAgICAgICAgREVGQVVMVCB3aWxsIHVzZSBTVFJFQU1JTkdfSU5TRVJUUyBvbiBTdHJlYW1pbmcgcGlwZWxpbmVzIGFuZAogICAgICAgIEZJTEVfTE9BRFMgb24gQmF0Y2ggcGlwZWxpbmVzLgogICAgICBpbnNlcnRfcmV0cnlfc3RyYXRlZ3k6IFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiByZXRyeWluZyBzdHJlYW1pbmcgaW5zZXJ0cwogICAgICAgIGludG8gQmlnUXVlcnkuIE9wdGlvbnMgYXJlIHNob3duIGluIGJpZ3F1ZXJ5X3Rvb2xzLlJldHJ5U3RyYXRlZ3kgYXR0cnMuCiAgICAgICAgRGVmYXVsdCBpcyB0byByZXRyeSBhbHdheXMuIFRoaXMgbWVhbnMgdGhhdCB3aGVuZXZlciB0aGVyZSBhcmUgcm93cwogICAgICAgIHRoYXQgZmFpbCB0byBiZSBpbnNlcnRlZCB0byBCaWdRdWVyeSwgdGhleSB3aWxsIGJlIHJldHJpZWQgaW5kZWZpbml0ZWx5LgogICAgICAgIE90aGVyIHJldHJ5IHN0cmF0ZWd5IHNldHRpbmdzIHdpbGwgcHJvZHVjZSBhIGRlYWRsZXR0ZXIgUENvbGxlY3Rpb24KICAgICAgICBhcyBvdXRwdXQuCiAgICAgIGFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycyAoY2FsbGFibGUpOiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGRpY3Rpb25hcnkKICAgICAgICB3aXRoIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBwYXNzIHRvIEJRIHdoZW4gY3JlYXRpbmcgLyBsb2FkaW5nIGRhdGEKICAgICAgICBpbnRvIGEgdGFibGUuIFRoZXNlIGNhbiBiZSAndGltZVBhcnRpdGlvbmluZycsICdjbHVzdGVyaW5nJywgZXRjLiBUaGV5CiAgICAgICAgYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgam9iIGxvYWQgY29uZmlndXJhdGlvbi4gU2VlCiAgICAgICAgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3Jlc3QvdjIvam9icyNjb25maWd1cmF0aW9uLmxvYWQKICAgICAgdGFibGVfc2lkZV9pbnB1dHMgKHR1cGxlKTogQSB0dXBsZSB3aXRoIGBgQXNTaWRlSW5wdXRgYCBQQ29sbGVjdGlvbnMgdG8gYmUKICAgICAgICBwYXNzZWQgdG8gdGhlIHRhYmxlIGNhbGxhYmxlIChpZiBvbmUgaXMgcHJvdmlkZWQpLgogICAgICBzY2hlbWFfc2lkZV9pbnB1dHM6IEEgdHVwbGUgd2l0aCBgYEFzU2lkZUlucHV0YGAgUENvbGxlY3Rpb25zIHRvIGJlCiAgICAgICAgcGFzc2VkIHRvIHRoZSBzY2hlbWEgY2FsbGFibGUgKGlmIG9uZSBpcyBwcm92aWRlZCkuCiAgICAgIHRyaWdnZXJpbmdfZnJlcXVlbmN5IChpbnQpOiBFdmVyeSB0cmlnZ2VyaW5nX2ZyZXF1ZW5jeSBkdXJhdGlvbiwgYQogICAgICAgIEJpZ1F1ZXJ5IGxvYWQgam9iIHdpbGwgYmUgdHJpZ2dlcmVkIGZvciBhbGwgdGhlIGRhdGEgd3JpdHRlbiBzaW5jZQogICAgICAgIHRoZSBsYXN0IGxvYWQgam9iLiBCaWdRdWVyeSBoYXMgbGltaXRzIG9uIGhvdyBtYW55IGxvYWQgam9icyBjYW4gYmUKICAgICAgICB0cmlnZ2VyZWQgcGVyIGRheSwgc28gYmUgY2FyZWZ1bCBub3QgdG8gc2V0IHRoaXMgZHVyYXRpb24gdG9vIGxvdywgb3IKICAgICAgICB5b3UgbWF5IGV4Y2VlZCBkYWlseSBxdW90YS4gT2Z0ZW4gdGhpcyBpcyBzZXQgdG8gNSBvciAxMCBtaW51dGVzIHRvCiAgICAgICAgZW5zdXJlIHRoYXQgdGhlIHByb2plY3Qgc3RheXMgd2VsbCB1bmRlciB0aGUgQmlnUXVlcnkgcXVvdGEuCiAgICAgICAgU2VlIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9xdW90YS1wb2xpY3kgZm9yIG1vcmUgaW5mb3JtYXRpb24KICAgICAgICBhYm91dCBCaWdRdWVyeSBxdW90YXMuCiAgICAgIHZhbGlkYXRlOiBJbmRpY2F0ZXMgd2hldGhlciB0byBwZXJmb3JtIHZhbGlkYXRpb24gY2hlY2tzIG9uCiAgICAgICAgaW5wdXRzLiBUaGlzIHBhcmFtZXRlciBpcyBwcmltYXJpbHkgdXNlZCBmb3IgdGVzdGluZy4KICAgICIiIgogICAgc2VsZi50YWJsZV9yZWZlcmVuY2UgPSBiaWdxdWVyeV90b29scy5wYXJzZV90YWJsZV9yZWZlcmVuY2UoCiAgICAgICAgdGFibGUsIGRhdGFzZXQsIHByb2plY3QpCiAgICBzZWxmLmNyZWF0ZV9kaXNwb3NpdGlvbiA9IEJpZ1F1ZXJ5RGlzcG9zaXRpb24udmFsaWRhdGVfY3JlYXRlKAogICAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbikKICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24gPSBCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX3dyaXRlKAogICAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uKQogICAgaWYgc2NoZW1hID09IFNDSEVNQV9BVVRPREVURUNUOgogICAgICBzZWxmLnNjaGVtYSA9IHNjaGVtYQogICAgZWxzZToKICAgICAgc2VsZi5zY2hlbWEgPSBXcml0ZVRvQmlnUXVlcnkuZ2V0X2RpY3RfdGFibGVfc2NoZW1hKHNjaGVtYSkKICAgIHNlbGYuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUKICAgIHNlbGYua21zX2tleSA9IGttc19rZXkKICAgIHNlbGYudGVzdF9jbGllbnQgPSB0ZXN0X2NsaWVudAoKICAgICMgVE9ETyhwYWJsb2VtKTogQ29uc2lkZXIgaGFuZGxpbmcgVmFsdWVQcm92aWRlciBmb3IgdGhpcyBsb2NhdGlvbi4KICAgIHNlbGYuY3VzdG9tX2djc190ZW1wX2xvY2F0aW9uID0gY3VzdG9tX2djc190ZW1wX2xvY2F0aW9uCiAgICBzZWxmLm1heF9maWxlX3NpemUgPSBtYXhfZmlsZV9zaXplCiAgICBzZWxmLm1heF9maWxlc19wZXJfYnVuZGxlID0gbWF4X2ZpbGVzX3Blcl9idW5kbGUKICAgIHNlbGYubWV0aG9kID0gbWV0aG9kIG9yIFdyaXRlVG9CaWdRdWVyeS5NZXRob2QuREVGQVVMVAogICAgc2VsZi50cmlnZ2VyaW5nX2ZyZXF1ZW5jeSA9IHRyaWdnZXJpbmdfZnJlcXVlbmN5CiAgICBzZWxmLmluc2VydF9yZXRyeV9zdHJhdGVneSA9IGluc2VydF9yZXRyeV9zdHJhdGVneQogICAgc2VsZi5fdmFsaWRhdGUgPSB2YWxpZGF0ZQoKICAgIHNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzID0gYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzIG9yIHt9CiAgICBzZWxmLnRhYmxlX3NpZGVfaW5wdXRzID0gdGFibGVfc2lkZV9pbnB1dHMgb3IgKCkKICAgIHNlbGYuc2NoZW1hX3NpZGVfaW5wdXRzID0gc2NoZW1hX3NpZGVfaW5wdXRzIG9yICgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZyhzY2hlbWEpOgogICAgIiIiVHJhbnNmb3JtIHRoZSBzdHJpbmcgdGFibGUgc2NoZW1hIGludG8gYQogICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmludGVybmFsLmNsaWVudHMuYmlncXVlcnkuXApiaWdxdWVyeV92Ml9tZXNzYWdlcy5UYWJsZVNjaGVtYWAgaW5zdGFuY2UuCgogICAgQXJnczoKICAgICAgc2NoZW1hIChzdHIpOiBUaGUgc3Rpbmcgc2NoZW1hIHRvIGJlIHVzZWQgaWYgdGhlIEJpZ1F1ZXJ5IHRhYmxlIHRvIHdyaXRlCiAgICAgICAgaGFzIHRvIGJlIGNyZWF0ZWQuCgogICAgUmV0dXJuczoKICAgICAgfmFwYWNoZV9iZWFtLmlvLmdjcC5pbnRlcm5hbC5jbGllbnRzLmJpZ3F1ZXJ5LlwKYmlncXVlcnlfdjJfbWVzc2FnZXMuVGFibGVTY2hlbWE6CiAgICAgIFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzIHRvIGJlIGNyZWF0ZWQKICAgICAgYnV0IGluIHRoZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cy5iaWdxdWVyeS5cCmJpZ3F1ZXJ5X3YyX21lc3NhZ2VzLlRhYmxlU2NoZW1hYCBmb3JtYXQuCiAgICAiIiIKICAgIHRhYmxlX3NjaGVtYSA9IGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKCkKICAgIHNjaGVtYV9saXN0ID0gW3Muc3RyaXAoKSBmb3IgcyBpbiBzY2hlbWEuc3BsaXQoJywnKV0KICAgIGZvciBmaWVsZF9hbmRfdHlwZSBpbiBzY2hlbWFfbGlzdDoKICAgICAgZmllbGRfbmFtZSwgZmllbGRfdHlwZSA9IGZpZWxkX2FuZF90eXBlLnNwbGl0KCc6JykKICAgICAgZmllbGRfc2NoZW1hID0gYmlncXVlcnkuVGFibGVGaWVsZFNjaGVtYSgpCiAgICAgIGZpZWxkX3NjaGVtYS5uYW1lID0gZmllbGRfbmFtZQogICAgICBmaWVsZF9zY2hlbWEudHlwZSA9IGZpZWxkX3R5cGUKICAgICAgZmllbGRfc2NoZW1hLm1vZGUgPSAnTlVMTEFCTEUnCiAgICAgIHRhYmxlX3NjaGVtYS5maWVsZHMuYXBwZW5kKGZpZWxkX3NjaGVtYSkKICAgIHJldHVybiB0YWJsZV9zY2hlbWEKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB0YWJsZV9zY2hlbWFfdG9fZGljdCh0YWJsZV9zY2hlbWEpOgogICAgIiIiQ3JlYXRlIGEgZGljdGlvbmFyeSByZXByZXNlbnRhdGlvbiBvZiB0YWJsZSBzY2hlbWEgZm9yIHNlcmlhbGl6YXRpb24KICAgICIiIgogICAgZGVmIGdldF90YWJsZV9maWVsZChmaWVsZCk6CiAgICAgICIiIkNyZWF0ZSBhIGRpY3Rpb25hcnkgcmVwcmVzZW50YXRpb24gb2YgYSB0YWJsZSBmaWVsZAogICAgICAiIiIKICAgICAgcmVzdWx0ID0ge30KICAgICAgcmVzdWx0WyduYW1lJ10gPSBmaWVsZC5uYW1lCiAgICAgIHJlc3VsdFsndHlwZSddID0gZmllbGQudHlwZQogICAgICByZXN1bHRbJ21vZGUnXSA9IGdldGF0dHIoZmllbGQsICdtb2RlJywgJ05VTExBQkxFJykKICAgICAgaWYgaGFzYXR0cihmaWVsZCwgJ2Rlc2NyaXB0aW9uJykgYW5kIGZpZWxkLmRlc2NyaXB0aW9uIGlzIG5vdCBOb25lOgogICAgICAgIHJlc3VsdFsnZGVzY3JpcHRpb24nXSA9IGZpZWxkLmRlc2NyaXB0aW9uCiAgICAgIGlmIGhhc2F0dHIoZmllbGQsICdmaWVsZHMnKSBhbmQgZmllbGQuZmllbGRzOgogICAgICAgIHJlc3VsdFsnZmllbGRzJ10gPSBbZ2V0X3RhYmxlX2ZpZWxkKGYpIGZvciBmIGluIGZpZWxkLmZpZWxkc10KICAgICAgcmV0dXJuIHJlc3VsdAoKICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhYmxlX3NjaGVtYSwgYmlncXVlcnkuVGFibGVTY2hlbWEpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJUYWJsZSBzY2hlbWEgbXVzdCBiZSBvZiB0aGUgdHlwZSBiaWdxdWVyeS5UYWJsZVNjaGVtYSIpCiAgICBzY2hlbWEgPSB7J2ZpZWxkcyc6IFtdfQogICAgZm9yIGZpZWxkIGluIHRhYmxlX3NjaGVtYS5maWVsZHM6CiAgICAgIHNjaGVtYVsnZmllbGRzJ10uYXBwZW5kKGdldF90YWJsZV9maWVsZChmaWVsZCkpCiAgICByZXR1cm4gc2NoZW1hCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZ2V0X2RpY3RfdGFibGVfc2NoZW1hKHNjaGVtYSk6CiAgICAiIiJUcmFuc2Zvcm0gdGhlIHRhYmxlIHNjaGVtYSBpbnRvIGEgZGljdGlvbmFyeSBpbnN0YW5jZS4KCiAgICBBcmdzOgogICAgICBzY2hlbWEgKH5hcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cy5iaWdxdWVyeS5cCmJpZ3F1ZXJ5X3YyX21lc3NhZ2VzLlRhYmxlU2NoZW1hKToKICAgICAgICBUaGUgc2NoZW1hIHRvIGJlIHVzZWQgaWYgdGhlIEJpZ1F1ZXJ5IHRhYmxlIHRvIHdyaXRlIGhhcyB0byBiZSBjcmVhdGVkLgogICAgICAgIFRoaXMgY2FuIGVpdGhlciBiZSBhIGRpY3Qgb3Igc3RyaW5nIG9yIGluIHRoZSBUYWJsZVNjaGVtYSBmb3JtYXQuCgogICAgUmV0dXJuczoKICAgICAgRGljdFtzdHIsIEFueV06IFRoZSBzY2hlbWEgdG8gYmUgdXNlZCBpZiB0aGUgQmlnUXVlcnkgdGFibGUgdG8gd3JpdGUgaGFzCiAgICAgIHRvIGJlIGNyZWF0ZWQgYnV0IGluIHRoZSBkaWN0aW9uYXJ5IGZvcm1hdC4KICAgICIiIgogICAgaWYgKGlzaW5zdGFuY2Uoc2NoZW1hLCAoZGljdCwgdnAuVmFsdWVQcm92aWRlcikpIG9yIGNhbGxhYmxlKHNjaGVtYSkgb3IKICAgICAgICBzY2hlbWEgaXMgTm9uZSk6CiAgICAgIHJldHVybiBzY2hlbWEKICAgIGVsaWYgaXNpbnN0YW5jZShzY2hlbWEsIChzdHIsIHVuaWNvZGUpKToKICAgICAgdGFibGVfc2NoZW1hID0gV3JpdGVUb0JpZ1F1ZXJ5LmdldF90YWJsZV9zY2hlbWFfZnJvbV9zdHJpbmcoc2NoZW1hKQogICAgICByZXR1cm4gV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0KHRhYmxlX3NjaGVtYSkKICAgIGVsaWYgaXNpbnN0YW5jZShzY2hlbWEsIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKToKICAgICAgcmV0dXJuIFdyaXRlVG9CaWdRdWVyeS50YWJsZV9zY2hlbWFfdG9fZGljdChzY2hlbWEpCiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgc2NoZW1hIGFyZ3VtZW50OiAlcy4nICUgc2NoZW1hKQoKICBkZWYgX2NvbXB1dGVfbWV0aG9kKHNlbGYsIGV4cGVyaW1lbnRzLCBpc19zdHJlYW1pbmdfcGlwZWxpbmUpOgogICAgIyBJZiB0aGUgbmV3IEJRIHNpbmsgaXMgbm90IGFjdGl2YXRlZCBmb3IgZXhwZXJpbWVudCBmbGFncywgdGhlbiB3ZSB1c2UKICAgICMgc3RyZWFtaW5nIGluc2VydHMgYnkgZGVmYXVsdCAoaXQgZ2V0cyBvdmVycmlkZGVuIGluIGRhdGFmbG93X3J1bm5lci5weSkuCiAgICBpZiAndXNlX2JlYW1fYnFfc2luaycgbm90IGluIGV4cGVyaW1lbnRzOgogICAgICByZXR1cm4gc2VsZi5NZXRob2QuU1RSRUFNSU5HX0lOU0VSVFMKICAgIGVsaWYgc2VsZi5tZXRob2QgPT0gc2VsZi5NZXRob2QuREVGQVVMVCBhbmQgaXNfc3RyZWFtaW5nX3BpcGVsaW5lOgogICAgICByZXR1cm4gc2VsZi5NZXRob2QuU1RSRUFNSU5HX0lOU0VSVFMKICAgIGVsaWYgc2VsZi5tZXRob2QgPT0gc2VsZi5NZXRob2QuREVGQVVMVCBhbmQgbm90IGlzX3N0cmVhbWluZ19waXBlbGluZToKICAgICAgcmV0dXJuIHNlbGYuTWV0aG9kLkZJTEVfTE9BRFMKICAgIGVsc2U6CiAgICAgIHJldHVybiBzZWxmLm1ldGhvZAoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHAgPSBwY29sbC5waXBlbGluZQoKICAgIGlmIChpc2luc3RhbmNlKHNlbGYudGFibGVfcmVmZXJlbmNlLCBiaWdxdWVyeS5UYWJsZVJlZmVyZW5jZSkgYW5kCiAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIE5vbmUpOgogICAgICBzZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgPSBwY29sbC5waXBlbGluZS5vcHRpb25zLnZpZXdfYXMoCiAgICAgICAgICBHb29nbGVDbG91ZE9wdGlvbnMpLnByb2plY3QKCiAgICBleHBlcmltZW50cyA9IHAub3B0aW9ucy52aWV3X2FzKERlYnVnT3B0aW9ucykuZXhwZXJpbWVudHMgb3IgW10KICAgICMgVE9ETyhwYWJsb2VtKTogVXNlIGEgZGlmZmVyZW50IG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgc3RyZWFtaW5nIG9yIGJhdGNoLgogICAgaXNfc3RyZWFtaW5nX3BpcGVsaW5lID0gcC5vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmcKCiAgICBtZXRob2RfdG9fdXNlID0gc2VsZi5fY29tcHV0ZV9tZXRob2QoZXhwZXJpbWVudHMsIGlzX3N0cmVhbWluZ19waXBlbGluZSkKCiAgICBpZiAobWV0aG9kX3RvX3VzZSA9PSBXcml0ZVRvQmlnUXVlcnkuTWV0aG9kLlNUUkVBTUlOR19JTlNFUlRTIGFuZAogICAgICAgIHNlbGYuc2NoZW1hID09IFNDSEVNQV9BVVRPREVURUNUKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdTY2hlbWEgYXV0by1kZXRlY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3Igc3RyZWFtaW5nICcKICAgICAgICAgICdpbnNlcnRzIGludG8gQmlnUXVlcnkuIE9ubHkgZm9yIEZpbGUgTG9hZHMuJykKCiAgICBpZiBtZXRob2RfdG9fdXNlID09IFdyaXRlVG9CaWdRdWVyeS5NZXRob2QuU1RSRUFNSU5HX0lOU0VSVFM6CiAgICAgIGlmIHNlbGYudHJpZ2dlcmluZ19mcmVxdWVuY3k6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ3RyaWdnZXJpbmdfZnJlcXVlbmN5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAnCiAgICAgICAgICAgICdGSUxFX0xPQURTIG1ldGhvZCBvZiB3cml0aW5nIHRvIEJpZ1F1ZXJ5LicpCgogICAgICBvdXRwdXRzID0gcGNvbGwgfCBfU3RyZWFtVG9CaWdRdWVyeSgKICAgICAgICAgIHNlbGYudGFibGVfcmVmZXJlbmNlLAogICAgICAgICAgc2VsZi50YWJsZV9zaWRlX2lucHV0cywKICAgICAgICAgIHNlbGYuc2NoZW1hX3NpZGVfaW5wdXRzLAogICAgICAgICAgc2VsZi5zY2hlbWEsCiAgICAgICAgICBzZWxmLmJhdGNoX3NpemUsCiAgICAgICAgICBzZWxmLmNyZWF0ZV9kaXNwb3NpdGlvbiwKICAgICAgICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24sCiAgICAgICAgICBzZWxmLmttc19rZXksCiAgICAgICAgICBzZWxmLmluc2VydF9yZXRyeV9zdHJhdGVneSwKICAgICAgICAgIHNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzLAogICAgICAgICAgdGVzdF9jbGllbnQ9c2VsZi50ZXN0X2NsaWVudCkKCiAgICAgIHJldHVybiB7QmlnUXVlcnlXcml0ZUZuLkZBSUxFRF9ST1dTOiBvdXRwdXRzW0JpZ1F1ZXJ5V3JpdGVGbi5GQUlMRURfUk9XU119CiAgICBlbHNlOgogICAgICBmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcCBpbXBvcnQgYmlncXVlcnlfZmlsZV9sb2FkcwogICAgICByZXR1cm4gcGNvbGwgfCBiaWdxdWVyeV9maWxlX2xvYWRzLkJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHMoCiAgICAgICAgICBkZXN0aW5hdGlvbj1zZWxmLnRhYmxlX3JlZmVyZW5jZSwKICAgICAgICAgIHNjaGVtYT1zZWxmLnNjaGVtYSwKICAgICAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbj1zZWxmLmNyZWF0ZV9kaXNwb3NpdGlvbiwKICAgICAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uPXNlbGYud3JpdGVfZGlzcG9zaXRpb24sCiAgICAgICAgICB0cmlnZ2VyaW5nX2ZyZXF1ZW5jeT1zZWxmLnRyaWdnZXJpbmdfZnJlcXVlbmN5LAogICAgICAgICAgbWF4X2ZpbGVfc2l6ZT1zZWxmLm1heF9maWxlX3NpemUsCiAgICAgICAgICBtYXhfZmlsZXNfcGVyX2J1bmRsZT1zZWxmLm1heF9maWxlc19wZXJfYnVuZGxlLAogICAgICAgICAgY3VzdG9tX2djc190ZW1wX2xvY2F0aW9uPXNlbGYuY3VzdG9tX2djc190ZW1wX2xvY2F0aW9uLAogICAgICAgICAgdGVzdF9jbGllbnQ9c2VsZi50ZXN0X2NsaWVudCwKICAgICAgICAgIHRhYmxlX3NpZGVfaW5wdXRzPXNlbGYudGFibGVfc2lkZV9pbnB1dHMsCiAgICAgICAgICBzY2hlbWFfc2lkZV9pbnB1dHM9c2VsZi5zY2hlbWFfc2lkZV9pbnB1dHMsCiAgICAgICAgICBhZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnM9c2VsZi5hZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnMsCiAgICAgICAgICB2YWxpZGF0ZT1zZWxmLl92YWxpZGF0ZSwKICAgICAgICAgIGlzX3N0cmVhbWluZ19waXBlbGluZT1pc19zdHJlYW1pbmdfcGlwZWxpbmUpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXMgPSB7fQogICAgaWYgc2VsZi50YWJsZV9yZWZlcmVuY2UgaXMgbm90IE5vbmU6CiAgICAgIHRhYmxlU3BlYyA9ICd7fS57fScuZm9ybWF0KAogICAgICAgICAgc2VsZi50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLCBzZWxmLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgICBpZiBzZWxmLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQgaXMgbm90IE5vbmU6CiAgICAgICAgdGFibGVTcGVjID0gJ3t9Ont9Jy5mb3JtYXQoc2VsZi50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLCB0YWJsZVNwZWMpCiAgICAgIHJlc1sndGFibGUnXSA9IERpc3BsYXlEYXRhSXRlbSh0YWJsZVNwZWMsIGxhYmVsPSdUYWJsZScpCiAgICByZXR1cm4gcmVzCgoKY2xhc3MgX1Bhc3NUaHJvdWdoVGhlbkNsZWFudXAoUFRyYW5zZm9ybSk6CiAgIiIiQSBQVHJhbnNmb3JtIHRoYXQgaW52b2tlcyBhIERvRm4gYWZ0ZXIgdGhlIGlucHV0IFBDb2xsZWN0aW9uIGhhcyBiZWVuCiAgICBwcm9jZXNzZWQuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNsZWFudXBfZG9mbik6CiAgICBzZWxmLmNsZWFudXBfZG9mbiA9IGNsZWFudXBfZG9mbgoKICBkZWYgZXhwYW5kKHNlbGYsIGlucHV0KToKICAgIGNsYXNzIFBhc3NUaHJvdWdoKGJlYW0uRG9Gbik6CiAgICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgICAgIHlpZWxkIGVsZW1lbnQKCiAgICBvdXRwdXQgPSBpbnB1dCB8IGJlYW0uUGFyRG8oUGFzc1Rocm91Z2goKSkud2l0aF9vdXRwdXRzKAogICAgICAgICdjbGVhbnVwX3NpZ25hbCcsIG1haW49J21haW4nKQogICAgbWFpbl9vdXRwdXQgPSBvdXRwdXRbJ21haW4nXQogICAgY2xlYW51cF9zaWduYWwgPSBvdXRwdXRbJ2NsZWFudXBfc2lnbmFsJ10KCiAgICBfID0gKAogICAgICAgIGlucHV0LnBpcGVsaW5lCiAgICAgICAgfCBiZWFtLkNyZWF0ZShbTm9uZV0pCiAgICAgICAgfCBiZWFtLlBhckRvKAogICAgICAgICAgICBzZWxmLmNsZWFudXBfZG9mbiwgYmVhbS5wdmFsdWUuQXNTaW5nbGV0b24oY2xlYW51cF9zaWduYWwpKSkKCiAgICByZXR1cm4gbWFpbl9vdXRwdXQKCgpAZXhwZXJpbWVudGFsKCkKY2xhc3MgX1JlYWRGcm9tQmlnUXVlcnkoUFRyYW5zZm9ybSk6CiAgIiIiUmVhZCBkYXRhIGZyb20gQmlnUXVlcnkuCgogICAgVGhpcyBQVHJhbnNmb3JtIHVzZXMgYSBCaWdRdWVyeSBleHBvcnQgam9iIHRvIHRha2UgYSBzbmFwc2hvdCBvZiB0aGUgdGFibGUKICAgIG9uIEdDUywgYW5kIHRoZW4gcmVhZHMgZnJvbSBlYWNoIHByb2R1Y2VkIEpTT04gZmlsZS4KCiAgICBEbyBub3RlIHRoYXQgY3VycmVudGx5IHRoaXMgc291cmNlIGRvZXMgbm90IHdvcmsgd2l0aCBEaXJlY3RSdW5uZXIuCgogIEFyZ3M6CiAgICB0YWJsZSAoc3RyLCBjYWxsYWJsZSwgVmFsdWVQcm92aWRlcik6IFRoZSBJRCBvZiB0aGUgdGFibGUsIG9yIGEgY2FsbGFibGUKICAgICAgdGhhdCByZXR1cm5zIGl0LiBUaGUgSUQgbXVzdCBjb250YWluIG9ubHkgbGV0dGVycyBgYGEtemBgLCBgYEEtWmBgLAogICAgICBudW1iZXJzIGBgMC05YGAsIG9yIHVuZGVyc2NvcmVzIGBgX2BgLiBJZiBkYXRhc2V0IGFyZ3VtZW50IGlzCiAgICAgIDpkYXRhOmBOb25lYCB0aGVuIHRoZSB0YWJsZSBhcmd1bWVudCBtdXN0IGNvbnRhaW4gdGhlIGVudGlyZSB0YWJsZQogICAgICByZWZlcmVuY2Ugc3BlY2lmaWVkIGFzOiBgYCdEQVRBU0VULlRBQkxFJ2BgCiAgICAgIG9yIGBgJ1BST0pFQ1Q6REFUQVNFVC5UQUJMRSdgYC4gSWYgaXQncyBhIGNhbGxhYmxlLCBpdCBtdXN0IHJlY2VpdmUgb25lCiAgICAgIGFyZ3VtZW50IHJlcHJlc2VudGluZyBhbiBlbGVtZW50IHRvIGJlIHdyaXR0ZW4gdG8gQmlnUXVlcnksIGFuZCByZXR1cm4KICAgICAgYSBUYWJsZVJlZmVyZW5jZSwgb3IgYSBzdHJpbmcgdGFibGUgbmFtZSBhcyBzcGVjaWZpZWQgYWJvdmUuCiAgICBkYXRhc2V0IChzdHIpOiBUaGUgSUQgb2YgdGhlIGRhdGFzZXQgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yCiAgICAgIDpkYXRhOmBOb25lYCBpZiB0aGUgdGFibGUgcmVmZXJlbmNlIGlzIHNwZWNpZmllZCBlbnRpcmVseSBieSB0aGUgdGFibGUKICAgICAgYXJndW1lbnQuCiAgICBwcm9qZWN0IChzdHIpOiBUaGUgSUQgb2YgdGhlIHByb2plY3QgY29udGFpbmluZyB0aGlzIHRhYmxlLgogICAgcXVlcnkgKHN0cik6IEEgcXVlcnkgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIGFyZ3VtZW50cyB0YWJsZSwgZGF0YXNldCwgYW5kCiAgICAgIHByb2plY3QuCiAgICB2YWxpZGF0ZSAoYm9vbCk6IElmIDpkYXRhOmBUcnVlYCwgdmFyaW91cyBjaGVja3Mgd2lsbCBiZSBkb25lIHdoZW4gc291cmNlCiAgICAgIGdldHMgaW5pdGlhbGl6ZWQgKGUuZy4sIGlzIHRhYmxlIHByZXNlbnQ/KS4gVGhpcyBzaG91bGQgYmUKICAgICAgOmRhdGE6YFRydWVgIGZvciBtb3N0IHNjZW5hcmlvcyBpbiBvcmRlciB0byBjYXRjaCBlcnJvcnMgYXMgZWFybHkgYXMKICAgICAgcG9zc2libGUgKHBpcGVsaW5lIGNvbnN0cnVjdGlvbiBpbnN0ZWFkIG9mIHBpcGVsaW5lIGV4ZWN1dGlvbikuIEl0CiAgICAgIHNob3VsZCBiZSA6ZGF0YTpgRmFsc2VgIGlmIHRoZSB0YWJsZSBpcyBjcmVhdGVkIGR1cmluZyBwaXBlbGluZQogICAgICBleGVjdXRpb24gYnkgYSBwcmV2aW91cyBzdGVwLgogICAgY29kZXIgKH5hcGFjaGVfYmVhbS5jb2RlcnMuY29kZXJzLkNvZGVyKTogVGhlIGNvZGVyIGZvciB0aGUgdGFibGUKICAgICAgcm93cy4gSWYgOmRhdGE6YE5vbmVgLCB0aGVuIHRoZSBkZWZhdWx0IGNvZGVyIGlzCiAgICAgIF9Kc29uVG9EaWN0Q29kZXIsIHdoaWNoIHdpbGwgaW50ZXJwcmV0IGV2ZXJ5IHJvdyBhcyBhIEpTT04KICAgICAgc2VyaWFsaXplZCBkaWN0aW9uYXJ5LgogICAgdXNlX3N0YW5kYXJkX3NxbCAoYm9vbCk6IFNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBCaWdRdWVyeSdzIHN0YW5kYXJkIFNRTAogICAgICBkaWFsZWN0IGZvciB0aGlzIHF1ZXJ5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA6ZGF0YTpgRmFsc2VgLgogICAgICBJZiBzZXQgdG8gOmRhdGE6YFRydWVgLCB0aGUgcXVlcnkgd2lsbCB1c2UgQmlnUXVlcnkncyB1cGRhdGVkIFNRTAogICAgICBkaWFsZWN0IHdpdGggaW1wcm92ZWQgc3RhbmRhcmRzIGNvbXBsaWFuY2UuCiAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgZm9yIHRhYmxlIGlucHV0cy4KICAgIGZsYXR0ZW5fcmVzdWx0cyAoYm9vbCk6IEZsYXR0ZW5zIGFsbCBuZXN0ZWQgYW5kIHJlcGVhdGVkIGZpZWxkcyBpbiB0aGUKICAgICAgcXVlcnkgcmVzdWx0cy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOmRhdGE6YFRydWVgLgogICAga21zX2tleSAoc3RyKTogRXhwZXJpbWVudGFsLiBPcHRpb25hbCBDbG91ZCBLTVMga2V5IG5hbWUgZm9yIHVzZSB3aGVuCiAgICAgIGNyZWF0aW5nIG5ldyB0ZW1wb3JhcnkgdGFibGVzLgogICAgZ2NzX2xvY2F0aW9uIChzdHIpOiBUaGUgbmFtZSBvZiB0aGUgR29vZ2xlIENsb3VkIFN0b3JhZ2UgYnVja2V0IHdoZXJlCiAgICAgIHRoZSBleHRyYWN0ZWQgdGFibGUgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYSBzdHJpbmcgb3IKICAgICAgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXJgLiBJZgogICAgICA6ZGF0YTpgTm9uZWAsIHRoZW4gdGhlIHRlbXBfbG9jYXRpb24gcGFyYW1ldGVyIGlzIHVzZWQuCiAgICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBnY3NfbG9jYXRpb249Tm9uZSwgdmFsaWRhdGU9RmFsc2UsICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBnY3NfbG9jYXRpb246CiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGdjc19sb2NhdGlvbiwgKHN0ciwgdW5pY29kZSwgVmFsdWVQcm92aWRlcikpOgogICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgJyVzOiBnY3NfbG9jYXRpb24gbXVzdCBiZSBvZiB0eXBlIHN0cmluZycKICAgICAgICAgICAgJyBvciBWYWx1ZVByb3ZpZGVyOyBnb3QgJXIgaW5zdGVhZCcgJQogICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHR5cGUoZ2NzX2xvY2F0aW9uKSkpCgogICAgICBpZiBpc2luc3RhbmNlKGdjc19sb2NhdGlvbiwgKHN0ciwgdW5pY29kZSkpOgogICAgICAgIGdjc19sb2NhdGlvbiA9IFN0YXRpY1ZhbHVlUHJvdmlkZXIoc3RyLCBnY3NfbG9jYXRpb24pCiAgICBzZWxmLmdjc19sb2NhdGlvbiA9IGdjc19sb2NhdGlvbgogICAgc2VsZi52YWxpZGF0ZSA9IHZhbGlkYXRlCgogICAgc2VsZi5fYXJncyA9IGFyZ3MKICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncwoKICBkZWYgX2dldF9kZXN0aW5hdGlvbl91cmkoc2VsZiwgdGVtcF9sb2NhdGlvbik6CiAgICAiIiJSZXR1cm5zIHRoZSBmdWxseSBxdWFsaWZpZWQgR29vZ2xlIENsb3VkIFN0b3JhZ2UgVVJJIHdoZXJlIHRoZQogICAgZXh0cmFjdGVkIHRhYmxlIHNob3VsZCBiZSB3cml0dGVuLgogICAgIiIiCiAgICBmaWxlX3BhdHRlcm4gPSAnYmlncXVlcnktdGFibGUtZHVtcC0qLmpzb24nCgogICAgaWYgc2VsZi5nY3NfbG9jYXRpb24gaXMgbm90IE5vbmU6CiAgICAgIGdjc19iYXNlID0gc2VsZi5nY3NfbG9jYXRpb24uZ2V0KCkKICAgIGVsaWYgdGVtcF9sb2NhdGlvbiBpcyBub3QgTm9uZToKICAgICAgZ2NzX2Jhc2UgPSB0ZW1wX2xvY2F0aW9uCiAgICAgIGxvZ2dpbmcuZGVidWcoImdjc19sb2NhdGlvbiBpcyBlbXB0eSwgdXNpbmcgdGVtcF9sb2NhdGlvbiBpbnN0ZWFkIikKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAne30gcmVxdWlyZXMgYSBHQ1MgbG9jYXRpb24gdG8gYmUgcHJvdmlkZWQnLmZvcm1hdCgKICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykpCiAgICBpZiBzZWxmLnZhbGlkYXRlOgogICAgICBzZWxmLl92YWxpZGF0ZV9nY3NfbG9jYXRpb24oZ2NzX2Jhc2UpCgogICAgam9iX2lkID0gdXVpZC51dWlkNCgpLmhleAogICAgcmV0dXJuIEZpbGVTeXN0ZW1zLmpvaW4oZ2NzX2Jhc2UsIGpvYl9pZCwgZmlsZV9wYXR0ZXJuKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF92YWxpZGF0ZV9nY3NfbG9jYXRpb24oZ2NzX2xvY2F0aW9uKToKICAgIGlmIG5vdCBnY3NfbG9jYXRpb24uc3RhcnRzd2l0aCgnZ3M6Ly8nKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBHQ1MgbG9jYXRpb246IHt9Jy5mb3JtYXQoZ2NzX2xvY2F0aW9uKSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBjbGFzcyBSZW1vdmVKc29uRmlsZXMoYmVhbS5Eb0ZuKToKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdjc19sb2NhdGlvbik6CiAgICAgICAgc2VsZi5fZ2NzX2xvY2F0aW9uID0gZ2NzX2xvY2F0aW9uCgogICAgICBkZWYgcHJvY2VzcyhzZWxmLCB1bnVzZWRfZWxlbWVudCwgc2lnbmFsKToKICAgICAgICBtYXRjaF9yZXN1bHQgPSBGaWxlU3lzdGVtcy5tYXRjaChbc2VsZi5fZ2NzX2xvY2F0aW9uXSlbMF0ubWV0YWRhdGFfbGlzdAogICAgICAgIGxvZ2dpbmcuZGVidWcoCiAgICAgICAgICAgICIlczogbWF0Y2hlZCAlcyBmaWxlcyIsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBsZW4obWF0Y2hfcmVzdWx0KSkKICAgICAgICBwYXRocyA9IFt4LnBhdGggZm9yIHggaW4gbWF0Y2hfcmVzdWx0XQogICAgICAgIEZpbGVTeXN0ZW1zLmRlbGV0ZShwYXRocykKCiAgICB0ZW1wX2xvY2F0aW9uID0gcGNvbGwucGlwZWxpbmUub3B0aW9ucy52aWV3X2FzKAogICAgICAgIEdvb2dsZUNsb3VkT3B0aW9ucykudGVtcF9sb2NhdGlvbgogICAgZ2NzX2xvY2F0aW9uID0gc2VsZi5fZ2V0X2Rlc3RpbmF0aW9uX3VyaSh0ZW1wX2xvY2F0aW9uKQoKICAgIHJldHVybiAoCiAgICAgICAgcGNvbGwKICAgICAgICB8IGJlYW0uaW8uUmVhZCgKICAgICAgICAgICAgX0N1c3RvbUJpZ1F1ZXJ5U291cmNlKAogICAgICAgICAgICAgICAgZ2NzX2xvY2F0aW9uPWdjc19sb2NhdGlvbiwKICAgICAgICAgICAgICAgIHZhbGlkYXRlPXNlbGYudmFsaWRhdGUsCiAgICAgICAgICAgICAgICAqc2VsZi5fYXJncywKICAgICAgICAgICAgICAgICoqc2VsZi5fa3dhcmdzKSkKICAgICAgICB8IF9QYXNzVGhyb3VnaFRoZW5DbGVhbnVwKFJlbW92ZUpzb25GaWxlcyhnY3NfbG9jYXRpb24pKSkKlUZdAQAAAAAAlH2UKIwWX3BhcnNlX3RhYmxlX3JlZmVyZW5jZZRqVjEBAE0jAU0lAYeUjBxwYXJzZV90YWJsZV9zY2hlbWFfZnJvbV9qc29ulGpWMQEATSgBTSsBh5SMD2RlZmF1bHRfZW5jb2RlcpRqVjEBAE0uAU0wAYeUjBJSb3dBc0RpY3RKc29uQ29kZXKUalYxAQBNMwFNNQGHlIwOQmlnUXVlcnlSZWFkZXKUalYxAQBNOAFNOgGHlIwOQmlnUXVlcnlXcml0ZXKUalYxAQBNPQFNPwGHlIwPQmlnUXVlcnlXcmFwcGVylGpWMQEATUIBTUQBh5SMGlRhYmxlUm93SnNvbkNvZGVyLl9faW5pdF9flGpWMQEATU4BTVYBh5SMGFRhYmxlUm93SnNvbkNvZGVyLmVuY29kZZRqVjEBAE1YAU1mAYeUjBhUYWJsZVJvd0pzb25Db2Rlci5kZWNvZGWUalYxAQBNaAFNbAGHlIwRVGFibGVSb3dKc29uQ29kZXKUal0xAQBNRwFNbAGHlIwjQmlnUXVlcnlEaXNwb3NpdGlvbi52YWxpZGF0ZV9jcmVhdGWUalYxAQBNeAFNfwGHlIwiQmlnUXVlcnlEaXNwb3NpdGlvbi52YWxpZGF0ZV93cml0ZZRqVjEBAE2BAU2KAYeUjBNCaWdRdWVyeURpc3Bvc2l0aW9ulGpdMQEATW8BTYoBh5SMF0JpZ1F1ZXJ5U291cmNlLl9faW5pdF9flGpWMQEATZMBTeoBh5SMG0JpZ1F1ZXJ5U291cmNlLmRpc3BsYXlfZGF0YZRqVjEBAE3sAU38AYeUjBVCaWdRdWVyeVNvdXJjZS5mb3JtYXSUalYxAQBN/gFNAQKHlIwVQmlnUXVlcnlTb3VyY2UucmVhZGVylGpWMQEATQMCTQkCh5SMDkJpZ1F1ZXJ5U291cmNllGpdMQEATZEBTQkCh5SMCF90b19ib29slGpWMQEATQ8CTRACh5SMC190b19kZWNpbWFslGpWMQEATRMCTRQCh5SMCV90b19ieXRlc5RqVjEBAE0XAk0aAoeUjBlfSnNvblRvRGljdENvZGVyLl9faW5pdF9flGpWMQEATR8CTSgCh5SMIl9Kc29uVG9EaWN0Q29kZXIuX2NvbnZlcnRfdG9fdHVwbGWUalYxAQBNKgJNNgKHlIwXX0pzb25Ub0RpY3RDb2Rlci5kZWNvZGWUalYxAQBNOAJNOgKHlIwkX0pzb25Ub0RpY3RDb2Rlci5fZGVjb2RlX3dpdGhfc2NoZW1hlGpWMQEATTwCTU8Ch5SMIV9Kc29uVG9EaWN0Q29kZXIuaXNfZGV0ZXJtaW5pc3RpY5RqVjEBAE1RAk1SAoeUjB1fSnNvblRvRGljdENvZGVyLnRvX3R5cGVfaGludJRqVjEBAE1UAk1VAoeUjBBfSnNvblRvRGljdENvZGVylGpdMQEATR0CTVUCh5SMHl9DdXN0b21CaWdRdWVyeVNvdXJjZS5fX2luaXRfX5RqVjEBAE1ZAk18AoeUjCNfQ3VzdG9tQmlnUXVlcnlTb3VyY2UuZXN0aW1hdGVfc2l6ZZRqVjEBAE1+Ak2QAoeUjBtfQ3VzdG9tQmlnUXVlcnlTb3VyY2Uuc3BsaXSUalYxAQBNkgJNqAKHlIxXX0N1c3RvbUJpZ1F1ZXJ5U291cmNlLmdldF9yYW5nZV90cmFja2VyLkN1c3RvbUJpZ1F1ZXJ5U291cmNlUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGpWMQEATa0CTa4Ch5SMVl9DdXN0b21CaWdRdWVyeVNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlci5DdXN0b21CaWdRdWVyeVNvdXJjZVJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9ulGpWMQEATbACTbECh5SMSF9DdXN0b21CaWdRdWVyeVNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlci5DdXN0b21CaWdRdWVyeVNvdXJjZVJhbmdlVHJhY2tlcpRqXTEBAE2rAk2xAoeUjCdfQ3VzdG9tQmlnUXVlcnlTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXKUalYxAQBNqgJNswKHlIwaX0N1c3RvbUJpZ1F1ZXJ5U291cmNlLnJlYWSUalYxAQBNtQJNtgKHlIwuX0N1c3RvbUJpZ1F1ZXJ5U291cmNlLl9zZXR1cF90ZW1wb3JhcnlfZGF0YXNldJRqVjEBAE24Ak27AoeUjCRfQ3VzdG9tQmlnUXVlcnlTb3VyY2UuX2V4ZWN1dGVfcXVlcnmUalYxAQBNvQJNxwKHlIwjX0N1c3RvbUJpZ1F1ZXJ5U291cmNlLl9leHBvcnRfZmlsZXOUalYxAQBNyQJN3QKHlIwVX0N1c3RvbUJpZ1F1ZXJ5U291cmNllGpdMQEATVgCTd0Ch5SMFUJpZ1F1ZXJ5U2luay5fX2luaXRfX5RqVjEBAE3pAk1YA4eUjBlCaWdRdWVyeVNpbmsuZGlzcGxheV9kYXRhlGpWMQEATVoDTWUDh5SMG0JpZ1F1ZXJ5U2luay5zY2hlbWFfYXNfanNvbpRqVjEBAE1nA014A4eUjBNCaWdRdWVyeVNpbmsuZm9ybWF0lGpWMQEATXoDTX0Dh5SME0JpZ1F1ZXJ5U2luay53cml0ZXKUalYxAQBNfwNNgwOHlIwMQmlnUXVlcnlTaW5rlGpdMQEATeACTYMDh5SMGEJpZ1F1ZXJ5V3JpdGVGbi5fX2luaXRfX5RqVjEBAE2OA03NA4eUjBxCaWdRdWVyeVdyaXRlRm4uZGlzcGxheV9kYXRhlGpWMQEATc8DTdcDh5SMIkJpZ1F1ZXJ5V3JpdGVGbi5fcmVzZXRfcm93c19idWZmZXKUalYxAQBN2QNN2gOHlIwgQmlnUXVlcnlXcml0ZUZuLmdldF90YWJsZV9zY2hlbWGUalYxAQBN3ANN7wOHlIwcQmlnUXVlcnlXcml0ZUZuLnN0YXJ0X2J1bmRsZZRqVjEBAE3xA037A4eUjCdCaWdRdWVyeVdyaXRlRm4uX2NyZWF0ZV90YWJsZV9pZl9uZWVkZWSUalYxAQBN/QNNGgSHlIwXQmlnUXVlcnlXcml0ZUZuLnByb2Nlc3OUalYxAQBNHARNMQSHlIwdQmlnUXVlcnlXcml0ZUZuLmZpbmlzaF9idW5kbGWUalYxAQBNMwRNNASHlIwiQmlnUXVlcnlXcml0ZUZuLl9mbHVzaF9hbGxfYmF0Y2hlc5RqVjEBAE02BE1ABIeUjBxCaWdRdWVyeVdyaXRlRm4uX2ZsdXNoX2JhdGNolGpWMQEATUIETXUEh5SMD0JpZ1F1ZXJ5V3JpdGVGbpRqXTEBAE2GA011BIeUjBpfU3RyZWFtVG9CaWdRdWVyeS5fX2luaXRfX5RqVjEBAE15BE2QBIeUjC9fU3RyZWFtVG9CaWdRdWVyeS5JbnNlcnRJZFByZWZpeEZuLnN0YXJ0X2J1bmRsZZRqVjEBAE2TBE2VBIeUjCpfU3RyZWFtVG9CaWdRdWVyeS5JbnNlcnRJZFByZWZpeEZuLnByb2Nlc3OUalYxAQBNlwRNnQSHlIwiX1N0cmVhbVRvQmlnUXVlcnkuSW5zZXJ0SWRQcmVmaXhGbpRqXTEBAE2SBE2dBIeUjBhfU3RyZWFtVG9CaWdRdWVyeS5leHBhbmSUalYxAQBNnwRNswSHlIwRX1N0cmVhbVRvQmlnUXVlcnmUal0xAQBNeARNswSHlIwWV3JpdGVUb0JpZ1F1ZXJ5Lk1ldGhvZJRqXTEBAE3BBE3EBIeUjBhXcml0ZVRvQmlnUXVlcnkuX19pbml0X1+UalYxAQBNxgRNVwWHlIwsV3JpdGVUb0JpZ1F1ZXJ5LmdldF90YWJsZV9zY2hlbWFfZnJvbV9zdHJpbmeUalYxAQBNWQVNcwWHlIwkV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0lGpWMQEATXUFTYsFh5SMJVdyaXRlVG9CaWdRdWVyeS5nZXRfZGljdF90YWJsZV9zY2hlbWGUalYxAQBNjQVNpAWHlIwfV3JpdGVUb0JpZ1F1ZXJ5Ll9jb21wdXRlX21ldGhvZJRqVjEBAE2mBU2wBYeUjBZXcml0ZVRvQmlnUXVlcnkuZXhwYW5klGpWMQEATbIFTeoFh5SMHFdyaXRlVG9CaWdRdWVyeS5kaXNwbGF5X2RhdGGUalYxAQBN7AVN9AWHlIwPV3JpdGVUb0JpZ1F1ZXJ5lGpdMQEATboETfQFh5SMIF9QYXNzVGhyb3VnaFRoZW5DbGVhbnVwLl9faW5pdF9flGpWMQEATfsFTfwFh5SMMl9QYXNzVGhyb3VnaFRoZW5DbGVhbnVwLmV4cGFuZC5QYXNzVGhyb3VnaC5wcm9jZXNzlGpWMQEATQAGTQEGh5SMKl9QYXNzVGhyb3VnaFRoZW5DbGVhbnVwLmV4cGFuZC5QYXNzVGhyb3VnaJRqXTEBAE3/BU0BBoeUjB5fUGFzc1Rocm91Z2hUaGVuQ2xlYW51cC5leHBhbmSUalYxAQBN/gVNDgaHlIwXX1Bhc3NUaHJvdWdoVGhlbkNsZWFudXCUal0xAQBN9wVNDgaHlIwaX1JlYWRGcm9tQmlnUXVlcnkuX19pbml0X1+UalYxAQBNQQZNTwaHlIwmX1JlYWRGcm9tQmlnUXVlcnkuX2dldF9kZXN0aW5hdGlvbl91cmmUalYxAQBNUQZNZAaHlIwoX1JlYWRGcm9tQmlnUXVlcnkuX3ZhbGlkYXRlX2djc19sb2NhdGlvbpRqVjEBAE1mBk1pBoeUjDFfUmVhZEZyb21CaWdRdWVyeS5leHBhbmQuUmVtb3ZlSnNvbkZpbGVzLl9faW5pdF9flGpWMQEATW0GTW4Gh5SMMF9SZWFkRnJvbUJpZ1F1ZXJ5LmV4cGFuZC5SZW1vdmVKc29uRmlsZXMucHJvY2Vzc5RqVjEBAE1wBk11BoeUjChfUmVhZEZyb21CaWdRdWVyeS5leHBhbmQuUmVtb3ZlSnNvbkZpbGVzlGpdMQEATWwGTXUGh5SMGF9SZWFkRnJvbUJpZ1F1ZXJ5LmV4cGFuZJRqVjEBAE1rBk2DBoeUjBFfUmVhZEZyb21CaWdRdWVyeZRqXTEBAE0RBk2DBoeUdX2UKIwRVGFibGVSb3dKc29uQ29kZXKUanMDAACMGFRhYmxlUm93SnNvbkNvZGVyLmVuY29kZZRqcwMAAIwYVGFibGVSb3dKc29uQ29kZXIuZGVjb2RllGpzAwAAjBNCaWdRdWVyeURpc3Bvc2l0aW9ulGpzAwAAjCNCaWdRdWVyeURpc3Bvc2l0aW9uLnZhbGlkYXRlX2NyZWF0ZZRqcwMAAIwiQmlnUXVlcnlEaXNwb3NpdGlvbi52YWxpZGF0ZV93cml0ZZRqcwMAAIwOQmlnUXVlcnlTb3VyY2WUanMDAACMG0JpZ1F1ZXJ5U291cmNlLmRpc3BsYXlfZGF0YZRqcwMAAIwVQmlnUXVlcnlTb3VyY2UucmVhZGVylGpzAwAAjAxCaWdRdWVyeVNpbmuUanMDAACMGUJpZ1F1ZXJ5U2luay5kaXNwbGF5X2RhdGGUanMDAACMG0JpZ1F1ZXJ5U2luay5zY2hlbWFfYXNfanNvbpRqcwMAAIwTQmlnUXVlcnlTaW5rLndyaXRlcpRqcwMAAIwPV3JpdGVUb0JpZ1F1ZXJ5lGpzAwAAjBZXcml0ZVRvQmlnUXVlcnkuTWV0aG9klGpzAwAAjCxXcml0ZVRvQmlnUXVlcnkuZ2V0X3RhYmxlX3NjaGVtYV9mcm9tX3N0cmluZ5RqcwMAAIwkV3JpdGVUb0JpZ1F1ZXJ5LnRhYmxlX3NjaGVtYV90b19kaWN0lGpzAwAAjCVXcml0ZVRvQmlnUXVlcnkuZ2V0X2RpY3RfdGFibGVfc2NoZW1hlGpzAwAAjBZXcml0ZVRvQmlnUXVlcnkuZXhwYW5klGpzAwAAjBxXcml0ZVRvQmlnUXVlcnkuZGlzcGxheV9kYXRhlGpzAwAAdYwbYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5lHSUjCZhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfZmlsZV9sb2Fkc5QoWCGCAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpGdW5jdGlvbmFsaXR5IHRvIHBlcmZvcm0gZmlsZSBsb2FkcyBpbnRvIEJpZ1F1ZXJ5IGZvciBCYXRjaCBhbmQgU3RyZWFtaW5nCnBpcGVsaW5lcy4KClRoaXMgc291cmNlIGlzIGFibGUgdG8gd29yayBhcm91bmQgQmlnUXVlcnkgbG9hZCBxdW90YXMgYW5kIGxpbWl0YXRpb25zLiBXaGVuCmRlc3RpbmF0aW9ucyBhcmUgZHluYW1pYywgb3Igd2hlbiBkYXRhIGZvciBhIHNpbmdsZSBqb2IgaXMgdG9vIGxhcmdlLCB0aGUgZGF0YQp3aWxsIGJlIHNwbGl0IGludG8gbXVsdGlwbGUgam9icy4KCk5PVEhJTkcgSU4gVEhJUyBGSUxFIEhBUyBCQUNLV0FSRFMgQ09NUEFUSUJJTElUWSBHVUFSQU5URUVTLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgdXVpZAoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IGl0ZXJpdGVtcwoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGZpbGVzeXN0ZW1zIGFzIGZzCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwIGltcG9ydCBiaWdxdWVyeV90b29scwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMgaW1wb3J0IHZhbHVlX3Byb3ZpZGVyIGFzIHZwCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB0cmlnZ2VyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEdsb2JhbFdpbmRvd3MKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCk9ORV9URVJBQllURSA9ICgxIDw8IDQwKQoKIyBUaGUgbWF4aW11bSBmaWxlIHNpemUgZm9yIGltcG9ydHMgaXMgNVRCLiBXZSBrZWVwIG91ciBmaWxlcyB1bmRlciB0aGF0LgpfREVGQVVMVF9NQVhfRklMRV9TSVpFID0gNCAqIE9ORV9URVJBQllURQoKX0RFRkFVTFRfTUFYX1dSSVRFUlNfUEVSX0JVTkRMRSA9IDIwCgojIFRoZSBtYXhpbXVtIHNpemUgZm9yIGEgc2luZ2xlIGxvYWQgam9iIGlzIG9uZSB0ZXJhYnl0ZQpfTUFYSU1VTV9MT0FEX1NJWkUgPSAxNSAqIE9ORV9URVJBQllURQoKIyBCaWcgcXVlcnkgb25seSBzdXBwb3J0cyB1cCB0byAxMCB0aG91c2FuZCBVUklzIGZvciBhIHNpbmdsZSBsb2FkIGpvYi4KX01BWElNVU1fU09VUkNFX1VSSVMgPSAxMCAqIDEwMDAKCiMgSWYgdHJpZ2dlcmluZ19mcmVxdWVuY3kgaXMgc3VwcGxpZWQsIHdlIHdpbGwgdHJpZ2dlciB0aGUgZmlsZSB3cml0ZSBhZnRlcgojIHRoaXMgbWFueSByZWNvcmRzIGFyZSB3cml0dGVuLgpfRklMRV9UUklHR0VSSU5HX1JFQ09SRF9DT1VOVCA9IDUwMDAwMAoKCmRlZiBfZ2VuZXJhdGVfbG9hZF9qb2JfbmFtZSgpOgogIGRhdGV0aW1lX2NvbXBvbmVudCA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCIlWV8lbV8lZF8lSCVNJVMiKQogICMgVE9ETyhwYWJsb2VtKTogaW5jbHVkZSBqb2IgaWQgLyBwaXBlbGluZSBjb21wb25lbnQ/CiAgcmV0dXJuICdiZWFtX2xvYWRfJXNfJXMnICUgKGRhdGV0aW1lX2NvbXBvbmVudCwgcmFuZG9tLnJhbmRpbnQoMCwgMTAwKSkKCgpkZWYgZmlsZV9wcmVmaXhfZ2VuZXJhdG9yKAogICAgd2l0aF92YWxpZGF0aW9uPVRydWUsIHBpcGVsaW5lX2djc19sb2NhdGlvbj1Ob25lLCB0ZW1wX2xvY2F0aW9uPU5vbmUpOgogIGRlZiBfZ2VuZXJhdGVfZmlsZV9wcmVmaXgodW51c2VkX2VsbSk6CiAgICAjIElmIGEgZ2NzIGxvY2F0aW9uIGlzIHByb3ZpZGVkIHRvIHRoZSBwaXBlbGluZSwgdGhlbiB3ZSBzaGFsbCB1c2UgdGhhdC4KICAgICMgT3RoZXJ3aXNlLCB3ZSBzaGFsbCB1c2UgdGhlIHRlbXBfbG9jYXRpb24gZnJvbSBwaXBlbGluZSBvcHRpb25zLgogICAgZ2NzX2Jhc2UgPSBwaXBlbGluZV9nY3NfbG9jYXRpb24uZ2V0KCkKICAgIGlmIG5vdCBnY3NfYmFzZToKICAgICAgZ2NzX2Jhc2UgPSB0ZW1wX2xvY2F0aW9uCgogICAgIyBUaGlzIHdpbGwgZmFpbCBhdCBwaXBlbGluZSBleGVjdXRpb24gdGltZSwgYnV0IHdpbGwgZmFpbCBlYXJseSwgYXMgdGhpcwogICAgIyBzdGVwIGRvZXNuJ3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIChhbmQgdGh1cyB3aWxsIGJlIG9uZSBvZiB0aGUgZmlyc3QKICAgICMgc3RhZ2VzIHRvIGJlIHJ1bikuCiAgICBpZiB3aXRoX3ZhbGlkYXRpb24gYW5kIChub3QgZ2NzX2Jhc2Ugb3Igbm90IGdjc19iYXNlLnN0YXJ0c3dpdGgoJ2dzOi8vJykpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0ludmFsaWQgR0NTIGxvY2F0aW9uOiAlci5cbicKICAgICAgICAgICdXcml0aW5nIHRvIEJpZ1F1ZXJ5IHdpdGggRklMRV9MT0FEUyBtZXRob2QgcmVxdWlyZXMgYSAnCiAgICAgICAgICAnR0NTIGxvY2F0aW9uIHRvIGJlIHByb3ZpZGVkIHRvIHdyaXRlIGZpbGVzIHRvIGJlIGxvYWRlZCcKICAgICAgICAgICcgbG9hZGVkIGludG8gQmlnUXVlcnkuIFBsZWFzZSBwcm92aWRlIGEgR0NTIGJ1Y2tldCwgb3IgJwogICAgICAgICAgJ3Bhc3MgbWV0aG9kPSJTVFJFQU1JTkdfSU5TRVJUUyIgdG8gV3JpdGVUb0JpZ1F1ZXJ5LicgJSBnY3NfYmFzZSkKCiAgICBwcmVmaXhfdXVpZCA9IF9icV91dWlkKCkKICAgIHJldHVybiBmcy5GaWxlU3lzdGVtcy5qb2luKGdjc19iYXNlLCAnYnFfbG9hZCcsIHByZWZpeF91dWlkKQoKICByZXR1cm4gX2dlbmVyYXRlX2ZpbGVfcHJlZml4CgoKZGVmIF9tYWtlX25ld19maWxlX3dyaXRlcihmaWxlX3ByZWZpeCwgZGVzdGluYXRpb24pOgogIGRlc3RpbmF0aW9uID0gYmlncXVlcnlfdG9vbHMuZ2V0X2hhc2hhYmxlX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQoKICAjIFdpbmRvd3MgZG9lcyBub3QgYWxsb3cgOiBvbiBmaWxlbmFtZXMuIFJlcGxhY2luZyB3aXRoIHVuZGVyc2NvcmUuCiAgIyBPdGhlciBkaXNhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOgogICMgaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9kZXNrdG9wL2ZpbGVpby9uYW1pbmctYS1maWxlCiAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbi5yZXBsYWNlKCc6JywgJy4nKQoKICBkaXJlY3RvcnkgPSBmcy5GaWxlU3lzdGVtcy5qb2luKGZpbGVfcHJlZml4LCBkZXN0aW5hdGlvbikKCiAgaWYgbm90IGZzLkZpbGVTeXN0ZW1zLmV4aXN0cyhkaXJlY3RvcnkpOgogICAgZnMuRmlsZVN5c3RlbXMubWtkaXJzKGRpcmVjdG9yeSkKCiAgZmlsZV9uYW1lID0gc3RyKHV1aWQudXVpZDQoKSkKICBmaWxlX3BhdGggPSBmcy5GaWxlU3lzdGVtcy5qb2luKGZpbGVfcHJlZml4LCBkZXN0aW5hdGlvbiwgZmlsZV9uYW1lKQoKICByZXR1cm4gZmlsZV9wYXRoLCBmcy5GaWxlU3lzdGVtcy5jcmVhdGUoZmlsZV9wYXRoLCAnYXBwbGljYXRpb24vdGV4dCcpCgoKZGVmIF9icV91dWlkKHNlZWQ9Tm9uZSk6CiAgaWYgbm90IHNlZWQ6CiAgICByZXR1cm4gc3RyKHV1aWQudXVpZDQoKSkucmVwbGFjZSgiLSIsICIiKQogIGVsc2U6CiAgICByZXR1cm4gc3RyKGhhc2hsaWIubWQ1KHNlZWQuZW5jb2RlKCd1dGY4JykpLmhleGRpZ2VzdCgpKQoKCmNsYXNzIF9TaGFyZERlc3RpbmF0aW9ucyhiZWFtLkRvRm4pOgogICIiIkFkZHMgYSBzaGFyZCBudW1iZXIgdG8gdGhlIGtleSBvZiB0aGUgS1YgZWxlbWVudC4KCiAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgogIERFRkFVTFRfU0hBUkRJTkdfRkFDVE9SID0gMTAKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNoYXJkaW5nX2ZhY3Rvcj1ERUZBVUxUX1NIQVJESU5HX0ZBQ1RPUik6CiAgICBzZWxmLnNoYXJkaW5nX2ZhY3RvciA9IHNoYXJkaW5nX2ZhY3RvcgoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fc2hhcmRfY291bnQgPSByYW5kb20ucmFuZHJhbmdlKHNlbGYuc2hhcmRpbmdfZmFjdG9yKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIGRlc3RpbmF0aW9uID0gZWxlbWVudFswXQogICAgcm93ID0gZWxlbWVudFsxXQoKICAgIHNoYXJkZWRfZGVzdGluYXRpb24gPSAoCiAgICAgICAgZGVzdGluYXRpb24sIHNlbGYuX3NoYXJkX2NvdW50ICUgc2VsZi5zaGFyZGluZ19mYWN0b3IpCiAgICBzZWxmLl9zaGFyZF9jb3VudCArPSAxCiAgICB5aWVsZCAoc2hhcmRlZF9kZXN0aW5hdGlvbiwgcm93KQoKCmNsYXNzIFdyaXRlUmVjb3Jkc1RvRmlsZShiZWFtLkRvRm4pOgogICIiIldyaXRlIGlucHV0IHJlY29yZHMgdG8gZmlsZXMgYmVmb3JlIHRyaWdnZXJpbmcgYSBsb2FkIGpvYi4KCiAgVGhpcyB0cmFuc2Zvcm0ga2VlcHMgdXAgdG8gYGBtYXhfZmlsZXNfcGVyX2J1bmRsZWBgIGZpbGVzIG9wZW4gdG8gd3JpdGUgdG8uIEl0CiAgcmVjZWl2ZXMgKGRlc3RpbmF0aW9uLCByZWNvcmQpIHR1cGxlcywgYW5kIGl0IHdyaXRlcyB0aGUgcmVjb3JkcyB0byBkaWZmZXJlbnQKICBmaWxlcyBmb3IgZWFjaCBkZXN0aW5hdGlvbi4KCiAgSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBgYG1heF9maWxlc19wZXJfYnVuZGxlYGAgZGVzdGluYXRpb25zIHRoYXQgd2UgbmVlZCB0bwogIHdyaXRlIHRvLCB0aGVuIHRob3NlIHJlY29yZHMgYXJlIGdyb3VwZWQgYnkgdGhlaXIgZGVzdGluYXRpb24sIGFuZCBsYXRlcgogIHdyaXR0ZW4gdG8gZmlsZXMgYnkgYGBXcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxlYGAuCgogIEl0IG91dHB1dHMgdHdvIFBDb2xsZWN0aW9ucy4KICAiIiIKCiAgVU5XUklUVEVOX1JFQ09SRF9UQUcgPSAnVW53cml0dGVuUmVjb3JkcycKICBXUklUVEVOX0ZJTEVfVEFHID0gJ1dyaXR0ZW5GaWxlcycKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBtYXhfZmlsZXNfcGVyX2J1bmRsZT1fREVGQVVMVF9NQVhfV1JJVEVSU19QRVJfQlVORExFLAogICAgICBtYXhfZmlsZV9zaXplPV9ERUZBVUxUX01BWF9GSUxFX1NJWkUsCiAgICAgIGNvZGVyPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZSBhIDpjbGFzczpgV3JpdGVSZWNvcmRzVG9GaWxlYC4KCiAgICBBcmdzOgogICAgICBtYXhfZmlsZXNfcGVyX2J1bmRsZSAoaW50KTogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIGtlcHQKICAgICAgICBvcGVuIGR1cmluZyBleGVjdXRpb24gb2YgdGhpcyBzdGVwIGluIGEgd29ya2VyLiBUaGlzIGlzIHRvIGF2b2lkIG92ZXItCiAgICAgICAgd2hlbG1pbmcgdGhlIHdvcmtlciBtZW1vcnkuCiAgICAgIG1heF9maWxlX3NpemUgKGludCk6IFRoZSBtYXhpbXVtIHNpemUgaW4gYnl0ZXMgZm9yIGEgZmlsZSB0byBiZSB1c2VkIGluCiAgICAgICAgYW4gZXhwb3J0IGpvYi4KCiAgICAiIiIKICAgIHNlbGYubWF4X2ZpbGVzX3Blcl9idW5kbGUgPSBtYXhfZmlsZXNfcGVyX2J1bmRsZQogICAgc2VsZi5tYXhfZmlsZV9zaXplID0gbWF4X2ZpbGVfc2l6ZQogICAgc2VsZi5jb2RlciA9IGNvZGVyIG9yIGJpZ3F1ZXJ5X3Rvb2xzLlJvd0FzRGljdEpzb25Db2RlcigpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdtYXhfZmlsZXNfcGVyX2J1bmRsZSc6IHNlbGYubWF4X2ZpbGVzX3Blcl9idW5kbGUsCiAgICAgICAgJ21heF9maWxlX3NpemUnOiBzdHIoc2VsZi5tYXhfZmlsZV9zaXplKSwKICAgICAgICAnY29kZXInOiBzZWxmLmNvZGVyLl9fY2xhc3NfXy5fX25hbWVfXwogICAgfQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fZGVzdGluYXRpb25fdG9fZmlsZV93cml0ZXIgPSB7fQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCBmaWxlX3ByZWZpeCk6CiAgICAiIiJUYWtlIGEgdHVwbGUgd2l0aCAoZGVzdGluYXRpb24sIHJvdykgYW5kIHdyaXRlIHRvIGZpbGUgb3Igc3BpbGwgb3V0LgoKICAgIERlc3RpbmF0aW9uIG1heSBiZSBhIGBgVGFibGVSZWZlcmVuY2VgYCBvciBhIHN0cmluZywgYW5kIHJvdyBpcyBhCiAgICBQeXRob24gZGljdGlvbmFyeSBmb3IgYSByb3cgdG8gYmUgaW5zZXJ0ZWQgdG8gQmlnUXVlcnkuIiIiCiAgICBkZXN0aW5hdGlvbiA9IGJpZ3F1ZXJ5X3Rvb2xzLmdldF9oYXNoYWJsZV9kZXN0aW5hdGlvbihlbGVtZW50WzBdKQogICAgcm93ID0gZWxlbWVudFsxXQoKICAgIGlmIGRlc3RpbmF0aW9uIG5vdCBpbiBzZWxmLl9kZXN0aW5hdGlvbl90b19maWxlX3dyaXRlcjoKICAgICAgaWYgbGVuKHNlbGYuX2Rlc3RpbmF0aW9uX3RvX2ZpbGVfd3JpdGVyKSA8IHNlbGYubWF4X2ZpbGVzX3Blcl9idW5kbGU6CiAgICAgICAgc2VsZi5fZGVzdGluYXRpb25fdG9fZmlsZV93cml0ZXJbZGVzdGluYXRpb25dID0gX21ha2VfbmV3X2ZpbGVfd3JpdGVyKAogICAgICAgICAgICBmaWxlX3ByZWZpeCwgZGVzdGluYXRpb24pCiAgICAgIGVsc2U6CiAgICAgICAgeWllbGQgcHZhbHVlLlRhZ2dlZE91dHB1dCgKICAgICAgICAgICAgV3JpdGVSZWNvcmRzVG9GaWxlLlVOV1JJVFRFTl9SRUNPUkRfVEFHLCBlbGVtZW50KQogICAgICAgIHJldHVybgoKICAgIChmaWxlX3BhdGgsIHdyaXRlcikgPSBzZWxmLl9kZXN0aW5hdGlvbl90b19maWxlX3dyaXRlcltkZXN0aW5hdGlvbl0KCiAgICAjIFRPRE8ocGFibG9lbSk6IElzIGl0IHBvc3NpYmxlIGZvciB0aGlzIHRvIHRocm93IGV4Y2VwdGlvbj8KICAgIHdyaXRlci53cml0ZShzZWxmLmNvZGVyLmVuY29kZShyb3cpKQogICAgd3JpdGVyLndyaXRlKGInXG4nKQoKICAgIGZpbGVfc2l6ZSA9IHdyaXRlci50ZWxsKCkKICAgIGlmIGZpbGVfc2l6ZSA+IHNlbGYubWF4X2ZpbGVfc2l6ZToKICAgICAgd3JpdGVyLmNsb3NlKCkKICAgICAgc2VsZi5fZGVzdGluYXRpb25fdG9fZmlsZV93cml0ZXIucG9wKGRlc3RpbmF0aW9uKQogICAgICB5aWVsZCBwdmFsdWUuVGFnZ2VkT3V0cHV0KAogICAgICAgICAgV3JpdGVSZWNvcmRzVG9GaWxlLldSSVRURU5fRklMRV9UQUcsCiAgICAgICAgICAoZWxlbWVudFswXSwgKGZpbGVfcGF0aCwgZmlsZV9zaXplKSkpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgZm9yIGRlc3RpbmF0aW9uLCBmaWxlX3BhdGhfd3JpdGVyIGluIFwKICAgICAgaXRlcml0ZW1zKHNlbGYuX2Rlc3RpbmF0aW9uX3RvX2ZpbGVfd3JpdGVyKToKICAgICAgKGZpbGVfcGF0aCwgd3JpdGVyKSA9IGZpbGVfcGF0aF93cml0ZXIKICAgICAgZmlsZV9zaXplID0gd3JpdGVyLnRlbGwoKQogICAgICB3cml0ZXIuY2xvc2UoKQogICAgICB5aWVsZCBwdmFsdWUuVGFnZ2VkT3V0cHV0KAogICAgICAgICAgV3JpdGVSZWNvcmRzVG9GaWxlLldSSVRURU5fRklMRV9UQUcsCiAgICAgICAgICBHbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKChkZXN0aW5hdGlvbiwgKGZpbGVfcGF0aCwgZmlsZV9zaXplKSkpKQogICAgc2VsZi5fZGVzdGluYXRpb25fdG9fZmlsZV93cml0ZXIgPSB7fQoKCmNsYXNzIFdyaXRlR3JvdXBlZFJlY29yZHNUb0ZpbGUoYmVhbS5Eb0ZuKToKICAiIiJSZWNlaXZlcyBjb2xsZWN0aW9uIG9mIGRlc3QtaXRlcmFibGUocmVjb3JkcyksIHdyaXRlcyBpdCB0byBmaWxlcy4KCiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBgYFdyaXRlUmVjb3Jkc1RvRmlsZWBgIGJlY2F1c2UgaXQgcmVjZWl2ZXMgcmVjb3JkcwogIGdyb3VwZWQgYnkgZGVzdGluYXRpb24uIFRoaXMgbWVhbnMgdGhhdCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8ga2VlcCBtdWx0aXBsZQogIGZpbGUgZGVzY3JpcHRvcnMgb3BlbiwgYmVjYXVzZSB3ZSBrbm93IGZvciBzdXJlIHdoZW4gcmVjb3JkcyBmb3IgYSBzaW5nbGUKICBkZXN0aW5hdGlvbiBoYXZlIGJlZW4gd3JpdHRlbiBvdXQuCgogIEV4cGVyaW1lbnRhbDsgbm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgbWF4X2ZpbGVfc2l6ZT1fREVGQVVMVF9NQVhfRklMRV9TSVpFLCBjb2Rlcj1Ob25lKToKICAgIHNlbGYubWF4X2ZpbGVfc2l6ZSA9IG1heF9maWxlX3NpemUKICAgIHNlbGYuY29kZXIgPSBjb2RlciBvciBiaWdxdWVyeV90b29scy5Sb3dBc0RpY3RKc29uQ29kZXIoKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCBmaWxlX3ByZWZpeCk6CiAgICBkZXN0aW5hdGlvbiA9IGVsZW1lbnRbMF0KICAgIHJvd3MgPSBlbGVtZW50WzFdCgogICAgZmlsZV9wYXRoLCB3cml0ZXIgPSBOb25lLCBOb25lCgogICAgZm9yIHJvdyBpbiByb3dzOgogICAgICBpZiB3cml0ZXIgaXMgTm9uZToKICAgICAgICAoZmlsZV9wYXRoLCB3cml0ZXIpID0gX21ha2VfbmV3X2ZpbGVfd3JpdGVyKGZpbGVfcHJlZml4LCBkZXN0aW5hdGlvbikKCiAgICAgIHdyaXRlci53cml0ZShzZWxmLmNvZGVyLmVuY29kZShyb3cpKQogICAgICB3cml0ZXIud3JpdGUoYidcbicpCgogICAgICBmaWxlX3NpemUgPSB3cml0ZXIudGVsbCgpCiAgICAgIGlmIGZpbGVfc2l6ZSA+IHNlbGYubWF4X2ZpbGVfc2l6ZToKICAgICAgICB3cml0ZXIuY2xvc2UoKQogICAgICAgIHlpZWxkIChkZXN0aW5hdGlvbiwgKGZpbGVfcGF0aCwgZmlsZV9zaXplKSkKICAgICAgICBmaWxlX3BhdGgsIHdyaXRlciA9IE5vbmUsIE5vbmUKICAgIGlmIHdyaXRlciBpcyBub3QgTm9uZToKICAgICAgd3JpdGVyLmNsb3NlKCkKICAgICAgeWllbGQgKGRlc3RpbmF0aW9uLCAoZmlsZV9wYXRoLCBmaWxlX3NpemUpKQoKCmNsYXNzIFRyaWdnZXJDb3B5Sm9icyhiZWFtLkRvRm4pOgogICIiIkxhdW5jaGVzIGpvYnMgdG8gY29weSBmcm9tIHRlbXBvcmFyeSB0YWJsZXMgaW50byB0aGUgbWFpbiB0YXJnZXQgdGFibGUuCgogIFdoZW4gYSBqb2IgbmVlZHMgdG8gd3JpdGUgdG8gbXVsdGlwbGUgZGVzdGluYXRpb24gdGFibGVzLCBvciB3aGVuIGEgc2luZ2xlCiAgZGVzdGluYXRpb24gdGFibGUgbmVlZHMgdG8gaGF2ZSBtdWx0aXBsZSBsb2FkIGpvYnMgdG8gd3JpdGUgdG8gaXQsIGZpbGVzIGFyZQogIGxvYWRlZCBpbnRvIHRlbXBvcmFyeSB0YWJsZXMsIGFuZCB0aG9zZSB0YWJsZXMgYXJlIGxhdGVyIGNvcGllZCB0byB0aGUKICBkZXN0aW5hdGlvbiB0YWJsZXMuCgogIFRoaXMgdHJhbnNmb3JtIGVtaXRzIChkZXN0aW5hdGlvbiwgam9iX3JlZmVyZW5jZSkgcGFpcnMuCgogIFRPRE8oQkVBTS03ODIyKTogSW4gZmlsZSBsb2FkcyBtZXRob2Qgb2Ygd3JpdGluZyB0byBCaWdRdWVyeSwKICAgIGNvcHlpbmcgZnJvbSB0ZW1wX3RhYmxlcyB0byBkZXN0aW5hdGlvbl90YWJsZSBpcyBub3QgYXRvbWljLgogICAgU2VlOiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0JFQU0tNzgyMgogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgY3JlYXRlX2Rpc3Bvc2l0aW9uPU5vbmUsIHdyaXRlX2Rpc3Bvc2l0aW9uPU5vbmUsIHRlc3RfY2xpZW50PU5vbmUpOgogICAgc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24gPSBjcmVhdGVfZGlzcG9zaXRpb24KICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24gPSB3cml0ZV9kaXNwb3NpdGlvbgogICAgc2VsZi50ZXN0X2NsaWVudCA9IHRlc3RfY2xpZW50CiAgICBzZWxmLl9vYnNlcnZlZF90YWJsZXMgPSBzZXQoKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fb2JzZXJ2ZWRfdGFibGVzID0gc2V0KCkKICAgIHNlbGYuYnFfd3JhcHBlciA9IGJpZ3F1ZXJ5X3Rvb2xzLkJpZ1F1ZXJ5V3JhcHBlcihjbGllbnQ9c2VsZi50ZXN0X2NsaWVudCkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgam9iX25hbWVfcHJlZml4PU5vbmUpOgogICAgZGVzdGluYXRpb24gPSBlbGVtZW50WzBdCiAgICBqb2JfcmVmZXJlbmNlID0gZWxlbWVudFsxXQoKICAgIGNvcHlfdG9fcmVmZXJlbmNlID0gYmlncXVlcnlfdG9vbHMucGFyc2VfdGFibGVfcmVmZXJlbmNlKGRlc3RpbmF0aW9uKQogICAgaWYgY29weV90b19yZWZlcmVuY2UucHJvamVjdElkIGlzIE5vbmU6CiAgICAgIGNvcHlfdG9fcmVmZXJlbmNlLnByb2plY3RJZCA9IHZwLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmdldF92YWx1ZSgKICAgICAgICAgICdwcm9qZWN0Jywgc3RyLCAnJykKCiAgICBjb3B5X2Zyb21fcmVmZXJlbmNlID0gYmlncXVlcnlfdG9vbHMucGFyc2VfdGFibGVfcmVmZXJlbmNlKGRlc3RpbmF0aW9uKQogICAgY29weV9mcm9tX3JlZmVyZW5jZS50YWJsZUlkID0gam9iX3JlZmVyZW5jZS5qb2JJZAogICAgaWYgY29weV9mcm9tX3JlZmVyZW5jZS5wcm9qZWN0SWQgaXMgTm9uZToKICAgICAgY29weV9mcm9tX3JlZmVyZW5jZS5wcm9qZWN0SWQgPSB2cC5SdW50aW1lVmFsdWVQcm92aWRlci5nZXRfdmFsdWUoCiAgICAgICAgICAncHJvamVjdCcsIHN0ciwgJycpCgogICAgY29weV9qb2JfbmFtZSA9ICclc19jb3B5XyVzX3RvXyVzJyAlICgKICAgICAgICBqb2JfbmFtZV9wcmVmaXgsCiAgICAgICAgX2JxX3V1aWQoCiAgICAgICAgICAgICclczolcy4lcycgJSAoCiAgICAgICAgICAgICAgICBjb3B5X2Zyb21fcmVmZXJlbmNlLnByb2plY3RJZCwKICAgICAgICAgICAgICAgIGNvcHlfZnJvbV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgICAgICAgY29weV9mcm9tX3JlZmVyZW5jZS50YWJsZUlkKSksCiAgICAgICAgX2JxX3V1aWQoCiAgICAgICAgICAgICclczolcy4lcycgJSAoCiAgICAgICAgICAgICAgICBjb3B5X3RvX3JlZmVyZW5jZS5wcm9qZWN0SWQsCiAgICAgICAgICAgICAgICBjb3B5X3RvX3JlZmVyZW5jZS5kYXRhc2V0SWQsCiAgICAgICAgICAgICAgICBjb3B5X3RvX3JlZmVyZW5jZS50YWJsZUlkKSkpCgogICAgX0xPR0dFUi5pbmZvKAogICAgICAgICJUcmlnZ2VyaW5nIGNvcHkgam9iIGZyb20gJXMgdG8gJXMiLAogICAgICAgIGNvcHlfZnJvbV9yZWZlcmVuY2UsCiAgICAgICAgY29weV90b19yZWZlcmVuY2UpCiAgICBpZiBjb3B5X3RvX3JlZmVyZW5jZS50YWJsZUlkIG5vdCBpbiBzZWxmLl9vYnNlcnZlZF90YWJsZXM6CiAgICAgICMgV2hlbiB0aGUgd3JpdGVfZGlzcG9zaXRpb24gZm9yIGEgam9iIGlzIFdSSVRFX1RSVU5DQVRFLAogICAgICAjIG11bHRpcGxlIGNvcHkgam9icyB0byB0aGUgc2FtZSBkZXN0aW5hdGlvbiBjYW4gc3R1bXAgb24KICAgICAgIyBlYWNoIG90aGVyLCB0cnVuY2F0ZSBkYXRhLCBhbmQgd3JpdGUgdG8gdGhlIEJRIHRhYmxlIG92ZXIgYW5kCiAgICAgICMgb3Zlci4KICAgICAgIyBUaHVzLCB0aGUgZmlyc3QgY29weSBqb2IgcnVucyB3aXRoIHRoZSB1c2VyJ3Mgd3JpdGVfZGlzcG9zaXRpb24sCiAgICAgICMgYnV0IGFmdGVyd2FyZHMsIGFsbCBqb2JzIG11c3QgYWx3YXlzIFdSSVRFX0FQUEVORCB0byB0aGUgdGFibGUuCiAgICAgICMgSWYgdGhleSBkbyBub3QsIHN1YnNlcXVlbnQgY29weSBqb2JzIHdpbGwgY2xlYXIgb3V0IGRhdGEgYXBwZW5kZWQKICAgICAgIyBieSBwcmV2aW91cyBqb2JzLgogICAgICB3cml0ZV9kaXNwb3NpdGlvbiA9IHNlbGYud3JpdGVfZGlzcG9zaXRpb24KICAgICAgd2FpdF9mb3Jfam9iID0gVHJ1ZQogICAgICBzZWxmLl9vYnNlcnZlZF90YWJsZXMuYWRkKGNvcHlfdG9fcmVmZXJlbmNlLnRhYmxlSWQpCiAgICBlbHNlOgogICAgICB3YWl0X2Zvcl9qb2IgPSBGYWxzZQogICAgICB3cml0ZV9kaXNwb3NpdGlvbiA9ICdXUklURV9BUFBFTkQnCgogICAgam9iX3JlZmVyZW5jZSA9IHNlbGYuYnFfd3JhcHBlci5faW5zZXJ0X2NvcHlfam9iKAogICAgICAgIGNvcHlfdG9fcmVmZXJlbmNlLnByb2plY3RJZCwKICAgICAgICBjb3B5X2pvYl9uYW1lLAogICAgICAgIGNvcHlfZnJvbV9yZWZlcmVuY2UsCiAgICAgICAgY29weV90b19yZWZlcmVuY2UsCiAgICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uPXNlbGYuY3JlYXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uPXdyaXRlX2Rpc3Bvc2l0aW9uKQoKICAgIGlmIHdhaXRfZm9yX2pvYjoKICAgICAgc2VsZi5icV93cmFwcGVyLndhaXRfZm9yX2JxX2pvYihqb2JfcmVmZXJlbmNlLCBzbGVlcF9kdXJhdGlvbl9zZWM9MTApCgogICAgeWllbGQgKGRlc3RpbmF0aW9uLCBqb2JfcmVmZXJlbmNlKQoKCmNsYXNzIFRyaWdnZXJMb2FkSm9icyhiZWFtLkRvRm4pOgogICIiIlRyaWdnZXJzIHRoZSBpbXBvcnQgam9icyB0byBCUS4KCiAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICIiIgoKICBURU1QX1RBQkxFUyA9ICdUZW1wb3JhcnlUYWJsZXMnCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgc2NoZW1hPU5vbmUsCiAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbj1Ob25lLAogICAgICB3cml0ZV9kaXNwb3NpdGlvbj1Ob25lLAogICAgICB0ZXN0X2NsaWVudD1Ob25lLAogICAgICB0ZW1wb3JhcnlfdGFibGVzPUZhbHNlLAogICAgICBhZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnM9Tm9uZSk6CiAgICBzZWxmLnNjaGVtYSA9IHNjaGVtYQogICAgc2VsZi50ZXN0X2NsaWVudCA9IHRlc3RfY2xpZW50CiAgICBzZWxmLnRlbXBvcmFyeV90YWJsZXMgPSB0ZW1wb3JhcnlfdGFibGVzCiAgICBzZWxmLmFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycyA9IGFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycyBvciB7fQogICAgaWYgc2VsZi50ZW1wb3JhcnlfdGFibGVzOgogICAgICAjIElmIHdlIGFyZSBsb2FkaW5nIGludG8gdGVtcG9yYXJ5IHRhYmxlcywgd2UgcmVseSBvbiB0aGUgZGVmYXVsdCBjcmVhdGUKICAgICAgIyBhbmQgd3JpdGUgZGlzcG9zaXRpb25zLCB3aGljaCBtZWFuIHRoYXQgYSBuZXcgdGFibGUgd2lsbCBiZSBjcmVhdGVkLgogICAgICBzZWxmLmNyZWF0ZV9kaXNwb3NpdGlvbiA9IE5vbmUKICAgICAgc2VsZi53cml0ZV9kaXNwb3NpdGlvbiA9IE5vbmUKICAgIGVsc2U6CiAgICAgIHNlbGYuY3JlYXRlX2Rpc3Bvc2l0aW9uID0gY3JlYXRlX2Rpc3Bvc2l0aW9uCiAgICAgIHNlbGYud3JpdGVfZGlzcG9zaXRpb24gPSB3cml0ZV9kaXNwb3NpdGlvbgoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmVzdWx0ID0gewogICAgICAgICdjcmVhdGVfZGlzcG9zaXRpb24nOiBzdHIoc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24pLAogICAgICAgICd3cml0ZV9kaXNwb3NpdGlvbic6IHN0cihzZWxmLndyaXRlX2Rpc3Bvc2l0aW9uKQogICAgfQogICAgcmVzdWx0WydzY2hlbWEnXSA9IHN0cihzZWxmLnNjaGVtYSkKCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLmJxX3dyYXBwZXIgPSBiaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIoY2xpZW50PXNlbGYudGVzdF9jbGllbnQpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIGxvYWRfam9iX25hbWVfcHJlZml4LCAqc2NoZW1hX3NpZGVfaW5wdXRzKToKICAgICMgRWFjaCBsb2FkIGpvYiBpcyBhc3N1bWVkIHRvIGhhdmUgZmlsZXMgcmVzcGVjdGluZyB0aGVzZSBjb25zdHJhaW50czoKICAgICMgMS4gVG90YWwgc2l6ZSBvZiBhbGwgZmlsZXMgPCAxNSBUQiAoTWF4IHNpemUgZm9yIGxvYWQgam9icykKICAgICMgMi4gVG90YWwgbm8uIG9mIGZpbGVzIGluIGEgc2luZ2xlIGxvYWQgam9iIDwgMTAsMDAwCiAgICAjIFRoaXMgYXNzdW1wdGlvbiBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgc2luZ2xlIGxvYWQgam9iCiAgICAjIHRyaWdnZXJlZCBmb3IgZWFjaCBwYXJ0aXRpb24gb2YgZmlsZXMuCiAgICBkZXN0aW5hdGlvbiA9IGVsZW1lbnRbMF0KICAgIGZpbGVzID0gZWxlbWVudFsxXQoKICAgIGlmIGNhbGxhYmxlKHNlbGYuc2NoZW1hKToKICAgICAgc2NoZW1hID0gc2VsZi5zY2hlbWEoZGVzdGluYXRpb24sICpzY2hlbWFfc2lkZV9pbnB1dHMpCiAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5zY2hlbWEsIHZwLlZhbHVlUHJvdmlkZXIpOgogICAgICBzY2hlbWEgPSBzZWxmLnNjaGVtYS5nZXQoKQogICAgZWxzZToKICAgICAgc2NoZW1hID0gc2VsZi5zY2hlbWEKCiAgICBpZiBjYWxsYWJsZShzZWxmLmFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycyk6CiAgICAgIGFkZGl0aW9uYWxfcGFyYW1ldGVycyA9IHNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzKGRlc3RpbmF0aW9uKQogICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzLCB2cC5WYWx1ZVByb3ZpZGVyKToKICAgICAgYWRkaXRpb25hbF9wYXJhbWV0ZXJzID0gc2VsZi5hZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnMuZ2V0KCkKICAgIGVsc2U6CiAgICAgIGFkZGl0aW9uYWxfcGFyYW1ldGVycyA9IHNlbGYuYWRkaXRpb25hbF9icV9wYXJhbWV0ZXJzCgogICAgdGFibGVfcmVmZXJlbmNlID0gYmlncXVlcnlfdG9vbHMucGFyc2VfdGFibGVfcmVmZXJlbmNlKGRlc3RpbmF0aW9uKQogICAgaWYgdGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCBpcyBOb25lOgogICAgICB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkID0gdnAuUnVudGltZVZhbHVlUHJvdmlkZXIuZ2V0X3ZhbHVlKAogICAgICAgICAgJ3Byb2plY3QnLCBzdHIsICcnKQogICAgIyBMb2FkIGpvYnMgZm9yIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGFyZSBhbHdheXMgdHJpZ2dlcmVkIGZyb20gdGhlIHNhbWUKICAgICMgd29ya2VyLiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIGdlbmVyYXRlIGEgZGV0ZXJtaW5pc3RpYyBudW1iZXJlZCBqb2IgaWQsCiAgICAjIGFuZCBub3QgbmVlZCB0byB3b3JyeS4KICAgIGRlc3RpbmF0aW9uX2hhc2ggPSBfYnFfdXVpZCgKICAgICAgICAnJXM6JXMuJXMnICUgKAogICAgICAgICAgICB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgICB0YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgICB0YWJsZV9yZWZlcmVuY2UudGFibGVJZCkpCiAgICB1aWQgPSBfYnFfdXVpZCgpCiAgICBqb2JfbmFtZSA9ICclc18lc18lcycgJSAobG9hZF9qb2JfbmFtZV9wcmVmaXgsIGRlc3RpbmF0aW9uX2hhc2gsIHVpZCkKICAgIF9MT0dHRVIuZGVidWcoCiAgICAgICAgJ0xvYWQgam9iIGhhcyAlcyBmaWxlcy4gSm9iIG5hbWUgaXMgJXMuJywgbGVuKGZpbGVzKSwgam9iX25hbWUpCgogICAgY3JlYXRlX2Rpc3Bvc2l0aW9uID0gc2VsZi5jcmVhdGVfZGlzcG9zaXRpb24KICAgIGlmIHNlbGYudGVtcG9yYXJ5X3RhYmxlczoKICAgICAgIyBJZiB3ZSBhcmUgdXNpbmcgdGVtcG9yYXJ5IHRhYmxlcywgdGhlbiB3ZSBtdXN0IGFsd2F5cyBjcmVhdGUgdGhlCiAgICAgICMgdGVtcG9yYXJ5IHRhYmxlcywgc28gd2UgcmVwbGFjZSB0aGUgY3JlYXRlX2Rpc3Bvc2l0aW9uLgogICAgICBjcmVhdGVfZGlzcG9zaXRpb24gPSAnQ1JFQVRFX0lGX05FRURFRCcKICAgICAgIyBGb3IgdGVtcG9yYXJ5IHRhYmxlcywgd2UgY3JlYXRlIGEgbmV3IHRhYmxlIHdpdGggdGhlIG5hbWUgd2l0aCBKb2JJZC4KICAgICAgdGFibGVfcmVmZXJlbmNlLnRhYmxlSWQgPSBqb2JfbmFtZQogICAgICB5aWVsZCBwdmFsdWUuVGFnZ2VkT3V0cHV0KFRyaWdnZXJMb2FkSm9icy5URU1QX1RBQkxFUywgdGFibGVfcmVmZXJlbmNlKQoKICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAnVHJpZ2dlcmluZyBqb2IgJXMgdG8gbG9hZCBkYXRhIHRvIEJpZ1F1ZXJ5IHRhYmxlICVzLicKICAgICAgICAnU2NoZW1hOiAlcy4gQWRkaXRpb25hbCBwYXJhbWV0ZXJzOiAlcycsCiAgICAgICAgam9iX25hbWUsCiAgICAgICAgdGFibGVfcmVmZXJlbmNlLAogICAgICAgIHNjaGVtYSwKICAgICAgICBhZGRpdGlvbmFsX3BhcmFtZXRlcnMpCiAgICBqb2JfcmVmZXJlbmNlID0gc2VsZi5icV93cmFwcGVyLnBlcmZvcm1fbG9hZF9qb2IoCiAgICAgICAgdGFibGVfcmVmZXJlbmNlLAogICAgICAgIGZpbGVzLAogICAgICAgIGpvYl9uYW1lLAogICAgICAgIHNjaGVtYT1zY2hlbWEsCiAgICAgICAgd3JpdGVfZGlzcG9zaXRpb249c2VsZi53cml0ZV9kaXNwb3NpdGlvbiwKICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb249Y3JlYXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgIGFkZGl0aW9uYWxfbG9hZF9wYXJhbWV0ZXJzPWFkZGl0aW9uYWxfcGFyYW1ldGVycykKICAgIHlpZWxkIChkZXN0aW5hdGlvbiwgam9iX3JlZmVyZW5jZSkKCgpjbGFzcyBQYXJ0aXRpb25GaWxlcyhiZWFtLkRvRm4pOgoKICBNVUxUSVBMRV9QQVJUSVRJT05TX1RBRyA9ICdNVUxUSVBMRV9QQVJUSVRJT05TJwogIFNJTkdMRV9QQVJUSVRJT05fVEFHID0gJ1NJTkdMRV9QQVJUSVRJT04nCgogIGNsYXNzIFBhcnRpdGlvbihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heF9zaXplLCBtYXhfZmlsZXMsIGZpbGVzPU5vbmUsIHNpemU9MCk6CiAgICAgIHNlbGYubWF4X3NpemUgPSBtYXhfc2l6ZQogICAgICBzZWxmLm1heF9maWxlcyA9IG1heF9maWxlcwogICAgICBzZWxmLmZpbGVzID0gZmlsZXMgaWYgZmlsZXMgaXMgbm90IE5vbmUgZWxzZSBbXQogICAgICBzZWxmLnNpemUgPSBzaXplCgogICAgZGVmIGNhbl9hY2NlcHQoc2VsZiwgZmlsZV9zaXplLCBub19vZl9maWxlcz0xKToKICAgICAgaWYgKCgoc2VsZi5zaXplICsgZmlsZV9zaXplKSA8PSBzZWxmLm1heF9zaXplKSBhbmQKICAgICAgICAgICgobGVuKHNlbGYuZmlsZXMpICsgbm9fb2ZfZmlsZXMpIDw9IHNlbGYubWF4X2ZpbGVzKSk6CiAgICAgICAgcmV0dXJuIFRydWUKICAgICAgZWxzZToKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICBkZWYgYWRkKHNlbGYsIGZpbGVfcGF0aCwgZmlsZV9zaXplKToKICAgICAgc2VsZi5maWxlcy5hcHBlbmQoZmlsZV9wYXRoKQogICAgICBzZWxmLnNpemUgKz0gZmlsZV9zaXplCgogIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhfcGFydGl0aW9uX3NpemUsIG1heF9maWxlc19wZXJfcGFydGl0aW9uKToKICAgIHNlbGYubWF4X3BhcnRpdGlvbl9zaXplID0gbWF4X3BhcnRpdGlvbl9zaXplCiAgICBzZWxmLm1heF9maWxlc19wZXJfcGFydGl0aW9uID0gbWF4X2ZpbGVzX3Blcl9wYXJ0aXRpb24KCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBkZXN0aW5hdGlvbiA9IGVsZW1lbnRbMF0KICAgIGZpbGVzID0gZWxlbWVudFsxXQogICAgcGFydGl0aW9ucyA9IFtdCgogICAgbGF0ZXN0X3BhcnRpdGlvbiA9IFBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbigKICAgICAgICBzZWxmLm1heF9wYXJ0aXRpb25fc2l6ZSwgc2VsZi5tYXhfZmlsZXNfcGVyX3BhcnRpdGlvbikKCiAgICBmb3IgZmlsZV9wYXRoLCBmaWxlX3NpemUgaW4gZmlsZXM6CiAgICAgIGlmIGxhdGVzdF9wYXJ0aXRpb24uY2FuX2FjY2VwdChmaWxlX3NpemUpOgogICAgICAgIGxhdGVzdF9wYXJ0aXRpb24uYWRkKGZpbGVfcGF0aCwgZmlsZV9zaXplKQogICAgICBlbHNlOgogICAgICAgIHBhcnRpdGlvbnMuYXBwZW5kKGxhdGVzdF9wYXJ0aXRpb24uZmlsZXMpCiAgICAgICAgbGF0ZXN0X3BhcnRpdGlvbiA9IFBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbigKICAgICAgICAgICAgc2VsZi5tYXhfcGFydGl0aW9uX3NpemUsIHNlbGYubWF4X2ZpbGVzX3Blcl9wYXJ0aXRpb24pCiAgICAgICAgbGF0ZXN0X3BhcnRpdGlvbi5hZGQoZmlsZV9wYXRoLCBmaWxlX3NpemUpCiAgICBwYXJ0aXRpb25zLmFwcGVuZChsYXRlc3RfcGFydGl0aW9uLmZpbGVzKQoKICAgIGlmIGxlbihwYXJ0aXRpb25zKSA+IDE6CiAgICAgIG91dHB1dF90YWcgPSBQYXJ0aXRpb25GaWxlcy5NVUxUSVBMRV9QQVJUSVRJT05TX1RBRwogICAgZWxzZToKICAgICAgb3V0cHV0X3RhZyA9IFBhcnRpdGlvbkZpbGVzLlNJTkdMRV9QQVJUSVRJT05fVEFHCgogICAgZm9yIHBhcnRpdGlvbiBpbiBwYXJ0aXRpb25zOgogICAgICB5aWVsZCBwdmFsdWUuVGFnZ2VkT3V0cHV0KG91dHB1dF90YWcsIChkZXN0aW5hdGlvbiwgcGFydGl0aW9uKSkKCgpjbGFzcyBXYWl0Rm9yQlFKb2JzKGJlYW0uRG9Gbik6CiAgIiIiVGFrZXMgaW4gYSBzZXJpZXMgb2YgQlEgam9iIG5hbWVzIGFzIHNpZGUgaW5wdXQsIGFuZCB3YWl0cyBmb3IgYWxsIG9mIHRoZW0uCgogIElmIGFueSBqb2IgZmFpbHMsIGl0IHdpbGwgZmFpbC4gSWYgYWxsIGpvYnMgc3VjY2VlZCwgaXQgd2lsbCBzdWNjZWVkLgoKICBFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2xpZW50PU5vbmUpOgogICAgc2VsZi50ZXN0X2NsaWVudCA9IHRlc3RfY2xpZW50CgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLmJxX3dyYXBwZXIgPSBiaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIoY2xpZW50PXNlbGYudGVzdF9jbGllbnQpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIGRlc3RfaWRzX2xpc3QpOgogICAgam9iX3JlZmVyZW5jZXMgPSBbZWxtWzFdIGZvciBlbG0gaW4gZGVzdF9pZHNfbGlzdF0KICAgIGZvciByZWYgaW4gam9iX3JlZmVyZW5jZXM6CiAgICAgICMgV2UgbXVzdCBwb2xsIHJlcGVhdGVkbHkgdW50aWwgdGhlIGpvYiBmaW5pc2hlcyBvciBmYWlscywgdGh1cyBzZXR0aW5nCiAgICAgICMgbWF4X3JldHJpZXMgdG8gMC4KICAgICAgc2VsZi5icV93cmFwcGVyLndhaXRfZm9yX2JxX2pvYihyZWYsIHNsZWVwX2R1cmF0aW9uX3NlYz0xMCwgbWF4X3JldHJpZXM9MCkKCiAgICByZXR1cm4gZGVzdF9pZHNfbGlzdCAgIyBQYXNzIHRoZSBsaXN0IG9mIGRlc3RpbmF0aW9uLWpvYnMgZG93bnN0cmVhbQoKCmNsYXNzIERlbGV0ZVRhYmxlc0ZuKGJlYW0uRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2xpZW50PU5vbmUpOgogICAgc2VsZi50ZXN0X2NsaWVudCA9IHRlc3RfY2xpZW50CgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLmJxX3dyYXBwZXIgPSBiaWdxdWVyeV90b29scy5CaWdRdWVyeVdyYXBwZXIoY2xpZW50PXNlbGYudGVzdF9jbGllbnQpCgogIGRlZiBwcm9jZXNzKHNlbGYsIHRhYmxlX3JlZmVyZW5jZSk6CiAgICBfTE9HR0VSLmluZm8oIkRlbGV0aW5nIHRhYmxlICVzIiwgdGFibGVfcmVmZXJlbmNlKQogICAgdGFibGVfcmVmZXJlbmNlID0gYmlncXVlcnlfdG9vbHMucGFyc2VfdGFibGVfcmVmZXJlbmNlKHRhYmxlX3JlZmVyZW5jZSkKICAgIHNlbGYuYnFfd3JhcHBlci5fZGVsZXRlX3RhYmxlKAogICAgICAgIHRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQsCiAgICAgICAgdGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwKICAgICAgICB0YWJsZV9yZWZlcmVuY2UudGFibGVJZCkKCgpjbGFzcyBCaWdRdWVyeUJhdGNoRmlsZUxvYWRzKGJlYW0uUFRyYW5zZm9ybSk6CiAgIiIiVGFrZXMgaW4gYSBzZXQgb2YgZWxlbWVudHMsIGFuZCBpbnNlcnRzIHRoZW0gdG8gQmlnUXVlcnkgdmlhIGJhdGNoIGxvYWRzLgoKICAiIiIKCiAgREVTVElOQVRJT05fSk9CSURfUEFJUlMgPSAnZGVzdGluYXRpb25fbG9hZF9qb2JpZF9wYWlycycKICBERVNUSU5BVElPTl9GSUxFX1BBSVJTID0gJ2Rlc3RpbmF0aW9uX2ZpbGVfcGFpcnMnCiAgREVTVElOQVRJT05fQ09QWV9KT0JJRF9QQUlSUyA9ICdkZXN0aW5hdGlvbl9jb3B5X2pvYmlkX3BhaXJzJwoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGRlc3RpbmF0aW9uLAogICAgICBzY2hlbWE9Tm9uZSwKICAgICAgY3VzdG9tX2djc190ZW1wX2xvY2F0aW9uPU5vbmUsCiAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbj1Ob25lLAogICAgICB3cml0ZV9kaXNwb3NpdGlvbj1Ob25lLAogICAgICB0cmlnZ2VyaW5nX2ZyZXF1ZW5jeT1Ob25lLAogICAgICBjb2Rlcj1Ob25lLAogICAgICBtYXhfZmlsZV9zaXplPU5vbmUsCiAgICAgIG1heF9maWxlc19wZXJfYnVuZGxlPU5vbmUsCiAgICAgIG1heF9wYXJ0aXRpb25fc2l6ZT1Ob25lLAogICAgICBtYXhfZmlsZXNfcGVyX3BhcnRpdGlvbj1Ob25lLAogICAgICBhZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnM9Tm9uZSwKICAgICAgdGFibGVfc2lkZV9pbnB1dHM9Tm9uZSwKICAgICAgc2NoZW1hX3NpZGVfaW5wdXRzPU5vbmUsCiAgICAgIHRlc3RfY2xpZW50PU5vbmUsCiAgICAgIHZhbGlkYXRlPVRydWUsCiAgICAgIGlzX3N0cmVhbWluZ19waXBlbGluZT1GYWxzZSk6CiAgICBzZWxmLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb24KICAgIHNlbGYuY3JlYXRlX2Rpc3Bvc2l0aW9uID0gY3JlYXRlX2Rpc3Bvc2l0aW9uCiAgICBzZWxmLndyaXRlX2Rpc3Bvc2l0aW9uID0gd3JpdGVfZGlzcG9zaXRpb24KICAgIHNlbGYudHJpZ2dlcmluZ19mcmVxdWVuY3kgPSB0cmlnZ2VyaW5nX2ZyZXF1ZW5jeQogICAgc2VsZi5tYXhfZmlsZV9zaXplID0gbWF4X2ZpbGVfc2l6ZSBvciBfREVGQVVMVF9NQVhfRklMRV9TSVpFCiAgICBzZWxmLm1heF9maWxlc19wZXJfYnVuZGxlID0gKAogICAgICAgIG1heF9maWxlc19wZXJfYnVuZGxlIG9yIF9ERUZBVUxUX01BWF9XUklURVJTX1BFUl9CVU5ETEUpCiAgICBzZWxmLm1heF9wYXJ0aXRpb25fc2l6ZSA9IG1heF9wYXJ0aXRpb25fc2l6ZSBvciBfTUFYSU1VTV9MT0FEX1NJWkUKICAgIHNlbGYubWF4X2ZpbGVzX3Blcl9wYXJ0aXRpb24gPSAoCiAgICAgICAgbWF4X2ZpbGVzX3Blcl9wYXJ0aXRpb24gb3IgX01BWElNVU1fU09VUkNFX1VSSVMpCiAgICBpZiAoaXNpbnN0YW5jZShjdXN0b21fZ2NzX3RlbXBfbG9jYXRpb24sIHN0cikgb3IKICAgICAgICBjdXN0b21fZ2NzX3RlbXBfbG9jYXRpb24gaXMgTm9uZSk6CiAgICAgIHNlbGYuX2N1c3RvbV9nY3NfdGVtcF9sb2NhdGlvbiA9IHZwLlN0YXRpY1ZhbHVlUHJvdmlkZXIoCiAgICAgICAgICBzdHIsIGN1c3RvbV9nY3NfdGVtcF9sb2NhdGlvbiBvciAnJykKICAgIGVsaWYgaXNpbnN0YW5jZShjdXN0b21fZ2NzX3RlbXBfbG9jYXRpb24sIHZwLlZhbHVlUHJvdmlkZXIpOgogICAgICBzZWxmLl9jdXN0b21fZ2NzX3RlbXBfbG9jYXRpb24gPSBjdXN0b21fZ2NzX3RlbXBfbG9jYXRpb24KICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2N1c3RvbV9nY3NfdGVtcF9sb2NhdGlvbiBtdXN0IGJlIHN0ciBvciBWYWx1ZVByb3ZpZGVyJykKCiAgICBzZWxmLnRlc3RfY2xpZW50ID0gdGVzdF9jbGllbnQKICAgIHNlbGYuc2NoZW1hID0gc2NoZW1hCiAgICBzZWxmLmNvZGVyID0gY29kZXIgb3IgYmlncXVlcnlfdG9vbHMuUm93QXNEaWN0SnNvbkNvZGVyKCkKCiAgICAjIElmIHdlIGhhdmUgbXVsdGlwbGUgZGVzdGluYXRpb25zLCB0aGVuIHdlIHdpbGwgaGF2ZSBtdWx0aXBsZSBsb2FkIGpvYnMsCiAgICAjIHRodXMgd2Ugd2lsbCBuZWVkIHRlbXBvcmFyeSB0YWJsZXMgZm9yIGF0b21pY2l0eS4KICAgIHNlbGYuZHluYW1pY19kZXN0aW5hdGlvbnMgPSBib29sKGNhbGxhYmxlKGRlc3RpbmF0aW9uKSkKCiAgICBzZWxmLmFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycyA9IGFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycyBvciB7fQogICAgc2VsZi50YWJsZV9zaWRlX2lucHV0cyA9IHRhYmxlX3NpZGVfaW5wdXRzIG9yICgpCiAgICBzZWxmLnNjaGVtYV9zaWRlX2lucHV0cyA9IHNjaGVtYV9zaWRlX2lucHV0cyBvciAoKQoKICAgIHNlbGYuaXNfc3RyZWFtaW5nX3BpcGVsaW5lID0gaXNfc3RyZWFtaW5nX3BpcGVsaW5lCiAgICBzZWxmLl92YWxpZGF0ZSA9IHZhbGlkYXRlCiAgICBpZiBzZWxmLl92YWxpZGF0ZToKICAgICAgc2VsZi52ZXJpZnkoKQoKICBkZWYgdmVyaWZ5KHNlbGYpOgogICAgaWYgKGlzaW5zdGFuY2Uoc2VsZi5fY3VzdG9tX2djc190ZW1wX2xvY2F0aW9uLmdldCgpLCB2cC5TdGF0aWNWYWx1ZVByb3ZpZGVyKQogICAgICAgIGFuZCBub3Qgc2VsZi5fY3VzdG9tX2djc190ZW1wX2xvY2F0aW9uLmdldCgpLnN0YXJ0c3dpdGgoJ2dzOi8vJykpOgogICAgICAjIE9ubHkgZmFpbCBpZiB0aGUgY3VzdG9tIGxvY2F0aW9uIGlzIHByb3ZpZGVkLCBhbmQgaXQgaXMgbm90IGEgR0NTCiAgICAgICMgbG9jYXRpb24uCiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnSW52YWxpZCBHQ1MgbG9jYXRpb246ICVyLlxuJwogICAgICAgICAgJ1dyaXRpbmcgdG8gQmlnUXVlcnkgd2l0aCBGSUxFX0xPQURTIG1ldGhvZCByZXF1aXJlcyBhICcKICAgICAgICAgICdHQ1MgbG9jYXRpb24gdG8gYmUgcHJvdmlkZWQgdG8gd3JpdGUgZmlsZXMgdG8gYmUgJwogICAgICAgICAgJ2xvYWRlZCBpbnRvIEJpZ1F1ZXJ5LiBQbGVhc2UgcHJvdmlkZSBhIEdDUyBidWNrZXQsIG9yICcKICAgICAgICAgICdwYXNzIG1ldGhvZD0iU1RSRUFNSU5HX0lOU0VSVFMiIHRvIFdyaXRlVG9CaWdRdWVyeS4nICUKICAgICAgICAgIHNlbGYuX2N1c3RvbV9nY3NfdGVtcF9sb2NhdGlvbi5nZXQoKSkKICAgIGlmIHNlbGYuaXNfc3RyZWFtaW5nX3BpcGVsaW5lIGFuZCBub3Qgc2VsZi50cmlnZ2VyaW5nX2ZyZXF1ZW5jeToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICd0cmlnZ2VyaW5nX2ZyZXF1ZW5jeSBtdXN0IGJlIHNwZWNpZmllZCB0byB1c2UgZmlsZScKICAgICAgICAgICdsb2FkcyBpbiBzdHJlYW1pbmcnKQogICAgZWxpZiBub3Qgc2VsZi5pc19zdHJlYW1pbmdfcGlwZWxpbmUgYW5kIHNlbGYudHJpZ2dlcmluZ19mcmVxdWVuY3k6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAndHJpZ2dlcmluZ19mcmVxdWVuY3kgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGZpbGUnCiAgICAgICAgICAnbG9hZHMgaW4gc3RyZWFtaW5nJykKCiAgZGVmIF93aW5kb3dfZm4oc2VsZik6CiAgICAiIiJTZXQgdGhlIGNvcnJlY3QgV2luZG93SW50byBQVHJhbnNmb3JtIiIiCgogICAgIyBUaGUgdXNlci1zdXBwbGllZCB0cmlnZ2VyaW5nX2ZyZXF1ZW5jeSBpcyBvZnRlbiBjaG9zZW4gdG8gY29udHJvbCBob3cKICAgICMgbWFueSBCaWdRdWVyeSBsb2FkIGpvYnMgYXJlIHRyaWdnZXJlZCwgdG8gcHJldmVudCBnb2luZyBvdmVyIEJpZ1F1ZXJ5J3MKICAgICMgZGFpbHkgcXVvdGEgZm9yIGxvYWQgam9icy4gSWYgdGhpcyBpcyBzZXQgdG8gYSBsYXJnZSB2YWx1ZSwgY3VycmVudGx5IHdlCiAgICAjIGhhdmUgdG8gYnVmZmVyIGFsbCB0aGUgZGF0YSB1bnRpbCB0aGUgdHJpZ2dlciBmaXJlcy4gSW5zdGVhZCB3ZSBlbnN1cmUKICAgICMgdGhhdCB0aGUgZmlsZXMgYXJlIHdyaXR0ZW4gaWYgYSB0aHJlc2hvbGQgbnVtYmVyIG9mIHJlY29yZHMgYXJlIHJlYWR5LgogICAgIyBXZSB1c2Ugb25seSB0aGUgdXNlci1zdXBwbGllZCB0cmlnZ2VyIG9uIHRoZSBhY3R1YWwgQmlnUXVlcnkgbG9hZC4KICAgICMgVGhpcyBhbGxvd3MgdXMgdG8gb2ZmbG9hZCB0aGUgZGF0YSB0byB0aGUgZmlsZXN5c3RlbS4KICAgIGlmIHNlbGYuaXNfc3RyZWFtaW5nX3BpcGVsaW5lOgogICAgICByZXR1cm4gYmVhbS5XaW5kb3dJbnRvKGJlYW0ud2luZG93Lkdsb2JhbFdpbmRvd3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyPXRyaWdnZXIuUmVwZWF0ZWRseSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5BZnRlckFueSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIuQWZ0ZXJQcm9jZXNzaW5nVGltZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJpbmdfZnJlcXVlbmN5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIuQWZ0ZXJDb3VudCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRklMRV9UUklHR0VSSU5HX1JFQ09SRF9DT1VOVCkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRpb25fbW9kZT10cmlnZ2VyLkFjY3VtdWxhdGlvbk1vZGVcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5ESVNDQVJESU5HKQogICAgZWxzZToKICAgICAgcmV0dXJuIGJlYW0uV2luZG93SW50byhiZWFtLndpbmRvdy5HbG9iYWxXaW5kb3dzKCkpCgogIGRlZiBfd3JpdGVfZmlsZXMoc2VsZiwgZGVzdGluYXRpb25fZGF0YV9rdl9wYywgZmlsZV9wcmVmaXhfcGN2KToKICAgIG91dHB1dHMgPSAoCiAgICAgICAgZGVzdGluYXRpb25fZGF0YV9rdl9wYwogICAgICAgIHwgYmVhbS5QYXJEbygKICAgICAgICAgICAgV3JpdGVSZWNvcmRzVG9GaWxlKAogICAgICAgICAgICAgICAgbWF4X2ZpbGVzX3Blcl9idW5kbGU9c2VsZi5tYXhfZmlsZXNfcGVyX2J1bmRsZSwKICAgICAgICAgICAgICAgIG1heF9maWxlX3NpemU9c2VsZi5tYXhfZmlsZV9zaXplLAogICAgICAgICAgICAgICAgY29kZXI9c2VsZi5jb2RlciksCiAgICAgICAgICAgIGZpbGVfcHJlZml4PWZpbGVfcHJlZml4X3Bjdikud2l0aF9vdXRwdXRzKAogICAgICAgICAgICAgICAgV3JpdGVSZWNvcmRzVG9GaWxlLlVOV1JJVFRFTl9SRUNPUkRfVEFHLAogICAgICAgICAgICAgICAgV3JpdGVSZWNvcmRzVG9GaWxlLldSSVRURU5fRklMRV9UQUcpKQoKICAgICMgQSBQQ29sbGVjdGlvbiBvZiAoZGVzdGluYXRpb24sIGZpbGUpIHR1cGxlcy4gSXQgbGlzdHMgZmlsZXMgd2l0aCByZWNvcmRzLAogICAgIyBhbmQgdGhlIGRlc3RpbmF0aW9uIGVhY2ggZmlsZSBpcyBtZWFudCB0byBiZSBpbXBvcnRlZCBpbnRvLgogICAgZGVzdGluYXRpb25fZmlsZXNfa3ZfcGMgPSBvdXRwdXRzW1dyaXRlUmVjb3Jkc1RvRmlsZS5XUklUVEVOX0ZJTEVfVEFHXQoKICAgICMgQSBQQ29sbGVjdGlvbiBvZiAoZGVzdGluYXRpb24sIHJlY29yZCkgdHVwbGVzLiBUaGVzZSBhcmUgbGF0ZXIgc2hhcmRlZCwKICAgICMgZ3JvdXBlZCwgYW5kIGFsbCByZWNvcmRzIGZvciBlYWNoIGRlc3RpbmF0aW9uLXNoYXJkIGlzIHdyaXR0ZW4gdG8gZmlsZXMuCiAgICAjIFRoaXMgUENvbGxlY3Rpb24gaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugbm90IGFsbCByZWNvcmRzIGNhbiBiZSB3cml0dGVuIGludG8KICAgICMgZmlsZXMgaW4gYGBXcml0ZVJlY29yZHNUb0ZpbGVgYC4KICAgIHVud3JpdHRlbl9yZWNvcmRzX3BjID0gb3V0cHV0c1tXcml0ZVJlY29yZHNUb0ZpbGUuVU5XUklUVEVOX1JFQ09SRF9UQUddCgogICAgbW9yZV9kZXN0aW5hdGlvbl9maWxlc19rdl9wYyA9ICgKICAgICAgICB1bndyaXR0ZW5fcmVjb3Jkc19wYwogICAgICAgIHwgYmVhbS5QYXJEbyhfU2hhcmREZXN0aW5hdGlvbnMoKSkKICAgICAgICB8ICJHcm91cFNoYXJkZWRSb3dzIiA+PiBiZWFtLkdyb3VwQnlLZXkoKQogICAgICAgIHwgIkRyb3BTaGFyZE51bWJlciIgPj4gYmVhbS5NYXAobGFtYmRhIHg6ICh4WzBdWzBdLCB4WzFdKSkKICAgICAgICB8ICJXcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxlIiA+PiBiZWFtLlBhckRvKAogICAgICAgICAgICBXcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxlKGNvZGVyPXNlbGYuY29kZXIpLAogICAgICAgICAgICBmaWxlX3ByZWZpeD1maWxlX3ByZWZpeF9wY3YpKQoKICAgIGFsbF9kZXN0aW5hdGlvbl9maWxlX3BhaXJzX3BjID0gKAogICAgICAgIChkZXN0aW5hdGlvbl9maWxlc19rdl9wYywgbW9yZV9kZXN0aW5hdGlvbl9maWxlc19rdl9wYykKICAgICAgICB8ICJEZXN0aW5hdGlvbkZpbGVzVW5pb24iID4+IGJlYW0uRmxhdHRlbigpKQoKICAgIGlmIHNlbGYuaXNfc3RyZWFtaW5nX3BpcGVsaW5lOgogICAgICAjIEFwcGx5IHRoZSB1c2VyJ3MgdHJpZ2dlciBiYWNrIGJlZm9yZSB3ZSBzdGFydCB0cmlnZ2VyaW5nIGxvYWQgam9icwogICAgICBhbGxfZGVzdGluYXRpb25fZmlsZV9wYWlyc19wYyA9ICgKICAgICAgICAgIGFsbF9kZXN0aW5hdGlvbl9maWxlX3BhaXJzX3BjCiAgICAgICAgICB8ICJBcHBseVVzZXJUcmlnZ2VyIiA+PiBiZWFtLldpbmRvd0ludG8oCiAgICAgICAgICAgICAgYmVhbS53aW5kb3cuR2xvYmFsV2luZG93cygpLAogICAgICAgICAgICAgIHRyaWdnZXI9dHJpZ2dlci5SZXBlYXRlZGx5KAogICAgICAgICAgICAgICAgICB0cmlnZ2VyLkFmdGVyQWxsKAogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5BZnRlclByb2Nlc3NpbmdUaW1lKHNlbGYudHJpZ2dlcmluZ19mcmVxdWVuY3kpLAogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5BZnRlckNvdW50KDEpKSksCiAgICAgICAgICAgICAgYWNjdW11bGF0aW9uX21vZGU9dHJpZ2dlci5BY2N1bXVsYXRpb25Nb2RlLkRJU0NBUkRJTkcpKQogICAgcmV0dXJuIGFsbF9kZXN0aW5hdGlvbl9maWxlX3BhaXJzX3BjCgogIGRlZiBfbG9hZF9kYXRhKAogICAgICBzZWxmLAogICAgICBwYXJ0aXRpb25zX3VzaW5nX3RlbXBfdGFibGVzLAogICAgICBwYXJ0aXRpb25zX2RpcmVjdF90b19kZXN0aW5hdGlvbiwKICAgICAgbG9hZF9qb2JfbmFtZV9wY3YsCiAgICAgIHNpbmdsZXRvbl9wYyk6CiAgICAiIiJMb2FkIGRhdGEgdG8gQmlnUXVlcnkKCiAgICBEYXRhIGlzIGxvYWRlZCBpbnRvIEJpZ1F1ZXJ5IGluIHRoZSBmb2xsb3dpbmcgdHdvIHdheXM6CiAgICAgIDEuIFNpbmdsZSBwYXJ0aXRpb246CiAgICAgICAgIFdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgcGFydGl0aW9uIG9mIGZpbGVzIGRlc3RpbmVkIHRvIGEgc2luZ2xlCiAgICAgICAgIGRlc3RpbmF0aW9uLCBhIHNpbmdsZSBsb2FkIGpvYiBpcyB0cmlnZ2VyZWQuCiAgICAgIDIuIE11bHRpcGxlIHBhcnRpdGlvbnMgYW5kL29yIER5bmFtaWMgRGVzdGluYXRpb25zOgogICAgICAgICBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBwYXJ0aXRpb25zIG9mIGZpbGVzIGRlc3RpbmVkIGZvciBhIHNpbmdsZQogICAgICAgICBkZXN0aW5hdGlvbiBvciB3aGVuIER5bmFtaWMgRGVzdGluYXRpb25zIGFyZSB1c2VkLCBtdWx0aXBsZSBsb2FkIGpvYnMKICAgICAgICAgbmVlZCB0byBiZSB0cmlnZ2VyZWQgZm9yIGVhY2ggcGFydGl0aW9uL2Rlc3RpbmF0aW9uLiBMb2FkIEpvYnMgYXJlCiAgICAgICAgIHRyaWdnZXJlZCB0byB0ZW1wb3JhcnkgdGFibGVzLCBhbmQgdGhvc2UgYXJlIGxhdGVyIGNvcGllZCB0byB0aGUgYWN0dWFsCiAgICAgICAgIGFwcHJvcHJpYXRlIGRlc3RpbmF0aW9uIHRhYmxlLiBUaGlzIGVuc3VyZXMgYXRvbWljaXR5IHdoZW4gb25seSBzb21lCiAgICAgICAgIG9mIHRoZSBsb2FkIGpvYnMgd291bGQgZmFpbCBidXQgbm90IG90aGVyLiBJZiBhbnkgb2YgdGhlbSBmYWlscywgdGhlbgogICAgICAgICBjb3B5IGpvYnMgYXJlIG5vdCB0cmlnZ2VyZWQuCiAgICAiIiIKICAgICMgTG9hZCBkYXRhIHVzaW5nIHRlbXAgdGFibGVzCiAgICB0cmlnZ2VyX2xvYWRzX291dHB1dHMgPSAoCiAgICAgICAgcGFydGl0aW9uc191c2luZ190ZW1wX3RhYmxlcwogICAgICAgIHwgIlRyaWdnZXJMb2FkSm9ic1dpdGhUZW1wVGFibGVzIiA+PiBiZWFtLlBhckRvKAogICAgICAgICAgICBUcmlnZ2VyTG9hZEpvYnMoCiAgICAgICAgICAgICAgICBzY2hlbWE9c2VsZi5zY2hlbWEsCiAgICAgICAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1zZWxmLndyaXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uPXNlbGYuY3JlYXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgdGVzdF9jbGllbnQ9c2VsZi50ZXN0X2NsaWVudCwKICAgICAgICAgICAgICAgIHRlbXBvcmFyeV90YWJsZXM9VHJ1ZSwKICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycz1zZWxmLmFkZGl0aW9uYWxfYnFfcGFyYW1ldGVycyksCiAgICAgICAgICAgIGxvYWRfam9iX25hbWVfcGN2LAogICAgICAgICAgICAqc2VsZi5zY2hlbWFfc2lkZV9pbnB1dHMpLndpdGhfb3V0cHV0cygKICAgICAgICAgICAgICAgIFRyaWdnZXJMb2FkSm9icy5URU1QX1RBQkxFUywgbWFpbj0nbWFpbicpKQoKICAgIHRlbXBfdGFibGVzX2xvYWRfam9iX2lkc19wYyA9IHRyaWdnZXJfbG9hZHNfb3V0cHV0c1snbWFpbiddCiAgICB0ZW1wX3RhYmxlc19wYyA9IHRyaWdnZXJfbG9hZHNfb3V0cHV0c1tUcmlnZ2VyTG9hZEpvYnMuVEVNUF9UQUJMRVNdCgogICAgZGVzdGluYXRpb25fY29weV9qb2JfaWRzX3BjID0gKAogICAgICAgIHNpbmdsZXRvbl9wYwogICAgICAgIHwgIldhaXRGb3JUZW1wVGFibGVMb2FkSm9icyIgPj4gYmVhbS5QYXJEbygKICAgICAgICAgICAgV2FpdEZvckJRSm9icyhzZWxmLnRlc3RfY2xpZW50KSwKICAgICAgICAgICAgYmVhbS5wdmFsdWUuQXNMaXN0KHRlbXBfdGFibGVzX2xvYWRfam9iX2lkc19wYykpCiAgICAgICAgfCBiZWFtLlBhckRvKAogICAgICAgICAgICBUcmlnZ2VyQ29weUpvYnMoCiAgICAgICAgICAgICAgICBjcmVhdGVfZGlzcG9zaXRpb249c2VsZi5jcmVhdGVfZGlzcG9zaXRpb24sCiAgICAgICAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1zZWxmLndyaXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgdGVzdF9jbGllbnQ9c2VsZi50ZXN0X2NsaWVudCksCiAgICAgICAgICAgIGxvYWRfam9iX25hbWVfcGN2KSkKCiAgICBmaW5pc2hlZF9jb3B5X2pvYnNfcGMgPSAoCiAgICAgICAgc2luZ2xldG9uX3BjCiAgICAgICAgfCAiV2FpdEZvckNvcHlKb2JzIiA+PiBiZWFtLlBhckRvKAogICAgICAgICAgICBXYWl0Rm9yQlFKb2JzKHNlbGYudGVzdF9jbGllbnQpLAogICAgICAgICAgICBiZWFtLnB2YWx1ZS5Bc0xpc3QoZGVzdGluYXRpb25fY29weV9qb2JfaWRzX3BjKSkpCgogICAgXyA9ICgKICAgICAgICBmaW5pc2hlZF9jb3B5X2pvYnNfcGMKICAgICAgICB8ICJSZW1vdmVUZW1wVGFibGVzL1Bhc3NUYWJsZXMiID4+IGJlYW0uRmxhdE1hcCgKICAgICAgICAgICAgbGFtYmRhIHgsCiAgICAgICAgICAgIGRlbGV0aW5nX3RhYmxlczogZGVsZXRpbmdfdGFibGVzLAogICAgICAgICAgICBwdmFsdWUuQXNJdGVyKHRlbXBfdGFibGVzX3BjKSkKICAgICAgICB8ICJSZW1vdmVUZW1wVGFibGVzL0FkZFVzZWxlc3NWYWx1ZSIgPj4gYmVhbS5NYXAobGFtYmRhIHg6ICh4LCBOb25lKSkKICAgICAgICB8ICJSZW1vdmVUZW1wVGFibGVzL0RlZHVwbGljYXRlVGFibGVzIiA+PiBiZWFtLkdyb3VwQnlLZXkoKQogICAgICAgIHwgIlJlbW92ZVRlbXBUYWJsZXMvR2V0VGFibGVOYW1lcyIgPj4gYmVhbS5NYXAobGFtYmRhIGVsbTogZWxtWzBdKQogICAgICAgIHwgIlJlbW92ZVRlbXBUYWJsZXMvRGVsZXRlIiA+PiBiZWFtLlBhckRvKAogICAgICAgICAgICBEZWxldGVUYWJsZXNGbihzZWxmLnRlc3RfY2xpZW50KSkpCgogICAgIyBMb2FkIGRhdGEgZGlyZWN0bHkgdG8gZGVzdGluYXRpb24gdGFibGUKICAgIGRlc3RpbmF0aW9uX2xvYWRfam9iX2lkc19wYyA9ICgKICAgICAgICBwYXJ0aXRpb25zX2RpcmVjdF90b19kZXN0aW5hdGlvbgogICAgICAgIHwgIlRyaWdnZXJMb2FkSm9ic1dpdGhvdXRUZW1wVGFibGVzIiA+PiBiZWFtLlBhckRvKAogICAgICAgICAgICBUcmlnZ2VyTG9hZEpvYnMoCiAgICAgICAgICAgICAgICBzY2hlbWE9c2VsZi5zY2hlbWEsCiAgICAgICAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj1zZWxmLndyaXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uPXNlbGYuY3JlYXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgdGVzdF9jbGllbnQ9c2VsZi50ZXN0X2NsaWVudCwKICAgICAgICAgICAgICAgIHRlbXBvcmFyeV90YWJsZXM9RmFsc2UsCiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnM9c2VsZi5hZGRpdGlvbmFsX2JxX3BhcmFtZXRlcnMpLAogICAgICAgICAgICBsb2FkX2pvYl9uYW1lX3BjdiwKICAgICAgICAgICAgKnNlbGYuc2NoZW1hX3NpZGVfaW5wdXRzKSkKCiAgICBfID0gKAogICAgICAgIHNpbmdsZXRvbl9wYwogICAgICAgIHwgIldhaXRGb3JEZXN0aW5hdGlvbkxvYWRKb2JzIiA+PiBiZWFtLlBhckRvKAogICAgICAgICAgICBXYWl0Rm9yQlFKb2JzKHNlbGYudGVzdF9jbGllbnQpLAogICAgICAgICAgICBiZWFtLnB2YWx1ZS5Bc0xpc3QoZGVzdGluYXRpb25fbG9hZF9qb2JfaWRzX3BjKSkpCgogICAgZGVzdGluYXRpb25fbG9hZF9qb2JfaWRzX3BjID0gKAogICAgICAgICh0ZW1wX3RhYmxlc19sb2FkX2pvYl9pZHNfcGMsIGRlc3RpbmF0aW9uX2xvYWRfam9iX2lkc19wYykKICAgICAgICB8IGJlYW0uRmxhdHRlbigpKQoKICAgIHJldHVybiBkZXN0aW5hdGlvbl9sb2FkX2pvYl9pZHNfcGMsIGRlc3RpbmF0aW9uX2NvcHlfam9iX2lkc19wYwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHAgPSBwY29sbC5waXBlbGluZQoKICAgIHRlbXBfbG9jYXRpb24gPSBwLm9wdGlvbnMudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLnRlbXBfbG9jYXRpb24KCiAgICBlbXB0eV9wYyA9IHAgfCAiSW1wdWxzZUVtcHR5UEMiID4+IGJlYW0uQ3JlYXRlKFtdKQogICAgc2luZ2xldG9uX3BjID0gcCB8ICJJbXB1bHNlU2luZ2xlRWxlbWVudFBDIiA+PiBiZWFtLkNyZWF0ZShbTm9uZV0pCgogICAgbG9hZF9qb2JfbmFtZV9wY3YgPSBwdmFsdWUuQXNTaW5nbGV0b24oCiAgICAgICAgc2luZ2xldG9uX3BjCiAgICAgICAgfCBiZWFtLk1hcChsYW1iZGEgXzogX2dlbmVyYXRlX2xvYWRfam9iX25hbWUoKSkpCgogICAgZmlsZV9wcmVmaXhfcGN2ID0gcHZhbHVlLkFzU2luZ2xldG9uKAogICAgICAgIHNpbmdsZXRvbl9wYwogICAgICAgIHwgIkdlbmVyYXRlRmlsZVByZWZpeCIgPj4gYmVhbS5NYXAoCiAgICAgICAgICAgIGZpbGVfcHJlZml4X2dlbmVyYXRvcigKICAgICAgICAgICAgICAgIHNlbGYuX3ZhbGlkYXRlLCBzZWxmLl9jdXN0b21fZ2NzX3RlbXBfbG9jYXRpb24sIHRlbXBfbG9jYXRpb24pKSkKCiAgICBkZXN0aW5hdGlvbl9kYXRhX2t2X3BjID0gKAogICAgICAgIHBjb2xsCiAgICAgICAgfCAiUmV3aW5kb3dJbnRvR2xvYmFsIiA+PiBzZWxmLl93aW5kb3dfZm4oKQogICAgICAgIHwgIkFwcGVuZERlc3RpbmF0aW9uIiA+PiBiZWFtLlBhckRvKAogICAgICAgICAgICBiaWdxdWVyeV90b29scy5BcHBlbmREZXN0aW5hdGlvbnNGbihzZWxmLmRlc3RpbmF0aW9uKSwKICAgICAgICAgICAgKnNlbGYudGFibGVfc2lkZV9pbnB1dHMpKQoKICAgIGFsbF9kZXN0aW5hdGlvbl9maWxlX3BhaXJzX3BjID0gc2VsZi5fd3JpdGVfZmlsZXMoCiAgICAgICAgZGVzdGluYXRpb25fZGF0YV9rdl9wYywgZmlsZV9wcmVmaXhfcGN2KQoKICAgIGdyb3VwZWRfZmlsZXNfcGMgPSAoCiAgICAgICAgYWxsX2Rlc3RpbmF0aW9uX2ZpbGVfcGFpcnNfcGMKICAgICAgICB8ICJHcm91cEZpbGVzQnlUYWJsZURlc3RpbmF0aW9ucyIgPj4gYmVhbS5Hcm91cEJ5S2V5KCkpCgogICAgcGFydGl0aW9ucyA9ICgKICAgICAgICBncm91cGVkX2ZpbGVzX3BjCiAgICAgICAgfCBiZWFtLlBhckRvKAogICAgICAgICAgICBQYXJ0aXRpb25GaWxlcygKICAgICAgICAgICAgICAgIHNlbGYubWF4X3BhcnRpdGlvbl9zaXplLAogICAgICAgICAgICAgICAgc2VsZi5tYXhfZmlsZXNfcGVyX3BhcnRpdGlvbikpLndpdGhfb3V0cHV0cygKICAgICAgICAgICAgICAgICAgICBQYXJ0aXRpb25GaWxlcy5NVUxUSVBMRV9QQVJUSVRJT05TX1RBRywKICAgICAgICAgICAgICAgICAgICBQYXJ0aXRpb25GaWxlcy5TSU5HTEVfUEFSVElUSU9OX1RBRykpCgogICAgbXVsdGlwbGVfcGFydGl0aW9uc19wZXJfZGVzdGluYXRpb25fcGMgPSBwYXJ0aXRpb25zWwogICAgICAgIFBhcnRpdGlvbkZpbGVzLk1VTFRJUExFX1BBUlRJVElPTlNfVEFHXQogICAgc2luZ2xlX3BhcnRpdGlvbl9wZXJfZGVzdGluYXRpb25fcGMgPSBwYXJ0aXRpb25zWwogICAgICAgIFBhcnRpdGlvbkZpbGVzLlNJTkdMRV9QQVJUSVRJT05fVEFHXQoKICAgICMgV2hlbiB1c2luZyBkeW5hbWljIGRlc3RpbmF0aW9ucywgZWxlbWVudHMgd2l0aCBib3RoIHNpbmdsZSBhcyB3ZWxsIGFzCiAgICAjIG11bHRpcGxlIHBhcnRpdGlvbnMgYXJlIGxvYWRlZCBpbnRvIEJpZ1F1ZXJ5IHVzaW5nIHRlbXBvcmFyeSB0YWJsZXMgdG8KICAgICMgZW5zdXJlIGF0b21pY2l0eS4KICAgIGlmIHNlbGYuZHluYW1pY19kZXN0aW5hdGlvbnM6CiAgICAgIGFsbF9wYXJ0aXRpb25zID0gKCgKICAgICAgICAgIG11bHRpcGxlX3BhcnRpdGlvbnNfcGVyX2Rlc3RpbmF0aW9uX3BjLAogICAgICAgICAgc2luZ2xlX3BhcnRpdGlvbl9wZXJfZGVzdGluYXRpb25fcGMpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgIkZsYXR0ZW5QYXJ0aXRpb25zIiA+PiBiZWFtLkZsYXR0ZW4oKSkKICAgICAgZGVzdGluYXRpb25fbG9hZF9qb2JfaWRzX3BjLCBkZXN0aW5hdGlvbl9jb3B5X2pvYl9pZHNfcGMgPSBzZWxmLlwKICAgICAgICBfbG9hZF9kYXRhKGFsbF9wYXJ0aXRpb25zLCBlbXB0eV9wYywgbG9hZF9qb2JfbmFtZV9wY3YsCiAgICAgICAgICAgICAgICAgICBzaW5nbGV0b25fcGMpCiAgICBlbHNlOgogICAgICBkZXN0aW5hdGlvbl9sb2FkX2pvYl9pZHNfcGMsIGRlc3RpbmF0aW9uX2NvcHlfam9iX2lkc19wYyA9IHNlbGYuXAogICAgICAgIF9sb2FkX2RhdGEobXVsdGlwbGVfcGFydGl0aW9uc19wZXJfZGVzdGluYXRpb25fcGMsCiAgICAgICAgICAgICAgICAgICBzaW5nbGVfcGFydGl0aW9uX3Blcl9kZXN0aW5hdGlvbl9wYywKICAgICAgICAgICAgICAgICAgIGxvYWRfam9iX25hbWVfcGN2LCBzaW5nbGV0b25fcGMpCgogICAgcmV0dXJuIHsKICAgICAgICBzZWxmLkRFU1RJTkFUSU9OX0pPQklEX1BBSVJTOiBkZXN0aW5hdGlvbl9sb2FkX2pvYl9pZHNfcGMsCiAgICAgICAgc2VsZi5ERVNUSU5BVElPTl9GSUxFX1BBSVJTOiBhbGxfZGVzdGluYXRpb25fZmlsZV9wYWlyc19wYywKICAgICAgICBzZWxmLkRFU1RJTkFUSU9OX0NPUFlfSk9CSURfUEFJUlM6IGRlc3RpbmF0aW9uX2NvcHlfam9iX2lkc19wYywKICAgIH0KlH2UKIwXX2dlbmVyYXRlX2xvYWRfam9iX25hbWWUalYxAQBLRktJh5SMFWZpbGVfcHJlZml4X2dlbmVyYXRvcpRqVjEBAEtMS2OHlIwVX21ha2VfbmV3X2ZpbGVfd3JpdGVylGpWMQEAS2ZLdoeUjAhfYnFfdXVpZJRqVjEBAEt5S32HlIwbX1NoYXJkRGVzdGluYXRpb25zLl9faW5pdF9flGpWMQEAS4ZLh4eUjB9fU2hhcmREZXN0aW5hdGlvbnMuc3RhcnRfYnVuZGxllGpWMQEAS4lLioeUjBpfU2hhcmREZXN0aW5hdGlvbnMucHJvY2Vzc5RqVjEBAEuMS5OHlIwSX1NoYXJkRGVzdGluYXRpb25zlGpdMQEAS4BLk4eUjBtXcml0ZVJlY29yZHNUb0ZpbGUuX19pbml0X1+UalYxAQBLp0u4h5SMH1dyaXRlUmVjb3Jkc1RvRmlsZS5kaXNwbGF5X2RhdGGUalYxAQBLuku/h5SMH1dyaXRlUmVjb3Jkc1RvRmlsZS5zdGFydF9idW5kbGWUalYxAQBLwUvCh5SMGldyaXRlUmVjb3Jkc1RvRmlsZS5wcm9jZXNzlGpWMQEAS8RL4YeUjCBXcml0ZVJlY29yZHNUb0ZpbGUuZmluaXNoX2J1bmRsZZRqVjEBAEvjS+yHlIwSV3JpdGVSZWNvcmRzVG9GaWxllGpdMQEAS5ZL7IeUjCJXcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxlLl9faW5pdF9flGpWMQEAS/lL+4eUjCFXcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxlLnByb2Nlc3OUalYxAQBL/U0RAYeUjBlXcml0ZUdyb3VwZWRSZWNvcmRzVG9GaWxllGpdMQEAS+9NEQGHlIwYVHJpZ2dlckNvcHlKb2JzLl9faW5pdF9flGpWMQEATSIBTScBh5SMHFRyaWdnZXJDb3B5Sm9icy5zdGFydF9idW5kbGWUalYxAQBNKQFNKwGHlIwXVHJpZ2dlckNvcHlKb2JzLnByb2Nlc3OUalYxAQBNLQFNaAGHlIwPVHJpZ2dlckNvcHlKb2JzlGpdMQEATRQBTWgBh5SMGFRyaWdnZXJMb2FkSm9icy5fX2luaXRfX5RqVjEBAE1zAU2GAYeUjBxUcmlnZ2VyTG9hZEpvYnMuZGlzcGxheV9kYXRhlGpWMQEATYgBTY8Bh5SMHFRyaWdnZXJMb2FkSm9icy5zdGFydF9idW5kbGWUalYxAQBNkQFNkgGHlIwXVHJpZ2dlckxvYWRKb2JzLnByb2Nlc3OUalYxAQBNlAFN1AGHlIwPVHJpZ2dlckxvYWRKb2JzlGpdMQEATWsBTdQBh5SMIVBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbi5fX2luaXRfX5RqVjEBAE3dAU3hAYeUjCNQYXJ0aXRpb25GaWxlcy5QYXJ0aXRpb24uY2FuX2FjY2VwdJRqVjEBAE3jAU3oAYeUjBxQYXJ0aXRpb25GaWxlcy5QYXJ0aXRpb24uYWRklGpWMQEATeoBTewBh5SMGFBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbpRqXTEBAE3cAU3sAYeUjBdQYXJ0aXRpb25GaWxlcy5fX2luaXRfX5RqVjEBAE3uAU3wAYeUjBZQYXJ0aXRpb25GaWxlcy5wcm9jZXNzlGpWMQEATfIBTQoCh5SMDlBhcnRpdGlvbkZpbGVzlGpdMQEATdcBTQoCh5SMFldhaXRGb3JCUUpvYnMuX19pbml0X1+UalYxAQBNFAJNFQKHlIwaV2FpdEZvckJRSm9icy5zdGFydF9idW5kbGWUalYxAQBNFwJNGAKHlIwVV2FpdEZvckJRSm9icy5wcm9jZXNzlGpWMQEATRoCTSECh5SMDVdhaXRGb3JCUUpvYnOUal0xAQBNDQJNIQKHlIwXRGVsZXRlVGFibGVzRm4uX19pbml0X1+UalYxAQBNJQJNJgKHlIwbRGVsZXRlVGFibGVzRm4uc3RhcnRfYnVuZGxllGpWMQEATSgCTSkCh5SMFkRlbGV0ZVRhYmxlc0ZuLnByb2Nlc3OUalYxAQBNKwJNMQKHlIwORGVsZXRlVGFibGVzRm6Ual0xAQBNJAJNMQKHlIwfQmlnUXVlcnlCYXRjaEZpbGVMb2Fkcy5fX2luaXRfX5RqVjEBAE09Ak1yAoeUjB1CaWdRdWVyeUJhdGNoRmlsZUxvYWRzLnZlcmlmeZRqVjEBAE10Ak2HAoeUjCFCaWdRdWVyeUJhdGNoRmlsZUxvYWRzLl93aW5kb3dfZm6UalYxAQBNiQJNngKHlIwjQmlnUXVlcnlCYXRjaEZpbGVMb2Fkcy5fd3JpdGVfZmlsZXOUalYxAQBNoAJNzgKHlIwhQmlnUXVlcnlCYXRjaEZpbGVMb2Fkcy5fbG9hZF9kYXRhlGpWMQEATdACTS0Dh5SMHUJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHMuZXhwYW5klGpWMQEATS8DTXIDh5SMFkJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHOUal0xAQBNNAJNcgOHlHV9lCiMFWZpbGVfcHJlZml4X2dlbmVyYXRvcpRqqQMAAIwSV3JpdGVSZWNvcmRzVG9GaWxllGqpAwAAjB9Xcml0ZVJlY29yZHNUb0ZpbGUuZGlzcGxheV9kYXRhlGqpAwAAjB9Xcml0ZVJlY29yZHNUb0ZpbGUuc3RhcnRfYnVuZGxllGqpAwAAjBpXcml0ZVJlY29yZHNUb0ZpbGUucHJvY2Vzc5RqqQMAAIwgV3JpdGVSZWNvcmRzVG9GaWxlLmZpbmlzaF9idW5kbGWUaqkDAACMGVdyaXRlR3JvdXBlZFJlY29yZHNUb0ZpbGWUaqkDAACMIVdyaXRlR3JvdXBlZFJlY29yZHNUb0ZpbGUucHJvY2Vzc5RqqQMAAIwPVHJpZ2dlckNvcHlKb2JzlGqpAwAAjBxUcmlnZ2VyQ29weUpvYnMuc3RhcnRfYnVuZGxllGqpAwAAjBdUcmlnZ2VyQ29weUpvYnMucHJvY2Vzc5RqqQMAAIwPVHJpZ2dlckxvYWRKb2JzlGqpAwAAjBxUcmlnZ2VyTG9hZEpvYnMuZGlzcGxheV9kYXRhlGqpAwAAjBxUcmlnZ2VyTG9hZEpvYnMuc3RhcnRfYnVuZGxllGqpAwAAjBdUcmlnZ2VyTG9hZEpvYnMucHJvY2Vzc5RqqQMAAIwOUGFydGl0aW9uRmlsZXOUaqkDAACMGFBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbpRqqQMAAIwjUGFydGl0aW9uRmlsZXMuUGFydGl0aW9uLmNhbl9hY2NlcHSUaqkDAACMHFBhcnRpdGlvbkZpbGVzLlBhcnRpdGlvbi5hZGSUaqkDAACMFlBhcnRpdGlvbkZpbGVzLnByb2Nlc3OUaqkDAACMDVdhaXRGb3JCUUpvYnOUaqkDAACMGldhaXRGb3JCUUpvYnMuc3RhcnRfYnVuZGxllGqpAwAAjBVXYWl0Rm9yQlFKb2JzLnByb2Nlc3OUaqkDAACMDkRlbGV0ZVRhYmxlc0ZulGqpAwAAjBtEZWxldGVUYWJsZXNGbi5zdGFydF9idW5kbGWUaqkDAACMFkRlbGV0ZVRhYmxlc0ZuLnByb2Nlc3OUaqkDAACMFkJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHOUaqkDAACMHUJpZ1F1ZXJ5QmF0Y2hGaWxlTG9hZHMudmVyaWZ5lGqpAwAAjB1CaWdRdWVyeUJhdGNoRmlsZUxvYWRzLmV4cGFuZJRqqQMAAHWMJmFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9maWxlX2xvYWRzlHSUjCxhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfaW9fcmVhZF9waXBlbGluZZQoWGkMAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgRGF0YWZsb3cgam9iIHRoYXQgY291bnRzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBhIEJRIHRhYmxlLgoKICAgQ2FuIGJlIGNvbmZpZ3VyZWQgdG8gc2ltdWxhdGUgc2xvdyByZWFkaW5nIGZvciBhIGdpdmVuIG51bWJlciBvZiByb3dzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGltZQoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnkgaW1wb3J0IF9SZWFkRnJvbUJpZ1F1ZXJ5CmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZSBpbXBvcnQgVGVzdFBpcGVsaW5lCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy51dGlsIGltcG9ydCBhc3NlcnRfdGhhdApmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbCBpbXBvcnQgZXF1YWxfdG8KCgpjbGFzcyBSb3dUb1N0cmluZ1dpdGhTbG93RG93bihiZWFtLkRvRm4pOgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIG51bV9zbG93PTAsICphcmdzLCAqKmt3YXJncyk6CgogICAgaWYgbnVtX3Nsb3cgPT0gMDoKICAgICAgeWllbGQgWydyb3cnXQogICAgZWxzZToKICAgICAgcmFuZCA9IHJhbmRvbS5yYW5kb20oKSAqIDEwMAogICAgICBpZiByYW5kIDwgbnVtX3Nsb3c6CiAgICAgICAgdGltZS5zbGVlcCgwLjAxKQogICAgICAgIHlpZWxkIFsnc2xvd19yb3cnXQogICAgICBlbHNlOgogICAgICAgIHlpZWxkIFsncm93J10KCgpkZWYgcnVuKGFyZ3Y9Tm9uZSk6CiAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLWlucHV0X3RhYmxlJywgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nSW5wdXQgdGFibGUgdG8gcHJvY2Vzcy4nKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLW51bV9yZWNvcmRzJywKICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgaGVscD0nVGhlIGV4cGVjdGVkIG51bWJlciBvZiByZWNvcmRzJywKICAgICAgdHlwZT1pbnQpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tbnVtX3Nsb3cnLAogICAgICBkZWZhdWx0PTAsCiAgICAgIGhlbHA9KAogICAgICAgICAgJ1BlcmNlbnRhZ2Ugb2Ygcm93cyB0aGF0IHdpbGwgYmUgc2xvdy4gJwogICAgICAgICAgJ011c3QgYmUgaW4gdGhlIHJhbmdlIFswLCAxMDApJykpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tYmVhbV9icV9zb3VyY2UnLAogICAgICBkZWZhdWx0PUZhbHNlLAogICAgICB0eXBlPWJvb2wsCiAgICAgIGhlbHA9KAogICAgICAgICAgJ1doZXRoZXIgdG8gdXNlIHRoZSBuZXcgX1JlYWRGcm9tQmlnUXVlcnknCiAgICAgICAgICAnIHRyYW5zZm9ybSwgb3IgdGhlIEJpZ1F1ZXJ5U291cmNlLicpKQogIGtub3duX2FyZ3MsIHBpcGVsaW5lX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQoKICBvcHRpb25zID0gUGlwZWxpbmVPcHRpb25zKHBpcGVsaW5lX2FyZ3MpCiAgd2l0aCBUZXN0UGlwZWxpbmUob3B0aW9ucz1vcHRpb25zKSBhcyBwOgogICAgaWYga25vd25fYXJncy5iZWFtX2JxX3NvdXJjZToKICAgICAgcmVhZGVyID0gX1JlYWRGcm9tQmlnUXVlcnkoCiAgICAgICAgICB0YWJsZT0nJXM6JXMnICUKICAgICAgICAgIChvcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS5wcm9qZWN0LCBrbm93bl9hcmdzLmlucHV0X3RhYmxlKSkKICAgIGVsc2U6CiAgICAgIHJlYWRlciA9IGJlYW0uaW8uUmVhZChiZWFtLmlvLkJpZ1F1ZXJ5U291cmNlKGtub3duX2FyZ3MuaW5wdXRfdGFibGUpKQoKICAgICMgcHlsaW50OiBkaXNhYmxlPWV4cHJlc3Npb24tbm90LWFzc2lnbmVkCiAgICBjb3VudCA9ICgKICAgICAgICBwIHwgJ3JlYWQnID4+IHJlYWRlcgogICAgICAgIHwgJ3JvdyB0byBzdHJpbmcnID4+IGJlYW0uUGFyRG8oCiAgICAgICAgICAgIFJvd1RvU3RyaW5nV2l0aFNsb3dEb3duKCksIG51bV9zbG93PWtub3duX2FyZ3MubnVtX3Nsb3cpCiAgICAgICAgfCAnY291bnQnID4+IGJlYW0uY29tYmluZXJzLkNvdW50Lkdsb2JhbGx5KCkpCgogICAgYXNzZXJ0X3RoYXQoY291bnQsIGVxdWFsX3RvKFtrbm93bl9hcmdzLm51bV9yZWNvcmRzXSkpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuSU5GTykKICBydW4oKQqUfZQojB9Sb3dUb1N0cmluZ1dpdGhTbG93RG93bi5wcm9jZXNzlGpWMQEASypLNIeUjBdSb3dUb1N0cmluZ1dpdGhTbG93RG93bpRqXTEBAEspSzSHlIwDcnVulGpWMQEASzdLX4eUdX2UKIwXUm93VG9TdHJpbmdXaXRoU2xvd0Rvd26UarIDAACMH1Jvd1RvU3RyaW5nV2l0aFNsb3dEb3duLnByb2Nlc3OUarIDAACMA3J1bpRqsgMAAHWMLGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV9pb19yZWFkX3BpcGVsaW5llHSUjCFhcGFjaGVfYmVhbS5pby5nY3AuYmlncXVlcnlfdG9vbHOUKFjerwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUb29scyB1c2VkIGJ5IEJpZ1F1ZXJ5IHNvdXJjZXMgYW5kIHNpbmtzLgoKQ2xhc3NlcywgY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBleHBlcmltZW50YWwgYW5kIGhhdmUgbm8KYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KClRoZXNlIHRvb2xzIGluY2x1ZGUgd3JhcHBlcnMgYW5kIGNsaWVudHMgdG8gaW50ZXJhY3Qgd2l0aCBCaWdRdWVyeSBBUElzLgoKTk9USElORyBJTiBUSElTIEZJTEUgSEFTIEJBQ0tXQVJEUyBDT01QQVRJQklMSVRZIEdVQVJBTlRFRVMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBkYXRldGltZQppbXBvcnQgZGVjaW1hbAppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgcmUKaW1wb3J0IHN5cwppbXBvcnQgdGltZQppbXBvcnQgdXVpZApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcCBpbXBvcnQgYXV0aApmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcC5qc29uX3ZhbHVlIGltcG9ydCBmcm9tX2pzb25fdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5nY3AuanNvbl92YWx1ZSBpbXBvcnQgdG9fanNvbl92YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsLmh0dHBfY2xpZW50IGltcG9ydCBnZXRfbmV3X2h0dHAKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cyBpbXBvcnQgYmlncXVlcnkKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zIGltcG9ydCB2YWx1ZV9wcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcmV0cnkKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBiaWdxdWVyeSBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUuCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCnRyeToKICBmcm9tIGFwaXRvb2xzLmJhc2UucHkuZXhjZXB0aW9ucyBpbXBvcnQgSHR0cEVycm9yCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBwYXNzCgojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgpNQVhfUkVUUklFUyA9IDMKCkpTT05fQ09NUExJQU5DRV9FUlJPUiA9ICdOQU4sIElORiBhbmQgLUlORiB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudC4nCgoKY2xhc3MgRXhwb3J0RmlsZUZvcm1hdChvYmplY3QpOgogIENTViA9ICdDU1YnCiAgSlNPTiA9ICdORVdMSU5FX0RFTElNSVRFRF9KU09OJwogIEFWUk8gPSAnQVZSTycKCgpjbGFzcyBFeHBvcnRDb21wcmVzc2lvbihvYmplY3QpOgogIEdaSVAgPSAnR1pJUCcKICBERUZMQVRFID0gJ0RFRkxBVEUnCiAgU05BUFBZID0gJ1NOQVBQWScKICBOT05FID0gJ05PTkUnCgoKZGVmIGRlZmF1bHRfZW5jb2RlcihvYmopOgogIGlmIGlzaW5zdGFuY2Uob2JqLCBkZWNpbWFsLkRlY2ltYWwpOgogICAgcmV0dXJuIHN0cihvYmopCiAgZWxpZiBpc2luc3RhbmNlKG9iaiwgYnl0ZXMpOgogICAgIyBvbiBweXRob24gMyBiYXNlNjQtZW5jb2RlZCBieXRlcyBhcmUgZGVjb2RlZCB0byBzdHJpbmdzCiAgICAjIGJlZm9yZSBiZWluZyBzZW50IHRvIEJpZ1F1ZXJ5CiAgICByZXR1cm4gb2JqLmRlY29kZSgndXRmLTgnKQogIHJhaXNlIFR5cGVFcnJvcigKICAgICAgIk9iamVjdCBvZiB0eXBlICclcycgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlIiAlIHR5cGUob2JqKS5fX25hbWVfXykKCgpkZWYgZ2V0X2hhc2hhYmxlX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKToKICAiIiJQYXJzZXMgYSB0YWJsZSByZWZlcmVuY2UgaW50byBhIChwcm9qZWN0LCBkYXRhc2V0LCB0YWJsZSkgdHVwbGUuCgogIEFyZ3M6CiAgICBkZXN0aW5hdGlvbjogRWl0aGVyIGEgVGFibGVSZWZlcmVuY2Ugb2JqZWN0IGZyb20gdGhlIGJpZ3F1ZXJ5IEFQSS4KICAgICAgVGhlIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOiBwcm9qZWN0SWQsIGRhdGFzZXRJZCwgYW5kCiAgICAgIHRhYmxlSWQuIE9yIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZGVzdGluYXRpb24gY29udGFpbmluZwogICAgICAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJy4KICBSZXR1cm5zOgogICAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkZXN0aW5hdGlvbiBjb250YWluaW5nCiAgICAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJy4KICAiIiIKICBpZiBpc2luc3RhbmNlKGRlc3RpbmF0aW9uLCBiaWdxdWVyeS5UYWJsZVJlZmVyZW5jZSk6CiAgICByZXR1cm4gJyVzOiVzLiVzJyAlICgKICAgICAgICBkZXN0aW5hdGlvbi5wcm9qZWN0SWQsIGRlc3RpbmF0aW9uLmRhdGFzZXRJZCwgZGVzdGluYXRpb24udGFibGVJZCkKICBlbHNlOgogICAgcmV0dXJuIGRlc3RpbmF0aW9uCgoKZGVmIHBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb24oc2NoZW1hX3N0cmluZyk6CiAgIiIiUGFyc2UgdGhlIFRhYmxlIFNjaGVtYSBwcm92aWRlZCBhcyBzdHJpbmcuCgogIEFyZ3M6CiAgICBzY2hlbWFfc3RyaW5nOiBTdHJpbmcgc2VyaWFsaXplZCB0YWJsZSBzY2hlbWEsIHNob3VsZCBiZSBhIHZhbGlkIEpTT04uCgogIFJldHVybnM6CiAgICBBIFRhYmxlU2NoZW1hIG9mIHRoZSBCaWdRdWVyeSBleHBvcnQgZnJvbSBlaXRoZXIgdGhlIFF1ZXJ5IG9yIHRoZSBUYWJsZS4KICAiIiIKICBqc29uX3NjaGVtYSA9IGpzb24ubG9hZHMoc2NoZW1hX3N0cmluZykKCiAgZGVmIF9wYXJzZV9zY2hlbWFfZmllbGQoZmllbGQpOgogICAgIiIiUGFyc2UgYSBzaW5nbGUgc2NoZW1hIGZpZWxkIGZyb20gZGljdGlvbmFyeS4KCiAgICBBcmdzOgogICAgICBmaWVsZDogRGljdGlvbmFyeSBvYmplY3QgY29udGFpbmluZyBzZXJpYWxpemVkIHNjaGVtYS4KCiAgICBSZXR1cm5zOgogICAgICBBIFRhYmxlRmllbGRTY2hlbWEgZm9yIGEgc2luZ2xlIGNvbHVtbiBpbiBCaWdRdWVyeS4KICAgICIiIgogICAgc2NoZW1hID0gYmlncXVlcnkuVGFibGVGaWVsZFNjaGVtYSgpCiAgICBzY2hlbWEubmFtZSA9IGZpZWxkWyduYW1lJ10KICAgIHNjaGVtYS50eXBlID0gZmllbGRbJ3R5cGUnXQogICAgaWYgJ21vZGUnIGluIGZpZWxkOgogICAgICBzY2hlbWEubW9kZSA9IGZpZWxkWydtb2RlJ10KICAgIGVsc2U6CiAgICAgIHNjaGVtYS5tb2RlID0gJ05VTExBQkxFJwogICAgaWYgJ2Rlc2NyaXB0aW9uJyBpbiBmaWVsZDoKICAgICAgc2NoZW1hLmRlc2NyaXB0aW9uID0gZmllbGRbJ2Rlc2NyaXB0aW9uJ10KICAgIGlmICdmaWVsZHMnIGluIGZpZWxkOgogICAgICBzY2hlbWEuZmllbGRzID0gW19wYXJzZV9zY2hlbWFfZmllbGQoeCkgZm9yIHggaW4gZmllbGRbJ2ZpZWxkcyddXQogICAgcmV0dXJuIHNjaGVtYQoKICBmaWVsZHMgPSBbX3BhcnNlX3NjaGVtYV9maWVsZChmKSBmb3IgZiBpbiBqc29uX3NjaGVtYVsnZmllbGRzJ11dCiAgcmV0dXJuIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hKGZpZWxkcz1maWVsZHMpCgoKZGVmIHBhcnNlX3RhYmxlX3JlZmVyZW5jZSh0YWJsZSwgZGF0YXNldD1Ob25lLCBwcm9qZWN0PU5vbmUpOgogICIiIlBhcnNlcyBhIHRhYmxlIHJlZmVyZW5jZSBpbnRvIGEgKHByb2plY3QsIGRhdGFzZXQsIHRhYmxlKSB0dXBsZS4KCiAgQXJnczoKICAgIHRhYmxlOiBUaGUgSUQgb2YgdGhlIHRhYmxlLiBUaGUgSUQgbXVzdCBjb250YWluIG9ubHkgbGV0dGVycwogICAgICAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBvciB1bmRlcnNjb3JlcyAoXykuIElmIGRhdGFzZXQgYXJndW1lbnQgaXMgTm9uZQogICAgICB0aGVuIHRoZSB0YWJsZSBhcmd1bWVudCBtdXN0IGNvbnRhaW4gdGhlIGVudGlyZSB0YWJsZSByZWZlcmVuY2U6CiAgICAgICdEQVRBU0VULlRBQkxFJyBvciAnUFJPSkVDVDpEQVRBU0VULlRBQkxFJy4gVGhpcyBhcmd1bWVudCBjYW4gYmUgYQogICAgICBiaWdxdWVyeS5UYWJsZVJlZmVyZW5jZSBpbnN0YW5jZSBpbiB3aGljaCBjYXNlIGRhdGFzZXQgYW5kIHByb2plY3QgYXJlCiAgICAgIGlnbm9yZWQgYW5kIHRoZSByZWZlcmVuY2UgaXMgcmV0dXJuZWQgYXMgYSByZXN1bHQuICBBZGRpdGlvbmFsbHksIGZvciBkYXRlCiAgICAgIHBhcnRpdGlvbmVkIHRhYmxlcywgYXBwZW5kaW5nICckWVlZWW1tZGQnIHRvIHRoZSB0YWJsZSBuYW1lIGlzIHN1cHBvcnRlZCwKICAgICAgZS5nLiAnREFUQVNFVC5UQUJMRSRZWVlZbW1kZCcuCiAgICBkYXRhc2V0OiBUaGUgSUQgb2YgdGhlIGRhdGFzZXQgY29udGFpbmluZyB0aGlzIHRhYmxlIG9yIG51bGwgaWYgdGhlIHRhYmxlCiAgICAgIHJlZmVyZW5jZSBpcyBzcGVjaWZpZWQgZW50aXJlbHkgYnkgdGhlIHRhYmxlIGFyZ3VtZW50LgogICAgcHJvamVjdDogVGhlIElEIG9mIHRoZSBwcm9qZWN0IGNvbnRhaW5pbmcgdGhpcyB0YWJsZSBvciBudWxsIGlmIHRoZSB0YWJsZQogICAgICByZWZlcmVuY2UgaXMgc3BlY2lmaWVkIGVudGlyZWx5IGJ5IHRoZSB0YWJsZSAoYW5kIHBvc3NpYmx5IGRhdGFzZXQpCiAgICAgIGFyZ3VtZW50LgoKICBSZXR1cm5zOgogICAgQSBUYWJsZVJlZmVyZW5jZSBvYmplY3QgZnJvbSB0aGUgYmlncXVlcnkgQVBJLiBUaGUgb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nCiAgICBhdHRyaWJ1dGVzOiBwcm9qZWN0SWQsIGRhdGFzZXRJZCwgYW5kIHRhYmxlSWQuCgogIFJhaXNlczoKICAgIFZhbHVlRXJyb3I6IGlmIHRoZSB0YWJsZSByZWZlcmVuY2UgYXMgYSBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkCiAgICAgIGZvcm1hdC4KICAiIiIKCiAgaWYgaXNpbnN0YW5jZSh0YWJsZSwgYmlncXVlcnkuVGFibGVSZWZlcmVuY2UpOgogICAgcmV0dXJuIHRhYmxlCiAgZWxpZiBjYWxsYWJsZSh0YWJsZSk6CiAgICByZXR1cm4gdGFibGUKICBlbGlmIGlzaW5zdGFuY2UodGFibGUsIHZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXIpOgogICAgcmV0dXJuIHRhYmxlCgogIHRhYmxlX3JlZmVyZW5jZSA9IGJpZ3F1ZXJ5LlRhYmxlUmVmZXJlbmNlKCkKICAjIElmIGRhdGFzZXQgYXJndW1lbnQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlCiAgIyB0YWJsZSBhcmd1bWVudCB3aWxsIGNvbnRhaW4gYSBmdWxsIHRhYmxlIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGp1c3QgYQogICMgdGFibGUgbmFtZS4KICBpZiBkYXRhc2V0IGlzIE5vbmU6CiAgICBtYXRjaCA9IHJlLm1hdGNoKAogICAgICAgIHInXigoP1A8cHJvamVjdD4uKyk6KT8oP1A8ZGF0YXNldD5cdyspXC4oP1A8dGFibGU+W1x3XCRdKykkJywgdGFibGUpCiAgICBpZiBub3QgbWF0Y2g6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnRXhwZWN0ZWQgYSB0YWJsZSByZWZlcmVuY2UgKFBST0pFQ1Q6REFUQVNFVC5UQUJMRSBvciAnCiAgICAgICAgICAnREFUQVNFVC5UQUJMRSkgaW5zdGVhZCBvZiAlcy4nICUgdGFibGUpCiAgICB0YWJsZV9yZWZlcmVuY2UucHJvamVjdElkID0gbWF0Y2guZ3JvdXAoJ3Byb2plY3QnKQogICAgdGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCA9IG1hdGNoLmdyb3VwKCdkYXRhc2V0JykKICAgIHRhYmxlX3JlZmVyZW5jZS50YWJsZUlkID0gbWF0Y2guZ3JvdXAoJ3RhYmxlJykKICBlbHNlOgogICAgdGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCA9IHByb2plY3QKICAgIHRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQgPSBkYXRhc2V0CiAgICB0YWJsZV9yZWZlcmVuY2UudGFibGVJZCA9IHRhYmxlCiAgcmV0dXJuIHRhYmxlX3JlZmVyZW5jZQoKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCaWdRdWVyeVdyYXBwZXIuCgoKY2xhc3MgQmlnUXVlcnlXcmFwcGVyKG9iamVjdCk6CiAgIiIiQmlnUXVlcnkgY2xpZW50IHdyYXBwZXIgd2l0aCB1dGlsaXRpZXMgZm9yIHF1ZXJ5aW5nLgoKICBUaGUgd3JhcHBlciBpcyB1c2VkIHRvIG9yZ2FuaXplIGFsbCB0aGUgQmlnUXVlcnkgaW50ZWdyYXRpb24gcG9pbnRzIGFuZAogIG9mZmVyIGEgY29tbW9uIHBsYWNlIHdoZXJlIHJldHJ5IGxvZ2ljIGZvciBmYWlsdXJlcyBjYW4gYmUgY29udHJvbGxlZC4KICBJbiBhZGRpdGlvbiBpdCBvZmZlcnMgdmFyaW91cyBmdW5jdGlvbnMgdXNlZCBib3RoIGluIHNvdXJjZXMgYW5kIHNpbmtzCiAgKGUuZy4sIGZpbmQgYW5kIGNyZWF0ZSB0YWJsZXMsIHF1ZXJ5IGEgdGFibGUsIGV0Yy4pLgogICIiIgoKICBURU1QX1RBQkxFID0gJ3RlbXBfdGFibGVfJwogIFRFTVBfREFUQVNFVCA9ICd0ZW1wX2RhdGFzZXRfJwoKICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50PU5vbmUpOgogICAgc2VsZi5jbGllbnQgPSBjbGllbnQgb3IgYmlncXVlcnkuQmlncXVlcnlWMigKICAgICAgICBodHRwPWdldF9uZXdfaHR0cCgpLAogICAgICAgIGNyZWRlbnRpYWxzPWF1dGguZ2V0X3NlcnZpY2VfY3JlZGVudGlhbHMoKSwKICAgICAgICByZXNwb25zZV9lbmNvZGluZz1Ob25lIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIGVsc2UgJ3V0ZjgnKQogICAgc2VsZi5fdW5pcXVlX3Jvd19pZCA9IDAKICAgICMgRm9yIHRlc3Rpbmcgc2NlbmFyaW9zIHdoZXJlIHdlIHBhc3MgaW4gYSBjbGllbnQgd2UgZG8gbm90IHdhbnQgYQogICAgIyByYW5kb21pemVkIHByZWZpeCBmb3Igcm93IElEcy4KICAgIHNlbGYuX3Jvd19pZF9wcmVmaXggPSAnJyBpZiBjbGllbnQgZWxzZSB1dWlkLnV1aWQ0KCkKICAgIHNlbGYuX3RlbXBvcmFyeV90YWJsZV9zdWZmaXggPSB1dWlkLnV1aWQ0KCkuaGV4CgogIEBwcm9wZXJ0eQogIGRlZiB1bmlxdWVfcm93X2lkKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIHVuaXF1ZSByb3cgSUQgKHN0cikgdXNlZCB0byBhdm9pZCBtdWx0aXBsZSBpbnNlcnRpb25zLgoKICAgIElmIHRoZSByb3cgSUQgaXMgcHJvdmlkZWQsIEJpZ1F1ZXJ5IHdpbGwgbWFrZSBhIGJlc3QgZWZmb3J0IHRvIG5vdCBpbnNlcnQKICAgIHRoZSBzYW1lIHJvdyBtdWx0aXBsZSB0aW1lcyBmb3IgZmFpbCBhbmQgcmV0cnkgc2NlbmFyaW9zIGluIHdoaWNoIHRoZSBpbnNlcnQKICAgIHJlcXVlc3QgbWF5IGJlIGlzc3VlZCBzZXZlcmFsIHRpbWVzLiBUaGlzIGNvbWVzIGludG8gcGxheSBmb3Igc2lua3MgZXhlY3V0ZWQKICAgIGluIGEgbG9jYWwgcnVubmVyLgoKICAgIFJldHVybnM6CiAgICAgIGEgdW5pcXVlIHJvdyBJRCBzdHJpbmcKICAgICIiIgogICAgc2VsZi5fdW5pcXVlX3Jvd19pZCArPSAxCiAgICByZXR1cm4gJyVzXyVkJyAlIChzZWxmLl9yb3dfaWRfcHJlZml4LCBzZWxmLl91bmlxdWVfcm93X2lkKQoKICBkZWYgX2dldF90ZW1wX3RhYmxlKHNlbGYsIHByb2plY3RfaWQpOgogICAgcmV0dXJuIHBhcnNlX3RhYmxlX3JlZmVyZW5jZSgKICAgICAgICB0YWJsZT1CaWdRdWVyeVdyYXBwZXIuVEVNUF9UQUJMRSArIHNlbGYuX3RlbXBvcmFyeV90YWJsZV9zdWZmaXgsCiAgICAgICAgZGF0YXNldD1CaWdRdWVyeVdyYXBwZXIuVEVNUF9EQVRBU0VUICsgc2VsZi5fdGVtcG9yYXJ5X3RhYmxlX3N1ZmZpeCwKICAgICAgICBwcm9qZWN0PXByb2plY3RfaWQpCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGdldF9xdWVyeV9sb2NhdGlvbihzZWxmLCBwcm9qZWN0X2lkLCBxdWVyeSwgdXNlX2xlZ2FjeV9zcWwpOgogICAgIiIiCiAgICBHZXQgdGhlIGxvY2F0aW9uIG9mIHRhYmxlcyByZWZlcmVuY2VkIGluIGEgcXVlcnkuCgogICAgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpcnN0IHJlZmVyZW5jZWQgdGFibGUgaW4gdGhlIHF1ZXJ5CiAgICBhbmQgZGVwZW5kcyBvbiB0aGUgQmlnUXVlcnkgc2VydmljZSB0byBwcm92aWRlIGVycm9yIGhhbmRsaW5nIGZvcgogICAgcXVlcmllcyB0aGF0IHJlZmVyZW5jZSB0YWJsZXMgaW4gbXVsdGlwbGUgbG9jYXRpb25zLgogICAgIiIiCiAgICByZWZlcmVuY2UgPSBiaWdxdWVyeS5Kb2JSZWZlcmVuY2UoCiAgICAgICAgam9iSWQ9dXVpZC51dWlkNCgpLmhleCwgcHJvamVjdElkPXByb2plY3RfaWQpCiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlKb2JzSW5zZXJ0UmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwKICAgICAgICBqb2I9YmlncXVlcnkuSm9iKAogICAgICAgICAgICBjb25maWd1cmF0aW9uPWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb24oCiAgICAgICAgICAgICAgICBkcnlSdW49VHJ1ZSwKICAgICAgICAgICAgICAgIHF1ZXJ5PWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb25RdWVyeSgKICAgICAgICAgICAgICAgICAgICBxdWVyeT1xdWVyeSwKICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3lTcWw9dXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgam9iUmVmZXJlbmNlPXJlZmVyZW5jZSkpCgogICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5qb2JzLkluc2VydChyZXF1ZXN0KQoKICAgIGlmIHJlc3BvbnNlLnN0YXRpc3RpY3MgaXMgTm9uZToKICAgICAgIyBUaGlzIGJlaGF2aW9yIGlzIG9ubHkgZXhwZWN0ZWQgaW4gdGVzdHMKICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgIlVuYWJsZSB0byBnZXQgbG9jYXRpb24sIG1pc3NpbmcgcmVzcG9uc2Uuc3RhdGlzdGljcy4gUXVlcnk6ICVzIiwKICAgICAgICAgIHF1ZXJ5KQogICAgICByZXR1cm4gTm9uZQoKICAgIHJlZmVyZW5jZWRfdGFibGVzID0gcmVzcG9uc2Uuc3RhdGlzdGljcy5xdWVyeS5yZWZlcmVuY2VkVGFibGVzCiAgICBpZiByZWZlcmVuY2VkX3RhYmxlczogICMgR3VhcmRzIGFnYWluc3QgYm90aCBub24tZW1wdHkgYW5kIG5vbi1Ob25lCiAgICAgIHRhYmxlID0gcmVmZXJlbmNlZF90YWJsZXNbMF0KICAgICAgbG9jYXRpb24gPSBzZWxmLmdldF90YWJsZV9sb2NhdGlvbigKICAgICAgICAgIHRhYmxlLnByb2plY3RJZCwgdGFibGUuZGF0YXNldElkLCB0YWJsZS50YWJsZUlkKQogICAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgICAiVXNpbmcgbG9jYXRpb24gJXIgZnJvbSB0YWJsZSAlciByZWZlcmVuY2VkIGJ5IHF1ZXJ5ICVzIiwKICAgICAgICAgIGxvY2F0aW9uLAogICAgICAgICAgdGFibGUsCiAgICAgICAgICBxdWVyeSkKICAgICAgcmV0dXJuIGxvY2F0aW9uCgogICAgX0xPR0dFUi5kZWJ1ZygiUXVlcnkgJXMgZG9lcyBub3QgcmVmZXJlbmNlIGFueSB0YWJsZXMuIiwgcXVlcnkpCiAgICByZXR1cm4gTm9uZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBfaW5zZXJ0X2NvcHlfam9iKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0X2lkLAogICAgICBqb2JfaWQsCiAgICAgIGZyb21fdGFibGVfcmVmZXJlbmNlLAogICAgICB0b190YWJsZV9yZWZlcmVuY2UsCiAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbj1Ob25lLAogICAgICB3cml0ZV9kaXNwb3NpdGlvbj1Ob25lKToKICAgIHJlZmVyZW5jZSA9IGJpZ3F1ZXJ5LkpvYlJlZmVyZW5jZSgpCiAgICByZWZlcmVuY2Uuam9iSWQgPSBqb2JfaWQKICAgIHJlZmVyZW5jZS5wcm9qZWN0SWQgPSBwcm9qZWN0X2lkCiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlKb2JzSW5zZXJ0UmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwKICAgICAgICBqb2I9YmlncXVlcnkuSm9iKAogICAgICAgICAgICBjb25maWd1cmF0aW9uPWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb24oCiAgICAgICAgICAgICAgICBjb3B5PWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb25UYWJsZUNvcHkoCiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25UYWJsZT10b190YWJsZV9yZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgc291cmNlVGFibGU9ZnJvbV90YWJsZV9yZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGlzcG9zaXRpb249Y3JlYXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgIHdyaXRlRGlzcG9zaXRpb249d3JpdGVfZGlzcG9zaXRpb24sCiAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgam9iUmVmZXJlbmNlPXJlZmVyZW5jZSwKICAgICAgICApKQoKICAgIF9MT0dHRVIuaW5mbygiSW5zZXJ0aW5nIGpvYiByZXF1ZXN0OiAlcyIsIHJlcXVlc3QpCiAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmpvYnMuSW5zZXJ0KHJlcXVlc3QpCiAgICBfTE9HR0VSLmluZm8oIlJlc3BvbnNlIHdhcyAlcyIsIHJlc3BvbnNlKQogICAgcmV0dXJuIHJlc3BvbnNlLmpvYlJlZmVyZW5jZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBfaW5zZXJ0X2xvYWRfam9iKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0X2lkLAogICAgICBqb2JfaWQsCiAgICAgIHRhYmxlX3JlZmVyZW5jZSwKICAgICAgc291cmNlX3VyaXMsCiAgICAgIHNjaGVtYT1Ob25lLAogICAgICB3cml0ZV9kaXNwb3NpdGlvbj1Ob25lLAogICAgICBjcmVhdGVfZGlzcG9zaXRpb249Tm9uZSwKICAgICAgYWRkaXRpb25hbF9sb2FkX3BhcmFtZXRlcnM9Tm9uZSk6CiAgICBhZGRpdGlvbmFsX2xvYWRfcGFyYW1ldGVycyA9IGFkZGl0aW9uYWxfbG9hZF9wYXJhbWV0ZXJzIG9yIHt9CiAgICBqb2Jfc2NoZW1hID0gTm9uZSBpZiBzY2hlbWEgPT0gJ1NDSEVNQV9BVVRPREVURUNUJyBlbHNlIHNjaGVtYQogICAgcmVmZXJlbmNlID0gYmlncXVlcnkuSm9iUmVmZXJlbmNlKGpvYklkPWpvYl9pZCwgcHJvamVjdElkPXByb2plY3RfaWQpCiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlKb2JzSW5zZXJ0UmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwKICAgICAgICBqb2I9YmlncXVlcnkuSm9iKAogICAgICAgICAgICBjb25maWd1cmF0aW9uPWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb24oCiAgICAgICAgICAgICAgICBsb2FkPWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb25Mb2FkKAogICAgICAgICAgICAgICAgICAgIHNvdXJjZVVyaXM9c291cmNlX3VyaXMsCiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25UYWJsZT10YWJsZV9yZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgc2NoZW1hPWpvYl9zY2hlbWEsCiAgICAgICAgICAgICAgICAgICAgd3JpdGVEaXNwb3NpdGlvbj13cml0ZV9kaXNwb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICBjcmVhdGVEaXNwb3NpdGlvbj1jcmVhdGVfZGlzcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgc291cmNlRm9ybWF0PSdORVdMSU5FX0RFTElNSVRFRF9KU09OJywKICAgICAgICAgICAgICAgICAgICBhdXRvZGV0ZWN0PXNjaGVtYSA9PSAnU0NIRU1BX0FVVE9ERVRFQ1QnLAogICAgICAgICAgICAgICAgICAgICoqYWRkaXRpb25hbF9sb2FkX3BhcmFtZXRlcnMpKSwKICAgICAgICAgICAgam9iUmVmZXJlbmNlPXJlZmVyZW5jZSwKICAgICAgICApKQogICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5qb2JzLkluc2VydChyZXF1ZXN0KQogICAgcmV0dXJuIHJlc3BvbnNlLmpvYlJlZmVyZW5jZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBfc3RhcnRfcXVlcnlfam9iKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0X2lkLAogICAgICBxdWVyeSwKICAgICAgdXNlX2xlZ2FjeV9zcWwsCiAgICAgIGZsYXR0ZW5fcmVzdWx0cywKICAgICAgam9iX2lkLAogICAgICBkcnlfcnVuPUZhbHNlLAogICAgICBrbXNfa2V5PU5vbmUpOgogICAgcmVmZXJlbmNlID0gYmlncXVlcnkuSm9iUmVmZXJlbmNlKGpvYklkPWpvYl9pZCwgcHJvamVjdElkPXByb2plY3RfaWQpCiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlKb2JzSW5zZXJ0UmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwKICAgICAgICBqb2I9YmlncXVlcnkuSm9iKAogICAgICAgICAgICBjb25maWd1cmF0aW9uPWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb24oCiAgICAgICAgICAgICAgICBkcnlSdW49ZHJ5X3J1biwKICAgICAgICAgICAgICAgIHF1ZXJ5PWJpZ3F1ZXJ5LkpvYkNvbmZpZ3VyYXRpb25RdWVyeSgKICAgICAgICAgICAgICAgICAgICBxdWVyeT1xdWVyeSwKICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3lTcWw9dXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgICAgICAgICAgICAgYWxsb3dMYXJnZVJlc3VsdHM9bm90IGRyeV9ydW4sCiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25UYWJsZT1zZWxmLl9nZXRfdGVtcF90YWJsZShwcm9qZWN0X2lkKQogICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkcnlfcnVuIGVsc2UgTm9uZSwKICAgICAgICAgICAgICAgICAgICBmbGF0dGVuUmVzdWx0cz1mbGF0dGVuX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbj1iaWdxdWVyeS4KICAgICAgICAgICAgICAgICAgICBFbmNyeXB0aW9uQ29uZmlndXJhdGlvbihrbXNLZXlOYW1lPWttc19rZXkpKSksCiAgICAgICAgICAgIGpvYlJlZmVyZW5jZT1yZWZlcmVuY2UpKQoKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuam9icy5JbnNlcnQocmVxdWVzdCkKICAgIHJldHVybiByZXNwb25zZQoKICBkZWYgd2FpdF9mb3JfYnFfam9iKAogICAgICBzZWxmLCBqb2JfcmVmZXJlbmNlLCBzbGVlcF9kdXJhdGlvbl9zZWM9NSwgbWF4X3JldHJpZXM9NjApOgogICAgIiIiUG9sbCBqb2IgdW50aWwgaXQgaXMgRE9ORS4KCiAgICBBcmdzOgogICAgICBqb2JfcmVmZXJlbmNlOiBiaWdxdWVyeS5Kb2JSZWZlcmVuY2UgaW5zdGFuY2UuCiAgICAgIHNsZWVwX2R1cmF0aW9uX3NlYzogU3BlY2lmaWVzIHRoZSBkZWxheSBpbiBzZWNvbmRzIGJldHdlZW4gcmV0cmllcy4KICAgICAgbWF4X3JldHJpZXM6IFRoZSB0b3RhbCBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkuIElmIGVxdWFscyB0byAwLAogICAgICAgIHRoZSBmdW5jdGlvbiB3YWl0cyBmb3JldmVyLgoKICAgIFJhaXNlczoKICAgICAgYFJ1bnRpbWVFcnJvcmA6IElmIHRoZSBqb2IgaXMgRkFJTEVEIG9yIHRoZSBudW1iZXIgb2YgcmV0cmllcyBoYXMgYmVlbgogICAgICAgIHJlYWNoZWQuCiAgICAiIiIKICAgIHJldHJ5ID0gMAogICAgd2hpbGUgVHJ1ZToKICAgICAgcmV0cnkgKz0gMQogICAgICBqb2IgPSBzZWxmLmdldF9qb2IoCiAgICAgICAgICBqb2JfcmVmZXJlbmNlLnByb2plY3RJZCwgam9iX3JlZmVyZW5jZS5qb2JJZCwgam9iX3JlZmVyZW5jZS5sb2NhdGlvbikKICAgICAgbG9nZ2luZy5pbmZvKCdKb2Igc3RhdHVzOiAlcycsIGpvYi5zdGF0dXMuc3RhdGUpCiAgICAgIGlmIGpvYi5zdGF0dXMuc3RhdGUgPT0gJ0RPTkUnIGFuZCBqb2Iuc3RhdHVzLmVycm9yUmVzdWx0OgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgJ0JpZ1F1ZXJ5IGpvYiB7fSBmYWlsZWQuIEVycm9yIFJlc3VsdDoge30nLmZvcm1hdCgKICAgICAgICAgICAgICAgIGpvYl9yZWZlcmVuY2Uuam9iSWQsIGpvYi5zdGF0dXMuZXJyb3JSZXN1bHQpKQogICAgICBlbGlmIGpvYi5zdGF0dXMuc3RhdGUgPT0gJ0RPTkUnOgogICAgICAgIHJldHVybiBUcnVlCiAgICAgIGVsc2U6CiAgICAgICAgdGltZS5zbGVlcChzbGVlcF9kdXJhdGlvbl9zZWMpCiAgICAgICAgaWYgbWF4X3JldHJpZXMgIT0gMCBhbmQgcmV0cnkgPj0gbWF4X3JldHJpZXM6CiAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIGhhcyBiZWVuIHJlYWNoZWQnKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBfZ2V0X3F1ZXJ5X3Jlc3VsdHMoCiAgICAgIHNlbGYsCiAgICAgIHByb2plY3RfaWQsCiAgICAgIGpvYl9pZCwKICAgICAgcGFnZV90b2tlbj1Ob25lLAogICAgICBtYXhfcmVzdWx0cz0xMDAwMCwKICAgICAgbG9jYXRpb249Tm9uZSk6CiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlKb2JzR2V0UXVlcnlSZXN1bHRzUmVxdWVzdCgKICAgICAgICBqb2JJZD1qb2JfaWQsCiAgICAgICAgcGFnZVRva2VuPXBhZ2VfdG9rZW4sCiAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsCiAgICAgICAgbWF4UmVzdWx0cz1tYXhfcmVzdWx0cywKICAgICAgICBsb2NhdGlvbj1sb2NhdGlvbikKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuam9icy5HZXRRdWVyeVJlc3VsdHMocmVxdWVzdCkKICAgIHJldHVybiByZXNwb25zZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfdGltZW91dF9vcl9xdW90YV9pc3N1ZXNfZmlsdGVyKQogIGRlZiBfaW5zZXJ0X2FsbF9yb3dzKAogICAgICBzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCwgcm93cywgc2tpcF9pbnZhbGlkX3Jvd3M9RmFsc2UpOgogICAgIiIiQ2FsbHMgdGhlIGluc2VydEFsbCBCaWdRdWVyeSBBUEkgZW5kcG9pbnQuCgogICAgRG9jcyBmb3IgdGhpcyBCUSBjYWxsOiBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2VcCiAgICAgIC9yZXN0L3YyL3RhYmxlZGF0YS9pbnNlcnRBbGwuIiIiCiAgICAjIFRoZSByb3dzIGFyZ3VtZW50IGlzIGEgbGlzdCBvZgogICAgIyBiaWdxdWVyeS5UYWJsZURhdGFJbnNlcnRBbGxSZXF1ZXN0LlJvd3NWYWx1ZUxpc3RFbnRyeSBpbnN0YW5jZXMgYXMKICAgICMgcmVxdWlyZWQgYnkgdGhlIEluc2VydEFsbCgpIG1ldGhvZC4KICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeVRhYmxlZGF0YUluc2VydEFsbFJlcXVlc3QoCiAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsCiAgICAgICAgZGF0YXNldElkPWRhdGFzZXRfaWQsCiAgICAgICAgdGFibGVJZD10YWJsZV9pZCwKICAgICAgICB0YWJsZURhdGFJbnNlcnRBbGxSZXF1ZXN0PWJpZ3F1ZXJ5LlRhYmxlRGF0YUluc2VydEFsbFJlcXVlc3QoCiAgICAgICAgICAgIHNraXBJbnZhbGlkUm93cz1za2lwX2ludmFsaWRfcm93cywKICAgICAgICAgICAgIyBUT0RPKHNpbHZpdWMpOiBTaG91bGQgaGF2ZSBhbiBvcHRpb24gZm9yIGlnbm9yZVVua25vd25WYWx1ZXM/CiAgICAgICAgICAgIHJvd3M9cm93cykpCiAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LnRhYmxlZGF0YS5JbnNlcnRBbGwocmVxdWVzdCkKICAgICMgcmVzcG9uc2UuaW5zZXJ0RXJyb3JzIGlzIG5vdCBbXSBpZiBlcnJvcnMgZW5jb3VudGVyZWQuCiAgICByZXR1cm4gbm90IHJlc3BvbnNlLmluc2VydEVycm9ycywgcmVzcG9uc2UuaW5zZXJ0RXJyb3JzCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGdldF90YWJsZShzZWxmLCBwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCk6CiAgICAiIiJMb29rdXAgYSB0YWJsZSdzIG1ldGFkYXRhIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBjbGllbnQ6IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5VjIgaW5zdGFuY2UKICAgICAgcHJvamVjdF9pZDogdGFibGUgbG9va3VwIHBhcmFtZXRlcgogICAgICBkYXRhc2V0X2lkOiB0YWJsZSBsb29rdXAgcGFyYW1ldGVyCiAgICAgIHRhYmxlX2lkOiB0YWJsZSBsb29rdXAgcGFyYW1ldGVyCgogICAgUmV0dXJuczoKICAgICAgYmlncXVlcnkuVGFibGUgaW5zdGFuY2UKICAgIFJhaXNlczoKICAgICAgSHR0cEVycm9yOiBpZiBsb29rdXAgZmFpbGVkLgogICAgIiIiCiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlUYWJsZXNHZXRSZXF1ZXN0KAogICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwgdGFibGVJZD10YWJsZV9pZCkKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQudGFibGVzLkdldChyZXF1ZXN0KQogICAgcmV0dXJuIHJlc3BvbnNlCgogIGRlZiBfY3JlYXRlX3RhYmxlKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0X2lkLAogICAgICBkYXRhc2V0X2lkLAogICAgICB0YWJsZV9pZCwKICAgICAgc2NoZW1hLAogICAgICBhZGRpdGlvbmFsX3BhcmFtZXRlcnM9Tm9uZSk6CiAgICBhZGRpdGlvbmFsX3BhcmFtZXRlcnMgPSBhZGRpdGlvbmFsX3BhcmFtZXRlcnMgb3Ige30KICAgIHRhYmxlID0gYmlncXVlcnkuVGFibGUoCiAgICAgICAgdGFibGVSZWZlcmVuY2U9YmlncXVlcnkuVGFibGVSZWZlcmVuY2UoCiAgICAgICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwgdGFibGVJZD10YWJsZV9pZCksCiAgICAgICAgc2NoZW1hPXNjaGVtYSwKICAgICAgICAqKmFkZGl0aW9uYWxfcGFyYW1ldGVycykKICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeVRhYmxlc0luc2VydFJlcXVlc3QoCiAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD1kYXRhc2V0X2lkLCB0YWJsZT10YWJsZSkKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQudGFibGVzLkluc2VydChyZXF1ZXN0KQogICAgX0xPR0dFUi5kZWJ1ZygiQ3JlYXRlZCB0aGUgdGFibGUgd2l0aCBpZCAlcyIsIHRhYmxlX2lkKQogICAgIyBUaGUgcmVzcG9uc2UgaXMgYSBiaWdxdWVyeS5UYWJsZSBpbnN0YW5jZS4KICAgIHJldHVybiByZXNwb25zZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfb3JfY3JlYXRlX2RhdGFzZXQoc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgbG9jYXRpb249Tm9uZSk6CiAgICAjIENoZWNrIGlmIGRhdGFzZXQgYWxyZWFkeSBleGlzdHMgb3RoZXJ3aXNlIGNyZWF0ZSBpdAogICAgdHJ5OgogICAgICBkYXRhc2V0ID0gc2VsZi5jbGllbnQuZGF0YXNldHMuR2V0KAogICAgICAgICAgYmlncXVlcnkuQmlncXVlcnlEYXRhc2V0c0dldFJlcXVlc3QoCiAgICAgICAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD1kYXRhc2V0X2lkKSkKICAgICAgcmV0dXJuIGRhdGFzZXQKICAgIGV4Y2VwdCBIdHRwRXJyb3IgYXMgZXhuOgogICAgICBpZiBleG4uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgIGRhdGFzZXRfcmVmZXJlbmNlID0gYmlncXVlcnkuRGF0YXNldFJlZmVyZW5jZSgKICAgICAgICAgICAgcHJvamVjdElkPXByb2plY3RfaWQsIGRhdGFzZXRJZD1kYXRhc2V0X2lkKQogICAgICAgIGRhdGFzZXQgPSBiaWdxdWVyeS5EYXRhc2V0KGRhdGFzZXRSZWZlcmVuY2U9ZGF0YXNldF9yZWZlcmVuY2UpCiAgICAgICAgaWYgbG9jYXRpb24gaXMgbm90IE5vbmU6CiAgICAgICAgICBkYXRhc2V0LmxvY2F0aW9uID0gbG9jYXRpb24KICAgICAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlEYXRhc2V0c0luc2VydFJlcXVlc3QoCiAgICAgICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0PWRhdGFzZXQpCiAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5kYXRhc2V0cy5JbnNlcnQocmVxdWVzdCkKICAgICAgICAjIFRoZSByZXNwb25zZSBpcyBhIGJpZ3F1ZXJ5LkRhdGFzZXQgaW5zdGFuY2UuCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2lzX3RhYmxlX2VtcHR5KHNlbGYsIHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkKToKICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeVRhYmxlZGF0YUxpc3RSZXF1ZXN0KAogICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLAogICAgICAgIGRhdGFzZXRJZD1kYXRhc2V0X2lkLAogICAgICAgIHRhYmxlSWQ9dGFibGVfaWQsCiAgICAgICAgbWF4UmVzdWx0cz0xKQogICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC50YWJsZWRhdGEuTGlzdChyZXF1ZXN0KQogICAgIyBUaGUgcmVzcG9uc2UgaXMgYSBiaWdxdWVyeS5UYWJsZURhdGFMaXN0IGluc3RhbmNlLgogICAgcmV0dXJuIHJlc3BvbnNlLnRvdGFsUm93cyA9PSAwCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIG51bV9yZXRyaWVzPU1BWF9SRVRSSUVTLAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIF9kZWxldGVfdGFibGUoc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpOgogICAgcmVxdWVzdCA9IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5VGFibGVzRGVsZXRlUmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPWRhdGFzZXRfaWQsIHRhYmxlSWQ9dGFibGVfaWQpCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50LnRhYmxlcy5EZWxldGUocmVxdWVzdCkKICAgIGV4Y2VwdCBIdHRwRXJyb3IgYXMgZXhuOgogICAgICBpZiBleG4uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICAgJ1RhYmxlICVzOiVzLiVzIGRvZXMgbm90IGV4aXN0JywgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpCiAgICAgICAgcmV0dXJuCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2RlbGV0ZV9kYXRhc2V0KHNlbGYsIHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIGRlbGV0ZV9jb250ZW50cz1UcnVlKToKICAgIHJlcXVlc3QgPSBiaWdxdWVyeS5CaWdxdWVyeURhdGFzZXRzRGVsZXRlUmVxdWVzdCgKICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwKICAgICAgICBkYXRhc2V0SWQ9ZGF0YXNldF9pZCwKICAgICAgICBkZWxldGVDb250ZW50cz1kZWxldGVfY29udGVudHMpCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50LmRhdGFzZXRzLkRlbGV0ZShyZXF1ZXN0KQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBleG46CiAgICAgIGlmIGV4bi5zdGF0dXNfY29kZSA9PSA0MDQ6CiAgICAgICAgX0xPR0dFUi53YXJuaW5nKCdEYXRhc2V0ICVzOiVzIGRvZXMgbm90IGV4aXN0JywgcHJvamVjdF9pZCwgZGF0YXNldF9pZCkKICAgICAgICByZXR1cm4KICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfdGFibGVfbG9jYXRpb24oc2VsZiwgcHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpOgogICAgdGFibGUgPSBzZWxmLmdldF90YWJsZShwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCkKICAgIHJldHVybiB0YWJsZS5sb2NhdGlvbgoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBjcmVhdGVfdGVtcG9yYXJ5X2RhdGFzZXQoc2VsZiwgcHJvamVjdF9pZCwgbG9jYXRpb24pOgogICAgZGF0YXNldF9pZCA9IEJpZ1F1ZXJ5V3JhcHBlci5URU1QX0RBVEFTRVQgKyBzZWxmLl90ZW1wb3JhcnlfdGFibGVfc3VmZml4CiAgICAjIENoZWNrIGlmIGRhdGFzZXQgZXhpc3RzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZW1wb3JhcnkgaWQgaXMgdW5pcXVlCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50LmRhdGFzZXRzLkdldCgKICAgICAgICAgIGJpZ3F1ZXJ5LkJpZ3F1ZXJ5RGF0YXNldHNHZXRSZXF1ZXN0KAogICAgICAgICAgICAgIHByb2plY3RJZD1wcm9qZWN0X2lkLCBkYXRhc2V0SWQ9ZGF0YXNldF9pZCkpCiAgICAgIGlmIHByb2plY3RfaWQgaXMgbm90IE5vbmU6CiAgICAgICAgIyBVbml0dGVzdHMgZG9uJ3QgcGFzcyBwcm9qZWN0SWRzIHNvIHRoZXkgY2FuIGJlIHJ1biB3aXRob3V0IGVycm9yCiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAnRGF0YXNldCAlczolcyBhbHJlYWR5IGV4aXN0cyBzbyBjYW5ub3QgYmUgdXNlZCBhcyB0ZW1wb3JhcnkuJyAlCiAgICAgICAgICAgIChwcm9qZWN0X2lkLCBkYXRhc2V0X2lkKSkKICAgIGV4Y2VwdCBIdHRwRXJyb3IgYXMgZXhuOgogICAgICBpZiBleG4uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICAgJ0RhdGFzZXQgJXM6JXMgZG9lcyBub3QgZXhpc3Qgc28gd2Ugd2lsbCBjcmVhdGUgaXQgYXMgdGVtcG9yYXJ5ICcKICAgICAgICAgICAgJ3dpdGggbG9jYXRpb249JXMnLAogICAgICAgICAgICBwcm9qZWN0X2lkLAogICAgICAgICAgICBkYXRhc2V0X2lkLAogICAgICAgICAgICBsb2NhdGlvbikKICAgICAgICBzZWxmLmdldF9vcl9jcmVhdGVfZGF0YXNldChwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCBsb2NhdGlvbj1sb2NhdGlvbikKICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBjbGVhbl91cF90ZW1wb3JhcnlfZGF0YXNldChzZWxmLCBwcm9qZWN0X2lkKToKICAgIHRlbXBfdGFibGUgPSBzZWxmLl9nZXRfdGVtcF90YWJsZShwcm9qZWN0X2lkKQogICAgdHJ5OgogICAgICBzZWxmLmNsaWVudC5kYXRhc2V0cy5HZXQoCiAgICAgICAgICBiaWdxdWVyeS5CaWdxdWVyeURhdGFzZXRzR2V0UmVxdWVzdCgKICAgICAgICAgICAgICBwcm9qZWN0SWQ9cHJvamVjdF9pZCwgZGF0YXNldElkPXRlbXBfdGFibGUuZGF0YXNldElkKSkKICAgIGV4Y2VwdCBIdHRwRXJyb3IgYXMgZXhuOgogICAgICBpZiBleG4uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICAgJ0RhdGFzZXQgJXM6JXMgZG9lcyBub3QgZXhpc3QnLCBwcm9qZWN0X2lkLCB0ZW1wX3RhYmxlLmRhdGFzZXRJZCkKICAgICAgICByZXR1cm4KICAgICAgZWxzZToKICAgICAgICByYWlzZQogICAgc2VsZi5fZGVsZXRlX2RhdGFzZXQodGVtcF90YWJsZS5wcm9qZWN0SWQsIHRlbXBfdGFibGUuZGF0YXNldElkLCBUcnVlKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfam9iKHNlbGYsIHByb2plY3QsIGpvYl9pZCwgbG9jYXRpb249Tm9uZSk6CiAgICByZXF1ZXN0ID0gYmlncXVlcnkuQmlncXVlcnlKb2JzR2V0UmVxdWVzdCgpCiAgICByZXF1ZXN0LmpvYklkID0gam9iX2lkCiAgICByZXF1ZXN0LnByb2plY3RJZCA9IHByb2plY3QKICAgIHJlcXVlc3QubG9jYXRpb24gPSBsb2NhdGlvbgoKICAgIHJldHVybiBzZWxmLmNsaWVudC5qb2JzLkdldChyZXF1ZXN0KQoKICBkZWYgcGVyZm9ybV9sb2FkX2pvYigKICAgICAgc2VsZiwKICAgICAgZGVzdGluYXRpb24sCiAgICAgIGZpbGVzLAogICAgICBqb2JfaWQsCiAgICAgIHNjaGVtYT1Ob25lLAogICAgICB3cml0ZV9kaXNwb3NpdGlvbj1Ob25lLAogICAgICBjcmVhdGVfZGlzcG9zaXRpb249Tm9uZSwKICAgICAgYWRkaXRpb25hbF9sb2FkX3BhcmFtZXRlcnM9Tm9uZSk6CiAgICAiIiJTdGFydHMgYSBqb2IgdG8gbG9hZCBkYXRhIGludG8gQmlnUXVlcnkuCgogICAgUmV0dXJuczoKICAgICAgYmlncXVlcnkuSm9iUmVmZXJlbmNlIHdpdGggdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBqb2IgdGhhdCB3YXMgc3RhcnRlZC4KICAgICIiIgogICAgcmV0dXJuIHNlbGYuX2luc2VydF9sb2FkX2pvYigKICAgICAgICBkZXN0aW5hdGlvbi5wcm9qZWN0SWQsCiAgICAgICAgam9iX2lkLAogICAgICAgIGRlc3RpbmF0aW9uLAogICAgICAgIGZpbGVzLAogICAgICAgIHNjaGVtYT1zY2hlbWEsCiAgICAgICAgY3JlYXRlX2Rpc3Bvc2l0aW9uPWNyZWF0ZV9kaXNwb3NpdGlvbiwKICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbj13cml0ZV9kaXNwb3NpdGlvbiwKICAgICAgICBhZGRpdGlvbmFsX2xvYWRfcGFyYW1ldGVycz1hZGRpdGlvbmFsX2xvYWRfcGFyYW1ldGVycykKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgcGVyZm9ybV9leHRyYWN0X2pvYigKICAgICAgc2VsZiwKICAgICAgZGVzdGluYXRpb24sCiAgICAgIGpvYl9pZCwKICAgICAgdGFibGVfcmVmZXJlbmNlLAogICAgICBkZXN0aW5hdGlvbl9mb3JtYXQsCiAgICAgIGluY2x1ZGVfaGVhZGVyPVRydWUsCiAgICAgIGNvbXByZXNzaW9uPUV4cG9ydENvbXByZXNzaW9uLk5PTkUpOgogICAgIiIiU3RhcnRzIGEgam9iIHRvIGV4cG9ydCBkYXRhIGZyb20gQmlnUXVlcnkuCgogICAgUmV0dXJuczoKICAgICAgYmlncXVlcnkuSm9iUmVmZXJlbmNlIHdpdGggdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBqb2IgdGhhdCB3YXMgc3RhcnRlZC4KICAgICIiIgogICAgam9iX3JlZmVyZW5jZSA9IGJpZ3F1ZXJ5LkpvYlJlZmVyZW5jZSgKICAgICAgICBqb2JJZD1qb2JfaWQsIHByb2plY3RJZD10YWJsZV9yZWZlcmVuY2UucHJvamVjdElkKQogICAgcmVxdWVzdCA9IGJpZ3F1ZXJ5LkJpZ3F1ZXJ5Sm9ic0luc2VydFJlcXVlc3QoCiAgICAgICAgcHJvamVjdElkPXRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQsCiAgICAgICAgam9iPWJpZ3F1ZXJ5LkpvYigKICAgICAgICAgICAgY29uZmlndXJhdGlvbj1iaWdxdWVyeS5Kb2JDb25maWd1cmF0aW9uKAogICAgICAgICAgICAgICAgZXh0cmFjdD1iaWdxdWVyeS5Kb2JDb25maWd1cmF0aW9uRXh0cmFjdCgKICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblVyaXM9ZGVzdGluYXRpb24sCiAgICAgICAgICAgICAgICAgICAgc291cmNlVGFibGU9dGFibGVfcmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgIHByaW50SGVhZGVyPWluY2x1ZGVfaGVhZGVyLAogICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uRm9ybWF0PWRlc3RpbmF0aW9uX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj1jb21wcmVzc2lvbiwKICAgICAgICAgICAgICAgICkpLAogICAgICAgICAgICBqb2JSZWZlcmVuY2U9am9iX3JlZmVyZW5jZSwKICAgICAgICApKQogICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5qb2JzLkluc2VydChyZXF1ZXN0KQogICAgcmV0dXJuIHJlc3BvbnNlLmpvYlJlZmVyZW5jZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICBudW1fcmV0cmllcz1NQVhfUkVUUklFUywKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBnZXRfb3JfY3JlYXRlX3RhYmxlKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0X2lkLAogICAgICBkYXRhc2V0X2lkLAogICAgICB0YWJsZV9pZCwKICAgICAgc2NoZW1hLAogICAgICBjcmVhdGVfZGlzcG9zaXRpb24sCiAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uLAogICAgICBhZGRpdGlvbmFsX2NyZWF0ZV9wYXJhbWV0ZXJzPU5vbmUpOgogICAgIiIiR2V0cyBvciBjcmVhdGVzIGEgdGFibGUgYmFzZWQgb24gY3JlYXRlIGFuZCB3cml0ZSBkaXNwb3NpdGlvbnMuCgogICAgVGhlIGZ1bmN0aW9uIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgQmlnUXVlcnkgaW1wb3J0IGpvYnMgd2hlbiB1c2luZyB0aGUKICAgIHNhbWUgY3JlYXRlIGFuZCB3cml0ZSBkaXNwb3NpdGlvbnMuCgogICAgQXJnczoKICAgICAgcHJvamVjdF9pZDogVGhlIHByb2plY3QgaWQgb3duaW5nIHRoZSB0YWJsZS4KICAgICAgZGF0YXNldF9pZDogVGhlIGRhdGFzZXQgaWQgb3duaW5nIHRoZSB0YWJsZS4KICAgICAgdGFibGVfaWQ6IFRoZSB0YWJsZSBpZC4KICAgICAgc2NoZW1hOiBBIGJpZ3F1ZXJ5LlRhYmxlU2NoZW1hIGluc3RhbmNlIG9yIE5vbmUuCiAgICAgIGNyZWF0ZV9kaXNwb3NpdGlvbjogQ1JFQVRFX05FVkVSIG9yIENSRUFURV9JRl9ORUVERUQuCiAgICAgIHdyaXRlX2Rpc3Bvc2l0aW9uOiBXUklURV9BUFBFTkQsIFdSSVRFX0VNUFRZIG9yIFdSSVRFX1RSVU5DQVRFLgoKICAgIFJldHVybnM6CiAgICAgIEEgYmlncXVlcnkuVGFibGUgaW5zdGFuY2UgaWYgdGFibGUgd2FzIGZvdW5kIG9yIGNyZWF0ZWQuCgogICAgUmFpc2VzOgogICAgICBgUnVudGltZUVycm9yYDogRm9yIHZhcmlvdXMgbWlzbWF0Y2hlcyBiZXR3ZWVuIHRoZSBzdGF0ZSBvZiB0aGUgdGFibGUgYW5kCiAgICAgICAgdGhlIGNyZWF0ZS93cml0ZSBkaXNwb3NpdGlvbnMgcGFzc2VkIGluLiBGb3IgZXhhbXBsZSBpZiB0aGUgdGFibGUgaXMgbm90CiAgICAgICAgZW1wdHkgYW5kIFdSSVRFX0VNUFRZIHdhcyBzcGVjaWZpZWQgdGhlbiBhbiBlcnJvciB3aWxsIGJlIHJhaXNlZCBzaW5jZQogICAgICAgIHRoZSB0YWJsZSB3YXMgZXhwZWN0ZWQgdG8gYmUgZW1wdHkuCiAgICAiIiIKICAgIGZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3F1ZXJ5IGltcG9ydCBCaWdRdWVyeURpc3Bvc2l0aW9uCgogICAgZm91bmRfdGFibGUgPSBOb25lCiAgICB0cnk6CiAgICAgIGZvdW5kX3RhYmxlID0gc2VsZi5nZXRfdGFibGUocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGV4bjoKICAgICAgaWYgZXhuLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICBpZiBjcmVhdGVfZGlzcG9zaXRpb24gPT0gQmlnUXVlcnlEaXNwb3NpdGlvbi5DUkVBVEVfTkVWRVI6CiAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCiAgICAgICAgICAgICAgJ1RhYmxlICVzOiVzLiVzIG5vdCBmb3VuZCBidXQgY3JlYXRlIGRpc3Bvc2l0aW9uIGlzIENSRUFURV9ORVZFUi4nCiAgICAgICAgICAgICAgJSAocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpKQogICAgICBlbHNlOgogICAgICAgIHJhaXNlCgogICAgIyBJZiB0YWJsZSBleGlzdHMgYWxyZWFkeSB0aGVuIGhhbmRsZSB0aGUgc2VtYW50aWNzIGZvciBXUklURV9FTVBUWSBhbmQKICAgICMgV1JJVEVfVFJVTkNBVEUgd3JpdGUgZGlzcG9zaXRpb25zLgogICAgaWYgZm91bmRfdGFibGU6CiAgICAgIHRhYmxlX2VtcHR5ID0gc2VsZi5faXNfdGFibGVfZW1wdHkocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpCiAgICAgIGlmIChub3QgdGFibGVfZW1wdHkgYW5kCiAgICAgICAgICB3cml0ZV9kaXNwb3NpdGlvbiA9PSBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX0VNUFRZKToKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCiAgICAgICAgICAgICdUYWJsZSAlczolcy4lcyBpcyBub3QgZW1wdHkgYnV0IHdyaXRlIGRpc3Bvc2l0aW9uIGlzIFdSSVRFX0VNUFRZLicKICAgICAgICAgICAgJSAocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpKQogICAgICAjIERlbGV0ZSB0aGUgdGFibGUgYW5kIHJlY3JlYXRlIGl0IChsYXRlcikgaWYgV1JJVEVfVFJVTkNBVEUgd2FzCiAgICAgICMgc3BlY2lmaWVkLgogICAgICBpZiB3cml0ZV9kaXNwb3NpdGlvbiA9PSBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX1RSVU5DQVRFOgogICAgICAgIHNlbGYuX2RlbGV0ZV90YWJsZShwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCkKCiAgICAjIENyZWF0ZSBhIG5ldyB0YWJsZSBwb3RlbnRpYWxseSByZXVzaW5nIHRoZSBzY2hlbWEgZnJvbSBhIHByZXZpb3VzbHkKICAgICMgZm91bmQgdGFibGUgaW4gY2FzZSB0aGUgc2NoZW1hIHdhcyBub3Qgc3BlY2lmaWVkLgogICAgaWYgc2NoZW1hIGlzIE5vbmUgYW5kIGZvdW5kX3RhYmxlIGlzIE5vbmU6CiAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICdUYWJsZSAlczolcy4lcyByZXF1aXJlcyBhIHNjaGVtYS4gTm9uZSBjYW4gYmUgaW5mZXJyZWQgYmVjYXVzZSB0aGUgJwogICAgICAgICAgJ3RhYmxlIGRvZXMgbm90IGV4aXN0LicgJSAocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpKQogICAgaWYgZm91bmRfdGFibGUgYW5kIHdyaXRlX2Rpc3Bvc2l0aW9uICE9IEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEU6CiAgICAgIHJldHVybiBmb3VuZF90YWJsZQogICAgZWxzZToKICAgICAgY3JlYXRlZF90YWJsZSA9IE5vbmUKICAgICAgdHJ5OgogICAgICAgIGNyZWF0ZWRfdGFibGUgPSBzZWxmLl9jcmVhdGVfdGFibGUoCiAgICAgICAgICAgIHByb2plY3RfaWQ9cHJvamVjdF9pZCwKICAgICAgICAgICAgZGF0YXNldF9pZD1kYXRhc2V0X2lkLAogICAgICAgICAgICB0YWJsZV9pZD10YWJsZV9pZCwKICAgICAgICAgICAgc2NoZW1hPXNjaGVtYSBvciBmb3VuZF90YWJsZS5zY2hlbWEsCiAgICAgICAgICAgIGFkZGl0aW9uYWxfcGFyYW1ldGVycz1hZGRpdGlvbmFsX2NyZWF0ZV9wYXJhbWV0ZXJzKQogICAgICBleGNlcHQgSHR0cEVycm9yIGFzIGV4bjoKICAgICAgICBpZiBleG4uc3RhdHVzX2NvZGUgPT0gNDA5OgogICAgICAgICAgX0xPR0dFUi5kZWJ1ZygKICAgICAgICAgICAgICAnU2tpcHBpbmcgQ3JlYXRpb24uIFRhYmxlICVzOiVzLiVzIGFscmVhZHkgZXhpc3RzLicgJQogICAgICAgICAgICAgIChwcm9qZWN0X2lkLCBkYXRhc2V0X2lkLCB0YWJsZV9pZCkpCiAgICAgICAgICBjcmVhdGVkX3RhYmxlID0gc2VsZi5nZXRfdGFibGUocHJvamVjdF9pZCwgZGF0YXNldF9pZCwgdGFibGVfaWQpCiAgICAgICAgZWxzZToKICAgICAgICAgIHJhaXNlCiAgICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAgICdDcmVhdGVkIHRhYmxlICVzLiVzLiVzIHdpdGggc2NoZW1hICVzLiAnCiAgICAgICAgICAnUmVzdWx0OiAlcy4nLAogICAgICAgICAgcHJvamVjdF9pZCwKICAgICAgICAgIGRhdGFzZXRfaWQsCiAgICAgICAgICB0YWJsZV9pZCwKICAgICAgICAgIHNjaGVtYSBvciBmb3VuZF90YWJsZS5zY2hlbWEsCiAgICAgICAgICBjcmVhdGVkX3RhYmxlKQogICAgICAjIGlmIHdyaXRlX2Rpc3Bvc2l0aW9uID09IEJpZ1F1ZXJ5RGlzcG9zaXRpb24uV1JJVEVfVFJVTkNBVEUgd2UgZGVsZXRlCiAgICAgICMgdGhlIHRhYmxlIGJlZm9yZSB0aGlzIHBvaW50LgogICAgICBpZiB3cml0ZV9kaXNwb3NpdGlvbiA9PSBCaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX1RSVU5DQVRFOgogICAgICAgICMgQmlnUXVlcnkgY2FuIHJvdXRlIGRhdGEgdG8gdGhlIG9sZCB0YWJsZSBmb3IgMiBtaW5zIG1heCBzbyB3YWl0CiAgICAgICAgIyB0aGF0IG11Y2ggdGltZSBiZWZvcmUgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZCB3cml0aW5nIGl0CiAgICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgICAnU2xlZXBpbmcgZm9yIDE1MCBzZWNvbmRzIGJlZm9yZSB0aGUgd3JpdGUgYXMgJyArCiAgICAgICAgICAgICdCaWdRdWVyeSBpbnNlcnRzIGNhbiBiZSByb3V0ZWQgdG8gZGVsZXRlZCB0YWJsZSAnICsKICAgICAgICAgICAgJ2ZvciAyIG1pbnMgYWZ0ZXIgdGhlIGRlbGV0ZSBhbmQgY3JlYXRlLicpCiAgICAgICAgIyBUT0RPKEJFQU0tMjY3Myk6IFJlbW92ZSB0aGlzIHNsZWVwIGJ5IG1pZ3JhdGluZyB0byBsb2FkIGFwaQogICAgICAgIHRpbWUuc2xlZXAoMTUwKQogICAgICAgIHJldHVybiBjcmVhdGVkX3RhYmxlCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIGNyZWF0ZWRfdGFibGUKCiAgZGVmIHJ1bl9xdWVyeSgKICAgICAgc2VsZiwgcHJvamVjdF9pZCwgcXVlcnksIHVzZV9sZWdhY3lfc3FsLCBmbGF0dGVuX3Jlc3VsdHMsIGRyeV9ydW49RmFsc2UpOgogICAgam9iID0gc2VsZi5fc3RhcnRfcXVlcnlfam9iKAogICAgICAgIHByb2plY3RfaWQsCiAgICAgICAgcXVlcnksCiAgICAgICAgdXNlX2xlZ2FjeV9zcWwsCiAgICAgICAgZmxhdHRlbl9yZXN1bHRzLAogICAgICAgIGpvYl9pZD11dWlkLnV1aWQ0KCkuaGV4LAogICAgICAgIGRyeV9ydW49ZHJ5X3J1bikKICAgIGpvYl9pZCA9IGpvYi5qb2JSZWZlcmVuY2Uuam9iSWQKICAgIGxvY2F0aW9uID0gam9iLmpvYlJlZmVyZW5jZS5sb2NhdGlvbgoKICAgIGlmIGRyeV9ydW46CiAgICAgICMgSWYgdGhpcyB3YXMgYSBkcnkgcnVuIHRoZW4gdGhlIGZhY3QgdGhhdCB3ZSBnZXQgaGVyZSBtZWFucyB0aGUKICAgICAgIyBxdWVyeSBoYXMgbm8gZXJyb3JzLiBUaGUgc3RhcnRfcXVlcnlfam9iIHdvdWxkIHJhaXNlIGFuIGVycm9yIG90aGVyd2lzZS4KICAgICAgcmV0dXJuCiAgICBwYWdlX3Rva2VuID0gTm9uZQogICAgd2hpbGUgVHJ1ZToKICAgICAgcmVzcG9uc2UgPSBzZWxmLl9nZXRfcXVlcnlfcmVzdWx0cygKICAgICAgICAgIHByb2plY3RfaWQsIGpvYl9pZCwgcGFnZV90b2tlbiwgbG9jYXRpb249bG9jYXRpb24pCiAgICAgIGlmIG5vdCByZXNwb25zZS5qb2JDb21wbGV0ZToKICAgICAgICAjIFRoZSBqb2JDb21wbGV0ZSBmaWVsZCBjYW4gYmUgRmFsc2UgaWYgdGhlIHF1ZXJ5IHJlcXVlc3QgdGltZXMgb3V0CiAgICAgICAgIyAoZGVmYXVsdCBpcyAxMCBzZWNvbmRzKS4gTm90ZSB0aGF0IHRoaXMgaXMgYSB0aW1lb3V0IGZvciB0aGUgcXVlcnkKICAgICAgICAjIHJlcXVlc3Qgbm90IGZvciB0aGUgYWN0dWFsIGV4ZWN1dGlvbiBvZiB0aGUgcXVlcnkgaW4gdGhlIHNlcnZpY2UuICBJZgogICAgICAgICMgdGhlIHJlcXVlc3QgdGltZXMgb3V0IHdlIGtlZXAgdHJ5aW5nLiBUaGlzIHNpdHVhdGlvbiBpcyBxdWl0ZSBwb3NzaWJsZQogICAgICAgICMgaWYgdGhlIHF1ZXJ5IHdpbGwgcmV0dXJuIGEgbGFyZ2UgbnVtYmVyIG9mIHJvd3MuCiAgICAgICAgX0xPR0dFUi5pbmZvKCdXYWl0aW5nIG9uIHJlc3BvbnNlIGZyb20gcXVlcnk6ICVzIC4uLicsIHF1ZXJ5KQogICAgICAgIHRpbWUuc2xlZXAoMS4wKQogICAgICAgIGNvbnRpbnVlCiAgICAgICMgV2UgZ290IHNvbWUgcmVzdWx0cy4gVGhlIGxhc3QgcGFnZSBpcyBzaWduYWxsZWQgYnkgYSBtaXNzaW5nIHBhZ2VUb2tlbi4KICAgICAgeWllbGQgcmVzcG9uc2Uucm93cywgcmVzcG9uc2Uuc2NoZW1hCiAgICAgIGlmIG5vdCByZXNwb25zZS5wYWdlVG9rZW46CiAgICAgICAgYnJlYWsKICAgICAgcGFnZV90b2tlbiA9IHJlc3BvbnNlLnBhZ2VUb2tlbgoKICBkZWYgaW5zZXJ0X3Jvd3MoCiAgICAgIHNlbGYsCiAgICAgIHByb2plY3RfaWQsCiAgICAgIGRhdGFzZXRfaWQsCiAgICAgIHRhYmxlX2lkLAogICAgICByb3dzLAogICAgICBpbnNlcnRfaWRzPU5vbmUsCiAgICAgIHNraXBfaW52YWxpZF9yb3dzPUZhbHNlKToKICAgICIiIkluc2VydHMgcm93cyBpbnRvIHRoZSBzcGVjaWZpZWQgdGFibGUuCgogICAgQXJnczoKICAgICAgcHJvamVjdF9pZDogVGhlIHByb2plY3QgaWQgb3duaW5nIHRoZSB0YWJsZS4KICAgICAgZGF0YXNldF9pZDogVGhlIGRhdGFzZXQgaWQgb3duaW5nIHRoZSB0YWJsZS4KICAgICAgdGFibGVfaWQ6IFRoZSB0YWJsZSBpZC4KICAgICAgcm93czogQSBsaXN0IG9mIHBsYWluIFB5dGhvbiBkaWN0aW9uYXJpZXMuIEVhY2ggZGljdGlvbmFyeSBpcyBhIHJvdyBhbmQKICAgICAgICBlYWNoIGtleSBpbiBpdCBpcyB0aGUgbmFtZSBvZiBhIGZpZWxkLgogICAgICBza2lwX2ludmFsaWRfcm93czogSWYgdGhlcmUgYXJlIHJvd3Mgd2l0aCBpbnNlcnRpb24gZXJyb3JzLCB3aGV0aGVyIHRoZXkKICAgICAgICBzaG91bGQgYmUgc2tpcHBlZCwgYW5kIGFsbCBvdGhlcnMgc2hvdWxkIGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseS4KCiAgICBSZXR1cm5zOgogICAgICBBIHR1cGxlIChib29sLCBlcnJvcnMpLiBJZiBmaXJzdCBlbGVtZW50IGlzIEZhbHNlIHRoZW4gdGhlIHNlY29uZCBlbGVtZW50CiAgICAgIHdpbGwgYmUgYSBiaWdxdWVyeS5JbnNlcnR0RXJyb3JzVmFsdWVMaXN0RW50cnkgaW5zdGFuY2UgY29udGFpbmluZwogICAgICBzcGVjaWZpYyBlcnJvcnMuCiAgICAiIiIKCiAgICAjIFByZXBhcmUgcm93cyBmb3IgaW5zZXJ0aW9uLiBPZiBzcGVjaWFsIG5vdGUgaXMgdGhlIHJvdyBJRCB0aGF0IHdlIGFkZCB0bwogICAgIyBlYWNoIHJvdyBpbiBvcmRlciB0byBoZWxwIEJpZ1F1ZXJ5IGF2b2lkIGluc2VydGluZyBhIHJvdyBtdWx0aXBsZSB0aW1lcy4KICAgICMgQmlnUXVlcnkgd2lsbCBkbyBhIGJlc3QtZWZmb3J0IGlmIHVuaXF1ZSBJRHMgYXJlIHByb3ZpZGVkLiBUaGlzIHNpdHVhdGlvbgogICAgIyBjYW4gaGFwcGVuIGR1cmluZyByZXRyaWVzIG9uIGZhaWx1cmVzLgogICAgIyBUT0RPKHNpbHZpdWMpOiBNdXN0IGFkZCBzdXBwb3J0IHRvIHdyaXRpbmcgVGFibGVSb3cncyBpbnN0ZWFkIG9mIGRpY3RzLgogICAgZmluYWxfcm93cyA9IFtdCiAgICBmb3IgaSwgcm93IGluIGVudW1lcmF0ZShyb3dzKToKICAgICAganNvbl9yb3cgPSBzZWxmLl9jb252ZXJ0X3RvX2pzb25fcm93KHJvdykKICAgICAgaW5zZXJ0X2lkID0gc3RyKHNlbGYudW5pcXVlX3Jvd19pZCkgaWYgbm90IGluc2VydF9pZHMgZWxzZSBpbnNlcnRfaWRzW2ldCiAgICAgIGZpbmFsX3Jvd3MuYXBwZW5kKAogICAgICAgICAgYmlncXVlcnkuVGFibGVEYXRhSW5zZXJ0QWxsUmVxdWVzdC5Sb3dzVmFsdWVMaXN0RW50cnkoCiAgICAgICAgICAgICAgaW5zZXJ0SWQ9aW5zZXJ0X2lkLCBqc29uPWpzb25fcm93KSkKICAgIHJlc3VsdCwgZXJyb3JzID0gc2VsZi5faW5zZXJ0X2FsbF9yb3dzKAogICAgICAgIHByb2plY3RfaWQsIGRhdGFzZXRfaWQsIHRhYmxlX2lkLCBmaW5hbF9yb3dzLCBza2lwX2ludmFsaWRfcm93cykKICAgIHJldHVybiByZXN1bHQsIGVycm9ycwoKICBkZWYgX2NvbnZlcnRfdG9fanNvbl9yb3coc2VsZiwgcm93KToKICAgIGpzb25fb2JqZWN0ID0gYmlncXVlcnkuSnNvbk9iamVjdCgpCiAgICBmb3IgaywgdiBpbiBpdGVyaXRlbXMocm93KToKICAgICAgaWYgaXNpbnN0YW5jZSh2LCBkZWNpbWFsLkRlY2ltYWwpOgogICAgICAgICMgZGVjaW1hbCB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHN0cmluZyBiZWNhdXNlIEpTT04gZG9lcyBub3QKICAgICAgICAjIHN1cHBvcnQgdGhlIHByZWNpc2lvbiB0aGF0IGRlY2ltYWwgc3VwcG9ydHMuIEJRIGlzIGFibGUgdG8gaGFuZGxlCiAgICAgICAgIyBpbnNlcnRzIGludG8gTlVNRVJJQyBjb2x1bW5zIGJ5IHJlY2VpdmluZyBKU09OIHdpdGggc3RyaW5nIGF0dHJzLgogICAgICAgIHYgPSBzdHIodikKICAgICAganNvbl9vYmplY3QuYWRkaXRpb25hbFByb3BlcnRpZXMuYXBwZW5kKAogICAgICAgICAgYmlncXVlcnkuSnNvbk9iamVjdC5BZGRpdGlvbmFsUHJvcGVydHkoa2V5PWssIHZhbHVlPXRvX2pzb25fdmFsdWUodikpKQogICAgcmV0dXJuIGpzb25fb2JqZWN0CgogIGRlZiBfY29udmVydF9jZWxsX3ZhbHVlX3RvX2RpY3Qoc2VsZiwgdmFsdWUsIGZpZWxkKToKICAgIGlmIGZpZWxkLnR5cGUgPT0gJ1NUUklORyc6CiAgICAgICMgSW5wdXQ6ICJYWVoiIC0tPiBPdXRwdXQ6ICJYWVoiCiAgICAgIHJldHVybiB2YWx1ZQogICAgZWxpZiBmaWVsZC50eXBlID09ICdCT09MRUFOJzoKICAgICAgIyBJbnB1dDogInRydWUiIC0tPiBPdXRwdXQ6IFRydWUKICAgICAgcmV0dXJuIHZhbHVlID09ICd0cnVlJwogICAgZWxpZiBmaWVsZC50eXBlID09ICdJTlRFR0VSJzoKICAgICAgIyBJbnB1dDogIjEyMyIgLS0+IE91dHB1dDogMTIzCiAgICAgIHJldHVybiBpbnQodmFsdWUpCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ0ZMT0FUJzoKICAgICAgIyBJbnB1dDogIjEuMjMiIC0tPiBPdXRwdXQ6IDEuMjMKICAgICAgcmV0dXJuIGZsb2F0KHZhbHVlKQogICAgZWxpZiBmaWVsZC50eXBlID09ICdUSU1FU1RBTVAnOgogICAgICAjIFRoZSBVVEMgc2hvdWxkIGNvbWUgZnJvbSB0aGUgdGltZXpvbmUgbGlicmFyeSBidXQgdGhpcyBpcyBhIGtub3duCiAgICAgICMgaXNzdWUgaW4gcHl0aG9uIDIuNyBzbyB3ZSdsbCBqdXN0IGhhcmRjb2RlIGl0IGFzIHdlJ3JlIHJlYWRpbmcgdXNpbmcKICAgICAgIyB1dGNmcm9tdGltZXN0YW1wLgogICAgICAjIElucHV0OiAxNDc4MTM0MTc2Ljk4NTg2NCAtLT4gT3V0cHV0OiAiMjAxNi0xMS0wMyAwMDo0OTozNi45ODU4NjQgVVRDIgogICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoZmxvYXQodmFsdWUpKQogICAgICByZXR1cm4gZHQuc3RyZnRpbWUoJyVZLSVtLSVkICVIOiVNOiVTLiVmIFVUQycpCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ0JZVEVTJzoKICAgICAgIyBJbnB1dDogIlltSmkiIC0tPiBPdXRwdXQ6ICJZbUppIgogICAgICByZXR1cm4gdmFsdWUKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnREFURSc6CiAgICAgICMgSW5wdXQ6ICIyMDE2LTExLTAzIiAtLT4gT3V0cHV0OiAiMjAxNi0xMS0wMyIKICAgICAgcmV0dXJuIHZhbHVlCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ0RBVEVUSU1FJzoKICAgICAgIyBJbnB1dDogIjIwMTYtMTEtMDNUMDA6NDk6MzYiIC0tPiBPdXRwdXQ6ICIyMDE2LTExLTAzVDAwOjQ5OjM2IgogICAgICByZXR1cm4gdmFsdWUKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnVElNRSc6CiAgICAgICMgSW5wdXQ6ICIwMDo0OTozNiIgLS0+IE91dHB1dDogIjAwOjQ5OjM2IgogICAgICByZXR1cm4gdmFsdWUKICAgIGVsaWYgZmllbGQudHlwZSA9PSAnUkVDT1JEJzoKICAgICAgIyBOb3RlIHRoYXQgYSBzY2hlbWEgZmllbGQgb2JqZWN0IHN1cHBvcnRzIGFsc28gYSBSRUNPUkQgdHlwZS4gSG93ZXZlcgogICAgICAjIHdoZW4gcXVlcnlpbmcsIHRoZSByZXBlYXRlZCBhbmQvb3IgcmVjb3JkIGZpZWxkcyBhcmUgZmxhdHRlbmVkCiAgICAgICMgdW5sZXNzIHdlIHBhc3MgdGhlIGZsYXR0ZW5fcmVzdWx0cyBmbGFnIGFzIEZhbHNlIHRvIHRoZSBzb3VyY2UKICAgICAgcmV0dXJuIHNlbGYuY29udmVydF9yb3dfdG9fZGljdCh2YWx1ZSwgZmllbGQpCiAgICBlbGlmIGZpZWxkLnR5cGUgPT0gJ05VTUVSSUMnOgogICAgICByZXR1cm4gZGVjaW1hbC5EZWNpbWFsKHZhbHVlKQogICAgZWxpZiBmaWVsZC50eXBlID09ICdHRU9HUkFQSFknOgogICAgICByZXR1cm4gdmFsdWUKICAgIGVsc2U6CiAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5leHBlY3RlZCBmaWVsZCB0eXBlOiAlcycgJSBmaWVsZC50eXBlKQoKICBkZWYgY29udmVydF9yb3dfdG9fZGljdChzZWxmLCByb3csIHNjaGVtYSk6CiAgICAiIiJDb252ZXJ0cyBhIFRhYmxlUm93IGluc3RhbmNlIHVzaW5nIHRoZSBzY2hlbWEgdG8gYSBQeXRob24gZGljdC4iIiIKICAgIHJlc3VsdCA9IHt9CiAgICBmb3IgaW5kZXgsIGZpZWxkIGluIGVudW1lcmF0ZShzY2hlbWEuZmllbGRzKToKICAgICAgdmFsdWUgPSBOb25lCiAgICAgIGlmIGlzaW5zdGFuY2Uoc2NoZW1hLCBiaWdxdWVyeS5UYWJsZVNjaGVtYSk6CiAgICAgICAgY2VsbCA9IHJvdy5mW2luZGV4XQogICAgICAgIHZhbHVlID0gZnJvbV9qc29uX3ZhbHVlKGNlbGwudikgaWYgY2VsbC52IGlzIG5vdCBOb25lIGVsc2UgTm9uZQogICAgICBlbGlmIGlzaW5zdGFuY2Uoc2NoZW1hLCBiaWdxdWVyeS5UYWJsZUZpZWxkU2NoZW1hKToKICAgICAgICBjZWxsID0gcm93WydmJ11baW5kZXhdCiAgICAgICAgdmFsdWUgPSBjZWxsWyd2J10gaWYgJ3YnIGluIGNlbGwgZWxzZSBOb25lCiAgICAgIGlmIGZpZWxkLm1vZGUgPT0gJ1JFUEVBVEVEJzoKICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgogICAgICAgICAgIyBJZGVhbGx5IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBhcyByZXBlYXRlZCBmaWVsZHMgZGVmYXVsdCB0bwogICAgICAgICAgIyByZXR1cm5pbmcgYW4gZW1wdHkgbGlzdAogICAgICAgICAgcmVzdWx0W2ZpZWxkLm5hbWVdID0gW10KICAgICAgICBlbHNlOgogICAgICAgICAgcmVzdWx0W2ZpZWxkLm5hbWVdID0gWwogICAgICAgICAgICAgIHNlbGYuX2NvbnZlcnRfY2VsbF92YWx1ZV90b19kaWN0KHhbJ3YnXSwgZmllbGQpIGZvciB4IGluIHZhbHVlCiAgICAgICAgICBdCiAgICAgIGVsaWYgdmFsdWUgaXMgTm9uZToKICAgICAgICBpZiBub3QgZmllbGQubW9kZSA9PSAnTlVMTEFCTEUnOgogICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAnUmVjZWl2ZWQgXCdOb25lXCcgYXMgdGhlIHZhbHVlIGZvciB0aGUgZmllbGQgJXMgJwogICAgICAgICAgICAgICdidXQgdGhlIGZpZWxkIGlzIG5vdCBOVUxMQUJMRS4nICUgZmllbGQubmFtZSkKICAgICAgICByZXN1bHRbZmllbGQubmFtZV0gPSBOb25lCiAgICAgIGVsc2U6CiAgICAgICAgcmVzdWx0W2ZpZWxkLm5hbWVdID0gc2VsZi5fY29udmVydF9jZWxsX3ZhbHVlX3RvX2RpY3QodmFsdWUsIGZpZWxkKQogICAgcmV0dXJuIHJlc3VsdAoKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCaWdRdWVyeVJlYWRlciwgQmlnUXVlcnlXcml0ZXIuCgoKY2xhc3MgQmlnUXVlcnlSZWFkZXIoZGF0YWZsb3dfaW8uTmF0aXZlU291cmNlUmVhZGVyKToKICAiIiJBIHJlYWRlciBmb3IgYSBCaWdRdWVyeSBzb3VyY2UuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBzb3VyY2UsCiAgICAgIHRlc3RfYmlncXVlcnlfY2xpZW50PU5vbmUsCiAgICAgIHVzZV9sZWdhY3lfc3FsPVRydWUsCiAgICAgIGZsYXR0ZW5fcmVzdWx0cz1UcnVlLAogICAgICBrbXNfa2V5PU5vbmUpOgogICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKICAgIHNlbGYudGVzdF9iaWdxdWVyeV9jbGllbnQgPSB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudAogICAgaWYgYXV0aC5pc19ydW5uaW5nX2luX2djZToKICAgICAgc2VsZi5leGVjdXRpbmdfcHJvamVjdCA9IGF1dGguZXhlY3V0aW5nX3Byb2plY3QKICAgIGVsaWYgaGFzYXR0cihzb3VyY2UsICdwaXBlbGluZV9vcHRpb25zJyk6CiAgICAgIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QgPSAoCiAgICAgICAgICBzb3VyY2UucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdCkKICAgIGVsc2U6CiAgICAgIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QgPSBOb25lCgogICAgIyBUT0RPKHNpbHZpdWMpOiBUcnkgdG8gYXV0b21hdGljYWxseSBnZXQgaXQgZnJvbSBnY2xvdWQgY29uZmlnIGluZm8uCiAgICBpZiBub3Qgc2VsZi5leGVjdXRpbmdfcHJvamVjdCBhbmQgdGVzdF9iaWdxdWVyeV9jbGllbnQgaXMgTm9uZToKICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgJ01pc3NpbmcgZXhlY3V0aW5nIHByb2plY3QgaW5mb3JtYXRpb24uIFBsZWFzZSB1c2UgdGhlIC0tcHJvamVjdCAnCiAgICAgICAgICAnY29tbWFuZCBsaW5lIG9wdGlvbiB0byBzcGVjaWZ5IGl0LicpCiAgICBzZWxmLnJvd19hc19kaWN0ID0gaXNpbnN0YW5jZShzZWxmLnNvdXJjZS5jb2RlciwgUm93QXNEaWN0SnNvbkNvZGVyKQogICAgIyBTY2hlbWEgZm9yIHRoZSByb3dzIGJlaW5nIHJlYWQgYnkgdGhlIHJlYWRlci4gSXQgaXMgaW5pdGlhbGl6ZWQgdGhlCiAgICAjIGZpcnN0IHRpbWUgc29tZXRoaW5nIGdldHMgcmVhZCBmcm9tIHRoZSB0YWJsZS4gSXQgaXMgbm90IHJlcXVpcmVkCiAgICAjIGZvciByZWFkaW5nIHRoZSBmaWVsZCB2YWx1ZXMgaW4gZWFjaCByb3cgYnV0IGNvdWxkIGJlIHVzZWZ1bCBmb3IKICAgICMgZ2V0dGluZyBhZGRpdGlvbmFsIGRldGFpbHMuCiAgICBzZWxmLnNjaGVtYSA9IE5vbmUKICAgIHNlbGYudXNlX2xlZ2FjeV9zcWwgPSB1c2VfbGVnYWN5X3NxbAogICAgc2VsZi5mbGF0dGVuX3Jlc3VsdHMgPSBmbGF0dGVuX3Jlc3VsdHMKICAgIHNlbGYua21zX2tleSA9IGttc19rZXkKCiAgICBpZiBzZWxmLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UgaXMgbm90IE5vbmU6CiAgICAgICMgSWYgdGFibGUgc2NoZW1hIGRpZCBub3QgZGVmaW5lIGEgcHJvamVjdCB3ZSBkZWZhdWx0IHRvIGV4ZWN1dGluZwogICAgICAjIHByb2plY3QuCiAgICAgIHByb2plY3RfaWQgPSBzZWxmLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkCiAgICAgIGlmIG5vdCBwcm9qZWN0X2lkOgogICAgICAgIHByb2plY3RfaWQgPSBzZWxmLmV4ZWN1dGluZ19wcm9qZWN0CiAgICAgIHNlbGYucXVlcnkgPSAnU0VMRUNUICogRlJPTSBbJXM6JXMuJXNdOycgJSAoCiAgICAgICAgICBwcm9qZWN0X2lkLAogICAgICAgICAgc2VsZi5zb3VyY2UudGFibGVfcmVmZXJlbmNlLmRhdGFzZXRJZCwKICAgICAgICAgIHNlbGYuc291cmNlLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkKQogICAgZWxpZiBzZWxmLnNvdXJjZS5xdWVyeSBpcyBub3QgTm9uZToKICAgICAgc2VsZi5xdWVyeSA9IHNlbGYuc291cmNlLnF1ZXJ5CiAgICBlbHNlOgogICAgICAjIEVuZm9yY2UgdGhlICJtb2RlcyIgZW5mb3JjZWQgYnkgQmlnUXVlcnlTb3VyY2UuX19pbml0X18uCiAgICAgICMgSWYgdGhpcyBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkLCB0aGUgQmlnUXVlcnlTb3VyY2UgIm1vZGVzIiBoYXZlCiAgICAgICMgY2hhbmdlZCBhbmQgdGhpcyBtZXRob2Qgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbC4KICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQmlnUXVlcnlTb3VyY2UgbXVzdCBoYXZlIGVpdGhlciBhIHRhYmxlIG9yIHF1ZXJ5IikKCiAgZGVmIF9nZXRfc291cmNlX2xvY2F0aW9uKHNlbGYpOgogICAgIiIiCiAgICBHZXQgdGhlIHNvdXJjZSBsb2NhdGlvbiAoZS5nLiBgYCJFVSJgYCBvciBgYCJVUyJgYCkgZnJvbSBlaXRoZXIKCiAgICAtIDpkYXRhOmBzb3VyY2UudGFibGVfcmVmZXJlbmNlYAogICAgICBvcgogICAgLSBUaGUgZmlyc3QgcmVmZXJlbmNlZCB0YWJsZSBpbiA6ZGF0YTpgc291cmNlLnF1ZXJ5YAoKICAgIFNlZSBBbHNvOgogICAgICAtIDptZXRoOmBCaWdRdWVyeVdyYXBwZXIuZ2V0X3F1ZXJ5X2xvY2F0aW9uYAogICAgICAtIDptZXRoOmBCaWdRdWVyeVdyYXBwZXIuZ2V0X3RhYmxlX2xvY2F0aW9uYAoKICAgIFJldHVybnM6CiAgICAgIE9wdGlvbmFsW3N0cl06IFRoZSBzb3VyY2UgbG9jYXRpb24sIGlmIGFueS4KICAgICIiIgogICAgaWYgc2VsZi5zb3VyY2UudGFibGVfcmVmZXJlbmNlIGlzIG5vdCBOb25lOgogICAgICB0ciA9IHNlbGYuc291cmNlLnRhYmxlX3JlZmVyZW5jZQogICAgICByZXR1cm4gc2VsZi5jbGllbnQuZ2V0X3RhYmxlX2xvY2F0aW9uKAogICAgICAgICAgdHIucHJvamVjdElkIGlmIHRyLnByb2plY3RJZCBpcyBub3QgTm9uZSBlbHNlIHNlbGYuZXhlY3V0aW5nX3Byb2plY3QsCiAgICAgICAgICB0ci5kYXRhc2V0SWQsCiAgICAgICAgICB0ci50YWJsZUlkKQogICAgZWxzZTogICMgSXQncyBhIHF1ZXJ5IHNvdXJjZQogICAgICByZXR1cm4gc2VsZi5jbGllbnQuZ2V0X3F1ZXJ5X2xvY2F0aW9uKAogICAgICAgICAgc2VsZi5leGVjdXRpbmdfcHJvamVjdCwgc2VsZi5zb3VyY2UucXVlcnksIHNlbGYuc291cmNlLnVzZV9sZWdhY3lfc3FsKQoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgc2VsZi5jbGllbnQgPSBCaWdRdWVyeVdyYXBwZXIoY2xpZW50PXNlbGYudGVzdF9iaWdxdWVyeV9jbGllbnQpCiAgICBzZWxmLmNsaWVudC5jcmVhdGVfdGVtcG9yYXJ5X2RhdGFzZXQoCiAgICAgICAgc2VsZi5leGVjdXRpbmdfcHJvamVjdCwgbG9jYXRpb249c2VsZi5fZ2V0X3NvdXJjZV9sb2NhdGlvbigpKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUsIHRyYWNlYmFjayk6CiAgICBzZWxmLmNsaWVudC5jbGVhbl91cF90ZW1wb3JhcnlfZGF0YXNldChzZWxmLmV4ZWN1dGluZ19wcm9qZWN0KQoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICBmb3Igcm93cywgc2NoZW1hIGluIHNlbGYuY2xpZW50LnJ1bl9xdWVyeSgKICAgICAgICBwcm9qZWN0X2lkPXNlbGYuZXhlY3V0aW5nX3Byb2plY3QsIHF1ZXJ5PXNlbGYucXVlcnksCiAgICAgICAgdXNlX2xlZ2FjeV9zcWw9c2VsZi51c2VfbGVnYWN5X3NxbCwKICAgICAgICBmbGF0dGVuX3Jlc3VsdHM9c2VsZi5mbGF0dGVuX3Jlc3VsdHMpOgogICAgICBpZiBzZWxmLnNjaGVtYSBpcyBOb25lOgogICAgICAgIHNlbGYuc2NoZW1hID0gc2NoZW1hCiAgICAgIGZvciByb3cgaW4gcm93czoKICAgICAgICAjIHJldHVybiBiYXNlNjQgZW5jb2RlZCBieXRlcyBhcyBieXRlIHR5cGUgb24gcHl0aG9uIDMKICAgICAgICAjIHdoaWNoIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIEJlYW0gSmF2YSBTREsKICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocm93LmYpKToKICAgICAgICAgIGlmIHNlbGYuc2NoZW1hLmZpZWxkc1tpXS50eXBlID09ICdCWVRFUycgYW5kIHJvdy5mW2ldLnY6CiAgICAgICAgICAgIHJvdy5mW2ldLnYuc3RyaW5nX3ZhbHVlID0gcm93LmZbaV0udi5zdHJpbmdfdmFsdWUuZW5jb2RlKCd1dGYtOCcpCgogICAgICAgIGlmIHNlbGYucm93X2FzX2RpY3Q6CiAgICAgICAgICB5aWVsZCBzZWxmLmNsaWVudC5jb252ZXJ0X3Jvd190b19kaWN0KHJvdywgc2NoZW1hKQogICAgICAgIGVsc2U6CiAgICAgICAgICB5aWVsZCByb3cKCgpjbGFzcyBCaWdRdWVyeVdyaXRlcihkYXRhZmxvd19pby5OYXRpdmVTaW5rV3JpdGVyKToKICAiIiJUaGUgc2luayB3cml0ZXIgZm9yIGEgQmlnUXVlcnlTaW5rLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rLCB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudD1Ob25lLCBidWZmZXJfc2l6ZT1Ob25lKToKICAgIHNlbGYuc2luayA9IHNpbmsKICAgIHNlbGYudGVzdF9iaWdxdWVyeV9jbGllbnQgPSB0ZXN0X2JpZ3F1ZXJ5X2NsaWVudAogICAgc2VsZi5yb3dfYXNfZGljdCA9IGlzaW5zdGFuY2Uoc2VsZi5zaW5rLmNvZGVyLCBSb3dBc0RpY3RKc29uQ29kZXIpCiAgICAjIEJ1ZmZlciB1c2VkIHRvIGJhdGNoIHdyaXR0ZW4gcm93cyBzbyB3ZSByZWR1Y2UgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQogICAgIyBCaWdRdWVyeSBzZXJ2aWNlLgogICAgc2VsZi5yb3dzX2J1ZmZlciA9IFtdCiAgICBzZWxmLnJvd3NfYnVmZmVyX2ZsdXNoX3RocmVzaG9sZCA9IGJ1ZmZlcl9zaXplIG9yIDEwMDAKICAgICMgRmlndXJlIG91dCB0aGUgcHJvamVjdCwgZGF0YXNldCwgYW5kIHRhYmxlIHVzZWQgZm9yIHRoZSBzaW5rLgogICAgc2VsZi5wcm9qZWN0X2lkID0gc2VsZi5zaW5rLnRhYmxlX3JlZmVyZW5jZS5wcm9qZWN0SWQKCiAgICAjIElmIHRhYmxlIHNjaGVtYSBkaWQgbm90IGRlZmluZSBhIHByb2plY3Qgd2UgZGVmYXVsdCB0byBleGVjdXRpbmcgcHJvamVjdC4KICAgIGlmIHNlbGYucHJvamVjdF9pZCBpcyBOb25lIGFuZCBoYXNhdHRyKHNpbmssICdwaXBlbGluZV9vcHRpb25zJyk6CiAgICAgIHNlbGYucHJvamVjdF9pZCA9ICgKICAgICAgICAgIHNpbmsucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdCkKCiAgICBhc3NlcnQgc2VsZi5wcm9qZWN0X2lkIGlzIG5vdCBOb25lCgogICAgc2VsZi5kYXRhc2V0X2lkID0gc2VsZi5zaW5rLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQKICAgIHNlbGYudGFibGVfaWQgPSBzZWxmLnNpbmsudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQKCiAgZGVmIF9mbHVzaF9yb3dzX2J1ZmZlcihzZWxmKToKICAgIGlmIHNlbGYucm93c19idWZmZXI6CiAgICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAgICdXcml0aW5nICVkIHJvd3MgdG8gJXM6JXMuJXMgdGFibGUuJywKICAgICAgICAgIGxlbihzZWxmLnJvd3NfYnVmZmVyKSwKICAgICAgICAgIHNlbGYucHJvamVjdF9pZCwKICAgICAgICAgIHNlbGYuZGF0YXNldF9pZCwKICAgICAgICAgIHNlbGYudGFibGVfaWQpCiAgICAgIHBhc3NlZCwgZXJyb3JzID0gc2VsZi5jbGllbnQuaW5zZXJ0X3Jvd3MoCiAgICAgICAgICBwcm9qZWN0X2lkPXNlbGYucHJvamVjdF9pZCwgZGF0YXNldF9pZD1zZWxmLmRhdGFzZXRfaWQsCiAgICAgICAgICB0YWJsZV9pZD1zZWxmLnRhYmxlX2lkLCByb3dzPXNlbGYucm93c19idWZmZXIpCiAgICAgIHNlbGYucm93c19idWZmZXIgPSBbXQogICAgICBpZiBub3QgcGFzc2VkOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgJ0NvdWxkIG5vdCBzdWNjZXNzZnVsbHkgaW5zZXJ0IHJvd3MgdG8gQmlnUXVlcnknCiAgICAgICAgICAgICcgdGFibGUgWyVzOiVzLiVzXS4gRXJyb3JzOiAlcycgJQogICAgICAgICAgICAoc2VsZi5wcm9qZWN0X2lkLCBzZWxmLmRhdGFzZXRfaWQsIHNlbGYudGFibGVfaWQsIGVycm9ycykpCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICBzZWxmLmNsaWVudCA9IEJpZ1F1ZXJ5V3JhcHBlcihjbGllbnQ9c2VsZi50ZXN0X2JpZ3F1ZXJ5X2NsaWVudCkKICAgIHNlbGYuY2xpZW50LmdldF9vcl9jcmVhdGVfdGFibGUoCiAgICAgICAgc2VsZi5wcm9qZWN0X2lkLAogICAgICAgIHNlbGYuZGF0YXNldF9pZCwKICAgICAgICBzZWxmLnRhYmxlX2lkLAogICAgICAgIHNlbGYuc2luay50YWJsZV9zY2hlbWEsCiAgICAgICAgc2VsZi5zaW5rLmNyZWF0ZV9kaXNwb3NpdGlvbiwKICAgICAgICBzZWxmLnNpbmsud3JpdGVfZGlzcG9zaXRpb24pCiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19leGl0X18oc2VsZiwgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgdHJhY2ViYWNrKToKICAgIHNlbGYuX2ZsdXNoX3Jvd3NfYnVmZmVyKCkKCiAgZGVmIFdyaXRlKHNlbGYsIHJvdyk6CiAgICBzZWxmLnJvd3NfYnVmZmVyLmFwcGVuZChyb3cpCiAgICBpZiBsZW4oc2VsZi5yb3dzX2J1ZmZlcikgPiBzZWxmLnJvd3NfYnVmZmVyX2ZsdXNoX3RocmVzaG9sZDoKICAgICAgc2VsZi5fZmx1c2hfcm93c19idWZmZXIoKQoKCmNsYXNzIFJvd0FzRGljdEpzb25Db2Rlcihjb2RlcnMuQ29kZXIpOgogICIiIkEgY29kZXIgZm9yIGEgdGFibGUgcm93IChyZXByZXNlbnRlZCBhcyBhIGRpY3QpIHRvL2Zyb20gYSBKU09OIHN0cmluZy4KCiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb2RlciBmb3Igc291cmNlcyBhbmQgc2lua3MgaWYgdGhlIGNvZGVyIGFyZ3VtZW50IGlzIG5vdAogIHNwZWNpZmllZC4KICAiIiIKICBkZWYgZW5jb2RlKHNlbGYsIHRhYmxlX3Jvdyk6CiAgICAjIFRoZSBub3JtYWwgZXJyb3Igd2hlbiBkdW1waW5nIE5BTi9JTkYgdmFsdWVzIGlzOgogICAgIyBWYWx1ZUVycm9yOiBPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQKICAgICMgVGhpcyBjb2RlIHdpbGwgY2F0Y2ggdGhpcyBlcnJvciB0byBlbWl0IGFuIGVycm9yIHRoYXQgZXhwbGFpbnMKICAgICMgdG8gdGhlIHByb2dyYW1tZXIgdGhhdCB0aGV5IGhhdmUgdXNlZCBOQU4vSU5GIHZhbHVlcy4KICAgIHRyeToKICAgICAgcmV0dXJuIGpzb24uZHVtcHMoCiAgICAgICAgICB0YWJsZV9yb3csIGFsbG93X25hbj1GYWxzZSwgZGVmYXVsdD1kZWZhdWx0X2VuY29kZXIpLmVuY29kZSgndXRmLTgnKQogICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMuICVzJyAlIChlLCBKU09OX0NPTVBMSUFOQ0VfRVJST1IpKQoKICBkZWYgZGVjb2RlKHNlbGYsIGVuY29kZWRfdGFibGVfcm93KToKICAgIHJldHVybiBqc29uLmxvYWRzKGVuY29kZWRfdGFibGVfcm93LmRlY29kZSgndXRmLTgnKSkKCgpjbGFzcyBSZXRyeVN0cmF0ZWd5KG9iamVjdCk6CiAgUkVUUllfQUxXQVlTID0gJ1JFVFJZX0FMV0FZUycKICBSRVRSWV9ORVZFUiA9ICdSRVRSWV9ORVZFUicKICBSRVRSWV9PTl9UUkFOU0lFTlRfRVJST1IgPSAnUkVUUllfT05fVFJBTlNJRU5UX0VSUk9SJwoKICBfTk9OX1RSQU5TSUVOVF9FUlJPUlMgPSB7J2ludmFsaWQnLCAnaW52YWxpZFF1ZXJ5JywgJ25vdEltcGxlbWVudGVkJ30KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBzaG91bGRfcmV0cnkoc3RyYXRlZ3ksIGVycm9yX21lc3NhZ2UpOgogICAgaWYgc3RyYXRlZ3kgPT0gUmV0cnlTdHJhdGVneS5SRVRSWV9BTFdBWVM6CiAgICAgIHJldHVybiBUcnVlCiAgICBlbGlmIHN0cmF0ZWd5ID09IFJldHJ5U3RyYXRlZ3kuUkVUUllfTkVWRVI6CiAgICAgIHJldHVybiBGYWxzZQogICAgZWxpZiAoc3RyYXRlZ3kgPT0gUmV0cnlTdHJhdGVneS5SRVRSWV9PTl9UUkFOU0lFTlRfRVJST1IgYW5kCiAgICAgICAgICBlcnJvcl9tZXNzYWdlIG5vdCBpbiBSZXRyeVN0cmF0ZWd5Ll9OT05fVFJBTlNJRU5UX0VSUk9SUyk6CiAgICAgIHJldHVybiBUcnVlCiAgICBlbHNlOgogICAgICByZXR1cm4gRmFsc2UKCgpjbGFzcyBBcHBlbmREZXN0aW5hdGlvbnNGbihEb0ZuKToKICAiIiJBZGRzIHRoZSBkZXN0aW5hdGlvbiB0byBhbiBlbGVtZW50LCBtYWtpbmcgaXQgYSBLViBwYWlyLgoKICBPdXRwdXRzIGEgUENvbGxlY3Rpb24gb2YgS1YtcGFpcnMgd2hlcmUgdGhlIGtleSBpcyBhIFRhYmxlUmVmZXJlbmNlIGZvciB0aGUKICBkZXN0aW5hdGlvbiwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgcmVjb3JkIGl0c2VsZi4KCiAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkZXN0aW5hdGlvbik6CiAgICBzZWxmLmRlc3RpbmF0aW9uID0gQXBwZW5kRGVzdGluYXRpb25zRm4uX2dldF90YWJsZV9mbihkZXN0aW5hdGlvbikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfdmFsdWVfcHJvdmlkZXJfb3Jfc3RhdGljX3ZhbChlbG0pOgogICAgaWYgaXNpbnN0YW5jZShlbG0sIHZhbHVlX3Byb3ZpZGVyLlZhbHVlUHJvdmlkZXIpOgogICAgICByZXR1cm4gZWxtCiAgICBlbHNlOgogICAgICAjIFRoZSB0eXBlIGFyZ3VtZW50IGlzIGEgTm9PcCwgYmVjYXVzZSB3ZSBhc3N1bWUgdGhlIGFyZ3VtZW50IGFscmVhZHkgaGFzCiAgICAgICMgdGhlIHByb3BlciBmb3JtYXR0aW5nLgogICAgICByZXR1cm4gdmFsdWVfcHJvdmlkZXIuU3RhdGljVmFsdWVQcm92aWRlcihsYW1iZGEgeDogeCwgdmFsdWU9ZWxtKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9nZXRfdGFibGVfZm4oZGVzdGluYXRpb24pOgogICAgaWYgY2FsbGFibGUoZGVzdGluYXRpb24pOgogICAgICByZXR1cm4gZGVzdGluYXRpb24KICAgIGVsc2U6CiAgICAgIHJldHVybiBsYW1iZGEgeDogQXBwZW5kRGVzdGluYXRpb25zRm4uX3ZhbHVlX3Byb3ZpZGVyX29yX3N0YXRpY192YWwoCiAgICAgICAgICBkZXN0aW5hdGlvbikuZ2V0KCkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgKnNpZGVfaW5wdXRzKToKICAgIHlpZWxkIChzZWxmLmRlc3RpbmF0aW9uKGVsZW1lbnQsICpzaWRlX2lucHV0cyksIGVsZW1lbnQpCpSV/JgBAAAAAAB9lCiMEEV4cG9ydEZpbGVGb3JtYXSUal0xAQBLSEtLh5SMEUV4cG9ydENvbXByZXNzaW9ulGpdMQEAS05LUoeUjA9kZWZhdWx0X2VuY29kZXKUalYxAQBLVUtdh5SMGGdldF9oYXNoYWJsZV9kZXN0aW5hdGlvbpRqVjEBAEtgS3CHlIwccGFyc2VfdGFibGVfc2NoZW1hX2Zyb21fanNvbpRqVjEBAEtzS5WHlIwVcGFyc2VfdGFibGVfcmVmZXJlbmNllGpWMQEAS5hLzIeUjBhCaWdRdWVyeVdyYXBwZXIuX19pbml0X1+UalYxAQBL30voh5SMHUJpZ1F1ZXJ5V3JhcHBlci51bmlxdWVfcm93X2lklGpWMQEAS+pL94eUjB9CaWdRdWVyeVdyYXBwZXIuX2dldF90ZW1wX3RhYmxllGpWMQEAS/lL/YeUjCJCaWdRdWVyeVdyYXBwZXIuZ2V0X3F1ZXJ5X2xvY2F0aW9ulGpWMQEAS/9NLQGHlIwgQmlnUXVlcnlXcmFwcGVyLl9pbnNlcnRfY29weV9qb2KUalYxAQBNLwFNTQGHlIwgQmlnUXVlcnlXcmFwcGVyLl9pbnNlcnRfbG9hZF9qb2KUalYxAQBNTwFNbwGHlIwgQmlnUXVlcnlXcmFwcGVyLl9zdGFydF9xdWVyeV9qb2KUalYxAQBNcQFNjwGHlIwfQmlnUXVlcnlXcmFwcGVyLndhaXRfZm9yX2JxX2pvYpRqVjEBAE2RAU2uAYeUjCJCaWdRdWVyeVdyYXBwZXIuX2dldF9xdWVyeV9yZXN1bHRzlGpWMQEATbABTcEBh5SMIEJpZ1F1ZXJ5V3JhcHBlci5faW5zZXJ0X2FsbF9yb3dzlGpWMQEATcMBTdkBh5SMGUJpZ1F1ZXJ5V3JhcHBlci5nZXRfdGFibGWUalYxAQBN2wFN7wGHlIwdQmlnUXVlcnlXcmFwcGVyLl9jcmVhdGVfdGFibGWUalYxAQBN8QFNAwKHlIwlQmlnUXVlcnlXcmFwcGVyLmdldF9vcl9jcmVhdGVfZGF0YXNldJRqVjEBAE0FAk0cAoeUjB9CaWdRdWVyeVdyYXBwZXIuX2lzX3RhYmxlX2VtcHR5lGpWMQEATR4CTSkCh5SMHUJpZ1F1ZXJ5V3JhcHBlci5fZGVsZXRlX3RhYmxllGpWMQEATSsCTTkCh5SMH0JpZ1F1ZXJ5V3JhcHBlci5fZGVsZXRlX2RhdGFzZXSUalYxAQBNOwJNSgKHlIwiQmlnUXVlcnlXcmFwcGVyLmdldF90YWJsZV9sb2NhdGlvbpRqVjEBAE1MAk1RAoeUjChCaWdRdWVyeVdyYXBwZXIuY3JlYXRlX3RlbXBvcmFyeV9kYXRhc2V0lGpWMQEATVMCTWwCh5SMKkJpZ1F1ZXJ5V3JhcHBlci5jbGVhbl91cF90ZW1wb3JhcnlfZGF0YXNldJRqVjEBAE1uAk1+AoeUjBdCaWdRdWVyeVdyYXBwZXIuZ2V0X2pvYpRqVjEBAE2AAk2JAoeUjCBCaWdRdWVyeVdyYXBwZXIucGVyZm9ybV9sb2FkX2pvYpRqVjEBAE2LAk2hAoeUjCNCaWdRdWVyeVdyYXBwZXIucGVyZm9ybV9leHRyYWN0X2pvYpRqVjEBAE2jAk3DAoeUjCNCaWdRdWVyeVdyYXBwZXIuZ2V0X29yX2NyZWF0ZV90YWJsZZRqVjEBAE3FAk0xA4eUjBlCaWdRdWVyeVdyYXBwZXIucnVuX3F1ZXJ5lGpWMQEATTMDTVQDh5SMG0JpZ1F1ZXJ5V3JhcHBlci5pbnNlcnRfcm93c5RqVjEBAE1WA019A4eUjCRCaWdRdWVyeVdyYXBwZXIuX2NvbnZlcnRfdG9fanNvbl9yb3eUalYxAQBNfwNNiQOHlIwrQmlnUXVlcnlXcmFwcGVyLl9jb252ZXJ0X2NlbGxfdmFsdWVfdG9fZGljdJRqVjEBAE2LA021A4eUjCNCaWdRdWVyeVdyYXBwZXIuY29udmVydF9yb3dfdG9fZGljdJRqVjEBAE23A03TA4eUjA9CaWdRdWVyeVdyYXBwZXKUal0xAQBL003TA4eUjBdCaWdRdWVyeVJlYWRlci5fX2luaXRfX5RqVjEBAE3cA00MBIeUjCNCaWdRdWVyeVJlYWRlci5fZ2V0X3NvdXJjZV9sb2NhdGlvbpRqVjEBAE0OBE0lBIeUjBhCaWdRdWVyeVJlYWRlci5fX2VudGVyX1+UalYxAQBNJwRNKwSHlIwXQmlnUXVlcnlSZWFkZXIuX19leGl0X1+UalYxAQBNLQRNLgSHlIwXQmlnUXVlcnlSZWFkZXIuX19pdGVyX1+UalYxAQBNMARNQQSHlIwOQmlnUXVlcnlSZWFkZXKUal0xAQBN2gNNQQSHlIwXQmlnUXVlcnlXcml0ZXIuX19pbml0X1+UalYxAQBNRgRNWQSHlIwhQmlnUXVlcnlXcml0ZXIuX2ZsdXNoX3Jvd3NfYnVmZmVylGpWMQEATVsETWsEh5SMGEJpZ1F1ZXJ5V3JpdGVyLl9fZW50ZXJfX5RqVjEBAE1tBE12BIeUjBdCaWdRdWVyeVdyaXRlci5fX2V4aXRfX5RqVjEBAE14BE15BIeUjBRCaWdRdWVyeVdyaXRlci5Xcml0ZZRqVjEBAE17BE1+BIeUjA5CaWdRdWVyeVdyaXRlcpRqXTEBAE1EBE1+BIeUjBlSb3dBc0RpY3RKc29uQ29kZXIuZW5jb2RllGpWMQEATYcETZAEh5SMGVJvd0FzRGljdEpzb25Db2Rlci5kZWNvZGWUalYxAQBNkgRNkwSHlIwSUm93QXNEaWN0SnNvbkNvZGVylGpdMQEATYEETZMEh5SMGlJldHJ5U3RyYXRlZ3kuc2hvdWxkX3JldHJ5lGpWMQEATZ0ETacEh5SMDVJldHJ5U3RyYXRlZ3mUal0xAQBNlgRNpwSHlIwdQXBwZW5kRGVzdGluYXRpb25zRm4uX19pbml0X1+UalYxAQBNsgRNswSHlIwyQXBwZW5kRGVzdGluYXRpb25zRm4uX3ZhbHVlX3Byb3ZpZGVyX29yX3N0YXRpY192YWyUalYxAQBNtQRNvASHlIwiQXBwZW5kRGVzdGluYXRpb25zRm4uX2dldF90YWJsZV9mbpRqVjEBAE2+BE3EBIeUjBxBcHBlbmREZXN0aW5hdGlvbnNGbi5wcm9jZXNzlGpWMQEATcYETccEh5SMFEFwcGVuZERlc3RpbmF0aW9uc0ZulGpdMQEATaoETccEh5R1fZQojBBFeHBvcnRGaWxlRm9ybWF0lGrgAwAAjBFFeHBvcnRDb21wcmVzc2lvbpRq4AMAAIwPZGVmYXVsdF9lbmNvZGVylGrgAwAAjBhnZXRfaGFzaGFibGVfZGVzdGluYXRpb26UauADAACMHHBhcnNlX3RhYmxlX3NjaGVtYV9mcm9tX2pzb26UauADAACMFXBhcnNlX3RhYmxlX3JlZmVyZW5jZZRq4AMAAIwPQmlnUXVlcnlXcmFwcGVylGrgAwAAjCJCaWdRdWVyeVdyYXBwZXIuZ2V0X3F1ZXJ5X2xvY2F0aW9ulGrgAwAAjB9CaWdRdWVyeVdyYXBwZXIud2FpdF9mb3JfYnFfam9ilGrgAwAAjBlCaWdRdWVyeVdyYXBwZXIuZ2V0X3RhYmxllGrgAwAAjCVCaWdRdWVyeVdyYXBwZXIuZ2V0X29yX2NyZWF0ZV9kYXRhc2V0lGrgAwAAjCJCaWdRdWVyeVdyYXBwZXIuZ2V0X3RhYmxlX2xvY2F0aW9ulGrgAwAAjChCaWdRdWVyeVdyYXBwZXIuY3JlYXRlX3RlbXBvcmFyeV9kYXRhc2V0lGrgAwAAjCpCaWdRdWVyeVdyYXBwZXIuY2xlYW5fdXBfdGVtcG9yYXJ5X2RhdGFzZXSUauADAACMF0JpZ1F1ZXJ5V3JhcHBlci5nZXRfam9ilGrgAwAAjCBCaWdRdWVyeVdyYXBwZXIucGVyZm9ybV9sb2FkX2pvYpRq4AMAAIwjQmlnUXVlcnlXcmFwcGVyLnBlcmZvcm1fZXh0cmFjdF9qb2KUauADAACMI0JpZ1F1ZXJ5V3JhcHBlci5nZXRfb3JfY3JlYXRlX3RhYmxllGrgAwAAjBlCaWdRdWVyeVdyYXBwZXIucnVuX3F1ZXJ5lGrgAwAAjBtCaWdRdWVyeVdyYXBwZXIuaW5zZXJ0X3Jvd3OUauADAACMI0JpZ1F1ZXJ5V3JhcHBlci5jb252ZXJ0X3Jvd190b19kaWN0lGrgAwAAjA5CaWdRdWVyeVJlYWRlcpRq4AMAAIwOQmlnUXVlcnlXcml0ZXKUauADAACMFEJpZ1F1ZXJ5V3JpdGVyLldyaXRllGrgAwAAjBJSb3dBc0RpY3RKc29uQ29kZXKUauADAACMGVJvd0FzRGljdEpzb25Db2Rlci5lbmNvZGWUauADAACMGVJvd0FzRGljdEpzb25Db2Rlci5kZWNvZGWUauADAACMDVJldHJ5U3RyYXRlZ3mUauADAACMGlJldHJ5U3RyYXRlZ3kuc2hvdWxkX3JldHJ5lGrgAwAAjBRBcHBlbmREZXN0aW5hdGlvbnNGbpRq4AMAAIwcQXBwZW5kRGVzdGluYXRpb25zRm4ucHJvY2Vzc5Rq4AMAAHWMIWFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29sc5R0lIwdYXBhY2hlX2JlYW0uaW8uZ2NwLmJpZ3RhYmxlaW+UKFj/EwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJCaWdUYWJsZSBjb25uZWN0b3IKClRoaXMgbW9kdWxlIGltcGxlbWVudHMgd3JpdGluZyB0byBCaWdUYWJsZSB0YWJsZXMuClRoZSBkZWZhdWx0IG1vZGUgaXMgdG8gc2V0IHJvdyBkYXRhIHRvIHdyaXRlIHRvIEJpZ1RhYmxlIHRhYmxlcy4KVGhlIHN5bnRheCBzdXBwb3J0ZWQgaXMgZGVzY3JpYmVkIGhlcmU6Cmh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWd0YWJsZS9kb2NzL3F1aWNrc3RhcnQtY2J0CgpCaWdUYWJsZSBjb25uZWN0b3IgY2FuIGJlIHVzZWQgYXMgbWFpbiBvdXRwdXRzLiBBIG1haW4gb3V0cHV0Cihjb21tb24gY2FzZSkgaXMgZXhwZWN0ZWQgdG8gYmUgbWFzc2l2ZSBhbmQgd2lsbCBiZSBzcGxpdCBpbnRvCm1hbmFnZWFibGUgY2h1bmtzIGFuZCBwcm9jZXNzZWQgaW4gcGFyYWxsZWwuIEluIHRoZSBleGFtcGxlIGJlbG93CndlIGNyZWF0ZWQgYSBsaXN0IG9mIHJvd3MgdGhlbiBwYXNzZWQgdG8gdGhlIEdlbmVyYXRlZERpcmVjdFJvd3MKRG9GbiB0byBzZXQgdGhlIENlbGxzIGFuZCB0aGVuIHdlIGNhbGwgdGhlIEJpZ1RhYmxlV3JpdGVGbiB0byBpbnNlcnQKdGhvc2UgZ2VuZXJhdGVkIHJvd3MgaW4gdGhlIHRhYmxlLgoKICBtYWluX3RhYmxlID0gKHAKICAgICAgICAgICAgICAgIHwgYmVhbS5DcmVhdGUoc2VsZi5fZ2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgIHwgV3JpdGVUb0JpZ1RhYmxlKHByb2plY3RfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2lkKSkKIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQoKdHJ5OgogIGZyb20gZ29vZ2xlLmNsb3VkLmJpZ3RhYmxlIGltcG9ydCBDbGllbnQKZXhjZXB0IEltcG9ydEVycm9yOgogIHBhc3MKCl9fYWxsX18gPSBbJ1dyaXRlVG9CaWdUYWJsZSddCgoKY2xhc3MgX0JpZ1RhYmxlV3JpdGVGbihiZWFtLkRvRm4pOgogICIiIiBDcmVhdGVzIHRoZSBjb25uZWN0b3IgY2FuIGNhbGwgYW5kIGFkZF9yb3cgdG8gdGhlIGJhdGNoZXIgdXNpbmcgZWFjaAogIHJvdyBpbiBiZWFtIHBpcGUgbGluZQogIEFyZ3M6CiAgICBwcm9qZWN0X2lkKHN0cik6IEdDUCBQcm9qZWN0IElECiAgICBpbnN0YW5jZV9pZChzdHIpOiBHQ1AgSW5zdGFuY2UgSUQKICAgIHRhYmxlX2lkKHN0cik6IEdDUCBUYWJsZSBJRAoKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9pZCwgaW5zdGFuY2VfaWQsIHRhYmxlX2lkKToKICAgICIiIiBDb25zdHJ1Y3RvciBvZiB0aGUgV3JpdGUgY29ubmVjdG9yIG9mIEJpZ3RhYmxlCiAgICBBcmdzOgogICAgICBwcm9qZWN0X2lkKHN0cik6IEdDUCBQcm9qZWN0IG9mIHRvIHdyaXRlIHRoZSBSb3dzCiAgICAgIGluc3RhbmNlX2lkKHN0cik6IEdDUCBJbnN0YW5jZSB0byB3cml0ZSB0aGUgUm93cwogICAgICB0YWJsZV9pZChzdHIpOiBHQ1AgVGFibGUgdG8gd3JpdGUgdGhlIGBEaXJlY3RSb3dzYAogICAgIiIiCiAgICBzdXBlcihfQmlnVGFibGVXcml0ZUZuLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLmJlYW1fb3B0aW9ucyA9IHsKICAgICAgICAncHJvamVjdF9pZCc6IHByb2plY3RfaWQsCiAgICAgICAgJ2luc3RhbmNlX2lkJzogaW5zdGFuY2VfaWQsCiAgICAgICAgJ3RhYmxlX2lkJzogdGFibGVfaWQKICAgIH0KICAgIHNlbGYudGFibGUgPSBOb25lCiAgICBzZWxmLmJhdGNoZXIgPSBOb25lCiAgICBzZWxmLndyaXR0ZW4gPSBNZXRyaWNzLmNvdW50ZXIoc2VsZi5fX2NsYXNzX18sICdXcml0dGVuIFJvdycpCgogIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CiAgICByZXR1cm4gc2VsZi5iZWFtX29wdGlvbnMKCiAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBvcHRpb25zKToKICAgIHNlbGYuYmVhbV9vcHRpb25zID0gb3B0aW9ucwogICAgc2VsZi50YWJsZSA9IE5vbmUKICAgIHNlbGYuYmF0Y2hlciA9IE5vbmUKICAgIHNlbGYud3JpdHRlbiA9IE1ldHJpY3MuY291bnRlcihzZWxmLl9fY2xhc3NfXywgJ1dyaXR0ZW4gUm93JykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIGlmIHNlbGYudGFibGUgaXMgTm9uZToKICAgICAgY2xpZW50ID0gQ2xpZW50KHByb2plY3Q9c2VsZi5iZWFtX29wdGlvbnNbJ3Byb2plY3RfaWQnXSkKICAgICAgaW5zdGFuY2UgPSBjbGllbnQuaW5zdGFuY2Uoc2VsZi5iZWFtX29wdGlvbnNbJ2luc3RhbmNlX2lkJ10pCiAgICAgIHNlbGYudGFibGUgPSBpbnN0YW5jZS50YWJsZShzZWxmLmJlYW1fb3B0aW9uc1sndGFibGVfaWQnXSkKICAgIHNlbGYuYmF0Y2hlciA9IHNlbGYudGFibGUubXV0YXRpb25zX2JhdGNoZXIoKQoKICBkZWYgcHJvY2VzcyhzZWxmLCByb3cpOgogICAgc2VsZi53cml0dGVuLmluYygpCiAgICAjIFlvdSBuZWVkIHRvIHNldCB0aGUgdGltZXN0YW1wIGluIHRoZSBjZWxscyBpbiB0aGlzIHJvdyBvYmplY3QsCiAgICAjIHdoZW4gd2UgZG8gYSByZXRyeSB3ZSB3aWxsIG11dGF0aW5nIHRoZSBzYW1lIG9iamVjdCwgYnV0LCB3aXRoIHRoaXMKICAgICMgd2UgYXJlIGdvaW5nIHRvIHNldCBvdXIgY2VsbCB3aXRoIG5ldyB2YWx1ZXMuCiAgICAjIEV4YW1wbGU6CiAgICAjIGRpcmVjdF9yb3cuc2V0X2NlbGwoJ2NmMScsCiAgICAjICAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkMScsCiAgICAjICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlMScsCiAgICAjICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPWRhdGV0aW1lLmRhdGV0aW1lLm5vdygpKQogICAgc2VsZi5iYXRjaGVyLm11dGF0ZShyb3cpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5iYXRjaGVyLmZsdXNoKCkKICAgIHNlbGYuYmF0Y2hlciA9IE5vbmUKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7CiAgICAgICAgJ3Byb2plY3RJZCc6IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICAgICAgc2VsZi5iZWFtX29wdGlvbnNbJ3Byb2plY3RfaWQnXSwgbGFiZWw9J0JpZ3RhYmxlIFByb2plY3QgSWQnKSwKICAgICAgICAnaW5zdGFuY2VJZCc6IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICAgICAgc2VsZi5iZWFtX29wdGlvbnNbJ2luc3RhbmNlX2lkJ10sIGxhYmVsPSdCaWd0YWJsZSBJbnN0YW5jZSBJZCcpLAogICAgICAgICd0YWJsZUlkJzogRGlzcGxheURhdGFJdGVtKAogICAgICAgICAgICBzZWxmLmJlYW1fb3B0aW9uc1sndGFibGVfaWQnXSwgbGFiZWw9J0JpZ3RhYmxlIFRhYmxlIElkJykKICAgIH0KCgpjbGFzcyBXcml0ZVRvQmlnVGFibGUoYmVhbS5QVHJhbnNmb3JtKToKICAiIiIgQSB0cmFuc2Zvcm0gdG8gd3JpdGUgdG8gdGhlIEJpZ3RhYmxlIFRhYmxlLgoKICBBIFBUcmFuc2Zvcm0gdGhhdCB3cml0ZSBhIGxpc3Qgb2YgYERpcmVjdFJvd2AgaW50byB0aGUgQmlndGFibGUgVGFibGUKCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3RfaWQ9Tm9uZSwgaW5zdGFuY2VfaWQ9Tm9uZSwgdGFibGVfaWQ9Tm9uZSk6CiAgICAiIiIgVGhlIFBUcmFuc2Zvcm0gdG8gYWNjZXNzIHRoZSBCaWd0YWJsZSBXcml0ZSBjb25uZWN0b3IKICAgIEFyZ3M6CiAgICAgIHByb2plY3RfaWQoc3RyKTogR0NQIFByb2plY3Qgb2YgdG8gd3JpdGUgdGhlIFJvd3MKICAgICAgaW5zdGFuY2VfaWQoc3RyKTogR0NQIEluc3RhbmNlIHRvIHdyaXRlIHRoZSBSb3dzCiAgICAgIHRhYmxlX2lkKHN0cik6IEdDUCBUYWJsZSB0byB3cml0ZSB0aGUgYERpcmVjdFJvd3NgCiAgICAiIiIKICAgIHN1cGVyKFdyaXRlVG9CaWdUYWJsZSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5iZWFtX29wdGlvbnMgPSB7CiAgICAgICAgJ3Byb2plY3RfaWQnOiBwcm9qZWN0X2lkLAogICAgICAgICdpbnN0YW5jZV9pZCc6IGluc3RhbmNlX2lkLAogICAgICAgICd0YWJsZV9pZCc6IHRhYmxlX2lkCiAgICB9CgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIGJlYW1fb3B0aW9ucyA9IHNlbGYuYmVhbV9vcHRpb25zCiAgICByZXR1cm4gKAogICAgICAgIHB2YWx1ZQogICAgICAgIHwgYmVhbS5QYXJEbygKICAgICAgICAgICAgX0JpZ1RhYmxlV3JpdGVGbigKICAgICAgICAgICAgICAgIGJlYW1fb3B0aW9uc1sncHJvamVjdF9pZCddLAogICAgICAgICAgICAgICAgYmVhbV9vcHRpb25zWydpbnN0YW5jZV9pZCddLAogICAgICAgICAgICAgICAgYmVhbV9vcHRpb25zWyd0YWJsZV9pZCddKSkpCpR9lCiMGV9CaWdUYWJsZVdyaXRlRm4uX19pbml0X1+UalYxAQBLP0tOh5SMHV9CaWdUYWJsZVdyaXRlRm4uX19nZXRzdGF0ZV9flGpWMQEAS1BLUYeUjB1fQmlnVGFibGVXcml0ZUZuLl9fc2V0c3RhdGVfX5RqVjEBAEtTS1eHlIwdX0JpZ1RhYmxlV3JpdGVGbi5zdGFydF9idW5kbGWUalYxAQBLWUteh5SMGF9CaWdUYWJsZVdyaXRlRm4ucHJvY2Vzc5RqVjEBAEtgS2qHlIweX0JpZ1RhYmxlV3JpdGVGbi5maW5pc2hfYnVuZGxllGpWMQEAS2xLboeUjB1fQmlnVGFibGVXcml0ZUZuLmRpc3BsYXlfZGF0YZRqVjEBAEtwS3iHlIwQX0JpZ1RhYmxlV3JpdGVGbpRqXTEBAEs2S3iHlIwYV3JpdGVUb0JpZ1RhYmxlLl9faW5pdF9flGpWMQEAS4FLjYeUjBZXcml0ZVRvQmlnVGFibGUuZXhwYW5klGpWMQEAS49Ll4eUjA9Xcml0ZVRvQmlnVGFibGWUal0xAQBLe0uXh5R1fZQojA9Xcml0ZVRvQmlnVGFibGWUahYEAACMFldyaXRlVG9CaWdUYWJsZS5leHBhbmSUahYEAAB1jB1hcGFjaGVfYmVhbS5pby5nY3AuYmlndGFibGVpb5R0lIw+YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmWUKFjaFwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIGpvYiB0aGF0IHdyaXRlIEVudHJpZXMgaW50byBEYXRhc3RvcmUuCgpUaGUgcGlwZWxpbmVzIGJlaGF2ZSBpbiB0aGUgc3RlcHMgYmVsb3cuCgogIDEuIENyZWF0ZSBhbmQgd3JpdGUgRW50aXRpZXMgdG8gRGF0YXN0b3JlCiAgMi4gKE9wdGlvbmFsKSBJZiByZWFkIGxpbWl0IHdhcyBwcm92aWRlZCwKICAgICByZWFkIGl0IGFuZCBjb25maXJtIHRoYXQgdGhlIGV4cGVjdGVkIEVudGl0aWVzIHdlcmUgcmVhZC4KICAzLiBRdWVyeSB0aGUgd3JpdHRlbiBFbnRpdGllcyBhbmQgdmVyaWZ5IHJlc3VsdC4KICA0LiBEZWxldGUgRW50cmllcy4KICA1LiBRdWVyeSB0aGUgd3JpdHRlbiBFbnRpdGllcywgdmVyaWZ5IG5vIHJlc3VsdHMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgaGFzaGxpYgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdXVpZAoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvIGltcG9ydCBEZWxldGVGcm9tRGF0YXN0b3JlCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVpbyBpbXBvcnQgUmVhZEZyb21EYXRhc3RvcmUKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvIGltcG9ydCBXcml0ZVRvRGF0YXN0b3JlCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcyBpbXBvcnQgRW50aXR5CmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcyBpbXBvcnQgS2V5CmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcyBpbXBvcnQgUXVlcnkKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IEdvb2dsZUNsb3VkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lIGltcG9ydCBUZXN0UGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwgaW1wb3J0IGFzc2VydF90aGF0CmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy51dGlsIGltcG9ydCBlcXVhbF90bwoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmRlZiBuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZShwaXBlbGluZV9vcHRpb25zLCBqb2JfbmFtZSwgc3VmZml4KToKICAiIiJDcmVhdGUgYSBwaXBlbGluZSB3aXRoIHRoZSBnaXZlbiBqb2JfbmFtZSBhbmQgYSBzdWZmaXguIiIiCiAgZ2NwX29wdGlvbnMgPSBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKQogICMgRGlyZWN0UnVubmVyIGRvZXNuJ3QgaGF2ZSBhIGpvYiBuYW1lLgogIGlmIGpvYl9uYW1lOgogICAgZ2NwX29wdGlvbnMuam9iX25hbWUgPSBqb2JfbmFtZSArIHN1ZmZpeAoKICByZXR1cm4gVGVzdFBpcGVsaW5lKG9wdGlvbnM9cGlwZWxpbmVfb3B0aW9ucykKCgpjbGFzcyBFbnRpdHlXcmFwcGVyKG9iamVjdCk6CiAgIiIiCiAgQ3JlYXRlIGEgQ2xvdWQgRGF0YXN0b3JlIGVudGl0eSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcuCgogIE5hbWVzcGFjZSBhbmQgcHJvamVjdCBhcmUgdGFrZW4gZnJvbSB0aGUgcGFyZW50IGtleS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwga2luZCwgcGFyZW50X2tleSk6CiAgICBzZWxmLl9raW5kID0ga2luZAogICAgc2VsZi5fcGFyZW50X2tleSA9IHBhcmVudF9rZXkKCiAgZGVmIG1ha2VfZW50aXR5KHNlbGYsIGNvbnRlbnQpOgogICAgIiIiQ3JlYXRlIGVudGl0eSBmcm9tIGdpdmVuIHN0cmluZy4iIiIKICAgIGtleSA9IEtleShbc2VsZi5fa2luZCwgaGFzaGxpYi5zaGExKGNvbnRlbnQuZW5jb2RlKCd1dGYtOCcpKS5oZXhkaWdlc3QoKV0sCiAgICAgICAgICAgICAgcGFyZW50PXNlbGYuX3BhcmVudF9rZXkpCiAgICBlbnRpdHkgPSBFbnRpdHkoa2V5KQogICAgZW50aXR5LnNldF9wcm9wZXJ0aWVzKHsnY29udGVudCc6IHN0cihjb250ZW50KX0pCiAgICByZXR1cm4gZW50aXR5CgoKZGVmIHJ1bihhcmd2PU5vbmUpOgogICIiIk1haW4gZW50cnkgcG9pbnQuIiIiCgogIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0ta2luZCcsIGRlc3Q9J2tpbmQnLCBkZWZhdWx0PSd3cml0ZXJlYWR0ZXN0JywgaGVscD0nRGF0YXN0b3JlIEtpbmQnKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLW51bV9lbnRpdGllcycsCiAgICAgIGRlc3Q9J251bV9lbnRpdGllcycsCiAgICAgIHR5cGU9aW50LAogICAgICByZXF1aXJlZD1UcnVlLAogICAgICBoZWxwPSdOdW1iZXIgb2YgZW50aXRpZXMgdG8gd3JpdGUnKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLWxpbWl0JywKICAgICAgZGVzdD0nbGltaXQnLAogICAgICB0eXBlPWludCwKICAgICAgaGVscD0nTGltaXQgb2YgbnVtYmVyIG9mIGVudGl0aWVzIHRvIHdyaXRlJykKCiAga25vd25fYXJncywgcGlwZWxpbmVfYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3YpCiAgcGlwZWxpbmVfb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhwaXBlbGluZV9hcmdzKQogIGdjbG91ZF9vcHRpb25zID0gcGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykKICBqb2JfbmFtZSA9IGdjbG91ZF9vcHRpb25zLmpvYl9uYW1lCiAga2luZCA9IGtub3duX2FyZ3Mua2luZAogIG51bV9lbnRpdGllcyA9IGtub3duX2FyZ3MubnVtX2VudGl0aWVzCiAgcHJvamVjdCA9IGdjbG91ZF9vcHRpb25zLnByb2plY3QKCiAgIyBQaXBlbGluZSAxOiBDcmVhdGUgYW5kIHdyaXRlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIEVudGl0aWVzIHRvIHRoZQogICMgQ2xvdWQgRGF0YXN0b3JlLgogIGFuY2VzdG9yX2tleSA9IEtleShba2luZCwgc3RyKHV1aWQudXVpZDQoKSldLCBwcm9qZWN0PXByb2plY3QpCiAgX0xPR0dFUi5pbmZvKCdXcml0aW5nICVzIGVudGl0aWVzIHRvICVzJywgbnVtX2VudGl0aWVzLCBwcm9qZWN0KQogIHAgPSBuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZShwaXBlbGluZV9vcHRpb25zLCBqb2JfbmFtZSwgJy13cml0ZScpCiAgXyA9ICgKICAgICAgcAogICAgICB8ICdJbnB1dCcgPj4gYmVhbS5DcmVhdGUobGlzdChyYW5nZShudW1fZW50aXRpZXMpKSkKICAgICAgfCAnVG8gU3RyaW5nJyA+PiBiZWFtLk1hcChzdHIpCiAgICAgIHwgJ1RvIEVudGl0eScgPj4gYmVhbS5NYXAoRW50aXR5V3JhcHBlcihraW5kLCBhbmNlc3Rvcl9rZXkpLm1ha2VfZW50aXR5KQogICAgICB8ICdXcml0ZSB0byBEYXRhc3RvcmUnID4+IFdyaXRlVG9EYXRhc3RvcmUocHJvamVjdCkpCiAgcC5ydW4oKQoKICBxdWVyeSA9IFF1ZXJ5KGtpbmQ9a2luZCwgcHJvamVjdD1wcm9qZWN0LCBhbmNlc3Rvcj1hbmNlc3Rvcl9rZXkpCiAgIyBPcHRpb25hbCBQaXBlbGluZSAyOiBJZiBhIHJlYWQgbGltaXQgd2FzIHByb3ZpZGVkLCByZWFkIGl0IGFuZCBjb25maXJtCiAgIyB0aGF0IHRoZSBleHBlY3RlZCBlbnRpdGllcyB3ZXJlIHJlYWQuCiAgaWYga25vd25fYXJncy5saW1pdCBpcyBub3QgTm9uZToKICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAnUXVlcnlpbmcgYSBsaW1pdGVkIHNldCBvZiAlcyBlbnRpdGllcyBhbmQgdmVyaWZ5aW5nIGNvdW50LicsCiAgICAgICAga25vd25fYXJncy5saW1pdCkKICAgIHAgPSBuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZShwaXBlbGluZV9vcHRpb25zLCBqb2JfbmFtZSwgJy12ZXJpZnktbGltaXQnKQogICAgcXVlcnkubGltaXQgPSBrbm93bl9hcmdzLmxpbWl0CiAgICBlbnRpdGllcyA9IHAgfCAncmVhZCBmcm9tIGRhdGFzdG9yZScgPj4gUmVhZEZyb21EYXRhc3RvcmUocXVlcnkpCiAgICBhc3NlcnRfdGhhdCgKICAgICAgICBlbnRpdGllcyB8IGJlYW0uY29tYmluZXJzLkNvdW50Lkdsb2JhbGx5KCksCiAgICAgICAgZXF1YWxfdG8oW2tub3duX2FyZ3MubGltaXRdKSkKCiAgICBwLnJ1bigpCiAgICBxdWVyeS5saW1pdCA9IE5vbmUKCiAgIyBQaXBlbGluZSAzOiBRdWVyeSB0aGUgd3JpdHRlbiBFbnRpdGllcyBhbmQgdmVyaWZ5IHJlc3VsdC4KICBfTE9HR0VSLmluZm8oJ1F1ZXJ5aW5nIGVudGl0aWVzLCBhc3NlcnRpbmcgdGhleSBtYXRjaC4nKQogIHAgPSBuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZShwaXBlbGluZV9vcHRpb25zLCBqb2JfbmFtZSwgJy12ZXJpZnknKQogIGVudGl0aWVzID0gcCB8ICdyZWFkIGZyb20gZGF0YXN0b3JlJyA+PiBSZWFkRnJvbURhdGFzdG9yZShxdWVyeSkKCiAgYXNzZXJ0X3RoYXQoCiAgICAgIGVudGl0aWVzIHwgYmVhbS5jb21iaW5lcnMuQ291bnQuR2xvYmFsbHkoKSwgZXF1YWxfdG8oW251bV9lbnRpdGllc10pKQoKICBwLnJ1bigpCgogICMgUGlwZWxpbmUgNDogRGVsZXRlIEVudGl0aWVzLgogIF9MT0dHRVIuaW5mbygnRGVsZXRpbmcgZW50aXRpZXMuJykKICBwID0gbmV3X3BpcGVsaW5lX3dpdGhfam9iX25hbWUocGlwZWxpbmVfb3B0aW9ucywgam9iX25hbWUsICctZGVsZXRlJykKICBlbnRpdGllcyA9IHAgfCAncmVhZCBmcm9tIGRhdGFzdG9yZScgPj4gUmVhZEZyb21EYXRhc3RvcmUocXVlcnkpCiAgXyA9ICgKICAgICAgZW50aXRpZXMKICAgICAgfCAnVG8gS2V5cycgPj4gYmVhbS5NYXAobGFtYmRhIGVudGl0eTogZW50aXR5LmtleSkKICAgICAgfCAnZGVsZXRlIGVudGl0aWVzJyA+PiBEZWxldGVGcm9tRGF0YXN0b3JlKHByb2plY3QpKQoKICBwLnJ1bigpCgogICMgUGlwZWxpbmUgNTogUXVlcnkgdGhlIHdyaXR0ZW4gRW50aXRpZXMsIHZlcmlmeSBubyByZXN1bHRzLgogIF9MT0dHRVIuaW5mbygnUXVlcnlpbmcgZm9yIHRoZSBlbnRpdGllcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vbmUgcHJlc2VudC4nKQogIHAgPSBuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZShwaXBlbGluZV9vcHRpb25zLCBqb2JfbmFtZSwgJy12ZXJpZnktZGVsZXRlZCcpCiAgZW50aXRpZXMgPSBwIHwgJ3JlYWQgZnJvbSBkYXRhc3RvcmUnID4+IFJlYWRGcm9tRGF0YXN0b3JlKHF1ZXJ5KQoKICBhc3NlcnRfdGhhdChlbnRpdGllcyB8IGJlYW0uY29tYmluZXJzLkNvdW50Lkdsb2JhbGx5KCksIGVxdWFsX3RvKFswXSkpCgogIHAucnVuKCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQogIHJ1bigpCpR9lCiMGm5ld19waXBlbGluZV93aXRoX2pvYl9uYW1llGpWMQEASzdLPoeUjBZFbnRpdHlXcmFwcGVyLl9faW5pdF9flGpWMQEAS0dLSYeUjBlFbnRpdHlXcmFwcGVyLm1ha2VfZW50aXR5lGpWMQEAS0tLUYeUjA1FbnRpdHlXcmFwcGVylGpdMQEAS0FLUYeUjANydW6UalYxAQBLVEuph5R1fZQojBpuZXdfcGlwZWxpbmVfd2l0aF9qb2JfbmFtZZRqVwMAAIwNRW50aXR5V3JhcHBlcpRqVwMAAIwZRW50aXR5V3JhcHBlci5tYWtlX2VudGl0eZRqVwMAAIwDcnVulGpXAwAAdYw+YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5kYXRhc3RvcmVfd3JpdGVfaXRfcGlwZWxpbmWUdJSMLmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlaW+UKFhZTgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKQSBjb25uZWN0b3IgZm9yIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byBHb29nbGUgQ2xvdWQgRGF0YXN0b3JlLgoKUGxlYXNlIHVzZSB0aGlzIG1vZHVsZSBmb3IgRGF0YXN0b3JlIEkvTyBzaW5jZQpgYGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEuZGF0YXN0b3JlaW9gYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlCm5leHQgQmVhbSBtYWpvciByZWxlYXNlLgoKVGhpcyBtb2R1bGUgdXNlcyB0aGUgbmV3ZXIgZ29vZ2xlLWNsb3VkLWRhdGFzdG9yZSBwYWNrYWdlLiBJdHMgQVBJIHdhcyBkaWZmZXJlbnQKZW5vdWdoIHRvIHJlcXVpcmUgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGhpcyBhbmQgYXNzb2NpYXRlZCBtb2R1bGVzLgoKVGhpcyBtb2R1bGUgaXMgZXhwZXJpbWVudGFsLCBubyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRpbWUKZnJvbSBidWlsdGlucyBpbXBvcnQgcm91bmQKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjEgaW1wb3J0IHV0aWwKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlciBpbXBvcnQgQWRhcHRpdmVUaHJvdHRsZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3IGltcG9ydCBoZWxwZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3IGltcG9ydCBxdWVyeV9zcGxpdHRlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcgaW1wb3J0IHR5cGVzCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWMgaW1wb3J0IE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBDcmVhdGUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUmVzaHVmZmxlCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5CgpfX2FsbF9fID0gWydSZWFkRnJvbURhdGFzdG9yZScsICdXcml0ZVRvRGF0YXN0b3JlJywgJ0RlbGV0ZUZyb21EYXRhc3RvcmUnXQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwZXMuRW50aXR5KQpjbGFzcyBSZWFkRnJvbURhdGFzdG9yZShQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciBxdWVyeWluZyBHb29nbGUgQ2xvdWQgRGF0YXN0b3JlLgoKICBUbyByZWFkIGEgYGBQQ29sbGVjdGlvbltFbnRpdHldYGAgZnJvbSBhIENsb3VkIERhdGFzdG9yZSBgYFF1ZXJ5YGAsIHVzZQogIHRoZSBgYFJlYWRGcm9tRGF0YXN0b3JlYGAgdHJhbnNmb3JtIGJ5IHByb3ZpZGluZyBhIGBxdWVyeWAgdG8KICByZWFkIGZyb20uIFRoZSBwcm9qZWN0IGFuZCBvcHRpb25hbCBuYW1lc3BhY2UgYXJlIHNldCBpbiB0aGUgcXVlcnkuCiAgVGhlIHF1ZXJ5IHdpbGwgYmUgc3BsaXQgaW50byBtdWx0aXBsZSBxdWVyaWVzIHRvIGFsbG93IGZvciBwYXJhbGxlbGlzbS4gVGhlCiAgZGVncmVlIG9mIHBhcmFsbGVsaXNtIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGJ5CiAgc2V0dGluZyBgbnVtX3NwbGl0c2AgdG8gYSB2YWx1ZSBvZiAxIG9yIGdyZWF0ZXIuCgogIE5vdGU6IE5vcm1hbGx5LCBhIHJ1bm5lciB3aWxsIHJlYWQgZnJvbSBDbG91ZCBEYXRhc3RvcmUgaW4gcGFyYWxsZWwgYWNyb3NzCiAgbWFueSB3b3JrZXJzLiBIb3dldmVyLCB3aGVuIHRoZSBgcXVlcnlgIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIGBsaW1pdGAgb3IgaWYgdGhlCiAgcXVlcnkgY29udGFpbnMgaW5lcXVhbGl0eSBmaWx0ZXJzIGxpa2UgYEdSRUFURVJfVEhBTiwgTEVTU19USEFOYCBldGMuLCB0aGVuCiAgYWxsIHRoZSByZXR1cm5lZCByZXN1bHRzIHdpbGwgYmUgcmVhZCBieSBhIHNpbmdsZSB3b3JrZXIgaW4gb3JkZXIgdG8gZW5zdXJlCiAgY29ycmVjdCBkYXRhLiBTaW5jZSBkYXRhIGlzIHJlYWQgZnJvbSBhIHNpbmdsZSB3b3JrZXIsIHRoaXMgY291bGQgaGF2ZQogIHNpZ25pZmljYW50IGltcGFjdCBvbiB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGpvYi4gVXNpbmcgYQogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXRpbC5SZXNodWZmbGVgIHRyYW5zZm9ybSBhZnRlciB0aGUgcmVhZCBpbgogIHRoaXMgY2FzZSBtaWdodCBiZSBiZW5lZmljaWFsIGZvciBwYXJhbGxlbGl6aW5nIHdvcmsgYWNyb3NzIHdvcmtlcnMuCgogIFRoZSBzZW1hbnRpY3MgZm9yIHF1ZXJ5IHNwbGl0dGluZyBpcyBkZWZpbmVkIGJlbG93OgogICAgMS4gSWYgYG51bV9zcGxpdHNgIGlzIGVxdWFsIHRvIDAsIHRoZW4gdGhlIG51bWJlciBvZiBzcGxpdHMgd2lsbCBiZSBjaG9zZW4KICAgIGR5bmFtaWNhbGx5IGF0IHJ1bnRpbWUgYmFzZWQgb24gdGhlIHF1ZXJ5IGRhdGEgc2l6ZS4KCiAgICAyLiBBbnkgdmFsdWUgb2YgYG51bV9zcGxpdHNgIGdyZWF0ZXIgdGhhbgogICAgYFJlYWRGcm9tRGF0YXN0b3JlLl9OVU1fUVVFUllfU1BMSVRTX01BWGAgd2lsbCBiZSBjYXBwZWQgYXQgdGhhdCB2YWx1ZS4KCiAgICAzLiBJZiB0aGUgYHF1ZXJ5YCBoYXMgYSB1c2VyIGxpbWl0IHNldCwgb3IgY29udGFpbnMgaW5lcXVhbGl0eSBmaWx0ZXJzLCB0aGVuCiAgICBgbnVtX3NwbGl0c2Agd2lsbCBiZSBpZ25vcmVkIGFuZCBubyBzcGxpdCB3aWxsIGJlIHBlcmZvcm1lZC4KCiAgICA0LiBVbmRlciBjZXJ0YWluIGNhc2VzIENsb3VkIERhdGFzdG9yZSBpcyB1bmFibGUgdG8gc3BsaXQgcXVlcnkgdG8gdGhlCiAgICByZXF1ZXN0ZWQgbnVtYmVyIG9mIHNwbGl0cy4gSW4gc3VjaCBjYXNlcyB3ZSBqdXN0IHVzZSB3aGF0ZXZlciBDbG91ZAogICAgRGF0YXN0b3JlIHJldHVybnMuCgogIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9kYXRhc3RvcmUvIGZvciBtb3JlIGRldGFpbHMgb24gR29vZ2xlIENsb3VkCiAgRGF0YXN0b3JlLgogICIiIgoKICAjIEFuIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIGZvciBhIHF1ZXJ5LgogIF9OVU1fUVVFUllfU1BMSVRTX01BWCA9IDUwMDAwCiAgIyBBIGxvd2VyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIGZvciBhIHF1ZXJ5LiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0CiAgIyB3ZSBwYXJhbGxlbGl6ZSB0aGUgcXVlcnkgZXZlbiB3aGVuIERhdGFzdG9yZSBzdGF0aXN0aWNzIGFyZSBub3QgYXZhaWxhYmxlLgogIF9OVU1fUVVFUllfU1BMSVRTX01JTiA9IDEyCiAgIyBEZWZhdWx0IGJ1bmRsZSBzaXplIG9mIDY0TUIuCiAgX0RFRkFVTFRfQlVORExFX1NJWkVfQllURVMgPSA2NCAqIDEwMjQgKiAxMDI0CgogIGRlZiBfX2luaXRfXyhzZWxmLCBxdWVyeSwgbnVtX3NwbGl0cz0wKToKICAgICIiIkluaXRpYWxpemUgdGhlIGBSZWFkRnJvbURhdGFzdG9yZWAgdHJhbnNmb3JtLgoKICAgIFRoaXMgdHJhbnNmb3JtIG91dHB1dHMgZWxlbWVudHMgb2YgdHlwZQogICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5FbnRpdHlgLgoKICAgIEFyZ3M6CiAgICAgIHF1ZXJ5OiAoOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5RdWVyeWApIHF1ZXJ5CiAgICAgICAgdXNlZCB0byBmZXRjaCBlbnRpdGllcy4KICAgICAgbnVtX3NwbGl0czogKDpjbGFzczpgaW50YCkgKG9wdGlvbmFsKSBOdW1iZXIgb2Ygc3BsaXRzIGZvciB0aGUgcXVlcnkuCiAgICAiIiIKICAgIHN1cGVyKFJlYWRGcm9tRGF0YXN0b3JlLCBzZWxmKS5fX2luaXRfXygpCgogICAgaWYgbm90IHF1ZXJ5LnByb2plY3Q6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInF1ZXJ5LnByb2plY3QgY2Fubm90IGJlIGVtcHR5IikKICAgIGlmIG5vdCBxdWVyeToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigicXVlcnkgY2Fubm90IGJlIGVtcHR5IikKICAgIGlmIG51bV9zcGxpdHMgPCAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJudW1fc3BsaXRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIDAiKQoKICAgIHNlbGYuX3Byb2plY3QgPSBxdWVyeS5wcm9qZWN0CiAgICAjIHVzaW5nIF9uYW1lc3BhY2UgY29uZmxpY3RzIHdpdGggRGlzcGxheURhdGEuX25hbWVzcGFjZQogICAgc2VsZi5fZGF0YXN0b3JlX25hbWVzcGFjZSA9IHF1ZXJ5Lm5hbWVzcGFjZQogICAgc2VsZi5fcXVlcnkgPSBxdWVyeQogICAgc2VsZi5fbnVtX3NwbGl0cyA9IG51bV9zcGxpdHMKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAjIFRoaXMgaXMgYSBjb21wb3NpdGUgdHJhbnNmb3JtIGludm9sdmVzIHRoZSBmb2xsb3dpbmc6CiAgICAjICAgMS4gQ3JlYXRlIGEgc2luZ2xldG9uIG9mIHRoZSB1c2VyIHByb3ZpZGVkIGBxdWVyeWAgYW5kIGFwcGx5IGEgYGBQYXJEb2BgCiAgICAjICAgdGhhdCBzcGxpdHMgdGhlIHF1ZXJ5IGludG8gYG51bV9zcGxpdHNgIHF1ZXJpZXMgaWYgcG9zc2libGUuCiAgICAjCiAgICAjICAgSWYgdGhlIHZhbHVlIG9mIGBudW1fc3BsaXRzYCBpcyAwLCB0aGUgbnVtYmVyIG9mIHNwbGl0cyB3aWxsIGJlCiAgICAjICAgY29tcHV0ZWQgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGRhdGEgZm9yIHRoZSBgcXVlcnlgLgogICAgIwogICAgIyAgIDIuIFRoZSByZXN1bHRpbmcgYGBQQ29sbGVjdGlvbmBgIGlzIHNoYXJkZWQgYWNyb3NzIHdvcmtlcnMgdXNpbmcgYQogICAgIyAgIGBgUmVzaHVmZmxlYGAgb3BlcmF0aW9uLgogICAgIwogICAgIyAgIDMuIEluIHRoZSB0aGlyZCBzdGVwLCBhIGBgUGFyRG9gYCByZWFkcyBlbnRpdGllcyBmb3IgZWFjaCBxdWVyeSBhbmQKICAgICMgICBvdXRwdXRzIGEgYGBQQ29sbGVjdGlvbltFbnRpdHldYGAuCgogICAgcmV0dXJuICgKICAgICAgICBwY29sbC5waXBlbGluZQogICAgICAgIHwgJ1VzZXJRdWVyeScgPj4gQ3JlYXRlKFtzZWxmLl9xdWVyeV0pCiAgICAgICAgfCAnU3BsaXRRdWVyeScgPj4gUGFyRG8oCiAgICAgICAgICAgIFJlYWRGcm9tRGF0YXN0b3JlLl9TcGxpdFF1ZXJ5Rm4oc2VsZi5fbnVtX3NwbGl0cykpCiAgICAgICAgfCBSZXNodWZmbGUoKQogICAgICAgIHwgJ1JlYWQnID4+IFBhckRvKFJlYWRGcm9tRGF0YXN0b3JlLl9RdWVyeUZuKCkpKQoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgZGlzcF9kYXRhID0gewogICAgICAgICdwcm9qZWN0Jzogc2VsZi5fcXVlcnkucHJvamVjdCwKICAgICAgICAncXVlcnknOiBzdHIoc2VsZi5fcXVlcnkpLAogICAgICAgICdudW1fc3BsaXRzJzogc2VsZi5fbnVtX3NwbGl0cwogICAgfQoKICAgIGlmIHNlbGYuX2RhdGFzdG9yZV9uYW1lc3BhY2UgaXMgbm90IE5vbmU6CiAgICAgIGRpc3BfZGF0YVsnbmFtZXNwYWNlJ10gPSBzZWxmLl9kYXRhc3RvcmVfbmFtZXNwYWNlCgogICAgcmV0dXJuIGRpc3BfZGF0YQoKICBAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZXMuUXVlcnkpCiAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBlcy5RdWVyeSkKICBjbGFzcyBfU3BsaXRRdWVyeUZuKERvRm4pOgogICAgIiIiQSBgRG9GbmAgdGhhdCBzcGxpdHMgYSBnaXZlbiBxdWVyeSBpbnRvIG11bHRpcGxlIHN1Yi1xdWVyaWVzLiIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bV9zcGxpdHMpOgogICAgICBzdXBlcihSZWFkRnJvbURhdGFzdG9yZS5fU3BsaXRRdWVyeUZuLCBzZWxmKS5fX2luaXRfXygpCiAgICAgIHNlbGYuX251bV9zcGxpdHMgPSBudW1fc3BsaXRzCgogICAgZGVmIHByb2Nlc3Moc2VsZiwgcXVlcnksICphcmdzLCAqKmt3YXJncyk6CiAgICAgIGNsaWVudCA9IGhlbHBlci5nZXRfY2xpZW50KHF1ZXJ5LnByb2plY3QsIHF1ZXJ5Lm5hbWVzcGFjZSkKICAgICAgdHJ5OgogICAgICAgICMgU2hvcnQgY2lyY3VpdCBlc3RpbWF0aW5nIG51bV9zcGxpdHMgaWYgc3BsaXQgaXMgbm90IHBvc3NpYmxlLgogICAgICAgIHF1ZXJ5X3NwbGl0dGVyLnZhbGlkYXRlX3NwbGl0KHF1ZXJ5KQoKICAgICAgICBpZiBzZWxmLl9udW1fc3BsaXRzID09IDA6CiAgICAgICAgICBlc3RpbWF0ZWRfbnVtX3NwbGl0cyA9IHNlbGYuZ2V0X2VzdGltYXRlZF9udW1fc3BsaXRzKGNsaWVudCwgcXVlcnkpCiAgICAgICAgZWxzZToKICAgICAgICAgIGVzdGltYXRlZF9udW1fc3BsaXRzID0gc2VsZi5fbnVtX3NwbGl0cwoKICAgICAgICBfTE9HR0VSLmluZm8oIlNwbGl0dGluZyB0aGUgcXVlcnkgaW50byAlZCBzcGxpdHMiLCBlc3RpbWF0ZWRfbnVtX3NwbGl0cykKICAgICAgICBxdWVyeV9zcGxpdHMgPSBxdWVyeV9zcGxpdHRlci5nZXRfc3BsaXRzKAogICAgICAgICAgICBjbGllbnQsIHF1ZXJ5LCBlc3RpbWF0ZWRfbnVtX3NwbGl0cykKICAgICAgZXhjZXB0IHF1ZXJ5X3NwbGl0dGVyLlF1ZXJ5U3BsaXR0ZXJFcnJvcjoKICAgICAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgICAgICJVbmFibGUgdG8gcGFyYWxsZWxpemUgdGhlIGdpdmVuIHF1ZXJ5OiAlcyIsIHF1ZXJ5LCBleGNfaW5mbz1UcnVlKQogICAgICAgIHF1ZXJ5X3NwbGl0cyA9IFtxdWVyeV0KCiAgICAgIHJldHVybiBxdWVyeV9zcGxpdHMKCiAgICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgICBkaXNwX2RhdGEgPSB7J251bV9zcGxpdHMnOiBzZWxmLl9udW1fc3BsaXRzfQogICAgICByZXR1cm4gZGlzcF9kYXRhCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHF1ZXJ5X2xhdGVzdF9zdGF0aXN0aWNzX3RpbWVzdGFtcChjbGllbnQpOgogICAgICAiIiJGZXRjaGVzIHRoZSBsYXRlc3QgdGltZXN0YW1wIG9mIHN0YXRpc3RpY3MgZnJvbSBDbG91ZCBEYXRhc3RvcmUuCgogICAgICBDbG91ZCBEYXRhc3RvcmUgc3lzdGVtIHRhYmxlcyB3aXRoIHN0YXRpc3RpY3MgYXJlIHBlcmlvZGljYWxseSB1cGRhdGVkLgogICAgICBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBsYXRlc3QgdGltZXN0YW1wIChpbiBtaWNyb3NlY29uZHMpIG9mIHN0YXRpc3RpY3MKICAgICAgdXBkYXRlIHVzaW5nIHRoZSBgX19TdGF0X1RvdGFsX19gIHRhYmxlLgogICAgICAiIiIKICAgICAgaWYgY2xpZW50Lm5hbWVzcGFjZSBpcyBOb25lOgogICAgICAgIGtpbmQgPSAnX19TdGF0X1RvdGFsX18nCiAgICAgIGVsc2U6CiAgICAgICAga2luZCA9ICdfX1N0YXRfTnNfVG90YWxfXycKICAgICAgcXVlcnkgPSBjbGllbnQucXVlcnkoCiAgICAgICAgICBraW5kPWtpbmQsIG9yZGVyPVsKICAgICAgICAgICAgICAiLXRpbWVzdGFtcCIsCiAgICAgICAgICBdKQogICAgICBlbnRpdGllcyA9IGxpc3QocXVlcnkuZmV0Y2gobGltaXQ9MSkpCiAgICAgIGlmIG5vdCBlbnRpdGllczoKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkRhdGFzdG9yZSB0b3RhbCBzdGF0aXN0aWNzIHVuYXZhaWxhYmxlLiIpCiAgICAgIHJldHVybiBlbnRpdGllc1swXVsndGltZXN0YW1wJ10KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZ2V0X2VzdGltYXRlZF9zaXplX2J5dGVzKGNsaWVudCwgcXVlcnkpOgogICAgICAiIiJHZXQgdGhlIGVzdGltYXRlZCBzaXplIG9mIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoaXMgaW5zdGFuY2UncyBxdWVyeS4KCiAgICAgIENsb3VkIERhdGFzdG9yZSBwcm92aWRlcyBubyB3YXkgdG8gZ2V0IGEgZ29vZCBlc3RpbWF0ZSBvZiBob3cgbGFyZ2UgdGhlCiAgICAgIHJlc3VsdCBvZiBhIHF1ZXJ5IGlzIGdvaW5nIHRvIGJlLiBIZW5jZSB3ZSB1c2UgdGhlIF9fU3RhdF9LaW5kX18gc3lzdGVtCiAgICAgIHRhYmxlIHRvIGdldCBzaXplIG9mIHRoZSBlbnRpcmUga2luZCBhcyBhbiBhcHByb3hpbWF0ZSBlc3RpbWF0ZSwgYXNzdW1pbmcKICAgICAgZXhhY3RseSAxIGtpbmQgaXMgc3BlY2lmaWVkIGluIHRoZSBxdWVyeS4KICAgICAgU2VlIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9kYXRhc3RvcmUvZG9jcy9jb25jZXB0cy9zdGF0cy4KICAgICAgIiIiCiAgICAgIGtpbmRfbmFtZSA9IHF1ZXJ5LmtpbmQKICAgICAgbGF0ZXN0X3RpbWVzdGFtcCA9ICgKICAgICAgICAgIFJlYWRGcm9tRGF0YXN0b3JlLl9TcGxpdFF1ZXJ5Rm4ucXVlcnlfbGF0ZXN0X3N0YXRpc3RpY3NfdGltZXN0YW1wKAogICAgICAgICAgICAgIGNsaWVudCkpCiAgICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAgICdMYXRlc3Qgc3RhdHMgdGltZXN0YW1wIGZvciBraW5kICVzIGlzICVzJywKICAgICAgICAgIGtpbmRfbmFtZSwKICAgICAgICAgIGxhdGVzdF90aW1lc3RhbXApCgogICAgICBpZiBjbGllbnQubmFtZXNwYWNlIGlzIE5vbmU6CiAgICAgICAga2luZCA9ICdfX1N0YXRfS2luZF9fJwogICAgICBlbHNlOgogICAgICAgIGtpbmQgPSAnX19TdGF0X05zX0tpbmRfXycKICAgICAgcXVlcnkgPSBjbGllbnQucXVlcnkoa2luZD1raW5kKQogICAgICBxdWVyeS5hZGRfZmlsdGVyKCdraW5kX25hbWUnLCAnPScsIGtpbmRfbmFtZSkKICAgICAgcXVlcnkuYWRkX2ZpbHRlcigndGltZXN0YW1wJywgJz0nLCBsYXRlc3RfdGltZXN0YW1wKQoKICAgICAgZW50aXRpZXMgPSBsaXN0KHF1ZXJ5LmZldGNoKGxpbWl0PTEpKQogICAgICBpZiBub3QgZW50aXRpZXM6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAnRGF0YXN0b3JlIHN0YXRpc3RpY3MgZm9yIGtpbmQgJXMgdW5hdmFpbGFibGUnICUga2luZF9uYW1lKQogICAgICByZXR1cm4gZW50aXRpZXNbMF1bJ2VudGl0eV9ieXRlcyddCgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGdldF9lc3RpbWF0ZWRfbnVtX3NwbGl0cyhjbGllbnQsIHF1ZXJ5KToKICAgICAgIiIiQ29tcHV0ZXMgdGhlIG51bWJlciBvZiBzcGxpdHMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBxdWVyeS4iIiIKICAgICAgdHJ5OgogICAgICAgIGVzdGltYXRlZF9zaXplX2J5dGVzID0gKAogICAgICAgICAgICBSZWFkRnJvbURhdGFzdG9yZS5fU3BsaXRRdWVyeUZuLmdldF9lc3RpbWF0ZWRfc2l6ZV9ieXRlcygKICAgICAgICAgICAgICAgIGNsaWVudCwgcXVlcnkpKQogICAgICAgIF9MT0dHRVIuaW5mbygnRXN0aW1hdGVkIHNpemUgYnl0ZXMgZm9yIHF1ZXJ5OiAlcycsIGVzdGltYXRlZF9zaXplX2J5dGVzKQogICAgICAgIG51bV9zcGxpdHMgPSBpbnQoCiAgICAgICAgICAgIG1pbigKICAgICAgICAgICAgICAgIFJlYWRGcm9tRGF0YXN0b3JlLl9OVU1fUVVFUllfU1BMSVRTX01BWCwKICAgICAgICAgICAgICAgIHJvdW5kKCgKICAgICAgICAgICAgICAgICAgICBmbG9hdChlc3RpbWF0ZWRfc2l6ZV9ieXRlcykgLwogICAgICAgICAgICAgICAgICAgIFJlYWRGcm9tRGF0YXN0b3JlLl9ERUZBVUxUX0JVTkRMRV9TSVpFX0JZVEVTKSkpKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgX0xPR0dFUi53YXJuaW5nKCdGYWlsZWQgdG8gZmV0Y2ggZXN0aW1hdGVkIHNpemUgYnl0ZXM6ICVzJywgZSkKICAgICAgICAjIEZhbGxiYWNrIGluIGNhc2UgZXN0aW1hdGVkIHNpemUgaXMgdW5hdmFpbGFibGUuCiAgICAgICAgbnVtX3NwbGl0cyA9IFJlYWRGcm9tRGF0YXN0b3JlLl9OVU1fUVVFUllfU1BMSVRTX01JTgoKICAgICAgcmV0dXJuIG1heChudW1fc3BsaXRzLCBSZWFkRnJvbURhdGFzdG9yZS5fTlVNX1FVRVJZX1NQTElUU19NSU4pCgogIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBlcy5RdWVyeSkKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVzLkVudGl0eSkKICBjbGFzcyBfUXVlcnlGbihEb0ZuKToKICAgICIiIkEgRG9GbiB0aGF0IGZldGNoZXMgZW50aXRpZXMgZnJvbSBDbG91ZCBEYXRhc3RvcmUsIGZvciBhIGdpdmVuIHF1ZXJ5LiIiIgogICAgZGVmIHByb2Nlc3Moc2VsZiwgcXVlcnksICp1bnVzZWRfYXJncywgKip1bnVzZWRfa3dhcmdzKToKICAgICAgX2NsaWVudCA9IGhlbHBlci5nZXRfY2xpZW50KHF1ZXJ5LnByb2plY3QsIHF1ZXJ5Lm5hbWVzcGFjZSkKICAgICAgY2xpZW50X3F1ZXJ5ID0gcXVlcnkuX3RvX2NsaWVudF9xdWVyeShfY2xpZW50KQogICAgICBmb3IgY2xpZW50X2VudGl0eSBpbiBjbGllbnRfcXVlcnkuZmV0Y2gocXVlcnkubGltaXQpOgogICAgICAgIHlpZWxkIHR5cGVzLkVudGl0eS5mcm9tX2NsaWVudF9lbnRpdHkoY2xpZW50X2VudGl0eSkKCgpjbGFzcyBfTXV0YXRlKFBUcmFuc2Zvcm0pOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgdGhhdCB3cml0ZXMgbXV0YXRpb25zIHRvIENsb3VkIERhdGFzdG9yZS4KCiAgT25seSBpZGVtcG90ZW50IERhdGFzdG9yZSBtdXRhdGlvbiBvcGVyYXRpb25zICh1cHNlcnQgYW5kIGRlbGV0ZSkgYXJlCiAgc3VwcG9ydGVkLCBhcyB0aGUgY29tbWl0cyBhcmUgcmV0cmllZCB3aGVuIGZhaWx1cmVzIG9jY3VyLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBtdXRhdGVfZm4pOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBNdXRhdGUgdHJhbnNmb3JtLgoKICAgICBBcmdzOgogICAgICAgbXV0YXRlX2ZuOiBJbnN0YW5jZSBvZiBgRGF0YXN0b3JlTXV0YXRlRm5gIHRvIHVzZS4KICAgICAiIiIKICAgIHNlbGYuX211dGF0ZV9mbiA9IG11dGF0ZV9mbgoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiBwY29sbCB8ICdXcml0ZSBCYXRjaCB0byBEYXRhc3RvcmUnID4+IFBhckRvKHNlbGYuX211dGF0ZV9mbikKCiAgY2xhc3MgRGF0YXN0b3JlTXV0YXRlRm4oRG9Gbik6CiAgICAiIiJBIGBgRG9GbmBgIHRoYXQgd3JpdGUgbXV0YXRpb25zIHRvIERhdGFzdG9yZS4KCiAgICBNdXRhdGlvbnMgYXJlIHdyaXR0ZW4gaW4gYmF0Y2hlcywgd2hlcmUgdGhlIG1heGltdW0gYmF0Y2ggc2l6ZSBpcwogICAgYHV0aWwuV1JJVEVfQkFUQ0hfU0laRWAuCgogICAgQ29tbWl0cyBhcmUgbm9uLXRyYW5zYWN0aW9uYWwuIElmIGEgY29tbWl0IGZhaWxzIGJlY2F1c2Ugb2YgYSBjb25mbGljdCBvdmVyCiAgICBhbiBlbnRpdHkgZ3JvdXAsIHRoZSBjb21taXQgd2lsbCBiZSByZXRyaWVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uCiAgICBzaG91bGQgYmUgaWRlbXBvdGVudCAoYHVwc2VydGAgYW5kIGBkZWxldGVgIG11dGF0aW9ucykgdG8gcHJldmVudCBkdXBsaWNhdGUKICAgIGRhdGEgb3IgZXJyb3JzLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdCk6CiAgICAgICIiIgogICAgICBBcmdzOgogICAgICAgIHByb2plY3Q6IChzdHIpIGNsb3VkIHByb2plY3QgaWQKICAgICAgIiIiCiAgICAgIHNlbGYuX3Byb2plY3QgPSBwcm9qZWN0CiAgICAgIHNlbGYuX2NsaWVudCA9IE5vbmUKICAgICAgc2VsZi5fcnBjX3N1Y2Nlc3NlcyA9IE1ldHJpY3MuY291bnRlcigKICAgICAgICAgIF9NdXRhdGUuRGF0YXN0b3JlTXV0YXRlRm4sICJkYXRhc3RvcmVScGNTdWNjZXNzZXMiKQogICAgICBzZWxmLl9ycGNfZXJyb3JzID0gTWV0cmljcy5jb3VudGVyKAogICAgICAgICAgX011dGF0ZS5EYXRhc3RvcmVNdXRhdGVGbiwgImRhdGFzdG9yZVJwY0Vycm9ycyIpCiAgICAgIHNlbGYuX3Rocm90dGxlZF9zZWNzID0gTWV0cmljcy5jb3VudGVyKAogICAgICAgICAgX011dGF0ZS5EYXRhc3RvcmVNdXRhdGVGbiwgImN1bXVsYXRpdmVUaHJvdHRsaW5nU2Vjb25kcyIpCiAgICAgIHNlbGYuX3Rocm90dGxlciA9IEFkYXB0aXZlVGhyb3R0bGVyKAogICAgICAgICAgd2luZG93X21zPTEyMDAwMCwgYnVja2V0X21zPTEwMDAsIG92ZXJsb2FkX3JhdGlvPTEuMjUpCgogICAgZGVmIF91cGRhdGVfcnBjX3N0YXRzKHNlbGYsIHN1Y2Nlc3Nlcz0wLCBlcnJvcnM9MCwgdGhyb3R0bGVkX3NlY3M9MCk6CiAgICAgIHNlbGYuX3JwY19zdWNjZXNzZXMuaW5jKHN1Y2Nlc3NlcykKICAgICAgc2VsZi5fcnBjX2Vycm9ycy5pbmMoZXJyb3JzKQogICAgICBzZWxmLl90aHJvdHRsZWRfc2Vjcy5pbmModGhyb3R0bGVkX3NlY3MpCgogICAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgICAgc2VsZi5fY2xpZW50ID0gaGVscGVyLmdldF9jbGllbnQoc2VsZi5fcHJvamVjdCwgbmFtZXNwYWNlPU5vbmUpCiAgICAgIHNlbGYuX2luaXRfYmF0Y2goKQoKICAgICAgc2VsZi5fYmF0Y2hfc2l6ZXIgPSB1dGlsLkR5bmFtaWNCYXRjaFNpemVyKCkKICAgICAgc2VsZi5fdGFyZ2V0X2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplci5nZXRfYmF0Y2hfc2l6ZSgKICAgICAgICAgIHRpbWUudGltZSgpICogMTAwMCkKCiAgICBkZWYgZWxlbWVudF90b19jbGllbnRfYmF0Y2hfaXRlbShzZWxmLCBlbGVtZW50KToKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICAgIGRlZiBhZGRfdG9fYmF0Y2goc2VsZiwgY2xpZW50X2JhdGNoX2l0ZW0pOgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogICAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgICBudW1fcmV0cmllcz01LCByZXRyeV9maWx0ZXI9aGVscGVyLnJldHJ5X29uX3JwY19lcnJvcikKICAgIGRlZiB3cml0ZV9tdXRhdGlvbnMoc2VsZiwgdGhyb3R0bGVyLCBycGNfc3RhdHNfY2FsbGJhY2ssIHRocm90dGxlX2RlbGF5PTEpOgogICAgICAiIiJXcml0ZXMgYSBiYXRjaCBvZiBtdXRhdGlvbnMgdG8gQ2xvdWQgRGF0YXN0b3JlLgoKICAgICAgSWYgYSBjb21taXQgZmFpbHMsIGl0IHdpbGwgYmUgcmV0cmllZCB1cCB0byA1IHRpbWVzLiBBbGwgbXV0YXRpb25zIGluIHRoZQogICAgICBiYXRjaCB3aWxsIGJlIGNvbW1pdHRlZCBhZ2FpbiwgZXZlbiBpZiB0aGUgY29tbWl0IHdhcyBwYXJ0aWFsbHkKICAgICAgc3VjY2Vzc2Z1bC4gSWYgdGhlIHJldHJ5IGxpbWl0IGlzIGV4Y2VlZGVkLCB0aGUgbGFzdCBleGNlcHRpb24gZnJvbQogICAgICBDbG91ZCBEYXRhc3RvcmUgd2lsbCBiZSByYWlzZWQuCgogICAgICBBc3N1bWVzIHRoYXQgdGhlIERhdGFzdG9yZSBjbGllbnQgbGlicmFyeSBkb2VzIG5vdCBwZXJmb3JtIGFueSByZXRyaWVzIG9uCiAgICAgIGNvbW1pdHMuIEl0IGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkIGhvdyBzdWNoIHJldHJpZXMgd291bGQgaW50ZXJhY3Qgd2l0aAogICAgICB0aGUgcmV0cmllcyBhbmQgdGhyb3R0bGVyIHVzZWQgaGVyZS4KICAgICAgU2VlIGBgZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZV92MS5nYXBpYy5kYXRhc3RvcmVfY2xpZW50X2NvbmZpZ2BgIGZvcgogICAgICByZXRyeSBjb25maWcuCgogICAgICBBcmdzOgogICAgICAgIHJwY19zdGF0c19jYWxsYmFjazogYSBmdW5jdGlvbiB0byBjYWxsIHdpdGggYXJndW1lbnRzIGBzdWNjZXNzZXNgIGFuZAogICAgICAgICAgICBgZmFpbHVyZXNgIGFuZCBgdGhyb3R0bGVkX3NlY3NgOyB0aGlzIGlzIGNhbGxlZCB0byByZWNvcmQgc3VjY2Vzc2Z1bAogICAgICAgICAgICBhbmQgZmFpbGVkIFJQQ3MgdG8gRGF0YXN0b3JlIGFuZCB0aW1lIHNwZW50IHdhaXRpbmcgZm9yIHRocm90dGxpbmcuCiAgICAgICAgdGhyb3R0bGVyOiAoYGBhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxLmFkYXB0aXZlX3Rocm90dGxlci4KICAgICAgICAgIEFkYXB0aXZlVGhyb3R0bGVyYGApCiAgICAgICAgICBUaHJvdHRsZXIgaW5zdGFuY2UgdXNlZCB0byBzZWxlY3QgcmVxdWVzdHMgdG8gYmUgdGhyb3R0bGVkLgogICAgICAgIHRocm90dGxlX2RlbGF5OiAoOmNsYXNzOmBmbG9hdGApIHRpbWUgaW4gc2Vjb25kcyB0byBzbGVlcCB3aGVuCiAgICAgICAgICAgIHRocm90dGxlZC4KCiAgICAgIFJldHVybnM6CiAgICAgICAgKGludCkgVGhlIGxhdGVuY3kgb2YgdGhlIHN1Y2Nlc3NmdWwgUlBDIGluIG1pbGxpc2Vjb25kcy4KICAgICAgIiIiCiAgICAgICMgQ2xpZW50LXNpZGUgdGhyb3R0bGluZy4KICAgICAgd2hpbGUgdGhyb3R0bGVyLnRocm90dGxlX3JlcXVlc3QodGltZS50aW1lKCkgKiAxMDAwKToKICAgICAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgICAgICJEZWxheWluZyByZXF1ZXN0IGZvciAlZHMgZHVlIHRvIHByZXZpb3VzIGZhaWx1cmVzIiwgdGhyb3R0bGVfZGVsYXkpCiAgICAgICAgdGltZS5zbGVlcCh0aHJvdHRsZV9kZWxheSkKICAgICAgICBycGNfc3RhdHNfY2FsbGJhY2sodGhyb3R0bGVkX3NlY3M9dGhyb3R0bGVfZGVsYXkpCgogICAgICBpZiBzZWxmLl9iYXRjaCBpcyBOb25lOgogICAgICAgICMgdGhpcyB3aWxsIG9ubHkgaGFwcGVuIHdoZW4gd2UgcmUtdHJ5IHByZXZpb3VzbHkgZmFpbGVkIGJhdGNoCiAgICAgICAgc2VsZi5fYmF0Y2ggPSBzZWxmLl9jbGllbnQuYmF0Y2goKQogICAgICAgIHNlbGYuX2JhdGNoLmJlZ2luKCkKICAgICAgICBmb3IgZWxlbWVudCBpbiBzZWxmLl9iYXRjaF9lbGVtZW50czoKICAgICAgICAgIHNlbGYuYWRkX3RvX2JhdGNoKGVsZW1lbnQpCgogICAgICB0cnk6CiAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgc2VsZi5fYmF0Y2guY29tbWl0KCkKICAgICAgICBlbmRfdGltZSA9IHRpbWUudGltZSgpCgogICAgICAgIHJwY19zdGF0c19jYWxsYmFjayhzdWNjZXNzZXM9MSkKICAgICAgICB0aHJvdHRsZXIuc3VjY2Vzc2Z1bF9yZXF1ZXN0KHN0YXJ0X3RpbWUgKiAxMDAwKQogICAgICAgIGNvbW1pdF90aW1lX21zID0gaW50KChlbmRfdGltZSAtIHN0YXJ0X3RpbWUpICogMTAwMCkKICAgICAgICByZXR1cm4gY29tbWl0X3RpbWVfbXMKICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICBzZWxmLl9iYXRjaCA9IE5vbmUKICAgICAgICBycGNfc3RhdHNfY2FsbGJhY2soZXJyb3JzPTEpCiAgICAgICAgcmFpc2UKCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgICAgY2xpZW50X2VsZW1lbnQgPSBzZWxmLmVsZW1lbnRfdG9fY2xpZW50X2JhdGNoX2l0ZW0oZWxlbWVudCkKICAgICAgc2VsZi5fYmF0Y2hfZWxlbWVudHMuYXBwZW5kKGNsaWVudF9lbGVtZW50KQogICAgICBzZWxmLmFkZF90b19iYXRjaChjbGllbnRfZWxlbWVudCkKICAgICAgc2VsZi5fYmF0Y2hfYnl0ZXNfc2l6ZSArPSBzZWxmLl9iYXRjaC5tdXRhdGlvbnNbLTFdLkJ5dGVTaXplKCkKCiAgICAgIGlmIChsZW4oc2VsZi5fYmF0Y2gubXV0YXRpb25zKSA+PSBzZWxmLl90YXJnZXRfYmF0Y2hfc2l6ZSBvcgogICAgICAgICAgc2VsZi5fYmF0Y2hfYnl0ZXNfc2l6ZSA+IHV0aWwuV1JJVEVfQkFUQ0hfTUFYX0JZVEVTX1NJWkUpOgogICAgICAgIHNlbGYuX2ZsdXNoX2JhdGNoKCkKCiAgICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgICAgaWYgc2VsZi5fYmF0Y2hfZWxlbWVudHM6CiAgICAgICAgc2VsZi5fZmx1c2hfYmF0Y2goKQoKICAgIGRlZiBfaW5pdF9iYXRjaChzZWxmKToKICAgICAgc2VsZi5fYmF0Y2hfYnl0ZXNfc2l6ZSA9IDAKICAgICAgc2VsZi5fYmF0Y2ggPSBzZWxmLl9jbGllbnQuYmF0Y2goKQogICAgICBzZWxmLl9iYXRjaC5iZWdpbigpCiAgICAgIHNlbGYuX2JhdGNoX2VsZW1lbnRzID0gW10KCiAgICBkZWYgX2ZsdXNoX2JhdGNoKHNlbGYpOgogICAgICAjIEZsdXNoIHRoZSBjdXJyZW50IGJhdGNoIG9mIG11dGF0aW9ucyB0byBDbG91ZCBEYXRhc3RvcmUuCiAgICAgIGxhdGVuY3lfbXMgPSBzZWxmLndyaXRlX211dGF0aW9ucygKICAgICAgICAgIHNlbGYuX3Rocm90dGxlciwKICAgICAgICAgIHJwY19zdGF0c19jYWxsYmFjaz1zZWxmLl91cGRhdGVfcnBjX3N0YXRzLAogICAgICAgICAgdGhyb3R0bGVfZGVsYXk9dXRpbC5XUklURV9CQVRDSF9UQVJHRVRfTEFURU5DWV9NUyAvLyAxMDAwKQogICAgICBfTE9HR0VSLmRlYnVnKAogICAgICAgICAgIlN1Y2Nlc3NmdWxseSB3cm90ZSAlZCBtdXRhdGlvbnMgaW4gJWRtcy4iLAogICAgICAgICAgbGVuKHNlbGYuX2JhdGNoLm11dGF0aW9ucyksCiAgICAgICAgICBsYXRlbmN5X21zKQoKICAgICAgbm93ID0gdGltZS50aW1lKCkgKiAxMDAwCiAgICAgIHNlbGYuX2JhdGNoX3NpemVyLnJlcG9ydF9sYXRlbmN5KAogICAgICAgICAgbm93LCBsYXRlbmN5X21zLCBsZW4oc2VsZi5fYmF0Y2gubXV0YXRpb25zKSkKICAgICAgc2VsZi5fdGFyZ2V0X2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplci5nZXRfYmF0Y2hfc2l6ZShub3cpCgogICAgICBzZWxmLl9pbml0X2JhdGNoKCkKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZXMuRW50aXR5KQpjbGFzcyBXcml0ZVRvRGF0YXN0b3JlKF9NdXRhdGUpOgogICIiIgogIFdyaXRlcyBlbGVtZW50cyBvZiB0eXBlCiAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5FbnRpdHlgIHRvIENsb3VkIERhdGFzdG9yZS4KCiAgRW50aXR5IGtleXMgbXVzdCBiZSBjb21wbGV0ZS4gVGhlIGBgcHJvamVjdGBgIGZpZWxkIGluIGVhY2gga2V5IG11c3QgbWF0Y2ggdGhlCiAgcHJvamVjdCBJRCBwYXNzZWQgdG8gdGhpcyB0cmFuc2Zvcm0uIElmIGBgcHJvamVjdGBgIGZpZWxkIGluIGVudGl0eSBvcgogIHByb3BlcnR5IGtleSBpcyBlbXB0eSB0aGVuIGl0IGlzIGZpbGxlZCB3aXRoIHRoZSBwcm9qZWN0IElEIHBhc3NlZCB0byB0aGlzCiAgdHJhbnNmb3JtLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0KToKICAgICIiIkluaXRpYWxpemUgdGhlIGBXcml0ZVRvRGF0YXN0b3JlYCB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgcHJvamVjdDogKDpjbGFzczpgc3RyYCkgVGhlIElEIG9mIHRoZSBwcm9qZWN0IHRvIHdyaXRlIGVudGl0aWVzIHRvLgogICAgIiIiCiAgICBtdXRhdGVfZm4gPSBXcml0ZVRvRGF0YXN0b3JlLl9EYXRhc3RvcmVXcml0ZUZuKHByb2plY3QpCiAgICBzdXBlcihXcml0ZVRvRGF0YXN0b3JlLCBzZWxmKS5fX2luaXRfXyhtdXRhdGVfZm4pCgogIGNsYXNzIF9EYXRhc3RvcmVXcml0ZUZuKF9NdXRhdGUuRGF0YXN0b3JlTXV0YXRlRm4pOgogICAgZGVmIGVsZW1lbnRfdG9fY2xpZW50X2JhdGNoX2l0ZW0oc2VsZiwgZWxlbWVudCk6CiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGVsZW1lbnQsIHR5cGVzLkVudGl0eSk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ2FwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcuZGF0YXN0b3JlaW8uRW50aXR5JwogICAgICAgICAgICAnIGV4cGVjdGVkLCBnb3Q6ICVzJyAlIHR5cGUoZWxlbWVudCkpCiAgICAgIGlmIG5vdCBlbGVtZW50LmtleS5wcm9qZWN0OgogICAgICAgIGVsZW1lbnQua2V5LnByb2plY3QgPSBzZWxmLl9wcm9qZWN0CiAgICAgIGNsaWVudF9lbnRpdHkgPSBlbGVtZW50LnRvX2NsaWVudF9lbnRpdHkoKQogICAgICBpZiBjbGllbnRfZW50aXR5LmtleS5pc19wYXJ0aWFsOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdFbnRpdGllcyB0byBiZSB3cml0dGVuIHRvIENsb3VkIERhdGFzdG9yZSBtdXN0ICcKICAgICAgICAgICAgJ2hhdmUgY29tcGxldGUga2V5czpcbiVzJyAlIGNsaWVudF9lbnRpdHkpCiAgICAgIHJldHVybiBjbGllbnRfZW50aXR5CgogICAgZGVmIGFkZF90b19iYXRjaChzZWxmLCBjbGllbnRfZW50aXR5KToKICAgICAgc2VsZi5fYmF0Y2gucHV0KGNsaWVudF9lbnRpdHkpCgogICAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgICAgcmV0dXJuIHsKICAgICAgICAgICdtdXRhdGlvbic6ICdXcml0ZSAodXBzZXJ0KScsCiAgICAgICAgICAncHJvamVjdCc6IHNlbGYuX3Byb2plY3QsCiAgICAgIH0KCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZXMuS2V5KQpjbGFzcyBEZWxldGVGcm9tRGF0YXN0b3JlKF9NdXRhdGUpOgogICIiIgogIERlbGV0ZXMgZWxlbWVudHMgbWF0Y2hpbmcgaW5wdXQKICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LnR5cGVzLktleWAgZWxlbWVudHMgZnJvbSBDbG91ZAogIERhdGFzdG9yZS4KCiAgS2V5cyBtdXN0IGJlIGNvbXBsZXRlLiBUaGUgYGBwcm9qZWN0YGAgZmllbGQgaW4gZWFjaCBrZXkgbXVzdCBtYXRjaCB0aGUKICBwcm9qZWN0IElEIHBhc3NlZCB0byB0aGlzIHRyYW5zZm9ybS4gSWYgYGBwcm9qZWN0YGAgZmllbGQgaW4ga2V5IGlzIGVtcHR5IHRoZW4KICBpdCBpcyBmaWxsZWQgd2l0aCB0aGUgcHJvamVjdCBJRCBwYXNzZWQgdG8gdGhpcyB0cmFuc2Zvcm0uCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QpOgogICAgIiIiSW5pdGlhbGl6ZSB0aGUgYERlbGV0ZUZyb21EYXRhc3RvcmVgIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBwcm9qZWN0OiAoOmNsYXNzOmBzdHJgKSBUaGUgSUQgb2YgdGhlIHByb2plY3QgZnJvbSB3aGljaCB0aGUgZW50aXRpZXMgd2lsbAogICAgICAgIGJlIGRlbGV0ZWQuCiAgICAiIiIKICAgIG11dGF0ZV9mbiA9IERlbGV0ZUZyb21EYXRhc3RvcmUuX0RhdGFzdG9yZURlbGV0ZUZuKHByb2plY3QpCiAgICBzdXBlcihEZWxldGVGcm9tRGF0YXN0b3JlLCBzZWxmKS5fX2luaXRfXyhtdXRhdGVfZm4pCgogIGNsYXNzIF9EYXRhc3RvcmVEZWxldGVGbihfTXV0YXRlLkRhdGFzdG9yZU11dGF0ZUZuKToKICAgIGRlZiBlbGVtZW50X3RvX2NsaWVudF9iYXRjaF9pdGVtKHNlbGYsIGVsZW1lbnQpOgogICAgICBpZiBub3QgaXNpbnN0YW5jZShlbGVtZW50LCB0eXBlcy5LZXkpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvLktleScKICAgICAgICAgICAgJyBleHBlY3RlZCwgZ290OiAlcycgJSB0eXBlKGVsZW1lbnQpKQogICAgICBpZiBub3QgZWxlbWVudC5wcm9qZWN0OgogICAgICAgIGVsZW1lbnQucHJvamVjdCA9IHNlbGYuX3Byb2plY3QKICAgICAgY2xpZW50X2tleSA9IGVsZW1lbnQudG9fY2xpZW50X2tleSgpCiAgICAgIGlmIGNsaWVudF9rZXkuaXNfcGFydGlhbDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnS2V5cyB0byBiZSBkZWxldGVkIGZyb20gQ2xvdWQgRGF0YXN0b3JlIG11c3QgYmUgJwogICAgICAgICAgICAnY29tcGxldGU6XG4lcycgJSBjbGllbnRfa2V5KQogICAgICByZXR1cm4gY2xpZW50X2tleQoKICAgIGRlZiBhZGRfdG9fYmF0Y2goc2VsZiwgY2xpZW50X2tleSk6CiAgICAgIHNlbGYuX2JhdGNoLmRlbGV0ZShjbGllbnRfa2V5KQoKICAgIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICAgIHJldHVybiB7CiAgICAgICAgICAnbXV0YXRpb24nOiAnRGVsZXRlJywKICAgICAgICAgICdwcm9qZWN0Jzogc2VsZi5fcHJvamVjdCwKICAgICAgfQqUfZQojBpSZWFkRnJvbURhdGFzdG9yZS5fX2luaXRfX5RqVjEBAEtoS4CHlIwYUmVhZEZyb21EYXRhc3RvcmUuZXhwYW5klGpWMQEAS4JLloeUjB5SZWFkRnJvbURhdGFzdG9yZS5kaXNwbGF5X2RhdGGUalYxAQBLmEuih5SMKFJlYWRGcm9tRGF0YXN0b3JlLl9TcGxpdFF1ZXJ5Rm4uX19pbml0X1+UalYxAQBLqEuqh5SMJ1JlYWRGcm9tRGF0YXN0b3JlLl9TcGxpdFF1ZXJ5Rm4ucHJvY2Vzc5RqVjEBAEusS7+HlIwsUmVhZEZyb21EYXRhc3RvcmUuX1NwbGl0UXVlcnlGbi5kaXNwbGF5X2RhdGGUalYxAQBLwUvDh5SMQVJlYWRGcm9tRGF0YXN0b3JlLl9TcGxpdFF1ZXJ5Rm4ucXVlcnlfbGF0ZXN0X3N0YXRpc3RpY3NfdGltZXN0YW1wlGpWMQEAS8VL2IeUjDhSZWFkRnJvbURhdGFzdG9yZS5fU3BsaXRRdWVyeUZuLmdldF9lc3RpbWF0ZWRfc2l6ZV9ieXRlc5RqVjEBAEvaS/mHlIw4UmVhZEZyb21EYXRhc3RvcmUuX1NwbGl0UXVlcnlGbi5nZXRfZXN0aW1hdGVkX251bV9zcGxpdHOUalYxAQBL+00OAYeUjB9SZWFkRnJvbURhdGFzdG9yZS5fU3BsaXRRdWVyeUZulGpdMQEAS6RNDgGHlIwiUmVhZEZyb21EYXRhc3RvcmUuX1F1ZXJ5Rm4ucHJvY2Vzc5RqVjEBAE0UAU0YAYeUjBpSZWFkRnJvbURhdGFzdG9yZS5fUXVlcnlGbpRqXTEBAE0QAU0YAYeUjBFSZWFkRnJvbURhdGFzdG9yZZRqXTEBAEs6TRgBh5SMEF9NdXRhdGUuX19pbml0X1+UalYxAQBNIQFNJwGHlIwOX011dGF0ZS5leHBhbmSUalYxAQBNKQFNKgGHlIwiX011dGF0ZS5EYXRhc3RvcmVNdXRhdGVGbi5fX2luaXRfX5RqVjEBAE03AU1FAYeUjCtfTXV0YXRlLkRhdGFzdG9yZU11dGF0ZUZuLl91cGRhdGVfcnBjX3N0YXRzlGpWMQEATUcBTUoBh5SMJl9NdXRhdGUuRGF0YXN0b3JlTXV0YXRlRm4uc3RhcnRfYnVuZGxllGpWMQEATUwBTVIBh5SMNl9NdXRhdGUuRGF0YXN0b3JlTXV0YXRlRm4uZWxlbWVudF90b19jbGllbnRfYmF0Y2hfaXRlbZRqVjEBAE1UAU1VAYeUjCZfTXV0YXRlLkRhdGFzdG9yZU11dGF0ZUZuLmFkZF90b19iYXRjaJRqVjEBAE1XAU1YAYeUjClfTXV0YXRlLkRhdGFzdG9yZU11dGF0ZUZuLndyaXRlX211dGF0aW9uc5RqVjEBAE1aAU2RAYeUjCFfTXV0YXRlLkRhdGFzdG9yZU11dGF0ZUZuLnByb2Nlc3OUalYxAQBNkwFNmwGHlIwnX011dGF0ZS5EYXRhc3RvcmVNdXRhdGVGbi5maW5pc2hfYnVuZGxllGpWMQEATZ0BTZ8Bh5SMJV9NdXRhdGUuRGF0YXN0b3JlTXV0YXRlRm4uX2luaXRfYmF0Y2iUalYxAQBNoQFNpQGHlIwmX011dGF0ZS5EYXRhc3RvcmVNdXRhdGVGbi5fZmx1c2hfYmF0Y2iUalYxAQBNpwFNtwGHlIwZX011dGF0ZS5EYXRhc3RvcmVNdXRhdGVGbpRqXTEBAE0sAU23AYeUjAdfTXV0YXRllGpdMQEATRsBTbcBh5SMGVdyaXRlVG9EYXRhc3RvcmUuX19pbml0X1+UalYxAQBNxQFNzAGHlIw/V3JpdGVUb0RhdGFzdG9yZS5fRGF0YXN0b3JlV3JpdGVGbi5lbGVtZW50X3RvX2NsaWVudF9iYXRjaF9pdGVtlGpWMQEATc8BTdsBh5SML1dyaXRlVG9EYXRhc3RvcmUuX0RhdGFzdG9yZVdyaXRlRm4uYWRkX3RvX2JhdGNolGpWMQEATd0BTd4Bh5SML1dyaXRlVG9EYXRhc3RvcmUuX0RhdGFzdG9yZVdyaXRlRm4uZGlzcGxheV9kYXRhlGpWMQEATeABTeQBh5SMIldyaXRlVG9EYXRhc3RvcmUuX0RhdGFzdG9yZVdyaXRlRm6Ual0xAQBNzgFN5AGHlIwQV3JpdGVUb0RhdGFzdG9yZZRqXTEBAE26AU3kAYeUjBxEZWxldGVGcm9tRGF0YXN0b3JlLl9faW5pdF9flGpWMQEATfIBTfoBh5SMQ0RlbGV0ZUZyb21EYXRhc3RvcmUuX0RhdGFzdG9yZURlbGV0ZUZuLmVsZW1lbnRfdG9fY2xpZW50X2JhdGNoX2l0ZW2UalYxAQBN/QFNCQKHlIwzRGVsZXRlRnJvbURhdGFzdG9yZS5fRGF0YXN0b3JlRGVsZXRlRm4uYWRkX3RvX2JhdGNolGpWMQEATQsCTQwCh5SMM0RlbGV0ZUZyb21EYXRhc3RvcmUuX0RhdGFzdG9yZURlbGV0ZUZuLmRpc3BsYXlfZGF0YZRqVjEBAE0OAk0SAoeUjCZEZWxldGVGcm9tRGF0YXN0b3JlLl9EYXRhc3RvcmVEZWxldGVGbpRqXTEBAE38AU0SAoeUjBNEZWxldGVGcm9tRGF0YXN0b3JllGpdMQEATecBTRICh5R1fZQojBFSZWFkRnJvbURhdGFzdG9yZZRqHQQAAIwYUmVhZEZyb21EYXRhc3RvcmUuZXhwYW5klGodBAAAjB5SZWFkRnJvbURhdGFzdG9yZS5kaXNwbGF5X2RhdGGUah0EAACMEFdyaXRlVG9EYXRhc3RvcmWUah0EAACME0RlbGV0ZUZyb21EYXRhc3RvcmWUah0EAAB1jC5hcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmRhdGFzdG9yZWlvlHSUjClhcGFjaGVfYmVhbS5pby5nY3AuZGF0YXN0b3JlLnYxbmV3LmhlbHBlcpQoWJIKAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpDbG91ZCBEYXRhc3RvcmUgY2xpZW50IGFuZCB0ZXN0IGZ1bmN0aW9ucy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IG9zCmltcG9ydCB1dWlkCmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgoKZnJvbSBnb29nbGUuYXBpX2NvcmUgaW1wb3J0IGV4Y2VwdGlvbnMKZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IGVudmlyb25tZW50X3ZhcnMKZnJvbSBnb29nbGUuY2xvdWQuZGF0YXN0b3JlIGltcG9ydCBjbGllbnQKCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldyBpbXBvcnQgdHlwZXMKZnJvbSBjYWNoZXRvb2xzLmZ1bmMgaW1wb3J0IHR0bF9jYWNoZQoKIyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZGF0YXN0b3JlL2RvY3MvY29uY2VwdHMvZXJyb3JzI2Vycm9yX2NvZGVzCl9SRVRSWUFCTEVfREFUQVNUT1JFX0VSUk9SUyA9ICgKICAgIGV4Y2VwdGlvbnMuQWJvcnRlZCwKICAgIGV4Y2VwdGlvbnMuRGVhZGxpbmVFeGNlZWRlZCwKICAgIGV4Y2VwdGlvbnMuSW50ZXJuYWxTZXJ2ZXJFcnJvciwKICAgIGV4Y2VwdGlvbnMuU2VydmljZVVuYXZhaWxhYmxlLAopCgoKQHR0bF9jYWNoZShtYXhzaXplPTEyOCwgdHRsPTM2MDApCmRlZiBnZXRfY2xpZW50KHByb2plY3QsIG5hbWVzcGFjZSk6CiAgIiIiUmV0dXJucyBhIENsb3VkIERhdGFzdG9yZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IGNsaWVudC5DbGllbnQocHJvamVjdD1wcm9qZWN0LCBuYW1lc3BhY2U9bmFtZXNwYWNlKQogICMgQXZvaWQgb3ZlcndyaXRpbmcgdXNlciBzZXR0aW5nLiBCRUFNLTc2MDgKICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoZW52aXJvbm1lbnRfdmFycy5HQ0RfSE9TVCwgTm9uZSk6CiAgICBfY2xpZW50LmJhc2VfdXJsID0gJ2h0dHBzOi8vYmF0Y2gtZGF0YXN0b3JlLmdvb2dsZWFwaXMuY29tJyAgIyBCRUFNLTEzODcKICByZXR1cm4gX2NsaWVudAoKCmRlZiByZXRyeV9vbl9ycGNfZXJyb3IoZXhjZXB0aW9uKToKICAiIiJBIHJldHJ5IGZpbHRlciBmb3IgQ2xvdWQgRGF0YXN0b3JlIFJQQ0Vycm9ycy4iIiIKICByZXR1cm4gaXNpbnN0YW5jZShleGNlcHRpb24sIF9SRVRSWUFCTEVfREFUQVNUT1JFX0VSUk9SUykKCgpkZWYgY3JlYXRlX2VudGl0aWVzKGNvdW50LCBpZF9vcl9uYW1lPUZhbHNlKToKICAiIiJDcmVhdGVzIGEgbGlzdCBvZiBlbnRpdGllcyB3aXRoIHJhbmRvbSBrZXlzLiIiIgogIGlmIGlkX29yX25hbWU6CiAgICBpZHNfb3JfbmFtZXMgPSBbCiAgICAgICAgdXVpZC51dWlkNCgpLmludCAmICgoMSA8PCA2MykgLSAxKSBmb3IgXyBpbiByYW5nZShjb3VudCkKICAgIF0gICMgdHlwZTogTGlzdFtVbmlvbltzdHIsIGludF1dCiAgZWxzZToKICAgIGlkc19vcl9uYW1lcyA9IFtzdHIodXVpZC51dWlkNCgpKSBmb3IgXyBpbiByYW5nZShjb3VudCldCgogIGtleXMgPSBbdHlwZXMuS2V5KFsnRW50aXR5S2luZCcsIHhdLCBwcm9qZWN0PSdwcm9qZWN0JykgZm9yIHggaW4gaWRzX29yX25hbWVzXQogIHJldHVybiBbdHlwZXMuRW50aXR5KGtleSkgZm9yIGtleSBpbiBrZXlzXQoKCmRlZiBjcmVhdGVfY2xpZW50X2VudGl0aWVzKGNvdW50LCBpZF9vcl9uYW1lPUZhbHNlKToKICAiIiJDcmVhdGVzIGEgbGlzdCBvZiBjbGllbnQtc3R5bGUgZW50aXRpZXMgd2l0aCByYW5kb20ga2V5cy4iIiIKICByZXR1cm4gWwogICAgICBlbnRpdHkudG9fY2xpZW50X2VudGl0eSgpCiAgICAgIGZvciBlbnRpdHkgaW4gY3JlYXRlX2VudGl0aWVzKGNvdW50LCBpZF9vcl9uYW1lPWlkX29yX25hbWUpCiAgXQqUfZQojApnZXRfY2xpZW50lGpWMQEASzJLOYeUjBJyZXRyeV9vbl9ycGNfZXJyb3KUalYxAQBLPEs+h5SMD2NyZWF0ZV9lbnRpdGllc5RqVjEBAEtBS0uHlIwWY3JlYXRlX2NsaWVudF9lbnRpdGllc5RqVjEBAEtOS1OHlHV9lCiMCmdldF9jbGllbnSUamIDAACMEnJldHJ5X29uX3JwY19lcnJvcpRqYgMAAIwPY3JlYXRlX2VudGl0aWVzlGpiAwAAjBZjcmVhdGVfY2xpZW50X2VudGl0aWVzlGpiAwAAdYwpYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy5oZWxwZXKUdJSMMWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcucXVlcnlfc3BsaXR0ZXKUKFhyJgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKSW1wbGVtZW50cyBhIENsb3VkIERhdGFzdG9yZSBxdWVyeSBzcGxpdHRlci4KCkZvciBpbnRlcm5hbCB1c2Ugb25seS4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gYnVpbHRpbnMgaW1wb3J0IHJvdW5kCgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IGxvbmcKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcgaW1wb3J0IHR5cGVzCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgVmFsdWVQcm92aWRlcgoKX19hbGxfXyA9IFsnUXVlcnlTcGxpdHRlckVycm9yJywgJ1NwbGl0Tm90UG9zc2libGVFcnJvcicsICdnZXRfc3BsaXRzJ10KClNDQVRURVJfUFJPUEVSVFlfTkFNRSA9ICdfX3NjYXR0ZXJfXycKS0VZX1BST1BFUlRZX05BTUUgPSAnX19rZXlfXycKIyBUaGUgbnVtYmVyIG9mIGtleXMgdG8gc2FtcGxlIGZvciBlYWNoIHNwbGl0LgpLRVlTX1BFUl9TUExJVCA9IDMyCgoKY2xhc3MgUXVlcnlTcGxpdHRlckVycm9yKEV4Y2VwdGlvbik6CiAgIiIiVG9wLWxldmVsIGVycm9yIHR5cGUuIiIiCgoKY2xhc3MgU3BsaXROb3RQb3NzaWJsZUVycm9yKFF1ZXJ5U3BsaXR0ZXJFcnJvcik6CiAgIiIiUmFpc2VkIHdoZW4gc29tZSBwYXJhbWV0ZXIgb2YgdGhlIHF1ZXJ5IGRvZXMgbm90IGFsbG93IHNwbGl0dGluZy4iIiIKCgpkZWYgZ2V0X3NwbGl0cyhjbGllbnQsIHF1ZXJ5LCBudW1fc3BsaXRzKToKICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBzaGFyZGVkIHF1ZXJpZXMgZm9yIHRoZSBnaXZlbiBDbG91ZCBEYXRhc3RvcmUgcXVlcnkuCgogIFRoaXMgd2lsbCBjcmVhdGUgdXAgdG8gdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHNwbGl0cywgaG93ZXZlciBpdCBtYXkgcmV0dXJuCiAgbGVzcyBzcGxpdHMgaWYgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHNwbGl0cyBpcyB1bmF2YWlsYWJsZS4gVGhpcyB3aWxsIGhhcHBlbgogIGlmIHRoZSBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIHByb3ZpZGVkIGJ5IHRoZSB1bmRlcmx5aW5nIERhdGFzdG9yZSBpcyBsZXNzCiAgdGhhbiB0aGUgZGVzaXJlZCBudW1iZXIsIHdoaWNoIHdpbGwgb2NjdXIgaWYgdGhlIG51bWJlciBvZiByZXN1bHRzIGZvciB0aGUKICBxdWVyeSBpcyB0b28gc21hbGwuCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFF1ZXJ5U3BsaXR0ZXIgdXNlcyB0aGUgX19zY2F0dGVyX18gcHJvcGVydHkgdG8KICBnYXRoZXIgcmFuZG9tIHNwbGl0IHBvaW50cyBmb3IgYSBxdWVyeS4KCiAgTm90ZTogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBkZXJpdmVkIGZyb20gdGhlIGphdmEgcXVlcnkgc3BsaXR0ZXIgaW4KICBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2xvdWRQbGF0Zm9ybS9nb29nbGUtY2xvdWQtZGF0YXN0b3JlL2Jsb2IvbWFzdGVyL2phdmEvZGF0YXN0b3JlL3NyYy9tYWluL2phdmEvY29tL2dvb2dsZS9kYXRhc3RvcmUvdjEvY2xpZW50L1F1ZXJ5U3BsaXR0ZXJJbXBsLmphdmEKCiAgQXJnczoKICAgIGNsaWVudDogdGhlIGRhdGFzdG9yZSBjbGllbnQuCiAgICBxdWVyeTogdGhlIHF1ZXJ5IHRvIHNwbGl0LgogICAgbnVtX3NwbGl0czogdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHNwbGl0cy4KCiAgUmV0dXJuczoKICAgIEEgbGlzdCBvZiBzcGxpdCBxdWVyaWVzLCBvZiBhIG1heCBsZW5ndGggb2YgYG51bV9zcGxpdHNgCgogIFJhaXNlczoKICAgIFF1ZXJ5U3BsaXR0ZXJFcnJvcjogaWYgc3BsaXQgY291bGQgbm90IGJlIHBlcmZvcm1lZCBvd2luZyB0byBxdWVyeSBvciBzcGxpdAogICAgICBwYXJhbWV0ZXJzLgogICIiIgogIGlmIG51bV9zcGxpdHMgPD0gMToKICAgIHJhaXNlIFNwbGl0Tm90UG9zc2libGVFcnJvcignbnVtX3NwbGl0cyBtdXN0IGJlID4gMSwgZ290OiAlZCcgJSBudW1fc3BsaXRzKQogIHZhbGlkYXRlX3NwbGl0KHF1ZXJ5KQoKICBzcGxpdHMgPSBbXQogIGNsaWVudF9zY2F0dGVyX2tleXMgPSBfZ2V0X3NjYXR0ZXJfa2V5cyhjbGllbnQsIHF1ZXJ5LCBudW1fc3BsaXRzKQogIGxhc3RfY2xpZW50X2tleSA9IE5vbmUKICBmb3IgbmV4dF9jbGllbnRfa2V5IGluIF9nZXRfc3BsaXRfa2V5KGNsaWVudF9zY2F0dGVyX2tleXMsIG51bV9zcGxpdHMpOgogICAgc3BsaXRzLmFwcGVuZChfY3JlYXRlX3NwbGl0KGxhc3RfY2xpZW50X2tleSwgbmV4dF9jbGllbnRfa2V5LCBxdWVyeSkpCiAgICBsYXN0X2NsaWVudF9rZXkgPSBuZXh0X2NsaWVudF9rZXkKCiAgc3BsaXRzLmFwcGVuZChfY3JlYXRlX3NwbGl0KGxhc3RfY2xpZW50X2tleSwgTm9uZSwgcXVlcnkpKQogIHJldHVybiBzcGxpdHMKCgpkZWYgdmFsaWRhdGVfc3BsaXQocXVlcnkpOgogICIiIgogIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHF1ZXJ5IGNhbiBiZSBwcm9wZXJseSBzY2F0dGVyZWQuCgogIE5vdGUgdGhhdCBlcXVhbGl0eSBhbmQgYW5jZXN0b3IgZmlsdGVycyBhcmUgYWxsb3dlZCwgaG93ZXZlciB0aGV5IG1heSByZXN1bHQKICBpbiBpbmVmZmljaWVudCBzaGFyZGluZy4KCiAgUmFpc2VzOgogICAgUXVlcnlTcGxpdHRlckVycm9yIGlmIHNwbGl0IGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgb3dpbmcgdG8gcXVlcnkKICAgICAgcGFyYW1ldGVycy4KICAiIiIKICBpZiBxdWVyeS5vcmRlcjoKICAgIHJhaXNlIFNwbGl0Tm90UG9zc2libGVFcnJvcignUXVlcnkgY2Fubm90IGhhdmUgYW55IHNvcnQgb3JkZXJzLicpCgogIGlmIHF1ZXJ5LmxpbWl0IGlzIG5vdCBOb25lOgogICAgcmFpc2UgU3BsaXROb3RQb3NzaWJsZUVycm9yKCdRdWVyeSBjYW5ub3QgaGF2ZSBhIGxpbWl0IHNldC4nKQoKICBmb3IgZmlsdGVyIGluIHF1ZXJ5LmZpbHRlcnM6CiAgICBpZiBpc2luc3RhbmNlKGZpbHRlclsxXSwgVmFsdWVQcm92aWRlcik6CiAgICAgIGZpbHRlcl9vcGVyYXRvciA9IGZpbHRlclsxXS5nZXQoKQogICAgZWxzZToKICAgICAgZmlsdGVyX29wZXJhdG9yID0gZmlsdGVyWzFdCiAgICBpZiBmaWx0ZXJfb3BlcmF0b3IgaW4gWyc8JywgJzw9JywgJz4nLCAnPj0nXToKICAgICAgcmFpc2UgU3BsaXROb3RQb3NzaWJsZUVycm9yKCdRdWVyeSBjYW5ub3QgaGF2ZSBhbnkgaW5lcXVhbGl0eSBmaWx0ZXJzLicpCgoKZGVmIF9jcmVhdGVfc2NhdHRlcl9xdWVyeShxdWVyeSwgbnVtX3NwbGl0cyk6CiAgIiIiQ3JlYXRlcyBhIHNjYXR0ZXIgcXVlcnkgZnJvbSB0aGUgZ2l2ZW4gdXNlciBxdWVyeS4iIiIKICAjIFRoZXJlIGlzIGEgc3BsaXQgY29udGFpbmluZyBlbnRpdGllcyBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggc2NhdHRlciBlbnRpdHk6CiAgIyB8fC0tLSotLS0tLS0qLS0tLS0tKi0tLS0tLSotLS0tLS0qLS0tLS0tKi0tLS0tLSotLS18fCAgKiA9IHNjYXR0ZXIgZW50aXR5CiAgIyBJZiB3ZSByZXByZXNlbnQgZWFjaCBzcGxpdCBhcyBhIHJlZ2lvbiBiZWZvcmUgYSBzY2F0dGVyIGVudGl0eSwgdGhlcmUgaXMgYW4KICAjIGV4dHJhIHJlZ2lvbiBmb2xsb3dpbmcgdGhlIGxhc3Qgc2NhdHRlciBwb2ludC4gVGh1cywgd2UgZG8gbm90IG5lZWQgdGhlCiAgIyBzY2F0dGVyIGVudGl0eSBmb3IgdGhlIGxhc3QgcmVnaW9uLgogIGxpbWl0ID0gKG51bV9zcGxpdHMgLSAxKSAqIEtFWVNfUEVSX1NQTElUCiAgc2NhdHRlcl9xdWVyeSA9IHR5cGVzLlF1ZXJ5KAogICAgICBraW5kPXF1ZXJ5LmtpbmQsCiAgICAgIHByb2plY3Q9cXVlcnkucHJvamVjdCwKICAgICAgbmFtZXNwYWNlPXF1ZXJ5Lm5hbWVzcGFjZSwKICAgICAgb3JkZXI9W1NDQVRURVJfUFJPUEVSVFlfTkFNRV0sCiAgICAgIHByb2plY3Rpb249W0tFWV9QUk9QRVJUWV9OQU1FXSwKICAgICAgbGltaXQ9bGltaXQpCiAgcmV0dXJuIHNjYXR0ZXJfcXVlcnkKCgpjbGFzcyBJZE9yTmFtZShvYmplY3QpOgogICIiIlJlcHJlc2VudHMgYW4gSUQgb3IgbmFtZSBvZiBhIERhdGFzdG9yZSBrZXksCgogICBJbXBsZW1lbnRzIHNvcnQgb3JkZXJpbmc6IGJ5IElELCB0aGVuIGJ5IG5hbWUsIGtleXMgd2l0aCBJRHMgYmVmb3JlIHRob3NlCiAgIHdpdGggbmFtZXMuCiAgICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBpZF9vcl9uYW1lKToKICAgIHNlbGYuaWRfb3JfbmFtZSA9IGlkX29yX25hbWUKICAgIGlmIGlzaW5zdGFuY2UoaWRfb3JfbmFtZSwgKHN0ciwgdW5pY29kZSkpOgogICAgICBzZWxmLmlkID0gTm9uZQogICAgICBzZWxmLm5hbWUgPSBpZF9vcl9uYW1lCiAgICBlbGlmIGlzaW5zdGFuY2UoaWRfb3JfbmFtZSwgKGludCwgbG9uZykpOgogICAgICBzZWxmLmlkID0gaWRfb3JfbmFtZQogICAgICBzZWxmLm5hbWUgPSBOb25lCiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBpZF9vcl9uYW1lOiAlcycgJSBpZF9vcl9uYW1lKQoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJZE9yTmFtZSk6CiAgICAgIHJldHVybiBzdXBlcihJZE9yTmFtZSwgc2VsZikuX19sdF9fKG90aGVyKQoKICAgIGlmIHNlbGYuaWQgaXMgbm90IE5vbmU6CiAgICAgIGlmIG90aGVyLmlkIGlzIE5vbmU6CiAgICAgICAgcmV0dXJuIFRydWUKICAgICAgZWxzZToKICAgICAgICByZXR1cm4gc2VsZi5pZCA8IG90aGVyLmlkCgogICAgaWYgb3RoZXIuaWQgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiBGYWxzZQoKICAgIHJldHVybiBzZWxmLm5hbWUgPCBvdGhlci5uYW1lCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIElkT3JOYW1lKToKICAgICAgcmV0dXJuIHN1cGVyKElkT3JOYW1lLCBzZWxmKS5fX2VxX18ob3RoZXIpCiAgICByZXR1cm4gc2VsZi5pZCA9PSBvdGhlci5pZCBhbmQgc2VsZi5uYW1lID09IG90aGVyLm5hbWUKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYuaWQsIHNlbGYub3RoZXIpKQoKCmRlZiBjbGllbnRfa2V5X3NvcnRfa2V5KGNsaWVudF9rZXkpOgogICIiIktleSBmdW5jdGlvbiBmb3Igc29ydGluZyBsaXN0cyBvZiBgYGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUua2V5LktleWBgLiIiIgogIHNvcnRfa2V5ID0gW2NsaWVudF9rZXkucHJvamVjdCwgY2xpZW50X2tleS5uYW1lc3BhY2Ugb3IgJyddCiAgIyBBIGtleSBwYXRoIGlzIG1hZGUgdXAgb2YgKGtpbmQsIGlkX29yX25hbWUpIHBhaXJzLiBUaGUgbGFzdCBwYWlyIG1pZ2h0IGJlCiAgIyBtaXNzaW5nIGFuIGlkX29yX25hbWUuCiAgZmxhdF9wYXRoID0gbGlzdChjbGllbnRfa2V5LmZsYXRfcGF0aCkKICB3aGlsZSBmbGF0X3BhdGg6CiAgICBzb3J0X2tleS5hcHBlbmQoZmxhdF9wYXRoLnBvcCgwKSkgICMga2luZAogICAgaWYgZmxhdF9wYXRoOgogICAgICBzb3J0X2tleS5hcHBlbmQoSWRPck5hbWUoZmxhdF9wYXRoLnBvcCgwKSkpCgogIHJldHVybiBzb3J0X2tleQoKCmRlZiBfZ2V0X3NjYXR0ZXJfa2V5cyhjbGllbnQsIHF1ZXJ5LCBudW1fc3BsaXRzKToKICAiIiJHZXRzIGEgbGlzdCBvZiBzcGxpdCBrZXlzIGdpdmVuIGEgZGVzaXJlZCBudW1iZXIgb2Ygc3BsaXRzLgoKICBUaGlzIGxpc3Qgd2lsbCBjb250YWluIG11bHRpcGxlIHNwbGl0IGtleXMgZm9yIGVhY2ggc3BsaXQuIE9ubHkgYSBzaW5nbGUgc3BsaXQKICBrZXkgd2lsbCBiZSBjaG9zZW4gYXMgdGhlIHNwbGl0IHBvaW50LCBob3dldmVyIHByb3ZpZGluZyBtdWx0aXBsZSBrZXlzIGFsbG93cwogIGZvciBtb3JlIHVuaWZvcm0gc2hhcmRpbmcuCgogIEFyZ3M6CiAgICBjbGllbnQ6IHRoZSBjbGllbnQgdG8gZGF0YXN0b3JlIGNvbnRhaW5pbmcgdGhlIGRhdGEuCiAgICBxdWVyeTogdGhlIHVzZXIgcXVlcnkuCiAgICBudW1fc3BsaXRzOiB0aGUgbnVtYmVyIG9mIGRlc2lyZWQgc3BsaXRzLgoKICBSZXR1cm5zOgogICAgQSBsaXN0IG9mIHNjYXR0ZXIga2V5cyByZXR1cm5lZCBieSBEYXRhc3RvcmUuCiAgIiIiCiAgc2NhdHRlcl9wb2ludF9xdWVyeSA9IF9jcmVhdGVfc2NhdHRlcl9xdWVyeShxdWVyeSwgbnVtX3NwbGl0cykKICBjbGllbnRfcXVlcnkgPSBzY2F0dGVyX3BvaW50X3F1ZXJ5Ll90b19jbGllbnRfcXVlcnkoY2xpZW50KQogIGNsaWVudF9rZXlfc3BsaXRzID0gWwogICAgICBjbGllbnRfZW50aXR5LmtleSBmb3IgY2xpZW50X2VudGl0eSBpbiBjbGllbnRfcXVlcnkuZmV0Y2goCiAgICAgICAgICBjbGllbnQ9Y2xpZW50LCBsaW1pdD1zY2F0dGVyX3BvaW50X3F1ZXJ5LmxpbWl0KQogIF0KICBjbGllbnRfa2V5X3NwbGl0cy5zb3J0KGtleT1jbGllbnRfa2V5X3NvcnRfa2V5KQogIHJldHVybiBjbGllbnRfa2V5X3NwbGl0cwoKCmRlZiBfZ2V0X3NwbGl0X2tleShjbGllbnRfa2V5cywgbnVtX3NwbGl0cyk6CiAgIiIiR2l2ZW4gYSBsaXN0IG9mIGtleXMgYW5kIGEgbnVtYmVyIG9mIHNwbGl0cyBmaW5kIHRoZSBrZXlzIHRvIHNwbGl0IG9uLgoKICBBcmdzOgogICAgY2xpZW50X2tleXM6IHRoZSBsaXN0IG9mIGtleXMuCiAgICBudW1fc3BsaXRzOiB0aGUgbnVtYmVyIG9mIHNwbGl0cy4KCiAgUmV0dXJuczoKICAgIEEgbGlzdCBvZiBrZXlzIHRvIHNwbGl0IG9uLgoKICAiIiIKCiAgIyBJZiB0aGUgbnVtYmVyIG9mIGtleXMgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2Ygc3BsaXRzLCB3ZSBhcmUgbGltaXRlZAogICMgaW4gdGhlIG51bWJlciBvZiBzcGxpdHMgd2UgY2FuIG1ha2UuCiAgaWYgbm90IGNsaWVudF9rZXlzIG9yIChsZW4oY2xpZW50X2tleXMpIDwgKG51bV9zcGxpdHMgLSAxKSk6CiAgICByZXR1cm4gY2xpZW50X2tleXMKCiAgIyBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBrZXlzIHBlciBzcGxpdC4gVGhpcyBzaG91bGQgYmUgS0VZU19QRVJfU1BMSVQsCiAgIyBidXQgbWF5IGJlIGxlc3MgaWYgdGhlcmUgYXJlIG5vdCBLRVlTX1BFUl9TUExJVCAqIChudW1TcGxpdHMgLSAxKSBzY2F0dGVyCiAgIyBlbnRpdGllcy4KICAjCiAgIyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGRhdGFzZXQsIHdoZXJlIC0gcmVwcmVzZW50cyBhbiBlbnRpdHkgYW5kCiAgIyAqIHJlcHJlc2VudHMgYW4gZW50aXR5IHRoYXQgaXMgcmV0dXJuZWQgYXMgYSBzY2F0dGVyIGVudGl0eToKICAjIHx8LS0tKi0tLS0tKi0tLS0qLS0tLS0qLS0tLS0qLS0tLS0tKi0tLS0qLS0tLXx8CiAgIyBJZiB3ZSB3YW50IDQgc3BsaXRzIGluIHRoaXMgZGF0YSwgdGhlIG9wdGltYWwgc3BsaXQgd291bGQgbG9vayBsaWtlOgogICMgfHwtLS0qLS0tLS0qLS0tLSotLS0tLSotLS0tLSotLS0tLS0qLS0tLSotLS0tfHwKICAjICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgfAogICMgVGhlIHNjYXR0ZXIga2V5cyBpbiB0aGUgbGFzdCByZWdpb24gYXJlIG5vdCB1c2VmdWwgdG8gdXMsIHNvIHdlIG5ldmVyCiAgIyByZXF1ZXN0IHRoZW06CiAgIyB8fC0tLSotLS0tLSotLS0tKi0tLS0tKi0tLS0tKi0tLS0tLSotLS0tLS0tLS18fAogICMgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICB8CiAgIyBXaXRoIDYgc2NhdHRlciBrZXlzIHdlIHdhbnQgdG8gc2V0IHNjYXR0ZXIgcG9pbnRzIGF0IGluZGV4ZXM6IDEsIDMsIDUuCiAgIwogICMgV2Uga2VlcCB0aGlzIGFzIGEgZmxvYXQgc28gdGhhdCBhbnkgImZyYWN0aW9uYWwiIGtleXMgcGVyIHNwbGl0IGdldAogICMgZGlzdHJpYnV0ZWQgdGhyb3VnaG91dCB0aGUgc3BsaXRzIGFuZCBkb24ndCBtYWtlIHRoZSBsYXN0IHNwbGl0CiAgIyBzaWduaWZpY2FudGx5IGxhcmdlciB0aGFuIHRoZSByZXN0LgoKICBudW1fa2V5c19wZXJfc3BsaXQgPSBtYXgoMS4wLCBmbG9hdChsZW4oY2xpZW50X2tleXMpKSAvIChudW1fc3BsaXRzIC0gMSkpCgogIHNwbGl0X2NsaWVudF9rZXlzID0gW10KCiAgIyBHcmFiIHRoZSBsYXN0IHNhbXBsZSBmb3IgZWFjaCBzcGxpdCwgb3RoZXJ3aXNlIHRoZSBmaXJzdCBzcGxpdCB3aWxsIGJlIHRvbwogICMgc21hbGwuCiAgZm9yIGkgaW4gcmFuZ2UoMSwgbnVtX3NwbGl0cyk6CiAgICBzcGxpdF9pbmRleCA9IGludChyb3VuZChpICogbnVtX2tleXNfcGVyX3NwbGl0KSAtIDEpCiAgICBzcGxpdF9jbGllbnRfa2V5cy5hcHBlbmQoY2xpZW50X2tleXNbc3BsaXRfaW5kZXhdKQoKICByZXR1cm4gc3BsaXRfY2xpZW50X2tleXMKCgpkZWYgX2NyZWF0ZV9zcGxpdChsYXN0X2NsaWVudF9rZXksIG5leHRfY2xpZW50X2tleSwgcXVlcnkpOgogICIiIkNyZWF0ZSBhIG5ldyB7QGxpbmsgUXVlcnl9IGdpdmVuIHRoZSBxdWVyeSBhbmQgcmFuZ2UuCgogIEFyZ3M6CiAgICBsYXN0X2NsaWVudF9rZXk6IHRoZSBwcmV2aW91cyBrZXkuIElmIG51bGwgdGhlbiBhc3N1bWVkIHRvIGJlIHRoZSBiZWdpbm5pbmcuCiAgICBuZXh0X2NsaWVudF9rZXk6IHRoZSBuZXh0IGtleS4gSWYgbnVsbCB0aGVuIGFzc3VtZWQgdG8gYmUgdGhlIGVuZC4KICAgIHF1ZXJ5OiBxdWVyeSB0byBiYXNlIHRoZSBzcGxpdCBxdWVyeSBvbi4KCiAgUmV0dXJuczoKICAgIEEgc3BsaXQgcXVlcnkgd2l0aCBmZXRjaGVzIGVudGl0aWVzIGluIHRoZSByYW5nZSBbbGFzdF9rZXksIG5leHRfY2xpZW50X2tleSkKICAiIiIKICBpZiBub3QgKGxhc3RfY2xpZW50X2tleSBvciBuZXh0X2NsaWVudF9rZXkpOgogICAgcmV0dXJuIHF1ZXJ5CgogIHNwbGl0X3F1ZXJ5ID0gcXVlcnkuY2xvbmUoKQogICMgQ29weSBmaWx0ZXJzIGFuZCBwb3NzaWJsZSBjb252ZXJ0IHRoZSBkZWZhdWx0IGVtcHR5IHR1cGxlIHRvIGVtcHR5IGxpc3QuCiAgZmlsdGVycyA9IGxpc3Qoc3BsaXRfcXVlcnkuZmlsdGVycykKCiAgaWYgbGFzdF9jbGllbnRfa2V5OgogICAgZmlsdGVycy5hcHBlbmQoKEtFWV9QUk9QRVJUWV9OQU1FLCAnPj0nLCBsYXN0X2NsaWVudF9rZXkpKQogIGlmIG5leHRfY2xpZW50X2tleToKICAgIGZpbHRlcnMuYXBwZW5kKChLRVlfUFJPUEVSVFlfTkFNRSwgJzwnLCBuZXh0X2NsaWVudF9rZXkpKQoKICBzcGxpdF9xdWVyeS5maWx0ZXJzID0gZmlsdGVycwogIHJldHVybiBzcGxpdF9xdWVyeQqUfZQojBJRdWVyeVNwbGl0dGVyRXJyb3KUal0xAQBLLUsuh5SMFVNwbGl0Tm90UG9zc2libGVFcnJvcpRqXTEBAEsxSzKHlIwKZ2V0X3NwbGl0c5RqVjEBAEs1S1yHlIwOdmFsaWRhdGVfc3BsaXSUalYxAQBLX0t2h5SMFV9jcmVhdGVfc2NhdHRlcl9xdWVyeZRqVjEBAEt5S4iHlIwRSWRPck5hbWUuX19pbml0X1+UalYxAQBLkUuah5SMD0lkT3JOYW1lLl9fbHRfX5RqVjEBAEucS6mHlIwPSWRPck5hbWUuX19lcV9flGpWMQEAS6tLroeUjBFJZE9yTmFtZS5fX2hhc2hfX5RqVjEBAEuwS7GHlIwISWRPck5hbWWUal0xAQBLi0uxh5SME2NsaWVudF9rZXlfc29ydF9rZXmUalYxAQBLtEu/h5SMEV9nZXRfc2NhdHRlcl9rZXlzlGpWMQEAS8JL2IeUjA5fZ2V0X3NwbGl0X2tleZRqVjEBAEvbTQoBh5SMDV9jcmVhdGVfc3BsaXSUalYxAQBNDQFNJQGHlHV9lChqe3sAAGqlAwAAan17AABqpQMAAIwKZ2V0X3NwbGl0c5RqpQMAAHWMMWFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcucXVlcnlfc3BsaXR0ZXKUdJSMKGFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcudHlwZXOUKFhQJgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKQmVhbSBEYXRhc3RvcmUgdHlwZXMuCgpUaGlzIG1vZHVsZSBpcyBleHBlcmltZW50YWwsIG5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb3B5Cgpmcm9tIGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUgaW1wb3J0IGVudGl0eQpmcm9tIGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUgaW1wb3J0IGtleQpmcm9tIGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUgaW1wb3J0IHF1ZXJ5Cgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFZhbHVlUHJvdmlkZXIKCl9fYWxsX18gPSBbJ1F1ZXJ5JywgJ0tleScsICdFbnRpdHknXQoKCmNsYXNzIFF1ZXJ5KG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBraW5kPU5vbmUsCiAgICAgIHByb2plY3Q9Tm9uZSwKICAgICAgbmFtZXNwYWNlPU5vbmUsCiAgICAgIGFuY2VzdG9yPU5vbmUsCiAgICAgIGZpbHRlcnM9KCksCiAgICAgIHByb2plY3Rpb249KCksCiAgICAgIG9yZGVyPSgpLAogICAgICBkaXN0aW5jdF9vbj0oKSwKICAgICAgbGltaXQ9Tm9uZSk6CiAgICAiIiJSZXByZXNlbnRzIGEgRGF0YXN0b3JlIHF1ZXJ5LgoKICAgIEFyZ3M6CiAgICAgIGtpbmQ6IChzdHIpIFRoZSBraW5kIHRvIHF1ZXJ5LgogICAgICBwcm9qZWN0OiAoc3RyKSBSZXF1aXJlZC4gUHJvamVjdCBhc3NvY2lhdGVkIHdpdGggcXVlcnkuCiAgICAgIG5hbWVzcGFjZTogKHN0ciwgVmFsdWVQcm92aWRlcihzdHIpKSAoT3B0aW9uYWwpIE5hbWVzcGFjZSB0byByZXN0cmljdAogICAgICAgIHJlc3VsdHMgdG8uCiAgICAgIGFuY2VzdG9yOiAoOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlcy5LZXlgKQogICAgICAgIChPcHRpb25hbCkga2V5IG9mIHRoZSBhbmNlc3RvciB0byB3aGljaCB0aGlzIHF1ZXJ5J3MgcmVzdWx0cyBhcmUKICAgICAgICByZXN0cmljdGVkLgogICAgICBmaWx0ZXJzOiAoc2VxdWVuY2Ugb2YgdHVwbGVbc3RyLCBzdHIsIHN0cl0sCiAgICAgICAgc2VxdWVuY2Ugb2YKICAgICAgICB0dXBsZVtWYWx1ZVByb3ZpZGVyKHN0ciksIFZhbHVlUHJvdmlkZXIoc3RyKSwgVmFsdWVQcm92aWRlcihzdHIpXSkKICAgICAgICBQcm9wZXJ0eSBmaWx0ZXJzIGFwcGxpZWQgYnkgdGhpcyBxdWVyeS4KICAgICAgICBUaGUgc2VxdWVuY2UgaXMgYGAocHJvcGVydHlfbmFtZSwgb3BlcmF0b3IsIHZhbHVlKWBgLgogICAgICBwcm9qZWN0aW9uOiAoc2VxdWVuY2Ugb2Ygc3RyaW5nKSBmaWVsZHMgcmV0dXJuZWQgYXMgcGFydCBvZiBxdWVyeSByZXN1bHRzLgogICAgICBvcmRlcjogKHNlcXVlbmNlIG9mIHN0cmluZykgZmllbGQgbmFtZXMgdXNlZCB0byBvcmRlciBxdWVyeSByZXN1bHRzLgogICAgICAgIFByZXBlbmQgYGAtYGAgdG8gYSBmaWVsZCBuYW1lIHRvIHNvcnQgaXQgaW4gZGVzY2VuZGluZyBvcmRlci4KICAgICAgZGlzdGluY3Rfb246IChzZXF1ZW5jZSBvZiBzdHJpbmcpIGZpZWxkIG5hbWVzIHVzZWQgdG8gZ3JvdXAgcXVlcnkKICAgICAgICByZXN1bHRzLgogICAgICBsaW1pdDogKGludCkgTWF4aW11bSBhbW91bnQgb2YgcmVzdWx0cyB0byByZXR1cm4uCiAgICAiIiIKICAgIHNlbGYua2luZCA9IGtpbmQKICAgIHNlbGYucHJvamVjdCA9IHByb2plY3QKICAgIHNlbGYubmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICBzZWxmLmFuY2VzdG9yID0gYW5jZXN0b3IKICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnMgb3IgKCkKICAgIHNlbGYucHJvamVjdGlvbiA9IHByb2plY3Rpb24KICAgIHNlbGYub3JkZXIgPSBvcmRlcgogICAgc2VsZi5kaXN0aW5jdF9vbiA9IGRpc3RpbmN0X29uCiAgICBzZWxmLmxpbWl0ID0gbGltaXQKCiAgZGVmIF90b19jbGllbnRfcXVlcnkoc2VsZiwgY2xpZW50KToKICAgICIiIgogICAgUmV0dXJucyBhIGBgZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5xdWVyeS5RdWVyeWBgIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cwogICAgdGhpcyBxdWVyeS4KCiAgICBBcmdzOgogICAgICBjbGllbnQ6IChgYGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuY2xpZW50LkNsaWVudGBgKSBEYXRhc3RvcmUgY2xpZW50CiAgICAgICAgaW5zdGFuY2UgdG8gdXNlLgogICAgIiIiCiAgICBhbmNlc3Rvcl9jbGllbnRfa2V5ID0gTm9uZQogICAgaWYgc2VsZi5hbmNlc3RvciBpcyBub3QgTm9uZToKICAgICAgYW5jZXN0b3JfY2xpZW50X2tleSA9IHNlbGYuYW5jZXN0b3IudG9fY2xpZW50X2tleSgpCgogICAgIyBSZXNvbHZlIFZhbHVlUHJvdmlkZXIgYXJndW1lbnRzLgogICAgc2VsZi5maWx0ZXJzID0gc2VsZi5fc2V0X3J1bnRpbWVfZmlsdGVycygpCiAgICBpZiBpc2luc3RhbmNlKHNlbGYubmFtZXNwYWNlLCBWYWx1ZVByb3ZpZGVyKToKICAgICAgc2VsZi5uYW1lc3BhY2UgPSBzZWxmLm5hbWVzcGFjZS5nZXQoKQoKICAgIHJldHVybiBxdWVyeS5RdWVyeSgKICAgICAgICBjbGllbnQsCiAgICAgICAga2luZD1zZWxmLmtpbmQsCiAgICAgICAgcHJvamVjdD1zZWxmLnByb2plY3QsCiAgICAgICAgbmFtZXNwYWNlPXNlbGYubmFtZXNwYWNlLAogICAgICAgIGFuY2VzdG9yPWFuY2VzdG9yX2NsaWVudF9rZXksCiAgICAgICAgZmlsdGVycz1zZWxmLmZpbHRlcnMsCiAgICAgICAgcHJvamVjdGlvbj1zZWxmLnByb2plY3Rpb24sCiAgICAgICAgb3JkZXI9c2VsZi5vcmRlciwKICAgICAgICBkaXN0aW5jdF9vbj1zZWxmLmRpc3RpbmN0X29uKQoKICBkZWYgX3NldF9ydW50aW1lX2ZpbHRlcnMoc2VsZik6CiAgICAiIiIKICAgIEV4dHJhY3RzIHZhbHVlcyBmcm9tIFZhbHVlUHJvdmlkZXJzIGluIGBzZWxmLmZpbHRlcnNgIGlmIGF2YWlsYWJsZQogICAgOnBhcmFtIGZpbHRlcnM6IHNlcXVlbmNlIG9mIHR1cGxlW3N0ciwgc3RyLCBzdHJdIG9yCiAgICBzZXF1ZW5jZSBvZiB0dXBsZVtWYWx1ZVByb3ZpZGVyLCBWYWx1ZVByb3ZpZGVyLCBWYWx1ZVByb3ZpZGVyXQogICAgOnJldHVybjogdHVwbGVbc3RyLCBzdHIsIHN0cl0KICAgICIiIgogICAgcnVudGltZV9maWx0ZXJzID0gW10KICAgIGlmIG5vdCBhbGwobGVuKGZpbHRlcl90dXBsZSkgPT0gMyBmb3IgZmlsdGVyX3R1cGxlIGluIHNlbGYuZmlsdGVycyk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICclczogZmlsdGVycyBtdXN0IGJlIGEgc2VxdWVuY2Ugb2YgdHVwbGUgd2l0aCBsZW5ndGg9MycKICAgICAgICAgICcgZ290ICVyIGluc3RlYWQnICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmZpbHRlcnMpKQoKICAgIGZvciBmaWx0ZXJfdHlwZSwgZmlsdGVyX29wZXJhdG9yLCBmaWx0ZXJfdmFsdWUgaW4gc2VsZi5maWx0ZXJzOgogICAgICBpZiBpc2luc3RhbmNlKGZpbHRlcl90eXBlLCBWYWx1ZVByb3ZpZGVyKToKICAgICAgICBmaWx0ZXJfdHlwZSA9IGZpbHRlcl90eXBlLmdldCgpCiAgICAgIGlmIGlzaW5zdGFuY2UoZmlsdGVyX29wZXJhdG9yLCBWYWx1ZVByb3ZpZGVyKToKICAgICAgICBmaWx0ZXJfb3BlcmF0b3IgPSBmaWx0ZXJfb3BlcmF0b3IuZ2V0KCkKICAgICAgaWYgaXNpbnN0YW5jZShmaWx0ZXJfdmFsdWUsIFZhbHVlUHJvdmlkZXIpOgogICAgICAgIGZpbHRlcl92YWx1ZSA9IGZpbHRlcl92YWx1ZS5nZXQoKQogICAgICBydW50aW1lX2ZpbHRlcnMuYXBwZW5kKChmaWx0ZXJfdHlwZSwgZmlsdGVyX29wZXJhdG9yLCBmaWx0ZXJfdmFsdWUpKQoKICAgIHJldHVybiBydW50aW1lX2ZpbHRlcnMgb3IgKCkKCiAgZGVmIGNsb25lKHNlbGYpOgogICAgcmV0dXJuIGNvcHkuY29weShzZWxmKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gKAogICAgICAgICc8UXVlcnkoa2luZD0lcywgcHJvamVjdD0lcywgbmFtZXNwYWNlPSVzLCBhbmNlc3Rvcj0lcywgZmlsdGVycz0lcywnCiAgICAgICAgJ3Byb2plY3Rpb249JXMsIG9yZGVyPSVzLCBkaXN0aW5jdF9vbj0lcywgbGltaXQ9JXMpPicgJSAoCiAgICAgICAgICAgIHNlbGYua2luZCwKICAgICAgICAgICAgc2VsZi5wcm9qZWN0LAogICAgICAgICAgICBzZWxmLm5hbWVzcGFjZSwKICAgICAgICAgICAgc2VsZi5hbmNlc3RvciwKICAgICAgICAgICAgc2VsZi5maWx0ZXJzLAogICAgICAgICAgICBzZWxmLnByb2plY3Rpb24sCiAgICAgICAgICAgIHNlbGYub3JkZXIsCiAgICAgICAgICAgIHNlbGYuZGlzdGluY3Rfb24sCiAgICAgICAgICAgIHNlbGYubGltaXQpKQoKCmNsYXNzIEtleShvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoX2VsZW1lbnRzLCBwYXJlbnQ9Tm9uZSwgcHJvamVjdD1Ob25lLCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAiIiIKICAgIFJlcHJlc2VudHMgYSBEYXRhc3RvcmUga2V5LgoKICAgIFRoZSBwYXJ0aXRpb24gSUQgaXMgcmVwcmVzZW50ZWQgYnkgaXRzIGNvbXBvbmVudHM6IG5hbWVzcGFjZSBhbmQgcHJvamVjdC4KICAgIElmIGtleSBoYXMgYSBwYXJlbnQsIHByb2plY3QgYW5kIG5hbWVzcGFjZSBzaG91bGQgZWl0aGVyIGJlIHVuc2V0IG9yIG1hdGNoCiAgICB0aGUgcGFyZW50J3MuCgogICAgQXJnczoKICAgICAgcGF0aF9lbGVtZW50czogKGxpc3Qgb2Ygc3RyIGFuZCBpbnQpIEtleSBwYXRoOiBhbiBhbHRlcm5hdGluZyBzZXF1ZW5jZSBvZgogICAgICAgIGtpbmQgYW5kIGlkZW50aWZpZXIuIFRoZSBraW5kIG11c3QgYmUgb2YgdHlwZSBgYHN0cmBgIGFuZCBpZGVudGlmaWVyIG1heQogICAgICAgIGJlIGEgYGBzdHJgYCBvciBhbiBgYGludGBgLgogICAgICAgIElmIHRoZSBsYXN0IGlkZW50aWZpZXIgaXMgb21pdHRlZCB0aGlzIGlzIGFuIGluY29tcGxldGUga2V5LCB3aGljaCBpcwogICAgICAgIHVuc3VwcG9ydGVkIGluIGBgV3JpdGVUb0RhdGFzdG9yZWBgIGFuZCBgYERlbGV0ZUZyb21EYXRhc3RvcmVgYC4KICAgICAgICBTZWUgOmNsYXNzOmBnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmtleS5LZXlgIGZvciBtb3JlIGRldGFpbHMuCiAgICAgIHBhcmVudDogKDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmdjcC5kYXRhc3RvcmUudjFuZXcudHlwZXMuS2V5YCkKICAgICAgICAob3B0aW9uYWwpIFBhcmVudCBmb3IgdGhpcyBrZXkuCiAgICAgIHByb2plY3Q6IChzdHIpIFByb2plY3QgSUQuIFJlcXVpcmVkIHVubGVzcyBzZXQgYnkgcGFyZW50LgogICAgICBuYW1lc3BhY2U6IChzdHIpIChvcHRpb25hbCkgTmFtZXNwYWNlIElECiAgICAiIiIKICAgICMgVmVyaWZpY2F0aW9uIG9yIGFyZ3VtZW50cyBpcyBkZWxlZ2F0ZWQgdG8gdG9fY2xpZW50X2tleSgpLgogICAgc2VsZi5wYXRoX2VsZW1lbnRzID0gdHVwbGUocGF0aF9lbGVtZW50cykKICAgIHNlbGYucGFyZW50ID0gcGFyZW50CiAgICBzZWxmLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgc2VsZi5wcm9qZWN0ID0gcHJvamVjdAoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fY2xpZW50X2tleShjbGllbnRfa2V5KToKICAgIHJldHVybiBLZXkoCiAgICAgICAgY2xpZW50X2tleS5mbGF0X3BhdGgsCiAgICAgICAgcHJvamVjdD1jbGllbnRfa2V5LnByb2plY3QsCiAgICAgICAgbmFtZXNwYWNlPWNsaWVudF9rZXkubmFtZXNwYWNlKQoKICBkZWYgdG9fY2xpZW50X2tleShzZWxmKToKICAgICIiIgogICAgUmV0dXJucyBhIDpjbGFzczpgZ29vZ2xlLmNsb3VkLmRhdGFzdG9yZS5rZXkuS2V5YCBpbnN0YW5jZSB0aGF0IHJlcHJlc2VudHMKICAgIHRoaXMga2V5LgogICAgIiIiCiAgICBwYXJlbnQgPSBzZWxmLnBhcmVudAogICAgaWYgcGFyZW50IGlzIG5vdCBOb25lOgogICAgICBwYXJlbnQgPSBwYXJlbnQudG9fY2xpZW50X2tleSgpCiAgICByZXR1cm4ga2V5LktleSgKICAgICAgICAqc2VsZi5wYXRoX2VsZW1lbnRzLAogICAgICAgIHBhcmVudD1wYXJlbnQsCiAgICAgICAgbmFtZXNwYWNlPXNlbGYubmFtZXNwYWNlLAogICAgICAgIHByb2plY3Q9c2VsZi5wcm9qZWN0KQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBLZXkpOgogICAgICByZXR1cm4gRmFsc2UKICAgIGlmIHNlbGYucGF0aF9lbGVtZW50cyAhPSBvdGhlci5wYXRoX2VsZW1lbnRzOgogICAgICByZXR1cm4gRmFsc2UKICAgIGlmIHNlbGYucHJvamVjdCAhPSBvdGhlci5wcm9qZWN0OgogICAgICByZXR1cm4gRmFsc2UKICAgIGlmIHNlbGYucGFyZW50IGlzIG5vdCBOb25lIGFuZCBvdGhlci5wYXJlbnQgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiBzZWxmLnBhcmVudCA9PSBvdGhlci5wYXJlbnQKCiAgICByZXR1cm4gc2VsZi5wYXJlbnQgaXMgTm9uZSBhbmQgb3RoZXIucGFyZW50IGlzIE5vbmUKCiAgX19oYXNoX18gPSBOb25lICAjIHR5cGU6IGlnbm9yZVthc3NpZ25tZW50XQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzwlcyglcywgcGFyZW50PSVzLCBwcm9qZWN0PSVzLCBuYW1lc3BhY2U9JXMpPicgJSAoCiAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgc3RyKHNlbGYucGF0aF9lbGVtZW50cyksCiAgICAgICAgc3RyKHNlbGYucGFyZW50KSwKICAgICAgICBzZWxmLnByb2plY3QsCiAgICAgICAgc2VsZi5uYW1lc3BhY2UpCgoKY2xhc3MgRW50aXR5KG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGtleSwgZXhjbHVkZV9mcm9tX2luZGV4ZXM9KCkpOgogICAgIiIiCiAgICBSZXByZXNlbnRzIGEgRGF0YXN0b3JlIGVudGl0eS4KCiAgICBEb2VzIG5vdCBzdXBwb3J0IHRoZSBwcm9wZXJ0eSB2YWx1ZSAibWVhbmluZyIgZmllbGQuCgogICAgQXJnczoKICAgICAga2V5OiAoS2V5KSBBIGNvbXBsZXRlIEtleSByZXByZXNlbnRpbmcgdGhpcyBFbnRpdHkuCiAgICAgIGV4Y2x1ZGVfZnJvbV9pbmRleGVzOiAoaXRlcmFibGUgb2Ygc3RyKSBMaXN0IG9mIHByb3BlcnR5IGtleXMgd2hvc2UgdmFsdWVzCiAgICAgICAgc2hvdWxkIG5vdCBiZSBpbmRleGVkIGZvciB0aGlzIGVudGl0eS4KICAgICIiIgogICAgc2VsZi5rZXkgPSBrZXkKICAgIHNlbGYuZXhjbHVkZV9mcm9tX2luZGV4ZXMgPSBzZXQoZXhjbHVkZV9mcm9tX2luZGV4ZXMpCiAgICBzZWxmLnByb3BlcnRpZXMgPSB7fQoKICBkZWYgc2V0X3Byb3BlcnRpZXMoc2VsZiwgcHJvcGVydHlfZGljdCk6CiAgICAiIiJTZXRzIGEgZGljdGlvbmFyeSBvZiBwcm9wZXJ0aWVzIG9uIHRoaXMgZW50aXR5LgoKICAgIEFyZ3M6CiAgICAgIHByb3BlcnR5X2RpY3Q6IEEgbWFwIGZyb20gcHJvcGVydHkgbmFtZSB0byB2YWx1ZS4gU2VlCiAgICAgICAgOmNsYXNzOmBnb29nbGUuY2xvdWQuZGF0YXN0b3JlLmVudGl0eS5FbnRpdHlgIGRvY3VtZW50YXRpb24gZm9yIGFsbG93ZWQKICAgICAgICB2YWx1ZXMuCiAgICAiIiIKICAgIHNlbGYucHJvcGVydGllcy51cGRhdGUocHJvcGVydHlfZGljdCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX2NsaWVudF9lbnRpdHkoY2xpZW50X2VudGl0eSk6CiAgICByZXMgPSBFbnRpdHkoCiAgICAgICAgS2V5LmZyb21fY2xpZW50X2tleShjbGllbnRfZW50aXR5LmtleSksCiAgICAgICAgZXhjbHVkZV9mcm9tX2luZGV4ZXM9c2V0KGNsaWVudF9lbnRpdHkuZXhjbHVkZV9mcm9tX2luZGV4ZXMpKQogICAgZm9yIG5hbWUsIHZhbHVlIGluIGNsaWVudF9lbnRpdHkuaXRlbXMoKToKICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwga2V5LktleSk6CiAgICAgICAgdmFsdWUgPSBLZXkuZnJvbV9jbGllbnRfa2V5KHZhbHVlKQogICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBlbnRpdHkuRW50aXR5KToKICAgICAgICB2YWx1ZSA9IEVudGl0eS5mcm9tX2NsaWVudF9lbnRpdHkodmFsdWUpCiAgICAgIHJlcy5wcm9wZXJ0aWVzW25hbWVdID0gdmFsdWUKICAgIHJldHVybiByZXMKCiAgZGVmIHRvX2NsaWVudF9lbnRpdHkoc2VsZik6CiAgICAiIiIKICAgIFJldHVybnMgYSA6Y2xhc3M6YGdvb2dsZS5jbG91ZC5kYXRhc3RvcmUuZW50aXR5LkVudGl0eWAgaW5zdGFuY2UgdGhhdAogICAgcmVwcmVzZW50cyB0aGlzIGVudGl0eS4KICAgICIiIgogICAgcmVzID0gZW50aXR5LkVudGl0eSgKICAgICAgICBrZXk9c2VsZi5rZXkudG9fY2xpZW50X2tleSgpLAogICAgICAgIGV4Y2x1ZGVfZnJvbV9pbmRleGVzPXR1cGxlKHNlbGYuZXhjbHVkZV9mcm9tX2luZGV4ZXMpKQogICAgZm9yIG5hbWUsIHZhbHVlIGluIHNlbGYucHJvcGVydGllcy5pdGVtcygpOgogICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBLZXkpOgogICAgICAgIGlmIG5vdCB2YWx1ZS5wcm9qZWN0OgogICAgICAgICAgdmFsdWUucHJvamVjdCA9IHNlbGYua2V5LnByb2plY3QKICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvX2NsaWVudF9rZXkoKQogICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBFbnRpdHkpOgogICAgICAgIGlmIG5vdCB2YWx1ZS5rZXkucHJvamVjdDoKICAgICAgICAgIHZhbHVlLmtleS5wcm9qZWN0ID0gc2VsZi5rZXkucHJvamVjdAogICAgICAgIHZhbHVlID0gdmFsdWUudG9fY2xpZW50X2VudGl0eSgpCiAgICAgIHJlc1tuYW1lXSA9IHZhbHVlCiAgICByZXR1cm4gcmVzCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEVudGl0eSk6CiAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuICgKICAgICAgICBzZWxmLmtleSA9PSBvdGhlci5rZXkgYW5kCiAgICAgICAgc2VsZi5leGNsdWRlX2Zyb21faW5kZXhlcyA9PSBvdGhlci5leGNsdWRlX2Zyb21faW5kZXhlcyBhbmQKICAgICAgICBzZWxmLnByb3BlcnRpZXMgPT0gb3RoZXIucHJvcGVydGllcykKCiAgX19oYXNoX18gPSBOb25lICAjIHR5cGU6IGlnbm9yZVthc3NpZ25tZW50XQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gIjwlcyhrZXk9JXMsIGV4Y2x1ZGVfZnJvbV9pbmRleGVzPSVzKSBwcm9wZXJ0aWVzPSVzPiIgJSAoCiAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgc3RyKHNlbGYua2V5KSwKICAgICAgICBzdHIoc2VsZi5leGNsdWRlX2Zyb21faW5kZXhlcyksCiAgICAgICAgc3RyKHNlbGYucHJvcGVydGllcykpCpR9lCiMDlF1ZXJ5Ll9faW5pdF9flGpWMQEASyhLUYeUjBZRdWVyeS5fdG9fY2xpZW50X3F1ZXJ5lGpWMQEAS1NLboeUjBpRdWVyeS5fc2V0X3J1bnRpbWVfZmlsdGVyc5RqVjEBAEtwS4aHlIwLUXVlcnkuY2xvbmWUalYxAQBLiEuJh5SMDlF1ZXJ5Ll9fcmVwcl9flGpWMQEAS4tLl4eUjAVRdWVyeZRqXTEBAEsnS5eHlIwMS2V5Ll9faW5pdF9flGpWMQEAS5tLs4eUjBNLZXkuZnJvbV9jbGllbnRfa2V5lGpWMQEAS7VLuoeUjBFLZXkudG9fY2xpZW50X2tleZRqVjEBAEu8S8iHlIwKS2V5Ll9fZXFfX5RqVjEBAEvKS9SHlIwMS2V5Ll9fcmVwcl9flGpWMQEAS9hL3oeUjANLZXmUal0xAQBLmkveh5SMD0VudGl0eS5fX2luaXRfX5RqVjEBAEviS++HlIwVRW50aXR5LnNldF9wcm9wZXJ0aWVzlGpWMQEAS/FL+YeUjBlFbnRpdHkuZnJvbV9jbGllbnRfZW50aXR5lGpWMQEAS/tNBgGHlIwXRW50aXR5LnRvX2NsaWVudF9lbnRpdHmUalYxAQBNCAFNGgGHlIwNRW50aXR5Ll9fZXFfX5RqVjEBAE0cAU0iAYeUjA9FbnRpdHkuX19yZXByX1+UalYxAQBNJgFNKwGHlIwGRW50aXR5lGpdMQEAS+FNKwGHlHV9lCiMBVF1ZXJ5lGq4AwAAjAtRdWVyeS5jbG9uZZRquAMAAIwDS2V5lGq4AwAAjBNLZXkuZnJvbV9jbGllbnRfa2V5lGq4AwAAjBFLZXkudG9fY2xpZW50X2tleZRquAMAAIwGRW50aXR5lGq4AwAAjBVFbnRpdHkuc2V0X3Byb3BlcnRpZXOUargDAACMGUVudGl0eS5mcm9tX2NsaWVudF9lbnRpdHmUargDAACMF0VudGl0eS50b19jbGllbnRfZW50aXR5lGq4AwAAdYwoYXBhY2hlX2JlYW0uaW8uZ2NwLmRhdGFzdG9yZS52MW5ldy50eXBlc5R0lIwpYXBhY2hlX2JlYW0uaW8uZ2NwLmV4cGVyaW1lbnRhbC5zcGFubmVyaW+UKFi4pQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJHb29nbGUgQ2xvdWQgU3Bhbm5lciBJTwoKRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKVGhpcyBpcyBhbiBleHBlcmltZW50YWwgbW9kdWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGRhdGEgZnJvbSBHb29nbGUgQ2xvdWQKU3Bhbm5lci4gVmlzaXQ6IGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9zcGFubmVyIGZvciBtb3JlIGRldGFpbHMuCgpSZWFkaW5nIERhdGEgZnJvbSBDbG91ZCBTcGFubmVyLgoKVG8gcmVhZCBmcm9tIENsb3VkIFNwYW5uZXIgYXBwbHkgUmVhZEZyb21TcGFubmVyIHRyYW5zZm9ybWF0aW9uLiBJdCB3aWxsCnJldHVybiBhIFBDb2xsZWN0aW9uLCB3aGVyZSBlYWNoIGVsZW1lbnQgcmVwcmVzZW50cyBhbiBpbmRpdmlkdWFsIHJvdyByZXR1cm5lZApmcm9tIHRoZSByZWFkIG9wZXJhdGlvbi4gQm90aCBRdWVyeSBhbmQgUmVhZCBBUElzIGFyZSBzdXBwb3J0ZWQuCgpSZWFkRnJvbVNwYW5uZXIgcmVsaWVzIG9uIHRoZSBSZWFkT3BlcmF0aW9uIG9iamVjdHMgd2hpY2ggaXMgZXhwb3NlZCBieSB0aGUKU3Bhbm5lcklPIEFQSS4gUmVhZE9wZXJhdGlvbiBob2xkcyB0aGUgaW1tdXRhYmxlIGRhdGEgd2hpY2ggaXMgcmVzcG9uc2libGUgdG8KZXhlY3V0ZSBiYXRjaCBhbmQgbmFpdmUgcmVhZHMgb24gQ2xvdWQgU3Bhbm5lci4gVGhpcyBpcyBkb25lIGZvciBtb3JlCmNvbnZlbmllbnQgcHJvZ3JhbW1pbmcuCgpSZWFkRnJvbVNwYW5uZXIgcmVhZHMgZnJvbSBDbG91ZCBTcGFubmVyIGJ5IHByb3ZpZGluZyBlaXRoZXIgYW4gJ3NxbCcgcGFyYW0KaW4gdGhlIGNvbnN0cnVjdG9yIG9yICd0YWJsZScgbmFtZSB3aXRoICdjb2x1bW5zJyBhcyBsaXN0LiBGb3IgZXhhbXBsZTo6OgoKICByZWNvcmRzID0gKHBpcGVsaW5lCiAgICAgICAgICAgIHwgUmVhZEZyb21TcGFubmVyKFBST0pFQ1RfSUQsIElOU1RBTkNFX0lELCBEQl9OQU1FLAogICAgICAgICAgICBzcWw9J1NlbGVjdCAqIGZyb20gdXNlcnMnKSkKCiAgcmVjb3JkcyA9IChwaXBlbGluZQogICAgICAgICAgICB8IFJlYWRGcm9tU3Bhbm5lcihQUk9KRUNUX0lELCBJTlNUQU5DRV9JRCwgREJfTkFNRSwKICAgICAgICAgICAgdGFibGU9J3VzZXJzJywgY29sdW1ucz1bJ2lkJywgJ25hbWUnLCAnZW1haWwnXSkpCgpZb3UgY2FuIGFsc28gcGVyZm9ybSBtdWx0aXBsZSByZWFkcyBieSBwcm92aWRpbmcgYSBsaXN0IG9mIFJlYWRPcGVyYXRpb25zCnRvIHRoZSBSZWFkRnJvbVNwYW5uZXIgdHJhbnNmb3JtIGNvbnN0cnVjdG9yLiBSZWFkT3BlcmF0aW9uIGV4cG9zZXMgdHdvIHN0YXRpYwptZXRob2RzLiBVc2UgJ3F1ZXJ5JyB0byBwZXJmb3JtIHNxbCBiYXNlZCByZWFkcywgJ3RhYmxlJyB0byBwZXJmb3JtIHJlYWQgZnJvbQp0YWJsZSBuYW1lLiBGb3IgZXhhbXBsZTo6OgoKICByZWFkX29wZXJhdGlvbnMgPSBbCiAgICAgICAgICAgICAgICAgICAgICBSZWFkT3BlcmF0aW9uLnRhYmxlKHRhYmxlPSdjdXN0b21lcnMnLCBjb2x1bW5zPVsnbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAnZW1haWwnXSksCiAgICAgICAgICAgICAgICAgICAgICBSZWFkT3BlcmF0aW9uLnRhYmxlKHRhYmxlPSd2ZW5kb3JzJywgY29sdW1ucz1bJ25hbWUnLAogICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJ10pLAogICAgICAgICAgICAgICAgICAgIF0KICBhbGxfdXNlcnMgPSBwaXBlbGluZSB8IFJlYWRGcm9tU3Bhbm5lcihQUk9KRUNUX0lELCBJTlNUQU5DRV9JRCwgREJfTkFNRSwKICAgICAgICByZWFkX29wZXJhdGlvbnM9cmVhZF9vcGVyYXRpb25zKQoKICAuLi5PUi4uLgoKICByZWFkX29wZXJhdGlvbnMgPSBbCiAgICAgICAgICAgICAgICAgICAgICBSZWFkT3BlcmF0aW9uLnF1ZXJ5KHNxbD0nU2VsZWN0IG5hbWUsIGVtYWlsIGZyb20KICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbWVycycpLAogICAgICAgICAgICAgICAgICAgICAgUmVhZE9wZXJhdGlvbi5xdWVyeSgKICAgICAgICAgICAgICAgICAgICAgICAgc3FsPSdTZWxlY3QgKiBmcm9tIHVzZXJzIHdoZXJlIGlkIDw9IEB1c2VyX2lkJywKICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPXsndXNlcl9pZCc6IDEwMH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc190eXBlPXsndXNlcl9pZCc6IHBhcmFtX3R5cGVzLklOVDY0fQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdCiAgIyBgcGFyYW1zX3R5cGVzYCBhcmUgaW5zdGFuY2Ugb2YgYGdvb2dsZS5jbG91ZC5zcGFubmVyLnBhcmFtX3R5cGVzYAogIGFsbF91c2VycyA9IHBpcGVsaW5lIHwgUmVhZEZyb21TcGFubmVyKFBST0pFQ1RfSUQsIElOU1RBTkNFX0lELCBEQl9OQU1FLAogICAgICAgIHJlYWRfb3BlcmF0aW9ucz1yZWFkX29wZXJhdGlvbnMpCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJldmlldyB0aGUgZG9jcyBvbiBjbGFzcyBSZWFkT3BlcmF0aW9uLgoKVXNlciBjYW4gYWxzbyBhYmxlIHRvIHByb3ZpZGUgdGhlIFJlYWRPcGVyYXRpb24gaW4gZm9ybSBvZiBQQ29sbGVjdGlvbiB2aWEKcGlwZWxpbmUuIEZvciBleGFtcGxlOjo6CgogIHVzZXJzID0gKHBpcGVsaW5lCiAgICAgICAgICAgfCBiZWFtLkNyZWF0ZShbUmVhZE9wZXJhdGlvbi4uLl0pCiAgICAgICAgICAgfCBSZWFkRnJvbVNwYW5uZXIoUFJPSkVDVF9JRCwgSU5TVEFOQ0VfSUQsIERCX05BTUUpKQoKVXNlciBtYXkgYWxzbyBjcmVhdGUgY2xvdWQgc3Bhbm5lciB0cmFuc2FjdGlvbiBmcm9tIHRoZSB0cmFuc2Zvcm0gY2FsbGVkCmBjcmVhdGVfdHJhbnNhY3Rpb25gIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgU3Bhbm5lcklPIEFQSS4KClRoZSB0cmFuc2Zvcm0gaXMgZ3VhcmFudGVlZCB0byBiZSBleGVjdXRlZCBvbiBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgZGF0YSwKdXRpbGl6aW5nIHRoZSBwb3dlciBvZiByZWFkIG9ubHkgdHJhbnNhY3Rpb25zLiBTdGFsZW5lc3Mgb2YgZGF0YSBjYW4gYmUKY29udHJvbGxlZCBieSBwcm92aWRpbmcgdGhlIGByZWFkX3RpbWVzdGFtcGAgb3IgYGV4YWN0X3N0YWxlbmVzc2AgcGFyYW0gdmFsdWVzCmluIHRoZSBjb25zdHJ1Y3Rvci4KClRoaXMgdHJhbnNmb3JtIHJlcXVpcmVzIHJvb3Qgb2YgdGhlIHBpcGVsaW5lIChQQmVnaW4pIGFuZCByZXR1cm5zIFBUcmFuc2Zvcm0Kd2hpY2ggaXMgcGFzc2VkIGxhdGVyIHRvIHRoZSBgUmVhZEZyb21TcGFubmVyYCBjb25zdHJ1Y3Rvci4gYFJlYWRGcm9tU3Bhbm5lcmAKcGFzcyB0aGlzIHRyYW5zYWN0aW9uIFBUcmFuc2Zvcm0gYXMgYSBzaW5nbGV0b24gc2lkZSBpbnB1dCB0byB0aGUKYF9OYWl2ZVNwYW5uZXJSZWFkRG9GbmAgY29udGFpbmluZyAnc2Vzc2lvbl9pZCcgYW5kICd0cmFuc2FjdGlvbl9pZCcuCkZvciBleGFtcGxlOjo6CgogIHRyYW5zYWN0aW9uID0gKHBpcGVsaW5lIHwgY3JlYXRlX3RyYW5zYWN0aW9uKFRFU1RfUFJPSkVDVF9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfSU5TVEFOQ0VfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQl9OQU1FKSkKCiAgdXNlcnMgPSBwaXBlbGluZSB8IFJlYWRGcm9tU3Bhbm5lcihQUk9KRUNUX0lELCBJTlNUQU5DRV9JRCwgREJfTkFNRSwKICAgICAgICBzcWw9J1NlbGVjdCAqIGZyb20gdXNlcnMnLCB0cmFuc2FjdGlvbj10cmFuc2FjdGlvbikKCiAgdHdlZXRzID0gcGlwZWxpbmUgfCBSZWFkRnJvbVNwYW5uZXIoUFJPSkVDVF9JRCwgSU5TVEFOQ0VfSUQsIERCX05BTUUsCiAgICAgICAgc3FsPSdTZWxlY3QgKiBmcm9tIHR3ZWV0cycsIHRyYW5zYWN0aW9uPXRyYW5zYWN0aW9uKQoKRm9yIGZ1cnRoZXIgZGV0YWlscyBvZiB0aGlzIHRyYW5zZm9ybSwgcGxlYXNlIHJldmlldyB0aGUgZG9jcyBvbiB0aGUKOm1ldGg6YGNyZWF0ZV90cmFuc2FjdGlvbmAgbWV0aG9kIGF2YWlsYWJsZSBpbiB0aGUgU3Bhbm5lcklPIEFQSS4KClJlYWRGcm9tU3Bhbm5lciB0YWtlcyB0aGlzIHRyYW5zZm9ybSBpbiB0aGUgY29uc3RydWN0b3IgYW5kIHBhc3MgdGhpcyB0byB0aGUKcmVhZCBwaXBlbGluZSBhcyB0aGUgc2luZ2xldG9uIHNpZGUgaW5wdXQuCgpXcml0aW5nIERhdGEgdG8gQ2xvdWQgU3Bhbm5lci4KClRoZSBXcml0ZVRvU3Bhbm5lciB0cmFuc2Zvcm0gd3JpdGVzIHRvIENsb3VkIFNwYW5uZXIgYnkgZXhlY3V0aW5nIGEKY29sbGVjdGlvbiBhIGlucHV0IHJvd3MgKFdyaXRlTXV0YXRpb24pLiBUaGUgbXV0YXRpb25zIGFyZSBncm91cGVkIGludG8KYmF0Y2hlcyBmb3IgZWZmaWNpZW5jeS4KCldyaXRlVG9TcGFubmVyIHRyYW5zZm9ybSByZWxpZXMgb24gdGhlIFdyaXRlTXV0YXRpb24gb2JqZWN0cyB3aGljaCBpcyBleHBvc2VkCmJ5IHRoZSBTcGFubmVySU8gQVBJLiBXcml0ZU11dGF0aW9uIGhhdmUgZml2ZSBzdGF0aWMgbWV0aG9kcyAoaW5zZXJ0LCB1cGRhdGUsCmluc2VydF9vcl91cGRhdGUsIHJlcGxhY2UsIGRlbGV0ZSkuIFRoZXNlIG1ldGhvZHMgcmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhlCl9NdXRhdG9yIG9iamVjdCB3aGljaCBjb250YWlucyB0aGUgbXV0YXRpb24gdHlwZSBhbmQgdGhlIFNwYW5uZXIgTXV0YXRpb24Kb2JqZWN0LiBGb3IgbW9yZSBkZXRhaWxzLCByZXZpZXcgdGhlIGRvY3Mgb2YgdGhlIGNsYXNzIFNwYW5uZXJJTy5Xcml0ZU11dGF0aW9uLgpGb3IgZXhhbXBsZTo6OgoKICBtdXRhdGlvbnMgPSBbCiAgICAgICAgICAgICAgICBXcml0ZU11dGF0aW9uLmluc2VydCh0YWJsZT0ndXNlcicsIGNvbHVtbnM9KCduYW1lJywgJ2VtYWlsJyksCiAgICAgICAgICAgICAgICB2YWx1ZXM9Wygnc2FyYScuICdzYXJhQGRldi5jb20nKV0pCiAgICAgICAgICAgICAgXQogIF8gPSAocAogICAgICAgfCBiZWFtLkNyZWF0ZShtdXRhdGlvbnMpCiAgICAgICB8IFdyaXRlVG9TcGFubmVyKAogICAgICAgICAgcHJvamVjdF9pZD1TUEFOTkVSX1BST0pFQ1RfSUQsCiAgICAgICAgICBpbnN0YW5jZV9pZD1TUEFOTkVSX0lOU1RBTkNFX0lELAogICAgICAgICAgZGF0YWJhc2VfaWQ9U1BBTk5FUl9EQVRBQkFTRV9OQU1FKQogICAgICAgICkKCllvdSBjYW4gYWxzbyBjcmVhdGUgV3JpdGVNdXRhdGlvbiB2aWEgY2FsbGluZyBpdHMgY29uc3RydWN0b3IuIEZvciBleGFtcGxlOjo6CgogIG11dGF0aW9ucyA9IFsKICAgICAgV3JpdGVNdXRhdGlvbihpbnNlcnQ9J3VzZXJzJywgY29sdW1ucz0oJ25hbWUnLCAnZW1haWwnKSwKICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9Wygnc2FyYSIsICdzYXJhQGV4YW1wbGUuY29tJyldKQogIF0KCkZvciBtb3JlIGluZm9ybWF0aW9uLCByZXZpZXcgdGhlIGRvY3MgYXZhaWxhYmxlIG9uIFdyaXRlTXV0YXRpb24gY2xhc3MuCgpXcml0ZVRvU3Bhbm5lciB0cmFuc2Zvcm0gYWxzbyB0YWtlcyB0aHJlZSBiYXRjaGluZyBwYXJhbWV0ZXJzIChtYXhfbnVtYmVyX3Jvd3MsCm1heF9udW1iZXJfY2VsbHMgYW5kIG1heF9iYXRjaF9zaXplX2J5dGVzKS4gQnkgZGVmYXVsdCwgbWF4X251bWJlcl9yb3dzIGlzIHNldAp0byA1MCByb3dzLCBtYXhfbnVtYmVyX2NlbGxzIGlzIHNldCB0byA1MDAgY2VsbHMgYW5kIG1heF9iYXRjaF9zaXplX2J5dGVzIGlzCnNldCB0byAxTUIgKDEwNDg1NzYgYnl0ZXMpLiBUaGVzZSBwYXJhbWV0ZXIgdXNlZCB0byByZWR1Y2UgdGhlIG51bWJlciBvZgp0cmFuc2FjdGlvbnMgc2VudCB0byBzcGFubmVyIGJ5IGdyb3VwaW5nIHRoZSBtdXRhdGlvbiBpbnRvIGJhdGNoZXMuIFNldHRpbmcKdGhlc2UgcGFyYW0gdmFsdWVzIGVpdGhlciB0byBzbWFsbGVyIHZhbHVlIG9yIHplcm8gdG8gZGlzYWJsZSBiYXRjaGluZy4KVW5saWtlIHRoZSBKYXZhIGNvbm5lY3RvciwgdGhpcyBjb25uZWN0b3IgZG9lcyBub3QgY3JlYXRlIGJhdGNoZXMgb2YKdHJhbnNhY3Rpb25zIHNvcnRlZCBieSB0YWJsZSBhbmQgcHJpbWFyeSBrZXkuCgpXcml0ZVRvU3Bhbm5lciB0cmFuc2Zvcm1zIHN0YXJ0cyB3aXRoIHRoZSBncm91cGluZyBpbnRvIGJhdGNoZXMuIFRoZSBmaXJzdCBzdGVwCmluIHRoaXMgcHJvY2VzcyBpcyB0byBtYWtlIHRoZSBtYWtlIHRoZSBtdXRhdGlvbiBncm91cHMgb2YgdGhlIFdyaXRlTXV0YXRpb24Kb2JqZWN0cyBhbmQgdGhlbiBmaWx0ZXJpbmcgdGhlbSBpbnRvIGJhdGNoYWJsZSBhbmQgdW5iYXRjaGFibGUgbXV0YXRpb24KZ3JvdXBzLiBUaGVyZSBhcmUgdGhyZWUgYmF0Y2hpbmcgcGFyYW1ldGVycyAobWF4X251bWJlcl9jZWxscywgbWF4X251bWJlcl9yb3dzCiYgbWF4X2JhdGNoX3NpemVfYnl0ZXMpLiBXZSBjYWxjdWxhdGVkIHRoIG11dGF0aW9uIGJ5dGUgc2l6ZSBmcm9tIHRoZSBtZXRob2QKYXZhaWxhYmxlIGluIHRoZSBgZ29vZ2xlLmNsb3VkLnNwYW5uZXJfdjEucHJvdG8ubXV0YXRpb25fcGIyLk11dGF0aW9uLkJ5dGVTaXplYC4KaWYgdGhlIG11dGF0aW9uIHJvd3MsIGNlbGxzIG9yIGJ5dGUgc2l6ZSBhcmUgbGFyZ2VyIHRoYW4gdmFsdWUgb2YgdGhlIGFueQpiYXRjaGluZyBwYXJhbWV0ZXJzIHBhcmFtLCBpdCB3aWxsIGJlIHRhZ2dlZCBhcyAidW5iYXRjaGFibGUiIG11dGF0aW9uLiBBZnRlcgp0aGlzIGFsbCB0aGUgYmF0Y2hhYmxlIG11dGF0aW9uIGFyZSBtZXJnZWQgaW50byBhIHNpbmdsZSBtdXRhdGlvbiBncm91cCB3aG9zCnNpemUgaXMgbm90IGxhcmdlciB0aGFuIHRoZSAibWF4X2JhdGNoX3NpemVfYnl0ZXMiLCBhZnRlciB0aGlzIHByb2Nlc3MsIGFsbCB0aGUKbXV0YXRpb24gZ3JvdXBzIHRvZ2V0aGVyIHRvIHByb2Nlc3MuIElmIHRoZSBNdXRhdGlvbiByZWZlcmVuY2VzIGEgdGFibGUgb3IKY29sdW1uIGRvZXMgbm90IGV4aXRzLCBpdCB3aWxsIGNhdXNlIGEgZXhjZXB0aW9uIGFuZCBmYWlscyB0aGUgZW50aXJlIHBpcGVsaW5lLgoiIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCB0eXBpbmcKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgQ3JlYXRlCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgRmxhdHRlbgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBQYXJEbwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBSZXNodWZmbGUKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzIGltcG9ydCBNZXRyaWNzCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBBc1NpbmdsZXRvbgpmcm9tIGFwYWNoZV9iZWFtLnB2YWx1ZSBpbXBvcnQgUEJlZ2luCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBUYWdnZWRPdXRwdXQKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgcHRyYW5zZm9ybV9mbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB3aXRoX2lucHV0X3R5cGVzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB3aXRoX291dHB1dF90eXBlcwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIGltcG9ydCBleHBlcmltZW50YWwKCnRyeToKICBmcm9tIGdvb2dsZS5jbG91ZC5zcGFubmVyIGltcG9ydCBDbGllbnQKICBmcm9tIGdvb2dsZS5jbG91ZC5zcGFubmVyIGltcG9ydCBLZXlTZXQKICBmcm9tIGdvb2dsZS5jbG91ZC5zcGFubmVyX3YxIGltcG9ydCBiYXRjaAogIGZyb20gZ29vZ2xlLmNsb3VkLnNwYW5uZXJfdjEuZGF0YWJhc2UgaW1wb3J0IEJhdGNoU25hcHNob3QKICBmcm9tIGdvb2dsZS5jbG91ZC5zcGFubmVyX3YxLnByb3RvLm11dGF0aW9uX3BiMiBpbXBvcnQgTXV0YXRpb24KZXhjZXB0IEltcG9ydEVycm9yOgogIENsaWVudCA9IE5vbmUKICBLZXlTZXQgPSBOb25lCiAgQmF0Y2hTbmFwc2hvdCA9IE5vbmUKCl9fYWxsX18gPSBbCiAgICAnY3JlYXRlX3RyYW5zYWN0aW9uJywKICAgICdSZWFkRnJvbVNwYW5uZXInLAogICAgJ1JlYWRPcGVyYXRpb24nLAogICAgJ1dyaXRlVG9TcGFubmVyJywKICAgICdXcml0ZU11dGF0aW9uJywKICAgICdNdXRhdGlvbkdyb3VwJwpdCgoKY2xhc3MgX1NQQU5ORVJfVFJBTlNBQ1RJT04obmFtZWR0dXBsZSgiU1BBTk5FUl9UUkFOU0FDVElPTiIsIFsidHJhbnNhY3Rpb24iXSkpOgogICIiIgogIEhvbGRzIHRoZSBzcGFubmVyIHRyYW5zYWN0aW9uIGRldGFpbHMuCiAgIiIiCgogIF9fc2xvdHNfXyA9ICgpCgoKY2xhc3MgUmVhZE9wZXJhdGlvbihuYW1lZHR1cGxlKAogICAgIlJlYWRPcGVyYXRpb24iLCBbImlzX3NxbCIsICJpc190YWJsZSIsICJyZWFkX29wZXJhdGlvbiIsICJrd2FyZ3MiXSkpOgogICIiIgogIEVuY2Fwc3VsYXRlcyBhIHNwYW5uZXIgcmVhZCBvcGVyYXRpb24uCiAgIiIiCgogIF9fc2xvdHNfXyA9ICgpCgogIEBjbGFzc21ldGhvZAogIGRlZiBxdWVyeShjbHMsIHNxbCwgcGFyYW1zPU5vbmUsIHBhcmFtX3R5cGVzPU5vbmUpOgogICAgIiIiCiAgICBBIGNvbnZlbmllbnQgbWV0aG9kIHRvIGNvbnN0cnVjdCBSZWFkT3BlcmF0aW9uIGZyb20gc3FsIHF1ZXJ5LgoKICAgIEFyZ3M6CiAgICAgIHNxbDogU1FMIHF1ZXJ5IHN0YXRlbWVudAogICAgICBwYXJhbXM6IChvcHRpb25hbCkgdmFsdWVzIGZvciBwYXJhbWV0ZXIgcmVwbGFjZW1lbnQuIEtleXMgbXVzdCBtYXRjaCB0aGUKICAgICAgICBuYW1lcyB1c2VkIGluIHNxbAogICAgICBwYXJhbV90eXBlczogKG9wdGlvbmFsKSBtYXBzIGV4cGxpY2l0IHR5cGVzIGZvciBvbmUgb3IgbW9yZSBwYXJhbSB2YWx1ZXM7CiAgICAgICAgcmVxdWlyZWQgaWYgcGFyYW1ldGVycyBhcmUgcGFzc2VkLgogICAgIiIiCgogICAgaWYgcGFyYW1zOgogICAgICBhc3NlcnQgcGFyYW1fdHlwZXMgaXMgbm90IE5vbmUKCiAgICByZXR1cm4gY2xzKAogICAgICAgIGlzX3NxbD1UcnVlLAogICAgICAgIGlzX3RhYmxlPUZhbHNlLAogICAgICAgIHJlYWRfb3BlcmF0aW9uPSJwcm9jZXNzX3F1ZXJ5X2JhdGNoIiwKICAgICAgICBrd2FyZ3M9ewogICAgICAgICAgICAnc3FsJzogc3FsLCAncGFyYW1zJzogcGFyYW1zLCAncGFyYW1fdHlwZXMnOiBwYXJhbV90eXBlcwogICAgICAgIH0pCgogIEBjbGFzc21ldGhvZAogIGRlZiB0YWJsZShjbHMsIHRhYmxlLCBjb2x1bW5zLCBpbmRleD0iIiwga2V5c2V0PU5vbmUpOgogICAgIiIiCiAgICBBIGNvbnZlbmllbnQgbWV0aG9kIHRvIGNvbnN0cnVjdCBSZWFkT3BlcmF0aW9uIGZyb20gdGFibGUuCgogICAgQXJnczoKICAgICAgdGFibGU6IG5hbWUgb2YgdGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gZmV0Y2ggZGF0YS4KICAgICAgY29sdW1uczogbmFtZXMgb2YgY29sdW1ucyB0byBiZSByZXRyaWV2ZWQuCiAgICAgIGluZGV4OiAob3B0aW9uYWwpIG5hbWUgb2YgaW5kZXggdG8gdXNlLCByYXRoZXIgdGhhbiB0aGUgdGFibGUncyBwcmltYXJ5CiAgICAgICAga2V5LgogICAgICBrZXlzZXQ6IChvcHRpb25hbCkgYEtleVNldGAga2V5cyAvIHJhbmdlcyBpZGVudGlmeWluZyByb3dzIHRvIGJlCiAgICAgICAgcmV0cmlldmVkLgogICAgIiIiCiAgICBrZXlzZXQgPSBrZXlzZXQgb3IgS2V5U2V0KGFsbF89VHJ1ZSkKICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleXNldCwgS2V5U2V0KToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJrZXlzZXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBjbGFzcyAiCiAgICAgICAgICAiZ29vZ2xlLmNsb3VkLnNwYW5uZXIuS2V5U2V0IikKICAgIHJldHVybiBjbHMoCiAgICAgICAgaXNfc3FsPUZhbHNlLAogICAgICAgIGlzX3RhYmxlPVRydWUsCiAgICAgICAgcmVhZF9vcGVyYXRpb249InByb2Nlc3NfcmVhZF9iYXRjaCIsCiAgICAgICAga3dhcmdzPXsKICAgICAgICAgICAgJ3RhYmxlJzogdGFibGUsCiAgICAgICAgICAgICdjb2x1bW5zJzogY29sdW1ucywKICAgICAgICAgICAgJ2luZGV4JzogaW5kZXgsCiAgICAgICAgICAgICdrZXlzZXQnOiBrZXlzZXQKICAgICAgICB9KQoKCmNsYXNzIF9CZWFtU3Bhbm5lckNvbmZpZ3VyYXRpb24obmFtZWR0dXBsZSgiX0JlYW1TcGFubmVyQ29uZmlndXJhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbInByb2plY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGFiYXNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlZGVudGlhbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb29sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic25hcHNob3RfcmVhZF90aW1lc3RhbXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbmFwc2hvdF9leGFjdF9zdGFsZW5lc3MiXSkpOgogICIiIgogIEEgbmFtZWR0dXBsZSBob2xkcyB0aGUgaW1tdXRhYmxlIGRhdGEgb2YgdGhlIGNvbm5lY3Rpb24gc3RyaW5nIHRvIHRoZSBjbG91ZAogIHNwYW5uZXIuCiAgIiIiCiAgQHByb3BlcnR5CiAgZGVmIHNuYXBzaG90X29wdGlvbnMoc2VsZik6CiAgICBzbmFwc2hvdF9vcHRpb25zID0ge30KICAgIGlmIHNlbGYuc25hcHNob3RfZXhhY3Rfc3RhbGVuZXNzOgogICAgICBzbmFwc2hvdF9vcHRpb25zWydleGFjdF9zdGFsZW5lc3MnXSA9IHNlbGYuc25hcHNob3RfZXhhY3Rfc3RhbGVuZXNzCiAgICBpZiBzZWxmLnNuYXBzaG90X3JlYWRfdGltZXN0YW1wOgogICAgICBzbmFwc2hvdF9vcHRpb25zWydyZWFkX3RpbWVzdGFtcCddID0gc2VsZi5zbmFwc2hvdF9yZWFkX3RpbWVzdGFtcAogICAgcmV0dXJuIHNuYXBzaG90X29wdGlvbnMKCgpAd2l0aF9pbnB1dF90eXBlcyhSZWFkT3BlcmF0aW9uLCB0eXBpbmcuRGljdFt0eXBpbmcuQW55LCB0eXBpbmcuQW55XSkKQHdpdGhfb3V0cHV0X3R5cGVzKHR5cGluZy5MaXN0W3R5cGluZy5BbnldKQpjbGFzcyBfTmFpdmVTcGFubmVyUmVhZERvRm4oRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHNwYW5uZXJfY29uZmlndXJhdGlvbik6CiAgICAiIiIKICAgIEEgbmFpdmUgdmVyc2lvbiBvZiBTcGFubmVyIHJlYWQgd2hpY2ggdXNlcyB0aGUgdHJhbnNhY3Rpb24gQVBJIG9mIHRoZQogICAgY2xvdWQgc3Bhbm5lci4KICAgIGh0dHBzOi8vZ29vZ2xlYXBpcy5kZXYvcHl0aG9uL3NwYW5uZXIvbGF0ZXN0L3RyYW5zYWN0aW9uLWFwaS5odG1sCiAgICBJbiBOYWl2ZSByZWFkcywgdGhpcyB0cmFuc2Zvcm0gcGVyZm9ybXMgc2luZ2xlIHJlYWRzLCB3aGVyZSBhcyB0aGUKICAgIEJhdGNoIHJlYWRzIHVzZSB0aGUgc3Bhbm5lciBwYXJ0aXRpb25pbmcgcXVlcnkgdG8gY3JlYXRlIGJhdGNoZXMuCgogICAgQXJnczoKICAgICAgc3Bhbm5lcl9jb25maWd1cmF0aW9uOiAoX0JlYW1TcGFubmVyQ29uZmlndXJhdGlvbikgQ29ubmVjdGlvbiBkZXRhaWxzIHRvCiAgICAgICAgY29ubmVjdCB3aXRoIGNsb3VkIHNwYW5uZXIuCiAgICAiIiIKICAgIHNlbGYuX3NwYW5uZXJfY29uZmlndXJhdGlvbiA9IHNwYW5uZXJfY29uZmlndXJhdGlvbgogICAgc2VsZi5fc25hcHNob3QgPSBOb25lCiAgICBzZWxmLl9zZXNzaW9uID0gTm9uZQoKICBkZWYgX2dldF9zZXNzaW9uKHNlbGYpOgogICAgaWYgc2VsZi5fc2Vzc2lvbiBpcyBOb25lOgogICAgICBzZXNzaW9uID0gc2VsZi5fc2Vzc2lvbiA9IHNlbGYuX2RhdGFiYXNlLnNlc3Npb24oKQogICAgICBzZXNzaW9uLmNyZWF0ZSgpCiAgICByZXR1cm4gc2VsZi5fc2Vzc2lvbgoKICBkZWYgX2Nsb3NlX3Nlc3Npb24oc2VsZik6CiAgICBpZiBzZWxmLl9zZXNzaW9uIGlzIG5vdCBOb25lOgogICAgICBzZWxmLl9zZXNzaW9uLmRlbGV0ZSgpCgogIGRlZiBzZXR1cChzZWxmKToKICAgICMgc2V0dGluZyB1cCBjbGllbnQgdG8gY29ubmVjdCB3aXRoIGNsb3VkIHNwYW5uZXIKICAgIHNwYW5uZXJfY2xpZW50ID0gQ2xpZW50KHNlbGYuX3NwYW5uZXJfY29uZmlndXJhdGlvbi5wcm9qZWN0KQogICAgaW5zdGFuY2UgPSBzcGFubmVyX2NsaWVudC5pbnN0YW5jZShzZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24uaW5zdGFuY2UpCiAgICBzZWxmLl9kYXRhYmFzZSA9IGluc3RhbmNlLmRhdGFiYXNlKAogICAgICAgIHNlbGYuX3NwYW5uZXJfY29uZmlndXJhdGlvbi5kYXRhYmFzZSwKICAgICAgICBwb29sPXNlbGYuX3NwYW5uZXJfY29uZmlndXJhdGlvbi5wb29sKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCBzcGFubmVyX3RyYW5zYWN0aW9uKToKICAgICMgYHNwYW5uZXJfdHJhbnNhY3Rpb25gIHNob3VsZCBiZSB0aGUgaW5zdGFuY2Ugb2YgdGhlIF9TUEFOTkVSX1RSQU5TQUNUSU9OCiAgICAjIG9iamVjdC4KICAgIGlmIG5vdCBpc2luc3RhbmNlKHNwYW5uZXJfdHJhbnNhY3Rpb24sIF9TUEFOTkVSX1RSQU5TQUNUSU9OKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJJbnZhbGlkIHRyYW5zYWN0aW9uIG9iamVjdDogJXMuIEl0IHNob3VsZCBiZSBpbnN0YW5jZSAiCiAgICAgICAgICAib2YgU1BBTk5FUl9UUkFOU0FDVElPTiBvYmplY3QgY3JlYXRlZCBieSAiCiAgICAgICAgICAic3Bhbm5lcmlvLmNyZWF0ZV90cmFuc2FjdGlvbiB0cmFuc2Zvcm0uIiAlIHR5cGUoc3Bhbm5lcl90cmFuc2FjdGlvbikpCgogICAgdHJhbnNhY3Rpb25faW5mbyA9IHNwYW5uZXJfdHJhbnNhY3Rpb24udHJhbnNhY3Rpb24KCiAgICAjIFdlIHVzZWQgYmF0Y2ggc25hcHNob3QgdG8gcmV1c2UgdGhlIHNhbWUgdHJhbnNhY3Rpb24gcGFzc2VkIHRocm91Z2ggdGhlCiAgICAjIHNpZGUgaW5wdXQKICAgIHNlbGYuX3NuYXBzaG90ID0gQmF0Y2hTbmFwc2hvdC5mcm9tX2RpY3Qoc2VsZi5fZGF0YWJhc2UsIHRyYW5zYWN0aW9uX2luZm8pCgogICAgIyBnZXR0aW5nIHRoZSB0cmFuc2FjdGlvbiBmcm9tIHRoZSBzbmFwc2hvdCdzIHNlc3Npb24gdG8gcnVuIHJlYWQgb3BlcmF0aW9uLgogICAgIyB3aXRoIHNlbGYuX3NuYXBzaG90LnNlc3Npb24oKS50cmFuc2FjdGlvbigpIGFzIHRyYW5zYWN0aW9uOgogICAgd2l0aCBzZWxmLl9nZXRfc2Vzc2lvbigpLnRyYW5zYWN0aW9uKCkgYXMgdHJhbnNhY3Rpb246CiAgICAgIGlmIGVsZW1lbnQuaXNfc3FsIGlzIFRydWU6CiAgICAgICAgdHJhbnNhY3Rpb25fcmVhZCA9IHRyYW5zYWN0aW9uLmV4ZWN1dGVfc3FsCiAgICAgIGVsaWYgZWxlbWVudC5pc190YWJsZSBpcyBUcnVlOgogICAgICAgIHRyYW5zYWN0aW9uX3JlYWQgPSB0cmFuc2FjdGlvbi5yZWFkCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIlJlYWRPcGVyYXRpb24gaXMgaW1wcm9wZXJseSBjb25maWd1cmU6ICVzIiAlIHN0cihlbGVtZW50KSkKCiAgICAgIGZvciByb3cgaW4gdHJhbnNhY3Rpb25fcmVhZCgqKmVsZW1lbnQua3dhcmdzKToKICAgICAgICB5aWVsZCByb3cKCgpAd2l0aF9pbnB1dF90eXBlcyhSZWFkT3BlcmF0aW9uKQpAd2l0aF9vdXRwdXRfdHlwZXModHlwaW5nLkRpY3RbdHlwaW5nLkFueSwgdHlwaW5nLkFueV0pCmNsYXNzIF9DcmVhdGVSZWFkUGFydGl0aW9ucyhEb0ZuKToKICAiIiIKICBBIERvRm4gdG8gY3JlYXRlIHBhcnRpdGlvbnMuIFVzZXMgdGhlIFBhcnRpdGlvbmluZyBBUEkgKFBhcnRpdGlvblJlYWQgLwogIFBhcnRpdGlvblF1ZXJ5KSByZXF1ZXN0IHRvIHN0YXJ0IGEgcGFydGl0aW9uZWQgcXVlcnkgb3BlcmF0aW9uLiBSZXR1cm5zIGEKICBsaXN0IG9mIGJhdGNoIGluZm9ybWF0aW9uIG5lZWRlZCB0byBwZXJmb3JtIHRoZSBhY3R1YWwgcXVlcmllcy4KCiAgSWYgdGhlIGVsZW1lbnQgaXMgdGhlIGluc3RhbmNlIG9mIDpjbGFzczpgUmVhZE9wZXJhdGlvbmAgaXMgdG8gcGVyZm9ybSBzcWwKICBxdWVyeSwgYFBhcnRpdGlvblF1ZXJ5YCBBUEkgaXMgdXNlZCB0aGUgY3JlYXRlIHBhcnRpdGlvbnMgYW5kIHJldHVybnMgbWFwcGluZ3MKICBvZiBpbmZvcm1hdGlvbiB1c2VkIHBlcmZvcm0gYWN0dWFsIHBhcnRpdGlvbmVkIHJlYWRzIHZpYQogIDptZXRoOmBwcm9jZXNzX3F1ZXJ5X2JhdGNoYC4KCiAgSWYgdGhlIGVsZW1lbnQgaXMgdGhlIGluc3RhbmNlIG9mIDpjbGFzczpgUmVhZE9wZXJhdGlvbmAgaXMgdG8gcGVyZm9ybSByZWFkCiAgZnJvbSB0YWJsZSwgYFBhcnRpdGlvblJlYWRgIEFQSSBpcyB1c2VkIHRoZSBjcmVhdGUgcGFydGl0aW9ucyBhbmQgcmV0dXJucwogIG1hcHBpbmdzIG9mIGluZm9ybWF0aW9uIHVzZWQgcGVyZm9ybSBhY3R1YWwgcGFydGl0aW9uZWQgcmVhZHMgdmlhCiAgOm1ldGg6YHByb2Nlc3NfcmVhZF9iYXRjaGAuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNwYW5uZXJfY29uZmlndXJhdGlvbik6CiAgICBzZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24gPSBzcGFubmVyX2NvbmZpZ3VyYXRpb24KCiAgZGVmIHNldHVwKHNlbGYpOgogICAgc3Bhbm5lcl9jbGllbnQgPSBDbGllbnQoCiAgICAgICAgcHJvamVjdD1zZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24ucHJvamVjdCwKICAgICAgICBjcmVkZW50aWFscz1zZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24uY3JlZGVudGlhbHMpCiAgICBpbnN0YW5jZSA9IHNwYW5uZXJfY2xpZW50Lmluc3RhbmNlKHNlbGYuX3NwYW5uZXJfY29uZmlndXJhdGlvbi5pbnN0YW5jZSkKICAgIHNlbGYuX2RhdGFiYXNlID0gaW5zdGFuY2UuZGF0YWJhc2UoCiAgICAgICAgc2VsZi5fc3Bhbm5lcl9jb25maWd1cmF0aW9uLmRhdGFiYXNlLAogICAgICAgIHBvb2w9c2VsZi5fc3Bhbm5lcl9jb25maWd1cmF0aW9uLnBvb2wpCiAgICBzZWxmLl9zbmFwc2hvdCA9IHNlbGYuX2RhdGFiYXNlLmJhdGNoX3NuYXBzaG90KAogICAgICAgICoqc2VsZi5fc3Bhbm5lcl9jb25maWd1cmF0aW9uLnNuYXBzaG90X29wdGlvbnMpCiAgICBzZWxmLl9zbmFwc2hvdF9kaWN0ID0gc2VsZi5fc25hcHNob3QudG9fZGljdCgpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgaWYgZWxlbWVudC5pc19zcWwgaXMgVHJ1ZToKICAgICAgcGFydGl0aW9uaW5nX2FjdGlvbiA9IHNlbGYuX3NuYXBzaG90LmdlbmVyYXRlX3F1ZXJ5X2JhdGNoZXMKICAgIGVsaWYgZWxlbWVudC5pc190YWJsZSBpcyBUcnVlOgogICAgICBwYXJ0aXRpb25pbmdfYWN0aW9uID0gc2VsZi5fc25hcHNob3QuZ2VuZXJhdGVfcmVhZF9iYXRjaGVzCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgIlJlYWRPcGVyYXRpb24gaXMgaW1wcm9wZXJseSBjb25maWd1cmU6ICVzIiAlIHN0cihlbGVtZW50KSkKCiAgICBmb3IgcCBpbiBwYXJ0aXRpb25pbmdfYWN0aW9uKCoqZWxlbWVudC5rd2FyZ3MpOgogICAgICB5aWVsZCB7CiAgICAgICAgICAiaXNfc3FsIjogZWxlbWVudC5pc19zcWwsCiAgICAgICAgICAiaXNfdGFibGUiOiBlbGVtZW50LmlzX3RhYmxlLAogICAgICAgICAgInJlYWRfb3BlcmF0aW9uIjogZWxlbWVudC5yZWFkX29wZXJhdGlvbiwKICAgICAgICAgICJwYXJ0aXRpb25zIjogcCwKICAgICAgICAgICJ0cmFuc2FjdGlvbl9pbmZvIjogc2VsZi5fc25hcHNob3RfZGljdAogICAgICB9CgoKQHdpdGhfaW5wdXRfdHlwZXMoaW50KQpAd2l0aF9vdXRwdXRfdHlwZXModHlwaW5nLkRpY3RbdHlwaW5nLkFueSwgdHlwaW5nLkFueV0pCmNsYXNzIF9DcmVhdGVUcmFuc2FjdGlvbkZuKERvRm4pOgogICIiIgogIEEgRG9GbiB0byBjcmVhdGUgdGhlIHRyYW5zYWN0aW9uIG9mIGNsb3VkIHNwYW5uZXIuCiAgSXQgY29ubmVjdHMgdG8gdGhlIGRhdGFiYXNlIGFuZCBhbmQgcmV0dXJucyB0aGUgdHJhbnNhY3Rpb25faWQgYW5kIHNlc3Npb25faWQKICBieSB1c2luZyB0aGUgYmF0Y2hfc25hcHNob3QudG9fZGljdCgpIG1ldGhvZCBhdmFpbGFibGUgaW4gdGhlIGdvb2dsZSBjbG91ZAogIHNwYW5uZXIgc2RrLgoKICBodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9zcGFubmVyL2xhdGVzdC9kYXRhYmFzZS1hcGkuaHRtbD9oaWdobGlnaHQ9CiAgYmF0Y2hfc25hcHNob3QjZ29vZ2xlLmNsb3VkLnNwYW5uZXJfdjEuZGF0YWJhc2UuQmF0Y2hTbmFwc2hvdC50b19kaWN0CiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0X2lkLAogICAgICBpbnN0YW5jZV9pZCwKICAgICAgZGF0YWJhc2VfaWQsCiAgICAgIGNyZWRlbnRpYWxzLAogICAgICBwb29sLAogICAgICByZWFkX3RpbWVzdGFtcCwKICAgICAgZXhhY3Rfc3RhbGVuZXNzKToKICAgIHNlbGYuX3Byb2plY3RfaWQgPSBwcm9qZWN0X2lkCiAgICBzZWxmLl9pbnN0YW5jZV9pZCA9IGluc3RhbmNlX2lkCiAgICBzZWxmLl9kYXRhYmFzZV9pZCA9IGRhdGFiYXNlX2lkCiAgICBzZWxmLl9jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzCiAgICBzZWxmLl9wb29sID0gcG9vbAoKICAgIHNlbGYuX3NuYXBzaG90X29wdGlvbnMgPSB7fQogICAgaWYgcmVhZF90aW1lc3RhbXA6CiAgICAgIHNlbGYuX3NuYXBzaG90X29wdGlvbnNbJ3JlYWRfdGltZXN0YW1wJ10gPSByZWFkX3RpbWVzdGFtcAogICAgaWYgZXhhY3Rfc3RhbGVuZXNzOgogICAgICBzZWxmLl9zbmFwc2hvdF9vcHRpb25zWydleGFjdF9zdGFsZW5lc3MnXSA9IGV4YWN0X3N0YWxlbmVzcwogICAgc2VsZi5fc25hcHNob3QgPSBOb25lCgogIGRlZiBzZXR1cChzZWxmKToKICAgIHNlbGYuX3NwYW5uZXJfY2xpZW50ID0gQ2xpZW50KAogICAgICAgIHByb2plY3Q9c2VsZi5fcHJvamVjdF9pZCwgY3JlZGVudGlhbHM9c2VsZi5fY3JlZGVudGlhbHMpCiAgICBzZWxmLl9pbnN0YW5jZSA9IHNlbGYuX3NwYW5uZXJfY2xpZW50Lmluc3RhbmNlKHNlbGYuX2luc3RhbmNlX2lkKQogICAgc2VsZi5fZGF0YWJhc2UgPSBzZWxmLl9pbnN0YW5jZS5kYXRhYmFzZShzZWxmLl9kYXRhYmFzZV9pZCwgcG9vbD1zZWxmLl9wb29sKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgc2VsZi5fc25hcHNob3QgPSBzZWxmLl9kYXRhYmFzZS5iYXRjaF9zbmFwc2hvdCgqKnNlbGYuX3NuYXBzaG90X29wdGlvbnMpCiAgICByZXR1cm4gW19TUEFOTkVSX1RSQU5TQUNUSU9OKHNlbGYuX3NuYXBzaG90LnRvX2RpY3QoKSldCgoKQHB0cmFuc2Zvcm1fZm4KZGVmIGNyZWF0ZV90cmFuc2FjdGlvbigKICAgIHBiZWdpbiwKICAgIHByb2plY3RfaWQsCiAgICBpbnN0YW5jZV9pZCwKICAgIGRhdGFiYXNlX2lkLAogICAgY3JlZGVudGlhbHM9Tm9uZSwKICAgIHBvb2w9Tm9uZSwKICAgIHJlYWRfdGltZXN0YW1wPU5vbmUsCiAgICBleGFjdF9zdGFsZW5lc3M9Tm9uZSk6CiAgIiIiCiAgQSBQVHJhbnNmb3JtIG1ldGhvZCB0byBjcmVhdGUgYSBiYXRjaCB0cmFuc2FjdGlvbi4KCiAgQXJnczoKICAgIHBiZWdpbjogUm9vdCBvZiB0aGUgcGlwZWxpbmUKICAgIHByb2plY3RfaWQ6IENsb3VkIHNwYW5uZXIgcHJvamVjdCBpZC4gQmUgc3VyZSB0byB1c2UgdGhlIFByb2plY3QgSUQsCiAgICAgIG5vdCB0aGUgUHJvamVjdCBOdW1iZXIuCiAgICBpbnN0YW5jZV9pZDogQ2xvdWQgc3Bhbm5lciBpbnN0YW5jZSBpZC4KICAgIGRhdGFiYXNlX2lkOiBDbG91ZCBzcGFubmVyIGRhdGFiYXNlIGlkLgogICAgY3JlZGVudGlhbHM6IChvcHRpb25hbCkgVGhlIGF1dGhvcml6YXRpb24gY3JlZGVudGlhbHMgdG8gYXR0YWNoIHRvIHJlcXVlc3RzLgogICAgICBUaGVzZSBjcmVkZW50aWFscyBpZGVudGlmeSB0aGlzIGFwcGxpY2F0aW9uIHRvIHRoZSBzZXJ2aWNlLgogICAgICBJZiBub25lIGFyZSBzcGVjaWZpZWQsIHRoZSBjbGllbnQgd2lsbCBhdHRlbXB0IHRvIGFzY2VydGFpbgogICAgICB0aGUgY3JlZGVudGlhbHMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgICBwb29sOiAob3B0aW9uYWwpIHNlc3Npb24gcG9vbCB0byBiZSB1c2VkIGJ5IGRhdGFiYXNlLiBJZiBub3QgcGFzc2VkLAogICAgICBTcGFubmVyIENsb3VkIFNESyB1c2VzIHRoZSBCdXJzdHlQb29sIGJ5IGRlZmF1bHQuCiAgICAgIGBnb29nbGUuY2xvdWQuc3Bhbm5lci5CdXJzdHlQb29sYC4gUmVmOgogICAgICBodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9zcGFubmVyL2xhdGVzdC9kYXRhYmFzZS1hcGkuaHRtbD8jZ29vZ2xlLgogICAgICBjbG91ZC5zcGFubmVyX3YxLmRhdGFiYXNlLkRhdGFiYXNlCiAgICByZWFkX3RpbWVzdGFtcDogKG9wdGlvbmFsKSBBbiBpbnN0YW5jZSBvZiB0aGUgYGRhdGV0aW1lLmRhdGV0aW1lYCBvYmplY3QgdG8KICAgICAgZXhlY3V0ZSBhbGwgcmVhZHMgYXQgdGhlIGdpdmVuIHRpbWVzdGFtcC4KICAgIGV4YWN0X3N0YWxlbmVzczogKG9wdGlvbmFsKSBBbiBpbnN0YW5jZSBvZiB0aGUgYGRhdGV0aW1lLnRpbWVkZWx0YWAKICAgICAgb2JqZWN0LiBUaGVzZSB0aW1lc3RhbXAgYm91bmRzIGV4ZWN1dGUgcmVhZHMgYXQgYSB1c2VyLXNwZWNpZmllZAogICAgICB0aW1lc3RhbXAuCiAgIiIiCgogIGFzc2VydCBpc2luc3RhbmNlKHBiZWdpbiwgUEJlZ2luKQoKICByZXR1cm4gKAogICAgICBwYmVnaW4gfCBDcmVhdGUoWzFdKSB8IFBhckRvKAogICAgICAgICAgX0NyZWF0ZVRyYW5zYWN0aW9uRm4oCiAgICAgICAgICAgICAgcHJvamVjdF9pZCwKICAgICAgICAgICAgICBpbnN0YW5jZV9pZCwKICAgICAgICAgICAgICBkYXRhYmFzZV9pZCwKICAgICAgICAgICAgICBjcmVkZW50aWFscywKICAgICAgICAgICAgICBwb29sLAogICAgICAgICAgICAgIHJlYWRfdGltZXN0YW1wLAogICAgICAgICAgICAgIGV4YWN0X3N0YWxlbmVzcykpKQoKCkB3aXRoX2lucHV0X3R5cGVzKHR5cGluZy5EaWN0W3R5cGluZy5BbnksIHR5cGluZy5BbnldKQpAd2l0aF9vdXRwdXRfdHlwZXModHlwaW5nLkxpc3RbdHlwaW5nLkFueV0pCmNsYXNzIF9SZWFkRnJvbVBhcnRpdGlvbkZuKERvRm4pOgogICIiIgogIEEgRG9GbiB0byBwZXJmb3JtIHJlYWRzIGZyb20gdGhlIHBhcnRpdGlvbi4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc3Bhbm5lcl9jb25maWd1cmF0aW9uKToKICAgIHNlbGYuX3NwYW5uZXJfY29uZmlndXJhdGlvbiA9IHNwYW5uZXJfY29uZmlndXJhdGlvbgoKICBkZWYgc2V0dXAoc2VsZik6CiAgICBzcGFubmVyX2NsaWVudCA9IENsaWVudChzZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24ucHJvamVjdCkKICAgIGluc3RhbmNlID0gc3Bhbm5lcl9jbGllbnQuaW5zdGFuY2Uoc2VsZi5fc3Bhbm5lcl9jb25maWd1cmF0aW9uLmluc3RhbmNlKQogICAgc2VsZi5fZGF0YWJhc2UgPSBpbnN0YW5jZS5kYXRhYmFzZSgKICAgICAgICBzZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24uZGF0YWJhc2UsCiAgICAgICAgcG9vbD1zZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24ucG9vbCkKICAgIHNlbGYuX3NuYXBzaG90ID0gc2VsZi5fZGF0YWJhc2UuYmF0Y2hfc25hcHNob3QoCiAgICAgICAgKipzZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24uc25hcHNob3Rfb3B0aW9ucykKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLl9zbmFwc2hvdCA9IEJhdGNoU25hcHNob3QuZnJvbV9kaWN0KAogICAgICAgIHNlbGYuX2RhdGFiYXNlLCBlbGVtZW50Wyd0cmFuc2FjdGlvbl9pbmZvJ10pCgogICAgaWYgZWxlbWVudFsnaXNfc3FsJ10gaXMgVHJ1ZToKICAgICAgcmVhZF9hY3Rpb24gPSBzZWxmLl9zbmFwc2hvdC5wcm9jZXNzX3F1ZXJ5X2JhdGNoCiAgICBlbGlmIGVsZW1lbnRbJ2lzX3RhYmxlJ10gaXMgVHJ1ZToKICAgICAgcmVhZF9hY3Rpb24gPSBzZWxmLl9zbmFwc2hvdC5wcm9jZXNzX3JlYWRfYmF0Y2gKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAiUmVhZE9wZXJhdGlvbiBpcyBpbXByb3Blcmx5IGNvbmZpZ3VyZTogJXMiICUgc3RyKGVsZW1lbnQpKQoKICAgIGZvciByb3cgaW4gcmVhZF9hY3Rpb24oZWxlbWVudFsncGFydGl0aW9ucyddKToKICAgICAgeWllbGQgcm93CgogIGRlZiB0ZWFyZG93bihzZWxmKToKICAgIGlmIHNlbGYuX3NuYXBzaG90OgogICAgICBzZWxmLl9zbmFwc2hvdC5jbG9zZSgpCgoKQGV4cGVyaW1lbnRhbChleHRyYV9tZXNzYWdlPSJObyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIpCmNsYXNzIFJlYWRGcm9tU3Bhbm5lcihQVHJhbnNmb3JtKToKICAiIiIKICBBIFBUcmFuc2Zvcm0gdG8gcGVyZm9ybSByZWFkcyBmcm9tIGNsb3VkIHNwYW5uZXIuCiAgUmVhZEZyb21TcGFubmVyIHVzZXMgQmF0Y2hBUEkgdG8gcGVyZm9ybSBhbGwgcmVhZCBvcGVyYXRpb25zLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9pZCwgaW5zdGFuY2VfaWQsIGRhdGFiYXNlX2lkLCBwb29sPU5vbmUsCiAgICAgICAgICAgICAgIHJlYWRfdGltZXN0YW1wPU5vbmUsIGV4YWN0X3N0YWxlbmVzcz1Ob25lLCBjcmVkZW50aWFscz1Ob25lLAogICAgICAgICAgICAgICBzcWw9Tm9uZSwgcGFyYW1zPU5vbmUsIHBhcmFtX3R5cGVzPU5vbmUsICAjIHdpdGhfcXVlcnkKICAgICAgICAgICAgICAgdGFibGU9Tm9uZSwgY29sdW1ucz1Ob25lLCBpbmRleD0iIiwga2V5c2V0PU5vbmUsICAjIHdpdGhfdGFibGUKICAgICAgICAgICAgICAgcmVhZF9vcGVyYXRpb25zPU5vbmUsICAjIGZvciByZWFkIGFsbAogICAgICAgICAgICAgICB0cmFuc2FjdGlvbj1Ob25lCiAgICAgICAgICAgICAgKToKICAgICIiIgogICAgQSBQVHJhbnNmb3JtIHRoYXQgdXNlcyBTcGFubmVyIEJhdGNoIEFQSSB0byBwZXJmb3JtIHJlYWRzLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3RfaWQ6IENsb3VkIHNwYW5uZXIgcHJvamVjdCBpZC4gQmUgc3VyZSB0byB1c2UgdGhlIFByb2plY3QgSUQsCiAgICAgICAgbm90IHRoZSBQcm9qZWN0IE51bWJlci4KICAgICAgaW5zdGFuY2VfaWQ6IENsb3VkIHNwYW5uZXIgaW5zdGFuY2UgaWQuCiAgICAgIGRhdGFiYXNlX2lkOiBDbG91ZCBzcGFubmVyIGRhdGFiYXNlIGlkLgogICAgICBwb29sOiAob3B0aW9uYWwpIHNlc3Npb24gcG9vbCB0byBiZSB1c2VkIGJ5IGRhdGFiYXNlLiBJZiBub3QgcGFzc2VkLAogICAgICAgIFNwYW5uZXIgQ2xvdWQgU0RLIHVzZXMgdGhlIEJ1cnN0eVBvb2wgYnkgZGVmYXVsdC4KICAgICAgICBgZ29vZ2xlLmNsb3VkLnNwYW5uZXIuQnVyc3R5UG9vbGAuIFJlZjoKICAgICAgICBodHRwczovL2dvb2dsZWFwaXMuZGV2L3B5dGhvbi9zcGFubmVyL2xhdGVzdC9kYXRhYmFzZS1hcGkuaHRtbD8jZ29vZ2xlLgogICAgICAgIGNsb3VkLnNwYW5uZXJfdjEuZGF0YWJhc2UuRGF0YWJhc2UKICAgICAgcmVhZF90aW1lc3RhbXA6IChvcHRpb25hbCkgQW4gaW5zdGFuY2Ugb2YgdGhlIGBkYXRldGltZS5kYXRldGltZWAgb2JqZWN0CiAgICAgICAgdG8gZXhlY3V0ZSBhbGwgcmVhZHMgYXQgdGhlIGdpdmVuIHRpbWVzdGFtcC4gQnkgZGVmYXVsdCwgc2V0IHRvIGBOb25lYC4KICAgICAgZXhhY3Rfc3RhbGVuZXNzOiAob3B0aW9uYWwpIEFuIGluc3RhbmNlIG9mIHRoZSBgZGF0ZXRpbWUudGltZWRlbHRhYAogICAgICAgIG9iamVjdC4gVGhlc2UgdGltZXN0YW1wIGJvdW5kcyBleGVjdXRlIHJlYWRzIGF0IGEgdXNlci1zcGVjaWZpZWQKICAgICAgICB0aW1lc3RhbXAuIEJ5IGRlZmF1bHQsIHNldCB0byBgTm9uZWAuCiAgICAgIGNyZWRlbnRpYWxzOiAob3B0aW9uYWwpIFRoZSBhdXRob3JpemF0aW9uIGNyZWRlbnRpYWxzIHRvIGF0dGFjaCB0bwogICAgICAgIHJlcXVlc3RzLiBUaGVzZSBjcmVkZW50aWFscyBpZGVudGlmeSB0aGlzIGFwcGxpY2F0aW9uIHRvIHRoZSBzZXJ2aWNlLgogICAgICAgIElmIG5vbmUgYXJlIHNwZWNpZmllZCwgdGhlIGNsaWVudCB3aWxsIGF0dGVtcHQgdG8gYXNjZXJ0YWluCiAgICAgICAgdGhlIGNyZWRlbnRpYWxzIGZyb20gdGhlIGVudmlyb25tZW50LiBCeSBkZWZhdWx0LCBzZXQgdG8gYE5vbmVgLgogICAgICBzcWw6IChvcHRpb25hbCkgU1FMIHF1ZXJ5IHN0YXRlbWVudC4KICAgICAgcGFyYW1zOiAob3B0aW9uYWwpIFZhbHVlcyBmb3IgcGFyYW1ldGVyIHJlcGxhY2VtZW50LiBLZXlzIG11c3QgbWF0Y2ggdGhlCiAgICAgICAgbmFtZXMgdXNlZCBpbiBzcWwuIEJ5IGRlZmF1bHQsIHNldCB0byBgTm9uZWAuCiAgICAgIHBhcmFtX3R5cGVzOiAob3B0aW9uYWwpIG1hcHMgZXhwbGljaXQgdHlwZXMgZm9yIG9uZSBvciBtb3JlIHBhcmFtIHZhbHVlczsKICAgICAgICByZXF1aXJlZCBpZiBwYXJhbXMgYXJlIHBhc3NlZC4gQnkgZGVmYXVsdCwgc2V0IHRvIGBOb25lYC4KICAgICAgdGFibGU6IChvcHRpb25hbCkgTmFtZSBvZiB0aGUgdGFibGUgZnJvbSB3aGljaCB0byBmZXRjaCBkYXRhLiBCeQogICAgICAgIGRlZmF1bHQsIHNldCB0byBgTm9uZWAuCiAgICAgIGNvbHVtbnM6IChvcHRpb25hbCkgTGlzdCBvZiBuYW1lcyBvZiBjb2x1bW5zIHRvIGJlIHJldHJpZXZlZDsgcmVxdWlyZWQgaWYKICAgICAgICB0aGUgdGFibGUgaXMgcGFzc2VkLiBCeSBkZWZhdWx0LCBzZXQgdG8gYE5vbmVgLgogICAgICBpbmRleDogKG9wdGlvbmFsKSBuYW1lIG9mIGluZGV4IHRvIHVzZSwgcmF0aGVyIHRoYW4gdGhlIHRhYmxlJ3MgcHJpbWFyeQogICAgICAgIGtleS4gQnkgZGVmYXVsdCwgc2V0IHRvIGBOb25lYC4KICAgICAga2V5c2V0OiAob3B0aW9uYWwpIGtleXMgLyByYW5nZXMgaWRlbnRpZnlpbmcgcm93cyB0byBiZSByZXRyaWV2ZWQuIEJ5CiAgICAgICAgZGVmYXVsdCwgc2V0IHRvIGBOb25lYC4KICAgICAgcmVhZF9vcGVyYXRpb25zOiAob3B0aW9uYWwpIExpc3Qgb2YgdGhlIG9iamVjdHMgb2YgOmNsYXNzOmBSZWFkT3BlcmF0aW9uYAogICAgICAgIHRvIHBlcmZvcm0gcmVhZCBhbGwuIEJ5IGRlZmF1bHQsIHNldCB0byBgTm9uZWAuCiAgICAgIHRyYW5zYWN0aW9uOiAob3B0aW9uYWwpIFBUcmFuc2Zvcm0gb2YgdGhlIDptZXRoOmBjcmVhdGVfdHJhbnNhY3Rpb25gIHRvCiAgICAgICAgcGVyZm9ybSBuYWl2ZSByZWFkIG9uIGNsb3VkIHNwYW5uZXIuIEJ5IGRlZmF1bHQsIHNldCB0byBgTm9uZWAuCiAgICAiIiIKICAgIHNlbGYuX2NvbmZpZ3VyYXRpb24gPSBfQmVhbVNwYW5uZXJDb25maWd1cmF0aW9uKAogICAgICAgIHByb2plY3Q9cHJvamVjdF9pZCwKICAgICAgICBpbnN0YW5jZT1pbnN0YW5jZV9pZCwKICAgICAgICBkYXRhYmFzZT1kYXRhYmFzZV9pZCwKICAgICAgICBjcmVkZW50aWFscz1jcmVkZW50aWFscywKICAgICAgICBwb29sPXBvb2wsCiAgICAgICAgc25hcHNob3RfcmVhZF90aW1lc3RhbXA9cmVhZF90aW1lc3RhbXAsCiAgICAgICAgc25hcHNob3RfZXhhY3Rfc3RhbGVuZXNzPWV4YWN0X3N0YWxlbmVzcykKCiAgICBzZWxmLl9yZWFkX29wZXJhdGlvbnMgPSByZWFkX29wZXJhdGlvbnMKICAgIHNlbGYuX3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb24KCiAgICBpZiBzZWxmLl9yZWFkX29wZXJhdGlvbnMgaXMgTm9uZToKICAgICAgaWYgdGFibGUgaXMgbm90IE5vbmU6CiAgICAgICAgaWYgY29sdW1ucyBpcyBOb25lOgogICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ29sdW1ucyBhcmUgcmVxdWlyZWQgd2l0aCB0aGUgdGFibGUgbmFtZS4iKQogICAgICAgIHNlbGYuX3JlYWRfb3BlcmF0aW9ucyA9IFsKICAgICAgICAgICAgUmVhZE9wZXJhdGlvbi50YWJsZSgKICAgICAgICAgICAgICAgIHRhYmxlPXRhYmxlLCBjb2x1bW5zPWNvbHVtbnMsIGluZGV4PWluZGV4LCBrZXlzZXQ9a2V5c2V0KQogICAgICAgIF0KICAgICAgZWxpZiBzcWwgaXMgbm90IE5vbmU6CiAgICAgICAgc2VsZi5fcmVhZF9vcGVyYXRpb25zID0gWwogICAgICAgICAgICBSZWFkT3BlcmF0aW9uLnF1ZXJ5KAogICAgICAgICAgICAgICAgc3FsPXNxbCwgcGFyYW1zPXBhcmFtcywgcGFyYW1fdHlwZXM9cGFyYW1fdHlwZXMpCiAgICAgICAgXQoKICBkZWYgZXhwYW5kKHNlbGYsIHBiZWdpbik6CiAgICBpZiBzZWxmLl9yZWFkX29wZXJhdGlvbnMgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UocGJlZ2luLCBQQmVnaW4pOgogICAgICBwY29sbCA9IHBiZWdpbi5waXBlbGluZSB8IENyZWF0ZShzZWxmLl9yZWFkX29wZXJhdGlvbnMpCiAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHBiZWdpbiwgUEJlZ2luKToKICAgICAgaWYgc2VsZi5fcmVhZF9vcGVyYXRpb25zIGlzIG5vdCBOb25lOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICJSZWFkIG9wZXJhdGlvbiBpbiB0aGUgY29uc3RydWN0b3Igb25seSB3b3JrcyB3aXRoICIKICAgICAgICAgICAgInRoZSByb290IG9mIHRoZSBwaXBlbGluZS4iKQogICAgICBwY29sbCA9IHBiZWdpbgogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJTcGFubmVyIHJlcXVpcmVkIHJlYWQgb3BlcmF0aW9uLCBzcWwgb3IgdGFibGUgIgogICAgICAgICAgIndpdGggY29sdW1ucy4iKQoKICAgIGlmIHNlbGYuX3RyYW5zYWN0aW9uIGlzIE5vbmU6CiAgICAgICMgcmVhZGluZyBhcyBiYXRjaCByZWFkIHVzaW5nIHRoZSBzcGFubmVyIHBhcnRpdGlvbmluZyBxdWVyeSB0byBjcmVhdGUKICAgICAgIyBiYXRjaGVzLgogICAgICBwID0gKAogICAgICAgICAgcGNvbGwKICAgICAgICAgIHwgJ0dlbmVyYXRlIFBhcnRpdGlvbnMnID4+IFBhckRvKAogICAgICAgICAgICAgIF9DcmVhdGVSZWFkUGFydGl0aW9ucyhzcGFubmVyX2NvbmZpZ3VyYXRpb249c2VsZi5fY29uZmlndXJhdGlvbikpCiAgICAgICAgICB8ICdSZXNodWZmbGUnID4+IFJlc2h1ZmZsZSgpCiAgICAgICAgICB8ICdSZWFkIEZyb20gUGFydGl0aW9ucycgPj4gUGFyRG8oCiAgICAgICAgICAgICAgX1JlYWRGcm9tUGFydGl0aW9uRm4oc3Bhbm5lcl9jb25maWd1cmF0aW9uPXNlbGYuX2NvbmZpZ3VyYXRpb24pKSkKICAgIGVsc2U6CiAgICAgICMgcmVhZGluZyBhcyBuYWl2ZSByZWFkLCBpbiB3aGljaCB3ZSBkb24ndCBtYWtlIGJhdGNoZXMgYW5kIGV4ZWN1dGUgdGhlCiAgICAgICMgcXVlcmllcyBhcyBhIHNpbmdsZSByZWFkLgogICAgICBwID0gKAogICAgICAgICAgcGNvbGwKICAgICAgICAgIHwgJ1Jlc2h1ZmZsZScgPj4gUmVzaHVmZmxlKCkud2l0aF9pbnB1dF90eXBlcyhSZWFkT3BlcmF0aW9uKQogICAgICAgICAgfCAnUGVyZm9ybSBSZWFkJyA+PiBQYXJEbygKICAgICAgICAgICAgICBfTmFpdmVTcGFubmVyUmVhZERvRm4oc3Bhbm5lcl9jb25maWd1cmF0aW9uPXNlbGYuX2NvbmZpZ3VyYXRpb24pLAogICAgICAgICAgICAgIEFzU2luZ2xldG9uKHNlbGYuX3RyYW5zYWN0aW9uKSkpCiAgICByZXR1cm4gcAoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmVzID0gZGljdCgpCiAgICBzcWwgPSBbXQogICAgdGFibGUgPSBbXQogICAgaWYgc2VsZi5fcmVhZF9vcGVyYXRpb25zIGlzIG5vdCBOb25lOgogICAgICBmb3Igcm8gaW4gc2VsZi5fcmVhZF9vcGVyYXRpb25zOgogICAgICAgIGlmIHJvLmlzX3NxbCBpcyBUcnVlOgogICAgICAgICAgc3FsLmFwcGVuZChyby5rd2FyZ3MpCiAgICAgICAgZWxpZiByby5pc190YWJsZSBpcyBUcnVlOgogICAgICAgICAgdGFibGUuYXBwZW5kKHJvLmt3YXJncykKCiAgICAgIGlmIHNxbDoKICAgICAgICByZXNbJ3NxbCddID0gRGlzcGxheURhdGFJdGVtKHN0cihzcWwpLCBsYWJlbD0nU3FsJykKICAgICAgaWYgdGFibGU6CiAgICAgICAgcmVzWyd0YWJsZSddID0gRGlzcGxheURhdGFJdGVtKHN0cih0YWJsZSksIGxhYmVsPSdUYWJsZScpCgogICAgaWYgc2VsZi5fdHJhbnNhY3Rpb246CiAgICAgIHJlc1sndHJhbnNhY3Rpb24nXSA9IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICAgIHN0cihzZWxmLl90cmFuc2FjdGlvbiksIGxhYmVsPSd0cmFuc2FjdGlvbicpCgogICAgcmV0dXJuIHJlcwoKCkBleHBlcmltZW50YWwoZXh0cmFfbWVzc2FnZT0iTm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iKQpjbGFzcyBXcml0ZVRvU3Bhbm5lcihQVHJhbnNmb3JtKToKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIHByb2plY3RfaWQsCiAgICAgIGluc3RhbmNlX2lkLAogICAgICBkYXRhYmFzZV9pZCwKICAgICAgcG9vbD1Ob25lLAogICAgICBjcmVkZW50aWFscz1Ob25lLAogICAgICBtYXhfYmF0Y2hfc2l6ZV9ieXRlcz0xMDQ4NTc2LAogICAgICBtYXhfbnVtYmVyX3Jvd3M9NTAsCiAgICAgIG1heF9udW1iZXJfY2VsbHM9NTAwKToKICAgICIiIgogICAgQSBQVHJhbnNmb3JtIHRvIHdyaXRlIG9udG8gR29vZ2xlIENsb3VkIFNwYW5uZXIuCgogICAgQXJnczoKICAgICAgcHJvamVjdF9pZDogQ2xvdWQgc3Bhbm5lciBwcm9qZWN0IGlkLiBCZSBzdXJlIHRvIHVzZSB0aGUgUHJvamVjdCBJRCwKICAgICAgICBub3QgdGhlIFByb2plY3QgTnVtYmVyLgogICAgICBpbnN0YW5jZV9pZDogQ2xvdWQgc3Bhbm5lciBpbnN0YW5jZSBpZC4KICAgICAgZGF0YWJhc2VfaWQ6IENsb3VkIHNwYW5uZXIgZGF0YWJhc2UgaWQuCiAgICAgIG1heF9iYXRjaF9zaXplX2J5dGVzOiAob3B0aW9uYWwpIFNwbGl0IHRoZSBtdXRhdGlvbnMgaW50byBiYXRjaGVzIHRvCiAgICAgICAgcmVkdWNlIHRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb24gc2VudCB0byBTcGFubmVyLiBCeSBkZWZhdWx0IGl0IGlzCiAgICAgICAgc2V0IHRvIDEgTUIgKDEwNDg1NzYgQnl0ZXMpLgogICAgICBtYXhfbnVtYmVyX3Jvd3M6IChvcHRpb25hbCkgU3BsaXQgdGhlIG11dGF0aW9ucyBpbnRvIGJhdGNoZXMgdG8KICAgICAgICByZWR1Y2UgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBzZW50IHRvIFNwYW5uZXIuIEJ5IGRlZmF1bHQgaXQgaXMKICAgICAgICBzZXQgdG8gNTAgcm93cyBwZXIgYmF0Y2guCiAgICAgIG1heF9udW1iZXJfY2VsbHM6IChvcHRpb25hbCkgU3BsaXQgdGhlIG11dGF0aW9ucyBpbnRvIGJhdGNoZXMgdG8KICAgICAgICByZWR1Y2UgdGhlIG51bWJlciBvZiB0cmFuc2FjdGlvbiBzZW50IHRvIFNwYW5uZXIuIEJ5IGRlZmF1bHQgaXQgaXMKICAgICAgICBzZXQgdG8gNTAwIGNlbGxzIHBlciBiYXRjaC4KICAgICIiIgogICAgc2VsZi5fY29uZmlndXJhdGlvbiA9IF9CZWFtU3Bhbm5lckNvbmZpZ3VyYXRpb24oCiAgICAgICAgcHJvamVjdD1wcm9qZWN0X2lkLAogICAgICAgIGluc3RhbmNlPWluc3RhbmNlX2lkLAogICAgICAgIGRhdGFiYXNlPWRhdGFiYXNlX2lkLAogICAgICAgIGNyZWRlbnRpYWxzPWNyZWRlbnRpYWxzLAogICAgICAgIHBvb2w9cG9vbCwKICAgICAgICBzbmFwc2hvdF9yZWFkX3RpbWVzdGFtcD1Ob25lLAogICAgICAgIHNuYXBzaG90X2V4YWN0X3N0YWxlbmVzcz1Ob25lKQogICAgc2VsZi5fbWF4X2JhdGNoX3NpemVfYnl0ZXMgPSBtYXhfYmF0Y2hfc2l6ZV9ieXRlcwogICAgc2VsZi5fbWF4X251bWJlcl9yb3dzID0gbWF4X251bWJlcl9yb3dzCiAgICBzZWxmLl9tYXhfbnVtYmVyX2NlbGxzID0gbWF4X251bWJlcl9jZWxscwogICAgc2VsZi5fZGF0YWJhc2VfaWQgPSBkYXRhYmFzZV9pZAogICAgc2VsZi5fcHJvamVjdF9pZCA9IHByb2plY3RfaWQKICAgIHNlbGYuX2luc3RhbmNlX2lkID0gaW5zdGFuY2VfaWQKICAgIHNlbGYuX3Bvb2wgPSBwb29sCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXMgPSB7CiAgICAgICAgJ3Byb2plY3RfaWQnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5fcHJvamVjdF9pZCwgbGFiZWw9J1Byb2plY3QgSWQnKSwKICAgICAgICAnaW5zdGFuY2VfaWQnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5faW5zdGFuY2VfaWQsIGxhYmVsPSdJbnN0YW5jZSBJZCcpLAogICAgICAgICdwb29sJzogRGlzcGxheURhdGFJdGVtKHN0cihzZWxmLl9wb29sKSwgbGFiZWw9J1Bvb2wnKSwKICAgICAgICAnZGF0YWJhc2UnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5fZGF0YWJhc2VfaWQsIGxhYmVsPSdEYXRhYmFzZScpLAogICAgICAgICdiYXRjaF9zaXplJzogRGlzcGxheURhdGFJdGVtKAogICAgICAgICAgICBzZWxmLl9tYXhfYmF0Y2hfc2l6ZV9ieXRlcywgbGFiZWw9IkJhdGNoIFNpemUiKSwKICAgICAgICAnbWF4X251bWJlcl9yb3dzJzogRGlzcGxheURhdGFJdGVtKAogICAgICAgICAgICBzZWxmLl9tYXhfbnVtYmVyX3Jvd3MsIGxhYmVsPSJNYXggUm93cyIpLAogICAgICAgICdtYXhfbnVtYmVyX2NlbGxzJzogRGlzcGxheURhdGFJdGVtKAogICAgICAgICAgICBzZWxmLl9tYXhfbnVtYmVyX2NlbGxzLCBsYWJlbD0iTWF4IENlbGxzIiksCiAgICB9CiAgICByZXR1cm4gcmVzCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuICgKICAgICAgICBwY29sbAogICAgICAgIHwgIm1ha2UgYmF0Y2hlcyIgPj4gX1dyaXRlR3JvdXAoCiAgICAgICAgICAgIG1heF9iYXRjaF9zaXplX2J5dGVzPXNlbGYuX21heF9iYXRjaF9zaXplX2J5dGVzLAogICAgICAgICAgICBtYXhfbnVtYmVyX3Jvd3M9c2VsZi5fbWF4X251bWJlcl9yb3dzLAogICAgICAgICAgICBtYXhfbnVtYmVyX2NlbGxzPXNlbGYuX21heF9udW1iZXJfY2VsbHMpCiAgICAgICAgfAogICAgICAgICdXcml0aW5nIHRvIHNwYW5uZXInID4+IFBhckRvKF9Xcml0ZVRvU3Bhbm5lckRvRm4oc2VsZi5fY29uZmlndXJhdGlvbikpKQoKCmNsYXNzIF9NdXRhdG9yKG5hbWVkdHVwbGUoJ19NdXRhdG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICBbIm11dGF0aW9uIiwgIm9wZXJhdGlvbiIsICJrd2FyZ3MiLCAicm93cyIsICJjZWxscyJdKQogICAgICAgICAgICAgICApOgogIF9fc2xvdHNfXyA9ICgpCgogIEBwcm9wZXJ0eQogIGRlZiBieXRlX3NpemUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5tdXRhdGlvbi5CeXRlU2l6ZSgpCgoKY2xhc3MgTXV0YXRpb25Hcm91cChkZXF1ZSk6CiAgIiIiCiAgQSBCdW5kbGUgb2YgU3Bhbm5lciBNdXRhdGlvbnMgKF9NdXRhdG9yKS4KICAiIiIKICBAcHJvcGVydHkKICBkZWYgaW5mbyhzZWxmKToKICAgIGNlbGxzID0gMAogICAgcm93cyA9IDAKICAgIGJ5dGVzID0gMAogICAgZm9yIG0gaW4gc2VsZi5fX2l0ZXJfXygpOgogICAgICBieXRlcyArPSBtLmJ5dGVfc2l6ZQogICAgICByb3dzICs9IG0ucm93cwogICAgICBjZWxscyArPSBtLmNlbGxzCiAgICByZXR1cm4geyJyb3dzIjogcm93cywgImNlbGxzIjogY2VsbHMsICJieXRlX3NpemUiOiBieXRlc30KCiAgZGVmIHByaW1hcnkoc2VsZik6CiAgICByZXR1cm4gbmV4dChzZWxmLl9faXRlcl9fKCkpCgoKY2xhc3MgV3JpdGVNdXRhdGlvbihvYmplY3QpOgoKICBfT1BFUkFUSU9OX0RFTEVURSA9ICJkZWxldGUiCiAgX09QRVJBVElPTl9JTlNFUlQgPSAiaW5zZXJ0IgogIF9PUEVSQVRJT05fSU5TRVJUX09SX1VQREFURSA9ICJpbnNlcnRfb3JfdXBkYXRlIgogIF9PUEVSQVRJT05fUkVQTEFDRSA9ICJyZXBsYWNlIgogIF9PUEVSQVRJT05fVVBEQVRFID0gInVwZGF0ZSIKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBpbnNlcnQ9Tm9uZSwKICAgICAgdXBkYXRlPU5vbmUsCiAgICAgIGluc2VydF9vcl91cGRhdGU9Tm9uZSwKICAgICAgcmVwbGFjZT1Ob25lLAogICAgICBkZWxldGU9Tm9uZSwKICAgICAgY29sdW1ucz1Ob25lLAogICAgICB2YWx1ZXM9Tm9uZSwKICAgICAga2V5c2V0PU5vbmUpOgogICAgIiIiCiAgICBBIGNvbnZlbmllbnQgY2xhc3MgdG8gY3JlYXRlIFNwYW5uZXIgTXV0YXRpb25zIGZvciBXcml0ZS4gVXNlciBjYW4gcHJvdmlkZQogICAgdGhlIG9wZXJhdGlvbiB2aWEgY29uc3RydWN0b3Igb3IgdmlhIHN0YXRpYyBtZXRob2RzLgoKICAgIE5vdGU6IElmIGEgdXNlciBwYXNzaW5nIHRoZSBvcGVyYXRpb24gdmlhIGNvbnN0cnVjdGlvbiwgbWFrZSBzdXJlIHRoYXQgaXQKICAgIHdpbGwgb25seSBhY2NlcHQgb25lIG9wZXJhdGlvbiBhdCBhIHRpbWUuIEZvciBleGFtcGxlLCBpZiBhIHVzZXIgcGFzc2luZwogICAgYSB0YWJsZSBuYW1lIGluIHRoZSBgaW5zZXJ0YCBwYXJhbWV0ZXIsIGFuZCBoZSBhbHNvIHBhc3NlcyB0aGUgYHVwZGF0ZWAKICAgIHBhcmFtZXRlciB2YWx1ZSwgdGhpcyB3aWxsIGNhdXNlIGFuIGVycm9yLgoKICAgIEFyZ3M6CiAgICAgIGluc2VydDogKE9wdGlvbmFsKSBOYW1lIG9mIHRoZSB0YWJsZSBpbiB3aGljaCByb3dzIHdpbGwgYmUgaW5zZXJ0ZWQuCiAgICAgIHVwZGF0ZTogKE9wdGlvbmFsKSBOYW1lIG9mIHRoZSB0YWJsZSBpbiB3aGljaCBleGlzdGluZyByb3dzIHdpbGwgYmUKICAgICAgICB1cGRhdGVkLgogICAgICBpbnNlcnRfb3JfdXBkYXRlOiAoT3B0aW9uYWwpIFRhYmxlIG5hbWUgaW4gd2hpY2ggcm93cyB3aWxsIGJlIHdyaXR0ZW4uCiAgICAgICAgTGlrZSBpbnNlcnQsIGV4Y2VwdCB0aGF0IGlmIHRoZSByb3cgYWxyZWFkeSBleGlzdHMsIHRoZW4gaXRzIGNvbHVtbgogICAgICAgIHZhbHVlcyBhcmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgb25lcyBwcm92aWRlZC4gQW55IGNvbHVtbiB2YWx1ZXMgbm90CiAgICAgICAgZXhwbGljaXRseSB3cml0dGVuIGFyZSBwcmVzZXJ2ZWQuCiAgICAgIHJlcGxhY2U6IChPcHRpb25hbCkgVGFibGUgbmFtZSBpbiB3aGljaCByb3dzIHdpbGwgYmUgcmVwbGFjZWQuIExpa2UKICAgICAgICBpbnNlcnQsIGV4Y2VwdCB0aGF0IGlmIHRoZSByb3cgYWxyZWFkeSBleGlzdHMsIGl0IGlzIGRlbGV0ZWQsIGFuZCB0aGUKICAgICAgICBjb2x1bW4gdmFsdWVzIHByb3ZpZGVkIGFyZSBpbnNlcnRlZCBpbnN0ZWFkLiBVbmxpa2UgYGluc2VydF9vcl91cGRhdGVgLAogICAgICAgIHRoaXMgbWVhbnMgYW55IHZhbHVlcyBub3QgZXhwbGljaXRseSB3cml0dGVuIGJlY29tZSBgTlVMTGAuCiAgICAgIGRlbGV0ZTogKE9wdGlvbmFsKSBUYWJsZSBuYW1lIGZyb20gd2hpY2ggcm93cyB3aWxsIGJlIGRlbGV0ZWQuIFN1Y2NlZWRzCiAgICAgICAgd2hldGhlciBvciBub3QgdGhlIG5hbWVkIHJvd3Mgd2VyZSBwcmVzZW50LgogICAgICBjb2x1bW5zOiBUaGUgbmFtZXMgb2YgdGhlIGNvbHVtbnMgaW4gdGFibGUgdG8gYmUgd3JpdHRlbi4gVGhlIGxpc3Qgb2YKICAgICAgICBjb2x1bW5zIG11c3QgY29udGFpbiBlbm91Z2ggY29sdW1ucyB0byBhbGxvdyBDbG91ZCBTcGFubmVyIHRvIGRlcml2ZQogICAgICAgIHZhbHVlcyBmb3IgYWxsIHByaW1hcnkga2V5IGNvbHVtbnMgaW4gdGhlIHJvdyhzKSB0byBiZSBtb2RpZmllZC4KICAgICAgdmFsdWVzOiBUaGUgdmFsdWVzIHRvIGJlIHdyaXR0ZW4uIGB2YWx1ZXNgIGNhbiBjb250YWluIG1vcmUgdGhhbiBvbmUKICAgICAgICBsaXN0IG9mIHZhbHVlcy4gSWYgaXQgZG9lcywgdGhlbiBtdWx0aXBsZSByb3dzIGFyZSB3cml0dGVuLCBvbmUgZm9yCiAgICAgICAgZWFjaCBlbnRyeSBpbiBgdmFsdWVzYC4gRWFjaCBsaXN0IGluIGB2YWx1ZXNgIG11c3QgaGF2ZSBleGFjdGx5IGFzCiAgICAgICAgbWFueSBlbnRyaWVzIGFzIHRoZXJlIGFyZSBlbnRyaWVzIGluIGNvbHVtbnMgYWJvdmUuIFNlbmRpbmcgbXVsdGlwbGUKICAgICAgICBsaXN0cyBpcyBlcXVpdmFsZW50IHRvIHNlbmRpbmcgbXVsdGlwbGUgTXV0YXRpb25zLCBlYWNoIGNvbnRhaW5pbmcgb25lCiAgICAgICAgYHZhbHVlc2AgZW50cnkgYW5kIHJlcGVhdGluZyB0YWJsZSBhbmQgY29sdW1ucy4KICAgICAga2V5c2V0OiAoT3B0aW9uYWwpIFRoZSBwcmltYXJ5IGtleXMgb2YgdGhlIHJvd3Mgd2l0aGluIHRhYmxlIHRvIGRlbGV0ZS4KICAgICAgICBEZWxldGUgaXMgaWRlbXBvdGVudC4gVGhlIHRyYW5zYWN0aW9uIHdpbGwgc3VjY2VlZCBldmVuIGlmIHNvbWUgb3IKICAgICAgICBhbGwgcm93cyBkbyBub3QgZXhpc3QuCiAgICAiIiIKICAgIHNlbGYuX2NvbHVtbnMgPSBjb2x1bW5zCiAgICBzZWxmLl92YWx1ZXMgPSB2YWx1ZXMKICAgIHNlbGYuX2tleXNldCA9IGtleXNldAoKICAgIHNlbGYuX2luc2VydCA9IGluc2VydAogICAgc2VsZi5fdXBkYXRlID0gdXBkYXRlCiAgICBzZWxmLl9pbnNlcnRfb3JfdXBkYXRlID0gaW5zZXJ0X29yX3VwZGF0ZQogICAgc2VsZi5fcmVwbGFjZSA9IHJlcGxhY2UKICAgIHNlbGYuX2RlbGV0ZSA9IGRlbGV0ZQoKICAgIGlmIHN1bShbMSBmb3IgeCBpbiBbc2VsZi5faW5zZXJ0LAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luc2VydF9vcl91cGRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlcGxhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlbGV0ZV0gaWYgeCBpcyBub3QgTm9uZV0pICE9IDE6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAiTm8gb3IgbW9yZSB0aGFuIG9uZSB3cml0ZSBtdXRhdGlvbiBvcGVyYXRpb24gIgogICAgICAgICAgInByb3ZpZGVkOiA8JXM6ICVzPiIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHN0cihzZWxmLl9fZGljdF9fKSkpCgogIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgc2VsZi5faW5zZXJ0IGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gV3JpdGVNdXRhdGlvbi5pbnNlcnQoCiAgICAgICAgICB0YWJsZT1zZWxmLl9pbnNlcnQsIGNvbHVtbnM9c2VsZi5fY29sdW1ucywgdmFsdWVzPXNlbGYuX3ZhbHVlcykKICAgIGVsaWYgc2VsZi5fdXBkYXRlIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gV3JpdGVNdXRhdGlvbi51cGRhdGUoCiAgICAgICAgICB0YWJsZT1zZWxmLl91cGRhdGUsIGNvbHVtbnM9c2VsZi5fY29sdW1ucywgdmFsdWVzPXNlbGYuX3ZhbHVlcykKICAgIGVsaWYgc2VsZi5faW5zZXJ0X29yX3VwZGF0ZSBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIFdyaXRlTXV0YXRpb24uaW5zZXJ0X29yX3VwZGF0ZSgKICAgICAgICAgIHRhYmxlPXNlbGYuX2luc2VydF9vcl91cGRhdGUsCiAgICAgICAgICBjb2x1bW5zPXNlbGYuX2NvbHVtbnMsCiAgICAgICAgICB2YWx1ZXM9c2VsZi5fdmFsdWVzKQogICAgZWxpZiBzZWxmLl9yZXBsYWNlIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gV3JpdGVNdXRhdGlvbi5yZXBsYWNlKAogICAgICAgICAgdGFibGU9c2VsZi5fcmVwbGFjZSwgY29sdW1ucz1zZWxmLl9jb2x1bW5zLCB2YWx1ZXM9c2VsZi5fdmFsdWVzKQogICAgZWxpZiBzZWxmLl9kZWxldGUgaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiBXcml0ZU11dGF0aW9uLmRlbGV0ZSh0YWJsZT1zZWxmLl9kZWxldGUsIGtleXNldD1zZWxmLl9rZXlzZXQpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgaW5zZXJ0KHRhYmxlLCBjb2x1bW5zLCB2YWx1ZXMpOgogICAgIiIiSW5zZXJ0IG9uZSBvciBtb3JlIG5ldyB0YWJsZSByb3dzLgoKICAgIEFyZ3M6CiAgICAgIHRhYmxlOiBOYW1lIG9mIHRoZSB0YWJsZSB0byBiZSBtb2RpZmllZC4KICAgICAgY29sdW1uczogTmFtZSBvZiB0aGUgdGFibGUgY29sdW1ucyB0byBiZSBtb2RpZmllZC4KICAgICAgdmFsdWVzOiBWYWx1ZXMgdG8gYmUgbW9kaWZpZWQuCiAgICAiIiIKICAgIHJvd3MgPSBsZW4odmFsdWVzKQogICAgY2VsbHMgPSBsZW4oY29sdW1ucykgKiBsZW4odmFsdWVzKQogICAgcmV0dXJuIF9NdXRhdG9yKAogICAgICAgIG11dGF0aW9uPU11dGF0aW9uKGluc2VydD1iYXRjaC5fbWFrZV93cml0ZV9wYih0YWJsZSwgY29sdW1ucywgdmFsdWVzKSksCiAgICAgICAgb3BlcmF0aW9uPVdyaXRlTXV0YXRpb24uX09QRVJBVElPTl9JTlNFUlQsCiAgICAgICAgcm93cz1yb3dzLAogICAgICAgIGNlbGxzPWNlbGxzLAogICAgICAgIGt3YXJncz17CiAgICAgICAgICAgICJ0YWJsZSI6IHRhYmxlLCAiY29sdW1ucyI6IGNvbHVtbnMsICJ2YWx1ZXMiOiB2YWx1ZXMKICAgICAgICB9KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHVwZGF0ZSh0YWJsZSwgY29sdW1ucywgdmFsdWVzKToKICAgICIiIlVwZGF0ZSBvbmUgb3IgbW9yZSBleGlzdGluZyB0YWJsZSByb3dzLgoKICAgIEFyZ3M6CiAgICAgIHRhYmxlOiBOYW1lIG9mIHRoZSB0YWJsZSB0byBiZSBtb2RpZmllZC4KICAgICAgY29sdW1uczogTmFtZSBvZiB0aGUgdGFibGUgY29sdW1ucyB0byBiZSBtb2RpZmllZC4KICAgICAgdmFsdWVzOiBWYWx1ZXMgdG8gYmUgbW9kaWZpZWQuCiAgICAiIiIKICAgIHJvd3MgPSBsZW4odmFsdWVzKQogICAgY2VsbHMgPSBsZW4oY29sdW1ucykgKiBsZW4odmFsdWVzKQogICAgcmV0dXJuIF9NdXRhdG9yKAogICAgICAgIG11dGF0aW9uPU11dGF0aW9uKHVwZGF0ZT1iYXRjaC5fbWFrZV93cml0ZV9wYih0YWJsZSwgY29sdW1ucywgdmFsdWVzKSksCiAgICAgICAgb3BlcmF0aW9uPVdyaXRlTXV0YXRpb24uX09QRVJBVElPTl9VUERBVEUsCiAgICAgICAgcm93cz1yb3dzLAogICAgICAgIGNlbGxzPWNlbGxzLAogICAgICAgIGt3YXJncz17CiAgICAgICAgICAgICJ0YWJsZSI6IHRhYmxlLCAiY29sdW1ucyI6IGNvbHVtbnMsICJ2YWx1ZXMiOiB2YWx1ZXMKICAgICAgICB9KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGluc2VydF9vcl91cGRhdGUodGFibGUsIGNvbHVtbnMsIHZhbHVlcyk6CiAgICAiIiJJbnNlcnQvdXBkYXRlIG9uZSBvciBtb3JlIHRhYmxlIHJvd3MuCiAgICBBcmdzOgogICAgICB0YWJsZTogTmFtZSBvZiB0aGUgdGFibGUgdG8gYmUgbW9kaWZpZWQuCiAgICAgIGNvbHVtbnM6IE5hbWUgb2YgdGhlIHRhYmxlIGNvbHVtbnMgdG8gYmUgbW9kaWZpZWQuCiAgICAgIHZhbHVlczogVmFsdWVzIHRvIGJlIG1vZGlmaWVkLgogICAgIiIiCiAgICByb3dzID0gbGVuKHZhbHVlcykKICAgIGNlbGxzID0gbGVuKGNvbHVtbnMpICogbGVuKHZhbHVlcykKICAgIHJldHVybiBfTXV0YXRvcigKICAgICAgICBtdXRhdGlvbj1NdXRhdGlvbigKICAgICAgICAgICAgaW5zZXJ0X29yX3VwZGF0ZT1iYXRjaC5fbWFrZV93cml0ZV9wYih0YWJsZSwgY29sdW1ucywgdmFsdWVzKSksCiAgICAgICAgb3BlcmF0aW9uPVdyaXRlTXV0YXRpb24uX09QRVJBVElPTl9JTlNFUlRfT1JfVVBEQVRFLAogICAgICAgIHJvd3M9cm93cywKICAgICAgICBjZWxscz1jZWxscywKICAgICAgICBrd2FyZ3M9ewogICAgICAgICAgICAidGFibGUiOiB0YWJsZSwgImNvbHVtbnMiOiBjb2x1bW5zLCAidmFsdWVzIjogdmFsdWVzCiAgICAgICAgfSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiByZXBsYWNlKHRhYmxlLCBjb2x1bW5zLCB2YWx1ZXMpOgogICAgIiIiUmVwbGFjZSBvbmUgb3IgbW9yZSB0YWJsZSByb3dzLgoKICAgIEFyZ3M6CiAgICAgIHRhYmxlOiBOYW1lIG9mIHRoZSB0YWJsZSB0byBiZSBtb2RpZmllZC4KICAgICAgY29sdW1uczogTmFtZSBvZiB0aGUgdGFibGUgY29sdW1ucyB0byBiZSBtb2RpZmllZC4KICAgICAgdmFsdWVzOiBWYWx1ZXMgdG8gYmUgbW9kaWZpZWQuCiAgICAiIiIKICAgIHJvd3MgPSBsZW4odmFsdWVzKQogICAgY2VsbHMgPSBsZW4oY29sdW1ucykgKiBsZW4odmFsdWVzKQogICAgcmV0dXJuIF9NdXRhdG9yKAogICAgICAgIG11dGF0aW9uPU11dGF0aW9uKHJlcGxhY2U9YmF0Y2guX21ha2Vfd3JpdGVfcGIodGFibGUsIGNvbHVtbnMsIHZhbHVlcykpLAogICAgICAgIG9wZXJhdGlvbj1Xcml0ZU11dGF0aW9uLl9PUEVSQVRJT05fUkVQTEFDRSwKICAgICAgICByb3dzPXJvd3MsCiAgICAgICAgY2VsbHM9Y2VsbHMsCiAgICAgICAga3dhcmdzPXsKICAgICAgICAgICAgInRhYmxlIjogdGFibGUsICJjb2x1bW5zIjogY29sdW1ucywgInZhbHVlcyI6IHZhbHVlcwogICAgICAgIH0pCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZGVsZXRlKHRhYmxlLCBrZXlzZXQpOgogICAgIiIiRGVsZXRlIG9uZSBvciBtb3JlIHRhYmxlIHJvd3MuCgogICAgQXJnczoKICAgICAgdGFibGU6IE5hbWUgb2YgdGhlIHRhYmxlIHRvIGJlIG1vZGlmaWVkLgogICAgICBrZXlzZXQ6IEtleXMvcmFuZ2VzIGlkZW50aWZ5aW5nIHJvd3MgdG8gZGVsZXRlLgogICAgIiIiCiAgICBkZWxldGUgPSBNdXRhdGlvbi5EZWxldGUodGFibGU9dGFibGUsIGtleV9zZXQ9a2V5c2V0Ll90b19wYigpKQogICAgcmV0dXJuIF9NdXRhdG9yKAogICAgICAgIG11dGF0aW9uPU11dGF0aW9uKGRlbGV0ZT1kZWxldGUpLAogICAgICAgIHJvd3M9MCwKICAgICAgICBjZWxscz0wLAogICAgICAgIG9wZXJhdGlvbj1Xcml0ZU11dGF0aW9uLl9PUEVSQVRJT05fREVMRVRFLAogICAgICAgIGt3YXJncz17CiAgICAgICAgICAgICJ0YWJsZSI6IHRhYmxlLCAia2V5c2V0Ijoga2V5c2V0CiAgICAgICAgfSkKCgpAd2l0aF9pbnB1dF90eXBlcyh0eXBpbmcuVW5pb25bTXV0YXRpb25Hcm91cCwgVGFnZ2VkT3V0cHV0XSkKQHdpdGhfb3V0cHV0X3R5cGVzKE11dGF0aW9uR3JvdXApCmNsYXNzIF9CYXRjaEZuKERvRm4pOgogICIiIgogIEJhdGNoZXMgbXV0YXRpb25zIHRvZ2V0aGVyLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhfYmF0Y2hfc2l6ZV9ieXRlcywgbWF4X251bWJlcl9yb3dzLCBtYXhfbnVtYmVyX2NlbGxzKToKICAgIHNlbGYuX21heF9iYXRjaF9zaXplX2J5dGVzID0gbWF4X2JhdGNoX3NpemVfYnl0ZXMKICAgIHNlbGYuX21heF9udW1iZXJfcm93cyA9IG1heF9udW1iZXJfcm93cwogICAgc2VsZi5fbWF4X251bWJlcl9jZWxscyA9IG1heF9udW1iZXJfY2VsbHMKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX2JhdGNoID0gTXV0YXRpb25Hcm91cCgpCiAgICBzZWxmLl9zaXplX2luX2J5dGVzID0gMAogICAgc2VsZi5fcm93cyA9IDAKICAgIHNlbGYuX2NlbGxzID0gMAoKICBkZWYgX3Jlc2V0X2NvdW50KHNlbGYpOgogICAgc2VsZi5fYmF0Y2ggPSBNdXRhdGlvbkdyb3VwKCkKICAgIHNlbGYuX3NpemVfaW5fYnl0ZXMgPSAwCiAgICBzZWxmLl9yb3dzID0gMAogICAgc2VsZi5fY2VsbHMgPSAwCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgbWdfaW5mbyA9IGVsZW1lbnQuaW5mbwoKICAgIGlmIG1nX2luZm9bJ2J5dGVfc2l6ZSddICsgc2VsZi5fc2l6ZV9pbl9ieXRlcyA+IHNlbGYuX21heF9iYXRjaF9zaXplX2J5dGVzIFwKICAgICAgICBvciBtZ19pbmZvWydjZWxscyddICsgc2VsZi5fY2VsbHMgPiBzZWxmLl9tYXhfbnVtYmVyX2NlbGxzIFwKICAgICAgICBvciBtZ19pbmZvWydyb3dzJ10gKyBzZWxmLl9yb3dzID4gc2VsZi5fbWF4X251bWJlcl9yb3dzOgogICAgICAjIEJhdGNoIGlzIGZ1bGwsIG91dHB1dCB0aGUgYmF0Y2ggYW5kIHJlc2V0dGluZyB0aGUgY291bnQuCiAgICAgIGlmIHNlbGYuX2JhdGNoOgogICAgICAgIHlpZWxkIHNlbGYuX2JhdGNoCiAgICAgIHNlbGYuX3Jlc2V0X2NvdW50KCkKCiAgICBzZWxmLl9iYXRjaC5leHRlbmQoZWxlbWVudCkKCiAgICAjIHRvdGFsIGJ5dGUgc2l6ZSBvZiB0aGUgbXV0YXRpb24gZ3JvdXAuCiAgICBzZWxmLl9zaXplX2luX2J5dGVzICs9IG1nX2luZm9bJ2J5dGVfc2l6ZSddCgogICAgIyB0b3RhbCByb3dzIGluIHRoZSBtdXRhdGlvbiBncm91cC4KICAgIHNlbGYuX3Jvd3MgKz0gbWdfaW5mb1sncm93cyddCgogICAgIyB0b3RhbCBjZWxscyBpbiB0aGUgbXV0YXRpb24gZ3JvdXAuCiAgICBzZWxmLl9jZWxscyArPSBtZ19pbmZvWydjZWxscyddCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgaWYgc2VsZi5fYmF0Y2ggaXMgbm90IE5vbmU6CiAgICAgIHlpZWxkIHdpbmRvdy5HbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKHNlbGYuX2JhdGNoKQogICAgICBzZWxmLl9iYXRjaCA9IE5vbmUKCgpAd2l0aF9pbnB1dF90eXBlcyhNdXRhdGlvbkdyb3VwKQpAd2l0aF9vdXRwdXRfdHlwZXMoTXV0YXRpb25Hcm91cCkKY2xhc3MgX0JhdGNoYWJsZUZpbHRlckZuKERvRm4pOgogICIiIgogIEZpbHRlcnMgTXV0YXRpb25Hcm91cHMgbGFyZ2VyIHRoYW4gdGhlIGJhdGNoIHNpemUgdG8gdGhlIG91dHB1dCB0YWdnZWQgd2l0aAogIE9VVFBVVF9UQUdfVU5CQVRDSEFCTEUuCiAgIiIiCiAgT1VUUFVUX1RBR19VTkJBVENIQUJMRSA9ICd1bmJhdGNoYWJsZScKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG1heF9iYXRjaF9zaXplX2J5dGVzLCBtYXhfbnVtYmVyX3Jvd3MsIG1heF9udW1iZXJfY2VsbHMpOgogICAgc2VsZi5fbWF4X2JhdGNoX3NpemVfYnl0ZXMgPSBtYXhfYmF0Y2hfc2l6ZV9ieXRlcwogICAgc2VsZi5fbWF4X251bWJlcl9yb3dzID0gbWF4X251bWJlcl9yb3dzCiAgICBzZWxmLl9tYXhfbnVtYmVyX2NlbGxzID0gbWF4X251bWJlcl9jZWxscwogICAgc2VsZi5fYmF0Y2hhYmxlID0gTm9uZQogICAgc2VsZi5fdW5iYXRjaGFibGUgPSBOb25lCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgaWYgZWxlbWVudC5wcmltYXJ5KCkub3BlcmF0aW9uID09IFdyaXRlTXV0YXRpb24uX09QRVJBVElPTl9ERUxFVEU6CiAgICAgICMgQXMgZGVsZXRlIG11dGF0aW9ucyBhcmUgbm90IGJhdGNoYWJsZS4KICAgICAgeWllbGQgVGFnZ2VkT3V0cHV0KF9CYXRjaGFibGVGaWx0ZXJGbi5PVVRQVVRfVEFHX1VOQkFUQ0hBQkxFLCBlbGVtZW50KQogICAgZWxzZToKICAgICAgbWdfaW5mbyA9IGVsZW1lbnQuaW5mbwogICAgICBpZiBtZ19pbmZvWydieXRlX3NpemUnXSA+IHNlbGYuX21heF9iYXRjaF9zaXplX2J5dGVzIFwKICAgICAgICAgIG9yIG1nX2luZm9bJ2NlbGxzJ10gPiBzZWxmLl9tYXhfbnVtYmVyX2NlbGxzIFwKICAgICAgICAgIG9yIG1nX2luZm9bJ3Jvd3MnXSA+IHNlbGYuX21heF9udW1iZXJfcm93czoKICAgICAgICB5aWVsZCBUYWdnZWRPdXRwdXQoX0JhdGNoYWJsZUZpbHRlckZuLk9VVFBVVF9UQUdfVU5CQVRDSEFCTEUsIGVsZW1lbnQpCiAgICAgIGVsc2U6CiAgICAgICAgeWllbGQgZWxlbWVudAoKCmNsYXNzIF9Xcml0ZVRvU3Bhbm5lckRvRm4oRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHNwYW5uZXJfY29uZmlndXJhdGlvbik6CiAgICBzZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24gPSBzcGFubmVyX2NvbmZpZ3VyYXRpb24KICAgIHNlbGYuX2RiX2luc3RhbmNlID0gTm9uZQogICAgc2VsZi5iYXRjaGVzID0gTWV0cmljcy5jb3VudGVyKHNlbGYuX19jbGFzc19fLCAnU3Bhbm5lckJhdGNoZXMnKQoKICBkZWYgc2V0dXAoc2VsZik6CiAgICBzcGFubmVyX2NsaWVudCA9IENsaWVudChzZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24ucHJvamVjdCkKICAgIGluc3RhbmNlID0gc3Bhbm5lcl9jbGllbnQuaW5zdGFuY2Uoc2VsZi5fc3Bhbm5lcl9jb25maWd1cmF0aW9uLmluc3RhbmNlKQogICAgc2VsZi5fZGJfaW5zdGFuY2UgPSBpbnN0YW5jZS5kYXRhYmFzZSgKICAgICAgICBzZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24uZGF0YWJhc2UsCiAgICAgICAgcG9vbD1zZWxmLl9zcGFubmVyX2NvbmZpZ3VyYXRpb24ucG9vbCkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLmJhdGNoZXMuaW5jKCkKICAgIHdpdGggc2VsZi5fZGJfaW5zdGFuY2UuYmF0Y2goKSBhcyBiOgogICAgICBmb3IgbSBpbiBlbGVtZW50OgogICAgICAgIGlmIG0ub3BlcmF0aW9uID09IFdyaXRlTXV0YXRpb24uX09QRVJBVElPTl9ERUxFVEU6CiAgICAgICAgICBiYXRjaF9mdW5jID0gYi5kZWxldGUKICAgICAgICBlbGlmIG0ub3BlcmF0aW9uID09IFdyaXRlTXV0YXRpb24uX09QRVJBVElPTl9SRVBMQUNFOgogICAgICAgICAgYmF0Y2hfZnVuYyA9IGIucmVwbGFjZQogICAgICAgIGVsaWYgbS5vcGVyYXRpb24gPT0gV3JpdGVNdXRhdGlvbi5fT1BFUkFUSU9OX0lOU0VSVF9PUl9VUERBVEU6CiAgICAgICAgICBiYXRjaF9mdW5jID0gYi5pbnNlcnRfb3JfdXBkYXRlCiAgICAgICAgZWxpZiBtLm9wZXJhdGlvbiA9PSBXcml0ZU11dGF0aW9uLl9PUEVSQVRJT05fSU5TRVJUOgogICAgICAgICAgYmF0Y2hfZnVuYyA9IGIuaW5zZXJ0CiAgICAgICAgZWxpZiBtLm9wZXJhdGlvbiA9PSBXcml0ZU11dGF0aW9uLl9PUEVSQVRJT05fVVBEQVRFOgogICAgICAgICAgYmF0Y2hfZnVuYyA9IGIudXBkYXRlCiAgICAgICAgZWxzZToKICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gb3BlcmF0aW9uIGFjdGlvbjogJXMiICUgbS5vcGVyYXRpb24pCgogICAgICAgIGJhdGNoX2Z1bmMoKiptLmt3YXJncykKCgpAd2l0aF9pbnB1dF90eXBlcyh0eXBpbmcuVW5pb25bTXV0YXRpb25Hcm91cCwgX011dGF0b3JdKQpAd2l0aF9vdXRwdXRfdHlwZXMoTXV0YXRpb25Hcm91cCkKY2xhc3MgX01ha2VNdXRhdGlvbkdyb3Vwc0ZuKERvRm4pOgogICIiIgogIE1ha2UgTXV0YXRpb24gZ3JvdXAgb2JqZWN0IGlmIHRoZSBlbGVtZW50IGlzIHRoZSBpbnN0YW5jZSBvZiBfTXV0YXRvci4KICAiIiIKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgTXV0YXRpb25Hcm91cCk6CiAgICAgIHlpZWxkIGVsZW1lbnQKICAgIGVsaWYgaXNpbnN0YW5jZShlbGVtZW50LCBfTXV0YXRvcik6CiAgICAgIHlpZWxkIE11dGF0aW9uR3JvdXAoW2VsZW1lbnRdKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJJbnZhbGlkIG9iamVjdCB0eXBlOiAlcy4gT2JqZWN0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIgogICAgICAgICAgIk11dGF0aW9uR3JvdXAgb3IgV3JpdGVNdXRhdGlvbnMiICUgc3RyKGVsZW1lbnQpKQoKCmNsYXNzIF9Xcml0ZUdyb3VwKFBUcmFuc2Zvcm0pOgogIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhfYmF0Y2hfc2l6ZV9ieXRlcywgbWF4X251bWJlcl9yb3dzLCBtYXhfbnVtYmVyX2NlbGxzKToKICAgIHNlbGYuX21heF9iYXRjaF9zaXplX2J5dGVzID0gbWF4X2JhdGNoX3NpemVfYnl0ZXMKICAgIHNlbGYuX21heF9udW1iZXJfcm93cyA9IG1heF9udW1iZXJfcm93cwogICAgc2VsZi5fbWF4X251bWJlcl9jZWxscyA9IG1heF9udW1iZXJfY2VsbHMKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBmaWx0ZXJfYmF0Y2hhYmxlX211dGF0aW9ucyA9ICgKICAgICAgICBwY29sbAogICAgICAgIHwgJ01ha2luZyBtdXRhdGlvbiBncm91cHMnID4+IFBhckRvKF9NYWtlTXV0YXRpb25Hcm91cHNGbigpKQogICAgICAgIHwgJ0ZpbHRlcmluZyBCYXRjaGFibGUgTXV0YXRpb25zJyA+PiBQYXJEbygKICAgICAgICAgICAgX0JhdGNoYWJsZUZpbHRlckZuKAogICAgICAgICAgICAgICAgbWF4X2JhdGNoX3NpemVfYnl0ZXM9c2VsZi5fbWF4X2JhdGNoX3NpemVfYnl0ZXMsCiAgICAgICAgICAgICAgICBtYXhfbnVtYmVyX3Jvd3M9c2VsZi5fbWF4X251bWJlcl9yb3dzLAogICAgICAgICAgICAgICAgbWF4X251bWJlcl9jZWxscz1zZWxmLl9tYXhfbnVtYmVyX2NlbGxzKSkud2l0aF9vdXRwdXRzKAogICAgICAgICAgICAgICAgICAgIF9CYXRjaGFibGVGaWx0ZXJGbi5PVVRQVVRfVEFHX1VOQkFUQ0hBQkxFLCBtYWluPSdiYXRjaGFibGUnKQogICAgKQoKICAgIGJhdGNoaW5nX2JhdGNoYWJsZXMgPSAoCiAgICAgICAgZmlsdGVyX2JhdGNoYWJsZV9tdXRhdGlvbnNbJ2JhdGNoYWJsZSddCiAgICAgICAgfCBQYXJEbygKICAgICAgICAgICAgX0JhdGNoRm4oCiAgICAgICAgICAgICAgICBtYXhfYmF0Y2hfc2l6ZV9ieXRlcz1zZWxmLl9tYXhfYmF0Y2hfc2l6ZV9ieXRlcywKICAgICAgICAgICAgICAgIG1heF9udW1iZXJfcm93cz1zZWxmLl9tYXhfbnVtYmVyX3Jvd3MsCiAgICAgICAgICAgICAgICBtYXhfbnVtYmVyX2NlbGxzPXNlbGYuX21heF9udW1iZXJfY2VsbHMpKSkKCiAgICByZXR1cm4gKCgKICAgICAgICBiYXRjaGluZ19iYXRjaGFibGVzLAogICAgICAgIGZpbHRlcl9iYXRjaGFibGVfbXV0YXRpb25zW19CYXRjaGFibGVGaWx0ZXJGbi5PVVRQVVRfVEFHX1VOQkFUQ0hBQkxFXSkKICAgICAgICAgICAgfCAnTWVyZ2luZyBiYXRjaGFibGUgYW5kIHVuYmF0Y2hhYmxlJyA+PiBGbGF0dGVuKCkpCpSVECwBAAAAAAB9lCiMFF9TUEFOTkVSX1RSQU5TQUNUSU9OlGpdMQEAS9dL3IeUjBNSZWFkT3BlcmF0aW9uLnF1ZXJ5lGpWMQEAS+dL/YeUjBNSZWFkT3BlcmF0aW9uLnRhYmxllGpWMQEAS/9NGgGHlIwNUmVhZE9wZXJhdGlvbpRqXTEBAEvfTRoBh5SMKl9CZWFtU3Bhbm5lckNvbmZpZ3VyYXRpb24uc25hcHNob3Rfb3B0aW9uc5RqVjEBAE0pAU0wAYeUjBlfQmVhbVNwYW5uZXJDb25maWd1cmF0aW9ulGpdMQEATR0BTTABh5SMHl9OYWl2ZVNwYW5uZXJSZWFkRG9Gbi5fX2luaXRfX5RqVjEBAE02AU1EAYeUjCJfTmFpdmVTcGFubmVyUmVhZERvRm4uX2dldF9zZXNzaW9ulGpWMQEATUYBTUoBh5SMJF9OYWl2ZVNwYW5uZXJSZWFkRG9Gbi5fY2xvc2Vfc2Vzc2lvbpRqVjEBAE1MAU1OAYeUjBtfTmFpdmVTcGFubmVyUmVhZERvRm4uc2V0dXCUalYxAQBNUAFNVgGHlIwdX05haXZlU3Bhbm5lclJlYWREb0ZuLnByb2Nlc3OUalYxAQBNWAFNcwGHlIwVX05haXZlU3Bhbm5lclJlYWREb0ZulGpdMQEATTMBTXMBh5SMHl9DcmVhdGVSZWFkUGFydGl0aW9ucy5fX2luaXRfX5RqVjEBAE2IAU2JAYeUjBtfQ3JlYXRlUmVhZFBhcnRpdGlvbnMuc2V0dXCUalYxAQBNiwFNlQGHlIwdX0NyZWF0ZVJlYWRQYXJ0aXRpb25zLnByb2Nlc3OUalYxAQBNlwFNpwGHlIwVX0NyZWF0ZVJlYWRQYXJ0aXRpb25zlGpdMQEATXYBTacBh5SMHV9DcmVhdGVUcmFuc2FjdGlvbkZuLl9faW5pdF9flGpWMQEATbYBTcoBh5SMGl9DcmVhdGVUcmFuc2FjdGlvbkZuLnNldHVwlGpWMQEATcwBTdABh5SMHF9DcmVhdGVUcmFuc2FjdGlvbkZuLnByb2Nlc3OUalYxAQBN0gFN1AGHlIwUX0NyZWF0ZVRyYW5zYWN0aW9uRm6Ual0xAQBNqgFN1AGHlIwSY3JlYXRlX3RyYW5zYWN0aW9ulGpWMQEATdcBTQUCh5SMHV9SZWFkRnJvbVBhcnRpdGlvbkZuLl9faW5pdF9flGpWMQEATQ4CTQ8Ch5SMGl9SZWFkRnJvbVBhcnRpdGlvbkZuLnNldHVwlGpWMQEATRECTRgCh5SMHF9SZWFkRnJvbVBhcnRpdGlvbkZuLnByb2Nlc3OUalYxAQBNGgJNJwKHlIwdX1JlYWRGcm9tUGFydGl0aW9uRm4udGVhcmRvd26UalYxAQBNKQJNKwKHlIwUX1JlYWRGcm9tUGFydGl0aW9uRm6Ual0xAQBNCAJNKwKHlIwYUmVhZEZyb21TcGFubmVyLl9faW5pdF9flGpWMQEATTUCTXwCh5SMFlJlYWRGcm9tU3Bhbm5lci5leHBhbmSUalYxAQBNfgJNnwKHlIwcUmVhZEZyb21TcGFubmVyLmRpc3BsYXlfZGF0YZRqVjEBAE2hAk21AoeUjA9SZWFkRnJvbVNwYW5uZXKUal0xAQBNLgJNtQKHlIwXV3JpdGVUb1NwYW5uZXIuX19pbml0X1+UalYxAQBNugJN5AKHlIwbV3JpdGVUb1NwYW5uZXIuZGlzcGxheV9kYXRhlGpWMQEATeYCTfMCh5SMFVdyaXRlVG9TcGFubmVyLmV4cGFuZJRqVjEBAE31Ak39AoeUjA5Xcml0ZVRvU3Bhbm5lcpRqXTEBAE24Ak39AoeUjBJfTXV0YXRvci5ieXRlX3NpemWUalYxAQBNBQNNBwOHlIwIX011dGF0b3KUal0xAQBNAANNBwOHlIwSTXV0YXRpb25Hcm91cC5pbmZvlGpWMQEATQ4DTRcDh5SMFU11dGF0aW9uR3JvdXAucHJpbWFyeZRqVjEBAE0ZA00aA4eUjA1NdXRhdGlvbkdyb3VwlGpdMQEATQoDTRoDh5SMFldyaXRlTXV0YXRpb24uX19pbml0X1+UalYxAQBNJQNNZAOHlIwWV3JpdGVNdXRhdGlvbi5fX2NhbGxfX5RqVjEBAE1mA012A4eUjBRXcml0ZU11dGF0aW9uLmluc2VydJRqVjEBAE14A02KA4eUjBRXcml0ZU11dGF0aW9uLnVwZGF0ZZRqVjEBAE2MA02eA4eUjB5Xcml0ZU11dGF0aW9uLmluc2VydF9vcl91cGRhdGWUalYxAQBNoANNsgOHlIwVV3JpdGVNdXRhdGlvbi5yZXBsYWNllGpWMQEATbQDTcYDh5SMFFdyaXRlTXV0YXRpb24uZGVsZXRllGpWMQEATcgDTdgDh5SMDVdyaXRlTXV0YXRpb26Ual0xAQBNHQNN2AOHlIwRX0JhdGNoRm4uX19pbml0X1+UalYxAQBN4QNN5AOHlIwVX0JhdGNoRm4uc3RhcnRfYnVuZGxllGpWMQEATeYDTeoDh5SMFV9CYXRjaEZuLl9yZXNldF9jb3VudJRqVjEBAE3sA03wA4eUjBBfQmF0Y2hGbi5wcm9jZXNzlGpWMQEATfIDTQYEh5SMFl9CYXRjaEZuLmZpbmlzaF9idW5kbGWUalYxAQBNCARNCwSHlIwIX0JhdGNoRm6Ual0xAQBN2wNNCwSHlIwbX0JhdGNoYWJsZUZpbHRlckZuLl9faW5pdF9flGpWMQEATRcETRwEh5SMGl9CYXRjaGFibGVGaWx0ZXJGbi5wcm9jZXNzlGpWMQEATR4ETSkEh5SMEl9CYXRjaGFibGVGaWx0ZXJGbpRqXTEBAE0OBE0pBIeUjBxfV3JpdGVUb1NwYW5uZXJEb0ZuLl9faW5pdF9flGpWMQEATS0ETTAEh5SMGV9Xcml0ZVRvU3Bhbm5lckRvRm4uc2V0dXCUalYxAQBNMgRNNwSHlIwbX1dyaXRlVG9TcGFubmVyRG9Gbi5wcm9jZXNzlGpWMQEATTkETUoEh5SME19Xcml0ZVRvU3Bhbm5lckRvRm6Ual0xAQBNLARNSgSHlIwdX01ha2VNdXRhdGlvbkdyb3Vwc0ZuLnByb2Nlc3OUalYxAQBNUwRNWwSHlIwVX01ha2VNdXRhdGlvbkdyb3Vwc0ZulGpdMQEATU0ETVsEh5SMFF9Xcml0ZUdyb3VwLl9faW5pdF9flGpWMQEATV8ETWIEh5SMEl9Xcml0ZUdyb3VwLmV4cGFuZJRqVjEBAE1kBE17BIeUjAtfV3JpdGVHcm91cJRqXTEBAE1eBE17BIeUdX2UKIwNUmVhZE9wZXJhdGlvbpRqGAQAAIwTUmVhZE9wZXJhdGlvbi5xdWVyeZRqGAQAAIwTUmVhZE9wZXJhdGlvbi50YWJsZZRqGAQAAIwSY3JlYXRlX3RyYW5zYWN0aW9ulGoYBAAAjA9SZWFkRnJvbVNwYW5uZXKUahgEAACMFlJlYWRGcm9tU3Bhbm5lci5leHBhbmSUahgEAACMHFJlYWRGcm9tU3Bhbm5lci5kaXNwbGF5X2RhdGGUahgEAACMDldyaXRlVG9TcGFubmVylGoYBAAAjBtXcml0ZVRvU3Bhbm5lci5kaXNwbGF5X2RhdGGUahgEAACMFVdyaXRlVG9TcGFubmVyLmV4cGFuZJRqGAQAAIwNTXV0YXRpb25Hcm91cJRqGAQAAIwVTXV0YXRpb25Hcm91cC5wcmltYXJ5lGoYBAAAjA1Xcml0ZU11dGF0aW9ulGoYBAAAjBRXcml0ZU11dGF0aW9uLmluc2VydJRqGAQAAIwUV3JpdGVNdXRhdGlvbi51cGRhdGWUahgEAACMHldyaXRlTXV0YXRpb24uaW5zZXJ0X29yX3VwZGF0ZZRqGAQAAIwVV3JpdGVNdXRhdGlvbi5yZXBsYWNllGoYBAAAjBRXcml0ZU11dGF0aW9uLmRlbGV0ZZRqGAQAAHWMKWFwYWNoZV9iZWFtLmlvLmdjcC5leHBlcmltZW50YWwuc3Bhbm5lcmlvlHSUjCBhcGFjaGVfYmVhbS5pby5nY3AuZ2NzZmlsZXN5c3RlbZQoWF8rAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkdDUyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBmb3IgYWNjZXNzaW5nIGZpbGVzIG9uIEdDUy4iIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGJ1aWx0aW5zIGltcG9ydCB6aXAKZnJvbSB0eXBpbmcgaW1wb3J0IEJpbmFyeUlPICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Cgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgaXRlcml0ZW1zCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3NlZEZpbGUKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZU1ldGFkYXRhCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcCBpbXBvcnQgZ2NzaW8KCl9fYWxsX18gPSBbJ0dDU0ZpbGVTeXN0ZW0nXQoKCmNsYXNzIEdDU0ZpbGVTeXN0ZW0oRmlsZVN5c3RlbSk6CiAgIiIiQSBHQ1MgYGBGaWxlU3lzdGVtYGAgaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyBmaWxlcyBvbiBHQ1MuCiAgIiIiCgogIENIVU5LX1NJWkUgPSBnY3Npby5NQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgICMgQ2h1Y2sgc2l6ZSBpbiBiYXRjaCBvcGVyYXRpb25zCiAgR0NTX1BSRUZJWCA9ICdnczovLycKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNjaGVtZShjbHMpOgogICAgIiIiVVJJIHNjaGVtZSBmb3IgdGhlIEZpbGVTeXN0ZW0KICAgICIiIgogICAgcmV0dXJuICdncycKCiAgZGVmIGpvaW4oc2VsZiwgYmFzZXBhdGgsICpwYXRocyk6CiAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMgZm9yIHRoZSBmaWxlc3lzdGVtCgogICAgQXJnczoKICAgICAgYmFzZXBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgKICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6IGZ1bGwgcGF0aCBhZnRlciBjb21iaW5pbmcgYWxsIHRoZSBwYXNzZWQgY29tcG9uZW50cwogICAgIiIiCiAgICBpZiBub3QgYmFzZXBhdGguc3RhcnRzd2l0aChHQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVgpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdCYXNlcGF0aCAlciBtdXN0IGJlIEdDUyBwYXRoLicgJSBiYXNlcGF0aCkKICAgIHBhdGggPSBiYXNlcGF0aAogICAgZm9yIHAgaW4gcGF0aHM6CiAgICAgIHBhdGggPSBwYXRoLnJzdHJpcCgnLycpICsgJy8nICsgcC5sc3RyaXAoJy8nKQogICAgcmV0dXJuIHBhdGgKCiAgZGVmIHNwbGl0KHNlbGYsIHBhdGgpOgogICAgIiIiU3BsaXRzIHRoZSBnaXZlbiBwYXRoIGludG8gdHdvIHBhcnRzLgoKICAgIFNwbGl0cyB0aGUgcGF0aCBpbnRvIGEgcGFpciAoaGVhZCwgdGFpbCkgc3VjaCB0aGF0IHRhaWwgY29udGFpbnMgdGhlIGxhc3QKICAgIGNvbXBvbmVudCBvZiB0aGUgcGF0aCBhbmQgaGVhZCBjb250YWlucyBldmVyeXRoaW5nIHVwIHRvIHRoYXQuCgogICAgSGVhZCB3aWxsIGluY2x1ZGUgdGhlIEdDUyBwcmVmaXggKCdnczovLycpLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHBhdGggYXMgYSBzdHJpbmcKICAgIFJldHVybnM6CiAgICAgIGEgcGFpciBvZiBwYXRoIGNvbXBvbmVudHMgYXMgc3RyaW5ncy4KICAgICIiIgogICAgcGF0aCA9IHBhdGguc3RyaXAoKQogICAgaWYgbm90IHBhdGguc3RhcnRzd2l0aChHQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVgpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdQYXRoICVyIG11c3QgYmUgR0NTIHBhdGguJyAlIHBhdGgpCgogICAgcHJlZml4X2xlbiA9IGxlbihHQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVgpCiAgICBsYXN0X3NlcCA9IHBhdGhbcHJlZml4X2xlbjpdLnJmaW5kKCcvJykKICAgIGlmIGxhc3Rfc2VwID49IDA6CiAgICAgIGxhc3Rfc2VwICs9IHByZWZpeF9sZW4KCiAgICBpZiBsYXN0X3NlcCA+IDA6CiAgICAgIHJldHVybiAocGF0aFs6bGFzdF9zZXBdLCBwYXRoW2xhc3Rfc2VwICsgMTpdKQogICAgZWxpZiBsYXN0X3NlcCA8IDA6CiAgICAgIHJldHVybiAocGF0aCwgJycpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHBhdGg6ICVzJyAlIHBhdGgpCgogIGRlZiBta2RpcnMoc2VsZiwgcGF0aCk6CiAgICAiIiJSZWN1cnNpdmVseSBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm92aWRlZCBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQKCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IGlmIGxlYWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLgogICAgIiIiCiAgICBwYXNzCgogIGRlZiBoYXNfZGlycyhzZWxmKToKICAgICIiIldoZXRoZXIgdGhpcyBGaWxlU3lzdGVtIHN1cHBvcnRzIGRpcmVjdG9yaWVzLiIiIgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfbGlzdChzZWxmLCBkaXJfb3JfcHJlZml4KToKICAgICIiIkxpc3QgZmlsZXMgaW4gYSBsb2NhdGlvbi4KCiAgICBMaXN0aW5nIGlzIG5vbi1yZWN1cnNpdmUsIGZvciBmaWxlc3lzdGVtcyB0aGF0IHN1cHBvcnQgZGlyZWN0b3JpZXMuCgogICAgQXJnczoKICAgICAgZGlyX29yX3ByZWZpeDogKHN0cmluZykgQSBkaXJlY3Rvcnkgb3IgbG9jYXRpb24gcHJlZml4IChmb3IgZmlsZXN5c3RlbXMKICAgICAgICB0aGF0IGRvbid0IGhhdmUgZGlyZWN0b3JpZXMpLgoKICAgIFJldHVybnM6CiAgICAgIEdlbmVyYXRvciBvZiBgYEZpbGVNZXRhZGF0YWBgIG9iamVjdHMuCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIGxpc3RpbmcgZmFpbHMsIGJ1dCBub3QgaWYgbm8gZmlsZXMgd2VyZSBmb3VuZC4KICAgICIiIgogICAgdHJ5OgogICAgICBmb3IgcGF0aCwgc2l6ZSBpbiBpdGVyaXRlbXMoZ2NzaW8uR2NzSU8oKS5saXN0X3ByZWZpeChkaXJfb3JfcHJlZml4KSk6CiAgICAgICAgeWllbGQgRmlsZU1ldGFkYXRhKHBhdGgsIHNpemUpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIkxpc3Qgb3BlcmF0aW9uIGZhaWxlZCIsIHtkaXJfb3JfcHJlZml4OiBlfSkKCiAgZGVmIF9wYXRoX29wZW4oCiAgICAgIHNlbGYsCiAgICAgIHBhdGgsCiAgICAgIG1vZGUsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIiIiSGVscGVyIGZ1bmN0aW9ucyB0byBvcGVuIGEgZmlsZSBpbiB0aGUgcHJvdmlkZWQgbW9kZS4KICAgICIiIgogICAgY29tcHJlc3Npb25fdHlwZSA9IEZpbGVTeXN0ZW0uX2dldF9jb21wcmVzc2lvbl90eXBlKHBhdGgsIGNvbXByZXNzaW9uX3R5cGUpCiAgICBtaW1lX3R5cGUgPSBDb21wcmVzc2lvblR5cGVzLm1pbWVfdHlwZShjb21wcmVzc2lvbl90eXBlLCBtaW1lX3R5cGUpCiAgICByYXdfZmlsZSA9IGdjc2lvLkdjc0lPKCkub3BlbihwYXRoLCBtb2RlLCBtaW1lX3R5cGU9bWltZV90eXBlKQogICAgaWYgY29tcHJlc3Npb25fdHlwZSA9PSBDb21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRDoKICAgICAgcmV0dXJuIHJhd19maWxlCiAgICByZXR1cm4gQ29tcHJlc3NlZEZpbGUocmF3X2ZpbGUsIGNvbXByZXNzaW9uX3R5cGU9Y29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIGNyZWF0ZSgKICAgICAgc2VsZiwKICAgICAgcGF0aCwKICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAjIHR5cGU6ICguLi4pIC0+IEJpbmFyeUlPCgogICAgIiIiUmV0dXJucyBhIHdyaXRlIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbQogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QKCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgY2xvc2UgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZQogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGF0aF9vcGVuKHBhdGgsICd3YicsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIG9wZW4oCiAgICAgIHNlbGYsCiAgICAgIHBhdGgsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIyB0eXBlOiAoLi4uKSAtPiBCaW5hcnlJTwoKICAgICIiIlJldHVybnMgYSByZWFkIGNoYW5uZWwgZm9yIHRoZSBnaXZlbiBmaWxlIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpbGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbQogICAgICBtaW1lX3R5cGU6IE1JTUUgdHlwZSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIGZpbGUgb2JqZWN0CiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFR5cGUgb2YgY29tcHJlc3Npb24gdG8gYmUgdXNlZCBmb3IgdGhpcyBvYmplY3QKCiAgICBSZXR1cm5zOiBmaWxlIGhhbmRsZSB3aXRoIGEgY2xvc2UgZnVuY3Rpb24gZm9yIHRoZSB1c2VyIHRvIHVzZQogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGF0aF9vcGVuKHBhdGgsICdyYicsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIGNvcHkoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgIiIiUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZSB0cmVlIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogbGlzdCBvZiBzb3VyY2UgZmlsZSBvYmplY3RzIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkCiAgICAgIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXM6IGxpc3Qgb2YgZGVzdGluYXRpb24gb2YgdGhlIG5ldyBvYmplY3QKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgYW55IG9mIHRoZSBjb3B5IG9wZXJhdGlvbnMgZmFpbAogICAgIiIiCiAgICBlcnJfbXNnID0gKAogICAgICAgICJzb3VyY2VfZmlsZV9uYW1lcyBhbmQgZGVzdGluYXRpb25fZmlsZV9uYW1lcyBzaG91bGQgIgogICAgICAgICJiZSBlcXVhbCBpbiBsZW5ndGgiKQogICAgYXNzZXJ0IGxlbihzb3VyY2VfZmlsZV9uYW1lcykgPT0gbGVuKGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpLCBlcnJfbXNnCgogICAgZGVmIF9jb3B5X3BhdGgoc291cmNlLCBkZXN0aW5hdGlvbik6CiAgICAgICIiIlJlY3Vyc2l2ZWx5IGNvcHkgdGhlIGZpbGUgdHJlZSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uCiAgICAgICIiIgogICAgICBpZiBub3QgZGVzdGluYXRpb24uc3RhcnRzd2l0aChHQ1NGaWxlU3lzdGVtLkdDU19QUkVGSVgpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Rlc3RpbmF0aW9uICVyIG11c3QgYmUgR0NTIHBhdGguJyAlIGRlc3RpbmF0aW9uKQogICAgICAjIFVzZSBjb3B5X3RyZWUgaWYgdGhlIHBhdGggZW5kcyB3aXRoIC8gYXMgaXQgaXMgYSBkaXJlY3RvcnkKICAgICAgaWYgc291cmNlLmVuZHN3aXRoKCcvJyk6CiAgICAgICAgZ2NzaW8uR2NzSU8oKS5jb3B5dHJlZShzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgICBlbHNlOgogICAgICAgIGdjc2lvLkdjc0lPKCkuY29weShzb3VyY2UsIGRlc3RpbmF0aW9uKQoKICAgIGV4Y2VwdGlvbnMgPSB7fQogICAgZm9yIHNvdXJjZSwgZGVzdGluYXRpb24gaW4gemlwKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICAgdHJ5OgogICAgICAgIF9jb3B5X3BhdGgoc291cmNlLCBkZXN0aW5hdGlvbikKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgZXhjZXB0aW9uc1soc291cmNlLCBkZXN0aW5hdGlvbildID0gZQoKICAgIGlmIGV4Y2VwdGlvbnM6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJDb3B5IG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQoKICBkZWYgcmVuYW1lKHNlbGYsIHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICIiIlJlbmFtZSB0aGUgZmlsZXMgYXQgdGhlIHNvdXJjZSBsaXN0IHRvIHRoZSBkZXN0aW5hdGlvbiBsaXN0LgogICAgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBsaXN0cyBzaG91bGQgYmUgb2YgdGhlIHNhbWUgc2l6ZS4KCiAgICBBcmdzOgogICAgICBzb3VyY2VfZmlsZV9uYW1lczogTGlzdCBvZiBmaWxlIHBhdGhzIHRoYXQgbmVlZCB0byBiZSBtb3ZlZAogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBMaXN0IG9mIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgZm9yIHRoZSBmaWxlcwoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBhbnkgb2YgdGhlIHJlbmFtZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgZXJyX21zZyA9ICgKICAgICAgICAic291cmNlX2ZpbGVfbmFtZXMgYW5kIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgc2hvdWxkICIKICAgICAgICAiYmUgZXF1YWwgaW4gbGVuZ3RoIikKICAgIGFzc2VydCBsZW4oc291cmNlX2ZpbGVfbmFtZXMpID09IGxlbihkZXN0aW5hdGlvbl9maWxlX25hbWVzKSwgZXJyX21zZwoKICAgIGdjc19iYXRjaGVzID0gW10KICAgIGdjc19jdXJyZW50X2JhdGNoID0gW10KICAgIGZvciBzcmMsIGRlc3QgaW4gemlwKHNvdXJjZV9maWxlX25hbWVzLCBkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICAgZ2NzX2N1cnJlbnRfYmF0Y2guYXBwZW5kKChzcmMsIGRlc3QpKQogICAgICBpZiBsZW4oZ2NzX2N1cnJlbnRfYmF0Y2gpID09IHNlbGYuQ0hVTktfU0laRToKICAgICAgICBnY3NfYmF0Y2hlcy5hcHBlbmQoZ2NzX2N1cnJlbnRfYmF0Y2gpCiAgICAgICAgZ2NzX2N1cnJlbnRfYmF0Y2ggPSBbXQogICAgaWYgZ2NzX2N1cnJlbnRfYmF0Y2g6CiAgICAgIGdjc19iYXRjaGVzLmFwcGVuZChnY3NfY3VycmVudF9iYXRjaCkKCiAgICAjIEV4ZWN1dGUgR0NTIHJlbmFtZXMgaWYgYW55IGFuZCByZXR1cm4gZXhjZXB0aW9ucy4KICAgIGV4Y2VwdGlvbnMgPSB7fQogICAgZm9yIGJhdGNoIGluIGdjc19iYXRjaGVzOgogICAgICBjb3B5X3N0YXR1c2VzID0gZ2NzaW8uR2NzSU8oKS5jb3B5X2JhdGNoKGJhdGNoKQogICAgICBjb3B5X3N1Y2NlZWRlZCA9IFtdCiAgICAgIGZvciBzcmMsIGRlc3QsIGV4Y2VwdGlvbiBpbiBjb3B5X3N0YXR1c2VzOgogICAgICAgIGlmIGV4Y2VwdGlvbjoKICAgICAgICAgIGV4Y2VwdGlvbnNbKHNyYywgZGVzdCldID0gZXhjZXB0aW9uCiAgICAgICAgZWxzZToKICAgICAgICAgIGNvcHlfc3VjY2VlZGVkLmFwcGVuZCgoc3JjLCBkZXN0KSkKICAgICAgZGVsZXRlX2JhdGNoID0gW3NyYyBmb3Igc3JjLCBkZXN0IGluIGNvcHlfc3VjY2VlZGVkXQogICAgICBkZWxldGVfc3RhdHVzZXMgPSBnY3Npby5HY3NJTygpLmRlbGV0ZV9iYXRjaChkZWxldGVfYmF0Y2gpCiAgICAgIGZvciBpLCAoc3JjLCBleGNlcHRpb24pIGluIGVudW1lcmF0ZShkZWxldGVfc3RhdHVzZXMpOgogICAgICAgIGRlc3QgPSBjb3B5X3N1Y2NlZWRlZFtpXVsxXQogICAgICAgIGlmIGV4Y2VwdGlvbjoKICAgICAgICAgIGV4Y2VwdGlvbnNbKHNyYywgZGVzdCldID0gZXhjZXB0aW9uCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoIlJlbmFtZSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKCiAgZGVmIGV4aXN0cyhzZWxmLCBwYXRoKToKICAgICIiIkNoZWNrIGlmIHRoZSBwcm92aWRlZCBwYXRoIGV4aXN0cyBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQuCgogICAgUmV0dXJuczogYm9vbGVhbiBmbGFnIGluZGljYXRpbmcgaWYgcGF0aCBleGlzdHMKICAgICIiIgogICAgcmV0dXJuIGdjc2lvLkdjc0lPKCkuZXhpc3RzKHBhdGgpCgogIGRlZiBzaXplKHNlbGYsIHBhdGgpOgogICAgIiIiR2V0IHNpemUgb2YgcGF0aCBvbiB0aGUgRmlsZVN5c3RlbS4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBpbiBxdWVzdGlvbi4KCiAgICBSZXR1cm5zOiBpbnQgc2l6ZSBvZiBwYXRoIGFjY29yZGluZyB0byB0aGUgRmlsZVN5c3RlbS4KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgcGF0aCBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICByZXR1cm4gZ2NzaW8uR2NzSU8oKS5zaXplKHBhdGgpCgogIGRlZiBsYXN0X3VwZGF0ZWQoc2VsZiwgcGF0aCk6CiAgICAiIiJHZXQgVU5JWCBFcG9jaCB0aW1lIGluIHNlY29uZHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgZmlsZS4KCiAgICBSZXR1cm5zOiBmbG9hdCBVTklYIEVwb2NoIHRpbWUKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgcGF0aCBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICByZXR1cm4gZ2NzaW8uR2NzSU8oKS5sYXN0X3VwZGF0ZWQocGF0aCkKCiAgZGVmIGNoZWNrc3VtKHNlbGYsIHBhdGgpOgogICAgIiIiRmV0Y2ggY2hlY2tzdW0gbWV0YWRhdGEgb2YgYSBmaWxlIG9uIHRoZQogICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtYC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiBhIGZpbGUuCgogICAgUmV0dXJuczogc3RyaW5nIGNvbnRhaW5pbmcgY2hlY2tzdW0KCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgcGF0aCBpc24ndCBhIGZpbGUgb3IgZG9lc24ndCBleGlzdC4KICAgICIiIgogICAgdHJ5OgogICAgICByZXR1cm4gZ2NzaW8uR2NzSU8oKS5jaGVja3N1bShwYXRoKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJDaGVja3N1bSBvcGVyYXRpb24gZmFpbGVkIiwge3BhdGg6IGV9KQoKICBkZWYgZGVsZXRlKHNlbGYsIHBhdGhzKToKICAgICIiIkRlbGV0ZXMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYXQgdGhlIHByb3ZpZGVkIHBhdGhzLgogICAgRGlyZWN0b3JpZXMgd2lsbCBiZSBkZWxldGVkIHJlY3Vyc2l2ZWx5LgoKICAgIEFyZ3M6CiAgICAgIHBhdGhzOiBsaXN0IG9mIHBhdGhzIHRoYXQgZ2l2ZSB0aGUgZmlsZSBvYmplY3RzIHRvIGJlIGRlbGV0ZWQKICAgICIiIgogICAgZGVmIF9kZWxldGVfcGF0aChwYXRoKToKICAgICAgIiIiUmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBhdCB0aGUgcHJvdmlkZWQgcGF0aC4KICAgICAgIiIiCiAgICAgIGlmIHBhdGguZW5kc3dpdGgoJy8nKToKICAgICAgICBwYXRoX3RvX3VzZSA9IHBhdGggKyAnKicKICAgICAgZWxzZToKICAgICAgICBwYXRoX3RvX3VzZSA9IHBhdGgKICAgICAgbWF0Y2hfcmVzdWx0ID0gc2VsZi5tYXRjaChbcGF0aF90b191c2VdKVswXQogICAgICBzdGF0dXNlcyA9IGdjc2lvLkdjc0lPKCkuZGVsZXRlX2JhdGNoKAogICAgICAgICAgW20ucGF0aCBmb3IgbSBpbiBtYXRjaF9yZXN1bHQubWV0YWRhdGFfbGlzdF0pCiAgICAgIGZhaWx1cmVzID0gW2UgZm9yIChfLCBlKSBpbiBzdGF0dXNlcyBpZiBlIGlzIG5vdCBOb25lXQogICAgICBpZiBmYWlsdXJlczoKICAgICAgICByYWlzZSBmYWlsdXJlc1swXQoKICAgIGV4Y2VwdGlvbnMgPSB7fQogICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgIHRyeToKICAgICAgICBfZGVsZXRlX3BhdGgocGF0aCkKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgZXhjZXB0aW9uc1twYXRoXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiRGVsZXRlIG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQqUfZQojBRHQ1NGaWxlU3lzdGVtLnNjaGVtZZRqVjEBAEsuSzKHlIwSR0NTRmlsZVN5c3RlbS5qb2lulGpWMQEASzRLQoeUjBNHQ1NGaWxlU3lzdGVtLnNwbGl0lGpWMQEAS0RLX4eUjBRHQ1NGaWxlU3lzdGVtLm1rZGlyc5RqVjEBAEthS2qHlIwWR0NTRmlsZVN5c3RlbS5oYXNfZGlyc5RqVjEBAEtsS26HlIwTR0NTRmlsZVN5c3RlbS5fbGlzdJRqVjEBAEtwS4OHlIwYR0NTRmlsZVN5c3RlbS5fcGF0aF9vcGVulGpWMQEAS4VLkoeUjBRHQ1NGaWxlU3lzdGVtLmNyZWF0ZZRqVjEBAEuUS6SHlIwSR0NTRmlsZVN5c3RlbS5vcGVulGpWMQEAS6ZLtoeUjBJHQ1NGaWxlU3lzdGVtLmNvcHmUalYxAQBLuEvah5SMFEdDU0ZpbGVTeXN0ZW0ucmVuYW1llGpWMQEAS9xNCAGHlIwUR0NTRmlsZVN5c3RlbS5leGlzdHOUalYxAQBNCgFNEgGHlIwSR0NTRmlsZVN5c3RlbS5zaXpllGpWMQEATRQBTR8Bh5SMGkdDU0ZpbGVTeXN0ZW0ubGFzdF91cGRhdGVklGpWMQEATSEBTSwBh5SMFkdDU0ZpbGVTeXN0ZW0uY2hlY2tzdW2UalYxAQBNLgFNPQGHlIwUR0NTRmlsZVN5c3RlbS5kZWxldGWUalYxAQBNPwFNXAGHlIwNR0NTRmlsZVN5c3RlbZRqXTEBAEsnTVwBh5R1fZQojA1HQ1NGaWxlU3lzdGVtlGqEAwAAjBRHQ1NGaWxlU3lzdGVtLnNjaGVtZZRqhAMAAIwSR0NTRmlsZVN5c3RlbS5qb2lulGqEAwAAjBNHQ1NGaWxlU3lzdGVtLnNwbGl0lGqEAwAAjBRHQ1NGaWxlU3lzdGVtLm1rZGlyc5RqhAMAAIwWR0NTRmlsZVN5c3RlbS5oYXNfZGlyc5RqhAMAAIwUR0NTRmlsZVN5c3RlbS5jcmVhdGWUaoQDAACMEkdDU0ZpbGVTeXN0ZW0ub3BlbpRqhAMAAIwSR0NTRmlsZVN5c3RlbS5jb3B5lGqEAwAAjBRHQ1NGaWxlU3lzdGVtLnJlbmFtZZRqhAMAAIwUR0NTRmlsZVN5c3RlbS5leGlzdHOUaoQDAACMEkdDU0ZpbGVTeXN0ZW0uc2l6ZZRqhAMAAIwaR0NTRmlsZVN5c3RlbS5sYXN0X3VwZGF0ZWSUaoQDAACMFkdDU0ZpbGVTeXN0ZW0uY2hlY2tzdW2UaoQDAACMFEdDU0ZpbGVTeXN0ZW0uZGVsZXRllGqEAwAAdYwgYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW2UdJSMGGFwYWNoZV9iZWFtLmlvLmdjcC5nY3Npb5QoWBNbAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkdvb2dsZSBDbG91ZCBTdG9yYWdlIGNsaWVudC4KClRoaXMgbGlicmFyeSBldm9sdmVkIGZyb20gdGhlIEdvb2dsZSBBcHAgRW5naW5lIEdDUyBjbGllbnQgYXZhaWxhYmxlIGF0Cmh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDbG91ZFBsYXRmb3JtL2FwcGVuZ2luZS1nY3MtY2xpZW50LgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgZXJybm8KaW1wb3J0IGlvCmltcG9ydCBsb2dnaW5nCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKaW1wb3J0IHJlCmltcG9ydCBzeXMKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdGltZQppbXBvcnQgdHJhY2ViYWNrCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC5odHRwX2NsaWVudCBpbXBvcnQgZ2V0X25ld19odHRwCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvIGltcG9ydCBEb3dubG9hZGVyCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvIGltcG9ydCBEb3dubG9hZGVyU3RyZWFtCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvIGltcG9ydCBQaXBlU3RyZWFtCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbWlvIGltcG9ydCBVcGxvYWRlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1pbyBpbXBvcnQgVXBsb2FkZXJTdHJlYW0KZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcmV0cnkKCl9fYWxsX18gPSBbJ0djc0lPJ10KCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCiMgSXNzdWUgYSBmcmllbmRsaWVyIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHN0b3JhZ2UgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLgojIFRPRE8oc2lsdml1Yyk6IFJlbW92ZSB0aGlzIGd1YXJkIHdoZW4gc3RvcmFnZSBpcyBhdmFpbGFibGUgZXZlcnl3aGVyZS4KdHJ5OgogICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgIyBweWxpbnQ6IGRpc2FibGU9dW5ncm91cGVkLWltcG9ydHMKICBpbXBvcnQgYXBpdG9vbHMuYmFzZS5weS50cmFuc2ZlciBhcyB0cmFuc2ZlcgogIGZyb20gYXBpdG9vbHMuYmFzZS5weS5iYXRjaCBpbXBvcnQgQmF0Y2hBcGlSZXF1ZXN0CiAgZnJvbSBhcGl0b29scy5iYXNlLnB5LmV4Y2VwdGlvbnMgaW1wb3J0IEh0dHBFcnJvcgogIGZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwuZ2NwIGltcG9ydCBhdXRoCiAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AuaW50ZXJuYWwuY2xpZW50cyBpbXBvcnQgc3RvcmFnZQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICdHb29nbGUgQ2xvdWQgU3RvcmFnZSBJL08gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBleGVjdXRpb24gZW52aXJvbm1lbnQgJwogICAgICAnKGNvdWxkIG5vdCBpbXBvcnQgc3RvcmFnZSBBUEkgY2xpZW50KS4nKQoKIyBUaGlzIGlzIHRoZSBzaXplIG9mIGVhY2ggcGFydGlhbC1maWxlIHJlYWQgb3BlcmF0aW9uIGZyb20gR0NTLiAgVGhpcwojIHBhcmFtZXRlciB3YXMgY2hvc2VuIHRvIGdpdmUgZ29vZCB0aHJvdWdocHV0IHdoaWxlIGtlZXBpbmcgbWVtb3J5IHVzYWdlIGF0CiMgYSByZWFzb25hYmxlIGxldmVsOyB0aGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRocm91Z2hwdXQgcmVhY2hlZCB3aGVuCiMgcmVhZGluZyBmaWxlcyBvZiBhIGdpdmVuIHNpemUgd2l0aCBhIGNob3NlbiBidWZmZXIgc2l6ZSBhbmQgaW5mb3JtZWQgdGhlCiMgY2hvaWNlIG9mIHRoZSB2YWx1ZSwgYXMgb2YgMTEvMjAxNjoKIwojICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKwojIHwgICAgICAgICAgICAgICB8IDUwIE1CIGZpbGUgfCAxMDAgTUIgZmlsZSB8IDIwMCBNQiBmaWxlIHwgNDAwIE1CIGZpbGUgfAojICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKwojIHwgOCBNQiBidWZmZXIgICB8IDE3LjEyIE1CL3MgfCAyMi42NyBNQi9zICB8IDIzLjgxIE1CL3MgIHwgMjYuMDUgTUIvcyAgfAojIHwgMTYgTUIgYnVmZmVyICB8IDI0LjIxIE1CL3MgfCA0Mi43MCBNQi9zICB8IDQyLjg5IE1CL3MgIHwgNDYuOTIgTUIvcyAgfAojIHwgMzIgTUIgYnVmZmVyICB8IDI4LjUzIE1CL3MgfCA0OC4wOCBNQi9zICB8IDU0LjMwIE1CL3MgIHwgNTQuNjUgTUIvcyAgfAojIHwgNDAwIE1CIGJ1ZmZlciB8IDM0LjcyIE1CL3MgfCA3MS4xMyBNQi9zICB8IDc5LjEzIE1CL3MgIHwgODUuMzkgTUIvcyAgfAojICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKwpERUZBVUxUX1JFQURfQlVGRkVSX1NJWkUgPSAxNiAqIDEwMjQgKiAxMDI0CgojIFRoaXMgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZSBsaWJyYXJ5IHdpbGwgd2FpdCBmb3IgYSBwYXJ0aWFsLWZpbGUgcmVhZAojIG9wZXJhdGlvbiBmcm9tIEdDUyB0byBjb21wbGV0ZSBiZWZvcmUgcmV0cnlpbmcuCkRFRkFVTFRfUkVBRF9TRUdNRU5UX1RJTUVPVVRfU0VDT05EUyA9IDYwCgojIFRoaXMgaXMgdGhlIHNpemUgb2YgY2h1bmtzIHVzZWQgd2hlbiB3cml0aW5nIHRvIEdDUy4KV1JJVEVfQ0hVTktfU0laRSA9IDggKiAxMDI0ICogMTAyNAoKIyBNYXhpbXVtIG51bWJlciBvZiBvcGVyYXRpb25zIHBlcm1pdHRlZCBpbiBHY3NJTy5jb3B5X2JhdGNoKCkgYW5kCiMgR2NzSU8uZGVsZXRlX2JhdGNoKCkuCk1BWF9CQVRDSF9PUEVSQVRJT05fU0laRSA9IDEwMAoKIyBCYXRjaCBlbmRwb2ludCBVUkwgZm9yIEdDUy4KIyBXZSBoYXZlIHRvIHNwZWNpZnkgYW4gQVBJIHNwZWNpZmljIGVuZHBvaW50IGhlcmUgc2luY2UgR29vZ2xlIEFQSXMgZ2xvYmFsCiMgYmF0Y2ggZW5kcG9pbnRzIHdpbGwgYmUgZGVwcmVjYXRlZCBvbiAwMy8yNS8yMDE5LgojIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlYmxvZy5jb20vMjAxOC8wMy9kaXNjb250aW51aW5nLXN1cHBvcnQtZm9yLWpzb24tcnBjLWFuZC5odG1sLiAgIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZwojIEN1cnJlbnRseSBhcGl0b29scyBsaWJyYXJ5IHVzZXMgYSBnbG9iYWwgYmF0Y2ggZW5kcG9pbnQgYnkgZGVmYXVsdDoKIyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2FwaXRvb2xzL2Jsb2IvbWFzdGVyL2FwaXRvb2xzL2Jhc2UvcHkvYmF0Y2gucHkjTDE1MgojIFRPRE86IHJlbW92ZSB0aGlzIGNvbnN0YW50IGFuZCBpdCdzIHVzYWdlIGFmdGVyIGFwaXRvb2xzIG1vdmUgdG8gdXNpbmcgYW4gQVBJCiMgc3BlY2lmaWMgYmF0Y2ggZW5kcG9pbnQgb3IgYWZ0ZXIgQmVhbSBnY3NpbyBtb2R1bGUgc3RhcnQgdXNpbmcgYSBHQ1MgY2xpZW50CiMgbGlicmFyeSB0aGF0IGRvZXMgbm90IHVzZSBnbG9iYWwgYmF0Y2ggZW5kcG9pbnRzLgpHQ1NfQkFUQ0hfRU5EUE9JTlQgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYmF0Y2gvc3RvcmFnZS92MScKCgpkZWYgcGFyc2VfZ2NzX3BhdGgoZ2NzX3BhdGgsIG9iamVjdF9vcHRpb25hbD1GYWxzZSk6CiAgIiIiUmV0dXJuIHRoZSBidWNrZXQgYW5kIG9iamVjdCBuYW1lcyBvZiB0aGUgZ2l2ZW4gZ3M6Ly8gcGF0aC4iIiIKICBtYXRjaCA9IHJlLm1hdGNoKCdeZ3M6Ly8oW14vXSspLyguKikkJywgZ2NzX3BhdGgpCiAgaWYgbWF0Y2ggaXMgTm9uZSBvciAobWF0Y2guZ3JvdXAoMikgPT0gJycgYW5kIG5vdCBvYmplY3Rfb3B0aW9uYWwpOgogICAgcmFpc2UgVmFsdWVFcnJvcignR0NTIHBhdGggbXVzdCBiZSBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxvYmplY3Q+LicpCiAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpLCBtYXRjaC5ncm91cCgyKQoKCmNsYXNzIEdjc0lPRXJyb3IoSU9FcnJvciwgcmV0cnkuUGVybWFuZW50RXhjZXB0aW9uKToKICAiIiJHQ1MgSU8gZXJyb3IgdGhhdCBzaG91bGQgbm90IGJlIHJldHJpZWQuIiIiCiAgcGFzcwoKCmNsYXNzIEdjc0lPKG9iamVjdCk6CiAgIiIiR29vZ2xlIENsb3VkIFN0b3JhZ2UgSS9PIGNsaWVudC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgc3RvcmFnZV9jbGllbnQ9Tm9uZSk6CiAgICBpZiBzdG9yYWdlX2NsaWVudCBpcyBOb25lOgogICAgICBzdG9yYWdlX2NsaWVudCA9IHN0b3JhZ2UuU3RvcmFnZVYxKAogICAgICAgICAgY3JlZGVudGlhbHM9YXV0aC5nZXRfc2VydmljZV9jcmVkZW50aWFscygpLAogICAgICAgICAgZ2V0X2NyZWRlbnRpYWxzPUZhbHNlLAogICAgICAgICAgaHR0cD1nZXRfbmV3X2h0dHAoKSwKICAgICAgICAgIHJlc3BvbnNlX2VuY29kaW5nPU5vbmUgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgZWxzZSAndXRmOCcpCiAgICBzZWxmLmNsaWVudCA9IHN0b3JhZ2VfY2xpZW50CiAgICBzZWxmLl9yZXdyaXRlX2NiID0gTm9uZQoKICBkZWYgX3NldF9yZXdyaXRlX3Jlc3BvbnNlX2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKICAgICIiIkZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuIE5vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgICBBcmdzOgogICAgICBjYWxsYmFjazogQSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGBgc3RvcmFnZS5SZXdyaXRlUmVzcG9uc2VgYC4KICAgICIiIgogICAgc2VsZi5fcmV3cml0ZV9jYiA9IGNhbGxiYWNrCgogIGRlZiBvcGVuKAogICAgICBzZWxmLAogICAgICBmaWxlbmFtZSwKICAgICAgbW9kZT0ncicsCiAgICAgIHJlYWRfYnVmZmVyX3NpemU9REVGQVVMVF9SRUFEX0JVRkZFUl9TSVpFLAogICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOgogICAgIiIiT3BlbiBhIEdDUyBmaWxlIHBhdGggZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4KCiAgICBBcmdzOgogICAgICBmaWxlbmFtZSAoc3RyKTogR0NTIGZpbGUgcGF0aCBpbiB0aGUgZm9ybSBgYGdzOi8vPGJ1Y2tldD4vPG9iamVjdD5gYC4KICAgICAgbW9kZSAoc3RyKTogYGAncidgYCBmb3IgcmVhZGluZyBvciBgYCd3J2BgIGZvciB3cml0aW5nLgogICAgICByZWFkX2J1ZmZlcl9zaXplIChpbnQpOiBCdWZmZXIgc2l6ZSB0byB1c2UgZHVyaW5nIHJlYWQgb3BlcmF0aW9ucy4KICAgICAgbWltZV90eXBlIChzdHIpOiBNaW1lIHR5cGUgdG8gc2V0IGZvciB3cml0ZSBvcGVyYXRpb25zLgoKICAgIFJldHVybnM6CiAgICAgIEdDUyBmaWxlIG9iamVjdC4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IEludmFsaWQgb3BlbiBmaWxlIG1vZGUuCiAgICAiIiIKICAgIGlmIG1vZGUgPT0gJ3InIG9yIG1vZGUgPT0gJ3JiJzoKICAgICAgZG93bmxvYWRlciA9IEdjc0Rvd25sb2FkZXIoCiAgICAgICAgICBzZWxmLmNsaWVudCwgZmlsZW5hbWUsIGJ1ZmZlcl9zaXplPXJlYWRfYnVmZmVyX3NpemUpCiAgICAgIHJldHVybiBpby5CdWZmZXJlZFJlYWRlcigKICAgICAgICAgIERvd25sb2FkZXJTdHJlYW0oCiAgICAgICAgICAgICAgZG93bmxvYWRlciwgcmVhZF9idWZmZXJfc2l6ZT1yZWFkX2J1ZmZlcl9zaXplLCBtb2RlPW1vZGUpLAogICAgICAgICAgYnVmZmVyX3NpemU9cmVhZF9idWZmZXJfc2l6ZSkKICAgIGVsaWYgbW9kZSA9PSAndycgb3IgbW9kZSA9PSAnd2InOgogICAgICB1cGxvYWRlciA9IEdjc1VwbG9hZGVyKHNlbGYuY2xpZW50LCBmaWxlbmFtZSwgbWltZV90eXBlKQogICAgICByZXR1cm4gaW8uQnVmZmVyZWRXcml0ZXIoCiAgICAgICAgICBVcGxvYWRlclN0cmVhbSh1cGxvYWRlciwgbW9kZT1tb2RlKSwgYnVmZmVyX3NpemU9MTI4ICogMTAyNCkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZmlsZSBvcGVuIG1vZGU6ICVzLicgJSBtb2RlKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGRlbGV0ZShzZWxmLCBwYXRoKToKICAgICIiIkRlbGV0ZXMgdGhlIG9iamVjdCBhdCB0aGUgZ2l2ZW4gR0NTIHBhdGguCgogICAgQXJnczoKICAgICAgcGF0aDogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgIiIiCiAgICBidWNrZXQsIG9iamVjdF9wYXRoID0gcGFyc2VfZ2NzX3BhdGgocGF0aCkKICAgIHJlcXVlc3QgPSBzdG9yYWdlLlN0b3JhZ2VPYmplY3RzRGVsZXRlUmVxdWVzdCgKICAgICAgICBidWNrZXQ9YnVja2V0LCBvYmplY3Q9b2JqZWN0X3BhdGgpCiAgICB0cnk6CiAgICAgIHNlbGYuY2xpZW50Lm9iamVjdHMuRGVsZXRlKHJlcXVlc3QpCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGh0dHBfZXJyb3I6CiAgICAgIGlmIGh0dHBfZXJyb3Iuc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgICMgUmV0dXJuIHN1Y2Nlc3Mgd2hlbiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFueW1vcmUgZm9yIGlkZW1wb3RlbmN5LgogICAgICAgIHJldHVybgogICAgICByYWlzZQoKICAjIFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlY29yYXRlIHRoaXMgbWV0aG9kIHdpdGggYSByZXRyeSwgYXMgcmV0cnlpbmcgaXMKICAjIGhhbmRsZWQgaW4gQmF0Y2hBcGlSZXF1ZXN0LkV4ZWN1dGUoKS4KICBkZWYgZGVsZXRlX2JhdGNoKHNlbGYsIHBhdGhzKToKICAgICIiIkRlbGV0ZXMgdGhlIG9iamVjdHMgYXQgdGhlIGdpdmVuIEdDUyBwYXRocy4KCiAgICBBcmdzOgogICAgICBwYXRoczogTGlzdCBvZiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm5zIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LAogICAgICAgICAgICAgbm90IHRvIGV4Y2VlZCBNQVhfQkFUQ0hfT1BFUkFUSU9OX1NJWkUgaW4gbGVuZ3RoLgoKICAgIFJldHVybnM6IExpc3Qgb2YgdHVwbGVzIG9mIChwYXRoLCBleGNlcHRpb24pIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBwYXRocwogICAgICAgICAgICAgYXJndW1lbnQsIHdoZXJlIGV4Y2VwdGlvbiBpcyBOb25lIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkIG9yCiAgICAgICAgICAgICB0aGUgcmVsZXZhbnQgZXhjZXB0aW9uIGlmIHRoZSBvcGVyYXRpb24gZmFpbGVkLgogICAgIiIiCiAgICBpZiBub3QgcGF0aHM6CiAgICAgIHJldHVybiBbXQogICAgYmF0Y2hfcmVxdWVzdCA9IEJhdGNoQXBpUmVxdWVzdCgKICAgICAgICBiYXRjaF91cmw9R0NTX0JBVENIX0VORFBPSU5ULAogICAgICAgIHJldHJ5YWJsZV9jb2Rlcz1yZXRyeS5TRVJWRVJfRVJST1JfT1JfVElNRU9VVF9DT0RFUywKICAgICAgICByZXNwb25zZV9lbmNvZGluZz0ndXRmLTgnKQogICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgIGJ1Y2tldCwgb2JqZWN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYXRoKQogICAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0RlbGV0ZVJlcXVlc3QoCiAgICAgICAgICBidWNrZXQ9YnVja2V0LCBvYmplY3Q9b2JqZWN0X3BhdGgpCiAgICAgIGJhdGNoX3JlcXVlc3QuQWRkKHNlbGYuY2xpZW50Lm9iamVjdHMsICdEZWxldGUnLCByZXF1ZXN0KQogICAgYXBpX2NhbGxzID0gYmF0Y2hfcmVxdWVzdC5FeGVjdXRlKHNlbGYuY2xpZW50Ll9odHRwKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgcmVzdWx0X3N0YXR1c2VzID0gW10KICAgIGZvciBpLCBhcGlfY2FsbCBpbiBlbnVtZXJhdGUoYXBpX2NhbGxzKToKICAgICAgcGF0aCA9IHBhdGhzW2ldCiAgICAgIGV4Y2VwdGlvbiA9IE5vbmUKICAgICAgaWYgYXBpX2NhbGwuaXNfZXJyb3I6CiAgICAgICAgZXhjZXB0aW9uID0gYXBpX2NhbGwuZXhjZXB0aW9uCiAgICAgICAgIyBSZXR1cm4gc3VjY2VzcyB3aGVuIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW55bW9yZSBmb3IgaWRlbXBvdGVuY3kuCiAgICAgICAgaWYgaXNpbnN0YW5jZShleGNlcHRpb24sIEh0dHBFcnJvcikgYW5kIGV4Y2VwdGlvbi5zdGF0dXNfY29kZSA9PSA0MDQ6CiAgICAgICAgICBleGNlcHRpb24gPSBOb25lCiAgICAgIHJlc3VsdF9zdGF0dXNlcy5hcHBlbmQoKHBhdGgsIGV4Y2VwdGlvbikpCiAgICByZXR1cm4gcmVzdWx0X3N0YXR1c2VzCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgY29weSgKICAgICAgc2VsZiwKICAgICAgc3JjLAogICAgICBkZXN0LAogICAgICBkZXN0X2ttc19rZXlfbmFtZT1Ob25lLAogICAgICBtYXhfYnl0ZXNfcmV3cml0dGVuX3Blcl9jYWxsPU5vbmUpOgogICAgIiIiQ29waWVzIHRoZSBnaXZlbiBHQ1Mgb2JqZWN0IGZyb20gc3JjIHRvIGRlc3QuCgogICAgQXJnczoKICAgICAgc3JjOiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88bmFtZT4uCiAgICAgIGRlc3Q6IEdDUyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxuYW1lPi4KICAgICAgZGVzdF9rbXNfa2V5X25hbWU6IEV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAgICAgICBFbmNyeXB0IGRlc3Qgd2l0aCB0aGlzIENsb3VkIEtNUyBrZXkuIElmIE5vbmUsIHdpbGwgdXNlIGRlc3QgYnVja2V0CiAgICAgICAgZW5jcnlwdGlvbiBkZWZhdWx0cy4KICAgICAgbWF4X2J5dGVzX3Jld3JpdHRlbl9wZXJfY2FsbDogRXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgICAgIGd1YXJhbnRlZXMuIEVhY2ggcmV3cml0ZSBBUEkgY2FsbCB3aWxsIHJldHVybiBhZnRlciB0aGVzZSBtYW55IGJ5dGVzLgogICAgICAgIFVzZWQgZm9yIHRlc3RpbmcuCgogICAgUmFpc2VzOgogICAgICBUaW1lb3V0RXJyb3I6IG9uIHRpbWVvdXQuCiAgICAiIiIKICAgIHNyY19idWNrZXQsIHNyY19wYXRoID0gcGFyc2VfZ2NzX3BhdGgoc3JjKQogICAgZGVzdF9idWNrZXQsIGRlc3RfcGF0aCA9IHBhcnNlX2djc19wYXRoKGRlc3QpCiAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c1Jld3JpdGVSZXF1ZXN0KAogICAgICAgIHNvdXJjZUJ1Y2tldD1zcmNfYnVja2V0LAogICAgICAgIHNvdXJjZU9iamVjdD1zcmNfcGF0aCwKICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldD1kZXN0X2J1Y2tldCwKICAgICAgICBkZXN0aW5hdGlvbk9iamVjdD1kZXN0X3BhdGgsCiAgICAgICAgZGVzdGluYXRpb25LbXNLZXlOYW1lPWRlc3Rfa21zX2tleV9uYW1lLAogICAgICAgIG1heEJ5dGVzUmV3cml0dGVuUGVyQ2FsbD1tYXhfYnl0ZXNfcmV3cml0dGVuX3Blcl9jYWxsKQogICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5vYmplY3RzLlJld3JpdGUocmVxdWVzdCkKICAgIHdoaWxlIG5vdCByZXNwb25zZS5kb25lOgogICAgICBfTE9HR0VSLmRlYnVnKAogICAgICAgICAgJ1Jld3JpdGUgcHJvZ3Jlc3M6ICVkIG9mICVkIGJ5dGVzLCAlcyB0byAlcycsCiAgICAgICAgICByZXNwb25zZS50b3RhbEJ5dGVzUmV3cml0dGVuLAogICAgICAgICAgcmVzcG9uc2Uub2JqZWN0U2l6ZSwKICAgICAgICAgIHNyYywKICAgICAgICAgIGRlc3QpCiAgICAgIHJlcXVlc3QucmV3cml0ZVRva2VuID0gcmVzcG9uc2UucmV3cml0ZVRva2VuCiAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQub2JqZWN0cy5SZXdyaXRlKHJlcXVlc3QpCiAgICAgIGlmIHNlbGYuX3Jld3JpdGVfY2IgaXMgbm90IE5vbmU6CiAgICAgICAgc2VsZi5fcmV3cml0ZV9jYihyZXNwb25zZSkKCiAgICBfTE9HR0VSLmRlYnVnKCdSZXdyaXRlIGRvbmU6ICVzIHRvICVzJywgc3JjLCBkZXN0KQoKICAjIFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlY29yYXRlIHRoaXMgbWV0aG9kIHdpdGggYSByZXRyeSwgYXMgcmV0cnlpbmcgaXMKICAjIGhhbmRsZWQgaW4gQmF0Y2hBcGlSZXF1ZXN0LkV4ZWN1dGUoKS4KICBkZWYgY29weV9iYXRjaCgKICAgICAgc2VsZiwKICAgICAgc3JjX2Rlc3RfcGFpcnMsCiAgICAgIGRlc3Rfa21zX2tleV9uYW1lPU5vbmUsCiAgICAgIG1heF9ieXRlc19yZXdyaXR0ZW5fcGVyX2NhbGw9Tm9uZSk6CiAgICAiIiJDb3BpZXMgdGhlIGdpdmVuIEdDUyBvYmplY3QgZnJvbSBzcmMgdG8gZGVzdC4KCiAgICBBcmdzOgogICAgICBzcmNfZGVzdF9wYWlyczogbGlzdCBvZiAoc3JjLCBkZXN0KSB0dXBsZXMgb2YgZ3M6Ly88YnVja2V0Pi88bmFtZT4gZmlsZXMKICAgICAgICAgICAgICAgICAgICAgIHBhdGhzIHRvIGNvcHkgZnJvbSBzcmMgdG8gZGVzdCwgbm90IHRvIGV4Y2VlZAogICAgICAgICAgICAgICAgICAgICAgTUFYX0JBVENIX09QRVJBVElPTl9TSVpFIGluIGxlbmd0aC4KICAgICAgZGVzdF9rbXNfa2V5X25hbWU6IEV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAgICAgICBFbmNyeXB0IGRlc3Qgd2l0aCB0aGlzIENsb3VkIEtNUyBrZXkuIElmIE5vbmUsIHdpbGwgdXNlIGRlc3QgYnVja2V0CiAgICAgICAgZW5jcnlwdGlvbiBkZWZhdWx0cy4KICAgICAgbWF4X2J5dGVzX3Jld3JpdHRlbl9wZXJfY2FsbDogRXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgICAgIGd1YXJhbnRlZXMuIEVhY2ggcmV3cml0ZSBjYWxsIHdpbGwgcmV0dXJuIGFmdGVyIHRoZXNlIG1hbnkgYnl0ZXMuIFVzZWQKICAgICAgICBwcmltYXJpbHkgZm9yIHRlc3RpbmcuCgogICAgUmV0dXJuczogTGlzdCBvZiB0dXBsZXMgb2YgKHNyYywgZGVzdCwgZXhjZXB0aW9uKSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUKICAgICAgICAgICAgIHNyY19kZXN0X3BhaXJzIGFyZ3VtZW50LCB3aGVyZSBleGNlcHRpb24gaXMgTm9uZSBpZiB0aGUgb3BlcmF0aW9uCiAgICAgICAgICAgICBzdWNjZWVkZWQgb3IgdGhlIHJlbGV2YW50IGV4Y2VwdGlvbiBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC4KICAgICIiIgogICAgaWYgbm90IHNyY19kZXN0X3BhaXJzOgogICAgICByZXR1cm4gW10KICAgIHBhaXJfdG9fcmVxdWVzdCA9IHt9CiAgICBmb3IgcGFpciBpbiBzcmNfZGVzdF9wYWlyczoKICAgICAgc3JjX2J1Y2tldCwgc3JjX3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYWlyWzBdKQogICAgICBkZXN0X2J1Y2tldCwgZGVzdF9wYXRoID0gcGFyc2VfZ2NzX3BhdGgocGFpclsxXSkKICAgICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNSZXdyaXRlUmVxdWVzdCgKICAgICAgICAgIHNvdXJjZUJ1Y2tldD1zcmNfYnVja2V0LAogICAgICAgICAgc291cmNlT2JqZWN0PXNyY19wYXRoLAogICAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ9ZGVzdF9idWNrZXQsCiAgICAgICAgICBkZXN0aW5hdGlvbk9iamVjdD1kZXN0X3BhdGgsCiAgICAgICAgICBkZXN0aW5hdGlvbkttc0tleU5hbWU9ZGVzdF9rbXNfa2V5X25hbWUsCiAgICAgICAgICBtYXhCeXRlc1Jld3JpdHRlblBlckNhbGw9bWF4X2J5dGVzX3Jld3JpdHRlbl9wZXJfY2FsbCkKICAgICAgcGFpcl90b19yZXF1ZXN0W3BhaXJdID0gcmVxdWVzdAogICAgcGFpcl90b19zdGF0dXMgPSB7fQogICAgd2hpbGUgVHJ1ZToKICAgICAgcGFpcnNfaW5fYmF0Y2ggPSBsaXN0KHNldChzcmNfZGVzdF9wYWlycykgLSBzZXQocGFpcl90b19zdGF0dXMpKQogICAgICBpZiBub3QgcGFpcnNfaW5fYmF0Y2g6CiAgICAgICAgYnJlYWsKICAgICAgYmF0Y2hfcmVxdWVzdCA9IEJhdGNoQXBpUmVxdWVzdCgKICAgICAgICAgIGJhdGNoX3VybD1HQ1NfQkFUQ0hfRU5EUE9JTlQsCiAgICAgICAgICByZXRyeWFibGVfY29kZXM9cmV0cnkuU0VSVkVSX0VSUk9SX09SX1RJTUVPVVRfQ09ERVMsCiAgICAgICAgICByZXNwb25zZV9lbmNvZGluZz0ndXRmLTgnKQogICAgICBmb3IgcGFpciBpbiBwYWlyc19pbl9iYXRjaDoKICAgICAgICBiYXRjaF9yZXF1ZXN0LkFkZChzZWxmLmNsaWVudC5vYmplY3RzLCAnUmV3cml0ZScsIHBhaXJfdG9fcmVxdWVzdFtwYWlyXSkKICAgICAgYXBpX2NhbGxzID0gYmF0Y2hfcmVxdWVzdC5FeGVjdXRlKHNlbGYuY2xpZW50Ll9odHRwKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICBmb3IgcGFpciwgYXBpX2NhbGwgaW4gemlwKHBhaXJzX2luX2JhdGNoLCBhcGlfY2FsbHMpOgogICAgICAgIHNyYywgZGVzdCA9IHBhaXIKICAgICAgICByZXNwb25zZSA9IGFwaV9jYWxsLnJlc3BvbnNlCiAgICAgICAgaWYgc2VsZi5fcmV3cml0ZV9jYiBpcyBub3QgTm9uZToKICAgICAgICAgIHNlbGYuX3Jld3JpdGVfY2IocmVzcG9uc2UpCiAgICAgICAgaWYgYXBpX2NhbGwuaXNfZXJyb3I6CiAgICAgICAgICBleGNlcHRpb24gPSBhcGlfY2FsbC5leGNlcHRpb24KICAgICAgICAgICMgVHJhbnNsYXRlIDQwNCB0byB0aGUgYXBwcm9wcmlhdGUgbm90IGZvdW5kIGV4Y2VwdGlvbi4KICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpIGFuZCBleGNlcHRpb24uc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgICAgICBleGNlcHRpb24gPSAoCiAgICAgICAgICAgICAgICBHY3NJT0Vycm9yKGVycm5vLkVOT0VOVCwgJ1NvdXJjZSBmaWxlIG5vdCBmb3VuZDogJXMnICUgc3JjKSkKICAgICAgICAgIHBhaXJfdG9fc3RhdHVzW3BhaXJdID0gZXhjZXB0aW9uCiAgICAgICAgZWxpZiBub3QgcmVzcG9uc2UuZG9uZToKICAgICAgICAgIF9MT0dHRVIuZGVidWcoCiAgICAgICAgICAgICAgJ1Jld3JpdGUgcHJvZ3Jlc3M6ICVkIG9mICVkIGJ5dGVzLCAlcyB0byAlcycsCiAgICAgICAgICAgICAgcmVzcG9uc2UudG90YWxCeXRlc1Jld3JpdHRlbiwKICAgICAgICAgICAgICByZXNwb25zZS5vYmplY3RTaXplLAogICAgICAgICAgICAgIHNyYywKICAgICAgICAgICAgICBkZXN0KQogICAgICAgICAgcGFpcl90b19yZXF1ZXN0W3BhaXJdLnJld3JpdGVUb2tlbiA9IHJlc3BvbnNlLnJld3JpdGVUb2tlbgogICAgICAgIGVsc2U6CiAgICAgICAgICBfTE9HR0VSLmRlYnVnKCdSZXdyaXRlIGRvbmU6ICVzIHRvICVzJywgc3JjLCBkZXN0KQogICAgICAgICAgcGFpcl90b19zdGF0dXNbcGFpcl0gPSBOb25lCgogICAgcmV0dXJuIFsocGFpclswXSwgcGFpclsxXSwgcGFpcl90b19zdGF0dXNbcGFpcl0pIGZvciBwYWlyIGluIHNyY19kZXN0X3BhaXJzXQoKICAjIFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlY29yYXRlIHRoaXMgbWV0aG9kIHdpdGggYSByZXRyeSwgc2luY2UgdGhlCiAgIyB1bmRlcmx5aW5nIGNvcHkgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IGlkZW1wb3RlbnQgb3BlcmF0aW9ucwogICMgcHJvdGVjdGVkIGJ5IHJldHJ5IGRlY29yYXRvcnMuCiAgZGVmIGNvcHl0cmVlKHNlbGYsIHNyYywgZGVzdCk6CiAgICAiIiJSZW5hbWVzIHRoZSBnaXZlbiBHQ1MgImRpcmVjdG9yeSIgcmVjdXJzaXZlbHkgZnJvbSBzcmMgdG8gZGVzdC4KCiAgICBBcmdzOgogICAgICBzcmM6IEdDUyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxuYW1lPi8uCiAgICAgIGRlc3Q6IEdDUyBmaWxlIHBhdGggcGF0dGVybiBpbiB0aGUgZm9ybSBnczovLzxidWNrZXQ+LzxuYW1lPi8uCiAgICAiIiIKICAgIGFzc2VydCBzcmMuZW5kc3dpdGgoJy8nKQogICAgYXNzZXJ0IGRlc3QuZW5kc3dpdGgoJy8nKQogICAgZm9yIGVudHJ5IGluIHNlbGYubGlzdF9wcmVmaXgoc3JjKToKICAgICAgcmVsX3BhdGggPSBlbnRyeVtsZW4oc3JjKTpdCiAgICAgIHNlbGYuY29weShlbnRyeSwgZGVzdCArIHJlbF9wYXRoKQoKICAjIFdlIGludGVudGlvbmFsbHkgZG8gbm90IGRlY29yYXRlIHRoaXMgbWV0aG9kIHdpdGggYSByZXRyeSwgc2luY2UgdGhlCiAgIyB1bmRlcmx5aW5nIGNvcHkgYW5kIGRlbGV0ZSBvcGVyYXRpb25zIGFyZSBhbHJlYWR5IGlkZW1wb3RlbnQgb3BlcmF0aW9ucwogICMgcHJvdGVjdGVkIGJ5IHJldHJ5IGRlY29yYXRvcnMuCiAgZGVmIHJlbmFtZShzZWxmLCBzcmMsIGRlc3QpOgogICAgIiIiUmVuYW1lcyB0aGUgZ2l2ZW4gR0NTIG9iamVjdCBmcm9tIHNyYyB0byBkZXN0LgoKICAgIEFyZ3M6CiAgICAgIHNyYzogR0NTIGZpbGUgcGF0aCBwYXR0ZXJuIGluIHRoZSBmb3JtIGdzOi8vPGJ1Y2tldD4vPG5hbWU+LgogICAgICBkZXN0OiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88bmFtZT4uCiAgICAiIiIKICAgIHNlbGYuY29weShzcmMsIGRlc3QpCiAgICBzZWxmLmRlbGV0ZShzcmMpCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgogICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBHQ1Mgb2JqZWN0IGV4aXN0cy4KCiAgICBBcmdzOgogICAgICBwYXRoOiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88bmFtZT4uCiAgICAiIiIKICAgIGJ1Y2tldCwgb2JqZWN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYXRoKQogICAgdHJ5OgogICAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0dldFJlcXVlc3QoCiAgICAgICAgICBidWNrZXQ9YnVja2V0LCBvYmplY3Q9b2JqZWN0X3BhdGgpCiAgICAgIHNlbGYuY2xpZW50Lm9iamVjdHMuR2V0KHJlcXVlc3QpICAjIG1ldGFkYXRhCiAgICAgIHJldHVybiBUcnVlCiAgICBleGNlcHQgSHR0cEVycm9yIGFzIGh0dHBfZXJyb3I6CiAgICAgIGlmIGh0dHBfZXJyb3Iuc3RhdHVzX2NvZGUgPT0gNDA0OgogICAgICAgICMgSFRUUCA0MDQgaW5kaWNhdGVzIHRoYXQgdGhlIGZpbGUgZGlkIG5vdCBleGlzdAogICAgICAgIHJldHVybiBGYWxzZQogICAgICBlbHNlOgogICAgICAgICMgV2UgcmUtcmFpc2UgYWxsIG90aGVyIGV4Y2VwdGlvbnMKICAgICAgICByYWlzZQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGNoZWNrc3VtKHNlbGYsIHBhdGgpOgogICAgIiIiTG9va3MgdXAgdGhlIGNoZWNrc3VtIG9mIGEgR0NTIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi88bmFtZT4uCiAgICAiIiIKICAgIGJ1Y2tldCwgb2JqZWN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYXRoKQogICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNHZXRSZXF1ZXN0KAogICAgICAgIGJ1Y2tldD1idWNrZXQsIG9iamVjdD1vYmplY3RfcGF0aCkKICAgIHJldHVybiBzZWxmLmNsaWVudC5vYmplY3RzLkdldChyZXF1ZXN0KS5jcmMzMmMKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBzaXplKHNlbGYsIHBhdGgpOgogICAgIiIiUmV0dXJucyB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBHQ1Mgb2JqZWN0LgoKICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gZ2xvYiBleHBhbnNpb24uIEhlbmNlIHRoZSBnaXZlbiBwYXRoIG11c3QgYmUKICAgIGZvciBhIHNpbmdsZSBHQ1Mgb2JqZWN0LgoKICAgIFJldHVybnM6IHNpemUgb2YgdGhlIEdDUyBvYmplY3QgaW4gYnl0ZXMuCiAgICAiIiIKICAgIGJ1Y2tldCwgb2JqZWN0X3BhdGggPSBwYXJzZV9nY3NfcGF0aChwYXRoKQogICAgcmVxdWVzdCA9IHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNHZXRSZXF1ZXN0KAogICAgICAgIGJ1Y2tldD1idWNrZXQsIG9iamVjdD1vYmplY3RfcGF0aCkKICAgIHJldHVybiBzZWxmLmNsaWVudC5vYmplY3RzLkdldChyZXF1ZXN0KS5zaXplCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYga21zX2tleShzZWxmLCBwYXRoKToKICAgICIiIlJldHVybnMgdGhlIEtNUyBrZXkgb2YgYSBzaW5nbGUgR0NTIG9iamVjdC4KCiAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwZXJmb3JtIGdsb2IgZXhwYW5zaW9uLiBIZW5jZSB0aGUgZ2l2ZW4gcGF0aCBtdXN0IGJlCiAgICBmb3IgYSBzaW5nbGUgR0NTIG9iamVjdC4KCiAgICBSZXR1cm5zOiBLTVMga2V5IG5hbWUgb2YgdGhlIEdDUyBvYmplY3QgYXMgYSBzdHJpbmcsIG9yIE5vbmUgaWYgaXQgZG9lc24ndAogICAgICBoYXZlIG9uZS4KICAgICIiIgogICAgYnVja2V0LCBvYmplY3RfcGF0aCA9IHBhcnNlX2djc19wYXRoKHBhdGgpCiAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0dldFJlcXVlc3QoCiAgICAgICAgYnVja2V0PWJ1Y2tldCwgb2JqZWN0PW9iamVjdF9wYXRoKQogICAgcmV0dXJuIHNlbGYuY2xpZW50Lm9iamVjdHMuR2V0KHJlcXVlc3QpLmttc0tleU5hbWUKCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5LnJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKQogIGRlZiBsYXN0X3VwZGF0ZWQoc2VsZiwgcGF0aCk6CiAgICAiIiJSZXR1cm5zIHRoZSBsYXN0IHVwZGF0ZWQgZXBvY2ggdGltZSBvZiBhIHNpbmdsZSBHQ1Mgb2JqZWN0LgoKICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IHBlcmZvcm0gZ2xvYiBleHBhbnNpb24uIEhlbmNlIHRoZSBnaXZlbiBwYXRoIG11c3QgYmUKICAgIGZvciBhIHNpbmdsZSBHQ1Mgb2JqZWN0LgoKICAgIFJldHVybnM6IGxhc3QgdXBkYXRlZCB0aW1lIG9mIHRoZSBHQ1Mgb2JqZWN0IGluIHNlY29uZC4KICAgICIiIgogICAgYnVja2V0LCBvYmplY3RfcGF0aCA9IHBhcnNlX2djc19wYXRoKHBhdGgpCiAgICByZXF1ZXN0ID0gc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0dldFJlcXVlc3QoCiAgICAgICAgYnVja2V0PWJ1Y2tldCwgb2JqZWN0PW9iamVjdF9wYXRoKQogICAgZGF0ZXRpbWUgPSBzZWxmLmNsaWVudC5vYmplY3RzLkdldChyZXF1ZXN0KS51cGRhdGVkCiAgICByZXR1cm4gKAogICAgICAgIHRpbWUubWt0aW1lKGRhdGV0aW1lLnRpbWV0dXBsZSgpKSAtIHRpbWUudGltZXpvbmUgKwogICAgICAgIGRhdGV0aW1lLm1pY3Jvc2Vjb25kIC8gMTAwMDAwMC4wKQoKICBAcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKAogICAgICByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfdGltZW91dF9maWx0ZXIpCiAgZGVmIGxpc3RfcHJlZml4KHNlbGYsIHBhdGgpOgogICAgIiIiTGlzdHMgZmlsZXMgbWF0Y2hpbmcgdGhlIHByZWZpeC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBHQ1MgZmlsZSBwYXRoIHBhdHRlcm4gaW4gdGhlIGZvcm0gZ3M6Ly88YnVja2V0Pi9bbmFtZV0uCgogICAgUmV0dXJuczoKICAgICAgRGljdGlvbmFyeSBvZiBmaWxlIG5hbWUgLT4gc2l6ZS4KICAgICIiIgogICAgYnVja2V0LCBwcmVmaXggPSBwYXJzZV9nY3NfcGF0aChwYXRoLCBvYmplY3Rfb3B0aW9uYWw9VHJ1ZSkKICAgIHJlcXVlc3QgPSBzdG9yYWdlLlN0b3JhZ2VPYmplY3RzTGlzdFJlcXVlc3QoYnVja2V0PWJ1Y2tldCwgcHJlZml4PXByZWZpeCkKICAgIGZpbGVfc2l6ZXMgPSB7fQogICAgY291bnRlciA9IDAKICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgX0xPR0dFUi5pbmZvKCJTdGFydGluZyB0aGUgc2l6ZSBlc3RpbWF0aW9uIG9mIHRoZSBpbnB1dCIpCiAgICB3aGlsZSBUcnVlOgogICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50Lm9iamVjdHMuTGlzdChyZXF1ZXN0KQogICAgICBmb3IgaXRlbSBpbiByZXNwb25zZS5pdGVtczoKICAgICAgICBmaWxlX25hbWUgPSAnZ3M6Ly8lcy8lcycgJSAoaXRlbS5idWNrZXQsIGl0ZW0ubmFtZSkKICAgICAgICBmaWxlX3NpemVzW2ZpbGVfbmFtZV0gPSBpdGVtLnNpemUKICAgICAgICBjb3VudGVyICs9IDEKICAgICAgICBpZiBjb3VudGVyICUgMTAwMDAgPT0gMDoKICAgICAgICAgIF9MT0dHRVIuaW5mbygiRmluaXNoZWQgY29tcHV0aW5nIHNpemUgb2Y6ICVzIGZpbGVzIiwgbGVuKGZpbGVfc2l6ZXMpKQogICAgICBpZiByZXNwb25zZS5uZXh0UGFnZVRva2VuOgogICAgICAgIHJlcXVlc3QucGFnZVRva2VuID0gcmVzcG9uc2UubmV4dFBhZ2VUb2tlbgogICAgICBlbHNlOgogICAgICAgIGJyZWFrCiAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgIkZpbmlzaGVkIGxpc3RpbmcgJXMgZmlsZXMgaW4gJXMgc2Vjb25kcy4iLAogICAgICAgIGNvdW50ZXIsCiAgICAgICAgdGltZS50aW1lKCkgLSBzdGFydF90aW1lKQogICAgcmV0dXJuIGZpbGVfc2l6ZXMKCgpjbGFzcyBHY3NEb3dubG9hZGVyKERvd25sb2FkZXIpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBjbGllbnQsIHBhdGgsIGJ1ZmZlcl9zaXplKToKICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAogICAgc2VsZi5fcGF0aCA9IHBhdGgKICAgIHNlbGYuX2J1Y2tldCwgc2VsZi5fbmFtZSA9IHBhcnNlX2djc19wYXRoKHBhdGgpCiAgICBzZWxmLl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCgogICAgIyBHZXQgb2JqZWN0IHN0YXRlLgogICAgc2VsZi5fZ2V0X3JlcXVlc3QgPSAoCiAgICAgICAgc3RvcmFnZS5TdG9yYWdlT2JqZWN0c0dldFJlcXVlc3QoCiAgICAgICAgICAgIGJ1Y2tldD1zZWxmLl9idWNrZXQsIG9iamVjdD1zZWxmLl9uYW1lKSkKICAgIHRyeToKICAgICAgbWV0YWRhdGEgPSBzZWxmLl9nZXRfb2JqZWN0X21ldGFkYXRhKHNlbGYuX2dldF9yZXF1ZXN0KQogICAgZXhjZXB0IEh0dHBFcnJvciBhcyBodHRwX2Vycm9yOgogICAgICBpZiBodHRwX2Vycm9yLnN0YXR1c19jb2RlID09IDQwNDoKICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVOT0VOVCwgJ05vdCBmb3VuZDogJXMnICUgc2VsZi5fcGF0aCkKICAgICAgZWxzZToKICAgICAgICBfTE9HR0VSLmVycm9yKAogICAgICAgICAgICAnSFRUUCBlcnJvciB3aGlsZSByZXF1ZXN0aW5nIGZpbGUgJXM6ICVzJywgc2VsZi5fcGF0aCwgaHR0cF9lcnJvcikKICAgICAgICByYWlzZQogICAgc2VsZi5fc2l6ZSA9IG1ldGFkYXRhLnNpemUKCiAgICAjIEVuc3VyZSByZWFkIGlzIGZyb20gZmlsZSBvZiB0aGUgY29ycmVjdCBnZW5lcmF0aW9uLgogICAgc2VsZi5fZ2V0X3JlcXVlc3QuZ2VuZXJhdGlvbiA9IG1ldGFkYXRhLmdlbmVyYXRpb24KCiAgICAjIEluaXRpYWxpemUgcmVhZCBidWZmZXIgc3RhdGUuCiAgICBzZWxmLl9kb3dubG9hZF9zdHJlYW0gPSBpby5CeXRlc0lPKCkKICAgIHNlbGYuX2Rvd25sb2FkZXIgPSB0cmFuc2Zlci5Eb3dubG9hZCgKICAgICAgICBzZWxmLl9kb3dubG9hZF9zdHJlYW0sCiAgICAgICAgYXV0b190cmFuc2Zlcj1GYWxzZSwKICAgICAgICBjaHVua3NpemU9c2VsZi5fYnVmZmVyX3NpemUsCiAgICAgICAgbnVtX3JldHJpZXM9MjApCiAgICBzZWxmLl9jbGllbnQub2JqZWN0cy5HZXQoc2VsZi5fZ2V0X3JlcXVlc3QsIGRvd25sb2FkPXNlbGYuX2Rvd25sb2FkZXIpCgogIEByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgIHJldHJ5X2ZpbHRlcj1yZXRyeS5yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcikKICBkZWYgX2dldF9vYmplY3RfbWV0YWRhdGEoc2VsZiwgZ2V0X3JlcXVlc3QpOgogICAgcmV0dXJuIHNlbGYuX2NsaWVudC5vYmplY3RzLkdldChnZXRfcmVxdWVzdCkKCiAgQHByb3BlcnR5CiAgZGVmIHNpemUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc2l6ZQoKICBkZWYgZ2V0X3JhbmdlKHNlbGYsIHN0YXJ0LCBlbmQpOgogICAgc2VsZi5fZG93bmxvYWRfc3RyZWFtLnNlZWsoMCkKICAgIHNlbGYuX2Rvd25sb2FkX3N0cmVhbS50cnVuY2F0ZSgwKQogICAgc2VsZi5fZG93bmxvYWRlci5HZXRSYW5nZShzdGFydCwgZW5kIC0gMSkKICAgIHJldHVybiBzZWxmLl9kb3dubG9hZF9zdHJlYW0uZ2V0dmFsdWUoKQoKCmNsYXNzIEdjc1VwbG9hZGVyKFVwbG9hZGVyKToKICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50LCBwYXRoLCBtaW1lX3R5cGUpOgogICAgc2VsZi5fY2xpZW50ID0gY2xpZW50CiAgICBzZWxmLl9wYXRoID0gcGF0aAogICAgc2VsZi5fYnVja2V0LCBzZWxmLl9uYW1lID0gcGFyc2VfZ2NzX3BhdGgocGF0aCkKICAgIHNlbGYuX21pbWVfdHlwZSA9IG1pbWVfdHlwZQoKICAgICMgU2V0IHVwIGNvbW11bmljYXRpb24gd2l0aCBjaGlsZCB0aHJlYWQuCiAgICBwYXJlbnRfY29ubiwgY2hpbGRfY29ubiA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKICAgIHNlbGYuX2NoaWxkX2Nvbm4gPSBjaGlsZF9jb25uCiAgICBzZWxmLl9jb25uID0gcGFyZW50X2Nvbm4KCiAgICAjIFNldCB1cCB1cGxvYWRlci4KICAgIHNlbGYuX2luc2VydF9yZXF1ZXN0ID0gKAogICAgICAgIHN0b3JhZ2UuU3RvcmFnZU9iamVjdHNJbnNlcnRSZXF1ZXN0KAogICAgICAgICAgICBidWNrZXQ9c2VsZi5fYnVja2V0LCBuYW1lPXNlbGYuX25hbWUpKQogICAgc2VsZi5fdXBsb2FkID0gdHJhbnNmZXIuVXBsb2FkKAogICAgICAgIFBpcGVTdHJlYW0oc2VsZi5fY2hpbGRfY29ubiksCiAgICAgICAgc2VsZi5fbWltZV90eXBlLAogICAgICAgIGNodW5rc2l6ZT1XUklURV9DSFVOS19TSVpFKQogICAgc2VsZi5fdXBsb2FkLnN0cmF0ZWd5ID0gdHJhbnNmZXIuUkVTVU1BQkxFX1VQTE9BRAoKICAgICMgU3RhcnQgdXBsb2FkaW5nIHRocmVhZC4KICAgIHNlbGYuX3VwbG9hZF90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zdGFydF91cGxvYWQpCiAgICBzZWxmLl91cGxvYWRfdGhyZWFkLmRhZW1vbiA9IFRydWUKICAgIHNlbGYuX3VwbG9hZF90aHJlYWQubGFzdF9lcnJvciA9IE5vbmUKICAgIHNlbGYuX3VwbG9hZF90aHJlYWQuc3RhcnQoKQoKICAjIFRPRE8oc2lsdml1Yyk6IFJlZmFjdG9yIHNvIHRoYXQgcmV0cnkgbG9naWMgY2FuIGJlIGFwcGxpZWQuCiAgIyBUaGVyZSBpcyByZXRyeSBsb2dpYyBpbiB0aGUgdW5kZXJseWluZyB0cmFuc2ZlciBsaWJyYXJ5IGJ1dCB3ZSBzaG91bGQgbWFrZQogICMgaXQgbW9yZSBleHBsaWNpdCBzbyB3ZSBjYW4gY29udHJvbCB0aGUgcmV0cnkgcGFyYW1ldGVycy4KICBAcmV0cnkubm9fcmV0cmllcyAgIyBVc2luZyBub19yZXRyaWVzIG1hcmtzIHRoaXMgYXMgYW4gaW50ZWdyYXRpb24gcG9pbnQuCiAgZGVmIF9zdGFydF91cGxvYWQoc2VsZik6CiAgICAjIFRoaXMgc3RhcnRzIHRoZSB1cGxvYWRlciB0aHJlYWQuICBXZSBhcmUgZm9yY2VkIHRvIHJ1biB0aGUgdXBsb2FkZXIgaW4KICAgICMgYW5vdGhlciB0aHJlYWQgYmVjYXVzZSB0aGUgYXBpdG9vbHMgdXBsb2FkZXIgaW5zaXN0cyBvbiB0YWtpbmcgYSBzdHJlYW0KICAgICMgYXMgaW5wdXQuIEhhcHBpbHksIHRoaXMgYWxzbyBtZWFucyB3ZSBnZXQgYXN5bmNocm9ub3VzIEkvTyB0byBHQ1MuCiAgICAjCiAgICAjIFRoZSB1cGxvYWRlciBieSBkZWZhdWx0IHRyYW5zZmVycyBkYXRhIGluIGNodW5rcyBvZiAxMDI0ICogMTAyNCBieXRlcyBhdAogICAgIyBhIHRpbWUsIGJ1ZmZlcmluZyB3cml0ZXMgdW50aWwgdGhhdCBzaXplIGlzIHJlYWNoZWQuCiAgICB0cnk6CiAgICAgIHNlbGYuX2NsaWVudC5vYmplY3RzLkluc2VydChzZWxmLl9pbnNlcnRfcmVxdWVzdCwgdXBsb2FkPXNlbGYuX3VwbG9hZCkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICBfTE9HR0VSLmVycm9yKAogICAgICAgICAgJ0Vycm9yIGluIF9zdGFydF91cGxvYWQgd2hpbGUgaW5zZXJ0aW5nIGZpbGUgJXM6ICVzJywKICAgICAgICAgIHNlbGYuX3BhdGgsCiAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogICAgICBzZWxmLl91cGxvYWRfdGhyZWFkLmxhc3RfZXJyb3IgPSBlCiAgICBmaW5hbGx5OgogICAgICBzZWxmLl9jaGlsZF9jb25uLmNsb3NlKCkKCiAgZGVmIHB1dChzZWxmLCBkYXRhKToKICAgIHRyeToKICAgICAgc2VsZi5fY29ubi5zZW5kX2J5dGVzKGRhdGEudG9ieXRlcygpKQogICAgZXhjZXB0IEVPRkVycm9yOgogICAgICBpZiBzZWxmLl91cGxvYWRfdGhyZWFkLmxhc3RfZXJyb3IgaXMgbm90IE5vbmU6CiAgICAgICAgcmFpc2Ugc2VsZi5fdXBsb2FkX3RocmVhZC5sYXN0X2Vycm9yICAjIHB5bGludDogZGlzYWJsZT1yYWlzaW5nLWJhZC10eXBlCiAgICAgIHJhaXNlCgogIGRlZiBmaW5pc2goc2VsZik6CiAgICBzZWxmLl9jb25uLmNsb3NlKCkKICAgICMgVE9ETyh1ZGltKTogQWRkIHRpbWVvdXQ9REVGQVVMVF9IVFRQX1RJTUVPVVRfU0VDT05EUyAqIDIgYW5kIHJhaXNlIGlmCiAgICAjIGlzQWxpdmUgaXMgVHJ1ZS4KICAgIHNlbGYuX3VwbG9hZF90aHJlYWQuam9pbigpCiAgICAjIENoZWNrIGZvciBleGNlcHRpb24gc2luY2UgdGhlIGxhc3QgcHV0KCkgY2FsbC4KICAgIGlmIHNlbGYuX3VwbG9hZF90aHJlYWQubGFzdF9lcnJvciBpcyBub3QgTm9uZToKICAgICAgcmFpc2Ugc2VsZi5fdXBsb2FkX3RocmVhZC5sYXN0X2Vycm9yICAjIHB5bGludDogZGlzYWJsZT1yYWlzaW5nLWJhZC10eXBlCpR9lCiMDnBhcnNlX2djc19wYXRolGpWMQEAS2lLboeUjApHY3NJT0Vycm9ylGpdMQEAS3FLc4eUjA5HY3NJTy5fX2luaXRfX5RqVjEBAEt4S4CHlIwkR2NzSU8uX3NldF9yZXdyaXRlX3Jlc3BvbnNlX2NhbGxiYWNrlGpWMQEAS4JLiIeUjApHY3NJTy5vcGVulGpWMQEAS4pLqoeUjAxHY3NJTy5kZWxldGWUalYxAQBLrEu9h5SMEkdjc0lPLmRlbGV0ZV9iYXRjaJRqVjEBAEvBS+KHlIwKR2NzSU8uY29weZRqVjEBAEvkTREBh5SMEEdjc0lPLmNvcHlfYmF0Y2iUalYxAQBNFQFNXQGHlIwOR2NzSU8uY29weXRyZWWUalYxAQBNYgFNbQGHlIwMR2NzSU8ucmVuYW1llGpWMQEATXIBTXoBh5SMDEdjc0lPLmV4aXN0c5RqVjEBAE18AU2QAYeUjA5HY3NJTy5jaGVja3N1bZRqVjEBAE2SAU2dAYeUjApHY3NJTy5zaXpllGpWMQEATZ8BTawBh5SMDUdjc0lPLmttc19rZXmUalYxAQBNrgFNvAGHlIwSR2NzSU8ubGFzdF91cGRhdGVklGpWMQEATb4BTc4Bh5SMEUdjc0lPLmxpc3RfcHJlZml4lGpWMQEATdABTfEBh5SMBUdjc0lPlGpdMQEAS3ZN8QGHlIwWR2NzRG93bmxvYWRlci5fX2luaXRfX5RqVjEBAE31AU0UAoeUjCJHY3NEb3dubG9hZGVyLl9nZXRfb2JqZWN0X21ldGFkYXRhlGpWMQEATRYCTRkCh5SMEkdjc0Rvd25sb2FkZXIuc2l6ZZRqVjEBAE0bAk0dAoeUjBdHY3NEb3dubG9hZGVyLmdldF9yYW5nZZRqVjEBAE0fAk0jAoeUjA1HY3NEb3dubG9hZGVylGpdMQEATfQBTSMCh5SMFEdjc1VwbG9hZGVyLl9faW5pdF9flGpWMQEATScCTUACh5SMGUdjc1VwbG9hZGVyLl9zdGFydF91cGxvYWSUalYxAQBNRQJNVgKHlIwPR2NzVXBsb2FkZXIucHV0lGpWMQEATVgCTV4Ch5SMEkdjc1VwbG9hZGVyLmZpbmlzaJRqVjEBAE1gAk1nAoeUjAtHY3NVcGxvYWRlcpRqXTEBAE0mAk1nAoeUdX2UKIwFR2NzSU+UapIDAACMCkdjc0lPLm9wZW6UapIDAACMDEdjc0lPLmRlbGV0ZZRqkgMAAIwSR2NzSU8uZGVsZXRlX2JhdGNolGqSAwAAjApHY3NJTy5jb3B5lGqSAwAAjBBHY3NJTy5jb3B5X2JhdGNolGqSAwAAjA5HY3NJTy5jb3B5dHJlZZRqkgMAAIwMR2NzSU8ucmVuYW1llGqSAwAAjAxHY3NJTy5leGlzdHOUapIDAACMDkdjc0lPLmNoZWNrc3VtlGqSAwAAjApHY3NJTy5zaXpllGqSAwAAjA1HY3NJTy5rbXNfa2V5lGqSAwAAjBJHY3NJTy5sYXN0X3VwZGF0ZWSUapIDAACMEUdjc0lPLmxpc3RfcHJlZml4lGqSAwAAdYwYYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2lvlHSUjCJhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9fb3ZlcnJpZGVzlChYNwgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBtYXRoCmltcG9ydCB0aW1lCgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljIGltcG9ydCBNZXRyaWNzCmZyb20gYXBpdG9vbHMuYmFzZS5weSBpbXBvcnQgZXhjZXB0aW9ucwpmcm9tIGFwaXRvb2xzLmJhc2UucHkgaW1wb3J0IGh0dHBfd3JhcHBlcgpmcm9tIGFwaXRvb2xzLmJhc2UucHkgaW1wb3J0IHV0aWwKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBHY3NJT092ZXJyaWRlcyhvYmplY3QpOgogICIiIkZ1bmN0aW9ucyBmb3Igb3ZlcnJpZGluZyBHb29nbGUgQ2xvdWQgU3RvcmFnZSBJL08gY2xpZW50LiIiIgoKICBfVEhST1RUTEVEX1NFQ1MgPSBNZXRyaWNzLmNvdW50ZXIoJ1N0b3JhZ2VWMScsICJjdW11bGF0aXZlVGhyb3R0bGluZ1NlY29uZHMiKQoKICBAY2xhc3NtZXRob2QKICBkZWYgcmV0cnlfZnVuYyhjbHMsIHJldHJ5X2FyZ3MpOgogICAgIyBoYW5kbGluZyBHQ1MgZG93bmxvYWQgdGhyb3R0bGluZyBlcnJvcnMgKEJFQU0tNzQyNCkKICAgIGlmIChpc2luc3RhbmNlKHJldHJ5X2FyZ3MuZXhjLCBleGNlcHRpb25zLkJhZFN0YXR1c0NvZGVFcnJvcikgYW5kCiAgICAgICAgcmV0cnlfYXJncy5leGMuc3RhdHVzX2NvZGUgPT0gaHR0cF93cmFwcGVyLlRPT19NQU5ZX1JFUVVFU1RTKToKICAgICAgX0xPR0dFUi5kZWJ1ZygKICAgICAgICAgICdDYXVnaHQgR0NTIHF1b3RhIGVycm9yICglcyksIHJldHJ5aW5nLicsIHJldHJ5X2FyZ3MuZXhjLnN0YXR1c19jb2RlKQogICAgZWxzZToKICAgICAgcmV0dXJuIGh0dHBfd3JhcHBlci5IYW5kbGVFeGNlcHRpb25zQW5kUmVidWlsZEh0dHBDb25uZWN0aW9ucyhyZXRyeV9hcmdzKQoKICAgIGh0dHBfd3JhcHBlci5SZWJ1aWxkSHR0cENvbm5lY3Rpb25zKHJldHJ5X2FyZ3MuaHR0cCkKICAgIF9MT0dHRVIuZGVidWcoCiAgICAgICAgJ1JldHJ5aW5nIHJlcXVlc3QgdG8gdXJsICVzIGFmdGVyIGV4Y2VwdGlvbiAlcycsCiAgICAgICAgcmV0cnlfYXJncy5odHRwX3JlcXVlc3QudXJsLAogICAgICAgIHJldHJ5X2FyZ3MuZXhjKQogICAgc2xlZXBfc2Vjb25kcyA9IHV0aWwuQ2FsY3VsYXRlV2FpdEZvclJldHJ5KAogICAgICAgIHJldHJ5X2FyZ3MubnVtX3JldHJpZXMsIG1heF93YWl0PXJldHJ5X2FyZ3MubWF4X3JldHJ5X3dhaXQpCiAgICBjbHMuX1RIUk9UVExFRF9TRUNTLmluYyhtYXRoLmNlaWwoc2xlZXBfc2Vjb25kcykpCiAgICB0aW1lLnNsZWVwKHNsZWVwX3NlY29uZHMpCpR9lCiMGUdjc0lPT3ZlcnJpZGVzLnJldHJ5X2Z1bmOUalYxAQBLJ0s5h5SMDkdjc0lPT3ZlcnJpZGVzlGpdMQEASyJLOYeUdX2UKIwOR2NzSU9PdmVycmlkZXOUan4DAACMGUdjc0lPT3ZlcnJpZGVzLnJldHJ5X2Z1bmOUan4DAAB1jCJhcGFjaGVfYmVhbS5pby5nY3AuZ2NzaW9fb3ZlcnJpZGVzlHSUjBlhcGFjaGVfYmVhbS5pby5nY3AucHVic3VilChYtz4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiR29vZ2xlIENsb3VkIFB1YlN1YiBzb3VyY2VzIGFuZCBzaW5rcy4KCkNsb3VkIFB1Yi9TdWIgc291cmNlcyBhbmQgc2lua3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgb25seSBpbiBzdHJlYW1pbmcKcGlwZWxpbmVzLCBkdXJpbmcgcmVtb3RlIGV4ZWN1dGlvbi4KClRoaXMgQVBJIGlzIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudCBhbmQgaXMgc3ViamVjdCB0byBjaGFuZ2UuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCByZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFdyaXRlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIGltcG9ydCBkZXByZWNhdGVkCgp0cnk6CiAgZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHB1YnN1YgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcHVic3ViID0gTm9uZQoKX19hbGxfXyA9IFsKICAgICdQdWJzdWJNZXNzYWdlJywKICAgICdSZWFkRnJvbVB1YlN1YicsCiAgICAnUmVhZFN0cmluZ3NGcm9tUHViU3ViJywKICAgICdXcml0ZVN0cmluZ3NUb1B1YlN1YicsCiAgICAnV3JpdGVUb1B1YlN1YicKXQoKCmNsYXNzIFB1YnN1Yk1lc3NhZ2Uob2JqZWN0KToKICAiIiJSZXByZXNlbnRzIGEgQ2xvdWQgUHViL1N1YiBtZXNzYWdlLgoKICBNZXNzYWdlIHBheWxvYWQgaW5jbHVkZXMgdGhlIGRhdGEgYW5kIGF0dHJpYnV0ZXMgZmllbGRzLiBGb3IgdGhlIHBheWxvYWQgdG8gYmUKICB2YWxpZCwgYXQgbGVhc3Qgb25lIG9mIGl0cyBmaWVsZHMgbXVzdCBiZSBub24tZW1wdHkuCgogIFRoaXMgaW50ZXJmYWNlIGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQXR0cmlidXRlczoKICAgIGRhdGE6IChieXRlcykgTWVzc2FnZSBkYXRhLiBNYXkgYmUgTm9uZS4KICAgIGF0dHJpYnV0ZXM6IChkaWN0KSBLZXktdmFsdWUgbWFwIG9mIHN0ciB0byBzdHIsIGNvbnRhaW5pbmcgYm90aCB1c2VyLWRlZmluZWQKICAgICAgYW5kIHNlcnZpY2UgZ2VuZXJhdGVkIGF0dHJpYnV0ZXMgKHN1Y2ggYXMgaWRfbGFiZWwgYW5kCiAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGUpLiBNYXkgYmUgTm9uZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgYXR0cmlidXRlcyk6CiAgICBpZiBkYXRhIGlzIE5vbmUgYW5kIG5vdCBhdHRyaWJ1dGVzOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0VpdGhlciBkYXRhICglcikgb3IgYXR0cmlidXRlcyAoJXIpIG11c3QgYmUgc2V0LicsIGRhdGEsIGF0dHJpYnV0ZXMpCiAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICBzZWxmLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLmRhdGEsIGZyb3plbnNldChzZWxmLmF0dHJpYnV0ZXMuaXRlbXMoKSkpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBQdWJzdWJNZXNzYWdlKSBhbmQgKAogICAgICAgIHNlbGYuZGF0YSA9PSBvdGhlci5kYXRhIGFuZCBzZWxmLmF0dHJpYnV0ZXMgPT0gb3RoZXIuYXR0cmlidXRlcykKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnUHVic3ViTWVzc2FnZSglcywgJXMpJyAlIChzZWxmLmRhdGEsIHNlbGYuYXR0cmlidXRlcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9wcm90b19zdHIocHJvdG9fbXNnKToKICAgICMgdHlwZTogKGJ5dGVzKSAtPiBQdWJzdWJNZXNzYWdlCgogICAgIiIiQ29uc3RydWN0IGZyb20gc2VyaWFsaXplZCBmb3JtIG9mIGBgUHVic3ViTWVzc2FnZWBgLgoKICAgIEFyZ3M6CiAgICAgIHByb3RvX21zZzogU3RyaW5nIGNvbnRhaW5pbmcgYSBzZXJpYWxpemVkIHByb3RvYnVmIG9mIHR5cGUKICAgICAgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3B1YnN1Yi9kb2NzL3JlZmVyZW5jZS9ycGMvZ29vZ2xlLnB1YnN1Yi52MSNnb29nbGUucHVic3ViLnYxLlB1YnN1Yk1lc3NhZ2UKCiAgICBSZXR1cm5zOgogICAgICBBIG5ldyBQdWJzdWJNZXNzYWdlIG9iamVjdC4KICAgICIiIgogICAgbXNnID0gcHVic3ViLnR5cGVzLnB1YnN1Yl9wYjIuUHVic3ViTWVzc2FnZSgpCiAgICBtc2cuUGFyc2VGcm9tU3RyaW5nKHByb3RvX21zZykKICAgICMgQ29udmVydCBTY2FsYXJNYXBDb250YWluZXIgdG8gZGljdC4KICAgIGF0dHJpYnV0ZXMgPSBkaWN0KChrZXksIG1zZy5hdHRyaWJ1dGVzW2tleV0pIGZvciBrZXkgaW4gbXNnLmF0dHJpYnV0ZXMpCiAgICByZXR1cm4gUHVic3ViTWVzc2FnZShtc2cuZGF0YSwgYXR0cmlidXRlcykKCiAgZGVmIF90b19wcm90b19zdHIoc2VsZik6CiAgICAiIiJHZXQgc2VyaWFsaXplZCBmb3JtIG9mIGBgUHVic3ViTWVzc2FnZWBgLgoKICAgIEFyZ3M6CiAgICAgIHByb3RvX21zZzogc3RyIGNvbnRhaW5pbmcgYSBzZXJpYWxpemVkIHByb3RvYnVmLgoKICAgIFJldHVybnM6CiAgICAgIEEgc3RyIGNvbnRhaW5pbmcgYSBzZXJpYWxpemVkIHByb3RvYnVmIG9mIHR5cGUKICAgICAgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3B1YnN1Yi9kb2NzL3JlZmVyZW5jZS9ycGMvZ29vZ2xlLnB1YnN1Yi52MSNnb29nbGUucHVic3ViLnYxLlB1YnN1Yk1lc3NhZ2UKICAgICAgY29udGFpbmluZyB0aGUgcGF5bG9hZCBvZiB0aGlzIG9iamVjdC4KICAgICIiIgogICAgbXNnID0gcHVic3ViLnR5cGVzLnB1YnN1Yl9wYjIuUHVic3ViTWVzc2FnZSgpCiAgICBtc2cuZGF0YSA9IHNlbGYuZGF0YQogICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlcml0ZW1zKHNlbGYuYXR0cmlidXRlcyk6CiAgICAgIG1zZy5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZQogICAgcmV0dXJuIG1zZy5TZXJpYWxpemVUb1N0cmluZygpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fbWVzc2FnZShtc2cpOgogICAgIyB0eXBlOiAoQW55KSAtPiBQdWJzdWJNZXNzYWdlCgogICAgIiIiQ29uc3RydWN0IGZyb20gYGBnb29nbGUuY2xvdWQucHVic3ViX3YxLnN1YnNjcmliZXIubWVzc2FnZS5NZXNzYWdlYGAuCgogICAgaHR0cHM6Ly9nb29nbGVhcGlzLmdpdGh1Yi5pby9nb29nbGUtY2xvdWQtcHl0aG9uL2xhdGVzdC9wdWJzdWIvc3Vic2NyaWJlci9hcGkvbWVzc2FnZS5odG1sCiAgICAiIiIKICAgICMgQ29udmVydCBTY2FsYXJNYXBDb250YWluZXIgdG8gZGljdC4KICAgIGF0dHJpYnV0ZXMgPSBkaWN0KChrZXksIG1zZy5hdHRyaWJ1dGVzW2tleV0pIGZvciBrZXkgaW4gbXNnLmF0dHJpYnV0ZXMpCiAgICByZXR1cm4gUHVic3ViTWVzc2FnZShtc2cuZGF0YSwgYXR0cmlidXRlcykKCgpjbGFzcyBSZWFkRnJvbVB1YlN1YihQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciByZWFkaW5nIGZyb20gQ2xvdWQgUHViL1N1Yi4iIiIKCiAgIyBJbXBsZW1lbnRhdGlvbiBub3RlOiBUaGlzIGBgUFRyYW5zZm9ybWBgIGlzIG92ZXJyaWRkZW4gYnkgRGlyZWN0cnVubmVyLgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgdG9waWM9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbc3RyXQogICAgICAgICAgICAgICBzdWJzY3JpcHRpb249Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbc3RyXQogICAgICAgICAgICAgICBpZF9sYWJlbD1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFtzdHJdCiAgICAgICAgICAgICAgIHdpdGhfYXR0cmlidXRlcz1GYWxzZSwgICMgdHlwZTogYm9vbAogICAgICAgICAgICAgICB0aW1lc3RhbXBfYXR0cmlidXRlPU5vbmUgICMgdHlwZTogT3B0aW9uYWxbc3RyXQogICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE5vbmUKCiAgICAiIiJJbml0aWFsaXplcyBgYFJlYWRGcm9tUHViU3ViYGAuCgogICAgQXJnczoKICAgICAgdG9waWM6IENsb3VkIFB1Yi9TdWIgdG9waWMgaW4gdGhlIGZvcm0KICAgICAgICAicHJvamVjdHMvPHByb2plY3Q+L3RvcGljcy88dG9waWM+Ii4gSWYgcHJvdmlkZWQsIHN1YnNjcmlwdGlvbiBtdXN0IGJlCiAgICAgICAgTm9uZS4KICAgICAgc3Vic2NyaXB0aW9uOiBFeGlzdGluZyBDbG91ZCBQdWIvU3ViIHN1YnNjcmlwdGlvbiB0byB1c2UgaW4gdGhlCiAgICAgICAgZm9ybSAicHJvamVjdHMvPHByb2plY3Q+L3N1YnNjcmlwdGlvbnMvPHN1YnNjcmlwdGlvbj4iLiBJZiBub3QKICAgICAgICBzcGVjaWZpZWQsIGEgdGVtcG9yYXJ5IHN1YnNjcmlwdGlvbiB3aWxsIGJlIGNyZWF0ZWQgZnJvbSB0aGUgc3BlY2lmaWVkCiAgICAgICAgdG9waWMuIElmIHByb3ZpZGVkLCB0b3BpYyBtdXN0IGJlIE5vbmUuCiAgICAgIGlkX2xhYmVsOiBUaGUgYXR0cmlidXRlIG9uIGluY29taW5nIFB1Yi9TdWIgbWVzc2FnZXMgdG8gdXNlIGFzIGEgdW5pcXVlCiAgICAgICAgcmVjb3JkIGlkZW50aWZpZXIuIFdoZW4gc3BlY2lmaWVkLCB0aGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgKHdoaWNoCiAgICAgICAgY2FuIGJlIGFueSBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZWNvcmQpIHdpbGwgYmUgdXNlZCBmb3IKICAgICAgICBkZWR1cGxpY2F0aW9uIG9mIG1lc3NhZ2VzLiBJZiBub3QgcHJvdmlkZWQsIHdlIGNhbm5vdCBndWFyYW50ZWUKICAgICAgICB0aGF0IG5vIGR1cGxpY2F0ZSBkYXRhIHdpbGwgYmUgZGVsaXZlcmVkIG9uIHRoZSBQdWIvU3ViIHN0cmVhbS4gSW4gdGhpcwogICAgICAgIGNhc2UsIGRlZHVwbGljYXRpb24gb2YgdGhlIHN0cmVhbSB3aWxsIGJlIHN0cmljdGx5IGJlc3QgZWZmb3J0LgogICAgICB3aXRoX2F0dHJpYnV0ZXM6CiAgICAgICAgVHJ1ZSAtIG91dHB1dCBlbGVtZW50cyB3aWxsIGJlIDpjbGFzczpgflB1YnN1Yk1lc3NhZ2VgIG9iamVjdHMuCiAgICAgICAgRmFsc2UgLSBvdXRwdXQgZWxlbWVudHMgd2lsbCBiZSBvZiB0eXBlIGBgYnl0ZXNgYCAobWVzc2FnZQogICAgICAgIGRhdGEgb25seSkuCiAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU6IE1lc3NhZ2UgdmFsdWUgdG8gdXNlIGFzIGVsZW1lbnQgdGltZXN0YW1wLiBJZiBOb25lLAogICAgICAgIHVzZXMgbWVzc2FnZSBwdWJsaXNoaW5nIHRpbWUgYXMgdGhlIHRpbWVzdGFtcC4KCiAgICAgICAgVGltZXN0YW1wIHZhbHVlcyBzaG91bGQgYmUgaW4gb25lIG9mIHR3byBmb3JtYXRzOgoKICAgICAgICAtIEEgbnVtZXJpY2FsIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUKICAgICAgICAgIFVuaXggZXBvY2guCiAgICAgICAgLSBBIHN0cmluZyBpbiBSRkMgMzMzOSBmb3JtYXQsIFVUQyB0aW1lem9uZS4gRXhhbXBsZToKICAgICAgICAgIGBgMjAxNS0xMC0yOVQyMzo0MTo0MS4xMjNaYGAuIFRoZSBzdWItc2Vjb25kIGNvbXBvbmVudCBvZiB0aGUKICAgICAgICAgIHRpbWVzdGFtcCBpcyBvcHRpb25hbCwgYW5kIGRpZ2l0cyBiZXlvbmQgdGhlIGZpcnN0IHRocmVlIChpLmUuLCB0aW1lCiAgICAgICAgICB1bml0cyBzbWFsbGVyIHRoYW4gbWlsbGlzZWNvbmRzKSBtYXkgYmUgaWdub3JlZC4KICAgICIiIgogICAgc3VwZXIoUmVhZEZyb21QdWJTdWIsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYud2l0aF9hdHRyaWJ1dGVzID0gd2l0aF9hdHRyaWJ1dGVzCiAgICBzZWxmLl9zb3VyY2UgPSBfUHViU3ViU291cmNlKAogICAgICAgIHRvcGljPXRvcGljLAogICAgICAgIHN1YnNjcmlwdGlvbj1zdWJzY3JpcHRpb24sCiAgICAgICAgaWRfbGFiZWw9aWRfbGFiZWwsCiAgICAgICAgd2l0aF9hdHRyaWJ1dGVzPXNlbGYud2l0aF9hdHRyaWJ1dGVzLAogICAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU9dGltZXN0YW1wX2F0dHJpYnV0ZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcGNvbGwgPSBwdmFsdWUucGlwZWxpbmUgfCBSZWFkKHNlbGYuX3NvdXJjZSkKICAgIHBjb2xsLmVsZW1lbnRfdHlwZSA9IGJ5dGVzCiAgICBpZiBzZWxmLndpdGhfYXR0cmlidXRlczoKICAgICAgcGNvbGwgPSBwY29sbCB8IE1hcChQdWJzdWJNZXNzYWdlLl9mcm9tX3Byb3RvX3N0cikKICAgICAgcGNvbGwuZWxlbWVudF90eXBlID0gUHVic3ViTWVzc2FnZQogICAgcmV0dXJuIHBjb2xsCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgICMgUmVxdWlyZWQgYXMgdGhpcyBpcyBpZGVudGlmaWVkIGJ5IHR5cGUgaW4gUFRyYW5zZm9ybU92ZXJyaWRlcy4KICAgICMgVE9ETyhCRUFNLTM4MTIpOiBVc2UgYW4gYWN0dWFsIFVSTiBoZXJlLgogICAgcmV0dXJuIHNlbGYudG9fcnVubmVyX2FwaV9waWNrbGVkKGNvbnRleHQpCgoKQGRlcHJlY2F0ZWQoc2luY2U9JzIuNy4wJywgZXh0cmFfbWVzc2FnZT0nVXNlIFJlYWRGcm9tUHViU3ViIGluc3RlYWQuJykKZGVmIFJlYWRTdHJpbmdzRnJvbVB1YlN1Yih0b3BpYz1Ob25lLCBzdWJzY3JpcHRpb249Tm9uZSwgaWRfbGFiZWw9Tm9uZSk6CiAgcmV0dXJuIF9SZWFkU3RyaW5nc0Zyb21QdWJTdWIodG9waWMsIHN1YnNjcmlwdGlvbiwgaWRfbGFiZWwpCgoKY2xhc3MgX1JlYWRTdHJpbmdzRnJvbVB1YlN1YihQVHJhbnNmb3JtKToKICAiIiJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQuIFVzZSBgYFJlYWRGcm9tUHViU3ViYGAgaW5zdGVhZC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgdG9waWM9Tm9uZSwgc3Vic2NyaXB0aW9uPU5vbmUsIGlkX2xhYmVsPU5vbmUpOgogICAgc3VwZXIoX1JlYWRTdHJpbmdzRnJvbVB1YlN1Yiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi50b3BpYyA9IHRvcGljCiAgICBzZWxmLnN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbgogICAgc2VsZi5pZF9sYWJlbCA9IGlkX2xhYmVsCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHAgPSAoCiAgICAgICAgcHZhbHVlLnBpcGVsaW5lCiAgICAgICAgfCBSZWFkRnJvbVB1YlN1YigKICAgICAgICAgICAgc2VsZi50b3BpYywgc2VsZi5zdWJzY3JpcHRpb24sIHNlbGYuaWRfbGFiZWwsIHdpdGhfYXR0cmlidXRlcz1GYWxzZSkKICAgICAgICB8ICdEZWNvZGVTdHJpbmcnID4+IE1hcChsYW1iZGEgYjogYi5kZWNvZGUoJ3V0Zi04JykpKQogICAgcC5lbGVtZW50X3R5cGUgPSB1bmljb2RlCiAgICByZXR1cm4gcAoKCkBkZXByZWNhdGVkKHNpbmNlPScyLjcuMCcsIGV4dHJhX21lc3NhZ2U9J1VzZSBXcml0ZVRvUHViU3ViIGluc3RlYWQuJykKZGVmIFdyaXRlU3RyaW5nc1RvUHViU3ViKHRvcGljKToKICByZXR1cm4gX1dyaXRlU3RyaW5nc1RvUHViU3ViKHRvcGljKQoKCmNsYXNzIF9Xcml0ZVN0cmluZ3NUb1B1YlN1YihQVHJhbnNmb3JtKToKICAiIiJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQuIFVzZSBgYFdyaXRlVG9QdWJTdWJgYCBpbnN0ZWFkLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BpYyk6CiAgICAiIiJJbml0aWFsaXplcyBgYF9Xcml0ZVN0cmluZ3NUb1B1YlN1YmBgLgoKICAgIEF0dHJpYnV0ZXM6CiAgICAgIHRvcGljOiBDbG91ZCBQdWIvU3ViIHRvcGljIGluIHRoZSBmb3JtICIvdG9waWNzLzxwcm9qZWN0Pi88dG9waWM+Ii4KICAgICIiIgogICAgc3VwZXIoX1dyaXRlU3RyaW5nc1RvUHViU3ViLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLl9zaW5rID0gX1B1YlN1YlNpbmsoCiAgICAgICAgdG9waWMsIGlkX2xhYmVsPU5vbmUsIHdpdGhfYXR0cmlidXRlcz1GYWxzZSwgdGltZXN0YW1wX2F0dHJpYnV0ZT1Ob25lKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHBjb2xsID0gcGNvbGwgfCAnRW5jb2RlU3RyaW5nJyA+PiBNYXAobGFtYmRhIHM6IHMuZW5jb2RlKCd1dGYtOCcpKQogICAgcGNvbGwuZWxlbWVudF90eXBlID0gYnl0ZXMKICAgIHJldHVybiBwY29sbCB8IFdyaXRlKHNlbGYuX3NpbmspCgoKY2xhc3MgV3JpdGVUb1B1YlN1YihQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciB3cml0aW5nIG1lc3NhZ2VzIHRvIENsb3VkIFB1Yi9TdWIuIiIiCgogICMgSW1wbGVtZW50YXRpb24gbm90ZTogVGhpcyBgYFBUcmFuc2Zvcm1gYCBpcyBvdmVycmlkZGVuIGJ5IERpcmVjdHJ1bm5lci4KCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIHRvcGljLCAgIyB0eXBlOiBzdHIKICAgICAgICAgICAgICAgd2l0aF9hdHRyaWJ1dGVzPUZhbHNlLCAgIyB0eXBlOiBib29sCiAgICAgICAgICAgICAgIGlkX2xhYmVsPU5vbmUsICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KICAgICAgICAgICAgICAgdGltZXN0YW1wX2F0dHJpYnV0ZT1Ob25lICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBOb25lCgogICAgIiIiSW5pdGlhbGl6ZXMgYGBXcml0ZVRvUHViU3ViYGAuCgogICAgQXJnczoKICAgICAgdG9waWM6IENsb3VkIFB1Yi9TdWIgdG9waWMgaW4gdGhlIGZvcm0gIi90b3BpY3MvPHByb2plY3Q+Lzx0b3BpYz4iLgogICAgICB3aXRoX2F0dHJpYnV0ZXM6CiAgICAgICAgVHJ1ZSAtIGlucHV0IGVsZW1lbnRzIHdpbGwgYmUgOmNsYXNzOmB+UHVic3ViTWVzc2FnZWAgb2JqZWN0cy4KICAgICAgICBGYWxzZSAtIGlucHV0IGVsZW1lbnRzIHdpbGwgYmUgb2YgdHlwZSBgYGJ5dGVzYGAgKG1lc3NhZ2UKICAgICAgICBkYXRhIG9ubHkpLgogICAgICBpZF9sYWJlbDogSWYgc2V0LCB3aWxsIHNldCBhbiBhdHRyaWJ1dGUgZm9yIGVhY2ggQ2xvdWQgUHViL1N1YiBtZXNzYWdlCiAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgYSB1bmlxdWUgdmFsdWUuIFRoaXMgYXR0cmlidXRlIGNhbiB0aGVuIGJlIHVzZWQKICAgICAgICBpbiBhIFJlYWRGcm9tUHViU3ViIFBUcmFuc2Zvcm0gdG8gZGVkdXBsaWNhdGUgbWVzc2FnZXMuCiAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU6IElmIHNldCwgd2lsbCBzZXQgYW4gYXR0cmlidXRlIGZvciBlYWNoIENsb3VkIFB1Yi9TdWIKICAgICAgICBtZXNzYWdlIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHRoZSBtZXNzYWdlJ3MgcHVibGlzaCB0aW1lIGFzIHRoZSB2YWx1ZS4KICAgICIiIgogICAgc3VwZXIoV3JpdGVUb1B1YlN1Yiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi53aXRoX2F0dHJpYnV0ZXMgPSB3aXRoX2F0dHJpYnV0ZXMKICAgIHNlbGYuaWRfbGFiZWwgPSBpZF9sYWJlbAogICAgc2VsZi50aW1lc3RhbXBfYXR0cmlidXRlID0gdGltZXN0YW1wX2F0dHJpYnV0ZQogICAgc2VsZi5fc2luayA9IF9QdWJTdWJTaW5rKAogICAgICAgIHRvcGljLCBpZF9sYWJlbCwgd2l0aF9hdHRyaWJ1dGVzLCB0aW1lc3RhbXBfYXR0cmlidXRlKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHRvX3Byb3RvX3N0cihlbGVtZW50KToKICAgICMgdHlwZTogKFB1YnN1Yk1lc3NhZ2UpIC0+IGJ5dGVzCiAgICBpZiBub3QgaXNpbnN0YW5jZShlbGVtZW50LCBQdWJzdWJNZXNzYWdlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ1VuZXhwZWN0ZWQgZWxlbWVudC4gVHlwZTogJXMgKGV4cGVjdGVkOiBQdWJzdWJNZXNzYWdlKSwgJwogICAgICAgICAgJ3ZhbHVlOiAlcicgJSAodHlwZShlbGVtZW50KSwgZWxlbWVudCkpCiAgICByZXR1cm4gZWxlbWVudC5fdG9fcHJvdG9fc3RyKCkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBpZiBzZWxmLndpdGhfYXR0cmlidXRlczoKICAgICAgcGNvbGwgPSBwY29sbCB8ICdUb1Byb3RvYnVmJyA+PiBNYXAoc2VsZi50b19wcm90b19zdHIpCgogICAgIyBXaXRob3V0IGF0dHJpYnV0ZXMsIG1lc3NhZ2UgZGF0YSBpcyB3cml0dGVuIGFzLWlzLiBXaXRoIGF0dHJpYnV0ZXMsCiAgICAjIG1lc3NhZ2UgZGF0YSArIGF0dHJpYnV0ZXMgYXJlIHBhc3NlZCBhcyBhIHNlcmlhbGl6ZWQgcHJvdG9idWYgc3RyaW5nIChzZWUKICAgICMgYGBQdWJzdWJNZXNzYWdlLl90b19wcm90b19zdHJgYCBmb3IgZXhhY3QgcHJvdG9idWYgbWVzc2FnZSB0eXBlKS4KICAgIHBjb2xsLmVsZW1lbnRfdHlwZSA9IGJ5dGVzCiAgICByZXR1cm4gcGNvbGwgfCBXcml0ZShzZWxmLl9zaW5rKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICAjIFJlcXVpcmVkIGFzIHRoaXMgaXMgaWRlbnRpZmllZCBieSB0eXBlIGluIFBUcmFuc2Zvcm1PdmVycmlkZXMuCiAgICAjIFRPRE8oQkVBTS0zODEyKTogVXNlIGFuIGFjdHVhbCBVUk4gaGVyZS4KICAgIHJldHVybiBzZWxmLnRvX3J1bm5lcl9hcGlfcGlja2xlZChjb250ZXh0KQoKClBST0pFQ1RfSURfUkVHRVhQID0gJ1thLXpdWy1hLXowLTk6Ll17NCw2MX1bYS16MC05XScKU1VCU0NSSVBUSU9OX1JFR0VYUCA9ICdwcm9qZWN0cy8oW14vXSspL3N1YnNjcmlwdGlvbnMvKC4rKScKVE9QSUNfUkVHRVhQID0gJ3Byb2plY3RzLyhbXi9dKykvdG9waWNzLyguKyknCgoKZGVmIHBhcnNlX3RvcGljKGZ1bGxfdG9waWMpOgogIG1hdGNoID0gcmUubWF0Y2goVE9QSUNfUkVHRVhQLCBmdWxsX3RvcGljKQogIGlmIG5vdCBtYXRjaDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ1B1YlN1YiB0b3BpYyBtdXN0IGJlIGluIHRoZSBmb3JtICJwcm9qZWN0cy88cHJvamVjdD4vdG9waWNzJwogICAgICAgICcvPHRvcGljPiIgKGdvdCAlcikuJyAlIGZ1bGxfdG9waWMpCiAgcHJvamVjdCwgdG9waWNfbmFtZSA9IG1hdGNoLmdyb3VwKDEpLCBtYXRjaC5ncm91cCgyKQogIGlmIG5vdCByZS5tYXRjaChQUk9KRUNUX0lEX1JFR0VYUCwgcHJvamVjdCk6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIFB1YlN1YiBwcm9qZWN0IG5hbWU6ICVyLicgJSBwcm9qZWN0KQogIHJldHVybiBwcm9qZWN0LCB0b3BpY19uYW1lCgoKZGVmIHBhcnNlX3N1YnNjcmlwdGlvbihmdWxsX3N1YnNjcmlwdGlvbik6CiAgbWF0Y2ggPSByZS5tYXRjaChTVUJTQ1JJUFRJT05fUkVHRVhQLCBmdWxsX3N1YnNjcmlwdGlvbikKICBpZiBub3QgbWF0Y2g6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdQdWJTdWIgc3Vic2NyaXB0aW9uIG11c3QgYmUgaW4gdGhlIGZvcm0gInByb2plY3RzLzxwcm9qZWN0PicKICAgICAgICAnL3N1YnNjcmlwdGlvbnMvPHN1YnNjcmlwdGlvbj4iIChnb3QgJXIpLicgJSBmdWxsX3N1YnNjcmlwdGlvbikKICBwcm9qZWN0LCBzdWJzY3JpcHRpb25fbmFtZSA9IG1hdGNoLmdyb3VwKDEpLCBtYXRjaC5ncm91cCgyKQogIGlmIG5vdCByZS5tYXRjaChQUk9KRUNUX0lEX1JFR0VYUCwgcHJvamVjdCk6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIFB1YlN1YiBwcm9qZWN0IG5hbWU6ICVyLicgJSBwcm9qZWN0KQogIHJldHVybiBwcm9qZWN0LCBzdWJzY3JpcHRpb25fbmFtZQoKCmNsYXNzIF9QdWJTdWJTb3VyY2UoZGF0YWZsb3dfaW8uTmF0aXZlU291cmNlKToKICAiIiJTb3VyY2UgZm9yIGEgQ2xvdWQgUHViL1N1YiB0b3BpYyBvciBzdWJzY3JpcHRpb24uCgogIFRoaXMgYGBOYXRpdmVTb3VyY2VgYCBpcyBvdmVycmlkZGVuIGJ5IGEgbmF0aXZlIFB1YnN1YiBpbXBsZW1lbnRhdGlvbi4KCiAgQXR0cmlidXRlczoKICAgIHdpdGhfYXR0cmlidXRlczogSWYgRmFsc2UsIHdpbGwgZmV0Y2gganVzdCBtZXNzYWdlIGRhdGEuIE90aGVyd2lzZSwKICAgICAgZmV0Y2hlcyBgYFB1YnN1Yk1lc3NhZ2VgYCBwcm90b2J1ZnMuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICB0b3BpYz1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFtzdHJdCiAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbj1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFtzdHJdCiAgICAgICAgICAgICAgIGlkX2xhYmVsPU5vbmUsICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KICAgICAgICAgICAgICAgd2l0aF9hdHRyaWJ1dGVzPUZhbHNlLCAgIyB0eXBlOiBib29sCiAgICAgICAgICAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU9Tm9uZSAgIyB0eXBlOiBPcHRpb25hbFtzdHJdCiAgICAgICAgICAgICAgKToKICAgIHNlbGYuY29kZXIgPSBjb2RlcnMuQnl0ZXNDb2RlcigpCiAgICBzZWxmLmZ1bGxfdG9waWMgPSB0b3BpYwogICAgc2VsZi5mdWxsX3N1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbgogICAgc2VsZi50b3BpY19uYW1lID0gTm9uZQogICAgc2VsZi5zdWJzY3JpcHRpb25fbmFtZSA9IE5vbmUKICAgIHNlbGYuaWRfbGFiZWwgPSBpZF9sYWJlbAogICAgc2VsZi53aXRoX2F0dHJpYnV0ZXMgPSB3aXRoX2F0dHJpYnV0ZXMKICAgIHNlbGYudGltZXN0YW1wX2F0dHJpYnV0ZSA9IHRpbWVzdGFtcF9hdHRyaWJ1dGUKCiAgICAjIFBlcmZvcm0gc29tZSB2YWxpZGF0aW9uIG9uIHRoZSB0b3BpYyBhbmQgc3Vic2NyaXB0aW9uLgogICAgaWYgbm90ICh0b3BpYyBvciBzdWJzY3JpcHRpb24pOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdFaXRoZXIgYSB0b3BpYyBvciBzdWJzY3JpcHRpb24gbXVzdCBiZSBwcm92aWRlZC4nKQogICAgaWYgdG9waWMgYW5kIHN1YnNjcmlwdGlvbjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignT25seSBvbmUgb2YgdG9waWMgb3Igc3Vic2NyaXB0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4nKQoKICAgIGlmIHRvcGljOgogICAgICBzZWxmLnByb2plY3QsIHNlbGYudG9waWNfbmFtZSA9IHBhcnNlX3RvcGljKHRvcGljKQogICAgaWYgc3Vic2NyaXB0aW9uOgogICAgICBzZWxmLnByb2plY3QsIHNlbGYuc3Vic2NyaXB0aW9uX25hbWUgPSBwYXJzZV9zdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKQoKICBAcHJvcGVydHkKICBkZWYgZm9ybWF0KHNlbGYpOgogICAgIiIiU291cmNlIGZvcm1hdCBuYW1lIHJlcXVpcmVkIGZvciByZW1vdGUgZXhlY3V0aW9uLiIiIgogICAgcmV0dXJuICdwdWJzdWInCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdpZF9sYWJlbCc6IERpc3BsYXlEYXRhSXRlbShzZWxmLmlkX2xhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nSUQgTGFiZWwgQXR0cmlidXRlJykuZHJvcF9pZl9ub25lKCksCiAgICAgICAgJ3RvcGljJzogRGlzcGxheURhdGFJdGVtKHNlbGYuZnVsbF90b3BpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J1B1YnN1YiBUb3BpYycpLmRyb3BfaWZfbm9uZSgpLAogICAgICAgICdzdWJzY3JpcHRpb24nOiBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgICAgIHNlbGYuZnVsbF9zdWJzY3JpcHRpb24sIGxhYmVsPSdQdWJzdWIgU3Vic2NyaXB0aW9uJykuZHJvcF9pZl9ub25lKCksCiAgICAgICAgJ3dpdGhfYXR0cmlidXRlcyc6IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICAgICAgc2VsZi53aXRoX2F0dHJpYnV0ZXMsIGxhYmVsPSdXaXRoIEF0dHJpYnV0ZXMnKS5kcm9wX2lmX25vbmUoKSwKICAgICAgICAndGltZXN0YW1wX2F0dHJpYnV0ZSc6IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICAgICAgc2VsZi50aW1lc3RhbXBfYXR0cmlidXRlLAogICAgICAgICAgICBsYWJlbD0nVGltZXN0YW1wIEF0dHJpYnV0ZScpLmRyb3BfaWZfbm9uZSgpLAogICAgfQoKICBkZWYgcmVhZGVyKHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgaXNfYm91bmRlZChzZWxmKToKICAgIHJldHVybiBGYWxzZQoKCmNsYXNzIF9QdWJTdWJTaW5rKGRhdGFmbG93X2lvLk5hdGl2ZVNpbmspOgogICIiIlNpbmsgZm9yIGEgQ2xvdWQgUHViL1N1YiB0b3BpYy4KCiAgVGhpcyBgYE5hdGl2ZVNvdXJjZWBgIGlzIG92ZXJyaWRkZW4gYnkgYSBuYXRpdmUgUHVic3ViIGltcGxlbWVudGF0aW9uLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgdG9waWMsICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICBpZF9sYWJlbCwgICMgdHlwZTogT3B0aW9uYWxbc3RyXQogICAgICAgICAgICAgICB3aXRoX2F0dHJpYnV0ZXMsICAjIHR5cGU6IGJvb2wKICAgICAgICAgICAgICAgdGltZXN0YW1wX2F0dHJpYnV0ZSAgIyB0eXBlOiBPcHRpb25hbFtzdHJdCiAgICAgICAgICAgICAgKToKICAgIHNlbGYuY29kZXIgPSBjb2RlcnMuQnl0ZXNDb2RlcigpCiAgICBzZWxmLmZ1bGxfdG9waWMgPSB0b3BpYwogICAgc2VsZi5pZF9sYWJlbCA9IGlkX2xhYmVsCiAgICBzZWxmLndpdGhfYXR0cmlidXRlcyA9IHdpdGhfYXR0cmlidXRlcwogICAgc2VsZi50aW1lc3RhbXBfYXR0cmlidXRlID0gdGltZXN0YW1wX2F0dHJpYnV0ZQoKICAgIHNlbGYucHJvamVjdCwgc2VsZi50b3BpY19uYW1lID0gcGFyc2VfdG9waWModG9waWMpCgogIEBwcm9wZXJ0eQogIGRlZiBmb3JtYXQoc2VsZik6CiAgICAiIiJTaW5rIGZvcm1hdCBuYW1lIHJlcXVpcmVkIGZvciByZW1vdGUgZXhlY3V0aW9uLiIiIgogICAgcmV0dXJuICdwdWJzdWInCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICd0b3BpYyc6IERpc3BsYXlEYXRhSXRlbShzZWxmLmZ1bGxfdG9waWMsIGxhYmVsPSdQdWJzdWIgVG9waWMnKSwKICAgICAgICAnaWRfbGFiZWwnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5pZF9sYWJlbCwgbGFiZWw9J0lEIExhYmVsIEF0dHJpYnV0ZScpLAogICAgICAgICd3aXRoX2F0dHJpYnV0ZXMnOiBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgICAgIHNlbGYud2l0aF9hdHRyaWJ1dGVzLCBsYWJlbD0nV2l0aCBBdHRyaWJ1dGVzJykuZHJvcF9pZl9ub25lKCksCiAgICAgICAgJ3RpbWVzdGFtcF9hdHRyaWJ1dGUnOiBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgICAgIHNlbGYudGltZXN0YW1wX2F0dHJpYnV0ZSwgbGFiZWw9J1RpbWVzdGFtcCBBdHRyaWJ1dGUnKSwKICAgIH0KCiAgZGVmIHdyaXRlcihzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKlH2UKIwWUHVic3ViTWVzc2FnZS5fX2luaXRfX5RqVjEBAEtLS1CHlIwWUHVic3ViTWVzc2FnZS5fX2hhc2hfX5RqVjEBAEtSS1OHlIwUUHVic3ViTWVzc2FnZS5fX2VxX1+UalYxAQBLVUtXh5SMFFB1YnN1Yk1lc3NhZ2UuX19uZV9flGpWMQEAS1lLW4eUjBZQdWJzdWJNZXNzYWdlLl9fcmVwcl9flGpWMQEAS11LXoeUjB1QdWJzdWJNZXNzYWdlLl9mcm9tX3Byb3RvX3N0cpRqVjEBAEtgS3GHlIwbUHVic3ViTWVzc2FnZS5fdG9fcHJvdG9fc3RylGpWMQEAS3NLgoeUjBtQdWJzdWJNZXNzYWdlLl9mcm9tX21lc3NhZ2WUalYxAQBLhEuOh5SMDVB1YnN1Yk1lc3NhZ2WUal0xAQBLPUuOh5SMF1JlYWRGcm9tUHViU3ViLl9faW5pdF9flGpWMQEAS5ZLxoeUjBVSZWFkRnJvbVB1YlN1Yi5leHBhbmSUalYxAQBLyEvOh5SMJlJlYWRGcm9tUHViU3ViLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEAS9BL04eUjA5SZWFkRnJvbVB1YlN1YpRqXTEBAEuRS9OHlIwVUmVhZFN0cmluZ3NGcm9tUHViU3VilGpWMQEAS9ZL2IeUjB9fUmVhZFN0cmluZ3NGcm9tUHViU3ViLl9faW5pdF9flGpWMQEAS91L4YeUjB1fUmVhZFN0cmluZ3NGcm9tUHViU3ViLmV4cGFuZJRqVjEBAEvjS+qHlIwWX1JlYWRTdHJpbmdzRnJvbVB1YlN1YpRqXTEBAEvbS+qHlIwUV3JpdGVTdHJpbmdzVG9QdWJTdWKUalYxAQBL7Uvvh5SMHl9Xcml0ZVN0cmluZ3NUb1B1YlN1Yi5fX2luaXRfX5RqVjEBAEv0S/yHlIwcX1dyaXRlU3RyaW5nc1RvUHViU3ViLmV4cGFuZJRqVjEBAEv+TQEBh5SMFV9Xcml0ZVN0cmluZ3NUb1B1YlN1YpRqXTEBAEvyTQEBh5SMFldyaXRlVG9QdWJTdWIuX19pbml0X1+UalYxAQBNCQFNJAGHlIwaV3JpdGVUb1B1YlN1Yi50b19wcm90b19zdHKUalYxAQBNJgFNLQGHlIwUV3JpdGVUb1B1YlN1Yi5leHBhbmSUalYxAQBNLwFNNwGHlIwlV3JpdGVUb1B1YlN1Yi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE05AU08AYeUjA1Xcml0ZVRvUHViU3VilGpdMQEATQQBTTwBh5SMC3BhcnNlX3RvcGljlGpWMQEATUQBTU0Bh5SMEnBhcnNlX3N1YnNjcmlwdGlvbpRqVjEBAE1QAU1ZAYeUjBZfUHViU3ViU291cmNlLl9faW5pdF9flGpWMQEATWYBTX8Bh5SMFF9QdWJTdWJTb3VyY2UuZm9ybWF0lGpWMQEATYEBTYQBh5SMGl9QdWJTdWJTb3VyY2UuZGlzcGxheV9kYXRhlGpWMQEATYYBTZMBh5SMFF9QdWJTdWJTb3VyY2UucmVhZGVylGpWMQEATZUBTZYBh5SMGF9QdWJTdWJTb3VyY2UuaXNfYm91bmRlZJRqVjEBAE2YAU2ZAYeUjA1fUHViU3ViU291cmNllGpdMQEATVwBTZkBh5SMFF9QdWJTdWJTaW5rLl9faW5pdF9flGpWMQEATaIBTa4Bh5SMEl9QdWJTdWJTaW5rLmZvcm1hdJRqVjEBAE2wAU2zAYeUjBhfUHViU3ViU2luay5kaXNwbGF5X2RhdGGUalYxAQBNtQFNvQGHlIwSX1B1YlN1YlNpbmsud3JpdGVylGpWMQEATb8BTcABh5SMC19QdWJTdWJTaW5rlGpdMQEATZwBTcABh5R1fZQojA1QdWJzdWJNZXNzYWdllGr+AwAAjA5SZWFkRnJvbVB1YlN1YpRq/gMAAIwVUmVhZEZyb21QdWJTdWIuZXhwYW5klGr+AwAAjCZSZWFkRnJvbVB1YlN1Yi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRq/gMAAIwVUmVhZFN0cmluZ3NGcm9tUHViU3VilGr+AwAAjBRXcml0ZVN0cmluZ3NUb1B1YlN1YpRq/gMAAIwNV3JpdGVUb1B1YlN1YpRq/gMAAIwaV3JpdGVUb1B1YlN1Yi50b19wcm90b19zdHKUav4DAACMFFdyaXRlVG9QdWJTdWIuZXhwYW5klGr+AwAAjCVXcml0ZVRvUHViU3ViLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGr+AwAAdYwZYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YpR0lIwlYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yl9pdF9waXBlbGluZZQoWK4MAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpUZXN0IHBpcGVsaW5lIGZvciB1c2UgYnkgcHVic3ViX2ludGVncmF0aW9uX3Rlc3QuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcmdwYXJzZQoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCgoKZGVmIHJ1bl9waXBlbGluZShhcmd2LCB3aXRoX2F0dHJpYnV0ZXMsIGlkX2xhYmVsLCB0aW1lc3RhbXBfYXR0cmlidXRlKToKICAiIiJCdWlsZCBhbmQgcnVuIHRoZSBwaXBlbGluZS4iIiIKCiAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLW91dHB1dF90b3BpYycsCiAgICAgIHJlcXVpcmVkPVRydWUsCiAgICAgIGhlbHA9KAogICAgICAgICAgJ091dHB1dCBQdWJTdWIgdG9waWMgb2YgdGhlIGZvcm0gJwogICAgICAgICAgJyJwcm9qZWN0cy88UFJPSkVDVD4vdG9waWMvPFRPUElDPiIuJykpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0taW5wdXRfc3Vic2NyaXB0aW9uJywKICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgaGVscD0oCiAgICAgICAgICAnSW5wdXQgUHViU3ViIHN1YnNjcmlwdGlvbiBvZiB0aGUgZm9ybSAnCiAgICAgICAgICAnInByb2plY3RzLzxQUk9KRUNUPi9zdWJzY3JpcHRpb25zLzxTVUJTQ1JJUFRJT04+LiInKSkKICBrbm93bl9hcmdzLCBwaXBlbGluZV9hcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKCiAgcGlwZWxpbmVfb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhwaXBlbGluZV9hcmdzKQogIHBpcGVsaW5lX29wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpLnN0cmVhbWluZyA9IFRydWUKICBwID0gYmVhbS5QaXBlbGluZShvcHRpb25zPXBpcGVsaW5lX29wdGlvbnMpCiAgcnVubmVyX25hbWUgPSB0eXBlKHAucnVubmVyKS5fX25hbWVfXwoKICAjIFJlYWQgZnJvbSBQdWJTdWIgaW50byBhIFBDb2xsZWN0aW9uLgogIGlmIHJ1bm5lcl9uYW1lID09ICdUZXN0RGlyZWN0UnVubmVyJzoKICAgIG1lc3NhZ2VzID0gcCB8IGJlYW0uaW8uUmVhZEZyb21QdWJTdWIoCiAgICAgICAgc3Vic2NyaXB0aW9uPWtub3duX2FyZ3MuaW5wdXRfc3Vic2NyaXB0aW9uLAogICAgICAgIHdpdGhfYXR0cmlidXRlcz13aXRoX2F0dHJpYnV0ZXMsCiAgICAgICAgdGltZXN0YW1wX2F0dHJpYnV0ZT10aW1lc3RhbXBfYXR0cmlidXRlKQogIGVsc2U6CiAgICBtZXNzYWdlcyA9IHAgfCBiZWFtLmlvLlJlYWRGcm9tUHViU3ViKAogICAgICAgIHN1YnNjcmlwdGlvbj1rbm93bl9hcmdzLmlucHV0X3N1YnNjcmlwdGlvbiwKICAgICAgICBpZF9sYWJlbD1pZF9sYWJlbCwKICAgICAgICB3aXRoX2F0dHJpYnV0ZXM9d2l0aF9hdHRyaWJ1dGVzLAogICAgICAgIHRpbWVzdGFtcF9hdHRyaWJ1dGU9dGltZXN0YW1wX2F0dHJpYnV0ZSkKCiAgZGVmIGFkZF9hdHRyaWJ1dGUobXNnLCB0aW1lc3RhbXA9YmVhbS5Eb0ZuLlRpbWVzdGFtcFBhcmFtKToKICAgIG1zZy5kYXRhICs9IGInLXNlZW4nCiAgICBtc2cuYXR0cmlidXRlc1sncHJvY2Vzc2VkJ10gPSAnSVQnCiAgICBpZiB0aW1lc3RhbXBfYXR0cmlidXRlIGluIG1zZy5hdHRyaWJ1dGVzOgogICAgICBtc2cuYXR0cmlidXRlc1t0aW1lc3RhbXBfYXR0cmlidXRlICsgJ19vdXQnXSA9IHRpbWVzdGFtcC50b19yZmMzMzM5KCkKICAgIHJldHVybiBtc2cKCiAgZGVmIG1vZGlmeV9kYXRhKGRhdGEpOgogICAgcmV0dXJuIGRhdGEgKyBiJy1zZWVuJwoKICBpZiB3aXRoX2F0dHJpYnV0ZXM6CiAgICBvdXRwdXQgPSBtZXNzYWdlcyB8ICdhZGRfYXR0cmlidXRlJyA+PiBiZWFtLk1hcChhZGRfYXR0cmlidXRlKQogIGVsc2U6CiAgICBvdXRwdXQgPSBtZXNzYWdlcyB8ICdtb2RpZnlfZGF0YScgPj4gYmVhbS5NYXAobW9kaWZ5X2RhdGEpCgogICMgV3JpdGUgdG8gUHViU3ViLgogIGlmIHJ1bm5lcl9uYW1lID09ICdUZXN0RGlyZWN0UnVubmVyJzoKICAgIF8gPSBvdXRwdXQgfCBiZWFtLmlvLldyaXRlVG9QdWJTdWIoCiAgICAgICAga25vd25fYXJncy5vdXRwdXRfdG9waWMsIHdpdGhfYXR0cmlidXRlcz13aXRoX2F0dHJpYnV0ZXMpCiAgZWxzZToKICAgIF8gPSBvdXRwdXQgfCBiZWFtLmlvLldyaXRlVG9QdWJTdWIoCiAgICAgICAga25vd25fYXJncy5vdXRwdXRfdG9waWMsCiAgICAgICAgaWRfbGFiZWw9aWRfbGFiZWwsCiAgICAgICAgd2l0aF9hdHRyaWJ1dGVzPXdpdGhfYXR0cmlidXRlcywKICAgICAgICB0aW1lc3RhbXBfYXR0cmlidXRlPXRpbWVzdGFtcF9hdHRyaWJ1dGUpCgogIHJlc3VsdCA9IHAucnVuKCkKICByZXN1bHQud2FpdF91bnRpbF9maW5pc2goKQqUfZSMDHJ1bl9waXBlbGluZZRqVjEBAEshS2CHlHN9lIwMcnVuX3BpcGVsaW5llGpVAwAAc4wlYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1Yl9pdF9waXBlbGluZZR0lIwfYXBhY2hlX2JlYW0uaW8uaGFkb29wZmlsZXN5c3RlbZQoWEc0AAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIjpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uRmlsZVN5c3RlbWAgaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZwpIYWRvb3AgRGlzdHJpYnV0ZWQgRmlsZSBTeXN0ZW0gZmlsZXMuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGlvCmltcG9ydCBsb2dnaW5nCmltcG9ydCBwb3NpeHBhdGgKaW1wb3J0IHJlCmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcApmcm9tIHR5cGluZyBpbXBvcnQgQmluYXJ5SU8gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKCmltcG9ydCBoZGZzCgpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlc3lzdGVtaW8KZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBCZWFtSU9FcnJvcgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzZWRGaWxlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQ29tcHJlc3Npb25UeXBlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVNZXRhZGF0YQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IEhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKCl9fYWxsX18gPSBbJ0hhZG9vcEZpbGVTeXN0ZW0nXQoKX0hERlNfUFJFRklYID0gJ2hkZnM6LycKX1VSTF9SRSA9IHJlLmNvbXBpbGUocideJyArIF9IREZTX1BSRUZJWCArIHInKC8uKiknKQpfRlVMTF9VUkxfUkUgPSByZS5jb21waWxlKHInXicgKyBfSERGU19QUkVGSVggKyByJy8oW14vXSspKC8uKikqJykKX0NPUFlfQlVGRkVSX1NJWkUgPSAyKioxNgpfREVGQVVMVF9CVUZGRVJfU0laRSA9IDIwICogMTAyNCAqIDEwMjQKCiMgV2ViSERGUyBGaWxlQ2hlY2tzdW0gcHJvcGVydHkgY29uc3RhbnRzLgpfRklMRV9DSEVDS1NVTV9BTEdPUklUSE0gPSAnYWxnb3JpdGhtJwpfRklMRV9DSEVDS1NVTV9CWVRFUyA9ICdieXRlcycKX0ZJTEVfQ0hFQ0tTVU1fTEVOR1RIID0gJ2xlbmd0aCcKIyBXZWJIREZTIEZpbGVTdGF0dXMgcHJvcGVydHkgY29uc3RhbnRzLgpfRklMRV9TVEFUVVNfTEVOR1RIID0gJ2xlbmd0aCcKX0ZJTEVfU1RBVFVTX1BBVEhfU1VGRklYID0gJ3BhdGhTdWZmaXgnCl9GSUxFX1NUQVRVU19UWVBFID0gJ3R5cGUnCl9GSUxFX1NUQVRVU19UWVBFX0RJUkVDVE9SWSA9ICdESVJFQ1RPUlknCl9GSUxFX1NUQVRVU19UWVBFX0ZJTEUgPSAnRklMRScKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBIZGZzRG93bmxvYWRlcihmaWxlc3lzdGVtaW8uRG93bmxvYWRlcik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGhkZnNfY2xpZW50LCBwYXRoKToKICAgIHNlbGYuX2hkZnNfY2xpZW50ID0gaGRmc19jbGllbnQKICAgIHNlbGYuX3BhdGggPSBwYXRoCiAgICBzZWxmLl9zaXplID0gc2VsZi5faGRmc19jbGllbnQuc3RhdHVzKHBhdGgpW19GSUxFX1NUQVRVU19MRU5HVEhdCgogIEBwcm9wZXJ0eQogIGRlZiBzaXplKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3NpemUKCiAgZGVmIGdldF9yYW5nZShzZWxmLCBzdGFydCwgZW5kKToKICAgIHdpdGggc2VsZi5faGRmc19jbGllbnQucmVhZChzZWxmLl9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD1zdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg9ZW5kIC0gc3RhcnQgKyAxKSBhcyByZWFkZXI6CiAgICAgIHJldHVybiByZWFkZXIucmVhZCgpCgoKY2xhc3MgSGRmc1VwbG9hZGVyKGZpbGVzeXN0ZW1pby5VcGxvYWRlcik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGhkZnNfY2xpZW50LCBwYXRoKToKICAgIHNlbGYuX2hkZnNfY2xpZW50ID0gaGRmc19jbGllbnQKICAgIGlmIHNlbGYuX2hkZnNfY2xpZW50LnN0YXR1cyhwYXRoLCBzdHJpY3Q9RmFsc2UpIGlzIG5vdCBOb25lOgogICAgICByYWlzZSBCZWFtSU9FcnJvcignUGF0aCBhbHJlYWR5IGV4aXN0czogJXMnICUgcGF0aCkKCiAgICBzZWxmLl9oYW5kbGVfY29udGV4dCA9IHNlbGYuX2hkZnNfY2xpZW50LndyaXRlKHBhdGgpCiAgICBzZWxmLl9oYW5kbGUgPSBzZWxmLl9oYW5kbGVfY29udGV4dC5fX2VudGVyX18oKQoKICBkZWYgcHV0KHNlbGYsIGRhdGEpOgogICAgc2VsZi5faGFuZGxlLndyaXRlKGRhdGEpCgogIGRlZiBmaW5pc2goc2VsZik6CiAgICBzZWxmLl9oYW5kbGUuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKICAgIHNlbGYuX2hhbmRsZSA9IE5vbmUKICAgIHNlbGYuX2hhbmRsZV9jb250ZXh0ID0gTm9uZQoKCmNsYXNzIEhhZG9vcEZpbGVTeXN0ZW0oRmlsZVN5c3RlbSk6CiAgIiIiYGBGaWxlU3lzdGVtYGAgaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyBIREZTLgoKICBVUkwgYXJndW1lbnRzIHRvIG1ldGhvZHMgZXhwZWN0IHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCBgYGhkZnM6Ly9gYC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmVfb3B0aW9ucyk6CiAgICAiIiJJbml0aWFsaXplcyBhIGNvbm5lY3Rpb24gdG8gSERGUy4KCiAgICBDb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBieSBwYXNzaW5nIHBpcGVsaW5lIG9wdGlvbnMuCiAgICBTZWUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLkhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zYC4KICAgICIiIgogICAgc3VwZXIoSGFkb29wRmlsZVN5c3RlbSwgc2VsZikuX19pbml0X18ocGlwZWxpbmVfb3B0aW9ucykKICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdoZGZzLmNsaWVudCcpLnNldExldmVsKGxvZ2dpbmcuV0FSTikKICAgIGlmIHBpcGVsaW5lX29wdGlvbnMgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigncGlwZWxpbmVfb3B0aW9ucyBpcyBub3Qgc2V0JykKICAgIGlmIGlzaW5zdGFuY2UocGlwZWxpbmVfb3B0aW9ucywgUGlwZWxpbmVPcHRpb25zKToKICAgICAgaGRmc19vcHRpb25zID0gcGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKEhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zKQogICAgICBoZGZzX2hvc3QgPSBoZGZzX29wdGlvbnMuaGRmc19ob3N0CiAgICAgIGhkZnNfcG9ydCA9IGhkZnNfb3B0aW9ucy5oZGZzX3BvcnQKICAgICAgaGRmc191c2VyID0gaGRmc19vcHRpb25zLmhkZnNfdXNlcgogICAgICBzZWxmLl9mdWxsX3VybHMgPSBoZGZzX29wdGlvbnMuaGRmc19mdWxsX3VybHMKICAgIGVsc2U6CiAgICAgIGhkZnNfaG9zdCA9IHBpcGVsaW5lX29wdGlvbnMuZ2V0KCdoZGZzX2hvc3QnKQogICAgICBoZGZzX3BvcnQgPSBwaXBlbGluZV9vcHRpb25zLmdldCgnaGRmc19wb3J0JykKICAgICAgaGRmc191c2VyID0gcGlwZWxpbmVfb3B0aW9ucy5nZXQoJ2hkZnNfdXNlcicpCiAgICAgIHNlbGYuX2Z1bGxfdXJscyA9IHBpcGVsaW5lX29wdGlvbnMuZ2V0KCdoZGZzX2Z1bGxfdXJscycsIEZhbHNlKQoKICAgIGlmIGhkZnNfaG9zdCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdoZGZzX2hvc3QgaXMgbm90IHNldCcpCiAgICBpZiBoZGZzX3BvcnQgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignaGRmc19wb3J0IGlzIG5vdCBzZXQnKQogICAgaWYgaGRmc191c2VyIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2hkZnNfdXNlciBpcyBub3Qgc2V0JykKICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuX2Z1bGxfdXJscywgYm9vbCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnaGRmc19mdWxsX3VybHMgc2hvdWxkIGJlIGJvb2wsIGdvdDogJXMnLCBzZWxmLl9mdWxsX3VybHMpCiAgICBzZWxmLl9oZGZzX2NsaWVudCA9IGhkZnMuSW5zZWN1cmVDbGllbnQoCiAgICAgICAgJ2h0dHA6Ly8lczolcycgJSAoaGRmc19ob3N0LCBzdHIoaGRmc19wb3J0KSksIHVzZXI9aGRmc191c2VyKQoKICBAY2xhc3NtZXRob2QKICBkZWYgc2NoZW1lKGNscyk6CiAgICByZXR1cm4gJ2hkZnMnCgogIGRlZiBfcGFyc2VfdXJsKHNlbGYsIHVybCk6CiAgICAiIiJWZXJpZmllcyB0aGF0IHVybCBiZWdpbnMgd2l0aCBoZGZzOi8vIHByZWZpeCwgc3RyaXBzIGl0IGFuZCBhZGRzIGEKICAgIGxlYWRpbmcgLy4KCiAgICBQYXJzaW5nIGJlaGF2aW9yIGlzIGRldGVybWluZWQgYnkgSGFkb29wRmlsZVN5c3RlbU9wdGlvbnMuaGRmc19mdWxsX3VybHMuCgogICAgQXJnczoKICAgICAgdXJsOiAoc3RyKSBBIFVSTCBpbiB0aGUgZm9ybSBoZGZzOi8vcGF0aC8uLi4KICAgICAgICBvciBpbiB0aGUgZm9ybSBoZGZzOi8vc2VydmVyL3BhdGgvLi4uCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yIGlmIHRoZSBVUkwgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0IGZvcm1hdC4KCiAgICBSZXR1cm5zOgogICAgICAoc3RyLCBzdHIpIElmIHVzaW5nIGhkZnNfZnVsbF91cmxzLCBmb3IgYW4gaW5wdXQgb2YKICAgICAgJ2hkZnM6Ly9zZXJ2ZXIvcGF0aC8uLi4nIHdpbGwgcmV0dXJuIChzZXJ2ZXIsICcvcGF0aC8uLi4nKS4KICAgICAgT3RoZXJ3aXNlLCBmb3IgYW4gaW5wdXQgb2YgJ2hkZnM6Ly9wYXRoLy4uLicsIHdpbGwgcmV0dXJuCiAgICAgICgnJywgJy9wYXRoLy4uLicpLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5fZnVsbF91cmxzOgogICAgICBtID0gX1VSTF9SRS5tYXRjaCh1cmwpCiAgICAgIGlmIG0gaXMgTm9uZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb3VsZCBub3QgcGFyc2UgdXJsOiAlcycgJSB1cmwpCiAgICAgIHJldHVybiAnJywgbS5ncm91cCgxKQogICAgZWxzZToKICAgICAgbSA9IF9GVUxMX1VSTF9SRS5tYXRjaCh1cmwpCiAgICAgIGlmIG0gaXMgTm9uZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb3VsZCBub3QgcGFyc2UgdXJsOiAlcycgJSB1cmwpCiAgICAgIHJldHVybiBtLmdyb3VwKDEpLCBtLmdyb3VwKDIpIG9yICcvJwoKICBkZWYgam9pbihzZWxmLCBiYXNlX3VybCwgKnBhdGhzKToKICAgICIiIkpvaW4gdHdvIG9yIG1vcmUgcGF0aG5hbWUgY29tcG9uZW50cy4KCiAgICBBcmdzOgogICAgICBiYXNlX3VybDogc3RyaW5nIHBhdGggb2YgdGhlIGZpcnN0IGNvbXBvbmVudCBvZiB0aGUgcGF0aC4KICAgICAgICBNdXN0IHN0YXJ0IHdpdGggaGRmczovLy4KICAgICAgcGF0aHM6IHBhdGggY29tcG9uZW50cyB0byBiZSBhZGRlZAoKICAgIFJldHVybnM6CiAgICAgIEZ1bGwgdXJsIGFmdGVyIGNvbWJpbmluZyBhbGwgdGhlIHBhc3NlZCBjb21wb25lbnRzLgogICAgIiIiCiAgICBzZXJ2ZXIsIGJhc2VwYXRoID0gc2VsZi5fcGFyc2VfdXJsKGJhc2VfdXJsKQogICAgcmV0dXJuIF9IREZTX1BSRUZJWCArIHNlbGYuX2pvaW4oc2VydmVyLCBiYXNlcGF0aCwgKnBhdGhzKQoKICBkZWYgX2pvaW4oc2VsZiwgc2VydmVyLCBiYXNlcGF0aCwgKnBhdGhzKToKICAgIHJlcyA9IHBvc2l4cGF0aC5qb2luKGJhc2VwYXRoLCAqcGF0aHMpCiAgICBpZiBzZXJ2ZXI6CiAgICAgIHNlcnZlciA9ICcvJyArIHNlcnZlcgogICAgcmV0dXJuIHNlcnZlciArIHJlcwoKICBkZWYgc3BsaXQoc2VsZiwgdXJsKToKICAgIHNlcnZlciwgcmVsX3BhdGggPSBzZWxmLl9wYXJzZV91cmwodXJsKQogICAgaWYgc2VydmVyOgogICAgICBzZXJ2ZXIgPSAnLycgKyBzZXJ2ZXIKICAgIGhlYWQsIHRhaWwgPSBwb3NpeHBhdGguc3BsaXQocmVsX3BhdGgpCiAgICByZXR1cm4gX0hERlNfUFJFRklYICsgc2VydmVyICsgaGVhZCwgdGFpbAoKICBkZWYgbWtkaXJzKHNlbGYsIHVybCk6CiAgICBfLCBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgIGlmIHNlbGYuX2V4aXN0cyhwYXRoKToKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoJ1BhdGggYWxyZWFkeSBleGlzdHM6ICVzJyAlIHBhdGgpCiAgICByZXR1cm4gc2VsZi5fbWtkaXJzKHBhdGgpCgogIGRlZiBfbWtkaXJzKHNlbGYsIHBhdGgpOgogICAgc2VsZi5faGRmc19jbGllbnQubWFrZWRpcnMocGF0aCkKCiAgZGVmIGhhc19kaXJzKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIF9saXN0KHNlbGYsIHVybCk6CiAgICB0cnk6CiAgICAgIHNlcnZlciwgcGF0aCA9IHNlbGYuX3BhcnNlX3VybCh1cmwpCiAgICAgIGZvciByZXMgaW4gc2VsZi5faGRmc19jbGllbnQubGlzdChwYXRoLCBzdGF0dXM9VHJ1ZSk6CiAgICAgICAgeWllbGQgRmlsZU1ldGFkYXRhKAogICAgICAgICAgICBfSERGU19QUkVGSVggKyBzZWxmLl9qb2luKHNlcnZlciwgcGF0aCwgcmVzWzBdKSwKICAgICAgICAgICAgcmVzWzFdW19GSUxFX1NUQVRVU19MRU5HVEhdKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdMaXN0IG9wZXJhdGlvbiBmYWlsZWQnLCB7dXJsOiBlfSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfYWRkX2NvbXByZXNzaW9uKHN0cmVhbSwgcGF0aCwgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKToKICAgIGlmIG1pbWVfdHlwZSAhPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzoKICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgJ01pbWUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIEdvdCBub24tZGVmYXVsdCBtaW1lX3R5cGU6JwogICAgICAgICAgJyAlcycsCiAgICAgICAgICBtaW1lX3R5cGUpCiAgICBpZiBjb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuQVVUTzoKICAgICAgY29tcHJlc3Npb25fdHlwZSA9IENvbXByZXNzaW9uVHlwZXMuZGV0ZWN0X2NvbXByZXNzaW9uX3R5cGUocGF0aCkKICAgIGlmIGNvbXByZXNzaW9uX3R5cGUgIT0gQ29tcHJlc3Npb25UeXBlcy5VTkNPTVBSRVNTRUQ6CiAgICAgIHJldHVybiBDb21wcmVzc2VkRmlsZShzdHJlYW0pCgogICAgcmV0dXJuIHN0cmVhbQoKICBkZWYgY3JlYXRlKAogICAgICBzZWxmLAogICAgICB1cmwsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgIyB0eXBlOiAoLi4uKSAtPiBCaW5hcnlJTwoKICAgICIiIgogICAgUmV0dXJuczoKICAgICAgQSBQeXRob24gRmlsZS1saWtlIG9iamVjdC4KICAgICIiIgogICAgXywgcGF0aCA9IHNlbGYuX3BhcnNlX3VybCh1cmwpCiAgICByZXR1cm4gc2VsZi5fY3JlYXRlKHBhdGgsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIF9jcmVhdGUoCiAgICAgIHNlbGYsCiAgICAgIHBhdGgsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8pOgogICAgc3RyZWFtID0gaW8uQnVmZmVyZWRXcml0ZXIoCiAgICAgICAgZmlsZXN5c3RlbWlvLlVwbG9hZGVyU3RyZWFtKEhkZnNVcGxvYWRlcihzZWxmLl9oZGZzX2NsaWVudCwgcGF0aCkpLAogICAgICAgIGJ1ZmZlcl9zaXplPV9ERUZBVUxUX0JVRkZFUl9TSVpFKQogICAgcmV0dXJuIHNlbGYuX2FkZF9jb21wcmVzc2lvbihzdHJlYW0sIHBhdGgsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIG9wZW4oCiAgICAgIHNlbGYsCiAgICAgIHVybCwKICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAjIHR5cGU6ICguLi4pIC0+IEJpbmFyeUlPCgogICAgIiIiCiAgICBSZXR1cm5zOgogICAgICBBIFB5dGhvbiBGaWxlLWxpa2Ugb2JqZWN0LgogICAgIiIiCiAgICBfLCBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgIHJldHVybiBzZWxmLl9vcGVuKHBhdGgsIG1pbWVfdHlwZSwgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIF9vcGVuKAogICAgICBzZWxmLAogICAgICBwYXRoLAogICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgIHN0cmVhbSA9IGlvLkJ1ZmZlcmVkUmVhZGVyKAogICAgICAgIGZpbGVzeXN0ZW1pby5Eb3dubG9hZGVyU3RyZWFtKEhkZnNEb3dubG9hZGVyKHNlbGYuX2hkZnNfY2xpZW50LCBwYXRoKSksCiAgICAgICAgYnVmZmVyX3NpemU9X0RFRkFVTFRfQlVGRkVSX1NJWkUpCiAgICByZXR1cm4gc2VsZi5fYWRkX2NvbXByZXNzaW9uKHN0cmVhbSwgcGF0aCwgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgY29weShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiIKICAgIEl0IGlzIGFuIGVycm9yIGlmIGFueSBmaWxlIHRvIGNvcHkgYWxyZWFkeSBleGlzdHMgYXQgdGhlIGRlc3RpbmF0aW9uLgoKICAgIFJhaXNlcyBgYEJlYW1JT0Vycm9yYGAgaWYgYW55IGVycm9yIG9jY3VycmVkLgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBpdGVyYWJsZSBvZiBVUkxzLgogICAgICBkZXN0aW5hdGlvbl9maWxlX25hbWVzOiBpdGVyYWJsZSBvZiBVUkxzLgogICAgIiIiCiAgICBpZiBsZW4oc291cmNlX2ZpbGVfbmFtZXMpICE9IGxlbihkZXN0aW5hdGlvbl9maWxlX25hbWVzKToKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoCiAgICAgICAgICAnc291cmNlX2ZpbGVfbmFtZXMgYW5kIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMgc2hvdWxkICcKICAgICAgICAgICdiZSBlcXVhbCBpbiBsZW5ndGg6ICVkICE9ICVkJyAlCiAgICAgICAgICAobGVuKHNvdXJjZV9maWxlX25hbWVzKSwgbGVuKGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpKSkKCiAgICBkZWYgX2NvcHlfZmlsZShzb3VyY2UsIGRlc3RpbmF0aW9uKToKICAgICAgd2l0aCBzZWxmLl9vcGVuKHNvdXJjZSkgYXMgZjE6CiAgICAgICAgd2l0aCBzZWxmLl9jcmVhdGUoZGVzdGluYXRpb24pIGFzIGYyOgogICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgYnVmID0gZjEucmVhZChfQ09QWV9CVUZGRVJfU0laRSkKICAgICAgICAgICAgaWYgbm90IGJ1ZjoKICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBmMi53cml0ZShidWYpCgogICAgZGVmIF9jb3B5X3BhdGgoc291cmNlLCBkZXN0aW5hdGlvbik6CiAgICAgICIiIlJlY3Vyc2l2ZWx5IGNvcHkgdGhlIGZpbGUgdHJlZSBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIGRlc3RpbmF0aW9uLiIiIgogICAgICBpZiBzZWxmLl9oZGZzX2NsaWVudC5zdGF0dXMoCiAgICAgICAgICBzb3VyY2UpW19GSUxFX1NUQVRVU19UWVBFXSAhPSBfRklMRV9TVEFUVVNfVFlQRV9ESVJFQ1RPUlk6CiAgICAgICAgX2NvcHlfZmlsZShzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgICAgIHJldHVybgoKICAgICAgZm9yIHBhdGgsIGRpcnMsIGZpbGVzIGluIHNlbGYuX2hkZnNfY2xpZW50LndhbGsoc291cmNlKToKICAgICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgICBuZXdfZGlyID0gc2VsZi5fam9pbignJywgZGVzdGluYXRpb24sIGRpcikKICAgICAgICAgIGlmIG5vdCBzZWxmLl9leGlzdHMobmV3X2Rpcik6CiAgICAgICAgICAgIHNlbGYuX21rZGlycyhuZXdfZGlyKQoKICAgICAgICByZWxfcGF0aCA9IHBvc2l4cGF0aC5yZWxwYXRoKHBhdGgsIHNvdXJjZSkKICAgICAgICBpZiByZWxfcGF0aCA9PSAnLic6CiAgICAgICAgICByZWxfcGF0aCA9ICcnCiAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CiAgICAgICAgICBfY29weV9maWxlKAogICAgICAgICAgICAgIHNlbGYuX2pvaW4oJycsIHBhdGgsIGZpbGUpLAogICAgICAgICAgICAgIHNlbGYuX2pvaW4oJycsIGRlc3RpbmF0aW9uLCByZWxfcGF0aCwgZmlsZSkpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgXywgcmVsX3NvdXJjZSA9IHNlbGYuX3BhcnNlX3VybChzb3VyY2UpCiAgICAgICAgXywgcmVsX2Rlc3RpbmF0aW9uID0gc2VsZi5fcGFyc2VfdXJsKGRlc3RpbmF0aW9uKQogICAgICAgIF9jb3B5X3BhdGgocmVsX3NvdXJjZSwgcmVsX2Rlc3RpbmF0aW9uKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICBleGNlcHRpb25zWyhzb3VyY2UsIGRlc3RpbmF0aW9uKV0gPSBlCgogICAgaWYgZXhjZXB0aW9uczoKICAgICAgcmFpc2UgQmVhbUlPRXJyb3IoJ0NvcHkgb3BlcmF0aW9uIGZhaWxlZCcsIGV4Y2VwdGlvbnMpCgogIGRlZiByZW5hbWUoc2VsZiwgc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgXywgcmVsX3NvdXJjZSA9IHNlbGYuX3BhcnNlX3VybChzb3VyY2UpCiAgICAgICAgXywgcmVsX2Rlc3RpbmF0aW9uID0gc2VsZi5fcGFyc2VfdXJsKGRlc3RpbmF0aW9uKQogICAgICAgIHRyeToKICAgICAgICAgIHNlbGYuX2hkZnNfY2xpZW50LnJlbmFtZShyZWxfc291cmNlLCByZWxfZGVzdGluYXRpb24pCiAgICAgICAgZXhjZXB0IGhkZnMuSGRmc0Vycm9yIGFzIGU6CiAgICAgICAgICByYWlzZSBCZWFtSU9FcnJvcigKICAgICAgICAgICAgICAnbGliaGRmcyBlcnJvciBpbiByZW5hbWluZyAlcyB0byAlcycgJSAoc291cmNlLCBkZXN0aW5hdGlvbiksIGUpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbKHNvdXJjZSwgZGVzdGluYXRpb24pXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcignUmVuYW1lIG9wZXJhdGlvbiBmYWlsZWQnLCBleGNlcHRpb25zKQoKICBkZWYgZXhpc3RzKHNlbGYsIHVybCk6CiAgICAjIHR5cGU6IChzdHIpIC0+IGJvb2wKCiAgICAiIiJDaGVja3MgZXhpc3RlbmNlIG9mIHVybCBpbiBIREZTLgoKICAgIEFyZ3M6CiAgICAgIHVybDogU3RyaW5nIGluIHRoZSBmb3JtIGhkZnM6Ly8uLi4KCiAgICBSZXR1cm5zOgogICAgICBUcnVlIGlmIHVybCBleGlzdHMgYXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBpbiBIREZTLgogICAgIiIiCiAgICBfLCBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgIHJldHVybiBzZWxmLl9leGlzdHMocGF0aCkKCiAgZGVmIF9leGlzdHMoc2VsZiwgcGF0aCk6CiAgICAiIiJSZXR1cm5zIFRydWUgaWYgcGF0aCBleGlzdHMgYXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBpbiBIREZTLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IFN0cmluZyBpbiB0aGUgZm9ybSAvLi4uCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9oZGZzX2NsaWVudC5zdGF0dXMocGF0aCwgc3RyaWN0PUZhbHNlKSBpcyBub3QgTm9uZQoKICBkZWYgc2l6ZShzZWxmLCB1cmwpOgogICAgXywgcGF0aCA9IHNlbGYuX3BhcnNlX3VybCh1cmwpCiAgICBzdGF0dXMgPSBzZWxmLl9oZGZzX2NsaWVudC5zdGF0dXMocGF0aCwgc3RyaWN0PUZhbHNlKQogICAgaWYgc3RhdHVzIGlzIE5vbmU6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdGaWxlIG5vdCBmb3VuZDogJXMnICUgdXJsKQogICAgcmV0dXJuIHN0YXR1c1tfRklMRV9TVEFUVVNfTEVOR1RIXQoKICBkZWYgbGFzdF91cGRhdGVkKHNlbGYsIHVybCk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjaGVja3N1bShzZWxmLCB1cmwpOgogICAgIiIiRmV0Y2hlcyBhIGNoZWNrc3VtIGRlc2NyaXB0aW9uIGZvciBhIFVSTC4KCiAgICBSZXR1cm5zOgogICAgICBTdHJpbmcgZGVzY3JpYmluZyB0aGUgY2hlY2tzdW0uCiAgICAiIiIKICAgIF8sIHBhdGggPSBzZWxmLl9wYXJzZV91cmwodXJsKQogICAgZmlsZV9jaGVja3N1bSA9IHNlbGYuX2hkZnNfY2xpZW50LmNoZWNrc3VtKHBhdGgpCiAgICByZXR1cm4gJyVzLSVkLSVzJyAlICgKICAgICAgICBmaWxlX2NoZWNrc3VtW19GSUxFX0NIRUNLU1VNX0FMR09SSVRITV0sCiAgICAgICAgZmlsZV9jaGVja3N1bVtfRklMRV9DSEVDS1NVTV9MRU5HVEhdLAogICAgICAgIGZpbGVfY2hlY2tzdW1bX0ZJTEVfQ0hFQ0tTVU1fQllURVNdLAogICAgKQoKICBkZWYgZGVsZXRlKHNlbGYsIHVybHMpOgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3IgdXJsIGluIHVybHM6CiAgICAgIHRyeToKICAgICAgICBfLCBwYXRoID0gc2VsZi5fcGFyc2VfdXJsKHVybCkKICAgICAgICBzZWxmLl9oZGZzX2NsaWVudC5kZWxldGUocGF0aCwgcmVjdXJzaXZlPVRydWUpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbdXJsXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiRGVsZXRlIG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQqUlQoAAQAAAAAAfZQojBdIZGZzRG93bmxvYWRlci5fX2luaXRfX5RqVjEBAEtCS0WHlIwTSGRmc0Rvd25sb2FkZXIuc2l6ZZRqVjEBAEtHS0mHlIwYSGRmc0Rvd25sb2FkZXIuZ2V0X3JhbmdllGpWMQEAS0tLT4eUjA5IZGZzRG93bmxvYWRlcpRqXTEBAEtBS0+HlIwVSGRmc1VwbG9hZGVyLl9faW5pdF9flGpWMQEAS1NLWYeUjBBIZGZzVXBsb2FkZXIucHV0lGpWMQEAS1tLXIeUjBNIZGZzVXBsb2FkZXIuZmluaXNolGpWMQEAS15LYYeUjAxIZGZzVXBsb2FkZXKUal0xAQBLUkthh5SMGUhhZG9vcEZpbGVTeXN0ZW0uX19pbml0X1+UalYxAQBLaUuJh5SMF0hhZG9vcEZpbGVTeXN0ZW0uc2NoZW1llGpWMQEAS4tLjYeUjBtIYWRvb3BGaWxlU3lzdGVtLl9wYXJzZV91cmyUalYxAQBLj0urh5SMFUhhZG9vcEZpbGVTeXN0ZW0uam9pbpRqVjEBAEutS7mHlIwWSGFkb29wRmlsZVN5c3RlbS5fam9pbpRqVjEBAEu7S7+HlIwWSGFkb29wRmlsZVN5c3RlbS5zcGxpdJRqVjEBAEvBS8aHlIwXSGFkb29wRmlsZVN5c3RlbS5ta2RpcnOUalYxAQBLyEvMh5SMGEhhZG9vcEZpbGVTeXN0ZW0uX21rZGlyc5RqVjEBAEvOS8+HlIwZSGFkb29wRmlsZVN5c3RlbS5oYXNfZGlyc5RqVjEBAEvRS9KHlIwWSGFkb29wRmlsZVN5c3RlbS5fbGlzdJRqVjEBAEvUS9yHlIwhSGFkb29wRmlsZVN5c3RlbS5fYWRkX2NvbXByZXNzaW9ulGpWMQEAS95L6oeUjBdIYWRvb3BGaWxlU3lzdGVtLmNyZWF0ZZRqVjEBAEvsS/iHlIwYSGFkb29wRmlsZVN5c3RlbS5fY3JlYXRllGpWMQEAS/pNAgGHlIwVSGFkb29wRmlsZVN5c3RlbS5vcGVulGpWMQEATQQBTRABh5SMFkhhZG9vcEZpbGVTeXN0ZW0uX29wZW6UalYxAQBNEgFNGgGHlIwVSGFkb29wRmlsZVN5c3RlbS5jb3B5lGpWMQEATRwBTVQBh5SMF0hhZG9vcEZpbGVTeXN0ZW0ucmVuYW1llGpWMQEATVYBTWUBh5SMF0hhZG9vcEZpbGVTeXN0ZW0uZXhpc3RzlGpWMQEATWcBTXMBh5SMGEhhZG9vcEZpbGVTeXN0ZW0uX2V4aXN0c5RqVjEBAE11AU17AYeUjBVIYWRvb3BGaWxlU3lzdGVtLnNpemWUalYxAQBNfQFNggGHlIwdSGFkb29wRmlsZVN5c3RlbS5sYXN0X3VwZGF0ZWSUalYxAQBNhAFNhQGHlIwZSGFkb29wRmlsZVN5c3RlbS5jaGVja3N1bZRqVjEBAE2HAU2TAYeUjBdIYWRvb3BGaWxlU3lzdGVtLmRlbGV0ZZRqVjEBAE2VAU2fAYeUjBBIYWRvb3BGaWxlU3lzdGVtlGpdMQEAS2RNnwGHlHV9lCiMEEhhZG9vcEZpbGVTeXN0ZW2Uan0DAACMF0hhZG9vcEZpbGVTeXN0ZW0uc2NoZW1llGp9AwAAjBVIYWRvb3BGaWxlU3lzdGVtLmpvaW6Uan0DAACMFkhhZG9vcEZpbGVTeXN0ZW0uc3BsaXSUan0DAACMF0hhZG9vcEZpbGVTeXN0ZW0ubWtkaXJzlGp9AwAAjBlIYWRvb3BGaWxlU3lzdGVtLmhhc19kaXJzlGp9AwAAjBdIYWRvb3BGaWxlU3lzdGVtLmNyZWF0ZZRqfQMAAIwVSGFkb29wRmlsZVN5c3RlbS5vcGVulGp9AwAAjBVIYWRvb3BGaWxlU3lzdGVtLmNvcHmUan0DAACMF0hhZG9vcEZpbGVTeXN0ZW0ucmVuYW1llGp9AwAAjBdIYWRvb3BGaWxlU3lzdGVtLmV4aXN0c5RqfQMAAIwVSGFkb29wRmlsZVN5c3RlbS5zaXpllGp9AwAAjB1IYWRvb3BGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZJRqfQMAAIwZSGFkb29wRmlsZVN5c3RlbS5jaGVja3N1bZRqfQMAAIwXSGFkb29wRmlsZVN5c3RlbS5kZWxldGWUan0DAAB1jB9hcGFjaGVfYmVhbS5pby5oYWRvb3BmaWxlc3lzdGVtlHSUjBVhcGFjaGVfYmVhbS5pby5pb2Jhc2WUKFiY7gAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJTb3VyY2VzIGFuZCBzaW5rcy4KCkEgU291cmNlIG1hbmFnZXMgcmVjb3JkLW9yaWVudGVkIGRhdGEgaW5wdXQgZnJvbSBhIHBhcnRpY3VsYXIga2luZCBvZiBzb3VyY2UKKGUuZy4gYSBzZXQgb2YgZmlsZXMsIGEgZGF0YWJhc2UgdGFibGUsIGV0Yy4pLiBUaGUgcmVhZGVyKCkgbWV0aG9kIG9mIGEgc291cmNlCnJldHVybnMgYSByZWFkZXIgb2JqZWN0IHN1cHBvcnRpbmcgdGhlIGl0ZXJhdG9yIHByb3RvY29sOyBpdGVyYXRpb24geWllbGRzCnJhdyByZWNvcmRzIG9mIHVucHJvY2Vzc2VkLCBzZXJpYWxpemVkIGRhdGEuCgoKQSBTaW5rIG1hbmFnZXMgcmVjb3JkLW9yaWVudGVkIGRhdGEgb3V0cHV0IHRvIGEgcGFydGljdWxhciBraW5kIG9mIHNpbmsKKGUuZy4gYSBzZXQgb2YgZmlsZXMsIGEgZGF0YWJhc2UgdGFibGUsIGV0Yy4pLiBUaGUgd3JpdGVyKCkgbWV0aG9kIG9mIGEgc2luawpyZXR1cm5zIGEgd3JpdGVyIG9iamVjdCBzdXBwb3J0aW5nIHdyaXRpbmcgcmVjb3JkcyBvZiBzZXJpYWxpemVkIGRhdGEgdG8KdGhlIHNpbmsuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG1hdGgKaW1wb3J0IHJhbmRvbQppbXBvcnQgdXVpZApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQpmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORwpmcm9tIHR5cGluZyBpbXBvcnQgQW55CmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYXRvcgpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IGNvbW1vbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IHB5dGhvbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBBc0l0ZXIKZnJvbSBhcGFjaGVfYmVhbS5wdmFsdWUgaW1wb3J0IEFzU2luZ2xldG9uCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY29yZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHB0cmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB3aW5kb3cKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IERpc3BsYXlEYXRhSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgSGFzRGlzcGxheURhdGEKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgdGltZXN0YW1wCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHVybnMKZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKaWYgVFlQRV9DSEVDS0lORzoKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dCBpbXBvcnQgUGlwZWxpbmVDb250ZXh0CgpfX2FsbF9fID0gWwogICAgJ0JvdW5kZWRTb3VyY2UnLAogICAgJ1JhbmdlVHJhY2tlcicsCiAgICAnUmVhZCcsCiAgICAnUmVzdHJpY3Rpb25UcmFja2VyJywKICAgICdXYXRlcm1hcmtFc3RpbWF0b3InLAogICAgJ1NpbmsnLAogICAgJ1dyaXRlJywKICAgICdXcml0ZXInCl0KCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCiMgRW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uIGFib3V0IGEgYnVuZGxlIG9mIGEgc291cmNlIGdlbmVyYXRlZCB3aGVuIG1ldGhvZAojIEJvdW5kZWRTb3VyY2Uuc3BsaXQoKSBpcyBpbnZva2VkLgojIFRoaXMgaXMgYSBuYW1lZCA0LXR1cGxlIHRoYXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCiMgKiB3ZWlnaHQgLSBhIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIHNpemUgb2YgdGhlIGJ1bmRsZS4gVGhpcyB2YWx1ZSB3aWxsCiMgICAgICAgICAgICBiZSB1c2VkIHRvIGNvbXBhcmUgdGhlIHJlbGF0aXZlIHNpemVzIG9mIGJ1bmRsZXMgZ2VuZXJhdGVkIGJ5IHRoZQojICAgICAgICAgICAgY3VycmVudCBzb3VyY2UuCiMgICAgICAgICAgICBUaGUgd2VpZ2h0IHJldHVybmVkIGhlcmUgY291bGQgYmUgc3BlY2lmaWVkIHVzaW5nIGEgdW5pdCBvZiB5b3VyCiMgICAgICAgICAgICBjaG9pY2UgKGZvciBleGFtcGxlLCBidW5kbGVzIG9mIHNpemVzIDEwME1CLCAyMDBNQiwgYW5kIDcwME1CIG1heQojICAgICAgICAgICAgc3BlY2lmeSB3ZWlnaHRzIDEwMCwgMjAwLCA3MDAgb3IgMSwgMiwgNykgYnV0IGFsbCBidW5kbGVzIG9mIGEKIyAgICAgICAgICAgIHNvdXJjZSBzaG91bGQgc3BlY2lmeSB0aGUgd2VpZ2h0IHVzaW5nIHRoZSBzYW1lIHVuaXQuCiMgKiBzb3VyY2UgLSBhIEJvdW5kZWRTb3VyY2Ugb2JqZWN0IGZvciB0aGUgIGJ1bmRsZS4KIyAqIHN0YXJ0X3Bvc2l0aW9uIC0gc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGJ1bmRsZQojICogc3RvcF9wb3NpdGlvbiAtIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgYnVuZGxlLgojCiMgVHlwZSBmb3Igc3RhcnQgYW5kIHN0b3AgcG9zaXRpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgYm91bmRlZCBzb3VyY2UgYW5kIG11c3QKIyBiZSBjb25zaXN0ZW50IHRocm91Z2hvdXQuClNvdXJjZUJ1bmRsZSA9IG5hbWVkdHVwbGUoCiAgICAnU291cmNlQnVuZGxlJywgJ3dlaWdodCBzb3VyY2Ugc3RhcnRfcG9zaXRpb24gc3RvcF9wb3NpdGlvbicpCgoKY2xhc3MgU291cmNlQmFzZShIYXNEaXNwbGF5RGF0YSwgdXJucy5SdW5uZXJBcGlGbik6CiAgIiIiQmFzZSBjbGFzcyBmb3IgYWxsIHNvdXJjZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGJlYW0uaW8uUmVhZCguLi4pLgogICIiIgogIHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3VybihweXRob25fdXJucy5QSUNLTEVEX1NPVVJDRSkKCiAgZGVmIGlzX2JvdW5kZWQoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGJvb2wKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBCb3VuZGVkU291cmNlKFNvdXJjZUJhc2UpOgogICIiIkEgc291cmNlIHRoYXQgcmVhZHMgYSBmaW5pdGUgYW1vdW50IG9mIGlucHV0IHJlY29yZHMuCgogIFRoaXMgY2xhc3MgZGVmaW5lcyBmb2xsb3dpbmcgb3BlcmF0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCB0byByZWFkIHRoZSBzb3VyY2UKICBlZmZpY2llbnRseS4KCiAgKiBTaXplIGVzdGltYXRpb24gLSBtZXRob2QgYGBlc3RpbWF0ZV9zaXplKClgYCBtYXkgcmV0dXJuIGFuIGFjY3VyYXRlCiAgICBlc3RpbWF0aW9uIGluIGJ5dGVzIGZvciB0aGUgc2l6ZSBvZiB0aGUgc291cmNlLgogICogU3BsaXR0aW5nIGludG8gYnVuZGxlcyBvZiBhIGdpdmVuIHNpemUgLSBtZXRob2QgYGBzcGxpdCgpYGAgY2FuIGJlIHVzZWQgdG8KICAgIHNwbGl0IHRoZSBzb3VyY2UgaW50byBhIHNldCBvZiBzdWItc291cmNlcyAoYnVuZGxlcykgYmFzZWQgb24gYSBkZXNpcmVkCiAgICBidW5kbGUgc2l6ZS4KICAqIEdldHRpbmcgYSBSYW5nZVRyYWNrZXIgLSBtZXRob2QgYGBnZXRfcmFuZ2VfdHJhY2tlcigpYGAgc2hvdWxkIHJldHVybiBhCiAgICBgYFJhbmdlVHJhY2tlcmBgIG9iamVjdCBmb3IgYSBnaXZlbiBwb3NpdGlvbiByYW5nZSBmb3IgdGhlIHBvc2l0aW9uIHR5cGUKICAgIG9mIHRoZSByZWNvcmRzIHJldHVybmVkIGJ5IHRoZSBzb3VyY2UuCiAgKiBSZWFkaW5nIHRoZSBkYXRhIC0gbWV0aG9kIGBgcmVhZCgpYGAgY2FuIGJlIHVzZWQgdG8gcmVhZCBkYXRhIGZyb20gdGhlCiAgICBzb3VyY2Ugd2hpbGUgcmVzcGVjdGluZyB0aGUgYm91bmRhcmllcyBkZWZpbmVkIGJ5IGEgZ2l2ZW4KICAgIGBgUmFuZ2VUcmFja2VyYGAuCgogIEEgcnVubmVyIHdpbGwgcGVyZm9ybSByZWFkaW5nIHRoZSBzb3VyY2UgaW4gdHdvIHN0ZXBzLgoKICAoMSkgTWV0aG9kIGBgZ2V0X3JhbmdlX3RyYWNrZXIoKWBgIHdpbGwgYmUgaW52b2tlZCB3aXRoIHN0YXJ0IGFuZCBlbmQKICAgICAgcG9zaXRpb25zIHRvIG9idGFpbiBhIGBgUmFuZ2VUcmFja2VyYGAgZm9yIHRoZSByYW5nZSBvZiBwb3NpdGlvbnMgdGhlCiAgICAgIHJ1bm5lciBpbnRlbmRzIHRvIHJlYWQuIFNvdXJjZSBtdXN0IGRlZmluZSBhIGRlZmF1bHQgaW5pdGlhbCBzdGFydCBhbmQgZW5kCiAgICAgIHBvc2l0aW9uIHJhbmdlLiBUaGVzZSBwb3NpdGlvbnMgbXVzdCBiZSB1c2VkIGlmIHRoZSBzdGFydCBhbmQvb3IgZW5kCiAgICAgIHBvc2l0aW9ucyBwYXNzZWQgdG8gdGhlIG1ldGhvZCBgYGdldF9yYW5nZV90cmFja2VyKClgYCBhcmUgYGBOb25lYGAKICAoMikgTWV0aG9kIHJlYWQoKSB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgYGBSYW5nZVRyYWNrZXJgYCBvYnRhaW5lZCBpbiB0aGUKICAgICAgcHJldmlvdXMgc3RlcC4KCiAgKipNdXRhYmlsaXR5KioKCiAgQSBgYEJvdW5kZWRTb3VyY2VgYCBvYmplY3Qgc2hvdWxkIG5vdCBiZSBtdXRhdGVkIHdoaWxlCiAgaXRzIG1ldGhvZHMgKGZvciBleGFtcGxlLCBgYHJlYWQoKWBgKSBhcmUgYmVpbmcgaW52b2tlZCBieSBhIHJ1bm5lci4gUnVubmVyCiAgaW1wbGVtZW50YXRpb25zIG1heSBpbnZva2UgbWV0aG9kcyBvZiBgYEJvdW5kZWRTb3VyY2VgYCBvYmplY3RzIHRocm91Z2gKICBtdWx0aS10aHJlYWRlZCBhbmQvb3IgcmVlbnRyYW50IGV4ZWN1dGlvbiBtb2Rlcy4KICAiIiIKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmKToKICAgICMgdHlwZTogKCkgLT4gT3B0aW9uYWxbaW50XQoKICAgICIiIkVzdGltYXRlcyB0aGUgc2l6ZSBvZiBzb3VyY2UgaW4gYnl0ZXMuCgogICAgQW4gZXN0aW1hdGUgb2YgdGhlIHRvdGFsIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSB0aGF0IHdvdWxkIGJlIHJlYWQKICAgIGZyb20gdGhpcyBzb3VyY2UuIFRoaXMgZXN0aW1hdGUgaXMgaW4gdGVybXMgb2YgZXh0ZXJuYWwgc3RvcmFnZSBzaXplLAogICAgYmVmb3JlIHBlcmZvcm1pbmcgZGVjb21wcmVzc2lvbiBvciBvdGhlciBwcm9jZXNzaW5nLgoKICAgIFJldHVybnM6CiAgICAgIGVzdGltYXRlZCBzaXplIG9mIHRoZSBzb3VyY2UgaWYgdGhlIHNpemUgY2FuIGJlIGRldGVybWluZWQsIGBgTm9uZWBgCiAgICAgIG90aGVyd2lzZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc3BsaXQoc2VsZiwKICAgICAgICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZSwgICMgdHlwZTogaW50CiAgICAgICAgICAgIHN0YXJ0X3Bvc2l0aW9uPU5vbmUsICAjIHR5cGU6IE9wdGlvbmFsW0FueV0KICAgICAgICAgICAgc3RvcF9wb3NpdGlvbj1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFtBbnldCiAgICAgICAgICAgKToKICAgICMgdHlwZTogKC4uLikgLT4gSXRlcmF0b3JbU291cmNlQnVuZGxlXQoKICAgICIiIlNwbGl0cyB0aGUgc291cmNlIGludG8gYSBzZXQgb2YgYnVuZGxlcy4KCiAgICBCdW5kbGVzIHNob3VsZCBiZSBhcHByb3hpbWF0ZWx5IG9mIHNpemUgYGBkZXNpcmVkX2J1bmRsZV9zaXplYGAgYnl0ZXMuCgogICAgQXJnczoKICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZTogdGhlIGRlc2lyZWQgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBidW5kbGVzIHJldHVybmVkLgogICAgICBzdGFydF9wb3NpdGlvbjogaWYgc3BlY2lmaWVkIHRoZSBnaXZlbiBwb3NpdGlvbiBtdXN0IGJlIHVzZWQgYXMgdGhlCiAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYnVuZGxlLgogICAgICBzdG9wX3Bvc2l0aW9uOiBpZiBzcGVjaWZpZWQgdGhlIGdpdmVuIHBvc2l0aW9uIG11c3QgYmUgdXNlZCBhcyB0aGUgZW5kaW5nCiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGJ1bmRsZS4KICAgIFJldHVybnM6CiAgICAgIGFuIGl0ZXJhdG9yIG9mIG9iamVjdHMgb2YgdHlwZSAnU291cmNlQnVuZGxlJyB0aGF0IGdpdmVzIGluZm9ybWF0aW9uIGFib3V0CiAgICAgIHRoZSBnZW5lcmF0ZWQgYnVuZGxlcy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgZ2V0X3JhbmdlX3RyYWNrZXIoc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfcG9zaXRpb24sICAjIHR5cGU6IE9wdGlvbmFsW0FueV0KICAgICAgICAgICAgICAgICAgICAgICAgc3RvcF9wb3NpdGlvbiwgICMgdHlwZTogT3B0aW9uYWxbQW55XQogICAgICAgICAgICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IFJhbmdlVHJhY2tlcgoKICAgICIiIlJldHVybnMgYSBSYW5nZVRyYWNrZXIgZm9yIGEgZ2l2ZW4gcG9zaXRpb24gcmFuZ2UuCgogICAgRnJhbWV3b3JrIG1heSBpbnZva2UgYGByZWFkKClgYCBtZXRob2Qgd2l0aCB0aGUgUmFuZ2VUcmFja2VyIG9iamVjdCByZXR1cm5lZAogICAgaGVyZSB0byByZWFkIGRhdGEgZnJvbSB0aGUgc291cmNlLgoKICAgIEFyZ3M6CiAgICAgIHN0YXJ0X3Bvc2l0aW9uOiBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgcmFuZ2UuIElmICdOb25lJyBkZWZhdWx0IHN0YXJ0CiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiBvZiB0aGUgc291cmNlIG11c3QgYmUgdXNlZC4KICAgICAgc3RvcF9wb3NpdGlvbjogIGVuZGluZyBwb3NpdGlvbiBvZiB0aGUgcmFuZ2UuIElmICdOb25lJyBkZWZhdWx0IHN0b3AKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgbXVzdCBiZSB1c2VkLgogICAgUmV0dXJuczoKICAgICAgYSBgYFJhbmdlVHJhY2tlcmBgIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gcmFuZ2UuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHJlYWQoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICAiIiJSZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgcmVhZHMgZGF0YSBmcm9tIHRoZSBzb3VyY2UuCgogICAgVGhlIHJldHVybmVkIHNldCBvZiBkYXRhIG11c3QgcmVzcGVjdCB0aGUgYm91bmRhcmllcyBkZWZpbmVkIGJ5IHRoZSBnaXZlbgogICAgYGBSYW5nZVRyYWNrZXJgYCBvYmplY3QuIEZvciBleGFtcGxlOgoKICAgICAgKiBSZXR1cm5lZCBzZXQgb2YgZGF0YSBtdXN0IGJlIGZvciB0aGUgcmFuZ2UKICAgICAgICBgYFtyYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uLCByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24pYGAuIE5vdGUKICAgICAgICB0aGF0IGEgc291cmNlIG1heSBkZWNpZGUgdG8gcmV0dXJuIHJlY29yZHMgdGhhdCBzdGFydCBhZnRlcgogICAgICAgIGBgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uYGAuIFNlZSBkb2N1bWVudGF0aW9uIGluIGNsYXNzCiAgICAgICAgYGBSYW5nZVRyYWNrZXJgYCBmb3IgbW9yZSBkZXRhaWxzLiBBbHNvLCBub3RlIHRoYXQgZnJhbWV3b3JrIG1pZ2h0CiAgICAgICAgaW52b2tlIGBgcmFuZ2VfdHJhY2tlci50cnlfc3BsaXQoKWBgIHRvIHBlcmZvcm0gZHluYW1pYyBzcGxpdAogICAgICAgIG9wZXJhdGlvbnMuIHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbiBtYXkgYmUgdXBkYXRlZAogICAgICAgIGR5bmFtaWNhbGx5IGR1ZSB0byBzdWNjZXNzZnVsIGR5bmFtaWMgc3BsaXQgb3BlcmF0aW9ucy4KICAgICAgKiBNZXRob2QgYGByYW5nZV90cmFja2VyLnRyeV9zcGxpdCgpYGAgbXVzdCBiZSBpbnZva2VkIGZvciBldmVyeSByZWNvcmQKICAgICAgICB0aGF0IHN0YXJ0cyBhdCBhIHNwbGl0IHBvaW50LgogICAgICAqIE1ldGhvZCBgYHJhbmdlX3RyYWNrZXIucmVjb3JkX2N1cnJlbnRfcG9zaXRpb24oKWBgIG1heSBiZSBpbnZva2VkIGZvcgogICAgICAgIHJlY29yZHMgdGhhdCBkbyBub3Qgc3RhcnQgYXQgc3BsaXQgcG9pbnRzLgoKICAgIEFyZ3M6CiAgICAgIHJhbmdlX3RyYWNrZXI6IGEgYGBSYW5nZVRyYWNrZXJgYCB3aG9zZSBib3VuZGFyaWVzIG11c3QgYmUgcmVzcGVjdGVkCiAgICAgICAgICAgICAgICAgICAgIHdoZW4gcmVhZGluZyBkYXRhIGZyb20gdGhlIHNvdXJjZS4gQSBydW5uZXIgdGhhdCByZWFkcyB0aGlzCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSBtdXNzIHBhc3MgYSBgYFJhbmdlVHJhY2tlcmBgIG9iamVjdCB0aGF0IGlzIG5vdAogICAgICAgICAgICAgICAgICAgICBgYE5vbmVgYC4KICAgIFJldHVybnM6CiAgICAgIGFuIGl0ZXJhdG9yIG9mIGRhdGEgcmVhZCBieSB0aGUgc291cmNlLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBkZWZhdWx0X291dHB1dF9jb2RlcihzZWxmKToKICAgICIiIkNvZGVyIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSByZWNvcmRzIHJldHVybmVkIGJ5IHRoZSBzb3VyY2UuCgogICAgU2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgc291cmNlcyB0aGF0IHByb2R1Y2Ugb2JqZWN0cyB0aGF0IGNhbiBiZSBlbmNvZGVkCiAgICBtb3JlIGVmZmljaWVudGx5IHRoYW4gcGlja2xpbmcuCiAgICAiIiIKICAgIHJldHVybiBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKG9iamVjdCkKCiAgZGVmIGlzX2JvdW5kZWQoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKCmNsYXNzIFJhbmdlVHJhY2tlcihvYmplY3QpOgogICIiIkEgdGhyZWFkIHNhZmUgb2JqZWN0IHVzZWQgYnkgRGF0YWZsb3cgc291cmNlIGZyYW1ld29yay4KCiAgQSBEYXRhZmxvdyBzb3VyY2UgaXMgZGVmaW5lZCB1c2luZyBhICcnQm91bmRlZFNvdXJjZScnIGFuZCBhICcnUmFuZ2VUcmFja2VyJycKICBwYWlyLiBBICcnUmFuZ2VUcmFja2VyJycgaXMgdXNlZCBieSBEYXRhZmxvdyBzb3VyY2UgZnJhbWV3b3JrIHRvIHBlcmZvcm0KICBkeW5hbWljIHdvcmsgcmViYWxhbmNpbmcgb2YgcG9zaXRpb24tYmFzZWQgc291cmNlcy4KCiAgKipQb3NpdGlvbi1iYXNlZCBzb3VyY2VzKioKCiAgQSBwb3NpdGlvbi1iYXNlZCBzb3VyY2UgaXMgb25lIHdoZXJlIHRoZSBzb3VyY2UgY2FuIGJlIGRlc2NyaWJlZCBieSBhIHJhbmdlCiAgb2YgcG9zaXRpb25zIG9mIGFuIG9yZGVyZWQgdHlwZSBhbmQgdGhlIHJlY29yZHMgcmV0dXJuZWQgYnkgdGhlIHJlYWRlciBjYW4gYmUKICBkZXNjcmliZWQgYnkgcG9zaXRpb25zIG9mIHRoZSBzYW1lIHR5cGUuCgogIEluIGNhc2UgYSByZWNvcmQgb2NjdXBpZXMgYSByYW5nZSBvZiBwb3NpdGlvbnMgaW4gdGhlIHNvdXJjZSwgdGhlIG1vc3QKICBpbXBvcnRhbnQgdGhpbmcgYWJvdXQgdGhlIHJlY29yZCBpcyB0aGUgcG9zaXRpb24gd2hlcmUgaXQgc3RhcnRzLgoKICBEZWZpbmluZyB0aGUgc2VtYW50aWNzIG9mIHBvc2l0aW9ucyBmb3IgYSBzb3VyY2UgaXMgZW50aXJlbHkgdXAgdG8gdGhlIHNvdXJjZQogIGNsYXNzLCBob3dldmVyIHRoZSBjaG9zZW4gZGVmaW5pdGlvbnMgaGF2ZSB0byBvYmV5IGNlcnRhaW4gcHJvcGVydGllcyBpbiBvcmRlcgogIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gY29ycmVjdGx5IHNwbGl0IHRoZSBzb3VyY2UgaW50byBwYXJ0cywgaW5jbHVkaW5nCiAgZHluYW1pYyBzcGxpdHRpbmcuIFR3byBtYWluIGFzcGVjdHMgbmVlZCB0byBiZSBkZWZpbmVkOgoKICAxLiBIb3cgdG8gYXNzaWduIHN0YXJ0aW5nIHBvc2l0aW9ucyB0byByZWNvcmRzLgogIDIuIFdoaWNoIHJlY29yZHMgc2hvdWxkIGJlIHJlYWQgYnkgYSBzb3VyY2Ugd2l0aCBhIHJhbmdlICdbQSwgQiknLgoKICBNb3Jlb3ZlciwgcmVhZGluZyBhIHJhbmdlIG11c3QgYmUgKmVmZmljaWVudCosIGkuZS4sIHRoZSBwZXJmb3JtYW5jZSBvZgogIHJlYWRpbmcgYSByYW5nZSBzaG91bGQgbm90IHNpZ25pZmljYW50bHkgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmFuZ2UuCiAgRm9yIGV4YW1wbGUsIHJlYWRpbmcgdGhlIHJhbmdlIFtBLCBCKSBzaG91bGQgbm90IHJlcXVpcmUgcmVhZGluZyBhbGwgZGF0YQogIGJlZm9yZSAnQScuCgogIFRoZSBzZWN0aW9ucyBiZWxvdyBleHBsYWluIGV4YWN0bHkgd2hhdCBwcm9wZXJ0aWVzIHRoZXNlIGRlZmluaXRpb25zIG11c3QKICBzYXRpc2Z5LCBhbmQgaG93IHRvIHVzZSBhIGBgUmFuZ2VUcmFja2VyYGAgd2l0aCBhIHByb3Blcmx5IGRlZmluZWQgc291cmNlLgoKICAqKlByb3BlcnRpZXMgb2YgcG9zaXRpb24tYmFzZWQgc291cmNlcyoqCgogIFRoZSBtYWluIHJlcXVpcmVtZW50IGZvciBwb3NpdGlvbi1iYXNlZCBzb3VyY2VzIGlzICphc3NvY2lhdGl2aXR5KjogcmVhZGluZwogIHJlY29yZHMgZnJvbSAnW0EsIEIpJyBhbmQgcmVjb3JkcyBmcm9tICdbQiwgQyknIHNob3VsZCBnaXZlIHRoZSBzYW1lCiAgcmVjb3JkcyBhcyByZWFkaW5nIGZyb20gJ1tBLCBDKScsIHdoZXJlICdBIDw9IEIgPD0gQycuIFRoaXMgcHJvcGVydHkKICBlbnN1cmVzIHRoYXQgbm8gbWF0dGVyIGhvdyBhIHJhbmdlIG9mIHBvc2l0aW9ucyBpcyBzcGxpdCBpbnRvIGFyYml0cmFyaWx5IG1hbnkKICBzdWItcmFuZ2VzLCB0aGUgdG90YWwgc2V0IG9mIHJlY29yZHMgZGVzY3JpYmVkIGJ5IHRoZW0gc3RheXMgdGhlIHNhbWUuCgogIFRoZSBvdGhlciBpbXBvcnRhbnQgcHJvcGVydHkgaXMgaG93IHRoZSBzb3VyY2UncyByYW5nZSByZWxhdGVzIHRvIHBvc2l0aW9ucyBvZgogIHJlY29yZHMgaW4gdGhlIHNvdXJjZS4gSW4gbWFueSBzb3VyY2VzIGVhY2ggcmVjb3JkIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGEKICB1bmlxdWUgc3RhcnRpbmcgcG9zaXRpb24uIEluIHRoaXMgY2FzZToKCiAgKiBBbGwgcmVjb3JkcyByZXR1cm5lZCBieSBhIHNvdXJjZSAnW0EsIEIpJyBtdXN0IGhhdmUgc3RhcnRpbmcgcG9zaXRpb25zIGluCiAgICB0aGlzIHJhbmdlLgogICogQWxsIGJ1dCB0aGUgbGFzdCByZWNvcmQgc2hvdWxkIGVuZCB3aXRoaW4gdGhpcyByYW5nZS4gVGhlIGxhc3QgcmVjb3JkIG1heSBvcgogICAgbWF5IG5vdCBleHRlbmQgcGFzdCB0aGUgZW5kIG9mIHRoZSByYW5nZS4KICAqIFJlY29yZHMgc2hvdWxkIG5vdCBvdmVybGFwLgoKICBTdWNoIHNvdXJjZXMgc2hvdWxkIGRlZmluZSAicmVhZCAnW0EsIEIpJyIgYXMgInJlYWQgZnJvbSB0aGUgZmlyc3QgcmVjb3JkCiAgc3RhcnRpbmcgYXQgb3IgYWZ0ZXIgJ0EnLCB1cCB0byBidXQgbm90IGluY2x1ZGluZyB0aGUgZmlyc3QgcmVjb3JkIHN0YXJ0aW5nCiAgYXQgb3IgYWZ0ZXIgJ0InIi4KCiAgU29tZSBleGFtcGxlcyBvZiBzdWNoIHNvdXJjZXMgaW5jbHVkZSByZWFkaW5nIGxpbmVzIG9yIENTViBmcm9tIGEgdGV4dCBmaWxlLAogIHJlYWRpbmcga2V5cyBhbmQgdmFsdWVzIGZyb20gYSBCaWdUYWJsZSwgZXRjLgoKICBUaGUgY29uY2VwdCBvZiAqc3BsaXQgcG9pbnRzKiBhbGxvd3MgdG8gZXh0ZW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgZGVhbGluZwogIHdpdGggc291cmNlcyB3aGVyZSBzb21lIHJlY29yZHMgY2Fubm90IGJlIGlkZW50aWZpZWQgYnkgYSB1bmlxdWUgc3RhcnRpbmcKICBwb3NpdGlvbi4KCiAgSW4gYWxsIGNhc2VzLCBhbGwgcmVjb3JkcyByZXR1cm5lZCBieSBhIHNvdXJjZSAnW0EsIEIpJyBtdXN0ICpzdGFydCogYXQgb3IKICBhZnRlciAnQScuCgogICoqU3BsaXQgcG9pbnRzKioKCiAgU29tZSBzb3VyY2VzIG1heSBoYXZlIHJlY29yZHMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGFkZHJlc3NhYmxlLiBGb3IgZXhhbXBsZSwKICBpbWFnaW5lIGEgZmlsZSBmb3JtYXQgY29uc2lzdGluZyBvZiBhIHNlcXVlbmNlIG9mIGNvbXByZXNzZWQgYmxvY2tzLiBFYWNoCiAgYmxvY2sgY2FuIGJlIGFzc2lnbmVkIGFuIG9mZnNldCwgYnV0IHJlY29yZHMgd2l0aGluIHRoZSBibG9jayBjYW5ub3QgYmUKICBkaXJlY3RseSBhZGRyZXNzZWQgd2l0aG91dCBkZWNvbXByZXNzaW5nIHRoZSBibG9jay4gTGV0IHVzIHJlZmVyIHRvIHRoaXMKICBoeXBvdGhldGljYWwgZm9ybWF0IGFzIDxpPkNCRiAoQ29tcHJlc3NlZCBCbG9ja3MgRm9ybWF0KTwvaT4uCgogIE1hbnkgc3VjaCBmb3JtYXRzIGNhbiBzdGlsbCBzYXRpc2Z5IHRoZSBhc3NvY2lhdGl2aXR5IHByb3BlcnR5LiBGb3IgZXhhbXBsZSwKICBpbiBDQkYsIHJlYWRpbmcgJ1tBLCBCKScgY2FuIG1lYW4gInJlYWQgYWxsIHRoZSByZWNvcmRzIGluIGFsbCBibG9ja3Mgd2hvc2UKICBzdGFydGluZyBvZmZzZXQgaXMgaW4gJ1tBLCBCKSciLgoKICBUbyBzdXBwb3J0IHN1Y2ggY29tcGxleCBmb3JtYXRzLCB3ZSBpbnRyb2R1Y2UgdGhlIG5vdGlvbiBvZiAqc3BsaXQgcG9pbnRzKi4gV2UKICBzYXkgdGhhdCBhIHJlY29yZCBpcyBhIHNwbGl0IHBvaW50IGlmIHRoZXJlIGV4aXN0cyBhIHBvc2l0aW9uICdBJyBzdWNoIHRoYXQKICB0aGUgcmVjb3JkIGlzIHRoZSBmaXJzdCBvbmUgdG8gYmUgcmV0dXJuZWQgd2hlbiByZWFkaW5nIHRoZSByYW5nZQogICdbQSwgaW5maW5pdHkpJy4gSW4gQ0JGLCB0aGUgb25seSBzcGxpdCBwb2ludHMgd291bGQgYmUgdGhlIGZpcnN0IHJlY29yZHMKICBpbiBlYWNoIGJsb2NrLgoKICBTcGxpdCBwb2ludHMgYWxsb3cgdXMgdG8gZGVmaW5lIHRoZSBtZWFuaW5nIG9mIGEgcmVjb3JkJ3MgcG9zaXRpb24gYW5kIGEKICBzb3VyY2UncyByYW5nZSBpbiBhbGwgY2FzZXM6CgogICogRm9yIGEgcmVjb3JkIHRoYXQgaXMgYXQgYSBzcGxpdCBwb2ludCwgaXRzIHBvc2l0aW9uIGlzIGRlZmluZWQgdG8gYmUgdGhlCiAgICBsYXJnZXN0ICdBJyBzdWNoIHRoYXQgcmVhZGluZyBhIHNvdXJjZSB3aXRoIHRoZSByYW5nZSAnW0EsIGluZmluaXR5KScKICAgIHJldHVybnMgdGhpcyByZWNvcmQuCiAgKiBQb3NpdGlvbnMgb2Ygb3RoZXIgcmVjb3JkcyBhcmUgb25seSByZXF1aXJlZCB0byBiZSBub24tZGVjcmVhc2luZy4KICAqIFJlYWRpbmcgdGhlIHNvdXJjZSAnW0EsIEIpJyBtdXN0IHJldHVybiByZWNvcmRzIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0CiAgICBzcGxpdCBwb2ludCBhdCBvciBhZnRlciAnQScsIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBmaXJzdCBzcGxpdCBwb2ludAogICAgYXQgb3IgYWZ0ZXIgJ0InLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGZpcnN0IHJlY29yZCByZXR1cm5lZAogICAgYnkgYSBzb3VyY2UgTVVTVCBhbHdheXMgYmUgYSBzcGxpdCBwb2ludC4KICAqIFBvc2l0aW9ucyBvZiBzcGxpdCBwb2ludHMgbXVzdCBiZSB1bmlxdWUuCgogIEFzIGEgcmVzdWx0LCBmb3IgYW55IGRlY29tcG9zaXRpb24gb2YgdGhlIGZ1bGwgcmFuZ2Ugb2YgdGhlIHNvdXJjZSBpbnRvCiAgcG9zaXRpb24gcmFuZ2VzLCB0aGUgdG90YWwgc2V0IG9mIHJlY29yZHMgd2lsbCBiZSB0aGUgZnVsbCBzZXQgb2YgcmVjb3JkcyBpbgogIHRoZSBzb3VyY2UsIGFuZCBlYWNoIHJlY29yZCB3aWxsIGJlIHJlYWQgZXhhY3RseSBvbmNlLgoKICAqKkNvbnN1bWVkIHBvc2l0aW9ucyoqCgogIEFzIHRoZSBzb3VyY2UgaXMgYmVpbmcgcmVhZCwgYW5kIHJlY29yZHMgcmVhZCBmcm9tIGl0IGFyZSBiZWluZyBwYXNzZWQgdG8gdGhlCiAgZG93bnN0cmVhbSB0cmFuc2Zvcm1zIGluIHRoZSBwaXBlbGluZSwgd2Ugc2F5IHRoYXQgcG9zaXRpb25zIGluIHRoZSBzb3VyY2UgYXJlCiAgYmVpbmcgKmNvbnN1bWVkKi4gV2hlbiBhIHJlYWRlciBoYXMgcmVhZCBhIHJlY29yZCAob3IgcHJvbWlzZWQgdG8gYSBjYWxsZXIKICB0aGF0IGEgcmVjb3JkIHdpbGwgYmUgcmV0dXJuZWQpLCBwb3NpdGlvbnMgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgcmVjb3JkJ3MKICBzdGFydCBwb3NpdGlvbiBhcmUgY29uc2lkZXJlZCAqY29uc3VtZWQqLgoKICBEeW5hbWljIHNwbGl0dGluZyBjYW4gaGFwcGVuIG9ubHkgYXQgKnVuY29uc3VtZWQqIHBvc2l0aW9ucy4gSWYgdGhlIHJlYWRlcgogIGp1c3QgcmV0dXJuZWQgYSByZWNvcmQgYXQgb2Zmc2V0IDQyIGluIGEgZmlsZSwgZHluYW1pYyBzcGxpdHRpbmcgY2FuIGhhcHBlbgogIG9ubHkgYXQgb2Zmc2V0IDQzIG9yIGJleW9uZCwgYXMgb3RoZXJ3aXNlIHRoYXQgcmVjb3JkIGNvdWxkIGJlIHJlYWQgdHdpY2UgKGJ5CiAgdGhlIGN1cnJlbnQgcmVhZGVyIGFuZCBieSBhIHJlYWRlciBvZiB0aGUgdGFzayBzdGFydGluZyBhdCA0MykuCiAgIiIiCgogIFNQTElUX1BPSU5UU19VTktOT1dOID0gb2JqZWN0KCkKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgcmFuZ2UsIGluY2x1c2l2ZS4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IodHlwZShzZWxmKSkKCiAgZGVmIHN0b3BfcG9zaXRpb24oc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBlbmRpbmcgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgcmFuZ2UsIGV4Y2x1c2l2ZS4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IodHlwZShzZWxmKSkKCiAgZGVmIHRyeV9jbGFpbShzZWxmLCBwb3NpdGlvbik6ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKICAgICIiIkF0b21pY2FsbHkgZGV0ZXJtaW5lcyBpZiBhIHJlY29yZCBhdCBhIHNwbGl0IHBvaW50IGlzIHdpdGhpbiB0aGUgcmFuZ2UuCgogICAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCAqKmlmIGFuZCBvbmx5IGlmKiogdGhlIHJlY29yZCBpcyBhdCBhIHNwbGl0CiAgICBwb2ludC4gVGhpcyBtZXRob2QgbWF5IG1vZGlmeSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGBgUmFuZ2VUcmFja2VyYGAgYnkKICAgIHVwZGF0aW5nIHRoZSBsYXN0LWNvbnN1bWVkIHBvc2l0aW9uIHRvIGBgcG9zaXRpb25gYC4KCiAgICAqKiBUaHJlYWQgc2FmZXR5ICoqCgogICAgTWV0aG9kcyBvZiB0aGUgY2xhc3MgYGBSYW5nZVRyYWNrZXJgYCBpbmNsdWRpbmcgdGhpcyBtZXRob2QgbWF5IGdldCBpbnZva2VkCiAgICBieSBkaWZmZXJlbnQgdGhyZWFkcywgaGVuY2UgbXVzdCBiZSBtYWRlIHRocmVhZC1zYWZlLCBlLmcuIGJ5IHVzaW5nIGEgc2luZ2xlCiAgICBsb2NrIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBwb3NpdGlvbjogc3RhcnRpbmcgcG9zaXRpb24gb2YgYSByZWNvcmQgYmVpbmcgcmVhZCBieSBhIHNvdXJjZS4KCiAgICBSZXR1cm5zOgogICAgICBgYFRydWVgYCwgaWYgdGhlIGdpdmVuIHBvc2l0aW9uIGZhbGxzIHdpdGhpbiB0aGUgY3VycmVudCByYW5nZSwgcmV0dXJucwogICAgICBgYEZhbHNlYGAgb3RoZXJ3aXNlLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBzZXRfY3VycmVudF9wb3NpdGlvbihzZWxmLCBwb3NpdGlvbik6CiAgICAiIiJVcGRhdGVzIHRoZSBsYXN0LWNvbnN1bWVkIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4KCiAgICBBIHNvdXJjZSBtYXkgaW52b2tlIHRoaXMgbWV0aG9kIGZvciByZWNvcmRzIHRoYXQgZG8gbm90IHN0YXJ0IGF0IHNwbGl0CiAgICBwb2ludHMuIFRoaXMgbWF5IG1vZGlmeSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGBgUmFuZ2VUcmFja2VyYGAuIElmIHRoZQogICAgcmVjb3JkIHN0YXJ0cyBhdCBhIHNwbGl0IHBvaW50LCBtZXRob2QgYGB0cnlfY2xhaW0oKWBgICoqbXVzdCoqIGJlIGludm9rZWQKICAgIGluc3RlYWQgb2YgdGhpcyBtZXRob2QuCgogICAgQXJnczoKICAgICAgcG9zaXRpb246IHN0YXJ0aW5nIHBvc2l0aW9uIG9mIGEgcmVjb3JkIGJlaW5nIHJlYWQgYnkgYSBzb3VyY2UuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHBvc2l0aW9uX2F0X2ZyYWN0aW9uKHNlbGYsIGZyYWN0aW9uKToKICAgICIiIlJldHVybnMgdGhlIHBvc2l0aW9uIGF0IHRoZSBnaXZlbiBmcmFjdGlvbi4KCiAgICBHaXZlbiBhIGZyYWN0aW9uIHdpdGhpbiB0aGUgcmFuZ2UgWzAuMCwgMS4wKSB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUKICAgIHBvc2l0aW9uIGF0IHRoZSBnaXZlbiBmcmFjdGlvbiBjb21wYXJlZCB0byB0aGUgcG9zaXRpb24gcmFuZ2UKICAgIFtzZWxmLnN0YXJ0X3Bvc2l0aW9uLCBzZWxmLnN0b3BfcG9zaXRpb24pLgoKICAgICoqIFRocmVhZCBzYWZldHkgKioKCiAgICBNZXRob2RzIG9mIHRoZSBjbGFzcyBgYFJhbmdlVHJhY2tlcmBgIGluY2x1ZGluZyB0aGlzIG1ldGhvZCBtYXkgZ2V0IGludm9rZWQKICAgIGJ5IGRpZmZlcmVudCB0aHJlYWRzLCBoZW5jZSBtdXN0IGJlIG1hZGUgdGhyZWFkLXNhZmUsIGUuZy4gYnkgdXNpbmcgYSBzaW5nbGUKICAgIGxvY2sgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIGZyYWN0aW9uOiBhIGZsb2F0IHZhbHVlIHdpdGhpbiB0aGUgcmFuZ2UgWzAuMCwgMS4wKS4KICAgIFJldHVybnM6CiAgICAgIGEgcG9zaXRpb24gd2l0aGluIHRoZSByYW5nZSBbc2VsZi5zdGFydF9wb3NpdGlvbiwgc2VsZi5zdG9wX3Bvc2l0aW9uKS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgdHJ5X3NwbGl0KHNlbGYsIHBvc2l0aW9uKToKICAgICIiIkF0b21pY2FsbHkgc3BsaXRzIHRoZSBjdXJyZW50IHJhbmdlLgoKICAgIERldGVybWluZXMgYSBwb3NpdGlvbiB0byBzcGxpdCB0aGUgY3VycmVudCByYW5nZSwgc3BsaXRfcG9zaXRpb24sIGJhc2VkIG9uCiAgICB0aGUgZ2l2ZW4gcG9zaXRpb24uIEluIG1vc3QgY2FzZXMgc3BsaXRfcG9zaXRpb24gYW5kIHBvc2l0aW9uIHdpbGwgYmUgdGhlCiAgICBzYW1lLgoKICAgIFNwbGl0cyB0aGUgY3VycmVudCByYW5nZSAnW3NlbGYuc3RhcnRfcG9zaXRpb24sIHNlbGYuc3RvcF9wb3NpdGlvbiknCiAgICBpbnRvIGEgInByaW1hcnkiIHBhcnQgJ1tzZWxmLnN0YXJ0X3Bvc2l0aW9uLCBzcGxpdF9wb3NpdGlvbiknIGFuZCBhCiAgICAicmVzaWR1YWwiIHBhcnQgJ1tzcGxpdF9wb3NpdGlvbiwgc2VsZi5zdG9wX3Bvc2l0aW9uKScsIGFzc3VtaW5nIHRoZQogICAgY3VycmVudCBsYXN0LWNvbnN1bWVkIHBvc2l0aW9uIGlzIHdpdGhpbgogICAgJ1tzZWxmLnN0YXJ0X3Bvc2l0aW9uLCBzcGxpdF9wb3NpdGlvbiknIChpLmUuLCBzcGxpdF9wb3NpdGlvbiBoYXMgbm90IGJlZW4KICAgIGNvbnN1bWVkIHlldCkuCgogICAgSWYgc3VjY2Vzc2Z1bCwgdXBkYXRlcyB0aGUgY3VycmVudCByYW5nZSB0byBiZSB0aGUgcHJpbWFyeSBhbmQgcmV0dXJucyBhCiAgICB0dXBsZSAoc3BsaXRfcG9zaXRpb24sIHNwbGl0X2ZyYWN0aW9uKS4gc3BsaXRfZnJhY3Rpb24gc2hvdWxkIGJlIHRoZQogICAgZnJhY3Rpb24gb2Ygc2l6ZSBvZiByYW5nZSAnW3NlbGYuc3RhcnRfcG9zaXRpb24sIHNwbGl0X3Bvc2l0aW9uKScgY29tcGFyZWQKICAgIHRvIHRoZSBvcmlnaW5hbCAoYmVmb3JlIHNwbGl0KSByYW5nZQogICAgJ1tzZWxmLnN0YXJ0X3Bvc2l0aW9uLCBzZWxmLnN0b3BfcG9zaXRpb24pJy4KCiAgICBJZiB0aGUgc3BsaXRfcG9zaXRpb24gaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZCwgcmV0dXJucyBgYE5vbmVgYC4KCiAgICAqKiBUaHJlYWQgc2FmZXR5ICoqCgogICAgTWV0aG9kcyBvZiB0aGUgY2xhc3MgYGBSYW5nZVRyYWNrZXJgYCBpbmNsdWRpbmcgdGhpcyBtZXRob2QgbWF5IGdldCBpbnZva2VkCiAgICBieSBkaWZmZXJlbnQgdGhyZWFkcywgaGVuY2UgbXVzdCBiZSBtYWRlIHRocmVhZC1zYWZlLCBlLmcuIGJ5IHVzaW5nIGEgc2luZ2xlCiAgICBsb2NrIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBwb3NpdGlvbjogc3VnZ2VzdGVkIHBvc2l0aW9uIHdoZXJlIHRoZSBjdXJyZW50IHJhbmdlIHNob3VsZCB0cnkgdG8KICAgICAgICAgICAgICAgIGJlIHNwbGl0IGF0LgogICAgUmV0dXJuczoKICAgICAgYSB0dXBsZSBjb250YWluaW5nIHRoZSBzcGxpdCBwb3NpdGlvbiBhbmQgc3BsaXQgZnJhY3Rpb24gaWYgc3BsaXQgaXMKICAgICAgc3VjY2Vzc2Z1bC4gUmV0dXJucyBgYE5vbmVgYCBvdGhlcndpc2UuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGZyYWN0aW9uX2NvbnN1bWVkKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgYXBwcm94aW1hdGUgZnJhY3Rpb24gb2YgY29uc3VtZWQgcG9zaXRpb25zIGluIHRoZSBzb3VyY2UuCgogICAgKiogVGhyZWFkIHNhZmV0eSAqKgoKICAgIE1ldGhvZHMgb2YgdGhlIGNsYXNzIGBgUmFuZ2VUcmFja2VyYGAgaW5jbHVkaW5nIHRoaXMgbWV0aG9kIG1heSBnZXQgaW52b2tlZAogICAgYnkgZGlmZmVyZW50IHRocmVhZHMsIGhlbmNlIG11c3QgYmUgbWFkZSB0aHJlYWQtc2FmZSwgZS5nLiBieSB1c2luZyBhIHNpbmdsZQogICAgbG9jayBvYmplY3QuCgogICAgUmV0dXJuczoKICAgICAgdGhlIGFwcHJveGltYXRlIGZyYWN0aW9uIG9mIHBvc2l0aW9ucyB0aGF0IGhhdmUgYmVlbiBjb25zdW1lZCBieQogICAgICBzdWNjZXNzZnVsICd0cnlfc3BsaXQoKScgYW5kICAndHJ5X2NsYWltKCknICBjYWxscywgb3IKICAgICAgMC4wIGlmIG5vIHN1Y2ggY2FsbHMgaGF2ZSBoYXBwZW5lZC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc3BsaXRfcG9pbnRzKHNlbGYpOgogICAgIiIiR2l2ZXMgdGhlIG51bWJlciBvZiBzcGxpdCBwb2ludHMgY29uc3VtZWQgYW5kIHJlbWFpbmluZy4KCiAgICBGb3IgYSBgYFJhbmdlVHJhY2tlcmBgIHVzZWQgYnkgYSBgYEJvdW5kZWRTb3VyY2VgYCAod2l0aGluIGEKICAgIGBgQm91bmRlZFNvdXJjZS5yZWFkKClgYCBpbnZvY2F0aW9uKSB0aGlzIG1ldGhvZCBwcm9kdWNlcyBhIDItdHVwbGUgdGhhdAogICAgZ2l2ZXMgdGhlIG51bWJlciBvZiBzcGxpdCBwb2ludHMgY29uc3VtZWQgYnkgdGhlIGBgQm91bmRlZFNvdXJjZWBgIGFuZCB0aGUKICAgIG51bWJlciBvZiBzcGxpdCBwb2ludHMgcmVtYWluaW5nIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgdGhlIGBgUmFuZ2VUcmFja2VyYGAKICAgIHRoYXQgaGFzIG5vdCBiZWVuIGNvbnN1bWVkIGJ5IHRoZSBgYEJvdW5kZWRTb3VyY2VgYC4KCiAgICBNb3JlIHNwZWNpZmljYWxseSwgZ2l2ZW4gdGhhdCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgcmVjb3JkIGJlaW5nIHJlYWQKICAgIGJ5IGBgQm91bmRlZFNvdXJjZWBgIGlzIGN1cnJlbnRfcG9zaXRpb24gdGhpcyBtZXRob2QgcHJvZHVjZXMgYSB0dXBsZSB0aGF0CiAgICBjb25zaXN0cyBvZgogICAgKDEpIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaW4gdGhlIHJhbmdlIFtzZWxmLnN0YXJ0X3Bvc2l0aW9uKCksCiAgICBjdXJyZW50X3Bvc2l0aW9uKSB3aXRob3V0IGluY2x1ZGluZyB0aGUgc3BsaXQgcG9pbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcKICAgIGNvbnN1bWVkLiBUaGlzIHJlcHJlc2VudHMgdGhlIHRvdGFsIGFtb3VudCBvZiBwYXJhbGxlbGlzbSBpbiB0aGUgY29uc3VtZWQKICAgIHBhcnQgb2YgdGhlIHNvdXJjZS4KICAgICgyKSBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIHdpdGhpbiB0aGUgcmFuZ2UKICAgIFtjdXJyZW50X3Bvc2l0aW9uLCBzZWxmLnN0b3BfcG9zaXRpb24oKSkgaW5jbHVkaW5nIHRoZSBzcGxpdCBwb2ludCB0aGF0IGlzCiAgICBjdXJyZW50bHkgYmVpbmcgY29uc3VtZWQuIFRoaXMgcmVwcmVzZW50cyB0aGUgdG90YWwgYW1vdW50IG9mIHBhcmFsbGVsaXNtIGluCiAgICB0aGUgdW5jb25zdW1lZCBwYXJ0IG9mIHRoZSBzb3VyY2UuCgogICAgTWV0aG9kcyBvZiB0aGUgY2xhc3MgYGBSYW5nZVRyYWNrZXJgYCBpbmNsdWRpbmcgdGhpcyBtZXRob2QgbWF5IGdldCBpbnZva2VkCiAgICBieSBkaWZmZXJlbnQgdGhyZWFkcywgaGVuY2UgbXVzdCBiZSBtYWRlIHRocmVhZC1zYWZlLCBlLmcuIGJ5IHVzaW5nIGEgc2luZ2xlCiAgICBsb2NrIG9iamVjdC4KCiAgICAqKiBHZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbnN1bWVkIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0CiAgICAgICBwb2ludHMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QuICoqCgogICAgICAqIEJlZm9yZSBhIHNvdXJjZSByZWFkIChgYEJvdW5kZWRTb3VyY2UucmVhZCgpYGAgaW52b2NhdGlvbikgY2xhaW1zIHRoZQogICAgICAgIGZpcnN0IHNwbGl0IHBvaW50LCBudW1iZXIgb2YgY29uc3VtZWQgc3BsaXQgcG9pbnRzIGlzIDAuIFRoaXMgY29uZGl0aW9uCiAgICAgICAgaG9sZHMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0aGUgaW5wdXQgaXMgInNwbGl0dGFibGUiLiBBIHNwbGl0dGFibGUKICAgICAgICBzb3VyY2UgaXMgYSBzb3VyY2UgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBzcGxpdCBwb2ludC4KICAgICAgKiBBbnkgc291cmNlIHJlYWQgdGhhdCBoYXMgb25seSBjbGFpbWVkIG9uZSBzcGxpdCBwb2ludCBoYXMgMCBjb25zdW1lZAogICAgICAgIHNwbGl0IHBvaW50cyBzaW5jZSB0aGUgZmlyc3Qgc3BsaXQgcG9pbnQgaXMgdGhlIGN1cnJlbnQgc3BsaXQgcG9pbnQgYW5kCiAgICAgICAgaXMgc3RpbGwgYmVpbmcgcHJvY2Vzc2VkLiBUaGlzIGNvbmRpdGlvbiBob2xkcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyCiAgICAgICAgdGhlIGlucHV0IGlzIHNwbGl0dGFibGUuCiAgICAgICogRm9yIGFuIGVtcHR5IHNvdXJjZSByZWFkIHdoaWNoIG5ldmVyIGludm9rZXMKICAgICAgICBgYFJhbmdlVHJhY2tlci50cnlfY2xhaW0oKWBgLCB0aGUgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAwLgogICAgICAgIFRoaXMgY29uZGl0aW9uIGhvbGRzIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgdGhlIGlucHV0IGlzIHNwbGl0dGFibGUuCiAgICAgICogRm9yIGEgc291cmNlIHJlYWQgd2hpY2ggaGFzIGludm9rZWQgYGBSYW5nZVRyYWNrZXIudHJ5X2NsYWltKClgYCBuCiAgICAgICAgdGltZXMsIHRoZSBjb25zdW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzICBuIC0xLgogICAgICAqIElmIGEgYGBCb3VuZGVkU291cmNlYGAgc2V0cyBhIGNhbGxiYWNrIHRocm91Z2ggZnVuY3Rpb24KICAgICAgICBgYHNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKClgYCwgYGBSYW5nZVRyYWNrZXJgYCBjYW4gdXNlIHRoYXQKICAgICAgICBjYWxsYmFjayB3aGVuIGRldGVybWluaW5nIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzLgogICAgICAqIFJlbWFpbmluZyBzcGxpdCBwb2ludHMgc2hvdWxkIGluY2x1ZGUgdGhlIHNwbGl0IHBvaW50IHRoYXQgaXMgY3VycmVudGx5CiAgICAgICAgYmVpbmcgY29uc3VtZWQgYnkgdGhlIHNvdXJjZSByZWFkLiBIZW5jZSBpZiB0aGUgYWJvdmUgY2FsbGJhY2sgcmV0dXJucwogICAgICAgIGFuIGludGVnZXIgdmFsdWUgbiwgcmVtYWluaW5nIG51bWJlciBvZiBzcGxpdCBwb2ludHMgc2hvdWxkIGJlIChuICsgMSkuCiAgICAgICogQWZ0ZXIgbGFzdCBzcGxpdCBwb2ludCBpcyBjbGFpbWVkIHJlbWFpbmluZyBzcGxpdCBwb2ludHMgYmVjb21lcyAxLAogICAgICAgIGJlY2F1c2UgdGhpcyB1bmZpbmlzaGVkIHJlYWQgaXRzZWxmIHJlcHJlc2VudHMgYW4gIHVuZmluaXNoZWQgc3BsaXQKICAgICAgICBwb2ludC4KICAgICAgKiBBZnRlciBhbGwgcmVjb3JkcyBvZiB0aGUgc291cmNlIGhhcyBiZWVuIGNvbnN1bWVkLCByZW1haW5pbmcgbnVtYmVyIG9mCiAgICAgICAgc3BsaXQgcG9pbnRzIGJlY29tZXMgMCBhbmQgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBiZWNvbWVzIGVxdWFsCiAgICAgICAgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBzcGxpdCBwb2ludHMgd2l0aGluIHRoZSByYW5nZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICAgIHNvdXJjZS4gVGhpcyBtZXRob2QgZG9lcyBub3QgYWRkcmVzcyB0aGlzIGNvbmRpdGlvbiBhbmQgd2lsbCBjb250aW51ZSB0bwogICAgICAgIHJlcG9ydCBudW1iZXIgb2YgY29uc3VtZWQgc3BsaXQgcG9pbnRzIGFzCiAgICAgICAgKCJ0b3RhbCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIiAtIDEpIGFuZCBudW1iZXIgb2YgcmVtYWluaW5nIHNwbGl0CiAgICAgICAgcG9pbnRzIGFzIDEuIEEgcnVubmVyIHRoYXQgcGVyZm9ybXMgdGhlIHJlYWRpbmcgb2YgdGhlIHNvdXJjZSBjYW4KICAgICAgICBkZXRlY3Qgd2hlbiBhbGwgcmVjb3JkcyBoYXZlIGJlZW4gY29uc3VtZWQgYW5kIGFkanVzdCByZW1haW5pbmcgYW5kCiAgICAgICAgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBhY2NvcmRpbmdseS4KCiAgICAqKiBFeGFtcGxlcyAqKgoKICAgICgxKSBBICJwZXJmZWN0bHkgc3BsaXR0YWJsZSIgaW5wdXQgd2hpY2ggY2FuIGJlIHJlYWQgaW4gcGFyYWxsZWwgZG93biB0byB0aGUKICAgICAgICBpbmRpdmlkdWFsIHJlY29yZHMuCgogICAgICAgIENvbnNpZGVyIGEgcGVyZmVjdGx5IHNwbGl0dGFibGUgaW5wdXQgdGhhdCBjb25zaXN0cyBvZiA1MCBzcGxpdCBwb2ludHMuCgogICAgICAqIEJlZm9yZSBhIHNvdXJjZSByZWFkIChgYEJvdW5kZWRTb3VyY2UucmVhZCgpYGAgaW52b2NhdGlvbikgY2xhaW1zIHRoZQogICAgICAgIGZpcnN0IHNwbGl0IHBvaW50LCBudW1iZXIgb2YgY29uc3VtZWQgc3BsaXQgcG9pbnRzIGlzIDAgbnVtYmVyIG9mCiAgICAgICAgcmVtYWluaW5nIHNwbGl0IHBvaW50cyBpcyA1MC4KICAgICAgKiBBZnRlciBjbGFpbWluZyBmaXJzdCBzcGxpdCBwb2ludCwgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAwCiAgICAgICAgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgaXMgNTAuCiAgICAgICogQWZ0ZXIgY2xhaW1pbmcgc3BsaXQgcG9pbnQgIzMwLCBjb25zdW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzIDI5CiAgICAgICAgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzIDIxLgogICAgICAqIEFmdGVyIGNsYWltaW5nIGFsbCA1MCBzcGxpdCBwb2ludHMsIGNvbnN1bWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMKICAgICAgICA0OSBhbmQgcmVtYWluaW5nIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMgMS4KCiAgICAoMikgYSAiYmxvY2stY29tcHJlc3NlZCIgZmlsZSBmb3JtYXQgc3VjaCBhcyBgYGF2cm9pb2BgLCBpbiB3aGljaCBhIGJsb2NrIG9mCiAgICAgICAgcmVjb3JkcyBoYXMgdG8gYmUgcmVhZCBhcyBhIHdob2xlLCBidXQgZGlmZmVyZW50IGJsb2NrcyBjYW4gYmUgcmVhZCBpbgogICAgICAgIHBhcmFsbGVsLgoKICAgICAgICBDb25zaWRlciBhIGJsb2NrIGNvbXByZXNzZWQgaW5wdXQgdGhhdCBjb25zaXN0cyBvZiA1IGJsb2Nrcy4KCiAgICAgICogQmVmb3JlIGEgc291cmNlIHJlYWQgKGBgQm91bmRlZFNvdXJjZS5yZWFkKClgYCBpbnZvY2F0aW9uKSBjbGFpbXMgdGhlCiAgICAgICAgZmlyc3Qgc3BsaXQgcG9pbnQgKGZpcnN0IGJsb2NrKSwgbnVtYmVyIG9mIGNvbnN1bWVkIHNwbGl0IHBvaW50cyBpcyAwCiAgICAgICAgbnVtYmVyIG9mIHJlbWFpbmluZyBzcGxpdCBwb2ludHMgaXMgNS4KICAgICAgKiBBZnRlciBjbGFpbWluZyBmaXJzdCBzcGxpdCBwb2ludCwgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAwCiAgICAgICAgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgaXMgNS4KICAgICAgKiBBZnRlciBjbGFpbWluZyBzcGxpdCBwb2ludCAjMywgY29uc3VtZWQgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBpcyAyCiAgICAgICAgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzIDMuCiAgICAgICogQWZ0ZXIgY2xhaW1pbmcgYWxsIDUgc3BsaXQgcG9pbnRzLCBjb25zdW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzIGlzCiAgICAgICAgNCBhbmQgcmVtYWluaW5nIG51bWJlciBvZiBzcGxpdCBwb2ludHMgaXMgMS4KCiAgICAoMykgYW4gInVuc3BsaXR0YWJsZSIgaW5wdXQgc3VjaCBhcyBhIGN1cnNvciBpbiBhIGRhdGFiYXNlIG9yIGEgZ3ppcAogICAgICAgIGNvbXByZXNzZWQgZmlsZS4KCiAgICAgICAgU3VjaCBhbiBpbnB1dCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgb25seSBhIHNpbmdsZSBzcGxpdCBwb2ludC4gTnVtYmVyIG9mCiAgICAgICAgY29uc3VtZWQgc3BsaXQgcG9pbnRzIGlzIGFsd2F5cyAwIGFuZCBudW1iZXIgb2YgcmVtYWluaW5nIHNwbGl0IHBvaW50cwogICAgICAgIGlzIGFsd2F5cyAxLgoKICAgIEJ5IGRlZmF1bHQgYGBSYW5nZVRyYWNrZXJgIHJldHVybnMgYGBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV05gYCBmb3IKICAgIGJvdGggY29uc3VtZWQgYW5kIHJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUKICAgIG51bWJlciBvZiBzcGxpdCBwb2ludHMgY29uc3VtZWQgYW5kIHJlbWFpbmluZyBpcyB1bmtub3duLgoKICAgIFJldHVybnM6CiAgICAgIEEgcGFpciB0aGF0IGdpdmVzIGNvbnN1bWVkIGFuZCByZW1haW5pbmcgbnVtYmVyIG9mIHNwbGl0IHBvaW50cy4gQ29uc3VtZWQKICAgICAgbnVtYmVyIG9mIHNwbGl0IHBvaW50cyBzaG91bGQgYmUgYW4gaW50ZWdlciBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvCiAgICAgIG9yIGBgUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOYGAuIFJlbWFpbmluZyBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzCiAgICAgIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGxhcmdlciB0aGFuIHplcm8gb3IKICAgICAgYGBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV05gYC4KICAgICIiIgogICAgcmV0dXJuICgKICAgICAgICBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04sIFJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTikKCiAgZGVmIHNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKICAgICIiIlNldHMgYSBjYWxsYmFjayBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVuY2xhaW1lZCBudW1iZXIgb2Ygc3BsaXQgcG9pbnRzLgoKICAgIEJ5IGludm9raW5nIHRoaXMgZnVuY3Rpb24sIGEgYGBCb3VuZGVkU291cmNlYGAgY2FuIHNldCBhIGNhbGxiYWNrIGZ1bmN0aW9uCiAgICB0aGF0IG1heSBnZXQgaW52b2tlZCBieSB0aGUgYGBSYW5nZVRyYWNrZXJgYCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgogICAgdW5jbGFpbWVkIHNwbGl0IHBvaW50cy4gQSBzcGxpdCBwb2ludCBpcyB1bmNsYWltZWQgaWYKICAgIGBgUmFuZ2VUcmFja2VyLnRyeV9jbGFpbSgpYGAgbWV0aG9kIGhhcyBub3QgYmVlbiBzdWNjZXNzZnVsbHkgaW52b2tlZCBmb3IKICAgIHRoYXQgcGFydGljdWxhciBzcGxpdCBwb2ludC4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFjY2VwdHMgYSBzaW5nbGUKICAgIHBhcmFtZXRlciwgYSBzdG9wIHBvc2l0aW9uIGZvciB0aGUgQm91bmRlZFNvdXJjZSAoc3RvcF9wb3NpdGlvbikuIElmIHRoZQogICAgcmVjb3JkIGN1cnJlbnRseSBiZWluZyBjb25zdW1lZCBieSB0aGUgYGBCb3VuZGVkU291cmNlYGAgaXMgYXQgcG9zaXRpb24KICAgIGN1cnJlbnRfcG9zaXRpb24sIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBzcGxpdCBwb2ludHMgd2l0aGluCiAgICB0aGUgcmFuZ2UgKGN1cnJlbnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pLiBOb3RlIHRoYXQsIHRoaXMgc2hvdWxkIG5vdAogICAgaW5jbHVkZSB0aGUgc3BsaXQgcG9pbnQgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgY29uc3VtZWQgYnkgdGhlIHNvdXJjZS4KCiAgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyBiZWZvcmUgYmVpbmcgdXNlZC4KCiAgICBBcmdzOgogICAgICBjYWxsYmFjazogYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwgYSBzdG9wIHBvc2l0aW9uLAogICAgICAgICAgICAgICAgYW5kIHJldHVybnMgdW5jbGFpbWVkIG51bWJlciBvZiBzcGxpdCBwb2ludHMgZm9yIHRoZSBzb3VyY2UgcmVhZAogICAgICAgICAgICAgICAgb3BlcmF0aW9uIHRoYXQgaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBWYWx1ZSByZXR1cm5lZCBmcm9tCiAgICAgICAgICAgICAgICBjYWxsYmFjayBzaG91bGQgYmUgZWl0aGVyIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gb3IgZXF1YWwgdG8KICAgICAgICAgICAgICAgIHplcm8gb3IgYGBSYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV05gYC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIFNpbmsoSGFzRGlzcGxheURhdGEpOgogICIiIlRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCwgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSByZXNvdXJjZSB0aGF0IGNhbiBiZSB3cml0dGVuIHRvIHVzaW5nIHRoZSBgYGJlYW0uaW8uV3JpdGVgYCB0cmFuc2Zvcm0uCgogIEhlcmUgYGBiZWFtYGAgc3RhbmRzIGZvciBBcGFjaGUgQmVhbSBQeXRob24gY29kZSBpbXBvcnRlZCBpbiBmb2xsb3dpbmcgbWFubmVyLgogIGBgaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW1gYC4KCiAgQSBwYXJhbGxlbCB3cml0ZSB0byBhbiBgYGlvYmFzZS5TaW5rYGAgY29uc2lzdHMgb2YgdGhyZWUgcGhhc2VzOgoKICAxLiBBIHNlcXVlbnRpYWwgKmluaXRpYWxpemF0aW9uKiBwaGFzZSAoZS5nLiwgY3JlYXRpbmcgYSB0ZW1wb3Jhcnkgb3V0cHV0CiAgICAgZGlyZWN0b3J5LCBldGMuKQogIDIuIEEgcGFyYWxsZWwgd3JpdGUgcGhhc2Ugd2hlcmUgd29ya2VycyB3cml0ZSAqYnVuZGxlcyogb2YgcmVjb3JkcwogIDMuIEEgc2VxdWVudGlhbCAqZmluYWxpemF0aW9uKiBwaGFzZSAoZS5nLiwgY29tbWl0dGluZyB0aGUgd3JpdGVzLCBtZXJnaW5nCiAgICAgb3V0cHV0IGZpbGVzLCBldGMuKQoKICBJbXBsZW1lbnRpbmcgYSBuZXcgc2luayByZXF1aXJlcyBleHRlbmRpbmcgdHdvIGNsYXNzZXMuCgogIDEuIGlvYmFzZS5TaW5rCgogIGBgaW9iYXNlLlNpbmtgYCBpcyBhbiBpbW11dGFibGUgbG9naWNhbCBkZXNjcmlwdGlvbiBvZiB0aGUgbG9jYXRpb24vcmVzb3VyY2UKICB0byB3cml0ZSB0by4gRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHNpbmssIGl0IG1heSBjb250YWluIGZpZWxkcyBzdWNoIGFzIHRoZQogIHBhdGggdG8gYW4gb3V0cHV0IGRpcmVjdG9yeSBvbiBhIGZpbGVzeXN0ZW0sIGEgZGF0YWJhc2UgdGFibGUgbmFtZSwKICBldGMuIGBgaW9iYXNlLlNpbmtgYCBwcm92aWRlcyBtZXRob2RzIGZvciBwZXJmb3JtaW5nIGEgd3JpdGUgb3BlcmF0aW9uIHRvIHRoZQogIHNpbmsgZGVzY3JpYmVkIGJ5IGl0LiBUbyB0aGlzIGVuZCwgaW1wbGVtZW50b3JzIG9mIGFuIGV4dGVuc2lvbiBvZgogIGBgaW9iYXNlLlNpbmtgYCBtdXN0IGltcGxlbWVudCB0aHJlZSBtZXRob2RzOgogIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAsIGBgb3Blbl93cml0ZXIoKWBgLCBhbmQgYGBmaW5hbGl6ZV93cml0ZSgpYGAuCgogIDIuIGlvYmFzZS5Xcml0ZXIKCiAgYGBpb2Jhc2UuV3JpdGVyYGAgaXMgdXNlZCB0byB3cml0ZSBhIHNpbmdsZSBidW5kbGUgb2YgcmVjb3Jkcy4gQW4KICBgYGlvYmFzZS5Xcml0ZXJgYCBkZWZpbmVzIHR3byBtZXRob2RzOiBgYHdyaXRlKClgYCB3aGljaCB3cml0ZXMgYQogIHNpbmdsZSByZWNvcmQgZnJvbSB0aGUgYnVuZGxlIGFuZCBgYGNsb3NlKClgYCB3aGljaCBpcyBjYWxsZWQgb25jZQogIGF0IHRoZSBlbmQgb2Ygd3JpdGluZyBhIGJ1bmRsZS4KCiAgU2VlIGFsc28gYGBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmtgYCB3aGljaCBwcm92aWRlcyBhCiAgc2ltcGxlciBBUEkgZm9yIHdyaXRpbmcgc2lua3MgdGhhdCBwcm9kdWNlIGZpbGVzLgoKICAqKkV4ZWN1dGlvbiBvZiB0aGUgV3JpdGUgdHJhbnNmb3JtKioKCiAgYGBpbml0aWFsaXplX3dyaXRlKClgYCwgYGBwcmVfZmluYWxpemUoKWBgLCBhbmQgYGBmaW5hbGl6ZV93cml0ZSgpYGAgYXJlCiAgY29uY2VwdHVhbGx5IGNhbGxlZCBvbmNlLiBIb3dldmVyLCBpbXBsZW1lbnRvcnMgbXVzdAogIGVuc3VyZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlICppZGVtcG90ZW50KiwgYXMgdGhleSBtYXkgYmUgY2FsbGVkIG11bHRpcGxlCiAgdGltZXMgb24gZGlmZmVyZW50IG1hY2hpbmVzIGluIHRoZSBjYXNlIG9mIGZhaWx1cmUvcmV0cnkuIEEgbWV0aG9kIG1heSBiZQogIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBjb25jdXJyZW50bHksIGluIHdoaWNoIGNhc2UgaXQncyBva2F5IHRvIGhhdmUgYQogIHRyYW5zaWVudCBmYWlsdXJlIChzdWNoIGFzIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uKS4gVGhpcyBmYWlsdXJlIHNob3VsZCBub3QKICBwcmV2ZW50IHN1YnNlcXVlbnQgcmV0cmllcyBmcm9tIHN1Y2NlZWRpbmcuCgogIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAgc2hvdWxkIHBlcmZvcm0gYW55IGluaXRpYWxpemF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgZG9uZQogIHByaW9yIHRvIHdyaXRpbmcgdG8gdGhlIHNpbmsuIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAgbWF5IHJldHVybiBhIHJlc3VsdAogIChsZXQncyBjYWxsIHRoaXMgYGBpbml0X3Jlc3VsdGBgKSB0aGF0IGNvbnRhaW5zIGFueSBwYXJhbWV0ZXJzIGl0IHdhbnRzIHRvCiAgcGFzcyBvbiB0byBpdHMgd3JpdGVycyBhYm91dCB0aGUgc2luay4gRm9yIGV4YW1wbGUsIGEgc2luayB0aGF0IHdyaXRlcyB0byBhCiAgZmlsZSBzeXN0ZW0gbWF5IHJldHVybiBhbiBgYGluaXRfcmVzdWx0YGAgdGhhdCBjb250YWlucyBhIGR5bmFtaWNhbGx5CiAgZ2VuZXJhdGVkIHVuaXF1ZSBkaXJlY3RvcnkgdG8gd2hpY2ggZGF0YSBzaG91bGQgYmUgd3JpdHRlbi4KCiAgVG8gcGVyZm9ybSB3cml0aW5nIG9mIGEgYnVuZGxlIG9mIGVsZW1lbnRzLCBEYXRhZmxvdyBleGVjdXRpb24gZW5naW5lIHdpbGwKICBjcmVhdGUgYW4gYGBpb2Jhc2UuV3JpdGVyYGAgdXNpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mCiAgYGBpb2Jhc2UuU2luay5vcGVuX3dyaXRlcigpYGAuIFdoZW4gaW52b2tpbmcgYGBvcGVuX3dyaXRlcigpYGAgZXhlY3V0aW9uCiAgZW5naW5lIHdpbGwgcHJvdmlkZSB0aGUgYGBpbml0X3Jlc3VsdGBgIHJldHVybmVkIGJ5IGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAKICBpbnZvY2F0aW9uIGFzIHdlbGwgYXMgYSAqYnVuZGxlIGlkKiAobGV0J3MgY2FsbCB0aGlzIGBgYnVuZGxlX2lkYGApIHRoYXQgaXMKICB1bmlxdWUgZm9yIGVhY2ggaW52b2NhdGlvbiBvZiBgYG9wZW5fd3JpdGVyKClgYC4KCiAgRXhlY3V0aW9uIGVuZ2luZSB3aWxsIHRoZW4gaW52b2tlIGBgaW9iYXNlLldyaXRlci53cml0ZSgpYGAgaW1wbGVtZW50YXRpb24gZm9yCiAgZWFjaCBlbGVtZW50IHRoYXQgaGFzIHRvIGJlIHdyaXR0ZW4uIE9uY2UgYWxsIGVsZW1lbnRzIG9mIGEgYnVuZGxlIGFyZQogIHdyaXR0ZW4sIGV4ZWN1dGlvbiBlbmdpbmUgd2lsbCBpbnZva2UgYGBpb2Jhc2UuV3JpdGVyLmNsb3NlKClgYCBpbXBsZW1lbnRhdGlvbgogIHdoaWNoIHNob3VsZCByZXR1cm4gYSByZXN1bHQgKGxldCdzIGNhbGwgdGhpcyBgYHdyaXRlX3Jlc3VsdGBgKSB0aGF0IGNvbnRhaW5zCiAgaW5mb3JtYXRpb24gdGhhdCBlbmNvZGVzIHRoZSByZXN1bHQgb2YgdGhlIHdyaXRlIGFuZCwgaW4gbW9zdCBjYXNlcywgc29tZQogIGVuY29kaW5nIG9mIHRoZSB1bmlxdWUgYnVuZGxlIGlkLiBGb3IgZXhhbXBsZSwgaWYgZWFjaCBidW5kbGUgaXMgd3JpdHRlbiB0byBhCiAgdW5pcXVlIHRlbXBvcmFyeSBmaWxlLCBgYGNsb3NlKClgYCBtZXRob2QgbWF5IHJldHVybiBhbiBvYmplY3QgdGhhdCBjb250YWlucwogIHRoZSB0ZW1wb3JhcnkgZmlsZSBuYW1lLiBBZnRlciB3cml0aW5nIG9mIGFsbCBidW5kbGVzIGlzIGNvbXBsZXRlLCBleGVjdXRpb24KICBlbmdpbmUgd2lsbCBpbnZva2UgYGBwcmVfZmluYWxpemUoKWBgIGFuZCB0aGVuIGBgZmluYWxpemVfd3JpdGUoKWBgCiAgaW1wbGVtZW50YXRpb24uCgogIFRoZSBleGVjdXRpb24gb2YgYSB3cml0ZSB0cmFuc2Zvcm0gY2FuIGJlIGlsbHVzdHJhdGVkIHVzaW5nIGZvbGxvd2luZyBwc2V1ZG8KICBjb2RlIChhc3N1bWUgdGhhdCB0aGUgb3V0ZXIgZm9yIGxvb3AgaGFwcGVucyBpbiBwYXJhbGxlbCBhY3Jvc3MgbWFueQogIG1hY2hpbmVzKTo6CgogICAgaW5pdF9yZXN1bHQgPSBzaW5rLmluaXRpYWxpemVfd3JpdGUoKQogICAgd3JpdGVfcmVzdWx0cyA9IFtdCiAgICBmb3IgYnVuZGxlIGluIHBhcnRpdGlvbihwY29sbCk6CiAgICAgIHdyaXRlciA9IHNpbmsub3Blbl93cml0ZXIoaW5pdF9yZXN1bHQsIGdlbmVyYXRlX2J1bmRsZV9pZCgpKQogICAgICBmb3IgZWxlbSBpbiBidW5kbGU6CiAgICAgICAgd3JpdGVyLndyaXRlKGVsZW0pCiAgICAgIHdyaXRlX3Jlc3VsdHMuYXBwZW5kKHdyaXRlci5jbG9zZSgpKQogICAgcHJlX2ZpbmFsaXplX3Jlc3VsdCA9IHNpbmsucHJlX2ZpbmFsaXplKGluaXRfcmVzdWx0LCB3cml0ZV9yZXN1bHRzKQogICAgc2luay5maW5hbGl6ZV93cml0ZShpbml0X3Jlc3VsdCwgd3JpdGVfcmVzdWx0cywgcHJlX2ZpbmFsaXplX3Jlc3VsdCkKCgogICoqaW5pdF9yZXN1bHQqKgoKICBNZXRob2RzIG9mICdpb2Jhc2UuU2luaycgc2hvdWxkIGFncmVlIG9uIHRoZSAnaW5pdF9yZXN1bHQnIHR5cGUgdGhhdCB3aWxsIGJlCiAgcmV0dXJuZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIHNpbmsuIFRoaXMgdHlwZSBjYW4gYmUgYSBjbGllbnQtZGVmaW5lZCBvYmplY3QKICBvciBhbiBleGlzdGluZyB0eXBlLiBUaGUgcmV0dXJuZWQgdHlwZSBtdXN0IGJlIHBpY2tsYWJsZSB1c2luZyBEYXRhZmxvdyBjb2RlcgogIGBgY29kZXJzLlBpY2tsZUNvZGVyYGAuIFJldHVybmluZyBhbiBpbml0X3Jlc3VsdCBpcyBvcHRpb25hbC4KCiAgKipidW5kbGVfaWQqKgoKICBJbiBvcmRlciB0byBlbnN1cmUgZmF1bHQtdG9sZXJhbmNlLCBhIGJ1bmRsZSBtYXkgYmUgZXhlY3V0ZWQgbXVsdGlwbGUgdGltZXMKICAoZS5nLiwgaW4gdGhlIGV2ZW50IG9mIGZhaWx1cmUvcmV0cnkgb3IgZm9yIHJlZHVuZGFuY3kpLiBIb3dldmVyLCBleGFjdGx5IG9uZQogIG9mIHRoZXNlIGV4ZWN1dGlvbnMgd2lsbCBoYXZlIGl0cyByZXN1bHQgcGFzc2VkIHRvIHRoZQogIGBgaW9iYXNlLlNpbmsuZmluYWxpemVfd3JpdGUoKWBgIG1ldGhvZC4gRWFjaCBjYWxsIHRvCiAgYGBpb2Jhc2UuU2luay5vcGVuX3dyaXRlcigpYGAgaXMgcGFzc2VkIGEgdW5pcXVlIGJ1bmRsZSBpZCB3aGVuIGl0IGlzIGNhbGxlZAogIGJ5IHRoZSBgYFdyaXRlSW1wbGBgIHRyYW5zZm9ybSwgc28gZXZlbiByZWR1bmRhbnQgb3IgcmV0cmllZCBidW5kbGVzIHdpbGwgaGF2ZQogIGEgdW5pcXVlIHdheSBvZiBpZGVudGlmeWluZyB0aGVpciBvdXRwdXQuCgogIFRoZSBidW5kbGUgaWQgc2hvdWxkIGJlIHVzZWQgdG8gZ3VhcmFudGVlIHRoYXQgYSBidW5kbGUncyBvdXRwdXQgaXMgdW5pcXVlLgogIFRoaXMgdW5pcXVlbmVzcyBndWFyYW50ZWUgaXMgaW1wb3J0YW50OyBpZiBhIGJ1bmRsZSBpcyB0byBiZSBvdXRwdXQgdG8gYSBmaWxlLAogIGZvciBleGFtcGxlLCB0aGUgbmFtZSBvZiB0aGUgZmlsZSBtdXN0IGJlIHVuaXF1ZSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlcgogIHdyaXRlcnMuIFRoZSBidW5kbGUgaWQgc2hvdWxkIGJlIGVuY29kZWQgaW4gdGhlIHdyaXRlciByZXN1bHQgcmV0dXJuZWQgYnkgdGhlCiAgd3JpdGVyIGFuZCBzdWJzZXF1ZW50bHkgdXNlZCBieSB0aGUgYGBmaW5hbGl6ZV93cml0ZSgpYGAgbWV0aG9kIHRvIGlkZW50aWZ5CiAgdGhlIHJlc3VsdHMgb2Ygc3VjY2Vzc2Z1bCB3cml0ZXMuCgogIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgc2NlbmFyaW8gd2hlcmUgYSBXcml0ZXIgd3JpdGVzIGZpbGVzIGNvbnRhaW5pbmcKICBzZXJpYWxpemVkIHJlY29yZHMgYW5kIHRoZSBgYGZpbmFsaXplX3dyaXRlKClgYCBpcyB0byBtZXJnZSBvciByZW5hbWUgdGhlc2UKICBvdXRwdXQgZmlsZXMuIEluIHRoaXMgY2FzZSwgYSB3cml0ZXIgbWF5IHVzZSBpdHMgdW5pcXVlIGlkIHRvIG5hbWUgaXRzIG91dHB1dAogIGZpbGUgKHRvIGF2b2lkIGNvbmZsaWN0cykgYW5kIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpdCB3cm90ZSBhcyBpdHMKICB3cml0ZXIgcmVzdWx0LiBUaGUgYGBmaW5hbGl6ZV93cml0ZSgpYGAgd2lsbCB0aGVuIHJlY2VpdmUgYW4gYGBJdGVyYWJsZWBgIG9mCiAgb3V0cHV0IGZpbGUgbmFtZXMgdGhhdCBpdCBjYW4gdGhlbiBtZXJnZSBvciByZW5hbWUgdXNpbmcgc29tZSBidW5kbGUgbmFtaW5nCiAgc2NoZW1lLgoKICAqKndyaXRlX3Jlc3VsdCoqCgogIGBgaW9iYXNlLldyaXRlci5jbG9zZSgpYGAgYW5kIGBgZmluYWxpemVfd3JpdGUoKWBgIGltcGxlbWVudGF0aW9ucyBtdXN0IGFncmVlCiAgb24gdHlwZSBvZiB0aGUgYGB3cml0ZV9yZXN1bHRgYCBvYmplY3QgcmV0dXJuZWQgd2hlbiBpbnZva2luZwogIGBgaW9iYXNlLldyaXRlci5jbG9zZSgpYGAuIFRoaXMgdHlwZSBjYW4gYmUgYSBjbGllbnQtZGVmaW5lZCBvYmplY3Qgb3IKICBhbiBleGlzdGluZyB0eXBlLiBUaGUgcmV0dXJuZWQgdHlwZSBtdXN0IGJlIHBpY2tsYWJsZSB1c2luZyBEYXRhZmxvdyBjb2RlcgogIGBgY29kZXJzLlBpY2tsZUNvZGVyYGAuIFJldHVybmluZyBhIGBgd3JpdGVfcmVzdWx0YGAgd2hlbgogIGBgaW9iYXNlLldyaXRlci5jbG9zZSgpYGAgaXMgaW52b2tlZCBpcyBvcHRpb25hbCBidXQgaWYgdW5pcXVlCiAgYGB3cml0ZV9yZXN1bHRgYCBvYmplY3RzIGFyZSBub3QgcmV0dXJuZWQsIHNpbmsgc2hvdWxkLCBndWFyYW50ZWUgaWRlbXBvdGVuY3kKICB3aGVuIHNhbWUgYnVuZGxlIGlzIHdyaXR0ZW4gbXVsdGlwbGUgdGltZXMgZHVlIHRvIGZhaWx1cmUvcmV0cnkgb3IgcmVkdW5kYW5jeS4KCgogICoqTW9yZSBpbmZvcm1hdGlvbioqCgogIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNyZWF0aW5nIG5ldyBzaW5rcyBwbGVhc2UgcmVmZXIgdG8gdGhlIG9mZmljaWFsCiAgZG9jdW1lbnRhdGlvbiBhdAogIGBgaHR0cHM6Ly9iZWFtLmFwYWNoZS5vcmcvZG9jdW1lbnRhdGlvbi9zZGtzL3B5dGhvbi1jdXN0b20taW8jY3JlYXRpbmctc2lua3NgYAogICIiIgogIGRlZiBpbml0aWFsaXplX3dyaXRlKHNlbGYpOgogICAgIiIiSW5pdGlhbGl6ZXMgdGhlIHNpbmsgYmVmb3JlIHdyaXRpbmcgYmVnaW5zLgoKICAgIEludm9rZWQgYmVmb3JlIGFueSBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIHNpbmsuCgoKICAgIFBsZWFzZSBzZWUgZG9jdW1lbnRhdGlvbiBpbiBgYGlvYmFzZS5TaW5rYGAgZm9yIGFuIGV4YW1wbGUuCgogICAgUmV0dXJuczoKICAgICAgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYW55IHNpbmsgc3BlY2lmaWMgc3RhdGUgZ2VuZXJhdGVkIGJ5CiAgICAgIGluaXRpYWxpemF0aW9uLiBUaGlzIG9iamVjdCB3aWxsIGJlIHBhc3NlZCB0byBvcGVuX3dyaXRlcigpIGFuZAogICAgICBmaW5hbGl6ZV93cml0ZSgpIG1ldGhvZHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIG9wZW5fd3JpdGVyKHNlbGYsIGluaXRfcmVzdWx0LCB1aWQpOgogICAgIiIiT3BlbnMgYSB3cml0ZXIgZm9yIHdyaXRpbmcgYSBidW5kbGUgb2YgZWxlbWVudHMgdG8gdGhlIHNpbmsuCgogICAgQXJnczoKICAgICAgaW5pdF9yZXN1bHQ6IHRoZSByZXN1bHQgb2YgaW5pdGlhbGl6ZV93cml0ZSgpIGludm9jYXRpb24uCiAgICAgIHVpZDogYSB1bmlxdWUgaWRlbnRpZmllciBnZW5lcmF0ZWQgYnkgdGhlIHN5c3RlbS4KICAgIFJldHVybnM6CiAgICAgIGFuIGBgaW9iYXNlLldyaXRlcmBgIHRoYXQgY2FuIGJlIHVzZWQgdG8gd3JpdGUgYSBidW5kbGUgb2YgcmVjb3JkcyB0byB0aGUKICAgICAgY3VycmVudCBzaW5rLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBwcmVfZmluYWxpemUoc2VsZiwgaW5pdF9yZXN1bHQsIHdyaXRlcl9yZXN1bHRzKToKICAgICIiIlByZS1maW5hbGl6YXRpb24gc3RhZ2UgZm9yIHNpbmsuCgogICAgQ2FsbGVkIGFmdGVyIGFsbCBidW5kbGUgd3JpdGVzIGFyZSBjb21wbGV0ZSBhbmQgYmVmb3JlIGZpbmFsaXplX3dyaXRlLgogICAgVXNlZCB0byBzZXR1cCBhbmQgdmVyaWZ5IGZpbGVzeXN0ZW0gYW5kIHNpbmsgc3RhdGVzLgoKICAgIEFyZ3M6CiAgICAgIGluaXRfcmVzdWx0OiB0aGUgcmVzdWx0IG9mIGBgaW5pdGlhbGl6ZV93cml0ZSgpYGAgaW52b2NhdGlvbi4KICAgICAgd3JpdGVyX3Jlc3VsdHM6IGFuIGl0ZXJhYmxlIGNvbnRhaW5pbmcgcmVzdWx0cyBvZiBgYFdyaXRlci5jbG9zZSgpYGAKICAgICAgICBpbnZvY2F0aW9ucy4gVGhpcyB3aWxsIG9ubHkgY29udGFpbiByZXN1bHRzIG9mIHN1Y2Nlc3NmdWwgd3JpdGVzLCBhbmQKICAgICAgICB3aWxsIG9ubHkgY29udGFpbiB0aGUgcmVzdWx0IG9mIGEgc2luZ2xlIHN1Y2Nlc3NmdWwgd3JpdGUgZm9yIGEgZ2l2ZW4KICAgICAgICBidW5kbGUuCgogICAgUmV0dXJuczoKICAgICAgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYW55IHNpbmsgc3BlY2lmaWMgc3RhdGUgZ2VuZXJhdGVkLgogICAgICBUaGlzIG9iamVjdCB3aWxsIGJlIHBhc3NlZCB0byBmaW5hbGl6ZV93cml0ZSgpLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBmaW5hbGl6ZV93cml0ZShzZWxmLCBpbml0X3Jlc3VsdCwgd3JpdGVyX3Jlc3VsdHMsIHByZV9maW5hbGl6ZV9yZXN1bHQpOgogICAgIiIiRmluYWxpemVzIHRoZSBzaW5rIGFmdGVyIGFsbCBkYXRhIGlzIHdyaXR0ZW4gdG8gaXQuCgogICAgR2l2ZW4gdGhlIHJlc3VsdCBvZiBpbml0aWFsaXphdGlvbiBhbmQgYW4gaXRlcmFibGUgb2YgcmVzdWx0cyBmcm9tIGJ1bmRsZQogICAgd3JpdGVzLCBwZXJmb3JtcyBmaW5hbGl6YXRpb24gYWZ0ZXIgd3JpdGluZyBhbmQgY2xvc2VzIHRoZSBzaW5rLiBDYWxsZWQKICAgIGFmdGVyIGFsbCBidW5kbGUgd3JpdGVzIGFyZSBjb21wbGV0ZS4KCiAgICBUaGUgYnVuZGxlIHdyaXRlIHJlc3VsdHMgdGhhdCBhcmUgcGFzc2VkIHRvIGZpbmFsaXplIGFyZSB0aG9zZSByZXR1cm5lZCBieQogICAgYnVuZGxlcyB0aGF0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIEFsdGhvdWdoIGJ1bmRsZXMgbWF5IGhhdmUgYmVlbiBydW4KICAgIG11bHRpcGxlIHRpbWVzIChmb3IgZmF1bHQtdG9sZXJhbmNlKSwgb25seSBvbmUgd3JpdGVyIHJlc3VsdCB3aWxsIGJlIHBhc3NlZAogICAgdG8gZmluYWxpemUgZm9yIGVhY2ggYnVuZGxlLiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBmaW5hbGl6ZSBzaG91bGQgcGVyZm9ybQogICAgY2xlYW4gdXAgb2YgYW55IGZhaWxlZCBhbmQgc3VjY2Vzc2Z1bGx5IHJldHJpZWQgYnVuZGxlcy4gIE5vdGUgdGhhdCB0aGVzZQogICAgZmFpbGVkIGJ1bmRsZXMgd2lsbCBub3QgaGF2ZSB0aGVpciB3cml0ZXIgcmVzdWx0IHBhc3NlZCB0byBmaW5hbGl6ZSwgc28KICAgIGZpbmFsaXplIHNob3VsZCBiZSBjYXBhYmxlIG9mIGxvY2F0aW5nIGFueSB0ZW1wb3JhcnkvcGFydGlhbCBvdXRwdXQgd3JpdHRlbgogICAgYnkgZmFpbGVkIGJ1bmRsZXMuCgogICAgSWYgYWxsIHJldHJpZXMgb2YgYSBidW5kbGUgZmFpbHMsIHRoZSB3aG9sZSBwaXBlbGluZSB3aWxsIGZhaWwgKndpdGhvdXQqCiAgICBmaW5hbGl6ZV93cml0ZSgpIGJlaW5nIGludm9rZWQuCgogICAgQSBiZXN0IHByYWN0aWNlIGlzIHRvIG1ha2UgZmluYWxpemUgYXRvbWljLiBJZiB0aGlzIGlzIGltcG9zc2libGUgZ2l2ZW4gdGhlCiAgICBzZW1hbnRpY3Mgb2YgdGhlIHNpbmssIGZpbmFsaXplIHNob3VsZCBiZSBpZGVtcG90ZW50LCBhcyBpdCBtYXkgYmUgY2FsbGVkCiAgICBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgY2FzZSBvZiBmYWlsdXJlL3JldHJ5IG9yIGZvciByZWR1bmRhbmN5LgoKICAgIE5vdGUgdGhhdCB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mIHRoZSB3cml0ZXIgcmVzdWx0cyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZQogICAgY29uc2lzdGVudCBpZiBmaW5hbGl6ZSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCgogICAgQXJnczoKICAgICAgaW5pdF9yZXN1bHQ6IHRoZSByZXN1bHQgb2YgYGBpbml0aWFsaXplX3dyaXRlKClgYCBpbnZvY2F0aW9uLgogICAgICB3cml0ZXJfcmVzdWx0czogYW4gaXRlcmFibGUgY29udGFpbmluZyByZXN1bHRzIG9mIGBgV3JpdGVyLmNsb3NlKClgYAogICAgICAgIGludm9jYXRpb25zLiBUaGlzIHdpbGwgb25seSBjb250YWluIHJlc3VsdHMgb2Ygc3VjY2Vzc2Z1bCB3cml0ZXMsIGFuZAogICAgICAgIHdpbGwgb25seSBjb250YWluIHRoZSByZXN1bHQgb2YgYSBzaW5nbGUgc3VjY2Vzc2Z1bCB3cml0ZSBmb3IgYSBnaXZlbgogICAgICAgIGJ1bmRsZS4KICAgICAgcHJlX2ZpbmFsaXplX3Jlc3VsdDogdGhlIHJlc3VsdCBvZiBgYHByZV9maW5hbGl6ZSgpYGAgaW52b2NhdGlvbi4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIFdyaXRlcihvYmplY3QpOgogICIiIlRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCwgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgV3JpdGVzIGEgYnVuZGxlIG9mIGVsZW1lbnRzIGZyb20gYSBgYFBDb2xsZWN0aW9uYGAgdG8gYSBzaW5rLgoKICBBIFdyaXRlciAgYGBpb2Jhc2UuV3JpdGVyLndyaXRlKClgYCB3cml0ZXMgYW5kIGVsZW1lbnRzIHRvIHRoZSBzaW5rIHdoaWxlCiAgYGBpb2Jhc2UuV3JpdGVyLmNsb3NlKClgYCBpcyBjYWxsZWQgYWZ0ZXIgYWxsIGVsZW1lbnRzIGluIHRoZSBidW5kbGUgaGF2ZSBiZWVuCiAgd3JpdHRlbi4KCiAgU2VlIGBgaW9iYXNlLlNpbmtgYCBmb3IgbW9yZSBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBwcm9jZXNzIG9mCiAgd3JpdGluZyB0byBhIHNpbmsuCiAgIiIiCiAgZGVmIHdyaXRlKHNlbGYsIHZhbHVlKToKICAgICIiIldyaXRlcyBhIHZhbHVlIHRvIHRoZSBzaW5rIHVzaW5nIHRoZSBjdXJyZW50IHdyaXRlci4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGNsb3NlKHNlbGYpOgogICAgIiIiQ2xvc2VzIHRoZSBjdXJyZW50IHdyaXRlci4KCiAgICBQbGVhc2Ugc2VlIGRvY3VtZW50YXRpb24gaW4gYGBpb2Jhc2UuU2lua2BgIGZvciBhbiBleGFtcGxlLgoKICAgIFJldHVybnM6CiAgICAgIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHdyaXRlcyB0aGF0IHdlcmUgcGVyZm9ybWVkIGJ5IHRoZSBjdXJyZW50CiAgICAgIHdyaXRlci4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIFJlYWQocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IHJlYWRzIGEgUENvbGxlY3Rpb24uIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSk6CiAgICAjIHR5cGU6IChTb3VyY2VCYXNlKSAtPiBOb25lCgogICAgIiIiSW5pdGlhbGl6ZXMgYSBSZWFkIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBzb3VyY2U6IERhdGEgc291cmNlIHRvIHJlYWQgZnJvbS4KICAgICIiIgogICAgc3VwZXIoUmVhZCwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfZGVzaXJlZF9jaHVua19zaXplKHRvdGFsX3NpemUpOgogICAgaWYgdG90YWxfc2l6ZToKICAgICAgIyAxTUIgPSAxIHNoYXJkLCAxR0IgPSAzMiBzaGFyZHMsIDFUQiA9IDEwMDAgc2hhcmRzLCAxUEIgPSAzMmsgc2hhcmRzCiAgICAgIGNodW5rX3NpemUgPSBtYXgoMSA8PCAyMCwgMTAwMCAqIGludChtYXRoLnNxcnQodG90YWxfc2l6ZSkpKQogICAgZWxzZToKICAgICAgY2h1bmtfc2l6ZSA9IDY0IDw8IDIwICAjIDY0bWIKICAgIHJldHVybiBjaHVua19zaXplCgogIGRlZiBleHBhbmQoc2VsZiwgcGJlZ2luKToKICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5zb3VyY2UsIEJvdW5kZWRTb3VyY2UpOgogICAgICByZXR1cm4gcGJlZ2luIHwgX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyKHNlbGYuc291cmNlKQogICAgZWxzZToKICAgICAgIyBUcmVhdCBSZWFkIGl0c2VsZiBhcyBhIHByaW1pdGl2ZS4KICAgICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbigKICAgICAgICAgIHBiZWdpbi5waXBlbGluZSwgaXNfYm91bmRlZD1zZWxmLnNvdXJjZS5pc19ib3VuZGVkKCkpCgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIHVudXNlZF9pbnB1dHMpOgogICAgIyB0eXBlOiAoLi4uKSAtPiBjb3JlLldpbmRvd2luZwogICAgcmV0dXJuIGNvcmUuV2luZG93aW5nKHdpbmRvdy5HbG9iYWxXaW5kb3dzKCkpCgogIGRlZiBfaW5mZXJfb3V0cHV0X2NvZGVyKHNlbGYsIGlucHV0X3R5cGU9Tm9uZSwgaW5wdXRfY29kZXI9Tm9uZSk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE9wdGlvbmFsW2NvZGVycy5Db2Rlcl0KICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8gaW1wb3J0IGlvYmFzZSBhcyBkYXRhZmxvd19pbwogICAgaWYgaXNpbnN0YW5jZShzZWxmLnNvdXJjZSwgQm91bmRlZFNvdXJjZSk6CiAgICAgIHJldHVybiBzZWxmLnNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlcigpCiAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5zb3VyY2UsIGRhdGFmbG93X2lvLk5hdGl2ZVNvdXJjZSk6CiAgICAgIHJldHVybiBzZWxmLnNvdXJjZS5jb2RlcgogICAgZWxzZToKICAgICAgcmV0dXJuIE5vbmUKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7CiAgICAgICAgJ3NvdXJjZSc6IERpc3BsYXlEYXRhSXRlbShzZWxmLnNvdXJjZS5fX2NsYXNzX18sIGxhYmVsPSdSZWFkIFNvdXJjZScpLAogICAgICAgICdzb3VyY2VfZGQnOiBzZWxmLnNvdXJjZQogICAgfQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IFR1cGxlW3N0ciwgYmVhbV9ydW5uZXJfYXBpX3BiMi5SZWFkUGF5bG9hZF0KICAgIHJldHVybiAoCiAgICAgICAgY29tbW9uX3VybnMuZGVwcmVjYXRlZF9wcmltaXRpdmVzLlJFQUQudXJuLAogICAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuUmVhZFBheWxvYWQoCiAgICAgICAgICAgIHNvdXJjZT1zZWxmLnNvdXJjZS50b19ydW5uZXJfYXBpKGNvbnRleHQpLAogICAgICAgICAgICBpc19ib3VuZGVkPWJlYW1fcnVubmVyX2FwaV9wYjIuSXNCb3VuZGVkLkJPVU5ERUQKICAgICAgICAgICAgaWYgc2VsZi5zb3VyY2UuaXNfYm91bmRlZCgpIGVsc2UKICAgICAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5Jc0JvdW5kZWQuVU5CT1VOREVEKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wdHJhbnNmb3JtLCBwYXJhbWV0ZXIsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoYmVhbV9ydW5uZXJfYXBpX3BiMi5SZWFkUGF5bG9hZCwgUGlwZWxpbmVDb250ZXh0KSAtPiBSZWFkCiAgICByZXR1cm4gUmVhZChTb3VyY2VCYXNlLmZyb21fcnVubmVyX2FwaShwYXJhbWV0ZXIuc291cmNlLCBjb250ZXh0KSkKCgpwdHJhbnNmb3JtLlBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgY29tbW9uX3VybnMuZGVwcmVjYXRlZF9wcmltaXRpdmVzLlJFQUQudXJuLAogICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5SZWFkUGF5bG9hZCwKICAgIFJlYWQuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcikKCgpjbGFzcyBXcml0ZShwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgdGhhdCB3cml0ZXMgdG8gYSBzaW5rLgoKICBBIHNpbmsgc2hvdWxkIGluaGVyaXQgYGBpb2Jhc2UuU2lua2BgLiBTdWNoIGltcGxlbWVudGF0aW9ucyBhcmUKICBoYW5kbGVkIHVzaW5nIGEgY29tcG9zaXRlIHRyYW5zZm9ybSB0aGF0IGNvbnNpc3RzIG9mIHRocmVlIGBgUGFyRG9gYHMgLQogICgxKSBhIGBgUGFyRG9gYCBwZXJmb3JtaW5nIGEgZ2xvYmFsIGluaXRpYWxpemF0aW9uICgyKSBhIGBgUGFyRG9gYCBwZXJmb3JtaW5nCiAgYSBwYXJhbGxlbCB3cml0ZSBhbmQgKDMpIGEgYGBQYXJEb2BgIHBlcmZvcm1pbmcgYSBnbG9iYWwgZmluYWxpemF0aW9uLiBJbiB0aGUKICBjYXNlIG9mIGFuIGVtcHR5IGBgUENvbGxlY3Rpb25gYCwgb25seSB0aGUgZ2xvYmFsIGluaXRpYWxpemF0aW9uIGFuZAogIGZpbmFsaXphdGlvbiB3aWxsIGJlIHBlcmZvcm1lZC4gQ3VycmVudGx5IG9ubHkgYmF0Y2ggd29ya2Zsb3dzIHN1cHBvcnQgY3VzdG9tCiAgc2lua3MuCgogIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgcGNvbGxlY3Rpb24gfCBiZWFtLmlvLldyaXRlKE15U2luaygpKQoKICBUaGlzIHJldHVybnMgYSBgYHB2YWx1ZS5QVmFsdWVgYCBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBlbmQgb2YgdGhlCiAgUGlwZWxpbmUuCgogIFRoZSBzaW5rIGFyZ3VtZW50IG1heSBhbHNvIGJlIGEgZnVsbCBQVHJhbnNmb3JtLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUKICBhcHBsaWVkIGRpcmVjdGx5LiAgVGhpcyBhbGxvd3MgY29tcG9zaXRlIHNpbmstbGlrZSB0cmFuc2Zvcm1zIChlLmcuIGEgc2luawogIHdpdGggc29tZSBwcmUtcHJvY2Vzc2luZyBEb0ZucykgdG8gYmUgdXNlZCB0aGUgc2FtZSBhcyBhbGwgb3RoZXIgc2lua3MuCgogIFRoaXMgdHJhbnNmb3JtIGFsc28gc3VwcG9ydHMgc2lua3MgdGhhdCBpbmhlcml0IGBgaW9iYXNlLk5hdGl2ZVNpbmtgYC4gVGhlc2UKICBhcmUgc2lua3MgdGhhdCBhcmUgaW1wbGVtZW50ZWQgbmF0aXZlbHkgYnkgdGhlIERhdGFmbG93IHNlcnZpY2UgYW5kIGhlbmNlCiAgc2hvdWxkIG5vdCBiZSB1cGRhdGVkIGJ5IHVzZXJzLiBUaGVzZSBzaW5rcyBhcmUgcHJvY2Vzc2VkIHVzaW5nIGEgRGF0YWZsb3cKICBuYXRpdmUgd3JpdGUgdHJhbnNmb3JtLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rKToKICAgICIiIkluaXRpYWxpemVzIGEgV3JpdGUgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHNpbms6IERhdGEgc2luayB0byB3cml0ZSB0by4KICAgICIiIgogICAgc3VwZXIoV3JpdGUsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuc2luayA9IHNpbmsKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NpbmsnOiBzZWxmLnNpbmsuX19jbGFzc19fLCAnc2lua19kZCc6IHNlbGYuc2lua30KCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvIGltcG9ydCBpb2Jhc2UgYXMgZGF0YWZsb3dfaW8KICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5zaW5rLCBkYXRhZmxvd19pby5OYXRpdmVTaW5rKToKICAgICAgIyBBIG5hdGl2ZSBzaW5rCiAgICAgIHJldHVybiBwY29sbCB8ICdOYXRpdmVXcml0ZScgPj4gZGF0YWZsb3dfaW8uX05hdGl2ZVdyaXRlKHNlbGYuc2luaykKICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLnNpbmssIFNpbmspOgogICAgICAjIEEgY3VzdG9tIHNpbmsKICAgICAgcmV0dXJuIHBjb2xsIHwgV3JpdGVJbXBsKHNlbGYuc2luaykKICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLnNpbmssIHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAgICMgVGhpcyBhbGxvd3MgImNvbXBvc2l0ZSIgc2lua3MgdG8gYmUgdXNlZCBsaWtlIG5vbi1jb21wb3NpdGUgb25lcy4KICAgICAgcmV0dXJuIHBjb2xsIHwgc2VsZi5zaW5rCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0Egc2luayBtdXN0IGluaGVyaXQgaW9iYXNlLlNpbmssIGlvYmFzZS5OYXRpdmVTaW5rLCAnCiAgICAgICAgICAnb3IgYmUgYSBQVHJhbnNmb3JtLiBSZWNlaXZlZCA6ICVyJyAlIHNlbGYuc2luaykKCgpjbGFzcyBXcml0ZUltcGwocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAiIiJJbXBsZW1lbnRzIHRoZSB3cml0aW5nIG9mIGN1c3RvbSBzaW5rcy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgc2luayk6CiAgICAjIHR5cGU6IChTaW5rKSAtPiBOb25lCiAgICBzdXBlcihXcml0ZUltcGwsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuc2luayA9IHNpbmsKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBkb19vbmNlID0gcGNvbGwucGlwZWxpbmUgfCAnRG9PbmNlJyA+PiBjb3JlLkNyZWF0ZShbTm9uZV0pCiAgICBpbml0X3Jlc3VsdF9jb2xsID0gZG9fb25jZSB8ICdJbml0aWFsaXplV3JpdGUnID4+IGNvcmUuTWFwKAogICAgICAgIGxhbWJkYSBfLCBzaW5rOiBzaW5rLmluaXRpYWxpemVfd3JpdGUoKSwgc2VsZi5zaW5rKQogICAgaWYgZ2V0YXR0cihzZWxmLnNpbmssICdudW1fc2hhcmRzJywgMCk6CiAgICAgIG1pbl9zaGFyZHMgPSBzZWxmLnNpbmsubnVtX3NoYXJkcwogICAgICBpZiBtaW5fc2hhcmRzID09IDE6CiAgICAgICAga2V5ZWRfcGNvbGwgPSBwY29sbCB8IGNvcmUuTWFwKGxhbWJkYSB4OiAoTm9uZSwgeCkpCiAgICAgIGVsc2U6CiAgICAgICAga2V5ZWRfcGNvbGwgPSBwY29sbCB8IGNvcmUuUGFyRG8oX1JvdW5kUm9iaW5LZXlGbihtaW5fc2hhcmRzKSkKICAgICAgd3JpdGVfcmVzdWx0X2NvbGwgPSAoCiAgICAgICAgICBrZXllZF9wY29sbAogICAgICAgICAgfCBjb3JlLldpbmRvd0ludG8od2luZG93Lkdsb2JhbFdpbmRvd3MoKSkKICAgICAgICAgIHwgY29yZS5Hcm91cEJ5S2V5KCkKICAgICAgICAgIHwgJ1dyaXRlQnVuZGxlcycgPj4gY29yZS5QYXJEbygKICAgICAgICAgICAgICBfV3JpdGVLZXllZEJ1bmRsZURvRm4oc2VsZi5zaW5rKSwgQXNTaW5nbGV0b24oaW5pdF9yZXN1bHRfY29sbCkpKQogICAgZWxzZToKICAgICAgbWluX3NoYXJkcyA9IDEKICAgICAgd3JpdGVfcmVzdWx0X2NvbGwgPSAoCiAgICAgICAgICBwY29sbAogICAgICAgICAgfCAnV3JpdGVCdW5kbGVzJyA+PiBjb3JlLlBhckRvKAogICAgICAgICAgICAgIF9Xcml0ZUJ1bmRsZURvRm4oc2VsZi5zaW5rKSwgQXNTaW5nbGV0b24oaW5pdF9yZXN1bHRfY29sbCkpCiAgICAgICAgICB8ICdQYWlyJyA+PiBjb3JlLk1hcChsYW1iZGEgeDogKE5vbmUsIHgpKQogICAgICAgICAgfCBjb3JlLldpbmRvd0ludG8od2luZG93Lkdsb2JhbFdpbmRvd3MoKSkKICAgICAgICAgIHwgY29yZS5Hcm91cEJ5S2V5KCkKICAgICAgICAgIHwgJ0V4dHJhY3QnID4+IGNvcmUuRmxhdE1hcChsYW1iZGEgeDogeFsxXSkpCiAgICAjIFByZUZpbmFsaXplIHNob3VsZCBydW4gYmVmb3JlIEZpbmFsaXplV3JpdGUsIGFuZCB0aGUgdHdvIHNob3VsZCBub3QgYmUKICAgICMgZnVzZWQuCiAgICBwcmVfZmluYWxpemVfY29sbCA9IGRvX29uY2UgfCAnUHJlRmluYWxpemUnID4+IGNvcmUuRmxhdE1hcCgKICAgICAgICBfcHJlX2ZpbmFsaXplLAogICAgICAgIHNlbGYuc2luaywKICAgICAgICBBc1NpbmdsZXRvbihpbml0X3Jlc3VsdF9jb2xsKSwKICAgICAgICBBc0l0ZXIod3JpdGVfcmVzdWx0X2NvbGwpKQogICAgcmV0dXJuIGRvX29uY2UgfCAnRmluYWxpemVXcml0ZScgPj4gY29yZS5GbGF0TWFwKAogICAgICAgIF9maW5hbGl6ZV93cml0ZSwKICAgICAgICBzZWxmLnNpbmssCiAgICAgICAgQXNTaW5nbGV0b24oaW5pdF9yZXN1bHRfY29sbCksCiAgICAgICAgQXNJdGVyKHdyaXRlX3Jlc3VsdF9jb2xsKSwKICAgICAgICBtaW5fc2hhcmRzLAogICAgICAgIEFzU2luZ2xldG9uKHByZV9maW5hbGl6ZV9jb2xsKSkKCgpjbGFzcyBfV3JpdGVCdW5kbGVEb0ZuKGNvcmUuRG9Gbik6CiAgIiIiQSBEb0ZuIGZvciB3cml0aW5nIGVsZW1lbnRzIHRvIGFuIGlvYmFzZS5Xcml0ZXIuCiAgT3BlbnMgYSB3cml0ZXIgYXQgdGhlIGZpcnN0IGVsZW1lbnQgYW5kIGNsb3NlcyB0aGUgd3JpdGVyIGF0IGZpbmlzaF9idW5kbGUoKS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc2luayk6CiAgICBzZWxmLnNpbmsgPSBzaW5rCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydzaW5rX2RkJzogc2VsZi5zaW5rfQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi53cml0ZXIgPSBOb25lCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIGluaXRfcmVzdWx0KToKICAgIGlmIHNlbGYud3JpdGVyIGlzIE5vbmU6CiAgICAgICMgV2UgaWdub3JlIFVVSUQgY29sbGlzaW9ucyBoZXJlIHNpbmNlIHRoZXkgYXJlIGV4dHJlbWVseSByYXJlLgogICAgICBzZWxmLndyaXRlciA9IHNlbGYuc2luay5vcGVuX3dyaXRlcihpbml0X3Jlc3VsdCwgc3RyKHV1aWQudXVpZDQoKSkpCiAgICBzZWxmLndyaXRlci53cml0ZShlbGVtZW50KQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIGlmIHNlbGYud3JpdGVyIGlzIG5vdCBOb25lOgogICAgICB5aWVsZCBXaW5kb3dlZFZhbHVlKAogICAgICAgICAgc2VsZi53cml0ZXIuY2xvc2UoKSwKICAgICAgICAgIHdpbmRvdy5HbG9iYWxXaW5kb3coKS5tYXhfdGltZXN0YW1wKCksIFt3aW5kb3cuR2xvYmFsV2luZG93KCldKQoKCmNsYXNzIF9Xcml0ZUtleWVkQnVuZGxlRG9Gbihjb3JlLkRvRm4pOgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rKToKICAgIHNlbGYuc2luayA9IHNpbmsKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7J3NpbmtfZGQnOiBzZWxmLnNpbmt9CgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIGluaXRfcmVzdWx0KToKICAgIGJ1bmRsZSA9IGVsZW1lbnQKICAgIHdyaXRlciA9IHNlbGYuc2luay5vcGVuX3dyaXRlcihpbml0X3Jlc3VsdCwgc3RyKHV1aWQudXVpZDQoKSkpCiAgICBmb3IgZSBpbiBidW5kbGVbMV06ICAjIHZhbHVlcwogICAgICB3cml0ZXIud3JpdGUoZSkKICAgIHJldHVybiBbd2luZG93LlRpbWVzdGFtcGVkVmFsdWUod3JpdGVyLmNsb3NlKCksIHRpbWVzdGFtcC5NQVhfVElNRVNUQU1QKV0KCgpkZWYgX3ByZV9maW5hbGl6ZSh1bnVzZWRfZWxlbWVudCwgc2luaywgaW5pdF9yZXN1bHQsIHdyaXRlX3Jlc3VsdHMpOgogIHJldHVybiBzaW5rLnByZV9maW5hbGl6ZShpbml0X3Jlc3VsdCwgd3JpdGVfcmVzdWx0cykKCgpkZWYgX2ZpbmFsaXplX3dyaXRlKAogICAgdW51c2VkX2VsZW1lbnQsCiAgICBzaW5rLAogICAgaW5pdF9yZXN1bHQsCiAgICB3cml0ZV9yZXN1bHRzLAogICAgbWluX3NoYXJkcywKICAgIHByZV9maW5hbGl6ZV9yZXN1bHRzKToKICB3cml0ZV9yZXN1bHRzID0gbGlzdCh3cml0ZV9yZXN1bHRzKQogIGV4dHJhX3NoYXJkcyA9IFtdCiAgaWYgbGVuKHdyaXRlX3Jlc3VsdHMpIDwgbWluX3NoYXJkczoKICAgIF9MT0dHRVIuZGVidWcoCiAgICAgICAgJ0NyZWF0aW5nICVzIGVtcHR5IHNoYXJkKHMpLicsIG1pbl9zaGFyZHMgLSBsZW4od3JpdGVfcmVzdWx0cykpCiAgICBmb3IgXyBpbiByYW5nZShtaW5fc2hhcmRzIC0gbGVuKHdyaXRlX3Jlc3VsdHMpKToKICAgICAgd3JpdGVyID0gc2luay5vcGVuX3dyaXRlcihpbml0X3Jlc3VsdCwgc3RyKHV1aWQudXVpZDQoKSkpCiAgICAgIGV4dHJhX3NoYXJkcy5hcHBlbmQod3JpdGVyLmNsb3NlKCkpCiAgb3V0cHV0cyA9IHNpbmsuZmluYWxpemVfd3JpdGUoCiAgICAgIGluaXRfcmVzdWx0LCB3cml0ZV9yZXN1bHRzICsgZXh0cmFfc2hhcmRzLCBwcmVfZmluYWxpemVfcmVzdWx0cykKICBpZiBvdXRwdXRzOgogICAgcmV0dXJuICgKICAgICAgICB3aW5kb3cuVGltZXN0YW1wZWRWYWx1ZSh2LCB0aW1lc3RhbXAuTUFYX1RJTUVTVEFNUCkgZm9yIHYgaW4gb3V0cHV0cykKCgpjbGFzcyBfUm91bmRSb2JpbktleUZuKGNvcmUuRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvdW50KToKICAgICMgdHlwZTogKGludCkgLT4gTm9uZQogICAgc2VsZi5jb3VudCA9IGNvdW50CgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLmNvdW50ZXIgPSByYW5kb20ucmFuZGludCgwLCBzZWxmLmNvdW50IC0gMSkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLmNvdW50ZXIgKz0gMQogICAgaWYgc2VsZi5jb3VudGVyID49IHNlbGYuY291bnQ6CiAgICAgIHNlbGYuY291bnRlciAtPSBzZWxmLmNvdW50CiAgICB5aWVsZCBzZWxmLmNvdW50ZXIsIGVsZW1lbnQKCgpjbGFzcyBSZXN0cmljdGlvblRyYWNrZXIob2JqZWN0KToKICAiIiJNYW5hZ2VzIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGEgcmVzdHJpY3Rpb24uCgogIEtlZXBzIHRyYWNrIG9mIHRoZSByZXN0cmljdGlvbnMgY2xhaW1lZCBwYXJ0IGZvciBhIFNwbGl0dGFibGUgRG9Gbi4KCiAgVGhlIHJlc3RyaWN0aW9uIG1heSBiZSBtb2RpZmllZCBieSBkaWZmZXJlbnQgdGhyZWFkcywgaG93ZXZlciB0aGUgc3lzdGVtIHdpbGwKICBlbnN1cmUgc3VmZmljaWVudCBsb2NraW5nIHN1Y2ggdGhhdCBubyBtZXRob2RzIG9uIHRoZSByZXN0cmljdGlvbiB0cmFja2VyCiAgd2lsbCBiZSBjYWxsZWQgY29uY3VycmVudGx5LgoKICBTZWUgZm9sbG93aW5nIGRvY3VtZW50cyBmb3IgbW9yZSBkZXRhaWxzLgogICogaHR0cHM6Ly9zLmFwYWNoZS5vcmcvc3BsaXR0YWJsZS1kby1mbgogICogaHR0cHM6Ly9zLmFwYWNoZS5vcmcvc3BsaXR0YWJsZS1kby1mbi1weXRob24tc2RrCgogIEV4cGVyaW1lbnRhbDsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKICBkZWYgY3VycmVudF9yZXN0cmljdGlvbihzZWxmKToKICAgICIiIlJldHVybnMgdGhlIGN1cnJlbnQgcmVzdHJpY3Rpb24uCgogICAgUmV0dXJucyBhIHJlc3RyaWN0aW9uIGFjY3VyYXRlbHkgZGVzY3JpYmluZyB0aGUgZnVsbCByYW5nZSBvZiB3b3JrIHRoZQogICAgY3VycmVudCBgYERvRm4ucHJvY2VzcygpYGAgY2FsbCB3aWxsIGRvLCBpbmNsdWRpbmcgYWxyZWFkeSBjb21wbGV0ZWQgd29yay4KCiAgICBUaGUgY3VycmVudCByZXN0cmljdGlvbiByZXR1cm5lZCBieSBtZXRob2QgbWF5IGJlIHVwZGF0ZWQgZHluYW1pY2FsbHkgZHVlCiAgICB0byBkdWUgdG8gY29uY3VycmVudCBpbnZvY2F0aW9uIG9mIG90aGVyIG1ldGhvZHMgb2YgdGhlCiAgICBgYFJlc3RyaWN0aW9uVHJhY2tlcmBgLCBGb3IgZXhhbXBsZSwgYGBzcGxpdCgpYGAuCgogICAgVGhpcyBBUEkgaXMgcmVxdWlyZWQgdG8gYmUgaW1wbGVtZW50ZWQuCgogICAgUmV0dXJuczogYSByZXN0cmljdGlvbiBvYmplY3QuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGN1cnJlbnRfcHJvZ3Jlc3Moc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IFJlc3RyaWN0aW9uUHJvZ3Jlc3MKCiAgICAiIiJSZXR1cm5zIGEgUmVzdHJpY3Rpb25Qcm9ncmVzcyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHByb2dyZXNzLgoKICAgIFRoaXMgQVBJIGlzIHJlY29tbWVuZGVkIHRvIGJlIGltcGxlbWVudGVkLiBUaGUgcnVubmVyIGNhbiBkbyBhIGJldHRlciBqb2IKICAgIGF0IHBhcmFsbGVsIHByb2Nlc3Npbmcgd2l0aCBiZXR0ZXIgcHJvZ3Jlc3Mgc2lnbmFscy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY2hlY2tfZG9uZShzZWxmKToKICAgICIiIkNoZWNrcyB3aGV0aGVyIHRoZSByZXN0cmljdGlvbiBoYXMgYmVlbiBmdWxseSBwcm9jZXNzZWQuCgogICAgQ2FsbGVkIGJ5IHRoZSBydW5uZXIgYWZ0ZXIgaXRlcmF0b3IgcmV0dXJuZWQgYnkgYGBEb0ZuLnByb2Nlc3MoKWBgIGhhcyBiZWVuCiAgICBmdWxseSByZWFkLgoKICAgIFRoaXMgbWV0aG9kIG11c3QgcmFpc2UgYSBgVmFsdWVFcnJvcmAgaWYgdGhlcmUgaXMgc3RpbGwgYW55IHVuY2xhaW1lZCB3b3JrCiAgICByZW1haW5pbmcgaW4gdGhlIHJlc3RyaWN0aW9uIHdoZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZC4gRXhjZXB0aW9uIHJhaXNlZAogICAgbXVzdCBoYXZlIGFuIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2UuCgogICAgVGhpcyBBUEkgaXMgcmVxdWlyZWQgdG8gYmUgaW1wbGVtZW50ZWQgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIG5vIGRhdGEgbG9zcwogICAgZHVyaW5nIFNESyBwcm9jZXNzaW5nLgoKICAgIFJldHVybnM6IGBgVHJ1ZWBgIGlmIGN1cnJlbnQgcmVzdHJpY3Rpb24gaGFzIGJlZW4gZnVsbHkgcHJvY2Vzc2VkLgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBpZiB0aGVyZSBpcyBzdGlsbCBhbnkgdW5jbGFpbWVkIHdvcmsgcmVtYWluaW5nLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiB0cnlfc3BsaXQoc2VsZiwgZnJhY3Rpb25fb2ZfcmVtYWluZGVyKToKICAgICIiIlNwbGl0cyBjdXJyZW50IHJlc3RyaWN0aW9uIGJhc2VkIG9uIGZyYWN0aW9uX29mX3JlbWFpbmRlci4KCiAgICBJZiBzcGxpdHRpbmcgdGhlIGN1cnJlbnQgcmVzdHJpY3Rpb24gaXMgcG9zc2libGUsIHRoZSBjdXJyZW50IHJlc3RyaWN0aW9uIGlzCiAgICBzcGxpdCBpbnRvIGEgcHJpbWFyeSBhbmQgcmVzaWR1YWwgcmVzdHJpY3Rpb24gcGFpci4gVGhpcyBpbnZvY2F0aW9uIHVwZGF0ZXMKICAgIHRoZSBgYGN1cnJlbnRfcmVzdHJpY3Rpb24oKWBgIHRvIGJlIHRoZSBwcmltYXJ5IHJlc3RyaWN0aW9uIGVmZmVjdGl2ZWx5CiAgICBoYXZpbmcgdGhlIGN1cnJlbnQgYGBEb0ZuLnByb2Nlc3MoKWBgIGV4ZWN1dGlvbiByZXNwb25zaWJsZSBmb3IgcGVyZm9ybWluZwogICAgdGhlIHdvcmsgdGhhdCB0aGUgcHJpbWFyeSByZXN0cmljdGlvbiByZXByZXNlbnRzLiBUaGUgcmVzaWR1YWwgcmVzdHJpY3Rpb24KICAgIHdpbGwgYmUgZXhlY3V0ZWQgaW4gYSBzZXBhcmF0ZSBgYERvRm4ucHJvY2VzcygpYGAgaW52b2NhdGlvbiAobGlrZWx5IGluIGEKICAgIGRpZmZlcmVudCBwcm9jZXNzKS4gVGhlIHdvcmsgcGVyZm9ybWVkIGJ5IGV4ZWN1dGluZyB0aGUgcHJpbWFyeSBhbmQgcmVzaWR1YWwKICAgIHJlc3RyaWN0aW9ucyBhcyBzZXBhcmF0ZSBgYERvRm4ucHJvY2VzcygpYGAgaW52b2NhdGlvbnMgTVVTVCBiZSBlcXVpdmFsZW50CiAgICB0byB0aGUgd29yayBwZXJmb3JtZWQgYXMgaWYgdGhpcyBzcGxpdCBuZXZlciBvY2N1cnJlZC4KCiAgICBUaGUgYGBmcmFjdGlvbl9vZl9yZW1haW5kZXJgYCBzaG91bGQgYmUgdXNlZCBpbiBhIGJlc3QgZWZmb3J0IG1hbm5lciB0bwogICAgY2hvb3NlIGEgcHJpbWFyeSBhbmQgcmVzaWR1YWwgcmVzdHJpY3Rpb24gYmFzZWQgdXBvbiB0aGUgZnJhY3Rpb24gb2YgdGhlCiAgICByZW1haW5pbmcgd29yayB0aGF0IHRoZSBjdXJyZW50IGBgRG9Gbi5wcm9jZXNzKClgYCBpbnZvY2F0aW9uIGlzIHJlc3BvbnNpYmxlCiAgICBmb3IuIEZvciBleGFtcGxlLCBpZiBhIGBgRG9Gbi5wcm9jZXNzKClgYCB3YXMgcmVhZGluZyBhIGZpbGUgd2l0aCBhCiAgICByZXN0cmljdGlvbiByZXByZXNlbnRpbmcgdGhlIG9mZnNldCByYW5nZSBbMTAwLCAyMDApIGFuZCBoYXMgcHJvY2Vzc2VkIHVwIHRvCiAgICBvZmZzZXQgMTMwIHdpdGggYSBmcmFjdGlvbl9vZl9yZW1haW5kZXIgb2YgMC43LCB0aGUgcHJpbWFyeSBhbmQgcmVzaWR1YWwKICAgIHJlc3RyaWN0aW9ucyByZXR1cm5lZCB3b3VsZCBiZSBbMTAwLCAxNzkpLCBbMTc5LCAyMDApIChub3RlOiBjdXJyZW50X29mZnNldAogICAgKyBmcmFjdGlvbl9vZl9yZW1haW5kZXIgKiByZW1haW5pbmdfd29yayA9IDEzMCArIDAuNyAqIDcwID0gMTc5KS4KCiAgICBgYGZyYWN0aW9uX29mX3JlbWFpbmRlcmBgID0gMCBtZWFucyBhIGNoZWNrcG9pbnQgaXMgcmVxdWlyZWQuCgogICAgVGhlIEFQSSBpcyByZWNvbW1lbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBmb3IgYmF0Y2ggcGlwZWxpbmUgZ2l2ZW4gdGhhdCBpdCBpcwogICAgdmVyeSBpbXBvcnRhbnQgZm9yIHBpcGVsaW5lIHNjYWxpbmcgYW5kIGVuZCB0byBlbmQgcGlwZWxpbmUgZXhlY3V0aW9uLgoKICAgIFRoZSBBUEkgaXMgcmVxdWlyZWQgdG8gYmUgaW1wbGVtZW50ZWQgZm9yIGEgc3RyZWFtaW5nIHBpcGVsaW5lLgoKICAgIEFyZ3M6CiAgICAgIGZyYWN0aW9uX29mX3JlbWFpbmRlcjogQSBoaW50IGFzIHRvIHRoZSBmcmFjdGlvbiBvZiB3b3JrIHRoZSBwcmltYXJ5CiAgICAgICAgcmVzdHJpY3Rpb24gc2hvdWxkIHJlcHJlc2VudCBiYXNlZCB1cG9uIHRoZSBjdXJyZW50IGtub3duIHJlbWFpbmluZwogICAgICAgIGFtb3VudCBvZiB3b3JrLgoKICAgIFJldHVybnM6CiAgICAgIChwcmltYXJ5X3Jlc3RyaWN0aW9uLCByZXNpZHVhbF9yZXN0cmljdGlvbikgaWYgYSBzcGxpdCB3YXMgcG9zc2libGUsCiAgICAgIG90aGVyd2lzZSByZXR1cm5zIGBgTm9uZWBgLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcG9zaXRpb24pOgogICAgIiIiQXR0ZW1wdHMgdG8gY2xhaW0gdGhlIGJsb2NrIG9mIHdvcmsgaW4gdGhlIGN1cnJlbnQgcmVzdHJpY3Rpb24KICAgIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIHBvc2l0aW9uLgoKICAgIElmIHRoaXMgc3VjY2VlZHMsIHRoZSBEb0ZuIE1VU1QgZXhlY3V0ZSB0aGUgZW50aXJlIGJsb2NrIG9mIHdvcmsuIElmIGl0CiAgICBmYWlscywgdGhlIGBgRG9Gbi5wcm9jZXNzKClgYCBNVVNUIHJldHVybiBgYE5vbmVgYCB3aXRob3V0IHBlcmZvcm1pbmcgYW55CiAgICBhZGRpdGlvbmFsIHdvcmsgb3IgZW1pdHRpbmcgb3V0cHV0IChub3RlIHRoYXQgZW1pdHRpbmcgb3V0cHV0IG9yIHBlcmZvcm1pbmcKICAgIHdvcmsgZnJvbSBgYERvRm4ucHJvY2VzcygpYGAgaXMgYWxzbyBub3QgYWxsb3dlZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgb2YKICAgIHRoaXMgbWV0aG9kKS4KCiAgICBUaGUgQVBJIGlzIHJlcXVpcmVkIHRvIGJlIGltcGxlbWVudGVkLgoKICAgIEFyZ3M6CiAgICAgIHBvc2l0aW9uOiBjdXJyZW50IHBvc2l0aW9uIHRoYXQgd2FudHMgdG8gYmUgY2xhaW1lZC4KCiAgICBSZXR1cm5zOiBgYFRydWVgYCBpZiB0aGUgcG9zaXRpb24gY2FuIGJlIGNsYWltZWQgYXMgY3VycmVudF9wb3NpdGlvbi4KICAgIE90aGVyd2lzZSwgcmV0dXJucyBgYEZhbHNlYGAuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBXYXRlcm1hcmtFc3RpbWF0b3Iob2JqZWN0KToKICAiIiJBIFdhdGVybWFya0VzdGltYXRvciB3aGljaCBpcyB1c2VkIGZvciBlc3RpbWF0aW5nIG91dHB1dF93YXRlcm1hcmsgYmFzZWQgb24KICB0aGUgdGltZXN0YW1wIG9mIG91dHB1dCByZWNvcmRzIG9yIG1hbnVhbCBtb2RpZmljYXRpb25zLgoKICBUaGUgYmFzZSBjbGFzcyBwcm92aWRlcyBjb21tb24gQVBJcyB0aGF0IGFyZSBjYWxsZWQgYnkgdGhlIGZyYW1ld29yaywgd2hpY2gKICBhcmUgYWxzbyBhY2Nlc3NpYmxlIGluc2lkZSBhIERvRm4ucHJvY2VzcygpIGJvZHkuIERlcml2ZWQgd2F0ZXJtYXJrIGVzdGltYXRvcgogIHNob3VsZCBpbXBsZW1lbnQgYWxsIEFQSXMgbGlzdGVkIGJlbG93LiBBZGRpdGlvbmFsIG1ldGhvZHMgY2FuIGJlIGltcGxlbWVudGVkCiAgYW5kIHdpbGwgYmUgYXZhaWxhYmxlIHdoZW4gaW52b2tlZCB3aXRoaW4gYSBEb0ZuLgoKICBJbnRlcm5hbCBzdGF0ZSBtdXN0IG5vdCBiZSB1cGRhdGVkIGFzeW5jaHJvbm91c2x5LgogICIiIgogIGRlZiBnZXRfZXN0aW1hdG9yX3N0YXRlKHNlbGYpOgogICAgIiIiR2V0IGN1cnJlbnQgc3RhdGUgb2YgdGhlIFdhdGVybWFya0VzdGltYXRvciBpbnN0YW5jZSwgd2hpY2ggY2FuIGJlIHVzZWQKICAgIHRvIHJlY3JlYXRlIHRoZSBXYXRlcm1hcmtFc3RpbWF0b3Igd2hlbiBwcm9jZXNzaW5nIHRoZSByZXN0cmljdGlvbi4gU2VlCiAgICBXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlci5jcmVhdGVfd2F0ZXJtYXJrX2VzdGltYXRvci4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQoKICBkZWYgY3VycmVudF93YXRlcm1hcmsoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IHRpbWVzdGFtcC5UaW1lc3RhbXAKCiAgICAiIiJSZXR1cm4gZXN0aW1hdGVkIG91dHB1dF93YXRlcm1hcmsuIFRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4KICAgIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB3YXRlcm1hcmtzLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQoKICBkZWYgb2JzZXJ2ZV90aW1lc3RhbXAoc2VsZiwgdGltZXN0YW1wKToKICAgICMgdHlwZTogKHRpbWVzdGFtcC5UaW1lc3RhbXApIC0+IE5vbmUKCiAgICAiIiJVcGRhdGUgdHJhY2tpbmcgIHdhdGVybWFyayB3aXRoIGxhdGVzdCBvdXRwdXQgdGltZXN0YW1wLgoKICAgIEFyZ3M6CiAgICAgIHRpbWVzdGFtcDogdGhlIGB0aW1lc3RhbXAuVGltZXN0YW1wYCBvZiBjdXJyZW50IG91dHB1dCBlbGVtZW50LgoKICAgIFRoaXMgaXMgY2FsbGVkIHdpdGggdGhlIHRpbWVzdGFtcCBvZiBldmVyeSBlbGVtZW50IG91dHB1dCBmcm9tIHRoZSBEb0ZuLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHR5cGUoc2VsZikpCgoKY2xhc3MgUmVzdHJpY3Rpb25Qcm9ncmVzcyhvYmplY3QpOgogICIiIlVzZWQgdG8gcmVjb3JkIHRoZSBwcm9ncmVzcyBvZiBhIHJlc3RyaWN0aW9uLgoKICBFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICMgT25seSBhY2NlcHQga2V5d29yZCBhcmd1bWVudHMuCiAgICBzZWxmLl9mcmFjdGlvbiA9IGt3YXJncy5wb3AoJ2ZyYWN0aW9uJywgTm9uZSkKICAgIHNlbGYuX2NvbXBsZXRlZCA9IGt3YXJncy5wb3AoJ2NvbXBsZXRlZCcsIE5vbmUpCiAgICBzZWxmLl9yZW1haW5pbmcgPSBrd2FyZ3MucG9wKCdyZW1haW5pbmcnLCBOb25lKQogICAgYXNzZXJ0IG5vdCBrd2FyZ3MKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdSZXN0cmljdGlvblByb2dyZXNzKGZyYWN0aW9uPSVzLCBjb21wbGV0ZWQ9JXMsIHJlbWFpbmluZz0lcyknICUgKAogICAgICAgIHNlbGYuX2ZyYWN0aW9uLCBzZWxmLl9jb21wbGV0ZWQsIHNlbGYuX3JlbWFpbmluZykKCiAgQHByb3BlcnR5CiAgZGVmIGNvbXBsZXRlZF93b3JrKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBmbG9hdAogICAgaWYgc2VsZi5fY29tcGxldGVkOgogICAgICByZXR1cm4gc2VsZi5fY29tcGxldGVkCiAgICBlbGlmIHNlbGYuX3JlbWFpbmluZyBhbmQgc2VsZi5fZnJhY3Rpb246CiAgICAgIHJldHVybiBzZWxmLl9yZW1haW5pbmcgKiBzZWxmLl9mcmFjdGlvbiAvICgxIC0gc2VsZi5fZnJhY3Rpb24pCgogIEBwcm9wZXJ0eQogIGRlZiByZW1haW5pbmdfd29yayhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gZmxvYXQKICAgIGlmIHNlbGYuX3JlbWFpbmluZzoKICAgICAgcmV0dXJuIHNlbGYuX3JlbWFpbmluZwogICAgZWxpZiBzZWxmLl9jb21wbGV0ZWQ6CiAgICAgIHJldHVybiBzZWxmLl9jb21wbGV0ZWQgKiAoMSAtIHNlbGYuX2ZyYWN0aW9uKSAvIHNlbGYuX2ZyYWN0aW9uCgogIEBwcm9wZXJ0eQogIGRlZiB0b3RhbF93b3JrKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBmbG9hdAogICAgcmV0dXJuIHNlbGYuY29tcGxldGVkX3dvcmsgKyBzZWxmLnJlbWFpbmluZ193b3JrCgogIEBwcm9wZXJ0eQogIGRlZiBmcmFjdGlvbl9jb21wbGV0ZWQoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGZsb2F0CiAgICBpZiBzZWxmLl9mcmFjdGlvbiBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIHNlbGYuX2ZyYWN0aW9uCiAgICBlbHNlOgogICAgICByZXR1cm4gZmxvYXQoc2VsZi5fY29tcGxldGVkKSAvIHNlbGYudG90YWxfd29yawoKICBAcHJvcGVydHkKICBkZWYgZnJhY3Rpb25fcmVtYWluaW5nKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBmbG9hdAogICAgaWYgc2VsZi5fZnJhY3Rpb24gaXMgbm90IE5vbmU6CiAgICAgIHJldHVybiAxIC0gc2VsZi5fZnJhY3Rpb24KICAgIGVsc2U6CiAgICAgIHJldHVybiBmbG9hdChzZWxmLl9yZW1haW5pbmcpIC8gc2VsZi50b3RhbF93b3JrCgogIGRlZiB3aXRoX2NvbXBsZXRlZChzZWxmLCBjb21wbGV0ZWQpOgogICAgcmV0dXJuIFJlc3RyaWN0aW9uUHJvZ3Jlc3MoCiAgICAgICAgZnJhY3Rpb249c2VsZi5fZnJhY3Rpb24sIHJlbWFpbmluZz1zZWxmLl9yZW1haW5pbmcsIGNvbXBsZXRlZD1jb21wbGV0ZWQpCgoKY2xhc3MgX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyKHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCB0aGF0IHVzZXMgU0RGIHRvIHJlYWQgZnJvbSBhIGBgQm91bmRlZFNvdXJjZWBgLgoKICBOT1RFOiBUaGlzIHRyYW5zZm9ybSBjYW4gb25seSBiZSB1c2VkIHdpdGggYmVhbV9mbl9hcGkgZW5hYmxlZC4KICAiIiIKICBjbGFzcyBfU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uKG9iamVjdCk6CiAgICAiIiIgQSByZXN0cmljdGlvbiB3cmFwcyBTb3VyY2VCdW5kbGUgYW5kIFJhbmdlVHJhY2tlci4gIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlX2J1bmRsZSwgcmFuZ2VfdHJhY2tlcj1Ob25lKToKICAgICAgc2VsZi5fc291cmNlX2J1bmRsZSA9IHNvdXJjZV9idW5kbGUKICAgICAgc2VsZi5fcmFuZ2VfdHJhY2tlciA9IHJhbmdlX3RyYWNrZXIKCiAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgIyBUaGUgaW5zdGFuY2Ugb2YgUmFuZ2VUcmFja2VyIHNob3VsZG4ndCBiZSBzZXJpYWxpemVkLgogICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoc2VsZi5fc291cmNlX2J1bmRsZSwgKSkKCiAgICBkZWYgcmFuZ2VfdHJhY2tlcihzZWxmKToKICAgICAgaWYgbm90IHNlbGYuX3JhbmdlX3RyYWNrZXI6CiAgICAgICAgc2VsZi5fcmFuZ2VfdHJhY2tlciA9IHNlbGYuX3NvdXJjZV9idW5kbGUuc291cmNlLmdldF9yYW5nZV90cmFja2VyKAogICAgICAgICAgICBzZWxmLl9zb3VyY2VfYnVuZGxlLnN0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBzZWxmLl9zb3VyY2VfYnVuZGxlLnN0b3BfcG9zaXRpb24pCiAgICAgIHJldHVybiBzZWxmLl9yYW5nZV90cmFja2VyCgogICAgZGVmIHdlaWdodChzZWxmKToKICAgICAgcmV0dXJuIHNlbGYuX3NvdXJjZV9idW5kbGUud2VpZ2h0CgogICAgZGVmIHNvdXJjZShzZWxmKToKICAgICAgcmV0dXJuIHNlbGYuX3NvdXJjZV9idW5kbGUuc291cmNlCgogICAgZGVmIHRyeV9zcGxpdChzZWxmLCBmcmFjdGlvbl9vZl9yZW1haW5kZXIpOgogICAgICBjb25zdW1lZF9mcmFjdGlvbiA9IHNlbGYucmFuZ2VfdHJhY2tlcigpLmZyYWN0aW9uX2NvbnN1bWVkKCkKICAgICAgZnJhY3Rpb24gPSAoCiAgICAgICAgICBjb25zdW1lZF9mcmFjdGlvbiArICgxIC0gY29uc3VtZWRfZnJhY3Rpb24pICogZnJhY3Rpb25fb2ZfcmVtYWluZGVyKQogICAgICBwb3NpdGlvbiA9IHNlbGYucmFuZ2VfdHJhY2tlcigpLnBvc2l0aW9uX2F0X2ZyYWN0aW9uKGZyYWN0aW9uKQogICAgICAjIE5lZWQgdG8gc3Rhc2ggY3VycmVudCBzdG9wX3BvcyBiZWZvcmUgc3BsaXR0aW5nIHNpbmNlCiAgICAgICMgcmFuZ2VfdHJhY2tlci5zcGxpdCB3aWxsIHVwZGF0ZSBpdHMgc3RvcF9wb3MgaWYgc3BsaXRzCiAgICAgICMgc3VjY2Vzc2Z1bGx5LgogICAgICBzdG9wX3BvcyA9IHNlbGYuX3NvdXJjZV9idW5kbGUuc3RvcF9wb3NpdGlvbgogICAgICBzcGxpdF9yZXN1bHQgPSBzZWxmLnJhbmdlX3RyYWNrZXIoKS50cnlfc3BsaXQocG9zaXRpb24pCiAgICAgIGlmIHNwbGl0X3Jlc3VsdDoKICAgICAgICBzcGxpdF9wb3MsIHNwbGl0X2ZyYWN0aW9uID0gc3BsaXRfcmVzdWx0CiAgICAgICAgcHJpbWFyeV93ZWlnaHQgPSBzZWxmLl9zb3VyY2VfYnVuZGxlLndlaWdodCAqIHNwbGl0X2ZyYWN0aW9uCiAgICAgICAgcmVzaWR1YWxfd2VpZ2h0ID0gc2VsZi5fc291cmNlX2J1bmRsZS53ZWlnaHQgLSBwcmltYXJ5X3dlaWdodAogICAgICAgICMgVXBkYXRlIHNlbGYgdG8gcHJpbWFyeSB3ZWlnaHQgYW5kIGVuZCBwb3NpdGlvbi4KICAgICAgICBzZWxmLl9zb3VyY2VfYnVuZGxlID0gU291cmNlQnVuZGxlKAogICAgICAgICAgICBwcmltYXJ5X3dlaWdodCwKICAgICAgICAgICAgc2VsZi5fc291cmNlX2J1bmRsZS5zb3VyY2UsCiAgICAgICAgICAgIHNlbGYuX3NvdXJjZV9idW5kbGUuc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIHNwbGl0X3BvcykKICAgICAgICByZXR1cm4gKAogICAgICAgICAgICBzZWxmLAogICAgICAgICAgICBfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvbigKICAgICAgICAgICAgICAgIFNvdXJjZUJ1bmRsZSgKICAgICAgICAgICAgICAgICAgICByZXNpZHVhbF93ZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fc291cmNlX2J1bmRsZS5zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgc3BsaXRfcG9zLAogICAgICAgICAgICAgICAgICAgIHN0b3BfcG9zKSkpCgogIGNsYXNzIF9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb25UcmFja2VyKFJlc3RyaWN0aW9uVHJhY2tlcik6CiAgICAiIiJBbiBgaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlcmAgaW1wbGVtZW50YXRpb25zIGZvciB3cmFwcGluZyBCb3VuZGVkU291cmNlCiAgICB3aXRoIFNERi4gVGhlIHRyYWNrZWQgcmVzdHJpY3Rpb24gaXMgYSBfU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uLCB3aGljaAogICAgd3JhcHMgU291cmNlQnVuZGxlIGFuZCBSYW5nZVRyYWNrZXIuCgogICAgRGVsZWdhdGVkIFJhbmdlVHJhY2tlciBndWFyYW50ZWVzIHN5bmNocm9uaXphdGlvbiBzYWZldHkuCiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXN0cmljdGlvbik6CiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlc3RyaWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvbik6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ0luaXRpYWxpemluZyBTREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb25UcmFja2VyJwogICAgICAgICAgICAnIHJlcXVpcmVzIGEgX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvbicpCiAgICAgIHNlbGYucmVzdHJpY3Rpb24gPSByZXN0cmljdGlvbgoKICAgIGRlZiBjdXJyZW50X3Byb2dyZXNzKHNlbGYpOgogICAgICAjIHR5cGU6ICgpIC0+IFJlc3RyaWN0aW9uUHJvZ3Jlc3MKICAgICAgcmV0dXJuIFJlc3RyaWN0aW9uUHJvZ3Jlc3MoCiAgICAgICAgICBmcmFjdGlvbj1zZWxmLnJlc3RyaWN0aW9uLnJhbmdlX3RyYWNrZXIoKS5mcmFjdGlvbl9jb25zdW1lZCgpKQoKICAgIGRlZiBjdXJyZW50X3Jlc3RyaWN0aW9uKHNlbGYpOgogICAgICBzZWxmLnJlc3RyaWN0aW9uLnJhbmdlX3RyYWNrZXIoKQogICAgICByZXR1cm4gc2VsZi5yZXN0cmljdGlvbgoKICAgIGRlZiBzdGFydF9wb3Moc2VsZik6CiAgICAgIHJldHVybiBzZWxmLnJlc3RyaWN0aW9uLnJhbmdlX3RyYWNrZXIoKS5zdGFydF9wb3NpdGlvbigpCgogICAgZGVmIHN0b3BfcG9zKHNlbGYpOgogICAgICByZXR1cm4gc2VsZi5yZXN0cmljdGlvbi5yYW5nZV90cmFja2VyKCkuc3RvcF9wb3NpdGlvbigpCgogICAgZGVmIHRyeV9jbGFpbShzZWxmLCBwb3NpdGlvbik6CiAgICAgIHJldHVybiBzZWxmLnJlc3RyaWN0aW9uLnJhbmdlX3RyYWNrZXIoKS50cnlfY2xhaW0ocG9zaXRpb24pCgogICAgZGVmIHRyeV9zcGxpdChzZWxmLCBmcmFjdGlvbl9vZl9yZW1haW5kZXIpOgogICAgICByZXR1cm4gc2VsZi5yZXN0cmljdGlvbi50cnlfc3BsaXQoZnJhY3Rpb25fb2ZfcmVtYWluZGVyKQoKICAgIGRlZiBjaGVja19kb25lKHNlbGYpOgogICAgICByZXR1cm4gc2VsZi5yZXN0cmljdGlvbi5yYW5nZV90cmFja2VyKCkuZnJhY3Rpb25fY29uc3VtZWQoKSA+PSAxLjAKCiAgY2xhc3MgX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVyKGNvcmUuUmVzdHJpY3Rpb25Qcm92aWRlcik6CiAgICAiIiJBIGBSZXN0cmljdGlvblByb3ZpZGVyYCB0aGF0IGlzIHVzZWQgYnkgU0RGIGZvciBgQm91bmRlZFNvdXJjZWAuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlLCBkZXNpcmVkX2NodW5rX3NpemU9Tm9uZSk6CiAgICAgIHNlbGYuX3NvdXJjZSA9IHNvdXJjZQogICAgICBzZWxmLl9kZXNpcmVkX2NodW5rX3NpemUgPSBkZXNpcmVkX2NodW5rX3NpemUKCiAgICBkZWYgaW5pdGlhbF9yZXN0cmljdGlvbihzZWxmLCBlbGVtZW50KToKICAgICAgIyBHZXQgaW5pdGlhbCByYW5nZV90cmFja2VyIGZyb20gc291cmNlCiAgICAgIHJhbmdlX3RyYWNrZXIgPSBzZWxmLl9zb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoTm9uZSwgTm9uZSkKICAgICAgcmV0dXJuIF9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uKAogICAgICAgICAgU291cmNlQnVuZGxlKAogICAgICAgICAgICAgIE5vbmUsCiAgICAgICAgICAgICAgc2VsZi5fc291cmNlLAogICAgICAgICAgICAgIHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSwKICAgICAgICAgICAgICByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKSkpCgogICAgZGVmIGNyZWF0ZV90cmFja2VyKHNlbGYsIHJlc3RyaWN0aW9uKToKICAgICAgcmV0dXJuIF9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uVHJhY2tlcigKICAgICAgICAgIHJlc3RyaWN0aW9uKQoKICAgIGRlZiBzcGxpdChzZWxmLCBlbGVtZW50LCByZXN0cmljdGlvbik6CiAgICAgIGlmIHNlbGYuX2Rlc2lyZWRfY2h1bmtfc2l6ZSBpcyBOb25lOgogICAgICAgIHRyeToKICAgICAgICAgIGVzdGltYXRlZF9zaXplID0gc2VsZi5fc291cmNlLmVzdGltYXRlX3NpemUoKQogICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgogICAgICAgICAgZXN0aW1hdGVkX3NpemUgPSBOb25lCiAgICAgICAgc2VsZi5fZGVzaXJlZF9jaHVua19zaXplID0gUmVhZC5nZXRfZGVzaXJlZF9jaHVua19zaXplKGVzdGltYXRlZF9zaXplKQoKICAgICAgIyBJbnZva2Ugc291cmNlLnNwbGl0IHRvIGdldCBpbml0aWFsIHNwbGl0dGluZyByZXN1bHRzLgogICAgICBzb3VyY2VfYnVuZGxlcyA9IHNlbGYuX3NvdXJjZS5zcGxpdChzZWxmLl9kZXNpcmVkX2NodW5rX3NpemUpCiAgICAgIGZvciBzb3VyY2VfYnVuZGxlIGluIHNvdXJjZV9idW5kbGVzOgogICAgICAgIHlpZWxkIF9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uKAogICAgICAgICAgICBzb3VyY2VfYnVuZGxlKQoKICAgIGRlZiByZXN0cmljdGlvbl9zaXplKHNlbGYsIGVsZW1lbnQsIHJlc3RyaWN0aW9uKToKICAgICAgcmV0dXJuIHJlc3RyaWN0aW9uLndlaWdodCgpCgogICAgZGVmIHJlc3RyaWN0aW9uX2NvZGVyKHNlbGYpOgogICAgICByZXR1cm4gY29kZXJzLkRpbGxDb2RlcigpCgogIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UpOgogICAgaWYgbm90IGlzaW5zdGFuY2Uoc291cmNlLCBCb3VuZGVkU291cmNlKToKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdTREZCb3VuZGVkU291cmNlV3JhcHBlciBjYW4gb25seSB3cmFwIEJvdW5kZWRTb3VyY2UnKQogICAgc3VwZXIoX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLnNvdXJjZSA9IHNvdXJjZQoKICBkZWYgX2NyZWF0ZV9zZGZfYm91bmRlZF9zb3VyY2VfZG9mbihzZWxmKToKICAgIHNvdXJjZSA9IHNlbGYuc291cmNlCgogICAgY2xhc3MgU0RGQm91bmRlZFNvdXJjZURvRm4oY29yZS5Eb0ZuKToKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWRfc291cmNlKToKICAgICAgICBzZWxmLnNvdXJjZSA9IHJlYWRfc291cmNlCgogICAgICBkZWYgcHJvY2VzcygKICAgICAgICAgIHNlbGYsCiAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgcmVzdHJpY3Rpb25fdHJhY2tlcj1jb3JlLkRvRm4uUmVzdHJpY3Rpb25QYXJhbSgKICAgICAgICAgICAgICBfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVyKAogICAgICAgICAgICAgICAgICBzb3VyY2UpKSk6CiAgICAgICAgY3VycmVudF9yZXN0cmljdGlvbiA9IHJlc3RyaWN0aW9uX3RyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbigpCiAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoCiAgICAgICAgICAgIGN1cnJlbnRfcmVzdHJpY3Rpb24sCiAgICAgICAgICAgIF9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uKQogICAgICAgIHJldHVybiBjdXJyZW50X3Jlc3RyaWN0aW9uLnNvdXJjZSgpLnJlYWQoCiAgICAgICAgICAgIGN1cnJlbnRfcmVzdHJpY3Rpb24ucmFuZ2VfdHJhY2tlcigpKQoKICAgIHJldHVybiBTREZCb3VuZGVkU291cmNlRG9GbihzZWxmLnNvdXJjZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgcmV0dXJuICgKICAgICAgICBwYmVnaW4KICAgICAgICB8IGNvcmUuSW1wdWxzZSgpCiAgICAgICAgfCBjb3JlLlBhckRvKHNlbGYuX2NyZWF0ZV9zZGZfYm91bmRlZF9zb3VyY2VfZG9mbigpKSkKCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgdW51c2VkX2lucHV0cyk6CiAgICByZXR1cm4gY29yZS5XaW5kb3dpbmcod2luZG93Lkdsb2JhbFdpbmRvd3MoKSkKCiAgZGVmIF9pbmZlcl9vdXRwdXRfY29kZXIoc2VsZiwgaW5wdXRfdHlwZT1Ob25lLCBpbnB1dF9jb2Rlcj1Ob25lKToKICAgIHJldHVybiBzZWxmLnNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlcigpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdzb3VyY2UnOiBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5zb3VyY2UuX19jbGFzc19fLCBsYWJlbD0nUmVhZCBTb3VyY2UnKSwKICAgICAgICAnc291cmNlX2RkJzogc2VsZi5zb3VyY2UKICAgIH0KlH2UKIwVU291cmNlQmFzZS5pc19ib3VuZGVklGpWMQEAS2tLbYeUjApTb3VyY2VCYXNllGpdMQEAS2ZLbYeUjBtCb3VuZGVkU291cmNlLmVzdGltYXRlX3NpemWUalYxAQBLk0ugh5SME0JvdW5kZWRTb3VyY2Uuc3BsaXSUalYxAQBLoku3h5SMH0JvdW5kZWRTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXKUalYxAQBLuUvMh5SMEkJvdW5kZWRTb3VyY2UucmVhZJRqVjEBAEvOS+mHlIwiQm91bmRlZFNvdXJjZS5kZWZhdWx0X291dHB1dF9jb2RlcpRqVjEBAEvrS/GHlIwYQm91bmRlZFNvdXJjZS5pc19ib3VuZGVklGpWMQEAS/NL9IeUjA1Cb3VuZGVkU291cmNllGpdMQEAS3BL9IeUjBtSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb26UalYxAQBNagFNbAGHlIwaUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb26UalYxAQBNbgFNcAGHlIwWUmFuZ2VUcmFja2VyLnRyeV9jbGFpbZRqVjEBAE1yAU2GAYeUjCFSYW5nZVRyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb26UalYxAQBNiAFNkwGHlIwhUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9ulGpWMQEATZUBTacBh5SMFlJhbmdlVHJhY2tlci50cnlfc3BsaXSUalYxAQBNqQFNzAGHlIweUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVklGpWMQEATc4BTdwBh5SMGVJhbmdlVHJhY2tlci5zcGxpdF9wb2ludHOUalYxAQBN3gFNTgKHlIwwUmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrlGpWMQEATVACTWcCh5SMDFJhbmdlVHJhY2tlcpRqXTEBAEv3TWcCh5SMFVNpbmsuaW5pdGlhbGl6ZV93cml0ZZRqVjEBAE30Ak0BA4eUjBBTaW5rLm9wZW5fd3JpdGVylGpWMQEATQMDTQ0Dh5SMEVNpbmsucHJlX2ZpbmFsaXpllGpWMQEATQ8DTSADh5SME1NpbmsuZmluYWxpemVfd3JpdGWUalYxAQBNIgNNRAOHlIwEU2lua5RqXTEBAE1qAk1EA4eUjAxXcml0ZXIud3JpdGWUalYxAQBNUwNNVQOHlIwMV3JpdGVyLmNsb3NllGpWMQEATVcDTWADh5SMBldyaXRlcpRqXTEBAE1HA01gA4eUjA1SZWFkLl9faW5pdF9flGpWMQEATWUDTW4Dh5SMG1JlYWQuZ2V0X2Rlc2lyZWRfY2h1bmtfc2l6ZZRqVjEBAE1wA013A4eUjAtSZWFkLmV4cGFuZJRqVjEBAE15A01/A4eUjBJSZWFkLmdldF93aW5kb3dpbmeUalYxAQBNgQNNgwOHlIwYUmVhZC5faW5mZXJfb3V0cHV0X2NvZGVylGpWMQEATYUDTY0Dh5SMEVJlYWQuZGlzcGxheV9kYXRhlGpWMQEATY8DTZMDh5SMHFJlYWQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNlQNNnQOHlIweUmVhZC5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATZ8DTaIDh5SMBFJlYWSUal0xAQBNYwNNogOHlIwOV3JpdGUuX19pbml0X1+UalYxAQBNxgNNzQOHlIwSV3JpdGUuZGlzcGxheV9kYXRhlGpWMQEATc8DTdADh5SMDFdyaXRlLmV4cGFuZJRqVjEBAE3SA03gA4eUjAVXcml0ZZRqXTEBAE2rA03gA4eUjBJXcml0ZUltcGwuX19pbml0X1+UalYxAQBN5QNN6AOHlIwQV3JpdGVJbXBsLmV4cGFuZJRqVjEBAE3qA00RBIeUjAlXcml0ZUltcGyUal0xAQBN4wNNEQSHlIwZX1dyaXRlQnVuZGxlRG9Gbi5fX2luaXRfX5RqVjEBAE0YBE0ZBIeUjB1fV3JpdGVCdW5kbGVEb0ZuLmRpc3BsYXlfZGF0YZRqVjEBAE0bBE0cBIeUjB1fV3JpdGVCdW5kbGVEb0ZuLnN0YXJ0X2J1bmRsZZRqVjEBAE0eBE0fBIeUjBhfV3JpdGVCdW5kbGVEb0ZuLnByb2Nlc3OUalYxAQBNIQRNJQSHlIweX1dyaXRlQnVuZGxlRG9Gbi5maW5pc2hfYnVuZGxllGpWMQEATScETSsEh5SMEF9Xcml0ZUJ1bmRsZURvRm6Ual0xAQBNFARNKwSHlIweX1dyaXRlS2V5ZWRCdW5kbGVEb0ZuLl9faW5pdF9flGpWMQEATS8ETTAEh5SMIl9Xcml0ZUtleWVkQnVuZGxlRG9Gbi5kaXNwbGF5X2RhdGGUalYxAQBNMgRNMwSHlIwdX1dyaXRlS2V5ZWRCdW5kbGVEb0ZuLnByb2Nlc3OUalYxAQBNNQRNOgSHlIwVX1dyaXRlS2V5ZWRCdW5kbGVEb0ZulGpdMQEATS4ETToEh5SMDV9wcmVfZmluYWxpemWUalYxAQBNPQRNPgSHlIwPX2ZpbmFsaXplX3dyaXRllGpWMQEATUEETVQEh5SMGV9Sb3VuZFJvYmluS2V5Rm4uX19pbml0X1+UalYxAQBNWARNWgSHlIwdX1JvdW5kUm9iaW5LZXlGbi5zdGFydF9idW5kbGWUalYxAQBNXARNXQSHlIwYX1JvdW5kUm9iaW5LZXlGbi5wcm9jZXNzlGpWMQEATV8ETWMEh5SMEF9Sb3VuZFJvYmluS2V5Rm6Ual0xAQBNVwRNYwSHlIwmUmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb26UalYxAQBNdQRNgwSHlIwjUmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcHJvZ3Jlc3OUalYxAQBNhQRNjQSHlIwdUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmWUalYxAQBNjwRNoASHlIwcUmVzdHJpY3Rpb25UcmFja2VyLnRyeV9zcGxpdJRqVjEBAE2iBE3IBIeUjBxSZXN0cmljdGlvblRyYWNrZXIudHJ5X2NsYWltlGpWMQEATcoETdwEh5SMElJlc3RyaWN0aW9uVHJhY2tlcpRqXTEBAE1mBE3cBIeUjCZXYXRlcm1hcmtFc3RpbWF0b3IuZ2V0X2VzdGltYXRvcl9zdGF0ZZRqVjEBAE3qBE3vBIeUjCRXYXRlcm1hcmtFc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmuUalYxAQBN8QRN9gSHlIwkV2F0ZXJtYXJrRXN0aW1hdG9yLm9ic2VydmVfdGltZXN0YW1wlGpWMQEATfgETQIFh5SMEldhdGVybWFya0VzdGltYXRvcpRqXTEBAE3fBE0CBYeUjBxSZXN0cmljdGlvblByb2dyZXNzLl9faW5pdF9flGpWMQEATQoFTQ8Fh5SMHFJlc3RyaWN0aW9uUHJvZ3Jlc3MuX19yZXByX1+UalYxAQBNEQVNEwWHlIwiUmVzdHJpY3Rpb25Qcm9ncmVzcy5jb21wbGV0ZWRfd29ya5SVsR0BAAAAAABqVjEBAE0VBU0bBYeUjCJSZXN0cmljdGlvblByb2dyZXNzLnJlbWFpbmluZ193b3JrlGpWMQEATR0FTSMFh5SMHlJlc3RyaWN0aW9uUHJvZ3Jlc3MudG90YWxfd29ya5RqVjEBAE0lBU0oBYeUjCZSZXN0cmljdGlvblByb2dyZXNzLmZyYWN0aW9uX2NvbXBsZXRlZJRqVjEBAE0qBU0wBYeUjCZSZXN0cmljdGlvblByb2dyZXNzLmZyYWN0aW9uX3JlbWFpbmluZ5RqVjEBAE0yBU04BYeUjCJSZXN0cmljdGlvblByb2dyZXNzLndpdGhfY29tcGxldGVklGpWMQEATToFTTwFh5SME1Jlc3RyaWN0aW9uUHJvZ3Jlc3OUal0xAQBNBQVNPAWHlIw+X1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb24uX19pbml0X1+UalYxAQBNRgVNSAWHlIxAX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb24uX19yZWR1Y2VfX5RqVjEBAE1KBU1MBYeUjENfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvbi5yYW5nZV90cmFja2VylGpWMQEATU4FTVMFh5SMPF9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uLndlaWdodJRqVjEBAE1VBU1WBYeUjDxfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvbi5zb3VyY2WUalYxAQBNWAVNWQWHlIw/X1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb24udHJ5X3NwbGl0lGpWMQEATVsFTXYFh5SMNV9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9ulGpdMQEATUQFTXYFh5SMRV9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uVHJhY2tlci5fX2luaXRfX5RqVjEBAE1/BU2FBYeUjE1fU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9wcm9ncmVzc5RqVjEBAE2HBU2KBYeUjFBfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbpRqVjEBAE2MBU2OBYeUjEZfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvblRyYWNrZXIuc3RhcnRfcG9zlGpWMQEATZAFTZEFh5SMRV9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uVHJhY2tlci5zdG9wX3Bvc5RqVjEBAE2TBU2UBYeUjEZfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvblRyYWNrZXIudHJ5X2NsYWltlGpWMQEATZYFTZcFh5SMRl9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uVHJhY2tlci50cnlfc3BsaXSUalYxAQBNmQVNmgWHlIxHX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmWUalYxAQBNnAVNnQWHlIw8X1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb25UcmFja2VylGpdMQEATXgFTZ0Fh5SMRl9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIuX19pbml0X1+UalYxAQBNoQVNowWHlIxRX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlci5pbml0aWFsX3Jlc3RyaWN0aW9ulGpWMQEATaUFTa0Fh5SMTF9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fU0RGQm91bmRlZFNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIuY3JlYXRlX3RyYWNrZXKUalYxAQBNrwVNsQWHlIxDX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlci5zcGxpdJRqVjEBAE2zBU2/BYeUjE5fU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVyLnJlc3RyaWN0aW9uX3NpemWUalYxAQBNwQVNwgWHlIxPX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9TREZCb3VuZGVkU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlci5yZXN0cmljdGlvbl9jb2RlcpRqVjEBAE3EBU3FBYeUjD1fU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX1NERkJvdW5kZWRTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVylGpdMQEATZ8FTcUFh5SMIV9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fX2luaXRfX5RqVjEBAE3HBU3LBYeUjFZfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX2NyZWF0ZV9zZGZfYm91bmRlZF9zb3VyY2VfZG9mbi5TREZCb3VuZGVkU291cmNlRG9Gbi5fX2luaXRfX5RqVjEBAE3RBU3SBYeUjFVfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXIuX2NyZWF0ZV9zZGZfYm91bmRlZF9zb3VyY2VfZG9mbi5TREZCb3VuZGVkU291cmNlRG9Gbi5wcm9jZXNzlGpWMQEATdQFTd8Fh5SMTV9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fY3JlYXRlX3NkZl9ib3VuZGVkX3NvdXJjZV9kb2ZuLlNERkJvdW5kZWRTb3VyY2VEb0ZulGpdMQEATdAFTd8Fh5SMOF9TREZCb3VuZGVkU291cmNlV3JhcHBlci5fY3JlYXRlX3NkZl9ib3VuZGVkX3NvdXJjZV9kb2ZulGpWMQEATc0FTeEFh5SMH19TREZCb3VuZGVkU291cmNlV3JhcHBlci5leHBhbmSUalYxAQBN4wVN5wWHlIwmX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLmdldF93aW5kb3dpbmeUalYxAQBN6QVN6gWHlIwsX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLl9pbmZlcl9vdXRwdXRfY29kZXKUalYxAQBN7AVN7QWHlIwlX1NERkJvdW5kZWRTb3VyY2VXcmFwcGVyLmRpc3BsYXlfZGF0YZRqVjEBAE3vBU3zBYeUjBhfU0RGQm91bmRlZFNvdXJjZVdyYXBwZXKUal0xAQBNPwVN8wWHlHV9lCiMDUJvdW5kZWRTb3VyY2WUatUDAACMG0JvdW5kZWRTb3VyY2UuZXN0aW1hdGVfc2l6ZZRq1QMAAIwTQm91bmRlZFNvdXJjZS5zcGxpdJRq1QMAAIwfQm91bmRlZFNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcpRq1QMAAIwSQm91bmRlZFNvdXJjZS5yZWFklGrVAwAAjCJCb3VuZGVkU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVylGrVAwAAjBhCb3VuZGVkU291cmNlLmlzX2JvdW5kZWSUatUDAACMDFJhbmdlVHJhY2tlcpRq1QMAAIwbUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGrVAwAAjBpSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbpRq1QMAAIwWUmFuZ2VUcmFja2VyLnRyeV9jbGFpbZRq1QMAAIwhUmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ulGrVAwAAjCFSYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb26UatUDAACMFlJhbmdlVHJhY2tlci50cnlfc3BsaXSUatUDAACMHlJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZJRq1QMAAIwZUmFuZ2VUcmFja2VyLnNwbGl0X3BvaW50c5Rq1QMAAIwwUmFuZ2VUcmFja2VyLnNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrlGrVAwAAjARTaW5rlGrVAwAAjBVTaW5rLmluaXRpYWxpemVfd3JpdGWUatUDAACMEFNpbmsub3Blbl93cml0ZXKUatUDAACMEVNpbmsucHJlX2ZpbmFsaXpllGrVAwAAjBNTaW5rLmZpbmFsaXplX3dyaXRllGrVAwAAjAZXcml0ZXKUatUDAACMDFdyaXRlci53cml0ZZRq1QMAAIwMV3JpdGVyLmNsb3NllGrVAwAAjARSZWFklGrVAwAAjBtSZWFkLmdldF9kZXNpcmVkX2NodW5rX3NpemWUatUDAACMC1JlYWQuZXhwYW5klGrVAwAAjBJSZWFkLmdldF93aW5kb3dpbmeUatUDAACMEVJlYWQuZGlzcGxheV9kYXRhlGrVAwAAjBxSZWFkLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGrVAwAAjB5SZWFkLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUatUDAACMBVdyaXRllGrVAwAAjBJXcml0ZS5kaXNwbGF5X2RhdGGUatUDAACMDFdyaXRlLmV4cGFuZJRq1QMAAIwSUmVzdHJpY3Rpb25UcmFja2VylGrVAwAAjCZSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbpRq1QMAAIwjUmVzdHJpY3Rpb25UcmFja2VyLmN1cnJlbnRfcHJvZ3Jlc3OUatUDAACMHVJlc3RyaWN0aW9uVHJhY2tlci5jaGVja19kb25llGrVAwAAjBxSZXN0cmljdGlvblRyYWNrZXIudHJ5X3NwbGl0lGrVAwAAjBxSZXN0cmljdGlvblRyYWNrZXIudHJ5X2NsYWltlGrVAwAAjBJXYXRlcm1hcmtFc3RpbWF0b3KUatUDAACMJldhdGVybWFya0VzdGltYXRvci5nZXRfZXN0aW1hdG9yX3N0YXRllGrVAwAAjCRXYXRlcm1hcmtFc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmuUatUDAACMJFdhdGVybWFya0VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcJRq1QMAAHWMFWFwYWNoZV9iZWFtLmlvLmlvYmFzZZR0lIweYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtlChYzSkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiTG9jYWwgRmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyBmaWxlcyBvbiBkaXNrLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcApmcm9tIHR5cGluZyBpbXBvcnQgQmluYXJ5SU8gICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbSBpbXBvcnQgQmVhbUlPRXJyb3IKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2VkRmlsZQpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzaW9uVHlwZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBGaWxlTWV0YWRhdGEKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBGaWxlU3lzdGVtCgpfX2FsbF9fID0gWydMb2NhbEZpbGVTeXN0ZW0nXQoKCmNsYXNzIExvY2FsRmlsZVN5c3RlbShGaWxlU3lzdGVtKToKICAiIiJBIExvY2FsIGBgRmlsZVN5c3RlbWBgIGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcgZmlsZXMgb24gZGlzay4KICAiIiIKICBAY2xhc3NtZXRob2QKICBkZWYgc2NoZW1lKGNscyk6CiAgICAiIiJVUkkgc2NoZW1lIGZvciB0aGUgRmlsZVN5c3RlbQogICAgIiIiCiAgICByZXR1cm4gTm9uZQoKICBkZWYgam9pbihzZWxmLCBiYXNlcGF0aCwgKnBhdGhzKToKICAgICIiIkpvaW4gdHdvIG9yIG1vcmUgcGF0aG5hbWUgY29tcG9uZW50cyBmb3IgdGhlIGZpbGVzeXN0ZW0KCiAgICBBcmdzOgogICAgICBiYXNlcGF0aDogc3RyaW5nIHBhdGggb2YgdGhlIGZpcnN0IGNvbXBvbmVudCBvZiB0aGUgcGF0aAogICAgICBwYXRoczogcGF0aCBjb21wb25lbnRzIHRvIGJlIGFkZGVkCgogICAgUmV0dXJuczogZnVsbCBwYXRoIGFmdGVyIGNvbWJpbmluZyBhbGwgdGhlIHBhc3NlZCBjb21wb25lbnRzCiAgICAiIiIKICAgIHJldHVybiBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICpwYXRocykKCiAgZGVmIHNwbGl0KHNlbGYsIHBhdGgpOgogICAgIiIiU3BsaXRzIHRoZSBnaXZlbiBwYXRoIGludG8gdHdvIHBhcnRzLgoKICAgIFNwbGl0cyB0aGUgcGF0aCBpbnRvIGEgcGFpciAoaGVhZCwgdGFpbCkgc3VjaCB0aGF0IHRhaWwgY29udGFpbnMgdGhlIGxhc3QKICAgIGNvbXBvbmVudCBvZiB0aGUgcGF0aCBhbmQgaGVhZCBjb250YWlucyBldmVyeXRoaW5nIHVwIHRvIHRoYXQuCgogICAgQXJnczoKICAgICAgcGF0aDogcGF0aCBhcyBhIHN0cmluZwogICAgUmV0dXJuczoKICAgICAgYSBwYWlyIG9mIHBhdGggY29tcG9uZW50cyBhcyBzdHJpbmdzLgogICAgIiIiCiAgICByZXR1cm4gb3MucGF0aC5zcGxpdChvcy5wYXRoLmFic3BhdGgocGF0aCkpCgogIGRlZiBta2RpcnMoc2VsZiwgcGF0aCk6CiAgICAiIiJSZWN1cnNpdmVseSBjcmVhdGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBwcm92aWRlZCBwYXRoLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQKCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IGlmIGxlYWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLgogICAgIiIiCiAgICB0cnk6CiAgICAgIG9zLm1ha2VkaXJzKHBhdGgpCiAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgIHJhaXNlIElPRXJyb3IoZXJyKQoKICBkZWYgaGFzX2RpcnMoc2VsZik6CiAgICAiIiJXaGV0aGVyIHRoaXMgRmlsZVN5c3RlbSBzdXBwb3J0cyBkaXJlY3Rvcmllcy4iIiIKICAgIHJldHVybiBUcnVlCgogIGRlZiBfdXJsX2Rpcm5hbWUoc2VsZiwgdXJsX29yX3BhdGgpOgogICAgIiIiUGFzcyB0aHJvdWdoIHRvIG9zLnBhdGguZGlybmFtZS4KCiAgICBUaGlzIHZlcnNpb24gdXNlcyBvcy5wYXRoIGluc3RlYWQgb2YgcG9zaXhwYXRoIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUKICAgIGhvc3QgT1MuCgogICAgQXJnczoKICAgICAgdXJsX29yX3BhdGg6IEEgc3RyaW5nIGluIHRoZSBmb3JtIG9mIC9zb21lL3BhdGguCiAgICAiIiIKICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUodXJsX29yX3BhdGgpCgogIGRlZiBfbGlzdChzZWxmLCBkaXJfb3JfcHJlZml4KToKICAgICIiIkxpc3QgZmlsZXMgaW4gYSBsb2NhdGlvbi4KCiAgICBMaXN0aW5nIGlzIG5vbi1yZWN1cnNpdmUsIGZvciBmaWxlc3lzdGVtcyB0aGF0IHN1cHBvcnQgZGlyZWN0b3JpZXMuCgogICAgQXJnczoKICAgICAgZGlyX29yX3ByZWZpeDogKHN0cmluZykgQSBkaXJlY3Rvcnkgb3IgbG9jYXRpb24gcHJlZml4IChmb3IgZmlsZXN5c3RlbXMKICAgICAgICB0aGF0IGRvbid0IGhhdmUgZGlyZWN0b3JpZXMpLgoKICAgIFJldHVybnM6CiAgICAgIEdlbmVyYXRvciBvZiBgYEZpbGVNZXRhZGF0YWBgIG9iamVjdHMuCgogICAgUmFpc2VzOgogICAgICBgYEJlYW1JT0Vycm9yYGA6IGlmIGxpc3RpbmcgZmFpbHMsIGJ1dCBub3QgaWYgbm8gZmlsZXMgd2VyZSBmb3VuZC4KICAgICIiIgogICAgaWYgbm90IHNlbGYuZXhpc3RzKGRpcl9vcl9wcmVmaXgpOgogICAgICByZXR1cm4KCiAgICBkZWYgbGlzdF9maWxlcyhyb290KToKICAgICAgZm9yIGRpcnBhdGgsIF8sIGZpbGVzIGluIG9zLndhbGsocm9vdCk6CiAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzOgogICAgICAgICAgeWllbGQgc2VsZi5qb2luKGRpcnBhdGgsIGZpbGVuYW1lKQoKICAgIHRyeToKICAgICAgZm9yIGYgaW4gbGlzdF9maWxlcyhkaXJfb3JfcHJlZml4KToKICAgICAgICB0cnk6CiAgICAgICAgICB5aWVsZCBGaWxlTWV0YWRhdGEoZiwgb3MucGF0aC5nZXRzaXplKGYpKQogICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgIyBGaWxlcyBtYXkgZGlzYXBwZWFyLCBzdWNoIGFzIHdoZW4gbGlzdGluZyAvdG1wLgogICAgICAgICAgcGFzcwogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJMaXN0IG9wZXJhdGlvbiBmYWlsZWQiLCB7ZGlyX29yX3ByZWZpeDogZX0pCgogIGRlZiBfcGF0aF9vcGVuKAogICAgICBzZWxmLAogICAgICBwYXRoLAogICAgICBtb2RlLAogICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIkhlbHBlciBmdW5jdGlvbnMgdG8gb3BlbiBhIGZpbGUgaW4gdGhlIHByb3ZpZGVkIG1vZGUuCiAgICAiIiIKICAgIGNvbXByZXNzaW9uX3R5cGUgPSBGaWxlU3lzdGVtLl9nZXRfY29tcHJlc3Npb25fdHlwZShwYXRoLCBjb21wcmVzc2lvbl90eXBlKQogICAgcmF3X2ZpbGUgPSBvcGVuKHBhdGgsIG1vZGUpCiAgICBpZiBjb21wcmVzc2lvbl90eXBlID09IENvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VEOgogICAgICByZXR1cm4gcmF3X2ZpbGUKICAgIGVsc2U6CiAgICAgIHJldHVybiBDb21wcmVzc2VkRmlsZShyYXdfZmlsZSwgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlKQoKICBkZWYgY3JlYXRlKAogICAgICBzZWxmLAogICAgICBwYXRoLAogICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICMgdHlwZTogKC4uLikgLT4gQmluYXJ5SU8KCiAgICAiIiJSZXR1cm5zIGEgd3JpdGUgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIGZpbGUgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlsZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtCiAgICAgIG1pbWVfdHlwZTogTUlNRSB0eXBlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29udGVudCBpbiB0aGUgZmlsZSBvYmplY3QKICAgICAgY29tcHJlc3Npb25fdHlwZTogVHlwZSBvZiBjb21wcmVzc2lvbiB0byBiZSB1c2VkIGZvciB0aGlzIG9iamVjdAoKICAgIFJldHVybnM6IGZpbGUgaGFuZGxlIHdpdGggYSBjbG9zZSBmdW5jdGlvbiBmb3IgdGhlIHVzZXIgdG8gdXNlCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9wYXRoX29wZW4ocGF0aCwgJ3diJywgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgb3BlbigKICAgICAgc2VsZiwKICAgICAgcGF0aCwKICAgICAgbWltZV90eXBlPSdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAjIHR5cGU6ICguLi4pIC0+IEJpbmFyeUlPCgogICAgIiIiUmV0dXJucyBhIHJlYWQgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIGZpbGUgcGF0aC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiB0aGUgZmlsZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtCiAgICAgIG1pbWVfdHlwZTogTUlNRSB0eXBlIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgY29udGVudCBpbiB0aGUgZmlsZSBvYmplY3QKICAgICAgY29tcHJlc3Npb25fdHlwZTogVHlwZSBvZiBjb21wcmVzc2lvbiB0byBiZSB1c2VkIGZvciB0aGlzIG9iamVjdAoKICAgIFJldHVybnM6IGZpbGUgaGFuZGxlIHdpdGggYSBjbG9zZSBmdW5jdGlvbiBmb3IgdGhlIHVzZXIgdG8gdXNlCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9wYXRoX29wZW4ocGF0aCwgJ3JiJywgbWltZV90eXBlLCBjb21wcmVzc2lvbl90eXBlKQoKICBkZWYgY29weShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZWN1cnNpdmVseSBjb3B5IHRoZSBmaWxlIHRyZWUgZnJvbSB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbgoKICAgIEFyZ3M6CiAgICAgIHNvdXJjZV9maWxlX25hbWVzOiBsaXN0IG9mIHNvdXJjZSBmaWxlIG9iamVjdHMgdGhhdCBuZWVkcyB0byBiZSBjb3BpZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogbGlzdCBvZiBkZXN0aW5hdGlvbiBvZiB0aGUgbmV3IG9iamVjdAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBhbnkgb2YgdGhlIGNvcHkgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIGVycl9tc2cgPSAoCiAgICAgICAgInNvdXJjZV9maWxlX25hbWVzIGFuZCBkZXN0aW5hdGlvbl9maWxlX25hbWVzIHNob3VsZCAiCiAgICAgICAgImJlIGVxdWFsIGluIGxlbmd0aCIpCiAgICBhc3NlcnQgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSBsZW4oZGVzdGluYXRpb25fZmlsZV9uYW1lcyksIGVycl9tc2cKCiAgICBkZWYgX2NvcHlfcGF0aChzb3VyY2UsIGRlc3RpbmF0aW9uKToKICAgICAgIiIiUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZSB0cmVlIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24KICAgICAgIiIiCiAgICAgIHRyeToKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0aW5hdGlvbik6CiAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRlc3RpbmF0aW9uKToKICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkZXN0aW5hdGlvbikKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIG9zLnJlbW92ZShkZXN0aW5hdGlvbikKICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNvdXJjZSk6CiAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc291cmNlLCBkZXN0aW5hdGlvbikKICAgICAgICBlbHNlOgogICAgICAgICAgc2h1dGlsLmNvcHkyKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICByYWlzZSBJT0Vycm9yKGVycikKCiAgICBleGNlcHRpb25zID0ge30KICAgIGZvciBzb3VyY2UsIGRlc3RpbmF0aW9uIGluIHppcChzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAgIHRyeToKICAgICAgICBfY29weV9wYXRoKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbKHNvdXJjZSwgZGVzdGluYXRpb24pXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiQ29weSBvcGVyYXRpb24gZmFpbGVkIiwgZXhjZXB0aW9ucykKCiAgZGVmIHJlbmFtZShzZWxmLCBzb3VyY2VfZmlsZV9uYW1lcywgZGVzdGluYXRpb25fZmlsZV9uYW1lcyk6CiAgICAiIiJSZW5hbWUgdGhlIGZpbGVzIGF0IHRoZSBzb3VyY2UgbGlzdCB0byB0aGUgZGVzdGluYXRpb24gbGlzdC4KICAgIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGlzdHMgc2hvdWxkIGJlIG9mIHRoZSBzYW1lIHNpemUuCgogICAgQXJnczoKICAgICAgc291cmNlX2ZpbGVfbmFtZXM6IExpc3Qgb2YgZmlsZSBwYXRocyB0aGF0IG5lZWQgdG8gYmUgbW92ZWQKICAgICAgZGVzdGluYXRpb25fZmlsZV9uYW1lczogTGlzdCBvZiBkZXN0aW5hdGlvbl9maWxlX25hbWVzIGZvciB0aGUgZmlsZXMKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgYW55IG9mIHRoZSByZW5hbWUgb3BlcmF0aW9ucyBmYWlsCiAgICAiIiIKICAgIGVycl9tc2cgPSAoCiAgICAgICAgInNvdXJjZV9maWxlX25hbWVzIGFuZCBkZXN0aW5hdGlvbl9maWxlX25hbWVzIHNob3VsZCAiCiAgICAgICAgImJlIGVxdWFsIGluIGxlbmd0aCIpCiAgICBhc3NlcnQgbGVuKHNvdXJjZV9maWxlX25hbWVzKSA9PSBsZW4oZGVzdGluYXRpb25fZmlsZV9uYW1lcyksIGVycl9tc2cKCiAgICBkZWYgX3JlbmFtZV9maWxlKHNvdXJjZSwgZGVzdGluYXRpb24pOgogICAgICAiIiJSZW5hbWUgYSBzaW5nbGUgZmlsZSBvYmplY3QiIiIKICAgICAgdHJ5OgogICAgICAgIG9zLnJlbmFtZShzb3VyY2UsIGRlc3RpbmF0aW9uKQogICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgcmFpc2UgSU9FcnJvcihlcnIpCgogICAgZXhjZXB0aW9ucyA9IHt9CiAgICBmb3Igc291cmNlLCBkZXN0aW5hdGlvbiBpbiB6aXAoc291cmNlX2ZpbGVfbmFtZXMsIGRlc3RpbmF0aW9uX2ZpbGVfbmFtZXMpOgogICAgICB0cnk6CiAgICAgICAgX3JlbmFtZV9maWxlKHNvdXJjZSwgZGVzdGluYXRpb24pCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbKHNvdXJjZSwgZGVzdGluYXRpb24pXSA9IGUKCiAgICBpZiBleGNlcHRpb25zOgogICAgICByYWlzZSBCZWFtSU9FcnJvcigiUmVuYW1lIG9wZXJhdGlvbiBmYWlsZWQiLCBleGNlcHRpb25zKQoKICBkZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgogICAgIiIiQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIHBhdGggZXhpc3RzIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIHRoYXQgbmVlZHMgdG8gYmUgY2hlY2tlZC4KCiAgICBSZXR1cm5zOiBib29sZWFuIGZsYWcgaW5kaWNhdGluZyBpZiBwYXRoIGV4aXN0cwogICAgIiIiCiAgICByZXR1cm4gb3MucGF0aC5leGlzdHMocGF0aCkKCiAgZGVmIHNpemUoc2VsZiwgcGF0aCk6CiAgICAiIiJHZXQgc2l6ZSBvZiBwYXRoIG9uIHRoZSBGaWxlU3lzdGVtLgoKICAgIEFyZ3M6CiAgICAgIHBhdGg6IHN0cmluZyBwYXRoIGluIHF1ZXN0aW9uLgoKICAgIFJldHVybnM6IGludCBzaXplIG9mIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBGaWxlU3lzdGVtLgoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBwYXRoIGRvZXNuJ3QgZXhpc3QuCiAgICAiIiIKICAgIHRyeToKICAgICAgcmV0dXJuIG9zLnBhdGguZ2V0c2l6ZShwYXRoKQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJTaXplIG9wZXJhdGlvbiBmYWlsZWQiLCB7cGF0aDogZX0pCgogIGRlZiBsYXN0X3VwZGF0ZWQoc2VsZiwgcGF0aCk6CiAgICAiIiJHZXQgVU5JWCBFcG9jaCB0aW1lIGluIHNlY29uZHMgb24gdGhlIEZpbGVTeXN0ZW0uCgogICAgQXJnczoKICAgICAgcGF0aDogc3RyaW5nIHBhdGggb2YgZmlsZS4KCiAgICBSZXR1cm5zOiBmbG9hdCBVTklYIEVwb2NoIHRpbWUKCiAgICBSYWlzZXM6CiAgICAgIGBgQmVhbUlPRXJyb3JgYDogaWYgcGF0aCBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5leGlzdHMocGF0aCk6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdQYXRoIGRvZXMgbm90IGV4aXN0OiAlcycgJSBwYXRoKQogICAgcmV0dXJuIG9zLnBhdGguZ2V0bXRpbWUocGF0aCkKCiAgZGVmIGNoZWNrc3VtKHNlbGYsIHBhdGgpOgogICAgIiIiRmV0Y2ggY2hlY2tzdW0gbWV0YWRhdGEgb2YgYSBmaWxlIG9uIHRoZQogICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5GaWxlU3lzdGVtYC4KCiAgICBBcmdzOgogICAgICBwYXRoOiBzdHJpbmcgcGF0aCBvZiBhIGZpbGUuCgogICAgUmV0dXJuczogc3RyaW5nIGNvbnRhaW5pbmcgZmlsZSBzaXplLgoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBwYXRoIGlzbid0IGEgZmlsZSBvciBkb2Vzbid0IGV4aXN0LgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5leGlzdHMocGF0aCk6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCdQYXRoIGRvZXMgbm90IGV4aXN0OiAlcycgJSBwYXRoKQogICAgcmV0dXJuIHN0cihvcy5wYXRoLmdldHNpemUocGF0aCkpCgogIGRlZiBkZWxldGUoc2VsZiwgcGF0aHMpOgogICAgIiIiRGVsZXRlcyBmaWxlcyBvciBkaXJlY3RvcmllcyBhdCB0aGUgcHJvdmlkZWQgcGF0aHMuCiAgICBEaXJlY3RvcmllcyB3aWxsIGJlIGRlbGV0ZWQgcmVjdXJzaXZlbHkuCgogICAgQXJnczoKICAgICAgcGF0aHM6IGxpc3Qgb2YgcGF0aHMgdGhhdCBnaXZlIHRoZSBmaWxlIG9iamVjdHMgdG8gYmUgZGVsZXRlZAoKICAgIFJhaXNlczoKICAgICAgYGBCZWFtSU9FcnJvcmBgOiBpZiBhbnkgb2YgdGhlIGRlbGV0ZSBvcGVyYXRpb25zIGZhaWwKICAgICIiIgogICAgZGVmIF9kZWxldGVfcGF0aChwYXRoKToKICAgICAgIiIiUmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBhdCB0aGUgcHJvdmlkZWQgcGF0aC4KICAgICAgIiIiCiAgICAgIHRyeToKICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQogICAgICAgIGVsc2U6CiAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgIHJhaXNlIElPRXJyb3IoZXJyKQoKICAgIGV4Y2VwdGlvbnMgPSB7fQoKICAgIGRlZiB0cnlfZGVsZXRlKHBhdGgpOgogICAgICB0cnk6CiAgICAgICAgX2RlbGV0ZV9wYXRoKHBhdGgpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICMgcHlsaW50OiBkaXNhYmxlPWJyb2FkLWV4Y2VwdAogICAgICAgIGV4Y2VwdGlvbnNbcGF0aF0gPSBlCgogICAgZm9yIG1hdGNoX3Jlc3VsdCBpbiBzZWxmLm1hdGNoKHBhdGhzKToKICAgICAgbWV0YWRhdGFfbGlzdCA9IG1hdGNoX3Jlc3VsdC5tZXRhZGF0YV9saXN0CgogICAgICBpZiBub3QgbWV0YWRhdGFfbGlzdDoKICAgICAgICBleGNlcHRpb25zW21hdGNoX3Jlc3VsdC5wYXR0ZXJuXSA9IFwKICAgICAgICAgIElPRXJyb3IoJ05vIGZpbGVzIGZvdW5kIHRvIGRlbGV0ZSB1bmRlcjogJXMnICUgbWF0Y2hfcmVzdWx0LnBhdHRlcm4pCgogICAgICBmb3IgbWV0YWRhdGEgaW4gbWF0Y2hfcmVzdWx0Lm1ldGFkYXRhX2xpc3Q6CiAgICAgICAgdHJ5X2RlbGV0ZShtZXRhZGF0YS5wYXRoKQoKICAgIGlmIGV4Y2VwdGlvbnM6CiAgICAgIHJhaXNlIEJlYW1JT0Vycm9yKCJEZWxldGUgb3BlcmF0aW9uIGZhaWxlZCIsIGV4Y2VwdGlvbnMpCpR9lCiMFkxvY2FsRmlsZVN5c3RlbS5zY2hlbWWUalYxAQBLKUsth5SMFExvY2FsRmlsZVN5c3RlbS5qb2lulGpWMQEASy9LOIeUjBVMb2NhbEZpbGVTeXN0ZW0uc3BsaXSUalYxAQBLOktFh5SMFkxvY2FsRmlsZVN5c3RlbS5ta2RpcnOUalYxAQBLR0tTh5SMGExvY2FsRmlsZVN5c3RlbS5oYXNfZGlyc5RqVjEBAEtVS1eHlIwcTG9jYWxGaWxlU3lzdGVtLl91cmxfZGlybmFtZZRqVjEBAEtZS2KHlIwVTG9jYWxGaWxlU3lzdGVtLl9saXN0lGpWMQEAS2RLg4eUjBpMb2NhbEZpbGVTeXN0ZW0uX3BhdGhfb3BlbpRqVjEBAEuFS5KHlIwWTG9jYWxGaWxlU3lzdGVtLmNyZWF0ZZRqVjEBAEuUS6SHlIwUTG9jYWxGaWxlU3lzdGVtLm9wZW6UalYxAQBLpku2h5SMFExvY2FsRmlsZVN5c3RlbS5jb3B5lGpWMQEAS7hL34eUjBZMb2NhbEZpbGVTeXN0ZW0ucmVuYW1llGpWMQEAS+FNAAGHlIwWTG9jYWxGaWxlU3lzdGVtLmV4aXN0c5RqVjEBAE0CAU0KAYeUjBRMb2NhbEZpbGVTeXN0ZW0uc2l6ZZRqVjEBAE0MAU0aAYeUjBxMb2NhbEZpbGVTeXN0ZW0ubGFzdF91cGRhdGVklGpWMQEATRwBTSkBh5SMGExvY2FsRmlsZVN5c3RlbS5jaGVja3N1bZRqVjEBAE0rAU05AYeUjBZMb2NhbEZpbGVTeXN0ZW0uZGVsZXRllGpWMQEATTsBTWMBh5SMD0xvY2FsRmlsZVN5c3RlbZRqXTEBAEsmTWMBh5R1fZQojA9Mb2NhbEZpbGVTeXN0ZW2UaqoDAACMFkxvY2FsRmlsZVN5c3RlbS5zY2hlbWWUaqoDAACMFExvY2FsRmlsZVN5c3RlbS5qb2lulGqqAwAAjBVMb2NhbEZpbGVTeXN0ZW0uc3BsaXSUaqoDAACMFkxvY2FsRmlsZVN5c3RlbS5ta2RpcnOUaqoDAACMGExvY2FsRmlsZVN5c3RlbS5oYXNfZGlyc5RqqgMAAIwWTG9jYWxGaWxlU3lzdGVtLmNyZWF0ZZRqqgMAAIwUTG9jYWxGaWxlU3lzdGVtLm9wZW6UaqoDAACMFExvY2FsRmlsZVN5c3RlbS5jb3B5lGqqAwAAjBZMb2NhbEZpbGVTeXN0ZW0ucmVuYW1llGqqAwAAjBZMb2NhbEZpbGVTeXN0ZW0uZXhpc3RzlGqqAwAAjBRMb2NhbEZpbGVTeXN0ZW0uc2l6ZZRqqgMAAIwcTG9jYWxGaWxlU3lzdGVtLmxhc3RfdXBkYXRlZJRqqgMAAIwYTG9jYWxGaWxlU3lzdGVtLmNoZWNrc3VtlGqqAwAAjBZMb2NhbEZpbGVTeXN0ZW0uZGVsZXRllGqqAwAAdYweYXBhY2hlX2JlYW0uaW8ubG9jYWxmaWxlc3lzdGVtlHSUjBhhcGFjaGVfYmVhbS5pby5tb25nb2RiaW+UKFgvRwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIElPIGNsYXNzZXMgdG8gcmVhZCBhbmQgd3JpdGUgZGF0YSBvbiBNb25nb0RCLgoKClJlYWQgZnJvbSBNb25nb0RCCi0tLS0tLS0tLS0tLS0tLS0tCjpjbGFzczpgUmVhZEZyb21Nb25nb0RCYCBpcyBhIGBgUFRyYW5zZm9ybWBgIHRoYXQgcmVhZHMgZnJvbSBhIGNvbmZpZ3VyZWQKTW9uZ29EQiBzb3VyY2UgYW5kIHJldHVybnMgYSBgYFBDb2xsZWN0aW9uYGAgb2YgZGljdCByZXByZXNlbnRpbmcgTW9uZ29EQgpkb2N1bWVudHMuClRvIGNvbmZpZ3VyZSBNb25nb0RCIHNvdXJjZSwgdGhlIFVSSSB0byBjb25uZWN0IHRvIE1vbmdvREIgc2VydmVyLCBkYXRhYmFzZQpuYW1lLCBjb2xsZWN0aW9uIG5hbWUgbmVlZHMgdG8gYmUgcHJvdmlkZWQuCgpFeGFtcGxlIHVzYWdlOjoKCiAgcGlwZWxpbmUgfCBSZWFkRnJvbU1vbmdvREIodXJpPSdtb25nb2RiOi8vbG9jYWxob3N0OjI3MDE3JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYj0ndGVzdGRiJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsPSdpbnB1dCcpCgoKV3JpdGUgdG8gTW9uZ29EQjoKLS0tLS0tLS0tLS0tLS0tLS0KOmNsYXNzOmBXcml0ZVRvTW9uZ29EQmAgaXMgYSBgYFBUcmFuc2Zvcm1gYCB0aGF0IHdyaXRlcyBNb25nb0RCIGRvY3VtZW50cyB0bwpjb25maWd1cmVkIHNpbmssIGFuZCB0aGUgd3JpdGUgaXMgY29uZHVjdGVkIHRocm91Z2ggYSBtb25nb2RiIGJ1bGtfd3JpdGUgb2YKYGBSZXBsYWNlT25lYGAgb3BlcmF0aW9ucy4gSWYgdGhlIGRvY3VtZW50J3MgX2lkIGZpZWxkIGFscmVhZHkgZXhpc3RlZCBpbiB0aGUKTW9uZ29EQiBjb2xsZWN0aW9uLCBpdCByZXN1bHRzIGluIGFuIG92ZXJ3cml0ZSwgb3RoZXJ3aXNlLCBhIG5ldyBkb2N1bWVudAp3aWxsIGJlIGluc2VydGVkLgoKRXhhbXBsZSB1c2FnZTo6CgogIHBpcGVsaW5lIHwgV3JpdGVUb01vbmdvREIodXJpPSdtb25nb2RiOi8vbG9jYWxob3N0OjI3MDE3JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiPSd0ZXN0ZGInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbD0nb3V0cHV0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoX3NpemU9MTApCgoKTm8gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiBFdmVyeXRoaW5nIGluIHRoaXMgbW9kdWxlIGlzIGV4cGVyaW1lbnRhbC4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgc3RydWN0CgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKZnJvbSBhcGFjaGVfYmVhbS5pby5yYW5nZV90cmFja2VycyBpbXBvcnQgT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBSZXNodWZmbGUKZnJvbSBhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucyBpbXBvcnQgZXhwZXJpbWVudGFsCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgp0cnk6CiAgIyBNb25nb2RiIGhhcyBpdHMgb3duIGJ1bmRsZWQgYnNvbiwgd2hpY2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCBic29uIHBha2NhZ2UuCiAgIyAoaHR0cHM6Ly9naXRodWIuY29tL3B5LWJzb24vYnNvbi9pc3N1ZXMvODIpLiBUcnkgdG8gaW1wb3J0IG9iamVjdGlkIGFuZCBpZgogICMgaXQgZmFpbHMgYmVjYXVzZSBic29uIHBhY2thZ2UgaXMgaW5zdGFsbGVkLCBNb25nb0RCIElPIHdpbGwgbm90IHdvcmsgYnV0IGF0CiAgIyBsZWFzdCByZXN0IG9mIHRoZSBTREsgd2lsbCB3b3JrLgogIGZyb20gYnNvbiBpbXBvcnQgb2JqZWN0aWQKCiAgIyBweW1vbmdvIGFsc28gaW50ZXJuYWxseSBkZXBlbmRzIG9uIGJzb24uCiAgZnJvbSBweW1vbmdvIGltcG9ydCBBU0NFTkRJTkcKICBmcm9tIHB5bW9uZ28gaW1wb3J0IERFU0NFTkRJTkcKICBmcm9tIHB5bW9uZ28gaW1wb3J0IE1vbmdvQ2xpZW50CiAgZnJvbSBweW1vbmdvIGltcG9ydCBSZXBsYWNlT25lCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBvYmplY3RpZCA9IE5vbmUKICBfTE9HR0VSLndhcm5pbmcoIkNvdWxkIG5vdCBmaW5kIGEgY29tcGF0aWJsZSBic29uIHBhY2thZ2UuIikKCl9fYWxsX18gPSBbJ1JlYWRGcm9tTW9uZ29EQicsICdXcml0ZVRvTW9uZ29EQiddCgoKQGV4cGVyaW1lbnRhbCgpCmNsYXNzIFJlYWRGcm9tTW9uZ29EQihQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZnJvbWBgIHRvIHJlYWQgTW9uZ29EQiBkb2N1bWVudHMgaW50byBhIGBgUENvbGxlY3Rpb25gYC4KICAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIHVyaT0nbW9uZ29kYjovL2xvY2FsaG9zdDoyNzAxNycsCiAgICAgIGRiPU5vbmUsCiAgICAgIGNvbGw9Tm9uZSwKICAgICAgZmlsdGVyPU5vbmUsCiAgICAgIHByb2plY3Rpb249Tm9uZSwKICAgICAgZXh0cmFfY2xpZW50X3BhcmFtcz1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSA6Y2xhc3M6YFJlYWRGcm9tTW9uZ29EQmAKCiAgICBBcmdzOgogICAgICB1cmkgKHN0cik6IFRoZSBNb25nb0RCIGNvbm5lY3Rpb24gc3RyaW5nIGZvbGxvd2luZyB0aGUgVVJJIGZvcm1hdAogICAgICBkYiAoc3RyKTogVGhlIE1vbmdvREIgZGF0YWJhc2UgbmFtZQogICAgICBjb2xsIChzdHIpOiBUaGUgTW9uZ29EQiBjb2xsZWN0aW9uIG5hbWUKICAgICAgZmlsdGVyOiBBIGBic29uLlNPTgogICAgICAgIDxodHRwczovL2FwaS5tb25nb2RiLmNvbS9weXRob24vY3VycmVudC9hcGkvYnNvbi9zb24uaHRtbD5gXyBvYmplY3QKICAgICAgICBzcGVjaWZ5aW5nIGVsZW1lbnRzIHdoaWNoIG11c3QgYmUgcHJlc2VudCBmb3IgYSBkb2N1bWVudCB0byBiZSBpbmNsdWRlZAogICAgICAgIGluIHRoZSByZXN1bHQgc2V0CiAgICAgIHByb2plY3Rpb246IEEgbGlzdCBvZiBmaWVsZCBuYW1lcyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0CiAgICAgICAgc2V0IG9yIGEgZGljdCBzcGVjaWZ5aW5nIHRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlCiAgICAgIGV4dHJhX2NsaWVudF9wYXJhbXMoZGljdCk6IE9wdGlvbmFsIGBNb25nb0NsaWVudAogICAgICAgIDxodHRwczovL2FwaS5tb25nb2RiLmNvbS9weXRob24vY3VycmVudC9hcGkvcHltb25nby9tb25nb19jbGllbnQuaHRtbD5gXwogICAgICAgIHBhcmFtZXRlcnMKCiAgICBSZXR1cm5zOgogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybWAKCiAgICAiIiIKICAgIGlmIGV4dHJhX2NsaWVudF9wYXJhbXMgaXMgTm9uZToKICAgICAgZXh0cmFfY2xpZW50X3BhcmFtcyA9IHt9CiAgICBpZiBub3QgaXNpbnN0YW5jZShkYiwgc3RyKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmVhZEZyb21Nb25nREIgZGIgcGFyYW0gbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBzdHJpbmcnKQogICAgaWYgbm90IGlzaW5zdGFuY2UoY29sbCwgc3RyKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdSZWFkRnJvbU1vbmdEQiBjb2xsIHBhcmFtIG11c3QgYmUgc3BlY2lmaWVkIGFzIGEgJwogICAgICAgICAgJ3N0cmluZycpCiAgICBzZWxmLl9tb25nb19zb3VyY2UgPSBfQm91bmRlZE1vbmdvU291cmNlKAogICAgICAgIHVyaT11cmksCiAgICAgICAgZGI9ZGIsCiAgICAgICAgY29sbD1jb2xsLAogICAgICAgIGZpbHRlcj1maWx0ZXIsCiAgICAgICAgcHJvamVjdGlvbj1wcm9qZWN0aW9uLAogICAgICAgIGV4dHJhX2NsaWVudF9wYXJhbXM9ZXh0cmFfY2xpZW50X3BhcmFtcykKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBpb2Jhc2UuUmVhZChzZWxmLl9tb25nb19zb3VyY2UpCgoKY2xhc3MgX0JvdW5kZWRNb25nb1NvdXJjZShpb2Jhc2UuQm91bmRlZFNvdXJjZSk6CiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICB1cmk9Tm9uZSwKICAgICAgZGI9Tm9uZSwKICAgICAgY29sbD1Ob25lLAogICAgICBmaWx0ZXI9Tm9uZSwKICAgICAgcHJvamVjdGlvbj1Ob25lLAogICAgICBleHRyYV9jbGllbnRfcGFyYW1zPU5vbmUpOgogICAgaWYgZXh0cmFfY2xpZW50X3BhcmFtcyBpcyBOb25lOgogICAgICBleHRyYV9jbGllbnRfcGFyYW1zID0ge30KICAgIGlmIGZpbHRlciBpcyBOb25lOgogICAgICBmaWx0ZXIgPSB7fQogICAgc2VsZi51cmkgPSB1cmkKICAgIHNlbGYuZGIgPSBkYgogICAgc2VsZi5jb2xsID0gY29sbAogICAgc2VsZi5maWx0ZXIgPSBmaWx0ZXIKICAgIHNlbGYucHJvamVjdGlvbiA9IHByb2plY3Rpb24KICAgIHNlbGYuc3BlYyA9IGV4dHJhX2NsaWVudF9wYXJhbXMKCiAgZGVmIGVzdGltYXRlX3NpemUoc2VsZik6CiAgICB3aXRoIE1vbmdvQ2xpZW50KHNlbGYudXJpLCAqKnNlbGYuc3BlYykgYXMgY2xpZW50OgogICAgICByZXR1cm4gY2xpZW50W3NlbGYuZGJdLmNvbW1hbmQoJ2NvbGxzdGF0cycsIHNlbGYuY29sbCkuZ2V0KCdzaXplJykKCiAgZGVmIHNwbGl0KHNlbGYsIGRlc2lyZWRfYnVuZGxlX3NpemUsIHN0YXJ0X3Bvc2l0aW9uPU5vbmUsIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgICBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbiA9IHNlbGYuX3JlcGxhY2Vfbm9uZV9wb3NpdGlvbnMoCiAgICAgICAgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCgogICAgZGVzaXJlZF9idW5kbGVfc2l6ZV9pbl9tYiA9IGRlc2lyZWRfYnVuZGxlX3NpemUgLy8gMTAyNCAvLyAxMDI0CiAgICBzcGxpdF9rZXlzID0gc2VsZi5fZ2V0X3NwbGl0X2tleXMoCiAgICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZV9pbl9tYiwgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCgogICAgYnVuZGxlX3N0YXJ0ID0gc3RhcnRfcG9zaXRpb24KICAgIGZvciBzcGxpdF9rZXlfaWQgaW4gc3BsaXRfa2V5czoKICAgICAgaWYgYnVuZGxlX3N0YXJ0ID49IHN0b3BfcG9zaXRpb246CiAgICAgICAgYnJlYWsKICAgICAgYnVuZGxlX2VuZCA9IG1pbihzdG9wX3Bvc2l0aW9uLCBzcGxpdF9rZXlfaWRbJ19pZCddKQogICAgICB5aWVsZCBpb2Jhc2UuU291cmNlQnVuZGxlKAogICAgICAgICAgd2VpZ2h0PWRlc2lyZWRfYnVuZGxlX3NpemVfaW5fbWIsCiAgICAgICAgICBzb3VyY2U9c2VsZiwKICAgICAgICAgIHN0YXJ0X3Bvc2l0aW9uPWJ1bmRsZV9zdGFydCwKICAgICAgICAgIHN0b3BfcG9zaXRpb249YnVuZGxlX2VuZCkKICAgICAgYnVuZGxlX3N0YXJ0ID0gYnVuZGxlX2VuZAogICAgIyBhZGQgcmFuZ2Ugb2YgbGFzdCBzcGxpdF9rZXkgdG8gc3RvcF9wb3NpdGlvbgogICAgaWYgYnVuZGxlX3N0YXJ0IDwgc3RvcF9wb3NpdGlvbjoKICAgICAgeWllbGQgaW9iYXNlLlNvdXJjZUJ1bmRsZSgKICAgICAgICAgIHdlaWdodD1kZXNpcmVkX2J1bmRsZV9zaXplX2luX21iLAogICAgICAgICAgc291cmNlPXNlbGYsCiAgICAgICAgICBzdGFydF9wb3NpdGlvbj1idW5kbGVfc3RhcnQsCiAgICAgICAgICBzdG9wX3Bvc2l0aW9uPXN0b3BfcG9zaXRpb24pCgogIGRlZiBnZXRfcmFuZ2VfdHJhY2tlcihzZWxmLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbik6CiAgICBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbiA9IHNlbGYuX3JlcGxhY2Vfbm9uZV9wb3NpdGlvbnMoCiAgICAgICAgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCiAgICByZXR1cm4gX09iamVjdElkUmFuZ2VUcmFja2VyKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKQoKICBkZWYgcmVhZChzZWxmLCByYW5nZV90cmFja2VyKToKICAgIHdpdGggTW9uZ29DbGllbnQoc2VsZi51cmksICoqc2VsZi5zcGVjKSBhcyBjbGllbnQ6CiAgICAgIGFsbF9maWx0ZXJzID0gc2VsZi5fbWVyZ2VfaWRfZmlsdGVyKHJhbmdlX3RyYWNrZXIpCiAgICAgIGRvY3NfY3Vyc29yID0gY2xpZW50W3NlbGYuZGJdW3NlbGYuY29sbF0uZmluZChmaWx0ZXI9YWxsX2ZpbHRlcnMpLnNvcnQoWwogICAgICAgICAgKCdfaWQnLCBBU0NFTkRJTkcpCiAgICAgIF0pCiAgICAgIGZvciBkb2MgaW4gZG9jc19jdXJzb3I6CiAgICAgICAgaWYgbm90IHJhbmdlX3RyYWNrZXIudHJ5X2NsYWltKGRvY1snX2lkJ10pOgogICAgICAgICAgcmV0dXJuCiAgICAgICAgeWllbGQgZG9jCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXMgPSBzdXBlcihfQm91bmRlZE1vbmdvU291cmNlLCBzZWxmKS5kaXNwbGF5X2RhdGEoKQogICAgcmVzWyd1cmknXSA9IHNlbGYudXJpCiAgICByZXNbJ2RhdGFiYXNlJ10gPSBzZWxmLmRiCiAgICByZXNbJ2NvbGxlY3Rpb24nXSA9IHNlbGYuY29sbAogICAgcmVzWydmaWx0ZXInXSA9IGpzb24uZHVtcHMoc2VsZi5maWx0ZXIpCiAgICByZXNbJ3Byb2plY3Rpb24nXSA9IHN0cihzZWxmLnByb2plY3Rpb24pCiAgICByZXNbJ21vbmdvX2NsaWVudF9zcGVjJ10gPSBqc29uLmR1bXBzKHNlbGYuc3BlYykKICAgIHJldHVybiByZXMKCiAgZGVmIF9nZXRfc3BsaXRfa2V5cyhzZWxmLCBkZXNpcmVkX2NodW5rX3NpemVfaW5fbWIsIHN0YXJ0X3BvcywgZW5kX3Bvcyk6CiAgICAjIGNhbGxzIG1vbmdvZGIgc3BsaXRWZWN0b3IgY29tbWFuZCB0byBnZXQgZG9jdW1lbnQgaWRzIGF0IHNwbGl0IHBvc2l0aW9uCiAgICAjIGZvciBkZXNpcmVkIGJ1bmRsZSBzaXplLCBpZiBkZXNpcmVkIGNodW5rIHNpemUgc21hbGxlciB0aGFuIDFtYiwgdXNlCiAgICAjIG1vbmdvZGIgZGVmYXVsdCBzcGxpdCBzaXplIG9mIDFtYi4KICAgIGlmIGRlc2lyZWRfY2h1bmtfc2l6ZV9pbl9tYiA8IDE6CiAgICAgIGRlc2lyZWRfY2h1bmtfc2l6ZV9pbl9tYiA9IDEKICAgIGlmIHN0YXJ0X3BvcyA+PSBlbmRfcG9zOgogICAgICAjIHNpbmdsZSBkb2N1bWVudCBub3Qgc3BsaXR0YWJsZQogICAgICByZXR1cm4gW10KICAgIHdpdGggTW9uZ29DbGllbnQoc2VsZi51cmksICoqc2VsZi5zcGVjKSBhcyBjbGllbnQ6CiAgICAgIG5hbWVfc3BhY2UgPSAnJXMuJXMnICUgKHNlbGYuZGIsIHNlbGYuY29sbCkKICAgICAgcmV0dXJuIChjbGllbnRbc2VsZi5kYl0uY29tbWFuZCgKICAgICAgICAgICdzcGxpdFZlY3RvcicsCiAgICAgICAgICBuYW1lX3NwYWNlLAogICAgICAgICAga2V5UGF0dGVybj17J19pZCc6IDF9LCAgIyBBc2NlbmRpbmcgaW5kZXgKICAgICAgICAgIG1pbj17J19pZCc6IHN0YXJ0X3Bvc30sCiAgICAgICAgICBtYXg9eydfaWQnOiBlbmRfcG9zfSwKICAgICAgICAgIG1heENodW5rU2l6ZT1kZXNpcmVkX2NodW5rX3NpemVfaW5fbWIpWydzcGxpdEtleXMnXSkKCiAgZGVmIF9tZXJnZV9pZF9maWx0ZXIoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICAjIE1lcmdlIHRoZSBkZWZhdWx0IGZpbHRlciB3aXRoIHJlZmluZWQgX2lkIGZpZWxkIHJhbmdlIG9mIHJhbmdlX3RyYWNrZXIuCiAgICAjIHNlZSBtb3JlIGF0IGh0dHBzOi8vZG9jcy5tb25nb2RiLmNvbS9tYW51YWwvcmVmZXJlbmNlL29wZXJhdG9yL3F1ZXJ5L2FuZC8KICAgIGFsbF9maWx0ZXJzID0gewogICAgICAgICckYW5kJzogWwogICAgICAgICAgICBzZWxmLmZpbHRlci5jb3B5KCksCiAgICAgICAgICAgICMgYWRkIGFkZGl0aW9uYWwgcmFuZ2UgZmlsdGVyIHRvIHF1ZXJ5LiAkZ3RlIHNwZWNpZmllcyBzdGFydAogICAgICAgICAgICAjIHBvc2l0aW9uKGluY2x1c2l2ZSkgYW5kICRsdCBzcGVjaWZpZXMgdGhlIGVuZCBwb3NpdGlvbihleGNsdXNpdmUpLAogICAgICAgICAgICAjIHNlZSBtb3JlIGF0CiAgICAgICAgICAgICMgaHR0cHM6Ly9kb2NzLm1vbmdvZGIuY29tL21hbnVhbC9yZWZlcmVuY2Uvb3BlcmF0b3IvcXVlcnkvZ3RlLyBhbmQKICAgICAgICAgICAgIyBodHRwczovL2RvY3MubW9uZ29kYi5jb20vbWFudWFsL3JlZmVyZW5jZS9vcGVyYXRvci9xdWVyeS9sdC8KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ19pZCc6IHsKICAgICAgICAgICAgICAgICAgICAnJGd0ZSc6IHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAnJGx0JzogcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICBdCiAgICB9CgogICAgcmV0dXJuIGFsbF9maWx0ZXJzCgogIGRlZiBfZ2V0X2hlYWRfZG9jdW1lbnRfaWQoc2VsZiwgc29ydF9vcmRlcik6CiAgICB3aXRoIE1vbmdvQ2xpZW50KHNlbGYudXJpLCAqKnNlbGYuc3BlYykgYXMgY2xpZW50OgogICAgICBjdXJzb3IgPSBjbGllbnRbc2VsZi5kYl1bc2VsZi5jb2xsXS5maW5kKAogICAgICAgICAgZmlsdGVyPXt9LCBwcm9qZWN0aW9uPVtdKS5zb3J0KFsoJ19pZCcsIHNvcnRfb3JkZXIpXSkubGltaXQoMSkKICAgICAgdHJ5OgogICAgICAgIHJldHVybiBjdXJzb3JbMF1bJ19pZCddCiAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VtcHR5IE1vbmdvZGIgY29sbGVjdGlvbicpCgogIGRlZiBfcmVwbGFjZV9ub25lX3Bvc2l0aW9ucyhzZWxmLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbik6CiAgICBpZiBzdGFydF9wb3NpdGlvbiBpcyBOb25lOgogICAgICBzdGFydF9wb3NpdGlvbiA9IHNlbGYuX2dldF9oZWFkX2RvY3VtZW50X2lkKEFTQ0VORElORykKICAgIGlmIHN0b3BfcG9zaXRpb24gaXMgTm9uZToKICAgICAgbGFzdF9kb2NfaWQgPSBzZWxmLl9nZXRfaGVhZF9kb2N1bWVudF9pZChERVNDRU5ESU5HKQogICAgICAjIGluY3JlbWVudCBsYXN0IGRvYyBpZCBiaW5hcnkgdmFsdWUgYnkgMSB0byBtYWtlIHN1cmUgdGhlIGxhc3QgZG9jdW1lbnQKICAgICAgIyBpcyBub3QgZXhjbHVkZWQKICAgICAgc3RvcF9wb3NpdGlvbiA9IF9PYmplY3RJZEhlbHBlci5pbmNyZW1lbnRfaWQobGFzdF9kb2NfaWQsIDEpCiAgICByZXR1cm4gc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24KCgpjbGFzcyBfT2JqZWN0SWRIZWxwZXIob2JqZWN0KToKICAiIiJBIFV0aWxpdHkgY2xhc3MgdG8gbWFuaXB1bGF0ZSBic29uIG9iamVjdCBpZHMuIiIiCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGlkX3RvX2ludChjbHMsIGlkKToKICAgICIiIgogICAgQXJnczoKICAgICAgaWQ6IE9iamVjdElkIHJlcXVpcmVkIGZvciBlYWNoIE1vbmdvREIgZG9jdW1lbnQgX2lkIGZpZWxkLgoKICAgIFJldHVybnM6IENvbnZlcnRlZCBpbnRlZ2VyIHZhbHVlIG9mIE9iamVjdElkJ3MgMTIgYnl0ZXMgYmluYXJ5IHZhbHVlLgoKICAgICIiIgogICAgIyBjb252ZXJ0cyBvYmplY3QgaWQgYmluYXJ5IHRvIGludGVnZXIKICAgICMgaWQgb2JqZWN0IGlzIGJ5dGVzIHR5cGUgd2l0aCBzaXplIG9mIDEyCiAgICBpbnRzID0gc3RydWN0LnVucGFjaygnPklJSScsIGlkLmJpbmFyeSkKICAgIHJldHVybiAoaW50c1swXSA8PCA2NCkgKyAoaW50c1sxXSA8PCAzMikgKyBpbnRzWzJdCgogIEBjbGFzc21ldGhvZAogIGRlZiBpbnRfdG9faWQoY2xzLCBudW1iZXIpOgogICAgIiIiCiAgICBBcmdzOgogICAgICBudW1iZXIoaW50KTogVGhlIGludGVnZXIgdmFsdWUgdG8gYmUgdXNlZCB0byBjb252ZXJ0IHRvIE9iamVjdElkLgoKICAgIFJldHVybnM6IFRoZSBPYmplY3RJZCB0aGF0IGhhcyB0aGUgMTIgYnl0ZXMgYmluYXJ5IGNvbnZlcnRlZCBmcm9tIHRoZQogICAgICBpbnRlZ2VyIHZhbHVlLgoKICAgICIiIgogICAgIyBjb252ZXJ0cyBpbnRlZ2VyIHZhbHVlIHRvIG9iamVjdCBpZC4gSW50IHZhbHVlIHNob3VsZCBiZSBsZXNzIHRoYW4KICAgICMgKDIgXiA5Nikgc28gaXQgY2FuIGJlIGNvbnZlcnQgdG8gMTIgYnl0ZXMgcmVxdWlyZWQgYnkgb2JqZWN0IGlkLgogICAgaWYgbnVtYmVyIDwgMCBvciBudW1iZXIgPj0gKDEgPDwgOTYpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdudW1iZXIgdmFsdWUgbXVzdCBiZSB3aXRoaW4gWzAsICVzKScgJSAoMSA8PCA5NikpCiAgICBpbnRzID0gWyhudW1iZXIgJiAweGZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMCkgPj4gNjQsCiAgICAgICAgICAgIChudW1iZXIgJiAweDAwMDAwMDAwZmZmZmZmZmYwMDAwMDAwMCkgPj4gMzIsCiAgICAgICAgICAgIG51bWJlciAmIDB4MDAwMDAwMDAwMDAwMDAwMGZmZmZmZmZmXQoKICAgIGJ5dGVzID0gc3RydWN0LnBhY2soJz5JSUknLCAqaW50cykKICAgIHJldHVybiBvYmplY3RpZC5PYmplY3RJZChieXRlcykKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGluY3JlbWVudF9pZChjbHMsIG9iamVjdF9pZCwgaW5jKToKICAgICIiIgogICAgQXJnczoKICAgICAgb2JqZWN0X2lkOiBUaGUgT2JqZWN0SWQgdG8gY2hhbmdlLgogICAgICBpbmMoaW50KTogVGhlIGluY3JlbWVudGFsIGludCB2YWx1ZSB0byBiZSBhZGRlZCB0byBPYmplY3RJZC4KCiAgICBSZXR1cm5zOgoKICAgICIiIgogICAgIyBpbmNyZW1lbnQgb2JqZWN0X2lkIGJpbmFyeSB2YWx1ZSBieSBpbmMgdmFsdWUgYW5kIHJldHVybiBuZXcgb2JqZWN0IGlkLgogICAgaWRfbnVtYmVyID0gX09iamVjdElkSGVscGVyLmlkX3RvX2ludChvYmplY3RfaWQpCiAgICBuZXdfbnVtYmVyID0gaWRfbnVtYmVyICsgaW5jCiAgICBpZiBuZXdfbnVtYmVyIDwgMCBvciBuZXdfbnVtYmVyID49ICgxIDw8IDk2KToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdpbnZhbGlkIGluY3JlbWVudGFsLCBpbmMgdmFsdWUgbXVzdCBiZSB3aXRoaW4gWycKICAgICAgICAgICclcywgJXMpJyAlICgwIC0gaWRfbnVtYmVyLCAxIDw8IDk2IC0gaWRfbnVtYmVyKSkKICAgIHJldHVybiBfT2JqZWN0SWRIZWxwZXIuaW50X3RvX2lkKG5ld19udW1iZXIpCgoKY2xhc3MgX09iamVjdElkUmFuZ2VUcmFja2VyKE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlcik6CiAgIiIiUmFuZ2VUcmFja2VyIGZvciB0cmFja2luZyBtb25nb2RiIF9pZCBvZiBic29uIE9iamVjdElkIHR5cGUuIiIiCiAgZGVmIHBvc2l0aW9uX3RvX2ZyYWN0aW9uKHNlbGYsIHBvcywgc3RhcnQsIGVuZCk6CiAgICBwb3NfbnVtYmVyID0gX09iamVjdElkSGVscGVyLmlkX3RvX2ludChwb3MpCiAgICBzdGFydF9udW1iZXIgPSBfT2JqZWN0SWRIZWxwZXIuaWRfdG9faW50KHN0YXJ0KQogICAgZW5kX251bWJlciA9IF9PYmplY3RJZEhlbHBlci5pZF90b19pbnQoZW5kKQogICAgcmV0dXJuIChwb3NfbnVtYmVyIC0gc3RhcnRfbnVtYmVyKSAvIChlbmRfbnVtYmVyIC0gc3RhcnRfbnVtYmVyKQoKICBkZWYgZnJhY3Rpb25fdG9fcG9zaXRpb24oc2VsZiwgZnJhY3Rpb24sIHN0YXJ0LCBlbmQpOgogICAgc3RhcnRfbnVtYmVyID0gX09iamVjdElkSGVscGVyLmlkX3RvX2ludChzdGFydCkKICAgIGVuZF9udW1iZXIgPSBfT2JqZWN0SWRIZWxwZXIuaWRfdG9faW50KGVuZCkKICAgIHRvdGFsID0gZW5kX251bWJlciAtIHN0YXJ0X251bWJlcgogICAgcG9zID0gaW50KHRvdGFsICogZnJhY3Rpb24gKyBzdGFydF9udW1iZXIpCiAgICAjIG1ha2Ugc3VyZSBzcGxpdCBwb3NpdGlvbiBpcyBsYXJnZXIgdGhhbiBzdGFydCBwb3NpdGlvbiBhbmQgc21hbGxlciB0aGFuCiAgICAjIGVuZCBwb3NpdGlvbi4KICAgIGlmIHBvcyA8PSBzdGFydF9udW1iZXI6CiAgICAgIHJldHVybiBfT2JqZWN0SWRIZWxwZXIuaW5jcmVtZW50X2lkKHN0YXJ0LCAxKQogICAgaWYgcG9zID49IGVuZF9udW1iZXI6CiAgICAgIHJldHVybiBfT2JqZWN0SWRIZWxwZXIuaW5jcmVtZW50X2lkKGVuZCwgLTEpCiAgICByZXR1cm4gX09iamVjdElkSGVscGVyLmludF90b19pZChwb3MpCgoKQGV4cGVyaW1lbnRhbCgpCmNsYXNzIFdyaXRlVG9Nb25nb0RCKFBUcmFuc2Zvcm0pOgogICIiIldyaXRlVG9Nb25nb0RCIGlzIGEgYGBQVHJhbnNmb3JtYGAgdGhhdCB3cml0ZXMgYSBgYFBDb2xsZWN0aW9uYGAgb2YKICBtb25nb2RiIGRvY3VtZW50IHRvIHRoZSBjb25maWd1cmVkIE1vbmdvREIgc2VydmVyLgoKICBJbiBvcmRlciB0byBtYWtlIHRoZSBkb2N1bWVudCB3cml0ZXMgaWRlbXBvdGVudCBzbyB0aGF0IHRoZSBidW5kbGVzIGFyZQogIHJldHJ5LWFibGUgd2l0aG91dCBjcmVhdGluZyBkdXBsaWNhdGVzLCB0aGUgUFRyYW5zZm9ybSBhZGRlZCAyIHRyYW5zZm9ybWF0aW9ucwogIGJlZm9yZSBmaW5hbCB3cml0ZSBzdGFnZToKICBhIGBgR2VuZXJhdGVJZGBgIHRyYW5zZm9ybSBhbmQgYSBgYFJlc2h1ZmZsZWBgIHRyYW5zZm9ybS46OgoKICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFBpcGVsaW5lIC0tPiAgfEdlbmVyYXRlSWQgLS0+IFJlc2h1ZmZsZSAtLT4gV3JpdGVUb01vbmdvU2lua3wKICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXcml0ZVRvTW9uZ29EQikKCiAgVGhlIGBgR2VuZXJhdGVJZGBgIHRyYW5zZm9ybSBhZGRzIGEgcmFuZG9tIGFuZCB1bmlxdWUqX2lkKiBmaWVsZCB0byB0aGUKICBkb2N1bWVudHMgaWYgdGhleSBkb24ndCBhbHJlYWR5IGhhdmUgb25lLCBpdCB1c2VzIHRoZSBzYW1lIGZvcm1hdCBhcyBNb25nb0RCCiAgZGVmYXVsdC4gVGhlIGBgUmVzaHVmZmxlYGAgdHJhbnNmb3JtIG1ha2VzIHN1cmUgdGhhdCBubyBmdXNpb24gaGFwcGVucyBiZXR3ZWVuCiAgYGBHZW5lcmF0ZUlkYGAgYW5kIHRoZSBmaW5hbCB3cml0ZSBzdGFnZSB0cmFuc2Zvcm0sc28gdGhhdCB0aGUgc2V0IG9mCiAgZG9jdW1lbnRzIGFuZCB0aGVpciB1bmlxdWUgSURzIGFyZSBub3QgcmVnZW5lcmF0ZWQgaWYgZmluYWwgd3JpdGUgc3RlcCBpcwogIHJldHJpZWQgZHVlIHRvIGEgZmFpbHVyZS4gVGhpcyBwcmV2ZW50cyBkdXBsaWNhdGUgd3JpdGVzIG9mIHRoZSBzYW1lIGRvY3VtZW50CiAgd2l0aCBkaWZmZXJlbnQgdW5pcXVlIElEcy4KCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICB1cmk9J21vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTcnLAogICAgICBkYj1Ob25lLAogICAgICBjb2xsPU5vbmUsCiAgICAgIGJhdGNoX3NpemU9MTAwLAogICAgICBleHRyYV9jbGllbnRfcGFyYW1zPU5vbmUpOgogICAgIiIiCgogICAgQXJnczoKICAgICAgdXJpIChzdHIpOiBUaGUgTW9uZ29EQiBjb25uZWN0aW9uIHN0cmluZyBmb2xsb3dpbmcgdGhlIFVSSSBmb3JtYXQKICAgICAgZGIgKHN0cik6IFRoZSBNb25nb0RCIGRhdGFiYXNlIG5hbWUKICAgICAgY29sbCAoc3RyKTogVGhlIE1vbmdvREIgY29sbGVjdGlvbiBuYW1lCiAgICAgIGJhdGNoX3NpemUoaW50KTogTnVtYmVyIG9mIGRvY3VtZW50cyBwZXIgYnVsa193cml0ZSB0byAgTW9uZ29EQiwKICAgICAgICBkZWZhdWx0IHRvIDEwMAogICAgICBleHRyYV9jbGllbnRfcGFyYW1zKGRpY3QpOiBPcHRpb25hbCBgTW9uZ29DbGllbnQKICAgICAgIDxodHRwczovL2FwaS5tb25nb2RiLmNvbS9weXRob24vY3VycmVudC9hcGkvcHltb25nby9tb25nb19jbGllbnQuaHRtbD5gXwogICAgICAgcGFyYW1ldGVycyBhcyBrZXl3b3JkIGFyZ3VtZW50cwoKICAgIFJldHVybnM6CiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYAoKICAgICIiIgogICAgaWYgZXh0cmFfY2xpZW50X3BhcmFtcyBpcyBOb25lOgogICAgICBleHRyYV9jbGllbnRfcGFyYW1zID0ge30KICAgIGlmIG5vdCBpc2luc3RhbmNlKGRiLCBzdHIpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdXcml0ZVRvTW9uZ29EQiBkYiBwYXJhbSBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZycpCiAgICBpZiBub3QgaXNpbnN0YW5jZShjb2xsLCBzdHIpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1dyaXRlVG9Nb25nb0RCIGNvbGwgcGFyYW0gbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSAnCiAgICAgICAgICAnc3RyaW5nJykKICAgIHNlbGYuX3VyaSA9IHVyaQogICAgc2VsZi5fZGIgPSBkYgogICAgc2VsZi5fY29sbCA9IGNvbGwKICAgIHNlbGYuX2JhdGNoX3NpemUgPSBiYXRjaF9zaXplCiAgICBzZWxmLl9zcGVjID0gZXh0cmFfY2xpZW50X3BhcmFtcwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiBwY29sbCBcCiAgICAgICAgICAgfCBiZWFtLlBhckRvKF9HZW5lcmF0ZU9iamVjdElkRm4oKSkgXAogICAgICAgICAgIHwgUmVzaHVmZmxlKCkgXAogICAgICAgICAgIHwgYmVhbS5QYXJEbyhfV3JpdGVNb25nb0ZuKHNlbGYuX3VyaSwgc2VsZi5fZGIsIHNlbGYuX2NvbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hfc2l6ZSwgc2VsZi5fc3BlYykpCgoKY2xhc3MgX0dlbmVyYXRlT2JqZWN0SWRGbihEb0ZuKToKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgIyBpZiBfaWQgZmllbGQgYWxyZWFkeSBleGlzdCB3ZSBrZWVwIGl0IGFzIGl0IGlzLCBvdGhlcndpc2UgdGhlIHB0cmFuc2Zvcm0KICAgICMgZ2VuZXJhdGVzIGEgbmV3IF9pZCBmaWVsZCB0byBhY2hpZXZlIGlkZW1wb3RlbnQgd3JpdGUgdG8gbW9uZ29kYi4KICAgIGlmICdfaWQnIG5vdCBpbiBlbGVtZW50OgogICAgICAjIG9iamVjdC5PYmplY3RJZCgpIGdlbmVyYXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgZm9sbG93cyBtb25nb2RiCiAgICAgICMgZGVmYXVsdCBmb3JtYXQsIGlmIF9pZCBpcyBub3QgcHJlc2VudCBpbiBkb2N1bWVudCwgbW9uZ29kYiBzZXJ2ZXIKICAgICAgIyBnZW5lcmF0ZXMgaXQgd2l0aCB0aGlzIHNhbWUgZnVuY3Rpb24gdXBvbiB3cml0ZS4gSG93ZXZlciB0aGUKICAgICAgIyB1bmlxdWVuZXNzIG9mIGdlbmVyYXRlZCBpZCBtYXkgbm90IGJlIGd1YXJhbnRlZWQgaWYgdGhlIHdvcmsgbG9hZCBhcmUKICAgICAgIyBkaXN0cmlidXRlZCBhY3Jvc3MgdG9vIG1hbnkgcHJvY2Vzc2VzLiBTZWUgbW9yZSBvbiB0aGUgT2JqZWN0SWQgZm9ybWF0CiAgICAgICMgaHR0cHM6Ly9kb2NzLm1vbmdvZGIuY29tL21hbnVhbC9yZWZlcmVuY2UvYnNvbi10eXBlcy8jb2JqZWN0aWQuCiAgICAgIGVsZW1lbnRbJ19pZCddID0gb2JqZWN0aWQuT2JqZWN0SWQoKQoKICAgIHlpZWxkIGVsZW1lbnQKCgpjbGFzcyBfV3JpdGVNb25nb0ZuKERvRm4pOgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgdXJpPU5vbmUsIGRiPU5vbmUsIGNvbGw9Tm9uZSwgYmF0Y2hfc2l6ZT0xMDAsIGV4dHJhX3BhcmFtcz1Ob25lKToKICAgIGlmIGV4dHJhX3BhcmFtcyBpcyBOb25lOgogICAgICBleHRyYV9wYXJhbXMgPSB7fQogICAgc2VsZi51cmkgPSB1cmkKICAgIHNlbGYuZGIgPSBkYgogICAgc2VsZi5jb2xsID0gY29sbAogICAgc2VsZi5zcGVjID0gZXh0cmFfcGFyYW1zCiAgICBzZWxmLmJhdGNoX3NpemUgPSBiYXRjaF9zaXplCiAgICBzZWxmLmJhdGNoID0gW10KCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBzZWxmLl9mbHVzaCgpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICBzZWxmLmJhdGNoLmFwcGVuZChlbGVtZW50KQogICAgaWYgbGVuKHNlbGYuYmF0Y2gpID49IHNlbGYuYmF0Y2hfc2l6ZToKICAgICAgc2VsZi5fZmx1c2goKQoKICBkZWYgX2ZsdXNoKHNlbGYpOgogICAgaWYgbGVuKHNlbGYuYmF0Y2gpID09IDA6CiAgICAgIHJldHVybgogICAgd2l0aCBfTW9uZ29TaW5rKHNlbGYudXJpLCBzZWxmLmRiLCBzZWxmLmNvbGwsIHNlbGYuc3BlYykgYXMgc2luazoKICAgICAgc2luay53cml0ZShzZWxmLmJhdGNoKQogICAgICBzZWxmLmJhdGNoID0gW10KCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJlcyA9IHN1cGVyKF9Xcml0ZU1vbmdvRm4sIHNlbGYpLmRpc3BsYXlfZGF0YSgpCiAgICByZXNbJ3VyaSddID0gc2VsZi51cmkKICAgIHJlc1snZGF0YWJhc2UnXSA9IHNlbGYuZGIKICAgIHJlc1snY29sbGVjdGlvbiddID0gc2VsZi5jb2xsCiAgICByZXNbJ21vbmdvX2NsaWVudF9wYXJhbXMnXSA9IGpzb24uZHVtcHMoc2VsZi5zcGVjKQogICAgcmVzWydiYXRjaF9zaXplJ10gPSBzZWxmLmJhdGNoX3NpemUKICAgIHJldHVybiByZXMKCgpjbGFzcyBfTW9uZ29TaW5rKG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHVyaT1Ob25lLCBkYj1Ob25lLCBjb2xsPU5vbmUsIGV4dHJhX3BhcmFtcz1Ob25lKToKICAgIGlmIGV4dHJhX3BhcmFtcyBpcyBOb25lOgogICAgICBleHRyYV9wYXJhbXMgPSB7fQogICAgc2VsZi51cmkgPSB1cmkKICAgIHNlbGYuZGIgPSBkYgogICAgc2VsZi5jb2xsID0gY29sbAogICAgc2VsZi5zcGVjID0gZXh0cmFfcGFyYW1zCiAgICBzZWxmLmNsaWVudCA9IE5vbmUKCiAgZGVmIHdyaXRlKHNlbGYsIGRvY3VtZW50cyk6CiAgICBpZiBzZWxmLmNsaWVudCBpcyBOb25lOgogICAgICBzZWxmLmNsaWVudCA9IE1vbmdvQ2xpZW50KGhvc3Q9c2VsZi51cmksICoqc2VsZi5zcGVjKQogICAgcmVxdWVzdHMgPSBbXQogICAgZm9yIGRvYyBpbiBkb2N1bWVudHM6CiAgICAgICMgbWF0Y2ggZG9jdW1lbnQgYmFzZWQgb24gX2lkIGZpZWxkLCBpZiBub3QgZm91bmQgaW4gY3VycmVudCBjb2xsZWN0aW9uLAogICAgICAjIGluc2VydCBuZXcgb25lLCBvdGhlcndpc2Ugb3ZlcndyaXRlIGl0LgogICAgICByZXF1ZXN0cy5hcHBlbmQoCiAgICAgICAgICBSZXBsYWNlT25lKAogICAgICAgICAgICAgIGZpbHRlcj17J19pZCc6IGRvYy5nZXQoJ19pZCcsIE5vbmUpfSwKICAgICAgICAgICAgICByZXBsYWNlbWVudD1kb2MsCiAgICAgICAgICAgICAgdXBzZXJ0PVRydWUpKQogICAgcmVzcCA9IHNlbGYuY2xpZW50W3NlbGYuZGJdW3NlbGYuY29sbF0uYnVsa193cml0ZShyZXF1ZXN0cykKICAgIF9MT0dHRVIuZGVidWcoCiAgICAgICAgJ0J1bGtXcml0ZSB0byBNb25nb0RCIHJlc3VsdCBpbiBuTW9kaWZpZWQ6JWQsIG5VcHNlcnRlZDolZCwgJwogICAgICAgICduTWF0Y2hlZDolZCwgRXJyb3JzOiVzJyAlICgKICAgICAgICAgICAgcmVzcC5tb2RpZmllZF9jb3VudCwKICAgICAgICAgICAgcmVzcC51cHNlcnRlZF9jb3VudCwKICAgICAgICAgICAgcmVzcC5tYXRjaGVkX2NvdW50LAogICAgICAgICAgICByZXNwLmJ1bGtfYXBpX3Jlc3VsdC5nZXQoJ3dyaXRlRXJyb3JzJykpKQoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgaWYgc2VsZi5jbGllbnQgaXMgTm9uZToKICAgICAgc2VsZi5jbGllbnQgPSBNb25nb0NsaWVudChob3N0PXNlbGYudXJpLCAqKnNlbGYuc3BlYykKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKICAgIGlmIHNlbGYuY2xpZW50IGlzIG5vdCBOb25lOgogICAgICBzZWxmLmNsaWVudC5jbG9zZSgpCpR9lCiMGFJlYWRGcm9tTW9uZ29EQi5fX2luaXRfX5RqVjEBAEthS4uHlIwWUmVhZEZyb21Nb25nb0RCLmV4cGFuZJRqVjEBAEuNS46HlIwPUmVhZEZyb21Nb25nb0RClGpdMQEAS11LjoeUjBxfQm91bmRlZE1vbmdvU291cmNlLl9faW5pdF9flGpWMQEAS5JLo4eUjCFfQm91bmRlZE1vbmdvU291cmNlLmVzdGltYXRlX3NpemWUalYxAQBLpUunh5SMGV9Cb3VuZGVkTW9uZ29Tb3VyY2Uuc3BsaXSUalYxAQBLqUvCh5SMJV9Cb3VuZGVkTW9uZ29Tb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXKUalYxAQBLxEvHh5SMGF9Cb3VuZGVkTW9uZ29Tb3VyY2UucmVhZJRqVjEBAEvJS9KHlIwgX0JvdW5kZWRNb25nb1NvdXJjZS5kaXNwbGF5X2RhdGGUalYxAQBL1Evch5SMI19Cb3VuZGVkTW9uZ29Tb3VyY2UuX2dldF9zcGxpdF9rZXlzlGpWMQEAS95L74eUjCRfQm91bmRlZE1vbmdvU291cmNlLl9tZXJnZV9pZF9maWx0ZXKUalYxAQBL8U0FAYeUjClfQm91bmRlZE1vbmdvU291cmNlLl9nZXRfaGVhZF9kb2N1bWVudF9pZJRqVjEBAE0HAU0OAYeUjCtfQm91bmRlZE1vbmdvU291cmNlLl9yZXBsYWNlX25vbmVfcG9zaXRpb25zlGpWMQEATRABTRgBh5SME19Cb3VuZGVkTW9uZ29Tb3VyY2WUal0xAQBLkU0YAYeUjBlfT2JqZWN0SWRIZWxwZXIuaWRfdG9faW50lGpWMQEATR0BTSkBh5SMGV9PYmplY3RJZEhlbHBlci5pbnRfdG9faWSUalYxAQBNKwFNPgGHlIwcX09iamVjdElkSGVscGVyLmluY3JlbWVudF9pZJRqVjEBAE1AAU1RAYeUjA9fT2JqZWN0SWRIZWxwZXKUal0xAQBNGwFNUQGHlIwqX09iamVjdElkUmFuZ2VUcmFja2VyLnBvc2l0aW9uX3RvX2ZyYWN0aW9ulGpWMQEATVYBTVoBh5SMKl9PYmplY3RJZFJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvbpRqVjEBAE1cAU1nAYeUjBVfT2JqZWN0SWRSYW5nZVRyYWNrZXKUal0xAQBNVAFNZwGHlIwXV3JpdGVUb01vbmdvREIuX19pbml0X1+UalYxAQBNggFNpQGHlIwVV3JpdGVUb01vbmdvREIuZXhwYW5klGpWMQEATacBTawBh5SMDldyaXRlVG9Nb25nb0RClGpdMQEATWoBTawBh5SMG19HZW5lcmF0ZU9iamVjdElkRm4ucHJvY2Vzc5RqVjEBAE2wAU28AYeUjBNfR2VuZXJhdGVPYmplY3RJZEZulGpdMQEATa8BTbwBh5SMFl9Xcml0ZU1vbmdvRm4uX19pbml0X1+UalYxAQBNwAFNyQGHlIwbX1dyaXRlTW9uZ29Gbi5maW5pc2hfYnVuZGxllGpWMQEATcsBTcwBh5SMFV9Xcml0ZU1vbmdvRm4ucHJvY2Vzc5RqVjEBAE3OAU3RAYeUjBRfV3JpdGVNb25nb0ZuLl9mbHVzaJRqVjEBAE3TAU3YAYeUjBpfV3JpdGVNb25nb0ZuLmRpc3BsYXlfZGF0YZRqVjEBAE3aAU3hAYeUjA1fV3JpdGVNb25nb0ZulGpdMQEATb8BTeEBh5SME19Nb25nb1NpbmsuX19pbml0X1+UalYxAQBN5QFN7AGHlIwQX01vbmdvU2luay53cml0ZZRqVjEBAE3uAU0BAoeUjBRfTW9uZ29TaW5rLl9fZW50ZXJfX5RqVjEBAE0DAk0GAoeUjBNfTW9uZ29TaW5rLl9fZXhpdF9flGpWMQEATQgCTQoCh5SMCl9Nb25nb1NpbmuUal0xAQBN5AFNCgKHlHV9lCiMD1JlYWRGcm9tTW9uZ29EQpRqkwMAAIwWUmVhZEZyb21Nb25nb0RCLmV4cGFuZJRqkwMAAIwOV3JpdGVUb01vbmdvREKUapMDAACMFVdyaXRlVG9Nb25nb0RCLmV4cGFuZJRqkwMAAHWMGGFwYWNoZV9iZWFtLmlvLm1vbmdvZGJpb5R0lIwYYXBhY2hlX2JlYW0uaW8ucGFycXVldGlvlChYpk4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiYGBQVHJhbnNmb3Jtc2BgIGZvciByZWFkaW5nIGZyb20gYW5kIHdyaXRpbmcgdG8gUGFycXVldCBmaWxlcy4KClByb3ZpZGVzIHR3byByZWFkIGBgUFRyYW5zZm9ybWBgXFxzLCBgYFJlYWRGcm9tUGFycXVldGBgIGFuZApgYFJlYWRBbGxGcm9tUGFycXVldGBgLCB0aGF0IHByb2R1Y2VzIGEgYGBQQ29sbGVjdGlvbmBgIG9mIHJlY29yZHMuCkVhY2ggcmVjb3JkIG9mIHRoaXMgYGBQQ29sbGVjdGlvbmBgIHdpbGwgY29udGFpbiBhIHNpbmdsZSByZWNvcmQgcmVhZCBmcm9tCmEgUGFycXVldCBmaWxlLiBSZWNvcmRzIHRoYXQgYXJlIG9mIHNpbXBsZSB0eXBlcyB3aWxsIGJlIG1hcHBlZCBpbnRvCmNvcnJlc3BvbmRpbmcgUHl0aG9uIHR5cGVzLiBUaGUgYWN0dWFsIHBhcnF1ZXQgZmlsZSBvcGVyYXRpb25zIGFyZSBkb25lIGJ5CnB5YXJyb3cuIFNvdXJjZSBzcGxpdHRpbmcgaXMgc3VwcG9ydGVkIGF0IHJvdyBncm91cCBncmFudWxhcml0eS4KCkFkZGl0aW9uYWxseSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB3cml0ZSBgYFBUcmFuc2Zvcm1gYCBgYFdyaXRlVG9QYXJxdWV0YGAKdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBhIGdpdmVuIGBgUENvbGxlY3Rpb25gYCBvZiBQeXRob24gb2JqZWN0cyB0byBhClBhcnF1ZXQgZmlsZS4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAoKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc2luawpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSYW5nZVRyYWNrZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFdyaXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQoKdHJ5OgogIGltcG9ydCBweWFycm93IGFzIHBhCiAgaW1wb3J0IHB5YXJyb3cucGFycXVldCBhcyBwcQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcGEgPSBOb25lCiAgcHEgPSBOb25lCgpfX2FsbF9fID0gWwogICAgJ1JlYWRGcm9tUGFycXVldCcsCiAgICAnUmVhZEFsbEZyb21QYXJxdWV0JywKICAgICdSZWFkRnJvbVBhcnF1ZXRCYXRjaGVkJywKICAgICdSZWFkQWxsRnJvbVBhcnF1ZXRCYXRjaGVkJywKICAgICdXcml0ZVRvUGFycXVldCcKXQoKCmNsYXNzIF9BcnJvd1RhYmxlVG9Sb3dEaWN0aW9uYXJpZXMoRG9Gbik6CiAgIiIiIEEgRG9GbiB0aGF0IGNvbnN1bWVzIGFuIEFycm93IHRhYmxlIGFuZCB5aWVsZHMgYSBweXRob24gZGljdGlvbmFyeSBmb3IKICBlYWNoIHJvdyBpbiB0aGUgdGFibGUuIiIiCiAgZGVmIHByb2Nlc3Moc2VsZiwgdGFibGUpOgogICAgbnVtX3Jvd3MgPSB0YWJsZS5udW1fcm93cwogICAgZGF0YV9pdGVtcyA9IHRhYmxlLnRvX3B5ZGljdCgpLml0ZW1zKCkKICAgIGZvciBuIGluIHJhbmdlKG51bV9yb3dzKToKICAgICAgcm93ID0ge30KICAgICAgZm9yIGNvbHVtbiwgdmFsdWVzIGluIGRhdGFfaXRlbXM6CiAgICAgICAgcm93W2NvbHVtbl0gPSB2YWx1ZXNbbl0KICAgICAgeWllbGQgcm93CgoKY2xhc3MgUmVhZEZyb21QYXJxdWV0QmF0Y2hlZChQVHJhbnNmb3JtKToKICAiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBmb3IgcmVhZGluZwogICAgIFBhcnF1ZXQgZmlsZXMgYXMgYSBgUENvbGxlY3Rpb25gIG9mIGBweWFycm93LlRhYmxlYC4gVGhpcyBgUFRyYW5zZm9ybWAgaXMKICAgICBjdXJyZW50bHkgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLCBmaWxlX3BhdHRlcm49Tm9uZSwgbWluX2J1bmRsZV9zaXplPTAsIHZhbGlkYXRlPVRydWUsIGNvbHVtbnM9Tm9uZSk6CiAgICAiIiIgSW5pdGlhbGl6ZXMgOmNsYXNzOmB+UmVhZEZyb21QYXJxdWV0QmF0Y2hlZGAKCiAgICBBbiBhbHRlcm5hdGl2ZSB0byA6Y2xhc3M6YH5SZWFkRnJvbVBhcnF1ZXRgIHRoYXQgeWllbGRzIGVhY2ggcm93IGdyb3VwIGZyb20KICAgIHRoZSBQYXJxdWV0IGZpbGUgYXMgYSBgcHlhcnJvdy5UYWJsZWAuICBUaGVzZSBUYWJsZSBpbnN0YW5jZXMgY2FuIGJlCiAgICBwcm9jZXNzZWQgZGlyZWN0bHksIG9yIGNvbnZlcnRlZCB0byBhIHBhbmRhcyBEYXRhRnJhbWUgZm9yIHByb2Nlc3NpbmcuICBGb3IKICAgIG1vcmUgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIHR5cGVzIGFuZCBzY2hlbWEsIHBsZWFzZSBzZWUgdGhlIHB5YXJyb3cKICAgIGRvY3VtZW50YXRpb24uCgogICAgLi4gdGVzdGNvZGU6OgoKICAgICAgd2l0aCBiZWFtLlBpcGVsaW5lKCkgYXMgcDoKICAgICAgICBkYXRhZnJhbWVzID0gcCBcXAogICAgICAgICAgICB8ICdSZWFkJyA+PiBiZWFtLmlvLlJlYWRGcm9tUGFycXVldEJhdGNoZWQoJy9teXBhdGgvbXlwcWZpbGVzKicpIFxcCiAgICAgICAgICAgIHwgJ0NvbnZlcnQgdG8gcGFuZGFzJyA+PiBiZWFtLk1hcChsYW1iZGEgdGFibGU6IHRhYmxlLnRvX3BhbmRhcygpKQoKICAgIC4uIE5PVEU6IFdlJ3JlIG5vdCBhY3R1YWxseSBpbnRlcmVzdGVkIGluIHRoaXMgZXJyb3I7IGJ1dCBpZiB3ZSBnZXQgaGVyZSwKICAgICAgIGl0IG1lYW5zIHRoYXQgdGhlIHdheSBvZiBjYWxsaW5nIHRoaXMgdHJhbnNmb3JtIGhhc24ndCBjaGFuZ2VkLgoKICAgIC4uIHRlc3RvdXRwdXQ6OgogICAgICA6aGlkZToKCiAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgogICAgICBPU0Vycm9yOiBObyBmaWxlcyBmb3VuZCBiYXNlZCBvbiB0aGUgZmlsZSBwYXR0ZXJuCgogICAgU2VlIGFsc286IDpjbGFzczpgflJlYWRGcm9tUGFycXVldGAuCgogICAgQXJnczoKICAgICAgZmlsZV9wYXR0ZXJuIChzdHIpOiB0aGUgZmlsZSBnbG9iIHRvIHJlYWQKICAgICAgbWluX2J1bmRsZV9zaXplIChpbnQpOiB0aGUgbWluaW11bSBzaXplIGluIGJ5dGVzLCB0byBiZSBjb25zaWRlcmVkIHdoZW4KICAgICAgICBzcGxpdHRpbmcgdGhlIGlucHV0IGludG8gYnVuZGxlcy4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlcyBleGlzdCBkdXJpbmcgdGhlIHBpcGVsaW5lCiAgICAgICAgY3JlYXRpb24gdGltZS4KICAgICAgY29sdW1ucyAoTGlzdFtzdHJdKTogbGlzdCBvZiBjb2x1bW5zIHRoYXQgd2lsbCBiZSByZWFkIGZyb20gZmlsZXMuCiAgICAgICAgQSBjb2x1bW4gbmFtZSBtYXkgYmUgYSBwcmVmaXggb2YgYSBuZXN0ZWQgZmllbGQsIGUuZy4gJ2EnIHdpbGwgc2VsZWN0CiAgICAgICAgJ2EuYicsICdhLmMnLCBhbmQgJ2EuZC5lJwogICAgIiIiCgogICAgc3VwZXIoUmVhZEZyb21QYXJxdWV0QmF0Y2hlZCwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fc291cmNlID0gX2NyZWF0ZV9wYXJxdWV0X3NvdXJjZSgKICAgICAgICBmaWxlX3BhdHRlcm4sCiAgICAgICAgbWluX2J1bmRsZV9zaXplLAogICAgICAgIHZhbGlkYXRlPXZhbGlkYXRlLAogICAgICAgIGNvbHVtbnM9Y29sdW1ucywKICAgICkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc291cmNlX2RkJzogc2VsZi5fc291cmNlfQoKCmNsYXNzIFJlYWRGcm9tUGFycXVldChQVHJhbnNmb3JtKToKICAiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBmb3IgcmVhZGluZwogICAgIFBhcnF1ZXQgZmlsZXMgYXMgYSBgUENvbGxlY3Rpb25gIG9mIGRpY3Rpb25hcmllcy4gVGhpcyBgUFRyYW5zZm9ybWAgaXMKICAgICBjdXJyZW50bHkgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLCBmaWxlX3BhdHRlcm49Tm9uZSwgbWluX2J1bmRsZV9zaXplPTAsIHZhbGlkYXRlPVRydWUsIGNvbHVtbnM9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YFJlYWRGcm9tUGFycXVldGAuCgogICAgVXNlcyBzb3VyY2UgYGBfUGFycXVldFNvdXJjZWBgIHRvIHJlYWQgYSBzZXQgb2YgUGFycXVldCBmaWxlcyBkZWZpbmVkIGJ5CiAgICBhIGdpdmVuIGZpbGUgcGF0dGVybi4KCiAgICBJZiBgYC9teXBhdGgvbXlwYXJxdWV0ZmlsZXMqYGAgaXMgYSBmaWxlLXBhdHRlcm4gdGhhdCBwb2ludHMgdG8gYSBzZXQgb2YKICAgIFBhcnF1ZXQgZmlsZXMsIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBmb3IgdGhlIHJlY29yZHMgaW4KICAgIHRoZXNlIFBhcnF1ZXQgZmlsZXMgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuCgogICAgLi4gdGVzdGNvZGU6OgoKICAgICAgd2l0aCBiZWFtLlBpcGVsaW5lKCkgYXMgcDoKICAgICAgICByZWNvcmRzID0gcCB8ICdSZWFkJyA+PiBiZWFtLmlvLlJlYWRGcm9tUGFycXVldCgnL215cGF0aC9teXBxZmlsZXMqJykKCiAgICAuLiBOT1RFOiBXZSdyZSBub3QgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbiB0aGlzIGVycm9yOyBidXQgaWYgd2UgZ2V0IGhlcmUsCiAgICAgICBpdCBtZWFucyB0aGF0IHRoZSB3YXkgb2YgY2FsbGluZyB0aGlzIHRyYW5zZm9ybSBoYXNuJ3QgY2hhbmdlZC4KCiAgICAuLiB0ZXN0b3V0cHV0OjoKICAgICAgOmhpZGU6CgogICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAuLi4KICAgICAgT1NFcnJvcjogTm8gZmlsZXMgZm91bmQgYmFzZWQgb24gdGhlIGZpbGUgcGF0dGVybgoKICAgIEVhY2ggZWxlbWVudCBvZiB0aGlzIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgd2lsbCBjb250YWluCiAgICBhIFB5dGhvbiBkaWN0aW9uYXJ5IHJlcHJlc2VudGluZyBhIHNpbmdsZSByZWNvcmQuIFRoZSBrZXlzIHdpbGwgYmUgb2YgdHlwZQogICAgOmNsYXNzOmBzdHJgIGFuZCBuYW1lZCBhZnRlciB0aGVpciBjb3JyZXNwb25kaW5nIGNvbHVtbiBuYW1lcy4gVGhlIHZhbHVlcwogICAgd2lsbCBiZSBvZiB0aGUgdHlwZSBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIFBhcnF1ZXQgc2NoZW1hLiBSZWNvcmRzCiAgICB0aGF0IGFyZSBvZiBzaW1wbGUgdHlwZXMgd2lsbCBiZSBtYXBwZWQgaW50byBjb3JyZXNwb25kaW5nIFB5dGhvbiB0eXBlcy4KICAgIFJlY29yZHMgdGhhdCBhcmUgb2YgY29tcGxleCB0eXBlcyBsaWtlIGxpc3QgYW5kIHN0cnVjdCB3aWxsIGJlIG1hcHBlZCB0bwogICAgUHl0aG9uIGxpc3QgYW5kIGRpY3Rpb25hcnkgcmVzcGVjdGl2ZWx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0ZWQKICAgIHR5cGVzIGFuZCBzY2hlbWEsIHBsZWFzZSBzZWUgdGhlIHB5YXJyb3cgZG9jdW1lbnRhdGlvbi4KCiAgICBTZWUgYWxzbzogOmNsYXNzOmB+UmVhZEZyb21QYXJxdWV0QmF0Y2hlZGAuCgogICAgQXJnczoKICAgICAgZmlsZV9wYXR0ZXJuIChzdHIpOiB0aGUgZmlsZSBnbG9iIHRvIHJlYWQKICAgICAgbWluX2J1bmRsZV9zaXplIChpbnQpOiB0aGUgbWluaW11bSBzaXplIGluIGJ5dGVzLCB0byBiZSBjb25zaWRlcmVkIHdoZW4KICAgICAgICBzcGxpdHRpbmcgdGhlIGlucHV0IGludG8gYnVuZGxlcy4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlcyBleGlzdCBkdXJpbmcgdGhlIHBpcGVsaW5lCiAgICAgICAgY3JlYXRpb24gdGltZS4KICAgICAgY29sdW1ucyAoTGlzdFtzdHJdKTogbGlzdCBvZiBjb2x1bW5zIHRoYXQgd2lsbCBiZSByZWFkIGZyb20gZmlsZXMuCiAgICAgICAgQSBjb2x1bW4gbmFtZSBtYXkgYmUgYSBwcmVmaXggb2YgYSBuZXN0ZWQgZmllbGQsIGUuZy4gJ2EnIHdpbGwgc2VsZWN0CiAgICAgICAgJ2EuYicsICdhLmMnLCBhbmQgJ2EuZC5lJwogICAgIiIiCiAgICBzdXBlcihSZWFkRnJvbVBhcnF1ZXQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3NvdXJjZSA9IF9jcmVhdGVfcGFycXVldF9zb3VyY2UoCiAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSwKICAgICAgICBjb2x1bW5zPWNvbHVtbnMsCiAgICApCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJldHVybiBwdmFsdWUgfCBSZWFkKHNlbGYuX3NvdXJjZSkgfCBQYXJEbyhfQXJyb3dUYWJsZVRvUm93RGljdGlvbmFyaWVzKCkpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydzb3VyY2VfZGQnOiBzZWxmLl9zb3VyY2V9CgoKY2xhc3MgUmVhZEFsbEZyb21QYXJxdWV0QmF0Y2hlZChQVHJhbnNmb3JtKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciByZWFkaW5nIGBgUENvbGxlY3Rpb25gYCBvZiBQYXJxdWV0IGZpbGVzLgoKICAgVXNlcyBzb3VyY2UgYGBfUGFycXVldFNvdXJjZWBgIHRvIHJlYWQgYSBgYFBDb2xsZWN0aW9uYGAgb2YgUGFycXVldCBmaWxlcyBvcgogICBmaWxlIHBhdHRlcm5zIGFuZCBwcm9kdWNlIGEgYGBQQ29sbGVjdGlvbmBgIG9mIGBgcHlhcnJvdy5UYWJsZWBgLCBvbmUgZm9yCiAgIGVhY2ggUGFycXVldCBmaWxlIHJvdyBncm91cC4gVGhpcyBgYFBUcmFuc2Zvcm1gYCBpcyBjdXJyZW50bHkgZXhwZXJpbWVudGFsLgogICBObyBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiAgIiIiCgogIERFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRSA9IDY0ICogMTAyNCAqIDEwMjQgICMgNjRNQgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIG1pbl9idW5kbGVfc2l6ZT0wLAogICAgICBkZXNpcmVkX2J1bmRsZV9zaXplPURFRkFVTFRfREVTSVJFRF9CVU5ETEVfU0laRSwKICAgICAgY29sdW1ucz1Ob25lLAogICAgICBsYWJlbD0nUmVhZEFsbEZpbGVzJyk6CiAgICAiIiJJbml0aWFsaXplcyBgYFJlYWRBbGxGcm9tUGFycXVldGBgLgoKICAgIEFyZ3M6CiAgICAgIG1pbl9idW5kbGVfc2l6ZTogdGhlIG1pbmltdW0gc2l6ZSBpbiBieXRlcywgdG8gYmUgY29uc2lkZXJlZCB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0aW5nIHRoZSBpbnB1dCBpbnRvIGJ1bmRsZXMuCiAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU6IHRoZSBkZXNpcmVkIHNpemUgaW4gYnl0ZXMsIHRvIGJlIGNvbnNpZGVyZWQgd2hlbgogICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGluZyB0aGUgaW5wdXQgaW50byBidW5kbGVzLgogICAgICBjb2x1bW5zOiBsaXN0IG9mIGNvbHVtbnMgdGhhdCB3aWxsIGJlIHJlYWQgZnJvbSBmaWxlcy4gQSBjb2x1bW4gbmFtZQogICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBhIHByZWZpeCBvZiBhIG5lc3RlZCBmaWVsZCwgZS5nLiAnYScgd2lsbCBzZWxlY3QKICAgICAgICAgICAgICAgICAgICAgICAnYS5iJywgJ2EuYycsIGFuZCAnYS5kLmUnCiAgICAiIiIKICAgIHN1cGVyKFJlYWRBbGxGcm9tUGFycXVldEJhdGNoZWQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNvdXJjZV9mcm9tX2ZpbGUgPSBwYXJ0aWFsKAogICAgICAgIF9jcmVhdGVfcGFycXVldF9zb3VyY2UsCiAgICAgICAgbWluX2J1bmRsZV9zaXplPW1pbl9idW5kbGVfc2l6ZSwKICAgICAgICBjb2x1bW5zPWNvbHVtbnMpCiAgICBzZWxmLl9yZWFkX2FsbF9maWxlcyA9IGZpbGViYXNlZHNvdXJjZS5SZWFkQWxsRmlsZXMoCiAgICAgICAgVHJ1ZSwKICAgICAgICBDb21wcmVzc2lvblR5cGVzLlVOQ09NUFJFU1NFRCwKICAgICAgICBkZXNpcmVkX2J1bmRsZV9zaXplLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgICBzb3VyY2VfZnJvbV9maWxlKQoKICAgIHNlbGYubGFiZWwgPSBsYWJlbAoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlIHwgc2VsZi5sYWJlbCA+PiBzZWxmLl9yZWFkX2FsbF9maWxlcwoKCmNsYXNzIFJlYWRBbGxGcm9tUGFycXVldChQVHJhbnNmb3JtKToKICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAgc2VsZi5fcmVhZF9iYXRjaGVzID0gUmVhZEFsbEZyb21QYXJxdWV0QmF0Y2hlZCgqKmt3YXJncykKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZSB8IHNlbGYuX3JlYWRfYmF0Y2hlcyB8IFBhckRvKF9BcnJvd1RhYmxlVG9Sb3dEaWN0aW9uYXJpZXMoKSkKCgpkZWYgX2NyZWF0ZV9wYXJxdWV0X3NvdXJjZSgKICAgIGZpbGVfcGF0dGVybj1Ob25lLCBtaW5fYnVuZGxlX3NpemU9MCwgdmFsaWRhdGU9RmFsc2UsIGNvbHVtbnM9Tm9uZSk6CiAgcmV0dXJuIFwKICAgIF9QYXJxdWV0U291cmNlKAogICAgICAgIGZpbGVfcGF0dGVybj1maWxlX3BhdHRlcm4sCiAgICAgICAgbWluX2J1bmRsZV9zaXplPW1pbl9idW5kbGVfc2l6ZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSwKICAgICAgICBjb2x1bW5zPWNvbHVtbnMsCiAgICApCgoKY2xhc3MgX1BhcnF1ZXRVdGlscyhvYmplY3QpOgogIEBzdGF0aWNtZXRob2QKICBkZWYgZmluZF9maXJzdF9yb3dfZ3JvdXBfaW5kZXgocGYsIHN0YXJ0X29mZnNldCk6CiAgICBmb3IgaSBpbiByYW5nZShfUGFycXVldFV0aWxzLmdldF9udW1iZXJfb2Zfcm93X2dyb3VwcyhwZikpOgogICAgICByb3dfZ3JvdXBfc3RhcnRfb2Zmc2V0ID0gX1BhcnF1ZXRVdGlscy5nZXRfb2Zmc2V0KHBmLCBpKQogICAgICBpZiByb3dfZ3JvdXBfc3RhcnRfb2Zmc2V0ID49IHN0YXJ0X29mZnNldDoKICAgICAgICByZXR1cm4gaQogICAgcmV0dXJuIC0xCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZ2V0X29mZnNldChwZiwgcm93X2dyb3VwX2luZGV4KToKICAgIGZpcnN0X2NvbHVtbl9tZXRhZGF0YSA9XAogICAgICBwZi5tZXRhZGF0YS5yb3dfZ3JvdXAocm93X2dyb3VwX2luZGV4KS5jb2x1bW4oMCkKICAgIGlmIGZpcnN0X2NvbHVtbl9tZXRhZGF0YS5oYXNfZGljdGlvbmFyeV9wYWdlOgogICAgICByZXR1cm4gZmlyc3RfY29sdW1uX21ldGFkYXRhLmRpY3Rpb25hcnlfcGFnZV9vZmZzZXQKICAgIGVsc2U6CiAgICAgIHJldHVybiBmaXJzdF9jb2x1bW5fbWV0YWRhdGEuZGF0YV9wYWdlX29mZnNldAoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGdldF9udW1iZXJfb2Zfcm93X2dyb3VwcyhwZik6CiAgICByZXR1cm4gcGYubWV0YWRhdGEubnVtX3Jvd19ncm91cHMKCgpjbGFzcyBfUGFycXVldFNvdXJjZShmaWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlKToKICAiIiJBIHNvdXJjZSBmb3IgcmVhZGluZyBQYXJxdWV0IGZpbGVzLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3BhdHRlcm4sIG1pbl9idW5kbGVfc2l6ZSwgdmFsaWRhdGUsIGNvbHVtbnMpOgogICAgc3VwZXIoX1BhcnF1ZXRTb3VyY2UsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGZpbGVfcGF0dGVybj1maWxlX3BhdHRlcm4sCiAgICAgICAgbWluX2J1bmRsZV9zaXplPW1pbl9idW5kbGVfc2l6ZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSkKICAgIHNlbGYuX2NvbHVtbnMgPSBjb2x1bW5zCgogIGRlZiByZWFkX3JlY29yZHMoc2VsZiwgZmlsZV9uYW1lLCByYW5nZV90cmFja2VyKToKICAgIG5leHRfYmxvY2tfc3RhcnQgPSAtMQoKICAgIGRlZiBzcGxpdF9wb2ludHNfdW5jbGFpbWVkKHN0b3BfcG9zaXRpb24pOgogICAgICBpZiBuZXh0X2Jsb2NrX3N0YXJ0ID49IHN0b3BfcG9zaXRpb246CiAgICAgICAgIyBOZXh0IGJsb2NrIHN0YXJ0cyBhdCBvciBhZnRlciB0aGUgc3VnZ2VzdGVkIHN0b3AgcG9zaXRpb24uIEhlbmNlCiAgICAgICAgIyB0aGVyZSB3aWxsIG5vdCBiZSBzcGxpdCBwb2ludHMgdG8gYmUgY2xhaW1lZCBmb3IgdGhlIHJhbmdlIGVuZGluZyBhdAogICAgICAgICMgc3VnZ2VzdGVkIHN0b3AgcG9zaXRpb24uCiAgICAgICAgcmV0dXJuIDAKICAgICAgcmV0dXJuIFJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTgoKICAgIHJhbmdlX3RyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soc3BsaXRfcG9pbnRzX3VuY2xhaW1lZCkKCiAgICBzdGFydF9vZmZzZXQgPSByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIGlmIHN0YXJ0X29mZnNldCBpcyBOb25lOgogICAgICBzdGFydF9vZmZzZXQgPSAwCgogICAgd2l0aCBzZWxmLm9wZW5fZmlsZShmaWxlX25hbWUpIGFzIGY6CiAgICAgIHBmID0gcHEuUGFycXVldEZpbGUoZikKCiAgICAgICMgZmluZCB0aGUgZmlyc3QgZGljdGlvbmFyeSBwYWdlIChvciBkYXRhIHBhZ2UgaWYgdGhlcmUncyBubyBkaWN0aW9uYXJ5CiAgICAgICMgcGFnZSBhdmFpbGFibGUpIG9mZnNldCBhZnRlciB0aGUgZ2l2ZW4gc3RhcnRfb2Zmc2V0LiBUaGlzIG9mZnNldCBpcyBhbHNvCiAgICAgICMgdGhlIHN0YXJ0aW5nIG9mZnNldCBvZiBhbnkgcm93IGdyb3VwIHNpbmNlIHRoZSBQYXJxdWV0IHNwZWNpZmljYXRpb24KICAgICAgIyBkZXNjcmliZXMgdGhhdCB0aGUgZGF0YSBwYWdlcyBhbHdheXMgY29tZSBmaXJzdCBiZWZvcmUgdGhlIG1ldGEgZGF0YSBpbgogICAgICAjIGVhY2ggcm93IGdyb3VwLgogICAgICBpbmRleCA9IF9QYXJxdWV0VXRpbHMuZmluZF9maXJzdF9yb3dfZ3JvdXBfaW5kZXgocGYsIHN0YXJ0X29mZnNldCkKICAgICAgaWYgaW5kZXggIT0gLTE6CiAgICAgICAgbmV4dF9ibG9ja19zdGFydCA9IF9QYXJxdWV0VXRpbHMuZ2V0X29mZnNldChwZiwgaW5kZXgpCiAgICAgIGVsc2U6CiAgICAgICAgbmV4dF9ibG9ja19zdGFydCA9IHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbigpCiAgICAgIG51bWJlcl9vZl9yb3dfZ3JvdXBzID0gX1BhcnF1ZXRVdGlscy5nZXRfbnVtYmVyX29mX3Jvd19ncm91cHMocGYpCgogICAgICB3aGlsZSByYW5nZV90cmFja2VyLnRyeV9jbGFpbShuZXh0X2Jsb2NrX3N0YXJ0KToKICAgICAgICB0YWJsZSA9IHBmLnJlYWRfcm93X2dyb3VwKGluZGV4LCBzZWxmLl9jb2x1bW5zKQoKICAgICAgICBpZiBpbmRleCArIDEgPCBudW1iZXJfb2Zfcm93X2dyb3VwczoKICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCiAgICAgICAgICBuZXh0X2Jsb2NrX3N0YXJ0ID0gX1BhcnF1ZXRVdGlscy5nZXRfb2Zmc2V0KHBmLCBpbmRleCkKICAgICAgICBlbHNlOgogICAgICAgICAgbmV4dF9ibG9ja19zdGFydCA9IHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbigpCgogICAgICAgIHlpZWxkIHRhYmxlCgoKY2xhc3MgV3JpdGVUb1BhcnF1ZXQoUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3Igd3JpdGluZyBwYXJxdWV0IGZpbGVzLgoKICAgIFRoaXMgYGBQVHJhbnNmb3JtYGAgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmQtY29tcGF0aWJpbGl0eQogICAgZ3VhcmFudGVlcy4KICAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgIHNjaGVtYSwKICAgICAgcm93X2dyb3VwX2J1ZmZlcl9zaXplPTY0ICogMTAyNCAqIDEwMjQsCiAgICAgIHJlY29yZF9iYXRjaF9zaXplPTEwMDAsCiAgICAgIGNvZGVjPSdub25lJywKICAgICAgdXNlX2RlcHJlY2F0ZWRfaW50OTZfdGltZXN0YW1wcz1GYWxzZSwKICAgICAgZmlsZV9uYW1lX3N1ZmZpeD0nJywKICAgICAgbnVtX3NoYXJkcz0wLAogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPU5vbmUsCiAgICAgIG1pbWVfdHlwZT0nYXBwbGljYXRpb24veC1wYXJxdWV0Jyk6CiAgICAiIiJJbml0aWFsaXplIGEgV3JpdGVUb1BhcnF1ZXQgdHJhbnNmb3JtLgoKICAgIFdyaXRlcyBwYXJxdWV0IGZpbGVzIGZyb20gYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIG9mCiAgICByZWNvcmRzLiBFYWNoIHJlY29yZCBpcyBhIGRpY3Rpb25hcnkgd2l0aCBrZXlzIG9mIGEgc3RyaW5nIHR5cGUgdGhhdAogICAgcmVwcmVzZW50IGNvbHVtbiBuYW1lcy4gU2NoZW1hIG11c3QgYmUgc3BlY2lmaWVkIGxpa2UgdGhlIGV4YW1wbGUgYmVsb3cuCgogICAgLi4gdGVzdHNldHVwOjoKCiAgICAgIGZyb20gdGVtcGZpbGUgaW1wb3J0IE5hbWVkVGVtcG9yYXJ5RmlsZQogICAgICBpbXBvcnQgZ2xvYgogICAgICBpbXBvcnQgb3MKICAgICAgaW1wb3J0IHB5YXJyb3cKCiAgICAgIGZpbGVuYW1lID0gTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkubmFtZQoKICAgIC4uIHRlc3Rjb2RlOjoKCiAgICAgIHdpdGggYmVhbS5QaXBlbGluZSgpIGFzIHA6CiAgICAgICAgcmVjb3JkcyA9IHAgfCAnUmVhZCcgPj4gYmVhbS5DcmVhdGUoCiAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vJywgJ2FnZSc6IDEwfSwgeyduYW1lJzogJ2JhcicsICdhZ2UnOiAyMH1dCiAgICAgICAgKQogICAgICAgIF8gPSByZWNvcmRzIHwgJ1dyaXRlJyA+PiBiZWFtLmlvLldyaXRlVG9QYXJxdWV0KGZpbGVuYW1lLAogICAgICAgICAgICBweWFycm93LnNjaGVtYSgKICAgICAgICAgICAgICAgIFsoJ25hbWUnLCBweWFycm93LmJpbmFyeSgpKSwgKCdhZ2UnLCBweWFycm93LmludDY0KCkpXQogICAgICAgICAgICApCiAgICAgICAgKQoKICAgIC4uIHRlc3RjbGVhbnVwOjoKCiAgICAgIGZvciBvdXRwdXQgaW4gZ2xvYi5nbG9iKCd7fSonLmZvcm1hdChmaWxlbmFtZSkpOgogICAgICAgIG9zLnJlbW92ZShvdXRwdXQpCgogICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIHR5cGVzIGFuZCBzY2hlbWEsIHBsZWFzZSBzZWUgdGhlIHB5YXJyb3cKICAgIGRvY3VtZW50LgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aF9wcmVmaXg6IFRoZSBmaWxlIHBhdGggdG8gd3JpdGUgdG8uIFRoZSBmaWxlcyB3cml0dGVuIHdpbGwgYmVnaW4KICAgICAgICB3aXRoIHRoaXMgcHJlZml4LCBmb2xsb3dlZCBieSBhIHNoYXJkIGlkZW50aWZpZXIgKHNlZSBudW1fc2hhcmRzKSwgYW5kCiAgICAgICAgZW5kIGluIGEgY29tbW9uIGV4dGVuc2lvbiwgaWYgZ2l2ZW4gYnkgZmlsZV9uYW1lX3N1ZmZpeC4gSW4gbW9zdCBjYXNlcywKICAgICAgICBvbmx5IHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIGFuZCBudW1fc2hhcmRzLCBzaGFyZF9uYW1lX3RlbXBsYXRlLCBhbmQKICAgICAgICBmaWxlX25hbWVfc3VmZml4IHVzZSBkZWZhdWx0IHZhbHVlcy4KICAgICAgc2NoZW1hOiBUaGUgc2NoZW1hIHRvIHVzZSwgYXMgdHlwZSBvZiBgYHB5YXJyb3cuU2NoZW1hYGAuCiAgICAgIHJvd19ncm91cF9idWZmZXJfc2l6ZTogVGhlIGJ5dGUgc2l6ZSBvZiB0aGUgcm93IGdyb3VwIGJ1ZmZlci4gTm90ZSB0aGF0CiAgICAgICAgdGhpcyBzaXplIGlzIGZvciB1bmNvbXByZXNzZWQgZGF0YSBvbiB0aGUgbWVtb3J5IGFuZCBub3JtYWxseSBtdWNoCiAgICAgICAgYmlnZ2VyIHRoYW4gdGhlIGFjdHVhbCByb3cgZ3JvdXAgc2l6ZSB3cml0dGVuIHRvIGEgZmlsZS4KICAgICAgcmVjb3JkX2JhdGNoX3NpemU6IFRoZSBudW1iZXIgb2YgcmVjb3JkcyBpbiBlYWNoIHJlY29yZCBiYXRjaC4gUmVjb3JkCiAgICAgICAgYmF0Y2ggaXMgYSBiYXNpYyB1bml0IHVzZWQgZm9yIHN0b3JpbmcgZGF0YSBpbiB0aGUgcm93IGdyb3VwIGJ1ZmZlci4KICAgICAgICBBIGhpZ2hlciByZWNvcmQgYmF0Y2ggc2l6ZSBpbXBsaWVzIGxvdyBncmFudWxhcml0eSBvbiBhIHJvdyBncm91cCBidWZmZXIKICAgICAgICBzaXplLiBGb3IgY29uZmlndXJpbmcgYSByb3cgZ3JvdXAgc2l6ZSBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHJlY29yZHMsCiAgICAgICAgc2V0IGBgcm93X2dyb3VwX2J1ZmZlcl9zaXplYGAgdG8gMSBhbmQgdXNlIGBgcmVjb3JkX2JhdGNoX3NpemVgYCB0bwogICAgICAgIGFkanVzdCB0aGUgdmFsdWUuCiAgICAgIGNvZGVjOiBUaGUgY29kZWMgdG8gdXNlIGZvciBibG9jay1sZXZlbCBjb21wcmVzc2lvbi4gQW55IHN0cmluZyBzdXBwb3J0ZWQKICAgICAgICBieSB0aGUgcHlhcnJvdyBzcGVjaWZpY2F0aW9uIGlzIGFjY2VwdGVkLgogICAgICB1c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzOiBXcml0ZSBuYW5vc2Vjb25kIHJlc29sdXRpb24gdGltZXN0YW1wcyB0bwogICAgICAgIElOVDk2IFBhcnF1ZXQgZm9ybWF0LiBEZWZhdWx0cyB0byBGYWxzZS4KICAgICAgZmlsZV9uYW1lX3N1ZmZpeDogU3VmZml4IGZvciB0aGUgZmlsZXMgd3JpdHRlbi4KICAgICAgbnVtX3NoYXJkczogVGhlIG51bWJlciBvZiBmaWxlcyAoc2hhcmRzKSB1c2VkIGZvciBvdXRwdXQuIElmIG5vdCBzZXQsIHRoZQogICAgICAgIHNlcnZpY2Ugd2lsbCBkZWNpZGUgb24gdGhlIG9wdGltYWwgbnVtYmVyIG9mIHNoYXJkcy4KICAgICAgICBDb25zdHJhaW5pbmcgdGhlIG51bWJlciBvZiBzaGFyZHMgaXMgbGlrZWx5IHRvIHJlZHVjZQogICAgICAgIHRoZSBwZXJmb3JtYW5jZSBvZiBhIHBpcGVsaW5lLiAgU2V0dGluZyB0aGlzIHZhbHVlIGlzIG5vdCByZWNvbW1lbmRlZAogICAgICAgIHVubGVzcyB5b3UgcmVxdWlyZSBhIHNwZWNpZmljIG51bWJlciBvZiBvdXRwdXQgZmlsZXMuCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU6IEEgdGVtcGxhdGUgc3RyaW5nIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIGZvcgogICAgICAgIHRoZSBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50LiBXaGVuIGNvbnN0cnVjdGluZyBhIGZpbGVuYW1lIGZvciBhCiAgICAgICAgcGFydGljdWxhciBzaGFyZCBudW1iZXIsIHRoZSB1cHBlci1jYXNlIGxldHRlcnMgJ1MnIGFuZCAnTicgYXJlCiAgICAgICAgcmVwbGFjZWQgd2l0aCB0aGUgMC1wYWRkZWQgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudCByZXNwZWN0aXZlbHkuCiAgICAgICAgVGhpcyBhcmd1bWVudCBjYW4gYmUgJycgaW4gd2hpY2ggY2FzZSBpdCBiZWhhdmVzIGFzIGlmIG51bV9zaGFyZHMgd2FzCiAgICAgICAgc2V0IHRvIDEgYW5kIG9ubHkgb25lIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoZSBkZWZhdWx0IHBhdHRlcm4gdXNlZAogICAgICAgIGlzICctU1NTU1Mtb2YtTk5OTk4nIGlmIE5vbmUgaXMgcGFzc2VkIGFzIHRoZSBzaGFyZF9uYW1lX3RlbXBsYXRlLgogICAgICBtaW1lX3R5cGU6IFRoZSBNSU1FIHR5cGUgdG8gdXNlIGZvciB0aGUgcHJvZHVjZWQgZmlsZXMsIGlmIHRoZSBmaWxlc3lzdGVtCiAgICAgICAgc3VwcG9ydHMgc3BlY2lmeWluZyBNSU1FIHR5cGVzLgoKICAgIFJldHVybnM6CiAgICAgIEEgV3JpdGVUb1BhcnF1ZXQgdHJhbnNmb3JtIHVzYWJsZSBmb3Igd3JpdGluZy4KICAgICIiIgogICAgc3VwZXIoV3JpdGVUb1BhcnF1ZXQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3NpbmsgPSBcCiAgICAgIF9jcmVhdGVfcGFycXVldF9zaW5rKAogICAgICAgICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICAgIHNjaGVtYSwKICAgICAgICAgIGNvZGVjLAogICAgICAgICAgcm93X2dyb3VwX2J1ZmZlcl9zaXplLAogICAgICAgICAgcmVjb3JkX2JhdGNoX3NpemUsCiAgICAgICAgICB1c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzLAogICAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICAgIG51bV9zaGFyZHMsCiAgICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgICAgbWltZV90eXBlCiAgICAgICkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBXcml0ZShzZWxmLl9zaW5rKQoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHsnc2lua19kZCc6IHNlbGYuX3Npbmt9CgoKZGVmIF9jcmVhdGVfcGFycXVldF9zaW5rKAogICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgIHNjaGVtYSwKICAgIGNvZGVjLAogICAgcm93X2dyb3VwX2J1ZmZlcl9zaXplLAogICAgcmVjb3JkX2JhdGNoX3NpemUsCiAgICB1c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzLAogICAgZmlsZV9uYW1lX3N1ZmZpeCwKICAgIG51bV9zaGFyZHMsCiAgICBzaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgbWltZV90eXBlKToKICByZXR1cm4gXAogICAgX1BhcnF1ZXRTaW5rKAogICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgc2NoZW1hLAogICAgICAgIGNvZGVjLAogICAgICAgIHJvd19ncm91cF9idWZmZXJfc2l6ZSwKICAgICAgICByZWNvcmRfYmF0Y2hfc2l6ZSwKICAgICAgICB1c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzLAogICAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgbnVtX3NoYXJkcywKICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlLAogICAgICAgIG1pbWVfdHlwZQogICAgKQoKCmNsYXNzIF9QYXJxdWV0U2luayhmaWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmspOgogICIiIkEgc2luayBmb3IgcGFycXVldCBmaWxlcy4iIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgIHNjaGVtYSwKICAgICAgY29kZWMsCiAgICAgIHJvd19ncm91cF9idWZmZXJfc2l6ZSwKICAgICAgcmVjb3JkX2JhdGNoX3NpemUsCiAgICAgIHVzZV9kZXByZWNhdGVkX2ludDk2X3RpbWVzdGFtcHMsCiAgICAgIGZpbGVfbmFtZV9zdWZmaXgsCiAgICAgIG51bV9zaGFyZHMsCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgIG1pbWVfdHlwZSk6CiAgICBzdXBlcihfUGFycXVldFNpbmssIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeD1maWxlX25hbWVfc3VmZml4LAogICAgICAgIG51bV9zaGFyZHM9bnVtX3NoYXJkcywKICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPXNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgY29kZXI9Tm9uZSwKICAgICAgICBtaW1lX3R5cGU9bWltZV90eXBlLAogICAgICAgICMgQ29tcHJlc3Npb24gaGFwcGVucyBhdCB0aGUgYmxvY2sgbGV2ZWwgdXNpbmcgdGhlIHN1cHBsaWVkIGNvZGVjLCBhbmQKICAgICAgICAjIG5vdCBhdCB0aGUgZmlsZSBsZXZlbC4KICAgICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuVU5DT01QUkVTU0VEKQogICAgc2VsZi5fc2NoZW1hID0gc2NoZW1hCiAgICBzZWxmLl9jb2RlYyA9IGNvZGVjCiAgICBzZWxmLl9yb3dfZ3JvdXBfYnVmZmVyX3NpemUgPSByb3dfZ3JvdXBfYnVmZmVyX3NpemUKICAgIHNlbGYuX3VzZV9kZXByZWNhdGVkX2ludDk2X3RpbWVzdGFtcHMgPSB1c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzCiAgICBzZWxmLl9idWZmZXIgPSBbW10gZm9yIF8gaW4gcmFuZ2UobGVuKHNjaGVtYS5uYW1lcykpXQogICAgc2VsZi5fYnVmZmVyX3NpemUgPSByZWNvcmRfYmF0Y2hfc2l6ZQogICAgc2VsZi5fcmVjb3JkX2JhdGNoZXMgPSBbXQogICAgc2VsZi5fcmVjb3JkX2JhdGNoZXNfYnl0ZV9zaXplID0gMAogICAgc2VsZi5fZmlsZV9oYW5kbGUgPSBOb25lCgogIGRlZiBvcGVuKHNlbGYsIHRlbXBfcGF0aCk6CiAgICBzZWxmLl9maWxlX2hhbmRsZSA9IHN1cGVyKF9QYXJxdWV0U2luaywgc2VsZikub3Blbih0ZW1wX3BhdGgpCiAgICByZXR1cm4gcHEuUGFycXVldFdyaXRlcigKICAgICAgICBzZWxmLl9maWxlX2hhbmRsZSwKICAgICAgICBzZWxmLl9zY2hlbWEsCiAgICAgICAgY29tcHJlc3Npb249c2VsZi5fY29kZWMsCiAgICAgICAgdXNlX2RlcHJlY2F0ZWRfaW50OTZfdGltZXN0YW1wcz1zZWxmLl91c2VfZGVwcmVjYXRlZF9pbnQ5Nl90aW1lc3RhbXBzKQoKICBkZWYgd3JpdGVfcmVjb3JkKHNlbGYsIHdyaXRlciwgdmFsdWUpOgogICAgaWYgbGVuKHNlbGYuX2J1ZmZlclswXSkgPj0gc2VsZi5fYnVmZmVyX3NpemU6CiAgICAgIHNlbGYuX2ZsdXNoX2J1ZmZlcigpCgogICAgaWYgc2VsZi5fcmVjb3JkX2JhdGNoZXNfYnl0ZV9zaXplID49IHNlbGYuX3Jvd19ncm91cF9idWZmZXJfc2l6ZToKICAgICAgc2VsZi5fd3JpdGVfYmF0Y2hlcyh3cml0ZXIpCgogICAgIyByZW9yZGVyIHRoZSBkYXRhIGluIGNvbHVtbmFyIGZvcm1hdC4KICAgIGZvciBpLCBuIGluIGVudW1lcmF0ZShzZWxmLl9zY2hlbWEubmFtZXMpOgogICAgICBzZWxmLl9idWZmZXJbaV0uYXBwZW5kKHZhbHVlW25dKQoKICBkZWYgY2xvc2Uoc2VsZiwgd3JpdGVyKToKICAgIGlmIGxlbihzZWxmLl9idWZmZXJbMF0pID4gMDoKICAgICAgc2VsZi5fZmx1c2hfYnVmZmVyKCkKICAgIGlmIHNlbGYuX3JlY29yZF9iYXRjaGVzX2J5dGVfc2l6ZSA+IDA6CiAgICAgIHNlbGYuX3dyaXRlX2JhdGNoZXMod3JpdGVyKQoKICAgIHdyaXRlci5jbG9zZSgpCiAgICBpZiBzZWxmLl9maWxlX2hhbmRsZToKICAgICAgc2VsZi5fZmlsZV9oYW5kbGUuY2xvc2UoKQogICAgICBzZWxmLl9maWxlX2hhbmRsZSA9IE5vbmUKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJlcyA9IHN1cGVyKF9QYXJxdWV0U2luaywgc2VsZikuZGlzcGxheV9kYXRhKCkKICAgIHJlc1snY29kZWMnXSA9IHN0cihzZWxmLl9jb2RlYykKICAgIHJlc1snc2NoZW1hJ10gPSBzdHIoc2VsZi5fc2NoZW1hKQogICAgcmVzWydyb3dfZ3JvdXBfYnVmZmVyX3NpemUnXSA9IHN0cihzZWxmLl9yb3dfZ3JvdXBfYnVmZmVyX3NpemUpCiAgICByZXR1cm4gcmVzCgogIGRlZiBfd3JpdGVfYmF0Y2hlcyhzZWxmLCB3cml0ZXIpOgogICAgdGFibGUgPSBwYS5UYWJsZS5mcm9tX2JhdGNoZXMoc2VsZi5fcmVjb3JkX2JhdGNoZXMpCiAgICBzZWxmLl9yZWNvcmRfYmF0Y2hlcyA9IFtdCiAgICBzZWxmLl9yZWNvcmRfYmF0Y2hlc19ieXRlX3NpemUgPSAwCiAgICB3cml0ZXIud3JpdGVfdGFibGUodGFibGUpCgogIGRlZiBfZmx1c2hfYnVmZmVyKHNlbGYpOgogICAgYXJyYXlzID0gW1tdIGZvciBfIGluIHJhbmdlKGxlbihzZWxmLl9zY2hlbWEubmFtZXMpKV0KICAgIGZvciB4LCB5IGluIGVudW1lcmF0ZShzZWxmLl9idWZmZXIpOgogICAgICBhcnJheXNbeF0gPSBwYS5hcnJheSh5LCB0eXBlPXNlbGYuX3NjaGVtYS50eXBlc1t4XSkKICAgICAgc2VsZi5fYnVmZmVyW3hdID0gW10KICAgIHJiID0gcGEuUmVjb3JkQmF0Y2guZnJvbV9hcnJheXMoYXJyYXlzLCBzZWxmLl9zY2hlbWEubmFtZXMpCiAgICBzZWxmLl9yZWNvcmRfYmF0Y2hlcy5hcHBlbmQocmIpCiAgICBzaXplID0gMAogICAgZm9yIHggaW4gYXJyYXlzOgogICAgICBmb3IgYiBpbiB4LmJ1ZmZlcnMoKToKICAgICAgICBzaXplID0gc2l6ZSArIGIuc2l6ZQogICAgc2VsZi5fcmVjb3JkX2JhdGNoZXNfYnl0ZV9zaXplID0gc2VsZi5fcmVjb3JkX2JhdGNoZXNfYnl0ZV9zaXplICsgc2l6ZQqUfZQojCRfQXJyb3dUYWJsZVRvUm93RGljdGlvbmFyaWVzLnByb2Nlc3OUalYxAQBLQktJh5SMHF9BcnJvd1RhYmxlVG9Sb3dEaWN0aW9uYXJpZXOUal0xAQBLP0tJh5SMH1JlYWRGcm9tUGFycXVldEJhdGNoZWQuX19pbml0X1+UalYxAQBLUEt+h5SMHVJlYWRGcm9tUGFycXVldEJhdGNoZWQuZXhwYW5klGpWMQEAS4BLgYeUjCNSZWFkRnJvbVBhcnF1ZXRCYXRjaGVkLmRpc3BsYXlfZGF0YZRqVjEBAEuDS4SHlIwWUmVhZEZyb21QYXJxdWV0QmF0Y2hlZJRqXTEBAEtMS4SHlIwYUmVhZEZyb21QYXJxdWV0Ll9faW5pdF9flGpWMQEAS4tLwIeUjBZSZWFkRnJvbVBhcnF1ZXQuZXhwYW5klGpWMQEAS8JLw4eUjBxSZWFkRnJvbVBhcnF1ZXQuZGlzcGxheV9kYXRhlGpWMQEAS8VLxoeUjA9SZWFkRnJvbVBhcnF1ZXSUal0xAQBLh0vGh5SMIlJlYWRBbGxGcm9tUGFycXVldEJhdGNoZWQuX19pbml0X1+UalYxAQBL1Evxh5SMIFJlYWRBbGxGcm9tUGFycXVldEJhdGNoZWQuZXhwYW5klGpWMQEAS/NL9IeUjBlSZWFkQWxsRnJvbVBhcnF1ZXRCYXRjaGVklGpdMQEAS8lL9IeUjBtSZWFkQWxsRnJvbVBhcnF1ZXQuX19pbml0X1+UalYxAQBL+Ev5h5SMGVJlYWRBbGxGcm9tUGFycXVldC5leHBhbmSUalYxAQBL+0v8h5SMElJlYWRBbGxGcm9tUGFycXVldJRqXTEBAEv3S/yHlIwWX2NyZWF0ZV9wYXJxdWV0X3NvdXJjZZRqVjEBAEv/TQcBh5SMKF9QYXJxdWV0VXRpbHMuZmluZF9maXJzdF9yb3dfZ3JvdXBfaW5kZXiUalYxAQBNCwFNEQGHlIwYX1BhcnF1ZXRVdGlscy5nZXRfb2Zmc2V0lGpWMQEATRMBTRoBh5SMJl9QYXJxdWV0VXRpbHMuZ2V0X251bWJlcl9vZl9yb3dfZ3JvdXBzlGpWMQEATRwBTR4Bh5SMDV9QYXJxdWV0VXRpbHOUal0xAQBNCgFNHgGHlIwXX1BhcnF1ZXRTb3VyY2UuX19pbml0X1+UalYxAQBNJAFNKQGHlIwbX1BhcnF1ZXRTb3VyY2UucmVhZF9yZWNvcmRzlGpWMQEATSsBTVQBh5SMDl9QYXJxdWV0U291cmNllGpdMQEATSEBTVQBh5SMF1dyaXRlVG9QYXJxdWV0Ll9faW5pdF9flGpWMQEATV0BTcABh5SMFVdyaXRlVG9QYXJxdWV0LmV4cGFuZJRqVjEBAE3CAU3DAYeUjBtXcml0ZVRvUGFycXVldC5kaXNwbGF5X2RhdGGUalYxAQBNxQFNxgGHlIwOV3JpdGVUb1BhcnF1ZXSUal0xAQBNVwFNxgGHlIwUX2NyZWF0ZV9wYXJxdWV0X3NpbmuUalYxAQBNyQFN4AGHlIwVX1BhcnF1ZXRTaW5rLl9faW5pdF9flGpWMQEATeUBTQMCh5SMEV9QYXJxdWV0U2luay5vcGVulGpWMQEATQUCTQsCh5SMGV9QYXJxdWV0U2luay53cml0ZV9yZWNvcmSUalYxAQBNDQJNFgKHlIwSX1BhcnF1ZXRTaW5rLmNsb3NllGpWMQEATRgCTSECh5SMGV9QYXJxdWV0U2luay5kaXNwbGF5X2RhdGGUalYxAQBNIwJNKAKHlIwbX1BhcnF1ZXRTaW5rLl93cml0ZV9iYXRjaGVzlGpWMQEATSoCTS4Ch5SMGl9QYXJxdWV0U2luay5fZmx1c2hfYnVmZmVylGpWMQEATTACTTsCh5SMDF9QYXJxdWV0U2lua5RqXTEBAE3jAU07AoeUdX2UKIwWUmVhZEZyb21QYXJxdWV0QmF0Y2hlZJRqvQMAAIwdUmVhZEZyb21QYXJxdWV0QmF0Y2hlZC5leHBhbmSUar0DAACMI1JlYWRGcm9tUGFycXVldEJhdGNoZWQuZGlzcGxheV9kYXRhlGq9AwAAjA9SZWFkRnJvbVBhcnF1ZXSUar0DAACMFlJlYWRGcm9tUGFycXVldC5leHBhbmSUar0DAACMHFJlYWRGcm9tUGFycXVldC5kaXNwbGF5X2RhdGGUar0DAACMGVJlYWRBbGxGcm9tUGFycXVldEJhdGNoZWSUar0DAACMIFJlYWRBbGxGcm9tUGFycXVldEJhdGNoZWQuZXhwYW5klGq9AwAAjBJSZWFkQWxsRnJvbVBhcnF1ZXSUar0DAACMGVJlYWRBbGxGcm9tUGFycXVldC5leHBhbmSUar0DAACMDldyaXRlVG9QYXJxdWV0lGq9AwAAjBVXcml0ZVRvUGFycXVldC5leHBhbmSUar0DAACMG1dyaXRlVG9QYXJxdWV0LmRpc3BsYXlfZGF0YZRqvQMAAHWMGGFwYWNoZV9iZWFtLmlvLnBhcnF1ZXRpb5R0lIwdYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnOUKFgnOgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJpb2Jhc2UuUmFuZ2VUcmFja2VyIGltcGxlbWVudGF0aW9ucyBwcm92aWRlZCB3aXRoIEFwYWNoZSBCZWFtLgoiIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGNvZGVjcwppbXBvcnQgbG9nZ2luZwppbXBvcnQgbWF0aAppbXBvcnQgdGhyZWFkaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcAoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCBsb25nCgpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKCl9fYWxsX18gPSBbCiAgICAnT2Zmc2V0UmFuZ2VUcmFja2VyJywKICAgICdMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyJywKICAgICdPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXInLAogICAgJ1Vuc3BsaXR0YWJsZVJhbmdlVHJhY2tlcicKXQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIE9mZnNldFJhbmdlVHJhY2tlcihpb2Jhc2UuUmFuZ2VUcmFja2VyKToKICAiIiJBICdSYW5nZVRyYWNrZXInIGZvciBub24tbmVnYXRpdmUgcG9zaXRpb25zIG9mIHR5cGUgJ2xvbmcnLiIiIgoKICAjIE9mZnNldCBjb3JyZXNwb25kaW5nIHRvIGluZmluaXR5LiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgYXMgdGhlIHVwcGVyLWJvdW5kCiAgIyBvZiBhIHJhbmdlLCBhbmQgaW5kaWNhdGVzIHJlYWRpbmcgYWxsIG9mIHRoZSByZWNvcmRzIHVudGlsIHRoZSBlbmQgd2l0aG91dAogICMgc3BlY2lmeWluZyBleGFjdGx5IHdoYXQgdGhlIGVuZCBpcy4KICAjIEluZmluaXRlIHJhbmdlcyBjYW5ub3QgYmUgc3BsaXQgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIHRvIGVzdGltYXRlCiAgIyBwcm9ncmVzcyB3aXRoaW4gdGhlbS4KICBPRkZTRVRfSU5GSU5JVFkgPSBmbG9hdCgnaW5mJykKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBlbmQpOgogICAgc3VwZXIoT2Zmc2V0UmFuZ2VUcmFja2VyLCBzZWxmKS5fX2luaXRfXygpCgogICAgaWYgc3RhcnQgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3RhcnQgb2Zmc2V0IG11c3Qgbm90IGJlIFwnTm9uZVwnJykKICAgIGlmIGVuZCBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdFbmQgb2Zmc2V0IG11c3Qgbm90IGJlIFwnTm9uZVwnJykKICAgIGFzc2VydCBpc2luc3RhbmNlKHN0YXJ0LCAoaW50LCBsb25nKSkKICAgIGlmIGVuZCAhPSBzZWxmLk9GRlNFVF9JTkZJTklUWToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZW5kLCAoaW50LCBsb25nKSkKCiAgICBhc3NlcnQgc3RhcnQgPD0gZW5kCgogICAgc2VsZi5fc3RhcnRfb2Zmc2V0ID0gc3RhcnQKICAgIHNlbGYuX3N0b3Bfb2Zmc2V0ID0gZW5kCgogICAgc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQgPSAtMQogICAgc2VsZi5fbGFzdF9hdHRlbXB0ZWRfcmVjb3JkX3N0YXJ0ID0gLTEKICAgIHNlbGYuX29mZnNldF9vZl9sYXN0X3NwbGl0X3BvaW50ID0gLTEKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCgogICAgc2VsZi5fc3BsaXRfcG9pbnRzX3NlZW4gPSAwCiAgICBzZWxmLl9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrID0gTm9uZQoKICBkZWYgc3RhcnRfcG9zaXRpb24oc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3RhcnRfb2Zmc2V0CgogIGRlZiBzdG9wX3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3N0b3Bfb2Zmc2V0CgogIEBwcm9wZXJ0eQogIGRlZiBsYXN0X3JlY29yZF9zdGFydChzZWxmKToKICAgIHJldHVybiBzZWxmLl9sYXN0X3JlY29yZF9zdGFydAoKICBAcHJvcGVydHkKICBkZWYgbGFzdF9hdHRlbXB0ZWRfcmVjb3JkX3N0YXJ0KHNlbGYpOgogICAgIiIiUmV0dXJuIGN1cnJlbnQgdmFsdWUgb2YgbGFzdF9hdHRlbXB0ZWRfcmVjb3JkX3N0YXJ0LgoKICAgIGxhc3RfYXR0ZW1wdGVkX3JlY29yZF9zdGFydCByZWNvcmRzIGEgdmFsaWQgcG9zaXRpb24gdGhhdCB0cmllZCB0byBiZQogICAgY2xhaW1lZCBieSBjYWxsaW5nIHRyeV9jbGFpbSgpLiBUaGlzIHZhbHVlIGlzIG9ubHkgdXBkYXRlZCBieSBgdHJ5X2NsYWltKClgCiAgICBubyBtYXR0ZXIgYHRyeV9jbGFpbSgpYCByZXR1cm5zIGBUcnVlYCBvciBgRmFsc2VgLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fbGFzdF9hdHRlbXB0ZWRfcmVjb3JkX3N0YXJ0CgogIGRlZiBfdmFsaWRhdGVfcmVjb3JkX3N0YXJ0KHNlbGYsIHJlY29yZF9zdGFydCwgc3BsaXRfcG9pbnQpOgogICAgIyBUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZSBjYWxsZWQgdW5kZXIgdGhlIGxvY2sgc2VsZi5sb2NrLgogICAgaWYgbm90IHNlbGYuX2xvY2subG9ja2VkKCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnVGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgYmUgY2FsbGVkIHVuZGVyIHRoZSBsb2NrIHNlbGYubG9jay4nKQoKICAgIGlmIHJlY29yZF9zdGFydCA8IHNlbGYuX2xhc3RfcmVjb3JkX3N0YXJ0OgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1RyeWluZyB0byByZXR1cm4gYSByZWNvcmQgW3N0YXJ0aW5nIGF0ICVkXSB3aGljaCBpcyBiZWZvcmUgdGhlICcKICAgICAgICAgICdsYXN0LXJldHVybmVkIHJlY29yZCBbc3RhcnRpbmcgYXQgJWRdJyAlCiAgICAgICAgICAocmVjb3JkX3N0YXJ0LCBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCkpCgogICAgaWYgKHNwbGl0X3BvaW50IGFuZCBzZWxmLl9vZmZzZXRfb2ZfbGFzdF9zcGxpdF9wb2ludCAhPSAtMSBhbmQKICAgICAgICByZWNvcmRfc3RhcnQgPT0gc2VsZi5fb2Zmc2V0X29mX2xhc3Rfc3BsaXRfcG9pbnQpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1JlY29yZCBhdCBhIHNwbGl0IHBvaW50IGhhcyBzYW1lIG9mZnNldCBhcyB0aGUgcHJldmlvdXMgc3BsaXQgJwogICAgICAgICAgJ3BvaW50OiAlZCcgJSByZWNvcmRfc3RhcnQpCgogICAgaWYgbm90IHNwbGl0X3BvaW50IGFuZCBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCA9PSAtMToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdUaGUgZmlyc3QgcmVjb3JkIFtzdGFydGluZyBhdCAlZF0gbXVzdCBiZSBhdCBhIHNwbGl0IHBvaW50JyAlCiAgICAgICAgICByZWNvcmRfc3RhcnQpCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcmVjb3JkX3N0YXJ0KToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgIyBBdHRlbXB0ZWQgY2xhaW0gc2hvdWxkIGJlIG1vbm90b25vdXMuCiAgICAgIGlmIHJlY29yZF9zdGFydCA8PSBzZWxmLl9sYXN0X2F0dGVtcHRlZF9yZWNvcmRfc3RhcnQ6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1RyeWluZyB0byByZXR1cm4gYSByZWNvcmQgW3N0YXJ0aW5nIGF0ICVkXSB3aGljaCBpcyBub3QgZ3JlYXRlcicKICAgICAgICAgICAgJ3RoYW4gdGhlIGxhc3QtYXR0ZW1wdGVkIHJlY29yZCBbc3RhcnRpbmcgYXQgJWRdJyAlCiAgICAgICAgICAgIChyZWNvcmRfc3RhcnQsIHNlbGYuX2xhc3RfYXR0ZW1wdGVkX3JlY29yZF9zdGFydCkpCiAgICAgIHNlbGYuX3ZhbGlkYXRlX3JlY29yZF9zdGFydChyZWNvcmRfc3RhcnQsIFRydWUpCiAgICAgIHNlbGYuX2xhc3RfYXR0ZW1wdGVkX3JlY29yZF9zdGFydCA9IHJlY29yZF9zdGFydAogICAgICBpZiByZWNvcmRfc3RhcnQgPj0gc2VsZi5zdG9wX3Bvc2l0aW9uKCk6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgIHNlbGYuX29mZnNldF9vZl9sYXN0X3NwbGl0X3BvaW50ID0gcmVjb3JkX3N0YXJ0CiAgICAgIHNlbGYuX2xhc3RfcmVjb3JkX3N0YXJ0ID0gcmVjb3JkX3N0YXJ0CiAgICAgIHNlbGYuX3NwbGl0X3BvaW50c19zZWVuICs9IDEKICAgICAgcmV0dXJuIFRydWUKCiAgZGVmIHNldF9jdXJyZW50X3Bvc2l0aW9uKHNlbGYsIHJlY29yZF9zdGFydCk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHNlbGYuX3ZhbGlkYXRlX3JlY29yZF9zdGFydChyZWNvcmRfc3RhcnQsIEZhbHNlKQogICAgICBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCA9IHJlY29yZF9zdGFydAoKICBkZWYgdHJ5X3NwbGl0KHNlbGYsIHNwbGl0X29mZnNldCk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzcGxpdF9vZmZzZXQsIChpbnQsIGxvbmcpKQogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBzZWxmLl9zdG9wX29mZnNldCA9PSBPZmZzZXRSYW5nZVRyYWNrZXIuT0ZGU0VUX0lORklOSVRZOgogICAgICAgIF9MT0dHRVIuZGVidWcoCiAgICAgICAgICAgICdyZWZ1c2luZyB0byBzcGxpdCAlciBhdCAlZDogc3RvcCBwb3NpdGlvbiB1bnNwZWNpZmllZCcsCiAgICAgICAgICAgIHNlbGYsCiAgICAgICAgICAgIHNwbGl0X29mZnNldCkKICAgICAgICByZXR1cm4KICAgICAgaWYgc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQgPT0gLTE6CiAgICAgICAgX0xPR0dFUi5kZWJ1ZygKICAgICAgICAgICAgJ1JlZnVzaW5nIHRvIHNwbGl0ICVyIGF0ICVkOiB1bnN0YXJ0ZWQnLCBzZWxmLCBzcGxpdF9vZmZzZXQpCiAgICAgICAgcmV0dXJuCgogICAgICBpZiBzcGxpdF9vZmZzZXQgPD0gc2VsZi5fbGFzdF9yZWNvcmRfc3RhcnQ6CiAgICAgICAgX0xPR0dFUi5kZWJ1ZygKICAgICAgICAgICAgJ1JlZnVzaW5nIHRvIHNwbGl0ICVyIGF0ICVkOiBhbHJlYWR5IHBhc3QgcHJvcG9zZWQgc3RvcCBvZmZzZXQnLAogICAgICAgICAgICBzZWxmLAogICAgICAgICAgICBzcGxpdF9vZmZzZXQpCiAgICAgICAgcmV0dXJuCiAgICAgIGlmIChzcGxpdF9vZmZzZXQgPCBzZWxmLnN0YXJ0X3Bvc2l0aW9uKCkgb3IKICAgICAgICAgIHNwbGl0X29mZnNldCA+PSBzZWxmLnN0b3BfcG9zaXRpb24oKSk6CiAgICAgICAgX0xPR0dFUi5kZWJ1ZygKICAgICAgICAgICAgJ1JlZnVzaW5nIHRvIHNwbGl0ICVyIGF0ICVkOiBwcm9wb3NlZCBzcGxpdCBwb3NpdGlvbiBvdXQgb2YgcmFuZ2UnLAogICAgICAgICAgICBzZWxmLAogICAgICAgICAgICBzcGxpdF9vZmZzZXQpCiAgICAgICAgcmV0dXJuCgogICAgICBfTE9HR0VSLmRlYnVnKCdBZ3JlZWluZyB0byBzcGxpdCAlciBhdCAlZCcsIHNlbGYsIHNwbGl0X29mZnNldCkKCiAgICAgIHNwbGl0X2ZyYWN0aW9uID0gKAogICAgICAgICAgZmxvYXQoc3BsaXRfb2Zmc2V0IC0gc2VsZi5fc3RhcnRfb2Zmc2V0KSAvCiAgICAgICAgICAoc2VsZi5fc3RvcF9vZmZzZXQgLSBzZWxmLl9zdGFydF9vZmZzZXQpKQogICAgICBzZWxmLl9zdG9wX29mZnNldCA9IHNwbGl0X29mZnNldAoKICAgICAgcmV0dXJuIHNlbGYuX3N0b3Bfb2Zmc2V0LCBzcGxpdF9mcmFjdGlvbgoKICBkZWYgZnJhY3Rpb25fY29uc3VtZWQoc2VsZik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICMgc2VsZi5sYXN0X3JlY29yZF9zdGFydCBtYXkgYmVjb21lIGxhcmdlciB0aGFuIHNlbGYuZW5kX29mZnNldCB3aGVuCiAgICAgICMgcmVhZGluZyB0aGUgcmVjb3JkcyBzaW5jZSBhbnkgcmVjb3JkIHRoYXQgc3RhcnRzIGJlZm9yZSB0aGUgZmlyc3QgJ3NwbGl0CiAgICAgICMgcG9pbnQnIGF0IG9yIGFmdGVyIHRoZSBkZWZpbmVkICdzdG9wIG9mZnNldCcgaXMgY29uc2lkZXJlZCB0byBiZSB3aXRoaW4KICAgICAgIyB0aGUgcmFuZ2Ugb2YgdGhlIE9mZnNldFJhbmdlVHJhY2tlci4gSGVuY2UgZnJhY3Rpb24gY291bGQgYmUgPiAxLgogICAgICAjIHNlbGYubGFzdF9yZWNvcmRfc3RhcnQgaXMgaW5pdGlhbGl6ZWQgdG8gLTEsIGhlbmNlIGZyYWN0aW9uIG1heSBiZSA8IDAuCiAgICAgICMgQm91bmRpbmcgdGhlIHRvIHJhbmdlIFswLCAxXS4KICAgICAgcmV0dXJuIHNlbGYucG9zaXRpb25fdG9fZnJhY3Rpb24oCiAgICAgICAgICBzZWxmLl9sYXN0X3JlY29yZF9zdGFydCwgc2VsZi5zdGFydF9wb3NpdGlvbigpLCBzZWxmLnN0b3BfcG9zaXRpb24oKSkKCiAgZGVmIHBvc2l0aW9uX3RvX2ZyYWN0aW9uKHNlbGYsIHBvcywgc3RhcnQsIHN0b3ApOgogICAgZnJhY3Rpb24gPSAxLjAgKiAocG9zIC0gc3RhcnQpIC8gKHN0b3AgLSBzdGFydCkgaWYgc3RhcnQgIT0gc3RvcCBlbHNlIDAuMAogICAgcmV0dXJuIG1heCgwLjAsIG1pbigxLjAsIGZyYWN0aW9uKSkKCiAgZGVmIHBvc2l0aW9uX2F0X2ZyYWN0aW9uKHNlbGYsIGZyYWN0aW9uKToKICAgIGlmIHNlbGYuc3RvcF9wb3NpdGlvbigpID09IE9mZnNldFJhbmdlVHJhY2tlci5PRkZTRVRfSU5GSU5JVFk6CiAgICAgIHJhaXNlIEV4Y2VwdGlvbigKICAgICAgICAgICdnZXRfcG9zaXRpb25fZm9yX2ZyYWN0aW9uX2NvbnN1bWVkIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBhbiAnCiAgICAgICAgICAndW5ib3VuZGVkIHJhbmdlJykKICAgIHJldHVybiBpbnQoCiAgICAgICAgbWF0aC5jZWlsKAogICAgICAgICAgICBzZWxmLnN0YXJ0X3Bvc2l0aW9uKCkgKyBmcmFjdGlvbiAqCiAgICAgICAgICAgIChzZWxmLnN0b3BfcG9zaXRpb24oKSAtIHNlbGYuc3RhcnRfcG9zaXRpb24oKSkpKQoKICBkZWYgc3BsaXRfcG9pbnRzKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzcGxpdF9wb2ludHNfY29uc3VtZWQgPSAoCiAgICAgICAgICAwIGlmIHNlbGYuX3NwbGl0X3BvaW50c19zZWVuID09IDAgZWxzZSBzZWxmLl9zcGxpdF9wb2ludHNfc2VlbiAtIDEpCiAgICAgIHNwbGl0X3BvaW50c191bmNsYWltZWQgPSAoCiAgICAgICAgICBzZWxmLl9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKHNlbGYuc3RvcF9wb3NpdGlvbigpKQogICAgICAgICAgaWYgc2VsZi5fc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayBlbHNlCiAgICAgICAgICBpb2Jhc2UuUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOKQogICAgICBzcGxpdF9wb2ludHNfcmVtYWluaW5nID0gKAogICAgICAgICAgaW9iYXNlLlJhbmdlVHJhY2tlci5TUExJVF9QT0lOVFNfVU5LTk9XTgogICAgICAgICAgaWYgc3BsaXRfcG9pbnRzX3VuY2xhaW1lZCA9PSBpb2Jhc2UuUmFuZ2VUcmFja2VyLlNQTElUX1BPSU5UU19VTktOT1dOCiAgICAgICAgICBlbHNlIChzcGxpdF9wb2ludHNfdW5jbGFpbWVkICsgMSkpCgogICAgICByZXR1cm4gKHNwbGl0X3BvaW50c19jb25zdW1lZCwgc3BsaXRfcG9pbnRzX3JlbWFpbmluZykKCiAgZGVmIHNldF9zcGxpdF9wb2ludHNfdW5jbGFpbWVkX2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKICAgIHNlbGYuX3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2sgPSBjYWxsYmFjawoKCmNsYXNzIE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlcihpb2Jhc2UuUmFuZ2VUcmFja2VyKToKICAiIiIKICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciByYW5nZSB0cmFja2VycyB3aG9zZSBwb3NpdGlvbnMgYXJlIGNvbXBhcmFibGUuCgogIFN1YmNsYXNzZXMgb25seSBuZWVkIHRvIGltcGxlbWVudCB0aGUgbWFwcGluZyBmcm9tIHBvc2l0aW9uIHJhbmdlcwogIHRvIGFuZCBmcm9tIHRoZSBjbG9zZWQgaW50ZXJ2YWwgWzAsIDFdLgogICIiIgoKICBVTlNUQVJURUQgPSBvYmplY3QoKQoKICBkZWYgX19pbml0X18oc2VsZiwgc3RhcnRfcG9zaXRpb249Tm9uZSwgc3RvcF9wb3NpdGlvbj1Ob25lKToKICAgIHNlbGYuX3N0YXJ0X3Bvc2l0aW9uID0gc3RhcnRfcG9zaXRpb24KICAgIHNlbGYuX3N0b3BfcG9zaXRpb24gPSBzdG9wX3Bvc2l0aW9uCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgc2VsZi5fbGFzdF9jbGFpbSA9IHNlbGYuVU5TVEFSVEVECgogIGRlZiBzdGFydF9wb3NpdGlvbihzZWxmKToKICAgIHJldHVybiBzZWxmLl9zdGFydF9wb3NpdGlvbgoKICBkZWYgc3RvcF9wb3NpdGlvbihzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYuX3N0b3BfcG9zaXRpb24KCiAgZGVmIHRyeV9jbGFpbShzZWxmLCBwb3NpdGlvbik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGlmIHNlbGYuX2xhc3RfY2xhaW0gaXMgbm90IHNlbGYuVU5TVEFSVEVEIGFuZCBwb3NpdGlvbiA8IHNlbGYuX2xhc3RfY2xhaW06CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIlBvc2l0aW9ucyBtdXN0IGJlIGNsYWltZWQgaW4gb3JkZXI6ICIKICAgICAgICAgICAgImNsYWltICclcycgYXR0ZW1wdGVkIGFmdGVyIGNsYWltICclcyciICUKICAgICAgICAgICAgKHBvc2l0aW9uLCBzZWxmLl9sYXN0X2NsYWltKSkKICAgICAgZWxpZiBzZWxmLl9zdGFydF9wb3NpdGlvbiBpcyBub3QgTm9uZSBhbmQgcG9zaXRpb24gPCBzZWxmLl9zdGFydF9wb3NpdGlvbjoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAiQ2xhaW0gJyVzJyBpcyBiZWZvcmUgc3RhcnQgJyVzJyIgJQogICAgICAgICAgICAocG9zaXRpb24sIHNlbGYuX3N0YXJ0X3Bvc2l0aW9uKSkKICAgICAgaWYgc2VsZi5fc3RvcF9wb3NpdGlvbiBpcyBOb25lIG9yIHBvc2l0aW9uIDwgc2VsZi5fc3RvcF9wb3NpdGlvbjoKICAgICAgICBzZWxmLl9sYXN0X2NsYWltID0gcG9zaXRpb24KICAgICAgICByZXR1cm4gVHJ1ZQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBGYWxzZQoKICBkZWYgcG9zaXRpb25fYXRfZnJhY3Rpb24oc2VsZiwgZnJhY3Rpb24pOgogICAgcmV0dXJuIHNlbGYuZnJhY3Rpb25fdG9fcG9zaXRpb24oCiAgICAgICAgZnJhY3Rpb24sIHNlbGYuX3N0YXJ0X3Bvc2l0aW9uLCBzZWxmLl9zdG9wX3Bvc2l0aW9uKQoKICBkZWYgdHJ5X3NwbGl0KHNlbGYsIHBvc2l0aW9uKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgKChzZWxmLl9zdG9wX3Bvc2l0aW9uIGlzIG5vdCBOb25lIGFuZCBwb3NpdGlvbiA+PSBzZWxmLl9zdG9wX3Bvc2l0aW9uKQogICAgICAgICAgb3IgKHNlbGYuX3N0YXJ0X3Bvc2l0aW9uIGlzIG5vdCBOb25lIGFuZAogICAgICAgICAgICAgIHBvc2l0aW9uIDw9IHNlbGYuX3N0YXJ0X3Bvc2l0aW9uKSk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIlNwbGl0IGF0ICclcycgbm90IGluIHJhbmdlICVzIiAlCiAgICAgICAgICAgIChwb3NpdGlvbiwgW3NlbGYuX3N0YXJ0X3Bvc2l0aW9uLCBzZWxmLl9zdG9wX3Bvc2l0aW9uXSkpCiAgICAgIGlmIHNlbGYuX2xhc3RfY2xhaW0gaXMgc2VsZi5VTlNUQVJURUQgb3Igc2VsZi5fbGFzdF9jbGFpbSA8IHBvc2l0aW9uOgogICAgICAgIGZyYWN0aW9uID0gc2VsZi5wb3NpdGlvbl90b19mcmFjdGlvbigKICAgICAgICAgICAgcG9zaXRpb24sIHN0YXJ0PXNlbGYuX3N0YXJ0X3Bvc2l0aW9uLCBlbmQ9c2VsZi5fc3RvcF9wb3NpdGlvbikKICAgICAgICBzZWxmLl9zdG9wX3Bvc2l0aW9uID0gcG9zaXRpb24KICAgICAgICByZXR1cm4gcG9zaXRpb24sIGZyYWN0aW9uCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIE5vbmUKCiAgZGVmIGZyYWN0aW9uX2NvbnN1bWVkKHNlbGYpOgogICAgaWYgc2VsZi5fbGFzdF9jbGFpbSBpcyBzZWxmLlVOU1RBUlRFRDoKICAgICAgcmV0dXJuIDAKICAgIGVsc2U6CiAgICAgIHJldHVybiBzZWxmLnBvc2l0aW9uX3RvX2ZyYWN0aW9uKAogICAgICAgICAgc2VsZi5fbGFzdF9jbGFpbSwgc2VsZi5fc3RhcnRfcG9zaXRpb24sIHNlbGYuX3N0b3BfcG9zaXRpb24pCgogIGRlZiBmcmFjdGlvbl90b19wb3NpdGlvbihzZWxmLCBmcmFjdGlvbiwgc3RhcnQsIGVuZCk6CiAgICAiIiIKICAgIENvbnZlcnRzIGEgZnJhY3Rpb24gYmV0d2VlbiAwIGFuZCAxIHRvIGEgcG9zaXRpb24gYmV0d2VlbiBzdGFydCBhbmQgZW5kLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyKGlvYmFzZS5SYW5nZVRyYWNrZXIpOgogICIiIkEgUmFuZ2VUcmFja2VyIHRoYXQgYWx3YXlzIGlnbm9yZXMgc3BsaXQgcmVxdWVzdHMuCgogIFRoaXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIGdpdmVuCiAgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlcmAgb2JqZWN0IHVuc3BsaXR0YWJsZSBieQogIGlnbm9yaW5nIGFsbCBjYWxscyB0byA6bWV0aDpgLnRyeV9zcGxpdCgpYC4gQWxsIG90aGVyIGNhbGxzIHdpbGwgYmUgZGVsZWdhdGVkCiAgdG8gdGhlIGdpdmVuIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5SYW5nZVRyYWNrZXJgLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCByYW5nZV90cmFja2VyKToKICAgICIiIkluaXRpYWxpemVzIFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci4KCiAgICBBcmdzOgogICAgICByYW5nZV90cmFja2VyICh+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLlJhbmdlVHJhY2tlcik6IGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuUmFuZ2VUcmFja2VyYCB0byB3aGljaCBhbGwgbWV0aG9kCiAgICAgICAgY2FsbHMgZXhwZWN0IGNhbGxzIHRvIDptZXRoOmAudHJ5X3NwbGl0KClgIHdpbGwgYmUgZGVsZWdhdGVkLgogICAgIiIiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShyYW5nZV90cmFja2VyLCBpb2Jhc2UuUmFuZ2VUcmFja2VyKQogICAgc2VsZi5fcmFuZ2VfdHJhY2tlciA9IHJhbmdlX3RyYWNrZXIKCiAgZGVmIHN0YXJ0X3Bvc2l0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3JhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKQoKICBkZWYgc3RvcF9wb3NpdGlvbihzZWxmKToKICAgIHJldHVybiBzZWxmLl9yYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQoKICBkZWYgcG9zaXRpb25fYXRfZnJhY3Rpb24oc2VsZiwgZnJhY3Rpb24pOgogICAgcmV0dXJuIHNlbGYuX3JhbmdlX3RyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb24oZnJhY3Rpb24pCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcG9zaXRpb24pOgogICAgcmV0dXJuIHNlbGYuX3JhbmdlX3RyYWNrZXIudHJ5X2NsYWltKHBvc2l0aW9uKQoKICBkZWYgdHJ5X3NwbGl0KHNlbGYsIHBvc2l0aW9uKToKICAgIHJldHVybiBOb25lCgogIGRlZiBzZXRfY3VycmVudF9wb3NpdGlvbihzZWxmLCBwb3NpdGlvbik6CiAgICBzZWxmLl9yYW5nZV90cmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9uKHBvc2l0aW9uKQoKICBkZWYgZnJhY3Rpb25fY29uc3VtZWQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fcmFuZ2VfdHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZCgpCgogIGRlZiBzcGxpdF9wb2ludHMoc2VsZik6CiAgICAjIEFuIHVuc3BsaXR0YWJsZSByYW5nZSBvbmx5IGNvbnRhaW5zIGEgc2luZ2xlIHNwbGl0IHBvaW50LgogICAgcmV0dXJuICgwLCAxKQoKICBkZWYgc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgogICAgc2VsZi5fcmFuZ2VfdHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayhjYWxsYmFjaykKCgpjbGFzcyBMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyKE9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlcik6CiAgIiIiCiAgQSByYW5nZSB0cmFja2VyIHRoYXQgdHJhY2tzIHByb2dyZXNzIHRocm91Z2ggYSBsZXhpY29ncmFwaGljYWxseQogIG9yZGVyZWQga2V5c3BhY2Ugb2Ygc3RyaW5ncy4KICAiIiIKICBAY2xhc3NtZXRob2QKICBkZWYgZnJhY3Rpb25fdG9fcG9zaXRpb24oY2xzLCBmcmFjdGlvbiwgc3RhcnQ9Tm9uZSwgZW5kPU5vbmUpOgogICAgIiIiCiAgICBMaW5lYXJseSBpbnRlcnBvbGF0ZXMgYSBrZXkgdGhhdCBpcyBsZXhpY29ncmFwaGljYWxseQogICAgZnJhY3Rpb24gb2YgdGhlIHdheSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQuCiAgICAiIiIKICAgIGFzc2VydCAwIDw9IGZyYWN0aW9uIDw9IDEsIGZyYWN0aW9uCiAgICBpZiBzdGFydCBpcyBOb25lOgogICAgICBzdGFydCA9IGInJwogICAgaWYgZnJhY3Rpb24gPT0gMToKICAgICAgcmV0dXJuIGVuZAogICAgZWxpZiBmcmFjdGlvbiA9PSAwOgogICAgICByZXR1cm4gc3RhcnQKICAgIGVsc2U6CiAgICAgIGlmIG5vdCBlbmQ6CiAgICAgICAgY29tbW9uX3ByZWZpeF9sZW4gPSBsZW4oc3RhcnQpIC0gbGVuKHN0YXJ0LmxzdHJpcChiJ1x4RkYnKSkKICAgICAgZWxzZToKICAgICAgICBmb3IgaXgsIChzLCBlKSBpbiBlbnVtZXJhdGUoemlwKHN0YXJ0LCBlbmQpKToKICAgICAgICAgIGlmIHMgIT0gZToKICAgICAgICAgICAgY29tbW9uX3ByZWZpeF9sZW4gPSBpeAogICAgICAgICAgICBicmVhawogICAgICAgIGVsc2U6CiAgICAgICAgICBjb21tb25fcHJlZml4X2xlbiA9IG1pbihsZW4oc3RhcnQpLCBsZW4oZW5kKSkKICAgICAgIyBDb252ZXJ0IHRoZSByZWxhdGl2ZSBwcmVjaXNpb24gb2YgZnJhY3Rpb24gKH41MyBiaXRzKSB0byBhbiBhYnNvbHV0ZQogICAgICAjIHByZWNpc2lvbiBuZWVkZWQgdG8gcmVwcmVzZW50IHZhbHVlcyBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgZGlzdGluY3RseS4KICAgICAgcHJlYyA9IGNvbW1vbl9wcmVmaXhfbGVuICsgaW50KC1tYXRoLmxvZyhmcmFjdGlvbiwgMjU2KSkgKyA3CiAgICAgIGlzdGFydCA9IGNscy5fYnl0ZXN0cmluZ190b19pbnQoc3RhcnQsIHByZWMpCiAgICAgIGllbmQgPSBjbHMuX2J5dGVzdHJpbmdfdG9faW50KGVuZCwgcHJlYykgaWYgZW5kIGVsc2UgMSA8PCAocHJlYyAqIDgpCiAgICAgIGlrZXkgPSBpc3RhcnQgKyBpbnQoKGllbmQgLSBpc3RhcnQpICogZnJhY3Rpb24pCiAgICAgICMgQ291bGQgYmUgZXF1YWwgZHVlIHRvIHJvdW5kaW5nLgogICAgICAjIEFkanVzdCB0byBlbnN1cmUgd2UgbmV2ZXIgcmV0dXJuIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZAogICAgICAjIHVubGVzcyBmcmFjdGlvbiBpcyBleGF0bHkgMCBvciAxLgogICAgICBpZiBpa2V5ID09IGlzdGFydDoKICAgICAgICBpa2V5ICs9IDEKICAgICAgZWxpZiBpa2V5ID09IGllbmQ6CiAgICAgICAgaWtleSAtPSAxCiAgICAgIHJldHVybiBjbHMuX2J5dGVzdHJpbmdfZnJvbV9pbnQoaWtleSwgcHJlYykucnN0cmlwKGInXDAnKQoKICBAY2xhc3NtZXRob2QKICBkZWYgcG9zaXRpb25fdG9fZnJhY3Rpb24oY2xzLCBrZXksIHN0YXJ0PU5vbmUsIGVuZD1Ob25lKToKICAgICIiIgogICAgUmV0dXJucyB0aGUgZnJhY3Rpb24gb2Yga2V5cyBpbiB0aGUgcmFuZ2UgW3N0YXJ0LCBlbmQpIHRoYXQKICAgIGFyZSBsZXNzIHRoYW4gdGhlIGdpdmVuIGtleS4KICAgICIiIgogICAgaWYgbm90IGtleToKICAgICAgcmV0dXJuIDAKICAgIGlmIHN0YXJ0IGlzIE5vbmU6CiAgICAgIHN0YXJ0ID0gYicnCiAgICBwcmVjID0gbGVuKHN0YXJ0KSArIDcKICAgIGlmIGtleS5zdGFydHN3aXRoKHN0YXJ0KToKICAgICAgIyBIaWdoZXIgYWJzb2x1dGUgcHJlY2lzaW9uIG5lZWRlZCBmb3IgdmVyeSBzbWFsbCB2YWx1ZXMgb2YgZml4ZWQKICAgICAgIyByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAgcHJlYyA9IG1heChwcmVjLCBsZW4oa2V5KSAtIGxlbihrZXlbbGVuKHN0YXJ0KTpdLnN0cmlwKGInXDAnKSkgKyA3KQogICAgaXN0YXJ0ID0gY2xzLl9ieXRlc3RyaW5nX3RvX2ludChzdGFydCwgcHJlYykKICAgIGlrZXkgPSBjbHMuX2J5dGVzdHJpbmdfdG9faW50KGtleSwgcHJlYykKICAgIGllbmQgPSBjbHMuX2J5dGVzdHJpbmdfdG9faW50KGVuZCwgcHJlYykgaWYgZW5kIGVsc2UgMSA8PCAocHJlYyAqIDgpCiAgICByZXR1cm4gZmxvYXQoaWtleSAtIGlzdGFydCkgLyAoaWVuZCAtIGlzdGFydCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfYnl0ZXN0cmluZ190b19pbnQocywgcHJlYyk6CiAgICAiIiIKICAgIFJldHVybnMgaW50KDI1NioqcHJlYyAqIGYpIHdoZXJlIGYgaXMgdGhlIGZyYWN0aW9uCiAgICByZXByZXNlbnRlZCBieSBpbnRlcnByZXRpbmcgJy4nICsgcyBhcyBhIGJhc2UtMjU2CiAgICBmbG9hdGluZyBwb2ludCBudW1iZXIuCiAgICAiIiIKICAgIGlmIG5vdCBzOgogICAgICByZXR1cm4gMAogICAgZWxpZiBsZW4ocykgPCBwcmVjOgogICAgICBzICs9IGInXDAnICogKHByZWMgLSBsZW4ocykpCiAgICBlbHNlOgogICAgICBzID0gc1s6cHJlY10KICAgIHJldHVybiBpbnQoY29kZWNzLmVuY29kZShzLCAnaGV4JyksIDE2KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9ieXRlc3RyaW5nX2Zyb21faW50KGksIHByZWMpOgogICAgIiIiCiAgICBJbnZlcnNlIG9mIF9ieXRlc3RyaW5nX3RvX2ludC4KICAgICIiIgogICAgaCA9ICcleCcgJSBpCiAgICByZXR1cm4gY29kZWNzLmRlY29kZSgnMCcgKiAoMiAqIHByZWMgLSBsZW4oaCkpICsgaCwgJ2hleCcpCpSVPSwBAAAAAAB9lCiMG09mZnNldFJhbmdlVHJhY2tlci5fX2luaXRfX5RqVjEBAEs3S02HlIwhT2Zmc2V0UmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGpWMQEAS09LUIeUjCBPZmZzZXRSYW5nZVRyYWNrZXIuc3RvcF9wb3NpdGlvbpRqVjEBAEtSS1OHlIwkT2Zmc2V0UmFuZ2VUcmFja2VyLmxhc3RfcmVjb3JkX3N0YXJ0lGpWMQEAS1VLV4eUjC5PZmZzZXRSYW5nZVRyYWNrZXIubGFzdF9hdHRlbXB0ZWRfcmVjb3JkX3N0YXJ0lGpWMQEAS1lLYYeUjClPZmZzZXRSYW5nZVRyYWNrZXIuX3ZhbGlkYXRlX3JlY29yZF9zdGFydJRqVjEBAEtjS3iHlIwcT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9jbGFpbZRqVjEBAEt6S4mHlIwnT2Zmc2V0UmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ulGpWMQEAS4tLjoeUjBxPZmZzZXRSYW5nZVRyYWNrZXIudHJ5X3NwbGl0lGpWMQEAS5BLs4eUjCRPZmZzZXRSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWSUalYxAQBLtUu+h5SMJ09mZnNldFJhbmdlVHJhY2tlci5wb3NpdGlvbl90b19mcmFjdGlvbpRqVjEBAEvAS8KHlIwnT2Zmc2V0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9ulGpWMQEAS8RLzIeUjB9PZmZzZXRSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzlGpWMQEAS85L24eUjDZPZmZzZXRSYW5nZVRyYWNrZXIuc2V0X3NwbGl0X3BvaW50c191bmNsYWltZWRfY2FsbGJhY2uUalYxAQBL3Uveh5SMEk9mZnNldFJhbmdlVHJhY2tlcpRqXTEBAEstS96HlIwkT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLl9faW5pdF9flGpWMQEAS+tL74eUjCpPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb26UalYxAQBL8Uvyh5SMKU9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9ulGpWMQEAS/RL9oeUjCVPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIudHJ5X2NsYWltlGpWMQEAS/hNBwGHlIwwT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLnBvc2l0aW9uX2F0X2ZyYWN0aW9ulGpWMQEATQkBTQsBh5SMJU9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci50cnlfc3BsaXSUalYxAQBNDQFNGwGHlIwtT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLmZyYWN0aW9uX2NvbnN1bWVklGpWMQEATR0BTSIBh5SMME9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvbpRqVjEBAE0kAU0oAYeUjBtPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXKUal0xAQBL4U0oAYeUjCFVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuX19pbml0X1+UalYxAQBNMwFNPAGHlIwnVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGpWMQEATT4BTT8Bh5SMJlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9ulGpWMQEATUEBTUIBh5SMLVVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbpRqVjEBAE1EAU1FAYeUjCJVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIudHJ5X2NsYWltlGpWMQEATUcBTUgBh5SMIlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci50cnlfc3BsaXSUalYxAQBNSgFNSwGHlIwtVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ulGpWMQEATU0BTU4Bh5SMKlVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZJRqVjEBAE1QAU1RAYeUjCVVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuc3BsaXRfcG9pbnRzlGpWMQEATVMBTVUBh5SMPFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFja5RqVjEBAE1XAU1YAYeUjBhVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXKUal0xAQBNKwFNWAGHlIwxTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvbpRqVjEBAE1gAU2EAYeUjDFMZXhpY29ncmFwaGljS2V5UmFuZ2VUcmFja2VyLnBvc2l0aW9uX3RvX2ZyYWN0aW9ulGpWMQEATYYBTZgBh5SML0xleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIuX2J5dGVzdHJpbmdfdG9faW50lGpWMQEATZoBTacBh5SMMUxleGljb2dyYXBoaWNLZXlSYW5nZVRyYWNrZXIuX2J5dGVzdHJpbmdfZnJvbV9pbnSUalYxAQBNqQFNrwGHlIwcTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlcpRqXTEBAE1bAU2vAYeUdX2UKIwST2Zmc2V0UmFuZ2VUcmFja2VylGoVBAAAjCFPZmZzZXRSYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb26UahUEAACMIE9mZnNldFJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9ulGoVBAAAjBxPZmZzZXRSYW5nZVRyYWNrZXIudHJ5X2NsYWltlGoVBAAAjCdPZmZzZXRSYW5nZVRyYWNrZXIuc2V0X2N1cnJlbnRfcG9zaXRpb26UahUEAACMHE9mZnNldFJhbmdlVHJhY2tlci50cnlfc3BsaXSUahUEAACMJE9mZnNldFJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZJRqFQQAAIwnT2Zmc2V0UmFuZ2VUcmFja2VyLnBvc2l0aW9uX3RvX2ZyYWN0aW9ulGoVBAAAjCdPZmZzZXRSYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb26UahUEAACMH09mZnNldFJhbmdlVHJhY2tlci5zcGxpdF9wb2ludHOUahUEAACMNk9mZnNldFJhbmdlVHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFja5RqFQQAAIwbT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VylGoVBAAAjCpPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIuc3RhcnRfcG9zaXRpb26UahUEAACMKU9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5zdG9wX3Bvc2l0aW9ulGoVBAAAjCVPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIudHJ5X2NsYWltlGoVBAAAjDBPcmRlcmVkUG9zaXRpb25SYW5nZVRyYWNrZXIucG9zaXRpb25fYXRfZnJhY3Rpb26UahUEAACMJU9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci50cnlfc3BsaXSUahUEAACMLU9yZGVyZWRQb3NpdGlvblJhbmdlVHJhY2tlci5mcmFjdGlvbl9jb25zdW1lZJRqFQQAAIwwT3JkZXJlZFBvc2l0aW9uUmFuZ2VUcmFja2VyLmZyYWN0aW9uX3RvX3Bvc2l0aW9ulGoVBAAAjBhVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXKUahUEAACMJ1Vuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zdGFydF9wb3NpdGlvbpRqFQQAAIwmVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnN0b3BfcG9zaXRpb26UahUEAACMLVVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbpRqFQQAAIwiVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnRyeV9jbGFpbZRqFQQAAIwiVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnRyeV9zcGxpdJRqFQQAAIwtVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyLnNldF9jdXJyZW50X3Bvc2l0aW9ulGoVBAAAjCpVbnNwbGl0dGFibGVSYW5nZVRyYWNrZXIuZnJhY3Rpb25fY29uc3VtZWSUahUEAACMJVVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zcGxpdF9wb2ludHOUahUEAACMPFVuc3BsaXR0YWJsZVJhbmdlVHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFja5RqFQQAAIwcTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlcpRqFQQAAIwxTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5mcmFjdGlvbl90b19wb3NpdGlvbpRqFQQAAIwxTGV4aWNvZ3JhcGhpY0tleVJhbmdlVHJhY2tlci5wb3NpdGlvbl90b19mcmFjdGlvbpRqFQQAAHWMHWFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzlHSUjCNhcGFjaGVfYmVhbS5pby5yZXN0cmljdGlvbl90cmFja2Vyc5QoWLUVAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiImBpb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyYCBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZWQgd2l0aCBBcGFjaGUgQmVhbS4iIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQoKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlc3RyaWN0aW9uUHJvZ3Jlc3MKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlc3RyaWN0aW9uVHJhY2tlcgpmcm9tIGFwYWNoZV9iZWFtLmlvLnJhbmdlX3RyYWNrZXJzIGltcG9ydCBPZmZzZXRSYW5nZVRyYWNrZXIKCgpjbGFzcyBPZmZzZXRSYW5nZShvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgc3RvcCk6CiAgICBpZiBzdGFydCA+IHN0b3A6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnU3RhcnQgb2Zmc2V0IG11c3QgYmUgbm90IGJlIGxhcmdlciB0aGFuIHRoZSBzdG9wIG9mZnNldC4gJwogICAgICAgICAgJ1JlY2VpdmVkICVkIGFuZCAlZCByZXNwZWN0aXZlbHkuJyAlIChzdGFydCwgc3RvcCkpCiAgICBzZWxmLnN0YXJ0ID0gc3RhcnQKICAgIHNlbGYuc3RvcCA9IHN0b3AKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgT2Zmc2V0UmFuZ2UpOgogICAgICByZXR1cm4gRmFsc2UKCiAgICByZXR1cm4gc2VsZi5zdGFydCA9PSBvdGhlci5zdGFydCBhbmQgc2VsZi5zdG9wID09IG90aGVyLnN0b3AKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLnN0YXJ0LCBzZWxmLnN0b3ApKQoKICBkZWYgc3BsaXQoc2VsZiwgZGVzaXJlZF9udW1fb2Zmc2V0c19wZXJfc3BsaXQsIG1pbl9udW1fb2Zmc2V0c19wZXJfc3BsaXQ9MSk6CiAgICBjdXJyZW50X3NwbGl0X3N0YXJ0ID0gc2VsZi5zdGFydAogICAgbWF4X3NwbGl0X3NpemUgPSBtYXgoCiAgICAgICAgZGVzaXJlZF9udW1fb2Zmc2V0c19wZXJfc3BsaXQsIG1pbl9udW1fb2Zmc2V0c19wZXJfc3BsaXQpCiAgICB3aGlsZSBjdXJyZW50X3NwbGl0X3N0YXJ0IDwgc2VsZi5zdG9wOgogICAgICBjdXJyZW50X3NwbGl0X3N0b3AgPSBtaW4oY3VycmVudF9zcGxpdF9zdGFydCArIG1heF9zcGxpdF9zaXplLCBzZWxmLnN0b3ApCiAgICAgIHJlbWFpbmluZyA9IHNlbGYuc3RvcCAtIGN1cnJlbnRfc3BsaXRfc3RvcAoKICAgICAgIyBBdm9pZGluZyBhIHNtYWxsIHNwbGl0IGF0IHRoZSBlbmQuCiAgICAgIGlmIChyZW1haW5pbmcgPCBkZXNpcmVkX251bV9vZmZzZXRzX3Blcl9zcGxpdCAvLyA0IG9yCiAgICAgICAgICByZW1haW5pbmcgPCBtaW5fbnVtX29mZnNldHNfcGVyX3NwbGl0KToKICAgICAgICBjdXJyZW50X3NwbGl0X3N0b3AgPSBzZWxmLnN0b3AKCiAgICAgIHlpZWxkIE9mZnNldFJhbmdlKGN1cnJlbnRfc3BsaXRfc3RhcnQsIGN1cnJlbnRfc3BsaXRfc3RvcCkKICAgICAgY3VycmVudF9zcGxpdF9zdGFydCA9IGN1cnJlbnRfc3BsaXRfc3RvcAoKICBkZWYgc3BsaXRfYXQoc2VsZiwgc3BsaXRfcG9zKToKICAgICMgdHlwZTogKC4uLikgLT4gVHVwbGVbT2Zmc2V0UmFuZ2UsIE9mZnNldFJhbmdlXQogICAgcmV0dXJuIE9mZnNldFJhbmdlKHNlbGYuc3RhcnQsIHNwbGl0X3BvcyksIE9mZnNldFJhbmdlKHNwbGl0X3Bvcywgc2VsZi5zdG9wKQoKICBkZWYgbmV3X3RyYWNrZXIoc2VsZik6CiAgICByZXR1cm4gT2Zmc2V0UmFuZ2VUcmFja2VyKHNlbGYuc3RhcnQsIHNlbGYuc3RvcCkKCiAgZGVmIHNpemUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5zdG9wIC0gc2VsZi5zdGFydAoKCmNsYXNzIE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlcihSZXN0cmljdGlvblRyYWNrZXIpOgogICIiIkFuIGBpb2Jhc2UuUmVzdHJpY3Rpb25UcmFja2VyYCBpbXBsZW1lbnRhdGlvbnMgZm9yIGFuIG9mZnNldCByYW5nZS4KCiAgT2Zmc2V0IHJhbmdlIGlzIHJlcHJlc2VudGVkIGFzIE9mZnNldFJhbmdlLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXRfcmFuZ2UpOgogICAgIyB0eXBlOiAoT2Zmc2V0UmFuZ2UpIC0+IE5vbmUKICAgIGFzc2VydCBpc2luc3RhbmNlKG9mZnNldF9yYW5nZSwgT2Zmc2V0UmFuZ2UpCiAgICBzZWxmLl9yYW5nZSA9IG9mZnNldF9yYW5nZQogICAgc2VsZi5fY3VycmVudF9wb3NpdGlvbiA9IE5vbmUKICAgIHNlbGYuX2xhc3RfY2xhaW1fYXR0ZW1wdCA9IE5vbmUKICAgIHNlbGYuX2NoZWNrcG9pbnRlZCA9IEZhbHNlCgogIGRlZiBjaGVja19kb25lKHNlbGYpOgogICAgaWYgc2VsZi5fbGFzdF9jbGFpbV9hdHRlbXB0IDwgc2VsZi5fcmFuZ2Uuc3RvcCAtIDE6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyIGlzIG5vdCBkb25lIHNpbmNlIHdvcmsgaW4gcmFuZ2UgWyVzLCAlcykgJwogICAgICAgICAgJ2hhcyBub3QgYmVlbiBjbGFpbWVkLicgJSAoCiAgICAgICAgICAgICAgc2VsZi5fbGFzdF9jbGFpbV9hdHRlbXB0CiAgICAgICAgICAgICAgaWYgc2VsZi5fbGFzdF9jbGFpbV9hdHRlbXB0IGlzIG5vdCBOb25lIGVsc2Ugc2VsZi5fcmFuZ2Uuc3RhcnQsCiAgICAgICAgICAgICAgc2VsZi5fcmFuZ2Uuc3RvcCkpCgogIGRlZiBjdXJyZW50X3Jlc3RyaWN0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3JhbmdlCgogIGRlZiBjdXJyZW50X3Byb2dyZXNzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBSZXN0cmljdGlvblByb2dyZXNzCiAgICBpZiBzZWxmLl9jdXJyZW50X3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIGZyYWN0aW9uID0gMC4wCiAgICBlbGlmIHNlbGYuX3JhbmdlLnN0b3AgPT0gc2VsZi5fcmFuZ2Uuc3RhcnQ6CiAgICAgICMgSWYgc2VsZi5fY3VycmVudF9wb3NpdGlvbiBpcyBub3QgTm9uZSwgd2UgbXVzdCBiZSBkb25lLgogICAgICBmcmFjdGlvbiA9IDEuMAogICAgZWxzZToKICAgICAgZnJhY3Rpb24gPSAoCiAgICAgICAgICBmbG9hdChzZWxmLl9jdXJyZW50X3Bvc2l0aW9uIC0gc2VsZi5fcmFuZ2Uuc3RhcnQpIC8KICAgICAgICAgIChzZWxmLl9yYW5nZS5zdG9wIC0gc2VsZi5fcmFuZ2Uuc3RhcnQpKQogICAgcmV0dXJuIFJlc3RyaWN0aW9uUHJvZ3Jlc3MoZnJhY3Rpb249ZnJhY3Rpb24pCgogIGRlZiBzdGFydF9wb3NpdGlvbihzZWxmKToKICAgIHJldHVybiBzZWxmLl9yYW5nZS5zdGFydAoKICBkZWYgc3RvcF9wb3NpdGlvbihzZWxmKToKICAgIHJldHVybiBzZWxmLl9yYW5nZS5zdG9wCgogIGRlZiB0cnlfY2xhaW0oc2VsZiwgcG9zaXRpb24pOgogICAgaWYgKHNlbGYuX2xhc3RfY2xhaW1fYXR0ZW1wdCBpcyBub3QgTm9uZSBhbmQKICAgICAgICBwb3NpdGlvbiA8PSBzZWxmLl9sYXN0X2NsYWltX2F0dGVtcHQpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1Bvc2l0aW9ucyBjbGFpbWVkIHNob3VsZCBzdHJpY3RseSBpbmNyZWFzZS4gVHJ5aW5nIHRvIGNsYWltICcKICAgICAgICAgICdwb3NpdGlvbiAlZCB3aGlsZSBsYXN0IGNsYWltIGF0dGVtcHQgd2FzICVkLicgJQogICAgICAgICAgKHBvc2l0aW9uLCBzZWxmLl9sYXN0X2NsYWltX2F0dGVtcHQpKQoKICAgIHNlbGYuX2xhc3RfY2xhaW1fYXR0ZW1wdCA9IHBvc2l0aW9uCiAgICBpZiBwb3NpdGlvbiA8IHNlbGYuX3JhbmdlLnN0YXJ0OgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1Bvc2l0aW9uIHRvIGJlIGNsYWltZWQgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiB0aGUgc3RhcnQgcG9zaXRpb24gJwogICAgICAgICAgJ29mIHRoZSByYW5nZS4gVHJpZWQgdG8gY2xhaW0gcG9zaXRpb24gJXIgZm9yIHRoZSByYW5nZSBbJXIsICVyKScgJQogICAgICAgICAgKHBvc2l0aW9uLCBzZWxmLl9yYW5nZS5zdGFydCwgc2VsZi5fcmFuZ2Uuc3RvcCkpCgogICAgaWYgcG9zaXRpb24gPj0gc2VsZi5fcmFuZ2Uuc3RhcnQgYW5kIHBvc2l0aW9uIDwgc2VsZi5fcmFuZ2Uuc3RvcDoKICAgICAgc2VsZi5fY3VycmVudF9wb3NpdGlvbiA9IHBvc2l0aW9uCiAgICAgIHJldHVybiBUcnVlCgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiB0cnlfc3BsaXQoc2VsZiwgZnJhY3Rpb25fb2ZfcmVtYWluZGVyKToKICAgIGlmIG5vdCBzZWxmLl9jaGVja3BvaW50ZWQ6CiAgICAgIGlmIHNlbGYuX2N1cnJlbnRfcG9zaXRpb24gaXMgTm9uZToKICAgICAgICBjdXIgPSBzZWxmLl9yYW5nZS5zdGFydCAtIDEKICAgICAgZWxzZToKICAgICAgICBjdXIgPSBzZWxmLl9jdXJyZW50X3Bvc2l0aW9uCiAgICAgIHNwbGl0X3BvaW50ID0gKAogICAgICAgICAgY3VyICsgaW50KG1heCgxLCAoc2VsZi5fcmFuZ2Uuc3RvcCAtIGN1cikgKiBmcmFjdGlvbl9vZl9yZW1haW5kZXIpKSkKICAgICAgaWYgc3BsaXRfcG9pbnQgPCBzZWxmLl9yYW5nZS5zdG9wOgogICAgICAgIGlmIGZyYWN0aW9uX29mX3JlbWFpbmRlciA9PSAwOgogICAgICAgICAgc2VsZi5fY2hlY2twb2ludGVkID0gVHJ1ZQogICAgICAgIHNlbGYuX3JhbmdlLCByZXNpZHVhbF9yYW5nZSA9IHNlbGYuX3JhbmdlLnNwbGl0X2F0KHNwbGl0X3BvaW50KQogICAgICAgIHJldHVybiBzZWxmLl9yYW5nZSwgcmVzaWR1YWxfcmFuZ2UKlH2UKIwUT2Zmc2V0UmFuZ2UuX19pbml0X1+UalYxAQBLIUsnh5SMEk9mZnNldFJhbmdlLl9fZXFfX5RqVjEBAEspSy2HlIwST2Zmc2V0UmFuZ2UuX19uZV9flGpWMQEASy9LMYeUjBRPZmZzZXRSYW5nZS5fX2hhc2hfX5RqVjEBAEszSzSHlIwRT2Zmc2V0UmFuZ2Uuc3BsaXSUalYxAQBLNktEh5SMFE9mZnNldFJhbmdlLnNwbGl0X2F0lGpWMQEAS0ZLSIeUjBdPZmZzZXRSYW5nZS5uZXdfdHJhY2tlcpRqVjEBAEtKS0uHlIwQT2Zmc2V0UmFuZ2Uuc2l6ZZRqVjEBAEtNS06HlIwLT2Zmc2V0UmFuZ2WUal0xAQBLIEtOh5SMIU9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5fX2luaXRfX5RqVjEBAEtWS1yHlIwjT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmWUalYxAQBLXktlh5SMLE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5jdXJyZW50X3Jlc3RyaWN0aW9ulGpWMQEAS2dLaIeUjClPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9wcm9ncmVzc5RqVjEBAEtqS3WHlIwnT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGpWMQEAS3dLeIeUjCZPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuc3RvcF9wb3NpdGlvbpRqVjEBAEt6S3uHlIwiT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnRyeV9jbGFpbZRqVjEBAEt9S5CHlIwiT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnRyeV9zcGxpdJRqVjEBAEuSS56HlIwYT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VylGpdMQEAS1FLnoeUdX2UKIwLT2Zmc2V0UmFuZ2WUasYDAACMEU9mZnNldFJhbmdlLnNwbGl0lGrGAwAAjBRPZmZzZXRSYW5nZS5zcGxpdF9hdJRqxgMAAIwXT2Zmc2V0UmFuZ2UubmV3X3RyYWNrZXKUasYDAACMEE9mZnNldFJhbmdlLnNpemWUasYDAACMGE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlcpRqxgMAAIwjT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmWUasYDAACMLE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlci5jdXJyZW50X3Jlc3RyaWN0aW9ulGrGAwAAjClPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9wcm9ncmVzc5RqxgMAAIwnT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnN0YXJ0X3Bvc2l0aW9ulGrGAwAAjCZPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIuc3RvcF9wb3NpdGlvbpRqxgMAAIwiT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnRyeV9jbGFpbZRqxgMAAIwiT2Zmc2V0UmVzdHJpY3Rpb25UcmFja2VyLnRyeV9zcGxpdJRqxgMAAHWMI2FwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzlHSUjCBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc5QoWL1mAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkhlbHBlciBmdW5jdGlvbnMgYW5kIHRlc3QgaGFybmVzc2VzIGZvciBzb3VyY2UgaW1wbGVtZW50YXRpb25zLgoKVGhpcyBtb2R1bGUgY29udGFpbnMgaGVscGVyIGZ1bmN0aW9ucyBhbmQgdGVzdCBoYXJuZXNzZXMgZm9yIGNoZWNraW5nCmNvcnJlY3RuZXNzIG9mIHNvdXJjZSAoYSBzdWJjbGFzcyBvZiBgYGlvYmFzZS5Cb3VuZGVkU291cmNlYGApIGFuZCByYW5nZQp0cmFja2VyIChhIHN1YmNsYXNzIG9mYGBpb2Jhc2UuUmFuZ2VUcmFja2VyYGApIGltcGxlbWVudGF0aW9ucy4KCkNvbnRhaW5zIGEgZmV3IGxpZ2h0d2VpZ2h0IHV0aWxpdGllcyAoZS5nLiByZWFkaW5nIGl0ZW1zIGZyb20gYSBzb3VyY2Ugc3VjaCBhcwpgYHJlYWRGcm9tU291cmNlKClgYCwgYXMgd2VsbCBhcyBoZWF2eXdlaWdodCBwcm9wZXJ0eSB0ZXN0aW5nIGFuZCBzdHJlc3MKdGVzdGluZyBoYXJuZXNzZXMgdGhhdCBoZWxwIGdldHRpbmcgYSBsYXJnZSBhbW91bnQgb2YgdGVzdCBjb3ZlcmFnZSB3aXRoIGZldwpjb2RlLgoKTW9zdCBub3RhYmxlIG9uZXMgYXJlOgoqIGBgYXNzZXJ0U291cmNlc0VxdWFsUmVmZXJlbmNlU291cmNlKClgYCBoZWxwcyB0ZXN0aW5nIHRoYXQgdGhlIGRhdGEgcmVhZCBieQp0aGUgdW5pb24gb2Ygc291cmNlcyBwcm9kdWNlZCBieSBgYEJvdW5kZWRTb3VyY2Uuc3BsaXQoKWBgIGlzIHRoZSBzYW1lIGFzIGRhdGEKcmVhZCBieSB0aGUgb3JpZ2luYWwgc291cmNlLgoqIElmIHlvdXIgc291cmNlIGltcGxlbWVudHMgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nLCB1c2UgdGhlCmBgYXNzZXJ0U3BsaXRBdEZyYWN0aW9uKClgYCBmYW1pbHkgb2YgZnVuY3Rpb25zIC0gdGhleSB0ZXN0IGJlaGF2aW9yIG9mCmBgUmFuZ2VUcmFja2VyLnRyeV9zcGxpdCgpYGAsIGluIHBhcnRpY3VsYXIsIHRoYXQgdmFyaW91cyBjb25zaXN0ZW5jeQpwcm9wZXJ0aWVzIGFyZSByZXNwZWN0ZWQgYW5kIHRoZSB0b3RhbCBzZXQgb2YgZGF0YSByZWFkIGJ5IHRoZSBzb3VyY2UgaXMKcHJlc2VydmVkIHdoZW4gc3BsaXRzIGhhcHBlbi4gVXNlIGBgYXNzZXJ0U3BsaXRBdEZyYWN0aW9uQmVoYXZpb3IoKWBgIHRvIHRlc3QKaW5kaXZpZHVhbCBjYXNlcyBvZiBgYFJhbmdlVHJhY2tlci50cnlfc3BsaXQoKWBgIGFuZCB1c2UKYGBhc3NlcnRTcGxpdEF0RnJhY3Rpb25FeGhhdXN0aXZlKClgYCBhcyBhIGhlYXZ5LXdlaWdodCBzdHJlc3MgdGVzdCBpbmNsdWRpbmcKY29uY3VycmVuY3kuIFdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0byB1c2UgYm90aC4KCkZvciBleGFtcGxlIHVzYWdlcywgc2VlIHRoZSB1bml0IHRlc3RzIG9mIG1vZHVsZXMgc3VjaCBhcwogKiBhcGFjaGVfYmVhbS5pby5zb3VyY2VfdGVzdF91dGlsc190ZXN0LnB5CiAqIGFwYWNoZV9iZWFtLmlvLmF2cm9pb190ZXN0LnB5CiIiIgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB3ZWFrcmVmCmZyb20gYnVpbHRpbnMgaW1wb3J0IG5leHQKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAoKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy51dGlsIGltcG9ydCBlcXVhbF90bwoKX19hbGxfXyA9IFsKICAgICdyZWFkX2Zyb21fc291cmNlJywKICAgICdhc3NlcnRfc291cmNlc19lcXVhbF9yZWZlcmVuY2Vfc291cmNlJywKICAgICdhc3NlcnRfcmVlbnRyYW50X3JlYWRzX3N1Y2NlZWQnLAogICAgJ2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcicsCiAgICAnYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeScsCiAgICAnYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2V4aGF1c3RpdmUnLAogICAgJ2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9mYWlscycsCiAgICAnYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50JwpdCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgRXhwZWN0ZWRTcGxpdE91dGNvbWUob2JqZWN0KToKICBNVVNUX1NVQ0NFRURfQU5EX0JFX0NPTlNJU1RFTlQgPSAxCiAgTVVTVF9GQUlMID0gMgogIE1VU1RfQkVfQ09OU0lTVEVOVF9JRl9TVUNDRUVEUyA9IDMKCgpTcGxpdEF0RnJhY3Rpb25SZXN1bHQgPSBuYW1lZHR1cGxlKAogICAgJ1NwbGl0QXRGcmFjdGlvblJlc3VsdCcsICdudW1fcHJpbWFyeV9pdGVtcyBudW1fcmVzaWR1YWxfaXRlbXMnKQoKU3BsaXRGcmFjdGlvblN0YXRpc3RpY3MgPSBuYW1lZHR1cGxlKAogICAgJ1NwbGl0RnJhY3Rpb25TdGF0aXN0aWNzJywgJ3N1Y2Nlc3NmdWxfZnJhY3Rpb25zIG5vbl90cml2aWFsX2ZyYWN0aW9ucycpCgoKZGVmIHJlYWRfZnJvbV9zb3VyY2Uoc291cmNlLCBzdGFydF9wb3NpdGlvbj1Ob25lLCBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICIiIlJlYWRzIGVsZW1lbnRzIGZyb20gdGhlIGdpdmVuIGBgYEJvdW5kZWRTb3VyY2VgYGAuCgogIE9ubHkgcmVhZHMgZWxlbWVudHMgd2l0aGluIHRoZSBnaXZlbiBwb3NpdGlvbiByYW5nZS4KICBBcmdzOgogICAgc291cmNlICh+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UpOgogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZWAgaW1wbGVtZW50YXRpb24uCiAgICBzdGFydF9wb3NpdGlvbiAoaW50KTogc3RhcnQgcG9zaXRpb24gZm9yIHJlYWRpbmcuCiAgICBzdG9wX3Bvc2l0aW9uIChpbnQpOiBzdG9wIHBvc2l0aW9uIGZvciByZWFkaW5nLgoKICBSZXR1cm5zOgogICAgTGlzdFtzdHJdOiB0aGUgc2V0IG9mIHZhbHVlcyByZWFkIGZyb20gdGhlIHNvdXJjZXMuCiAgIiIiCiAgdmFsdWVzID0gW10KICByYW5nZV90cmFja2VyID0gc291cmNlLmdldF9yYW5nZV90cmFja2VyKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKQogIGFzc2VydCBpc2luc3RhbmNlKHJhbmdlX3RyYWNrZXIsIGlvYmFzZS5SYW5nZVRyYWNrZXIpCiAgcmVhZGVyID0gc291cmNlLnJlYWQocmFuZ2VfdHJhY2tlcikKICBmb3IgdmFsdWUgaW4gcmVhZGVyOgogICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKCiAgcmV0dXJuIHZhbHVlcwoKCmRlZiBfVGhyZWFkUG9vbCh0aHJlYWRzKToKICAjIFRocmVhZFBvb2wgY3Jhc2hlcyBpbiBvbGQgdmVyc2lvbnMgb2YgUHl0aG9uICg8IDIuNy41KSBpZiBjcmVhdGVkIGZyb20gYQogICMgY2hpbGQgdGhyZWFkLiAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEwMDE1KQogIGlmIG5vdCBoYXNhdHRyKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCAnX2NoaWxkcmVuJyk6CiAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5fY2hpbGRyZW4gPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKICByZXR1cm4gVGhyZWFkUG9vbCh0aHJlYWRzKQoKCmRlZiBhc3NlcnRfc291cmNlc19lcXVhbF9yZWZlcmVuY2Vfc291cmNlKHJlZmVyZW5jZV9zb3VyY2VfaW5mbywgc291cmNlc19pbmZvKToKICAiIiJUZXN0cyBpZiBhIHJlZmVyZW5jZSBzb3VyY2UgaXMgZXF1YWwgdG8gYSBnaXZlbiBzZXQgb2Ygc291cmNlcy4KCiAgR2l2ZW4gYSByZWZlcmVuY2Ugc291cmNlIChhIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYAogIGFuZCBhIHBvc2l0aW9uIHJhbmdlKSBhbmQgYSBsaXN0IG9mIHNvdXJjZXMsIGFzc2VydCB0aGF0IHRoZSB1bmlvbiBvZiB0aGUKICByZWNvcmRzIHJlYWQgZnJvbSB0aGUgbGlzdCBvZiBzb3VyY2VzIGlzIGVxdWFsIHRvIHRoZSByZWNvcmRzIHJlYWQgZnJvbSB0aGUKICByZWZlcmVuY2Ugc291cmNlLgoKICBBcmdzOgogICAgcmVmZXJlbmNlX3NvdXJjZV9pbmZvXAogICAgICAgIChUdXBsZVt+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UsIGludCwgaW50XSk6CiAgICAgIGEgdGhyZWUtdHVwbGUgdGhhdCBnaXZlcyB0aGUgcmVmZXJlbmNlCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYCwgcG9zaXRpb24gdG8gc3RhcnQKICAgICAgcmVhZGluZyBhdCwgYW5kIHBvc2l0aW9uIHRvIHN0b3AgcmVhZGluZyBhdC4KICAgIHNvdXJjZXNfaW5mb1wKICAgICAgICAoSXRlcmFibGVbVHVwbGVbfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlLCBpbnQsIGludF1dKToKICAgICAgYSBzZXQgb2Ygc291cmNlcy4gRWFjaCBzb3VyY2UgaXMgYSB0aHJlZS10dXBsZSB0aGF0IGlzIG9mIHRoZSBzYW1lCiAgICAgIGZvcm1hdCBkZXNjcmliZWQgYWJvdmUuCgogIFJhaXNlczoKICAgIFZhbHVlRXJyb3I6IGlmIHRoZSBzZXQgb2YgZGF0YSBwcm9kdWNlZCBieSB0aGUgcmVmZXJlbmNlIHNvdXJjZQogICAgICBhbmQgdGhlIGdpdmVuIHNldCBvZiBzb3VyY2VzIGFyZSBub3QgZXF1aXZhbGVudC4KCiAgIiIiCgogIGlmIG5vdCAoaXNpbnN0YW5jZShyZWZlcmVuY2Vfc291cmNlX2luZm8sIHR1cGxlKSBhbmQKICAgICAgICAgIGxlbihyZWZlcmVuY2Vfc291cmNlX2luZm8pID09IDMgYW5kCiAgICAgICAgICBpc2luc3RhbmNlKHJlZmVyZW5jZV9zb3VyY2VfaW5mb1swXSwgaW9iYXNlLkJvdW5kZWRTb3VyY2UpKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ3JlZmVyZW5jZV9zb3VyY2VfaW5mbyBtdXN0IGEgdGhyZWUtdHVwbGUgd2hlcmUgZmlyc3QnCiAgICAgICAgJ2l0ZW0gb2YgdGhlIHR1cGxlIGdpdmVzIGEgJwogICAgICAgICdpb2Jhc2UuQm91bmRlZFNvdXJjZS4gUmVjZWl2ZWQ6ICVyJyAlIHJlZmVyZW5jZV9zb3VyY2VfaW5mbykKICByZWZlcmVuY2VfcmVjb3JkcyA9IHJlYWRfZnJvbV9zb3VyY2UoKnJlZmVyZW5jZV9zb3VyY2VfaW5mbykKCiAgc291cmNlX3JlY29yZHMgPSBbXQogIGZvciBzb3VyY2VfaW5mbyBpbiBzb3VyY2VzX2luZm86CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzb3VyY2VfaW5mbywgdHVwbGUpCiAgICBhc3NlcnQgbGVuKHNvdXJjZV9pbmZvKSA9PSAzCiAgICBpZiBub3QgKGlzaW5zdGFuY2Uoc291cmNlX2luZm8sIHR1cGxlKSBhbmQgbGVuKHNvdXJjZV9pbmZvKSA9PSAzIGFuZAogICAgICAgICAgICBpc2luc3RhbmNlKHNvdXJjZV9pbmZvWzBdLCBpb2Jhc2UuQm91bmRlZFNvdXJjZSkpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ3NvdXJjZV9pbmZvIG11c3QgYSB0aHJlZSB0dXBsZSB3aGVyZSBmaXJzdCcKICAgICAgICAgICdpdGVtIG9mIHRoZSB0dXBsZSBnaXZlcyBhICcKICAgICAgICAgICdpb2Jhc2UuQm91bmRlZFNvdXJjZS4gUmVjZWl2ZWQ6ICVyJyAlIHNvdXJjZV9pbmZvKQogICAgaWYgKHR5cGUocmVmZXJlbmNlX3NvdXJjZV9pbmZvWzBdLmRlZmF1bHRfb3V0cHV0X2NvZGVyKCkpICE9IHR5cGUoCiAgICAgICAgc291cmNlX2luZm9bMF0uZGVmYXVsdF9vdXRwdXRfY29kZXIoKSkpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1JlZmVyZW5jZSBzb3VyY2UgJXIgYW5kIHRoZSBzb3VyY2UgJXIgbXVzdCB1c2UgdGhlIHNhbWUgY29kZXIuICcKICAgICAgICAgICdUaGV5IGFyZSB1c2luZyAlciBhbmQgJXIgcmVzcGVjdGl2ZWx5IGluc3RlYWQuJyAlICgKICAgICAgICAgICAgICByZWZlcmVuY2Vfc291cmNlX2luZm9bMF0sCiAgICAgICAgICAgICAgc291cmNlX2luZm9bMF0sCiAgICAgICAgICAgICAgdHlwZShyZWZlcmVuY2Vfc291cmNlX2luZm9bMF0uZGVmYXVsdF9vdXRwdXRfY29kZXIoKSksCiAgICAgICAgICAgICAgdHlwZShzb3VyY2VfaW5mb1swXS5kZWZhdWx0X291dHB1dF9jb2RlcigpKSkpCiAgICBzb3VyY2VfcmVjb3Jkcy5leHRlbmQocmVhZF9mcm9tX3NvdXJjZSgqc291cmNlX2luZm8pKQoKICBpZiBsZW4ocmVmZXJlbmNlX3JlY29yZHMpICE9IGxlbihzb3VyY2VfcmVjb3Jkcyk6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdSZWZlcmVuY2Ugc291cmNlIG11c3QgcHJvZHVjZSB0aGUgc2FtZSBudW1iZXIgb2YgcmVjb3JkcyBhcyB0aGUgJwogICAgICAgICdsaXN0IG9mIHNvdXJjZXMuIE51bWJlciBvZiByZWNvcmRzIHdlcmUgJWQgYW5kICVkIGluc3RlYWQuJyAlCiAgICAgICAgKGxlbihyZWZlcmVuY2VfcmVjb3JkcyksIGxlbihzb3VyY2VfcmVjb3JkcykpKQoKICBpZiBlcXVhbF90byhyZWZlcmVuY2VfcmVjb3Jkcykoc291cmNlX3JlY29yZHMpOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnUmVmZXJlbmNlIHNvdXJjZSBhbmQgcHJvdmlkZWQgbGlzdCBvZiBzb3VyY2VzIG11c3QgcHJvZHVjZSB0aGUgJwogICAgICAgICdzYW1lIHNldCBvZiByZWNvcmRzLicpCgoKZGVmIGFzc2VydF9yZWVudHJhbnRfcmVhZHNfc3VjY2VlZChzb3VyY2VfaW5mbyk6CiAgIiIiVGVzdHMgaWYgYSBnaXZlbiBzb3VyY2UgY2FuIGJlIHJlYWQgaW4gYSByZWVudHJhbnQgbWFubmVyLgoKICBBc3N1bWUgdGhhdCBnaXZlbiBzb3VyY2UgcHJvZHVjZXMgdGhlIHNldCBvZiB2YWx1ZXMgYGB7djEsIHYyLCB2MywgLi4uIHZufWBgLgogIEZvciBgYGlgYCBpbiByYW5nZSBgYFsxLCBuLTFdYGAgdGhpcyBtZXRob2QgcGVyZm9ybXMgYSByZWVudHJhbnQgcmVhZCBhZnRlcgogIHJlYWRpbmcgYGBpYGAgZWxlbWVudHMgYW5kIHZlcmlmaWVzIHRoYXQgYm90aCB0aGUgb3JpZ2luYWwgYW5kIHJlZW50cmFudCByZWFkCiAgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgc2V0IG9mIHZhbHVlcy4KCiAgQXJnczoKICAgIHNvdXJjZV9pbmZvIChUdXBsZVt+YXBhY2hlX2JlYW0uaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UsIGludCwgaW50XSk6CiAgICAgIGEgdGhyZWUtdHVwbGUgdGhhdCBnaXZlcyB0aGUgcmVmZXJlbmNlCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYCwgcG9zaXRpb24gdG8gc3RhcnQgcmVhZGluZwogICAgICBhdCwgYW5kIGEgcG9zaXRpb24gdG8gc3RvcCByZWFkaW5nIGF0LgoKICBSYWlzZXM6CiAgICBWYWx1ZUVycm9yOiBpZiBzb3VyY2UgaXMgdG9vIHRyaXZpYWwgb3IgcmVlbnRyYW50IHJlYWQgcmVzdWx0CiAgICAgIGluIGFuIGluY29ycmVjdCByZWFkLgogICIiIgoKICBzb3VyY2UsIHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uID0gc291cmNlX2luZm8KICBhc3NlcnQgaXNpbnN0YW5jZShzb3VyY2UsIGlvYmFzZS5Cb3VuZGVkU291cmNlKQoKICBleHBlY3RlZF92YWx1ZXMgPSBbCiAgICAgIHZhbCBmb3IgdmFsIGluIHNvdXJjZS5yZWFkKAogICAgICAgICAgc291cmNlLmdldF9yYW5nZV90cmFja2VyKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKSkKICBdCiAgaWYgbGVuKGV4cGVjdGVkX3ZhbHVlcykgPCAyOgogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnU291cmNlIGlzIHRvbyB0cml2aWFsIHNpbmNlIGl0IHByb2R1Y2VzIG9ubHkgJWQgJwogICAgICAgICd2YWx1ZXMuIFBsZWFzZSBnaXZlIGEgc291cmNlIHRoYXQgcmVhZHMgYXQgbGVhc3QgMiAnCiAgICAgICAgJ3ZhbHVlcy4nICUgbGVuKGV4cGVjdGVkX3ZhbHVlcykpCgogIGZvciBpIGluIHJhbmdlKDEsIGxlbihleHBlY3RlZF92YWx1ZXMpIC0gMSk6CiAgICByZWFkX2l0ZXIgPSBzb3VyY2UucmVhZCgKICAgICAgICBzb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pKQogICAgb3JpZ2luYWxfcmVhZCA9IFtdCiAgICBmb3IgXyBpbiByYW5nZShpKToKICAgICAgb3JpZ2luYWxfcmVhZC5hcHBlbmQobmV4dChyZWFkX2l0ZXIpKQoKICAgICMgUmVlbnRyYW50IHJlYWQKICAgIHJlZW50cmFudF9yZWFkID0gWwogICAgICAgIHZhbCBmb3IgdmFsIGluIHNvdXJjZS5yZWFkKAogICAgICAgICAgICBzb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pKQogICAgXQoKICAgICMgQ29udGludWluZyBvcmlnaW5hbCByZWFkLgogICAgZm9yIHZhbCBpbiByZWFkX2l0ZXI6CiAgICAgIG9yaWdpbmFsX3JlYWQuYXBwZW5kKHZhbCkKCiAgICBpZiBlcXVhbF90byhvcmlnaW5hbF9yZWFkKShleHBlY3RlZF92YWx1ZXMpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1NvdXJjZSBkaWQgbm90IHByb2R1Y2UgZXhwZWN0ZWQgdmFsdWVzIHdoZW4gJwogICAgICAgICAgJ3BlcmZvcm1pbmcgYSByZWVudHJhbnQgcmVhZCBhZnRlciByZWFkaW5nICVkIHZhbHVlcy4gJwogICAgICAgICAgJ0V4cGVjdGVkICVyIHJlY2VpdmVkICVyLicgJSAoaSwgZXhwZWN0ZWRfdmFsdWVzLCBvcmlnaW5hbF9yZWFkKSkKCiAgICBpZiBlcXVhbF90byhyZWVudHJhbnRfcmVhZCkoZXhwZWN0ZWRfdmFsdWVzKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdBIHJlZW50cmFudCByZWFkIG9mIHNvdXJjZSBhZnRlciByZWFkaW5nICVkIHZhbHVlcyAnCiAgICAgICAgICAnZGlkIG5vdCBwcm9kdWNlIGV4cGVjdGVkIHZhbHVlcy4gRXhwZWN0ZWQgJXIgJwogICAgICAgICAgJ3JlY2VpdmVkICVyLicgJSAoaSwgZXhwZWN0ZWRfdmFsdWVzLCByZWVudHJhbnRfcmVhZCkpCgoKZGVmIGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigKICAgIHNvdXJjZSwgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LCBzcGxpdF9mcmFjdGlvbiwgZXhwZWN0ZWRfb3V0Y29tZSk6CiAgIiIiVmVyaWZpZXMgdGhlIGJlaGF2aW91ciBvZiBzcGxpdHRpbmcgYSBzb3VyY2UgYXQgYSBnaXZlbiBmcmFjdGlvbi4KCiAgQXNzZXJ0cyB0aGF0IHNwbGl0dGluZyBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlYCBlaXRoZXIKICBmYWlscyBhZnRlciByZWFkaW5nICoqbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0KiogaXRlbXMsIG9yIHN1Y2NlZWRzIGluCiAgYSB3YXkgdGhhdCBpcyBjb25zaXN0ZW50IGFjY29yZGluZyB0bwogIDpmdW5jOmBhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fc3VjY2VlZHNfYW5kX2NvbnNpc3RlbnQoKWAuCgogIEFyZ3M6CiAgICBzb3VyY2UgKH5hcGFjaGVfYmVhbS5pby5pb2Jhc2UuQm91bmRlZFNvdXJjZSk6IHRoZSBzb3VyY2UgdG8gcGVyZm9ybQogICAgICBkeW5hbWljIHNwbGl0dGluZyBvbi4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCAoaW50KTogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlCiAgICAgIHNwbGl0dGluZy4KICAgIHNwbGl0X2ZyYWN0aW9uIChmbG9hdCk6IGZyYWN0aW9uIHRvIHNwbGl0IGF0LgogICAgZXhwZWN0ZWRfb3V0Y29tZSAoaW50KTogYSB2YWx1ZSBmcm9tCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLnNvdXJjZV90ZXN0X3V0aWxzLkV4cGVjdGVkU3BsaXRPdXRjb21lYC4KCiAgUmV0dXJuczoKICAgIFR1cGxlW2ludCwgaW50XTogYSB0dXBsZSB0aGF0IGdpdmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgcHJvZHVjZWQgYnkgcmVhZGluZwogICAgdGhlIHR3byByYW5nZXMgcHJvZHVjZWQgYWZ0ZXIgZHluYW1pYyBzcGxpdHRpbmcuIElmIHNwbGl0dGluZyBkaWQgbm90CiAgICBvY2N1ciwgdGhlIGZpcnN0IHZhbHVlIG9mIHRoZSB0dXBsZSB3aWxsIHJlcHJlc2VudCB0aGUgZnVsbCBzZXQgb2YgcmVjb3JkcwogICAgcmVhZCBieSB0aGUgc291cmNlIHdoaWxlIHRoZSBzZWNvbmQgdmFsdWUgb2YgdGhlIHR1cGxlIHdpbGwgYmUgYGAtMWBgLgogICIiIgogIGFzc2VydCBpc2luc3RhbmNlKHNvdXJjZSwgaW9iYXNlLkJvdW5kZWRTb3VyY2UpCiAgZXhwZWN0ZWRfaXRlbXMgPSByZWFkX2Zyb21fc291cmNlKHNvdXJjZSwgTm9uZSwgTm9uZSkKICByZXR1cm4gX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigKICAgICAgc291cmNlLAogICAgICBleHBlY3RlZF9pdGVtcywKICAgICAgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgICBzcGxpdF9mcmFjdGlvbiwKICAgICAgZXhwZWN0ZWRfb3V0Y29tZSkKCgpkZWYgX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigKICAgIHNvdXJjZSwKICAgIGV4cGVjdGVkX2l0ZW1zLAogICAgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgc3BsaXRfZnJhY3Rpb24sCiAgICBleHBlY3RlZF9vdXRjb21lLAogICAgc3RhcnRfcG9zaXRpb249Tm9uZSwKICAgIHN0b3BfcG9zaXRpb249Tm9uZSk6CgogIHJhbmdlX3RyYWNrZXIgPSBzb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCiAgYXNzZXJ0IGlzaW5zdGFuY2UocmFuZ2VfdHJhY2tlciwgaW9iYXNlLlJhbmdlVHJhY2tlcikKICBjdXJyZW50X2l0ZW1zID0gW10KICByZWFkZXIgPSBzb3VyY2UucmVhZChyYW5nZV90cmFja2VyKQogICMgUmVhZGluZyAnbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0JyBpdGVtcy4KICByZWFkZXJfaXRlciA9IGl0ZXIocmVhZGVyKQogIGZvciBfIGluIHJhbmdlKG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCk6CiAgICBjdXJyZW50X2l0ZW1zLmFwcGVuZChuZXh0KHJlYWRlcl9pdGVyKSkKCiAgc3VnZ2VzdGVkX3NwbGl0X3Bvc2l0aW9uID0gcmFuZ2VfdHJhY2tlci5wb3NpdGlvbl9hdF9mcmFjdGlvbihzcGxpdF9mcmFjdGlvbikKCiAgc3RvcF9wb3NpdGlvbl9iZWZvcmVfc3BsaXQgPSByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQogIHNwbGl0X3Jlc3VsdCA9IHJhbmdlX3RyYWNrZXIudHJ5X3NwbGl0KHN1Z2dlc3RlZF9zcGxpdF9wb3NpdGlvbikKCiAgaWYgc3BsaXRfcmVzdWx0IGlzIG5vdCBOb25lOgogICAgaWYgbGVuKHNwbGl0X3Jlc3VsdCkgIT0gMjoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdTcGxpdCByZXN1bHQgbXVzdCBiZSBhIHR1cGxlIHRoYXQgY29udGFpbnMgc3BsaXQgJwogICAgICAgICAgJ3Bvc2l0aW9uIGFuZCBzcGxpdCBmcmFjdGlvbi4gUmVjZWl2ZWQ6ICVyJyAlIChzcGxpdF9yZXN1bHQsICkpCgogICAgaWYgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkgIT0gc3BsaXRfcmVzdWx0WzBdOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0FmdGVyIGEgc3VjY2Vzc2Z1bCBzcGxpdCwgdGhlIHN0b3AgcG9zaXRpb24gb2YgdGhlICcKICAgICAgICAgICdSYW5nZVRyYWNrZXIgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgcmV0dXJuZWQgc3BsaXQgJwogICAgICAgICAgJ3Bvc2l0aW9uLiBPYnNlcnZlZCAlciBhbmQgJXIgd2hpY2ggYXJlIGRpZmZlcmVudC4nICUKICAgICAgICAgIChyYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKSAlIChzcGxpdF9yZXN1bHRbMF0sICkpKQoKICAgIGlmIHNwbGl0X2ZyYWN0aW9uIDwgMCBvciBzcGxpdF9mcmFjdGlvbiA+IDE6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnU3BsaXQgZnJhY3Rpb24gbXVzdCBiZSB3aXRoaW4gdGhlIHJhbmdlIFswLDFdJywKICAgICAgICAgICdPYnNlcnZlZCBzcGxpdCBmcmFjdGlvbiB3YXMgJXIuJyAlIChzcGxpdF9yZXN1bHRbMV0sICkpCgogIHN0b3BfcG9zaXRpb25fYWZ0ZXJfc3BsaXQgPSByYW5nZV90cmFja2VyLnN0b3BfcG9zaXRpb24oKQogIGlmIHNwbGl0X3Jlc3VsdCBhbmQgc3RvcF9wb3NpdGlvbl9hZnRlcl9zcGxpdCA9PSBzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ1N0b3AgcG9zaXRpb24gJXIgZGlkIG5vdCBjaGFuZ2UgYWZ0ZXIgYSBzdWNjZXNzZnVsICcKICAgICAgICAnc3BsaXQgb2Ygc291cmNlICVyIGF0IGZyYWN0aW9uICVyLicgJQogICAgICAgIChzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdCwgc291cmNlLCBzcGxpdF9mcmFjdGlvbikpCgogIGlmIGV4cGVjdGVkX291dGNvbWUgPT0gRXhwZWN0ZWRTcGxpdE91dGNvbWUuTVVTVF9TVUNDRUVEX0FORF9CRV9DT05TSVNURU5UOgogICAgaWYgbm90IHNwbGl0X3Jlc3VsdDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdFeHBlY3RlZCBzcGxpdCBvZiBzb3VyY2UgJXIgYXQgZnJhY3Rpb24gJXIgdG8gYmUgJwogICAgICAgICAgJ3N1Y2Nlc3NmdWwgYWZ0ZXIgcmVhZGluZyAlZCBlbGVtZW50cy4gQnV0ICcKICAgICAgICAgICd0aGUgc3BsaXQgZmFpbGVkLicgJQogICAgICAgICAgKHNvdXJjZSwgc3BsaXRfZnJhY3Rpb24sIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCkpCiAgZWxpZiBleHBlY3RlZF9vdXRjb21lID09IEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfRkFJTDoKICAgIGlmIHNwbGl0X3Jlc3VsdDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdFeHBlY3RlZCBzcGxpdCBvZiBzb3VyY2UgJXIgYXQgZnJhY3Rpb24gJXIgYWZ0ZXIgJwogICAgICAgICAgJ3JlYWRpbmcgJWQgZWxlbWVudHMgdG8gZmFpbC4gQnV0IHNwbGl0dGluZyAnCiAgICAgICAgICAnc3VjY2VlZGVkIHdpdGggcmVzdWx0ICVyLicgJSAoCiAgICAgICAgICAgICAgc291cmNlLAogICAgICAgICAgICAgIHNwbGl0X2ZyYWN0aW9uLAogICAgICAgICAgICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgICAgICAgICAgICBzcGxpdF9yZXN1bHQpKQoKICBlbGlmICgKICAgICAgZXhwZWN0ZWRfb3V0Y29tZSAhPSBFeHBlY3RlZFNwbGl0T3V0Y29tZS5NVVNUX0JFX0NPTlNJU1RFTlRfSUZfU1VDQ0VFRFMpOgogICAgcmFpc2UgVmFsdWVFcnJvcignVW5rbm93biB0eXBlIG9mIGV4cGVjdGVkIG91dGNvbWU6ICVyJyAlIGV4cGVjdGVkX291dGNvbWUpCiAgY3VycmVudF9pdGVtcy5leHRlbmQoW3ZhbHVlIGZvciB2YWx1ZSBpbiByZWFkZXJfaXRlcl0pCgogIHJlc2lkdWFsX3JhbmdlID0gKAogICAgICBzcGxpdF9yZXN1bHRbMF0sIHN0b3BfcG9zaXRpb25fYmVmb3JlX3NwbGl0KSBpZiBzcGxpdF9yZXN1bHQgZWxzZSBOb25lCgogIHJldHVybiBfdmVyaWZ5X3NpbmdsZV9zcGxpdF9mcmFjdGlvbl9yZXN1bHQoCiAgICAgIHNvdXJjZSwKICAgICAgZXhwZWN0ZWRfaXRlbXMsCiAgICAgIGN1cnJlbnRfaXRlbXMsCiAgICAgIHNwbGl0X3Jlc3VsdCwKICAgICAgKHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSwgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkpLAogICAgICByZXNpZHVhbF9yYW5nZSwKICAgICAgc3BsaXRfZnJhY3Rpb24pCgoKZGVmIF9yYW5nZV90b19zdHIoc3RhcnQsIHN0b3ApOgogIHJldHVybiAnWycgKyAoc3RyKHN0YXJ0KSArICcsJyArIHN0cihzdG9wKSArICcpJykKCgpkZWYgX3ZlcmlmeV9zaW5nbGVfc3BsaXRfZnJhY3Rpb25fcmVzdWx0KAogICAgc291cmNlLAogICAgZXhwZWN0ZWRfaXRlbXMsCiAgICBjdXJyZW50X2l0ZW1zLAogICAgc3BsaXRfc3VjY2Vzc2Z1bCwKICAgIHByaW1hcnlfcmFuZ2UsCiAgICByZXNpZHVhbF9yYW5nZSwKICAgIHNwbGl0X2ZyYWN0aW9uKToKCiAgYXNzZXJ0IHByaW1hcnlfcmFuZ2UKICBwcmltYXJ5X2l0ZW1zID0gcmVhZF9mcm9tX3NvdXJjZShzb3VyY2UsICpwcmltYXJ5X3JhbmdlKQoKICBpZiBub3Qgc3BsaXRfc3VjY2Vzc2Z1bDoKICAgICMgRm9yIHVuc3VjY2Vzc2Z1bCBzcGxpdHMsIHJlc2lkdWFsX3JhbmdlIHNob3VsZCBiZSBOb25lLgogICAgYXNzZXJ0IG5vdCByZXNpZHVhbF9yYW5nZQoKICByZXNpZHVhbF9pdGVtcyA9ICgKICAgICAgcmVhZF9mcm9tX3NvdXJjZShzb3VyY2UsICpyZXNpZHVhbF9yYW5nZSkgaWYgc3BsaXRfc3VjY2Vzc2Z1bCBlbHNlIFtdKQoKICB0b3RhbF9pdGVtcyA9IHByaW1hcnlfaXRlbXMgKyByZXNpZHVhbF9pdGVtcwoKICBpZiBjdXJyZW50X2l0ZW1zICE9IHByaW1hcnlfaXRlbXM6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdDdXJyZW50IHNvdXJjZSAlciBhbmQgYSBzb3VyY2UgY3JlYXRlZCB1c2luZyB0aGUgJwogICAgICAgICdyYW5nZSBvZiB0aGUgcHJpbWFyeSBzb3VyY2UgJXIgZGV0ZXJtaW5lZCAnCiAgICAgICAgJ2J5IHBlcmZvcm1pbmcgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIGF0IGZyYWN0aW9uICcKICAgICAgICAnJXIgcHJvZHVjZWQgZGlmZmVyZW50IHZhbHVlcy4gRXhwZWN0ZWQgJwogICAgICAgICd0aGVzZSBzb3VyY2VzIHRvIHByb2R1Y2UgdGhlIHNhbWUgbGlzdCBvZiB2YWx1ZXMuJyAlCiAgICAgICAgKHNvdXJjZSwgX3JhbmdlX3RvX3N0cigqcHJpbWFyeV9yYW5nZSksIHNwbGl0X2ZyYWN0aW9uKSkKCiAgaWYgZXhwZWN0ZWRfaXRlbXMgIT0gdG90YWxfaXRlbXM6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdJdGVtcyBvYnRhaW5lZCBieSByZWFkaW5nIHRoZSBzb3VyY2UgJXIgZm9yIHByaW1hcnkgJwogICAgICAgICdhbmQgcmVzaWR1YWwgcmFuZ2VzICVzIGFuZCAlcyBkaWQgbm90IHByb2R1Y2UgdGhlICcKICAgICAgICAnZXhwZWN0ZWQgbGlzdCBvZiB2YWx1ZXMuJyAlCiAgICAgICAgKHNvdXJjZSwgX3JhbmdlX3RvX3N0cigqcHJpbWFyeV9yYW5nZSksIF9yYW5nZV90b19zdHIoKnJlc2lkdWFsX3JhbmdlKSkpCgogIHJlc3VsdCA9IChsZW4ocHJpbWFyeV9pdGVtcyksIGxlbihyZXNpZHVhbF9pdGVtcykgaWYgc3BsaXRfc3VjY2Vzc2Z1bCBlbHNlIC0xKQogIHJldHVybiByZXN1bHQKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50KAogICAgc291cmNlLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsIHNwbGl0X2ZyYWN0aW9uKToKICAiIiJWZXJpZmllcyBzb21lIGNvbnNpc3RlbmN5IHByb3BlcnRpZXMgb2YgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nLgoKICBFcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgcHNldWRvY29kZTo6OgoKICAgIG9yaWdpbmFsX3JhbmdlX3RyYWNrZXIgPSBzb3VyY2UuZ2V0UmFuZ2VUcmFja2VyKE5vbmUsIE5vbmUpCiAgICBvcmlnaW5hbF9yZWFkZXIgPSBzb3VyY2UucmVhZChvcmlnaW5hbF9yYW5nZV90cmFja2VyKQogICAgaXRlbXNfYmVmb3JlX3NwbGl0ID0gcmVhZCBOIGl0ZW1zIGZyb20gb3JpZ2luYWxfcmVhZGVyCiAgICBzdWdnZXN0ZWRfc3BsaXRfcG9zaXRpb24gPSBvcmlnaW5hbF9yYW5nZV90cmFja2VyLnBvc2l0aW9uX2Zvcl9mcmFjdGlvbigKICAgICAgc3BsaXRfZnJhY3Rpb24pCiAgICBvcmlnaW5hbF9zdG9wX3Bvc2l0aW9uIC0gb3JpZ2luYWxfcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkKICAgIHNwbGl0X3Jlc3VsdCA9IHJhbmdlX3RyYWNrZXIudHJ5X3NwbGl0KCkKICAgIHNwbGl0X3Bvc2l0aW9uLCBzcGxpdF9mcmFjdGlvbiA9IHNwbGl0X3Jlc3VsdAogICAgcHJpbWFyeV9yYW5nZV90cmFja2VyID0gc291cmNlLmdldF9yYW5nZV90cmFja2VyKAogICAgICBvcmlnaW5hbF9yYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCksIHNwbGl0X3Bvc2l0aW9uKQogICAgcmVzaWR1YWxfcmFuZ2VfdHJhY2tlciA9IHNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcihzcGxpdF9wb3NpdGlvbiwKICAgICAgb3JpZ2luYWxfc3RvcF9wb3NpdGlvbikKCiAgICBhc3NlcnQgdGhhdDogaXRlbXMgd2hlbiByZWFkaW5nIHNvdXJjZS5yZWFkKHByaW1hcnlfcmFuZ2VfdHJhY2tlcikgPT0KICAgICAgaXRlbXNfYmVmb3JlX3NwbGl0ICsgaXRlbXMgZnJvbSBjb250aW51aW5nIHRvIHJlYWQgJ29yaWdpbmFsX3JlYWRlcicKICAgIGFzc2VydCB0aGF0OiBpdGVtcyB3aGVuIHJlYWRpbmcgc291cmNlLnJlYWQob3JpZ2luYWxfcmFuZ2VfdHJhY2tlcikgPQogICAgICBpdGVtcyB3aGVuIHJlYWRpbmcgc291cmNlLnJlYWQocHJpbWFyeV9yYW5nZV90cmFja2VyKSArIGl0ZW1zIHdoZW4gcmVhZGluZwogICAgc291cmNlLnJlYWQocmVzaWR1YWxfcmFuZ2VfdHJhY2tlcikKCiAgQXJnczoKCiAgICBzb3VyY2U6IHNvdXJjZSB0byBwZXJmb3JtIGR5bmFtaWMgd29yayByZWJhbGFuY2luZyBvbi4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdDogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlIHNwbGl0dGluZy4KICAgIHNwbGl0X2ZyYWN0aW9uOiBmcmFjdGlvbiB0byBzcGxpdCBhdC4KICAiIiIKCiAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICBzb3VyY2UsCiAgICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgICAgc3BsaXRfZnJhY3Rpb24sCiAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfU1VDQ0VFRF9BTkRfQkVfQ09OU0lTVEVOVCkKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2ZhaWxzKAogICAgc291cmNlLCBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsIHNwbGl0X2ZyYWN0aW9uKToKICAiIiJBc3NlcnRzIHRoYXQgZHluYW1pYyB3b3JrIHJlYmFsYW5jaW5nIGF0IGEgZ2l2ZW4gZnJhY3Rpb24gZmFpbHMuCgogIEFzc2VydHMgdGhhdCB0cnlpbmcgdG8gcGVyZm9ybSBkeW5hbWljIHNwbGl0dGluZyBhZnRlciByZWFkaW5nCiAgJ251bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCcgaXRlbXMgZnJvbSB0aGUgc291cmNlIGZhaWxzLgoKICBBcmdzOgogICAgc291cmNlOiBzb3VyY2UgdG8gcGVyZm9ybSBkeW5hbWljIHNwbGl0dGluZyBvbi4KICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdDogbnVtYmVyIG9mIGl0ZW1zIHRvIHJlYWQgYmVmb3JlIHNwbGl0dGluZy4KICAgIHNwbGl0X2ZyYWN0aW9uOiBmcmFjdGlvbiB0byBzcGxpdCBhdC4KICAiIiIKCiAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICBzb3VyY2UsCiAgICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgICAgc3BsaXRfZnJhY3Rpb24sCiAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfRkFJTCkKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeSgKICAgIHNvdXJjZSwKICAgIGV4cGVjdGVkX2l0ZW1zLAogICAgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgbGVmdF9mcmFjdGlvbiwKICAgIGxlZnRfcmVzdWx0LAogICAgcmlnaHRfZnJhY3Rpb24sCiAgICByaWdodF9yZXN1bHQsCiAgICBzdGF0cywKICAgIHN0YXJ0X3Bvc2l0aW9uPU5vbmUsCiAgICBzdG9wX3Bvc2l0aW9uPU5vbmUpOgogICIiIlBlcmZvcm1zIGR5bmFtaWMgd29yayByZWJhbGFuY2luZyBmb3IgZnJhY3Rpb25zIHdpdGhpbiBhIGdpdmVuIHJhbmdlLgoKICBBc3NlcnRzIHRoYXQgZ2l2ZW4gYSBzdGFydCBwb3NpdGlvbiwgYSBzb3VyY2UgY2FuIGJlIHNwbGl0IGF0IGV2ZXJ5CiAgaW50ZXJlc3RpbmcgZnJhY3Rpb24gKGhhbGZ3YXkgYmV0d2VlbiB0d28gZnJhY3Rpb25zIHRoYXQgZGlmZmVyIGJ5IGF0CiAgbGVhc3Qgb25lIGl0ZW0pIGFuZCB0aGUgcmVzdWx0cyBhcmUgY29uc2lzdGVudCBpZiBhIHNwbGl0IHN1Y2NlZWRzLgoKICBBcmdzOgogICAgc291cmNlOiBzb3VyY2UgdG8gcGVyZm9ybSBkeW5hbWljIHNwbGl0dGluZyBvbi4KICAgIGV4cGVjdGVkX2l0ZW1zOiB0b3RhbCBzZXQgb2YgaXRlbXMgZXhwZWN0ZWQgd2hlbiByZWFkaW5nIHRoZSBzb3VyY2UuCiAgICBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQ6IG51bWJlciBvZiBpdGVtcyB0byByZWFkIGJlZm9yZSBzcGxpdHRpbmcuCiAgICBsZWZ0X2ZyYWN0aW9uOiBsZWZ0IGZyYWN0aW9uIGZvciBiaW5hcnkgc3BsaXR0aW5nLgogICAgbGVmdF9yZXN1bHQ6IHJlc3VsdCByZWNlaXZlZCBieSBzcGxpdHRpbmcgYXQgbGVmdCBmcmFjdGlvbi4KICAgIHJpZ2h0X2ZyYWN0aW9uOiByaWdodCBmcmFjdGlvbiBmb3IgYmluYXJ5IHNwbGl0dGluZy4KICAgIHJpZ2h0X3Jlc3VsdDogcmVzdWx0IHJlY2VpdmVkIGJ5IHNwbGl0dGluZyBhdCByaWdodCBmcmFjdGlvbi4KICAgIHN0YXRzOiBhIGBgU3BsaXRGcmFjdGlvblN0YXRpc3RpY3NgYCBmb3Igc3RvcmluZyByZXN1bHRzLgogICIiIgogIGFzc2VydCByaWdodF9mcmFjdGlvbiA+IGxlZnRfZnJhY3Rpb24KCiAgaWYgcmlnaHRfZnJhY3Rpb24gLSBsZWZ0X2ZyYWN0aW9uIDwgMC4wMDE6CiAgICAjIFRoaXMgcHJldmVudHMgaW5maW5pdGUgcmVjdXJzaW9uLgogICAgcmV0dXJuCgogIG1pZGRsZV9mcmFjdGlvbiA9IChsZWZ0X2ZyYWN0aW9uICsgcmlnaHRfZnJhY3Rpb24pIC8gMgoKICBpZiBsZWZ0X3Jlc3VsdCBpcyBOb25lOgogICAgbGVmdF9yZXN1bHQgPSBfYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9yKAogICAgICAgIHNvdXJjZSwKICAgICAgICBleHBlY3RlZF9pdGVtcywKICAgICAgICBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsCiAgICAgICAgbGVmdF9mcmFjdGlvbiwKICAgICAgICBFeHBlY3RlZFNwbGl0T3V0Y29tZS5NVVNUX0JFX0NPTlNJU1RFTlRfSUZfU1VDQ0VFRFMpCgogIGlmIHJpZ2h0X3Jlc3VsdCBpcyBOb25lOgogICAgcmlnaHRfcmVzdWx0ID0gX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcigKICAgICAgICBzb3VyY2UsCiAgICAgICAgZXhwZWN0ZWRfaXRlbXMsCiAgICAgICAgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0LAogICAgICAgIHJpZ2h0X2ZyYWN0aW9uLAogICAgICAgIEV4cGVjdGVkU3BsaXRPdXRjb21lLk1VU1RfQkVfQ09OU0lTVEVOVF9JRl9TVUNDRUVEUykKCiAgbWlkZGxlX3Jlc3VsdCA9IF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmVoYXZpb3IoCiAgICAgIHNvdXJjZSwKICAgICAgZXhwZWN0ZWRfaXRlbXMsCiAgICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgICAgbWlkZGxlX2ZyYWN0aW9uLAogICAgICBFeHBlY3RlZFNwbGl0T3V0Y29tZS5NVVNUX0JFX0NPTlNJU1RFTlRfSUZfU1VDQ0VFRFMpCgogIGlmIG1pZGRsZV9yZXN1bHRbMV0gIT0gLTE6CiAgICBzdGF0cy5zdWNjZXNzZnVsX2ZyYWN0aW9ucy5hcHBlbmQobWlkZGxlX2ZyYWN0aW9uKQogIGlmIG1pZGRsZV9yZXN1bHRbMV0gPiAwOgogICAgc3RhdHMubm9uX3RyaXZpYWxfZnJhY3Rpb25zLmFwcGVuZChtaWRkbGVfZnJhY3Rpb24pCgogICMgVHdvIHNwbGl0IHJlc3VsdHMgYXJlIGVxdWl2YWxlbnQgaWYgcHJpbWFyeSBhbmQgcmVzaWR1YWwgcmFuZ2VzIG9mIHRoZW0KICAjIHByb2R1Y2UgdGhlIHNhbWUgbnVtYmVyIG9mIHJlY29yZHMgKHNpbXBseSBjaGVja2luZyB0aGUgc2l6ZSBvZiBwcmltYXJ5CiAgIyBlbm91Z2ggc2luY2UgdGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzIGlzIGNvbnN0YW50KS4KCiAgaWYgbGVmdF9yZXN1bHRbMF0gIT0gbWlkZGxlX3Jlc3VsdFswXToKICAgIGFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnkoCiAgICAgICAgc291cmNlLAogICAgICAgIGV4cGVjdGVkX2l0ZW1zLAogICAgICAgIG51bV9pdGVtc190b19yZWFkX2JlZm9yZV9zcGxpdCwKICAgICAgICBsZWZ0X2ZyYWN0aW9uLAogICAgICAgIGxlZnRfcmVzdWx0LAogICAgICAgIG1pZGRsZV9mcmFjdGlvbiwKICAgICAgICBtaWRkbGVfcmVzdWx0LAogICAgICAgIHN0YXRzKQoKICAjIFdlIHNwZWNpYWwgY2FzZSByaWdodF9mcmFjdGlvbj0xLjAgc2luY2UgdGhhdCBjb3VsZCBmYWlsIGR1ZSB0byBiZWluZyBvdXQKICAjIG9mIHJhbmdlLiAoZXZlbiBpZiBhIGR5bmFtaWMgc3BsaXQgZmFpbHMgYXQgJ21pZGRsZV9mcmFjdGlvbicgYW5kIGF0CiAgIyBmcmFjdGlvbiAxLjAsIHRoZXJlIG1pZ2h0IGJlIGZyYWN0aW9ucyBpbiByYW5nZSAoJ21pZGRsZV9mcmFjdGlvbicsIDEuMCkKICAjIHdoZXJlIGR5bmFtaWMgc3BsaXR0aW5nIHN1Y2NlZWRzKS4KICBpZiByaWdodF9mcmFjdGlvbiA9PSAxLjAgb3IgbWlkZGxlX3Jlc3VsdFswXSAhPSByaWdodF9yZXN1bHRbMF06CiAgICBhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fYmluYXJ5KAogICAgICAgIHNvdXJjZSwKICAgICAgICBleHBlY3RlZF9pdGVtcywKICAgICAgICBudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXQsCiAgICAgICAgbWlkZGxlX2ZyYWN0aW9uLAogICAgICAgIG1pZGRsZV9yZXN1bHQsCiAgICAgICAgcmlnaHRfZnJhY3Rpb24sCiAgICAgICAgcmlnaHRfcmVzdWx0LAogICAgICAgIHN0YXRzKQoKCk1BWF9DT05DVVJSRU5UX1NQTElUVElOR19UUklBTFNfUEVSX0lURU0gPSAxMDAKTUFYX0NPTkNVUlJFTlRfU1BMSVRUSU5HX1RSSUFMU19UT1RBTCA9IDEwMDAKCgpkZWYgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2V4aGF1c3RpdmUoCiAgICBzb3VyY2UsCiAgICBzdGFydF9wb3NpdGlvbj1Ob25lLAogICAgc3RvcF9wb3NpdGlvbj1Ob25lLAogICAgcGVyZm9ybV9tdWx0aV90aHJlYWRlZF90ZXN0PVRydWUpOgogICIiIlBlcmZvcm1zIGFuZCB0ZXN0cyBkeW5hbWljIHdvcmsgcmViYWxhbmNpbmcgZXhoYXVzdGl2ZWx5LgoKICBBc3NlcnRzIHRoYXQgZm9yIGVhY2ggcG9zc2libGUgc3RhcnQgcG9zaXRpb24sIGEgc291cmNlIGNhbiBiZSBzcGxpdCBhdAogIGV2ZXJ5IGludGVyZXN0aW5nIGZyYWN0aW9uIChoYWxmd2F5IGJldHdlZW4gdHdvIGZyYWN0aW9ucyB0aGF0IGRpZmZlciBieSBhdAogIGxlYXN0IG9uZSBpdGVtKSBhbmQgdGhlIHJlc3VsdHMgYXJlIGNvbnNpc3RlbnQgaWYgYSBzcGxpdCBzdWNjZWVkcy4KICBWZXJpZmllcyBtdWx0aSB0aHJlYWRlZCBzcGxpdHRpbmcgYXMgd2VsbC4KCiAgQXJnczoKICAgIHNvdXJjZSAofmFwYWNoZV9iZWFtLmlvLmlvYmFzZS5Cb3VuZGVkU291cmNlKTogdGhlIHNvdXJjZSB0byBwZXJmb3JtCiAgICAgIGR5bmFtaWMgc3BsaXR0aW5nIG9uLgogICAgcGVyZm9ybV9tdWx0aV90aHJlYWRlZF90ZXN0IChib29sKTogaWYgOmRhdGE6YFRydWVgIHBlcmZvcm1zIGEKICAgICAgbXVsdGktdGhyZWFkZWQgdGVzdCwgb3RoZXJ3aXNlIHRoaXMgdGVzdCBpcyBza2lwcGVkLgoKICBSYWlzZXM6CiAgICBWYWx1ZUVycm9yOiBpZiB0aGUgZXhoYXVzdGl2ZSBzcGxpdHRpbmcgdGVzdCBmYWlscy4KICAiIiIKCiAgZXhwZWN0ZWRfaXRlbXMgPSByZWFkX2Zyb21fc291cmNlKHNvdXJjZSwgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCiAgaWYgbm90IGV4cGVjdGVkX2l0ZW1zOgogICAgcmFpc2UgVmFsdWVFcnJvcignU291cmNlICVyIGlzIGVtcHR5LicgJSBzb3VyY2UpCgogIGlmIGxlbihleHBlY3RlZF9pdGVtcykgPT0gMToKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NvdXJjZSAlciBvbmx5IHJlYWRzIGEgc2luZ2xlIGl0ZW0uJyAlIHNvdXJjZSkKCiAgYWxsX25vbl90cml2aWFsX2ZyYWN0aW9ucyA9IFtdCgogIGFueV9zdWNjZXNzZnVsX2ZyYWN0aW9ucyA9IEZhbHNlCiAgYW55X25vbl90cml2aWFsX2ZyYWN0aW9ucyA9IEZhbHNlCgogIGZvciBpIGluIHJhbmdlKGxlbihleHBlY3RlZF9pdGVtcykpOgogICAgc3RhdHMgPSBTcGxpdEZyYWN0aW9uU3RhdGlzdGljcyhbXSwgW10pCgogICAgYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JpbmFyeSgKICAgICAgICBzb3VyY2UsIGV4cGVjdGVkX2l0ZW1zLCBpLCAwLjAsIE5vbmUsIDEuMCwgTm9uZSwgc3RhdHMpCgogICAgaWYgc3RhdHMuc3VjY2Vzc2Z1bF9mcmFjdGlvbnM6CiAgICAgIGFueV9zdWNjZXNzZnVsX2ZyYWN0aW9ucyA9IFRydWUKICAgIGlmIHN0YXRzLm5vbl90cml2aWFsX2ZyYWN0aW9uczoKICAgICAgYW55X25vbl90cml2aWFsX2ZyYWN0aW9ucyA9IFRydWUKCiAgICBhbGxfbm9uX3RyaXZpYWxfZnJhY3Rpb25zLmFwcGVuZChzdGF0cy5ub25fdHJpdmlhbF9mcmFjdGlvbnMpCgogIGlmIG5vdCBhbnlfc3VjY2Vzc2Z1bF9mcmFjdGlvbnM6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdTcGxpdEF0RnJhY3Rpb24gdGVzdCBjb21wbGV0ZWQgdmFjdW91c2x5OiBubyAnCiAgICAgICAgJ3N1Y2Nlc3NmdWwgc3BsaXQgZnJhY3Rpb25zIGZvdW5kJykKCiAgaWYgbm90IGFueV9ub25fdHJpdmlhbF9mcmFjdGlvbnM6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdTcGxpdEF0RnJhY3Rpb24gdGVzdCBjb21wbGV0ZWQgdmFjdW91c2x5OiBubyBub24tdHJpdmlhbCBzcGxpdCAnCiAgICAgICAgJ2ZyYWN0aW9ucyBmb3VuZCcpCgogIGlmIG5vdCBwZXJmb3JtX211bHRpX3RocmVhZGVkX3Rlc3Q6CiAgICByZXR1cm4KCiAgbnVtX3RvdGFsX3RyaWFscyA9IDAKICBmb3IgaSBpbiByYW5nZShsZW4oZXhwZWN0ZWRfaXRlbXMpKToKICAgIG5vbl90cml2aWFsX2ZyYWN0aW9ucyA9IFsyLjBdICAjIDIuMCBpcyBsYXJnZXIgdGhhbiBhbnkgdmFsaWQgZnJhY3Rpb24uCiAgICBub25fdHJpdmlhbF9mcmFjdGlvbnMuZXh0ZW5kKGFsbF9ub25fdHJpdmlhbF9mcmFjdGlvbnNbaV0pCiAgICBtaW5fbm9uX3RyaXZpYWxfZnJhY3Rpb24gPSBtaW4obm9uX3RyaXZpYWxfZnJhY3Rpb25zKQoKICAgIGlmIG1pbl9ub25fdHJpdmlhbF9mcmFjdGlvbiA9PSAyLjA6CiAgICAgICMgVGhpcyB3aWxsIG5vdCBoYXBwZW4gYWxsIHRoZSB0aW1lLiBPdGhlcndpc2UgcHJldmlvdXMgdGVzdCB3aWxsIGZhaWwKICAgICAgIyBkdWUgdG8gdmFjdW91c25lc3MuCiAgICAgIGNvbnRpbnVlCgogICAgbnVtX3RyaWFscyA9IDAKICAgIGhhdmVfc3VjY2VzcyA9IEZhbHNlCiAgICBoYXZlX2ZhaWx1cmUgPSBGYWxzZQoKICAgIHRocmVhZF9wb29sID0gX1RocmVhZFBvb2woMikKICAgIHRyeToKICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICBudW1fdHJpYWxzICs9IDEKICAgICAgICBpZiBudW1fdHJpYWxzID4gTUFYX0NPTkNVUlJFTlRfU1BMSVRUSU5HX1RSSUFMU19QRVJfSVRFTToKICAgICAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICAgICAnQWZ0ZXIgJWQgY29uY3VycmVudCBzcGxpdHRpbmcgdHJpYWxzIGF0IGl0ZW0gIyVkLCBvYnNlcnZlZCAnCiAgICAgICAgICAgICAgJ29ubHkgJXMsIGdpdmluZyB1cCBvbiB0aGlzIGl0ZW0nLAogICAgICAgICAgICAgIG51bV90cmlhbHMsCiAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAnc3VjY2VzcycgaWYgaGF2ZV9zdWNjZXNzIGVsc2UgJ2ZhaWx1cmUnKQogICAgICAgICAgYnJlYWsKCiAgICAgICAgaWYgX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9jb25jdXJyZW50KHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaXRlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9ub25fdHJpdmlhbF9mcmFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3Bvb2wpOgogICAgICAgICAgaGF2ZV9zdWNjZXNzID0gVHJ1ZQogICAgICAgIGVsc2U6CiAgICAgICAgICBoYXZlX2ZhaWx1cmUgPSBUcnVlCgogICAgICAgIGlmIGhhdmVfc3VjY2VzcyBhbmQgaGF2ZV9mYWlsdXJlOgogICAgICAgICAgX0xPR0dFUi5pbmZvKAogICAgICAgICAgICAgICclZCB0cmlhbHMgdG8gb2JzZXJ2ZSBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgb2YgJwogICAgICAgICAgICAgICdjb25jdXJyZW50IHNwbGl0dGluZyBhdCBpdGVtICMlZCcsCiAgICAgICAgICAgICAgbnVtX3RyaWFscywKICAgICAgICAgICAgICBpKQogICAgICAgICAgYnJlYWsKICAgIGZpbmFsbHk6CiAgICAgIHRocmVhZF9wb29sLmNsb3NlKCkKCiAgICBudW1fdG90YWxfdHJpYWxzICs9IG51bV90cmlhbHMKCiAgICBpZiBudW1fdG90YWxfdHJpYWxzID4gTUFYX0NPTkNVUlJFTlRfU1BMSVRUSU5HX1RSSUFMU19UT1RBTDoKICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgJ0FmdGVyICVkIHRvdGFsIGNvbmN1cnJlbnQgc3BsaXR0aW5nIHRyaWFscywgY29uc2lkZXJlZCAnCiAgICAgICAgICAnb25seSAlZCBpdGVtcywgZ2l2aW5nIHVwLicsCiAgICAgICAgICBudW1fdG90YWxfdHJpYWxzLAogICAgICAgICAgaSkKICAgICAgYnJlYWsKCiAgX0xPR0dFUi5pbmZvKAogICAgICAnJWQgdG90YWwgY29uY3VycmVudCBzcGxpdHRpbmcgdHJpYWxzIGZvciAlZCBpdGVtcycsCiAgICAgIG51bV90b3RhbF90cmlhbHMsCiAgICAgIGxlbihleHBlY3RlZF9pdGVtcykpCgoKZGVmIF9hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fY29uY3VycmVudCgKICAgIHNvdXJjZSwKICAgIGV4cGVjdGVkX2l0ZW1zLAogICAgbnVtX2l0ZW1zX3RvX3JlYWRfYmVmb3JlX3NwbGl0dGluZywKICAgIHNwbGl0X2ZyYWN0aW9uLAogICAgdGhyZWFkX3Bvb2w9Tm9uZSk6CgogIHJhbmdlX3RyYWNrZXIgPSBzb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoTm9uZSwgTm9uZSkKICBzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdCA9IHJhbmdlX3RyYWNrZXIuc3RvcF9wb3NpdGlvbigpCiAgcmVhZGVyID0gc291cmNlLnJlYWQocmFuZ2VfdHJhY2tlcikKICByZWFkZXJfaXRlciA9IGl0ZXIocmVhZGVyKQoKICBjdXJyZW50X2l0ZW1zID0gW10KICBmb3IgXyBpbiByYW5nZShudW1faXRlbXNfdG9fcmVhZF9iZWZvcmVfc3BsaXR0aW5nKToKICAgIGN1cnJlbnRfaXRlbXMuYXBwZW5kKG5leHQocmVhZGVyX2l0ZXIpKQoKICBkZWYgcmVhZF9vcl9zcGxpdCh0ZXN0X3BhcmFtcyk6CiAgICBpZiB0ZXN0X3BhcmFtc1swXToKICAgICAgcmV0dXJuIFt2YWwgZm9yIHZhbCBpbiB0ZXN0X3BhcmFtc1sxXV0KICAgIGVsc2U6CiAgICAgIHBvc2l0aW9uID0gdGVzdF9wYXJhbXNbMV0ucG9zaXRpb25fYXRfZnJhY3Rpb24odGVzdF9wYXJhbXNbMl0pCiAgICAgIHJlc3VsdCA9IHRlc3RfcGFyYW1zWzFdLnRyeV9zcGxpdChwb3NpdGlvbikKICAgICAgcmV0dXJuIHJlc3VsdAoKICBpbnB1dHMgPSBbXQogIHBvb2wgPSB0aHJlYWRfcG9vbCBpZiB0aHJlYWRfcG9vbCBlbHNlIF9UaHJlYWRQb29sKDIpCiAgdHJ5OgogICAgaW5wdXRzLmFwcGVuZChbVHJ1ZSwgcmVhZGVyX2l0ZXJdKQogICAgaW5wdXRzLmFwcGVuZChbRmFsc2UsIHJhbmdlX3RyYWNrZXIsIHNwbGl0X2ZyYWN0aW9uXSkKCiAgICByZXN1bHRzID0gcG9vbC5tYXAocmVhZF9vcl9zcGxpdCwgaW5wdXRzKQogIGZpbmFsbHk6CiAgICBpZiBub3QgdGhyZWFkX3Bvb2w6CiAgICAgIHBvb2wuY2xvc2UoKQoKICBjdXJyZW50X2l0ZW1zLmV4dGVuZChyZXN1bHRzWzBdKQogIHByaW1hcnlfcmFuZ2UgPSAoCiAgICAgIHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSwgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkpCgogIHNwbGl0X3Jlc3VsdCA9IHJlc3VsdHNbMV0KICByZXNpZHVhbF9yYW5nZSA9ICgKICAgICAgc3BsaXRfcmVzdWx0WzBdLCBzdG9wX3Bvc2l0aW9uX2JlZm9yZV9zcGxpdCkgaWYgc3BsaXRfcmVzdWx0IGVsc2UgTm9uZQoKICByZXMgPSBfdmVyaWZ5X3NpbmdsZV9zcGxpdF9mcmFjdGlvbl9yZXN1bHQoCiAgICAgIHNvdXJjZSwKICAgICAgZXhwZWN0ZWRfaXRlbXMsCiAgICAgIGN1cnJlbnRfaXRlbXMsCiAgICAgIHNwbGl0X3Jlc3VsdCwKICAgICAgcHJpbWFyeV9yYW5nZSwKICAgICAgcmVzaWR1YWxfcmFuZ2UsCiAgICAgIHNwbGl0X2ZyYWN0aW9uKQoKICByZXR1cm4gcmVzWzFdID4gMAqUfZQojBRFeHBlY3RlZFNwbGl0T3V0Y29tZZRqXTEBAEtNS1CHlIwQcmVhZF9mcm9tX3NvdXJjZZRqVjEBAEtaS26HlIwLX1RocmVhZFBvb2yUalYxAQBLcUt2h5SMJWFzc2VydF9zb3VyY2VzX2VxdWFsX3JlZmVyZW5jZV9zb3VyY2WUalYxAQBLeUu5h5SMHmFzc2VydF9yZWVudHJhbnRfcmVhZHNfc3VjY2VlZJRqVjEBAEu8S/eHlIwhYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2JlaGF2aW9ylGpWMQEAS/pNGQGHlIwiX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcpRqVjEBAE0cAU1tAYeUjA1fcmFuZ2VfdG9fc3RylGpWMQEATXABTXEBh5SMJF92ZXJpZnlfc2luZ2xlX3NwbGl0X2ZyYWN0aW9uX3Jlc3VsdJRqVjEBAE10AU2aAYeUjDBhc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fc3VjY2VlZHNfYW5kX2NvbnNpc3RlbnSUalYxAQBNnQFNwQGHlIweYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2ZhaWxzlGpWMQEATcQBTdUBh5SMH2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnmUalYxAQBN2AFNMwKHlIwjYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX2V4aGF1c3RpdmWUalYxAQBNOgJNsgKHlIwkX2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9jb25jdXJyZW50lGpWMQEATbUCTekCh5R1fZQojBByZWFkX2Zyb21fc291cmNllGo2AwAAjCVhc3NlcnRfc291cmNlc19lcXVhbF9yZWZlcmVuY2Vfc291cmNllGo2AwAAjB5hc3NlcnRfcmVlbnRyYW50X3JlYWRzX3N1Y2NlZWSUajYDAACMIWFzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iZWhhdmlvcpRqNgMAAIwwYXNzZXJ0X3NwbGl0X2F0X2ZyYWN0aW9uX3N1Y2NlZWRzX2FuZF9jb25zaXN0ZW50lGo2AwAAjB5hc3NlcnRfc3BsaXRfYXRfZnJhY3Rpb25fZmFpbHOUajYDAACMH2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9iaW5hcnmUajYDAACMI2Fzc2VydF9zcGxpdF9hdF9mcmFjdGlvbl9leGhhdXN0aXZllGo2AwAAdYwgYXBhY2hlX2JlYW0uaW8uc291cmNlX3Rlc3RfdXRpbHOUdJSMFWFwYWNoZV9iZWFtLmlvLnRleHRpb5QoWChjAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgc291cmNlIGFuZCBhIHNpbmsgZm9yIHJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZyB0byB0ZXh0IGZpbGVzLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbApmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgbG9uZwoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzaW5rCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGZpbGViYXNlZHNvdXJjZQpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBpb2Jhc2UKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzb3VyY2UgaW1wb3J0IFJlYWRBbGxGaWxlcwpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IENvbXByZXNzaW9uVHlwZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFdyaXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCgpfX2FsbF9fID0gWwogICAgJ1JlYWRGcm9tVGV4dCcsCiAgICAnUmVhZEZyb21UZXh0V2l0aEZpbGVuYW1lJywKICAgICdSZWFkQWxsRnJvbVRleHQnLAogICAgJ1dyaXRlVG9UZXh0JwpdCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgX1RleHRTb3VyY2UoZmlsZWJhc2Vkc291cmNlLkZpbGVCYXNlZFNvdXJjZSk6CiAgciIiIkEgc291cmNlIGZvciByZWFkaW5nIHRleHQgZmlsZXMuCgogIFBhcnNlcyBhIHRleHQgZmlsZSBhcyBuZXdsaW5lLWRlbGltaXRlZCBlbGVtZW50cy4gU3VwcG9ydHMgbmV3bGluZSBkZWxpbWl0ZXJzCiAgJ1xuJyBhbmQgJ1xyXG4uCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyByZWFkaW5nIHRleHQgZW5jb2RlZCB1c2luZyBVVEYtOCBvcgogIEFTQ0lJLgogICIiIgoKICBERUZBVUxUX1JFQURfQlVGRkVSX1NJWkUgPSA4MTkyCgogIGNsYXNzIFJlYWRCdWZmZXIob2JqZWN0KToKICAgICMgQSBidWZmZXIgdGhhdCBnaXZlcyB0aGUgYnVmZmVyZWQgZGF0YSBhbmQgbmV4dCBwb3NpdGlvbiBpbiB0aGUKICAgICMgYnVmZmVyIHRoYXQgc2hvdWxkIGJlIHJlYWQuCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEsIHBvc2l0aW9uKToKICAgICAgc2VsZi5fZGF0YSA9IGRhdGEKICAgICAgc2VsZi5fcG9zaXRpb24gPSBwb3NpdGlvbgoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGRhdGEoc2VsZik6CiAgICAgIHJldHVybiBzZWxmLl9kYXRhCgogICAgQGRhdGEuc2V0dGVyCiAgICBkZWYgZGF0YShzZWxmLCB2YWx1ZSk6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlLCBieXRlcykKICAgICAgc2VsZi5fZGF0YSA9IHZhbHVlCgogICAgQHByb3BlcnR5CiAgICBkZWYgcG9zaXRpb24oc2VsZik6CiAgICAgIHJldHVybiBzZWxmLl9wb3NpdGlvbgoKICAgIEBwb3NpdGlvbi5zZXR0ZXIKICAgIGRlZiBwb3NpdGlvbihzZWxmLCB2YWx1ZSk6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSkKICAgICAgaWYgdmFsdWUgPiBsZW4oc2VsZi5fZGF0YSk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ0Nhbm5vdCBzZXQgcG9zaXRpb24gdG8gJWQgc2luY2UgaXRcJ3MgbGFyZ2VyIHRoYW4gJwogICAgICAgICAgICAnc2l6ZSBvZiBkYXRhICVkLicgJSAodmFsdWUsIGxlbihzZWxmLl9kYXRhKSkpCiAgICAgIHNlbGYuX3Bvc2l0aW9uID0gdmFsdWUKCiAgICBkZWYgcmVzZXQoc2VsZik6CiAgICAgIHNlbGYuZGF0YSA9IGInJwogICAgICBzZWxmLnBvc2l0aW9uID0gMAoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgICAgICAgICBtaW5fYnVuZGxlX3NpemUsCiAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzLAogICAgICAgICAgICAgICBjb2RlciwgICMgdHlwZTogY29kZXJzLkNvZGVyCiAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplPURFRkFVTFRfUkVBRF9CVUZGRVJfU0laRSwKICAgICAgICAgICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgICAgICAgICAgc2tpcF9oZWFkZXJfbGluZXM9MCwKICAgICAgICAgICAgICAgaGVhZGVyX3Byb2Nlc3Nvcl9mbnM9KE5vbmUsIE5vbmUpKToKICAgICIiIkluaXRpYWxpemUgYSBfVGV4dFNvdXJjZQoKICAgIEFyZ3M6CiAgICAgIGhlYWRlcl9wcm9jZXNzb3JfZm5zICh0dXBsZSk6IGEgdHVwbGUgb2YgYSBgaGVhZGVyX21hdGNoZXJgIGZ1bmN0aW9uCiAgICAgICAgYW5kIGEgYGhlYWRlcl9wcm9jZXNzb3JgIGZ1bmN0aW9uLiBUaGUgYGhlYWRlcl9tYXRjaGVyYCBzaG91bGQKICAgICAgICByZXR1cm4gYFRydWVgIGZvciBhbGwgbGluZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHRoYXQgYXJlIHBhcnQKICAgICAgICBvZiB0aGUgZmlsZSBoZWFkZXIgYW5kIGBGYWxzZWAgb3RoZXJ3aXNlLiBUaGVzZSBoZWFkZXIgbGluZXMgd2lsbAogICAgICAgIG5vdCBiZSB5aWVsZGVkIHdoZW4gcmVhZGluZyByZWNvcmRzIGFuZCBpbnN0ZWFkIHBhc3NlZCBpbnRvCiAgICAgICAgYGhlYWRlcl9wcm9jZXNzb3JgIHRvIGJlIGhhbmRsZWQuIElmIGBza2lwX2hlYWRlcl9saW5lc2AgYW5kIGEKICAgICAgICBgaGVhZGVyX21hdGNoZXJgIGFyZSBib3RoIHByb3ZpZGVkLCB0aGUgdmFsdWUgb2YgYHNraXBfaGVhZGVyX2xpbmVzYAogICAgICAgIGxpbmVzIHdpbGwgYmUgc2tpcHBlZCBhbmQgdGhlIGhlYWRlciB3aWxsIGJlIHByb2Nlc3NlZCBmcm9tCiAgICAgICAgdGhlcmUuCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IGlmIHNraXBfbGluZXMgaXMgbmVnYXRpdmUuCgogICAgUGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gaW4gY2xhc3MgYFJlYWRGcm9tVGV4dGAgZm9yIHRoZSByZXN0CiAgICBvZiB0aGUgYXJndW1lbnRzLgogICAgIiIiCiAgICBzdXBlcihfVGV4dFNvdXJjZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgICBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgdmFsaWRhdGU9dmFsaWRhdGUpCgogICAgc2VsZi5fc3RyaXBfdHJhaWxpbmdfbmV3bGluZXMgPSBzdHJpcF90cmFpbGluZ19uZXdsaW5lcwogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKICAgIHNlbGYuX2NvZGVyID0gY29kZXIKICAgIHNlbGYuX2J1ZmZlcl9zaXplID0gYnVmZmVyX3NpemUKICAgIGlmIHNraXBfaGVhZGVyX2xpbmVzIDwgMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdDYW5ub3Qgc2tpcCBuZWdhdGl2ZSBudW1iZXIgb2YgaGVhZGVyIGxpbmVzOiAlZCcgJSBza2lwX2hlYWRlcl9saW5lcykKICAgIGVsaWYgc2tpcF9oZWFkZXJfbGluZXMgPiAxMDoKICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgJ1NraXBwaW5nICVkIGhlYWRlciBsaW5lcy4gU2tpcHBpbmcgbGFyZ2UgbnVtYmVyIG9mIGhlYWRlciAnCiAgICAgICAgICAnbGluZXMgbWlnaHQgc2lnbmlmaWNhbnRseSBzbG93IGRvd24gcHJvY2Vzc2luZy4nKQogICAgc2VsZi5fc2tpcF9oZWFkZXJfbGluZXMgPSBza2lwX2hlYWRlcl9saW5lcwogICAgc2VsZi5faGVhZGVyX21hdGNoZXIsIHNlbGYuX2hlYWRlcl9wcm9jZXNzb3IgPSBoZWFkZXJfcHJvY2Vzc29yX2ZucwoKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgcGFyZW50X2RkID0gc3VwZXIoX1RleHRTb3VyY2UsIHNlbGYpLmRpc3BsYXlfZGF0YSgpCiAgICBwYXJlbnRfZGRbJ3N0cmlwX25ld2xpbmUnXSA9IERpc3BsYXlEYXRhSXRlbSgKICAgICAgICBzZWxmLl9zdHJpcF90cmFpbGluZ19uZXdsaW5lcywgbGFiZWw9J1N0cmlwIFRyYWlsaW5nIE5ldyBMaW5lcycpCiAgICBwYXJlbnRfZGRbJ2J1ZmZlcl9zaXplJ10gPSBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgc2VsZi5fYnVmZmVyX3NpemUsIGxhYmVsPSdCdWZmZXIgU2l6ZScpCiAgICBwYXJlbnRfZGRbJ2NvZGVyJ10gPSBEaXNwbGF5RGF0YUl0ZW0oc2VsZi5fY29kZXIuX19jbGFzc19fLCBsYWJlbD0nQ29kZXInKQogICAgcmV0dXJuIHBhcmVudF9kZAoKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICBzdGFydF9vZmZzZXQgPSByYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIHJlYWRfYnVmZmVyID0gX1RleHRTb3VyY2UuUmVhZEJ1ZmZlcihiJycsIDApCgogICAgbmV4dF9yZWNvcmRfc3RhcnRfcG9zaXRpb24gPSAtMQoKICAgIGRlZiBzcGxpdF9wb2ludHNfdW5jbGFpbWVkKHN0b3BfcG9zaXRpb24pOgogICAgICByZXR1cm4gKAogICAgICAgICAgMCBpZiBzdG9wX3Bvc2l0aW9uIDw9IG5leHRfcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uIGVsc2UKICAgICAgICAgIGlvYmFzZS5SYW5nZVRyYWNrZXIuU1BMSVRfUE9JTlRTX1VOS05PV04pCgogICAgcmFuZ2VfdHJhY2tlci5zZXRfc3BsaXRfcG9pbnRzX3VuY2xhaW1lZF9jYWxsYmFjayhzcGxpdF9wb2ludHNfdW5jbGFpbWVkKQoKICAgIHdpdGggc2VsZi5vcGVuX2ZpbGUoZmlsZV9uYW1lKSBhcyBmaWxlX3RvX3JlYWQ6CiAgICAgIHBvc2l0aW9uX2FmdGVyX3Byb2Nlc3NpbmdfaGVhZGVyX2xpbmVzID0gKAogICAgICAgICAgc2VsZi5fcHJvY2Vzc19oZWFkZXIoZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlcikpCiAgICAgIHN0YXJ0X29mZnNldCA9IG1heChzdGFydF9vZmZzZXQsIHBvc2l0aW9uX2FmdGVyX3Byb2Nlc3NpbmdfaGVhZGVyX2xpbmVzKQogICAgICBpZiBzdGFydF9vZmZzZXQgPiBwb3NpdGlvbl9hZnRlcl9wcm9jZXNzaW5nX2hlYWRlcl9saW5lczoKICAgICAgICAjIFNlZWtpbmcgdG8gb25lIHBvc2l0aW9uIGJlZm9yZSB0aGUgc3RhcnQgaW5kZXggYW5kIGlnbm9yaW5nIHRoZQogICAgICAgICMgY3VycmVudCBsaW5lLiBJZiBzdGFydF9wb3NpdGlvbiBpcyBhdCBiZWdpbm5pbmcgaWYgdGhlIGxpbmUsIHRoYXQgbGluZQogICAgICAgICMgYmVsb25ncyB0byB0aGUgY3VycmVudCBidW5kbGUsIGhlbmNlIGlnbm9yaW5nIHRoYXQgaXMgaW5jb3JyZWN0LgogICAgICAgICMgU2Vla2luZyB0byBvbmUgYnl0ZSBiZWZvcmUgcHJldmVudHMgdGhhdC4KCiAgICAgICAgZmlsZV90b19yZWFkLnNlZWsoc3RhcnRfb2Zmc2V0IC0gMSkKICAgICAgICByZWFkX2J1ZmZlci5yZXNldCgpCiAgICAgICAgc2VwX2JvdW5kcyA9IHNlbGYuX2ZpbmRfc2VwYXJhdG9yX2JvdW5kcyhmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyKQogICAgICAgIGlmIG5vdCBzZXBfYm91bmRzOgogICAgICAgICAgIyBDb3VsZCBub3QgZmluZCBhIHNlcGFyYXRvciBhZnRlciAoc3RhcnRfb2Zmc2V0IC0gMSkuIFRoaXMgbWVhbnMgdGhhdAogICAgICAgICAgIyBub25lIG9mIHRoZSByZWNvcmRzIHdpdGhpbiB0aGUgZmlsZSBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IHNvdXJjZS4KICAgICAgICAgIHJldHVybgoKICAgICAgICBfLCBzZXBfZW5kID0gc2VwX2JvdW5kcwogICAgICAgIHJlYWRfYnVmZmVyLmRhdGEgPSByZWFkX2J1ZmZlci5kYXRhW3NlcF9lbmQ6XQogICAgICAgIG5leHRfcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uID0gc3RhcnRfb2Zmc2V0IC0gMSArIHNlcF9lbmQKICAgICAgZWxzZToKICAgICAgICBuZXh0X3JlY29yZF9zdGFydF9wb3NpdGlvbiA9IHBvc2l0aW9uX2FmdGVyX3Byb2Nlc3NpbmdfaGVhZGVyX2xpbmVzCgogICAgICB3aGlsZSByYW5nZV90cmFja2VyLnRyeV9jbGFpbShuZXh0X3JlY29yZF9zdGFydF9wb3NpdGlvbik6CiAgICAgICAgcmVjb3JkLCBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPSBzZWxmLl9yZWFkX3JlY29yZChmaWxlX3RvX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2J1ZmZlcikKICAgICAgICAjIEZvciBjb21wcmVzc2VkIHRleHQgZmlsZXMgdGhhdCB1c2UgYW4gdW5zcGxpdHRhYmxlIE9mZnNldFJhbmdlVHJhY2tlcgogICAgICAgICMgd2l0aCBpbmZpbml0eSBhcyB0aGUgZW5kIHBvc2l0aW9uLCBhYm92ZSAndHJ5X2NsYWltKCknIGludm9jYXRpb24KICAgICAgICAjIHdvdWxkIHBhc3MgZm9yIGFuIGVtcHR5IHJlY29yZCBhdCB0aGUgZW5kIG9mIGZpbGUgdGhhdCBpcyBub3QKICAgICAgICAjIGZvbGxvd2VkIGJ5IGEgbmV3IGxpbmUgY2hhcmFjdGVyLiBTaW5jZSBzdWNoIGEgcmVjb3JkIGlzIGF0IHRoZSBsYXN0CiAgICAgICAgIyBwb3NpdGlvbiBvZiBhIGZpbGUsIGl0IHNob3VsZCBub3QgYmUgYSBwYXJ0IG9mIHRoZSBjb25zaWRlcmVkIHJhbmdlLgogICAgICAgICMgV2UgZG8gdGhpcyBjaGVjayB0byBpZ25vcmUgc3VjaCByZWNvcmRzLgogICAgICAgIGlmIGxlbihyZWNvcmQpID09IDAgYW5kIG51bV9ieXRlc190b19uZXh0X3JlY29yZCA8IDA6ICAjIHB5bGludDogZGlzYWJsZT1sZW4tYXMtY29uZGl0aW9uCiAgICAgICAgICBicmVhawoKICAgICAgICAjIFJlY29yZCBzZXBhcmF0b3IgbXVzdCBiZSBsYXJnZXIgdGhhbiB6ZXJvIGJ5dGVzLgogICAgICAgIGFzc2VydCBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgIT0gMAogICAgICAgIGlmIG51bV9ieXRlc190b19uZXh0X3JlY29yZCA+IDA6CiAgICAgICAgICBuZXh0X3JlY29yZF9zdGFydF9wb3NpdGlvbiArPSBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQKCiAgICAgICAgeWllbGQgc2VsZi5fY29kZXIuZGVjb2RlKHJlY29yZCkKICAgICAgICBpZiBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPCAwOgogICAgICAgICAgYnJlYWsKCiAgZGVmIF9wcm9jZXNzX2hlYWRlcihzZWxmLCBmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyKToKICAgICMgUmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHBvc2l0aW9uIGluIGZpbGUgYWZ0ZXIgcHJvY2Vzc2luZyBoZWFkZXIKICAgICMgcmVjb3JkcyBhbmQgYSBsaXN0IG9mIGRlY29kZWQgaGVhZGVyIGxpbmVzIHRoYXQgbWF0Y2gKICAgICMgJ2hlYWRlcl9tYXRjaGVyJy4KICAgIGhlYWRlcl9saW5lcyA9IFtdCiAgICBwb3NpdGlvbiA9IHNlbGYuX3NraXBfbGluZXMoCiAgICAgICAgZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlciwKICAgICAgICBzZWxmLl9za2lwX2hlYWRlcl9saW5lcykgaWYgc2VsZi5fc2tpcF9oZWFkZXJfbGluZXMgZWxzZSAwCiAgICBpZiBzZWxmLl9oZWFkZXJfbWF0Y2hlcjoKICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICByZWNvcmQsIG51bV9ieXRlc190b19uZXh0X3JlY29yZCA9IHNlbGYuX3JlYWRfcmVjb3JkKGZpbGVfdG9fcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYnVmZmVyKQogICAgICAgIGRlY29kZWRfbGluZSA9IHNlbGYuX2NvZGVyLmRlY29kZShyZWNvcmQpCiAgICAgICAgaWYgbm90IHNlbGYuX2hlYWRlcl9tYXRjaGVyKGRlY29kZWRfbGluZSk6CiAgICAgICAgICAjIFdlJ3ZlIHJlYWQgcGFzdCB0aGUgaGVhZGVyIHNlY3Rpb24gYXQgdGhpcyBwb2ludCwgc28gZ28gYmFjayBhIGxpbmUuCiAgICAgICAgICBmaWxlX3RvX3JlYWQuc2Vlayhwb3NpdGlvbikKICAgICAgICAgIHJlYWRfYnVmZmVyLnJlc2V0KCkKICAgICAgICAgIGJyZWFrCiAgICAgICAgaGVhZGVyX2xpbmVzLmFwcGVuZChkZWNvZGVkX2xpbmUpCiAgICAgICAgaWYgbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkIDwgMDoKICAgICAgICAgIGJyZWFrCiAgICAgICAgcG9zaXRpb24gKz0gbnVtX2J5dGVzX3RvX25leHRfcmVjb3JkCgogICAgICBpZiBzZWxmLl9oZWFkZXJfcHJvY2Vzc29yOgogICAgICAgIHNlbGYuX2hlYWRlcl9wcm9jZXNzb3IoaGVhZGVyX2xpbmVzKQoKICAgIHJldHVybiBwb3NpdGlvbgoKICBkZWYgX2ZpbmRfc2VwYXJhdG9yX2JvdW5kcyhzZWxmLCBmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyKToKICAgICMgRGV0ZXJtaW5lcyB0aGUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgd2l0aGluICdyZWFkX2J1ZmZlci5kYXRhJyBvZiB0aGUKICAgICMgbmV4dCBzZXBhcmF0b3Igc3RhcnRpbmcgZnJvbSBwb3NpdGlvbiAncmVhZF9idWZmZXIucG9zaXRpb24nLgogICAgIyBDdXJyZW50bHkgc3VwcG9ydHMgZm9sbG93aW5nIHNlcGFyYXRvcnMuCiAgICAjICogJ1xuJwogICAgIyAqICdcclxuJwogICAgIyBUaGlzIG1ldGhvZCBtYXkgaW5jcmVhc2UgdGhlIHNpemUgb2YgYnVmZmVyIGJ1dCBpdCB3aWxsIG5vdCBkZWNyZWFzZSB0aGUKICAgICMgc2l6ZSBvZiBpdC4KCiAgICBjdXJyZW50X3BvcyA9IHJlYWRfYnVmZmVyLnBvc2l0aW9uCgogICAgd2hpbGUgVHJ1ZToKICAgICAgaWYgY3VycmVudF9wb3MgPj0gbGVuKHJlYWRfYnVmZmVyLmRhdGEpOgogICAgICAgICMgRW5zdXJpbmcgdGhhdCB0aGVyZSBhcmUgZW5vdWdoIGJ5dGVzIHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhICdcbicKICAgICAgICAjIGF0IGN1cnJlbnRfcG9zLgogICAgICAgIGlmIG5vdCBzZWxmLl90cnlfdG9fZW5zdXJlX251bV9ieXRlc19pbl9idWZmZXIoCiAgICAgICAgICAgIGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIsIGN1cnJlbnRfcG9zICsgMSk6CiAgICAgICAgICByZXR1cm4KCiAgICAgICMgVXNpbmcgZmluZCgpIGhlcmUgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBhIGxpbmVhciBzY2FuIG9mIHRoZSBieXRlCiAgICAgICMgYXJyYXkuCiAgICAgIG5leHRfbGYgPSByZWFkX2J1ZmZlci5kYXRhLmZpbmQoYidcbicsIGN1cnJlbnRfcG9zKQogICAgICBpZiBuZXh0X2xmID49IDA6CiAgICAgICAgaWYgbmV4dF9sZiA+IDAgYW5kIHJlYWRfYnVmZmVyLmRhdGFbbmV4dF9sZiAtIDE6bmV4dF9sZl0gPT0gYidccic6CiAgICAgICAgICAjIEZvdW5kIGEgJ1xyXG4nLiBBY2NlcHRpbmcgdGhhdCBhcyB0aGUgbmV4dCBzZXBhcmF0b3IuCiAgICAgICAgICByZXR1cm4gKG5leHRfbGYgLSAxLCBuZXh0X2xmICsgMSkKICAgICAgICBlbHNlOgogICAgICAgICAgIyBGb3VuZCBhICdcbicuIEFjY2VwdGluZyB0aGF0IGFzIHRoZSBuZXh0IHNlcGFyYXRvci4KICAgICAgICAgIHJldHVybiAobmV4dF9sZiwgbmV4dF9sZiArIDEpCgogICAgICBjdXJyZW50X3BvcyA9IGxlbihyZWFkX2J1ZmZlci5kYXRhKQoKICBkZWYgX3RyeV90b19lbnN1cmVfbnVtX2J5dGVzX2luX2J1ZmZlcigKICAgICAgc2VsZiwgZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlciwgbnVtX2J5dGVzKToKICAgICMgVHJpZXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IG51bV9ieXRlcyBieXRlcyBpbiB0aGUgYnVmZmVyLgogICAgIyBSZXR1cm5zIFRydWUgaWYgdGhpcyBjYW4gYmUgZnVsZmlsbGVkLCByZXR1cm5lZCBGYWxzZSBpZiB0aGlzIGNhbm5vdCBiZQogICAgIyBmdWxmaWxsZWQgZHVlIHRvIHJlYWNoaW5nIEVPRi4KICAgIHdoaWxlIGxlbihyZWFkX2J1ZmZlci5kYXRhKSA8IG51bV9ieXRlczoKICAgICAgcmVhZF9kYXRhID0gZmlsZV90b19yZWFkLnJlYWQoc2VsZi5fYnVmZmVyX3NpemUpCiAgICAgIGlmIG5vdCByZWFkX2RhdGE6CiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICByZWFkX2J1ZmZlci5kYXRhICs9IHJlYWRfZGF0YQoKICAgIHJldHVybiBUcnVlCgogIGRlZiBfc2tpcF9saW5lcyhzZWxmLCBmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyLCBudW1fbGluZXMpOgogICAgIiIiU2tpcCBudW1fbGluZXMgZnJvbSBmaWxlX3RvX3JlYWQsIHJldHVybiBudW1fbGluZXMrMSBzdGFydCBwb3NpdGlvbi4iIiIKICAgIGlmIGZpbGVfdG9fcmVhZC50ZWxsKCkgPiAwOgogICAgICBmaWxlX3RvX3JlYWQuc2VlaygwKQogICAgcG9zaXRpb24gPSAwCiAgICBmb3IgXyBpbiByYW5nZShudW1fbGluZXMpOgogICAgICBfLCBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPSBzZWxmLl9yZWFkX3JlY29yZChmaWxlX3RvX3JlYWQsIHJlYWRfYnVmZmVyKQogICAgICBpZiBudW1fYnl0ZXNfdG9fbmV4dF9yZWNvcmQgPCAwOgogICAgICAgICMgV2UgcmVhY2hlZCBlbmQgb2YgZmlsZS4gSXQgaXMgT0sgdG8ganVzdCBicmVhayBoZXJlCiAgICAgICAgIyBiZWNhdXNlIHN1YnNlcXVlbnQgX3JlYWRfcmVjb3JkIHdpbGwgcmV0dXJuIHNhbWUgcmVzdWx0LgogICAgICAgIGJyZWFrCiAgICAgIHBvc2l0aW9uICs9IG51bV9ieXRlc190b19uZXh0X3JlY29yZAogICAgcmV0dXJuIHBvc2l0aW9uCgogIGRlZiBfcmVhZF9yZWNvcmQoc2VsZiwgZmlsZV90b19yZWFkLCByZWFkX2J1ZmZlcik6CiAgICAjIFJldHVybnMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBjdXJyZW50X3JlY29yZCBhbmQgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZQogICAgIyBuZXh0IHJlY29yZCBzdGFydGluZyBmcm9tICdyZWFkX2J1ZmZlci5wb3NpdGlvbicuIElmIEVPRiBpcwogICAgIyByZWFjaGVkLCByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0aGUgY3VycmVudCByZWNvcmQgYW5kIC0xLgoKICAgIGlmIHJlYWRfYnVmZmVyLnBvc2l0aW9uID4gc2VsZi5fYnVmZmVyX3NpemU6CiAgICAgICMgcmVhZF9idWZmZXIgaXMgdG9vIGxhcmdlLiBUcnVuY2F0aW5nIGFuZCBhZGp1c3RpbmcgaXQuCiAgICAgIHJlYWRfYnVmZmVyLmRhdGEgPSByZWFkX2J1ZmZlci5kYXRhW3JlYWRfYnVmZmVyLnBvc2l0aW9uOl0KICAgICAgcmVhZF9idWZmZXIucG9zaXRpb24gPSAwCgogICAgcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uX2luX2J1ZmZlciA9IHJlYWRfYnVmZmVyLnBvc2l0aW9uCiAgICBzZXBfYm91bmRzID0gc2VsZi5fZmluZF9zZXBhcmF0b3JfYm91bmRzKGZpbGVfdG9fcmVhZCwgcmVhZF9idWZmZXIpCiAgICByZWFkX2J1ZmZlci5wb3NpdGlvbiA9IHNlcF9ib3VuZHNbMV0gaWYgc2VwX2JvdW5kcyBlbHNlIGxlbigKICAgICAgICByZWFkX2J1ZmZlci5kYXRhKQoKICAgIGlmIG5vdCBzZXBfYm91bmRzOgogICAgICAjIFJlYWNoZWQgRU9GLiBCeXRlcyB1cCB0byB0aGUgRU9GIGlzIHRoZSBuZXh0IHJlY29yZC4gUmV0dXJuaW5nICctMScgZm9yCiAgICAgICMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBuZXh0IHJlY29yZC4KICAgICAgcmV0dXJuIChyZWFkX2J1ZmZlci5kYXRhW3JlY29yZF9zdGFydF9wb3NpdGlvbl9pbl9idWZmZXI6XSwgLTEpCgogICAgaWYgc2VsZi5fc3RyaXBfdHJhaWxpbmdfbmV3bGluZXM6CiAgICAgICMgQ3VycmVudCByZWNvcmQgc2hvdWxkIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IuCiAgICAgIHJldHVybiAoCiAgICAgICAgICByZWFkX2J1ZmZlci5kYXRhW3JlY29yZF9zdGFydF9wb3NpdGlvbl9pbl9idWZmZXI6c2VwX2JvdW5kc1swXV0sCiAgICAgICAgICBzZXBfYm91bmRzWzFdIC0gcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uX2luX2J1ZmZlcikKICAgIGVsc2U6CiAgICAgICMgQ3VycmVudCByZWNvcmQgc2hvdWxkIGNvbnRhaW4gdGhlIHNlcGFyYXRvci4KICAgICAgcmV0dXJuICgKICAgICAgICAgIHJlYWRfYnVmZmVyLmRhdGFbcmVjb3JkX3N0YXJ0X3Bvc2l0aW9uX2luX2J1ZmZlcjpzZXBfYm91bmRzWzFdXSwKICAgICAgICAgIHNlcF9ib3VuZHNbMV0gLSByZWNvcmRfc3RhcnRfcG9zaXRpb25faW5fYnVmZmVyKQoKCmNsYXNzIF9UZXh0U291cmNlV2l0aEZpbGVuYW1lKF9UZXh0U291cmNlKToKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICByZWNvcmRzID0gc3VwZXIoX1RleHRTb3VyY2VXaXRoRmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgc2VsZikucmVhZF9yZWNvcmRzKGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcikKICAgIGZvciByZWNvcmQgaW4gcmVjb3JkczoKICAgICAgeWllbGQgKGZpbGVfbmFtZSwgcmVjb3JkKQoKCmNsYXNzIF9UZXh0U2luayhmaWxlYmFzZWRzaW5rLkZpbGVCYXNlZFNpbmspOgogICIiIkEgc2luayB0byBhIEdDUyBvciBsb2NhbCB0ZXh0IGZpbGUgb3IgZmlsZXMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICAgICAgICAgICBmaWxlX25hbWVfc3VmZml4PScnLAogICAgICAgICAgICAgICBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXM9VHJ1ZSwKICAgICAgICAgICAgICAgbnVtX3NoYXJkcz0wLAogICAgICAgICAgICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPU5vbmUsCiAgICAgICAgICAgICAgIGNvZGVyPWNvZGVycy5Ub0J5dGVzQ29kZXIoKSwgICMgdHlwZTogY29kZXJzLkNvZGVyCiAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICAgICAgICAgICBoZWFkZXI9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIGEgX1RleHRTaW5rLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aF9wcmVmaXg6IFRoZSBmaWxlIHBhdGggdG8gd3JpdGUgdG8uIFRoZSBmaWxlcyB3cml0dGVuIHdpbGwgYmVnaW4KICAgICAgICB3aXRoIHRoaXMgcHJlZml4LCBmb2xsb3dlZCBieSBhIHNoYXJkIGlkZW50aWZpZXIgKHNlZSBudW1fc2hhcmRzKSwgYW5kCiAgICAgICAgZW5kIGluIGEgY29tbW9uIGV4dGVuc2lvbiwgaWYgZ2l2ZW4gYnkgZmlsZV9uYW1lX3N1ZmZpeC4gSW4gbW9zdCBjYXNlcywKICAgICAgICBvbmx5IHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIGFuZCBudW1fc2hhcmRzLCBzaGFyZF9uYW1lX3RlbXBsYXRlLCBhbmQKICAgICAgICBmaWxlX25hbWVfc3VmZml4IHVzZSBkZWZhdWx0IHZhbHVlcy4KICAgICAgZmlsZV9uYW1lX3N1ZmZpeDogU3VmZml4IGZvciB0aGUgZmlsZXMgd3JpdHRlbi4KICAgICAgYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzOiBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMgc2luayBzaG91bGQgd3JpdGUgYW4KICAgICAgICBhZGRpdGlvbmFsIG5ld2xpbmUgY2hhciBhZnRlciB3cml0aW5nIGVhY2ggZWxlbWVudC4KICAgICAgbnVtX3NoYXJkczogVGhlIG51bWJlciBvZiBmaWxlcyAoc2hhcmRzKSB1c2VkIGZvciBvdXRwdXQuIElmIG5vdCBzZXQsIHRoZQogICAgICAgIHNlcnZpY2Ugd2lsbCBkZWNpZGUgb24gdGhlIG9wdGltYWwgbnVtYmVyIG9mIHNoYXJkcy4KICAgICAgICBDb25zdHJhaW5pbmcgdGhlIG51bWJlciBvZiBzaGFyZHMgaXMgbGlrZWx5IHRvIHJlZHVjZQogICAgICAgIHRoZSBwZXJmb3JtYW5jZSBvZiBhIHBpcGVsaW5lLiAgU2V0dGluZyB0aGlzIHZhbHVlIGlzIG5vdCByZWNvbW1lbmRlZAogICAgICAgIHVubGVzcyB5b3UgcmVxdWlyZSBhIHNwZWNpZmljIG51bWJlciBvZiBvdXRwdXQgZmlsZXMuCiAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU6IEEgdGVtcGxhdGUgc3RyaW5nIGNvbnRhaW5pbmcgcGxhY2Vob2xkZXJzIGZvcgogICAgICAgIHRoZSBzaGFyZCBudW1iZXIgYW5kIHNoYXJkIGNvdW50LiBXaGVuIGNvbnN0cnVjdGluZyBhIGZpbGVuYW1lIGZvciBhCiAgICAgICAgcGFydGljdWxhciBzaGFyZCBudW1iZXIsIHRoZSB1cHBlci1jYXNlIGxldHRlcnMgJ1MnIGFuZCAnTicgYXJlCiAgICAgICAgcmVwbGFjZWQgd2l0aCB0aGUgMC1wYWRkZWQgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudCByZXNwZWN0aXZlbHkuCiAgICAgICAgVGhpcyBhcmd1bWVudCBjYW4gYmUgJycgaW4gd2hpY2ggY2FzZSBpdCBiZWhhdmVzIGFzIGlmIG51bV9zaGFyZHMgd2FzCiAgICAgICAgc2V0IHRvIDEgYW5kIG9ubHkgb25lIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoZSBkZWZhdWx0IHBhdHRlcm4gdXNlZAogICAgICAgIGlzICctU1NTU1Mtb2YtTk5OTk4nIGlmIE5vbmUgaXMgcGFzc2VkIGFzIHRoZSBzaGFyZF9uYW1lX3RlbXBsYXRlLgogICAgICBjb2RlcjogQ29kZXIgdXNlZCB0byBlbmNvZGUgZWFjaCBsaW5lLgogICAgICBjb21wcmVzc2lvbl90eXBlOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIG91dHB1dCBmaWxlcy4gVHlwaWNhbCB2YWx1ZQogICAgICAgIGlzIENvbXByZXNzaW9uVHlwZXMuQVVUTywgaW4gd2hpY2ggY2FzZSB0aGUgZmluYWwgZmlsZSBwYXRoJ3MKICAgICAgICBleHRlbnNpb24gKGFzIGRldGVybWluZWQgYnkgZmlsZV9wYXRoX3ByZWZpeCwgZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICBudW1fc2hhcmRzIGFuZCBzaGFyZF9uYW1lX3RlbXBsYXRlKSB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZQogICAgICAgIGNvbXByZXNzaW9uLgogICAgICBoZWFkZXI6IFN0cmluZyB0byB3cml0ZSBhdCBiZWdpbm5pbmcgb2YgZmlsZSBhcyBhIGhlYWRlci4gSWYgbm90IE5vbmUgYW5kCiAgICAgICAgYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzIGlzIHNldCwgJ1xuJyB3aWxsIGJlIGFkZGVkLgoKICAgIFJldHVybnM6CiAgICAgIEEgX1RleHRTaW5rIG9iamVjdCB1c2FibGUgZm9yIHdyaXRpbmcuCiAgICAiIiIKICAgIHN1cGVyKF9UZXh0U2luaywgc2VsZikuX19pbml0X18oCiAgICAgICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICBmaWxlX25hbWVfc3VmZml4PWZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgbnVtX3NoYXJkcz1udW1fc2hhcmRzLAogICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU9c2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICBjb2Rlcj1jb2RlciwKICAgICAgICBtaW1lX3R5cGU9J3RleHQvcGxhaW4nLAogICAgICAgIGNvbXByZXNzaW9uX3R5cGU9Y29tcHJlc3Npb25fdHlwZSkKICAgIHNlbGYuX2FwcGVuZF90cmFpbGluZ19uZXdsaW5lcyA9IGFwcGVuZF90cmFpbGluZ19uZXdsaW5lcwogICAgc2VsZi5faGVhZGVyID0gaGVhZGVyCgogIGRlZiBvcGVuKHNlbGYsIHRlbXBfcGF0aCk6CiAgICBmaWxlX2hhbmRsZSA9IHN1cGVyKF9UZXh0U2luaywgc2VsZikub3Blbih0ZW1wX3BhdGgpCiAgICBpZiBzZWxmLl9oZWFkZXIgaXMgbm90IE5vbmU6CiAgICAgIGZpbGVfaGFuZGxlLndyaXRlKGNvZGVycy5Ub0J5dGVzQ29kZXIoKS5lbmNvZGUoc2VsZi5faGVhZGVyKSkKICAgICAgaWYgc2VsZi5fYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzOgogICAgICAgIGZpbGVfaGFuZGxlLndyaXRlKGInXG4nKQogICAgcmV0dXJuIGZpbGVfaGFuZGxlCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICBkZF9wYXJlbnQgPSBzdXBlcihfVGV4dFNpbmssIHNlbGYpLmRpc3BsYXlfZGF0YSgpCiAgICBkZF9wYXJlbnRbJ2FwcGVuZF9uZXdsaW5lJ10gPSBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgc2VsZi5fYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzLCBsYWJlbD0nQXBwZW5kIFRyYWlsaW5nIE5ldyBMaW5lcycpCiAgICByZXR1cm4gZGRfcGFyZW50CgogIGRlZiB3cml0ZV9lbmNvZGVkX3JlY29yZChzZWxmLCBmaWxlX2hhbmRsZSwgZW5jb2RlZF92YWx1ZSk6CiAgICAiIiJXcml0ZXMgYSBzaW5nbGUgZW5jb2RlZCByZWNvcmQuIiIiCiAgICBmaWxlX2hhbmRsZS53cml0ZShlbmNvZGVkX3ZhbHVlKQogICAgaWYgc2VsZi5fYXBwZW5kX3RyYWlsaW5nX25ld2xpbmVzOgogICAgICBmaWxlX2hhbmRsZS53cml0ZShiJ1xuJykKCgpkZWYgX2NyZWF0ZV90ZXh0X3NvdXJjZSgKICAgIGZpbGVfcGF0dGVybj1Ob25lLAogICAgbWluX2J1bmRsZV9zaXplPU5vbmUsCiAgICBjb21wcmVzc2lvbl90eXBlPU5vbmUsCiAgICBzdHJpcF90cmFpbGluZ19uZXdsaW5lcz1Ob25lLAogICAgY29kZXI9Tm9uZSwKICAgIHNraXBfaGVhZGVyX2xpbmVzPU5vbmUpOgogIHJldHVybiBfVGV4dFNvdXJjZSgKICAgICAgZmlsZV9wYXR0ZXJuPWZpbGVfcGF0dGVybiwKICAgICAgbWluX2J1bmRsZV9zaXplPW1pbl9idW5kbGVfc2l6ZSwKICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICBzdHJpcF90cmFpbGluZ19uZXdsaW5lcz1zdHJpcF90cmFpbGluZ19uZXdsaW5lcywKICAgICAgY29kZXI9Y29kZXIsCiAgICAgIHZhbGlkYXRlPUZhbHNlLAogICAgICBza2lwX2hlYWRlcl9saW5lcz1za2lwX2hlYWRlcl9saW5lcykKCgpjbGFzcyBSZWFkQWxsRnJvbVRleHQoUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3IgcmVhZGluZyBhIGBgUENvbGxlY3Rpb25gYCBvZiB0ZXh0IGZpbGVzLgoKICAgUmVhZHMgYSBgYFBDb2xsZWN0aW9uYGAgb2YgdGV4dCBmaWxlcyBvciBmaWxlIHBhdHRlcm5zIGFuZCBhbmQgcHJvZHVjZXMgYQogICBgYFBDb2xsZWN0aW9uYGAgb2Ygc3RyaW5ncy4KCiAgUGFyc2VzIGEgdGV4dCBmaWxlIGFzIG5ld2xpbmUtZGVsaW1pdGVkIGVsZW1lbnRzLCBieSBkZWZhdWx0IGFzc3VtaW5nCiAgVVRGLTggZW5jb2RpbmcuIFN1cHBvcnRzIG5ld2xpbmUgZGVsaW1pdGVycyAnXFxuJyBhbmQgJ1xcclxcbicuCgogIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyByZWFkaW5nIHRleHQgZW5jb2RlZCB1c2luZyBVVEYtOCBvciBBU0NJSS4KICBUaGlzIGRvZXMgbm90IHN1cHBvcnQgb3RoZXIgZW5jb2RpbmdzIHN1Y2ggYXMgVVRGLTE2IG9yIFVURi0zMi4KICAiIiIKCiAgREVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFID0gNjQgKiAxMDI0ICogMTAyNCAgIyA2NE1CCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU9REVGQVVMVF9ERVNJUkVEX0JVTkRMRV9TSVpFLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgc3RyaXBfdHJhaWxpbmdfbmV3bGluZXM9VHJ1ZSwKICAgICAgY29kZXI9Y29kZXJzLlN0clV0ZjhDb2RlcigpLCAgIyB0eXBlOiBjb2RlcnMuQ29kZXIKICAgICAgc2tpcF9oZWFkZXJfbGluZXM9MCwKICAgICAgKiprd2FyZ3MpOgogICAgIiIiSW5pdGlhbGl6ZSB0aGUgYGBSZWFkQWxsRnJvbVRleHRgYCB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgbWluX2J1bmRsZV9zaXplOiBNaW5pbXVtIHNpemUgb2YgYnVuZGxlcyB0aGF0IHNob3VsZCBiZSBnZW5lcmF0ZWQgd2hlbgogICAgICAgIHNwbGl0dGluZyB0aGlzIHNvdXJjZSBpbnRvIGJ1bmRsZXMuIFNlZSBgYEZpbGVCYXNlZFNvdXJjZWBgIGZvciBtb3JlCiAgICAgICAgZGV0YWlscy4KICAgICAgZGVzaXJlZF9idW5kbGVfc2l6ZTogRGVzaXJlZCBzaXplIG9mIGJ1bmRsZXMgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkIHdoZW4KICAgICAgICBzcGxpdHRpbmcgdGhpcyBzb3VyY2UgaW50byBidW5kbGVzLiBTZWUgYGBGaWxlQmFzZWRTb3VyY2VgYCBmb3IgbW9yZQogICAgICAgIGRldGFpbHMuCiAgICAgIGNvbXByZXNzaW9uX3R5cGU6IFVzZWQgdG8gaGFuZGxlIGNvbXByZXNzZWQgaW5wdXQgZmlsZXMuIFR5cGljYWwgdmFsdWUKICAgICAgICBpcyBgYENvbXByZXNzaW9uVHlwZXMuQVVUT2BgLCBpbiB3aGljaCBjYXNlIHRoZSB1bmRlcmx5aW5nIGZpbGVfcGF0aCdzCiAgICAgICAgZXh0ZW5zaW9uIHdpbGwgYmUgdXNlZCB0byBkZXRlY3QgdGhlIGNvbXByZXNzaW9uLgogICAgICBzdHJpcF90cmFpbGluZ19uZXdsaW5lczogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBzb3VyY2Ugc2hvdWxkIHJlbW92ZQogICAgICAgIHRoZSBuZXdsaW5lIGNoYXIgaW4gZWFjaCBsaW5lIGl0IHJlYWRzIGJlZm9yZSBkZWNvZGluZyB0aGF0IGxpbmUuCiAgICAgIHZhbGlkYXRlOiBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlcyBleGlzdCBkdXJpbmcgdGhlIHBpcGVsaW5lCiAgICAgICAgY3JlYXRpb24gdGltZS4KICAgICAgc2tpcF9oZWFkZXJfbGluZXM6IE51bWJlciBvZiBoZWFkZXIgbGluZXMgdG8gc2tpcC4gU2FtZSBudW1iZXIgaXMgc2tpcHBlZAogICAgICAgIGZyb20gZWFjaCBzb3VyY2UgZmlsZS4gTXVzdCBiZSAwIG9yIGhpZ2hlci4gTGFyZ2UgbnVtYmVyIG9mIHNraXBwZWQKICAgICAgICBsaW5lcyBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2UuCiAgICAgIGNvZGVyOiBDb2RlciB1c2VkIHRvIGRlY29kZSBlYWNoIGxpbmUuCiAgICAiIiIKICAgIHN1cGVyKFJlYWRBbGxGcm9tVGV4dCwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICBzb3VyY2VfZnJvbV9maWxlID0gcGFydGlhbCgKICAgICAgICBfY3JlYXRlX3RleHRfc291cmNlLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZT1taW5fYnVuZGxlX3NpemUsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzPXN0cmlwX3RyYWlsaW5nX25ld2xpbmVzLAogICAgICAgIGNvZGVyPWNvZGVyLAogICAgICAgIHNraXBfaGVhZGVyX2xpbmVzPXNraXBfaGVhZGVyX2xpbmVzKQogICAgc2VsZi5fZGVzaXJlZF9idW5kbGVfc2l6ZSA9IGRlc2lyZWRfYnVuZGxlX3NpemUKICAgIHNlbGYuX21pbl9idW5kbGVfc2l6ZSA9IG1pbl9idW5kbGVfc2l6ZQogICAgc2VsZi5fY29tcHJlc3Npb25fdHlwZSA9IGNvbXByZXNzaW9uX3R5cGUKICAgIHNlbGYuX3JlYWRfYWxsX2ZpbGVzID0gUmVhZEFsbEZpbGVzKAogICAgICAgIFRydWUsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZSwKICAgICAgICBkZXNpcmVkX2J1bmRsZV9zaXplLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgICBzb3VyY2VfZnJvbV9maWxlKQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlIHwgJ1JlYWRBbGxGaWxlcycgPj4gc2VsZi5fcmVhZF9hbGxfZmlsZXMKCgpjbGFzcyBSZWFkRnJvbVRleHQoUFRyYW5zZm9ybSk6CiAgciIiIkEgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIGZvciByZWFkaW5nIHRleHQKICBmaWxlcy4KCiAgUGFyc2VzIGEgdGV4dCBmaWxlIGFzIG5ld2xpbmUtZGVsaW1pdGVkIGVsZW1lbnRzLCBieSBkZWZhdWx0IGFzc3VtaW5nCiAgYGBVVEYtOGBgIGVuY29kaW5nLiBTdXBwb3J0cyBuZXdsaW5lIGRlbGltaXRlcnMgYGBcbmBgIGFuZCBgYFxyXG5gYC4KCiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHJlYWRpbmcgdGV4dCBlbmNvZGVkIHVzaW5nIGBgVVRGLThgYCBvcgogIGBgQVNDSUlgYC4KICBUaGlzIGRvZXMgbm90IHN1cHBvcnQgb3RoZXIgZW5jb2RpbmdzIHN1Y2ggYXMgYGBVVEYtMTZgYCBvciBgYFVURi0zMmBgLgogICIiIgoKICBfc291cmNlX2NsYXNzID0gX1RleHRTb3VyY2UKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBmaWxlX3BhdHRlcm49Tm9uZSwKICAgICAgbWluX2J1bmRsZV9zaXplPTAsCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICBzdHJpcF90cmFpbGluZ19uZXdsaW5lcz1UcnVlLAogICAgICBjb2Rlcj1jb2RlcnMuU3RyVXRmOENvZGVyKCksICAjIHR5cGU6IGNvZGVycy5Db2RlcgogICAgICB2YWxpZGF0ZT1UcnVlLAogICAgICBza2lwX2hlYWRlcl9saW5lcz0wLAogICAgICAqKmt3YXJncyk6CiAgICAiIiJJbml0aWFsaXplIHRoZSA6Y2xhc3M6YFJlYWRGcm9tVGV4dGAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0dGVybiAoc3RyKTogVGhlIGZpbGUgcGF0aCB0byByZWFkIGZyb20gYXMgYSBsb2NhbCBmaWxlIHBhdGggb3IgYQogICAgICAgIEdDUyBgYGdzOi8vYGAgcGF0aC4gVGhlIHBhdGggY2FuIGNvbnRhaW4gZ2xvYiBjaGFyYWN0ZXJzCiAgICAgICAgKGBgKmBgLCBgYD9gYCwgYW5kIGBgWy4uLl1gYCBzZXRzKS4KICAgICAgbWluX2J1bmRsZV9zaXplIChpbnQpOiBNaW5pbXVtIHNpemUgb2YgYnVuZGxlcyB0aGF0IHNob3VsZCBiZSBnZW5lcmF0ZWQKICAgICAgICB3aGVuIHNwbGl0dGluZyB0aGlzIHNvdXJjZSBpbnRvIGJ1bmRsZXMuIFNlZQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZS5GaWxlQmFzZWRTb3VyY2VgIGZvciBtb3JlCiAgICAgICAgZGV0YWlscy4KICAgICAgY29tcHJlc3Npb25fdHlwZSAoc3RyKTogVXNlZCB0byBoYW5kbGUgY29tcHJlc3NlZCBpbnB1dCBmaWxlcy4KICAgICAgICBUeXBpY2FsIHZhbHVlIGlzIDphdHRyOmBDb21wcmVzc2lvblR5cGVzLkFVVE8KICAgICAgICA8YXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbS5Db21wcmVzc2lvblR5cGVzLkFVVE8+YCwgaW4gd2hpY2ggY2FzZSB0aGUKICAgICAgICB1bmRlcmx5aW5nIGZpbGVfcGF0aCdzIGV4dGVuc2lvbiB3aWxsIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBjb21wcmVzc2lvbi4KICAgICAgc3RyaXBfdHJhaWxpbmdfbmV3bGluZXMgKGJvb2wpOiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHNvdXJjZSBzaG91bGQKICAgICAgICByZW1vdmUgdGhlIG5ld2xpbmUgY2hhciBpbiBlYWNoIGxpbmUgaXQgcmVhZHMgYmVmb3JlIGRlY29kaW5nIHRoYXQgbGluZS4KICAgICAgdmFsaWRhdGUgKGJvb2wpOiBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBmaWxlcyBleGlzdCBkdXJpbmcgdGhlIHBpcGVsaW5lCiAgICAgICAgY3JlYXRpb24gdGltZS4KICAgICAgc2tpcF9oZWFkZXJfbGluZXMgKGludCk6IE51bWJlciBvZiBoZWFkZXIgbGluZXMgdG8gc2tpcC4gU2FtZSBudW1iZXIgaXMKICAgICAgICBza2lwcGVkIGZyb20gZWFjaCBzb3VyY2UgZmlsZS4gTXVzdCBiZSAwIG9yIGhpZ2hlci4gTGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgc2tpcHBlZCBsaW5lcyBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2UuCiAgICAgIGNvZGVyICh+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlcik6IENvZGVyIHVzZWQgdG8gZGVjb2RlIGVhY2ggbGluZS4KICAgICIiIgoKICAgIHN1cGVyKFJlYWRGcm9tVGV4dCwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICBzZWxmLl9zb3VyY2UgPSBzZWxmLl9zb3VyY2VfY2xhc3MoCiAgICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICAgIG1pbl9idW5kbGVfc2l6ZSwKICAgICAgICBjb21wcmVzc2lvbl90eXBlLAogICAgICAgIHN0cmlwX3RyYWlsaW5nX25ld2xpbmVzLAogICAgICAgIGNvZGVyLAogICAgICAgIHZhbGlkYXRlPXZhbGlkYXRlLAogICAgICAgIHNraXBfaGVhZGVyX2xpbmVzPXNraXBfaGVhZGVyX2xpbmVzKQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlLnBpcGVsaW5lIHwgUmVhZChzZWxmLl9zb3VyY2UpCgoKY2xhc3MgUmVhZEZyb21UZXh0V2l0aEZpbGVuYW1lKFJlYWRGcm9tVGV4dCk6CiAgciIiIkEgOmNsYXNzOmB+YXBhY2hlX2JlYW0uaW8udGV4dGlvLlJlYWRGcm9tVGV4dGAgZm9yIHJlYWRpbmcgdGV4dAogIGZpbGVzIHJldHVybmluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBhbmQgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuCgogIFRoaXMgY2xhc3MgZXh0ZW5kIFJlYWRGcm9tVGV4dCBjbGFzcyBqdXN0IHNldHRpbmcgYSBkaWZmZXJlbnQKICBfc291cmNlX2NsYXNzIGF0dHJpYnV0ZS4KICAiIiIKCiAgX3NvdXJjZV9jbGFzcyA9IF9UZXh0U291cmNlV2l0aEZpbGVuYW1lCgoKY2xhc3MgV3JpdGVUb1RleHQoUFRyYW5zZm9ybSk6CiAgIiIiQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybWAgZm9yIHdyaXRpbmcgdG8KICB0ZXh0IGZpbGVzLiIiIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0aF9wcmVmaXgsICAjIHR5cGU6IHN0cgogICAgICBmaWxlX25hbWVfc3VmZml4PScnLAogICAgICBhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXM9VHJ1ZSwKICAgICAgbnVtX3NoYXJkcz0wLAogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPU5vbmUsICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KICAgICAgY29kZXI9Y29kZXJzLlRvQnl0ZXNDb2RlcigpLCAgIyB0eXBlOiBjb2RlcnMuQ29kZXIKICAgICAgY29tcHJlc3Npb25fdHlwZT1Db21wcmVzc2lvblR5cGVzLkFVVE8sCiAgICAgIGhlYWRlcj1Ob25lKToKICAgIHIiIiJJbml0aWFsaXplIGEgOmNsYXNzOmBXcml0ZVRvVGV4dGAgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aF9wcmVmaXggKHN0cik6IFRoZSBmaWxlIHBhdGggdG8gd3JpdGUgdG8uIFRoZSBmaWxlcyB3cml0dGVuIHdpbGwKICAgICAgICBiZWdpbiB3aXRoIHRoaXMgcHJlZml4LCBmb2xsb3dlZCBieSBhIHNoYXJkIGlkZW50aWZpZXIgKHNlZQogICAgICAgICoqbnVtX3NoYXJkcyoqKSwgYW5kIGVuZCBpbiBhIGNvbW1vbiBleHRlbnNpb24sIGlmIGdpdmVuIGJ5CiAgICAgICAgKipmaWxlX25hbWVfc3VmZml4KiouIEluIG1vc3QgY2FzZXMsIG9ubHkgdGhpcyBhcmd1bWVudCBpcyBzcGVjaWZpZWQgYW5kCiAgICAgICAgKipudW1fc2hhcmRzKiosICoqc2hhcmRfbmFtZV90ZW1wbGF0ZSoqLCBhbmQgKipmaWxlX25hbWVfc3VmZml4KiogdXNlCiAgICAgICAgZGVmYXVsdCB2YWx1ZXMuCiAgICAgIGZpbGVfbmFtZV9zdWZmaXggKHN0cik6IFN1ZmZpeCBmb3IgdGhlIGZpbGVzIHdyaXR0ZW4uCiAgICAgIGFwcGVuZF90cmFpbGluZ19uZXdsaW5lcyAoYm9vbCk6IGluZGljYXRlIHdoZXRoZXIgdGhpcyBzaW5rIHNob3VsZCB3cml0ZQogICAgICAgIGFuIGFkZGl0aW9uYWwgbmV3bGluZSBjaGFyIGFmdGVyIHdyaXRpbmcgZWFjaCBlbGVtZW50LgogICAgICBudW1fc2hhcmRzIChpbnQpOiBUaGUgbnVtYmVyIG9mIGZpbGVzIChzaGFyZHMpIHVzZWQgZm9yIG91dHB1dC4KICAgICAgICBJZiBub3Qgc2V0LCB0aGUgc2VydmljZSB3aWxsIGRlY2lkZSBvbiB0aGUgb3B0aW1hbCBudW1iZXIgb2Ygc2hhcmRzLgogICAgICAgIENvbnN0cmFpbmluZyB0aGUgbnVtYmVyIG9mIHNoYXJkcyBpcyBsaWtlbHkgdG8gcmVkdWNlCiAgICAgICAgdGhlIHBlcmZvcm1hbmNlIG9mIGEgcGlwZWxpbmUuICBTZXR0aW5nIHRoaXMgdmFsdWUgaXMgbm90IHJlY29tbWVuZGVkCiAgICAgICAgdW5sZXNzIHlvdSByZXF1aXJlIGEgc3BlY2lmaWMgbnVtYmVyIG9mIG91dHB1dCBmaWxlcy4KICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSAoc3RyKTogQSB0ZW1wbGF0ZSBzdHJpbmcgY29udGFpbmluZyBwbGFjZWhvbGRlcnMgZm9yCiAgICAgICAgdGhlIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQuIEN1cnJlbnRseSBvbmx5IGBgJydgYCBhbmQKICAgICAgICBgYCctU1NTU1Mtb2YtTk5OTk4nYGAgYXJlIHBhdHRlcm5zIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2aWNlLgogICAgICAgIFdoZW4gY29uc3RydWN0aW5nIGEgZmlsZW5hbWUgZm9yIGEgcGFydGljdWxhciBzaGFyZCBudW1iZXIsIHRoZQogICAgICAgIHVwcGVyLWNhc2UgbGV0dGVycyBgYFNgYCBhbmQgYGBOYGAgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGBgMGBgLXBhZGRlZAogICAgICAgIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQgcmVzcGVjdGl2ZWx5LiAgVGhpcyBhcmd1bWVudCBjYW4gYmUgYGAnJ2BgCiAgICAgICAgaW4gd2hpY2ggY2FzZSBpdCBiZWhhdmVzIGFzIGlmIG51bV9zaGFyZHMgd2FzIHNldCB0byAxIGFuZCBvbmx5IG9uZSBmaWxlCiAgICAgICAgd2lsbCBiZSBnZW5lcmF0ZWQuIFRoZSBkZWZhdWx0IHBhdHRlcm4gdXNlZCBpcyBgYCctU1NTU1Mtb2YtTk5OTk4nYGAuCiAgICAgIGNvZGVyICh+YXBhY2hlX2JlYW0uY29kZXJzLmNvZGVycy5Db2Rlcik6IENvZGVyIHVzZWQgdG8gZW5jb2RlIGVhY2ggbGluZS4KICAgICAgY29tcHJlc3Npb25fdHlwZSAoc3RyKTogVXNlZCB0byBoYW5kbGUgY29tcHJlc3NlZCBvdXRwdXQgZmlsZXMuCiAgICAgICAgVHlwaWNhbCB2YWx1ZSBpcyA6Y2xhc3M6YENvbXByZXNzaW9uVHlwZXMuQVVUTwogICAgICAgIDxhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtLkNvbXByZXNzaW9uVHlwZXMuQVVUTz5gLCBpbiB3aGljaCBjYXNlIHRoZQogICAgICAgIGZpbmFsIGZpbGUgcGF0aCdzIGV4dGVuc2lvbiAoYXMgZGV0ZXJtaW5lZCBieSAqKmZpbGVfcGF0aF9wcmVmaXgqKiwKICAgICAgICAqKmZpbGVfbmFtZV9zdWZmaXgqKiwgKipudW1fc2hhcmRzKiogYW5kICoqc2hhcmRfbmFtZV90ZW1wbGF0ZSoqKSB3aWxsCiAgICAgICAgYmUgdXNlZCB0byBkZXRlY3QgdGhlIGNvbXByZXNzaW9uLgogICAgICBoZWFkZXIgKHN0cik6IFN0cmluZyB0byB3cml0ZSBhdCBiZWdpbm5pbmcgb2YgZmlsZSBhcyBhIGhlYWRlci4KICAgICAgICBJZiBub3QgOmRhdGE6YE5vbmVgIGFuZCAqKmFwcGVuZF90cmFpbGluZ19uZXdsaW5lcyoqIGlzIHNldCwgYGBcbmBgIHdpbGwKICAgICAgICBiZSBhZGRlZC4KICAgICIiIgoKICAgIHNlbGYuX3NpbmsgPSBfVGV4dFNpbmsoCiAgICAgICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICBmaWxlX25hbWVfc3VmZml4LAogICAgICAgIGFwcGVuZF90cmFpbGluZ19uZXdsaW5lcywKICAgICAgICBudW1fc2hhcmRzLAogICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgY29kZXIsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZSwKICAgICAgICBoZWFkZXIpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgV3JpdGUoc2VsZi5fc2luaykKlH2UKIwfX1RleHRTb3VyY2UuUmVhZEJ1ZmZlci5fX2luaXRfX5RqVjEBAEtFS0eHlIwbX1RleHRTb3VyY2UuUmVhZEJ1ZmZlci5kYXRhlGpWMQEAS01LUIeUjB9fVGV4dFNvdXJjZS5SZWFkQnVmZmVyLnBvc2l0aW9ulGpWMQEAS1ZLXYeUjBxfVGV4dFNvdXJjZS5SZWFkQnVmZmVyLnJlc2V0lGpWMQEAS19LYYeUjBZfVGV4dFNvdXJjZS5SZWFkQnVmZmVylGpdMQEAS0FLYYeUjBRfVGV4dFNvdXJjZS5fX2luaXRfX5RqVjEBAEtjS5GHlIwYX1RleHRTb3VyY2UuZGlzcGxheV9kYXRhlGpWMQEAS5NLmoeUjBhfVGV4dFNvdXJjZS5yZWFkX3JlY29yZHOUalYxAQBLnEvUh5SMG19UZXh0U291cmNlLl9wcm9jZXNzX2hlYWRlcpRqVjEBAEvWS/CHlIwiX1RleHRTb3VyY2UuX2ZpbmRfc2VwYXJhdG9yX2JvdW5kc5RqVjEBAEvyTRABh5SMLl9UZXh0U291cmNlLl90cnlfdG9fZW5zdXJlX251bV9ieXRlc19pbl9idWZmZXKUalYxAQBNEgFNHgGHlIwXX1RleHRTb3VyY2UuX3NraXBfbGluZXOUalYxAQBNIAFNLAGHlIwYX1RleHRTb3VyY2UuX3JlYWRfcmVjb3JklGpWMQEATS4BTUsBh5SMC19UZXh0U291cmNllGpdMQEASzVNSwGHlIwkX1RleHRTb3VyY2VXaXRoRmlsZW5hbWUucmVhZF9yZWNvcmRzlGpWMQEATU8BTVMBh5SMF19UZXh0U291cmNlV2l0aEZpbGVuYW1llGpdMQEATU4BTVMBh5SMEl9UZXh0U2luay5fX2luaXRfX5RqVjEBAE1ZAU2OAYeUjA5fVGV4dFNpbmsub3BlbpRqVjEBAE2QAU2WAYeUjBZfVGV4dFNpbmsuZGlzcGxheV9kYXRhlGpWMQEATZgBTZwBh5SMHl9UZXh0U2luay53cml0ZV9lbmNvZGVkX3JlY29yZJRqVjEBAE2eAU2iAYeUjAlfVGV4dFNpbmuUal0xAQBNVgFNogGHlIwTX2NyZWF0ZV90ZXh0X3NvdXJjZZRqVjEBAE2lAU2zAYeUjBhSZWFkQWxsRnJvbVRleHQuX19pbml0X1+UalYxAQBNxQFN8wGHlIwWUmVhZEFsbEZyb21UZXh0LmV4cGFuZJRqVjEBAE31AU32AYeUjA9SZWFkQWxsRnJvbVRleHSUal0xAQBNtgFN9gGHlIwVUmVhZEZyb21UZXh0Ll9faW5pdF9flGpWMQEATQcCTTECh5SME1JlYWRGcm9tVGV4dC5leHBhbmSUalYxAQBNMwJNNAKHlIwMUmVhZEZyb21UZXh0lGpdMQEATfkBTTQCh5SMGFJlYWRGcm9tVGV4dFdpdGhGaWxlbmFtZZRqXTEBAE03Ak0/AoeUjBRXcml0ZVRvVGV4dC5fX2luaXRfX5RqVjEBAE1GAk19AoeUjBJXcml0ZVRvVGV4dC5leHBhbmSUalYxAQBNfwJNgAKHlIwLV3JpdGVUb1RleHSUal0xAQBNQgJNgAKHlHV9lCiMD1JlYWRBbGxGcm9tVGV4dJRq9AMAAIwWUmVhZEFsbEZyb21UZXh0LmV4cGFuZJRq9AMAAIwMUmVhZEZyb21UZXh0lGr0AwAAjBNSZWFkRnJvbVRleHQuZXhwYW5klGr0AwAAjBhSZWFkRnJvbVRleHRXaXRoRmlsZW5hbWWUavQDAACMC1dyaXRlVG9UZXh0lGr0AwAAjBJXcml0ZVRvVGV4dC5leHBhbmSUavQDAAB1jBVhcGFjaGVfYmVhbS5pby50ZXh0aW+UdJSMGWFwYWNoZV9iZWFtLmlvLnRmcmVjb3JkaW+UKFhOLwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJURlJlY29yZCBzb3VyY2VzIGFuZCBzaW5rcy4iIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29kZWNzCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzdHJ1Y3QKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCgppbXBvcnQgY3JjbW9kCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZWJhc2Vkc2luawpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGViYXNlZHNvdXJjZSBpbXBvcnQgRmlsZUJhc2VkU291cmNlCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZWJhc2Vkc291cmNlIGltcG9ydCBSZWFkQWxsRmlsZXMKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZWFkCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBXcml0ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBUcmFuc2Zvcm0KCl9fYWxsX18gPSBbJ1JlYWRGcm9tVEZSZWNvcmQnLCAnV3JpdGVUb1RGUmVjb3JkJ10KCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpkZWYgX2RlZmF1bHRfY3JjMzJjX2ZuKHZhbHVlKToKICAiIiJDYWxjdWxhdGVzIGNyYzMyYyBvZiBhIGJ5dGVzIG9iamVjdCB1c2luZyBlaXRoZXIgc25hcHB5IG9yIGNyY21vZC4iIiIKCiAgaWYgbm90IF9kZWZhdWx0X2NyYzMyY19mbi5mbjoKICAgIHRyeToKICAgICAgaW1wb3J0IHNuYXBweSAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgICAgICMgU3VwcG9ydCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBweXRob24tc25hcHB5OgogICAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRyaXgvcHl0aG9uLXNuYXBweS9wdWxsLzUzCiAgICAgIGlmIGdldGF0dHIoc25hcHB5LCAnX2NyYzMyYycsIE5vbmUpOgogICAgICAgIF9kZWZhdWx0X2NyYzMyY19mbi5mbiA9IHNuYXBweS5fY3JjMzJjICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgIGVsaWYgZ2V0YXR0cihzbmFwcHksICdfc25hcHB5JywgTm9uZSk6CiAgICAgICAgX2RlZmF1bHRfY3JjMzJjX2ZuLmZuID0gc25hcHB5Ll9zbmFwcHkuX2NyYzMyYyAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICBwYXNzCgogICAgaWYgbm90IF9kZWZhdWx0X2NyYzMyY19mbi5mbjoKICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgJ0NvdWxkblwndCBmaW5kIHB5dGhvbi1zbmFwcHkgc28gdGhlIGltcGxlbWVudGF0aW9uIG9mICcKICAgICAgICAgICdfVEZSZWNvcmRVdGlsLl9tYXNrZWRfY3JjMzJjIGlzIG5vdCBhcyBmYXN0IGFzIGl0IGNvdWxkICcKICAgICAgICAgICdiZS4nKQogICAgICBfZGVmYXVsdF9jcmMzMmNfZm4uZm4gPSBjcmNtb2QucHJlZGVmaW5lZC5ta1ByZWRlZmluZWRDcmNGdW4oJ2NyYy0zMmMnKQogIHJldHVybiBfZGVmYXVsdF9jcmMzMmNfZm4uZm4odmFsdWUpCgoKX2RlZmF1bHRfY3JjMzJjX2ZuLmZuID0gTm9uZSAgIyB0eXBlOiBpZ25vcmUKCgpjbGFzcyBfVEZSZWNvcmRVdGlsKG9iamVjdCk6CiAgIiIiUHJvdmlkZXMgYmFzaWMgVEZSZWNvcmQgZW5jb2RpbmcvZGVjb2Rpbmcgd2l0aCBjb25zaXN0ZW5jeSBjaGVja3MuCgogIEZvciBkZXRhaWxlZCBURlJlY29yZCBmb3JtYXQgZGVzY3JpcHRpb24gc2VlOgogICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvdmVyc2lvbnMvcjEuMTEvYXBpX2d1aWRlcy9weXRob24vcHl0aG9uX2lvI1RGUmVjb3Jkc19Gb3JtYXRfRGV0YWlscwoKICBOb3RlIHRoYXQgbWFza3MgYW5kIGxlbmd0aCBhcmUgcmVwcmVzZW50ZWQgaW4gTGl0dGxlRW5kaWFuIG9yZGVyLgogICIiIgogIEBjbGFzc21ldGhvZAogIGRlZiBfbWFza2VkX2NyYzMyYyhjbHMsIHZhbHVlLCBjcmMzMmNfZm49X2RlZmF1bHRfY3JjMzJjX2ZuKToKICAgICIiIkNvbXB1dGUgYSBtYXNrZWQgY3JjMzJjIGNoZWNrc3VtIGZvciBhIHZhbHVlLgoKICAgIEFyZ3M6CiAgICAgIHZhbHVlOiBBIGJ5dGVzIG9iamVjdCBmb3Igd2hpY2ggd2UgY29tcHV0ZSB0aGUgY3JjLgogICAgICBjcmMzMmNfZm46IEEgZnVuY3Rpb24gdGhhdCBjYW4gY29tcHV0ZSBhIGNyYzMyYy4KICAgICAgICBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgaG9vayB0aGF0IGFsc28gaGVscHMgd2l0aCB0ZXN0aW5nLiBDYWxsZXJzIGFyZQogICAgICAgIG5vdCBleHBlY3RlZCB0byBtYWtlIHVzZSBvZiBpdCBkaXJlY3RseS4KICAgIFJldHVybnM6CiAgICAgIE1hc2tlZCBjcmMzMmMgY2hlY2tzdW0uCiAgICAiIiIKCiAgICBjcmMgPSBjcmMzMmNfZm4odmFsdWUpCiAgICByZXR1cm4gKCgoY3JjID4+IDE1KSB8IChjcmMgPDwgMTcpKSArIDB4YTI4MmVhZDgpICYgMHhmZmZmZmZmZgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGVuY29kZWRfbnVtX2J5dGVzKHJlY29yZCk6CiAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb25zdW1lZCBieSBhIHJlY29yZCBpbiBpdHMgZW5jb2RlZCBmb3JtLiIiIgogICAgIyAxNiA9IDggKExlbmd0aCkgKyA0IChjcmMgb2YgbGVuZ3RoKSArIDQgKGNyYyBvZiBkYXRhKQogICAgcmV0dXJuIGxlbihyZWNvcmQpICsgMTYKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHdyaXRlX3JlY29yZChjbHMsIGZpbGVfaGFuZGxlLCB2YWx1ZSk6CiAgICAiIiJFbmNvZGUgYSB2YWx1ZSBhcyBhIFRGUmVjb3JkLgoKICAgIEFyZ3M6CiAgICAgIGZpbGVfaGFuZGxlOiBUaGUgZmlsZSB0byB3cml0ZSB0by4KICAgICAgdmFsdWU6IEEgYnl0ZXMgb2JqZWN0IHJlcHJlc2VudGluZyBjb250ZW50IG9mIHRoZSByZWNvcmQuCiAgICAiIiIKICAgIGVuY29kZWRfbGVuZ3RoID0gc3RydWN0LnBhY2soYic8UScsIGxlbih2YWx1ZSkpCiAgICBmaWxlX2hhbmRsZS53cml0ZSgKICAgICAgICBiJycuam9pbihbCiAgICAgICAgICAgIGVuY29kZWRfbGVuZ3RoLAogICAgICAgICAgICBzdHJ1Y3QucGFjayhiJzxJJywgY2xzLl9tYXNrZWRfY3JjMzJjKGVuY29kZWRfbGVuZ3RoKSksCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBzdHJ1Y3QucGFjayhiJzxJJywgY2xzLl9tYXNrZWRfY3JjMzJjKHZhbHVlKSkKICAgICAgICBdKSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHJlYWRfcmVjb3JkKGNscywgZmlsZV9oYW5kbGUpOgogICAgIiIiUmVhZCBhIHJlY29yZCBmcm9tIGEgVEZSZWNvcmRzIGZpbGUuCgogICAgQXJnczoKICAgICAgZmlsZV9oYW5kbGU6IFRoZSBmaWxlIHRvIHJlYWQgZnJvbS4KICAgIFJldHVybnM6CiAgICAgIE5vbmUgaWYgRU9GIGlzIHJlYWNoZWQ7IHRoZSBwYXlsb2Qgb2YgdGhlIHJlY29yZCBvdGhlcndpc2UuCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IElmIGZpbGUgYXBwZWFycyB0byBub3QgYmUgYSB2YWxpZCBURlJlY29yZHMgZmlsZS4KICAgICIiIgogICAgYnVmX2xlbmd0aF9leHBlY3RlZCA9IDEyCiAgICBidWYgPSBmaWxlX2hhbmRsZS5yZWFkKGJ1Zl9sZW5ndGhfZXhwZWN0ZWQpCiAgICBpZiBub3QgYnVmOgogICAgICByZXR1cm4gTm9uZSAgIyBFT0YgUmVhY2hlZC4KCiAgICAjIFZhbGlkYXRlIGFsbCBsZW5ndGggcmVsYXRlZCBwYXlsb2Fkcy4KICAgIGlmIGxlbihidWYpICE9IGJ1Zl9sZW5ndGhfZXhwZWN0ZWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnTm90IGEgdmFsaWQgVEZSZWNvcmQuIEZld2VyIHRoYW4gJWQgYnl0ZXM6ICVzJyAlCiAgICAgICAgICAoYnVmX2xlbmd0aF9leHBlY3RlZCwgY29kZWNzLmVuY29kZShidWYsICdoZXgnKSkpCiAgICBsZW5ndGgsIGxlbmd0aF9tYXNrX2V4cGVjdGVkID0gc3RydWN0LnVucGFjaygnPFFJJywgYnVmKQogICAgbGVuZ3RoX21hc2tfYWN0dWFsID0gY2xzLl9tYXNrZWRfY3JjMzJjKGJ1Zls6OF0pCiAgICBpZiBsZW5ndGhfbWFza19hY3R1YWwgIT0gbGVuZ3RoX21hc2tfZXhwZWN0ZWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnTm90IGEgdmFsaWQgVEZSZWNvcmQuIE1pc21hdGNoIG9mIGxlbmd0aCBtYXNrOiAlcycgJQogICAgICAgICAgY29kZWNzLmVuY29kZShidWYsICdoZXgnKSkKCiAgICAjIFZhbGlkYXRlIGFsbCBkYXRhIHJlbGF0ZWQgcGF5bG9hZHMuCiAgICBidWZfbGVuZ3RoX2V4cGVjdGVkID0gbGVuZ3RoICsgNAogICAgYnVmID0gZmlsZV9oYW5kbGUucmVhZChidWZfbGVuZ3RoX2V4cGVjdGVkKQogICAgaWYgbGVuKGJ1ZikgIT0gYnVmX2xlbmd0aF9leHBlY3RlZDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdOb3QgYSB2YWxpZCBURlJlY29yZC4gRmV3ZXIgdGhhbiAlZCBieXRlczogJXMnICUKICAgICAgICAgIChidWZfbGVuZ3RoX2V4cGVjdGVkLCBjb2RlY3MuZW5jb2RlKGJ1ZiwgJ2hleCcpKSkKICAgIGRhdGEsIGRhdGFfbWFza19leHBlY3RlZCA9IHN0cnVjdC51bnBhY2soJzwlZHNJJyAlIGxlbmd0aCwgYnVmKQogICAgZGF0YV9tYXNrX2FjdHVhbCA9IGNscy5fbWFza2VkX2NyYzMyYyhkYXRhKQogICAgaWYgZGF0YV9tYXNrX2FjdHVhbCAhPSBkYXRhX21hc2tfZXhwZWN0ZWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnTm90IGEgdmFsaWQgVEZSZWNvcmQuIE1pc21hdGNoIG9mIGRhdGEgbWFzazogJXMnICUKICAgICAgICAgIGNvZGVjcy5lbmNvZGUoYnVmLCAnaGV4JykpCgogICAgIyBBbGwgdmFsaWRhdGlvbiBjaGVja3MgcGFzc2VkLgogICAgcmV0dXJuIGRhdGEKCgpjbGFzcyBfVEZSZWNvcmRTb3VyY2UoRmlsZUJhc2VkU291cmNlKToKICAiIiJBIEZpbGUgc291cmNlIGZvciByZWFkaW5nIGZpbGVzIG9mIFRGUmVjb3Jkcy4KCiAgRm9yIGRldGFpbGVkIFRGUmVjb3JkcyBmb3JtYXQgZGVzY3JpcHRpb24gc2VlOgogICAgaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvdmVyc2lvbnMvcjEuMTEvYXBpX2d1aWRlcy9weXRob24vcHl0aG9uX2lvI1RGUmVjb3Jkc19Gb3JtYXRfRGV0YWlscwogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3BhdHRlcm4sIGNvZGVyLCBjb21wcmVzc2lvbl90eXBlLCB2YWxpZGF0ZSk6CiAgICAiIiJJbml0aWFsaXplIGEgVEZSZWNvcmRTb3VyY2UuICBTZWUgUmVhZEZyb21URlJlY29yZCBmb3IgZGV0YWlscy4iIiIKICAgIHN1cGVyKF9URlJlY29yZFNvdXJjZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgZmlsZV9wYXR0ZXJuPWZpbGVfcGF0dGVybiwKICAgICAgICBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgc3BsaXR0YWJsZT1GYWxzZSwKICAgICAgICB2YWxpZGF0ZT12YWxpZGF0ZSkKICAgIHNlbGYuX2NvZGVyID0gY29kZXIKCiAgZGVmIHJlYWRfcmVjb3JkcyhzZWxmLCBmaWxlX25hbWUsIG9mZnNldF9yYW5nZV90cmFja2VyKToKICAgIGlmIG9mZnNldF9yYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnU3RhcnQgcG9zaXRpb24gbm90IDA6JXMnICUgb2Zmc2V0X3JhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKSkKCiAgICBjdXJyZW50X29mZnNldCA9IG9mZnNldF9yYW5nZV90cmFja2VyLnN0YXJ0X3Bvc2l0aW9uKCkKICAgIHdpdGggc2VsZi5vcGVuX2ZpbGUoZmlsZV9uYW1lKSBhcyBmaWxlX2hhbmRsZToKICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICBpZiBub3Qgb2Zmc2V0X3JhbmdlX3RyYWNrZXIudHJ5X2NsYWltKGN1cnJlbnRfb2Zmc2V0KToKICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5hYmxlIHRvIGNsYWltIHBvc2l0aW9uOiAlcycgJSBjdXJyZW50X29mZnNldCkKICAgICAgICByZWNvcmQgPSBfVEZSZWNvcmRVdGlsLnJlYWRfcmVjb3JkKGZpbGVfaGFuZGxlKQogICAgICAgIGlmIHJlY29yZCBpcyBOb25lOgogICAgICAgICAgcmV0dXJuICAjIFJlYWNoZWQgRU9GCiAgICAgICAgZWxzZToKICAgICAgICAgIGN1cnJlbnRfb2Zmc2V0ICs9IF9URlJlY29yZFV0aWwuZW5jb2RlZF9udW1fYnl0ZXMocmVjb3JkKQogICAgICAgICAgeWllbGQgc2VsZi5fY29kZXIuZGVjb2RlKHJlY29yZCkKCgpkZWYgX2NyZWF0ZV90ZnJlY29yZGlvX3NvdXJjZSgKICAgIGZpbGVfcGF0dGVybj1Ob25lLCBjb2Rlcj1Ob25lLCBjb21wcmVzc2lvbl90eXBlPU5vbmUpOgogICMgV2UgaW50ZW50aW9uYWxseSBkaXNhYmxlIHZhbGlkYXRpb24gZm9yIFJlYWRBbGwgcGF0dGVybiBzbyB0aGF0IHJlYWRpbmcgZG9lcwogICMgbm90IGZhaWwgZm9yIGdsb2JzIChlbGVtZW50cykgdGhhdCBhcmUgZW1wdHkuCiAgcmV0dXJuIF9URlJlY29yZFNvdXJjZShmaWxlX3BhdHRlcm4sIGNvZGVyLCBjb21wcmVzc2lvbl90eXBlLCB2YWxpZGF0ZT1GYWxzZSkKCgpjbGFzcyBSZWFkQWxsRnJvbVRGUmVjb3JkKFBUcmFuc2Zvcm0pOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgZm9yIHJlYWRpbmcgYSBgYFBDb2xsZWN0aW9uYGAgb2YgVEZSZWNvcmQgZmlsZXMuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLCBjb2Rlcj1jb2RlcnMuQnl0ZXNDb2RlcigpLCBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTyk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBgYFJlYWRBbGxGcm9tVEZSZWNvcmRgYCB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgY29kZXI6IENvZGVyIHVzZWQgdG8gZGVjb2RlIGVhY2ggcmVjb3JkLgogICAgICBjb21wcmVzc2lvbl90eXBlOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIGlucHV0IGZpbGVzLiBEZWZhdWx0IHZhbHVlCiAgICAgICAgICBpcyBDb21wcmVzc2lvblR5cGVzLkFVVE8sIGluIHdoaWNoIGNhc2UgdGhlIGZpbGVfcGF0aCdzIGV4dGVuc2lvbiB3aWxsCiAgICAgICAgICBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAiIiIKICAgIHN1cGVyKFJlYWRBbGxGcm9tVEZSZWNvcmQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNvdXJjZV9mcm9tX2ZpbGUgPSBwYXJ0aWFsKAogICAgICAgIF9jcmVhdGVfdGZyZWNvcmRpb19zb3VyY2UsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgIGNvZGVyPWNvZGVyKQogICAgIyBEZXNpcmVkIGFuZCBtaW4gYnVuZGxlIHNpemVzIGRvIG5vdCBtYXR0ZXIgc2luY2UgVEZSZWNvcmQgZmlsZXMgYXJlCiAgICAjIHVuc3BsaXR0YWJsZS4KICAgIHNlbGYuX3JlYWRfYWxsX2ZpbGVzID0gUmVhZEFsbEZpbGVzKAogICAgICAgIHNwbGl0dGFibGU9RmFsc2UsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlLAogICAgICAgIGRlc2lyZWRfYnVuZGxlX3NpemU9MCwKICAgICAgICBtaW5fYnVuZGxlX3NpemU9MCwKICAgICAgICBzb3VyY2VfZnJvbV9maWxlPXNvdXJjZV9mcm9tX2ZpbGUpCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJldHVybiBwdmFsdWUgfCAnUmVhZEFsbEZpbGVzJyA+PiBzZWxmLl9yZWFkX2FsbF9maWxlcwoKCmNsYXNzIFJlYWRGcm9tVEZSZWNvcmQoUFRyYW5zZm9ybSk6CiAgIiIiVHJhbnNmb3JtIGZvciByZWFkaW5nIFRGUmVjb3JkIHNvdXJjZXMuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBmaWxlX3BhdHRlcm4sCiAgICAgIGNvZGVyPWNvZGVycy5CeXRlc0NvZGVyKCksCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPLAogICAgICB2YWxpZGF0ZT1UcnVlKToKICAgICIiIkluaXRpYWxpemUgYSBSZWFkRnJvbVRGUmVjb3JkIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdHRlcm46IEEgZmlsZSBnbG9iIHBhdHRlcm4gdG8gcmVhZCBURlJlY29yZHMgZnJvbS4KICAgICAgY29kZXI6IENvZGVyIHVzZWQgdG8gZGVjb2RlIGVhY2ggcmVjb3JkLgogICAgICBjb21wcmVzc2lvbl90eXBlOiBVc2VkIHRvIGhhbmRsZSBjb21wcmVzc2VkIGlucHV0IGZpbGVzLiBEZWZhdWx0IHZhbHVlCiAgICAgICAgICBpcyBDb21wcmVzc2lvblR5cGVzLkFVVE8sIGluIHdoaWNoIGNhc2UgdGhlIGZpbGVfcGF0aCdzIGV4dGVuc2lvbiB3aWxsCiAgICAgICAgICBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAgIHZhbGlkYXRlOiBCb29sZWFuIGZsYWcgdG8gdmVyaWZ5IHRoYXQgdGhlIGZpbGVzIGV4aXN0IGR1cmluZyB0aGUgcGlwZWxpbmUKICAgICAgICAgIGNyZWF0aW9uIHRpbWUuCgogICAgUmV0dXJuczoKICAgICAgQSBSZWFkRnJvbVRGUmVjb3JkIHRyYW5zZm9ybSBvYmplY3QuCiAgICAiIiIKICAgIHN1cGVyKFJlYWRGcm9tVEZSZWNvcmQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3NvdXJjZSA9IF9URlJlY29yZFNvdXJjZSgKICAgICAgICBmaWxlX3BhdHRlcm4sIGNvZGVyLCBjb21wcmVzc2lvbl90eXBlLCB2YWxpZGF0ZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZSB8IFJlYWQoc2VsZi5fc291cmNlKQoKCmNsYXNzIF9URlJlY29yZFNpbmsoZmlsZWJhc2Vkc2luay5GaWxlQmFzZWRTaW5rKToKICAiIiJTaW5rIGZvciB3cml0aW5nIFRGUmVjb3JkcyBmaWxlcy4KCiAgRm9yIGRldGFpbGVkIFRGUmVjb3JkIGZvcm1hdCBkZXNjcmlwdGlvbiBzZWU6CiAgICBodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy92ZXJzaW9ucy9yMS4xMS9hcGlfZ3VpZGVzL3B5dGhvbi9weXRob25faW8jVEZSZWNvcmRzX0Zvcm1hdF9EZXRhaWxzCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBmaWxlX3BhdGhfcHJlZml4LAogICAgICBjb2RlciwKICAgICAgZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgbnVtX3NoYXJkcywKICAgICAgc2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgY29tcHJlc3Npb25fdHlwZSk6CiAgICAiIiJJbml0aWFsaXplIGEgVEZSZWNvcmRTaW5rLiBTZWUgV3JpdGVUb1RGUmVjb3JkIGZvciBkZXRhaWxzLiIiIgoKICAgIHN1cGVyKF9URlJlY29yZFNpbmssIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGZpbGVfcGF0aF9wcmVmaXg9ZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgICBjb2Rlcj1jb2RlciwKICAgICAgICBmaWxlX25hbWVfc3VmZml4PWZpbGVfbmFtZV9zdWZmaXgsCiAgICAgICAgbnVtX3NoYXJkcz1udW1fc2hhcmRzLAogICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGU9c2hhcmRfbmFtZV90ZW1wbGF0ZSwKICAgICAgICBtaW1lX3R5cGU9J2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZT1jb21wcmVzc2lvbl90eXBlKQoKICBkZWYgd3JpdGVfZW5jb2RlZF9yZWNvcmQoc2VsZiwgZmlsZV9oYW5kbGUsIHZhbHVlKToKICAgIF9URlJlY29yZFV0aWwud3JpdGVfcmVjb3JkKGZpbGVfaGFuZGxlLCB2YWx1ZSkKCgpjbGFzcyBXcml0ZVRvVEZSZWNvcmQoUFRyYW5zZm9ybSk6CiAgIiIiVHJhbnNmb3JtIGZvciB3cml0aW5nIHRvIFRGUmVjb3JkIHNpbmtzLiIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZmlsZV9wYXRoX3ByZWZpeCwKICAgICAgY29kZXI9Y29kZXJzLkJ5dGVzQ29kZXIoKSwKICAgICAgZmlsZV9uYW1lX3N1ZmZpeD0nJywKICAgICAgbnVtX3NoYXJkcz0wLAogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlPU5vbmUsCiAgICAgIGNvbXByZXNzaW9uX3R5cGU9Q29tcHJlc3Npb25UeXBlcy5BVVRPKToKICAgICIiIkluaXRpYWxpemUgV3JpdGVUb1RGUmVjb3JkIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdGhfcHJlZml4OiBUaGUgZmlsZSBwYXRoIHRvIHdyaXRlIHRvLiBUaGUgZmlsZXMgd3JpdHRlbiB3aWxsIGJlZ2luCiAgICAgICAgd2l0aCB0aGlzIHByZWZpeCwgZm9sbG93ZWQgYnkgYSBzaGFyZCBpZGVudGlmaWVyIChzZWUgbnVtX3NoYXJkcyksIGFuZAogICAgICAgIGVuZCBpbiBhIGNvbW1vbiBleHRlbnNpb24sIGlmIGdpdmVuIGJ5IGZpbGVfbmFtZV9zdWZmaXguCiAgICAgIGNvZGVyOiBDb2RlciB1c2VkIHRvIGVuY29kZSBlYWNoIHJlY29yZC4KICAgICAgZmlsZV9uYW1lX3N1ZmZpeDogU3VmZml4IGZvciB0aGUgZmlsZXMgd3JpdHRlbi4KICAgICAgbnVtX3NoYXJkczogVGhlIG51bWJlciBvZiBmaWxlcyAoc2hhcmRzKSB1c2VkIGZvciBvdXRwdXQuIElmIG5vdCBzZXQsIHRoZQogICAgICAgIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgogICAgICBzaGFyZF9uYW1lX3RlbXBsYXRlOiBBIHRlbXBsYXRlIHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyBmb3IKICAgICAgICB0aGUgc2hhcmQgbnVtYmVyIGFuZCBzaGFyZCBjb3VudC4gV2hlbiBjb25zdHJ1Y3RpbmcgYSBmaWxlbmFtZSBmb3IgYQogICAgICAgIHBhcnRpY3VsYXIgc2hhcmQgbnVtYmVyLCB0aGUgdXBwZXItY2FzZSBsZXR0ZXJzICdTJyBhbmQgJ04nIGFyZQogICAgICAgIHJlcGxhY2VkIHdpdGggdGhlIDAtcGFkZGVkIHNoYXJkIG51bWJlciBhbmQgc2hhcmQgY291bnQgcmVzcGVjdGl2ZWx5LgogICAgICAgIFRoaXMgYXJndW1lbnQgY2FuIGJlICcnIGluIHdoaWNoIGNhc2UgaXQgYmVoYXZlcyBhcyBpZiBudW1fc2hhcmRzIHdhcwogICAgICAgIHNldCB0byAxIGFuZCBvbmx5IG9uZSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkLiBUaGUgZGVmYXVsdCBwYXR0ZXJuIHVzZWQKICAgICAgICBpcyAnLVNTU1NTLW9mLU5OTk5OJyBpZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgc2hhcmRfbmFtZV90ZW1wbGF0ZS4KICAgICAgY29tcHJlc3Npb25fdHlwZTogVXNlZCB0byBoYW5kbGUgY29tcHJlc3NlZCBvdXRwdXQgZmlsZXMuIFR5cGljYWwgdmFsdWUKICAgICAgICAgIGlzIENvbXByZXNzaW9uVHlwZXMuQVVUTywgaW4gd2hpY2ggY2FzZSB0aGUgZmlsZV9wYXRoJ3MgZXh0ZW5zaW9uIHdpbGwKICAgICAgICAgIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBjb21wcmVzc2lvbi4KCiAgICBSZXR1cm5zOgogICAgICBBIFdyaXRlVG9URlJlY29yZCB0cmFuc2Zvcm0gb2JqZWN0LgogICAgIiIiCiAgICBzdXBlcihXcml0ZVRvVEZSZWNvcmQsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3NpbmsgPSBfVEZSZWNvcmRTaW5rKAogICAgICAgIGZpbGVfcGF0aF9wcmVmaXgsCiAgICAgICAgY29kZXIsCiAgICAgICAgZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICBudW1fc2hhcmRzLAogICAgICAgIHNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgY29tcHJlc3Npb25fdHlwZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcGNvbGwgfCBXcml0ZShzZWxmLl9zaW5rKQqUlXMAAQAAAAAAfZQojBJfZGVmYXVsdF9jcmMzMmNfZm6UalYxAQBLLktDh5SMHF9URlJlY29yZFV0aWwuX21hc2tlZF9jcmMzMmOUalYxAQBLUUtfh5SMH19URlJlY29yZFV0aWwuZW5jb2RlZF9udW1fYnl0ZXOUalYxAQBLYUtlh5SMGl9URlJlY29yZFV0aWwud3JpdGVfcmVjb3JklGpWMQEAS2dLdoeUjBlfVEZSZWNvcmRVdGlsLnJlYWRfcmVjb3JklGpWMQEAS3hLo4eUjA1fVEZSZWNvcmRVdGlslGpdMQEAS0lLo4eUjBhfVEZSZWNvcmRTb3VyY2UuX19pbml0X1+UalYxAQBLrEuzh5SMHF9URlJlY29yZFNvdXJjZS5yZWFkX3JlY29yZHOUalYxAQBLtUvEh5SMD19URlJlY29yZFNvdXJjZZRqXTEBAEumS8SHlIwZX2NyZWF0ZV90ZnJlY29yZGlvX3NvdXJjZZRqVjEBAEvHS8uHlIwcUmVhZEFsbEZyb21URlJlY29yZC5fX2luaXRfX5RqVjEBAEvQS+aHlIwaUmVhZEFsbEZyb21URlJlY29yZC5leHBhbmSUalYxAQBL6Evph5SME1JlYWRBbGxGcm9tVEZSZWNvcmSUal0xAQBLzkvph5SMGVJlYWRGcm9tVEZSZWNvcmQuX19pbml0X1+UalYxAQBL7k0EAYeUjBdSZWFkRnJvbVRGUmVjb3JkLmV4cGFuZJRqVjEBAE0GAU0HAYeUjBBSZWFkRnJvbVRGUmVjb3JklGpdMQEAS+xNBwGHlIwWX1RGUmVjb3JkU2luay5fX2luaXRfX5RqVjEBAE0QAU0hAYeUjCJfVEZSZWNvcmRTaW5rLndyaXRlX2VuY29kZWRfcmVjb3JklGpWMQEATSMBTSQBh5SMDV9URlJlY29yZFNpbmuUal0xAQBNCgFNJAGHlIwYV3JpdGVUb1RGUmVjb3JkLl9faW5pdF9flGpWMQEATSkBTVABh5SMFldyaXRlVG9URlJlY29yZC5leHBhbmSUalYxAQBNUgFNUwGHlIwPV3JpdGVUb1RGUmVjb3JklGpdMQEATScBTVMBh5R1fZQojBBSZWFkRnJvbVRGUmVjb3JklGoGBAAAjBdSZWFkRnJvbVRGUmVjb3JkLmV4cGFuZJRqBgQAAIwPV3JpdGVUb1RGUmVjb3JklGoGBAAAjBZXcml0ZVRvVEZSZWNvcmQuZXhwYW5klGoGBAAAdYwZYXBhY2hlX2JlYW0uaW8udGZyZWNvcmRpb5R0lIwUYXBhY2hlX2JlYW0uaW8udXRpbHOUKFhvCQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlscyBmb3IgdGhlIGlvIGxpYnJhcnkuCiogQ291bnRpbmdTb3VyY2U6IFN1YmNsYXNzIG9mIGlvYmFzZS5Cb3VuZGVkU291cmNlLiBVc2VkCm9uIHRyYW5zZm9ybXMucHRyYW5zZm9ybV90ZXN0LnRlc3RfcmVhZF9tZXRyaWNzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQoKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCmZyb20gYXBhY2hlX2JlYW0uaW8ucmFuZ2VfdHJhY2tlcnMgaW1wb3J0IE9mZnNldFJhbmdlVHJhY2tlcgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKCgpjbGFzcyBDb3VudGluZ1NvdXJjZShpb2Jhc2UuQm91bmRlZFNvdXJjZSk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvdW50KToKICAgIHNlbGYucmVjb3Jkc19yZWFkID0gTWV0cmljcy5jb3VudGVyKHNlbGYuX19jbGFzc19fLCAncmVjb3Jkc1JlYWQnKQogICAgc2VsZi5fY291bnQgPSBjb3VudAoKICBkZWYgZXN0aW1hdGVfc2l6ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9jb3VudAoKICBkZWYgZ2V0X3JhbmdlX3RyYWNrZXIoc2VsZiwgc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pOgogICAgaWYgc3RhcnRfcG9zaXRpb24gaXMgTm9uZToKICAgICAgc3RhcnRfcG9zaXRpb24gPSAwCiAgICBpZiBzdG9wX3Bvc2l0aW9uIGlzIE5vbmU6CiAgICAgIHN0b3BfcG9zaXRpb24gPSBzZWxmLl9jb3VudAoKICAgIHJldHVybiBPZmZzZXRSYW5nZVRyYWNrZXIoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24pCgogIGRlZiByZWFkKHNlbGYsIHJhbmdlX3RyYWNrZXIpOgogICAgZm9yIGkgaW4gcmFuZ2UocmFuZ2VfdHJhY2tlci5zdGFydF9wb3NpdGlvbigpLAogICAgICAgICAgICAgICAgICAgcmFuZ2VfdHJhY2tlci5zdG9wX3Bvc2l0aW9uKCkpOgogICAgICBpZiBub3QgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0oaSk6CiAgICAgICAgcmV0dXJuCiAgICAgIHNlbGYucmVjb3Jkc19yZWFkLmluYygpCiAgICAgIHlpZWxkIGkKCiAgZGVmIHNwbGl0KHNlbGYsIGRlc2lyZWRfYnVuZGxlX3NpemUsIHN0YXJ0X3Bvc2l0aW9uPU5vbmUsIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgICBpZiBzdGFydF9wb3NpdGlvbiBpcyBOb25lOgogICAgICBzdGFydF9wb3NpdGlvbiA9IDAKICAgIGlmIHN0b3BfcG9zaXRpb24gaXMgTm9uZToKICAgICAgc3RvcF9wb3NpdGlvbiA9IHNlbGYuX2NvdW50CgogICAgYnVuZGxlX3N0YXJ0ID0gc3RhcnRfcG9zaXRpb24KICAgIHdoaWxlIGJ1bmRsZV9zdGFydCA8IHN0b3BfcG9zaXRpb246CiAgICAgIGJ1bmRsZV9zdG9wID0gbWluKHN0b3BfcG9zaXRpb24sIGJ1bmRsZV9zdGFydCArIGRlc2lyZWRfYnVuZGxlX3NpemUpCiAgICAgIHlpZWxkIGlvYmFzZS5Tb3VyY2VCdW5kbGUoCiAgICAgICAgICB3ZWlnaHQ9KGJ1bmRsZV9zdG9wIC0gYnVuZGxlX3N0YXJ0KSwKICAgICAgICAgIHNvdXJjZT1zZWxmLAogICAgICAgICAgc3RhcnRfcG9zaXRpb249YnVuZGxlX3N0YXJ0LAogICAgICAgICAgc3RvcF9wb3NpdGlvbj1idW5kbGVfc3RvcCkKICAgICAgYnVuZGxlX3N0YXJ0ID0gYnVuZGxlX3N0b3AKlH2UKIwXQ291bnRpbmdTb3VyY2UuX19pbml0X1+UalYxAQBLI0slh5SMHENvdW50aW5nU291cmNlLmVzdGltYXRlX3NpemWUalYxAQBLJ0soh5SMIENvdW50aW5nU291cmNlLmdldF9yYW5nZV90cmFja2VylGpWMQEASypLMIeUjBNDb3VudGluZ1NvdXJjZS5yZWFklGpWMQEASzJLOIeUjBRDb3VudGluZ1NvdXJjZS5zcGxpdJRqVjEBAEs6S0iHlIwOQ291bnRpbmdTb3VyY2WUal0xAQBLIktIh5R1fZQojA5Db3VudGluZ1NvdXJjZZRq0AMAAIwcQ291bnRpbmdTb3VyY2UuZXN0aW1hdGVfc2l6ZZRq0AMAAIwgQ291bnRpbmdTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXKUatADAACME0NvdW50aW5nU291cmNlLnJlYWSUatADAACMFENvdW50aW5nU291cmNlLnNwbGl0lGrQAwAAdYwUYXBhY2hlX2JlYW0uaW8udXRpbHOUdJSMFGFwYWNoZV9iZWFtLmlvLnZjZmlvlChYoksAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBzb3VyY2UgZm9yIHJlYWRpbmcgZnJvbSBWQ0YgZmlsZXMgKHZlcnNpb24gNC54KS4KClRoZSA0LjIgc3BlYyBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly9zYW10b29scy5naXRodWIuaW8vaHRzLXNwZWNzL1ZDRnY0LjIucGRmLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgc3lzCmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHdhcm5pbmdzCmZyb20gYnVpbHRpbnMgaW1wb3J0IG5leHQKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCBsb25nCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBmaWxlYmFzZWRzb3VyY2UKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtIGltcG9ydCBDb21wcmVzc2lvblR5cGVzCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZWFkCmZyb20gYXBhY2hlX2JlYW0uaW8udGV4dGlvIGltcG9ydCBfVGV4dFNvdXJjZSBhcyBUZXh0U291cmNlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQoKaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CiAgaW1wb3J0IHZjZgplbHNlOgogIHdhcm5pbmdzLndhcm4oCiAgICAgICJWQ0YgSU8gd2lsbCBzdXBwb3J0IFB5dGhvbiAzIGFmdGVyIG1pZ3JhdGlvbiB0byBOdWNsZXVzLCAiCiAgICAgICJzZWU6IEJFQU0tNTYyOC4iKQoKX19hbGxfXyA9IFsKICAgICdSZWFkRnJvbVZjZicsCiAgICAnVmFyaWFudCcsCiAgICAnVmFyaWFudENhbGwnLAogICAgJ1ZhcmlhbnRJbmZvJywKICAgICdNYWxmb3JtZWRWY2ZSZWNvcmQnCl0KCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCiMgU3RvcmVzIGRhdGEgYWJvdXQgdmFyaWFudCBJTkZPIGZpZWxkcy4gVGhlIHR5cGUgb2YgJ2RhdGEnIGlzIHNwZWNpZmllZCBpbiB0aGUKIyBWQ0YgaGVhZGVycy4gJ2ZpZWxkX2NvdW50JyBpcyBhIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGZpZWxkcwojIHRoYXQgdGhlIGRhdGEgdHlwZSBjb250YWlucy4gSXRzIHZhbHVlIGNhbiBlaXRoZXIgYmUgYSBudW1iZXIgcmVwcmVzZW50aW5nIGEKIyBjb25zdGFudCBudW1iZXIgb2YgZmllbGRzLCBgTm9uZWAgaW5kaWNhdGluZyB0aGF0IHRoZSB2YWx1ZSBpcyBub3Qgc2V0CiMgKGVxdWl2YWxlbnQgdG8gJy4nIGluIHRoZSBWQ0YgZmlsZSkgb3Igb25lIG9mOgojICAgLSAnQSc6IG9uZSB2YWx1ZSBwZXIgYWx0ZXJuYXRlIGFsbGVsZS4KIyAgIC0gJ0cnOiBvbmUgdmFsdWUgZm9yIGVhY2ggcG9zc2libGUgZ2Vub3R5cGUuCiMgICAtICdSJzogb25lIHZhbHVlIGZvciBlYWNoIHBvc3NpYmxlIGFsbGVsZSAoaW5jbHVkaW5nIHRoZSByZWZlcmVuY2UpLgpWYXJpYW50SW5mbyA9IG5hbWVkdHVwbGUoJ1ZhcmlhbnRJbmZvJywgWydkYXRhJywgJ2ZpZWxkX2NvdW50J10pCiMgU3RvcmVzIGRhdGEgYWJvdXQgZmFpbGVkIFZDRiByZWNvcmQgcmVhZHMuIGBsaW5lYCBpcyB0aGUgdGV4dCBsaW5lIHRoYXQKIyBjYXVzZWQgdGhlIGZhaWxlZCByZWFkIGFuZCBgZmlsZV9uYW1lYCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IHRoZSByZWFkCiMgZmFpbGVkIGluLgpNYWxmb3JtZWRWY2ZSZWNvcmQgPSBuYW1lZHR1cGxlKCdNYWxmb3JtZWRWY2ZSZWNvcmQnLCBbJ2ZpbGVfbmFtZScsICdsaW5lJ10pCk1JU1NJTkdfRklFTERfVkFMVUUgPSAnLicgICMgSW5kaWNhdGVzIGZpZWxkIGlzIG1pc3NpbmcgaW4gVkNGIHJlY29yZC4KUEFTU19GSUxURVIgPSAnUEFTUycgICMgSW5kaWNhdGVzIHRoYXQgYWxsIGZpbHRlcnMgaGF2ZSBiZWVuIHBhc3NlZC4KRU5EX0lORk9fS0VZID0gJ0VORCcgICMgVGhlIGluZm8ga2V5IHRoYXQgZXhwbGljaXRseSBzcGVjaWZpZXMgZW5kIG9mIGEgcmVjb3JkLgpHRU5PVFlQRV9GT1JNQVRfS0VZID0gJ0dUJyAgIyBUaGUgZ2Vub3R5cGUgZm9ybWF0IGtleSBpbiBhIGNhbGwuClBIQVNFU0VUX0ZPUk1BVF9LRVkgPSAnUFMnICAjIFRoZSBwaGFzZXNldCBmb3JtYXQga2V5LgpERUZBVUxUX1BIQVNFU0VUX1ZBTFVFID0gJyonICAjIERlZmF1bHQgcGhhc2VzZXQgdmFsdWUgaWYgY2FsbCBpcyBwaGFzZWQsIGJ1dAojIG5vICdQUycgaXMgcHJlc2VudC4KTUlTU0lOR19HRU5PVFlQRV9WQUxVRSA9IC0xICAjIEdlbm90eXBlIHRvIHVzZSB3aGVuICcuJyBpcyB1c2VkIGluIEdUIGZpZWxkLgoKCmNsYXNzIFZhcmlhbnQob2JqZWN0KToKICAiIiJBIGNsYXNzIHRvIHN0b3JlIGluZm8gYWJvdXQgYSBnZW5vbWljIHZhcmlhbnQuCgogIEVhY2ggb2JqZWN0IGNvcnJlc3BvbmRzIHRvIGEgc2luZ2xlIHJlY29yZCBpbiBhIFZDRiBmaWxlLgogICIiIgogIF9faGFzaF9fID0gTm9uZSAgIyB0eXBlOiBpZ25vcmVbYXNzaWdubWVudF0KCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICByZWZlcmVuY2VfbmFtZT1Ob25lLAogICAgICBzdGFydD1Ob25lLAogICAgICBlbmQ9Tm9uZSwKICAgICAgcmVmZXJlbmNlX2Jhc2VzPU5vbmUsCiAgICAgIGFsdGVybmF0ZV9iYXNlcz1Ob25lLAogICAgICBuYW1lcz1Ob25lLAogICAgICBxdWFsaXR5PU5vbmUsCiAgICAgIGZpbHRlcnM9Tm9uZSwKICAgICAgaW5mbz1Ob25lLAogICAgICBjYWxscz1Ob25lKToKICAgICIiIkluaXRpYWxpemUgdGhlIDpjbGFzczpgVmFyaWFudGAgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIHJlZmVyZW5jZV9uYW1lIChzdHIpOiBUaGUgcmVmZXJlbmNlIG9uIHdoaWNoIHRoaXMgdmFyaWFudCBvY2N1cnMKICAgICAgICAoc3VjaCBhcyBgY2hyMjBgIG9yIGBYYCkuIC4KICAgICAgc3RhcnQgKGludCk6IFRoZSBwb3NpdGlvbiBhdCB3aGljaCB0aGlzIHZhcmlhbnQgb2NjdXJzICgwLWJhc2VkKS4KICAgICAgICBDb3JyZXNwb25kcyB0byB0aGUgZmlyc3QgYmFzZSBvZiB0aGUgc3RyaW5nIG9mIHJlZmVyZW5jZSBiYXNlcy4KICAgICAgZW5kIChpbnQpOiBUaGUgZW5kIHBvc2l0aW9uICgwLWJhc2VkKSBvZiB0aGlzIHZhcmlhbnQuIENvcnJlc3BvbmRzIHRvIHRoZQogICAgICAgIGZpcnN0IGJhc2UgYWZ0ZXIgdGhlIGxhc3QgYmFzZSBpbiB0aGUgcmVmZXJlbmNlIGFsbGVsZS4KICAgICAgcmVmZXJlbmNlX2Jhc2VzIChzdHIpOiBUaGUgcmVmZXJlbmNlIGJhc2VzIGZvciB0aGlzIHZhcmlhbnQuCiAgICAgIGFsdGVybmF0ZV9iYXNlcyAoTGlzdFtzdHJdKTogVGhlIGJhc2VzIHRoYXQgYXBwZWFyIGluc3RlYWQgb2YgdGhlCiAgICAgICAgcmVmZXJlbmNlIGJhc2VzLgogICAgICBuYW1lcyAoTGlzdFtzdHJdKTogTmFtZXMgZm9yIHRoZSB2YXJpYW50LCBmb3IgZXhhbXBsZSBhIFJlZlNOUCBJRC4KICAgICAgcXVhbGl0eSAoZmxvYXQpOiBQaHJlZC1zY2FsZWQgcXVhbGl0eSBzY29yZSAoLTEwbG9nMTAgcHJvYihjYWxsIGlzIHdyb25nKSkKICAgICAgICBIaWdoZXIgdmFsdWVzIGltcGx5IGJldHRlciBxdWFsaXR5LgogICAgICBmaWx0ZXJzIChMaXN0W3N0cl0pOiBBIGxpc3Qgb2YgZmlsdGVycyAobm9ybWFsbHkgcXVhbGl0eSBmaWx0ZXJzKSB0aGlzCiAgICAgICAgdmFyaWFudCBoYXMgZmFpbGVkLiBgUEFTU2AgaW5kaWNhdGVzIHRoaXMgdmFyaWFudCBoYXMgcGFzc2VkIGFsbAogICAgICAgIGZpbHRlcnMuCiAgICAgIGluZm8gKGRpY3QpOiBBIG1hcCBvZiBhZGRpdGlvbmFsIHZhcmlhbnQgaW5mb3JtYXRpb24uIFRoZSBrZXkgaXMgc3BlY2lmaWVkCiAgICAgICAgaW4gdGhlIFZDRiByZWNvcmQgYW5kIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIGBgVmFyaWFudEluZm9gYC4KICAgICAgY2FsbHMgKGxpc3Qgb2YgOmNsYXNzOmBWYXJpYW50Q2FsbGApOiBUaGUgdmFyaWFudCBjYWxscyBmb3IgdGhpcyB2YXJpYW50LgogICAgICAgIEVhY2ggb25lIHJlcHJlc2VudHMgdGhlIGRldGVybWluYXRpb24gb2YgZ2Vub3R5cGUgd2l0aCByZXNwZWN0IHRvIHRoaXMKICAgICAgICB2YXJpYW50LgogICAgIiIiCiAgICBzZWxmLnJlZmVyZW5jZV9uYW1lID0gcmVmZXJlbmNlX25hbWUKICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgc2VsZi5lbmQgPSBlbmQKICAgIHNlbGYucmVmZXJlbmNlX2Jhc2VzID0gcmVmZXJlbmNlX2Jhc2VzCiAgICBzZWxmLmFsdGVybmF0ZV9iYXNlcyA9IGFsdGVybmF0ZV9iYXNlcyBvciBbXQogICAgc2VsZi5uYW1lcyA9IG5hbWVzIG9yIFtdCiAgICBzZWxmLnF1YWxpdHkgPSBxdWFsaXR5CiAgICBzZWxmLmZpbHRlcnMgPSBmaWx0ZXJzIG9yIFtdCiAgICBzZWxmLmluZm8gPSBpbmZvIG9yIHt9CiAgICBzZWxmLmNhbGxzID0gY2FsbHMgb3IgW10KCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgVmFyaWFudCkgYW5kIHZhcnMoc2VsZikgPT0gdmFycyhvdGhlcikKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnLCAnLmpvaW4oWwogICAgICAgIHN0cihzKSBmb3IgcyBpbiBbCiAgICAgICAgICAgIHNlbGYucmVmZXJlbmNlX25hbWUsCiAgICAgICAgICAgIHNlbGYuc3RhcnQsCiAgICAgICAgICAgIHNlbGYuZW5kLAogICAgICAgICAgICBzZWxmLnJlZmVyZW5jZV9iYXNlcywKICAgICAgICAgICAgc2VsZi5hbHRlcm5hdGVfYmFzZXMsCiAgICAgICAgICAgIHNlbGYubmFtZXMsCiAgICAgICAgICAgIHNlbGYucXVhbGl0eSwKICAgICAgICAgICAgc2VsZi5maWx0ZXJzLAogICAgICAgICAgICBzZWxmLmluZm8sCiAgICAgICAgICAgIHNlbGYuY2FsbHMKICAgICAgICBdCiAgICBdKQoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBWYXJpYW50KToKICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCgogICAgIyBFbGVtZW50cyBzaG91bGQgZmlyc3QgYmUgc29ydGVkIGJ5IHJlZmVyZW5jZV9uYW1lLCBzdGFydCwgZW5kLgogICAgIyBPcmRlcmluZyBvZiBvdGhlciBtZW1iZXJzIGlzIG5vdCBpbXBvcnRhbnQsIGJ1dCBtdXN0IGJlCiAgICAjIGRldGVybWluaXN0aWMuCiAgICBpZiBzZWxmLnJlZmVyZW5jZV9uYW1lICE9IG90aGVyLnJlZmVyZW5jZV9uYW1lOgogICAgICByZXR1cm4gc2VsZi5yZWZlcmVuY2VfbmFtZSA8IG90aGVyLnJlZmVyZW5jZV9uYW1lCiAgICBlbGlmIHNlbGYuc3RhcnQgIT0gb3RoZXIuc3RhcnQ6CiAgICAgIHJldHVybiBzZWxmLnN0YXJ0IDwgb3RoZXIuc3RhcnQKICAgIGVsaWYgc2VsZi5lbmQgIT0gb3RoZXIuZW5kOgogICAgICByZXR1cm4gc2VsZi5lbmQgPCBvdGhlci5lbmQKCiAgICBzZWxmX3ZhcnMgPSB2YXJzKHNlbGYpCiAgICBvdGhlcl92YXJzID0gdmFycyhvdGhlcikKICAgIGZvciBrZXkgaW4gc29ydGVkKHNlbGZfdmFycyk6CiAgICAgIGlmIHNlbGZfdmFyc1trZXldICE9IG90aGVyX3ZhcnNba2V5XToKICAgICAgICByZXR1cm4gc2VsZl92YXJzW2tleV0gPCBvdGhlcl92YXJzW2tleV0KCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgVmFyaWFudCk6CiAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAoKICAgIHJldHVybiBzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlcgoKICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBWYXJpYW50KToKICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCgogICAgcmV0dXJuIG90aGVyIDwgc2VsZgoKICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBWYXJpYW50KToKICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCgogICAgcmV0dXJuIG90aGVyIDw9IHNlbGYKCgpjbGFzcyBWYXJpYW50Q2FsbChvYmplY3QpOgogICIiIkEgY2xhc3MgdG8gc3RvcmUgaW5mbyBhYm91dCBhIHZhcmlhbnQgY2FsbC4KCiAgQSBjYWxsIHJlcHJlc2VudHMgdGhlIGRldGVybWluYXRpb24gb2YgZ2Vub3R5cGUgd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhcgogIHZhcmlhbnQuIEl0IG1heSBpbmNsdWRlIGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gc3VjaCBhcyBxdWFsaXR5IGFuZCBwaGFzaW5nLgogICIiIgoKICBfX2hhc2hfXyA9IE5vbmUgICMgdHlwZTogaWdub3JlW2Fzc2lnbm1lbnRdCgogIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lPU5vbmUsIGdlbm90eXBlPU5vbmUsIHBoYXNlc2V0PU5vbmUsIGluZm89Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIHRoZSA6Y2xhc3M6YFZhcmlhbnRDYWxsYCBvYmplY3QuCgogICAgQXJnczoKICAgICAgbmFtZSAoc3RyKTogVGhlIG5hbWUgb2YgdGhlIGNhbGwuCiAgICAgIGdlbm90eXBlIChMaXN0W2ludF0pOiBUaGUgZ2Vub3R5cGUgb2YgdGhpcyB2YXJpYW50IGNhbGwgYXMgc3BlY2lmaWVkIGJ5CiAgICAgICAgdGhlIFZDRiBzY2hlbWEuIFRoZSB2YWx1ZXMgYXJlIGVpdGhlciBgMGAgcmVwcmVzZW50aW5nIHRoZSByZWZlcmVuY2UsCiAgICAgICAgb3IgYSAxLWJhc2VkIGluZGV4IGludG8gYWx0ZXJuYXRlIGJhc2VzLiBPcmRlcmluZyBpcyBvbmx5IGltcG9ydGFudCBpZgogICAgICAgIGBwaGFzZXNldGAgaXMgcHJlc2VudC4gSWYgYSBnZW5vdHlwZSBpcyBub3QgY2FsbGVkICh0aGF0IGlzLCBhIGAuYCBpcwogICAgICAgIHByZXNlbnQgaW4gdGhlIEdUIHN0cmluZyksIC0xIGlzIHVzZWQKICAgICAgcGhhc2VzZXQgKHN0cik6IElmIHRoaXMgZmllbGQgaXMgcHJlc2VudCwgdGhpcyB2YXJpYW50IGNhbGwncyBnZW5vdHlwZQogICAgICAgIG9yZGVyaW5nIGltcGxpZXMgdGhlIHBoYXNlIG9mIHRoZSBiYXNlcyBhbmQgaXMgY29uc2lzdGVudCB3aXRoIGFueSBvdGhlcgogICAgICAgIHZhcmlhbnQgY2FsbHMgaW4gdGhlIHNhbWUgcmVmZXJlbmNlIHNlcXVlbmNlIHdoaWNoIGhhdmUgdGhlIHNhbWUKICAgICAgICBwaGFzZXNldCB2YWx1ZS4gSWYgdGhlIGdlbm90eXBlIGRhdGEgd2FzIHBoYXNlZCBidXQgbm8gcGhhc2Ugc2V0IHdhcwogICAgICAgIHNwZWNpZmllZCwgdGhpcyBmaWVsZCB3aWxsIGJlIHNldCB0byBgKmAuCiAgICAgIGluZm8gKGRpY3QpOiBBIG1hcCBvZiBhZGRpdGlvbmFsIHZhcmlhbnQgY2FsbCBpbmZvcm1hdGlvbi4gVGhlIGtleSBpcwogICAgICAgIHNwZWNpZmllZCBpbiB0aGUgVkNGIHJlY29yZCBhbmQgdGhlIHR5cGUgb2YgdGhlIHZhbHVlIGlzIHNwZWNpZmllZCBieQogICAgICAgIHRoZSBWQ0YgaGVhZGVyIEZPUk1BVC4KICAgICIiIgogICAgc2VsZi5uYW1lID0gbmFtZQogICAgc2VsZi5nZW5vdHlwZSA9IGdlbm90eXBlIG9yIFtdCiAgICBzZWxmLnBoYXNlc2V0ID0gcGhhc2VzZXQKICAgIHNlbGYuaW5mbyA9IGluZm8gb3Ige30KCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKChzZWxmLm5hbWUsIHNlbGYuZ2Vub3R5cGUsIHNlbGYucGhhc2VzZXQsIHNlbGYuaW5mbykgPT0gKAogICAgICAgIG90aGVyLm5hbWUsIG90aGVyLmdlbm90eXBlLCBvdGhlci5waGFzZXNldCwgb3RoZXIuaW5mbykpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJywgJy5qb2luKAogICAgICAgIFtzdHIocykgZm9yIHMgaW4gW3NlbGYubmFtZSwgc2VsZi5nZW5vdHlwZSwgc2VsZi5waGFzZXNldCwgc2VsZi5pbmZvXV0pCgoKY2xhc3MgX1ZjZlNvdXJjZShmaWxlYmFzZWRzb3VyY2UuRmlsZUJhc2VkU291cmNlKToKICAiIiJBIHNvdXJjZSBmb3IgcmVhZGluZyBWQ0YgZmlsZXMuCgogIFBhcnNlcyBWQ0YgZmlsZXMgKHZlcnNpb24gNCkgdXNpbmcgUHlWQ0YgbGlicmFyeS4gSWYgZmlsZV9wYXR0ZXJuIHNwZWNpZmllcwogIG11bHRpcGxlIGZpbGVzLCB0aGVuIHRoZSBoZWFkZXIgZnJvbSBlYWNoIGZpbGUgaXMgdXNlZCBzZXBhcmF0ZWx5IHRvIHBhcnNlCiAgdGhlIGNvbnRlbnQuIEhvd2V2ZXIsIHRoZSBvdXRwdXQgd2lsbCBiZSBhIHVuaWZvcm0gUENvbGxlY3Rpb24gb2YKICA6Y2xhc3M6YFZhcmlhbnRgIG9iamVjdHMuCiAgIiIiCgogIERFRkFVTFRfVkNGX1JFQURfQlVGRkVSX1NJWkUgPSA2NTUzNiAgIyA2NGtCCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZmlsZV9wYXR0ZXJuLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgYnVmZmVyX3NpemU9REVGQVVMVF9WQ0ZfUkVBRF9CVUZGRVJfU0laRSwKICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgYWxsb3dfbWFsZm9ybWVkX3JlY29yZHM9RmFsc2UpOgogICAgc3VwZXIoX1ZjZlNvdXJjZSwgc2VsZikuX19pbml0X18oCiAgICAgICAgZmlsZV9wYXR0ZXJuLCBjb21wcmVzc2lvbl90eXBlPWNvbXByZXNzaW9uX3R5cGUsIHZhbGlkYXRlPXZhbGlkYXRlKQoKICAgIHNlbGYuX2hlYWRlcl9saW5lc19wZXJfZmlsZSA9IHt9CiAgICBzZWxmLl9jb21wcmVzc2lvbl90eXBlID0gY29tcHJlc3Npb25fdHlwZQogICAgc2VsZi5fYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQogICAgc2VsZi5fYWxsb3dfbWFsZm9ybWVkX3JlY29yZHMgPSBhbGxvd19tYWxmb3JtZWRfcmVjb3JkcwoKICBkZWYgcmVhZF9yZWNvcmRzKHNlbGYsIGZpbGVfbmFtZSwgcmFuZ2VfdHJhY2tlcik6CiAgICByZWNvcmRfaXRlcmF0b3IgPSBfVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvcigKICAgICAgICBmaWxlX25hbWUsCiAgICAgICAgcmFuZ2VfdHJhY2tlciwKICAgICAgICBzZWxmLl9wYXR0ZXJuLAogICAgICAgIHNlbGYuX2NvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgc2VsZi5fYWxsb3dfbWFsZm9ybWVkX3JlY29yZHMsCiAgICAgICAgYnVmZmVyX3NpemU9c2VsZi5fYnVmZmVyX3NpemUsCiAgICAgICAgc2tpcF9oZWFkZXJfbGluZXM9MCkKCiAgICAjIENvbnZlcnQgaXRlcmF0b3IgdG8gZ2VuZXJhdG9yIHRvIGFic3RyYWN0IGJlaGF2aW9yCiAgICBmb3IgbGluZSBpbiByZWNvcmRfaXRlcmF0b3I6CiAgICAgIHlpZWxkIGxpbmUKCiAgY2xhc3MgX1ZjZlJlY29yZEl0ZXJhdG9yKG9iamVjdCk6CiAgICAiIiJBbiBJdGVyYXRvciBmb3IgcHJvY2Vzc2luZyBhIHNpbmdsZSBWQ0YgZmlsZS4iIiIKICAgIGRlZiBfX2luaXRfXygKICAgICAgICBzZWxmLAogICAgICAgIGZpbGVfbmFtZSwKICAgICAgICByYW5nZV90cmFja2VyLAogICAgICAgIGZpbGVfcGF0dGVybiwKICAgICAgICBjb21wcmVzc2lvbl90eXBlLAogICAgICAgIGFsbG93X21hbGZvcm1lZF9yZWNvcmRzLAogICAgICAgICoqa3dhcmdzKToKICAgICAgc2VsZi5faGVhZGVyX2xpbmVzID0gW10KICAgICAgc2VsZi5fbGFzdF9yZWNvcmQgPSBOb25lCiAgICAgIHNlbGYuX2ZpbGVfbmFtZSA9IGZpbGVfbmFtZQogICAgICBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkcyA9IGFsbG93X21hbGZvcm1lZF9yZWNvcmRzCgogICAgICB0ZXh0X3NvdXJjZSA9IFRleHRTb3VyY2UoCiAgICAgICAgICBmaWxlX3BhdHRlcm4sCiAgICAgICAgICAwLCAgIyBtaW5fYnVuZGxlX3NpemUKICAgICAgICAgIGNvbXByZXNzaW9uX3R5cGUsCiAgICAgICAgICBUcnVlLCAgIyBzdHJpcF90cmFpbGluZ19uZXdsaW5lcwogICAgICAgICAgY29kZXJzLlN0clV0ZjhDb2RlcigpLCAgIyBjb2RlcgogICAgICAgICAgdmFsaWRhdGU9RmFsc2UsCiAgICAgICAgICBoZWFkZXJfcHJvY2Vzc29yX2Zucz0obGFtYmRhIHg6IHguc3RhcnRzd2l0aCgnIycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3JlX2hlYWRlcl9saW5lcyksCiAgICAgICAgICAqKmt3YXJncykKCiAgICAgIHNlbGYuX3RleHRfbGluZXMgPSB0ZXh0X3NvdXJjZS5yZWFkX3JlY29yZHMoCiAgICAgICAgICBzZWxmLl9maWxlX25hbWUsIHJhbmdlX3RyYWNrZXIpCiAgICAgIHRyeToKICAgICAgICBzZWxmLl92Y2ZfcmVhZGVyID0gdmNmLlJlYWRlcihmc29jaz1zZWxmLl9jcmVhdGVfZ2VuZXJhdG9yKCkpCiAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKICAgICAgICAjIFRocm93IHRoZSBleGNlcHRpb24gaW5zaWRlIHRoZSBnZW5lcmF0b3IgdG8gZW5zdXJlIGZpbGUgaXMgcHJvcGVybHkKICAgICAgICAjIGNsb3NlZCAoaXQncyBvcGVuZWQgaW5zaWRlIFRleHRTb3VyY2UucmVhZF9yZWNvcmRzKS4KICAgICAgICBzZWxmLl90ZXh0X2xpbmVzLnRocm93KAogICAgICAgICAgICBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgJ0FuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHdoZW4gcmVhZGluZyBoZWFkZXIgZnJvbSBWQ0YgJwogICAgICAgICAgICAgICAgJ2ZpbGUgJXM6ICVzJyAlIChzZWxmLl9maWxlX25hbWUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpKSkKCiAgICBkZWYgX3N0b3JlX2hlYWRlcl9saW5lcyhzZWxmLCBoZWFkZXJfbGluZXMpOgogICAgICBzZWxmLl9oZWFkZXJfbGluZXMgPSBoZWFkZXJfbGluZXMKCiAgICBkZWYgX2NyZWF0ZV9nZW5lcmF0b3Ioc2VsZik6CiAgICAgIGhlYWRlcl9wcm9jZXNzZWQgPSBGYWxzZQogICAgICBmb3IgdGV4dF9saW5lIGluIHNlbGYuX3RleHRfbGluZXM6CiAgICAgICAgaWYgbm90IGhlYWRlcl9wcm9jZXNzZWQgYW5kIHNlbGYuX2hlYWRlcl9saW5lczoKICAgICAgICAgIGZvciBoZWFkZXIgaW4gc2VsZi5faGVhZGVyX2xpbmVzOgogICAgICAgICAgICBzZWxmLl9sYXN0X3JlY29yZCA9IGhlYWRlcgogICAgICAgICAgICB5aWVsZCBzZWxmLl9sYXN0X3JlY29yZAogICAgICAgICAgaGVhZGVyX3Byb2Nlc3NlZCA9IFRydWUKICAgICAgICAjIFB5VkNGIGhhcyBleHBsaWNpdCBzdHIoKSBjYWxscyB3aGVuIHBhcnNpbmcgSU5GTyBmaWVsZHMsIHdoaWNoIGZhaWxzCiAgICAgICAgIyB3aXRoIFVURi04IGRlY29kZWQgc3RyaW5ncy4gRW5jb2RlIHRoZSBsaW5lIGJhY2sgdG8gVVRGLTguCiAgICAgICAgc2VsZi5fbGFzdF9yZWNvcmQgPSB0ZXh0X2xpbmUuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgeWllbGQgc2VsZi5fbGFzdF9yZWNvcmQKCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgIHJldHVybiBzZWxmCgogICAgIyBweWxpbnQ6IGRpc2FibGU9bmV4dC1tZXRob2QtZGVmaW5lZAogICAgZGVmIG5leHQoc2VsZik6CiAgICAgIHJldHVybiBzZWxmLl9fbmV4dF9fKCkKCiAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgIHRyeToKICAgICAgICByZWNvcmQgPSBuZXh0KHNlbGYuX3ZjZl9yZWFkZXIpCiAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnZlcnRfdG9fdmFyaWFudF9yZWNvcmQoCiAgICAgICAgICAgIHJlY29yZCwgc2VsZi5fdmNmX3JlYWRlci5pbmZvcywgc2VsZi5fdmNmX3JlYWRlci5mb3JtYXRzKQogICAgICBleGNlcHQgKExvb2t1cEVycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICBpZiBzZWxmLl9hbGxvd19tYWxmb3JtZWRfcmVjb3JkczoKICAgICAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICAgICAnQW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgd2hlbiByZWFkaW5nIHJlY29yZCBmcm9tIFZDRiBmaWxlICcKICAgICAgICAgICAgICAnJXMuIEludmFsaWQgcmVjb3JkIHdhcyAlczogJXMnLAogICAgICAgICAgICAgIHNlbGYuX2ZpbGVfbmFtZSwKICAgICAgICAgICAgICBzZWxmLl9sYXN0X3JlY29yZCwKICAgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQogICAgICAgICAgcmV0dXJuIE1hbGZvcm1lZFZjZlJlY29yZChzZWxmLl9maWxlX25hbWUsIHNlbGYuX2xhc3RfcmVjb3JkKQoKICAgICAgICAjIFRocm93IHRoZSBleGNlcHRpb24gaW5zaWRlIHRoZSBnZW5lcmF0b3IgdG8gZW5zdXJlIGZpbGUgaXMgcHJvcGVybHkKICAgICAgICAjIGNsb3NlZCAoaXQncyBvcGVuZWQgaW5zaWRlIFRleHRTb3VyY2UucmVhZF9yZWNvcmRzKS4KICAgICAgICBzZWxmLl90ZXh0X2xpbmVzLnRocm93KAogICAgICAgICAgICBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgJ0FuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHdoZW4gcmVhZGluZyByZWNvcmQgZnJvbSBWQ0YgJwogICAgICAgICAgICAgICAgJ2ZpbGUgJXMuIEludmFsaWQgcmVjb3JkIHdhcyAlczogJXMnICUKICAgICAgICAgICAgICAgIChzZWxmLl9maWxlX25hbWUsIHNlbGYuX2xhc3RfcmVjb3JkLCB0cmFjZWJhY2suZm9ybWF0X2V4YygpKSkpCgogICAgZGVmIF9jb252ZXJ0X3RvX3ZhcmlhbnRfcmVjb3JkKHNlbGYsIHJlY29yZCwgaW5mb3MsIGZvcm1hdHMpOgogICAgICAiIiJDb252ZXJ0cyB0aGUgUHlWQ0YgcmVjb3JkIHRvIGEgOmNsYXNzOmBWYXJpYW50YCBvYmplY3QuCgogICAgICBBcmdzOgogICAgICAgIHJlY29yZCAoOmNsYXNzOmB+dmNmLm1vZGVsLl9SZWNvcmRgKTogQW4gb2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCBhCiAgICAgICAgICB2YXJpYW50LgogICAgICAgIGluZm9zIChkaWN0KTogVGhlIFB5VkNGIGRpY3Qgc3RvcmluZyBJTkZPIGV4dHJhY3RlZCBmcm9tIHRoZSBWQ0YgaGVhZGVyLgogICAgICAgICAgVGhlIGtleSBpcyB0aGUgaW5mbyBrZXkgYW5kIHRoZSB2YWx1ZSBpcyA6Y2xhc3M6YH52Y2YucGFyc2VyLl9JbmZvYC4KICAgICAgICBmb3JtYXRzIChkaWN0KTogVGhlIFB5VkNGIGRpY3Qgc3RvcmluZyBGT1JNQVQgZXh0cmFjdGVkIGZyb20gdGhlIFZDRgogICAgICAgICAgaGVhZGVyLiBUaGUga2V5IGlzIHRoZSBGT1JNQVQga2V5IGFuZCB0aGUgdmFsdWUgaXMKICAgICAgICAgIDpjbGFzczpgfnZjZi5wYXJzZXIuX0Zvcm1hdGAuCiAgICAgIFJldHVybnM6CiAgICAgICAgQSA6Y2xhc3M6YFZhcmlhbnRgIG9iamVjdCBmcm9tIHRoZSBnaXZlbiByZWNvcmQuCiAgICAgICIiIgogICAgICB2YXJpYW50ID0gVmFyaWFudCgpCiAgICAgIHZhcmlhbnQucmVmZXJlbmNlX25hbWUgPSByZWNvcmQuQ0hST00KICAgICAgdmFyaWFudC5zdGFydCA9IHJlY29yZC5zdGFydAogICAgICB2YXJpYW50LmVuZCA9IHJlY29yZC5lbmQKICAgICAgdmFyaWFudC5yZWZlcmVuY2VfYmFzZXMgPSAoCiAgICAgICAgICByZWNvcmQuUkVGIGlmIHJlY29yZC5SRUYgIT0gTUlTU0lOR19GSUVMRF9WQUxVRSBlbHNlIE5vbmUpCiAgICAgICMgQUxUIGZpZWxkcyBhcmUgY2xhc3NlcyBpbiBQeVZDRiAoZS5nLiBTdWJzdGl0dXRpb24pLCBzbyBuZWVkIGNvbnZlcnQKICAgICAgIyB0aGVtIHRvIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCiAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlX2Jhc2VzLmV4dGVuZChbc3RyKHIpIGZvciByIGluIHJlY29yZC5BTFQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByXSBpZiByZWNvcmQuQUxUIGVsc2UgW10pCiAgICAgIHZhcmlhbnQubmFtZXMuZXh0ZW5kKHJlY29yZC5JRC5zcGxpdCgnOycpIGlmIHJlY29yZC5JRCBlbHNlIFtdKQogICAgICB2YXJpYW50LnF1YWxpdHkgPSByZWNvcmQuUVVBTAogICAgICAjIFB5VkNGIHVzZXMgTm9uZSBmb3IgJy4nIGFuZCBhbiBlbXB0eSBsaXN0IGZvciAnUEFTUycuCiAgICAgIGlmIHJlY29yZC5GSUxURVIgaXMgbm90IE5vbmU6CiAgICAgICAgdmFyaWFudC5maWx0ZXJzLmV4dGVuZCgKICAgICAgICAgICAgcmVjb3JkLkZJTFRFUiBpZiByZWNvcmQuRklMVEVSIGVsc2UgW1BBU1NfRklMVEVSXSkKICAgICAgZm9yIGssIHYgaW4gaXRlcml0ZW1zKHJlY29yZC5JTkZPKToKICAgICAgICAjIFNwZWNpYWwgY2FzZTogRU5EIGluZm8gdmFsdWUgc3BlY2lmaWVzIGVuZCBvZiB0aGUgcmVjb3JkLCBzbyBhZGp1c3QKICAgICAgICAjIHZhcmlhbnQuZW5kIGFuZCBkbyBub3QgaW5jbHVkZSBpdCBhcyBwYXJ0IG9mIHZhcmlhbnQuaW5mby4KICAgICAgICBpZiBrID09IEVORF9JTkZPX0tFWToKICAgICAgICAgIHZhcmlhbnQuZW5kID0gdgogICAgICAgICAgY29udGludWUKICAgICAgICBmaWVsZF9jb3VudCA9IE5vbmUKICAgICAgICBpZiBrIGluIGluZm9zOgogICAgICAgICAgZmllbGRfY291bnQgPSBzZWxmLl9nZXRfZmllbGRfY291bnRfYXNfc3RyaW5nKGluZm9zW2tdLm51bSkKICAgICAgICB2YXJpYW50LmluZm9ba10gPSBWYXJpYW50SW5mbyhkYXRhPXYsIGZpZWxkX2NvdW50PWZpZWxkX2NvdW50KQogICAgICBmb3Igc2FtcGxlIGluIHJlY29yZC5zYW1wbGVzOgogICAgICAgIGNhbGwgPSBWYXJpYW50Q2FsbCgpCiAgICAgICAgY2FsbC5uYW1lID0gc2FtcGxlLnNhbXBsZQogICAgICAgIGZvciBhbGxlbGUgaW4gc2FtcGxlLmd0X2FsbGVsZXMgb3IgW01JU1NJTkdfR0VOT1RZUEVfVkFMVUVdOgogICAgICAgICAgaWYgYWxsZWxlIGlzIE5vbmU6CiAgICAgICAgICAgIGFsbGVsZSA9IE1JU1NJTkdfR0VOT1RZUEVfVkFMVUUKICAgICAgICAgIGNhbGwuZ2Vub3R5cGUuYXBwZW5kKGludChhbGxlbGUpKQogICAgICAgIHBoYXNlc2V0X2Zyb21fZm9ybWF0ID0gKAogICAgICAgICAgICBnZXRhdHRyKHNhbXBsZS5kYXRhLCBQSEFTRVNFVF9GT1JNQVRfS0VZKQogICAgICAgICAgICBpZiBQSEFTRVNFVF9GT1JNQVRfS0VZIGluIHNhbXBsZS5kYXRhLl9maWVsZHMgZWxzZSBOb25lKQogICAgICAgICMgTm90ZTogQ2FsbCBpcyBjb25zaWRlcmVkIHBoYXNlZCBpZiBpdCBjb250YWlucyB0aGUgJ1BTJyBrZXkgcmVnYXJkbGVzcwogICAgICAgICMgb2Ygd2hldGhlciBpdCB1c2VzICd8Jy4KICAgICAgICBpZiBwaGFzZXNldF9mcm9tX2Zvcm1hdCBvciBzYW1wbGUucGhhc2VkOgogICAgICAgICAgY2FsbC5waGFzZXNldCA9ICgKICAgICAgICAgICAgICBzdHIocGhhc2VzZXRfZnJvbV9mb3JtYXQpCiAgICAgICAgICAgICAgaWYgcGhhc2VzZXRfZnJvbV9mb3JtYXQgZWxzZSBERUZBVUxUX1BIQVNFU0VUX1ZBTFVFKQogICAgICAgIGZvciBmaWVsZCBpbiBzYW1wbGUuZGF0YS5fZmllbGRzOgogICAgICAgICAgIyBHZW5vdHlwZSBhbmQgcGhhc2VzZXQgKGlmIHByZXNlbnQpIGFyZSBhbHJlYWR5IGluY2x1ZGVkLgogICAgICAgICAgaWYgZmllbGQgaW4gKEdFTk9UWVBFX0ZPUk1BVF9LRVksIFBIQVNFU0VUX0ZPUk1BVF9LRVkpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgZGF0YSA9IGdldGF0dHIoc2FtcGxlLmRhdGEsIGZpZWxkKQogICAgICAgICAgIyBDb252ZXJ0IHNpbmdsZSB2YWx1ZXMgdG8gYSBsaXN0IGZvciBjYXNlcyB3aGVyZSB0aGUgbnVtYmVyIG9mIGZpZWxkcwogICAgICAgICAgIyBpcyB1bmtub3duLiBUaGlzIGlzIHRvIGVuc3VyZSBjb25zaXN0ZW50IHR5cGVzIGFjcm9zcyBhbGwgcmVjb3Jkcy4KICAgICAgICAgICMgTm90ZTogdGhpcyBpcyBhbHJlYWR5IGRvbmUgZm9yIElORk8gZmllbGRzIGluIFB5VkNGLgogICAgICAgICAgaWYgKGZpZWxkIGluIGZvcm1hdHMgYW5kIGZvcm1hdHNbZmllbGRdLm51bSBpcyBOb25lIGFuZAogICAgICAgICAgICAgIGlzaW5zdGFuY2UoZGF0YSwgKGludCwgZmxvYXQsIGxvbmcsIHN0ciwgdW5pY29kZSwgYm9vbCkpKToKICAgICAgICAgICAgZGF0YSA9IFtkYXRhXQogICAgICAgICAgY2FsbC5pbmZvW2ZpZWxkXSA9IGRhdGEKICAgICAgICB2YXJpYW50LmNhbGxzLmFwcGVuZChjYWxsKQogICAgICByZXR1cm4gdmFyaWFudAoKICAgIGRlZiBfZ2V0X2ZpZWxkX2NvdW50X2FzX3N0cmluZyhzZWxmLCBmaWVsZF9jb3VudCk6CiAgICAgICIiIlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBmaWVsZF9jb3VudCBmcm9tIFB5VkNGLgoKICAgICAgUHlWQ0YgY29udmVydHMgZmllbGQgY291bnRzIHRvIGFuIGludGVnZXIgd2l0aCBzb21lIHByZWRlZmluZWQgY29uc3RhbnRzCiAgICAgIGFzIHNwZWNpZmllZCBpbiB0aGUgdmNmLnBhcnNlci5maWVsZF9jb3VudHMgZGljdCAoZS5nLiAnQScgaXMgLTEpLiBUaGlzCiAgICAgIG1ldGhvZCBjb252ZXJ0cyB0aGVtIGJhY2sgdG8gdGhlaXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRvIGF2b2lkIGhhdmluZwogICAgICBkaXJlY3QgZGVwZW5kZW5jeSBvbiB0aGUgYXJiaXRyYXJ5IFB5VkNGIGNvbnN0YW50cy4KICAgICAgQXJnczoKICAgICAgICBmaWVsZF9jb3VudCAoaW50KTogQW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gSU5GTwogICAgICAgICAgYXMgc3BlY2lmaWVkIGJ5IFB5VkNGLgogICAgICBSZXR1cm5zOgogICAgICAgIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGZpZWxkX2NvdW50IChlLmcuICctMScgYmVjb21lcyAnQScpLgogICAgICBSYWlzZXM6CiAgICAgICAgVmFsdWVFcnJvcjogaWYgdGhlIGZpZWxkX2NvdW50IGlzIG5vdCB2YWxpZC4KICAgICAgIiIiCiAgICAgIGlmIGZpZWxkX2NvdW50IGlzIE5vbmU6CiAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgZWxpZiBmaWVsZF9jb3VudCA+PSAwOgogICAgICAgIHJldHVybiBzdHIoZmllbGRfY291bnQpCiAgICAgIGZpZWxkX2NvdW50X3RvX3N0cmluZyA9IHt2OiBrIGZvciBrLCB2IGluIHZjZi5wYXJzZXIuZmllbGRfY291bnRzLml0ZW1zKCl9CiAgICAgIGlmIGZpZWxkX2NvdW50IGluIGZpZWxkX2NvdW50X3RvX3N0cmluZzoKICAgICAgICByZXR1cm4gZmllbGRfY291bnRfdG9fc3RyaW5nW2ZpZWxkX2NvdW50XQogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIGZpZWxkX2NvdW50OiAlZCcgJSBmaWVsZF9jb3VudCkKCgpjbGFzcyBSZWFkRnJvbVZjZihQVHJhbnNmb3JtKToKICAiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBmb3IgcmVhZGluZyBWQ0YKICBmaWxlcy4KCiAgUGFyc2VzIFZDRiBmaWxlcyAodmVyc2lvbiA0KSB1c2luZyBQeVZDRiBsaWJyYXJ5LiBJZiBmaWxlX3BhdHRlcm4gc3BlY2lmaWVzCiAgbXVsdGlwbGUgZmlsZXMsIHRoZW4gdGhlIGhlYWRlciBmcm9tIGVhY2ggZmlsZSBpcyB1c2VkIHNlcGFyYXRlbHkgdG8gcGFyc2UKICB0aGUgY29udGVudC4gSG93ZXZlciwgdGhlIG91dHB1dCB3aWxsIGJlIGEgUENvbGxlY3Rpb24gb2YKICA6Y2xhc3M6YFZhcmlhbnRgIChvciA6Y2xhc3M6YE1hbGZvcm1lZFZjZlJlY29yZGAgZm9yIGZhaWxlZCByZWFkcykgb2JqZWN0cy4KICAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZpbGVfcGF0dGVybj1Ob25lLAogICAgICBjb21wcmVzc2lvbl90eXBlPUNvbXByZXNzaW9uVHlwZXMuQVVUTywKICAgICAgdmFsaWRhdGU9VHJ1ZSwKICAgICAgYWxsb3dfbWFsZm9ybWVkX3JlY29yZHM9RmFsc2UsCiAgICAgICoqa3dhcmdzKToKICAgICIiIkluaXRpYWxpemUgdGhlIDpjbGFzczpgUmVhZEZyb21WY2ZgIHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBmaWxlX3BhdHRlcm4gKHN0cik6IFRoZSBmaWxlIHBhdGggdG8gcmVhZCBmcm9tIGVpdGhlciBhcyBhIHNpbmdsZSBmaWxlIG9yCiAgICAgICAgYSBnbG9iIHBhdHRlcm4uCiAgICAgIGNvbXByZXNzaW9uX3R5cGUgKHN0cik6IFVzZWQgdG8gaGFuZGxlIGNvbXByZXNzZWQgaW5wdXQgZmlsZXMuCiAgICAgICAgVHlwaWNhbCB2YWx1ZSBpcyA6YXR0cjpgQ29tcHJlc3Npb25UeXBlcy5BVVRPCiAgICAgICAgPGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0uQ29tcHJlc3Npb25UeXBlcy5BVVRPPmAsIGluIHdoaWNoIGNhc2UgdGhlCiAgICAgICAgdW5kZXJseWluZyBmaWxlX3BhdGgncyBleHRlbnNpb24gd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgY29tcHJlc3Npb24uCiAgICAgIHZhbGlkYXRlIChib29sKTogZmxhZyB0byB2ZXJpZnkgdGhhdCB0aGUgZmlsZXMgZXhpc3QgZHVyaW5nIHRoZSBwaXBlbGluZQogICAgICAgIGNyZWF0aW9uIHRpbWUuCiAgICAgIGFsbG93X21hbGZvcm1lZF9yZWNvcmRzIChib29sKTogZGV0ZXJtaW5lcyBpZiBmYWlsZWQgVkNGCiAgICAgICAgcmVjb3JkIHJlYWRzIHdpbGwgYmUgdG9sZXJhdGVkLiBGYWlsZWQgcmVjb3JkIHJlYWRzIHdpbGwgcmVzdWx0IGluIGEKICAgICAgICA6Y2xhc3M6YE1hbGZvcm1lZFZjZlJlY29yZGAgYmVpbmcgcmV0dXJuZWQgZnJvbSB0aGUgcmVhZCBvZiB0aGUgcmVjb3JkCiAgICAgICAgcmF0aGVyIHRoYW4gYSA6Y2xhc3M6YFZhcmlhbnRgLgogICAgIiIiCiAgICBzdXBlcihSZWFkRnJvbVZjZiwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCiAgICBzZWxmLl9zb3VyY2UgPSBfVmNmU291cmNlKAogICAgICAgIGZpbGVfcGF0dGVybiwKICAgICAgICBjb21wcmVzc2lvbl90eXBlLAogICAgICAgIHZhbGlkYXRlPXZhbGlkYXRlLAogICAgICAgIGFsbG93X21hbGZvcm1lZF9yZWNvcmRzPWFsbG93X21hbGZvcm1lZF9yZWNvcmRzKQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlLnBpcGVsaW5lIHwgUmVhZChzZWxmLl9zb3VyY2UpCpR9lCiMEFZhcmlhbnQuX19pbml0X1+UalYxAQBLXUuKh5SMDlZhcmlhbnQuX19lcV9flGpWMQEAS4xLjYeUjA5WYXJpYW50Ll9fbmVfX5RqVjEBAEuPS5GHlIwQVmFyaWFudC5fX3JlcHJfX5RqVjEBAEuTS6GHlIwOVmFyaWFudC5fX2x0X1+UalYxAQBLo0u3h5SMDlZhcmlhbnQuX19sZV9flGpWMQEAS7lLvYeUjA5WYXJpYW50Ll9fZ3RfX5RqVjEBAEu/S8OHlIwOVmFyaWFudC5fX2dlX1+UalYxAQBLxUvJh5SMB1ZhcmlhbnSUal0xAQBLVkvJh5SMFFZhcmlhbnRDYWxsLl9faW5pdF9flGpWMQEAS9VL64eUjBJWYXJpYW50Q2FsbC5fX2VxX1+UalYxAQBL7Uvvh5SMElZhcmlhbnRDYWxsLl9fbmVfX5RqVjEBAEvxS/OHlIwUVmFyaWFudENhbGwuX19yZXByX1+UalYxAQBL9Uv3h5SMC1ZhcmlhbnRDYWxslGpdMQEAS8xL94eUjBNfVmNmU291cmNlLl9faW5pdF9flGpWMQEATQUBTRIBh5SMF19WY2ZTb3VyY2UucmVhZF9yZWNvcmRzlGpWMQEATRQBTSABh5SMJl9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yLl9faW5pdF9flGpWMQEATSQBTUYBh5SMMV9WY2ZTb3VyY2UuX1ZjZlJlY29yZEl0ZXJhdG9yLl9zdG9yZV9oZWFkZXJfbGluZXOUalYxAQBNSAFNSQGHlIwvX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IuX2NyZWF0ZV9nZW5lcmF0b3KUalYxAQBNSwFNVgGHlIwmX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IuX19pdGVyX1+UalYxAQBNWAFNWQGHlIwiX1ZjZlNvdXJjZS5fVmNmUmVjb3JkSXRlcmF0b3IubmV4dJRqVjEBAE1cAU1dAYeUjCZfVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvci5fX25leHRfX5RqVjEBAE1fAU10AYeUjDhfVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvci5fY29udmVydF90b192YXJpYW50X3JlY29yZJRqVjEBAE12AU27AYeUjDhfVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvci5fZ2V0X2ZpZWxkX2NvdW50X2FzX3N0cmluZ5RqVjEBAE29AU3UAYeUjB1fVmNmU291cmNlLl9WY2ZSZWNvcmRJdGVyYXRvcpRqXTEBAE0iAU3UAYeUjApfVmNmU291cmNllGpdMQEAS/pN1AGHlIwUUmVhZEZyb21WY2YuX19pbml0X1+UalYxAQBN4AFN/AGHlIwSUmVhZEZyb21WY2YuZXhwYW5klGpWMQEATf4BTf8Bh5SMC1JlYWRGcm9tVmNmlGpdMQEATdcBTf8Bh5R1fZQojAdWYXJpYW50lGrlAwAAjAtWYXJpYW50Q2FsbJRq5QMAAIwLUmVhZEZyb21WY2aUauUDAACMElJlYWRGcm9tVmNmLmV4cGFuZJRq5QMAAHWMFGFwYWNoZV9iZWFtLmlvLnZjZmlvlHSUjCNhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9yc5QoWDcVAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgY29sbGVjdGlvbiBvZiBXYXRlcm1hcmtFc3RpbWF0b3IgaW1wbGVtZW50YXRpb25zIHRoYXQgU3BsaXR0YWJsZURvRm5zCmNhbiB1c2UuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFdhdGVybWFya0VzdGltYXRvcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRpbWVzdGFtcAoKCmNsYXNzIE1vbm90b25pY1dhdGVybWFya0VzdGltYXRvcihXYXRlcm1hcmtFc3RpbWF0b3IpOgogICIiIkEgV2F0ZXJtYXJrRXN0aW1hdG9yIHdoaWNoIGFzc3VtZXMgdGhhdCB0aW1lc3RhbXBzIG9mIGFsbCBvdXB1dCByZWNvcmRzCiAgYXJlIGluY3JlYXNpbmcgbW9ub3RvbmljYWxseS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgdGltZXN0YW1wKToKICAgICIiIkZvciBhIG5ldyA8ZWxlbWVudCwgcmVzdHJpY3Rpb24+IHBhaXIsIHRoZSBpbml0aWFsIHZhbHVlIGlzIE5vbmUuIFdoZW4KICAgIHJlc3VtaW5nIHByb2Nlc3NpbmcsIHRoZSBpbml0aWFsIHRpbWVzdGFtcCB3aWxsIGJlIHRoZSBsYXN0IHJlcG9ydGVkCiAgICB3YXRlcm1hcmsuCiAgICAiIiIKICAgIHNlbGYuX3dhdGVybWFyayA9IHRpbWVzdGFtcAoKICBkZWYgb2JzZXJ2ZV90aW1lc3RhbXAoc2VsZiwgdGltZXN0YW1wKToKICAgIGlmIHNlbGYuX3dhdGVybWFyayBpcyBOb25lOgogICAgICBzZWxmLl93YXRlcm1hcmsgPSB0aW1lc3RhbXAKICAgIGVsc2U6CiAgICAgICMgVE9ETyhCRUFNLTkzMTIpOiBDb25zaWRlciBtYWtpbmcgaXQgY29uZmlndXJhYmxlIHRvIGRlYWwgd2l0aCBsYXRlCiAgICAgICMgdGltZXN0YW1wLgogICAgICBpZiB0aW1lc3RhbXAgPCBzZWxmLl93YXRlcm1hcms6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ0EgTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yIGV4cGVjdHMgb3V0cHV0ICcKICAgICAgICAgICAgJ3RpbWVzdGFtcCB0byBiZSBpbmNyZWFzaW5nIG1vbm90b25pY2FsbHkuJykKICAgICAgc2VsZi5fd2F0ZXJtYXJrID0gdGltZXN0YW1wCgogIGRlZiBjdXJyZW50X3dhdGVybWFyayhzZWxmKToKICAgIHJldHVybiBzZWxmLl93YXRlcm1hcmsKCiAgZGVmIGdldF9lc3RpbWF0b3Jfc3RhdGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fd2F0ZXJtYXJrCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZGVmYXVsdF9wcm92aWRlcigpOgogICAgIiIiUHJvdmlkZSBhIGRlZmF1bHQgV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIgZm9yCiAgICBNb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3IuCiAgICAiIiIKICAgIGNsYXNzIERlZmF1bHRNb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3IoV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIpOgogICAgICBkZWYgaW5pdGlhbF9lc3RpbWF0b3Jfc3RhdGUoc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgICAgIHJldHVybiBOb25lCgogICAgICBkZWYgY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3Ioc2VsZiwgZXN0aW1hdG9yX3N0YXRlKToKICAgICAgICByZXR1cm4gTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yKGVzdGltYXRvcl9zdGF0ZSkKCiAgICByZXR1cm4gRGVmYXVsdE1vbm90b25pY1dhdGVybWFya0VzdGltYXRvcigpCgoKY2xhc3MgV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IoV2F0ZXJtYXJrRXN0aW1hdG9yKToKICAiIiJBIFdhdGVybWFya0VzdGltYXRvciB3aGljaCB1c2VzIHByb2Nlc3NpbmcgdGltZSBhcyB0aGUgZXN0aW1hdGVkIHdhdGVybWFyay4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgdGltZXN0YW1wPU5vbmUpOgogICAgc2VsZi5fdGltZXN0YW1wID0gdGltZXN0YW1wIG9yIFRpbWVzdGFtcC5ub3coKQoKICBkZWYgb2JzZXJ2ZV90aW1lc3RhbXAoc2VsZiwgdGltZXN0YW1wKToKICAgIHBhc3MKCiAgZGVmIGN1cnJlbnRfd2F0ZXJtYXJrKHNlbGYpOgogICAgc2VsZi5fdGltZXN0YW1wID0gbWF4KHNlbGYuX3RpbWVzdGFtcCwgVGltZXN0YW1wLm5vdygpKQogICAgcmV0dXJuIHNlbGYuX3RpbWVzdGFtcAoKICBkZWYgZ2V0X2VzdGltYXRvcl9zdGF0ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl90aW1lc3RhbXAKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBkZWZhdWx0X3Byb3ZpZGVyKCk6CiAgICAiIiJQcm92aWRlIGEgZGVmYXVsdCBXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlciBmb3IKICAgIFdhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLgogICAgIiIiCiAgICBjbGFzcyBEZWZhdWx0V2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IoV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIpOgogICAgICBkZWYgaW5pdGlhbF9lc3RpbWF0b3Jfc3RhdGUoc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgICAgIHJldHVybiBOb25lCgogICAgICBkZWYgY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3Ioc2VsZiwgZXN0aW1hdG9yX3N0YXRlKToKICAgICAgICByZXR1cm4gV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IoZXN0aW1hdG9yX3N0YXRlKQoKICAgIHJldHVybiBEZWZhdWx0V2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IoKQoKCmNsYXNzIE1hbnVhbFdhdGVybWFya0VzdGltYXRvcihXYXRlcm1hcmtFc3RpbWF0b3IpOgogICIiIkEgV2F0ZXJtYXJrRXN0aW1hdG9yIHdoaWNoIGlzIGNvbnRyb2xsZWQgbWFudWFsbHkgZnJvbSB3aXRoaW4gYSBEb0ZuLgoKICBUaGUgRG9GbiBtdXN0IGludm9rZSBzZXRfd2F0ZXJtYXJrIHRvIGFkdmFuY2UgdGhlIHdhdGVybWFyay4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgd2F0ZXJtYXJrKToKICAgIHNlbGYuX3dhdGVybWFyayA9IHdhdGVybWFyawoKICBkZWYgb2JzZXJ2ZV90aW1lc3RhbXAoc2VsZiwgdGltZXN0YW1wKToKICAgIHBhc3MKCiAgZGVmIGN1cnJlbnRfd2F0ZXJtYXJrKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3dhdGVybWFyawoKICBkZWYgZ2V0X2VzdGltYXRvcl9zdGF0ZShzZWxmKToKICAgIHJldHVybiBzZWxmLl93YXRlcm1hcmsKCiAgZGVmIHNldF93YXRlcm1hcmsoc2VsZiwgdGltZXN0YW1wKToKICAgICMgcHlsaW50OiBkaXNhYmxlPWxpbmUtdG9vLWxvbmcKCiAgICAiIiJTZXRzIGEgdGltZXN0YW1wIGJlZm9yZSBvciBhdCB0aGUgdGltZXN0YW1wcyBvZiBhbGwgZnV0dXJlIGVsZW1lbnRzCiAgICBwcm9kdWNlZCBieSB0aGUgYXNzb2NpYXRlZCBEb0ZuLgoKICAgIFRoaXMgY2FuIGJlIGFwcHJveGltYXRlLiBJZiByZWNvcmRzIGFyZSBvdXRwdXQgdGhhdCB2aW9sYXRlIHRoaXMgZ3VhcmFudGVlLAogICAgdGhleSB3aWxsIGJlIGNvbnNpZGVyZWQgbGF0ZSwgd2hpY2ggd2lsbCBhZmZlY3QgaG93IHRoZXkgd2lsbCBiZSBwcm9jZXNzZWQuCiAgICBTZWUgaHR0cHM6Ly9iZWFtLmFwYWNoZS5vcmcvZG9jdW1lbnRhdGlvbi9wcm9ncmFtbWluZy1ndWlkZS8jd2F0ZXJtYXJrcy1hbmQtbGF0ZS1kYXRhCiAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBsYXRlIGRhdGEgYW5kIGhvdyB0byBoYW5kbGUgaXQuCgogICAgSG93ZXZlciwgdGhpcyB2YWx1ZSBzaG91bGQgYmUgYXMgbGF0ZSBhcyBwb3NzaWJsZS4gRG93bnN0cmVhbSB3aW5kb3dzIG1heQogICAgbm90IGJlIGFibGUgdG8gY2xvc2UgdW50aWwgdGhpcyB3YXRlcm1hcmsgcGFzc2VzIHRoZWlyIGVuZC4KICAgICIiIgogICAgaWYgbm90IGlzaW5zdGFuY2UodGltZXN0YW1wLCBUaW1lc3RhbXApOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdzZXRfd2F0ZXJtYXJrIGV4cGVjdHMgYSBUaW1lc3RhbXAgYXMgaW5wdXQnKQogICAgaWYgc2VsZi5fd2F0ZXJtYXJrIGFuZCBzZWxmLl93YXRlcm1hcmsgPiB0aW1lc3RhbXA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnV2F0ZXJtYXJrIG11c3QgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLicKICAgICAgICAgICdQcm92aWRlZCB3YXRlcm1hcmsgJXMgaXMgbGVzcyB0aGFuICcKICAgICAgICAgICdjdXJyZW50IHdhdGVybWFyayAlcycsCiAgICAgICAgICB0aW1lc3RhbXAsCiAgICAgICAgICBzZWxmLl93YXRlcm1hcmspCiAgICBzZWxmLl93YXRlcm1hcmsgPSB0aW1lc3RhbXAKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBkZWZhdWx0X3Byb3ZpZGVyKCk6CiAgICAiIiJQcm92aWRlIGEgZGVmYXVsdCBXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlciBmb3IKICAgIFdhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLgogICAgIiIiCiAgICBjbGFzcyBEZWZhdWx0TWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIoV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIpOgogICAgICBkZWYgaW5pdGlhbF9lc3RpbWF0b3Jfc3RhdGUoc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgICAgIHJldHVybiBOb25lCgogICAgICBkZWYgY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3Ioc2VsZiwgZXN0aW1hdG9yX3N0YXRlKToKICAgICAgICByZXR1cm4gTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yKGVzdGltYXRvcl9zdGF0ZSkKCiAgICByZXR1cm4gRGVmYXVsdE1hbnVhbFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyKCkKlH2UKIwkTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yLl9faW5pdF9flGpWMQEASyJLJ4eUjC1Nb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3Iub2JzZXJ2ZV90aW1lc3RhbXCUalYxAQBLKUszh5SMLU1vbm90b25pY1dhdGVybWFya0VzdGltYXRvci5jdXJyZW50X3dhdGVybWFya5RqVjEBAEs1SzaHlIwvTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yLmdldF9lc3RpbWF0b3Jfc3RhdGWUalYxAQBLOEs5h5SMZ01vbm90b25pY1dhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVyLkRlZmF1bHRNb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3IuaW5pdGlhbF9lc3RpbWF0b3Jfc3RhdGWUalYxAQBLQUtCh5SMak1vbm90b25pY1dhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVyLkRlZmF1bHRNb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3IuY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3KUalYxAQBLREtFh5SMT01vbm90b25pY1dhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVyLkRlZmF1bHRNb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3KUal0xAQBLQEtFh5SMLE1vbm90b25pY1dhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVylGpWMQEASztLR4eUjBtNb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3KUal0xAQBLHktHh5SMI1dhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLl9faW5pdF9flGpWMQEAS01LToeUjCxXYWxsdGltZVdhdGVybWFya0VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcJRqVjEBAEtQS1GHlIwsV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmuUalYxAQBLU0tVh5SMLldhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLmdldF9lc3RpbWF0b3Jfc3RhdGWUalYxAQBLV0tYh5SMZVdhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLmRlZmF1bHRfcHJvdmlkZXIuRGVmYXVsdFdhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLmluaXRpYWxfZXN0aW1hdG9yX3N0YXRllGpWMQEAS2BLYYeUjGhXYWxsdGltZVdhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVyLkRlZmF1bHRXYWxsdGltZVdhdGVybWFya0VzdGltYXRvci5jcmVhdGVfd2F0ZXJtYXJrX2VzdGltYXRvcpRqVjEBAEtjS2SHlIxNV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IuZGVmYXVsdF9wcm92aWRlci5EZWZhdWx0V2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3KUal0xAQBLX0tkh5SMK1dhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLmRlZmF1bHRfcHJvdmlkZXKUalYxAQBLWktmh5SMGldhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9ylGpdMQEAS0pLZoeUjCFNYW51YWxXYXRlcm1hcmtFc3RpbWF0b3IuX19pbml0X1+UalYxAQBLbktvh5SMKk1hbnVhbFdhdGVybWFya0VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcJRqVjEBAEtxS3KHlIwqTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yLmN1cnJlbnRfd2F0ZXJtYXJrlGpWMQEAS3RLdYeUjCxNYW51YWxXYXRlcm1hcmtFc3RpbWF0b3IuZ2V0X2VzdGltYXRvcl9zdGF0ZZRqVjEBAEt3S3iHlIwmTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yLnNldF93YXRlcm1hcmuUalYxAQBLekuRh5SMaU1hbnVhbFdhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVyLkRlZmF1bHRNYW51YWxXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlci5pbml0aWFsX2VzdGltYXRvcl9zdGF0ZZRqVjEBAEuZS5qHlIxsTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yLmRlZmF1bHRfcHJvdmlkZXIuRGVmYXVsdE1hbnVhbFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyLmNyZWF0ZV93YXRlcm1hcmtfZXN0aW1hdG9ylGpWMQEAS5xLnYeUjFFNYW51YWxXYXRlcm1hcmtFc3RpbWF0b3IuZGVmYXVsdF9wcm92aWRlci5EZWZhdWx0TWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXKUal0xAQBLmEudh5SMKU1hbnVhbFdhdGVybWFya0VzdGltYXRvci5kZWZhdWx0X3Byb3ZpZGVylGpWMQEAS5NLn4eUjBhNYW51YWxXYXRlcm1hcmtFc3RpbWF0b3KUal0xAQBLaUufh5R1fZQojBtNb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3KUapUDAACMLU1vbm90b25pY1dhdGVybWFya0VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcJRqlQMAAIwtTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yLmN1cnJlbnRfd2F0ZXJtYXJrlGqVAwAAjC9Nb25vdG9uaWNXYXRlcm1hcmtFc3RpbWF0b3IuZ2V0X2VzdGltYXRvcl9zdGF0ZZRqlQMAAIwsTW9ub3RvbmljV2F0ZXJtYXJrRXN0aW1hdG9yLmRlZmF1bHRfcHJvdmlkZXKUapUDAACMGldhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9ylGqVAwAAjCxXYWxsdGltZVdhdGVybWFya0VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcJRqlQMAAIwsV2FsbHRpbWVXYXRlcm1hcmtFc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmuUapUDAACMLldhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLmdldF9lc3RpbWF0b3Jfc3RhdGWUapUDAACMK1dhbGx0aW1lV2F0ZXJtYXJrRXN0aW1hdG9yLmRlZmF1bHRfcHJvdmlkZXKUapUDAACMGE1hbnVhbFdhdGVybWFya0VzdGltYXRvcpRqlQMAAIwqTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yLm9ic2VydmVfdGltZXN0YW1wlGqVAwAAjCpNYW51YWxXYXRlcm1hcmtFc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmuUapUDAACMLE1hbnVhbFdhdGVybWFya0VzdGltYXRvci5nZXRfZXN0aW1hdG9yX3N0YXRllGqVAwAAjCZNYW51YWxXYXRlcm1hcmtFc3RpbWF0b3Iuc2V0X3dhdGVybWFya5RqlQMAAIwpTWFudWFsV2F0ZXJtYXJrRXN0aW1hdG9yLmRlZmF1bHRfcHJvdmlkZXKUapUDAAB1jCNhcGFjaGVfYmVhbS5pby53YXRlcm1hcmtfZXN0aW1hdG9yc5R0lIwZYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxsc5QoWOs9AAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpUaGlzIGZpbGUgY29udGFpbnMgbWV0cmljIGNlbGwgY2xhc3Nlcy4gQSBtZXRyaWMgY2VsbCBpcyB1c2VkIHRvIGFjY3VtdWxhdGUKaW4tbWVtb3J5IGNoYW5nZXMgdG8gYSBtZXRyaWMuIEl0IHJlcHJlc2VudHMgYSBzcGVjaWZpYyBtZXRyaWMgaW4gYSBzaW5nbGUKY29udGV4dC4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2ZuX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IG1ldHJpY3NfcGIyCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHByb3RvX3V0aWxzCgp0cnk6CiAgaW1wb3J0IGN5dGhvbgpleGNlcHQgSW1wb3J0RXJyb3I6CgogIGNsYXNzIGZha2VfY3l0aG9uOgogICAgY29tcGlsZWQgPSBGYWxzZQoKICBnbG9iYWxzKClbJ2N5dGhvbiddID0gZmFrZV9jeXRob24KCl9fYWxsX18gPSBbJ0Rpc3RyaWJ1dGlvblJlc3VsdCcsICdHYXVnZVJlc3VsdCddCgoKY2xhc3MgTWV0cmljQ2VsbChvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQWNjdW11bGF0ZXMgaW4tbWVtb3J5IGNoYW5nZXMgdG8gYSBtZXRyaWMuCgogIEEgTWV0cmljQ2VsbCByZXByZXNlbnRzIGEgc3BlY2lmaWMgbWV0cmljIGluIGEgc2luZ2xlIGNvbnRleHQgYW5kIGJ1bmRsZS4KICBBbGwgc3ViY2xhc3NlcyBtdXN0IGJlIHRocmVhZCBzYWZlLCBhcyB0aGVzZSBhcmUgdXNlZCBpbiB0aGUgcGlwZWxpbmUgcnVubmVycywKICBhbmQgbWF5IGJlIHN1YmplY3QgdG8gcGFyYWxsZWwvY29uY3VycmVudCB1cGRhdGVzLiBDZWxscyBzaG91bGQgb25seSBiZSB1c2VkCiAgZGlyZWN0bHkgd2l0aGluIGEgcnVubmVyLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCgogIGRlZiB1cGRhdGUoc2VsZiwgdmFsdWUpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgZ2V0X2N1bXVsYXRpdmUoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIENvdW50ZXJDZWxsKE1ldHJpY0NlbGwpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVHJhY2tzIHRoZSBjdXJyZW50IHZhbHVlIGFuZCBkZWx0YSBvZiBhIGNvdW50ZXIgbWV0cmljLgoKICBFYWNoIGNlbGwgdHJhY2tzIHRoZSBzdGF0ZSBvZiBhIG1ldHJpYyBpbmRlcGVuZGVudGx5IHBlciBjb250ZXh0IHBlciBidW5kbGUuCiAgVGhlcmVmb3JlLCBlYWNoIG1ldHJpYyBoYXMgYSBkaWZmZXJlbnQgY2VsbCBpbiBlYWNoIGJ1bmRsZSwgY2VsbHMgYXJlCiAgYWdncmVnYXRlZCBieSB0aGUgcnVubmVyLgoKICBUaGlzIGNsYXNzIGlzIHRocmVhZCBzYWZlLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CiAgICBzdXBlcihDb3VudGVyQ2VsbCwgc2VsZikuX19pbml0X18oKmFyZ3MpCiAgICBzZWxmLnZhbHVlID0gQ291bnRlckFnZ3JlZ2F0b3IuaWRlbnRpdHlfZWxlbWVudCgpCgogIGRlZiByZXNldChzZWxmKToKICAgIHNlbGYudmFsdWUgPSBDb3VudGVyQWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50KCkKCiAgZGVmIGNvbWJpbmUoc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoQ291bnRlckNlbGwpIC0+IENvdW50ZXJDZWxsCiAgICByZXN1bHQgPSBDb3VudGVyQ2VsbCgpCiAgICByZXN1bHQuaW5jKHNlbGYudmFsdWUgKyBvdGhlci52YWx1ZSkKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIGluYyhzZWxmLCBuPTEpOgogICAgc2VsZi51cGRhdGUobikKCiAgZGVmIGRlYyhzZWxmLCBuPTEpOgogICAgc2VsZi51cGRhdGUoLW4pCgogIGRlZiB1cGRhdGUoc2VsZiwgdmFsdWUpOgogICAgaWYgY3l0aG9uLmNvbXBpbGVkOgogICAgICBpdmFsdWUgPSB2YWx1ZQogICAgICAjIFdlIGhvbGQgdGhlIEdJTCwgbm8gbmVlZCBmb3IgYW5vdGhlciBsb2NrLgogICAgICBzZWxmLnZhbHVlICs9IGl2YWx1ZQogICAgZWxzZToKICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgIHNlbGYudmFsdWUgKz0gdmFsdWUKCiAgZGVmIGdldF9jdW11bGF0aXZlKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBpbnQKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYudmFsdWUKCiAgZGVmIHRvX3J1bm5lcl9hcGlfdXNlcl9tZXRyaWMoc2VsZiwgbWV0cmljX25hbWUpOgogICAgcmV0dXJuIGJlYW1fZm5fYXBpX3BiMi5NZXRyaWNzLlVzZXIoCiAgICAgICAgbWV0cmljX25hbWU9bWV0cmljX25hbWUudG9fcnVubmVyX2FwaSgpLAogICAgICAgIGNvdW50ZXJfZGF0YT1iZWFtX2ZuX2FwaV9wYjIuTWV0cmljcy5Vc2VyLkNvdW50ZXJEYXRhKHZhbHVlPXNlbGYudmFsdWUpKQoKICBkZWYgdG9fcnVubmVyX2FwaV9tb25pdG9yaW5nX2luZm8oc2VsZiwgbmFtZSwgdHJhbnNmb3JtX2lkKToKICAgIGZyb20gYXBhY2hlX2JlYW0ubWV0cmljcyBpbXBvcnQgbW9uaXRvcmluZ19pbmZvcwogICAgcmV0dXJuIG1vbml0b3JpbmdfaW5mb3MuaW50NjRfdXNlcl9jb3VudGVyKAogICAgICAgIG5hbWUubmFtZXNwYWNlLAogICAgICAgIG5hbWUubmFtZSwKICAgICAgICBtZXRyaWNzX3BiMi5NZXRyaWMoCiAgICAgICAgICAgIGNvdW50ZXJfZGF0YT1tZXRyaWNzX3BiMi5Db3VudGVyRGF0YSgKICAgICAgICAgICAgICAgIGludDY0X3ZhbHVlPXNlbGYuZ2V0X2N1bXVsYXRpdmUoKSkpLAogICAgICAgIHB0cmFuc2Zvcm09dHJhbnNmb3JtX2lkKQoKCmNsYXNzIERpc3RyaWJ1dGlvbkNlbGwoTWV0cmljQ2VsbCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBUcmFja3MgdGhlIGN1cnJlbnQgdmFsdWUgYW5kIGRlbHRhIGZvciBhIGRpc3RyaWJ1dGlvbiBtZXRyaWMuCgogIEVhY2ggY2VsbCB0cmFja3MgdGhlIHN0YXRlIG9mIGEgbWV0cmljIGluZGVwZW5kZW50bHkgcGVyIGNvbnRleHQgcGVyIGJ1bmRsZS4KICBUaGVyZWZvcmUsIGVhY2ggbWV0cmljIGhhcyBhIGRpZmZlcmVudCBjZWxsIGluIGVhY2ggYnVuZGxlLCB0aGF0IGlzIGxhdGVyCiAgYWdncmVnYXRlZC4KCiAgVGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgogICAgc3VwZXIoRGlzdHJpYnV0aW9uQ2VsbCwgc2VsZikuX19pbml0X18oKmFyZ3MpCiAgICBzZWxmLmRhdGEgPSBEaXN0cmlidXRpb25BZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnQoKQoKICBkZWYgcmVzZXQoc2VsZik6CiAgICBzZWxmLmRhdGEgPSBEaXN0cmlidXRpb25BZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnQoKQoKICBkZWYgY29tYmluZShzZWxmLCBvdGhlcik6CiAgICAjIHR5cGU6IChEaXN0cmlidXRpb25DZWxsKSAtPiBEaXN0cmlidXRpb25DZWxsCiAgICByZXN1bHQgPSBEaXN0cmlidXRpb25DZWxsKCkKICAgIHJlc3VsdC5kYXRhID0gc2VsZi5kYXRhLmNvbWJpbmUob3RoZXIuZGF0YSkKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIHVwZGF0ZShzZWxmLCB2YWx1ZSk6CiAgICBpZiBjeXRob24uY29tcGlsZWQ6CiAgICAgICMgV2Ugd2lsbCBob2xkIHRoZSBHSUwgdGhyb3VnaG91dCB0aGUgZW50aXJlIF91cGRhdGUuCiAgICAgIHNlbGYuX3VwZGF0ZSh2YWx1ZSkKICAgIGVsc2U6CiAgICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgICBzZWxmLl91cGRhdGUodmFsdWUpCgogIGRlZiBfdXBkYXRlKHNlbGYsIHZhbHVlKToKICAgIGlmIGN5dGhvbi5jb21waWxlZDoKICAgICAgaXZhbHVlID0gdmFsdWUKICAgIGVsc2U6CiAgICAgIGl2YWx1ZSA9IGludCh2YWx1ZSkKICAgIHNlbGYuZGF0YS5jb3VudCA9IHNlbGYuZGF0YS5jb3VudCArIDEKICAgIHNlbGYuZGF0YS5zdW0gPSBzZWxmLmRhdGEuc3VtICsgaXZhbHVlCiAgICBpZiBpdmFsdWUgPCBzZWxmLmRhdGEubWluOgogICAgICBzZWxmLmRhdGEubWluID0gaXZhbHVlCiAgICBpZiBpdmFsdWUgPiBzZWxmLmRhdGEubWF4OgogICAgICBzZWxmLmRhdGEubWF4ID0gaXZhbHVlCgogIGRlZiBnZXRfY3VtdWxhdGl2ZShzZWxmKToKICAgICMgdHlwZTogKCkgLT4gRGlzdHJpYnV0aW9uRGF0YQogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5kYXRhLmdldF9jdW11bGF0aXZlKCkKCiAgZGVmIHRvX3J1bm5lcl9hcGlfdXNlcl9tZXRyaWMoc2VsZiwgbWV0cmljX25hbWUpOgogICAgcmV0dXJuIGJlYW1fZm5fYXBpX3BiMi5NZXRyaWNzLlVzZXIoCiAgICAgICAgbWV0cmljX25hbWU9bWV0cmljX25hbWUudG9fcnVubmVyX2FwaSgpLAogICAgICAgIGRpc3RyaWJ1dGlvbl9kYXRhPXNlbGYuZ2V0X2N1bXVsYXRpdmUoKS50b19ydW5uZXJfYXBpKCkpCgogIGRlZiB0b19ydW5uZXJfYXBpX21vbml0b3JpbmdfaW5mbyhzZWxmLCBuYW1lLCB0cmFuc2Zvcm1faWQpOgogICAgZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzIGltcG9ydCBtb25pdG9yaW5nX2luZm9zCiAgICByZXR1cm4gbW9uaXRvcmluZ19pbmZvcy5pbnQ2NF91c2VyX2Rpc3RyaWJ1dGlvbigKICAgICAgICBuYW1lLm5hbWVzcGFjZSwKICAgICAgICBuYW1lLm5hbWUsCiAgICAgICAgc2VsZi5nZXRfY3VtdWxhdGl2ZSgpLnRvX3J1bm5lcl9hcGlfbW9uaXRvcmluZ19pbmZvKCksCiAgICAgICAgcHRyYW5zZm9ybT10cmFuc2Zvcm1faWQpCgoKY2xhc3MgR2F1Z2VDZWxsKE1ldHJpY0NlbGwpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVHJhY2tzIHRoZSBjdXJyZW50IHZhbHVlIGFuZCBkZWx0YSBmb3IgYSBnYXVnZSBtZXRyaWMuCgogIEVhY2ggY2VsbCB0cmFja3MgdGhlIHN0YXRlIG9mIGEgbWV0cmljIGluZGVwZW5kZW50bHkgcGVyIGNvbnRleHQgcGVyIGJ1bmRsZS4KICBUaGVyZWZvcmUsIGVhY2ggbWV0cmljIGhhcyBhIGRpZmZlcmVudCBjZWxsIGluIGVhY2ggYnVuZGxlLCB0aGF0IGlzIGxhdGVyCiAgYWdncmVnYXRlZC4KCiAgVGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgogICAgc3VwZXIoR2F1Z2VDZWxsLCBzZWxmKS5fX2luaXRfXygqYXJncykKICAgIHNlbGYuZGF0YSA9IEdhdWdlQWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50KCkKCiAgZGVmIHJlc2V0KHNlbGYpOgogICAgc2VsZi5kYXRhID0gR2F1Z2VBZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnQoKQoKICBkZWYgY29tYmluZShzZWxmLCBvdGhlcik6CiAgICAjIHR5cGU6IChHYXVnZUNlbGwpIC0+IEdhdWdlQ2VsbAogICAgcmVzdWx0ID0gR2F1Z2VDZWxsKCkKICAgIHJlc3VsdC5kYXRhID0gc2VsZi5kYXRhLmNvbWJpbmUob3RoZXIuZGF0YSkKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIHNldChzZWxmLCB2YWx1ZSk6CiAgICBzZWxmLnVwZGF0ZSh2YWx1ZSkKCiAgZGVmIHVwZGF0ZShzZWxmLCB2YWx1ZSk6CiAgICB2YWx1ZSA9IGludCh2YWx1ZSkKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgIyBTZXQgdGhlIHZhbHVlIGRpcmVjdGx5IHdpdGhvdXQgY2hlY2tpbmcgdGltZXN0YW1wLCBiZWNhdXNlCiAgICAgICMgdGhpcyB2YWx1ZSBpcyBuYXR1cmFsbHkgdGhlIGxhdGVzdCB2YWx1ZS4KICAgICAgc2VsZi5kYXRhLnZhbHVlID0gdmFsdWUKICAgICAgc2VsZi5kYXRhLnRpbWVzdGFtcCA9IHRpbWUudGltZSgpCgogIGRlZiBnZXRfY3VtdWxhdGl2ZShzZWxmKToKICAgICMgdHlwZTogKCkgLT4gR2F1Z2VEYXRhCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLmRhdGEuZ2V0X2N1bXVsYXRpdmUoKQoKICBkZWYgdG9fcnVubmVyX2FwaV91c2VyX21ldHJpYyhzZWxmLCBtZXRyaWNfbmFtZSk6CiAgICByZXR1cm4gYmVhbV9mbl9hcGlfcGIyLk1ldHJpY3MuVXNlcigKICAgICAgICBtZXRyaWNfbmFtZT1tZXRyaWNfbmFtZS50b19ydW5uZXJfYXBpKCksCiAgICAgICAgZ2F1Z2VfZGF0YT1zZWxmLmdldF9jdW11bGF0aXZlKCkudG9fcnVubmVyX2FwaSgpKQoKICBkZWYgdG9fcnVubmVyX2FwaV9tb25pdG9yaW5nX2luZm8oc2VsZiwgbmFtZSwgdHJhbnNmb3JtX2lkKToKICAgIGZyb20gYXBhY2hlX2JlYW0ubWV0cmljcyBpbXBvcnQgbW9uaXRvcmluZ19pbmZvcwogICAgcmV0dXJuIG1vbml0b3JpbmdfaW5mb3MuaW50NjRfdXNlcl9nYXVnZSgKICAgICAgICBuYW1lLm5hbWVzcGFjZSwKICAgICAgICBuYW1lLm5hbWUsCiAgICAgICAgc2VsZi5nZXRfY3VtdWxhdGl2ZSgpLnRvX3J1bm5lcl9hcGlfbW9uaXRvcmluZ19pbmZvKCksCiAgICAgICAgcHRyYW5zZm9ybT10cmFuc2Zvcm1faWQpCgoKY2xhc3MgRGlzdHJpYnV0aW9uUmVzdWx0KG9iamVjdCk6CiAgIiIiVGhlIHJlc3VsdCBvZiBhIERpc3RyaWJ1dGlvbiBtZXRyaWMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgogICAgIyB0eXBlOiAoRGlzdHJpYnV0aW9uRGF0YSkgLT4gTm9uZQogICAgc2VsZi5kYXRhID0gZGF0YQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIERpc3RyaWJ1dGlvblJlc3VsdCk6CiAgICAgIHJldHVybiBzZWxmLmRhdGEgPT0gb3RoZXIuZGF0YQogICAgZWxzZToKICAgICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuZGF0YSkKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnRGlzdHJpYnV0aW9uUmVzdWx0KHN1bT17fSwgY291bnQ9e30sIG1pbj17fSwgbWF4PXt9KScuZm9ybWF0KAogICAgICAgIHNlbGYuc3VtLCBzZWxmLmNvdW50LCBzZWxmLm1pbiwgc2VsZi5tYXgpCgogIEBwcm9wZXJ0eQogIGRlZiBtYXgoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kYXRhLm1heCBpZiBzZWxmLmRhdGEuY291bnQgZWxzZSBOb25lCgogIEBwcm9wZXJ0eQogIGRlZiBtaW4oc2VsZik6CiAgICByZXR1cm4gc2VsZi5kYXRhLm1pbiBpZiBzZWxmLmRhdGEuY291bnQgZWxzZSBOb25lCgogIEBwcm9wZXJ0eQogIGRlZiBjb3VudChzZWxmKToKICAgIHJldHVybiBzZWxmLmRhdGEuY291bnQKCiAgQHByb3BlcnR5CiAgZGVmIHN1bShzZWxmKToKICAgIHJldHVybiBzZWxmLmRhdGEuc3VtCgogIEBwcm9wZXJ0eQogIGRlZiBtZWFuKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgZmxvYXQgbWVhbiBvZiB0aGUgZGlzdHJpYnV0aW9uLgoKICAgIElmIHRoZSBkaXN0cmlidXRpb24gY29udGFpbnMgbm8gZWxlbWVudHMsIGl0IHJldHVybnMgTm9uZS4KICAgICIiIgogICAgaWYgc2VsZi5kYXRhLmNvdW50ID09IDA6CiAgICAgIHJldHVybiBOb25lCiAgICByZXR1cm4gc2VsZi5kYXRhLnN1bSAvIHNlbGYuZGF0YS5jb3VudAoKCmNsYXNzIEdhdWdlUmVzdWx0KG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgogICAgIyB0eXBlOiAoR2F1Z2VEYXRhKSAtPiBOb25lCiAgICBzZWxmLmRhdGEgPSBkYXRhCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgaXNpbnN0YW5jZShvdGhlciwgR2F1Z2VSZXN1bHQpOgogICAgICByZXR1cm4gc2VsZi5kYXRhID09IG90aGVyLmRhdGEKICAgIGVsc2U6CiAgICAgIHJldHVybiBGYWxzZQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLmRhdGEpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzxHYXVnZVJlc3VsdCh2YWx1ZT17fSwgdGltZXN0YW1wPXt9KT4nLmZvcm1hdCgKICAgICAgICBzZWxmLnZhbHVlLCBzZWxmLnRpbWVzdGFtcCkKCiAgQHByb3BlcnR5CiAgZGVmIHZhbHVlKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZGF0YS52YWx1ZQoKICBAcHJvcGVydHkKICBkZWYgdGltZXN0YW1wKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZGF0YS50aW1lc3RhbXAKCgpjbGFzcyBHYXVnZURhdGEob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGRhdGEgYWJvdXQgYSBnYXVnZSBtZXRyaWMuCgogIEdhdWdlIG1ldHJpY3MgYXJlIHJlc3RyaWN0ZWQgdG8gaW50ZWdlcnMgb25seS4KCiAgVGhpcyBvYmplY3QgaXMgbm90IHRocmVhZCBzYWZlLCBzbyBpdCdzIG5vdCBzdXBwb3NlZCB0byBiZSBtb2RpZmllZAogIGJ5IG90aGVyIHRoYW4gdGhlIEdhdWdlQ2VsbCB0aGF0IGNvbnRhaW5zIGl0LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgdGltZXN0YW1wPU5vbmUpOgogICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcCBpZiB0aW1lc3RhbXAgaXMgbm90IE5vbmUgZWxzZSAwCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUgYW5kIHNlbGYudGltZXN0YW1wID09IG90aGVyLnRpbWVzdGFtcAoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgoc2VsZi52YWx1ZSwgc2VsZi50aW1lc3RhbXApKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8R2F1Z2VEYXRhKHZhbHVlPXt9LCB0aW1lc3RhbXA9e30pPicuZm9ybWF0KAogICAgICAgIHNlbGYudmFsdWUsIHNlbGYudGltZXN0YW1wKQoKICBkZWYgZ2V0X2N1bXVsYXRpdmUoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IEdhdWdlRGF0YQogICAgcmV0dXJuIEdhdWdlRGF0YShzZWxmLnZhbHVlLCB0aW1lc3RhbXA9c2VsZi50aW1lc3RhbXApCgogIGRlZiBjb21iaW5lKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKE9wdGlvbmFsW0dhdWdlRGF0YV0pIC0+IEdhdWdlRGF0YQogICAgaWYgb3RoZXIgaXMgTm9uZToKICAgICAgcmV0dXJuIHNlbGYKCiAgICBpZiBvdGhlci50aW1lc3RhbXAgPiBzZWxmLnRpbWVzdGFtcDoKICAgICAgcmV0dXJuIG90aGVyCiAgICBlbHNlOgogICAgICByZXR1cm4gc2VsZgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHNpbmdsZXRvbih2YWx1ZSwgdGltZXN0YW1wPU5vbmUpOgogICAgIyB0eXBlOiAoLi4uKSAtPiBHYXVnZURhdGEKICAgIHJldHVybiBHYXVnZURhdGEodmFsdWUsIHRpbWVzdGFtcD10aW1lc3RhbXApCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBiZWFtX2ZuX2FwaV9wYjIuTWV0cmljcy5Vc2VyLkdhdWdlRGF0YQogICAgcmV0dXJuIGJlYW1fZm5fYXBpX3BiMi5NZXRyaWNzLlVzZXIuR2F1Z2VEYXRhKAogICAgICAgIHZhbHVlPXNlbGYudmFsdWUsIHRpbWVzdGFtcD1wcm90b191dGlscy50b19UaW1lc3RhbXAoc2VsZi50aW1lc3RhbXApKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90byk6CiAgICAjIHR5cGU6IChiZWFtX2ZuX2FwaV9wYjIuTWV0cmljcy5Vc2VyLkdhdWdlRGF0YSkgLT4gR2F1Z2VEYXRhCiAgICByZXR1cm4gR2F1Z2VEYXRhKAogICAgICAgIHByb3RvLnZhbHVlLCB0aW1lc3RhbXA9cHJvdG9fdXRpbHMuZnJvbV9UaW1lc3RhbXAocHJvdG8udGltZXN0YW1wKSkKCiAgZGVmIHRvX3J1bm5lcl9hcGlfbW9uaXRvcmluZ19pbmZvKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIE1ldHJpYyB3aXRoIHRoaXMgdmFsdWUgZm9yIHVzZSBpbiBhIE1vbml0b3JpbmdJbmZvLiIiIgogICAgcmV0dXJuIG1ldHJpY3NfcGIyLk1ldHJpYygKICAgICAgICBjb3VudGVyX2RhdGE9bWV0cmljc19wYjIuQ291bnRlckRhdGEoaW50NjRfdmFsdWU9c2VsZi52YWx1ZSkpCgoKY2xhc3MgRGlzdHJpYnV0aW9uRGF0YShvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgVGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgZGF0YSBhYm91dCBhIGRpc3RyaWJ1dGlvbiBtZXRyaWMuCgogIERpc3RyaWJ1dGlvbiBtZXRyaWNzIGFyZSByZXN0cmljdGVkIHRvIGRpc3RyaWJ1dGlvbnMgb2YgaW50ZWdlcnMgb25seS4KCiAgVGhpcyBvYmplY3QgaXMgbm90IHRocmVhZCBzYWZlLCBzbyBpdCdzIG5vdCBzdXBwb3NlZCB0byBiZSBtb2RpZmllZAogIGJ5IG90aGVyIHRoYW4gdGhlIERpc3RyaWJ1dGlvbkNlbGwgdGhhdCBjb250YWlucyBpdC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc3VtLCBjb3VudCwgbWluLCBtYXgpOgogICAgaWYgY291bnQ6CiAgICAgIHNlbGYuc3VtID0gc3VtCiAgICAgIHNlbGYuY291bnQgPSBjb3VudAogICAgICBzZWxmLm1pbiA9IG1pbgogICAgICBzZWxmLm1heCA9IG1heAogICAgZWxzZToKICAgICAgc2VsZi5zdW0gPSBzZWxmLmNvdW50ID0gMAogICAgICBzZWxmLm1pbiA9IDIqKjYzIC0gMQogICAgICAjIEF2b2lkIFdpbXBsaWNpdGx5LXVuc2lnbmVkLWxpdGVyYWwgY2F1c2VkIGJ5IC0yKio2My4KICAgICAgc2VsZi5tYXggPSAtc2VsZi5taW4gLSAxCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICgKICAgICAgICBzZWxmLnN1bSA9PSBvdGhlci5zdW0gYW5kIHNlbGYuY291bnQgPT0gb3RoZXIuY291bnQgYW5kCiAgICAgICAgc2VsZi5taW4gPT0gb3RoZXIubWluIGFuZCBzZWxmLm1heCA9PSBvdGhlci5tYXgpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKChzZWxmLnN1bSwgc2VsZi5jb3VudCwgc2VsZi5taW4sIHNlbGYubWF4KSkKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnRGlzdHJpYnV0aW9uRGF0YShzdW09e30sIGNvdW50PXt9LCBtaW49e30sIG1heD17fSknLmZvcm1hdCgKICAgICAgICBzZWxmLnN1bSwgc2VsZi5jb3VudCwgc2VsZi5taW4sIHNlbGYubWF4KQoKICBkZWYgZ2V0X2N1bXVsYXRpdmUoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IERpc3RyaWJ1dGlvbkRhdGEKICAgIHJldHVybiBEaXN0cmlidXRpb25EYXRhKHNlbGYuc3VtLCBzZWxmLmNvdW50LCBzZWxmLm1pbiwgc2VsZi5tYXgpCgogIGRlZiBjb21iaW5lKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKE9wdGlvbmFsW0Rpc3RyaWJ1dGlvbkRhdGFdKSAtPiBEaXN0cmlidXRpb25EYXRhCiAgICBpZiBvdGhlciBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZgoKICAgIHJldHVybiBEaXN0cmlidXRpb25EYXRhKAogICAgICAgIHNlbGYuc3VtICsgb3RoZXIuc3VtLAogICAgICAgIHNlbGYuY291bnQgKyBvdGhlci5jb3VudCwKICAgICAgICBzZWxmLm1pbiBpZiBzZWxmLm1pbiA8IG90aGVyLm1pbiBlbHNlIG90aGVyLm1pbiwKICAgICAgICBzZWxmLm1heCBpZiBzZWxmLm1heCA+IG90aGVyLm1heCBlbHNlIG90aGVyLm1heCkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBzaW5nbGV0b24odmFsdWUpOgogICAgcmV0dXJuIERpc3RyaWJ1dGlvbkRhdGEodmFsdWUsIDEsIHZhbHVlLCB2YWx1ZSkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGJlYW1fZm5fYXBpX3BiMi5NZXRyaWNzLlVzZXIuRGlzdHJpYnV0aW9uRGF0YQogICAgcmV0dXJuIGJlYW1fZm5fYXBpX3BiMi5NZXRyaWNzLlVzZXIuRGlzdHJpYnV0aW9uRGF0YSgKICAgICAgICBjb3VudD1zZWxmLmNvdW50LCBzdW09c2VsZi5zdW0sIG1pbj1zZWxmLm1pbiwgbWF4PXNlbGYubWF4KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90byk6CiAgICAjIHR5cGU6IChiZWFtX2ZuX2FwaV9wYjIuTWV0cmljcy5Vc2VyLkRpc3RyaWJ1dGlvbkRhdGEpIC0+IERpc3RyaWJ1dGlvbkRhdGEKICAgIHJldHVybiBEaXN0cmlidXRpb25EYXRhKHByb3RvLnN1bSwgcHJvdG8uY291bnQsIHByb3RvLm1pbiwgcHJvdG8ubWF4KQoKICBkZWYgdG9fcnVubmVyX2FwaV9tb25pdG9yaW5nX2luZm8oc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgTWV0cmljIHdpdGggdGhpcyB2YWx1ZSBmb3IgdXNlIGluIGEgTW9uaXRvcmluZ0luZm8uIiIiCiAgICByZXR1cm4gbWV0cmljc19wYjIuTWV0cmljKAogICAgICAgIGRpc3RyaWJ1dGlvbl9kYXRhPW1ldHJpY3NfcGIyLkRpc3RyaWJ1dGlvbkRhdGEoCiAgICAgICAgICAgIGludF9kaXN0cmlidXRpb25fZGF0YT1tZXRyaWNzX3BiMi5JbnREaXN0cmlidXRpb25EYXRhKAogICAgICAgICAgICAgICAgY291bnQ9c2VsZi5jb3VudCwgc3VtPXNlbGYuc3VtLCBtaW49c2VsZi5taW4sIG1heD1zZWxmLm1heCkpKQoKCmNsYXNzIE1ldHJpY0FnZ3JlZ2F0b3Iob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEJhc2UgaW50ZXJmYWNlIGZvciBhZ2dyZWdhdGluZyBtZXRyaWMgZGF0YSBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLiIiIgogIGRlZiBpZGVudGl0eV9lbGVtZW50KHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgaWRlbnRpY2FsIGVsZW1lbnQgb2YgYW4gQWdncmVnYXRpb24uCgogICAgRm9yIHRoZSBpZGVudGl0eSBlbGVtZW50LCBpdCBtdXN0IGhvbGQgdGhhdAogICAgIEFnZ3JlZ2F0b3IuY29tYmluZShhbnlfZWxlbWVudCwgaWRlbnRpdHlfZWxlbWVudCkgPT0gYW55X2VsZW1lbnQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGNvbWJpbmUoc2VsZiwgeCwgeSk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiByZXN1bHQoc2VsZiwgeCk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgQ291bnRlckFnZ3JlZ2F0b3IoTWV0cmljQWdncmVnYXRvcik6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBZ2dyZWdhdG9yIGZvciBDb3VudGVyIG1ldHJpYyBkYXRhIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCgogIFZhbHVlcyBhZ2dyZWdhdGVkIHNob3VsZCBiZSBgYGludGBgIG9iamVjdHMuCiAgIiIiCiAgQHN0YXRpY21ldGhvZAogIGRlZiBpZGVudGl0eV9lbGVtZW50KCk6CiAgICAjIHR5cGU6ICgpIC0+IGludAogICAgcmV0dXJuIDAKCiAgZGVmIGNvbWJpbmUoc2VsZiwgeCwgeSk6CiAgICAjIHR5cGU6ICguLi4pIC0+IGludAogICAgcmV0dXJuIGludCh4KSArIGludCh5KQoKICBkZWYgcmVzdWx0KHNlbGYsIHgpOgogICAgIyB0eXBlOiAoLi4uKSAtPiBpbnQKICAgIHJldHVybiBpbnQoeCkKCgpjbGFzcyBEaXN0cmlidXRpb25BZ2dyZWdhdG9yKE1ldHJpY0FnZ3JlZ2F0b3IpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQWdncmVnYXRvciBmb3IgRGlzdHJpYnV0aW9uIG1ldHJpYyBkYXRhIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCgogIFZhbHVlcyBhZ2dyZWdhdGVkIHNob3VsZCBiZSBgYERpc3RyaWJ1dGlvbkRhdGFgYCBvYmplY3RzLgogICIiIgogIEBzdGF0aWNtZXRob2QKICBkZWYgaWRlbnRpdHlfZWxlbWVudCgpOgogICAgIyB0eXBlOiAoKSAtPiBEaXN0cmlidXRpb25EYXRhCiAgICByZXR1cm4gRGlzdHJpYnV0aW9uRGF0YSgwLCAwLCAyKio2MyAtIDEsIC0yKio2MykKCiAgZGVmIGNvbWJpbmUoc2VsZiwgeCwgeSk6CiAgICAjIHR5cGU6IChEaXN0cmlidXRpb25EYXRhLCBEaXN0cmlidXRpb25EYXRhKSAtPiBEaXN0cmlidXRpb25EYXRhCiAgICByZXR1cm4geC5jb21iaW5lKHkpCgogIGRlZiByZXN1bHQoc2VsZiwgeCk6CiAgICAjIHR5cGU6IChEaXN0cmlidXRpb25EYXRhKSAtPiBEaXN0cmlidXRpb25SZXN1bHQKICAgIHJldHVybiBEaXN0cmlidXRpb25SZXN1bHQoeC5nZXRfY3VtdWxhdGl2ZSgpKQoKCmNsYXNzIEdhdWdlQWdncmVnYXRvcihNZXRyaWNBZ2dyZWdhdG9yKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEFnZ3JlZ2F0b3IgZm9yIEdhdWdlIG1ldHJpYyBkYXRhIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCgogIFZhbHVlcyBhZ2dyZWdhdGVkIHNob3VsZCBiZSBgYEdhdWdlRGF0YWBgIG9iamVjdHMuCiAgIiIiCiAgQHN0YXRpY21ldGhvZAogIGRlZiBpZGVudGl0eV9lbGVtZW50KCk6CiAgICAjIHR5cGU6ICgpIC0+IEdhdWdlRGF0YQogICAgcmV0dXJuIEdhdWdlRGF0YShOb25lLCB0aW1lc3RhbXA9MCkKCiAgZGVmIGNvbWJpbmUoc2VsZiwgeCwgeSk6CiAgICAjIHR5cGU6IChHYXVnZURhdGEsIEdhdWdlRGF0YSkgLT4gR2F1Z2VEYXRhCiAgICByZXN1bHQgPSB4LmNvbWJpbmUoeSkKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIHJlc3VsdChzZWxmLCB4KToKICAgICMgdHlwZTogKEdhdWdlRGF0YSkgLT4gR2F1Z2VSZXN1bHQKICAgIHJldHVybiBHYXVnZVJlc3VsdCh4LmdldF9jdW11bGF0aXZlKCkpCpR9lCiMC2Zha2VfY3l0aG9ulGpdMQEASypLK4eUjBNNZXRyaWNDZWxsLl9faW5pdF9flGpWMQEASzxLPYeUjBFNZXRyaWNDZWxsLnVwZGF0ZZRqVjEBAEs/S0CHlIwZTWV0cmljQ2VsbC5nZXRfY3VtdWxhdGl2ZZRqVjEBAEtCS0OHlIwVTWV0cmljQ2VsbC5fX3JlZHVjZV9flGpWMQEAS0VLRoeUjApNZXRyaWNDZWxslGpdMQEASzJLRoeUjBRDb3VudGVyQ2VsbC5fX2luaXRfX5RqVjEBAEtUS1aHlIwRQ291bnRlckNlbGwucmVzZXSUalYxAQBLWEtZh5SME0NvdW50ZXJDZWxsLmNvbWJpbmWUalYxAQBLW0tfh5SMD0NvdW50ZXJDZWxsLmluY5RqVjEBAEthS2KHlIwPQ291bnRlckNlbGwuZGVjlGpWMQEAS2RLZYeUjBJDb3VudGVyQ2VsbC51cGRhdGWUalYxAQBLZ0tuh5SMGkNvdW50ZXJDZWxsLmdldF9jdW11bGF0aXZllGpWMQEAS3BLc4eUjCVDb3VudGVyQ2VsbC50b19ydW5uZXJfYXBpX3VzZXJfbWV0cmljlGpWMQEAS3VLeIeUjClDb3VudGVyQ2VsbC50b19ydW5uZXJfYXBpX21vbml0b3JpbmdfaW5mb5RqVjEBAEt6S4KHlIwLQ291bnRlckNlbGyUal0xAQBLSUuCh5SMGURpc3RyaWJ1dGlvbkNlbGwuX19pbml0X1+UalYxAQBLkEuSh5SMFkRpc3RyaWJ1dGlvbkNlbGwucmVzZXSUalYxAQBLlEuVh5SMGERpc3RyaWJ1dGlvbkNlbGwuY29tYmluZZRqVjEBAEuXS5uHlIwXRGlzdHJpYnV0aW9uQ2VsbC51cGRhdGWUalYxAQBLnUujh5SMGERpc3RyaWJ1dGlvbkNlbGwuX3VwZGF0ZZRqVjEBAEulS6+HlIwfRGlzdHJpYnV0aW9uQ2VsbC5nZXRfY3VtdWxhdGl2ZZRqVjEBAEuxS7SHlIwqRGlzdHJpYnV0aW9uQ2VsbC50b19ydW5uZXJfYXBpX3VzZXJfbWV0cmljlGpWMQEAS7ZLuYeUjC5EaXN0cmlidXRpb25DZWxsLnRvX3J1bm5lcl9hcGlfbW9uaXRvcmluZ19pbmZvlGpWMQEAS7tLwYeUjBBEaXN0cmlidXRpb25DZWxslGpdMQEAS4VLwYeUjBJHYXVnZUNlbGwuX19pbml0X1+UalYxAQBLz0vRh5SMD0dhdWdlQ2VsbC5yZXNldJRqVjEBAEvTS9SHlIwRR2F1Z2VDZWxsLmNvbWJpbmWUalYxAQBL1kvah5SMDUdhdWdlQ2VsbC5zZXSUalYxAQBL3Evdh5SMEEdhdWdlQ2VsbC51cGRhdGWUalYxAQBL30vlh5SMGEdhdWdlQ2VsbC5nZXRfY3VtdWxhdGl2ZZRqVjEBAEvnS+qHlIwjR2F1Z2VDZWxsLnRvX3J1bm5lcl9hcGlfdXNlcl9tZXRyaWOUalYxAQBL7Evvh5SMJ0dhdWdlQ2VsbC50b19ydW5uZXJfYXBpX21vbml0b3JpbmdfaW5mb5RqVjEBAEvxS/eHlIwJR2F1Z2VDZWxslGpdMQEAS8RL94eUjBtEaXN0cmlidXRpb25SZXN1bHQuX19pbml0X1+UalYxAQBL/Ev+h5SMGURpc3RyaWJ1dGlvblJlc3VsdC5fX2VxX1+UalYxAQBNAAFNBAGHlIwbRGlzdHJpYnV0aW9uUmVzdWx0Ll9faGFzaF9flGpWMQEATQYBTQcBh5SMGURpc3RyaWJ1dGlvblJlc3VsdC5fX25lX1+UalYxAQBNCQFNCwGHlIwbRGlzdHJpYnV0aW9uUmVzdWx0Ll9fcmVwcl9flGpWMQEATQ0BTQ8Bh5SMFkRpc3RyaWJ1dGlvblJlc3VsdC5tYXiUalYxAQBNEQFNEwGHlIwWRGlzdHJpYnV0aW9uUmVzdWx0Lm1pbpRqVjEBAE0VAU0XAYeUjBhEaXN0cmlidXRpb25SZXN1bHQuY291bnSUalYxAQBNGQFNGwGHlIwWRGlzdHJpYnV0aW9uUmVzdWx0LnN1bZRqVjEBAE0dAU0fAYeUjBdEaXN0cmlidXRpb25SZXN1bHQubWVhbpRqVjEBAE0hAU0pAYeUjBJEaXN0cmlidXRpb25SZXN1bHSUal0xAQBL+k0pAYeUjBRHYXVnZVJlc3VsdC5fX2luaXRfX5RqVjEBAE0tAU0vAYeUjBJHYXVnZVJlc3VsdC5fX2VxX1+UalYxAQBNMQFNNQGHlIwUR2F1Z2VSZXN1bHQuX19oYXNoX1+UalYxAQBNNwFNOAGHlIwSR2F1Z2VSZXN1bHQuX19uZV9flGpWMQEATToBTTwBh5SMFEdhdWdlUmVzdWx0Ll9fcmVwcl9flGpWMQEATT4BTUABh5SMEUdhdWdlUmVzdWx0LnZhbHVllGpWMQEATUIBTUQBh5SMFUdhdWdlUmVzdWx0LnRpbWVzdGFtcJRqVjEBAE1GAU1IAYeUjAtHYXVnZVJlc3VsdJRqXTEBAE0sAU1IAYeUjBJHYXVnZURhdGEuX19pbml0X1+UalYxAQBNVQFNVwGHlIwQR2F1Z2VEYXRhLl9fZXFfX5RqVjEBAE1ZAU1aAYeUjBJHYXVnZURhdGEuX19oYXNoX1+UalYxAQBNXAFNXQGHlIwQR2F1Z2VEYXRhLl9fbmVfX5RqVjEBAE1fAU1hAYeUjBJHYXVnZURhdGEuX19yZXByX1+UalYxAQBNYwFNZQGHlIwYR2F1Z2VEYXRhLmdldF9jdW11bGF0aXZllGpWMQEATWcBTWkBh5SMEUdhdWdlRGF0YS5jb21iaW5llGpWMQEATWsBTXMBh5SME0dhdWdlRGF0YS5zaW5nbGV0b26UalYxAQBNdQFNeAGHlIwXR2F1Z2VEYXRhLnRvX3J1bm5lcl9hcGmUalYxAQBNegFNfQGHlIwZR2F1Z2VEYXRhLmZyb21fcnVubmVyX2FwaZRqVjEBAE1/AU2DAYeUjCdHYXVnZURhdGEudG9fcnVubmVyX2FwaV9tb25pdG9yaW5nX2luZm+UalYxAQBNhQFNiAGHlIwJR2F1Z2VEYXRhlGpdMQEATUsBTYgBh5SMGURpc3RyaWJ1dGlvbkRhdGEuX19pbml0X1+UalYxAQBNlQFNnwGHlIwXRGlzdHJpYnV0aW9uRGF0YS5fX2VxX1+UalYxAQBNoQFNpAGHlIwZRGlzdHJpYnV0aW9uRGF0YS5fX2hhc2hfX5RqVjEBAE2mAU2nAYeUjBdEaXN0cmlidXRpb25EYXRhLl9fbmVfX5RqVjEBAE2pAU2rAYeUjBlEaXN0cmlidXRpb25EYXRhLl9fcmVwcl9flGpWMQEATa0BTa8Bh5SMH0Rpc3RyaWJ1dGlvbkRhdGEuZ2V0X2N1bXVsYXRpdmWUalYxAQBNsQFNswGHlIwYRGlzdHJpYnV0aW9uRGF0YS5jb21iaW5llGpWMQEATbUBTb4Bh5SMGkRpc3RyaWJ1dGlvbkRhdGEuc2luZ2xldG9ulGpWMQEATcABTcIBh5SMHkRpc3RyaWJ1dGlvbkRhdGEudG9fcnVubmVyX2FwaZRqVjEBAE3EAU3HAYeUjCBEaXN0cmlidXRpb25EYXRhLmZyb21fcnVubmVyX2FwaZRqVjEBAE3JAU3MAYeUjC5EaXN0cmlidXRpb25EYXRhLnRvX3J1bm5lcl9hcGlfbW9uaXRvcmluZ19pbmZvlGpWMQEATc4BTdMBh5SMEERpc3RyaWJ1dGlvbkRhdGGUal0xAQBNiwFN0wGHlIwhTWV0cmljQWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50lGpWMQEATdoBTeABh5SMGE1ldHJpY0FnZ3JlZ2F0b3IuY29tYmluZZRqVjEBAE3iAU3jAYeUjBdNZXRyaWNBZ2dyZWdhdG9yLnJlc3VsdJRqVjEBAE3lAU3mAYeUjBBNZXRyaWNBZ2dyZWdhdG9ylGpdMQEATdYBTeYBh5SMIkNvdW50ZXJBZ2dyZWdhdG9yLmlkZW50aXR5X2VsZW1lbnSUalYxAQBN8AFN8wGHlIwZQ291bnRlckFnZ3JlZ2F0b3IuY29tYmluZZRqVjEBAE31AU33AYeUjBhDb3VudGVyQWdncmVnYXRvci5yZXN1bHSUalYxAQBN+QFN+wGHlIwRQ291bnRlckFnZ3JlZ2F0b3KUal0xAQBN6QFN+wGHlIwnRGlzdHJpYnV0aW9uQWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50lGpWMQEATQUCTQgCh5SMHkRpc3RyaWJ1dGlvbkFnZ3JlZ2F0b3IuY29tYmluZZRqVjEBAE0KAk0MAoeUjB1EaXN0cmlidXRpb25BZ2dyZWdhdG9yLnJlc3VsdJRqVjEBAE0OAk0QAoeUjBZEaXN0cmlidXRpb25BZ2dyZWdhdG9ylGpdMQEATf4BTRACh5SMIEdhdWdlQWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50lGpWMQEATRoCTR0Ch5SMF0dhdWdlQWdncmVnYXRvci5jb21iaW5llGpWMQEATR8CTSICh5SMFkdhdWdlQWdncmVnYXRvci5yZXN1bHSUalYxAQBNJAJNJgKHlIwPR2F1Z2VBZ2dyZWdhdG9ylGpdMQEATRMCTSYCh5R1fZQojBJEaXN0cmlidXRpb25SZXN1bHSUajcDAACMC0dhdWdlUmVzdWx0lGo3AwAAdYwZYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxsc5R0lIwaYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWOUKFgaHwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKVXNlci1mYWNpbmcgY2xhc3NlcyBmb3IgTWV0cmljcyBBUEkuCgpUaGUgY2xhc3NlcyBpbiB0aGlzIGZpbGUgYWxsb3cgdXNlcnMgdG8gZGVmaW5lIGFuZCB1c2UgbWV0cmljcyB0byBiZSBjb2xsZWN0ZWQKYW5kIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZWlyIHBpcGVsaW5lIGV4ZWN1dGlvbi4KCi0gTWV0cmljcyAtIFRoaXMgY2xhc3MgbGV0cyBwaXBlbGluZSBhbmQgdHJhbnNmb3JtIHdyaXRlcnMgY3JlYXRlIGFuZCBhY2Nlc3MKICAgIG1ldHJpYyBvYmplY3RzIHN1Y2ggYXMgY291bnRlcnMsIGRpc3RyaWJ1dGlvbnMsIGV0Yy4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgaW5zcGVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcyBpbXBvcnQgY2VsbHMKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmV4ZWN1dGlvbiBpbXBvcnQgTWV0cmljVXBkYXRlcgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgQ291bnRlcgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgRGlzdHJpYnV0aW9uCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWNiYXNlIGltcG9ydCBHYXVnZQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgTWV0cmljTmFtZQoKX19hbGxfXyA9IFsnTWV0cmljcycsICdNZXRyaWNzRmlsdGVyJ10KCgpjbGFzcyBNZXRyaWNzKG9iamVjdCk6CiAgIiIiTGV0cyB1c2VycyBjcmVhdGUvYWNjZXNzIG1ldHJpYyBvYmplY3RzIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uIiIiCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfbmFtZXNwYWNlKG5hbWVzcGFjZSk6CiAgICBpZiBpbnNwZWN0LmlzY2xhc3MobmFtZXNwYWNlKToKICAgICAgcmV0dXJuICd7fS57fScuZm9ybWF0KG5hbWVzcGFjZS5fX21vZHVsZV9fLCBuYW1lc3BhY2UuX19uYW1lX18pCiAgICBlbGlmIGlzaW5zdGFuY2UobmFtZXNwYWNlLCBzdHIpOgogICAgICByZXR1cm4gbmFtZXNwYWNlCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmtub3duIG5hbWVzcGFjZSB0eXBlJykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBjb3VudGVyKG5hbWVzcGFjZSwgbmFtZSk6CiAgICAiIiJPYnRhaW5zIG9yIGNyZWF0ZXMgYSBDb3VudGVyIG1ldHJpYy4KCiAgICBBcmdzOgogICAgICBuYW1lc3BhY2U6IEEgY2xhc3Mgb3Igc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIG5hbWVzcGFjZSB0byBhIG1ldHJpYwogICAgICBuYW1lOiBBIHN0cmluZyB0aGF0IGdpdmVzIGEgdW5pcXVlIG5hbWUgdG8gYSBtZXRyaWMKCiAgICBSZXR1cm5zOgogICAgICBBIENvdW50ZXIgb2JqZWN0LgogICAgIiIiCiAgICBuYW1lc3BhY2UgPSBNZXRyaWNzLmdldF9uYW1lc3BhY2UobmFtZXNwYWNlKQogICAgcmV0dXJuIE1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIoTWV0cmljTmFtZShuYW1lc3BhY2UsIG5hbWUpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGRpc3RyaWJ1dGlvbihuYW1lc3BhY2UsIG5hbWUpOgogICAgIiIiT2J0YWlucyBvciBjcmVhdGVzIGEgRGlzdHJpYnV0aW9uIG1ldHJpYy4KCiAgICBEaXN0cmlidXRpb24gbWV0cmljcyBhcmUgcmVzdHJpY3RlZCB0byBpbnRlZ2VyLW9ubHkgZGlzdHJpYnV0aW9ucy4KCiAgICBBcmdzOgogICAgICBuYW1lc3BhY2U6IEEgY2xhc3Mgb3Igc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIG5hbWVzcGFjZSB0byBhIG1ldHJpYwogICAgICBuYW1lOiBBIHN0cmluZyB0aGF0IGdpdmVzIGEgdW5pcXVlIG5hbWUgdG8gYSBtZXRyaWMKCiAgICBSZXR1cm5zOgogICAgICBBIERpc3RyaWJ1dGlvbiBvYmplY3QuCiAgICAiIiIKICAgIG5hbWVzcGFjZSA9IE1ldHJpY3MuZ2V0X25hbWVzcGFjZShuYW1lc3BhY2UpCiAgICByZXR1cm4gTWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uKE1ldHJpY05hbWUobmFtZXNwYWNlLCBuYW1lKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnYXVnZShuYW1lc3BhY2UsIG5hbWUpOgogICAgIiIiT2J0YWlucyBvciBjcmVhdGVzIGEgR2F1Z2UgbWV0cmljLgoKICAgIEdhdWdlIG1ldHJpY3MgYXJlIHJlc3RyaWN0ZWQgdG8gaW50ZWdlci1vbmx5IHZhbHVlcy4KCiAgICBBcmdzOgogICAgICBuYW1lc3BhY2U6IEEgY2xhc3Mgb3Igc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIG5hbWVzcGFjZSB0byBhIG1ldHJpYwogICAgICBuYW1lOiBBIHN0cmluZyB0aGF0IGdpdmVzIGEgdW5pcXVlIG5hbWUgdG8gYSBtZXRyaWMKCiAgICBSZXR1cm5zOgogICAgICBBIERpc3RyaWJ1dGlvbiBvYmplY3QuCiAgICAiIiIKICAgIG5hbWVzcGFjZSA9IE1ldHJpY3MuZ2V0X25hbWVzcGFjZShuYW1lc3BhY2UpCiAgICByZXR1cm4gTWV0cmljcy5EZWxlZ2F0aW5nR2F1Z2UoTWV0cmljTmFtZShuYW1lc3BhY2UsIG5hbWUpKQoKICBjbGFzcyBEZWxlZ2F0aW5nQ291bnRlcihDb3VudGVyKToKICAgICIiIk1ldHJpY3MgQ291bnRlciB0aGF0IERlbGVnYXRlcyBmdW5jdGlvbmFsaXR5IHRvIE1ldHJpY3NFbnZpcm9ubWVudC4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRyaWNfbmFtZSk6CiAgICAgIHN1cGVyKE1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXIsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgc2VsZi5tZXRyaWNfbmFtZSA9IG1ldHJpY19uYW1lCiAgICAgIHNlbGYuaW5jID0gTWV0cmljVXBkYXRlcihjZWxscy5Db3VudGVyQ2VsbCwgbWV0cmljX25hbWUsIGRlZmF1bHQ9MSkKCiAgY2xhc3MgRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbihEaXN0cmlidXRpb24pOgogICAgIiIiTWV0cmljcyBEaXN0cmlidXRpb24gRGVsZWdhdGVzIGZ1bmN0aW9uYWxpdHkgdG8gTWV0cmljc0Vudmlyb25tZW50LiIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldHJpY19uYW1lKToKICAgICAgc3VwZXIoTWV0cmljcy5EZWxlZ2F0aW5nRGlzdHJpYnV0aW9uLCBzZWxmKS5fX2luaXRfXygpCiAgICAgIHNlbGYubWV0cmljX25hbWUgPSBtZXRyaWNfbmFtZQogICAgICBzZWxmLnVwZGF0ZSA9IE1ldHJpY1VwZGF0ZXIoY2VsbHMuRGlzdHJpYnV0aW9uQ2VsbCwgbWV0cmljX25hbWUpCgogIGNsYXNzIERlbGVnYXRpbmdHYXVnZShHYXVnZSk6CiAgICAiIiJNZXRyaWNzIEdhdWdlIHRoYXQgRGVsZWdhdGVzIGZ1bmN0aW9uYWxpdHkgdG8gTWV0cmljc0Vudmlyb25tZW50LiIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldHJpY19uYW1lKToKICAgICAgc3VwZXIoTWV0cmljcy5EZWxlZ2F0aW5nR2F1Z2UsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgc2VsZi5tZXRyaWNfbmFtZSA9IG1ldHJpY19uYW1lCiAgICAgIHNlbGYuc2V0ID0gTWV0cmljVXBkYXRlcihjZWxscy5HYXVnZUNlbGwsIG1ldHJpY19uYW1lKQoKCmNsYXNzIE1ldHJpY1Jlc3VsdHMob2JqZWN0KToKICBDT1VOVEVSUyA9ICJjb3VudGVycyIKICBESVNUUklCVVRJT05TID0gImRpc3RyaWJ1dGlvbnMiCiAgR0FVR0VTID0gImdhdWdlcyIKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfbWF0Y2hlc19uYW1lKGZpbHRlciwgbWV0cmljX2tleSk6CiAgICBpZiBub3QgZmlsdGVyLm5hbWVzIGFuZCBub3QgZmlsdGVyLm5hbWVzcGFjZXM6CiAgICAgIHJldHVybiBUcnVlCgogICAgaWYgKChmaWx0ZXIubmFtZXNwYWNlcyBhbmQgbWV0cmljX2tleS5tZXRyaWMubmFtZXNwYWNlIGluIGZpbHRlci5uYW1lc3BhY2VzKQogICAgICAgIG9yIChmaWx0ZXIubmFtZXMgYW5kIG1ldHJpY19rZXkubWV0cmljLm5hbWUgaW4gZmlsdGVyLm5hbWVzKSk6CiAgICAgIHJldHVybiBUcnVlCiAgICByZXR1cm4gRmFsc2UKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfaXNfc3ViX2xpc3QobmVlZGxlLCBoYXlzdGFjayk6CiAgICAiIiJUcnVlIGlmZiBgbmVlZGxlYCBpcyBhIHN1Yi1saXN0IG9mIGBoYXlzdGFja2AgKGkuZS4gYSBjb250aWd1b3VzIHNsaWNlCiAgICBvZiBgaGF5c3RhY2tgIGV4YWN0bHkgbWF0Y2hlcyBgbmVlZGxlYCIiIgogICAgbmVlZGxlX2xlbiA9IGxlbihuZWVkbGUpCiAgICBoYXlzdGFja19sZW4gPSBsZW4oaGF5c3RhY2spCiAgICBmb3IgaSBpbiByYW5nZSgwLCBoYXlzdGFja19sZW4gLSBuZWVkbGVfbGVuICsgMSk6CiAgICAgIGlmIGhheXN0YWNrW2k6aSArIG5lZWRsZV9sZW5dID09IG5lZWRsZToKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIHJldHVybiBGYWxzZQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9tYXRjaGVzX3N1Yl9wYXRoKGFjdHVhbF9zY29wZSwgZmlsdGVyX3Njb3BlKToKICAgICIiIlRydWUgaWZmIHRoZSAnLyctZGVsaW1pdGVkIHBpZWNlcyBvZiBmaWx0ZXJfc2NvcGUgZXhpc3QgYXMgYSBzdWItbGlzdAogICAgb2YgdGhlICcvJy1kZWxpbWl0ZWQgcGllY2VzIG9mIGFjdHVhbF9zY29wZSIiIgogICAgcmV0dXJuIE1ldHJpY1Jlc3VsdHMuX2lzX3N1Yl9saXN0KAogICAgICAgIGZpbHRlcl9zY29wZS5zcGxpdCgnLycpLCBhY3R1YWxfc2NvcGUuc3BsaXQoJy8nKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfbWF0Y2hlc19zY29wZShmaWx0ZXIsIG1ldHJpY19rZXkpOgogICAgaWYgbm90IGZpbHRlci5zdGVwczoKICAgICAgcmV0dXJuIFRydWUKCiAgICBmb3Igc3RlcCBpbiBmaWx0ZXIuc3RlcHM6CiAgICAgIGlmIE1ldHJpY1Jlc3VsdHMuX21hdGNoZXNfc3ViX3BhdGgobWV0cmljX2tleS5zdGVwLCBzdGVwKToKICAgICAgICByZXR1cm4gVHJ1ZQoKICAgIHJldHVybiBGYWxzZQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG1hdGNoZXMoZmlsdGVyLCBtZXRyaWNfa2V5KToKICAgIGlmIGZpbHRlciBpcyBOb25lOgogICAgICByZXR1cm4gVHJ1ZQoKICAgIGlmIChNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX25hbWUoZmlsdGVyLCBtZXRyaWNfa2V5KSBhbmQKICAgICAgICBNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX3Njb3BlKGZpbHRlciwgbWV0cmljX2tleSkpOgogICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBxdWVyeShzZWxmLCBmaWx0ZXI9Tm9uZSk6CiAgICAiIiJRdWVyaWVzIHRoZSBydW5uZXIgZm9yIGV4aXN0aW5nIHVzZXIgbWV0cmljcyB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIuCgogICAgSXQgc2hvdWxkIHJldHVybiBhIGRpY3Rpb25hcnksIHdpdGggbGlzdHMgb2YgZWFjaCBraW5kIG9mIG1ldHJpYywgYW5kCiAgICBlYWNoIGxpc3QgY29udGFpbnMgdGhlIGNvcnJlc3BvbmRpbmcga2luZCBvZiBNZXRyaWNSZXN1bHQuIExpa2Ugc286CgogICAgICAgIHsKICAgICAgICAgICJjb3VudGVycyI6IFtNZXRyaWNSZXN1bHQoY291bnRlcl9rZXksIGNvbW1pdHRlZCwgYXR0ZW1wdGVkKSwgLi4uXSwKICAgICAgICAgICJkaXN0cmlidXRpb25zIjogW01ldHJpY1Jlc3VsdChkaXN0X2tleSwgY29tbWl0dGVkLCBhdHRlbXB0ZWQpLCAuLi5dLAogICAgICAgICAgImdhdWdlcyI6IFtdICAvLyBFbXB0eSBsaXN0IGlmIG5vdGhpbmcgbWF0Y2hlZCB0aGUgZmlsdGVyLgogICAgICAgIH0KCiAgICBUaGUgY29tbWl0dGVkIC8gYXR0ZW1wdGVkIHZhbHVlcyBhcmUgRGlzdHJpYnV0aW9uUmVzdWx0IC8gR2F1Z2VSZXN1bHQgLyBpbnQKICAgIG9iamVjdHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBNZXRyaWNzRmlsdGVyKG9iamVjdCk6CiAgIiIiU2ltcGxlIG9iamVjdCB0byBmaWx0ZXIgbWV0cmljcyByZXN1bHRzLgoKICBUaGlzIGNsYXNzIGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgSWYgZmlsdGVycyBieSBtYXRjaGluZyBhIHJlc3VsdCdzIHN0ZXAtbmFtZXNwYWNlLW5hbWUgd2l0aCB0aHJlZSBpbnRlcm5hbAogIHNldHMuIE5vIGV4ZWN1dGlvbi9tYXRjaGluZyBsb2dpYyBpcyBhZGRlZCB0byB0aGlzIG9iamVjdCwgc28gdGhhdCBpdCBtYXkKICBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhcmd1bWVudHMgYXMgYW4gUlBDIHJlcXVlc3QuIEl0IGlzIGxlZnQgZm9yIHJ1bm5lcnMKICB0byBpbXBsZW1lbnQgbWF0Y2hpbmcgbG9naWMgYnkgdGhlbXNlbHZlcy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLl9uYW1lcyA9IHNldCgpCiAgICBzZWxmLl9uYW1lc3BhY2VzID0gc2V0KCkKICAgIHNlbGYuX3N0ZXBzID0gc2V0KCkKCiAgQHByb3BlcnR5CiAgZGVmIHN0ZXBzKHNlbGYpOgogICAgcmV0dXJuIGZyb3plbnNldChzZWxmLl9zdGVwcykKCiAgQHByb3BlcnR5CiAgZGVmIG5hbWVzKHNlbGYpOgogICAgcmV0dXJuIGZyb3plbnNldChzZWxmLl9uYW1lcykKCiAgQHByb3BlcnR5CiAgZGVmIG5hbWVzcGFjZXMoc2VsZik6CiAgICByZXR1cm4gZnJvemVuc2V0KHNlbGYuX25hbWVzcGFjZXMpCgogIGRlZiB3aXRoX25hbWUoc2VsZiwgbmFtZSk6CiAgICByZXR1cm4gc2VsZi53aXRoX25hbWVzKFtuYW1lXSkKCiAgZGVmIHdpdGhfbmFtZXMoc2VsZiwgbmFtZXMpOgogICAgaWYgaXNpbnN0YW5jZShuYW1lcywgc3RyKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignTmFtZXMgbXVzdCBiZSBhIGNvbGxlY3Rpb24sIG5vdCBhIHN0cmluZycpCgogICAgc2VsZi5fbmFtZXMudXBkYXRlKG5hbWVzKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHdpdGhfbmFtZXNwYWNlKHNlbGYsIG5hbWVzcGFjZSk6CiAgICByZXR1cm4gc2VsZi53aXRoX25hbWVzcGFjZXMoW25hbWVzcGFjZV0pCgogIGRlZiB3aXRoX25hbWVzcGFjZXMoc2VsZiwgbmFtZXNwYWNlcyk6CiAgICBpZiBpc2luc3RhbmNlKG5hbWVzcGFjZXMsIHN0cik6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05hbWVzcGFjZXMgbXVzdCBiZSBhbiBpdGVyYWJsZSwgbm90IGEgc3RyaW5nJykKCiAgICBzZWxmLl9uYW1lc3BhY2VzLnVwZGF0ZShbTWV0cmljcy5nZXRfbmFtZXNwYWNlKG5zKSBmb3IgbnMgaW4gbmFtZXNwYWNlc10pCiAgICByZXR1cm4gc2VsZgoKICBkZWYgd2l0aF9zdGVwKHNlbGYsIHN0ZXApOgogICAgcmV0dXJuIHNlbGYud2l0aF9zdGVwcyhbc3RlcF0pCgogIGRlZiB3aXRoX3N0ZXBzKHNlbGYsIHN0ZXBzKToKICAgIGlmIGlzaW5zdGFuY2Uoc3RlcHMsIHN0cik6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1N0ZXBzIG11c3QgYmUgYW4gaXRlcmFibGUsIG5vdCBhIHN0cmluZycpCgogICAgc2VsZi5fc3RlcHMudXBkYXRlKHN0ZXBzKQogICAgcmV0dXJuIHNlbGYKlH2UKIwVTWV0cmljcy5nZXRfbmFtZXNwYWNllGpWMQEASy5LNYeUjA9NZXRyaWNzLmNvdW50ZXKUalYxAQBLN0tDh5SMFE1ldHJpY3MuZGlzdHJpYnV0aW9ulGpWMQEAS0VLU4eUjA1NZXRyaWNzLmdhdWdllGpWMQEAS1VLY4eUjCJNZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVyLl9faW5pdF9flGpWMQEAS2dLaoeUjBlNZXRyaWNzLkRlbGVnYXRpbmdDb3VudGVylGpdMQEAS2VLaoeUjCdNZXRyaWNzLkRlbGVnYXRpbmdEaXN0cmlidXRpb24uX19pbml0X1+UalYxAQBLbktxh5SMHk1ldHJpY3MuRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbpRqXTEBAEtsS3GHlIwgTWV0cmljcy5EZWxlZ2F0aW5nR2F1Z2UuX19pbml0X1+UalYxAQBLdUt4h5SMF01ldHJpY3MuRGVsZWdhdGluZ0dhdWdllGpdMQEAS3NLeIeUjAdNZXRyaWNzlGpdMQEASyxLeIeUjBtNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX25hbWWUalYxAQBLgEuIh5SMGk1ldHJpY1Jlc3VsdHMuX2lzX3N1Yl9saXN0lGpWMQEAS4pLlIeUjB9NZXRyaWNSZXN1bHRzLl9tYXRjaGVzX3N1Yl9wYXRolGpWMQEAS5ZLm4eUjBxNZXRyaWNSZXN1bHRzLl9tYXRjaGVzX3Njb3BllGpWMQEAS51LpoeUjBVNZXRyaWNSZXN1bHRzLm1hdGNoZXOUalYxAQBLqEuwh5SME01ldHJpY1Jlc3VsdHMucXVlcnmUalYxAQBLskvBh5SMDU1ldHJpY1Jlc3VsdHOUal0xAQBLe0vBh5SMFk1ldHJpY3NGaWx0ZXIuX19pbml0X1+UalYxAQBLzkvRh5SME01ldHJpY3NGaWx0ZXIuc3RlcHOUalYxAQBL00vVh5SME01ldHJpY3NGaWx0ZXIubmFtZXOUalYxAQBL10vZh5SMGE1ldHJpY3NGaWx0ZXIubmFtZXNwYWNlc5RqVjEBAEvbS92HlIwXTWV0cmljc0ZpbHRlci53aXRoX25hbWWUalYxAQBL30vgh5SMGE1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc5RqVjEBAEviS+eHlIwcTWV0cmljc0ZpbHRlci53aXRoX25hbWVzcGFjZZRqVjEBAEvpS+qHlIwdTWV0cmljc0ZpbHRlci53aXRoX25hbWVzcGFjZXOUalYxAQBL7Evxh5SMF01ldHJpY3NGaWx0ZXIud2l0aF9zdGVwlGpWMQEAS/NL9IeUjBhNZXRyaWNzRmlsdGVyLndpdGhfc3RlcHOUalYxAQBL9kv7h5SMDU1ldHJpY3NGaWx0ZXKUal0xAQBLxEv7h5R1fZQojAdNZXRyaWNzlGoJBAAAjBVNZXRyaWNzLmdldF9uYW1lc3BhY2WUagkEAACMD01ldHJpY3MuY291bnRlcpRqCQQAAIwUTWV0cmljcy5kaXN0cmlidXRpb26UagkEAACMDU1ldHJpY3MuZ2F1Z2WUagkEAACMGU1ldHJpY3MuRGVsZWdhdGluZ0NvdW50ZXKUagkEAACMHk1ldHJpY3MuRGVsZWdhdGluZ0Rpc3RyaWJ1dGlvbpRqCQQAAIwXTWV0cmljcy5EZWxlZ2F0aW5nR2F1Z2WUagkEAACMDU1ldHJpY3NGaWx0ZXKUagkEAACMF01ldHJpY3NGaWx0ZXIud2l0aF9uYW1llGoJBAAAjBhNZXRyaWNzRmlsdGVyLndpdGhfbmFtZXOUagkEAACMHE1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2WUagkEAACMHU1ldHJpY3NGaWx0ZXIud2l0aF9uYW1lc3BhY2VzlGoJBAAAjBdNZXRyaWNzRmlsdGVyLndpdGhfc3RlcJRqCQQAAIwYTWV0cmljc0ZpbHRlci53aXRoX3N0ZXBzlGoJBAAAdYwaYXBhY2hlX2JlYW0ubWV0cmljcy5tZXRyaWOUdJSMHmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZZQoWMAOAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpUaGUgY2xhc3NlcyBpbiB0aGlzIGZpbGUgYXJlIGludGVyZmFjZXMgZm9yIG1ldHJpY3MuIFRoZXkgYXJlIG5vdCBpbnRlbmRlZAp0byBiZSBzdWJjbGFzc2VkIG9yIGNyZWF0ZWQgZGlyZWN0bHkgYnkgdXNlcnMuIFRvIHdvcmsgd2l0aCBhbmQgYWNjZXNzIG1ldHJpY3MsCnVzZXJzIHNob3VsZCB1c2UgdGhlIGNsYXNzZXMgYW5kIG1ldGhvZHMgZXhwb3NlZCBpbiBtZXRyaWMucHkuCgpBdmFpbGFibGUgY2xhc3NlczoKCi0gTWV0cmljIC0gQmFzZSBpbnRlcmZhY2Ugb2YgYSBtZXRyaWNzIG9iamVjdC4KLSBDb3VudGVyIC0gQ291bnRlciBtZXRyaWMgaW50ZXJmYWNlLiBBbGxvd3MgYSBjb3VudCB0byBiZSBpbmNyZW1lbnRlZCBvcgogICAgZGVjcmVtZW50ZWQgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbi4KLSBEaXN0cmlidXRpb24gLSBEaXN0cmlidXRpb24gTWV0cmljIGludGVyZmFjZS4gQWxsb3dzIHN0YXRpc3RpY3MgYWJvdXQgdGhlCiAgICBkaXN0cmlidXRpb24gb2YgYSB2YXJpYWJsZSB0byBiZSBjb2xsZWN0ZWQgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbi4KLSBHYXVnZSAtIEdhdWdlIE1ldHJpYyBpbnRlcmZhY2UuIEFsbG93cyB0byB0cmFjayB0aGUgbGF0ZXN0IHZhbHVlIG9mIGEKICAgIHZhcmlhYmxlIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCi0gTWV0cmljTmFtZSAtIE5hbWVzcGFjZSBhbmQgbmFtZSB1c2VkIHRvIHJlZmVyIHRvIGEgTWV0cmljLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2ZuX2FwaV9wYjIKCl9fYWxsX18gPSBbJ01ldHJpYycsICdDb3VudGVyJywgJ0Rpc3RyaWJ1dGlvbicsICdHYXVnZScsICdNZXRyaWNOYW1lJ10KCgpjbGFzcyBNZXRyaWNOYW1lKG9iamVjdCk6CiAgIiIiVGhlIG5hbWUgb2YgYSBtZXRyaWMuCgogIFRoZSBuYW1lIG9mIGEgbWV0cmljIGNvbnNpc3RzIG9mIGEgbmFtZXNwYWNlIGFuZCBhIG5hbWUuIFRoZSBuYW1lc3BhY2UKICBhbGxvd3MgZ3JvdXBpbmcgcmVsYXRlZCBtZXRyaWNzIHRvZ2V0aGVyIGFuZCBhbHNvIHByZXZlbnRzIGNvbGxpc2lvbnMKICBiZXR3ZWVuIG11bHRpcGxlIG1ldHJpY3Mgb2YgdGhlIHNhbWUgbmFtZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZXNwYWNlLCBuYW1lKToKICAgICIiIkluaXRpYWxpemVzIGBgTWV0cmljTmFtZWBgLgoKICAgIEFyZ3M6CiAgICAgIG5hbWVzcGFjZTogQSBzdHJpbmcgd2l0aCB0aGUgbmFtZXNwYWNlIG9mIGEgbWV0cmljLgogICAgICBuYW1lOiBBIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIGEgbWV0cmljLgogICAgIiIiCiAgICBpZiBub3QgbmFtZXNwYWNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdNZXRyaWMgbmFtZXNwYWNlIG11c3QgYmUgbm9uLWVtcHR5JykKICAgIGlmIG5vdCBuYW1lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdNZXRyaWMgbmFtZSBtdXN0IGJlIG5vbi1lbXB0eScpCiAgICBzZWxmLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgc2VsZi5uYW1lID0gbmFtZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmLm5hbWVzcGFjZSA9PSBvdGhlci5uYW1lc3BhY2UgYW5kIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19zdHJfXyhzZWxmKToKICAgIHJldHVybiAnTWV0cmljTmFtZShuYW1lc3BhY2U9e30sIG5hbWU9e30pJy5mb3JtYXQoc2VsZi5uYW1lc3BhY2UsIHNlbGYubmFtZSkKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYubmFtZXNwYWNlLCBzZWxmLm5hbWUpKQoKICAjIFRPRE86IHRoaXMgcHJvdG8gc3RydWN0dXJlIGlzIGRlcHJlY2F0ZWQKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmKToKICAgIHJldHVybiBiZWFtX2ZuX2FwaV9wYjIuTWV0cmljcy5Vc2VyLk1ldHJpY05hbWUoCiAgICAgICAgbmFtZXNwYWNlPXNlbGYubmFtZXNwYWNlLCBuYW1lPXNlbGYubmFtZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8pOgogICAgcmV0dXJuIE1ldHJpY05hbWUocHJvdG8ubmFtZXNwYWNlLCBwcm90by5uYW1lKQoKCmNsYXNzIE1ldHJpYyhvYmplY3QpOgogICIiIkJhc2UgaW50ZXJmYWNlIG9mIGEgbWV0cmljIG9iamVjdC4iIiIKICBwYXNzCgoKY2xhc3MgQ291bnRlcihNZXRyaWMpOgogICIiIkNvdW50ZXIgbWV0cmljIGludGVyZmFjZS4gQWxsb3dzIGEgY291bnQgdG8gYmUgaW5jcmVtZW50ZWQvZGVjcmVtZW50ZWQKICBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLiIiIgogIGRlZiBpbmMoc2VsZiwgbj0xKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGRlYyhzZWxmLCBuPTEpOgogICAgc2VsZi5pbmMoLW4pCgoKY2xhc3MgRGlzdHJpYnV0aW9uKE1ldHJpYyk6CiAgIiIiRGlzdHJpYnV0aW9uIE1ldHJpYyBpbnRlcmZhY2UuCgogIEFsbG93cyBzdGF0aXN0aWNzIGFib3V0IHRoZSBkaXN0cmlidXRpb24gb2YgYSB2YXJpYWJsZSB0byBiZSBjb2xsZWN0ZWQgZHVyaW5nCiAgcGlwZWxpbmUgZXhlY3V0aW9uLiIiIgogIGRlZiB1cGRhdGUoc2VsZiwgdmFsdWUpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIEdhdWdlKE1ldHJpYyk6CiAgIiIiR2F1Z2UgTWV0cmljIGludGVyZmFjZS4KCiAgQWxsb3dzIHRyYWNraW5nIG9mIHRoZSBsYXRlc3QgdmFsdWUgb2YgYSB2YXJpYWJsZSBkdXJpbmcgcGlwZWxpbmUKICBleGVjdXRpb24uIiIiCiAgZGVmIHNldChzZWxmLCB2YWx1ZSk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCpSV74EBAAAAAAB9lCiME01ldHJpY05hbWUuX19pbml0X1+UalYxAQBLNUtBh5SMEU1ldHJpY05hbWUuX19lcV9flGpWMQEAS0NLRIeUjBFNZXRyaWNOYW1lLl9fbmVfX5RqVjEBAEtGS0iHlIwSTWV0cmljTmFtZS5fX3N0cl9flGpWMQEAS0pLS4eUjBNNZXRyaWNOYW1lLl9faGFzaF9flGpWMQEAS01LToeUjBhNZXRyaWNOYW1lLnRvX3J1bm5lcl9hcGmUalYxAQBLUUtTh5SMGk1ldHJpY05hbWUuZnJvbV9ydW5uZXJfYXBplGpWMQEAS1VLV4eUjApNZXRyaWNOYW1llGpdMQEASy5LV4eUjAZNZXRyaWOUal0xAQBLWktch5SMC0NvdW50ZXIuaW5jlGpWMQEAS2JLY4eUjAtDb3VudGVyLmRlY5RqVjEBAEtlS2aHlIwHQ291bnRlcpRqXTEBAEtfS2aHlIwTRGlzdHJpYnV0aW9uLnVwZGF0ZZRqVjEBAEtuS2+HlIwMRGlzdHJpYnV0aW9ulGpdMQEAS2lLb4eUjAlHYXVnZS5zZXSUalYxAQBLd0t4h5SMBUdhdWdllGpdMQEAS3JLeIeUdX2UKIwKTWV0cmljTmFtZZRq/wMAAIwYTWV0cmljTmFtZS50b19ydW5uZXJfYXBplGr/AwAAjBpNZXRyaWNOYW1lLmZyb21fcnVubmVyX2FwaZRq/wMAAIwGTWV0cmljlGr/AwAAjAdDb3VudGVylGr/AwAAjAtDb3VudGVyLmluY5Rq/wMAAIwLQ291bnRlci5kZWOUav8DAACMDERpc3RyaWJ1dGlvbpRq/wMAAIwTRGlzdHJpYnV0aW9uLnVwZGF0ZZRq/wMAAIwFR2F1Z2WUav8DAACMCUdhdWdlLnNldJRq/wMAAHWMHmFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZZR0lIwkYXBhY2hlX2JlYW0ubWV0cmljcy5tb25pdG9yaW5nX2luZm9zlChYYzgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIyBjeXRob246IGxhbmd1YWdlX2xldmVsPTMKIyBjeXRob246IHByb2ZpbGU9VHJ1ZQoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgdGltZQpmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCmZyb20gdHlwaW5nIGltcG9ydCBGcm96ZW5TZXQKZnJvbSB0eXBpbmcgaW1wb3J0IEhhc2hhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0Cgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdGltZXN0YW1wX3BiMgoKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBEaXN0cmlidXRpb25EYXRhCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgRGlzdHJpYnV0aW9uUmVzdWx0CmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgR2F1Z2VEYXRhCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgR2F1Z2VSZXN1bHQKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IG1ldHJpY3NfcGIyCgpTQU1QTEVEX0JZVEVfU0laRV9VUk4gPSAoCiAgICBjb21tb25fdXJucy5tb25pdG9yaW5nX2luZm9fc3BlY3MuU0FNUExFRF9CWVRFX1NJWkUuc3BlYy51cm4pCkVMRU1FTlRfQ09VTlRfVVJOID0gY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvX3NwZWNzLkVMRU1FTlRfQ09VTlQuc3BlYy51cm4KU1RBUlRfQlVORExFX01TRUNTX1VSTiA9ICgKICAgIGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb19zcGVjcy5TVEFSVF9CVU5ETEVfTVNFQ1Muc3BlYy51cm4pClBST0NFU1NfQlVORExFX01TRUNTX1VSTiA9ICgKICAgIGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb19zcGVjcy5QUk9DRVNTX0JVTkRMRV9NU0VDUy5zcGVjLnVybikKRklOSVNIX0JVTkRMRV9NU0VDU19VUk4gPSAoCiAgICBjb21tb25fdXJucy5tb25pdG9yaW5nX2luZm9fc3BlY3MuRklOSVNIX0JVTkRMRV9NU0VDUy5zcGVjLnVybikKVE9UQUxfTVNFQ1NfVVJOID0gY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvX3NwZWNzLlRPVEFMX01TRUNTLnNwZWMudXJuClVTRVJfQ09VTlRFUl9VUk4gPSBjb21tb25fdXJucy5tb25pdG9yaW5nX2luZm9fc3BlY3MuVVNFUl9DT1VOVEVSLnNwZWMudXJuClVTRVJfRElTVFJJQlVUSU9OX0NPVU5URVJfVVJOID0gKAogICAgY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvX3NwZWNzLlVTRVJfRElTVFJJQlVUSU9OX0NPVU5URVIuc3BlYy51cm4pCldPUktfUkVNQUlOSU5HX1VSTiA9IGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb19zcGVjcy5XT1JLX1JFTUFJTklORy5zcGVjLnVybgpXT1JLX0NPTVBMRVRFRF9VUk4gPSBjb21tb25fdXJucy5tb25pdG9yaW5nX2luZm9fc3BlY3MuV09SS19DT01QTEVURUQuc3BlYy51cm4KCiMgVE9ETyhhamFtYXRvKTogSW1wbGVtZW50IHRoZSByZW1haW5pbmcgdHlwZXMsIGkuZS4gRG91YmxlIHR5cGVzCiMgRXh0cmVtYSB0eXBlcywgZXRjLiBTZWU6CiMgaHR0cHM6Ly9zLmFwYWNoZS5vcmcvYmVhbS1mbi1hcGktbWV0cmljcwpTVU1fSU5UNjRfVFlQRSA9IGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb190eXBlcy5TVU1fSU5UNjRfVFlQRS51cm4KRElTVFJJQlVUSU9OX0lOVDY0X1RZUEUgPSAoCiAgICBjb21tb25fdXJucy5tb25pdG9yaW5nX2luZm9fdHlwZXMuRElTVFJJQlVUSU9OX0lOVDY0X1RZUEUudXJuKQpMQVRFU1RfSU5UNjRfVFlQRSA9IGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb190eXBlcy5MQVRFU1RfSU5UNjRfVFlQRS51cm4KTEFURVNUX0RPVUJMRVNfVFlQRSA9IGNvbW1vbl91cm5zLm1vbml0b3JpbmdfaW5mb190eXBlcy5MQVRFU1RfRE9VQkxFU19UWVBFLnVybgoKQ09VTlRFUl9UWVBFUyA9IHNldChbU1VNX0lOVDY0X1RZUEVdKQpESVNUUklCVVRJT05fVFlQRVMgPSBzZXQoW0RJU1RSSUJVVElPTl9JTlQ2NF9UWVBFXSkKR0FVR0VfVFlQRVMgPSBzZXQoW0xBVEVTVF9JTlQ2NF9UWVBFXSkKCiMgVE9ETyhtaWdyeXopIGV4dHJhY3QgdmFsdWVzIGZyb20gYmVhbV9mbl9hcGkucHJvdG86Ok1vbml0b3JpbmdJbmZvTGFiZWxzClBDT0xMRUNUSU9OX0xBQkVMID0gKAogICAgY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvX2xhYmVscy5QQ09MTEVDVElPTi5sYWJlbF9wcm9wcy5uYW1lKQpQVFJBTlNGT1JNX0xBQkVMID0gKAogICAgY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvX2xhYmVscy5UUkFOU0ZPUk0ubGFiZWxfcHJvcHMubmFtZSkKTkFNRVNQQUNFX0xBQkVMID0gKAogICAgY29tbW9uX3VybnMubW9uaXRvcmluZ19pbmZvX2xhYmVscy5OQU1FU1BBQ0UubGFiZWxfcHJvcHMubmFtZSkKTkFNRV9MQUJFTCA9IChjb21tb25fdXJucy5tb25pdG9yaW5nX2luZm9fbGFiZWxzLk5BTUUubGFiZWxfcHJvcHMubmFtZSkKVEFHX0xBQkVMID0gIlRBRyIKCgpkZWYgdG9fdGltZXN0YW1wX3Byb3RvKHRpbWVzdGFtcF9zZWNzKToKICAiIiJDb252ZXJ0cyBzZWNvbmRzIHNpbmNlIGVwb2NoIHRvIGEgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC4KCiAgQXJnczoKICAgIHRpbWVzdGFtcF9zZWNzOiBUaGUgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgZXBvY2guCiAgIiIiCiAgc2Vjb25kcyA9IGludCh0aW1lc3RhbXBfc2VjcykKICBuYW5vcyA9IGludCgodGltZXN0YW1wX3NlY3MgLSBzZWNvbmRzKSAqIDEwKio5KQogIHJldHVybiB0aW1lc3RhbXBfcGIyLlRpbWVzdGFtcChzZWNvbmRzPXNlY29uZHMsIG5hbm9zPW5hbm9zKQoKCmRlZiB0b190aW1lc3RhbXBfc2Vjcyh0aW1lc3RhbXBfcHJvdG8pOgogICIiIkNvbnZlcnRzIGEgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCB0byBzZWNvbmRzIHNpbmNlIGVwb2NoLgoKICBBcmdzOgogICAgdGltZXN0YW1wX3Byb3RvOiBUaGUgZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcC4KICAiIiIKICByZXR1cm4gdGltZXN0YW1wX3Byb3RvLnNlY29uZHMgKyB0aW1lc3RhbXBfcHJvdG8ubmFub3MgKiAxMCoqLTkKCgpkZWYgZXh0cmFjdF9jb3VudGVyX3ZhbHVlKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0aGUgaW50IGNvdXRuZXIgdmFsdWUgb2YgdGhlIG1vbml0b3JpbmcgaW5mby4iIiIKICBpZiBpc19jb3VudGVyKG1vbml0b3JpbmdfaW5mb19wcm90bykgb3IgaXNfZ2F1Z2UobW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAgIHJldHVybiBtb25pdG9yaW5nX2luZm9fcHJvdG8ubWV0cmljLmNvdW50ZXJfZGF0YS5pbnQ2NF92YWx1ZQogIHJldHVybiBOb25lCgoKZGVmIGV4dHJhY3RfZGlzdHJpYnV0aW9uKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0aGUgcmVsZXZhbnQgRGlzdHJpYnV0aW9uSW50NjQgb3IgRGlzdHJpYnV0aW9uRG91YmxlLgoKICBBcmdzOgogICAgbW9uaXRvcmluZ19pbmZvX3Byb3RvOiBUaGUgbW9uaXRvcmluZyBpbmZvciBmb3IgdGhlIGRpc3RyaWJ1dGlvbi4KICAiIiIKICBpZiBpc19kaXN0cmlidXRpb24obW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAgIHJldHVybiBtb25pdG9yaW5nX2luZm9fcHJvdG8ubWV0cmljLmRpc3RyaWJ1dGlvbl9kYXRhLmludF9kaXN0cmlidXRpb25fZGF0YQogIHJldHVybiBOb25lCgoKZGVmIGNyZWF0ZV9sYWJlbHMocHRyYW5zZm9ybT1Ob25lLCB0YWc9Tm9uZSwgbmFtZXNwYWNlPU5vbmUsIG5hbWU9Tm9uZSk6CiAgIiIiQ3JlYXRlIHRoZSBsYWJlbCBkaWN0aW9uYXJ5IGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0YWdzLgoKICBBcmdzOgogICAgcHRyYW5zZm9ybTogVGhlIHB0cmFuc2Zvcm0vc3RlcCBuYW1lLgogICAgdGFnOiBoZSBvdXRwdXQgdGFnIG5hbWUsIHVzZWQgYXMgYSBsYWJlbC4KICAiIiIKICBsYWJlbHMgPSB7fQogIGlmIHRhZzoKICAgIGxhYmVsc1tUQUdfTEFCRUxdID0gdGFnCiAgaWYgcHRyYW5zZm9ybToKICAgIGxhYmVsc1tQVFJBTlNGT1JNX0xBQkVMXSA9IHB0cmFuc2Zvcm0KICBpZiBuYW1lc3BhY2U6CiAgICBsYWJlbHNbTkFNRVNQQUNFX0xBQkVMXSA9IG5hbWVzcGFjZQogIGlmIG5hbWU6CiAgICBsYWJlbHNbTkFNRV9MQUJFTF0gPSBuYW1lCiAgcmV0dXJuIGxhYmVscwoKCmRlZiBpbnQ2NF91c2VyX2NvdW50ZXIobmFtZXNwYWNlLCBuYW1lLCBtZXRyaWMsIHB0cmFuc2Zvcm09Tm9uZSwgdGFnPU5vbmUpOgogICMgdHlwZTogKC4uLikgLT4gbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm8KCiAgIiIiUmV0dXJuIHRoZSBjb3VudGVyIG1vbml0b3JpbmcgaW5mbyBmb3IgdGhlIHNwZWNpZmVkIFVSTiwgbWV0cmljIGFuZCBsYWJlbHMuCgogIEFyZ3M6CiAgICB1cm46IFRoZSBVUk4gb2YgdGhlIG1vbml0b3JpbmcgaW5mby9tZXRyaWMuCiAgICBtZXRyaWM6IFRoZSBtZXRyaWMgcHJvdG8gZmllbGQgdG8gdXNlIGluIHRoZSBtb25pdG9yaW5nIGluZm8uCiAgICAgICAgT3IgYW4gaW50IHZhbHVlLgogICAgcHRyYW5zZm9ybTogVGhlIHB0cmFuc2Zvcm0vc3RlcCBuYW1lIHVzZWQgYXMgYSBsYWJlbC4KICAgIHRhZzogVGhlIG91dHB1dCB0YWcgbmFtZSwgdXNlZCBhcyBhIGxhYmVsLgogICIiIgogIGxhYmVscyA9IGNyZWF0ZV9sYWJlbHMoCiAgICAgIHB0cmFuc2Zvcm09cHRyYW5zZm9ybSwgdGFnPXRhZywgbmFtZXNwYWNlPW5hbWVzcGFjZSwgbmFtZT1uYW1lKQogIGlmIGlzaW5zdGFuY2UobWV0cmljLCBpbnQpOgogICAgbWV0cmljID0gbWV0cmljc19wYjIuTWV0cmljKAogICAgICAgIGNvdW50ZXJfZGF0YT1tZXRyaWNzX3BiMi5Db3VudGVyRGF0YShpbnQ2NF92YWx1ZT1tZXRyaWMpKQogIHJldHVybiBjcmVhdGVfbW9uaXRvcmluZ19pbmZvKAogICAgICBVU0VSX0NPVU5URVJfVVJOLCBTVU1fSU5UNjRfVFlQRSwgbWV0cmljLCBsYWJlbHMpCgoKZGVmIGludDY0X2NvdW50ZXIodXJuLCBtZXRyaWMsIHB0cmFuc2Zvcm09Tm9uZSwgdGFnPU5vbmUpOgogICMgdHlwZTogKC4uLikgLT4gbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm8KCiAgIiIiUmV0dXJuIHRoZSBjb3VudGVyIG1vbml0b3JpbmcgaW5mbyBmb3IgdGhlIHNwZWNpZmVkIFVSTiwgbWV0cmljIGFuZCBsYWJlbHMuCgogIEFyZ3M6CiAgICB1cm46IFRoZSBVUk4gb2YgdGhlIG1vbml0b3JpbmcgaW5mby9tZXRyaWMuCiAgICBtZXRyaWM6IFRoZSBtZXRyaWMgcHJvdG8gZmllbGQgdG8gdXNlIGluIHRoZSBtb25pdG9yaW5nIGluZm8uCiAgICAgICAgT3IgYW4gaW50IHZhbHVlLgogICAgcHRyYW5zZm9ybTogVGhlIHB0cmFuc2Zvcm0vc3RlcCBuYW1lIHVzZWQgYXMgYSBsYWJlbC4KICAgIHRhZzogVGhlIG91dHB1dCB0YWcgbmFtZSwgdXNlZCBhcyBhIGxhYmVsLgogICIiIgogIGxhYmVscyA9IGNyZWF0ZV9sYWJlbHMocHRyYW5zZm9ybT1wdHJhbnNmb3JtLCB0YWc9dGFnKQogIGlmIGlzaW5zdGFuY2UobWV0cmljLCBpbnQpOgogICAgbWV0cmljID0gbWV0cmljc19wYjIuTWV0cmljKAogICAgICAgIGNvdW50ZXJfZGF0YT1tZXRyaWNzX3BiMi5Db3VudGVyRGF0YShpbnQ2NF92YWx1ZT1tZXRyaWMpKQogIHJldHVybiBjcmVhdGVfbW9uaXRvcmluZ19pbmZvKHVybiwgU1VNX0lOVDY0X1RZUEUsIG1ldHJpYywgbGFiZWxzKQoKCmRlZiBpbnQ2NF91c2VyX2Rpc3RyaWJ1dGlvbihuYW1lc3BhY2UsIG5hbWUsIG1ldHJpYywgcHRyYW5zZm9ybT1Ob25lLCB0YWc9Tm9uZSk6CiAgIiIiUmV0dXJuIHRoZSBkaXN0cmlidXRpb24gbW9uaXRvcmluZyBpbmZvIGZvciB0aGUgVVJOLCBtZXRyaWMgYW5kIGxhYmVscy4KCiAgQXJnczoKICAgIHVybjogVGhlIFVSTiBvZiB0aGUgbW9uaXRvcmluZyBpbmZvL21ldHJpYy4KICAgIG1ldHJpYzogVGhlIG1ldHJpYyBwcm90byBmaWVsZCB0byB1c2UgaW4gdGhlIG1vbml0b3JpbmcgaW5mby4KICAgICAgICBPciBhbiBpbnQgdmFsdWUuCiAgICBwdHJhbnNmb3JtOiBUaGUgcHRyYW5zZm9ybS9zdGVwIG5hbWUgdXNlZCBhcyBhIGxhYmVsLgogICAgdGFnOiBUaGUgb3V0cHV0IHRhZyBuYW1lLCB1c2VkIGFzIGEgbGFiZWwuCiAgIiIiCiAgbGFiZWxzID0gY3JlYXRlX2xhYmVscygKICAgICAgcHRyYW5zZm9ybT1wdHJhbnNmb3JtLCB0YWc9dGFnLCBuYW1lc3BhY2U9bmFtZXNwYWNlLCBuYW1lPW5hbWUpCiAgcmV0dXJuIGNyZWF0ZV9tb25pdG9yaW5nX2luZm8oCiAgICAgIFVTRVJfRElTVFJJQlVUSU9OX0NPVU5URVJfVVJOLCBESVNUUklCVVRJT05fSU5UNjRfVFlQRSwgbWV0cmljLCBsYWJlbHMpCgoKZGVmIGludDY0X2Rpc3RyaWJ1dGlvbih1cm4sIG1ldHJpYywgcHRyYW5zZm9ybT1Ob25lLCB0YWc9Tm9uZSk6CiAgIyB0eXBlOiAoLi4uKSAtPiBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mbwoKICAiIiJSZXR1cm4gYSBkaXN0cmlidXRpb24gbW9uaXRvcmluZyBpbmZvIGZvciB0aGUgVVJOLCBtZXRyaWMgYW5kIGxhYmVscy4KCiAgQXJnczoKICAgIHVybjogVGhlIFVSTiBvZiB0aGUgbW9uaXRvcmluZyBpbmZvL21ldHJpYy4KICAgIG1ldHJpYzogVGhlIG1ldHJpYyBwcm90byBmaWVsZCB0byB1c2UgaW4gdGhlIG1vbml0b3JpbmcgaW5mby4KICAgIHB0cmFuc2Zvcm06IFRoZSBwdHJhbnNmb3JtL3N0ZXAgbmFtZSB1c2VkIGFzIGEgbGFiZWwuCiAgICB0YWc6IFRoZSBvdXRwdXQgdGFnIG5hbWUsIHVzZWQgYXMgYSBsYWJlbC4KICAiIiIKICBsYWJlbHMgPSBjcmVhdGVfbGFiZWxzKHB0cmFuc2Zvcm09cHRyYW5zZm9ybSwgdGFnPXRhZykKICByZXR1cm4gY3JlYXRlX21vbml0b3JpbmdfaW5mbyh1cm4sIERJU1RSSUJVVElPTl9JTlQ2NF9UWVBFLCBtZXRyaWMsIGxhYmVscykKCgpkZWYgaW50NjRfdXNlcl9nYXVnZShuYW1lc3BhY2UsIG5hbWUsIG1ldHJpYywgcHRyYW5zZm9ybT1Ob25lLCB0YWc9Tm9uZSk6CiAgIyB0eXBlOiAoLi4uKSAtPiBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mbwoKICAiIiJSZXR1cm4gdGhlIGdhdWdlIG1vbml0b3JpbmcgaW5mbyBmb3IgdGhlIFVSTiwgbWV0cmljIGFuZCBsYWJlbHMuCgogIEFyZ3M6CiAgICBuYW1lc3BhY2U6IFVzZXItZGVmaW5lZCBuYW1lc3BhY2Ugb2YgY291bnRlci4KICAgIG5hbWU6IE5hbWUgb2YgY291bnRlci4KICAgIG1ldHJpYzogVGhlIG1ldHJpYyBwcm90byBmaWVsZCB0byB1c2UgaW4gdGhlIG1vbml0b3JpbmcgaW5mby4KICAgICAgICBPciBhbiBpbnQgdmFsdWUuCiAgICBwdHJhbnNmb3JtOiBUaGUgcHRyYW5zZm9ybS9zdGVwIG5hbWUgdXNlZCBhcyBhIGxhYmVsLgogICAgdGFnOiBUaGUgb3V0cHV0IHRhZyBuYW1lLCB1c2VkIGFzIGEgbGFiZWwuCiAgIiIiCiAgbGFiZWxzID0gY3JlYXRlX2xhYmVscygKICAgICAgcHRyYW5zZm9ybT1wdHJhbnNmb3JtLCB0YWc9dGFnLCBuYW1lc3BhY2U9bmFtZXNwYWNlLCBuYW1lPW5hbWUpCiAgcmV0dXJuIGNyZWF0ZV9tb25pdG9yaW5nX2luZm8oCiAgICAgIFVTRVJfQ09VTlRFUl9VUk4sIExBVEVTVF9JTlQ2NF9UWVBFLCBtZXRyaWMsIGxhYmVscykKCgpkZWYgaW50NjRfZ2F1Z2UodXJuLCBtZXRyaWMsIHB0cmFuc2Zvcm09Tm9uZSwgdGFnPU5vbmUpOgogICIiIlJldHVybiB0aGUgZ2F1Z2UgbW9uaXRvcmluZyBpbmZvIGZvciB0aGUgVVJOLCBtZXRyaWMgYW5kIGxhYmVscy4KCiAgQXJnczoKICAgIHVybjogVGhlIFVSTiBvZiB0aGUgbW9uaXRvcmluZyBpbmZvL21ldHJpYy4KICAgIG1ldHJpYzogVGhlIG1ldHJpYyBwcm90byBmaWVsZCB0byB1c2UgaW4gdGhlIG1vbml0b3JpbmcgaW5mby4KICAgIHB0cmFuc2Zvcm06IFRoZSBwdHJhbnNmb3JtL3N0ZXAgbmFtZSB1c2VkIGFzIGEgbGFiZWwuCiAgICB0YWc6IFRoZSBvdXRwdXQgdGFnIG5hbWUsIHVzZWQgYXMgYSBsYWJlbC4KICAiIiIKICBsYWJlbHMgPSBjcmVhdGVfbGFiZWxzKHB0cmFuc2Zvcm09cHRyYW5zZm9ybSwgdGFnPXRhZykKICBpZiBpc2luc3RhbmNlKG1ldHJpYywgaW50KToKICAgIG1ldHJpYyA9IG1ldHJpY3NfcGIyLk1ldHJpYygKICAgICAgICBjb3VudGVyX2RhdGE9bWV0cmljc19wYjIuQ291bnRlckRhdGEoaW50NjRfdmFsdWU9bWV0cmljKSkKICByZXR1cm4gY3JlYXRlX21vbml0b3JpbmdfaW5mbyh1cm4sIExBVEVTVF9JTlQ2NF9UWVBFLCBtZXRyaWMsIGxhYmVscykKCgpkZWYgY3JlYXRlX21vbml0b3JpbmdfaW5mbyh1cm4sIHR5cGVfdXJuLCBtZXRyaWNfcHJvdG8sIGxhYmVscz1Ob25lKToKICAjIHR5cGU6ICguLi4pIC0+IG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvCgogICIiIlJldHVybiB0aGUgZ2F1Z2UgbW9uaXRvcmluZyBpbmZvIGZvciB0aGUgVVJOLCB0eXBlLCBtZXRyaWMgYW5kIGxhYmVscy4KCiAgQXJnczoKICAgIHVybjogVGhlIFVSTiBvZiB0aGUgbW9uaXRvcmluZyBpbmZvL21ldHJpYy4KICAgIHR5cGVfdXJuOiBUaGUgVVJOIG9mIHRoZSB0eXBlIG9mIHRoZSBtb25pdG9yaW5nIGluZm8vbWV0cmljLgogICAgICAgIGkuZS4gYmVhbTptZXRyaWNzOnN1bV9pbnRfNjQsIGJlYW06bWV0cmljczpsYXRlc3RfaW50XzY0LgogICAgbWV0cmljX3Byb3RvOiBUaGUgbWV0cmljIHByb3RvIGZpZWxkIHRvIHVzZSBpbiB0aGUgbW9uaXRvcmluZyBpbmZvLgogICAgICAgIE9yIGFuIGludCB2YWx1ZS4KICAgIGxhYmVsczogVGhlIGxhYmVsIGRpY3Rpb25hcnkgdG8gdXNlIGluIHRoZSBNb25pdG9yaW5nSW5mby4KICAiIiIKICByZXR1cm4gbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm8oCiAgICAgIHVybj11cm4sCiAgICAgIHR5cGU9dHlwZV91cm4sCiAgICAgIGxhYmVscz1sYWJlbHMgb3IgZGljdCgpLAogICAgICBtZXRyaWM9bWV0cmljX3Byb3RvLAogICAgICB0aW1lc3RhbXA9dG9fdGltZXN0YW1wX3Byb3RvKHRpbWUudGltZSgpKSkKCgpkZWYgaXNfY291bnRlcihtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICIiIlJldHVybnMgdHJ1ZSBpZiB0aGUgbW9uaXRvcmluZyBpbmZvIGlzIGEgY291dG5lciBtZXRyaWMuIiIiCiAgcmV0dXJuIG1vbml0b3JpbmdfaW5mb19wcm90by50eXBlIGluIENPVU5URVJfVFlQRVMKCgpkZWYgaXNfZGlzdHJpYnV0aW9uKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyB0cnVlIGlmIHRoZSBtb25pdG9yaW5nIGluZm8gaXMgYSBkaXN0cmJ1dGlvbiBtZXRyaWMuIiIiCiAgcmV0dXJuIG1vbml0b3JpbmdfaW5mb19wcm90by50eXBlIGluIERJU1RSSUJVVElPTl9UWVBFUwoKCmRlZiBpc19nYXVnZShtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICIiIlJldHVybnMgdHJ1ZSBpZiB0aGUgbW9uaXRvcmluZyBpbmZvIGlzIGEgZ2F1Z2UgbWV0cmljLiIiIgogIHJldHVybiBtb25pdG9yaW5nX2luZm9fcHJvdG8udHlwZSBpbiBHQVVHRV9UWVBFUwoKCmRlZiBfaXNfdXNlcl9tb25pdG9yaW5nX2luZm8obW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICByZXR1cm4gbW9uaXRvcmluZ19pbmZvX3Byb3RvLnVybiA9PSBVU0VSX0NPVU5URVJfVVJOCgoKZGVmIF9pc191c2VyX2Rpc3RyaWJ1dGlvbl9tb25pdG9yaW5nX2luZm8obW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICByZXR1cm4gbW9uaXRvcmluZ19pbmZvX3Byb3RvLnVybiA9PSBVU0VSX0RJU1RSSUJVVElPTl9DT1VOVEVSX1VSTgoKCmRlZiBpc191c2VyX21vbml0b3JpbmdfaW5mbyhtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICIiIlJldHVybnMgdHJ1ZSBpZiB0aGUgbW9uaXRvcmluZyBpbmZvIGlzIGEgdXNlciBtZXRyaWMuIiIiCgogIHJldHVybiBfaXNfdXNlcl9tb25pdG9yaW5nX2luZm8oCiAgICAgIG1vbml0b3JpbmdfaW5mb19wcm90bykgb3IgX2lzX3VzZXJfZGlzdHJpYnV0aW9uX21vbml0b3JpbmdfaW5mbygKICAgICAgICAgIG1vbml0b3JpbmdfaW5mb19wcm90bykKCgpkZWYgZXh0cmFjdF9tZXRyaWNfcmVzdWx0X21hcF92YWx1ZShtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICIiIlJldHVybnMgdGhlIHJlbGV2YW50IEdhdWdlUmVzdWx0LCBEaXN0cmlidXRpb25SZXN1bHQgb3IgaW50IHZhbHVlLgoKICBUaGVzZSBhcmUgdGhlIHByb3BlciBmb3JtYXQgZm9yIHVzZSBpbiB0aGUgTWV0cmljUmVzdWx0LnF1ZXJ5KCkgcmVzdWx0LgogICIiIgogICMgUmV0dXJucyBhIG1ldHJpYyByZXN1bHQgKEFLQSB0aGUgbGVnYWN5IGZvcm1hdCkuCiAgIyBmcm9tIHRoZSBNb25pdG9yaW5nSW5mbwogIGlmIGlzX2NvdW50ZXIobW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAgIHJldHVybiBleHRyYWN0X2NvdW50ZXJfdmFsdWUobW9uaXRvcmluZ19pbmZvX3Byb3RvKQogIGlmIGlzX2Rpc3RyaWJ1dGlvbihtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICAgZGlzdHJpYnV0aW9uX2RhdGEgPSBleHRyYWN0X2Rpc3RyaWJ1dGlvbihtb25pdG9yaW5nX2luZm9fcHJvdG8pCiAgICByZXR1cm4gRGlzdHJpYnV0aW9uUmVzdWx0KAogICAgICAgIERpc3RyaWJ1dGlvbkRhdGEoCiAgICAgICAgICAgIGRpc3RyaWJ1dGlvbl9kYXRhLnN1bSwKICAgICAgICAgICAgZGlzdHJpYnV0aW9uX2RhdGEuY291bnQsCiAgICAgICAgICAgIGRpc3RyaWJ1dGlvbl9kYXRhLm1pbiwKICAgICAgICAgICAgZGlzdHJpYnV0aW9uX2RhdGEubWF4KSkKICBpZiBpc19nYXVnZShtb25pdG9yaW5nX2luZm9fcHJvdG8pOgogICAgdGltZXN0YW1wX3NlY3MgPSB0b190aW1lc3RhbXBfc2Vjcyhtb25pdG9yaW5nX2luZm9fcHJvdG8udGltZXN0YW1wKQogICAgcmV0dXJuIEdhdWdlUmVzdWx0KAogICAgICAgIEdhdWdlRGF0YShleHRyYWN0X2NvdW50ZXJfdmFsdWUobW9uaXRvcmluZ19pbmZvX3Byb3RvKSwgdGltZXN0YW1wX3NlY3MpKQoKCmRlZiBwYXJzZV9uYW1lc3BhY2VfYW5kX25hbWUobW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAiIiJSZXR1cm5zIHRoZSAobmFtZXNwYWNlLCBuYW1lKSB0dXBsZSBvZiB0aGUgVVJOIGluIHRoZSBtb25pdG9yaW5nIGluZm8uIiIiCiAgIyBSZW1vdmUgdGhlIFVSTiBwcmVmaXggd2hpY2ggaW5kaWNhdGVzIHRoYXQgaXQgaXMgYSB1c2VyIGNvdW50ZXIuCiAgaWYgaXNfdXNlcl9tb25pdG9yaW5nX2luZm8obW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAgIGxhYmVscyA9IG1vbml0b3JpbmdfaW5mb19wcm90by5sYWJlbHMKICAgIHJldHVybiBsYWJlbHNbTkFNRVNQQUNFX0xBQkVMXSwgbGFiZWxzW05BTUVfTEFCRUxdCgogICMgSWYgaXQgaXMgbm90IGEgdXNlciBjb3VudGVyLCBqdXN0IHVzZSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgVVJOLCBpLmUuICdiZWFtJwogIHNwbGl0ID0gbW9uaXRvcmluZ19pbmZvX3Byb3RvLnVybi5zcGxpdCgnOicsIDEpCiAgcmV0dXJuIHNwbGl0WzBdLCBzcGxpdFsxXQoKCmRlZiBnZXRfc3RlcF9uYW1lKG1vbml0b3JpbmdfaW5mb19wcm90byk6CiAgIiIiUmV0dXJucyBhIHN0ZXAgbmFtZSBmb3IgdGhlIGdpdmVuIG1vbml0b3JpbmcgaW5mbyBvciBOb25lIGlmIHN0ZXAgbmFtZQogIGNhbm5vdCBiZSBzcGVjaWZpZWQuIiIiCiAgIyBSaWdodCBub3cgb25seSBtZXRyaWNzIHRoYXQgaGF2ZSBhIFBUUkFOU0ZPUk0gYXJlIHRha2VuIGludG8gYWNjb3VudAogIHJldHVybiBtb25pdG9yaW5nX2luZm9fcHJvdG8ubGFiZWxzLmdldChQVFJBTlNGT1JNX0xBQkVMKQoKCmRlZiB0b19rZXkobW9uaXRvcmluZ19pbmZvX3Byb3RvKToKICAjIHR5cGU6IChtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mbykgLT4gRnJvemVuU2V0W0hhc2hhYmxlXQoKICAiIiJSZXR1cm5zIGEga2V5IGJhc2VkIG9uIHRoZSBVUk4gYW5kIGxhYmVscy4KCiAgVGhpcyBpcyB1c2VmdWwgaW4gbWFwcyB0byBwcmV2ZW50IHJlcG9ydGluZyB0aGUgc2FtZSBNb25pdG9yaW5nSW5mbyB0d2ljZS4KICAiIiIKICBrZXlfaXRlbXMgPSBsaXN0KG1vbml0b3JpbmdfaW5mb19wcm90by5sYWJlbHMuaXRlbXMoKSkgICMgdHlwZTogTGlzdFtIYXNoYWJsZV0KICBrZXlfaXRlbXMuYXBwZW5kKG1vbml0b3JpbmdfaW5mb19wcm90by51cm4pCiAgcmV0dXJuIGZyb3plbnNldChrZXlfaXRlbXMpCgoKZGVmIGRpc3RyaWJ1dGlvbl9jb21iaW5lcihtZXRyaWNfYSwgbWV0cmljX2IpOgogIGFfZGF0YSA9IG1ldHJpY19hLmRpc3RyaWJ1dGlvbl9kYXRhLmludF9kaXN0cmlidXRpb25fZGF0YQogIGJfZGF0YSA9IG1ldHJpY19iLmRpc3RyaWJ1dGlvbl9kYXRhLmludF9kaXN0cmlidXRpb25fZGF0YQogIHJldHVybiBtZXRyaWNzX3BiMi5NZXRyaWMoCiAgICAgIGRpc3RyaWJ1dGlvbl9kYXRhPW1ldHJpY3NfcGIyLkRpc3RyaWJ1dGlvbkRhdGEoCiAgICAgICAgICBpbnRfZGlzdHJpYnV0aW9uX2RhdGE9bWV0cmljc19wYjIuSW50RGlzdHJpYnV0aW9uRGF0YSgKICAgICAgICAgICAgICBjb3VudD1hX2RhdGEuY291bnQgKyBiX2RhdGEuY291bnQsCiAgICAgICAgICAgICAgc3VtPWFfZGF0YS5zdW0gKyBiX2RhdGEuc3VtLAogICAgICAgICAgICAgIG1pbj1taW4oYV9kYXRhLm1pbiwgYl9kYXRhLm1pbiksCiAgICAgICAgICAgICAgbWF4PW1heChhX2RhdGEubWF4LCBiX2RhdGEubWF4KSkpKQoKCl9LTk9XTl9DT01CSU5FUlMgPSB7CiAgICBTVU1fSU5UNjRfVFlQRTogbGFtYmRhIGEsCiAgICBiOiBtZXRyaWNzX3BiMi5NZXRyaWMoCiAgICAgICAgY291bnRlcl9kYXRhPW1ldHJpY3NfcGIyLkNvdW50ZXJEYXRhKAogICAgICAgICAgICBpbnQ2NF92YWx1ZT1hLmNvdW50ZXJfZGF0YS5pbnQ2NF92YWx1ZSArIGIuY291bnRlcl9kYXRhLmludDY0X3ZhbHVlKQogICAgKSwKICAgIERJU1RSSUJVVElPTl9JTlQ2NF9UWVBFOiBkaXN0cmlidXRpb25fY29tYmluZXIsCn0KCgpkZWYgbWF4X3RpbWVzdGFtcChhLCBiKToKICBpZiBhLlRvTmFub3NlY29uZHMoKSA+IGIuVG9OYW5vc2Vjb25kcygpOgogICAgcmV0dXJuIGEKICBlbHNlOgogICAgcmV0dXJuIGIKCgpkZWYgY29uc29saWRhdGUobWV0cmljcywga2V5PXRvX2tleSk6CiAgZ3JvdXBlZCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgZm9yIG1ldHJpYyBpbiBtZXRyaWNzOgogICAgZ3JvdXBlZFtrZXkobWV0cmljKV0uYXBwZW5kKG1ldHJpYykKICBmb3IgdmFsdWVzIGluIGdyb3VwZWQudmFsdWVzKCk6CiAgICBpZiBsZW4odmFsdWVzKSA9PSAxOgogICAgICB5aWVsZCB2YWx1ZXNbMF0KICAgIGVsc2U6CiAgICAgIGNvbWJpbmVyID0gX0tOT1dOX0NPTUJJTkVSUy5nZXQodmFsdWVzWzBdLnR5cGUpCiAgICAgIGlmIGNvbWJpbmVyOgoKICAgICAgICBkZWYgbWVyZ2UoYSwgYik6CiAgICAgICAgICAjIHB5bGludDogZGlzYWJsZT1jZWxsLXZhci1mcm9tLWxvb3AKICAgICAgICAgIHJldHVybiBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mbygKICAgICAgICAgICAgICB1cm49YS51cm4sCiAgICAgICAgICAgICAgdHlwZT1hLnR5cGUsCiAgICAgICAgICAgICAgbGFiZWxzPWRpY3QoKGxhYmVsLCB2YWx1ZSkgZm9yIGxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGluIGEubGFiZWxzLml0ZW1zKCkKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBiLmxhYmVscy5nZXQobGFiZWwpID09IHZhbHVlKSwKICAgICAgICAgICAgICBtZXRyaWM9Y29tYmluZXIoYS5tZXRyaWMsIGIubWV0cmljKSwKICAgICAgICAgICAgICB0aW1lc3RhbXA9bWF4X3RpbWVzdGFtcChhLnRpbWVzdGFtcCwgYi50aW1lc3RhbXApKQoKICAgICAgICB5aWVsZCByZWR1Y2UobWVyZ2UsIHZhbHVlcykKICAgICAgZWxzZToKICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzOgogICAgICAgICAgeWllbGQgdmFsdWUKlH2UKIwSdG9fdGltZXN0YW1wX3Byb3RvlGpWMQEAS1FLWYeUjBF0b190aW1lc3RhbXBfc2Vjc5RqVjEBAEtcS2KHlIwVZXh0cmFjdF9jb3VudGVyX3ZhbHVllGpWMQEAS2VLaYeUjBRleHRyYWN0X2Rpc3RyaWJ1dGlvbpRqVjEBAEtsS3SHlIwNY3JlYXRlX2xhYmVsc5RqVjEBAEt3S4eHlIwSaW50NjRfdXNlcl9jb3VudGVylGpWMQEAS4pLnIeUjA1pbnQ2NF9jb3VudGVylGpWMQEAS59Lr4eUjBdpbnQ2NF91c2VyX2Rpc3RyaWJ1dGlvbpRqVjEBAEuyS7+HlIwSaW50NjRfZGlzdHJpYnV0aW9ulGpWMQEAS8JLzoeUjBBpbnQ2NF91c2VyX2dhdWdllGpWMQEAS9FL4YeUjAtpbnQ2NF9nYXVnZZRqVjEBAEvkS/GHlIwWY3JlYXRlX21vbml0b3JpbmdfaW5mb5RqVjEBAEv0TQYBh5SMCmlzX2NvdW50ZXKUalYxAQBNCQFNCwGHlIwPaXNfZGlzdHJpYnV0aW9ulGpWMQEATQ4BTRABh5SMCGlzX2dhdWdllGpWMQEATRMBTRUBh5SMGF9pc191c2VyX21vbml0b3JpbmdfaW5mb5RqVjEBAE0YAU0ZAYeUjCVfaXNfdXNlcl9kaXN0cmlidXRpb25fbW9uaXRvcmluZ19pbmZvlGpWMQEATRwBTR0Bh5SMF2lzX3VzZXJfbW9uaXRvcmluZ19pbmZvlGpWMQEATSABTSUBh5SMH2V4dHJhY3RfbWV0cmljX3Jlc3VsdF9tYXBfdmFsdWWUalYxAQBNKAFNPAGHlIwYcGFyc2VfbmFtZXNwYWNlX2FuZF9uYW1llGpWMQEATT8BTUgBh5SMDWdldF9zdGVwX25hbWWUalYxAQBNSwFNTwGHlIwGdG9fa2V5lGpWMQEATVIBTVsBh5SMFWRpc3RyaWJ1dGlvbl9jb21iaW5lcpRqVjEBAE1eAU1nAYeUjA1tYXhfdGltZXN0YW1wlGpWMQEATXQBTXgBh5SMEWNvbnNvbGlkYXRlLm1lcmdllGpWMQEATYYBTY8Bh5SMC2NvbnNvbGlkYXRllGpWMQEATXsBTZQBh5R1fZQojBJ0b190aW1lc3RhbXBfcHJvdG+UarUDAACMEXRvX3RpbWVzdGFtcF9zZWNzlGq1AwAAjBVleHRyYWN0X2NvdW50ZXJfdmFsdWWUarUDAACMFGV4dHJhY3RfZGlzdHJpYnV0aW9ulGq1AwAAjA1jcmVhdGVfbGFiZWxzlGq1AwAAjBJpbnQ2NF91c2VyX2NvdW50ZXKUarUDAACMDWludDY0X2NvdW50ZXKUarUDAACMF2ludDY0X3VzZXJfZGlzdHJpYnV0aW9ulGq1AwAAjBJpbnQ2NF9kaXN0cmlidXRpb26UarUDAACMEGludDY0X3VzZXJfZ2F1Z2WUarUDAACMC2ludDY0X2dhdWdllGq1AwAAjBZjcmVhdGVfbW9uaXRvcmluZ19pbmZvlGq1AwAAjAppc19jb3VudGVylGq1AwAAjA9pc19kaXN0cmlidXRpb26UarUDAACMCGlzX2dhdWdllGq1AwAAjBdpc191c2VyX21vbml0b3JpbmdfaW5mb5RqtQMAAIwfZXh0cmFjdF9tZXRyaWNfcmVzdWx0X21hcF92YWx1ZZRqtQMAAIwYcGFyc2VfbmFtZXNwYWNlX2FuZF9uYW1llGq1AwAAjA1nZXRfc3RlcF9uYW1llGq1AwAAjAZ0b19rZXmUarUDAACMFWRpc3RyaWJ1dGlvbl9jb21iaW5lcpRqtQMAAIwNbWF4X3RpbWVzdGFtcJRqtQMAAIwLY29uc29saWRhdGWUarUDAAB1jCRhcGFjaGVfYmVhbS5tZXRyaWNzLm1vbml0b3JpbmdfaW5mb3OUdJSMHGFwYWNoZV9iZWFtLm1sLmdjcC5jbG91ZF9kbHCUKFgMIAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJgYFBUcmFuc2Zvcm1zYGAgdGhhdCBpbXBsZW1lbnQgR29vZ2xlIENsb3VkIERhdGEgTG9zcyBQcmV2ZW50aW9uCmZ1bmN0aW9uYWxpdHkuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCgpmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgZGxwX3YyCgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIGltcG9ydCBleHBlcmltZW50YWwKCl9fYWxsX18gPSBbJ01hc2tEZXRlY3RlZERldGFpbHMnLCAnSW5zcGVjdEZvckRldGFpbHMnXQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCkBleHBlcmltZW50YWwoKQpjbGFzcyBNYXNrRGV0ZWN0ZWREZXRhaWxzKFBUcmFuc2Zvcm0pOgogICIiIlNjcnVicyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZGV0ZWN0ZWQgaW4gdGV4dC4KICBUaGUgYGBQVHJhbnNmb3JtYGAgcmV0dXJucyBhIGBgUENvbGxlY3Rpb25gYCBvZiBgYHN0cmBgCiAgRXhhbXBsZSB1c2FnZTo6CgogICAgcGlwZWxpbmUgfCBNYXNrRGV0ZWN0ZWREZXRhaWxzKHByb2plY3Q9J2V4YW1wbGUtZ2NwLXByb2plY3QnLAogICAgICBkZWlkZW50aWZpY2F0aW9uX2NvbmZpZz17CiAgICAgICAgICAnaW5mb190eXBlX3RyYW5zZm9ybWF0aW9uczogewogICAgICAgICAgICAgICd0cmFuc2Zvcm1hdGlvbnMnOiBbewogICAgICAgICAgICAgICAgICAncHJpbWl0aXZlX3RyYW5zZm9ybWF0aW9uJzogewogICAgICAgICAgICAgICAgICAgICAgJ2NoYXJhY3Rlcl9tYXNrX2NvbmZpZyc6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFza2luZ19jaGFyYWN0ZXInOiAnIycKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH1dCiAgICAgICAgICB9CiAgICAgIH0sIGluc3BlY3Rpb25fY29uZmlnPXsnaW5mb190eXBlcyc6IFt7J25hbWUnOiAnRU1BSUxfQUREUkVTUyd9XX0pCgogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgcHJvamVjdD1Ob25lLAogICAgICBkZWlkZW50aWZpY2F0aW9uX3RlbXBsYXRlX25hbWU9Tm9uZSwKICAgICAgZGVpZGVudGlmaWNhdGlvbl9jb25maWc9Tm9uZSwKICAgICAgaW5zcGVjdGlvbl90ZW1wbGF0ZV9uYW1lPU5vbmUsCiAgICAgIGluc3BlY3Rpb25fY29uZmlnPU5vbmUsCiAgICAgIHRpbWVvdXQ9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplcyBhIDpjbGFzczpgTWFza0RldGVjdGVkRGV0YWlsc2AgdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3Q6IE9wdGlvbmFsLiBHQ1AgcHJvamVjdCBuYW1lIGluIHdoaWNoIGluc3BlY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQKICAgICAgZGVpZGVudGlmaWNhdGlvbl90ZW1wbGF0ZV9uYW1lIChzdHIpOiBFaXRoZXIgdGhpcyBvcgogICAgICAgIGBkZWlkZW50aWZpY2F0aW9uX2NvbmZpZ2AgcmVxdWlyZWQuIE5hbWUgb2YKICAgICAgICBkZWlkZW50aWZpY2F0aW9uIHRlbXBsYXRlIHRvIGJlIHVzZWQgb24gZGV0ZWN0ZWQgc2Vuc2l0aXZlIGluZm9ybWF0aW9uCiAgICAgICAgaW5zdGFuY2VzIGluIHRleHQuCiAgICAgIGRlaWRlbnRpZmljYXRpb25fY29uZmlnCiAgICAgICAgKGBgVW5pb25bZGljdCwgZ29vZ2xlLmNsb3VkLmRscF92Mi50eXBlcy5EZWlkZW50aWZ5Q29uZmlnXWBgKToKICAgICAgICBDb25maWd1cmF0aW9uIGZvciB0aGUgZGUtaWRlbnRpZmljYXRpb24gb2YgdGhlIGNvbnRlbnQgaXRlbS4KICAgICAgICBJZiBib3RoIHRlbXBsYXRlIG5hbWUgYW5kIGNvbmZpZyBhcmUgc3VwcGxpZWQsCiAgICAgICAgY29uZmlnIGlzIG1vcmUgaW1wb3J0YW50LgogICAgICBpbnNwZWN0aW9uX3RlbXBsYXRlX25hbWUgKHN0cik6IFRoaXMgb3IgYGluc3BlY3Rpb25fY29uZmlnYCByZXF1aXJlZC4KICAgICAgICBOYW1lIG9mIGluc3BlY3Rpb24gdGVtcGxhdGUgdG8gYmUgdXNlZAogICAgICAgIHRvIGRldGVjdCBzZW5zaXRpdmUgZGF0YSBpbiB0ZXh0LgogICAgICBpbnNwZWN0aW9uX2NvbmZpZwogICAgICAgIChgYFVuaW9uW2RpY3QsIGdvb2dsZS5jbG91ZC5kbHBfdjIudHlwZXMuSW5zcGVjdENvbmZpZ11gYCk6CiAgICAgICAgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGluc3BlY3RvciB1c2VkIHRvIGRldGVjdCBzZW5zaXRpdmUgZGF0YSBpbiB0ZXh0LgogICAgICAgIElmIGJvdGggdGVtcGxhdGUgbmFtZSBhbmQgY29uZmlnIGFyZSBzdXBwbGllZCwKICAgICAgICBjb25maWcgdGFrZXMgcHJlY2VkZW5jZS4KICAgICAgdGltZW91dCAoZmxvYXQpOiBPcHRpb25hbC4gVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0byB3YWl0IGZvcgogICAgICAgIHRoZSByZXF1ZXN0IHRvIGNvbXBsZXRlLgoKICAgICIiIgogICAgc2VsZi5jb25maWcgPSB7fQogICAgc2VsZi5wcm9qZWN0ID0gcHJvamVjdAogICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgaWYgZGVpZGVudGlmaWNhdGlvbl90ZW1wbGF0ZV9uYW1lIGlzIG5vdCBOb25lIFwKICAgICAgICBhbmQgZGVpZGVudGlmaWNhdGlvbl9jb25maWcgaXMgbm90IE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnQm90aCBkZWlkZW50aWZpY2F0aW9uX3RlbXBsYXRlX25hbWUgYW5kICcKICAgICAgICAgICdkZWlkZW50aWZpY2F0aW9uX2NvbmZpZyB3ZXJlIHNwZWNpZmllZC4nCiAgICAgICAgICAnIFBsZWFzZSBzcGVjaWZ5IG9ubHkgb25lIG9mIHRoZXNlLicpCiAgICBlbGlmIGRlaWRlbnRpZmljYXRpb25fdGVtcGxhdGVfbmFtZSBpcyBOb25lIFwKICAgICAgICBhbmQgZGVpZGVudGlmaWNhdGlvbl9jb25maWcgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdkZWlkZW50aWZpY2F0aW9uX3RlbXBsYXRlX25hbWUgb3IgJwogICAgICAgICAgJ2RlaWRlbnRpZmljYXRpb25fY29uZmlnIG11c3QgYmUgc3BlY2lmaWVkLicpCiAgICBlbGlmIGRlaWRlbnRpZmljYXRpb25fdGVtcGxhdGVfbmFtZSBpcyBub3QgTm9uZToKICAgICAgc2VsZi5jb25maWdbJ2RlaWRlbnRpZnlfdGVtcGxhdGVfbmFtZSddID0gZGVpZGVudGlmaWNhdGlvbl90ZW1wbGF0ZV9uYW1lCiAgICBlbHNlOgogICAgICBzZWxmLmNvbmZpZ1snZGVpZGVudGlmeV9jb25maWcnXSA9IGRlaWRlbnRpZmljYXRpb25fY29uZmlnCgogICAgaWYgaW5zcGVjdGlvbl9jb25maWcgaXMgTm9uZSBhbmQgaW5zcGVjdGlvbl90ZW1wbGF0ZV9uYW1lIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnaW5zcGVjdGlvbl90ZW1wbGF0ZV9uYW1lIG9yIGluc3BlY3Rpb25fY29uZmlnIG11c3QgYmUgc3BlY2lmaWVkJykKICAgIGlmIGluc3BlY3Rpb25fdGVtcGxhdGVfbmFtZSBpcyBub3QgTm9uZToKICAgICAgc2VsZi5jb25maWdbJ2luc3BlY3RfdGVtcGxhdGVfbmFtZSddID0gaW5zcGVjdGlvbl90ZW1wbGF0ZV9uYW1lCiAgICBpZiBpbnNwZWN0aW9uX2NvbmZpZyBpcyBub3QgTm9uZToKICAgICAgc2VsZi5jb25maWdbJ2luc3BlY3RfY29uZmlnJ10gPSBpbnNwZWN0aW9uX2NvbmZpZwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGlmIHNlbGYucHJvamVjdCBpcyBOb25lOgogICAgICBzZWxmLnByb2plY3QgPSBwY29sbC5waXBlbGluZS5vcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS5wcm9qZWN0CiAgICBpZiBzZWxmLnByb2plY3QgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdHQ1AgcHJvamVjdCBuYW1lIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBpbiAicHJvamVjdCIgcGlwZWxpbmUgb3B0aW9uJykKICAgIHJldHVybiAoCiAgICAgICAgcGNvbGwKICAgICAgICB8IFBhckRvKF9EZWlkZW50aWZ5Rm4oc2VsZi5jb25maWcsIHNlbGYudGltZW91dCwgc2VsZi5wcm9qZWN0KSkpCgoKQGV4cGVyaW1lbnRhbCgpCmNsYXNzIEluc3BlY3RGb3JEZXRhaWxzKFBUcmFuc2Zvcm0pOgogICIiIkluc3BlY3RzIGlucHV0IHRleHQgZm9yIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KICB0aGUgYGBQVHJhbnNmb3JtYGAgcmV0dXJucyBhIGBgUENvbGxlY3Rpb25gYCBvZgogIGBgTGlzdFtnb29nbGUuY2xvdWQuZGxwX3YyLnByb3RvLmRscF9wYjIuRmluZGluZ11gYAogIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgcGlwZWxpbmUgfCBJbnNwZWN0Rm9yRGV0YWlscyhwcm9qZWN0PSdleGFtcGxlLWdjcC1wcm9qZWN0JywKICAgICAgICAgICAgICAgIGluc3BlY3Rpb25fY29uZmlnPXsnaW5mb190eXBlcyc6IFt7J25hbWUnOiAnRU1BSUxfQUREUkVTUyd9XX0pCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBwcm9qZWN0PU5vbmUsCiAgICAgIGluc3BlY3Rpb25fdGVtcGxhdGVfbmFtZT1Ob25lLAogICAgICBpbnNwZWN0aW9uX2NvbmZpZz1Ob25lLAogICAgICB0aW1lb3V0PU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgYSA6Y2xhc3M6YEluc3BlY3RGb3JEZXRhaWxzYCB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgcHJvamVjdDogT3B0aW9uYWwuIEdDUCBwcm9qZWN0IG5hbWUgaW4gd2hpY2ggaW5zcGVjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZAogICAgICBpbnNwZWN0aW9uX3RlbXBsYXRlX25hbWUgKHN0cik6IFRoaXMgb3IgYGluc3BlY3Rpb25fY29uZmlnYCByZXF1aXJlZC4KICAgICAgICBOYW1lIG9mIGluc3BlY3Rpb24gdGVtcGxhdGUgdG8gYmUgdXNlZAogICAgICAgIHRvIGRldGVjdCBzZW5zaXRpdmUgZGF0YSBpbiB0ZXh0LgogICAgICBpbnNwZWN0aW9uX2NvbmZpZwogICAgICAgIChgYFVuaW9uW2RpY3QsIGdvb2dsZS5jbG91ZC5kbHBfdjIudHlwZXMuSW5zcGVjdENvbmZpZ11gYCk6CiAgICAgICAgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGluc3BlY3RvciB1c2VkIHRvIGRldGVjdCBzZW5zaXRpdmUgZGF0YSBpbiB0ZXh0LgogICAgICAgIElmIGJvdGggdGVtcGxhdGUgbmFtZSBhbmQgY29uZmlnIGFyZSBzdXBwbGllZCwKICAgICAgICBjb25maWcgdGFrZXMgcHJlY2VkZW5jZS4KICAgICAgdGltZW91dCAoZmxvYXQpOiBPcHRpb25hbC4gVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0byB3YWl0IGZvcgogICAgICAgIHRoZSByZXF1ZXN0IHRvIGNvbXBsZXRlLgoKICAgICIiIgogICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgc2VsZi5jb25maWcgPSB7fQogICAgc2VsZi5wcm9qZWN0ID0gcHJvamVjdAogICAgaWYgaW5zcGVjdGlvbl9jb25maWcgaXMgTm9uZSBhbmQgaW5zcGVjdGlvbl90ZW1wbGF0ZV9uYW1lIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnaW5zcGVjdGlvbl90ZW1wbGF0ZV9uYW1lIG9yIGluc3BlY3Rpb25fY29uZmlnIG11c3QgYmUgc3BlY2lmaWVkJykKICAgIGlmIGluc3BlY3Rpb25fdGVtcGxhdGVfbmFtZSBpcyBub3QgTm9uZToKICAgICAgc2VsZi5jb25maWdbJ2luc3BlY3RfdGVtcGxhdGVfbmFtZSddID0gaW5zcGVjdGlvbl90ZW1wbGF0ZV9uYW1lCiAgICBpZiBpbnNwZWN0aW9uX2NvbmZpZyBpcyBub3QgTm9uZToKICAgICAgc2VsZi5jb25maWdbJ2luc3BlY3RfY29uZmlnJ10gPSBpbnNwZWN0aW9uX2NvbmZpZwoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGlmIHNlbGYucHJvamVjdCBpcyBOb25lOgogICAgICBzZWxmLnByb2plY3QgPSBwY29sbC5waXBlbGluZS5vcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS5wcm9qZWN0CiAgICBpZiBzZWxmLnByb2plY3QgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdHQ1AgcHJvamVjdCBuYW1lIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBpbiAicHJvamVjdCIgcGlwZWxpbmUgb3B0aW9uJykKICAgIHJldHVybiBwY29sbCB8IFBhckRvKF9JbnNwZWN0Rm4oc2VsZi5jb25maWcsIHNlbGYudGltZW91dCwgc2VsZi5wcm9qZWN0KSkKCgpjbGFzcyBfRGVpZGVudGlmeUZuKERvRm4pOgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWc9Tm9uZSwgdGltZW91dD1Ob25lLCBwcm9qZWN0PU5vbmUsIGNsaWVudD1Ob25lKToKICAgIHNlbGYuY29uZmlnID0gY29uZmlnCiAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CiAgICBzZWxmLmNsaWVudCA9IGNsaWVudAogICAgc2VsZi5wcm9qZWN0ID0gcHJvamVjdAogICAgc2VsZi5wYXJhbXMgPSB7fQoKICBkZWYgc2V0dXAoc2VsZik6CiAgICBpZiBzZWxmLmNsaWVudCBpcyBOb25lOgogICAgICBzZWxmLmNsaWVudCA9IGRscF92Mi5EbHBTZXJ2aWNlQ2xpZW50KCkKICAgIHNlbGYucGFyYW1zID0gewogICAgICAgICd0aW1lb3V0Jzogc2VsZi50aW1lb3V0LAogICAgICAgICdwYXJlbnQnOiBzZWxmLmNsaWVudC5wcm9qZWN0X3BhdGgoc2VsZi5wcm9qZWN0KQogICAgfQogICAgc2VsZi5wYXJhbXMudXBkYXRlKHNlbGYuY29uZmlnKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCAqKmt3YXJncyk6CiAgICBvcGVyYXRpb24gPSBzZWxmLmNsaWVudC5kZWlkZW50aWZ5X2NvbnRlbnQoCiAgICAgICAgaXRlbT17InZhbHVlIjogZWxlbWVudH0sICoqc2VsZi5wYXJhbXMpCiAgICB5aWVsZCBvcGVyYXRpb24uaXRlbS52YWx1ZQoKCmNsYXNzIF9JbnNwZWN0Rm4oRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZz1Ob25lLCB0aW1lb3V0PU5vbmUsIHByb2plY3Q9Tm9uZSk6CiAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwogICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgc2VsZi5jbGllbnQgPSBOb25lCiAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CiAgICBzZWxmLnBhcmFtcyA9IHt9CgogIGRlZiBzZXR1cChzZWxmKToKICAgIGlmIHNlbGYuY2xpZW50IGlzIE5vbmU6CiAgICAgIHNlbGYuY2xpZW50ID0gZGxwX3YyLkRscFNlcnZpY2VDbGllbnQoKQogICAgc2VsZi5wYXJhbXMgPSB7CiAgICAgICAgJ3RpbWVvdXQnOiBzZWxmLnRpbWVvdXQsCiAgICAgICAgInBhcmVudCI6IHNlbGYuY2xpZW50LnByb2plY3RfcGF0aChzZWxmLnByb2plY3QpCiAgICB9CiAgICBzZWxmLnBhcmFtcy51cGRhdGUoc2VsZi5jb25maWcpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICoqa3dhcmdzKToKICAgIG9wZXJhdGlvbiA9IHNlbGYuY2xpZW50Lmluc3BlY3RfY29udGVudCgKICAgICAgICBpdGVtPXsidmFsdWUiOiBlbGVtZW50fSwgKipzZWxmLnBhcmFtcykKICAgIGhpdHMgPSBbeCBmb3IgeCBpbiBvcGVyYXRpb24ucmVzdWx0LmZpbmRpbmdzXQogICAgeWllbGQgaGl0cwqUfZQojBxNYXNrRGV0ZWN0ZWREZXRhaWxzLl9faW5pdF9flGpWMQEASztLdYeUjBpNYXNrRGV0ZWN0ZWREZXRhaWxzLmV4cGFuZJRqVjEBAEt3S3+HlIwTTWFza0RldGVjdGVkRGV0YWlsc5RqXTEBAEsnS3+HlIwaSW5zcGVjdEZvckRldGFpbHMuX19pbml0X1+UalYxAQBLjEurh5SMGEluc3BlY3RGb3JEZXRhaWxzLmV4cGFuZJRqVjEBAEutS7OHlIwRSW5zcGVjdEZvckRldGFpbHOUal0xAQBLgkuzh5SMFl9EZWlkZW50aWZ5Rm4uX19pbml0X1+UalYxAQBLt0u8h5SME19EZWlkZW50aWZ5Rm4uc2V0dXCUalYxAQBLvkvFh5SMFV9EZWlkZW50aWZ5Rm4ucHJvY2Vzc5RqVjEBAEvHS8qHlIwNX0RlaWRlbnRpZnlGbpRqXTEBAEu2S8qHlIwTX0luc3BlY3RGbi5fX2luaXRfX5RqVjEBAEvOS9OHlIwQX0luc3BlY3RGbi5zZXR1cJRqVjEBAEvVS9yHlIwSX0luc3BlY3RGbi5wcm9jZXNzlGpWMQEAS95L4oeUjApfSW5zcGVjdEZulGpdMQEAS81L4oeUdX2UKIwTTWFza0RldGVjdGVkRGV0YWlsc5RqTgMAAIwaTWFza0RldGVjdGVkRGV0YWlscy5leHBhbmSUak4DAACMEUluc3BlY3RGb3JEZXRhaWxzlGpOAwAAjBhJbnNwZWN0Rm9yRGV0YWlscy5leHBhbmSUak4DAAB1jBxhcGFjaGVfYmVhbS5tbC5nY3AuY2xvdWRfZGxwlHSUjCRhcGFjaGVfYmVhbS5tbC5nY3AubmF0dXJhbGxhbmd1YWdlbWyUKFhkFAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSB0eXBpbmcgaW1wb3J0IE1hcHBpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBTZXF1ZW5jZQpmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKCnRyeToKICBmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgbGFuZ3VhZ2UKICBmcm9tIGdvb2dsZS5jbG91ZC5sYW5ndWFnZSBpbXBvcnQgZW51bXMgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKICBmcm9tIGdvb2dsZS5jbG91ZC5sYW5ndWFnZSBpbXBvcnQgdHlwZXMKZXhjZXB0IEltcG9ydEVycm9yOgogIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAnR29vZ2xlIENsb3VkIE5hdHVyYWwgTGFuZ3VhZ2UgQVBJIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgZXhlY3V0aW9uICcKICAgICAgJ2Vudmlyb25tZW50IChjb3VsZCBub3QgaW1wb3J0IE5hdHVyYWwgTGFuZ3VhZ2UgQVBJIGNsaWVudCkuJykKCl9fYWxsX18gPSBbJ0RvY3VtZW50JywgJ0Fubm90YXRlVGV4dCddCgoKY2xhc3MgRG9jdW1lbnQob2JqZWN0KToKICAiIiJSZXByZXNlbnRzIHRoZSBpbnB1dCB0byA6Y2xhc3M6YEFubm90YXRlVGV4dGAgdHJhbnNmb3JtLgoKICBBcmdzOgogICAgY29udGVudCAoc3RyKTogVGhlIGNvbnRlbnQgb2YgdGhlIGlucHV0IG9yIHRoZSBHb29nbGUgQ2xvdWQgU3RvcmFnZSBVUkkKICAgICAgd2hlcmUgdGhlIGZpbGUgaXMgc3RvcmVkLgogICAgdHlwZSAoYFVuaW9uW3N0ciwgZ29vZ2xlLmNsb3VkLmxhbmd1YWdlLmVudW1zLkRvY3VtZW50LlR5cGVdYCk6IFRleHQgdHlwZS4KICAgICAgUG9zc2libGUgdmFsdWVzIGFyZSBgSFRNTGAsIGBQTEFJTl9URVhUYC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMKICAgICAgYFBMQUlOX1RFWFRgLgogICAgbGFuZ3VhZ2VfaGludCAoYE9wdGlvbmFsW3N0cl1gKTogVGhlIGxhbmd1YWdlIG9mIHRoZSB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkLAogICAgICBsYW5ndWFnZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQuIFZhbHVlcyBzaG91bGQgY29uZm9ybSB0bwogICAgICBJU08tNjM5LTEgc3RhbmRhcmQuCiAgICBlbmNvZGluZyAoYE9wdGlvbmFsW3N0cl1gKTogVGV4dCBlbmNvZGluZy4gUG9zc2libGUgdmFsdWVzIGFyZTogYE5PTkVgLAogICAgIGBVVEY4YCwgYFVURjE2YCwgYFVURjMyYC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYFVURjhgLgogICAgZnJvbV9nY3MgKGJvb2wpOiBXaGV0aGVyIHRoZSBjb250ZW50IHNob3VsZCBiZSBpbnRlcnByZXQgYXMgYSBHb29nbGUgQ2xvdWQKICAgICAgU3RvcmFnZSBVUkkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDpkYXRhOmBGYWxzZWAuCiAgIiIiCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgY29udGVudCwgICMgdHlwZTogc3RyCiAgICAgIHR5cGU9J1BMQUlOX1RFWFQnLCAgIyB0eXBlOiBVbmlvbltzdHIsIGVudW1zLkRvY3VtZW50LlR5cGVdCiAgICAgIGxhbmd1YWdlX2hpbnQ9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbc3RyXQogICAgICBlbmNvZGluZz0nVVRGOCcsICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KICAgICAgZnJvbV9nY3M9RmFsc2UgICMgdHlwZTogYm9vbAogICk6CiAgICBzZWxmLmNvbnRlbnQgPSBjb250ZW50CiAgICBzZWxmLnR5cGUgPSB0eXBlCiAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKICAgIHNlbGYubGFuZ3VhZ2VfaGludCA9IGxhbmd1YWdlX2hpbnQKICAgIHNlbGYuZnJvbV9nY3MgPSBmcm9tX2djcwoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHRvX2RpY3QoZG9jdW1lbnQpOgogICAgIyB0eXBlOiAoRG9jdW1lbnQpIC0+IE1hcHBpbmdbc3RyLCBPcHRpb25hbFtzdHJdXQogICAgaWYgZG9jdW1lbnQuZnJvbV9nY3M6CiAgICAgIGRpY3RfcmVwciA9IHsnZ2NzX2NvbnRlbnRfdXJpJzogZG9jdW1lbnQuY29udGVudH0KICAgIGVsc2U6CiAgICAgIGRpY3RfcmVwciA9IHsnY29udGVudCc6IGRvY3VtZW50LmNvbnRlbnR9CiAgICBkaWN0X3JlcHIudXBkYXRlKHsKICAgICAgICAndHlwZSc6IGRvY3VtZW50LnR5cGUsICdsYW5ndWFnZSc6IGRvY3VtZW50Lmxhbmd1YWdlX2hpbnQKICAgIH0pCiAgICByZXR1cm4gZGljdF9yZXByCgoKQGJlYW0ucHRyYW5zZm9ybV9mbgpkZWYgQW5ub3RhdGVUZXh0KAogICAgcGNvbGwsICAjIHR5cGU6IGJlYW0ucHZhbHVlLlBDb2xsZWN0aW9uCiAgICBmZWF0dXJlcywgICMgdHlwZTogVW5pb25bTWFwcGluZ1tzdHIsIGJvb2xdLCB0eXBlcy5Bbm5vdGF0ZVRleHRSZXF1ZXN0LkZlYXR1cmVzXQogICAgdGltZW91dD1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFtmbG9hdF0KICAgIG1ldGFkYXRhPU5vbmUgICMgdHlwZTogT3B0aW9uYWxbU2VxdWVuY2VbVHVwbGVbc3RyLCBzdHJdXV0KKToKICAiIiJBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYAogIGZvciBhbm5vdGF0aW5nIHRleHQgdXNpbmcgdGhlIEdvb2dsZSBDbG91ZCBOYXR1cmFsIExhbmd1YWdlIEFQSToKICBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vbmF0dXJhbC1sYW5ndWFnZS9kb2NzLgoKICBBcmdzOgogICAgcGNvbGwgKDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmApOiBBbiBpbnB1dCBQQ29sbGVjdGlvbiBvZgogICAgICA6Y2xhc3M6YERvY3VtZW50YCBvYmplY3RzLgogICAgZmVhdHVyZXMgKGBVbmlvbltNYXBwaW5nW3N0ciwgYm9vbF0sIHR5cGVzLkFubm90YXRlVGV4dFJlcXVlc3QuRmVhdHVyZXNdYCk6CiAgICAgIEEgZGljdGlvbmFyeSBvZiBuYXR1cmFsIGxhbmd1YWdlIG9wZXJhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIG9uIGdpdmVuCiAgICAgIHRleHQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6OgoKICAgICAgeydleHRhY3Rfc3ludGF4Jz1UcnVlLCAnZXh0cmFjdF9lbnRpdGllcyc9VHJ1ZX0KCiAgICB0aW1lb3V0IChgT3B0aW9uYWxbZmxvYXRdYCk6IFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgdG8gd2FpdAogICAgICBmb3IgdGhlIHJlcXVlc3QgdG8gY29tcGxldGUuIFRoZSB0aW1lb3V0IGFwcGxpZXMgdG8gZWFjaCBpbmRpdmlkdWFsCiAgICAgIHJldHJ5IGF0dGVtcHQuCiAgICBtZXRhZGF0YSAoYE9wdGlvbmFsW1NlcXVlbmNlW1R1cGxlW3N0ciwgc3RyXV1dYCk6IEFkZGl0aW9uYWwgbWV0YWRhdGEKICAgICAgdGhhdCBpcyBwcm92aWRlZCB0byB0aGUgbWV0aG9kLgogICIiIgogIHJldHVybiBwY29sbCB8IGJlYW0uUGFyRG8oX0Fubm90YXRlVGV4dEZuKGZlYXR1cmVzLCB0aW1lb3V0LCBtZXRhZGF0YSkpCgoKQGJlYW0udHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoRG9jdW1lbnQpCkBiZWFtLnR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBlcy5Bbm5vdGF0ZVRleHRSZXNwb25zZSkKY2xhc3MgX0Fubm90YXRlVGV4dEZuKGJlYW0uRG9Gbik6CiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBmZWF0dXJlcywgICMgdHlwZTogVW5pb25bTWFwcGluZ1tzdHIsIGJvb2xdLCB0eXBlcy5Bbm5vdGF0ZVRleHRSZXF1ZXN0LkZlYXR1cmVzXQogICAgICB0aW1lb3V0LCAgIyB0eXBlOiBPcHRpb25hbFtmbG9hdF0KICAgICAgbWV0YWRhdGE9Tm9uZSAgIyB0eXBlOiBPcHRpb25hbFtTZXF1ZW5jZVtUdXBsZVtzdHIsIHN0cl1dXQogICk6CiAgICBzZWxmLmZlYXR1cmVzID0gZmVhdHVyZXMKICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YQogICAgc2VsZi5hcGlfY2FsbHMgPSBNZXRyaWNzLmNvdW50ZXIoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICdhcGlfY2FsbHMnKQogICAgc2VsZi5jbGllbnQgPSBOb25lCgogIGRlZiBzZXR1cChzZWxmKToKICAgIHNlbGYuY2xpZW50ID0gc2VsZi5fZ2V0X2FwaV9jbGllbnQoKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9nZXRfYXBpX2NsaWVudCgpOgogICAgIyB0eXBlOiAoKSAtPiBsYW5ndWFnZS5MYW5ndWFnZVNlcnZpY2VDbGllbnQKICAgIHJldHVybiBsYW5ndWFnZS5MYW5ndWFnZVNlcnZpY2VDbGllbnQoKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuYW5ub3RhdGVfdGV4dCgKICAgICAgICBkb2N1bWVudD1Eb2N1bWVudC50b19kaWN0KGVsZW1lbnQpLAogICAgICAgIGZlYXR1cmVzPXNlbGYuZmVhdHVyZXMsCiAgICAgICAgZW5jb2RpbmdfdHlwZT1lbGVtZW50LmVuY29kaW5nLAogICAgICAgIHRpbWVvdXQ9c2VsZi50aW1lb3V0LAogICAgICAgIG1ldGFkYXRhPXNlbGYubWV0YWRhdGEpCiAgICBzZWxmLmFwaV9jYWxscy5pbmMoKQogICAgeWllbGQgcmVzcG9uc2UKlH2UKIwRRG9jdW1lbnQuX19pbml0X1+UalYxAQBLO0tHh5SMEERvY3VtZW50LnRvX2RpY3SUalYxAQBLSUtTh5SMCERvY3VtZW50lGpdMQEASylLU4eUjAxBbm5vdGF0ZVRleHSUalYxAQBLVktwh5SMGF9Bbm5vdGF0ZVRleHRGbi5fX2luaXRfX5RqVjEBAEt2S4CHlIwVX0Fubm90YXRlVGV4dEZuLnNldHVwlGpWMQEAS4JLg4eUjB9fQW5ub3RhdGVUZXh0Rm4uX2dldF9hcGlfY2xpZW50lGpWMQEAS4VLiIeUjBdfQW5ub3RhdGVUZXh0Rm4ucHJvY2Vzc5RqVjEBAEuKS5KHlIwPX0Fubm90YXRlVGV4dEZulGpdMQEAS3NLkoeUdX2UKIwIRG9jdW1lbnSUaqMDAACMEERvY3VtZW50LnRvX2RpY3SUaqMDAACMDEFubm90YXRlVGV4dJRqowMAAHWMJGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbJR0lIwsYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sX3Rlc3RfaXSUKFjBCQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgdW5pdHRlc3QKCmZyb20gbm9zZS5wbHVnaW5zLmF0dHJpYiBpbXBvcnQgYXR0cgoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmUgaW1wb3J0IFRlc3RQaXBlbGluZQpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbCBpbXBvcnQgYXNzZXJ0X3RoYXQKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwgaW1wb3J0IGVxdWFsX3RvCgojIFByb3RlY3QgYWdhaW5zdCBlbnZpcm9ubWVudHMgd2hlcmUgR29vZ2xlIENsb3VkIE5hdHVyYWwgTGFuZ3VhZ2UgY2xpZW50IGlzCiMgbm90IGF2YWlsYWJsZS4KdHJ5OgogIGZyb20gYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sIGltcG9ydCBBbm5vdGF0ZVRleHQKICBmcm9tIGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbCBpbXBvcnQgRG9jdW1lbnQKICBmcm9tIGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbCBpbXBvcnQgZW51bXMKICBmcm9tIGFwYWNoZV9iZWFtLm1sLmdjcC5uYXR1cmFsbGFuZ3VhZ2VtbCBpbXBvcnQgdHlwZXMKZXhjZXB0IEltcG9ydEVycm9yOgogIEFubm90YXRlVGV4dCA9IE5vbmUKCgpkZWYgZXh0cmFjdChyZXNwb25zZSk6CiAgeWllbGQgYmVhbS5wdmFsdWUuVGFnZ2VkT3V0cHV0KCdsYW5ndWFnZScsIHJlc3BvbnNlLmxhbmd1YWdlKQogIHlpZWxkIGJlYW0ucHZhbHVlLlRhZ2dlZE91dHB1dCgKICAgICAgJ3BhcnRzX29mX3NwZWVjaCcsCiAgICAgIFsKICAgICAgICAgIGVudW1zLlBhcnRPZlNwZWVjaC5UYWcoeC5wYXJ0X29mX3NwZWVjaC50YWcpLm5hbWUKICAgICAgICAgIGZvciB4IGluIHJlc3BvbnNlLnRva2VucwogICAgICBdKQoKCkBhdHRyKCdJVCcpCkB1bml0dGVzdC5za2lwSWYoQW5ub3RhdGVUZXh0IGlzIE5vbmUsICdHQ1AgZGVwZW5kZW5jaWVzIGFyZSBub3QgaW5zdGFsbGVkJykKY2xhc3MgTmF0dXJhbExhbmd1YWdlTWxUZXN0SVQodW5pdHRlc3QuVGVzdENhc2UpOgogIGRlZiB0ZXN0X2FuYWx5emluZ19zeW50YXgoc2VsZik6CiAgICB3aXRoIFRlc3RQaXBlbGluZShpc19pbnRlZ3JhdGlvbl90ZXN0PVRydWUpIGFzIHA6CiAgICAgIG91dHB1dCA9ICgKICAgICAgICAgIHAKICAgICAgICAgIHwgYmVhbS5DcmVhdGUoW0RvY3VtZW50KCdVbmlmaWVkIHByb2dyYW1taW5nIG1vZGVsLicpXSkKICAgICAgICAgIHwgQW5ub3RhdGVUZXh0KAogICAgICAgICAgICAgIHR5cGVzLkFubm90YXRlVGV4dFJlcXVlc3QuRmVhdHVyZXMoZXh0cmFjdF9zeW50YXg9VHJ1ZSkpCiAgICAgICAgICB8IGJlYW0uUGFyRG8oZXh0cmFjdCkud2l0aF9vdXRwdXRzKCdsYW5ndWFnZScsICdwYXJ0c19vZl9zcGVlY2gnKSkKCiAgICAgIGFzc2VydF90aGF0KG91dHB1dC5sYW5ndWFnZSwgZXF1YWxfdG8oWydlbiddKSwgbGFiZWw9J3ZlcmlmeV9sYW5ndWFnZScpCiAgICAgIGFzc2VydF90aGF0KAogICAgICAgICAgb3V0cHV0LnBhcnRzX29mX3NwZWVjaCwKICAgICAgICAgIGVxdWFsX3RvKFtbJ0FESicsICdOT1VOJywgJ05PVU4nLCAnUFVOQ1QnXV0pLAogICAgICAgICAgbGFiZWw9J3ZlcmlmeV9wYXJ0c19vZl9zcGVlY2gnKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgdW5pdHRlc3QubWFpbigpCpR9lCiMB2V4dHJhY3SUalYxAQBLKUswh5SMLU5hdHVyYWxMYW5ndWFnZU1sVGVzdElULnRlc3RfYW5hbHl6aW5nX3N5bnRheJRqVjEBAEs2S0OHlIwXTmF0dXJhbExhbmd1YWdlTWxUZXN0SVSUal0xAQBLM0tDh5R1fZQojAdleHRyYWN0lGqDAwAAjBdOYXR1cmFsTGFuZ3VhZ2VNbFRlc3RJVJRqgwMAAIwtTmF0dXJhbExhbmd1YWdlTWxUZXN0SVQudGVzdF9hbmFseXppbmdfc3ludGF4lGqDAwAAdYwsYXBhY2hlX2JlYW0ubWwuZ2NwLm5hdHVyYWxsYW5ndWFnZW1sX3Rlc3RfaXSUdJSMJmFwYWNoZV9iZWFtLm1sLmdjcC52aWRlb2ludGVsbGlnZW5jZW1slChYRyEAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBjb25uZWN0b3IgZm9yIHNlbmRpbmcgQVBJIHJlcXVlc3RzIHRvIHRoZSBHQ1AgVmlkZW8gSW50ZWxsaWdlbmNlIEFQSS4iIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IGJpbmFyeV90eXBlCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCB0ZXh0X3R5cGUKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gY2FjaGV0b29scy5mdW5jIGltcG9ydCB0dGxfY2FjaGUKCnRyeToKICBmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgdmlkZW9pbnRlbGxpZ2VuY2UKZXhjZXB0IEltcG9ydEVycm9yOgogIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAnR29vZ2xlIENsb3VkIFZpZGVvIEludGVsbGlnZW5jZSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGV4ZWN1dGlvbiAnCiAgICAgICdlbnZpcm9ubWVudCAoY291bGQgbm90IGltcG9ydCBnb29nbGUuY2xvdWQudmlkZW9pbnRlbGxpZ2VuY2UpLicpCgpfX2FsbF9fID0gWydBbm5vdGF0ZVZpZGVvJywgJ0Fubm90YXRlVmlkZW9XaXRoQ29udGV4dCddCgoKQHR0bF9jYWNoZShtYXhzaXplPTEyOCwgdHRsPTM2MDApCmRlZiBnZXRfdmlkZW9pbnRlbGxpZ2VuY2VfY2xpZW50KCk6CiAgIiIiUmV0dXJucyBhIENsb3VkIFZpZGVvIEludGVsbGlnZW5jZSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHZpZGVvaW50ZWxsaWdlbmNlLlZpZGVvSW50ZWxsaWdlbmNlU2VydmljZUNsaWVudCgpCiAgcmV0dXJuIF9jbGllbnQKCgpjbGFzcyBBbm5vdGF0ZVZpZGVvKFBUcmFuc2Zvcm0pOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgZm9yIGFubm90YXRpbmcgdmlkZW8gdXNpbmcgdGhlIEdDUCBWaWRlbyBJbnRlbGxpZ2VuY2UgQVBJCiAgcmVmOiBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vdmlkZW8taW50ZWxsaWdlbmNlL2RvY3MKCiAgU2VuZHMgZWFjaCBlbGVtZW50IHRvIHRoZSBHQ1AgVmlkZW8gSW50ZWxsaWdlbmNlIEFQSS4gRWxlbWVudCBpcyBhCiAgVW5pb25bdGV4dF90eXBlLCBiaW5hcnlfdHlwZV0gb2YgZWl0aGVyIGFuIFVSSSAoZS5nLiBhIEdDUyBVUkkpIG9yCiAgYmluYXJ5X3R5cGUgYmFzZTY0LWVuY29kZWQgdmlkZW8gZGF0YS4KICBBY2NlcHRzIGFuIGBBc0RpY3RgIHNpZGUgaW5wdXQgdGhhdCBtYXBzIGVhY2ggdmlkZW8gdG8gYSB2aWRlbyBjb250ZXh0LgogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZmVhdHVyZXMsCiAgICAgIGxvY2F0aW9uX2lkPU5vbmUsCiAgICAgIG1ldGFkYXRhPU5vbmUsCiAgICAgIHRpbWVvdXQ9MTIwLAogICAgICBjb250ZXh0X3NpZGVfaW5wdXQ9Tm9uZSk6CiAgICAiIiIKICAgIEFyZ3M6CiAgICAgIGZlYXR1cmVzOiAoTGlzdFtgYHZpZGVvaW50ZWxsaWdlbmNlX3YxLmVudW1zLkZlYXR1cmVgYF0pIFJlcXVpcmVkLgogICAgICAgIFRoZSBWaWRlbyBJbnRlbGxpZ2VuY2UgQVBJIGZlYXR1cmVzIHRvIGRldGVjdAogICAgICBsb2NhdGlvbl9pZDogKHN0cikgT3B0aW9uYWwuCiAgICAgICAgQ2xvdWQgcmVnaW9uIHdoZXJlIGFubm90YXRpb24gc2hvdWxkIHRha2UgcGxhY2UuCiAgICAgICAgSWYgbm8gcmVnaW9uIGlzIHNwZWNpZmllZCwgYSByZWdpb24gd2lsbCBiZSBkZXRlcm1pbmVkCiAgICAgICAgYmFzZWQgb24gdmlkZW8gZmlsZSBsb2NhdGlvbi4KICAgICAgbWV0YWRhdGE6IChTZXF1ZW5jZVtUdXBsZVtzdHIsIHN0cl1dKSBPcHRpb25hbC4KICAgICAgICBBZGRpdGlvbmFsIG1ldGFkYXRhIHRoYXQgaXMgcHJvdmlkZWQgdG8gdGhlIG1ldGhvZC4KICAgICAgdGltZW91dDogKGludCkgT3B0aW9uYWwuCiAgICAgICAgVGhlIHRpbWUgaW4gc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgcmVzcG9uc2UgZnJvbSB0aGUKICAgICAgICBWaWRlbyBJbnRlbGxpZ2VuY2UgQVBJCiAgICAgIGNvbnRleHRfc2lkZV9pbnB1dDogKGJlYW0ucHZhbHVlLkFzRGljdCkgT3B0aW9uYWwuCiAgICAgICAgQW4gYGBBc0RpY3RgYCBvZiBhIFBDb2xsZWN0aW9uIHRvIGJlIHBhc3NlZCB0byB0aGUKICAgICAgICBfVmlkZW9Bbm5vdGF0ZUZuIGFzIHRoZSB2aWRlbyBjb250ZXh0IG1hcHBpbmcgY29udGFpbmluZyBhZGRpdGlvbmFsCiAgICAgICAgdmlkZW8gY29udGV4dCBhbmQvb3IgZmVhdHVyZS1zcGVjaWZpYyBwYXJhbWV0ZXJzLgogICAgICAgIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgICAgIHZpZGVvX2NvbnRleHRzID0KICAgICAgICAgICAgWygnZ3M6Ly9jbG91ZC1zYW1wbGVzLWRhdGEvdmlkZW8vY2F0Lm1wNCcsIFVuaW9uW2RpY3QsCiAgICAgICAgICAgIGBgdmlkZW9pbnRlbGxpZ2VuY2VfdjEudHlwZXMuVmlkZW9Db250ZXh0YGBdKSwKICAgICAgICAgICAgKCdnczovL3NvbWUtb3RoZXItdmlkZW8vc2FtcGxlLm1wNCcsIFVuaW9uW2RpY3QsCiAgICAgICAgICAgIGBgdmlkZW9pbnRlbGxpZ2VuY2VfdjEudHlwZXMuVmlkZW9Db250ZXh0YGBdKSxdCgogICAgICAgICAgY29udGV4dF9zaWRlX2lucHV0ID0KICAgICAgICAgICAgKAogICAgICAgICAgICAgIHAKICAgICAgICAgICAgICB8ICJWaWRlbyBjb250ZXh0cyIgPj4gYmVhbS5DcmVhdGUodmlkZW9fY29udGV4dHMpCiAgICAgICAgICAgICkKCiAgICAgICAgICB2aWRlb2ludGVsbGlnZW5jZW1sLkFubm90YXRlVmlkZW8oZmVhdHVyZXMsCiAgICAgICAgICAgIGNvbnRleHRfc2lkZV9pbnB1dD1iZWFtLnB2YWx1ZS5Bc0RpY3QoY29udGV4dF9zaWRlX2lucHV0KSkpCiAgICAiIiIKICAgIHN1cGVyKEFubm90YXRlVmlkZW8sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuZmVhdHVyZXMgPSBmZWF0dXJlcwogICAgc2VsZi5sb2NhdGlvbl9pZCA9IGxvY2F0aW9uX2lkCiAgICBzZWxmLm1ldGFkYXRhID0gbWV0YWRhdGEKICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgIHNlbGYuY29udGV4dF9zaWRlX2lucHV0ID0gY29udGV4dF9zaWRlX2lucHV0CgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgIHJldHVybiBwdmFsdWUgfCBQYXJEbygKICAgICAgICBfVmlkZW9Bbm5vdGF0ZUZuKAogICAgICAgICAgICBmZWF0dXJlcz1zZWxmLmZlYXR1cmVzLAogICAgICAgICAgICBsb2NhdGlvbl9pZD1zZWxmLmxvY2F0aW9uX2lkLAogICAgICAgICAgICBtZXRhZGF0YT1zZWxmLm1ldGFkYXRhLAogICAgICAgICAgICB0aW1lb3V0PXNlbGYudGltZW91dCksCiAgICAgICAgY29udGV4dF9zaWRlX2lucHV0PXNlbGYuY29udGV4dF9zaWRlX2lucHV0KQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcygKICAgIFVuaW9uW3RleHRfdHlwZSwgYmluYXJ5X3R5cGVdLAogICAgT3B0aW9uYWxbdmlkZW9pbnRlbGxpZ2VuY2UudHlwZXMuVmlkZW9Db250ZXh0XSkKY2xhc3MgX1ZpZGVvQW5ub3RhdGVGbihEb0ZuKToKICAiIiJBIERvRm4gdGhhdCBzZW5kcyBlYWNoIGlucHV0IGVsZW1lbnQgdG8gdGhlIEdDUCBWaWRlbyBJbnRlbGxpZ2VuY2UgQVBJCiAgc2VydmljZSBhbmQgb3V0cHV0cyBhbiBlbGVtZW50IHdpdGggdGhlIHJldHVybiByZXN1bHQgb2YgdGhlIEFQSQogIChgYGdvb2dsZS5jbG91ZC52aWRlb2ludGVsbGlnZW5jZV92MS50eXBlcy5Bbm5vdGF0ZVZpZGVvUmVzcG9uc2VgYCkuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZlYXR1cmVzLCBsb2NhdGlvbl9pZCwgbWV0YWRhdGEsIHRpbWVvdXQpOgogICAgc3VwZXIoX1ZpZGVvQW5ub3RhdGVGbiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fY2xpZW50ID0gTm9uZQogICAgc2VsZi5mZWF0dXJlcyA9IGZlYXR1cmVzCiAgICBzZWxmLmxvY2F0aW9uX2lkID0gbG9jYXRpb25faWQKICAgIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YQogICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgc2VsZi5jb3VudGVyID0gTWV0cmljcy5jb3VudGVyKHNlbGYuX19jbGFzc19fLCAiQVBJIENhbGxzIikKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX2NsaWVudCA9IGdldF92aWRlb2ludGVsbGlnZW5jZV9jbGllbnQoKQoKICBkZWYgX2Fubm90YXRlX3ZpZGVvKHNlbGYsIGVsZW1lbnQsIHZpZGVvX2NvbnRleHQpOgogICAgaWYgaXNpbnN0YW5jZShlbGVtZW50LCB0ZXh0X3R5cGUpOiAgIyBJcyBlbGVtZW50IGFuIFVSSSB0byBhIEdDUyBidWNrZXQKICAgICAgcmVzcG9uc2UgPSBzZWxmLl9jbGllbnQuYW5ub3RhdGVfdmlkZW8oCiAgICAgICAgICBpbnB1dF91cmk9ZWxlbWVudCwKICAgICAgICAgIGZlYXR1cmVzPXNlbGYuZmVhdHVyZXMsCiAgICAgICAgICB2aWRlb19jb250ZXh0PXZpZGVvX2NvbnRleHQsCiAgICAgICAgICBsb2NhdGlvbl9pZD1zZWxmLmxvY2F0aW9uX2lkLAogICAgICAgICAgbWV0YWRhdGE9c2VsZi5tZXRhZGF0YSkKICAgIGVsc2U6ICAjIElzIGVsZW1lbnQgcmF3IGJ5dGVzCiAgICAgIHJlc3BvbnNlID0gc2VsZi5fY2xpZW50LmFubm90YXRlX3ZpZGVvKAogICAgICAgICAgaW5wdXRfY29udGVudD1lbGVtZW50LAogICAgICAgICAgZmVhdHVyZXM9c2VsZi5mZWF0dXJlcywKICAgICAgICAgIHZpZGVvX2NvbnRleHQ9dmlkZW9fY29udGV4dCwKICAgICAgICAgIGxvY2F0aW9uX2lkPXNlbGYubG9jYXRpb25faWQsCiAgICAgICAgICBtZXRhZGF0YT1zZWxmLm1ldGFkYXRhKQogICAgcmV0dXJuIHJlc3BvbnNlCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIGNvbnRleHRfc2lkZV9pbnB1dD1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgY29udGV4dF9zaWRlX2lucHV0OiAgIyBJZiB3ZSBoYXZlIGEgc2lkZSBpbnB1dCB2aWRlbyBjb250ZXh0LCB1c2UgdGhhdAogICAgICB2aWRlb19jb250ZXh0ID0gY29udGV4dF9zaWRlX2lucHV0LmdldChlbGVtZW50KQogICAgZWxzZToKICAgICAgdmlkZW9fY29udGV4dCA9IE5vbmUKICAgIHJlc3BvbnNlID0gc2VsZi5fYW5ub3RhdGVfdmlkZW8oZWxlbWVudCwgdmlkZW9fY29udGV4dCkKICAgIHNlbGYuY291bnRlci5pbmMoKQogICAgeWllbGQgcmVzcG9uc2UucmVzdWx0KHRpbWVvdXQ9c2VsZi50aW1lb3V0KQoKCmNsYXNzIEFubm90YXRlVmlkZW9XaXRoQ29udGV4dChBbm5vdGF0ZVZpZGVvKToKICAiIiJBIGBgUFRyYW5zZm9ybWBgIGZvciBhbm5vdGF0aW5nIHZpZGVvIHVzaW5nIHRoZSBHQ1AgVmlkZW8gSW50ZWxsaWdlbmNlIEFQSQogIHJlZjogaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3ZpZGVvLWludGVsbGlnZW5jZS9kb2NzCgogIFNlbmRzIGVhY2ggZWxlbWVudCB0byB0aGUgR0NQIFZpZGVvIEludGVsbGlnZW5jZSBBUEkuCiAgRWxlbWVudCBpcyBhIHR1cGxlIG9mCgogICAgKFVuaW9uW3RleHRfdHlwZSwgYmluYXJ5X3R5cGVdLAogICAgT3B0aW9uYWxbdmlkZW9pbnRlbGxpZ2VuY2UudHlwZXMuVmlkZW9Db250ZXh0XSkKCiAgd2hlcmUgdGhlIGZvcm1lciBpcyBlaXRoZXIgYW4gVVJJIChlLmcuIGEgR0NTIFVSSSkgb3IKICBiaW5hcnlfdHlwZSBiYXNlNjQtZW5jb2RlZCB2aWRlbyBkYXRhCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZlYXR1cmVzLCBsb2NhdGlvbl9pZD1Ob25lLCBtZXRhZGF0YT1Ob25lLCB0aW1lb3V0PTEyMCk6CiAgICAiIiIKICAgICAgQXJnczoKICAgICAgICBmZWF0dXJlczogKExpc3RbYGB2aWRlb2ludGVsbGlnZW5jZV92MS5lbnVtcy5GZWF0dXJlYGBdKSBSZXF1aXJlZC4KICAgICAgICAgIHRoZSBWaWRlbyBJbnRlbGxpZ2VuY2UgQVBJIGZlYXR1cmVzIHRvIGRldGVjdAogICAgICAgIGxvY2F0aW9uX2lkOiAoc3RyKSBPcHRpb25hbC4KICAgICAgICAgIENsb3VkIHJlZ2lvbiB3aGVyZSBhbm5vdGF0aW9uIHNob3VsZCB0YWtlIHBsYWNlLgogICAgICAgICAgSWYgbm8gcmVnaW9uIGlzIHNwZWNpZmllZCwgYSByZWdpb24gd2lsbCBiZSBkZXRlcm1pbmVkCiAgICAgICAgICBiYXNlZCBvbiB2aWRlbyBmaWxlIGxvY2F0aW9uLgogICAgICAgIG1ldGFkYXRhOiAoU2VxdWVuY2VbVHVwbGVbc3RyLCBzdHJdXSkgT3B0aW9uYWwuCiAgICAgICAgICBBZGRpdGlvbmFsIG1ldGFkYXRhIHRoYXQgaXMgcHJvdmlkZWQgdG8gdGhlIG1ldGhvZC4KICAgICAgICB0aW1lb3V0OiAoaW50KSBPcHRpb25hbC4KICAgICAgICAgIFRoZSB0aW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGZyb20gdGhlCiAgICAgICAgICBWaWRlbyBJbnRlbGxpZ2VuY2UgQVBJCiAgICAiIiIKICAgIHN1cGVyKEFubm90YXRlVmlkZW9XaXRoQ29udGV4dCwgc2VsZikuX19pbml0X18oCiAgICAgICAgZmVhdHVyZXM9ZmVhdHVyZXMsCiAgICAgICAgbG9jYXRpb25faWQ9bG9jYXRpb25faWQsCiAgICAgICAgbWV0YWRhdGE9bWV0YWRhdGEsCiAgICAgICAgdGltZW91dD10aW1lb3V0KQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gcHZhbHVlIHwgUGFyRG8oCiAgICAgICAgX1ZpZGVvQW5ub3RhdGVGbldpdGhDb250ZXh0KAogICAgICAgICAgICBmZWF0dXJlcz1zZWxmLmZlYXR1cmVzLAogICAgICAgICAgICBsb2NhdGlvbl9pZD1zZWxmLmxvY2F0aW9uX2lkLAogICAgICAgICAgICBtZXRhZGF0YT1zZWxmLm1ldGFkYXRhLAogICAgICAgICAgICB0aW1lb3V0PXNlbGYudGltZW91dCkpCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKAogICAgVHVwbGVbVW5pb25bdGV4dF90eXBlLCBiaW5hcnlfdHlwZV0sCiAgICAgICAgICBPcHRpb25hbFt2aWRlb2ludGVsbGlnZW5jZS50eXBlcy5WaWRlb0NvbnRleHRdXSkKY2xhc3MgX1ZpZGVvQW5ub3RhdGVGbldpdGhDb250ZXh0KF9WaWRlb0Fubm90YXRlRm4pOgogICIiIkEgRG9GbiB0aGF0IHVucGFja3MgZWFjaCBpbnB1dCB0dXBsZSB0byBlbGVtZW50LCB2aWRlb19jb250ZXh0IHZhcmlhYmxlcwogIGFuZCBzZW5kcyB0aGVzZSB0byB0aGUgR0NQIFZpZGVvIEludGVsbGlnZW5jZSBBUEkgc2VydmljZSBhbmQgb3V0cHV0cwogIGFuIGVsZW1lbnQgd2l0aCB0aGUgcmV0dXJuIHJlc3VsdCBvZiB0aGUgQVBJCiAgKGBgZ29vZ2xlLmNsb3VkLnZpZGVvaW50ZWxsaWdlbmNlX3YxLnR5cGVzLkFubm90YXRlVmlkZW9SZXNwb25zZWBgKS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZmVhdHVyZXMsIGxvY2F0aW9uX2lkLCBtZXRhZGF0YSwgdGltZW91dCk6CiAgICBzdXBlcihfVmlkZW9Bbm5vdGF0ZUZuV2l0aENvbnRleHQsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGZlYXR1cmVzPWZlYXR1cmVzLAogICAgICAgIGxvY2F0aW9uX2lkPWxvY2F0aW9uX2lkLAogICAgICAgIG1ldGFkYXRhPW1ldGFkYXRhLAogICAgICAgIHRpbWVvdXQ9dGltZW91dCkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGVsZW1lbnQsIHZpZGVvX2NvbnRleHQgPSBlbGVtZW50ICAjIFVucGFjayAodmlkZW8sIHZpZGVvX2NvbnRleHQpIHR1cGxlCiAgICByZXNwb25zZSA9IHNlbGYuX2Fubm90YXRlX3ZpZGVvKGVsZW1lbnQsIHZpZGVvX2NvbnRleHQpCiAgICBzZWxmLmNvdW50ZXIuaW5jKCkKICAgIHlpZWxkIHJlc3BvbnNlLnJlc3VsdCh0aW1lb3V0PXNlbGYudGltZW91dCkKlH2UKIwcZ2V0X3ZpZGVvaW50ZWxsaWdlbmNlX2NsaWVudJRqVjEBAEsuSzKHlIwWQW5ub3RhdGVWaWRlby5fX2luaXRfX5RqVjEBAEs+S2yHlIwUQW5ub3RhdGVWaWRlby5leHBhbmSUalYxAQBLbkt1h5SMDUFubm90YXRlVmlkZW+Ual0xAQBLNUt1h5SMGV9WaWRlb0Fubm90YXRlRm4uX19pbml0X1+UalYxAQBLgEuHh5SMHV9WaWRlb0Fubm90YXRlRm4uc3RhcnRfYnVuZGxllGpWMQEAS4lLioeUjCBfVmlkZW9Bbm5vdGF0ZUZuLl9hbm5vdGF0ZV92aWRlb5RqVjEBAEuMS5uHlIwYX1ZpZGVvQW5ub3RhdGVGbi5wcm9jZXNzlGpWMQEAS51LpIeUjBBfVmlkZW9Bbm5vdGF0ZUZulGpdMQEAS3hLpIeUjCFBbm5vdGF0ZVZpZGVvV2l0aENvbnRleHQuX19pbml0X1+UalYxAQBLtEvHh5SMH0Fubm90YXRlVmlkZW9XaXRoQ29udGV4dC5leHBhbmSUalYxAQBLyUvPh5SMGEFubm90YXRlVmlkZW9XaXRoQ29udGV4dJRqXTEBAEunS8+HlIwkX1ZpZGVvQW5ub3RhdGVGbldpdGhDb250ZXh0Ll9faW5pdF9flGpWMQEAS9tL4IeUjCNfVmlkZW9Bbm5vdGF0ZUZuV2l0aENvbnRleHQucHJvY2Vzc5RqVjEBAEviS+aHlIwbX1ZpZGVvQW5ub3RhdGVGbldpdGhDb250ZXh0lGpdMQEAS9JL5oeUdX2UKIwNQW5ub3RhdGVWaWRlb5RqnAMAAIwUQW5ub3RhdGVWaWRlby5leHBhbmSUapwDAACMGEFubm90YXRlVmlkZW9XaXRoQ29udGV4dJRqnAMAAIwfQW5ub3RhdGVWaWRlb1dpdGhDb250ZXh0LmV4cGFuZJRqnAMAAHWMJmFwYWNoZV9iZWFtLm1sLmdjcC52aWRlb2ludGVsbGlnZW5jZW1slHSUjBthcGFjaGVfYmVhbS5tbC5nY3AudmlzaW9ubWyUKFiaKgAAIyBweWxpbnQ6IHNraXAtZmlsZQojCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpBIGNvbm5lY3RvciBmb3Igc2VuZGluZyBBUEkgcmVxdWVzdHMgdG8gdGhlIEdDUCBWaXNpb24gQVBJLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdApmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IGJpbmFyeV90eXBlCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCB0ZXh0X3R5cGUKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgRmxhdE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHV0aWwKZnJvbSBjYWNoZXRvb2xzLmZ1bmMgaW1wb3J0IHR0bF9jYWNoZQoKdHJ5OgogIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCB2aXNpb24KZXhjZXB0IEltcG9ydEVycm9yOgogIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAnR29vZ2xlIENsb3VkIFZpc2lvbiBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCAnCiAgICAgICcoY291bGQgbm90IGltcG9ydCBnb29nbGUuY2xvdWQudmlzaW9uKS4nKQoKX19hbGxfXyA9IFsKICAgICdBbm5vdGF0ZUltYWdlJywKICAgICdBbm5vdGF0ZUltYWdlV2l0aENvbnRleHQnLApdCgoKQHR0bF9jYWNoZShtYXhzaXplPTEyOCwgdHRsPTM2MDApCmRlZiBnZXRfdmlzaW9uX2NsaWVudChjbGllbnRfb3B0aW9ucz1Ob25lKToKICAiIiJSZXR1cm5zIGEgQ2xvdWQgVmlzaW9uIEFQSSBjbGllbnQuIiIiCiAgX2NsaWVudCA9IHZpc2lvbi5JbWFnZUFubm90YXRvckNsaWVudChjbGllbnRfb3B0aW9ucz1jbGllbnRfb3B0aW9ucykKICByZXR1cm4gX2NsaWVudAoKCmNsYXNzIEFubm90YXRlSW1hZ2UoUFRyYW5zZm9ybSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1gYCBmb3IgYW5ub3RhdGluZyBpbWFnZXMgdXNpbmcgdGhlIEdDUCBWaXNpb24gQVBJLgogIHJlZjogaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL3Zpc2lvbi9kb2NzLwoKICBCYXRjaGVzIGVsZW1lbnRzIHRvZ2V0aGVyIHVzaW5nIGBgdXRpbC5CYXRjaEVsZW1lbnRzYGAgUFRyYW5zZm9ybSBhbmQgc2VuZHMKICBlYWNoIGJhdGNoIG9mIGVsZW1lbnRzIHRvIHRoZSBHQ1AgVmlzaW9uIEFQSS4KICBFbGVtZW50IGlzIGEgVW5pb25bdGV4dF90eXBlLCBiaW5hcnlfdHlwZV0gb2YgZWl0aGVyIGFuIFVSSSAoZS5nLiBhIEdDUyBVUkkpCiAgb3IgYmluYXJ5X3R5cGUgYmFzZTY0LWVuY29kZWQgaW1hZ2UgZGF0YS4KICBBY2NlcHRzIGFuIGBBc0RpY3RgIHNpZGUgaW5wdXQgdGhhdCBtYXBzIGVhY2ggaW1hZ2UgdG8gYW4gaW1hZ2UgY29udGV4dC4KICAiIiIKCiAgTUFYX0JBVENIX1NJWkUgPSA1CiAgTUlOX0JBVENIX1NJWkUgPSAxCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZmVhdHVyZXMsCiAgICAgIHJldHJ5PU5vbmUsCiAgICAgIHRpbWVvdXQ9MTIwLAogICAgICBtYXhfYmF0Y2hfc2l6ZT1Ob25lLAogICAgICBtaW5fYmF0Y2hfc2l6ZT1Ob25lLAogICAgICBjbGllbnRfb3B0aW9ucz1Ob25lLAogICAgICBjb250ZXh0X3NpZGVfaW5wdXQ9Tm9uZSwKICAgICAgbWV0YWRhdGE9Tm9uZSk6CiAgICAiIiIKICAgIEFyZ3M6CiAgICAgIGZlYXR1cmVzOiAoTGlzdFtgYHZpc2lvbi50eXBlcy5GZWF0dXJlLmVudW1zLkZlYXR1cmVgYF0pIFJlcXVpcmVkLgogICAgICAgIFRoZSBWaXNpb24gQVBJIGZlYXR1cmVzIHRvIGRldGVjdAogICAgICByZXRyeTogKGdvb2dsZS5hcGlfY29yZS5yZXRyeS5SZXRyeSkgT3B0aW9uYWwuCiAgICAgICAgQSByZXRyeSBvYmplY3QgdXNlZCB0byByZXRyeSByZXF1ZXN0cy4KICAgICAgICBJZiBOb25lIGlzIHNwZWNpZmllZCAoZGVmYXVsdCksIHJlcXVlc3RzIHdpbGwgbm90IGJlIHJldHJpZWQuCiAgICAgIHRpbWVvdXQ6IChmbG9hdCkgT3B0aW9uYWwuCiAgICAgICAgVGhlIHRpbWUgaW4gc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgVmlzaW9uIEFQSS4KICAgICAgICBEZWZhdWx0IGlzIDEyMC4KICAgICAgbWF4X2JhdGNoX3NpemU6IChpbnQpIE9wdGlvbmFsLgogICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGltYWdlcyB0byBiYXRjaCBpbiB0aGUgc2FtZSByZXF1ZXN0IHRvIHRoZSBWaXNpb24gQVBJLgogICAgICAgIERlZmF1bHQgaXMgNSAod2hpY2ggaXMgYWxzbyB0aGUgVmlzaW9uIEFQSSBtYXgpLgogICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGVzdGluZy4KICAgICAgbWluX2JhdGNoX3NpemU6IChpbnQpIE9wdGlvbmFsLgogICAgICAgIE1pbmltdW0gbnVtYmVyIG9mIGltYWdlcyB0byBiYXRjaCBpbiB0aGUgc2FtZSByZXF1ZXN0IHRvIHRoZSBWaXNpb24gQVBJLgogICAgICAgIERlZmF1bHQgaXMgTm9uZS4gVGhpcyBwYXJhbWV0ZXIgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0ZXN0aW5nLgogICAgICBjbGllbnRfb3B0aW9uczoKICAgICAgICAoVW5pb25bZGljdCwgZ29vZ2xlLmFwaV9jb3JlLmNsaWVudF9vcHRpb25zLkNsaWVudE9wdGlvbnNdKSBPcHRpb25hbC4KICAgICAgICBDbGllbnQgb3B0aW9ucyB1c2VkIHRvIHNldCB1c2VyIG9wdGlvbnMgb24gdGhlIGNsaWVudC4KICAgICAgICBBUEkgRW5kcG9pbnQgc2hvdWxkIGJlIHNldCB0aHJvdWdoIGNsaWVudF9vcHRpb25zLgogICAgICBjb250ZXh0X3NpZGVfaW5wdXQ6IChiZWFtLnB2YWx1ZS5Bc0RpY3QpIE9wdGlvbmFsLgogICAgICAgIEFuIGBgQXNEaWN0YGAgb2YgYSBQQ29sbGVjdGlvbiB0byBiZSBwYXNzZWQgdG8gdGhlCiAgICAgICAgX0ltYWdlQW5ub3RhdGVGbiBhcyB0aGUgaW1hZ2UgY29udGV4dCBtYXBwaW5nIGNvbnRhaW5pbmcgYWRkaXRpb25hbAogICAgICAgIGltYWdlIGNvbnRleHQgYW5kL29yIGZlYXR1cmUtc3BlY2lmaWMgcGFyYW1ldGVycy4KICAgICAgICBFeGFtcGxlIHVzYWdlOjoKCiAgICAgICAgICBpbWFnZV9jb250ZXh0cyA9CiAgICAgICAgICAgIFsoJydnczovL2Nsb3VkLXNhbXBsZXMtZGF0YS92aXNpb24vb2NyL3NpZ24uanBnJycsIFVuaW9uW2RpY3QsCiAgICAgICAgICAgIGBgdmlzaW9uLnR5cGVzLkltYWdlQ29udGV4dCgpYGBdKSwKICAgICAgICAgICAgKCcnZ3M6Ly9jbG91ZC1zYW1wbGVzLWRhdGEvdmlzaW9uL29jci9zaWduLmpwZycnLCBVbmlvbltkaWN0LAogICAgICAgICAgICBgYHZpc2lvbi50eXBlcy5JbWFnZUNvbnRleHQoKWBgXSksXQoKICAgICAgICAgIGNvbnRleHRfc2lkZV9pbnB1dCA9CiAgICAgICAgICAgICgKICAgICAgICAgICAgICBwCiAgICAgICAgICAgICAgfCAiSW1hZ2UgY29udGV4dHMiID4+IGJlYW0uQ3JlYXRlKGltYWdlX2NvbnRleHRzKQogICAgICAgICAgICApCgogICAgICAgICAgdmlzaW9ubWwuQW5ub3RhdGVJbWFnZShmZWF0dXJlcywKICAgICAgICAgICAgY29udGV4dF9zaWRlX2lucHV0PWJlYW0ucHZhbHVlLkFzRGljdChjb250ZXh0X3NpZGVfaW5wdXQpKSkKICAgICAgbWV0YWRhdGE6IChPcHRpb25hbFtTZXF1ZW5jZVtUdXBsZVtzdHIsIHN0cl1dXSk6IE9wdGlvbmFsLgogICAgICAgIEFkZGl0aW9uYWwgbWV0YWRhdGEgdGhhdCBpcyBwcm92aWRlZCB0byB0aGUgbWV0aG9kLgogICAgIiIiCiAgICBzdXBlcihBbm5vdGF0ZUltYWdlLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLmZlYXR1cmVzID0gZmVhdHVyZXMKICAgIHNlbGYucmV0cnkgPSByZXRyeQogICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgc2VsZi5tYXhfYmF0Y2hfc2l6ZSA9IG1heF9iYXRjaF9zaXplIG9yIEFubm90YXRlSW1hZ2UuTUFYX0JBVENIX1NJWkUKICAgIGlmIHNlbGYubWF4X2JhdGNoX3NpemUgPiBBbm5vdGF0ZUltYWdlLk1BWF9CQVRDSF9TSVpFOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ01heCBiYXRjaF9zaXplIGV4Y2VlZGVkLiAnCiAgICAgICAgICAnQmF0Y2ggc2l6ZSBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4ge30nLmZvcm1hdCgKICAgICAgICAgICAgICBBbm5vdGF0ZUltYWdlLk1BWF9CQVRDSF9TSVpFKSkKICAgIHNlbGYubWluX2JhdGNoX3NpemUgPSBtaW5fYmF0Y2hfc2l6ZSBvciBBbm5vdGF0ZUltYWdlLk1JTl9CQVRDSF9TSVpFCiAgICBzZWxmLmNsaWVudF9vcHRpb25zID0gY2xpZW50X29wdGlvbnMKICAgIHNlbGYuY29udGV4dF9zaWRlX2lucHV0ID0gY29udGV4dF9zaWRlX2lucHV0CiAgICBzZWxmLm1ldGFkYXRhID0gbWV0YWRhdGEKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmV0dXJuICgKICAgICAgICBwdmFsdWUKICAgICAgICB8IEZsYXRNYXAoc2VsZi5fY3JlYXRlX2ltYWdlX2Fubm90YXRpb25fcGFpcnMsIHNlbGYuY29udGV4dF9zaWRlX2lucHV0KQogICAgICAgIHwgdXRpbC5CYXRjaEVsZW1lbnRzKAogICAgICAgICAgICBtaW5fYmF0Y2hfc2l6ZT1zZWxmLm1pbl9iYXRjaF9zaXplLAogICAgICAgICAgICBtYXhfYmF0Y2hfc2l6ZT1zZWxmLm1heF9iYXRjaF9zaXplKQogICAgICAgIHwgUGFyRG8oCiAgICAgICAgICAgIF9JbWFnZUFubm90YXRlRm4oCiAgICAgICAgICAgICAgICBmZWF0dXJlcz1zZWxmLmZlYXR1cmVzLAogICAgICAgICAgICAgICAgcmV0cnk9c2VsZi5yZXRyeSwKICAgICAgICAgICAgICAgIHRpbWVvdXQ9c2VsZi50aW1lb3V0LAogICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c2VsZi5jbGllbnRfb3B0aW9ucywKICAgICAgICAgICAgICAgIG1ldGFkYXRhPXNlbGYubWV0YWRhdGEpKSkKCiAgQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKAogICAgICBVbmlvblt0ZXh0X3R5cGUsIGJpbmFyeV90eXBlXSwgT3B0aW9uYWxbdmlzaW9uLnR5cGVzLkltYWdlQ29udGV4dF0pCiAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhMaXN0W3Zpc2lvbi50eXBlcy5Bbm5vdGF0ZUltYWdlUmVxdWVzdF0pCiAgZGVmIF9jcmVhdGVfaW1hZ2VfYW5ub3RhdGlvbl9wYWlycyhzZWxmLCBlbGVtZW50LCBjb250ZXh0X3NpZGVfaW5wdXQpOgogICAgaWYgY29udGV4dF9zaWRlX2lucHV0OiAgIyBJZiB3ZSBoYXZlIGEgc2lkZSBpbnB1dCBpbWFnZSBjb250ZXh0LCB1c2UgdGhhdAogICAgICBpbWFnZV9jb250ZXh0ID0gY29udGV4dF9zaWRlX2lucHV0LmdldChlbGVtZW50KQogICAgZWxzZToKICAgICAgaW1hZ2VfY29udGV4dCA9IE5vbmUKCiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIHRleHRfdHlwZSk6CiAgICAgIGltYWdlID0gdmlzaW9uLnR5cGVzLkltYWdlKAogICAgICAgICAgc291cmNlPXZpc2lvbi50eXBlcy5JbWFnZVNvdXJjZShpbWFnZV91cmk9ZWxlbWVudCkpCiAgICBlbHNlOiAgIyBUeXBlaGludCBjaGVja3Mgb25seSBhbGxvd3MgdGV4dF90eXBlIG9yIGJpbmFyeV90eXBlCiAgICAgIGltYWdlID0gdmlzaW9uLnR5cGVzLkltYWdlKGNvbnRlbnQ9ZWxlbWVudCkKCiAgICByZXF1ZXN0ID0gdmlzaW9uLnR5cGVzLkFubm90YXRlSW1hZ2VSZXF1ZXN0KAogICAgICAgIGltYWdlPWltYWdlLCBmZWF0dXJlcz1zZWxmLmZlYXR1cmVzLCBpbWFnZV9jb250ZXh0PWltYWdlX2NvbnRleHQpCiAgICB5aWVsZCByZXF1ZXN0CgoKY2xhc3MgQW5ub3RhdGVJbWFnZVdpdGhDb250ZXh0KEFubm90YXRlSW1hZ2UpOgogICIiIkEgYGBQVHJhbnNmb3JtYGAgZm9yIGFubm90YXRpbmcgaW1hZ2VzIHVzaW5nIHRoZSBHQ1AgVmlzaW9uIEFQSS4KICByZWY6IGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS92aXNpb24vZG9jcy8KICBCYXRjaGVzIGVsZW1lbnRzIHRvZ2V0aGVyIHVzaW5nIGBgdXRpbC5CYXRjaEVsZW1lbnRzYGAgUFRyYW5zZm9ybSBhbmQgc2VuZHMKICBlYWNoIGJhdGNoIG9mIGVsZW1lbnRzIHRvIHRoZSBHQ1AgVmlzaW9uIEFQSS4KCiAgRWxlbWVudCBpcyBhIHR1cGxlIG9mOjoKCiAgICAoVW5pb25bdGV4dF90eXBlLCBiaW5hcnlfdHlwZV0sCiAgICBPcHRpb25hbFtgYHZpc2lvbi50eXBlcy5JbWFnZUNvbnRleHRgYF0pCgogIHdoZXJlIHRoZSBmb3JtZXIgaXMgZWl0aGVyIGFuIFVSSSAoZS5nLiBhIEdDUyBVUkkpIG9yIGJpbmFyeV90eXBlCiAgYmFzZTY0LWVuY29kZWQgaW1hZ2UgZGF0YS4KICAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGZlYXR1cmVzLAogICAgICByZXRyeT1Ob25lLAogICAgICB0aW1lb3V0PTEyMCwKICAgICAgbWF4X2JhdGNoX3NpemU9Tm9uZSwKICAgICAgbWluX2JhdGNoX3NpemU9Tm9uZSwKICAgICAgY2xpZW50X29wdGlvbnM9Tm9uZSwKICAgICAgbWV0YWRhdGE9Tm9uZSk6CiAgICAiIiIKICAgIEFyZ3M6CiAgICAgIGZlYXR1cmVzOiAoTGlzdFtgYHZpc2lvbi50eXBlcy5GZWF0dXJlLmVudW1zLkZlYXR1cmVgYF0pIFJlcXVpcmVkLgogICAgICAgIFRoZSBWaXNpb24gQVBJIGZlYXR1cmVzIHRvIGRldGVjdAogICAgICByZXRyeTogKGdvb2dsZS5hcGlfY29yZS5yZXRyeS5SZXRyeSkgT3B0aW9uYWwuCiAgICAgICAgQSByZXRyeSBvYmplY3QgdXNlZCB0byByZXRyeSByZXF1ZXN0cy4KICAgICAgICBJZiBOb25lIGlzIHNwZWNpZmllZCAoZGVmYXVsdCksIHJlcXVlc3RzIHdpbGwgbm90IGJlIHJldHJpZWQuCiAgICAgIHRpbWVvdXQ6IChmbG9hdCkgT3B0aW9uYWwuCiAgICAgICAgVGhlIHRpbWUgaW4gc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgVmlzaW9uIEFQSS4KICAgICAgICBEZWZhdWx0IGlzIDEyMC4KICAgICAgbWF4X2JhdGNoX3NpemU6IChpbnQpIE9wdGlvbmFsLgogICAgICAgIE1heGltdW0gbnVtYmVyIG9mIGltYWdlcyB0byBiYXRjaCBpbiB0aGUgc2FtZSByZXF1ZXN0IHRvIHRoZSBWaXNpb24gQVBJLgogICAgICAgIERlZmF1bHQgaXMgNSAod2hpY2ggaXMgYWxzbyB0aGUgVmlzaW9uIEFQSSBtYXgpLgogICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGVzdGluZy4KICAgICAgbWluX2JhdGNoX3NpemU6IChpbnQpIE9wdGlvbmFsLgogICAgICAgIE1pbmltdW0gbnVtYmVyIG9mIGltYWdlcyB0byBiYXRjaCBpbiB0aGUgc2FtZSByZXF1ZXN0IHRvIHRoZSBWaXNpb24gQVBJLgogICAgICAgIERlZmF1bHQgaXMgTm9uZS4gVGhpcyBwYXJhbWV0ZXIgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0ZXN0aW5nLgogICAgICBjbGllbnRfb3B0aW9uczoKICAgICAgICAoVW5pb25bZGljdCwgZ29vZ2xlLmFwaV9jb3JlLmNsaWVudF9vcHRpb25zLkNsaWVudE9wdGlvbnNdKSBPcHRpb25hbC4KICAgICAgICBDbGllbnQgb3B0aW9ucyB1c2VkIHRvIHNldCB1c2VyIG9wdGlvbnMgb24gdGhlIGNsaWVudC4KICAgICAgICBBUEkgRW5kcG9pbnQgc2hvdWxkIGJlIHNldCB0aHJvdWdoIGNsaWVudF9vcHRpb25zLgogICAgICBtZXRhZGF0YTogKE9wdGlvbmFsW1NlcXVlbmNlW1R1cGxlW3N0ciwgc3RyXV1dKTogT3B0aW9uYWwuCiAgICAgICAgQWRkaXRpb25hbCBtZXRhZGF0YSB0aGF0IGlzIHByb3ZpZGVkIHRvIHRoZSBtZXRob2QuCiAgICAiIiIKICAgIHN1cGVyKEFubm90YXRlSW1hZ2VXaXRoQ29udGV4dCwgc2VsZikuX19pbml0X18oCiAgICAgICAgZmVhdHVyZXM9ZmVhdHVyZXMsCiAgICAgICAgcmV0cnk9cmV0cnksCiAgICAgICAgdGltZW91dD10aW1lb3V0LAogICAgICAgIG1heF9iYXRjaF9zaXplPW1heF9iYXRjaF9zaXplLAogICAgICAgIG1pbl9iYXRjaF9zaXplPW1pbl9iYXRjaF9zaXplLAogICAgICAgIGNsaWVudF9vcHRpb25zPWNsaWVudF9vcHRpb25zLAogICAgICAgIG1ldGFkYXRhPW1ldGFkYXRhKQoKICBkZWYgZXhwYW5kKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gKAogICAgICAgIHB2YWx1ZQogICAgICAgIHwgRmxhdE1hcChzZWxmLl9jcmVhdGVfaW1hZ2VfYW5ub3RhdGlvbl9wYWlycykKICAgICAgICB8IHV0aWwuQmF0Y2hFbGVtZW50cygKICAgICAgICAgICAgbWluX2JhdGNoX3NpemU9c2VsZi5taW5fYmF0Y2hfc2l6ZSwKICAgICAgICAgICAgbWF4X2JhdGNoX3NpemU9c2VsZi5tYXhfYmF0Y2hfc2l6ZSkKICAgICAgICB8IFBhckRvKAogICAgICAgICAgICBfSW1hZ2VBbm5vdGF0ZUZuKAogICAgICAgICAgICAgICAgZmVhdHVyZXM9c2VsZi5mZWF0dXJlcywKICAgICAgICAgICAgICAgIHJldHJ5PXNlbGYucmV0cnksCiAgICAgICAgICAgICAgICB0aW1lb3V0PXNlbGYudGltZW91dCwKICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNlbGYuY2xpZW50X29wdGlvbnMsCiAgICAgICAgICAgICAgICBtZXRhZGF0YT1zZWxmLm1ldGFkYXRhKSkpCgogIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcygKICAgICAgVHVwbGVbVW5pb25bdGV4dF90eXBlLCBiaW5hcnlfdHlwZV0sIE9wdGlvbmFsW3Zpc2lvbi50eXBlcy5JbWFnZUNvbnRleHRdXSkKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKExpc3RbdmlzaW9uLnR5cGVzLkFubm90YXRlSW1hZ2VSZXF1ZXN0XSkKICBkZWYgX2NyZWF0ZV9pbWFnZV9hbm5vdGF0aW9uX3BhaXJzKHNlbGYsIGVsZW1lbnQsICoqa3dhcmdzKToKICAgIGVsZW1lbnQsIGltYWdlX2NvbnRleHQgPSBlbGVtZW50ICAjIFVucGFjayAoaW1hZ2UsIGltYWdlX2NvbnRleHQpIHR1cGxlCiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIHRleHRfdHlwZSk6CiAgICAgIGltYWdlID0gdmlzaW9uLnR5cGVzLkltYWdlKAogICAgICAgICAgc291cmNlPXZpc2lvbi50eXBlcy5JbWFnZVNvdXJjZShpbWFnZV91cmk9ZWxlbWVudCkpCiAgICBlbHNlOiAgIyBUeXBlaGludCBjaGVja3Mgb25seSBhbGxvd3MgdGV4dF90eXBlIG9yIGJpbmFyeV90eXBlCiAgICAgIGltYWdlID0gdmlzaW9uLnR5cGVzLkltYWdlKGNvbnRlbnQ9ZWxlbWVudCkKCiAgICByZXF1ZXN0ID0gdmlzaW9uLnR5cGVzLkFubm90YXRlSW1hZ2VSZXF1ZXN0KAogICAgICAgIGltYWdlPWltYWdlLCBmZWF0dXJlcz1zZWxmLmZlYXR1cmVzLCBpbWFnZV9jb250ZXh0PWltYWdlX2NvbnRleHQpCiAgICB5aWVsZCByZXF1ZXN0CgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKExpc3RbdmlzaW9uLnR5cGVzLkFubm90YXRlSW1hZ2VSZXF1ZXN0XSkKY2xhc3MgX0ltYWdlQW5ub3RhdGVGbihEb0ZuKToKICAiIiJBIERvRm4gdGhhdCBzZW5kcyBlYWNoIGlucHV0IGVsZW1lbnQgdG8gdGhlIEdDUCBWaXNpb24gQVBJLgogIFJldHVybnMgYGBnb29nbGUuY2xvdWQudmlzaW9uLnR5cGVzLkJhdGNoQW5ub3RhdGVJbWFnZXNSZXNwb25zZWBgLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBmZWF0dXJlcywgcmV0cnksIHRpbWVvdXQsIGNsaWVudF9vcHRpb25zLCBtZXRhZGF0YSk6CiAgICBzdXBlcihfSW1hZ2VBbm5vdGF0ZUZuLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLl9jbGllbnQgPSBOb25lCiAgICBzZWxmLmZlYXR1cmVzID0gZmVhdHVyZXMKICAgIHNlbGYucmV0cnkgPSByZXRyeQogICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgc2VsZi5jbGllbnRfb3B0aW9ucyA9IGNsaWVudF9vcHRpb25zCiAgICBzZWxmLm1ldGFkYXRhID0gbWV0YWRhdGEKICAgIHNlbGYuY291bnRlciA9IE1ldHJpY3MuY291bnRlcihzZWxmLl9fY2xhc3NfXywgIkFQSSBDYWxscyIpCgogIGRlZiBzZXR1cChzZWxmKToKICAgIHNlbGYuX2NsaWVudCA9IGdldF92aXNpb25fY2xpZW50KHNlbGYuY2xpZW50X29wdGlvbnMpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXNwb25zZSA9IHNlbGYuX2NsaWVudC5iYXRjaF9hbm5vdGF0ZV9pbWFnZXMoCiAgICAgICAgcmVxdWVzdHM9ZWxlbWVudCwKICAgICAgICByZXRyeT1zZWxmLnJldHJ5LAogICAgICAgIHRpbWVvdXQ9c2VsZi50aW1lb3V0LAogICAgICAgIG1ldGFkYXRhPXNlbGYubWV0YWRhdGEpCiAgICBzZWxmLmNvdW50ZXIuaW5jKCkKICAgIHlpZWxkIHJlc3BvbnNlCpR9lCiMEWdldF92aXNpb25fY2xpZW50lGpWMQEASzdLO4eUjBZBbm5vdGF0ZUltYWdlLl9faW5pdF9flGpWMQEAS0xLj4eUjBRBbm5vdGF0ZUltYWdlLmV4cGFuZJRqVjEBAEuRS56HlIwsQW5ub3RhdGVJbWFnZS5fY3JlYXRlX2ltYWdlX2Fubm90YXRpb25fcGFpcnOUalYxAQBLoEuxh5SMDUFubm90YXRlSW1hZ2WUal0xAQBLPkuxh5SMIUFubm90YXRlSW1hZ2VXaXRoQ29udGV4dC5fX2luaXRfX5RqVjEBAEvCS+qHlIwfQW5ub3RhdGVJbWFnZVdpdGhDb250ZXh0LmV4cGFuZJRqVjEBAEvsS/mHlIw3QW5ub3RhdGVJbWFnZVdpdGhDb250ZXh0Ll9jcmVhdGVfaW1hZ2VfYW5ub3RhdGlvbl9wYWlyc5RqVjEBAEv7TQgBh5SMGEFubm90YXRlSW1hZ2VXaXRoQ29udGV4dJRqXTEBAEu0TQgBh5SMGV9JbWFnZUFubm90YXRlRm4uX19pbml0X1+UalYxAQBNEAFNGAGHlIwWX0ltYWdlQW5ub3RhdGVGbi5zZXR1cJRqVjEBAE0aAU0bAYeUjBhfSW1hZ2VBbm5vdGF0ZUZuLnByb2Nlc3OUalYxAQBNHQFNJAGHlIwQX0ltYWdlQW5ub3RhdGVGbpRqXTEBAE0LAU0kAYeUdX2UKIwNQW5ub3RhdGVJbWFnZZRqPwMAAIwUQW5ub3RhdGVJbWFnZS5leHBhbmSUaj8DAACMGEFubm90YXRlSW1hZ2VXaXRoQ29udGV4dJRqPwMAAIwfQW5ub3RhdGVJbWFnZVdpdGhDb250ZXh0LmV4cGFuZJRqPwMAAHWMG2FwYWNoZV9iZWFtLm1sLmdjcC52aXNpb25tbJR0lIwkYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zlChYyqoAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUGlwZWxpbmUgb3B0aW9ucyBvYnRhaW5lZCBmcm9tIGNvbW1hbmQgbGluZSBwYXJzaW5nLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcmdwYXJzZQppbXBvcnQganNvbgppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHN1YnByb2Nlc3MKZnJvbSBidWlsdGlucyBpbXBvcnQgbGlzdApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBUeXBlCmZyb20gdHlwaW5nIGltcG9ydCBUeXBlVmFyCgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFJ1bnRpbWVWYWx1ZVByb3ZpZGVyCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgU3RhdGljVmFsdWVQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMudmFsdWVfcHJvdmlkZXIgaW1wb3J0IFZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IEhhc0Rpc3BsYXlEYXRhCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHByb2Nlc3NlcwoKX19hbGxfXyA9IFsKICAgICdQaXBlbGluZU9wdGlvbnMnLAogICAgJ1N0YW5kYXJkT3B0aW9ucycsCiAgICAnVHlwZU9wdGlvbnMnLAogICAgJ0RpcmVjdE9wdGlvbnMnLAogICAgJ0dvb2dsZUNsb3VkT3B0aW9ucycsCiAgICAnSGFkb29wRmlsZVN5c3RlbU9wdGlvbnMnLAogICAgJ1dvcmtlck9wdGlvbnMnLAogICAgJ0RlYnVnT3B0aW9ucycsCiAgICAnUHJvZmlsaW5nT3B0aW9ucycsCiAgICAnU2V0dXBPcHRpb25zJywKICAgICdUZXN0T3B0aW9ucycsCl0KClBpcGVsaW5lT3B0aW9uc1QgPSBUeXBlVmFyKCdQaXBlbGluZU9wdGlvbnNUJywgYm91bmQ9J1BpcGVsaW5lT3B0aW9ucycpCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKZGVmIF9zdGF0aWNfdmFsdWVfcHJvdmlkZXJfb2YodmFsdWVfdHlwZSk6CiAgIiIiIkhlbHBlciBmdW5jdGlvbiB0byBwbHVnIGEgVmFsdWVQcm92aWRlciBpbnRvIGFyZ3BhcnNlLgoKICBBcmdzOgogICAgdmFsdWVfdHlwZTogdGhlIHR5cGUgb2YgdGhlIHZhbHVlLiBTaW5jZSB0aGUgdHlwZSBwYXJhbSBvZiBhcmdwYXJzZSdzCiAgICAgICAgICAgICAgICBhZGRfYXJndW1lbnQgd2lsbCBhbHdheXMgYmUgVmFsdWVQcm92aWRlciwgd2UgbmVlZCB0bwogICAgICAgICAgICAgICAgcHJlc2VydmUgdGhlIHR5cGUgb2YgdGhlIGFjdHVhbCB2YWx1ZS4KICBSZXR1cm5zOgogICAgQSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQgU3RhdGljVmFsdWVQcm92aWRlciBpbiB0aGUgZm9ybSBvZiBhIGZ1bmN0aW9uLgoKICAiIiIKICBkZWYgX2YodmFsdWUpOgogICAgX2YuX19uYW1lX18gPSB2YWx1ZV90eXBlLl9fbmFtZV9fCiAgICByZXR1cm4gU3RhdGljVmFsdWVQcm92aWRlcih2YWx1ZV90eXBlLCB2YWx1ZSkKCiAgcmV0dXJuIF9mCgoKY2xhc3MgX0JlYW1Bcmd1bWVudFBhcnNlcihhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcik6CiAgIiIiQW4gQXJndW1lbnRQYXJzZXIgdGhhdCBzdXBwb3J0cyBWYWx1ZVByb3ZpZGVyIG9wdGlvbnMuCgogIEV4YW1wbGUgVXNhZ2U6OgoKICAgIGNsYXNzIFRlbXBsYXRlVXNlck9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKICAgICAgQGNsYXNzbWV0aG9kCgogICAgICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgICAgICBwYXJzZXIuYWRkX3ZhbHVlX3Byb3ZpZGVyX2FyZ3VtZW50KCctLXZwX2FyZzEnLCBkZWZhdWx0PSdzdGFydCcpCiAgICAgICAgcGFyc2VyLmFkZF92YWx1ZV9wcm92aWRlcl9hcmd1bWVudCgnLS12cF9hcmcyJykKICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5vbl92cF9hcmcnKQoKICAiIiIKICBkZWYgYWRkX3ZhbHVlX3Byb3ZpZGVyX2FyZ3VtZW50KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAiIiJWYWx1ZVByb3ZpZGVyIGFyZ3VtZW50cyBjYW4gYmUgZWl0aGVyIG9mIHR5cGUga2V5d29yZCBvciBwb3NpdGlvbmFsLgogICAgQXQgcnVudGltZSwgZXZlbiBwb3NpdGlvbmFsIGFyZ3VtZW50cyB3aWxsIG5lZWQgdG8gYmUgc3VwcGxpZWQgaW4gdGhlCiAgICBrZXkvdmFsdWUgZm9ybS4KICAgICIiIgogICAgIyBFeHRyYWN0IHRoZSBvcHRpb24gbmFtZSBmcm9tIHBvc2l0aW9uYWwgYXJndW1lbnQgWydwb3NfYXJnJ10KICAgIGFzc2VydCBhcmdzICE9ICgpIGFuZCBsZW4oYXJnc1swXSkgPj0gMQogICAgaWYgYXJnc1swXVswXSAhPSAnLSc6CiAgICAgIG9wdGlvbl9uYW1lID0gYXJnc1swXQogICAgICBpZiBrd2FyZ3MuZ2V0KCduYXJncycpIGlzIE5vbmU6ICAjIG1ha2UgdGhlbSBvcHRpb25hbGx5IHRlbXBsYXRlZAogICAgICAgIGt3YXJnc1snbmFyZ3MnXSA9ICc/JwogICAgZWxzZToKICAgICAgIyBvciBrZXl3b3JkIGFyZ3VtZW50cyBsaWtlIFstLWt3X2FyZywgLWssIC13XSBvciBbLS1rdy1hcmddCiAgICAgIG9wdGlvbl9uYW1lID0gW2kucmVwbGFjZSgnLS0nLCAnJykgZm9yIGkgaW4gYXJncyBpZiBpWzoyXSA9PSAnLS0nXVswXQoKICAgICMgcmVhc3NpZ24gdGhlIHR5cGUgdG8gbWFrZSByb29tIGZvciB1c2luZwogICAgIyBTdGF0aWNWYWx1ZVByb3ZpZGVyIGFzIHRoZSB0eXBlIGZvciBhZGRfYXJndW1lbnQKICAgIHZhbHVlX3R5cGUgPSBrd2FyZ3MuZ2V0KCd0eXBlJykgb3Igc3RyCiAgICBrd2FyZ3NbJ3R5cGUnXSA9IF9zdGF0aWNfdmFsdWVfcHJvdmlkZXJfb2YodmFsdWVfdHlwZSkKCiAgICAjIHJlYXNzaWduIGRlZmF1bHQgdG8gZGVmYXVsdF92YWx1ZSB0byBtYWtlIHJvb20gZm9yIHVzaW5nCiAgICAjIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyIGFzIHRoZSBkZWZhdWx0IGZvciBhZGRfYXJndW1lbnQKICAgIGRlZmF1bHRfdmFsdWUgPSBrd2FyZ3MuZ2V0KCdkZWZhdWx0JykKICAgIGt3YXJnc1snZGVmYXVsdCddID0gUnVudGltZVZhbHVlUHJvdmlkZXIoCiAgICAgICAgb3B0aW9uX25hbWU9b3B0aW9uX25hbWUsCiAgICAgICAgdmFsdWVfdHlwZT12YWx1ZV90eXBlLAogICAgICAgIGRlZmF1bHRfdmFsdWU9ZGVmYXVsdF92YWx1ZSkKCiAgICAjIGhhdmUgYWRkX2FyZ3VtZW50IGRvIG1vc3Qgb2YgdGhlIHdvcmsKICAgIHNlbGYuYWRkX2FyZ3VtZW50KCphcmdzLCAqKmt3YXJncykKCiAgIyBUaGUgYXJncGFyc2UgcGFja2FnZSBieSBkZWZhdWx0IHRyaWVzIHRvIGF1dG9jb21wbGV0ZSBvcHRpb24gbmFtZXMuIFRoaXMKICAjIHJlc3VsdHMgaW4gYW4gImFtYmlndW91cyBvcHRpb24iIGVycm9yIGZyb20gYXJncGFyc2Ugd2hlbiBhbiB1bmtub3duIG9wdGlvbgogICMgbWF0Y2hpbmcgbXVsdGlwbGUga25vd24gb25lcyBhcmUgdXNlZC4gVGhpcyBzdXBwcmVzc2VzIHRoYXQgYmVoYXZpb3IuCiAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgogICAgaWYgbWVzc2FnZS5zdGFydHN3aXRoKCdhbWJpZ3VvdXMgb3B0aW9uOiAnKToKICAgICAgcmV0dXJuCiAgICBzdXBlcihfQmVhbUFyZ3VtZW50UGFyc2VyLCBzZWxmKS5lcnJvcihtZXNzYWdlKQoKCmNsYXNzIFBpcGVsaW5lT3B0aW9ucyhIYXNEaXNwbGF5RGF0YSk6CiAgIiIiVGhpcyBjbGFzcyBhbmQgc3ViY2xhc3NlcyBhcmUgdXNlZCBhcyBjb250YWluZXJzIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucy4KCiAgVGhlc2UgY2xhc3NlcyBhcmUgd3JhcHBlcnMgb3ZlciB0aGUgc3RhbmRhcmQgYXJncGFyc2UgUHl0aG9uIG1vZHVsZQogIChzZWUgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwpLiAgVG8gZGVmaW5lIG9uZSBvcHRpb24KICBvciBhIGdyb3VwIG9mIG9wdGlvbnMsIGNyZWF0ZSBhIHN1YmNsYXNzIGZyb20gUGlwZWxpbmVPcHRpb25zLgoKICBFeGFtcGxlIFVzYWdlOjoKCiAgICBjbGFzcyBYeXpPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogICAgICBAY2xhc3NtZXRob2QKICAgICAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hYmMnLCBkZWZhdWx0PSdzdGFydCcpCiAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS14eXonLCBkZWZhdWx0PSdlbmQnKQoKICBUaGUgYXJndW1lbnRzIGZvciB0aGUgYWRkX2FyZ3VtZW50KCkgbWV0aG9kIGFyZSBleGFjdGx5IHRoZSBvbmVzCiAgZGVzY3JpYmVkIGluIHRoZSBhcmdwYXJzZSBwdWJsaWMgZG9jdW1lbnRhdGlvbi4KCiAgUGlwZWxpbmUgb2JqZWN0cyByZXF1aXJlIGFuIG9wdGlvbnMgb2JqZWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4KICBUaGlzIGlzIG9idGFpbmVkIHNpbXBseSBieSBpbml0aWFsaXppbmcgYW4gb3B0aW9ucyBjbGFzcyBhcyBkZWZpbmVkIGFib3ZlLgoKICBFeGFtcGxlIFVzYWdlOjoKCiAgICBwID0gUGlwZWxpbmUob3B0aW9ucz1YeXpPcHRpb25zKCkpCiAgICBpZiBwLm9wdGlvbnMueHl6ID09ICdlbmQnOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdPcHRpb24geHl6IGhhcyBhbiBpbnZhbGlkIHZhbHVlLicpCgogIEluc3RhbmNlcyBvZiBQaXBlbGluZU9wdGlvbnMgb3IgYW55IG9mIGl0cyBzdWJjbGFzcyBoYXZlIGFjY2VzcyB0byB2YWx1ZXMKICBkZWZpbmVkIGJ5IG90aGVyIFBpcGVsaW5lT3B0aW9uIHN1YmNsYXNzZXMgKHNlZSBnZXRfYWxsX29wdGlvbnMoKSksIGFuZAogIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW4gaW5zdGFuY2Ugb2YgYW5vdGhlciBQaXBlbGluZU9wdGlvbnMgc3ViY2xhc3MKICAoc2VlIHZpZXdfYXMoKSkuIEFsbCB2aWV3cyBzaGFyZSB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZSB0aGF0IHN0b3JlcwogIG9wdGlvbiBrZXktdmFsdWUgcGFpcnMuCgogIEJ5IGRlZmF1bHQgdGhlIG9wdGlvbnMgY2xhc3NlcyB3aWxsIHVzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGluaXRpYWxpemUKICB0aGUgb3B0aW9ucy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZmxhZ3M9Tm9uZSwgKiprd2FyZ3MpOgogICAgIyB0eXBlOiAoT3B0aW9uYWxbTGlzdFtzdHJdXSwgKipBbnkpIC0+IE5vbmUKCiAgICAiIiJJbml0aWFsaXplIGFuIG9wdGlvbnMgY2xhc3MuCgogICAgVGhlIGluaXRpYWxpemVyIHdpbGwgdHJhdmVyc2UgYWxsIHN1YmNsYXNzZXMsIGFkZCBhbGwgdGhlaXIgYXJncGFyc2UKICAgIGFyZ3VtZW50cyBhbmQgdGhlbiBwYXJzZSB0aGUgY29tbWFuZCBsaW5lIHNwZWNpZmllZCBieSBmbGFncyBvciBieSBkZWZhdWx0CiAgICB0aGUgb25lIG9idGFpbmVkIGZyb20gc3lzLmFyZ3YuCgogICAgVGhlIHN1YmNsYXNzZXMgb2YgUGlwZWxpbmVPcHRpb25zIGRvIG5vdCBuZWVkIHRvIHJlZGVmaW5lIF9faW5pdF9fLgoKICAgIEFyZ3M6CiAgICAgIGZsYWdzOiBBbiBpdGVyYWJsZSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGJlIHVzZWQuIElmIG5vdCBzcGVjaWZpZWQKICAgICAgICB0aGVuIHN5cy5hcmd2IHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBmb3IgcGFyc2luZyBhcmd1bWVudHMuCgogICAgICAqKmt3YXJnczogQWRkIG92ZXJyaWRlcyBmb3IgYXJndW1lbnRzIHBhc3NlZCBpbiBmbGFncy4KICAgICIiIgogICAgIyBJbml0aWFsaXppbmcgbG9nZ2luZyBjb25maWd1cmF0aW9uIGluIGNhc2UgdGhlIHVzZXIgZGlkIG5vdCBzZXQgaXQgdXAuCiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkKCiAgICAjIHNlbGYuX2ZsYWdzIHN0b3JlcyBhIGxpc3Qgb2Ygbm90IHlldCBwYXJzZWQgYXJndW1lbnRzLCB0eXBpY2FsbHksCiAgICAjIGNvbW1hbmQtbGluZSBmbGFncy4gVGhpcyBsaXN0IGlzIHNoYXJlZCBhY3Jvc3MgZGlmZmVyZW50IHZpZXdzLgogICAgIyBTZWU6IHZpZXdfYXMoKS4KICAgIHNlbGYuX2ZsYWdzID0gZmxhZ3MKCiAgICAjIEJ1aWxkIHBhcnNlciB0aGF0IHdpbGwgcGFyc2Ugb3B0aW9ucyByZWNvZ25pemVkIGJ5IHRoZSBbc3ViXWNsYXNzIG9mCiAgICAjIFBpcGVsaW5lT3B0aW9ucyB3aG9zZSBvYmplY3QgaXMgYmVpbmcgaW5zdGFudGlhdGVkLgogICAgcGFyc2VyID0gX0JlYW1Bcmd1bWVudFBhcnNlcigpCiAgICBmb3IgY2xzIGluIHR5cGUoc2VsZikubXJvKCk6CiAgICAgIGlmIGNscyA9PSBQaXBlbGluZU9wdGlvbnM6CiAgICAgICAgYnJlYWsKICAgICAgZWxpZiAnX2FkZF9hcmdwYXJzZV9hcmdzJyBpbiBjbHMuX19kaWN0X186CiAgICAgICAgY2xzLl9hZGRfYXJncGFyc2VfYXJncyhwYXJzZXIpICAjIHR5cGU6IGlnbm9yZQoKICAgICMgVGhlIF92aXNpYmxlX29wdGlvbnMgYXR0cmlidXRlIHdpbGwgY29udGFpbiBvcHRpb25zIHRoYXQgd2VyZSByZWNvZ25pemVkCiAgICAjIGJ5IHRoZSBwYXJzZXIuCiAgICBzZWxmLl92aXNpYmxlX29wdGlvbnMsIF8gPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhmbGFncykKCiAgICAjIHNlbGYuX2FsbF9vcHRpb25zIGlzIGluaXRpYWxpemVkIHdpdGggb3ZlcnJpZGVzIHRvIGZsYWcgdmFsdWVzLAogICAgIyBwcm92aWRlZCBpbiBrd2FyZ3MsIGFuZCB3aWxsIHN0b3JlIGtleS12YWx1ZSBwYWlycyBmb3Igb3B0aW9ucyByZWNvZ25pemVkCiAgICAjIGJ5IGN1cnJlbnQgUGlwZWxpbmVPcHRpb25zIFtzdWJdY2xhc3MgYW5kIGl0cyB2aWV3cyB0aGF0IG1heSBiZSBjcmVhdGVkLgogICAgIyBTZWU6IHZpZXdfYXMoKS4KICAgICMgVGhpcyBkaWN0aW9uYXJ5IGlzIHNoYXJlZCBhY3Jvc3MgZGlmZmVyZW50IHZpZXdzLCBhbmQgaXMgbGF6aWx5IHVwZGF0ZWQKICAgICMgYXMgZWFjaCBuZXcgdmlld3MgYXJlIGNyZWF0ZWQuCiAgICAjIFVzZXJzIGFjY2VzcyB0aGlzIGRpY3Rpb25hcnkgc3RvcmUgdmlhIF9fZ2V0YXR0cl9fIC8gX19zZXRhdHRyX18gbWV0aG9kcy4KICAgIHNlbGYuX2FsbF9vcHRpb25zID0ga3dhcmdzCgogICAgIyBJbml0aWFsaXplIHZhbHVlcyBvZiBrZXlzIGRlZmluZWQgYnkgdGhpcyBjbGFzcy4KICAgIGZvciBvcHRpb25fbmFtZSBpbiBzZWxmLl92aXNpYmxlX29wdGlvbl9saXN0KCk6CiAgICAgICMgTm90ZSB0aGF0IG9wdGlvbnMgc3BlY2lmaWVkIGluIGt3YXJncyB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbi4KICAgICAgaWYgb3B0aW9uX25hbWUgbm90IGluIHNlbGYuX2FsbF9vcHRpb25zOgogICAgICAgIHNlbGYuX2FsbF9vcHRpb25zW29wdGlvbl9uYW1lXSA9IGdldGF0dHIoCiAgICAgICAgICAgIHNlbGYuX3Zpc2libGVfb3B0aW9ucywgb3B0aW9uX25hbWUpCgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgIyB0eXBlOiAoX0JlYW1Bcmd1bWVudFBhcnNlcikgLT4gTm9uZQogICAgIyBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8gcHJvdmlkZSBvcHRpb25zLgogICAgcGFzcwoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV9kaWN0aW9uYXJ5KGNscywgb3B0aW9ucyk6CiAgICAiIiJSZXR1cm5zIGEgUGlwZWxpbmVPcHRpb25zIGZyb20gYSBkaWN0aW9uYXJ5IG9mIGFyZ3VtZW50cy4KCiAgICBBcmdzOgogICAgICBvcHRpb25zOiBEaWN0aW9uYXJ5IG9mIGFyZ3VtZW50IHZhbHVlIHBhaXJzLgoKICAgIFJldHVybnM6CiAgICAgIEEgUGlwZWxpbmVPcHRpb25zIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGdpdmVuIGFyZ3VtZW50cy4KICAgICIiIgogICAgZmxhZ3MgPSBbXQogICAgZm9yIGssIHYgaW4gb3B0aW9ucy5pdGVtcygpOgogICAgICBpZiBpc2luc3RhbmNlKHYsIGJvb2wpOgogICAgICAgIGlmIHY6CiAgICAgICAgICBmbGFncy5hcHBlbmQoJy0tJXMnICUgaykKICAgICAgZWxpZiBpc2luc3RhbmNlKHYsIGxpc3QpOgogICAgICAgIGZvciBpIGluIHY6CiAgICAgICAgICBmbGFncy5hcHBlbmQoJy0tJXM9JXMnICUgKGssIGkpKQogICAgICBlbHNlOgogICAgICAgIGZsYWdzLmFwcGVuZCgnLS0lcz0lcycgJSAoaywgdikpCgogICAgcmV0dXJuIGNscyhmbGFncykKCiAgZGVmIGdldF9hbGxfb3B0aW9ucygKICAgICAgc2VsZiwKICAgICAgZHJvcF9kZWZhdWx0PUZhbHNlLAogICAgICBhZGRfZXh0cmFfYXJnc19mbj1Ob25lICAjIHR5cGU6IE9wdGlvbmFsW0NhbGxhYmxlW1tfQmVhbUFyZ3VtZW50UGFyc2VyXSwgTm9uZV1dCiAgKToKICAgICMgdHlwZTogKC4uLikgLT4gRGljdFtzdHIsIEFueV0KCiAgICAiIiJSZXR1cm5zIGEgZGljdGlvbmFyeSBvZiBhbGwgZGVmaW5lZCBhcmd1bWVudHMuCgogICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgYWxsIGRlZmluZWQgYXJndW1lbnRzIChhcmd1bWVudHMgdGhhdCBhcmUgZGVmaW5lZCBpbgogICAgYW55IHN1YmNsYXNzIG9mIFBpcGVsaW5lT3B0aW9ucykgaW50byBhIGRpY3Rpb25hcnkuCgogICAgQXJnczoKICAgICAgZHJvcF9kZWZhdWx0OiBJZiBzZXQgdG8gdHJ1ZSwgb3B0aW9ucyB0aGF0IGFyZSBlcXVhbCB0byB0aGVpciBkZWZhdWx0CiAgICAgICAgdmFsdWVzLCBhcmUgbm90IHJldHVybmVkIGFzIHBhcnQgb2YgdGhlIHJlc3VsdCBkaWN0aW9uYXJ5LgogICAgICBhZGRfZXh0cmFfYXJnc19mbjogQ2FsbGJhY2sgdG8gcG9wdWxhdGUgYWRkaXRpb25hbCBhcmd1bWVudHMsIGNhbiBiZSB1c2VkCiAgICAgICAgYnkgcnVubmVyIHRvIHN1cHBseSBvdGhlcndpc2UgdW5rbm93biBhcmdzLgoKICAgIFJldHVybnM6CiAgICAgIERpY3Rpb25hcnkgb2YgYWxsIGFyZ3MgYW5kIHZhbHVlcy4KICAgICIiIgoKICAgICMgVE9ETyhCRUFNLTEzMTkpOiBQaXBlbGluZU9wdGlvbiBzdWItY2xhc3NlcyBpbiB0aGUgbWFpbiBzZXNzaW9uIG1pZ2h0IGJlCiAgICAjIHJlcGVhdGVkLiBQaWNrIGxhc3QgdW5pcXVlIGluc3RhbmNlIG9mIGVhY2ggc3ViY2xhc3MgdG8gYXZvaWQgY29uZmxpY3RzLgogICAgc3Vic2V0ID0ge30KICAgIHBhcnNlciA9IF9CZWFtQXJndW1lbnRQYXJzZXIoKQogICAgZm9yIGNscyBpbiBQaXBlbGluZU9wdGlvbnMuX19zdWJjbGFzc2VzX18oKToKICAgICAgc3Vic2V0W3N0cihjbHMpXSA9IGNscwogICAgZm9yIGNscyBpbiBzdWJzZXQudmFsdWVzKCk6CiAgICAgIGNscy5fYWRkX2FyZ3BhcnNlX2FyZ3MocGFyc2VyKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgaWYgYWRkX2V4dHJhX2FyZ3NfZm46CiAgICAgIGFkZF9leHRyYV9hcmdzX2ZuKHBhcnNlcikKICAgIGtub3duX2FyZ3MsIHVua25vd25fYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKHNlbGYuX2ZsYWdzKQogICAgaWYgdW5rbm93bl9hcmdzOgogICAgICBfTE9HR0VSLndhcm5pbmcoIkRpc2NhcmRpbmcgdW5wYXJzZWFibGUgYXJnczogJXMiLCB1bmtub3duX2FyZ3MpCiAgICByZXN1bHQgPSB2YXJzKGtub3duX2FyZ3MpCgogICAgb3ZlcnJpZGVzID0gc2VsZi5fYWxsX29wdGlvbnMuY29weSgpCiAgICAjIEFwcGx5IHRoZSBvdmVycmlkZXMgaWYgYW55CiAgICBmb3IgayBpbiBsaXN0KHJlc3VsdCk6CiAgICAgIG92ZXJyaWRlcy5wb3AoaywgTm9uZSkKICAgICAgaWYgayBpbiBzZWxmLl9hbGxfb3B0aW9uczoKICAgICAgICByZXN1bHRba10gPSBzZWxmLl9hbGxfb3B0aW9uc1trXQogICAgICBpZiAoZHJvcF9kZWZhdWx0IGFuZCBwYXJzZXIuZ2V0X2RlZmF1bHQoaykgPT0gcmVzdWx0W2tdIGFuZAogICAgICAgICAgbm90IGlzaW5zdGFuY2UocGFyc2VyLmdldF9kZWZhdWx0KGspLCBWYWx1ZVByb3ZpZGVyKSk6CiAgICAgICAgZGVsIHJlc3VsdFtrXQoKICAgIGlmIG92ZXJyaWRlczoKICAgICAgX0xPR0dFUi53YXJuaW5nKCJEaXNjYXJkaW5nIGludmFsaWQgb3ZlcnJpZGVzOiAlcyIsIG92ZXJyaWRlcykKCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4gc2VsZi5nZXRfYWxsX29wdGlvbnMoVHJ1ZSkKCiAgZGVmIHZpZXdfYXMoc2VsZiwgY2xzKToKICAgICMgdHlwZTogKFR5cGVbUGlwZWxpbmVPcHRpb25zVF0pIC0+IFBpcGVsaW5lT3B0aW9uc1QKCiAgICAiIiJSZXR1cm5zIGEgdmlldyBvZiBjdXJyZW50IG9iamVjdCBhcyBwcm92aWRlZCBQaXBlbGluZU9wdGlvbiBzdWJjbGFzcy4KCiAgICBFeGFtcGxlIFVzYWdlOjoKCiAgICAgIG9wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMoWyctLXJ1bm5lcicsICdEaXJlY3QnLCAnLS1zdHJlYW1pbmcnXSkKICAgICAgc3RhbmRhcmRfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpCiAgICAgIGlmIHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICAgICMgLi4uIHN0YXJ0IGEgc3RyZWFtaW5nIGpvYiAuLi4KCiAgICBOb3RlIHRoYXQgb3B0aW9ucyBvYmplY3RzIG1heSBoYXZlIG11bHRpcGxlIHZpZXdzLCBhbmQgbW9kaWZpY2F0aW9ucwogICAgb2YgdmFsdWVzIGluIGFueSB2aWV3LW9iamVjdCB3aWxsIGFwcGx5IHRvIGN1cnJlbnQgb2JqZWN0IGFuZCBvdGhlcgogICAgdmlldy1vYmplY3RzLgoKICAgIEFyZ3M6CiAgICAgIGNsczogUGlwZWxpbmVPcHRpb25zIGNsYXNzIG9yIGFueSBvZiBpdHMgc3ViY2xhc3Nlcy4KCiAgICBSZXR1cm5zOgogICAgICBBbiBpbnN0YW5jZSBvZiBjbHMgdGhhdCBpcyBpbnRpdGlhbGl6ZWQgdXNpbmcgb3B0aW9ucyBjb250YWluZWQgaW4gY3VycmVudAogICAgICBvYmplY3QuCgogICAgIiIiCiAgICB2aWV3ID0gY2xzKHNlbGYuX2ZsYWdzKQogICAgZm9yIG9wdGlvbl9uYW1lIGluIHZpZXcuX3Zpc2libGVfb3B0aW9uX2xpc3QoKToKICAgICAgIyBJbml0aWFsaXplIHZhbHVlcyBvZiBrZXlzIGRlZmluZWQgYnkgYSBjbHMuCiAgICAgICMKICAgICAgIyBOb3RlIHRoYXQgd2UgZG8gaW5pdGlhbGl6YXRpb24gb25seSBvbmNlIHBlciBrZXkgdG8gbWFrZSBzdXJlIHRoYXQKICAgICAgIyB2YWx1ZXMgaW4gX2FsbF9vcHRpb25zIGRpY3QgYXJlIG5vdC1yZWNyZWF0ZWQgd2l0aCBlYWNoIG5ldyB2aWV3LgogICAgICAjIFRoaXMgaXMgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHZhbHVlcyBvZiBtdWx0aS1vcHRpb25zIGtleXMgYXJlCiAgICAgICMgYmFja2VkIGJ5IHRoZSBzYW1lIGxpc3QgYWNyb3NzIG11bHRpcGxlIHZpZXdzLCBhbmQgdGhhdCBhbnkgb3ZlcnJpZGVzIG9mCiAgICAgICMgcGlwZWxpbmUgb3B0aW9ucyBhbHJlYWR5IHN0b3JlZCBpbiBfYWxsX29wdGlvbnMgYXJlIHByZXNlcnZlZC4KICAgICAgaWYgb3B0aW9uX25hbWUgbm90IGluIHNlbGYuX2FsbF9vcHRpb25zOgogICAgICAgIHNlbGYuX2FsbF9vcHRpb25zW29wdGlvbl9uYW1lXSA9IGdldGF0dHIoCiAgICAgICAgICAgIHZpZXcuX3Zpc2libGVfb3B0aW9ucywgb3B0aW9uX25hbWUpCiAgICAjIE5vdGUgdGhhdCB2aWV3cyB3aWxsIHN0aWxsIHN0b3JlIF9hbGxfb3B0aW9ucyBvZiB0aGUgc291cmNlIG9iamVjdC4KICAgIHZpZXcuX2FsbF9vcHRpb25zID0gc2VsZi5fYWxsX29wdGlvbnMKICAgIHJldHVybiB2aWV3CgogIGRlZiBfdmlzaWJsZV9vcHRpb25fbGlzdChzZWxmKToKICAgICMgdHlwZTogKCkgLT4gTGlzdFtzdHJdCiAgICByZXR1cm4gc29ydGVkKAogICAgICAgIG9wdGlvbiBmb3Igb3B0aW9uIGluIGRpcihzZWxmLl92aXNpYmxlX29wdGlvbnMpIGlmIG9wdGlvblswXSAhPSAnXycpCgogIGRlZiBfX2Rpcl9fKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBMaXN0W3N0cl0KICAgIHJldHVybiBzb3J0ZWQoCiAgICAgICAgZGlyKHR5cGUoc2VsZikpICsgbGlzdChzZWxmLl9fZGljdF9fKSArIHNlbGYuX3Zpc2libGVfb3B0aW9uX2xpc3QoKSkKCiAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgogICAgIyBTcGVjaWFsIG1ldGhvZHMgd2hpY2ggbWF5IGJlIGFjY2Vzc2VkIGJlZm9yZSB0aGUgb2JqZWN0IGlzCiAgICAjIGZ1bGx5IGNvbnN0cnVjdGVkIChlLmcuIGluIHVucGlja2xpbmcpLgogICAgaWYgbmFtZVs6Ml0gPT0gbmFtZVstMjpdID09ICdfXyc6CiAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQogICAgZWxpZiBuYW1lIGluIHNlbGYuX3Zpc2libGVfb3B0aW9uX2xpc3QoKToKICAgICAgcmV0dXJuIHNlbGYuX2FsbF9vcHRpb25zW25hbWVdCiAgICBlbHNlOgogICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKICAgICAgICAgICInJXMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclcyciICUgKHR5cGUoc2VsZikuX19uYW1lX18sIG5hbWUpKQoKICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgogICAgaWYgbmFtZSBpbiAoJ19mbGFncycsICdfYWxsX29wdGlvbnMnLCAnX3Zpc2libGVfb3B0aW9ucycpOgogICAgICBzdXBlcihQaXBlbGluZU9wdGlvbnMsIHNlbGYpLl9fc2V0YXR0cl9fKG5hbWUsIHZhbHVlKQogICAgZWxpZiBuYW1lIGluIHNlbGYuX3Zpc2libGVfb3B0aW9uX2xpc3QoKToKICAgICAgc2VsZi5fYWxsX29wdGlvbnNbbmFtZV0gPSB2YWx1ZQogICAgZWxzZToKICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoCiAgICAgICAgICAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIiAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBuYW1lKSkKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoCiAgICAgICAgdHlwZShzZWxmKS5fX25hbWVfXywKICAgICAgICAnLCAnLmpvaW4oCiAgICAgICAgICAgICclcz0lcycgJSAob3B0aW9uLCBnZXRhdHRyKHNlbGYsIG9wdGlvbikpCiAgICAgICAgICAgIGZvciBvcHRpb24gaW4gc2VsZi5fdmlzaWJsZV9vcHRpb25fbGlzdCgpKSkKCgpjbGFzcyBTdGFuZGFyZE9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKCiAgREVGQVVMVF9SVU5ORVIgPSAnRGlyZWN0UnVubmVyJwoKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcnVubmVyJywKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1BpcGVsaW5lIHJ1bm5lciB1c2VkIHRvIGV4ZWN1dGUgdGhlIHdvcmtmbG93LiBWYWxpZCB2YWx1ZXMgYXJlICcKICAgICAgICAgICAgJ0RpcmVjdFJ1bm5lciwgRGF0YWZsb3dSdW5uZXIuJykpCiAgICAjIFdoZXRoZXIgdG8gZW5hYmxlIHN0cmVhbWluZyBtb2RlLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zdHJlYW1pbmcnLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSdXaGV0aGVyIHRvIGVuYWJsZSBzdHJlYW1pbmcgbW9kZS4nKQoKCmNsYXNzIFR5cGVPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICAjIFRPRE8obGFvbHUpOiBBZGQgYSB0eXBlIGluZmVyZW5jaW5nIG9wdGlvbiBoZXJlIG9uY2UgaW1wbGVtZW50ZWQuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXR5cGVfY2hlY2tfc3RyaWN0bmVzcycsCiAgICAgICAgZGVmYXVsdD0nREVGQVVMVF9UT19BTlknLAogICAgICAgIGNob2ljZXM9WydBTExfUkVRVUlSRUQnLCAnREVGQVVMVF9UT19BTlknXSwKICAgICAgICBoZWxwPSdUaGUgbGV2ZWwgb2YgZXhoYXVzdGl2ZSBtYW51YWwgdHlwZS1oaW50ICcKICAgICAgICAnYW5ub3RhdGlvbiByZXF1aXJlZCcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW5vX3BpcGVsaW5lX3R5cGVfY2hlY2snLAogICAgICAgIGRlc3Q9J3BpcGVsaW5lX3R5cGVfY2hlY2snLAogICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAogICAgICAgIGhlbHA9J0Rpc2FibGUgdHlwZSBjaGVja2luZyBhdCBwaXBlbGluZSBjb25zdHJ1Y3Rpb24gJwogICAgICAgICd0aW1lJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcnVudGltZV90eXBlX2NoZWNrJywKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nRW5hYmxlIHR5cGUgY2hlY2tpbmcgYXQgcGlwZWxpbmUgZXhlY3V0aW9uICcKICAgICAgICAndGltZS4gTk9URTogb25seSBzdXBwb3J0ZWQgd2l0aCB0aGUgJwogICAgICAgICdEaXJlY3RSdW5uZXInKQoKCmNsYXNzIERpcmVjdE9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKICAiIiJEaXJlY3RSdW5uZXItc3BlY2lmaWMgZXhlY3V0aW9uIG9wdGlvbnMuIiIiCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW5vX2RpcmVjdF9ydW5uZXJfdXNlX3N0YWNrZWRfYnVuZGxlJywKICAgICAgICBhY3Rpb249J3N0b3JlX2ZhbHNlJywKICAgICAgICBkZXN0PSdkaXJlY3RfcnVubmVyX3VzZV9zdGFja2VkX2J1bmRsZScsCiAgICAgICAgaGVscD0nRGlyZWN0UnVubmVyIHVzZXMgc3RhY2tlZCBXaW5kb3dlZFZhbHVlcyB3aXRoaW4gYSBCdW5kbGUgZm9yICcKICAgICAgICAnbWVtb3J5IG9wdGltaXphdGlvbi4gU2V0IC0tbm9fZGlyZWN0X3J1bm5lcl91c2Vfc3RhY2tlZF9idW5kbGUgdG8gJwogICAgICAgICdhdm9pZCBpdC4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1kaXJlY3RfcnVubmVyX2J1bmRsZV9yZXBlYXQnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGRlZmF1bHQ9MCwKICAgICAgICBoZWxwPSdyZXBsYXkgZXZlcnkgYnVuZGxlIHRoaXMgbWFueSBleHRyYSB0aW1lcywgZm9yIHByb2ZpbGluZycKICAgICAgICAnYW5kIGRlYnVnZ2luZycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRpcmVjdF9udW1fd29ya2VycycsCiAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgZGVmYXVsdD0xLAogICAgICAgIGhlbHA9J251bWJlciBvZiBwYXJhbGxlbCBydW5uaW5nIHdvcmtlcnMuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZGlyZWN0X3J1bm5pbmdfbW9kZScsCiAgICAgICAgZGVmYXVsdD0naW5fbWVtb3J5JywKICAgICAgICBjaG9pY2VzPVsnaW5fbWVtb3J5JywgJ211bHRpX3RocmVhZGluZycsICdtdWx0aV9wcm9jZXNzaW5nJ10sCiAgICAgICAgaGVscD0nV29ya2VycyBydW5uaW5nIGVudmlyb25tZW50LicpCgoKY2xhc3MgR29vZ2xlQ2xvdWRPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgIiIiR29vZ2xlIENsb3VkIERhdGFmbG93IHNlcnZpY2UgZXhlY3V0aW9uIG9wdGlvbnMuIiIiCgogIEJJR1FVRVJZX0FQSV9TRVJWSUNFID0gJ2JpZ3F1ZXJ5Lmdvb2dsZWFwaXMuY29tJwogIENPTVBVVEVfQVBJX1NFUlZJQ0UgPSAnY29tcHV0ZS5nb29nbGVhcGlzLmNvbScKICBTVE9SQUdFX0FQSV9TRVJWSUNFID0gJ3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20nCiAgREFUQUZMT1dfRU5EUE9JTlQgPSAnaHR0cHM6Ly9kYXRhZmxvdy5nb29nbGVhcGlzLmNvbScKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRhdGFmbG93X2VuZHBvaW50JywKICAgICAgICBkZWZhdWx0PWNscy5EQVRBRkxPV19FTkRQT0lOVCwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1RoZSBVUkwgZm9yIHRoZSBEYXRhZmxvdyBBUEkuIElmIG5vdCBzZXQsIHRoZSBkZWZhdWx0IHB1YmxpYyBVUkwgJwogICAgICAgICAgICAnd2lsbCBiZSB1c2VkLicpKQogICAgIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcHJvamVjdCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9J05hbWUgb2YgdGhlIENsb3VkIHByb2plY3Qgb3duaW5nIHRoZSBEYXRhZmxvdyAnCiAgICAgICAgJ2pvYi4nKQogICAgIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tam9iX25hbWUnLCBkZWZhdWx0PU5vbmUsIGhlbHA9J05hbWUgb2YgdGhlIENsb3VkIERhdGFmbG93IGpvYi4nKQogICAgIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tc3RhZ2luZ19sb2NhdGlvbicsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9J0dDUyBwYXRoIGZvciBzdGFnaW5nIGNvZGUgcGFja2FnZXMgbmVlZGVkIGJ5ICcKICAgICAgICAnd29ya2Vycy4nKQogICAgIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KICAgICMgSWYgc3RhZ2luZ19sb2NhdGlvbiBpcyBub3Qgc2V0LCBpdCBkZWZhdWx0cyB0byB0ZW1wX2xvY2F0aW9uLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS10ZW1wX2xvY2F0aW9uJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0nR0NTIHBhdGggZm9yIHNhdmluZyB0ZW1wb3Jhcnkgd29ya2Zsb3cgam9icy4nKQogICAgIyBUaGUgR29vZ2xlIENvbXB1dGUgRW5naW5lIHJlZ2lvbiBmb3IgY3JlYXRpbmcgRGF0YWZsb3cgam9icy4gU2VlCiAgICAjIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9jb21wdXRlL2RvY3MvcmVnaW9ucy16b25lcy9yZWdpb25zLXpvbmVzIGZvciBhCiAgICAjIGxpc3Qgb2YgdmFsaWQgb3B0aW9ucy4gQ3VycmVudGx5IGRlZmF1bHRzIHRvIHVzLWNlbnRyYWwxLCBidXQgZnV0dXJlCiAgICAjIHJlbGVhc2VzIG9mIEJlYW0gd2lsbCByZXF1aXJlIHRoZSB1c2VyIHRvIHNldCB0aGUgcmVnaW9uIGV4cGxpY2l0bHkuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXJlZ2lvbicsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9J1RoZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgcmVnaW9uIGZvciBjcmVhdGluZyAnCiAgICAgICAgJ0RhdGFmbG93IGpvYi4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zZXJ2aWNlX2FjY291bnRfZW1haWwnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSdJZGVudGl0eSB0byBydW4gdmlydHVhbCBtYWNoaW5lcyBhcy4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1ub19hdXRoJywKICAgICAgICBkZXN0PSdub19hdXRoJywKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgaGVscD0nU2tpcHMgYXV0aG9yaXppbmcgY3JlZGVudGlhbHMgd2l0aCBHb29nbGUgQ2xvdWQuJykKICAgICMgT3B0aW9uIHRvIHJ1biB0ZW1wbGF0ZWQgcGlwZWxpbmVzCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXRlbXBsYXRlX2xvY2F0aW9uJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0nU2F2ZSBqb2IgdG8gc3BlY2lmaWVkIGxvY2FsIG9yIEdDUyBsb2NhdGlvbi4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1sYWJlbCcsCiAgICAgICAgJy0tbGFiZWxzJywKICAgICAgICBkZXN0PSdsYWJlbHMnLAogICAgICAgIGFjdGlvbj0nYXBwZW5kJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0nTGFiZWxzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBEYXRhZmxvdyBqb2IuICcKICAgICAgICAnTGFiZWxzIGFyZSBrZXkgdmFsdWUgcGFpcnMgc2VwYXJhdGVkIGJ5ID0gJwogICAgICAgICcoZS5nLiAtLWxhYmVsIGtleT12YWx1ZSkuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tdXBkYXRlJywKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0nVXBkYXRlIGFuIGV4aXN0aW5nIHN0cmVhbWluZyBDbG91ZCBEYXRhZmxvdyBqb2IuICcKICAgICAgICAnRXhwZXJpbWVudGFsLiAnCiAgICAgICAgJ1NlZSBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZGF0YWZsb3cvZG9jcy9ndWlkZXMvJwogICAgICAgICd1cGRhdGluZy1hLXBpcGVsaW5lJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tdHJhbnNmb3JtX25hbWVfbWFwcGluZycsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIHR5cGU9anNvbi5sb2FkcywKICAgICAgICBoZWxwPSdUaGUgdHJhbnNmb3JtIG1hcHBpbmcgdGhhdCBtYXBzIHRoZSBuYW1lZCAnCiAgICAgICAgJ3RyYW5zZm9ybXMgaW4geW91ciBwcmlvciBwaXBlbGluZSBjb2RlIHRvIG5hbWVzICcKICAgICAgICAnaW4geW91ciByZXBsYWNlbWVudCBwaXBlbGluZSBjb2RlLicKICAgICAgICAnRXhwZXJpbWVudGFsLiAnCiAgICAgICAgJ1NlZSBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vZGF0YWZsb3cvZG9jcy9ndWlkZXMvJwogICAgICAgICd1cGRhdGluZy1hLXBpcGVsaW5lJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZW5hYmxlX3N0cmVhbWluZ19lbmdpbmUnLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSdFbmFibGUgV2luZG1pbGwgU2VydmljZSBmb3IgdGhpcyBEYXRhZmxvdyBqb2IuICcpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRhdGFmbG93X2ttc19rZXknLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSdTZXQgYSBHb29nbGUgQ2xvdWQgS01TIGtleSBuYW1lIHRvIGJlIHVzZWQgaW4gJwogICAgICAgICdEYXRhZmxvdyBzdGF0ZSBvcGVyYXRpb25zIChHQkssIFN0cmVhbWluZykuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZmxleHJzX2dvYWwnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBjaG9pY2VzPVsnQ09TVF9PUFRJTUlaRUQnLCAnU1BFRURfT1BUSU1JWkVEJ10sCiAgICAgICAgaGVscD0nU2V0IHRoZSBGbGV4aWJsZSBSZXNvdXJjZSBTY2hlZHVsaW5nIG1vZGUnKQoKICBkZWYgX2dldF9kZWZhdWx0X2djcF9yZWdpb24oc2VsZik6CiAgICAiIiJHZXQgYSBkZWZhdWx0IHZhbHVlIGZvciBHb29nbGUgQ2xvdWQgcmVnaW9uIGFjY29yZGluZyB0bwogICAgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy9nY2xvdWQtY29tcHV0ZS8jZGVmYXVsdC1wcm9wZXJ0aWVzLgogICAgSWYgbm8gb3RoZXIgZGVmYXVsdCBjYW4gYmUgZm91bmQsIHJldHVybnMgJ3VzLWNlbnRyYWwxJy4KICAgICIiIgogICAgZW52aXJvbm1lbnRfcmVnaW9uID0gb3MuZW52aXJvbi5nZXQoJ0NMT1VEU0RLX0NPTVBVVEVfUkVHSU9OJykKICAgIGlmIGVudmlyb25tZW50X3JlZ2lvbjoKICAgICAgX0xPR0dFUi5pbmZvKAogICAgICAgICAgJ1VzaW5nIGRlZmF1bHQgR0NQIHJlZ2lvbiAlcyBmcm9tICRDTE9VRFNES19DT01QVVRFX1JFR0lPTicsCiAgICAgICAgICBlbnZpcm9ubWVudF9yZWdpb24pCiAgICAgIHJldHVybiBlbnZpcm9ubWVudF9yZWdpb24KICAgIHRyeToKICAgICAgY21kID0gWydnY2xvdWQnLCAnY29uZmlnJywgJ2dldC12YWx1ZScsICdjb21wdXRlL3JlZ2lvbiddCiAgICAgICMgVXNlIHN1YnByb2Nlc3MuREVWTlVMTCBpbiBQeXRob24gMy4zKy4KICAgICAgaWYgaGFzYXR0cihzdWJwcm9jZXNzLCAnREVWTlVMTCcpOgogICAgICAgIERFVk5VTEwgPSBzdWJwcm9jZXNzLkRFVk5VTEwKICAgICAgZWxzZToKICAgICAgICBERVZOVUxMID0gb3Blbihvcy5kZXZudWxsLCAnYWInKQogICAgICByYXdfb3V0cHV0ID0gcHJvY2Vzc2VzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1ERVZOVUxMKQogICAgICBmb3JtYXR0ZWRfb3V0cHV0ID0gcmF3X291dHB1dC5kZWNvZGUoJ3V0Zi04Jykuc3RyaXAoKQogICAgICBpZiBmb3JtYXR0ZWRfb3V0cHV0OgogICAgICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAgICAgJ1VzaW5nIGRlZmF1bHQgR0NQIHJlZ2lvbiAlcyBmcm9tIGAlc2AnLAogICAgICAgICAgICBmb3JtYXR0ZWRfb3V0cHV0LAogICAgICAgICAgICAnICcuam9pbihjbWQpKQogICAgICAgIHJldHVybiBmb3JtYXR0ZWRfb3V0cHV0CiAgICBleGNlcHQgUnVudGltZUVycm9yOgogICAgICBwYXNzCiAgICBfTE9HR0VSLndhcm5pbmcoCiAgICAgICAgJy0tcmVnaW9uIG5vdCBzZXQ7IHdpbGwgZGVmYXVsdCB0byB1cy1jZW50cmFsMS4gRnV0dXJlIHJlbGVhc2VzIG9mICcKICAgICAgICAnQmVhbSB3aWxsIHJlcXVpcmUgdGhlIHVzZXIgdG8gc2V0IC0tcmVnaW9uIGV4cGxpY2l0bHksIG9yIGVsc2UgaGF2ZSBhICcKICAgICAgICAnZGVmYXVsdCBzZXQgdmlhIHRoZSBnY2xvdWQgdG9vbC4gJwogICAgICAgICdodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL3JlZ2lvbnMtem9uZXMnKQogICAgcmV0dXJuICd1cy1jZW50cmFsMScKCiAgZGVmIHZhbGlkYXRlKHNlbGYsIHZhbGlkYXRvcik6CiAgICBlcnJvcnMgPSBbXQogICAgaWYgdmFsaWRhdG9yLmlzX3NlcnZpY2VfcnVubmVyKCk6CiAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2Nsb3VkX29wdGlvbnMoc2VsZikpCiAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRoKHNlbGYsICd0ZW1wX2xvY2F0aW9uJykpCiAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ3N0YWdpbmdfbG9jYXRpb24nLAogICAgICAgICAgICAgICAgIE5vbmUpIG9yIGdldGF0dHIoc2VsZiwgJ3RlbXBfbG9jYXRpb24nLCBOb25lKSBpcyBOb25lOgogICAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX2djc19wYXRoKHNlbGYsICdzdGFnaW5nX2xvY2F0aW9uJykpCgogICAgaWYgc2VsZi52aWV3X2FzKERlYnVnT3B0aW9ucykuZGF0YWZsb3dfam9iX2ZpbGU6CiAgICAgIGlmIHNlbGYudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLnRlbXBsYXRlX2xvY2F0aW9uOgogICAgICAgIGVycm9ycy5hcHBlbmQoCiAgICAgICAgICAgICctLWRhdGFmbG93X2pvYl9maWxlIGFuZCAtLXRlbXBsYXRlX2xvY2F0aW9uICcKICAgICAgICAgICAgJ2FyZSBtdXR1YWxseSBleGNsdXNpdmUuJykKCiAgICBydW5uZXIgPSBzZWxmLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5ydW5uZXIKICAgIGlmIHJ1bm5lciA9PSAnRGF0YWZsb3dSdW5uZXInIG9yIHJ1bm5lciA9PSAnVGVzdERhdGFmbG93UnVubmVyJzoKICAgICAgaWYgc2VsZi52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucmVnaW9uIGlzIE5vbmU6CiAgICAgICAgc2VsZi52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucmVnaW9uID0gc2VsZi5fZ2V0X2RlZmF1bHRfZ2NwX3JlZ2lvbigpCgogICAgcmV0dXJuIGVycm9ycwoKCmNsYXNzIEhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgIiIiYGBIYWRvb3BGaWxlU3lzdGVtYGAgY29ubmVjdGlvbiBvcHRpb25zLiIiIgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1oZGZzX2hvc3QnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgnSG9zdG5hbWUgb3IgYWRkcmVzcyBvZiB0aGUgSERGUyBuYW1lbm9kZS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0taGRmc19wb3J0JywgZGVmYXVsdD1Ob25lLCBoZWxwPSgnUG9ydCBvZiB0aGUgSERGUyBuYW1lbm9kZS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0taGRmc191c2VyJywgZGVmYXVsdD1Ob25lLCBoZWxwPSgnSERGUyB1c2VybmFtZSB0byB1c2UuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWhkZnNfZnVsbF91cmxzJywKICAgICAgICBkZWZhdWx0PUZhbHNlLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdJZiBzZXQsIFVSTHMgd2lsbCBiZSBwYXJzZWQgYXMgImhkZnM6Ly9zZXJ2ZXIvcGF0aC8uLi4iLCBpbnN0ZWFkICcKICAgICAgICAgICAgJ29mICJoZGZzOi8vcGF0aC8uLi4iLiBUaGUgInNlcnZlciIgcGFydCB3aWxsIGJlIHVudXNlZCAodXNlICcKICAgICAgICAgICAgJy0taGRmc19ob3N0IGFuZCAtLWhkZnNfcG9ydCkuJykpCgogIGRlZiB2YWxpZGF0ZShzZWxmLCB2YWxpZGF0b3IpOgogICAgZXJyb3JzID0gW10KICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX29wdGlvbmFsX2FyZ3VtZW50X3Bvc2l0aXZlKHNlbGYsICdwb3J0JykpCiAgICByZXR1cm4gZXJyb3JzCgoKIyBDb21tYW5kIGxpbmUgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgd29ya2VyIHBvb2wgY29uZmlndXJhdGlvbi4KIyBUT0RPKHNpbHZpdWMpOiBVcGRhdGUgZGVzY3JpcHRpb24gd2hlbiBhdXRvc2NhbGluZyBvcHRpb25zIGFyZSBpbi4KY2xhc3MgV29ya2VyT3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgogICIiIldvcmtlciBwb29sIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4iIiIKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbnVtX3dvcmtlcnMnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ051bWJlciBvZiB3b3JrZXJzIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB0aGUgRGF0YWZsb3cgam9iLiBJZiBub3QgJwogICAgICAgICAgICAnc2V0LCB0aGUgRGF0YWZsb3cgc2VydmljZSB3aWxsIHVzZSBhIHJlYXNvbmFibGUgZGVmYXVsdC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbWF4X251bV93b3JrZXJzJywKICAgICAgICB0eXBlPWludCwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdNYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB0aGUgRGF0YWZsb3cgam9iLicKICAgICAgICApKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1hdXRvc2NhbGluZ19hbGdvcml0aG0nLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGNob2ljZXM9WydOT05FJywgJ1RIUk9VR0hQVVRfQkFTRUQnXSwKICAgICAgICBkZWZhdWx0PU5vbmUsICAjIE1lYW5pbmcgdW5zZXQsIGRpc3RpbmN0IGZyb20gJ05PTkUnIG1lYW5pbmcgZG9uJ3Qgc2NhbGUKICAgICAgICBoZWxwPQogICAgICAgICgnSWYgYW5kIGhvdyB0byBhdXRvc2NhbGUgdGhlIHdvcmtlcnBvb2wuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXdvcmtlcl9tYWNoaW5lX3R5cGUnLAogICAgICAgICctLW1hY2hpbmVfdHlwZScsCiAgICAgICAgZGVzdD0nbWFjaGluZV90eXBlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdNYWNoaW5lIHR5cGUgdG8gY3JlYXRlIERhdGFmbG93IHdvcmtlciBWTXMgYXMuIFNlZSAnCiAgICAgICAgICAgICdodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vY29tcHV0ZS9kb2NzL21hY2hpbmUtdHlwZXMgJwogICAgICAgICAgICAnZm9yIGEgbGlzdCBvZiB2YWxpZCBvcHRpb25zLiBJZiBub3Qgc2V0LCAnCiAgICAgICAgICAgICd0aGUgRGF0YWZsb3cgc2VydmljZSB3aWxsIGNob29zZSBhIHJlYXNvbmFibGUgJwogICAgICAgICAgICAnZGVmYXVsdC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZGlza19zaXplX2diJywKICAgICAgICB0eXBlPWludCwKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdSZW1vdGUgd29ya2VyIGRpc2sgc2l6ZSwgaW4gZ2lnYWJ5dGVzLCBvciAwIHRvIHVzZSB0aGUgZGVmYXVsdCAnCiAgICAgICAgICAgICdzaXplLiBJZiBub3Qgc2V0LCB0aGUgRGF0YWZsb3cgc2VydmljZSB3aWxsIHVzZSBhIHJlYXNvbmFibGUgJwogICAgICAgICAgICAnZGVmYXVsdC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0td29ya2VyX2Rpc2tfdHlwZScsCiAgICAgICAgJy0tZGlza190eXBlJywKICAgICAgICBkZXN0PSdkaXNrX3R5cGUnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgnU3BlY2lmaWVzIHdoYXQgdHlwZSBvZiBwZXJzaXN0ZW50IGRpc2sgc2hvdWxkIGJlIHVzZWQuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXdvcmtlcl9yZWdpb24nLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1RoZSBDb21wdXRlIEVuZ2luZSByZWdpb24gKGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9jb21wdXRlL2RvY3MvJwogICAgICAgICAgICAncmVnaW9ucy16b25lcy9yZWdpb25zLXpvbmVzKSBpbiB3aGljaCB3b3JrZXIgcHJvY2Vzc2luZyBzaG91bGQgJwogICAgICAgICAgICAnb2NjdXIsIGUuZy4gInVzLXdlc3QxIi4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggd29ya2VyX3pvbmUuIElmICcKICAgICAgICAgICAgJ25laXRoZXIgd29ya2VyX3JlZ2lvbiBub3Igd29ya2VyX3pvbmUgaXMgc3BlY2lmaWVkLCBkZWZhdWx0IHRvICcKICAgICAgICAgICAgJ3NhbWUgdmFsdWUgYXMgLS1yZWdpb24uJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXdvcmtlcl96b25lJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdUaGUgQ29tcHV0ZSBFbmdpbmUgem9uZSAoaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy8nCiAgICAgICAgICAgICdyZWdpb25zLXpvbmVzL3JlZ2lvbnMtem9uZXMpIGluIHdoaWNoIHdvcmtlciBwcm9jZXNzaW5nIHNob3VsZCAnCiAgICAgICAgICAgICdvY2N1ciwgZS5nLiAidXMtd2VzdDEtYSIuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIHdvcmtlcl9yZWdpb24uICcKICAgICAgICAgICAgJ0lmIG5laXRoZXIgd29ya2VyX3JlZ2lvbiBub3Igd29ya2VyX3pvbmUgaXMgc3BlY2lmaWVkLCB0aGUgJwogICAgICAgICAgICAnRGF0YWZsb3cgc2VydmljZSB3aWxsIGNob29zZSBhIHpvbmUgaW4gLS1yZWdpb24gYmFzZWQgb24gJwogICAgICAgICAgICAnYXZhaWxhYmxlIGNhcGFjaXR5LicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS16b25lJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdHQ0UgYXZhaWxhYmlsaXR5IHpvbmUgZm9yIGxhdW5jaGluZyB3b3JrZXJzLiBEZWZhdWx0IGlzIHVwIHRvIHRoZSAnCiAgICAgICAgICAgICdEYXRhZmxvdyBzZXJ2aWNlLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1uZXR3b3JrJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdHQ0UgbmV0d29yayBmb3IgbGF1bmNoaW5nIHdvcmtlcnMuIERlZmF1bHQgaXMgdXAgdG8gdGhlIERhdGFmbG93ICcKICAgICAgICAgICAgJ3NlcnZpY2UuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXN1Ym5ldHdvcmsnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ0dDRSBzdWJuZXR3b3JrIGZvciBsYXVuY2hpbmcgd29ya2Vycy4gRGVmYXVsdCBpcyB1cCB0byB0aGUgJwogICAgICAgICAgICAnRGF0YWZsb3cgc2VydmljZS4gRXhwZWN0ZWQgZm9ybWF0IGlzICcKICAgICAgICAgICAgJ3JlZ2lvbnMvUkVHSU9OL3N1Ym5ldHdvcmtzL1NVQk5FVFdPUksgb3IgdGhlIGZ1bGx5IHF1YWxpZmllZCAnCiAgICAgICAgICAgICdzdWJuZXR3b3JrIG5hbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJwogICAgICAgICAgICAnaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2NvbXB1dGUvZG9jcy92cGMvJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXdvcmtlcl9oYXJuZXNzX2NvbnRhaW5lcl9pbWFnZScsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KAogICAgICAgICAgICAnRG9ja2VyIHJlZ2lzdHJ5IGxvY2F0aW9uIG9mIGNvbnRhaW5lciBpbWFnZSB0byB1c2UgZm9yIHRoZSAnCiAgICAgICAgICAgICd3b3JrZXIgaGFybmVzcy4gRGVmYXVsdCBpcyB0aGUgY29udGFpbmVyIGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgJwogICAgICAgICAgICAnU0RLLiBOb3RlOiBjdXJyZW50bHksIG9ubHkgYXBwcm92ZWQgR29vZ2xlIENsb3VkIERhdGFmbG93ICcKICAgICAgICAgICAgJ2NvbnRhaW5lciBpbWFnZXMgbWF5IGJlIHVzZWQgaGVyZS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tc2RrX2hhcm5lc3NfY29udGFpbmVyX2ltYWdlX292ZXJyaWRlcycsCiAgICAgICAgYWN0aW9uPSdhcHBlbmQnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ092ZXJyaWRlcyBmb3IgU0RLIGhhcm5lc3MgY29udGFpbmVyIGltYWdlcy4gQ291bGQgYmUgZm9yIHRoZSAnCiAgICAgICAgICAgICdsb2NhbCBTREsgb3IgZm9yIGEgcmVtb3RlIFNESyB0aGF0IHBpcGVsaW5lIGhhcyB0byBzdXBwb3J0IGR1ZSAnCiAgICAgICAgICAgICd0byBhIGNyb3NzLWxhbmd1YWdlIHRyYW5zZm9ybS4gRWFjaCBlbnRyeSBjb25zaXN0IG9mIHR3byB2YWx1ZXMgJwogICAgICAgICAgICAnc2VwYXJhdGVkIGJ5IGEgY29tbWEgd2hlcmUgZmlyc3QgdmFsdWUgZ2l2ZXMgYSByZWdleCB0byAnCiAgICAgICAgICAgICdpZGVudGlmeSB0aGUgY29udGFpbmVyIGltYWdlIHRvIG92ZXJyaWRlIGFuZCB0aGUgc2Vjb25kIHZhbHVlICcKICAgICAgICAgICAgJ2dpdmVzIHRoZSByZXBsYWNlbWVudCBjb250YWluZXIgaW1hZ2UuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXVzZV9wdWJsaWNfaXBzJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSdXaGV0aGVyIHRvIGFzc2lnbiBwdWJsaWMgSVAgYWRkcmVzc2VzIHRvIHRoZSB3b3JrZXIgVk1zLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW5vX3VzZV9wdWJsaWNfaXBzJywKICAgICAgICBkZXN0PSd1c2VfcHVibGljX2lwcycsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAogICAgICAgIGhlbHA9J1doZXRoZXIgdG8gYXNzaWduIG9ubHkgcHJpdmF0ZSBJUCBhZGRyZXNzZXMgdG8gdGhlIHdvcmtlciBWTXMuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbWluX2NwdV9wbGF0Zm9ybScsCiAgICAgICAgZGVzdD0nbWluX2NwdV9wbGF0Zm9ybScsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgaGVscD0nR0NFIG1pbmltdW0gQ1BVIHBsYXRmb3JtLiBEZWZhdWx0IGlzIGRldGVybWluZWQgYnkgR0NQLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRhdGFmbG93X3dvcmtlcl9qYXInLAogICAgICAgIGRlc3Q9J2RhdGFmbG93X3dvcmtlcl9qYXInLAogICAgICAgIHR5cGU9c3RyLAogICAgICAgIGhlbHA9J0RhdGFmbG93IHdvcmtlciBqYXIgZmlsZS4gSWYgc3BlY2lmaWVkLCB0aGUgamFyIGZpbGUgaXMgc3RhZ2VkICcKICAgICAgICAnaW4gR0NTLCB0aGVuIGdldHMgbG9hZGVkIGJ5IHdvcmtlcnMuIEVuZCB1c2VycyB1c3VhbGx5ICcKICAgICAgICAnc2hvdWxkIG5vdCB1c2UgdGhpcyBmZWF0dXJlLicpCgogIGRlZiB2YWxpZGF0ZShzZWxmLCB2YWxpZGF0b3IpOgogICAgZXJyb3JzID0gW10KICAgIGlmIHZhbGlkYXRvci5pc19zZXJ2aWNlX3J1bm5lcigpOgogICAgICBlcnJvcnMuZXh0ZW5kKAogICAgICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlX29wdGlvbmFsX2FyZ3VtZW50X3Bvc2l0aXZlKHNlbGYsICdudW1fd29ya2VycycpKQogICAgICBlcnJvcnMuZXh0ZW5kKHZhbGlkYXRvci52YWxpZGF0ZV93b3JrZXJfcmVnaW9uX3pvbmUoc2VsZikpCiAgICByZXR1cm4gZXJyb3JzCgoKY2xhc3MgRGVidWdPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRhdGFmbG93X2pvYl9maWxlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0nRGVidWcgZmlsZSB0byB3cml0ZSB0aGUgd29ya2Zsb3cgc3BlY2lmaWNhdGlvbi4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1leHBlcmltZW50JywKICAgICAgICAnLS1leHBlcmltZW50cycsCiAgICAgICAgZGVzdD0nZXhwZXJpbWVudHMnLAogICAgICAgIGFjdGlvbj0nYXBwZW5kJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdSdW5uZXJzIG1heSBwcm92aWRlIGEgbnVtYmVyIG9mIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyB0aGF0IGNhbiBiZSAnCiAgICAgICAgICAgICdlbmFibGVkIHdpdGggdGhpcyBmbGFnLiBQbGVhc2Ugc3luYyB3aXRoIHRoZSBvd25lcnMgb2YgdGhlIHJ1bm5lciAnCiAgICAgICAgICAgICdiZWZvcmUgZW5hYmxpbmcgYW55IGV4cGVyaW1lbnRzLicpKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbnVtYmVyX29mX3dvcmtlcl9oYXJuZXNzX3RocmVhZHMnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ051bWJlciBvZiB0aHJlYWRzIHBlciB3b3JrZXIgdG8gdXNlIG9uIHRoZSBydW5uZXIuIElmIGxlZnQgJwogICAgICAgICAgICAndW5zcGVjaWZpZWQsIHRoZSBydW5uZXIgd2lsbCBjb21wdXRlIGFuIGFwcHJvcHJpYXRlIG51bWJlciBvZiAnCiAgICAgICAgICAgICd0aHJlYWRzIHRvIHVzZS4gQ3VycmVudGx5IG9ubHkgZW5hYmxlZCBmb3IgRGF0YWZsb3dSdW5uZXIgd2hlbiAnCiAgICAgICAgICAgICdleHBlcmltZW50IFwndXNlX3J1bm5lcl92MlwnIGlzIGVuYWJsZWQuJykpCgogIGRlZiBhZGRfZXhwZXJpbWVudChzZWxmLCBleHBlcmltZW50KToKICAgICMgcHlsaW50OiBkaXNhYmxlPWFjY2Vzcy1tZW1iZXItYmVmb3JlLWRlZmluaXRpb24KICAgIGlmIHNlbGYuZXhwZXJpbWVudHMgaXMgTm9uZToKICAgICAgc2VsZi5leHBlcmltZW50cyA9IFtdCiAgICBpZiBleHBlcmltZW50IG5vdCBpbiBzZWxmLmV4cGVyaW1lbnRzOgogICAgICBzZWxmLmV4cGVyaW1lbnRzLmFwcGVuZChleHBlcmltZW50KQoKICBkZWYgbG9va3VwX2V4cGVyaW1lbnQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgogICAgaWYgbm90IHNlbGYuZXhwZXJpbWVudHM6CiAgICAgIHJldHVybiBkZWZhdWx0CiAgICBlbGlmIGtleSBpbiBzZWxmLmV4cGVyaW1lbnRzOgogICAgICByZXR1cm4gVHJ1ZQogICAgZm9yIGV4cGVyaW1lbnQgaW4gc2VsZi5leHBlcmltZW50czoKICAgICAgaWYgZXhwZXJpbWVudC5zdGFydHN3aXRoKGtleSArICc9Jyk6CiAgICAgICAgcmV0dXJuIGV4cGVyaW1lbnQuc3BsaXQoJz0nLCAxKVsxXQogICAgcmV0dXJuIGRlZmF1bHQKCgpjbGFzcyBQcm9maWxpbmdPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXByb2ZpbGVfY3B1JywKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgIGhlbHA9J0VuYWJsZSB3b3JrIGl0ZW0gQ1BVIHByb2ZpbGluZy4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1wcm9maWxlX21lbW9yeScsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSdFbmFibGUgd29yayBpdGVtIGhlYXAgcHJvZmlsaW5nLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXByb2ZpbGVfbG9jYXRpb24nLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSdwYXRoIGZvciBzYXZpbmcgcHJvZmlsZXIgZGF0YS4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1wcm9maWxlX3NhbXBsZV9yYXRlJywKICAgICAgICB0eXBlPWZsb2F0LAogICAgICAgIGRlZmF1bHQ9MS4wLAogICAgICAgIGhlbHA9J0EgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIHRoZSByYXRpbyAnCiAgICAgICAgJ29mIGJ1bmRsZXMgdGhhdCBzaG91bGQgYmUgcHJvZmlsZWQuJykKCgpjbGFzcyBTZXR1cE9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgICMgT3B0aW9ucyBmb3IgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgaW4gdGhlIHdvcmtlci4KICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tcmVxdWlyZW1lbnRzX2ZpbGUnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1BhdGggdG8gYSByZXF1aXJlbWVudHMgZmlsZSBjb250YWluaW5nIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiAnCiAgICAgICAgICAgICdUeXBpY2FsbHkgaXQgaXMgcHJvZHVjZWQgYnkgYSBwaXAgZnJlZXplIGNvbW1hbmQuIE1vcmUgZGV0YWlsczogJwogICAgICAgICAgICAnaHR0cHM6Ly9waXAucHlwYS5pby9lbi9sYXRlc3QvcmVmZXJlbmNlL3BpcF9mcmVlemUuaHRtbC4gJwogICAgICAgICAgICAnSWYgdXNlZCwgYWxsIHRoZSBwYWNrYWdlcyBzcGVjaWZpZWQgd2lsbCBiZSBkb3dubG9hZGVkLCAnCiAgICAgICAgICAgICdjYWNoZWQgKHVzZSAtLXJlcXVpcmVtZW50c19jYWNoZSB0byBjaGFuZ2UgZGVmYXVsdCBsb2NhdGlvbiksICcKICAgICAgICAgICAgJ2FuZCB0aGVuIHN0YWdlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGluICcKICAgICAgICAgICAgJ3dvcmtlcnMgZHVyaW5nIHN0YXJ0dXAuIFRoZSBjYWNoZSBpcyByZWZyZXNoZWQgYXMgbmVlZGVkICcKICAgICAgICAgICAgJ2F2b2lkaW5nIGV4dHJhIGRvd25sb2FkcyBmb3IgZXhpc3RpbmcgcGFja2FnZXMuIFR5cGljYWxseSB0aGUgJwogICAgICAgICAgICAnZmlsZSBpcyBuYW1lZCByZXF1aXJlbWVudHMudHh0LicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1yZXF1aXJlbWVudHNfY2FjaGUnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1BhdGggdG8gYSBmb2xkZXIgdG8gY2FjaGUgdGhlIHBhY2thZ2VzIHNwZWNpZmllZCBpbiAnCiAgICAgICAgICAgICd0aGUgcmVxdWlyZW1lbnRzIGZpbGUgdXNpbmcgdGhlIC0tcmVxdWlyZW1lbnRzX2ZpbGUgb3B0aW9uLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zZXR1cF9maWxlJywKICAgICAgICBkZWZhdWx0PU5vbmUsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdQYXRoIHRvIGEgc2V0dXAgUHl0aG9uIGZpbGUgY29udGFpbmluZyBwYWNrYWdlIGRlcGVuZGVuY2llcy4gSWYgJwogICAgICAgICAgICAnc3BlY2lmaWVkLCB0aGUgZmlsZVwncyBjb250YWluaW5nIGZvbGRlciBpcyBhc3N1bWVkIHRvIGhhdmUgdGhlICcKICAgICAgICAgICAgJ3N0cnVjdHVyZSByZXF1aXJlZCBmb3IgYSBzZXR1cHRvb2xzIHNldHVwIHBhY2thZ2UuIFRoZSBmaWxlIG11c3QgJwogICAgICAgICAgICAnYmUgbmFtZWQgc2V0dXAucHkuIE1vcmUgZGV0YWlsczogJwogICAgICAgICAgICAnaHR0cHM6Ly9weXRob25ob3N0ZWQub3JnL2FuX2V4YW1wbGVfcHlwaV9wcm9qZWN0L3NldHVwdG9vbHMuaHRtbCAnCiAgICAgICAgICAgICdEdXJpbmcgam9iIHN1Ym1pc3Npb24gYSBzb3VyY2UgZGlzdHJpYnV0aW9uIHdpbGwgYmUgYnVpbHQgYW5kICcKICAgICAgICAgICAgJ3RoZSB3b3JrZXIgd2lsbCBpbnN0YWxsIHRoZSByZXN1bHRpbmcgcGFja2FnZSBiZWZvcmUgcnVubmluZyBhbnkgJwogICAgICAgICAgICAnY3VzdG9tIGNvZGUuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWJlYW1fcGx1Z2luJywKICAgICAgICAnLS1iZWFtX3BsdWdpbicsCiAgICAgICAgZGVzdD0nYmVhbV9wbHVnaW5zJywKICAgICAgICBhY3Rpb249J2FwcGVuZCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KAogICAgICAgICAgICAnQm9vdHN0cmFwIHRoZSBweXRob24gcHJvY2VzcyBiZWZvcmUgZXhlY3V0aW5nIGFueSBjb2RlIGJ5ICcKICAgICAgICAgICAgJ2ltcG9ydGluZyBhbGwgdGhlIHBsdWdpbnMgdXNlZCBpbiB0aGUgcGlwZWxpbmUuIFBsZWFzZSBwYXNzIGEgJwogICAgICAgICAgICAnY29tbWEgc2VwYXJhdGVkbGlzdCBvZiBpbXBvcnQgcGF0aHMgdG8gYmUgaW5jbHVkZWQuIFRoaXMgaXMgJwogICAgICAgICAgICAnY3VycmVudGx5IGFuIGV4cGVyaW1lbnRhbCBmbGFnIGFuZCBwcm92aWRlcyBubyBzdGFiaWxpdHkuICcKICAgICAgICAgICAgJ011bHRpcGxlIC0tYmVhbV9wbHVnaW4gb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGlmIG1vcmUgdGhhbiAnCiAgICAgICAgICAgICdvbmUgcGx1Z2luIGlzIG5lZWRlZC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tc2F2ZV9tYWluX3Nlc3Npb24nLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1NhdmUgdGhlIG1haW4gc2Vzc2lvbiBzdGF0ZSBzbyB0aGF0IHBpY2tsZWQgZnVuY3Rpb25zIGFuZCBjbGFzc2VzICcKICAgICAgICAgICAgJ2RlZmluZWQgaW4gX19tYWluX18gKGUuZy4gaW50ZXJhY3RpdmUgc2Vzc2lvbikgY2FuIGJlIHVucGlja2xlZC4gJwogICAgICAgICAgICAnU29tZSB3b3JrZmxvd3MgZG8gbm90IG5lZWQgdGhlIHNlc3Npb24gc3RhdGUgaWYgZm9yIGluc3RhbmNlIGFsbCAnCiAgICAgICAgICAgICd0aGVpciBmdW5jdGlvbnMvY2xhc3NlcyBhcmUgZGVmaW5lZCBpbiBwcm9wZXIgbW9kdWxlcyAnCiAgICAgICAgICAgICcobm90IF9fbWFpbl9fKSBhbmQgdGhlIG1vZHVsZXMgYXJlIGltcG9ydGFibGUgaW4gdGhlIHdvcmtlci4gJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXNka19sb2NhdGlvbicsCiAgICAgICAgZGVmYXVsdD0nZGVmYXVsdCcsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdPdmVycmlkZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmcm9tIHdoZXJlIHRoZSBCZWFtIFNESyBpcyAnCiAgICAgICAgICAgICdkb3dubG9hZGVkLiBJdCBjYW4gYmUgYSBVUkwsIGEgR0NTIHBhdGgsIG9yIGEgbG9jYWwgcGF0aCB0byBhbiAnCiAgICAgICAgICAgICdTREsgdGFyYmFsbC4gV29ya2Zsb3cgc3VibWlzc2lvbnMgd2lsbCBkb3dubG9hZCBvciBjb3B5IGFuIFNESyAnCiAgICAgICAgICAgICd0YXJiYWxsIGZyb20gaGVyZS4gSWYgc2V0IHRvIHRoZSBzdHJpbmcgImRlZmF1bHQiLCBhIHN0YW5kYXJkICcKICAgICAgICAgICAgJ1NESyBsb2NhdGlvbiBpcyB1c2VkLiBJZiBlbXB0eSwgbm8gU0RLIGlzIGNvcGllZC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZXh0cmFfcGFja2FnZScsCiAgICAgICAgJy0tZXh0cmFfcGFja2FnZXMnLAogICAgICAgIGRlc3Q9J2V4dHJhX3BhY2thZ2VzJywKICAgICAgICBhY3Rpb249J2FwcGVuZCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KAogICAgICAgICAgICAnTG9jYWwgcGF0aCB0byBhIFB5dGhvbiBwYWNrYWdlIGZpbGUuIFRoZSBmaWxlIGlzIGV4cGVjdGVkIHRvIGJlICcKICAgICAgICAgICAgJygxKSBhIHBhY2thZ2UgdGFyYmFsbCAoIi50YXIiKSwgKDIpIGEgY29tcHJlc3NlZCBwYWNrYWdlIHRhcmJhbGwgJwogICAgICAgICAgICAnKCIudGFyLmd6IiksICgzKSBhIFdoZWVsIGZpbGUgKCIud2hsIikgb3IgKDQpIGEgY29tcHJlc3NlZCAnCiAgICAgICAgICAgICdwYWNrYWdlIHppcCBmaWxlICgiLnppcCIpIHdoaWNoIGNhbiBiZSBpbnN0YWxsZWQgdXNpbmcgdGhlICcKICAgICAgICAgICAgJyJwaXAgaW5zdGFsbCIgY29tbWFuZCAgb2YgdGhlIHN0YW5kYXJkIHBpcCBwYWNrYWdlLiBNdWx0aXBsZSAnCiAgICAgICAgICAgICctLWV4dHJhX3BhY2thZ2Ugb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGlmIG1vcmUgdGhhbiBvbmUgJwogICAgICAgICAgICAncGFja2FnZSBpcyBuZWVkZWQuIER1cmluZyBqb2Igc3VibWlzc2lvbiwgdGhlIGZpbGVzIHdpbGwgYmUgJwogICAgICAgICAgICAnc3RhZ2VkIGluIHRoZSBzdGFnaW5nIGFyZWEgKC0tc3RhZ2luZ19sb2NhdGlvbiBvcHRpb24pIGFuZCB0aGUgJwogICAgICAgICAgICAnd29ya2VycyB3aWxsIGluc3RhbGwgdGhlbSBpbiBzYW1lIG9yZGVyIHRoZXkgd2VyZSBzcGVjaWZpZWQgb24gJwogICAgICAgICAgICAndGhlIGNvbW1hbmQgbGluZS4nKSkKCgpjbGFzcyBQb3J0YWJsZU9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKICAiIiJQb3J0YWJsZSBvcHRpb25zIGFyZSBjb21tb24gb3B0aW9ucyBleHBlY3RlZCB0byBiZSB1bmRlcnN0b29kIGJ5IG1vc3Qgb2YKICB0aGUgcG9ydGFibGUgcnVubmVycy4gU2hvdWxkIGdlbmVyYWxseSBiZSBrZXB0IGluIHN5bmMgd2l0aAogIFBvcnRhYmxlUGlwZWxpbmVPcHRpb25zLmphdmEuCiAgIiIiCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWpvYl9lbmRwb2ludCcsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KAogICAgICAgICAgICAnSm9iIHNlcnZpY2UgZW5kcG9pbnQgdG8gdXNlLiBTaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgaG9zdCAnCiAgICAgICAgICAgICdhbmQgcG9ydCwgZS5nLiBsb2NhbGhvc3Q6ODA5OS4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tYXJ0aWZhY3RfZW5kcG9pbnQnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ0FydGlmYWN0IHN0YWdpbmcgZW5kcG9pbnQgdG8gdXNlLiBTaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgaG9zdCAnCiAgICAgICAgICAgICdhbmQgcG9ydCwgZS5nLiBsb2NhbGhvc3Q6ODA5OC4gSWYgbm9uZSBpcyBzcGVjaWZpZWQsIHRoZSAnCiAgICAgICAgICAgICdhcnRpZmFjdCBlbmRwb2ludCBzZW50IGZyb20gdGhlIGpvYiBzZXJ2ZXIgaXMgdXNlZC4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tam9iLXNlcnZlci10aW1lb3V0JywKICAgICAgICBkZWZhdWx0PTYwLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGhlbHA9KAogICAgICAgICAgICAnSm9iIHNlcnZpY2UgcmVxdWVzdCB0aW1lb3V0IGluIHNlY29uZHMuIFRoZSB0aW1lb3V0ICcKICAgICAgICAgICAgJ2RldGVybWluZXMgdGhlIG1heCB0aW1lIHRoZSBkcml2ZXIgcHJvZ3JhbSB3aWxsIHdhaXQgdG8gJwogICAgICAgICAgICAnZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgam9iIHNlcnZlci4gTk9URTogdGhlIHRpbWVvdXQgZG9lcyBub3QgJwogICAgICAgICAgICAnYXBwbHkgdG8gdGhlIGFjdHVhbCBwaXBlbGluZSBydW4gdGltZS4gVGhlIGRyaXZlciBwcm9ncmFtIGNhbiAnCiAgICAgICAgICAgICdzdGlsbCB3YWl0IGZvciBqb2IgY29tcGxldGlvbiBpbmRlZmluaXRlbHkuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWVudmlyb25tZW50X3R5cGUnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1NldCB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCB0eXBlIGZvciBydW5uaW5nICcKICAgICAgICAgICAgJ3VzZXIgY29kZS4gRE9DS0VSIChkZWZhdWx0KSBydW5zIHVzZXIgY29kZSBpbiBhIGNvbnRhaW5lci4gJwogICAgICAgICAgICAnUFJPQ0VTUyBydW5zIHVzZXIgY29kZSBpbiBwcm9jZXNzZXMgdGhhdCBhcmUgYXV0b21hdGljYWxseSAnCiAgICAgICAgICAgICdzdGFydGVkIG9uIGVhY2ggd29ya2VyIG5vZGUuIExPT1BCQUNLIHJ1bnMgdXNlciBjb2RlIG9uIHRoZSAnCiAgICAgICAgICAgICdzYW1lIHByb2Nlc3MgdGhhdCBvcmlnaW5hbGx5IHN1Ym1pdHRlZCB0aGUgam9iLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnZpcm9ubWVudF9jb25maWcnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1NldCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIHRoZSB1c2VyIGNvZGUuXG4gRm9yICcKICAgICAgICAgICAgJ0RPQ0tFUjogVXJsIGZvciB0aGUgZG9ja2VyIGltYWdlLlxuIEZvciBQUk9DRVNTOiBqc29uIG9mIHRoZSAnCiAgICAgICAgICAgICdmb3JtIHsib3MiOiAiPE9TPiIsICJhcmNoIjogIjxBUkNISVRFQ1RVUkU+IiwgImNvbW1hbmQiOiAnCiAgICAgICAgICAgICciPHByb2Nlc3MgdG8gZXhlY3V0ZT4iLCAiZW52Ijp7IjxFbnZpcm9ubWVudCB2YXJpYWJsZXMgMT4iOiAnCiAgICAgICAgICAgICciPEVOVl9WQUw+In0gfS4gQWxsIGZpZWxkcyBpbiB0aGUganNvbiBhcmUgb3B0aW9uYWwgZXhjZXB0ICcKICAgICAgICAgICAgJ2NvbW1hbmQuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXNka193b3JrZXJfcGFyYWxsZWxpc20nLAogICAgICAgIGRlZmF1bHQ9MSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ1NldHMgdGhlIG51bWJlciBvZiBzZGsgd29ya2VyIHByb2Nlc3NlcyB0aGF0IHdpbGwgcnVuIG9uIGVhY2ggJwogICAgICAgICAgICAnd29ya2VyIG5vZGUuIERlZmF1bHQgaXMgMS4gSWYgMCwgYSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieSB0aGUgJwogICAgICAgICAgICAncnVubmVyLicpKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1lbnZpcm9ubWVudF9jYWNoZV9taWxsaXMnLAogICAgICAgIGRlZmF1bHQ9MCwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ0R1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyBmb3IgZW52aXJvbm1lbnQgY2FjaGUgd2l0aGluIGEgam9iLiAnCiAgICAgICAgICAgICcwIG1lYW5zIG5vIGNhY2hpbmcuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW91dHB1dF9leGVjdXRhYmxlX3BhdGgnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSgKICAgICAgICAgICAgJ0NyZWF0ZSBhbiBleGVjdXRhYmxlIGphciBhdCB0aGlzIHBhdGggcmF0aGVyIHRoYW4gcnVubmluZyAnCiAgICAgICAgICAgICd0aGUgcGlwZWxpbmUuJykpCgoKY2xhc3MgSm9iU2VydmVyT3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgogICIiIk9wdGlvbnMgZm9yIHN0YXJ0aW5nIGEgQmVhbSBqb2Igc2VydmVyLiBSb3VnaGx5IGNvcnJlc3BvbmRzIHRvCiAgSm9iU2VydmVyRHJpdmVyLlNlcnZlckNvbmZpZ3VyYXRpb24gaW4gSmF2YS4KICAiIiIKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tYXJ0aWZhY3RzX2RpcicsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9J1RoZSBsb2NhdGlvbiB0byBzdG9yZSBzdGFnZWQgYXJ0aWZhY3QgZmlsZXMuICcKICAgICAgICAnQW55IEJlYW0tc3VwcG9ydGVkIGZpbGUgc3lzdGVtIGlzIGFsbG93ZWQuICcKICAgICAgICAnSWYgdW5zZXQsIHRoZSBsb2NhbCB0ZW1wIGRpciB3aWxsIGJlIHVzZWQuJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tam9iX3BvcnQnLAogICAgICAgIGRlZmF1bHQ9MCwKICAgICAgICBoZWxwPSdQb3J0IHRvIHVzZSBmb3IgdGhlIGpvYiBzZXJ2aWNlLiAwIHRvIHVzZSBhICcKICAgICAgICAnZHluYW1pYyBwb3J0LicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWFydGlmYWN0X3BvcnQnLAogICAgICAgIGRlZmF1bHQ9MCwKICAgICAgICBoZWxwPSdQb3J0IHRvIHVzZSBmb3IgYXJ0aWZhY3Qgc3RhZ2luZy4gMCB0byB1c2UgYSAnCiAgICAgICAgJ2R5bmFtaWMgcG9ydC4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1leHBhbnNpb25fcG9ydCcsCiAgICAgICAgZGVmYXVsdD0wLAogICAgICAgIGhlbHA9J1BvcnQgdG8gdXNlIGZvciBhcnRpZmFjdCBzdGFnaW5nLiAwIHRvIHVzZSBhICcKICAgICAgICAnZHluYW1pYyBwb3J0LicpCgoKY2xhc3MgRmxpbmtSdW5uZXJPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CgogIFBVQkxJU0hFRF9GTElOS19WRVJTSU9OUyA9IFsnMS43JywgJzEuOCcsICcxLjknXQoKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tZmxpbmtfbWFzdGVyJywKICAgICAgICBkZWZhdWx0PSdbYXV0b10nLAogICAgICAgIGhlbHA9J0ZsaW5rIG1hc3RlciBhZGRyZXNzIChodHRwOi8vaG9zdDpwb3J0KScKICAgICAgICAnIFVzZSAiW2xvY2FsXSIgdG8gc3RhcnQgYSBsb2NhbCBjbHVzdGVyJwogICAgICAgICcgZm9yIHRoZSBleGVjdXRpb24uIFVzZSAiW2F1dG9dIiBpZiB5b3UnCiAgICAgICAgJyBwbGFuIHRvIGVpdGhlciBleGVjdXRlIGxvY2FsbHkgb3IgbGV0IHRoZScKICAgICAgICAnIEZsaW5rIGpvYiBzZXJ2ZXIgaW5mZXIgdGhlIGNsdXN0ZXIgYWRkcmVzcy4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1mbGlua192ZXJzaW9uJywKICAgICAgICBkZWZhdWx0PWNscy5QVUJMSVNIRURfRkxJTktfVkVSU0lPTlNbLTFdLAogICAgICAgIGNob2ljZXM9Y2xzLlBVQkxJU0hFRF9GTElOS19WRVJTSU9OUywKICAgICAgICBoZWxwPSdGbGluayB2ZXJzaW9uIHRvIHVzZS4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1mbGlua19qb2Jfc2VydmVyX2phcicsIGhlbHA9J1BhdGggb3IgVVJMIHRvIGEgZmxpbmsgam9ic2VydmVyIGphci4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1mbGlua19zdWJtaXRfdWJlcl9qYXInLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICBoZWxwPSdDcmVhdGUgYW5kIHVwbG9hZCBhbiB1YmVyamFyIHRvIHRoZSBmbGluayBtYXN0ZXInCiAgICAgICAgJyBkaXJlY3RseSwgcmF0aGVyIHRoYW4gc3RhcnRpbmcgdXAgYSBqb2Igc2VydmVyLicKICAgICAgICAnIE9ubHkgYXBwbGllcyB3aGVuIGZsaW5rX21hc3RlciBpcyBzZXQgdG8gYScKICAgICAgICAnIGNsdXN0ZXIgYWRkcmVzcy4gIFJlcXVpcmVzIFB5dGhvbiAzLjYrLicpCgoKY2xhc3MgU3BhcmtSdW5uZXJPcHRpb25zKFBpcGVsaW5lT3B0aW9ucyk6CiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9hZGRfYXJncGFyc2VfYXJncyhjbHMsIHBhcnNlcik6CiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXNwYXJrX21hc3Rlcl91cmwnLAogICAgICAgIGRlZmF1bHQ9J2xvY2FsWzRdJywKICAgICAgICBoZWxwPSdTcGFyayBtYXN0ZXIgVVJMIChzcGFyazovL0hPU1Q6UE9SVCkuICcKICAgICAgICAnVXNlICJsb2NhbCIgKHNpbmdsZS10aHJlYWRlZCkgb3IgImxvY2FsWypdIiAnCiAgICAgICAgJyhtdWx0aS10aHJlYWRlZCkgdG8gc3RhcnQgYSBsb2NhbCBjbHVzdGVyIGZvciAnCiAgICAgICAgJ3RoZSBleGVjdXRpb24uJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tc3Bhcmtfam9iX3NlcnZlcl9qYXInLAogICAgICAgIGhlbHA9J1BhdGggb3IgVVJMIHRvIGEgQmVhbSBTcGFyayBqb2JzZXJ2ZXIgamFyLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXNwYXJrX3N1Ym1pdF91YmVyX2phcicsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgIGhlbHA9J0NyZWF0ZSBhbmQgdXBsb2FkIGFuIHViZXIgamFyIHRvIHRoZSBTcGFyayBSRVNUJwogICAgICAgICcgZW5kcG9pbnQsIHJhdGhlciB0aGFuIHN0YXJ0aW5nIHVwIGEgam9iIHNlcnZlci4nCiAgICAgICAgJyBSZXF1aXJlcyBQeXRob24gMy42Ky4nKQogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zcGFya19yZXN0X3VybCcsCiAgICAgICAgaGVscD0nVVJMIGZvciB0aGUgU3BhcmsgUkVTVCBlbmRwb2ludC4gJwogICAgICAgICdPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgc3Bhcmtfc3VibWl0X3ViZXJfamFyLicpCgoKY2xhc3MgVGVzdE9wdGlvbnMoUGlwZWxpbmVPcHRpb25zKToKICBAY2xhc3NtZXRob2QKICBkZWYgX2FkZF9hcmdwYXJzZV9hcmdzKGNscywgcGFyc2VyKToKICAgICMgT3B0aW9ucyBmb3IgZTJlIHRlc3QgcGlwZWxpbmUuCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLW9uX3N1Y2Nlc3NfbWF0Y2hlcicsCiAgICAgICAgZGVmYXVsdD1Ob25lLAogICAgICAgIGhlbHA9KAogICAgICAgICAgICAnVmVyaWZ5IHN0YXRlL291dHB1dCBvZiBlMmUgdGVzdCBwaXBlbGluZS4gVGhpcyBpcyBwaWNrbGVkICcKICAgICAgICAgICAgJ3ZlcnNpb24gb2YgdGhlIG1hdGNoZXIgd2hpY2ggc2hvdWxkIGV4dGVuZHMgJwogICAgICAgICAgICAnaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXIuJykpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWRyeV9ydW4nLAogICAgICAgIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgaGVscD0oCiAgICAgICAgICAgICdVc2VkIGluIHVuaXQgdGVzdGluZyBydW5uZXJzIHdpdGhvdXQgc3VibWl0dGluZyB0aGUgJwogICAgICAgICAgICAnYWN0dWFsIGpvYi4nKSkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0td2FpdF91bnRpbF9maW5pc2hfZHVyYXRpb24nLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICB0eXBlPWludCwKICAgICAgICBoZWxwPSdUaGUgdGltZSB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0ZXN0IHBpcGVsaW5lIHRvIGZpbmlzaC4gJwogICAgICAgICdJZiBpdCBpcyBzZXQgdG8gTm9uZSwgaXQgd2lsbCB3YWl0IGluZGVmaW5pdGVseSB1bnRpbCB0aGUgam9iICcKICAgICAgICAnaXMgZmluaXNoZWQuJykKCiAgZGVmIHZhbGlkYXRlKHNlbGYsIHZhbGlkYXRvcik6CiAgICBlcnJvcnMgPSBbXQogICAgaWYgc2VsZi52aWV3X2FzKFRlc3RPcHRpb25zKS5vbl9zdWNjZXNzX21hdGNoZXI6CiAgICAgIGVycm9ycy5leHRlbmQodmFsaWRhdG9yLnZhbGlkYXRlX3Rlc3RfbWF0Y2hlcihzZWxmLCAnb25fc3VjY2Vzc19tYXRjaGVyJykpCiAgICByZXR1cm4gZXJyb3JzCgoKY2xhc3MgVGVzdERhdGFmbG93T3B0aW9ucyhQaXBlbGluZU9wdGlvbnMpOgogIEBjbGFzc21ldGhvZAogIGRlZiBfYWRkX2FyZ3BhcnNlX2FyZ3MoY2xzLCBwYXJzZXIpOgogICAgIyBUaGlzIG9wdGlvbiBpcyBwYXNzZWQgdG8gRGF0YWZsb3cgUnVubmVyJ3MgUHViL1N1YiBjbGllbnQuIFRoZSBjYW1lbENhc2UKICAgICMgc3R5bGUgaW4gJ2Rlc3QnIG1hdGNoZXMgdGhlIHJ1bm5lcidzLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1wdWJzdWJfcm9vdF91cmwnLAogICAgICAgIGRlc3Q9J3B1YnN1YlJvb3RVcmwnLAogICAgICAgIGRlZmF1bHQ9Tm9uZSwKICAgICAgICBoZWxwPSdSb290IFVSTCBmb3IgdXNlIHdpdGggdGhlIEdvb2dsZSBDbG91ZCBQdWIvU3ViIEFQSS4nLAogICAgKQoKCiMgVE9ETyhzaWx2aXVjKTogQWRkIC0tZmlsZXNfdG9fc3RhZ2Ugb3B0aW9uLgojIFRoaXMgY291bGQgcG90ZW50aWFsbHkgcmVwbGFjZSB0aGUgLS1yZXF1aXJlbWVudHNfZmlsZSBhbmQgLS1zZXR1cF9maWxlLgoKIyBUT0RPKHNpbHZpdWMpOiBOb24tc3RhbmRhcmQgb3B0aW9ucy4gS2VlcCB0aGVtPyBJZiB5ZXMsIGFkZCBoZWxwIHRvbyEKIyBSZW1vdGUgZXhlY3V0aW9uIG11c3QgY2hlY2sgdGhhdCB0aGlzIG9wdGlvbiBpcyBub3QgTm9uZS4KCgpjbGFzcyBPcHRpb25zQ29udGV4dChvYmplY3QpOgogICIiIlNldCBkZWZhdWx0IHBpcGVsaW5lIG9wdGlvbnMgZm9yIHBpcGVsaW5lcyBjcmVhdGVkIGluIHRoaXMgYmxvY2suCgogIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgcGlwZWxpbmVzIGltcGxpY2l0bHkgY3JlYXRlZCB3aXRoIHRoZQoKICAgICAgW3B5dGhvbiBsaXN0XSB8IFBUcmFuc2Zvcm0KCiAgY29uc3RydWN0LgoKICBDYW4gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLgogICIiIgogIG92ZXJyaWRlcyA9IFtdICAjIHR5cGU6IExpc3RbRGljdFtzdHIsIEFueV1dCgogIGRlZiBfX2luaXRfXyhzZWxmLCAqKm9wdGlvbnMpOgogICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucwoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgc2VsZi5vdmVycmlkZXMuYXBwZW5kKHNlbGYub3B0aW9ucykKCiAgZGVmIF9fZXhpdF9fKHNlbGYsICpleG5faW5mbyk6CiAgICBzZWxmLm92ZXJyaWRlcy5wb3AoKQoKICBkZWYgX19jYWxsX18oc2VsZiwgZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CiAgICAgIHdpdGggc2VsZjoKICAgICAgICBmKCphcmdzLCAqKmt3YXJncykKCiAgICByZXR1cm4gd3JhcHBlcgoKICBAY2xhc3NtZXRob2QKICBkZWYgYXVnbWVudF9vcHRpb25zKGNscywgb3B0aW9ucyk6CiAgICBmb3Igb3ZlcnJpZGUgaW4gY2xzLm92ZXJyaWRlczoKICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG92ZXJyaWRlLml0ZW1zKCk6CiAgICAgICAgc2V0YXR0cihvcHRpb25zLCBuYW1lLCB2YWx1ZSkKICAgIHJldHVybiBvcHRpb25zCpSVTwYBAAAAAAB9lCiMGV9zdGF0aWNfdmFsdWVfcHJvdmlkZXJfb2aUalYxAQBLQEtPh5SML19CZWFtQXJndW1lbnRQYXJzZXIuYWRkX3ZhbHVlX3Byb3ZpZGVyX2FyZ3VtZW50lGpWMQEAS2BLfYeUjBlfQmVhbUFyZ3VtZW50UGFyc2VyLmVycm9ylGpWMQEAS4JLhYeUjBNfQmVhbUFyZ3VtZW50UGFyc2VylGpdMQEAS1JLhYeUjBhQaXBlbGluZU9wdGlvbnMuX19pbml0X1+UalYxAQBLrUvhh5SMIlBpcGVsaW5lT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3OUalYxAQBL40vnh5SMH1BpcGVsaW5lT3B0aW9ucy5mcm9tX2RpY3Rpb25hcnmUalYxAQBL6Uv+h5SMH1BpcGVsaW5lT3B0aW9ucy5nZXRfYWxsX29wdGlvbnOUalYxAQBNAAFNMgGHlIwcUGlwZWxpbmVPcHRpb25zLmRpc3BsYXlfZGF0YZRqVjEBAE00AU01AYeUjBdQaXBlbGluZU9wdGlvbnMudmlld19hc5RqVjEBAE03AU1dAYeUjCRQaXBlbGluZU9wdGlvbnMuX3Zpc2libGVfb3B0aW9uX2xpc3SUalYxAQBNXwFNYgGHlIwXUGlwZWxpbmVPcHRpb25zLl9fZGlyX1+UalYxAQBNZAFNZwGHlIwbUGlwZWxpbmVPcHRpb25zLl9fZ2V0YXR0cl9flGpWMQEATWkBTXIBh5SMG1BpcGVsaW5lT3B0aW9ucy5fX3NldGF0dHJfX5RqVjEBAE10AU17AYeUjBdQaXBlbGluZU9wdGlvbnMuX19zdHJfX5RqVjEBAE19AU2CAYeUjA9QaXBlbGluZU9wdGlvbnOUal0xAQBLiE2CAYeUjCJTdGFuZGFyZE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzlGpWMQEATYkBTZUBh5SMD1N0YW5kYXJkT3B0aW9uc5RqXTEBAE2FAU2VAYeUjB5UeXBlT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3OUalYxAQBNmQFNrgGHlIwLVHlwZU9wdGlvbnOUal0xAQBNmAFNrgGHlIwgRGlyZWN0T3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3OUalYxAQBNswFNywGHlIwNRGlyZWN0T3B0aW9uc5RqXTEBAE2xAU3LAYeUjCVHb29nbGVDbG91ZE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzlGpWMQEATdYBTTQCh5SMKkdvb2dsZUNsb3VkT3B0aW9ucy5fZ2V0X2RlZmF1bHRfZ2NwX3JlZ2lvbpRqVjEBAE02Ak1XAoeUjBtHb29nbGVDbG91ZE9wdGlvbnMudmFsaWRhdGWUalYxAQBNWQJNbQKHlIwSR29vZ2xlQ2xvdWRPcHRpb25zlGpdMQEATc4BTW0Ch5SMKkhhZG9vcEZpbGVTeXN0ZW1PcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc5RqVjEBAE1yAk2DAoeUjCBIYWRvb3BGaWxlU3lzdGVtT3B0aW9ucy52YWxpZGF0ZZRqVjEBAE2FAk2IAoeUjBdIYWRvb3BGaWxlU3lzdGVtT3B0aW9uc5RqXTEBAE1wAk2IAoeUjCBXb3JrZXJPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc5RqVjEBAE2PAk0QA4eUjBZXb3JrZXJPcHRpb25zLnZhbGlkYXRllGpWMQEATRIDTRgDh5SMDVdvcmtlck9wdGlvbnOUal0xAQBNjQJNGAOHlIwfRGVidWdPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc5RqVjEBAE0cA001A4eUjBtEZWJ1Z09wdGlvbnMuYWRkX2V4cGVyaW1lbnSUalYxAQBNNwNNPAOHlIweRGVidWdPcHRpb25zLmxvb2t1cF9leHBlcmltZW50lGpWMQEATT4DTUYDh5SMDERlYnVnT3B0aW9uc5RqXTEBAE0bA01GA4eUjCNQcm9maWxpbmdPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc5RqVjEBAE1KA01dA4eUjBBQcm9maWxpbmdPcHRpb25zlGpdMQEATUkDTV0Dh5SMH1NldHVwT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3OUalYxAQBNYQNNswOHlIwMU2V0dXBPcHRpb25zlGpdMQEATWADTbMDh5SMIlBvcnRhYmxlT3B0aW9ucy5fYWRkX2FyZ3BhcnNlX2FyZ3OUalYxAQBNuwNN+QOHlIwPUG9ydGFibGVPcHRpb25zlGpdMQEATbYDTfkDh5SMI0pvYlNlcnZlck9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzlGpWMQEATQAETRYEh5SMEEpvYlNlcnZlck9wdGlvbnOUal0xAQBN/ANNFgSHlIwlRmxpbmtSdW5uZXJPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc5RqVjEBAE0dBE01BIeUjBJGbGlua1J1bm5lck9wdGlvbnOUal0xAQBNGQRNNQSHlIwlU3BhcmtSdW5uZXJPcHRpb25zLl9hZGRfYXJncGFyc2VfYXJnc5RqVjEBAE05BE1PBIeUjBJTcGFya1J1bm5lck9wdGlvbnOUal0xAQBNOARNTwSHlIweVGVzdE9wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzlGpWMQEATVMETWkEh5SMFFRlc3RPcHRpb25zLnZhbGlkYXRllGpWMQEATWsETW8Eh5SMC1Rlc3RPcHRpb25zlGpdMQEATVIETW8Eh5SMJlRlc3REYXRhZmxvd09wdGlvbnMuX2FkZF9hcmdwYXJzZV9hcmdzlGpWMQEATXMETXwEh5SME1Rlc3REYXRhZmxvd09wdGlvbnOUal0xAQBNcgRNfASHlIwXT3B0aW9uc0NvbnRleHQuX19pbml0X1+UalYxAQBNkwRNlASHlIwYT3B0aW9uc0NvbnRleHQuX19lbnRlcl9flGpWMQEATZYETZcEh5SMF09wdGlvbnNDb250ZXh0Ll9fZXhpdF9flGpWMQEATZkETZoEh5SMF09wdGlvbnNDb250ZXh0Ll9fY2FsbF9flGpWMQEATZwETaEEh5SMHk9wdGlvbnNDb250ZXh0LmF1Z21lbnRfb3B0aW9uc5RqVjEBAE2jBE2oBIeUjA5PcHRpb25zQ29udGV4dJRqXTEBAE2GBE2oBIeUdX2UKIwPUGlwZWxpbmVPcHRpb25zlGpTAwAAjB9QaXBlbGluZU9wdGlvbnMuZnJvbV9kaWN0aW9uYXJ5lGpTAwAAjB9QaXBlbGluZU9wdGlvbnMuZ2V0X2FsbF9vcHRpb25zlGpTAwAAjBxQaXBlbGluZU9wdGlvbnMuZGlzcGxheV9kYXRhlGpTAwAAjBdQaXBlbGluZU9wdGlvbnMudmlld19hc5RqUwMAAIwPU3RhbmRhcmRPcHRpb25zlGpTAwAAjAtUeXBlT3B0aW9uc5RqUwMAAIwNRGlyZWN0T3B0aW9uc5RqUwMAAIwSR29vZ2xlQ2xvdWRPcHRpb25zlGpTAwAAjBtHb29nbGVDbG91ZE9wdGlvbnMudmFsaWRhdGWUalMDAACMF0hhZG9vcEZpbGVTeXN0ZW1PcHRpb25zlGpTAwAAjCBIYWRvb3BGaWxlU3lzdGVtT3B0aW9ucy52YWxpZGF0ZZRqUwMAAIwNV29ya2VyT3B0aW9uc5RqUwMAAIwWV29ya2VyT3B0aW9ucy52YWxpZGF0ZZRqUwMAAIwMRGVidWdPcHRpb25zlGpTAwAAjBtEZWJ1Z09wdGlvbnMuYWRkX2V4cGVyaW1lbnSUalMDAACMHkRlYnVnT3B0aW9ucy5sb29rdXBfZXhwZXJpbWVudJRqUwMAAIwQUHJvZmlsaW5nT3B0aW9uc5RqUwMAAIwMU2V0dXBPcHRpb25zlGpTAwAAjAtUZXN0T3B0aW9uc5RqUwMAAIwUVGVzdE9wdGlvbnMudmFsaWRhdGWUalMDAAB1jCRhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnOUdJSMLmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9uc192YWxpZGF0b3KUKFgsJwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJQaXBlbGluZSBvcHRpb25zIHZhbGlkYXRvci4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgcmUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IERlYnVnT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTZXR1cE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFN0YW5kYXJkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVGVzdE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFR5cGVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBXb3JrZXJPcHRpb25zCgoKY2xhc3MgUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yKG9iamVjdCk6CiAgIiIiVmFsaWRhdGVzIFBpcGVsaW5lT3B0aW9ucy4KCiAgR29lcyB0aHJvdWdoIGEgbGlzdCBvZiBrbm93biBQaXBlbGluZU9wdGlvbiBzdWJjbGFzc2VzcyBhbmQgY2FsbHM6OgoKICAgIHZhbGlkYXRlKHZhbGlkYXRvcikKCiAgaWYgb25lIGlzIGltcGxlbWVudGVkLiBBZ2dyZWdhdGVzIGEgbGlzdCBvZiB2YWxpZGF0aW9uIGVycm9ycyBmcm9tIGFsbCBhbmQKICByZXR1cm5zIGFuIGFnZ3JlZ2F0ZWQgbGlzdC4KICAiIiIKCiAgIyBWYWxpZGF0b3Igd2lsbCBjYWxsIHZhbGlkYXRlIG9uIHRoZXNlIHN1YmNsYXNzZXMgb2YgUGlwZWxpbmVPcHRpb25zCiAgT1BUSU9OUyA9IFsKICAgICAgRGVidWdPcHRpb25zLAogICAgICBHb29nbGVDbG91ZE9wdGlvbnMsCiAgICAgIFNldHVwT3B0aW9ucywKICAgICAgU3RhbmRhcmRPcHRpb25zLAogICAgICBUeXBlT3B0aW9ucywKICAgICAgV29ya2VyT3B0aW9ucywKICAgICAgVGVzdE9wdGlvbnMKICBdCgogICMgUG9zc2libGUgdmFsaWRhdGlvbiBlcnJvcnMuCiAgRVJSX01JU1NJTkdfT1BUSU9OID0gJ01pc3NpbmcgcmVxdWlyZWQgb3B0aW9uOiAlcy4nCiAgRVJSX01JU1NJTkdfR0NTX1BBVEggPSAnTWlzc2luZyBHQ1MgcGF0aCBvcHRpb246ICVzLicKICBFUlJfSU5WQUxJRF9HQ1NfUEFUSCA9ICdJbnZhbGlkIEdDUyBwYXRoICglcyksIGdpdmVuIGZvciB0aGUgb3B0aW9uOiAlcy4nCiAgRVJSX0lOVkFMSURfR0NTX0JVQ0tFVCA9ICgKICAgICAgJ0ludmFsaWQgR0NTIGJ1Y2tldCAoJXMpLCBnaXZlbiBmb3IgdGhlIG9wdGlvbjogJXMuIFNlZSAnCiAgICAgICdodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9zdG9yYWdlL2RvY3MvYnVja2V0bmFtaW5nICcKICAgICAgJ2ZvciBtb3JlIGRldGFpbHMuJykKICBFUlJfSU5WQUxJRF9HQ1NfT0JKRUNUID0gJ0ludmFsaWQgR0NTIG9iamVjdCAoJXMpLCBnaXZlbiBmb3IgdGhlIG9wdGlvbjogJXMuJwogIEVSUl9JTlZBTElEX0pPQl9OQU1FID0gKAogICAgICAnSW52YWxpZCBqb2JfbmFtZSAoJXMpOyB0aGUgbmFtZSBtdXN0IGNvbnNpc3Qgb2Ygb25seSB0aGUgY2hhcmFjdGVycyAnCiAgICAgICdbLWEtejAtOV0sIHN0YXJ0aW5nIHdpdGggYSBsZXR0ZXIgYW5kIGVuZGluZyB3aXRoIGEgbGV0dGVyIG9yIG51bWJlcicpCiAgRVJSX0lOVkFMSURfUFJPSkVDVF9OVU1CRVIgPSAoCiAgICAgICdJbnZhbGlkIFByb2plY3QgSUQgKCVzKS4gUGxlYXNlIG1ha2Ugc3VyZSB5b3Ugc3BlY2lmaWVkIHRoZSBQcm9qZWN0IElELCAnCiAgICAgICdub3QgcHJvamVjdCBudW1iZXIuJykKICBFUlJfSU5WQUxJRF9QUk9KRUNUX0lEID0gKAogICAgICAnSW52YWxpZCBQcm9qZWN0IElEICglcykuIFBsZWFzZSBtYWtlIHN1cmUgeW91IHNwZWNpZmllZCB0aGUgUHJvamVjdCBJRCwgJwogICAgICAnbm90IHByb2plY3QgZGVzY3JpcHRpb24uJykKICBFUlJfSU5WQUxJRF9OT1RfUE9TSVRJVkUgPSAoCiAgICAgICdJbnZhbGlkIHZhbHVlICglcykgZm9yIG9wdGlvbjogJXMuIFZhbHVlIG5lZWRzICcKICAgICAgJ3RvIGJlIHBvc2l0aXZlLicpCiAgRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1RZUEUgPSAoCiAgICAgICdJbnZhbGlkIHZhbHVlICglcykgZm9yIG9wdGlvbjogJXMuIFBsZWFzZSBleHRlbmQgeW91ciBtYXRjaGVyIG9iamVjdCAnCiAgICAgICdmcm9tIGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyLkJhc2VNYXRjaGVyLicpCiAgRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1VOUElDS0xBQkxFID0gKAogICAgICAnSW52YWxpZCB2YWx1ZSAoJXMpIGZvciBvcHRpb246ICVzLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSB0ZXN0IG1hdGNoZXIgJwogICAgICAnaXMgdW5waWNrbGFibGUuJykKICBFUlJfSU5WQUxJRF9UUkFOU0ZPUk1fTkFNRV9NQVBQSU5HID0gKAogICAgICAnSW52YWxpZCB0cmFuc2Zvcm0gbmFtZSBtYXBwaW5nIGZvcm1hdC4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgbWFwcGluZyBpcyAnCiAgICAgICdzdHJpbmcga2V5LXZhbHVlIHBhaXJzLiBJbnZhbGlkIHBhaXI6ICglczolcyknKQoKICAjIEdDUyBwYXRoIHNwZWNpZmljIHBhdHRlcm5zLgogIEdDU19VUkkgPSAnKD9QPFNDSEVNRT5bXjpdKyk6Ly8oP1A8QlVDS0VUPlteL10rKSgvKD9QPE9CSkVDVD4uKikpPycKICBHQ1NfQlVDS0VUID0gJ15bYS16MC05XVstX2EtejAtOS5dK1thLXowLTldJCcKICBHQ1NfU0NIRU1FID0gJ2dzJwoKICAjIEdvb2dsZUNsb3VkT3B0aW9ucyBzcGVjaWZpYyBwYXR0ZXJucy4KICBKT0JfUEFUVEVSTiA9ICdbYS16XShbLWEtejAtOV0qW2EtejAtOV0pPycKICBQUk9KRUNUX0lEX1BBVFRFUk4gPSAnW2Etel1bLWEtejAtOTouXStbYS16MC05XScKICBQUk9KRUNUX05VTUJFUl9QQVRURVJOID0gJ1swLTldKicKICBFTkRQT0lOVF9QQVRURVJOID0gcidodHRwczovL1tcU10qZ29vZ2xlYXBpc1wuY29tWy9dPycKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHJ1bm5lcik6CiAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCiAgICBzZWxmLnJ1bm5lciA9IHJ1bm5lcgoKICBkZWYgdmFsaWRhdGUoc2VsZik6CiAgICAiIiJDYWxscyB2YWxpZGF0ZSBvbiBzdWJjbGFzc2VzcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZXJyb3JzLgoKICAgIHZhbGlkYXRlIHdpbGwgY2FsbCB2YWxpZGF0ZSBtZXRob2Qgb24gc3ViY2xhc3NlcywgYWNjdW11bGF0ZSB0aGUgcmV0dXJuZWQKICAgIGxpc3Qgb2YgZXJyb3JzLCBhbmQgcmV0dXJucyB0aGUgYWdncmVnYXRlIGxpc3QuCgogICAgUmV0dXJuczoKICAgICAgQWdncmVnYXRlIGxpc3Qgb2YgZXJyb3JzIGFmdGVyIGFsbCBjYWxsaW5nIGFsbCBwb3NzaWJsZSB2YWxpZGF0ZSBtZXRob2RzLgogICAgIiIiCiAgICBlcnJvcnMgPSBbXQogICAgZm9yIGNscyBpbiBzZWxmLk9QVElPTlM6CiAgICAgIGlmICd2YWxpZGF0ZScgaW4gY2xzLl9fZGljdF9fIGFuZCBjYWxsYWJsZShjbHMuX19kaWN0X19bJ3ZhbGlkYXRlJ10pOgogICAgICAgIGVycm9ycy5leHRlbmQoc2VsZi5vcHRpb25zLnZpZXdfYXMoY2xzKS52YWxpZGF0ZShzZWxmKSkKICAgIHJldHVybiBlcnJvcnMKCiAgZGVmIGlzX3NlcnZpY2VfcnVubmVyKHNlbGYpOgogICAgIiIiVHJ1ZSBpZiBwaXBlbGluZSB3aWxsIGV4ZWN1dGUgb24gdGhlIEdvb2dsZSBDbG91ZCBEYXRhZmxvdyBzZXJ2aWNlLiIiIgogICAgaXNfc2VydmljZV9ydW5uZXIgPSAoCiAgICAgICAgc2VsZi5ydW5uZXIgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgdHlwZShzZWxmLnJ1bm5lcikuX19uYW1lX18gaW4gWydEYXRhZmxvd1J1bm5lcicsICdUZXN0RGF0YWZsb3dSdW5uZXInXSkKCiAgICBkYXRhZmxvd19lbmRwb2ludCA9ICgKICAgICAgICBzZWxmLm9wdGlvbnMudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLmRhdGFmbG93X2VuZHBvaW50KQogICAgaXNfc2VydmljZV9lbmRwb2ludCA9ICgKICAgICAgICBkYXRhZmxvd19lbmRwb2ludCBpcyBub3QgTm9uZSBhbmQKICAgICAgICBzZWxmLmlzX2Z1bGxfc3RyaW5nX21hdGNoKHNlbGYuRU5EUE9JTlRfUEFUVEVSTiwgZGF0YWZsb3dfZW5kcG9pbnQpKQoKICAgIHJldHVybiBpc19zZXJ2aWNlX3J1bm5lciBhbmQgaXNfc2VydmljZV9lbmRwb2ludAoKICBkZWYgaXNfZnVsbF9zdHJpbmdfbWF0Y2goc2VsZiwgcGF0dGVybiwgc3RyaW5nKToKICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0aGUgcGF0dGVybiBtYXRjaGVzIHRoZSB3aG9sZSBzdHJpbmcuIiIiCiAgICBwYXR0ZXJuID0gJ14lcyQnICUgcGF0dGVybgogICAgcmV0dXJuIHJlLnNlYXJjaChwYXR0ZXJuLCBzdHJpbmcpIGlzIG5vdCBOb25lCgogIGRlZiBfdmFsaWRhdGVfZXJyb3Ioc2VsZiwgZXJyLCAqYXJncyk6CiAgICByZXR1cm4gW2VyciAlIGFyZ3NdCgogIGRlZiB2YWxpZGF0ZV9nY3NfcGF0aChzZWxmLCB2aWV3LCBhcmdfbmFtZSk6CiAgICAiIiJWYWxpZGF0ZXMgYSBHQ1MgcGF0aCBhZ2FpbnN0IGdzOi8vYnVja2V0L29iamVjdCBVUkkgZm9ybWF0LiIiIgogICAgYXJnID0gZ2V0YXR0cih2aWV3LCBhcmdfbmFtZSwgTm9uZSkKICAgIGlmIGFyZyBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfTUlTU0lOR19HQ1NfUEFUSCwgYXJnX25hbWUpCiAgICBtYXRjaCA9IHJlLm1hdGNoKHNlbGYuR0NTX1VSSSwgYXJnLCByZS5ET1RBTEwpCiAgICBpZiBtYXRjaCBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9HQ1NfUEFUSCwgYXJnLCBhcmdfbmFtZSkKCiAgICBzY2hlbWUgPSBtYXRjaC5ncm91cCgnU0NIRU1FJykKICAgIGJ1Y2tldCA9IG1hdGNoLmdyb3VwKCdCVUNLRVQnKQogICAgZ2NzX29iamVjdCA9IG1hdGNoLmdyb3VwKCdPQkpFQ1QnKQoKICAgIGlmICgoc2NoZW1lIGlzIE5vbmUpIG9yIChzY2hlbWUubG93ZXIoKSAhPSBzZWxmLkdDU19TQ0hFTUUpIG9yCiAgICAgICAgKGJ1Y2tldCBpcyBOb25lKSk6CiAgICAgIHJldHVybiBzZWxmLl92YWxpZGF0ZV9lcnJvcihzZWxmLkVSUl9JTlZBTElEX0dDU19QQVRILCBhcmcsIGFyZ19uYW1lKQoKICAgIGlmIG5vdCBzZWxmLmlzX2Z1bGxfc3RyaW5nX21hdGNoKHNlbGYuR0NTX0JVQ0tFVCwgYnVja2V0KToKICAgICAgcmV0dXJuIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKHNlbGYuRVJSX0lOVkFMSURfR0NTX0JVQ0tFVCwgYXJnLCBhcmdfbmFtZSkKICAgIGlmIGdjc19vYmplY3QgaXMgTm9uZSBvciAnXG4nIGluIGdjc19vYmplY3Qgb3IgJ1xyJyBpbiBnY3Nfb2JqZWN0OgogICAgICByZXR1cm4gc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9HQ1NfT0JKRUNULCBhcmcsIGFyZ19uYW1lKQoKICAgIHJldHVybiBbXQoKICBkZWYgdmFsaWRhdGVfY2xvdWRfb3B0aW9ucyhzZWxmLCB2aWV3KToKICAgICIiIlZhbGlkYXRlcyBqb2JfbmFtZSBhbmQgcHJvamVjdCBhcmd1bWVudHMuIiIiCiAgICBlcnJvcnMgPSBbXQogICAgaWYgKHZpZXcuam9iX25hbWUgYW5kCiAgICAgICAgbm90IHNlbGYuaXNfZnVsbF9zdHJpbmdfbWF0Y2goc2VsZi5KT0JfUEFUVEVSTiwgdmlldy5qb2JfbmFtZSkpOgogICAgICBlcnJvcnMuZXh0ZW5kKAogICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9KT0JfTkFNRSwgdmlldy5qb2JfbmFtZSkpCiAgICBwcm9qZWN0ID0gdmlldy5wcm9qZWN0CiAgICBpZiBwcm9qZWN0IGlzIE5vbmU6CiAgICAgIGVycm9ycy5leHRlbmQoc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfTUlTU0lOR19PUFRJT04sICdwcm9qZWN0JykpCiAgICBlbHNlOgogICAgICBpZiBzZWxmLmlzX2Z1bGxfc3RyaW5nX21hdGNoKHNlbGYuUFJPSkVDVF9OVU1CRVJfUEFUVEVSTiwgcHJvamVjdCk6CiAgICAgICAgZXJyb3JzLmV4dGVuZCgKICAgICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXJyb3Ioc2VsZi5FUlJfSU5WQUxJRF9QUk9KRUNUX05VTUJFUiwgcHJvamVjdCkpCiAgICAgIGVsaWYgbm90IHNlbGYuaXNfZnVsbF9zdHJpbmdfbWF0Y2goc2VsZi5QUk9KRUNUX0lEX1BBVFRFUk4sIHByb2plY3QpOgogICAgICAgIGVycm9ycy5leHRlbmQoCiAgICAgICAgICAgIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKHNlbGYuRVJSX0lOVkFMSURfUFJPSkVDVF9JRCwgcHJvamVjdCkpCiAgICBpZiB2aWV3LnVwZGF0ZToKICAgICAgaWYgbm90IHZpZXcuam9iX25hbWU6CiAgICAgICAgZXJyb3JzLmV4dGVuZCgKICAgICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXJyb3IoCiAgICAgICAgICAgICAgICAnRXhpc3Rpbmcgam9iIG5hbWUgbXVzdCBiZSBwcm92aWRlZCB3aGVuIHVwZGF0aW5nIGEgcGlwZWxpbmUuJykpCiAgICBpZiB2aWV3LnRyYW5zZm9ybV9uYW1lX21hcHBpbmc6CiAgICAgIGlmIG5vdCB2aWV3LnVwZGF0ZSBvciBub3Qgc2VsZi5vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmc6CiAgICAgICAgZXJyb3JzLmFwcGVuZCgKICAgICAgICAgICAgJ1RyYW5zZm9ybSBuYW1lIG1hcHBpbmcgb3B0aW9uIGlzIG9ubHkgdXNlZnVsIHdoZW4gJwogICAgICAgICAgICAnLS11cGRhdGUgYW5kIC0tc3RyZWFtaW5nIGlzIHNwZWNpZmllZCcpCiAgICAgIGZvciBfLCAoa2V5LCB2YWx1ZSkgaW4gZW51bWVyYXRlKHZpZXcudHJhbnNmb3JtX25hbWVfbWFwcGluZy5pdGVtcygpKToKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIChzdHIsIHVuaWNvZGUpKSBcCiAgICAgICAgICAgIG9yIG5vdCBpc2luc3RhbmNlKHZhbHVlLCAoc3RyLCB1bmljb2RlKSk6CiAgICAgICAgICBlcnJvcnMuZXh0ZW5kKAogICAgICAgICAgICAgIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKAogICAgICAgICAgICAgICAgICBzZWxmLkVSUl9JTlZBTElEX1RSQU5TRk9STV9OQU1FX01BUFBJTkcsIGtleSwgdmFsdWUpKQogICAgICAgICAgYnJlYWsKICAgIHJldHVybiBlcnJvcnMKCiAgZGVmIHZhbGlkYXRlX3dvcmtlcl9yZWdpb25fem9uZShzZWxmLCB2aWV3KToKICAgICIiIlZhbGlkYXRlcyBEYXRhZmxvdyB3b3JrZXIgcmVnaW9uIGFuZCB6b25lIGFyZ3VtZW50cyBhcmUgY29uc2lzdGVudC4iIiIKICAgIGVycm9ycyA9IFtdCiAgICBpZiB2aWV3LnpvbmUgYW5kICh2aWV3Lndvcmtlcl9yZWdpb24gb3Igdmlldy53b3JrZXJfem9uZSk6CiAgICAgIGVycm9ycy5leHRlbmQoCiAgICAgICAgICBzZWxmLl92YWxpZGF0ZV9lcnJvcigKICAgICAgICAgICAgICAnQ2Fubm90IHVzZSBkZXByZWNhdGVkIGZsYWcgLS16b25lIGFsb25nIHdpdGggd29ya2VyX3JlZ2lvbiBvciAnCiAgICAgICAgICAgICAgJ3dvcmtlcl96b25lLicpKQogICAgaWYgc2VsZi5vcHRpb25zLnZpZXdfYXMoRGVidWdPcHRpb25zKS5sb29rdXBfZXhwZXJpbWVudCgnd29ya2VyX3JlZ2lvbicpXAogICAgICAgIGFuZCAodmlldy53b3JrZXJfcmVnaW9uIG9yIHZpZXcud29ya2VyX3pvbmUpOgogICAgICBlcnJvcnMuZXh0ZW5kKAogICAgICAgICAgc2VsZi5fdmFsaWRhdGVfZXJyb3IoCiAgICAgICAgICAgICAgJ0Nhbm5vdCB1c2UgZGVwcmVjYXRlZCBleHBlcmltZW50IHdvcmtlcl9yZWdpb24gYWxvbmcgd2l0aCAnCiAgICAgICAgICAgICAgJ3dvcmtlcl9yZWdpb24gb3Igd29ya2VyX3pvbmUuJykpCiAgICBpZiB2aWV3Lndvcmtlcl9yZWdpb24gYW5kIHZpZXcud29ya2VyX3pvbmU6CiAgICAgIGVycm9ycy5leHRlbmQoCiAgICAgICAgICBzZWxmLl92YWxpZGF0ZV9lcnJvcigKICAgICAgICAgICAgICAnd29ya2VyX3JlZ2lvbiBhbmQgd29ya2VyX3pvbmUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4nKSkKICAgIHJldHVybiBlcnJvcnMKCiAgZGVmIHZhbGlkYXRlX29wdGlvbmFsX2FyZ3VtZW50X3Bvc2l0aXZlKHNlbGYsIHZpZXcsIGFyZ19uYW1lKToKICAgICIiIlZhbGlkYXRlcyB0aGF0IGFuIG9wdGlvbmFsIGFyZ3VtZW50IChpZiBzZXQpIGhhcyBhIHBvc2l0aXZlIHZhbHVlLiIiIgogICAgYXJnID0gZ2V0YXR0cih2aWV3LCBhcmdfbmFtZSwgTm9uZSkKICAgIGlmIGFyZyBpcyBub3QgTm9uZSBhbmQgaW50KGFyZykgPD0gMDoKICAgICAgcmV0dXJuIHNlbGYuX3ZhbGlkYXRlX2Vycm9yKHNlbGYuRVJSX0lOVkFMSURfTk9UX1BPU0lUSVZFLCBhcmcsIGFyZ19uYW1lKQogICAgcmV0dXJuIFtdCgogIGRlZiB2YWxpZGF0ZV90ZXN0X21hdGNoZXIoc2VsZiwgdmlldywgYXJnX25hbWUpOgogICAgIiIiVmFsaWRhdGVzIHRoYXQgb25fc3VjY2Vzc19tYXRjaGVyIGFyZ3VtZW50IGlmIHNldC4KCiAgICBWYWxpZGF0ZXMgdGhhdCBvbl9zdWNjZXNzX21hdGNoZXIgaXMgdW5waWNrbGFibGUgYW5kIGlzIGluc3RhbmNlCiAgICBvZiBgaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXJgLgogICAgIiIiCiAgICAjIFRoaXMgaXMgYSB0ZXN0IG9ubHkgbWV0aG9kIGFuZCByZXF1aXJlcyBoYW1jcmVzdAogICAgZnJvbSBoYW1jcmVzdC5jb3JlLmJhc2VfbWF0Y2hlciBpbXBvcnQgQmFzZU1hdGNoZXIKICAgIHBpY2tsZWRfbWF0Y2hlciA9IHZpZXcub25fc3VjY2Vzc19tYXRjaGVyCiAgICBlcnJvcnMgPSBbXQogICAgdHJ5OgogICAgICBtYXRjaGVyID0gcGlja2xlci5sb2FkcyhwaWNrbGVkX21hdGNoZXIpCiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1hdGNoZXIsIEJhc2VNYXRjaGVyKToKICAgICAgICBlcnJvcnMuZXh0ZW5kKAogICAgICAgICAgICBzZWxmLl92YWxpZGF0ZV9lcnJvcigKICAgICAgICAgICAgICAgIHNlbGYuRVJSX0lOVkFMSURfVEVTVF9NQVRDSEVSX1RZUEUsIG1hdGNoZXIsIGFyZ19uYW1lKSkKICAgIGV4Y2VwdDogICMgcHlsaW50OiBkaXNhYmxlPWJhcmUtZXhjZXB0CiAgICAgIGVycm9ycy5leHRlbmQoCiAgICAgICAgICBzZWxmLl92YWxpZGF0ZV9lcnJvcigKICAgICAgICAgICAgICBzZWxmLkVSUl9JTlZBTElEX1RFU1RfTUFUQ0hFUl9VTlBJQ0tMQUJMRSwKICAgICAgICAgICAgICBwaWNrbGVkX21hdGNoZXIsCiAgICAgICAgICAgICAgYXJnX25hbWUpKQogICAgcmV0dXJuIGVycm9ycwqUfZQojCFQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuX19pbml0X1+UalYxAQBLaUtrh5SMIVBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZZRqVjEBAEttS3qHlIwqUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX3NlcnZpY2VfcnVubmVylGpWMQEAS3xLiIeUjC1QaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IuaXNfZnVsbF9zdHJpbmdfbWF0Y2iUalYxAQBLikuNh5SMKFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5fdmFsaWRhdGVfZXJyb3KUalYxAQBLj0uQh5SMKlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9nY3NfcGF0aJRqVjEBAEuSS6iHlIwvUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX2Nsb3VkX29wdGlvbnOUalYxAQBLqkvMh5SMNFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV93b3JrZXJfcmVnaW9uX3pvbmWUalYxAQBLzkvgh5SMPFBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9vcHRpb25hbF9hcmd1bWVudF9wb3NpdGl2ZZRqVjEBAEviS+eHlIwuUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLnZhbGlkYXRlX3Rlc3RfbWF0Y2hlcpRqVjEBAEvpS/+HlIwYUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9ylGpdMQEASylL/4eUdX2UKIwYUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9ylGpmAwAAjCFQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGWUamYDAACMKlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci5pc19zZXJ2aWNlX3J1bm5lcpRqZgMAAIwtUGlwZWxpbmVPcHRpb25zVmFsaWRhdG9yLmlzX2Z1bGxfc3RyaW5nX21hdGNolGpmAwAAjCpQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfZ2NzX3BhdGiUamYDAACML1BpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV9jbG91ZF9vcHRpb25zlGpmAwAAjDRQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfd29ya2VyX3JlZ2lvbl96b25llGpmAwAAjDxQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IudmFsaWRhdGVfb3B0aW9uYWxfYXJndW1lbnRfcG9zaXRpdmWUamYDAACMLlBpcGVsaW5lT3B0aW9uc1ZhbGlkYXRvci52YWxpZGF0ZV90ZXN0X21hdGNoZXKUamYDAAB1jC5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9ylHSUjCJhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVylChY7A8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBWYWx1ZVByb3ZpZGVyIGNsYXNzIHRvIGltcGxlbWVudCB0ZW1wbGF0ZXMgd2l0aCBib3RoIHN0YXRpY2FsbHkKYW5kIGR5bmFtaWNhbGx5IHByb3ZpZGVkIHZhbHVlcy4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwpmcm9tIHR5cGluZyBpbXBvcnQgU2V0Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBlcnJvcgoKX19hbGxfXyA9IFsKICAgICdWYWx1ZVByb3ZpZGVyJywKICAgICdTdGF0aWNWYWx1ZVByb3ZpZGVyJywKICAgICdSdW50aW1lVmFsdWVQcm92aWRlcicsCiAgICAnY2hlY2tfYWNjZXNzaWJsZScsCl0KCgpjbGFzcyBWYWx1ZVByb3ZpZGVyKG9iamVjdCk6CiAgZGVmIGlzX2FjY2Vzc2libGUoc2VsZik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdWYWx1ZVByb3ZpZGVyLmlzX2FjY2Vzc2libGUgaW1wbGVtZW50ZWQgaW4gZGVyaXZlZCBjbGFzc2VzJykKCiAgZGVmIGdldChzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgJ1ZhbHVlUHJvdmlkZXIuZ2V0IGltcGxlbWVudGVkIGluIGRlcml2ZWQgY2xhc3NlcycpCgoKY2xhc3MgU3RhdGljVmFsdWVQcm92aWRlcihWYWx1ZVByb3ZpZGVyKToKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVfdHlwZSwgdmFsdWUpOgogICAgc2VsZi52YWx1ZV90eXBlID0gdmFsdWVfdHlwZQogICAgc2VsZi52YWx1ZSA9IHZhbHVlX3R5cGUodmFsdWUpCgogIGRlZiBpc19hY2Nlc3NpYmxlKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCiAgZGVmIGdldChzZWxmKToKICAgIHJldHVybiBzZWxmLnZhbHVlCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuIHN0cihzZWxmLnZhbHVlKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHNlbGYudmFsdWUgPT0gb3RoZXI6CiAgICAgIHJldHVybiBUcnVlCiAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBTdGF0aWNWYWx1ZVByb3ZpZGVyKToKICAgICAgaWYgKHNlbGYudmFsdWVfdHlwZSA9PSBvdGhlci52YWx1ZV90eXBlIGFuZCBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlKToKICAgICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi52YWx1ZV90eXBlLCBzZWxmLnZhbHVlKSkKCgpjbGFzcyBSdW50aW1lVmFsdWVQcm92aWRlcihWYWx1ZVByb3ZpZGVyKToKICBydW50aW1lX29wdGlvbnMgPSBOb25lCiAgZXhwZXJpbWVudHMgPSBzZXQoKSAgIyB0eXBlOiBTZXRbc3RyXQoKICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9uX25hbWUsIHZhbHVlX3R5cGUsIGRlZmF1bHRfdmFsdWUpOgogICAgc2VsZi5vcHRpb25fbmFtZSA9IG9wdGlvbl9uYW1lCiAgICBzZWxmLmRlZmF1bHRfdmFsdWUgPSBkZWZhdWx0X3ZhbHVlCiAgICBzZWxmLnZhbHVlX3R5cGUgPSB2YWx1ZV90eXBlCgogIGRlZiBpc19hY2Nlc3NpYmxlKHNlbGYpOgogICAgcmV0dXJuIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9ucyBpcyBub3QgTm9uZQoKICBAY2xhc3NtZXRob2QKICBkZWYgZ2V0X3ZhbHVlKGNscywgb3B0aW9uX25hbWUsIHZhbHVlX3R5cGUsIGRlZmF1bHRfdmFsdWUpOgogICAgaWYgbm90IFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9uczoKICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWUKCiAgICBjYW5kaWRhdGUgPSBSdW50aW1lVmFsdWVQcm92aWRlci5ydW50aW1lX29wdGlvbnMuZ2V0KG9wdGlvbl9uYW1lKQogICAgaWYgY2FuZGlkYXRlOgogICAgICByZXR1cm4gdmFsdWVfdHlwZShjYW5kaWRhdGUpCiAgICBlbHNlOgogICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZQoKICBkZWYgZ2V0KHNlbGYpOgogICAgaWYgUnVudGltZVZhbHVlUHJvdmlkZXIucnVudGltZV9vcHRpb25zIGlzIE5vbmU6CiAgICAgIHJhaXNlIGVycm9yLlJ1bnRpbWVWYWx1ZVByb3ZpZGVyRXJyb3IoCiAgICAgICAgICAnJXMuZ2V0KCkgbm90IGNhbGxlZCBmcm9tIGEgcnVudGltZSBjb250ZXh0JyAlIHNlbGYpCgogICAgcmV0dXJuIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmdldF92YWx1ZSgKICAgICAgICBzZWxmLm9wdGlvbl9uYW1lLCBzZWxmLnZhbHVlX3R5cGUsIHNlbGYuZGVmYXVsdF92YWx1ZSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNldF9ydW50aW1lX29wdGlvbnMoY2xzLCBwaXBlbGluZV9vcHRpb25zKToKICAgIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnJ1bnRpbWVfb3B0aW9ucyA9IHBpcGVsaW5lX29wdGlvbnMKICAgIFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmV4cGVyaW1lbnRzID0gUnVudGltZVZhbHVlUHJvdmlkZXIuZ2V0X3ZhbHVlKAogICAgICAgICdleHBlcmltZW50cycsIHNldCwgc2V0KCkpCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuICclcyhvcHRpb246ICVzLCB0eXBlOiAlcywgZGVmYXVsdF92YWx1ZTogJXMpJyAlICgKICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICBzZWxmLm9wdGlvbl9uYW1lLAogICAgICAgIHNlbGYudmFsdWVfdHlwZS5fX25hbWVfXywKICAgICAgICByZXByKHNlbGYuZGVmYXVsdF92YWx1ZSkpCgoKZGVmIGNoZWNrX2FjY2Vzc2libGUodmFsdWVfcHJvdmlkZXJfbGlzdCk6CiAgIiIiQ2hlY2sgYWNjZXNzaWJpbGl0eSBvZiBhIGxpc3Qgb2YgVmFsdWVQcm92aWRlciBvYmplY3RzLiIiIgogIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlX3Byb3ZpZGVyX2xpc3QsIGxpc3QpCgogIGRlZiBfY2hlY2tfYWNjZXNzaWJsZShmbmMpOgogICAgQHdyYXBzKGZuYykKICAgIGRlZiBfZihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICBmb3Igb2JqIGluIFtnZXRhdHRyKHNlbGYsIHZwKSBmb3IgdnAgaW4gdmFsdWVfcHJvdmlkZXJfbGlzdF06CiAgICAgICAgaWYgbm90IG9iai5pc19hY2Nlc3NpYmxlKCk6CiAgICAgICAgICByYWlzZSBlcnJvci5SdW50aW1lVmFsdWVQcm92aWRlckVycm9yKCclcyBub3QgYWNjZXNzaWJsZScgJSBvYmopCiAgICAgIHJldHVybiBmbmMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQoKICAgIHJldHVybiBfZgoKICByZXR1cm4gX2NoZWNrX2FjY2Vzc2libGUKlH2UKIwbVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxllGpWMQEASylLK4eUjBFWYWx1ZVByb3ZpZGVyLmdldJRqVjEBAEstSy+HlIwNVmFsdWVQcm92aWRlcpRqXTEBAEsoSy+HlIwcU3RhdGljVmFsdWVQcm92aWRlci5fX2luaXRfX5RqVjEBAEszSzWHlIwhU3RhdGljVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxllGpWMQEASzdLOIeUjBdTdGF0aWNWYWx1ZVByb3ZpZGVyLmdldJRqVjEBAEs6SzuHlIwbU3RhdGljVmFsdWVQcm92aWRlci5fX3N0cl9flGpWMQEASz1LPoeUjBpTdGF0aWNWYWx1ZVByb3ZpZGVyLl9fZXFfX5RqVjEBAEtAS0aHlIwaU3RhdGljVmFsdWVQcm92aWRlci5fX25lX1+UalYxAQBLSEtKh5SMHFN0YXRpY1ZhbHVlUHJvdmlkZXIuX19oYXNoX1+UalYxAQBLTEtNh5SME1N0YXRpY1ZhbHVlUHJvdmlkZXKUal0xAQBLMktNh5SMHVJ1bnRpbWVWYWx1ZVByb3ZpZGVyLl9faW5pdF9flGpWMQEAS1RLV4eUjCJSdW50aW1lVmFsdWVQcm92aWRlci5pc19hY2Nlc3NpYmxllGpWMQEAS1lLWoeUjB5SdW50aW1lVmFsdWVQcm92aWRlci5nZXRfdmFsdWWUalYxAQBLXEtlh5SMGFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLmdldJRqVjEBAEtnS22HlIwoUnVudGltZVZhbHVlUHJvdmlkZXIuc2V0X3J1bnRpbWVfb3B0aW9uc5RqVjEBAEtvS3OHlIwcUnVudGltZVZhbHVlUHJvdmlkZXIuX19zdHJfX5RqVjEBAEt1S3qHlIwUUnVudGltZVZhbHVlUHJvdmlkZXKUal0xAQBLUEt6h5SMEGNoZWNrX2FjY2Vzc2libGWUalYxAQBLfUuLh5R1fZQojA1WYWx1ZVByb3ZpZGVylGrJAwAAjBtWYWx1ZVByb3ZpZGVyLmlzX2FjY2Vzc2libGWUaskDAACMEVZhbHVlUHJvdmlkZXIuZ2V0lGrJAwAAjBNTdGF0aWNWYWx1ZVByb3ZpZGVylGrJAwAAjCFTdGF0aWNWYWx1ZVByb3ZpZGVyLmlzX2FjY2Vzc2libGWUaskDAACMF1N0YXRpY1ZhbHVlUHJvdmlkZXIuZ2V0lGrJAwAAjBRSdW50aW1lVmFsdWVQcm92aWRlcpRqyQMAAIwiUnVudGltZVZhbHVlUHJvdmlkZXIuaXNfYWNjZXNzaWJsZZRqyQMAAIweUnVudGltZVZhbHVlUHJvdmlkZXIuZ2V0X3ZhbHVllGrJAwAAjBhSdW50aW1lVmFsdWVQcm92aWRlci5nZXSUaskDAACMKFJ1bnRpbWVWYWx1ZVByb3ZpZGVyLnNldF9ydW50aW1lX29wdGlvbnOUaskDAACMEGNoZWNrX2FjY2Vzc2libGWUaskDAAB1jCJhcGFjaGVfYmVhbS5vcHRpb25zLnZhbHVlX3Byb3ZpZGVylHSUjBRhcGFjaGVfYmVhbS5waXBlbGluZZQoWIC5AAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlBpcGVsaW5lLCB0aGUgdG9wLWxldmVsIEJlYW0gb2JqZWN0LgoKQSBwaXBlbGluZSBob2xkcyBhIERBRyBvZiBkYXRhIHRyYW5zZm9ybXMuIENvbmNlcHR1YWxseSB0aGUgbm9kZXMgb2YgdGhlIERBRwphcmUgdHJhbnNmb3JtcyAoOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIG9iamVjdHMpCmFuZCB0aGUgZWRnZXMgYXJlIHZhbHVlcyAobW9zdGx5IDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAKb2JqZWN0cykuIFRoZSB0cmFuc2Zvcm1zIHRha2UgYXMgaW5wdXRzIG9uZSBvciBtb3JlIFBWYWx1ZXMgYW5kIG91dHB1dCBvbmUgb3IKbW9yZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlYCBzLgoKVGhlIHBpcGVsaW5lIG9mZmVycyBmdW5jdGlvbmFsaXR5IHRvIHRyYXZlcnNlIHRoZSBncmFwaC4gIFRoZSBhY3R1YWwgb3BlcmF0aW9uCnRvIGJlIGV4ZWN1dGVkIGZvciBlYWNoIG5vZGUgdmlzaXRlZCBpcyBzcGVjaWZpZWQgdGhyb3VnaCBhIHJ1bm5lciBvYmplY3QuCgpUeXBpY2FsIHVzYWdlOjoKCiAgIyBDcmVhdGUgYSBwaXBlbGluZSBvYmplY3QgdXNpbmcgYSBsb2NhbCBydW5uZXIgZm9yIGV4ZWN1dGlvbi4KICB3aXRoIGJlYW0uUGlwZWxpbmUoJ0RpcmVjdFJ1bm5lcicpIGFzIHA6CgogICAgIyBBZGQgdG8gdGhlIHBpcGVsaW5lIGEgIkNyZWF0ZSIgdHJhbnNmb3JtLiBXaGVuIGV4ZWN1dGVkIHRoaXMKICAgICMgdHJhbnNmb3JtIHdpbGwgcHJvZHVjZSBhIFBDb2xsZWN0aW9uIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgdmFsdWVzLgogICAgcGNvbGwgPSBwIHwgJ0NyZWF0ZScgPj4gYmVhbS5DcmVhdGUoWzEsIDIsIDNdKQoKICAgICMgQW5vdGhlciB0cmFuc2Zvcm0gY291bGQgYmUgYXBwbGllZCB0byBwY29sbCwgZS5nLiwgd3JpdGluZyB0byBhIHRleHQgZmlsZS4KICAgICMgRm9yIG90aGVyIHRyYW5zZm9ybXMsIHJlZmVyIHRvIHRyYW5zZm9ybXMvIGRpcmVjdG9yeS4KICAgIHBjb2xsIHwgJ1dyaXRlJyA+PiBiZWFtLmlvLldyaXRlVG9UZXh0KCcuL291dHB1dCcpCgogICAgIyBydW4oKSB3aWxsIGV4ZWN1dGUgdGhlIERBRyBzdG9yZWQgaW4gdGhlIHBpcGVsaW5lLiAgVGhlIGV4ZWN1dGlvbiBvZiB0aGUKICAgICMgbm9kZXMgdmlzaXRlZCBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgbG9jYWwgcnVubmVyLgoKIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFiYwppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAppbXBvcnQgdGVtcGZpbGUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcApmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORwpmcm9tIHR5cGluZyBpbXBvcnQgRGljdApmcm9tIHR5cGluZyBpbXBvcnQgSXRlcmFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBTZXF1ZW5jZQpmcm9tIHR5cGluZyBpbXBvcnQgU2V0CmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24KCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCB3aXRoX21ldGFjbGFzcwoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5pby5maWxlc3lzdGVtcyBpbXBvcnQgRmlsZVN5c3RlbXMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IERlYnVnT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTZXR1cE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFN0YW5kYXJkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVHlwZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnNfdmFsaWRhdG9yIGltcG9ydCBQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3IKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBQaXBlbGluZVJ1bm5lcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMgaW1wb3J0IGNyZWF0ZV9ydW5uZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBQYXJEbwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHB0cmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFJ1bm5lckFQSVBUcmFuc2Zvcm1Ib2xkZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHMgaW1wb3J0IGdldF9zaWRlaW5wdXRfaW5kZXgKI2Zyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgZXh0ZXJuYWwKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS51dGlscy5hbm5vdGF0aW9ucyBpbXBvcnQgZGVwcmVjYXRlZApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmludGVyYWN0aXZlX3V0aWxzIGltcG9ydCBhbHRlcl9sYWJlbF9pZl9pcHl0aG9uCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQgaW1wb3J0IFBpcGVsaW5lQ29udGV4dAogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIgaW1wb3J0IFBpcGVsaW5lUmVzdWx0CiAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBlbnZpcm9ubWVudHMKCl9fYWxsX18gPSBbJ1BpcGVsaW5lJywgJ1BUcmFuc2Zvcm1PdmVycmlkZSddCgoKY2xhc3MgUGlwZWxpbmUob2JqZWN0KToKICAiIiJBIHBpcGVsaW5lIG9iamVjdCB0aGF0IG1hbmFnZXMgYSBEQUcgb2YKICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUFZhbHVlYCBzIGFuZCB0aGVpcgogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBzLgoKICBDb25jZXB0dWFsbHkgdGhlIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QVmFsdWVgIHMgYXJlIHRoZSBEQUcncyBub2RlcyBhbmQKICB0aGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gIHMgY29tcHV0aW5nCiAgdGhlIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QVmFsdWVgIHMgYXJlIHRoZSBlZGdlcy4KCiAgQWxsIHRoZSB0cmFuc2Zvcm1zIGFwcGxpZWQgdG8gdGhlIHBpcGVsaW5lIG11c3QgaGF2ZSBkaXN0aW5jdCBmdWxsIGxhYmVscy4KICBJZiBzYW1lIHRyYW5zZm9ybSBpbnN0YW5jZSBuZWVkcyB0byBiZSBhcHBsaWVkIHRoZW4gdGhlIHJpZ2h0IHNoaWZ0IG9wZXJhdG9yCiAgc2hvdWxkIGJlIHVzZWQgdG8gZGVzaWduYXRlIG5ldyBuYW1lcwogIChlLmcuIGBgaW5wdXQgfCAibGFiZWwiID4+IG15X3RyYW5mb3JtYGApLgogICIiIgoKICAjIFRPRE86IEJFQU0tOTAwMSAtIHNldCBlbnZpcm9ubWVudCBJRCBpbiBhbGwgdHJhbnNmb3JtcyBhbmQgYWxsb3cgcnVubmVycyB0bwogICMgb3ZlcnJpZGUuCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHNka190cmFuc2Zvcm1zX3dpdGhfZW52aXJvbm1lbnQoY2xzKToKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5wb3J0YWJpbGl0eSBpbXBvcnQgZm5fYXBpX3J1bm5lcl90cmFuc2Zvcm1zCiAgICBzZXRzID0gWwogICAgICAgIGZuX2FwaV9ydW5uZXJfdHJhbnNmb3Jtcy5QQVJfRE9fVVJOUywKICAgICAgICBmbl9hcGlfcnVubmVyX3RyYW5zZm9ybXMuQ09NQklORV9VUk5TLAogICAgICAgIGZyb3plbnNldChbY29tbW9uX3VybnMucHJpbWl0aXZlcy5BU1NJR05fV0lORE9XUy51cm5dKQogICAgXQogICAgcmV0dXJuIGZyb3plbnNldCgpLnVuaW9uKCpzZXRzKQoKICBkZWYgX19pbml0X18oc2VsZiwgcnVubmVyPU5vbmUsIG9wdGlvbnM9Tm9uZSwgYXJndj1Ob25lKToKICAgICMgdHlwZTogKE9wdGlvbmFsW1VuaW9uW3N0ciwgUGlwZWxpbmVSdW5uZXJdXSwgT3B0aW9uYWxbUGlwZWxpbmVPcHRpb25zXSwgT3B0aW9uYWxbTGlzdFtzdHJdXSkgLT4gTm9uZQoKICAgICIiIkluaXRpYWxpemUgYSBwaXBlbGluZSBvYmplY3QuCgogICAgQXJnczoKICAgICAgcnVubmVyICh+YXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSdW5uZXIpOiBBbiBvYmplY3Qgb2YKICAgICAgICB0eXBlIDpjbGFzczpgfmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyYCB0aGF0IHdpbGwgYmUKICAgICAgICB1c2VkIHRvIGV4ZWN1dGUgdGhlIHBpcGVsaW5lLiBGb3IgcmVnaXN0ZXJlZCBydW5uZXJzLCB0aGUgcnVubmVyIG5hbWUKICAgICAgICBjYW4gYmUgc3BlY2lmaWVkLCBvdGhlcndpc2UgYSBydW5uZXIgb2JqZWN0IG11c3QgYmUgc3VwcGxpZWQuCiAgICAgIG9wdGlvbnMgKH5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zKToKICAgICAgICBBIGNvbmZpZ3VyZWQKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zYCBvYmplY3QKICAgICAgICBjb250YWluaW5nIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBydW5uaW5nIHRoZSBCZWFtIGpvYi4KICAgICAgYXJndiAoTGlzdFtzdHJdKTogYSBsaXN0IG9mIGFyZ3VtZW50cyAoc3VjaCBhcyA6ZGF0YTpgc3lzLmFyZ3ZgKQogICAgICAgIHRvIGJlIHVzZWQgZm9yIGJ1aWxkaW5nIGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMuUGlwZWxpbmVPcHRpb25zYCBvYmplY3QuCiAgICAgICAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhcmd1bWVudCAqKm9wdGlvbnMqKiBpcyA6ZGF0YTpgTm9uZWAuCgogICAgUmFpc2VzOgogICAgICBWYWx1ZUVycm9yOiBpZiBlaXRoZXIgdGhlIHJ1bm5lciBvciBvcHRpb25zIGFyZ3VtZW50IGlzIG5vdAogICAgICAgIG9mIHRoZSBleHBlY3RlZCB0eXBlLgogICAgIiIiCiAgICAjIEluaXRpYWxpemluZyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gaW4gY2FzZSB0aGUgdXNlciBkaWQgbm90IHNldCBpdCB1cC4KICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoKQoKICAgIGlmIG9wdGlvbnMgaXMgbm90IE5vbmU6CiAgICAgIGlmIGlzaW5zdGFuY2Uob3B0aW9ucywgUGlwZWxpbmVPcHRpb25zKToKICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdQYXJhbWV0ZXIgb3B0aW9ucywgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIG9mIHR5cGUgUGlwZWxpbmVPcHRpb25zLiAnCiAgICAgICAgICAgICdSZWNlaXZlZCA6ICVyJyAlIG9wdGlvbnMpCiAgICBlbGlmIGFyZ3YgaXMgbm90IE5vbmU6CiAgICAgIGlmIGlzaW5zdGFuY2UoYXJndiwgbGlzdCk6CiAgICAgICAgc2VsZi5fb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhhcmd2KQogICAgICBlbHNlOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdQYXJhbWV0ZXIgYXJndiwgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIGEgbGlzdC4gUmVjZWl2ZWQgOiAlcicgJQogICAgICAgICAgICBhcmd2KQogICAgZWxzZToKICAgICAgc2VsZi5fb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhbXSkKCiAgICBGaWxlU3lzdGVtcy5zZXRfb3B0aW9ucyhzZWxmLl9vcHRpb25zKQoKICAgIGlmIHJ1bm5lciBpcyBOb25lOgogICAgICBydW5uZXIgPSBzZWxmLl9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5ydW5uZXIKICAgICAgaWYgcnVubmVyIGlzIE5vbmU6CiAgICAgICAgcnVubmVyID0gU3RhbmRhcmRPcHRpb25zLkRFRkFVTFRfUlVOTkVSCiAgICAgICAgbG9nZ2luZy5pbmZvKCgKICAgICAgICAgICAgJ01pc3NpbmcgcGlwZWxpbmUgb3B0aW9uIChydW5uZXIpLiBFeGVjdXRpbmcgcGlwZWxpbmUgJwogICAgICAgICAgICAndXNpbmcgdGhlIGRlZmF1bHQgcnVubmVyOiAlcy4nKSwKICAgICAgICAgICAgICAgICAgICAgcnVubmVyKQoKICAgIGlmIGlzaW5zdGFuY2UocnVubmVyLCBzdHIpOgogICAgICBydW5uZXIgPSBjcmVhdGVfcnVubmVyKHJ1bm5lcikKICAgIGVsaWYgbm90IGlzaW5zdGFuY2UocnVubmVyLCBQaXBlbGluZVJ1bm5lcik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdSdW5uZXIgJXMgaXMgbm90IGEgUGlwZWxpbmVSdW5uZXIgb2JqZWN0IG9yIHRoZSAnCiAgICAgICAgICAnbmFtZSBvZiBhIHJlZ2lzdGVyZWQgcnVubmVyLicgJSBydW5uZXIpCgogICAgIyBWYWxpZGF0ZSBwaXBlbGluZSBvcHRpb25zCiAgICBlcnJvcnMgPSBQaXBlbGluZU9wdGlvbnNWYWxpZGF0b3Ioc2VsZi5fb3B0aW9ucywgcnVubmVyKS52YWxpZGF0ZSgpCiAgICBpZiBlcnJvcnM6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnUGlwZWxpbmUgaGFzIHZhbGlkYXRpb25zIGVycm9yczogXG4nICsgJ1xuJy5qb2luKGVycm9ycykpCgogICAgIyBzZXQgZGVmYXVsdCBleHBlcmltZW50cyBmb3IgcG9ydGFibGUgcnVubmVycwogICAgIyAobmVlZHMgdG8gb2NjdXIgcHJpb3IgdG8gcGlwZWxpbmUgY29uc3RydWN0aW9uKQogICAgaWYgcnVubmVyLmlzX2ZuYXBpX2NvbXBhdGlibGUoKToKICAgICAgZXhwZXJpbWVudHMgPSAoc2VsZi5fb3B0aW9ucy52aWV3X2FzKERlYnVnT3B0aW9ucykuZXhwZXJpbWVudHMgb3IgW10pCiAgICAgIGlmIG5vdCAnYmVhbV9mbl9hcGknIGluIGV4cGVyaW1lbnRzOgogICAgICAgIGV4cGVyaW1lbnRzLmFwcGVuZCgnYmVhbV9mbl9hcGknKQogICAgICAgIHNlbGYuX29wdGlvbnMudmlld19hcyhEZWJ1Z09wdGlvbnMpLmV4cGVyaW1lbnRzID0gZXhwZXJpbWVudHMKCiAgICAjIERlZmF1bHQgcnVubmVyIHRvIGJlIHVzZWQuCiAgICBzZWxmLnJ1bm5lciA9IHJ1bm5lcgogICAgIyBTdGFjayBvZiB0cmFuc2Zvcm1zIGdlbmVyYXRlZCBieSBuZXN0ZWQgYXBwbHkoKSBjYWxscy4gVGhlIHN0YWNrIHdpbGwKICAgICMgY29udGFpbiBhIHJvb3Qgbm9kZSBhcyBhbiBlbmNsb3NpbmcgKHBhcmVudCkgbm9kZSBmb3IgdG9wIHRyYW5zZm9ybXMuCiAgICBzZWxmLnRyYW5zZm9ybXNfc3RhY2sgPSBbQXBwbGllZFBUcmFuc2Zvcm0oTm9uZSwgTm9uZSwgJycsIE5vbmUpXQogICAgIyBTZXQgb2YgdHJhbnNmb3JtIGxhYmVscyAoZnVsbCBsYWJlbHMpIGFwcGxpZWQgdG8gdGhlIHBpcGVsaW5lLgogICAgIyBJZiBhIHRyYW5zZm9ybSBpcyBhcHBsaWVkIGFuZCB0aGUgZnVsbCBsYWJlbCBpcyBhbHJlYWR5IGluIHRoZSBzZXQKICAgICMgdGhlbiB0aGUgdHJhbnNmb3JtIHdpbGwgaGF2ZSB0byBiZSBjbG9uZWQgd2l0aCBhIG5ldyBsYWJlbC4KICAgIHNlbGYuYXBwbGllZF9sYWJlbHMgPSBzZXQoKSAgIyB0eXBlOiBTZXRbc3RyXQoKICBAcHJvcGVydHkgICMgdHlwZTogaWdub3JlW21pc2NdICAjIGRlY29yYXRlZCBwcm9wZXJ0eSBub3Qgc3VwcG9ydGVkCiAgQGRlcHJlY2F0ZWQoCiAgICAgIHNpbmNlPSdGaXJzdCBzdGFibGUgcmVsZWFzZScsCiAgICAgIGV4dHJhX21lc3NhZ2U9J1JlZmVyZW5jZXMgdG8gPHBpcGVsaW5lPi5vcHRpb25zJwogICAgICAnIHdpbGwgbm90IGJlIHN1cHBvcnRlZCcpCiAgZGVmIG9wdGlvbnMoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fb3B0aW9ucwoKICBkZWYgX2N1cnJlbnRfdHJhbnNmb3JtKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBBcHBsaWVkUFRyYW5zZm9ybQoKICAgICIiIlJldHVybnMgdGhlIHRyYW5zZm9ybSBjdXJyZW50bHkgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suIiIiCiAgICByZXR1cm4gc2VsZi50cmFuc2Zvcm1zX3N0YWNrWy0xXQoKICBkZWYgX3Jvb3RfdHJhbnNmb3JtKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBBcHBsaWVkUFRyYW5zZm9ybQoKICAgICIiIlJldHVybnMgdGhlIHJvb3QgdHJhbnNmb3JtIG9mIHRoZSB0cmFuc2Zvcm0gc3RhY2suIiIiCiAgICByZXR1cm4gc2VsZi50cmFuc2Zvcm1zX3N0YWNrWzBdCgogIGRlZiBfcmVtb3ZlX2xhYmVsc19yZWN1cnNpdmVseShzZWxmLCBhcHBsaWVkX3RyYW5zZm9ybSk6CiAgICAjIHR5cGU6IChBcHBsaWVkUFRyYW5zZm9ybSkgLT4gTm9uZQogICAgZm9yIHBhcnQgaW4gYXBwbGllZF90cmFuc2Zvcm0ucGFydHM6CiAgICAgIGlmIHBhcnQuZnVsbF9sYWJlbCBpbiBzZWxmLmFwcGxpZWRfbGFiZWxzOgogICAgICAgIHNlbGYuYXBwbGllZF9sYWJlbHMucmVtb3ZlKHBhcnQuZnVsbF9sYWJlbCkKICAgICAgICBzZWxmLl9yZW1vdmVfbGFiZWxzX3JlY3Vyc2l2ZWx5KHBhcnQpCgogIGRlZiBfcmVwbGFjZShzZWxmLCBvdmVycmlkZSk6CgogICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3ZlcnJpZGUsIFBUcmFuc2Zvcm1PdmVycmlkZSkKCiAgICAjIEZyb20gb3JpZ2luYWwgdHJhbnNmb3JtIG91dHB1dCAtLT4gcmVwbGFjZW1lbnQgdHJhbnNmb3JtIG91dHB1dAogICAgb3V0cHV0X21hcCA9IHt9CiAgICBvdXRwdXRfcmVwbGFjZW1lbnRzID0ge30KICAgIGlucHV0X3JlcGxhY2VtZW50cyA9IHt9CiAgICBzaWRlX2lucHV0X3JlcGxhY2VtZW50cyA9IHt9CgogICAgY2xhc3MgVHJhbnNmb3JtVXBkYXRlcihQaXBlbGluZVZpc2l0b3IpOiAgIyBweWxpbnQ6IGRpc2FibGU9dXNlZC1iZWZvcmUtYXNzaWdubWVudAogICAgICAiIiIiQSB2aXNpdG9yIHRoYXQgcmVwbGFjZXMgdGhlIG1hdGNoaW5nIFBUcmFuc2Zvcm1zLiIiIgogICAgICBkZWYgX19pbml0X18oc2VsZiwgcGlwZWxpbmUpOgogICAgICAgICMgdHlwZTogKFBpcGVsaW5lKSAtPiBOb25lCiAgICAgICAgc2VsZi5waXBlbGluZSA9IHBpcGVsaW5lCgogICAgICBkZWYgX3JlcGxhY2VfaWZfbmVlZGVkKHNlbGYsIG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlKToKICAgICAgICBpZiBvdmVycmlkZS5tYXRjaGVzKG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlKToKICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlLCBBcHBsaWVkUFRyYW5zZm9ybSkKICAgICAgICAgIHJlcGxhY2VtZW50X3RyYW5zZm9ybSA9IG92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oCiAgICAgICAgICAgICAgb3JpZ2luYWxfdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtKQogICAgICAgICAgaWYgcmVwbGFjZW1lbnRfdHJhbnNmb3JtIGlzIG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybToKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgICAgcmVwbGFjZW1lbnRfdHJhbnNmb3JtX25vZGUgPSBBcHBsaWVkUFRyYW5zZm9ybSgKICAgICAgICAgICAgICBvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZS5wYXJlbnQsCiAgICAgICAgICAgICAgcmVwbGFjZW1lbnRfdHJhbnNmb3JtLAogICAgICAgICAgICAgIG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsCiAgICAgICAgICAgICAgb3JpZ2luYWxfdHJhbnNmb3JtX25vZGUuaW5wdXRzKQoKICAgICAgICAgICMgVHJhbnNmb3JtIGV4ZWN1dGlvbiBjb3VsZCBkZXBlbmQgb24gb3JkZXIgaW4gd2hpY2ggbm9kZXMgYXJlCiAgICAgICAgICAjIGNvbnNpZGVyZWQuIEhlbmNlIHdlIGluc2VydCB0aGUgcmVwbGFjZW1lbnQgdHJhbnNmb3JtIG5vZGUgdG8gc2FtZQogICAgICAgICAgIyBpbmRleCBhcyB0aGUgb3JpZ2luYWwgdHJhbnNmb3JtIG5vZGUuIE5vdGUgdGhhdCB0aGlzIG9wZXJhdGlvbgogICAgICAgICAgIyByZW1vdmVzIHRoZSBvcmlnaW5hbCB0cmFuc2Zvcm0gbm9kZS4KICAgICAgICAgIGlmIG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlLnBhcmVudDoKICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3JpZ2luYWxfdHJhbnNmb3JtX25vZGUucGFyZW50LCBBcHBsaWVkUFRyYW5zZm9ybSkKICAgICAgICAgICAgcGFyZW50X3BhcnRzID0gb3JpZ2luYWxfdHJhbnNmb3JtX25vZGUucGFyZW50LnBhcnRzCiAgICAgICAgICAgIHBhcmVudF9wYXJ0c1twYXJlbnRfcGFydHMuaW5kZXgob3JpZ2luYWxfdHJhbnNmb3JtX25vZGUpXSA9ICgKICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50X3RyYW5zZm9ybV9ub2RlKQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBPcmlnaW5hbCB0cmFuc2Zvcm0gaGFzIHRvIGJlIGEgcm9vdC4KICAgICAgICAgICAgcm9vdHMgPSBzZWxmLnBpcGVsaW5lLnRyYW5zZm9ybXNfc3RhY2tbMF0ucGFydHMKICAgICAgICAgICAgYXNzZXJ0IG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlIGluIHJvb3RzCiAgICAgICAgICAgIHJvb3RzW3Jvb3RzLmluZGV4KG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlKV0gPSAoCiAgICAgICAgICAgICAgICByZXBsYWNlbWVudF90cmFuc2Zvcm1fbm9kZSkKCiAgICAgICAgICBpbnB1dHMgPSByZXBsYWNlbWVudF90cmFuc2Zvcm1fbm9kZS5pbnB1dHMKICAgICAgICAgICMgVE9ETzogIFN1cHBvcnQgcmVwbGFjaW5nIFBUcmFuc2Zvcm1zIHdpdGggbXVsdGlwbGUgaW5wdXRzLgogICAgICAgICAgaWYgbGVuKGlucHV0cykgPiAxOgogICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICAgICAgICAgJ1BUcmFuc2Zvcm0gb3ZlcnJpZGluZyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgUFRyYW5zZm9ybXMgdGhhdCAnCiAgICAgICAgICAgICAgICAnaGF2ZSBhIHNpbmdsZSBpbnB1dC4gVHJpZWQgdG8gcmVwbGFjZSBpbnB1dCBvZiAnCiAgICAgICAgICAgICAgICAnQXBwbGllZFBUcmFuc2Zvcm0gJXIgdGhhdCBoYXMgJWQgaW5wdXRzJyAlCiAgICAgICAgICAgICAgICBvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZSwKICAgICAgICAgICAgICAgIGxlbihpbnB1dHMpKQogICAgICAgICAgZWxpZiBsZW4oaW5wdXRzKSA9PSAxOgogICAgICAgICAgICBpbnB1dF9ub2RlID0gaW5wdXRzWzBdCiAgICAgICAgICBlbGlmIGxlbihpbnB1dHMpID09IDA6CiAgICAgICAgICAgIGlucHV0X25vZGUgPSBwdmFsdWUuUEJlZ2luKHNlbGYucGlwZWxpbmUpCgogICAgICAgICAgIyBXZSBoYXZlIHRvIGFkZCB0aGUgbmV3IEFwcGxpZWRUcmFuc2Zvcm0gdG8gdGhlIHN0YWNrIGJlZm9yZSBleHBhbmQoKQogICAgICAgICAgIyBhbmQgcG9wIGl0IG91dCBsYXRlciB0byBtYWtlIHN1cmUgdGhhdCBwYXJ0cyBnZXQgYWRkZWQgY29ycmVjdGx5LgogICAgICAgICAgc2VsZi5waXBlbGluZS50cmFuc2Zvcm1zX3N0YWNrLmFwcGVuZChyZXBsYWNlbWVudF90cmFuc2Zvcm1fbm9kZSkKCiAgICAgICAgICAjIEtlZXBpbmcgdGhlIHNhbWUgbGFiZWwgZm9yIHRoZSByZXBsYWNlZCBub2RlIGJ1dCByZWN1cnNpdmVseQogICAgICAgICAgIyByZW1vdmluZyBsYWJlbHMgb2YgY2hpbGQgdHJhbnNmb3JtcyBvZiBvcmlnaW5hbCB0cmFuc2Zvcm0gc2luY2UgdGhleQogICAgICAgICAgIyB3aWxsIGJlIHJlcGxhY2VkIGR1cmluZyB0aGUgZXhwYW5kIGJlbG93LiBUaGlzIGlzIG5lZWRlZCBpbiBjYXNlCiAgICAgICAgICAjIHRoZSByZXBsYWNlbWVudCBjb250YWlucyBjaGlsZHJlbiB0aGF0IGhhdmUgbGFiZWxzIHRoYXQgY29uZmxpY3RzCiAgICAgICAgICAjIHdpdGggbGFiZWxzIG9mIHRoZSBjaGlsZHJlbiBvZiB0aGUgb3JpZ2luYWwuCiAgICAgICAgICBzZWxmLnBpcGVsaW5lLl9yZW1vdmVfbGFiZWxzX3JlY3Vyc2l2ZWx5KG9yaWdpbmFsX3RyYW5zZm9ybV9ub2RlKQoKICAgICAgICAgIG5ld19vdXRwdXQgPSByZXBsYWNlbWVudF90cmFuc2Zvcm0uZXhwYW5kKGlucHV0X25vZGUpCiAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSgKICAgICAgICAgICAgICBuZXdfb3V0cHV0LCAoZGljdCwgcHZhbHVlLlBWYWx1ZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKSkKCiAgICAgICAgICBpZiBpc2luc3RhbmNlKG5ld19vdXRwdXQsIHB2YWx1ZS5QVmFsdWUpOgogICAgICAgICAgICBuZXdfb3V0cHV0LmVsZW1lbnRfdHlwZSA9IE5vbmUKICAgICAgICAgICAgc2VsZi5waXBlbGluZS5faW5mZXJfcmVzdWx0X3R5cGUoCiAgICAgICAgICAgICAgICByZXBsYWNlbWVudF90cmFuc2Zvcm0sIGlucHV0cywgbmV3X291dHB1dCkKCiAgICAgICAgICBpZiBpc2luc3RhbmNlKG5ld19vdXRwdXQsIGRpY3QpOgogICAgICAgICAgICBmb3IgbmV3X3RhZywgbmV3X3Bjb2xsIGluIG5ld19vdXRwdXQuaXRlbXMoKToKICAgICAgICAgICAgICByZXBsYWNlbWVudF90cmFuc2Zvcm1fbm9kZS5hZGRfb3V0cHV0KG5ld19wY29sbCwgbmV3X3RhZykKICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShuZXdfb3V0cHV0LCBwdmFsdWUuRG9PdXRwdXRzVHVwbGUpOgogICAgICAgICAgICByZXBsYWNlbWVudF90cmFuc2Zvcm1fbm9kZS5hZGRfb3V0cHV0KAogICAgICAgICAgICAgICAgbmV3X291dHB1dCwgbmV3X291dHB1dC5fbWFpbl90YWcpCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICByZXBsYWNlbWVudF90cmFuc2Zvcm1fbm9kZS5hZGRfb3V0cHV0KG5ld19vdXRwdXQsIG5ld19vdXRwdXQudGFnKQoKICAgICAgICAgICMgUmVjb3JkaW5nIHVwZGF0ZWQgb3V0cHV0cy4gVGhpcyBjYW5ub3QgYmUgZG9uZSBpbiB0aGUgc2FtZSB2aXNpdG9yCiAgICAgICAgICAjIHNpbmNlIGlmIHdlIGR5bmFtaWNhbGx5IHVwZGF0ZSBvdXRwdXQgdHlwZSBoZXJlLCB3ZSdsbCBydW4gaW50bwogICAgICAgICAgIyBlcnJvcnMgd2hlbiB2aXNpdGluZyBjaGlsZCBub2Rlcy4KICAgICAgICAgICMKICAgICAgICAgICMgTk9URTogV2hlbiByZXBsYWNpbmcgbXVsdGlwbGUgb3V0cHV0cywgdGhlIHJlcGxhY2VtZW50IFBDb2xsZWN0aW9uCiAgICAgICAgICAjIHRhZ3MgbXVzdCBoYXZlIGEgbWF0Y2hpbmcgdGFnIGluIHRoZSBvcmlnaW5hbCB0cmFuc2Zvcm0uCiAgICAgICAgICBpZiBpc2luc3RhbmNlKG5ld19vdXRwdXQsIHB2YWx1ZS5QVmFsdWUpOgogICAgICAgICAgICBpZiBub3QgbmV3X291dHB1dC5wcm9kdWNlcjoKICAgICAgICAgICAgICBuZXdfb3V0cHV0LnByb2R1Y2VyID0gcmVwbGFjZW1lbnRfdHJhbnNmb3JtX25vZGUKICAgICAgICAgICAgb3V0cHV0X21hcFtvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW25ld19vdXRwdXQudGFnXV0gPSBcCiAgICAgICAgICAgICAgICBuZXdfb3V0cHV0CiAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobmV3X291dHB1dCwgKHB2YWx1ZS5Eb091dHB1dHNUdXBsZSwgdHVwbGUpKToKICAgICAgICAgICAgZm9yIHBjb2xsIGluIG5ld19vdXRwdXQ6CiAgICAgICAgICAgICAgaWYgbm90IHBjb2xsLnByb2R1Y2VyOgogICAgICAgICAgICAgICAgcGNvbGwucHJvZHVjZXIgPSByZXBsYWNlbWVudF90cmFuc2Zvcm1fbm9kZQogICAgICAgICAgICAgIG91dHB1dF9tYXBbb3JpZ2luYWxfdHJhbnNmb3JtX25vZGUub3V0cHV0c1twY29sbC50YWddXSA9IHBjb2xsCiAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UobmV3X291dHB1dCwgZGljdCk6CiAgICAgICAgICAgIGZvciB0YWcsIHBjb2xsIGluIG5ld19vdXRwdXQuaXRlbXMoKToKICAgICAgICAgICAgICBpZiBub3QgcGNvbGwucHJvZHVjZXI6CiAgICAgICAgICAgICAgICBwY29sbC5wcm9kdWNlciA9IHJlcGxhY2VtZW50X3RyYW5zZm9ybV9ub2RlCiAgICAgICAgICAgICAgb3V0cHV0X21hcFtvcmlnaW5hbF90cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW3RhZ11dID0gcGNvbGwKCiAgICAgICAgICBzZWxmLnBpcGVsaW5lLnRyYW5zZm9ybXNfc3RhY2sucG9wKCkKCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICAjIHR5cGU6IChBcHBsaWVkUFRyYW5zZm9ybSkgLT4gTm9uZQogICAgICAgIHNlbGYuX3JlcGxhY2VfaWZfbmVlZGVkKHRyYW5zZm9ybV9ub2RlKQoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgIyB0eXBlOiAoQXBwbGllZFBUcmFuc2Zvcm0pIC0+IE5vbmUKICAgICAgICBzZWxmLl9yZXBsYWNlX2lmX25lZWRlZCh0cmFuc2Zvcm1fbm9kZSkKCiAgICBzZWxmLnZpc2l0KFRyYW5zZm9ybVVwZGF0ZXIoc2VsZikpCgogICAgIyBBZGp1c3RpbmcgaW5wdXRzIGFuZCBvdXRwdXRzCiAgICBjbGFzcyBJbnB1dE91dHB1dFVwZGF0ZXIoUGlwZWxpbmVWaXNpdG9yKTogICMgcHlsaW50OiBkaXNhYmxlPXVzZWQtYmVmb3JlLWFzc2lnbm1lbnQKICAgICAgIiIiIkEgdmlzaXRvciB0aGF0IHJlY29yZHMgaW5wdXQgYW5kIG91dHB1dCB2YWx1ZXMgdG8gYmUgcmVwbGFjZWQuCgogICAgICBJbnB1dCBhbmQgb3V0cHV0IHZhbHVlcyB0aGF0IHNob3VsZCBiZSB1cGRhdGVkIGFyZSByZWNvcmRlZCBpbiBtYXBzCiAgICAgIGlucHV0X3JlcGxhY2VtZW50cyBhbmQgb3V0cHV0X3JlcGxhY2VtZW50cyByZXNwZWN0aXZlbHkuCgogICAgICBXZSBjYW5ub3QgdXBkYXRlIGlucHV0IGFuZCBvdXRwdXQgdmFsdWVzIHdoaWxlIHZpc2l0aW5nIHNpbmNlIHRoYXQgcmVzdWx0cwogICAgICBpbiB2YWxpZGF0aW9uIGVycm9ycy4KICAgICAgIiIiCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaXBlbGluZSk6CiAgICAgICAgIyB0eXBlOiAoUGlwZWxpbmUpIC0+IE5vbmUKICAgICAgICBzZWxmLnBpcGVsaW5lID0gcGlwZWxpbmUKCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICAjIHR5cGU6IChBcHBsaWVkUFRyYW5zZm9ybSkgLT4gTm9uZQogICAgICAgIHNlbGYudmlzaXRfdHJhbnNmb3JtKHRyYW5zZm9ybV9ub2RlKQoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgIyB0eXBlOiAoQXBwbGllZFBUcmFuc2Zvcm0pIC0+IE5vbmUKICAgICAgICByZXBsYWNlX291dHB1dCA9IEZhbHNlCiAgICAgICAgZm9yIHRhZyBpbiB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzOgogICAgICAgICAgaWYgdHJhbnNmb3JtX25vZGUub3V0cHV0c1t0YWddIGluIG91dHB1dF9tYXA6CiAgICAgICAgICAgIHJlcGxhY2Vfb3V0cHV0ID0gVHJ1ZQogICAgICAgICAgICBicmVhawoKICAgICAgICByZXBsYWNlX2lucHV0ID0gRmFsc2UKICAgICAgICBmb3IgaW5wdXQgaW4gdHJhbnNmb3JtX25vZGUuaW5wdXRzOgogICAgICAgICAgaWYgaW5wdXQgaW4gb3V0cHV0X21hcDoKICAgICAgICAgICAgcmVwbGFjZV9pbnB1dCA9IFRydWUKICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgcmVwbGFjZV9zaWRlX2lucHV0cyA9IEZhbHNlCiAgICAgICAgZm9yIHNpZGVfaW5wdXQgaW4gdHJhbnNmb3JtX25vZGUuc2lkZV9pbnB1dHM6CiAgICAgICAgICBpZiBzaWRlX2lucHV0LnB2YWx1ZSBpbiBvdXRwdXRfbWFwOgogICAgICAgICAgICByZXBsYWNlX3NpZGVfaW5wdXRzID0gVHJ1ZQogICAgICAgICAgICBicmVhawoKICAgICAgICBpZiByZXBsYWNlX291dHB1dDoKICAgICAgICAgIG91dHB1dF9yZXBsYWNlbWVudHNbdHJhbnNmb3JtX25vZGVdID0gW10KICAgICAgICAgIGZvciBvcmlnaW5hbCwgcmVwbGFjZW1lbnQgaW4gb3V0cHV0X21hcC5pdGVtcygpOgogICAgICAgICAgICBpZiAob3JpZ2luYWwudGFnIGluIHRyYW5zZm9ybV9ub2RlLm91dHB1dHMgYW5kCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW29yaWdpbmFsLnRhZ10gaW4gb3V0cHV0X21hcCk6CiAgICAgICAgICAgICAgb3V0cHV0X3JlcGxhY2VtZW50c1t0cmFuc2Zvcm1fbm9kZV0uYXBwZW5kKAogICAgICAgICAgICAgICAgICAocmVwbGFjZW1lbnQsIG9yaWdpbmFsLnRhZykpCgogICAgICAgIGlmIHJlcGxhY2VfaW5wdXQ6CiAgICAgICAgICBuZXdfaW5wdXQgPSBbCiAgICAgICAgICAgICAgaW5wdXQgaWYgbm90IGlucHV0IGluIG91dHB1dF9tYXAgZWxzZSBvdXRwdXRfbWFwW2lucHV0XQogICAgICAgICAgICAgIGZvciBpbnB1dCBpbiB0cmFuc2Zvcm1fbm9kZS5pbnB1dHMKICAgICAgICAgIF0KICAgICAgICAgIGlucHV0X3JlcGxhY2VtZW50c1t0cmFuc2Zvcm1fbm9kZV0gPSBuZXdfaW5wdXQKCiAgICAgICAgaWYgcmVwbGFjZV9zaWRlX2lucHV0czoKICAgICAgICAgIG5ld19zaWRlX2lucHV0cyA9IFtdCiAgICAgICAgICBmb3Igc2lkZV9pbnB1dCBpbiB0cmFuc2Zvcm1fbm9kZS5zaWRlX2lucHV0czoKICAgICAgICAgICAgaWYgc2lkZV9pbnB1dC5wdmFsdWUgaW4gb3V0cHV0X21hcDoKICAgICAgICAgICAgICBzaWRlX2lucHV0LnB2YWx1ZSA9IG91dHB1dF9tYXBbc2lkZV9pbnB1dC5wdmFsdWVdCiAgICAgICAgICAgICAgbmV3X3NpZGVfaW5wdXRzLmFwcGVuZChzaWRlX2lucHV0KQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgIG5ld19zaWRlX2lucHV0cy5hcHBlbmQoc2lkZV9pbnB1dCkKICAgICAgICAgIHNpZGVfaW5wdXRfcmVwbGFjZW1lbnRzW3RyYW5zZm9ybV9ub2RlXSA9IG5ld19zaWRlX2lucHV0cwoKICAgIHNlbGYudmlzaXQoSW5wdXRPdXRwdXRVcGRhdGVyKHNlbGYpKQoKICAgIGZvciB0cmFuc2Zvcm0gaW4gb3V0cHV0X3JlcGxhY2VtZW50czoKICAgICAgZm9yIG91dHB1dCBpbiBvdXRwdXRfcmVwbGFjZW1lbnRzW3RyYW5zZm9ybV06CiAgICAgICAgdHJhbnNmb3JtLnJlcGxhY2Vfb3V0cHV0KG91dHB1dFswXSwgdGFnPW91dHB1dFsxXSkKCiAgICBmb3IgdHJhbnNmb3JtIGluIGlucHV0X3JlcGxhY2VtZW50czoKICAgICAgdHJhbnNmb3JtLmlucHV0cyA9IGlucHV0X3JlcGxhY2VtZW50c1t0cmFuc2Zvcm1dCgogICAgZm9yIHRyYW5zZm9ybSBpbiBzaWRlX2lucHV0X3JlcGxhY2VtZW50czoKICAgICAgdHJhbnNmb3JtLnNpZGVfaW5wdXRzID0gc2lkZV9pbnB1dF9yZXBsYWNlbWVudHNbdHJhbnNmb3JtXQoKICBkZWYgX2NoZWNrX3JlcGxhY2VtZW50KHNlbGYsIG92ZXJyaWRlKToKICAgIGNsYXNzIFJlcGxhY2VtZW50VmFsaWRhdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGlmIG92ZXJyaWRlLm1hdGNoZXModHJhbnNmb3JtX25vZGUpOgogICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICdUcmFuc2Zvcm0gbm9kZSAlciB3YXMgbm90IHJlcGxhY2VkIGFzIGV4cGVjdGVkLicgJQogICAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlKQoKICAgIHNlbGYudmlzaXQoUmVwbGFjZW1lbnRWYWxpZGF0b3IoKSkKCiAgZGVmIHJlcGxhY2VfYWxsKHNlbGYsIHJlcGxhY2VtZW50cyk6CiAgICAjIHR5cGU6IChJdGVyYWJsZVtQVHJhbnNmb3JtT3ZlcnJpZGVdKSAtPiBOb25lCgogICAgIiIiIER5bmFtaWNhbGx5IHJlcGxhY2VzIFBUcmFuc2Zvcm1zIGluIHRoZSBjdXJyZW50bHkgcG9wdWxhdGVkIGhpZXJhcmNoeS4KCiAgICBDdXJyZW50bHkgdGhpcyBvbmx5IHdvcmtzIGZvciByZXBsYWNlbWVudHMgd2hlcmUgaW5wdXQgYW5kIG91dHB1dCB0eXBlcwogICAgYXJlIGV4YWN0bHkgdGhlIHNhbWUuCgogICAgVE9ETzogVXBkYXRlIHRoaXMgdG8gYWxzbyB3b3JrIGZvciB0cmFuc2Zvcm0gb3ZlcnJpZGVzIHdoZXJlIGlucHV0IGFuZAogICAgb3V0cHV0IHR5cGVzIGFyZSBkaWZmZXJlbnQuCgogICAgQXJnczoKICAgICAgcmVwbGFjZW1lbnRzIChMaXN0W35hcGFjaGVfYmVhbS5waXBlbGluZS5QVHJhbnNmb3JtT3ZlcnJpZGVdKTogYSBsaXN0IG9mCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucGlwZWxpbmUuUFRyYW5zZm9ybU92ZXJyaWRlYCBvYmplY3RzLgogICAgIiIiCiAgICBmb3Igb3ZlcnJpZGUgaW4gcmVwbGFjZW1lbnRzOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdmVycmlkZSwgUFRyYW5zZm9ybU92ZXJyaWRlKQogICAgICBzZWxmLl9yZXBsYWNlKG92ZXJyaWRlKQoKICAgICMgQ2hlY2tpbmcgaWYgdGhlIFBUcmFuc2Zvcm1zIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgcmVwbGFjZWQuIFRoaXMgd2lsbAogICAgIyByZXN1bHQgaW4gYSBmYWlsdXJlIGlmIGEgUFRyYW5zZm9ybSB0aGF0IHdhcyByZXBsYWNlZCBpbiBhIGdpdmVuIG92ZXJyaWRlCiAgICAjIGdldHMgcmUtYWRkZWQgaW4gYSBzdWJzZXF1ZW50IG92ZXJyaWRlLiBUaGlzIGlzIG5vdCBhbGxvd2VkIGFuZCBvcmRlcmluZwogICAgIyBvZiBQVHJhbnNmb3JtT3ZlcnJpZGUgb2JqZWN0cyBpbiAncmVwbGFjZW1lbnRzJyBpcyBpbXBvcnRhbnQuCiAgICBmb3Igb3ZlcnJpZGUgaW4gcmVwbGFjZW1lbnRzOgogICAgICBzZWxmLl9jaGVja19yZXBsYWNlbWVudChvdmVycmlkZSkKCiAgZGVmIHJ1bihzZWxmLCB0ZXN0X3J1bm5lcl9hcGk9VHJ1ZSk6CiAgICAjIHR5cGU6ICguLi4pIC0+IFBpcGVsaW5lUmVzdWx0CgogICAgIiIiUnVucyB0aGUgcGlwZWxpbmUuIFJldHVybnMgd2hhdGV2ZXIgb3VyIHJ1bm5lciByZXR1cm5zIGFmdGVyIHJ1bm5pbmcuIiIiCgogICAgIyBXaGVuIHBvc3NpYmxlLCBpbnZva2UgYSByb3VuZCB0cmlwIHRocm91Z2ggdGhlIHJ1bm5lciBBUEkuCiAgICBpZiB0ZXN0X3J1bm5lcl9hcGkgYW5kIHNlbGYuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUoKToKICAgICAgcmV0dXJuIFBpcGVsaW5lLmZyb21fcnVubmVyX2FwaSgKICAgICAgICAgIHNlbGYudG9fcnVubmVyX2FwaSh1c2VfZmFrZV9jb2RlcnM9VHJ1ZSksIHNlbGYucnVubmVyLAogICAgICAgICAgc2VsZi5fb3B0aW9ucykucnVuKEZhbHNlKQoKICAgIGlmIHNlbGYuX29wdGlvbnMudmlld19hcyhUeXBlT3B0aW9ucykucnVudGltZV90eXBlX2NoZWNrOgogICAgICBmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgdHlwZWNoZWNrCiAgICAgIHNlbGYudmlzaXQodHlwZWNoZWNrLlR5cGVDaGVja1Zpc2l0b3IoKSkKCiAgICBpZiBzZWxmLl9vcHRpb25zLnZpZXdfYXMoU2V0dXBPcHRpb25zKS5zYXZlX21haW5fc2Vzc2lvbjoKICAgICAgIyBJZiB0aGlzIG9wdGlvbiBpcyBjaG9zZW4sIHZlcmlmeSB3ZSBjYW4gcGlja2xlIHRoZSBtYWluIHNlc3Npb24gZWFybHkuCiAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICB0cnk6CiAgICAgICAgcGlja2xlci5kdW1wX3Nlc3Npb24ob3MucGF0aC5qb2luKHRtcGRpciwgJ21haW5fc2Vzc2lvbi5waWNrbGUnKSkKICAgICAgZmluYWxseToKICAgICAgICBzaHV0aWwucm10cmVlKHRtcGRpcikKICAgIHJldHVybiBzZWxmLnJ1bm5lci5ydW5fcGlwZWxpbmUoc2VsZiwgc2VsZi5fb3B0aW9ucykKCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKICAgIGlmIG5vdCBleGNfdHlwZToKICAgICAgc2VsZi5ydW4oKS53YWl0X3VudGlsX2ZpbmlzaCgpCgogIGRlZiB2aXNpdChzZWxmLCB2aXNpdG9yKToKICAgICMgdHlwZTogKFBpcGVsaW5lVmlzaXRvcikgLT4gTm9uZQoKICAgICIiIlZpc2l0cyBkZXB0aC1maXJzdCBldmVyeSBub2RlIG9mIGEgcGlwZWxpbmUncyBEQUcuCgogICAgUnVubmVyLWludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbDsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcwoKICAgIEFyZ3M6CiAgICAgIHZpc2l0b3IgKH5hcGFjaGVfYmVhbS5waXBlbGluZS5QaXBlbGluZVZpc2l0b3IpOgogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnBpcGVsaW5lLlBpcGVsaW5lVmlzaXRvcmAgb2JqZWN0IHdob3NlIGNhbGxiYWNrcwogICAgICAgIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIG5vZGUgdmlzaXRlZC4gU2VlCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucGlwZWxpbmUuUGlwZWxpbmVWaXNpdG9yYCBjb21tZW50cy4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogaWYgbm9kZSBpcyBzcGVjaWZpZWQgYW5kIGlzIG5vdCBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBWYWx1ZWAuCiAgICAgIH5hcGFjaGVfYmVhbS5lcnJvci5QaXBlbGluZUVycm9yOiBpZiBub2RlIGlzIHNwZWNpZmllZCBhbmQgZG9lcyBub3QKICAgICAgICBiZWxvbmcgdG8gdGhpcyBwaXBlbGluZSBpbnN0YW5jZS4KICAgICIiIgoKICAgIHZpc2l0ZWQgPSBzZXQoKSAgIyB0eXBlOiBTZXRbcHZhbHVlLlBWYWx1ZV0KICAgIHNlbGYuX3Jvb3RfdHJhbnNmb3JtKCkudmlzaXQodmlzaXRvciwgc2VsZiwgdmlzaXRlZCkKCiAgZGVmIGFwcGx5KHNlbGYsIHRyYW5zZm9ybSwgcHZhbHVlaXNoPU5vbmUsIGxhYmVsPU5vbmUpOgogICAgIiIiQXBwbGllcyBhIGN1c3RvbSB0cmFuc2Zvcm0gdXNpbmcgdGhlIHB2YWx1ZWlzaCBzcGVjaWZpZWQuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtICh+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOiB0aGUKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0uUFRyYW5zZm9ybWAgdG8gYXBwbHkuCiAgICAgIHB2YWx1ZWlzaCAofmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbik6IHRoZSBpbnB1dCBmb3IgdGhlCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gICh0eXBpY2FsbHkgYQogICAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmApLgogICAgICBsYWJlbCAoc3RyKTogbGFiZWwgb2YgdGhlCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gLgoKICAgIFJhaXNlczoKICAgICAgVHlwZUVycm9yOiBpZiB0aGUgdHJhbnNmb3JtIG9iamVjdCBleHRyYWN0ZWQgZnJvbSB0aGUKICAgICAgICBhcmd1bWVudCBsaXN0IGlzIG5vdCBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtLlBUcmFuc2Zvcm1gLgogICAgICBSdW50aW1lRXJyb3I6IGlmIHRoZSB0cmFuc2Zvcm0gb2JqZWN0IHdhcyBhbHJlYWR5IGFwcGxpZWQgdG8KICAgICAgICB0aGlzIHBpcGVsaW5lIGFuZCBuZWVkcyB0byBiZSBjbG9uZWQgaW4gb3JkZXIgdG8gYXBwbHkgYWdhaW4uCiAgICAiIiIKICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtLCBwdHJhbnNmb3JtLl9OYW1lZFBUcmFuc2Zvcm0pOgogICAgICByZXR1cm4gc2VsZi5hcHBseSgKICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2Zvcm0sIHB2YWx1ZWlzaCwgbGFiZWwgb3IgdHJhbnNmb3JtLmxhYmVsKQoKICAgIGlmIG5vdCBpc2luc3RhbmNlKHRyYW5zZm9ybSwgcHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCJFeHBlY3RlZCBhIFBUcmFuc2Zvcm0gb2JqZWN0LCBnb3QgJXMiICUgdHJhbnNmb3JtKQoKICAgIGlmIGxhYmVsOgogICAgICAjIEZpeCBzZWxmLmxhYmVsIGFzIGl0IGlzIGluc3BlY3RlZCBieSBzb21lIFBUcmFuc2Zvcm0gb3BlcmF0aW9ucwogICAgICAjIChlLmcuIHRvIHByb2R1Y2UgZXJyb3IgbWVzc2FnZXMgZm9yIHR5cGUgaGludCB2aW9sYXRpb25zKS4KICAgICAgdHJ5OgogICAgICAgIG9sZF9sYWJlbCwgdHJhbnNmb3JtLmxhYmVsID0gdHJhbnNmb3JtLmxhYmVsLCBsYWJlbAogICAgICAgIHJldHVybiBzZWxmLmFwcGx5KHRyYW5zZm9ybSwgcHZhbHVlaXNoKQogICAgICBmaW5hbGx5OgogICAgICAgIHRyYW5zZm9ybS5sYWJlbCA9IG9sZF9sYWJlbAoKICAgICMgQXR0ZW1wdHMgdG8gYWx0ZXIgdGhlIGxhYmVsIG9mIHRoZSB0cmFuc2Zvcm0gdG8gYmUgYXBwbGllZCBvbmx5IHdoZW4gaXQncwogICAgIyBhIHRvcC1sZXZlbCB0cmFuc2Zvcm0gc28gdGhhdCB0aGUgY2VsbCBudW1iZXIgd2lsbCBub3QgYmUgcHJlcGVuZGVkIHRvCiAgICAjIGV2ZXJ5IGNoaWxkIHRyYW5zZm9ybSBpbiBhIGNvbXBvc2l0ZS4KICAgIGlmIHNlbGYuX2N1cnJlbnRfdHJhbnNmb3JtKCkgaXMgc2VsZi5fcm9vdF90cmFuc2Zvcm0oKToKICAgICAgYWx0ZXJfbGFiZWxfaWZfaXB5dGhvbih0cmFuc2Zvcm0sIHB2YWx1ZWlzaCkKCiAgICBmdWxsX2xhYmVsID0gJy8nLmpvaW4oCiAgICAgICAgW3NlbGYuX2N1cnJlbnRfdHJhbnNmb3JtKCkuZnVsbF9sYWJlbCwgbGFiZWwgb3IKICAgICAgICAgdHJhbnNmb3JtLmxhYmVsXSkubHN0cmlwKCcvJykKICAgIGlmIGZ1bGxfbGFiZWwgaW4gc2VsZi5hcHBsaWVkX2xhYmVsczoKICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgJ0EgdHJhbnNmb3JtIHdpdGggbGFiZWwgIiVzIiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcGlwZWxpbmUuICcKICAgICAgICAgICdUbyBhcHBseSBhIHRyYW5zZm9ybSB3aXRoIGEgc3BlY2lmaWVkIGxhYmVsIHdyaXRlICcKICAgICAgICAgICdwdmFsdWUgfCAibGFiZWwiID4+IHRyYW5zZm9ybScgJSBmdWxsX2xhYmVsKQogICAgc2VsZi5hcHBsaWVkX2xhYmVscy5hZGQoZnVsbF9sYWJlbCkKCiAgICBwdmFsdWVpc2gsIGlucHV0cyA9IHRyYW5zZm9ybS5fZXh0cmFjdF9pbnB1dF9wdmFsdWVzKHB2YWx1ZWlzaCkKICAgIHRyeToKICAgICAgaW5wdXRzID0gdHVwbGUoaW5wdXRzKQogICAgICBmb3IgbGVhZl9pbnB1dCBpbiBpbnB1dHM6CiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobGVhZl9pbnB1dCwgcHZhbHVlLlBWYWx1ZSk6CiAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnVW5hYmxlIHRvIGV4dHJhY3QgUFZhbHVlIGlucHV0cyBmcm9tICVzOyBlaXRoZXIgJXMgZG9lcyBub3QgYWNjZXB0ICcKICAgICAgICAgICdpbnB1dHMgb2YgdGhpcyBmb3JtYXQsIG9yIGl0IGRvZXMgbm90IHByb3Blcmx5IG92ZXJyaWRlICcKICAgICAgICAgICdfZXh0cmFjdF9pbnB1dF9wdmFsdWVzJyAlIChwdmFsdWVpc2gsIHRyYW5zZm9ybSkpCgogICAgY3VycmVudCA9IEFwcGxpZWRQVHJhbnNmb3JtKAogICAgICAgIHNlbGYuX2N1cnJlbnRfdHJhbnNmb3JtKCksIHRyYW5zZm9ybSwgZnVsbF9sYWJlbCwgaW5wdXRzKQogICAgc2VsZi5fY3VycmVudF90cmFuc2Zvcm0oKS5hZGRfcGFydChjdXJyZW50KQogICAgc2VsZi50cmFuc2Zvcm1zX3N0YWNrLmFwcGVuZChjdXJyZW50KQoKICAgIHR5cGVfb3B0aW9ucyA9IHNlbGYuX29wdGlvbnMudmlld19hcyhUeXBlT3B0aW9ucykKICAgIGlmIHR5cGVfb3B0aW9ucy5waXBlbGluZV90eXBlX2NoZWNrOgogICAgICB0cmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHMocHZhbHVlaXNoKQoKICAgIHB2YWx1ZWlzaF9yZXN1bHQgPSBzZWxmLnJ1bm5lci5hcHBseSh0cmFuc2Zvcm0sIHB2YWx1ZWlzaCwgc2VsZi5fb3B0aW9ucykKCiAgICBpZiB0eXBlX29wdGlvbnMgaXMgbm90IE5vbmUgYW5kIHR5cGVfb3B0aW9ucy5waXBlbGluZV90eXBlX2NoZWNrOgogICAgICB0cmFuc2Zvcm0udHlwZV9jaGVja19vdXRwdXRzKHB2YWx1ZWlzaF9yZXN1bHQpCgogICAgZm9yIHJlc3VsdCBpbiBwdHJhbnNmb3JtLmdldF9uZXN0ZWRfcHZhbHVlcyhwdmFsdWVpc2hfcmVzdWx0KToKICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocmVzdWx0LCAocHZhbHVlLlBWYWx1ZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKSkKCiAgICAgICMgTWFrZSBzdXJlIHdlIHNldCB0aGUgcHJvZHVjZXIgb25seSBmb3IgYSBsZWFmIG5vZGUgaW4gdGhlIHRyYW5zZm9ybSBEQUcuCiAgICAgICMgVGhpcyB3YXkgd2UgcHJlc2VydmUgdGhlIGxhc3QgdHJhbnNmb3JtIG9mIGEgY29tcG9zaXRlIHRyYW5zZm9ybSBhcwogICAgICAjIGJlaW5nIHRoZSByZWFsIHByb2R1Y2VyIG9mIHRoZSByZXN1bHQuCiAgICAgIGlmIHJlc3VsdC5wcm9kdWNlciBpcyBOb25lOgogICAgICAgIHJlc3VsdC5wcm9kdWNlciA9IGN1cnJlbnQKCiAgICAgIHNlbGYuX2luZmVyX3Jlc3VsdF90eXBlKHRyYW5zZm9ybSwgaW5wdXRzLCByZXN1bHQpCgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXN1bHQucHJvZHVjZXIuaW5wdXRzLCB0dXBsZSkKICAgICAgIyBUaGUgRG9PdXRwdXRzVHVwbGUgYWRkcyB0aGUgUENvbGxlY3Rpb24gdG8gdGhlIG91dHB1dHMgd2hlbiBhY2Nlc3NlZAogICAgICAjIGV4Y2VwdCBmb3IgdGhlIG1haW4gdGFnLiBBZGQgdGhlIG1haW4gdGFnIGhlcmUuCiAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBwdmFsdWUuRG9PdXRwdXRzVHVwbGUpOgogICAgICAgIGN1cnJlbnQuYWRkX291dHB1dChyZXN1bHQsIHJlc3VsdC5fbWFpbl90YWcpCiAgICAgICAgY29udGludWUKCiAgICAgICMgVE9ETyhCRUFNLTkzMjIpOiBSZW1vdmUgdGhlIGV4cGVyaW1lbnQgY2hlY2sgYW5kIGhhdmUgdGhpcyBjb25kaXRpb25hbAogICAgICAjIGJlIHRoZSBkZWZhdWx0LgogICAgICBpZiBzZWxmLl9vcHRpb25zLnZpZXdfYXMoRGVidWdPcHRpb25zKS5sb29rdXBfZXhwZXJpbWVudCgKICAgICAgICAgICdwYXNzdGhyb3VnaF9wY29sbGVjdGlvbl9vdXRwdXRfaWRzJywgZGVmYXVsdD1GYWxzZSk6CiAgICAgICAgIyBQYXNzdGhyb3VnaCB0aGUgUENvbGxlY3Rpb24gb3V0cHV0X2lkcyBmcm9tIHRoZSBQQ29sbGVjdGlvbiB0YWcuCiAgICAgICAgIyBPbmx5IGdlbmVyYXRlIGEgdGFnIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBQQ29sbGVjdGlvbnMgdGhhdCBoYXZlIGEKICAgICAgICAjIE5vbmUgdGFnLiBUaGlzIGhhcHBlbnMgd2hlbiByZXR1cm5pbmcgbXVsdGlwbGUgUENvbGxlY3Rpb25zIGZyb20gYQogICAgICAgICMgY29tcG9zaXRlLgogICAgICAgIGlmIHJlc3VsdC50YWcgaXMgTm9uZSBhbmQgTm9uZSBpbiBjdXJyZW50Lm91dHB1dHM6CiAgICAgICAgICB0YWcgPSBsZW4oY3VycmVudC5vdXRwdXRzKQogICAgICAgIGVsc2U6CiAgICAgICAgICB0YWcgPSByZXN1bHQudGFnCiAgICAgICAgY3VycmVudC5hZGRfb3V0cHV0KHJlc3VsdCwgdGFnKQogICAgICAgIGNvbnRpbnVlCgogICAgICAjIFRPRE8oQkVBTS05MzIyKTogRmluZCB0aGUgYmVzdCBhdXRvLWdlbmVyYXRlZCB0YWdzIGZvciBuZXN0ZWQKICAgICAgIyBQQ29sbGVjdGlvbnMuCiAgICAgICMgSWYgdGhlIHVzZXIgd2FudHMgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBvZiBhbHdheXMgZ2VuZXJhdGVkCiAgICAgICMgUENvbGxlY3Rpb24gb3V0cHV0IGlkcywgdGhlbiBzZXQgdGhlIHRhZyB0byBOb25lIGZpcnN0LCB0aGVuIGNvdW50IHVwCiAgICAgICMgZnJvbSAxLgogICAgICB0YWcgPSBsZW4oY3VycmVudC5vdXRwdXRzKSBpZiBOb25lIGluIGN1cnJlbnQub3V0cHV0cyBlbHNlIE5vbmUKICAgICAgY3VycmVudC5hZGRfb3V0cHV0KHJlc3VsdCwgdGFnKQoKICAgIGlmICh0eXBlX29wdGlvbnMgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgdHlwZV9vcHRpb25zLnR5cGVfY2hlY2tfc3RyaWN0bmVzcyA9PSAnQUxMX1JFUVVJUkVEJyBhbmQKICAgICAgICB0cmFuc2Zvcm0uZ2V0X3R5cGVfaGludHMoKS5vdXRwdXRfdHlwZXMgaXMgTm9uZSk6CiAgICAgIHB0cmFuc2Zvcm1fbmFtZSA9ICclcyglcyknICUgKHRyYW5zZm9ybS5fX2NsYXNzX18uX19uYW1lX18sIGZ1bGxfbGFiZWwpCiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgJ1BpcGVsaW5lIHR5cGUgY2hlY2tpbmcgaXMgZW5hYmxlZCwgaG93ZXZlciBubyAnCiAgICAgICAgICAnb3V0cHV0IHR5cGUtaGludCB3YXMgZm91bmQgZm9yIHRoZSAnCiAgICAgICAgICAnUFRyYW5zZm9ybSAlcycgJSBwdHJhbnNmb3JtX25hbWUpCgogICAgc2VsZi50cmFuc2Zvcm1zX3N0YWNrLnBvcCgpCiAgICByZXR1cm4gcHZhbHVlaXNoX3Jlc3VsdAoKICBkZWYgX2luZmVyX3Jlc3VsdF90eXBlKHNlbGYsIHRyYW5zZm9ybSwgaW5wdXRzLCByZXN1bHRfcGNvbGxlY3Rpb24pOgogICAgIyBUT0RPKHJvYmVydHdiKTogTXVsdGktaW5wdXQgaW5mZXJlbmNlLgogICAgdHlwZV9vcHRpb25zID0gc2VsZi5fb3B0aW9ucy52aWV3X2FzKFR5cGVPcHRpb25zKQogICAgaWYgdHlwZV9vcHRpb25zIGlzIE5vbmUgb3Igbm90IHR5cGVfb3B0aW9ucy5waXBlbGluZV90eXBlX2NoZWNrOgogICAgICByZXR1cm4KICAgIGlmIChpc2luc3RhbmNlKHJlc3VsdF9wY29sbGVjdGlvbiwgcHZhbHVlLlBDb2xsZWN0aW9uKSBhbmQKICAgICAgICAobm90IHJlc3VsdF9wY29sbGVjdGlvbi5lbGVtZW50X3R5cGUKICAgICAgICAgIyBUT0RPKHJvYmVydHdiKTogSWRlYWxseSB3ZSdkIGRvIGludGVyc2VjdGlvbiBoZXJlLgogICAgICAgICBvciByZXN1bHRfcGNvbGxlY3Rpb24uZWxlbWVudF90eXBlID09IHR5cGVoaW50cy5BbnkpKToKICAgICAgIyBTaW5nbGUtaW5wdXQsIHNpbmdsZS1vdXRwdXQgaW5mZXJlbmNlLgogICAgICBpbnB1dF9lbGVtZW50X3R5cGUgPSAoCiAgICAgICAgICBpbnB1dHNbMF0uZWxlbWVudF90eXBlIGlmIGxlbihpbnB1dHMpID09IDEgZWxzZSB0eXBlaGludHMuQW55KQogICAgICB0eXBlX2hpbnRzID0gdHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCkKICAgICAgZGVjbGFyZWRfb3V0cHV0X3R5cGUgPSB0eXBlX2hpbnRzLnNpbXBsZV9vdXRwdXRfdHlwZSh0cmFuc2Zvcm0ubGFiZWwpCiAgICAgIGlmIGRlY2xhcmVkX291dHB1dF90eXBlOgogICAgICAgIGlucHV0X3R5cGVzID0gdHlwZV9oaW50cy5pbnB1dF90eXBlcwogICAgICAgIGlmIGlucHV0X3R5cGVzIGFuZCBpbnB1dF90eXBlc1swXToKICAgICAgICAgIGRlY2xhcmVkX2lucHV0X3R5cGUgPSBpbnB1dF90eXBlc1swXVswXQogICAgICAgICAgcmVzdWx0X3Bjb2xsZWN0aW9uLmVsZW1lbnRfdHlwZSA9IHR5cGVoaW50cy5iaW5kX3R5cGVfdmFyaWFibGVzKAogICAgICAgICAgICAgIGRlY2xhcmVkX291dHB1dF90eXBlLAogICAgICAgICAgICAgIHR5cGVoaW50cy5tYXRjaF90eXBlX3ZhcmlhYmxlcygKICAgICAgICAgICAgICAgICAgZGVjbGFyZWRfaW5wdXRfdHlwZSwgaW5wdXRfZWxlbWVudF90eXBlKSkKICAgICAgICBlbHNlOgogICAgICAgICAgcmVzdWx0X3Bjb2xsZWN0aW9uLmVsZW1lbnRfdHlwZSA9IGRlY2xhcmVkX291dHB1dF90eXBlCiAgICAgIGVsc2U6CiAgICAgICAgcmVzdWx0X3Bjb2xsZWN0aW9uLmVsZW1lbnRfdHlwZSA9IHRyYW5zZm9ybS5pbmZlcl9vdXRwdXRfdHlwZSgKICAgICAgICAgICAgaW5wdXRfZWxlbWVudF90eXBlKQogICAgZWxpZiBpc2luc3RhbmNlKHJlc3VsdF9wY29sbGVjdGlvbiwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgIyBTaW5nbGUtaW5wdXQsIG11bHRpLW91dHB1dCBpbmZlcmVuY2UuCiAgICAgICMgVE9ETyhCRUFNLTQxMzIpOiBBZGQgc3VwcG9ydCBmb3IgdGFnZ2VkIHR5cGUgaGludHMuCiAgICAgICMgICBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL2JlYW0vcHVsbC85ODEwI2Rpc2N1c3Npb25fcjMzODc2NTI1MQogICAgICBmb3IgcGNvbGwgaW4gcmVzdWx0X3Bjb2xsZWN0aW9uOgogICAgICAgIGlmIHBjb2xsLmVsZW1lbnRfdHlwZSBpcyBOb25lOgogICAgICAgICAgcGNvbGwuZWxlbWVudF90eXBlID0gdHlwZWhpbnRzLkFueQoKICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICMgU29tZSB0cmFuc2Zvcm1zIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlaXIgZW5jbG9zaW5nIHBpcGVsaW5lLAogICAgIyB3aGljaCBpbiB0dXJuIHJlZmVyZW5jZSBhbGwgb3RoZXIgdHJhbnNmb3JtcyAocmVzdWx0aW5nIGluIHF1YWRyYXRpYwogICAgIyB0aW1lL3NwYWNlIHRvIHBpY2tsZSBlYWNoIHRyYW5zZm9ybSBpbmRpdmlkdWFsbHkpLiAgQXMgd2UgZG9uJ3QKICAgICMgcmVxdWlyZSBwaWNrbGVkIHBpcGVsaW5lcyB0byBiZSBleGVjdXRhYmxlLCBicmVhayB0aGUgY2hhaW4gaGVyZS4KICAgIHJldHVybiBzdHIsICgnUGlja2xlZCBwaXBlbGluZSBzdHViLicsICkKCiAgZGVmIF92ZXJpZnlfcnVubmVyX2FwaV9jb21wYXRpYmxlKHNlbGYpOgogICAgaWYgc2VsZi5fb3B0aW9ucy52aWV3X2FzKFR5cGVPcHRpb25zKS5ydW50aW1lX3R5cGVfY2hlY2s6CiAgICAgICMgVGhpcyBvcHRpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHJ1bm5lciBBUEkgYXMgaXQgcmVxdWlyZXMKICAgICAgIyB0aGUgcnVubmVyIHRvIGluc3BlY3Qgbm9uLXNlcmlhbGl6ZWQgaGludHMgb24gdGhlIHRyYW5zZm9ybQogICAgICAjIGl0c2VsZi4KICAgICAgcmV0dXJuIEZhbHNlCgogICAgY2xhc3MgVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOiAgIyBweWxpbnQ6IGRpc2FibGU9dXNlZC1iZWZvcmUtYXNzaWdubWVudAogICAgICBvayA9IFRydWUgICMgUmVhbGx5IGEgbm9ubG9jYWwuCgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgcGFzcwoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgdHJ5OgogICAgICAgICAgIyBUcmFuc2Zvcm1zIG11c3QgYmUgcGlja2xhYmxlLgogICAgICAgICAgcGlja2xlci5sb2FkcygKICAgICAgICAgICAgICBwaWNrbGVyLmR1bXBzKHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybSwgZW5hYmxlX3RyYWNlPUZhbHNlKSwKICAgICAgICAgICAgICBlbmFibGVfdHJhY2U9RmFsc2UpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgIFZpc2l0b3Iub2sgPSBGYWxzZQoKICAgICAgZGVmIHZpc2l0X3ZhbHVlKHNlbGYsIHZhbHVlLCBfKToKICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBwdmFsdWUuUERvbmUpOgogICAgICAgICAgVmlzaXRvci5vayA9IEZhbHNlCgogICAgc2VsZi52aXNpdChWaXNpdG9yKCkpCiAgICByZXR1cm4gVmlzaXRvci5vawoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLAogICAgICAgICAgICAgICAgICAgIHJldHVybl9jb250ZXh0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbUGlwZWxpbmVDb250ZXh0XQogICAgICAgICAgICAgICAgICAgIHVzZV9mYWtlX2NvZGVycz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2Vudmlyb25tZW50PU5vbmUgICMgdHlwZTogT3B0aW9uYWxbZW52aXJvbm1lbnRzLkVudmlyb25tZW50XQogICAgICAgICAgICAgICAgICAgKToKICAgICMgdHlwZTogKC4uLikgLT4gYmVhbV9ydW5uZXJfYXBpX3BiMi5QaXBlbGluZQoKICAgICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgcGlwZWxpbmVfY29udGV4dAogICAgZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKICAgIGlmIGNvbnRleHQgaXMgTm9uZToKICAgICAgY29udGV4dCA9IHBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0KAogICAgICAgICAgdXNlX2Zha2VfY29kZXJzPXVzZV9mYWtlX2NvZGVycywKICAgICAgICAgIGRlZmF1bHRfZW52aXJvbm1lbnQ9ZGVmYXVsdF9lbnZpcm9ubWVudCkKICAgIGVsaWYgZGVmYXVsdF9lbnZpcm9ubWVudCBpcyBub3QgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdPbmx5IG9uZSBvZiBjb250ZXh0IG9yIGRlZmF1bHRfZW52aXJvbm1lbnQgbWF5IGJlIHNwZWNpZmllZC4nKQoKICAgICMgVGhlIFJ1bm5lckFQSSBzcGVjIHJlcXVpcmVzIGNlcnRhaW4gdHJhbnNmb3JtcyBhbmQgc2lkZS1pbnB1dHMgdG8gaGF2ZSBLVgogICAgIyBpbnB1dHMgKGFuZCBjb3JyZXNwb25kaW5nIG91dHB1dHMpLgogICAgIyBDdXJyZW50bHkgd2Ugb25seSB1cGdyYWRlIHRvIEtWIHBhaXJzLiAgSWYgdGhlcmUgaXMgYSBuZWVkIGZvciBtb3JlCiAgICAjIGdlbmVyYWwgc2hhcGVzLCBwb3RlbnRpYWwgY29uZmxpY3RzIHdpbGwgaGF2ZSB0byBiZSByZXNvbHZlZC4KICAgICMgV2UgYWxzbyBvbmx5IGhhbmRsZSBzaW5nbGUtaW5wdXQsIGFuZCAoZm9yIGZpeGluZyB0aGUgb3V0cHV0KSBzaW5nbGUKICAgICMgb3V0cHV0LCB3aGljaCBpcyBzdWZmaWNpZW50LgogICAgY2xhc3MgRm9yY2VLdklucHV0VHlwZXMoUGlwZWxpbmVWaXNpdG9yKToKICAgICAgZGVmIGVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIHNlbGYudmlzaXRfdHJhbnNmb3JtKHRyYW5zZm9ybV9ub2RlKQoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgaWYgbm90IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybToKICAgICAgICAgIHJldHVybgogICAgICAgIGlmIHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybS5ydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KCk6CiAgICAgICAgICBwY29sbCA9IHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXQogICAgICAgICAgcGNvbGwuZWxlbWVudF90eXBlID0gdHlwZWhpbnRzLmNvZXJjZV90b19rdl90eXBlKAogICAgICAgICAgICAgIHBjb2xsLmVsZW1lbnRfdHlwZSwgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCkKICAgICAgICAgIGlmIGxlbih0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzKSA9PSAxOgogICAgICAgICAgICAjIFRoZSBydW5uZXIgb2Z0ZW4gaGFzIGV4cGVjdGF0aW9ucyBhYm91dCB0aGUgb3V0cHV0IHR5cGVzIGFzIHdlbGwuCiAgICAgICAgICAgIG91dHB1dCwgPSB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzLnZhbHVlcygpCiAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuZWxlbWVudF90eXBlOgogICAgICAgICAgICAgIG91dHB1dC5lbGVtZW50X3R5cGUgPSB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0uaW5mZXJfb3V0cHV0X3R5cGUoCiAgICAgICAgICAgICAgICAgIHBjb2xsLmVsZW1lbnRfdHlwZSkKICAgICAgICBmb3Igc2lkZV9pbnB1dCBpbiB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0uc2lkZV9pbnB1dHM6CiAgICAgICAgICBpZiBzaWRlX2lucHV0LnJlcXVpcmVzX2tleWVkX2lucHV0KCk6CiAgICAgICAgICAgIHNpZGVfaW5wdXQucHZhbHVlLmVsZW1lbnRfdHlwZSA9IHR5cGVoaW50cy5jb2VyY2VfdG9fa3ZfdHlwZSgKICAgICAgICAgICAgICAgIHNpZGVfaW5wdXQucHZhbHVlLmVsZW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsCiAgICAgICAgICAgICAgICBzaWRlX2lucHV0X3Byb2R1Y2VyPXNpZGVfaW5wdXQucHZhbHVlLnByb2R1Y2VyLmZ1bGxfbGFiZWwpCgogICAgc2VsZi52aXNpdChGb3JjZUt2SW5wdXRUeXBlcygpKQoKICAgICMgTXV0YXRlcyBjb250ZXh0OyBwbGFjaW5nIGlubGluZSB3b3VsZCBmb3JjZSBkZXBlbmRlbmNlIG9uCiAgICAjIGFyZ3VtZW50IGV2YWx1YXRpb24gb3JkZXIuCiAgICByb290X3RyYW5zZm9ybV9pZCA9IGNvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQoc2VsZi5fcm9vdF90cmFuc2Zvcm0oKSkKICAgIHByb3RvID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5QaXBlbGluZSgKICAgICAgICByb290X3RyYW5zZm9ybV9pZHM9W3Jvb3RfdHJhbnNmb3JtX2lkXSwKICAgICAgICBjb21wb25lbnRzPWNvbnRleHQudG9fcnVubmVyX2FwaSgpLAogICAgICAgIHJlcXVpcmVtZW50cz1jb250ZXh0LnJlcXVpcmVtZW50cygpKQogICAgcHJvdG8uY29tcG9uZW50cy50cmFuc2Zvcm1zW3Jvb3RfdHJhbnNmb3JtX2lkXS51bmlxdWVfbmFtZSA9ICgKICAgICAgICByb290X3RyYW5zZm9ybV9pZCkKICAgIGlmIHJldHVybl9jb250ZXh0OgogICAgICByZXR1cm4gcHJvdG8sIGNvbnRleHQgICMgdHlwZTogaWdub3JlICAjIHRvbyBjb21wbGljYXRlZCBmb3Igbm93CiAgICBlbHNlOgogICAgICByZXR1cm4gcHJvdG8KCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sICAjIHR5cGU6IGJlYW1fcnVubmVyX2FwaV9wYjIuUGlwZWxpbmUKICAgICAgICAgICAgICAgICAgICAgIHJ1bm5lciwgICMgdHlwZTogUGlwZWxpbmVSdW5uZXIKICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsICAjIHR5cGU6IFBpcGVsaW5lT3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnRleHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICBhbGxvd19wcm90b19ob2xkZXJzPUZhbHNlCiAgICAgICAgICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IFBpcGVsaW5lCgogICAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgogICAgcCA9IFBpcGVsaW5lKHJ1bm5lcj1ydW5uZXIsIG9wdGlvbnM9b3B0aW9ucykKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgcGlwZWxpbmVfY29udGV4dAogICAgY29udGV4dCA9IHBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0KAogICAgICAgIHByb3RvLmNvbXBvbmVudHMsCiAgICAgICAgYWxsb3dfcHJvdG9faG9sZGVycz1hbGxvd19wcm90b19ob2xkZXJzLAogICAgICAgIHJlcXVpcmVtZW50cz1wcm90by5yZXF1aXJlbWVudHMpCiAgICByb290X3RyYW5zZm9ybV9pZCwgPSBwcm90by5yb290X3RyYW5zZm9ybV9pZHMKICAgIHAudHJhbnNmb3Jtc19zdGFjayA9IFtjb250ZXh0LnRyYW5zZm9ybXMuZ2V0X2J5X2lkKHJvb3RfdHJhbnNmb3JtX2lkKV0KICAgICMgVE9ETyhyb2JlcnR3Yik6IFRoZXNlIGFyZSBvbmx5IG5lZWRlZCB0byBjb250aW51ZSBjb25zdHJ1Y3Rpb24uIE9taXQ/CiAgICBwLmFwcGxpZWRfbGFiZWxzID0gc2V0KAogICAgICAgIFt0LnVuaXF1ZV9uYW1lIGZvciB0IGluIHByb3RvLmNvbXBvbmVudHMudHJhbnNmb3Jtcy52YWx1ZXMoKV0pCiAgICBmb3IgaWQgaW4gcHJvdG8uY29tcG9uZW50cy5wY29sbGVjdGlvbnM6CiAgICAgIHBjb2xsZWN0aW9uID0gY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2J5X2lkKGlkKQogICAgICBwY29sbGVjdGlvbi5waXBlbGluZSA9IHAKICAgICAgaWYgbm90IHBjb2xsZWN0aW9uLnByb2R1Y2VyOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHByb2R1Y2VyIGZvciAlcycgJSBpZCkKCiAgICAjIEluamVjdCBQQmVnaW4gaW5wdXQgd2hlcmUgbmVjZXNzYXJ5LgogICAgZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlYWQKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBDcmVhdGUKICAgIGhhc19wYmVnaW4gPSBbUmVhZCwgQ3JlYXRlXQogICAgZm9yIGlkIGluIHByb3RvLmNvbXBvbmVudHMudHJhbnNmb3JtczoKICAgICAgdHJhbnNmb3JtID0gY29udGV4dC50cmFuc2Zvcm1zLmdldF9ieV9pZChpZCkKICAgICAgaWYgbm90IHRyYW5zZm9ybS5pbnB1dHMgYW5kIHRyYW5zZm9ybS50cmFuc2Zvcm0uX19jbGFzc19fIGluIGhhc19wYmVnaW46CiAgICAgICAgdHJhbnNmb3JtLmlucHV0cyA9IChwdmFsdWUuUEJlZ2luKHApLCApCgogICAgaWYgcmV0dXJuX2NvbnRleHQ6CiAgICAgIHJldHVybiBwLCBjb250ZXh0ICAjIHR5cGU6IGlnbm9yZSAgIyB0b28gY29tcGxpY2F0ZWQgZm9yIG5vdwogICAgZWxzZToKICAgICAgcmV0dXJuIHAKCgpjbGFzcyBQaXBlbGluZVZpc2l0b3Iob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFZpc2l0b3IgcGF0dGVybiBjbGFzcyB1c2VkIHRvIHRyYXZlcnNlIGEgREFHIG9mIHRyYW5zZm9ybXMKICAodXNlZCBpbnRlcm5hbGx5IGJ5IFBpcGVsaW5lIGZvciBib29rZWVwaW5nIHB1cnBvc2VzKS4KICAiIiIKICBkZWYgdmlzaXRfdmFsdWUoc2VsZiwgdmFsdWUsIHByb2R1Y2VyX25vZGUpOgogICAgIyB0eXBlOiAocHZhbHVlLlBWYWx1ZSwgQXBwbGllZFBUcmFuc2Zvcm0pIC0+IE5vbmUKCiAgICAiIiJDYWxsYmFjayBmb3IgdmlzaXRpbmcgYSBQVmFsdWUgaW4gdGhlIHBpcGVsaW5lIERBRy4KCiAgICBBcmdzOgogICAgICB2YWx1ZTogUFZhbHVlIHZpc2l0ZWQgKHR5cGljYWxseSBhIFBDb2xsZWN0aW9uIGluc3RhbmNlKS4KICAgICAgcHJvZHVjZXJfbm9kZTogQXBwbGllZFBUcmFuc2Zvcm0gb2JqZWN0IHdob3NlIHRyYW5zZm9ybSBwcm9kdWNlZCB0aGUKICAgICAgICBwdmFsdWUuCiAgICAiIiIKICAgIHBhc3MKCiAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAjIHR5cGU6IChBcHBsaWVkUFRyYW5zZm9ybSkgLT4gTm9uZQoKICAgICIiIkNhbGxiYWNrIGZvciB2aXNpdGluZyBhIHRyYW5zZm9ybSBsZWFmIG5vZGUgaW4gdGhlIHBpcGVsaW5lIERBRy4iIiIKICAgIHBhc3MKCiAgZGVmIGVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgIyB0eXBlOiAoQXBwbGllZFBUcmFuc2Zvcm0pIC0+IE5vbmUKCiAgICAiIiJDYWxsYmFjayBmb3IgZW50ZXJpbmcgdHJhdmVyc2FsIG9mIGEgY29tcG9zaXRlIHRyYW5zZm9ybSBub2RlLiIiIgogICAgcGFzcwoKICBkZWYgbGVhdmVfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAjIHR5cGU6IChBcHBsaWVkUFRyYW5zZm9ybSkgLT4gTm9uZQoKICAgICIiIkNhbGxiYWNrIGZvciBsZWF2aW5nIHRyYXZlcnNhbCBvZiBhIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gbm9kZS4iIiIKICAgIHBhc3MKCgpjbGFzcyBBcHBsaWVkUFRyYW5zZm9ybShvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSB0cmFuc2Zvcm0gbm9kZSByZXByZXNlbnRpbmcgYW4gaW5zdGFuY2Ugb2YgYXBwbHlpbmcgYSBQVHJhbnNmb3JtCiAgKHVzZWQgaW50ZXJuYWxseSBieSBQaXBlbGluZSBmb3IgYm9va2VlcGluZyBwdXJwb3NlcykuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBwYXJlbnQsCiAgICAgICAgICAgICAgIHRyYW5zZm9ybSwgICMgdHlwZTogT3B0aW9uYWxbcHRyYW5zZm9ybS5QVHJhbnNmb3JtXQogICAgICAgICAgICAgICBmdWxsX2xhYmVsLCAgIyB0eXBlOiBzdHIKICAgICAgICAgICAgICAgaW5wdXRzLCAgIyB0eXBlOiBPcHRpb25hbFtTZXF1ZW5jZVtVbmlvbltwdmFsdWUuUEJlZ2luLCBwdmFsdWUuUENvbGxlY3Rpb25dXV0KICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfaWQ9Tm9uZSAgIyB0eXBlOiBPcHRpb25hbFtzdHJdCiAgICAgICAgICAgICAgKToKICAgIHNlbGYucGFyZW50ID0gcGFyZW50CiAgICBzZWxmLnRyYW5zZm9ybSA9IHRyYW5zZm9ybQogICAgIyBOb3RlIHRoYXQgd2Ugd2FudCB0aGUgUGlwZWxpbmVWaXNpdG9yIGNsYXNzZXMgdG8gdXNlIHRoZSBmdWxsX2xhYmVsLAogICAgIyBpbnB1dHMsIHNpZGVfaW5wdXRzLCBhbmQgb3V0cHV0cyBmaWVsZHMgZnJvbSB0aGlzIGluc3RhbmNlIGluc3RlYWQgb2YgdGhlCiAgICAjIG9uZXMgb2YgdGhlIFBUcmFuc2Zvcm0gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LiBEb2luZyB0aGlzIHBlcm1pdHMKICAgICMgcmV1c2luZyBQVHJhbnNmb3JtIGluc3RhbmNlcyBpbiBkaWZmZXJlbnQgY29udGV4dHMgKGFwcGx5KCkgY2FsbHMpIHdpdGhvdXQKICAgICMgYW55IGludGVyZmVyZW5jZS4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBjb21wb3NpdGUgdHJhbnNmb3Jtcy4KICAgIHNlbGYuZnVsbF9sYWJlbCA9IGZ1bGxfbGFiZWwKICAgIHNlbGYuaW5wdXRzID0gaW5wdXRzIG9yICgpCgogICAgc2VsZi5zaWRlX2lucHV0cyA9ICgpIGlmIHRyYW5zZm9ybSBpcyBOb25lIGVsc2UgdHVwbGUoCiAgICAgICAgdHJhbnNmb3JtLnNpZGVfaW5wdXRzKSAgIyB0eXBlOiBUdXBsZVtwdmFsdWUuQXNTaWRlSW5wdXQsIC4uLl0KICAgIHNlbGYub3V0cHV0cyA9IHt9ICAjIHR5cGU6IERpY3RbVW5pb25bc3RyLCBpbnQsIE5vbmVdLCBwdmFsdWUuUFZhbHVlXQogICAgc2VsZi5wYXJ0cyA9IFtdICAjIHR5cGU6IExpc3RbQXBwbGllZFBUcmFuc2Zvcm1dCiAgICBzZWxmLmVudmlyb25tZW50X2lkID0gZW52aXJvbm1lbnRfaWQgaWYgZW52aXJvbm1lbnRfaWQgZWxzZSBOb25lICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICIlcyglcywgJXMpIiAlICgKICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5mdWxsX2xhYmVsLCB0eXBlKHNlbGYudHJhbnNmb3JtKS5fX25hbWVfXykKCiAgZGVmIHJlcGxhY2Vfb3V0cHV0KHNlbGYsCiAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgICMgdHlwZTogVW5pb25bcHZhbHVlLlBWYWx1ZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlXQogICAgICAgICAgICAgICAgICAgICB0YWc9Tm9uZSAgIyB0eXBlOiBVbmlvbltzdHIsIGludCwgTm9uZV0KICAgICAgICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBOb25lCgogICAgIiIiUmVwbGFjZXMgdGhlIG91dHB1dCBkZWZpbmVkIGJ5IHRoZSBnaXZlbiB0YWcgd2l0aCB0aGUgZ2l2ZW4gb3V0cHV0LgoKICAgIEFyZ3M6CiAgICAgIG91dHB1dDogcmVwbGFjZW1lbnQgb3V0cHV0CiAgICAgIHRhZzogdGFnIG9mIHRoZSBvdXRwdXQgdG8gYmUgcmVwbGFjZWQuCiAgICAiIiIKICAgIGlmIGlzaW5zdGFuY2Uob3V0cHV0LCBwdmFsdWUuRG9PdXRwdXRzVHVwbGUpOgogICAgICBzZWxmLnJlcGxhY2Vfb3V0cHV0KG91dHB1dFtvdXRwdXQuX21haW5fdGFnXSkKICAgIGVsaWYgaXNpbnN0YW5jZShvdXRwdXQsIHB2YWx1ZS5QVmFsdWUpOgogICAgICBzZWxmLm91dHB1dHNbdGFnXSA9IG91dHB1dAogICAgZWxpZiBpc2luc3RhbmNlKG91dHB1dCwgZGljdCk6CiAgICAgIGZvciBvdXRwdXRfdGFnLCBvdXQgaW4gb3V0cHV0Lml0ZW1zKCk6CiAgICAgICAgc2VsZi5vdXRwdXRzW291dHB1dF90YWddID0gb3V0CiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoIlVuZXhwZWN0ZWQgb3V0cHV0IHR5cGU6ICVzIiAlIG91dHB1dCkKCiAgZGVmIGFkZF9vdXRwdXQoc2VsZiwKICAgICAgICAgICAgICAgICBvdXRwdXQsICAjIHR5cGU6IFVuaW9uW3B2YWx1ZS5Eb091dHB1dHNUdXBsZSwgcHZhbHVlLlBWYWx1ZV0KICAgICAgICAgICAgICAgICB0YWcgICMgdHlwZTogVW5pb25bc3RyLCBpbnQsIE5vbmVdCiAgICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBOb25lCiAgICBpZiBpc2luc3RhbmNlKG91dHB1dCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgc2VsZi5hZGRfb3V0cHV0KG91dHB1dFt0YWddLCB0YWcpCiAgICBlbGlmIGlzaW5zdGFuY2Uob3V0cHV0LCBwdmFsdWUuUFZhbHVlKToKICAgICAgYXNzZXJ0IHRhZyBub3QgaW4gc2VsZi5vdXRwdXRzCiAgICAgIHNlbGYub3V0cHV0c1t0YWddID0gb3V0cHV0CiAgICBlbHNlOgogICAgICByYWlzZSBUeXBlRXJyb3IoIlVuZXhwZWN0ZWQgb3V0cHV0IHR5cGU6ICVzIiAlIG91dHB1dCkKCiAgZGVmIGFkZF9wYXJ0KHNlbGYsIHBhcnQpOgogICAgIyB0eXBlOiAoQXBwbGllZFBUcmFuc2Zvcm0pIC0+IE5vbmUKICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcnQsIEFwcGxpZWRQVHJhbnNmb3JtKQogICAgc2VsZi5wYXJ0cy5hcHBlbmQocGFydCkKCiAgZGVmIGlzX2NvbXBvc2l0ZShzZWxmKToKICAgICMgdHlwZTogKCkgLT4gYm9vbAoKICAgICIiIlJldHVybnMgd2hldGhlciB0aGlzIGlzIGEgY29tcG9zaXRlIHRyYW5zZm9ybS4KCiAgICBBIGNvbXBvc2l0ZSB0cmFuc2Zvcm0gaGFzIHBhcnRzIChpbm5lciB0cmFuc2Zvcm1zKSBvciBpc24ndCB0aGUKICAgIHByb2R1Y2VyIGZvciBhbnkgb2YgaXRzIG91dHB1dHMuIChBbiBleGFtcGxlIG9mIGEgdHJhbnNmb3JtIHRoYXQKICAgIGlzIG5vdCBhIHByb2R1Y2VyIGlzIG9uZSB0aGF0IHJldHVybnMgaXRzIGlucHV0cyBpbnN0ZWFkLikKICAgICIiIgogICAgcmV0dXJuIGJvb2woc2VsZi5wYXJ0cykgb3IgYWxsKAogICAgICAgIHB2YWwucHJvZHVjZXIgaXMgbm90IHNlbGYgZm9yIHB2YWwgaW4gc2VsZi5vdXRwdXRzLnZhbHVlcygpKQoKICBkZWYgdmlzaXQoc2VsZiwKICAgICAgICAgICAgdmlzaXRvciwgICMgdHlwZTogUGlwZWxpbmVWaXNpdG9yCiAgICAgICAgICAgIHBpcGVsaW5lLCAgIyB0eXBlOiBQaXBlbGluZQogICAgICAgICAgICB2aXNpdGVkICAjIHR5cGU6IFNldFtwdmFsdWUuUFZhbHVlXQogICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE5vbmUKCiAgICAiIiJWaXNpdHMgYWxsIG5vZGVzIHJlYWNoYWJsZSBmcm9tIHRoZSBjdXJyZW50IG5vZGUuIiIiCgogICAgZm9yIGluX3B2YWwgaW4gc2VsZi5pbnB1dHM6CiAgICAgIGlmIGluX3B2YWwgbm90IGluIHZpc2l0ZWQgYW5kIG5vdCBpc2luc3RhbmNlKGluX3B2YWwsIHB2YWx1ZS5QQmVnaW4pOgogICAgICAgIGlmIGluX3B2YWwucHJvZHVjZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICBpbl9wdmFsLnByb2R1Y2VyLnZpc2l0KHZpc2l0b3IsIHBpcGVsaW5lLCB2aXNpdGVkKQogICAgICAgICAgIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHZpc2l0ZWQgbm93IHNpbmNlIHdlIHZpc2l0IG91dHB1dHMgdG9vLgogICAgICAgICAgYXNzZXJ0IGluX3B2YWwgaW4gdmlzaXRlZCwgaW5fcHZhbAoKICAgICMgVmlzaXQgc2lkZSBpbnB1dHMuCiAgICBmb3Igc2lkZV9pbnB1dCBpbiBzZWxmLnNpZGVfaW5wdXRzOgogICAgICBpZiBpc2luc3RhbmNlKHNpZGVfaW5wdXQsIHB2YWx1ZS5Bc1NpZGVJbnB1dCkgXAogICAgICAgICAgYW5kIHNpZGVfaW5wdXQucHZhbHVlIG5vdCBpbiB2aXNpdGVkOgogICAgICAgIHB2YWwgPSBzaWRlX2lucHV0LnB2YWx1ZSAgIyBVbnBhY2sgbWFya2VyLW9iamVjdC13cmFwcGVkIHB2YWx1ZS4KICAgICAgICBpZiBwdmFsLnByb2R1Y2VyIGlzIG5vdCBOb25lOgogICAgICAgICAgcHZhbC5wcm9kdWNlci52aXNpdCh2aXNpdG9yLCBwaXBlbGluZSwgdmlzaXRlZCkKICAgICAgICAgICMgVGhlIHZhbHVlIHNob3VsZCBiZSB2aXNpdGVkIG5vdyBzaW5jZSB3ZSB2aXNpdCBvdXRwdXRzIHRvby4KICAgICAgICAgIGFzc2VydCBwdmFsIGluIHZpc2l0ZWQKICAgICAgICAgICMgVE9ETyhzaWx2aXVjKTogSXMgdGhlcmUgYSB3YXkgdG8gc2lnbmFsIHRoYXQgd2UgYXJlIHZpc2l0aW5nIGEgc2lkZQogICAgICAgICAgIyB2YWx1ZT8gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIHNhbWUgUFZhbHVlIGNhbiBiZSByZWFjaGFibGUgdGhyb3VnaAogICAgICAgICAgIyBtdWx0aXBsZSBwYXRocyBhbmQgdGhlcmVmb3JlIGl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXQgdGhlIHZhbHVlCiAgICAgICAgICAjIHdpbGwgYmUgdmlzaXRlZCBhcyBhIHNpZGUgdmFsdWUuCgogICAgIyBWaXNpdCBhIGNvbXBvc2l0ZSBvciBwcmltaXRpdmUgdHJhbnNmb3JtLgogICAgaWYgc2VsZi5pc19jb21wb3NpdGUoKToKICAgICAgdmlzaXRvci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYpCiAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydHM6CiAgICAgICAgcGFydC52aXNpdCh2aXNpdG9yLCBwaXBlbGluZSwgdmlzaXRlZCkKICAgICAgdmlzaXRvci5sZWF2ZV9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYpCiAgICBlbHNlOgogICAgICB2aXNpdG9yLnZpc2l0X3RyYW5zZm9ybShzZWxmKQoKICAgICMgVmlzaXQgdGhlIG91dHB1dHMgKG9uZSBvciBtb3JlKS4gSXQgaXMgZXNzZW50aWFsIHRvIG1hcmsgYXMgdmlzaXRlZCB0aGUKICAgICMgdGFnZ2VkIFBDb2xsZWN0aW9ucyBvZiB0aGUgRG9PdXRwdXRzVHVwbGUgb2JqZWN0LiBBIHRhZ2dlZCBQQ29sbGVjdGlvbiBpcwogICAgIyBjb25uZWN0ZWQgZGlyZWN0bHkgd2l0aCBpdHMgcHJvZHVjZXIgKGEgbXVsdGktb3V0cHV0IFBhckRvKSwgYnV0IHRoZQogICAgIyBvdXRwdXQgb2Ygc3VjaCBhIHRyYW5zZm9ybSBpcyB0aGUgY29udGFpbmluZyBEb091dHB1dHNUdXBsZSwgbm90IHRoZQogICAgIyBQQ29sbGVjdGlvbiBpbnNpZGUgaXQuIFdpdGhvdXQgdGhlIGNvZGUgYmVsb3cgYSB0YWdnZWQgUENvbGxlY3Rpb24gd2lsbAogICAgIyBub3QgYmUgbWFya2VkIGFzIHZpc2l0ZWQgd2hpbGUgdmlzaXRpbmcgaXRzIHByb2R1Y2VyLgogICAgZm9yIG91dF9wdmFsIGluIHNlbGYub3V0cHV0cy52YWx1ZXMoKToKICAgICAgaWYgaXNpbnN0YW5jZShvdXRfcHZhbCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIG91dF9wdmFsKQogICAgICBlbHNlOgogICAgICAgIHB2YWxzID0gKG91dF9wdmFsLCApCiAgICAgIGZvciB2IGluIHB2YWxzOgogICAgICAgIGlmIHYgbm90IGluIHZpc2l0ZWQ6CiAgICAgICAgICB2aXNpdGVkLmFkZCh2KQogICAgICAgICAgdmlzaXRvci52aXNpdF92YWx1ZSh2LCBzZWxmKQoKICBkZWYgbmFtZWRfaW5wdXRzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBEaWN0W3N0ciwgcHZhbHVlLlBDb2xsZWN0aW9uXQogICAgIyBUT0RPKEJFQU0tMTgzMyk6IFB1c2ggbmFtZXMgdXAgaW50byB0aGUgc2RrIGNvbnN0cnVjdGlvbi4KICAgIG1haW5faW5wdXRzID0gewogICAgICAgIHN0cihpeCk6IGlucHV0CiAgICAgICAgZm9yIGl4LAogICAgICAgIGlucHV0IGluIGVudW1lcmF0ZShzZWxmLmlucHV0cykKICAgICAgICBpZiBpc2luc3RhbmNlKGlucHV0LCBwdmFsdWUuUENvbGxlY3Rpb24pCiAgICB9CiAgICBzaWRlX2lucHV0cyA9IHsKICAgICAgICAnc2lkZSVzJyAlIGl4OiBzaS5wdmFsdWUKICAgICAgICBmb3IgaXgsIHNpIGluIGVudW1lcmF0ZShzZWxmLnNpZGVfaW5wdXRzKQogICAgfQogICAgcmV0dXJuIGRpY3QobWFpbl9pbnB1dHMsICoqc2lkZV9pbnB1dHMpCgogIGRlZiBuYW1lZF9vdXRwdXRzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBEaWN0W3N0ciwgcHZhbHVlLlBDb2xsZWN0aW9uXQogICAgcmV0dXJuIHsKICAgICAgICBzdHIodGFnKTogb3V0cHV0CiAgICAgICAgZm9yIHRhZywKICAgICAgICBvdXRwdXQgaW4gc2VsZi5vdXRwdXRzLml0ZW1zKCkKICAgICAgICBpZiBpc2luc3RhbmNlKG91dHB1dCwgcHZhbHVlLlBDb2xsZWN0aW9uKQogICAgfQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gYmVhbV9ydW5uZXJfYXBpX3BiMi5QVHJhbnNmb3JtCiAgICAjIEV4dGVybmFsIHRyYW5mb3JtcyByZXF1aXJlIG1vcmUgc3BsaWNpbmcgdGhhbiBqdXN0IHNldHRpbmcgdGhlIHNwZWMuCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGV4dGVybmFsCiAgICBpZiBpc2luc3RhbmNlKHNlbGYudHJhbnNmb3JtLCBleHRlcm5hbC5FeHRlcm5hbFRyYW5zZm9ybSk6CiAgICAgIHJldHVybiBzZWxmLnRyYW5zZm9ybS50b19ydW5uZXJfYXBpX3RyYW5zZm9ybShjb250ZXh0LCBzZWxmLmZ1bGxfbGFiZWwpCgogICAgZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKCiAgICBkZWYgdHJhbnNmb3JtX3RvX3J1bm5lcl9hcGkodHJhbnNmb3JtLCAgIyB0eXBlOiBPcHRpb25hbFtwdHJhbnNmb3JtLlBUcmFuc2Zvcm1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCAgIyB0eXBlOiBQaXBlbGluZUNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk6CiAgICAgICMgdHlwZTogKC4uLikgLT4gT3B0aW9uYWxbYmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWNdCiAgICAgIGlmIHRyYW5zZm9ybSBpcyBOb25lOgogICAgICAgIHJldHVybiBOb25lCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS50b19ydW5uZXJfYXBpKGNvbnRleHQsIGhhc19wYXJ0cz1ib29sKHNlbGYucGFydHMpKQoKICAgICMgSXRlcmF0ZSBvdmVyIGlucHV0cyBhbmQgb3V0cHV0cyBieSBzb3J0ZWQga2V5IG9yZGVyLCBzbyB0aGF0IGlkcyBhcmUKICAgICMgY29uc2lzdGVudGx5IGdlbmVyYXRlZCBmb3IgbXVsdGlwbGUgcnVucyBvZiB0aGUgc2FtZSBwaXBlbGluZS4KICAgIHRyYW5zZm9ybV9zcGVjID0gdHJhbnNmb3JtX3RvX3J1bm5lcl9hcGkoc2VsZi50cmFuc2Zvcm0sIGNvbnRleHQpCiAgICBlbnZpcm9ubWVudF9pZCA9IHNlbGYuZW52aXJvbm1lbnRfaWQKICAgIHRyYW5zZm9ybV91cm4gPSB0cmFuc2Zvcm1fc3BlYy51cm4gaWYgdHJhbnNmb3JtX3NwZWMgZWxzZSBOb25lCiAgICBpZiAobm90IGVudmlyb25tZW50X2lkIGFuZCB0cmFuc2Zvcm1fdXJuIGFuZAogICAgICAgICh0cmFuc2Zvcm1fdXJuIGluIFBpcGVsaW5lLnNka190cmFuc2Zvcm1zX3dpdGhfZW52aXJvbm1lbnQoKSkpOgogICAgICBlbnZpcm9ubWVudF9pZCA9IGNvbnRleHQuZGVmYXVsdF9lbnZpcm9ubWVudF9pZCgpCgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuUFRyYW5zZm9ybSgKICAgICAgICB1bmlxdWVfbmFtZT1zZWxmLmZ1bGxfbGFiZWwsCiAgICAgICAgc3BlYz10cmFuc2Zvcm1fc3BlYywKICAgICAgICBzdWJ0cmFuc2Zvcm1zPVsKICAgICAgICAgICAgY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZChwYXJ0LCBsYWJlbD1wYXJ0LmZ1bGxfbGFiZWwpCiAgICAgICAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydHMKICAgICAgICBdLAogICAgICAgIGlucHV0cz17CiAgICAgICAgICAgIHRhZzogY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2lkKHBjKQogICAgICAgICAgICBmb3IgdGFnLAogICAgICAgICAgICBwYyBpbiBzb3J0ZWQoc2VsZi5uYW1lZF9pbnB1dHMoKS5pdGVtcygpKQogICAgICAgIH0sCiAgICAgICAgb3V0cHV0cz17CiAgICAgICAgICAgIHN0cih0YWcpOiBjb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfaWQob3V0KQogICAgICAgICAgICBmb3IgdGFnLAogICAgICAgICAgICBvdXQgaW4gc29ydGVkKHNlbGYubmFtZWRfb3V0cHV0cygpLml0ZW1zKCkpCiAgICAgICAgfSwKICAgICAgICBlbnZpcm9ubWVudF9pZD1lbnZpcm9ubWVudF9pZCwKICAgICAgICAjIFRPRE8oQkVBTS0zNjYpOiBBZGQgZGlzcGxheV9kYXRhLgogICAgICAgIGRpc3BsYXlfZGF0YT1Ob25lKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgICMgdHlwZTogYmVhbV9ydW5uZXJfYXBpX3BiMi5QVHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ICAjIHR5cGU6IFBpcGVsaW5lQ29udGV4dAogICAgICAgICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBBcHBsaWVkUFRyYW5zZm9ybQogICAgZGVmIGlzX3NpZGVfaW5wdXQodGFnKToKICAgICAgIyBBcyBwZXIgbmFtZWRfaW5wdXRzKCkgYWJvdmUuCiAgICAgIHJldHVybiB0YWcuc3RhcnRzd2l0aCgnc2lkZScpCgogICAgbWFpbl9pbnB1dHMgPSBbCiAgICAgICAgY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2J5X2lkKGlkKSBmb3IgdGFnLAogICAgICAgIGlkIGluIHByb3RvLmlucHV0cy5pdGVtcygpIGlmIG5vdCBpc19zaWRlX2lucHV0KHRhZykKICAgIF0KCiAgICAjIE9yZGVyaW5nIGlzIGltcG9ydGFudCBoZXJlLgogICAgaW5kZXhlZF9zaWRlX2lucHV0cyA9IFsKICAgICAgICAoZ2V0X3NpZGVpbnB1dF9pbmRleCh0YWcpLCBjb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfYnlfaWQoaWQpKSBmb3IgdGFnLAogICAgICAgIGlkIGluIHByb3RvLmlucHV0cy5pdGVtcygpIGlmIGlzX3NpZGVfaW5wdXQodGFnKQogICAgXQogICAgc2lkZV9pbnB1dHMgPSBbc2kgZm9yIF8sIHNpIGluIHNvcnRlZChpbmRleGVkX3NpZGVfaW5wdXRzKV0KICAgIHRyYW5zZm9ybSA9IHB0cmFuc2Zvcm0uUFRyYW5zZm9ybS5mcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpCiAgICByZXN1bHQgPSBBcHBsaWVkUFRyYW5zZm9ybSgKICAgICAgICBwYXJlbnQ9Tm9uZSwKICAgICAgICB0cmFuc2Zvcm09dHJhbnNmb3JtLAogICAgICAgIGZ1bGxfbGFiZWw9cHJvdG8udW5pcXVlX25hbWUsCiAgICAgICAgaW5wdXRzPW1haW5faW5wdXRzLAogICAgICAgIGVudmlyb25tZW50X2lkPXByb3RvLmVudmlyb25tZW50X2lkKQogICAgaWYgcmVzdWx0LnRyYW5zZm9ybSBhbmQgcmVzdWx0LnRyYW5zZm9ybS5zaWRlX2lucHV0czoKICAgICAgZm9yIHNpLCBwY29sbCBpbiB6aXAocmVzdWx0LnRyYW5zZm9ybS5zaWRlX2lucHV0cywgc2lkZV9pbnB1dHMpOgogICAgICAgIHNpLnB2YWx1ZSA9IHBjb2xsCiAgICAgIHJlc3VsdC5zaWRlX2lucHV0cyA9IHR1cGxlKHJlc3VsdC50cmFuc2Zvcm0uc2lkZV9pbnB1dHMpCiAgICByZXN1bHQucGFydHMgPSBbXQogICAgZm9yIHRyYW5zZm9ybV9pZCBpbiBwcm90by5zdWJ0cmFuc2Zvcm1zOgogICAgICBwYXJ0ID0gY29udGV4dC50cmFuc2Zvcm1zLmdldF9ieV9pZCh0cmFuc2Zvcm1faWQpCiAgICAgIHBhcnQucGFyZW50ID0gcmVzdWx0CiAgICAgIHJlc3VsdC5wYXJ0cy5hcHBlbmQocGFydCkKICAgIHJlc3VsdC5vdXRwdXRzID0gewogICAgICAgIE5vbmUgaWYgdGFnID09ICdOb25lJyBlbHNlIHRhZzogY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2J5X2lkKGlkKQogICAgICAgIGZvciB0YWcsCiAgICAgICAgaWQgaW4gcHJvdG8ub3V0cHV0cy5pdGVtcygpCiAgICB9CiAgICAjIFRoaXMgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCBieSBzb21lIHJ1bm5lcnMuCiAgICBpZiBwcm90by5zcGVjLnVybiA9PSBjb21tb25fdXJucy5wcmltaXRpdmVzLlBBUl9ETy51cm46CiAgICAgICMgVE9ETyhCRUFNLTkxNjgpOiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gZm9yIFJ1bm5lckFQSVBUcmFuc2Zvcm1Ib2xkZXIuCiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdC50cmFuc2Zvcm0sIChQYXJEbywgUnVubmVyQVBJUFRyYW5zZm9ybUhvbGRlcikpLFwKICAgICAgICB0eXBlKHJlc3VsdC50cmFuc2Zvcm0pCiAgICAgIHJlc3VsdC50cmFuc2Zvcm0ub3V0cHV0X3RhZ3MgPSBzZXQocHJvdG8ub3V0cHV0cy5rZXlzKCkpLmRpZmZlcmVuY2UoCiAgICAgICAgICB7J05vbmUnfSkKICAgIGlmIG5vdCByZXN1bHQucGFydHM6CiAgICAgIGZvciB0YWcsIHBjb2xsX2lkIGluIHByb3RvLm91dHB1dHMuaXRlbXMoKToKICAgICAgICBpZiBwY29sbF9pZCBub3QgaW4gcHJvdG8uaW5wdXRzLnZhbHVlcygpOgogICAgICAgICAgcGMgPSBjb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfYnlfaWQocGNvbGxfaWQpCiAgICAgICAgICBwYy5wcm9kdWNlciA9IHJlc3VsdAogICAgICAgICAgcGMudGFnID0gTm9uZSBpZiB0YWcgPT0gJ05vbmUnIGVsc2UgdGFnCiAgICByZXR1cm4gcmVzdWx0CgoKY2xhc3MgUFRyYW5zZm9ybU92ZXJyaWRlKHdpdGhfbWV0YWNsYXNzKGFiYy5BQkNNZXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0KSk6ICAjIHR5cGU6IGlnbm9yZVttaXNjXQogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgR2l2ZXMgYSBtYXRjaGVyIGFuZCByZXBsYWNlbWVudHMgZm9yIG1hdGNoaW5nIFBUcmFuc2Zvcm1zLgoKICBUT0RPOiBVcGRhdGUgdGhpcyB0byBzdXBwb3J0IGNhc2VzIHdoZXJlIGlucHV0IGFuZC9vdXIgb3V0cHV0IHR5cGVzIGFyZQogIGRpZmZlcmVudC4KICAiIiIKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIG1hdGNoZXMoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICMgdHlwZTogKEFwcGxpZWRQVHJhbnNmb3JtKSAtPiBib29sCgogICAgIiIiRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBnaXZlbiBBcHBsaWVkUFRyYW5zZm9ybSBtYXRjaGVzLgoKICAgIE5vdGUgdGhhdCB0aGUgbWF0Y2hpbmcgd2lsbCBoYXBwZW4gKmFmdGVyKiBSdW5uZXIgQVBJIHByb3RvIHRyYW5zbGF0aW9uLgogICAgSWYgbWF0Y2hpbmcgaXMgZG9uZSB2aWEgdHlwZSBjaGVja3MsIHRvL2Zyb21fcnVubmVyX2FwaVtfcGFyYW1ldGVyXSBtZXRob2RzCiAgICBtdXN0IGJlIGltcGxlbWVudGVkIHRvIHByZXNlcnZlIHRoZSB0eXBlIChhbmQgb3RoZXIgZGF0YSkgdGhyb3VnaCBwcm90bwogICAgc2VyaWFsaXphdGlvbi4KCiAgICBDb25zaWRlciBVUk4tYmFzZWQgdHJhbnNsYXRpb24gaW5zdGVhZC4KCiAgICBBcmdzOgogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm06IEFwcGxpZWRQVHJhbnNmb3JtIHRvIGJlIG1hdGNoZWQuCgogICAgUmV0dXJuczoKICAgICAgYSBib29sIGluZGljYXRpbmcgd2hldGhlciB0aGUgZ2l2ZW4gQXBwbGllZFBUcmFuc2Zvcm0gaXMgYSBtYXRjaC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgcHRyYW5zZm9ybSk6CiAgICAjIHR5cGU6IChBcHBsaWVkUFRyYW5zZm9ybSkgLT4gQXBwbGllZFBUcmFuc2Zvcm0KCiAgICAiIiJQcm92aWRlcyBhIHJ1bm5lciBzcGVjaWZpYyBvdmVycmlkZSBmb3IgYSBnaXZlbiBQVHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHB0cmFuc2Zvcm06IFBUcmFuc2Zvcm0gdG8gYmUgcmVwbGFjZWQuCgogICAgUmV0dXJuczoKICAgICAgQSBQVHJhbnNmb3JtIHRoYXQgd2lsbCBiZSB0aGUgcmVwbGFjZW1lbnQgZm9yIHRoZSBQVHJhbnNmb3JtIGdpdmVuIGFzIGFuCiAgICAgIGFyZ3VtZW50LgogICAgIiIiCiAgICAjIFJldHVybnMgYSBQVHJhbnNmb3JtUmVwbGFjZW1lbnQKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKlJXWQgEAAAAAAH2UKIwoUGlwZWxpbmUuc2RrX3RyYW5zZm9ybXNfd2l0aF9lbnZpcm9ubWVudJRqVjEBAEt2S36HlIwRUGlwZWxpbmUuX19pbml0X1+UalYxAQBLgEvTh5SMEFBpcGVsaW5lLm9wdGlvbnOUalYxAQBL1Uvbh5SMG1BpcGVsaW5lLl9jdXJyZW50X3RyYW5zZm9ybZRqVjEBAEvdS+GHlIwYUGlwZWxpbmUuX3Jvb3RfdHJhbnNmb3JtlGpWMQEAS+NL54eUjCNQaXBlbGluZS5fcmVtb3ZlX2xhYmVsc19yZWN1cnNpdmVseZRqVjEBAEvpS+6HlIwrUGlwZWxpbmUuX3JlcGxhY2UuVHJhbnNmb3JtVXBkYXRlci5fX2luaXRfX5RqVjEBAEv8S/6HlIw1UGlwZWxpbmUuX3JlcGxhY2UuVHJhbnNmb3JtVXBkYXRlci5fcmVwbGFjZV9pZl9uZWVkZWSUalYxAQBNAAFNXwGHlIw8UGlwZWxpbmUuX3JlcGxhY2UuVHJhbnNmb3JtVXBkYXRlci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtlGpWMQEATWEBTWMBh5SMMlBpcGVsaW5lLl9yZXBsYWNlLlRyYW5zZm9ybVVwZGF0ZXIudmlzaXRfdHJhbnNmb3JtlGpWMQEATWUBTWcBh5SMIlBpcGVsaW5lLl9yZXBsYWNlLlRyYW5zZm9ybVVwZGF0ZXKUal0xAQBL+k1nAYeUjC1QaXBlbGluZS5fcmVwbGFjZS5JbnB1dE91dHB1dFVwZGF0ZXIuX19pbml0X1+UalYxAQBNdQFNdwGHlIw+UGlwZWxpbmUuX3JlcGxhY2UuSW5wdXRPdXRwdXRVcGRhdGVyLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm2UalYxAQBNeQFNewGHlIw0UGlwZWxpbmUuX3JlcGxhY2UuSW5wdXRPdXRwdXRVcGRhdGVyLnZpc2l0X3RyYW5zZm9ybZRqVjEBAE19AU2oAYeUjCRQaXBlbGluZS5fcmVwbGFjZS5JbnB1dE91dHB1dFVwZGF0ZXKUal0xAQBNbAFNqAGHlIwRUGlwZWxpbmUuX3JlcGxhY2WUalYxAQBL8E20AYeUjEBQaXBlbGluZS5fY2hlY2tfcmVwbGFjZW1lbnQuUmVwbGFjZW1lbnRWYWxpZGF0b3IudmlzaXRfdHJhbnNmb3JtlGpWMQEATbgBTbwBh5SMMFBpcGVsaW5lLl9jaGVja19yZXBsYWNlbWVudC5SZXBsYWNlbWVudFZhbGlkYXRvcpRqXTEBAE23AU28AYeUjBtQaXBlbGluZS5fY2hlY2tfcmVwbGFjZW1lbnSUalYxAQBNtgFNvgGHlIwUUGlwZWxpbmUucmVwbGFjZV9hbGyUalYxAQBNwAFN2AGHlIwMUGlwZWxpbmUucnVulGpWMQEATdoBTfABh5SMElBpcGVsaW5lLl9fZW50ZXJfX5RqVjEBAE3yAU3zAYeUjBFQaXBlbGluZS5fX2V4aXRfX5RqVjEBAE31AU33AYeUjA5QaXBlbGluZS52aXNpdJRqVjEBAE35AU0OAoeUjA5QaXBlbGluZS5hcHBseZRqVjEBAE0QAk2QAoeUjBtQaXBlbGluZS5faW5mZXJfcmVzdWx0X3R5cGWUalYxAQBNkgJNswKHlIwTUGlwZWxpbmUuX19yZWR1Y2VfX5RqVjEBAE21Ak26AoeUjEhQaXBlbGluZS5fdmVyaWZ5X3J1bm5lcl9hcGlfY29tcGF0aWJsZS5WaXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm2UalYxAQBNxgJNxwKHlIw+UGlwZWxpbmUuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUuVmlzaXRvci52aXNpdF90cmFuc2Zvcm2UalYxAQBNyQJN0AKHlIw6UGlwZWxpbmUuX3ZlcmlmeV9ydW5uZXJfYXBpX2NvbXBhdGlibGUuVmlzaXRvci52aXNpdF92YWx1ZZRqVjEBAE3SAk3UAoeUjC5QaXBlbGluZS5fdmVyaWZ5X3J1bm5lcl9hcGlfY29tcGF0aWJsZS5WaXNpdG9ylGpdMQEATcMCTdQCh5SMJlBpcGVsaW5lLl92ZXJpZnlfcnVubmVyX2FwaV9jb21wYXRpYmxllGpWMQEATbwCTdcCh5SMQlBpcGVsaW5lLnRvX3J1bm5lcl9hcGkuRm9yY2VLdklucHV0VHlwZXMuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybZRqVjEBAE3zAk30AoeUjDhQaXBlbGluZS50b19ydW5uZXJfYXBpLkZvcmNlS3ZJbnB1dFR5cGVzLnZpc2l0X3RyYW5zZm9ybZRqVjEBAE32Ak0IA4eUjChQaXBlbGluZS50b19ydW5uZXJfYXBpLkZvcmNlS3ZJbnB1dFR5cGVzlGpdMQEATfICTQgDh5SMFlBpcGVsaW5lLnRvX3J1bm5lcl9hcGmUalYxAQBN2QJNGAOHlIwYUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBplGpWMQEATRoDTUEDh5SMCFBpcGVsaW5llGpdMQEAS2VNQQOHlIwbUGlwZWxpbmVWaXNpdG9yLnZpc2l0X3ZhbHVllGpWMQEATUoDTVQDh5SMH1BpcGVsaW5lVmlzaXRvci52aXNpdF90cmFuc2Zvcm2UalYxAQBNVgNNWgOHlIwpUGlwZWxpbmVWaXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm2UalYxAQBNXANNYAOHlIwpUGlwZWxpbmVWaXNpdG9yLmxlYXZlX2NvbXBvc2l0ZV90cmFuc2Zvcm2UalYxAQBNYgNNZgOHlIwPUGlwZWxpbmVWaXNpdG9ylGpdMQEATUQDTWYDh5SMGkFwcGxpZWRQVHJhbnNmb3JtLl9faW5pdF9flGpWMQEATXADTYUDh5SMGkFwcGxpZWRQVHJhbnNmb3JtLl9fcmVwcl9flGpWMQEATYcDTYkDh5SMIEFwcGxpZWRQVHJhbnNmb3JtLnJlcGxhY2Vfb3V0cHV0lGpWMQEATYsDTZ8Dh5SMHEFwcGxpZWRQVHJhbnNmb3JtLmFkZF9vdXRwdXSUalYxAQBNoQNNrAOHlIwaQXBwbGllZFBUcmFuc2Zvcm0uYWRkX3BhcnSUalYxAQBNrgNNsQOHlIweQXBwbGllZFBUcmFuc2Zvcm0uaXNfY29tcG9zaXRllGpWMQEATbMDTb0Dh5SMF0FwcGxpZWRQVHJhbnNmb3JtLnZpc2l0lGpWMQEATb8DTfQDh5SMHkFwcGxpZWRQVHJhbnNmb3JtLm5hbWVkX2lucHV0c5RqVjEBAE32A00DBIeUjB9BcHBsaWVkUFRyYW5zZm9ybS5uYW1lZF9vdXRwdXRzlGpWMQEATQUETQwEh5SMH0FwcGxpZWRQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGmUalYxAQBNDgRNPASHlIwhQXBwbGllZFBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBplGpWMQEATT4ETXQEh5SMEUFwcGxpZWRQVHJhbnNmb3JtlGpdMQEATWkDTXQEh5SMGlBUcmFuc2Zvcm1PdmVycmlkZS5tYXRjaGVzlGpWMQEATYAETZMEh5SMLFBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtlGpWMQEATZUETaMEh5SMElBUcmFuc2Zvcm1PdmVycmlkZZRqXTEBAE13BE2jBIeUdX2UKIwIUGlwZWxpbmWUajgDAACMKFBpcGVsaW5lLnNka190cmFuc2Zvcm1zX3dpdGhfZW52aXJvbm1lbnSUajgDAACMFFBpcGVsaW5lLnJlcGxhY2VfYWxslGo4AwAAjAxQaXBlbGluZS5ydW6UajgDAACMDlBpcGVsaW5lLnZpc2l0lGo4AwAAjA5QaXBlbGluZS5hcHBseZRqOAMAAIwWUGlwZWxpbmUudG9fcnVubmVyX2FwaZRqOAMAAIwYUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBplGo4AwAAjBJQVHJhbnNmb3JtT3ZlcnJpZGWUajgDAACMGlBUcmFuc2Zvcm1PdmVycmlkZS5tYXRjaGVzlGo4AwAAjCxQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqOAMAAHWMFGFwYWNoZV9iZWFtLnBpcGVsaW5llHSUjDZhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX2dycGOUKFifFAAAZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIyBHZW5lcmF0ZWQgYnkgdGhlIGdSUEMgUHl0aG9uIHByb3RvY29sIGNvbXBpbGVyIHBsdWdpbi4gRE8gTk9UIEVESVQhCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAppbXBvcnQgZ3JwYwoKZnJvbSAuIGltcG9ydCBiZWFtX2FydGlmYWN0X2FwaV9wYjIgYXMgYmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyCgoKY2xhc3MgQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWIob2JqZWN0KToKICAiIiJBIHNlcnZpY2UgdG8gc3RhZ2UgYXJ0aWZhY3RzIGZvciB1c2UgaW4gYSBKb2IuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLlB1dEFydGlmYWN0ID0gY2hhbm5lbC5zdHJlYW1fdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuQXJ0aWZhY3RTdGFnaW5nU2VydmljZS9QdXRBcnRpZmFjdCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5QdXRBcnRpZmFjdFJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5QdXRBcnRpZmFjdFJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5Db21taXRNYW5pZmVzdCA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuQXJ0aWZhY3RTdGFnaW5nU2VydmljZS9Db21taXRNYW5pZmVzdCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5Db21taXRNYW5pZmVzdFJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5Db21taXRNYW5pZmVzdFJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcihvYmplY3QpOgogICIiIkEgc2VydmljZSB0byBzdGFnZSBhcnRpZmFjdHMgZm9yIHVzZSBpbiBhIEpvYi4KICAiIiIKCiAgZGVmIFB1dEFydGlmYWN0KHNlbGYsIHJlcXVlc3RfaXRlcmF0b3IsIGNvbnRleHQpOgogICAgIiIiU3RhZ2UgYW4gYXJ0aWZhY3QgdG8gYmUgYXZhaWxhYmxlIGR1cmluZyBqb2IgZXhlY3V0aW9uLiBUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGNvbnRhaW4gdGhlCiAgICBuYW1lIG9mIHRoZSBhcnRpZmFjdC4gQWxsIGZ1dHVyZSByZXF1ZXN0cyBtdXN0IGNvbnRhaW4gc2VxdWVudGlhbCBjaHVua3Mgb2YgdGhlIGNvbnRlbnQgb2YKICAgIHRoZSBhcnRpZmFjdC4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgZGVmIENvbW1pdE1hbmlmZXN0KHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiQ29tbWl0IHRoZSBtYW5pZmVzdCBmb3IgYSBKb2IuIEFsbCBhcnRpZmFjdHMgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkCiAgICBiZWZvcmUgdGhpcyBjYWxsIGlzIG1hZGUuCgogICAgVGhyb3dzIGVycm9yIElOVkFMSURfQVJHVU1FTlQgaWYgbm90IGFsbCBvZiB0aGUgbWVtYmVycyBvZiB0aGUgbWFuaWZlc3QgYXJlIHByZXNlbnQKICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0FydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ1B1dEFydGlmYWN0JzogZ3JwYy5zdHJlYW1fdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuUHV0QXJ0aWZhY3QsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuUHV0QXJ0aWZhY3RSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5QdXRBcnRpZmFjdFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnQ29tbWl0TWFuaWZlc3QnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkNvbW1pdE1hbmlmZXN0LAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyLkNvbW1pdE1hbmlmZXN0UmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuQ29tbWl0TWFuaWZlc3RSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkFydGlmYWN0U3RhZ2luZ1NlcnZpY2UnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQoKCmNsYXNzIEFydGlmYWN0UmV0cmlldmFsU2VydmljZVN0dWIob2JqZWN0KToKICAiIiJBIHNlcnZpY2UgdG8gcmV0cmlldmUgYXJ0aWZhY3RzIGZvciB1c2UgaW4gYSBKb2IuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkdldE1hbmlmZXN0ID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2UvR2V0TWFuaWZlc3QnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuR2V0TWFuaWZlc3RSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuR2V0TWFuaWZlc3RSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuR2V0QXJ0aWZhY3QgPSBjaGFubmVsLnVuYXJ5X3N0cmVhbSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2UvR2V0QXJ0aWZhY3QnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuR2V0QXJ0aWZhY3RSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuQXJ0aWZhY3RDaHVuay5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlcihvYmplY3QpOgogICIiIkEgc2VydmljZSB0byByZXRyaWV2ZSBhcnRpZmFjdHMgZm9yIHVzZSBpbiBhIEpvYi4KICAiIiIKCiAgZGVmIEdldE1hbmlmZXN0KHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiR2V0IHRoZSBtYW5pZmVzdCBmb3IgdGhlIGpvYgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgR2V0QXJ0aWZhY3Qoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJHZXQgYW4gYXJ0aWZhY3Qgc3RhZ2VkIGZvciB0aGUgam9iLiBUaGUgcmVxdWVzdGVkIGFydGlmYWN0IG11c3QgYmUgd2l0aGluIHRoZSBtYW5pZmVzdAogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdHZXRNYW5pZmVzdCc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuR2V0TWFuaWZlc3QsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19hcnRpZmFjdF9fYXBpX19wYjIuR2V0TWFuaWZlc3RSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5HZXRNYW5pZmVzdFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnR2V0QXJ0aWZhY3QnOiBncnBjLnVuYXJ5X3N0cmVhbV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5HZXRBcnRpZmFjdCwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2FydGlmYWN0X19hcGlfX3BiMi5HZXRBcnRpZmFjdFJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fYXJ0aWZhY3RfX2FwaV9fcGIyLkFydGlmYWN0Q2h1bmsuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5BcnRpZmFjdFJldHJpZXZhbFNlcnZpY2UnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQqUfZQojCNBcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU3R1Yi5fX2luaXRfX5RqVjEBAEsNSxyHlIwaQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWKUal0xAQBLCUsch5SMKkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlci5QdXRBcnRpZmFjdJRqVjEBAEsjSyqHlIwtQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyLkNvbW1pdE1hbmlmZXN0lGpWMQEASyxLNIeUjB5BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXKUal0xAQBLH0s0h5SMLGFkZF9BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGpWMQEASzdLRoeUjCVBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTdHViLl9faW5pdF9flGpWMQEAS01LXIeUjBxBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTdHVilGpdMQEAS0lLXIeUjCxBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlci5HZXRNYW5pZmVzdJRqVjEBAEtjS2iHlIwsQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIuR2V0QXJ0aWZhY3SUalYxAQBLaktvh5SMIEFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VylGpdMQEAS19Lb4eUjC5hZGRfQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGpWMQEAS3JLgYeUdX2UKIwaQXJ0aWZhY3RTdGFnaW5nU2VydmljZVN0dWKUatcDAACMHkFydGlmYWN0U3RhZ2luZ1NlcnZpY2VTZXJ2aWNlcpRq1wMAAIwqQXJ0aWZhY3RTdGFnaW5nU2VydmljZVNlcnZpY2VyLlB1dEFydGlmYWN0lGrXAwAAjC1BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXIuQ29tbWl0TWFuaWZlc3SUatcDAACMLGFkZF9BcnRpZmFjdFN0YWdpbmdTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGrXAwAAjBxBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTdHVilGrXAwAAjCBBcnRpZmFjdFJldHJpZXZhbFNlcnZpY2VTZXJ2aWNlcpRq1wMAAIwsQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXIuR2V0TWFuaWZlc3SUatcDAACMLEFydGlmYWN0UmV0cmlldmFsU2VydmljZVNlcnZpY2VyLkdldEFydGlmYWN0lGrXAwAAjC5hZGRfQXJ0aWZhY3RSZXRyaWV2YWxTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGrXAwAAdYw2YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl9ncnBjlHSUjDZhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9hcnRpZmFjdF9hcGlfcGIyX3VybnOUKFipAQAAZnJvbSAuLnV0aWxzIGltcG9ydCBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZQpmcm9tIC4gaW1wb3J0IG1ldHJpY3NfcGIyCkVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUyA9IG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvTGFiZWxQcm9wcygpCkVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDID0gbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9TcGVjKCkKCmNsYXNzIENvbW1pdE1hbmlmZXN0UmVzcG9uc2Uob2JqZWN0KToKCiAgY2xhc3MgQ29uc3RhbnRzKG9iamVjdCk6CiAgICBOT19BUlRJRkFDVFNfU1RBR0VEX1RPS0VOID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICdfX25vX2FydGlmYWN0c19zdGFnZWRfXycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCgqUfZQojCBDb21taXRNYW5pZmVzdFJlc3BvbnNlLkNvbnN0YW50c5RqXTEBAEsISwmHlIwWQ29tbWl0TWFuaWZlc3RSZXNwb25zZZRqXTEBAEsGSwmHlHV9lCiMFkNvbW1pdE1hbmlmZXN0UmVzcG9uc2WUakADAACMIENvbW1pdE1hbmlmZXN0UmVzcG9uc2UuQ29uc3RhbnRzlGpAAwAAdYw2YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl91cm5zlHSUjB1hcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS51dGlsc5QoWP4EAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBOYW1lZFR1cGxlCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBtZXRyaWNzX3BiMgoKUHJvcGVydGllc0Zyb21FbnVtVmFsdWUgPSBOYW1lZFR1cGxlKAogICAgJ1Byb3BlcnRpZXNGcm9tRW51bVZhbHVlJywKICAgIFsKICAgICAgICAoJ3VybicsIHN0ciksCiAgICAgICAgKCdjb25zdGFudCcsIHN0ciksCiAgICAgICAgKCdzcGVjJywgJ21ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvU3BlYycpLAogICAgICAgICgnbGFiZWxfcHJvcHMnLCAnbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9MYWJlbFByb3BzJyksCiAgICBdKQqUfZR9lIw2YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fYXJ0aWZhY3RfYXBpX3BiMl91cm5zlHSUjDdhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjlChYUwYAAGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CiMgR2VuZXJhdGVkIGJ5IHRoZSBnUlBDIFB5dGhvbiBwcm90b2NvbCBjb21waWxlciBwbHVnaW4uIERPIE5PVCBFRElUIQpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKaW1wb3J0IGdycGMKCmZyb20gLiBpbXBvcnQgYmVhbV9leHBhbnNpb25fYXBpX3BiMiBhcyBiZWFtX19leHBhbnNpb25fX2FwaV9fcGIyCgoKY2xhc3MgRXhwYW5zaW9uU2VydmljZVN0dWIob2JqZWN0KToKICAiIiJKb2IgU2VydmljZSBmb3IgY29uc3RydWN0aW5nIHBpcGVsaW5lcwogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbCk6CiAgICAiIiJDb25zdHJ1Y3Rvci4KCiAgICBBcmdzOgogICAgICBjaGFubmVsOiBBIGdycGMuQ2hhbm5lbC4KICAgICIiIgogICAgc2VsZi5FeHBhbmQgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmV4cGFuc2lvbi52MS5FeHBhbnNpb25TZXJ2aWNlL0V4cGFuZCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2V4cGFuc2lvbl9fYXBpX19wYjIuRXhwYW5zaW9uUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fZXhwYW5zaW9uX19hcGlfX3BiMi5FeHBhbnNpb25SZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBFeHBhbnNpb25TZXJ2aWNlU2VydmljZXIob2JqZWN0KToKICAiIiJKb2IgU2VydmljZSBmb3IgY29uc3RydWN0aW5nIHBpcGVsaW5lcwogICIiIgoKICBkZWYgRXhwYW5kKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICBwYXNzCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfRXhwYW5zaW9uU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcihzZXJ2aWNlciwgc2VydmVyKToKICBycGNfbWV0aG9kX2hhbmRsZXJzID0gewogICAgICAnRXhwYW5kJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5FeHBhbmQsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19leHBhbnNpb25fX2FwaV9fcGIyLkV4cGFuc2lvblJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fZXhwYW5zaW9uX19hcGlfX3BiMi5FeHBhbnNpb25SZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmV4cGFuc2lvbi52MS5FeHBhbnNpb25TZXJ2aWNlJywgcnBjX21ldGhvZF9oYW5kbGVycykKICBzZXJ2ZXIuYWRkX2dlbmVyaWNfcnBjX2hhbmRsZXJzKChnZW5lcmljX2hhbmRsZXIsKSkKlH2UKIwdRXhwYW5zaW9uU2VydmljZVN0dWIuX19pbml0X1+UalYxAQBLDUsXh5SMFEV4cGFuc2lvblNlcnZpY2VTdHVilGpdMQEASwlLF4eUjB9FeHBhbnNpb25TZXJ2aWNlU2VydmljZXIuRXhwYW5klGpWMQEASx5LI4eUjBhFeHBhbnNpb25TZXJ2aWNlU2VydmljZXKUal0xAQBLGksjh5SMJmFkZF9FeHBhbnNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGpWMQEASyZLMIeUdX2UKIwURXhwYW5zaW9uU2VydmljZVN0dWKUamcDAACMGEV4cGFuc2lvblNlcnZpY2VTZXJ2aWNlcpRqZwMAAIwfRXhwYW5zaW9uU2VydmljZVNlcnZpY2VyLkV4cGFuZJRqZwMAAIwmYWRkX0V4cGFuc2lvblNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXKUamcDAAB1jDdhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjlHSUjDBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGOUKFiGJgAAZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIyBHZW5lcmF0ZWQgYnkgdGhlIGdSUEMgUHl0aG9uIHByb3RvY29sIGNvbXBpbGVyIHBsdWdpbi4gRE8gTk9UIEVESVQhCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAppbXBvcnQgZ3JwYwoKZnJvbSAuIGltcG9ydCBiZWFtX2ZuX2FwaV9wYjIgYXMgYmVhbV9fZm5fX2FwaV9fcGIyCgoKY2xhc3MgQmVhbUZuQ29udHJvbFN0dWIob2JqZWN0KToKICAiIiIKICBDb250cm9sIFBsYW5lIEFQSQoKICBQcm9ncmVzcyByZXBvcnRpbmcgYW5kIHNwbGl0dGluZyBzdGlsbCBuZWVkIGZ1cnRoZXIgdmV0dGluZy4gQWxzbywgdGhpcyBtYXkKICBjaGFuZ2Ugd2l0aCB0aGUgYWRkaXRpb24gb2YgbmV3IHR5cGVzIG9mIGluc3RydWN0aW9ucy9yZXNwb25zZXMgcmVsYXRlZCB0bwogIG1ldHJpY3MuCgogIEFuIEFQSSB0aGF0IGRlc2NyaWJlcyB0aGUgd29yayB0aGF0IGEgU0RLIGhhcm5lc3MgaXMgbWVhbnQgdG8gZG8uCiAgU3RhYmxlCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkNvbnRyb2wgPSBjaGFubmVsLnN0cmVhbV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkNvbnRyb2wvQ29udHJvbCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5JbnN0cnVjdGlvblJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuSW5zdHJ1Y3Rpb25SZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEJlYW1GbkNvbnRyb2xTZXJ2aWNlcihvYmplY3QpOgogICIiIgogIENvbnRyb2wgUGxhbmUgQVBJCgogIFByb2dyZXNzIHJlcG9ydGluZyBhbmQgc3BsaXR0aW5nIHN0aWxsIG5lZWQgZnVydGhlciB2ZXR0aW5nLiBBbHNvLCB0aGlzIG1heQogIGNoYW5nZSB3aXRoIHRoZSBhZGRpdGlvbiBvZiBuZXcgdHlwZXMgb2YgaW5zdHJ1Y3Rpb25zL3Jlc3BvbnNlcyByZWxhdGVkIHRvCiAgbWV0cmljcy4KCiAgQW4gQVBJIHRoYXQgZGVzY3JpYmVzIHRoZSB3b3JrIHRoYXQgYSBTREsgaGFybmVzcyBpcyBtZWFudCB0byBkby4KICBTdGFibGUKICAiIiIKCiAgZGVmIENvbnRyb2woc2VsZiwgcmVxdWVzdF9pdGVyYXRvciwgY29udGV4dCk6CiAgICAiIiJJbnN0cnVjdGlvbnMgc2VudCBieSB0aGUgcnVubmVyIHRvIHRoZSBTREsgcmVxdWVzdGluZyBkaWZmZXJlbnQgdHlwZXMKICAgIG9mIHdvcmsuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9CZWFtRm5Db250cm9sU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdDb250cm9sJzogZ3JwYy5zdHJlYW1fc3RyZWFtX3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkNvbnRyb2wsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuSW5zdHJ1Y3Rpb25SZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuSW5zdHJ1Y3Rpb25SZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkNvbnRyb2wnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQoKCmNsYXNzIEJlYW1GbkRhdGFTdHViKG9iamVjdCk6CiAgIiIiU3RhYmxlCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkRhdGEgPSBjaGFubmVsLnN0cmVhbV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkRhdGEvRGF0YScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5FbGVtZW50cy5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLkVsZW1lbnRzLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEJlYW1GbkRhdGFTZXJ2aWNlcihvYmplY3QpOgogICIiIlN0YWJsZQogICIiIgoKICBkZWYgRGF0YShzZWxmLCByZXF1ZXN0X2l0ZXJhdG9yLCBjb250ZXh0KToKICAgICIiIlVzZWQgdG8gc2VuZCBkYXRhIGJldHdlZW4gaGFybmVzc2VzLgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfQmVhbUZuRGF0YVNlcnZpY2VyX3RvX3NlcnZlcihzZXJ2aWNlciwgc2VydmVyKToKICBycGNfbWV0aG9kX2hhbmRsZXJzID0gewogICAgICAnRGF0YSc6IGdycGMuc3RyZWFtX3N0cmVhbV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5EYXRhLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLkVsZW1lbnRzLkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5FbGVtZW50cy5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5EYXRhJywgcnBjX21ldGhvZF9oYW5kbGVycykKICBzZXJ2ZXIuYWRkX2dlbmVyaWNfcnBjX2hhbmRsZXJzKChnZW5lcmljX2hhbmRsZXIsKSkKCgpjbGFzcyBCZWFtRm5TdGF0ZVN0dWIob2JqZWN0KToKICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICBwYXNzCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLlN0YXRlID0gY2hhbm5lbC5zdHJlYW1fc3RyZWFtKAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5TdGF0ZS9TdGF0ZScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGF0ZVJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGF0ZVJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEJlYW1GblN0YXRlU2VydmljZXIob2JqZWN0KToKICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICBwYXNzCgogIGRlZiBTdGF0ZShzZWxmLCByZXF1ZXN0X2l0ZXJhdG9yLCBjb250ZXh0KToKICAgICIiIlVzZWQgdG8gZ2V0L2FwcGVuZC9jbGVhciBzdGF0ZSBzdG9yZWQgYnkgdGhlIHJ1bm5lciBvbiBiZWhhbGYgb2YgdGhlIFNESy4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0JlYW1GblN0YXRlU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdTdGF0ZSc6IGdycGMuc3RyZWFtX3N0cmVhbV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5TdGF0ZSwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGF0ZVJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLlN0YXRlUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ29yZy5hcGFjaGUuYmVhbS5tb2RlbC5mbl9leGVjdXRpb24udjEuQmVhbUZuU3RhdGUnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQoKCmNsYXNzIEJlYW1GbkxvZ2dpbmdTdHViKG9iamVjdCk6CiAgIiIiU3RhYmxlCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLkxvZ2dpbmcgPSBjaGFubmVsLnN0cmVhbV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkxvZ2dpbmcvTG9nZ2luZycsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5Mb2dFbnRyeS5MaXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuTG9nQ29udHJvbC5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBCZWFtRm5Mb2dnaW5nU2VydmljZXIob2JqZWN0KToKICAiIiJTdGFibGUKICAiIiIKCiAgZGVmIExvZ2dpbmcoc2VsZiwgcmVxdWVzdF9pdGVyYXRvciwgY29udGV4dCk6CiAgICAiIiJBbGxvd3MgZm9yIHRoZSBTREsgdG8gZW1pdCBsb2cgZW50cmllcyB3aGljaCB0aGUgcnVubmVyIGNhbgogICAgYXNzb2NpYXRlIHdpdGggdGhlIGFjdGl2ZSBqb2IuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9CZWFtRm5Mb2dnaW5nU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdMb2dnaW5nJzogZ3JwYy5zdHJlYW1fc3RyZWFtX3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkxvZ2dpbmcsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuTG9nRW50cnkuTGlzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuTG9nQ29udHJvbC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICB9CiAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAnb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmZuX2V4ZWN1dGlvbi52MS5CZWFtRm5Mb2dnaW5nJywgcnBjX21ldGhvZF9oYW5kbGVycykKICBzZXJ2ZXIuYWRkX2dlbmVyaWNfcnBjX2hhbmRsZXJzKChnZW5lcmljX2hhbmRsZXIsKSkKCgpjbGFzcyBCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTdHViKG9iamVjdCk6CiAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgcGFzcwoKICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbCk6CiAgICAiIiJDb25zdHJ1Y3Rvci4KCiAgICBBcmdzOgogICAgICBjaGFubmVsOiBBIGdycGMuQ2hhbm5lbC4KICAgICIiIgogICAgc2VsZi5TdGFydFdvcmtlciA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbkV4dGVybmFsV29ya2VyUG9vbC9TdGFydFdvcmtlcicsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGFydFdvcmtlclJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGFydFdvcmtlclJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5TdG9wV29ya2VyID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5mbl9leGVjdXRpb24udjEuQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sL1N0b3BXb3JrZXInLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuU3RvcFdvcmtlclJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdG9wV29ya2VyUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCgoKY2xhc3MgQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU2VydmljZXIob2JqZWN0KToKICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICBwYXNzCgogIGRlZiBTdGFydFdvcmtlcihzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIlN0YXJ0IHRoZSBTREsgd29ya2VyIHdpdGggdGhlIGdpdmVuIElELgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgU3RvcFdvcmtlcihzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIlN0b3AgdGhlIFNESyB3b3JrZXIuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ1N0YXJ0V29ya2VyJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5TdGFydFdvcmtlciwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdGFydFdvcmtlclJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLlN0YXJ0V29ya2VyUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgICAgICdTdG9wV29ya2VyJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5TdG9wV29ya2VyLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLlN0b3BXb3JrZXJSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5TdG9wV29ya2VyUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ29yZy5hcGFjaGUuYmVhbS5tb2RlbC5mbl9leGVjdXRpb24udjEuQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sJywgcnBjX21ldGhvZF9oYW5kbGVycykKICBzZXJ2ZXIuYWRkX2dlbmVyaWNfcnBjX2hhbmRsZXJzKChnZW5lcmljX2hhbmRsZXIsKSkKCgpjbGFzcyBCZWFtRm5Xb3JrZXJTdGF0dXNTdHViKG9iamVjdCk6CiAgIiIiQVBJIGZvciBTREtzIHRvIHJlcG9ydCBkZWJ1Zy1yZWxhdGVkIHN0YXR1c2VzIHRvIHJ1bm5lciBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbCk6CiAgICAiIiJDb25zdHJ1Y3Rvci4KCiAgICBBcmdzOgogICAgICBjaGFubmVsOiBBIGdycGMuQ2hhbm5lbC4KICAgICIiIgogICAgc2VsZi5Xb3JrZXJTdGF0dXMgPSBjaGFubmVsLnN0cmVhbV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbldvcmtlclN0YXR1cy9Xb3JrZXJTdGF0dXMnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19mbl9fYXBpX19wYjIuV29ya2VyU3RhdHVzUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5Xb3JrZXJTdGF0dXNSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIEJlYW1GbldvcmtlclN0YXR1c1NlcnZpY2VyKG9iamVjdCk6CiAgIiIiQVBJIGZvciBTREtzIHRvIHJlcG9ydCBkZWJ1Zy1yZWxhdGVkIHN0YXR1c2VzIHRvIHJ1bm5lciBkdXJpbmcgcGlwZWxpbmUgZXhlY3V0aW9uLgogICIiIgoKICBkZWYgV29ya2VyU3RhdHVzKHNlbGYsIHJlcXVlc3RfaXRlcmF0b3IsIGNvbnRleHQpOgogICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICBwYXNzCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCmRlZiBhZGRfQmVhbUZuV29ya2VyU3RhdHVzU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogIHJwY19tZXRob2RfaGFuZGxlcnMgPSB7CiAgICAgICdXb3JrZXJTdGF0dXMnOiBncnBjLnN0cmVhbV9zdHJlYW1fcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuV29ya2VyU3RhdHVzLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fZm5fX2FwaV9fcGIyLldvcmtlclN0YXR1c1Jlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2ZuX19hcGlfX3BiMi5Xb3JrZXJTdGF0dXNSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLkJlYW1GbldvcmtlclN0YXR1cycsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCpR9lCiMGkJlYW1GbkNvbnRyb2xTdHViLl9faW5pdF9flGpWMQEASxVLH4eUjBFCZWFtRm5Db250cm9sU3R1YpRqXTEBAEsJSx+HlIwdQmVhbUZuQ29udHJvbFNlcnZpY2VyLkNvbnRyb2yUalYxAQBLLks0h5SMFUJlYW1GbkNvbnRyb2xTZXJ2aWNlcpRqXTEBAEsiSzSHlIwjYWRkX0JlYW1GbkNvbnRyb2xTZXJ2aWNlcl90b19zZXJ2ZXKUalYxAQBLN0tBh5SMF0JlYW1GbkRhdGFTdHViLl9faW5pdF9flGpWMQEAS0hLUoeUjA5CZWFtRm5EYXRhU3R1YpRqXTEBAEtES1KHlIwXQmVhbUZuRGF0YVNlcnZpY2VyLkRhdGGUalYxAQBLWUteh5SMEkJlYW1GbkRhdGFTZXJ2aWNlcpRqXTEBAEtVS16HlIwgYWRkX0JlYW1GbkRhdGFTZXJ2aWNlcl90b19zZXJ2ZXKUalYxAQBLYUtrh5SMGEJlYW1GblN0YXRlU3R1Yi5fX2luaXRfX5RqVjEBAEtyS3yHlIwPQmVhbUZuU3RhdGVTdHVilGpdMQEAS25LfIeUjBlCZWFtRm5TdGF0ZVNlcnZpY2VyLlN0YXRllGpWMQEAS4NLiIeUjBNCZWFtRm5TdGF0ZVNlcnZpY2VylGpdMQEAS39LiIeUjCFhZGRfQmVhbUZuU3RhdGVTZXJ2aWNlcl90b19zZXJ2ZXKUalYxAQBLi0uVh5SMGkJlYW1GbkxvZ2dpbmdTdHViLl9faW5pdF9flGpWMQEAS5xLpoeUjBFCZWFtRm5Mb2dnaW5nU3R1YpRqXTEBAEuYS6aHlIwdQmVhbUZuTG9nZ2luZ1NlcnZpY2VyLkxvZ2dpbmeUalYxAQBLrUuzh5SMFUJlYW1GbkxvZ2dpbmdTZXJ2aWNlcpRqXTEBAEupS7OHlIwjYWRkX0JlYW1GbkxvZ2dpbmdTZXJ2aWNlcl90b19zZXJ2ZXKUalYxAQBLtkvAh5SMJUJlYW1GbkV4dGVybmFsV29ya2VyUG9vbFN0dWIuX19pbml0X1+UalYxAQBLx0vWh5SMHEJlYW1GbkV4dGVybmFsV29ya2VyUG9vbFN0dWKUal0xAQBLw0vWh5SMLEJlYW1GbkV4dGVybmFsV29ya2VyUG9vbFNlcnZpY2VyLlN0YXJ0V29ya2VylGpWMQEAS91L4oeUjCtCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlci5TdG9wV29ya2VylGpWMQEAS+RL6YeUjCBCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcpRqXTEBAEvZS+mHlIwuYWRkX0JlYW1GbkV4dGVybmFsV29ya2VyUG9vbFNlcnZpY2VyX3RvX3NlcnZlcpRqVjEBAEvsS/uHlIwfQmVhbUZuV29ya2VyU3RhdHVzU3R1Yi5fX2luaXRfX5RqVjEBAE0CAU0MAYeUjBZCZWFtRm5Xb3JrZXJTdGF0dXNTdHVilGpdMQEAS/5NDAGHlIwnQmVhbUZuV29ya2VyU3RhdHVzU2VydmljZXIuV29ya2VyU3RhdHVzlGpWMQEATRMBTRgBh5SMGkJlYW1GbldvcmtlclN0YXR1c1NlcnZpY2VylGpdMQEATQ8BTRgBh5SMKGFkZF9CZWFtRm5Xb3JrZXJTdGF0dXNTZXJ2aWNlcl90b19zZXJ2ZXKUalYxAQBNGwFNJQGHlHV9lCiMEUJlYW1GbkNvbnRyb2xTdHVilGrCAwAAjBVCZWFtRm5Db250cm9sU2VydmljZXKUasIDAACMHUJlYW1GbkNvbnRyb2xTZXJ2aWNlci5Db250cm9slGrCAwAAjCNhZGRfQmVhbUZuQ29udHJvbFNlcnZpY2VyX3RvX3NlcnZlcpRqwgMAAIwOQmVhbUZuRGF0YVN0dWKUasIDAACMEkJlYW1GbkRhdGFTZXJ2aWNlcpRqwgMAAIwXQmVhbUZuRGF0YVNlcnZpY2VyLkRhdGGUasIDAACMIGFkZF9CZWFtRm5EYXRhU2VydmljZXJfdG9fc2VydmVylGrCAwAAjA9CZWFtRm5TdGF0ZVN0dWKUasIDAACME0JlYW1GblN0YXRlU2VydmljZXKUasIDAACMGUJlYW1GblN0YXRlU2VydmljZXIuU3RhdGWUasIDAACMIWFkZF9CZWFtRm5TdGF0ZVNlcnZpY2VyX3RvX3NlcnZlcpRqwgMAAIwRQmVhbUZuTG9nZ2luZ1N0dWKUasIDAACMFUJlYW1GbkxvZ2dpbmdTZXJ2aWNlcpRqwgMAAIwdQmVhbUZuTG9nZ2luZ1NlcnZpY2VyLkxvZ2dpbmeUasIDAACMI2FkZF9CZWFtRm5Mb2dnaW5nU2VydmljZXJfdG9fc2VydmVylGrCAwAAjBxCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTdHVilGrCAwAAjCBCZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcpRqwgMAAIwsQmVhbUZuRXh0ZXJuYWxXb3JrZXJQb29sU2VydmljZXIuU3RhcnRXb3JrZXKUasIDAACMK0JlYW1GbkV4dGVybmFsV29ya2VyUG9vbFNlcnZpY2VyLlN0b3BXb3JrZXKUasIDAACMLmFkZF9CZWFtRm5FeHRlcm5hbFdvcmtlclBvb2xTZXJ2aWNlcl90b19zZXJ2ZXKUasIDAACMFkJlYW1GbldvcmtlclN0YXR1c1N0dWKUasIDAACMGkJlYW1GbldvcmtlclN0YXR1c1NlcnZpY2VylGrCAwAAjCdCZWFtRm5Xb3JrZXJTdGF0dXNTZXJ2aWNlci5Xb3JrZXJTdGF0dXOUasIDAACMKGFkZF9CZWFtRm5Xb3JrZXJTdGF0dXNTZXJ2aWNlcl90b19zZXJ2ZXKUasIDAAB1jDBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9mbl9hcGlfcGIyX2dycGOUdJSMMWFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX2pvYl9hcGlfcGIyX2dycGOUKFiqIwAAZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKIyBHZW5lcmF0ZWQgYnkgdGhlIGdSUEMgUHl0aG9uIHByb3RvY29sIGNvbXBpbGVyIHBsdWdpbi4gRE8gTk9UIEVESVQhCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAppbXBvcnQgZ3JwYwoKZnJvbSAuIGltcG9ydCBiZWFtX2pvYl9hcGlfcGIyIGFzIGJlYW1fX2pvYl9fYXBpX19wYjIKCgpjbGFzcyBKb2JTZXJ2aWNlU3R1YihvYmplY3QpOgogICIiIkpvYiBTZXJ2aWNlIGZvciBydW5uaW5nIFJ1bm5lckFQSSBwaXBlbGluZXMKICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuUHJlcGFyZSA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9QcmVwYXJlJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5QcmVwYXJlSm9iUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5QcmVwYXJlSm9iUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLlJ1biA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9SdW4nLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLlJ1bkpvYlJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuUnVuSm9iUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLkdldEpvYnMgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkpvYlNlcnZpY2UvR2V0Sm9icycsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9ic1JlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9ic1Jlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5HZXRTdGF0ZSA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9HZXRTdGF0ZScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iU3RhdGVSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkpvYlN0YXRlRXZlbnQuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLkdldFBpcGVsaW5lID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5Kb2JTZXJ2aWNlL0dldFBpcGVsaW5lJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JQaXBlbGluZVJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iUGlwZWxpbmVSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuQ2FuY2VsID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5Kb2JTZXJ2aWNlL0NhbmNlbCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuQ2FuY2VsSm9iUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5DYW5jZWxKb2JSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuR2V0U3RhdGVTdHJlYW0gPSBjaGFubmVsLnVuYXJ5X3N0cmVhbSgKICAgICAgICAnL29yZy5hcGFjaGUuYmVhbS5tb2RlbC5qb2JfbWFuYWdlbWVudC52MS5Kb2JTZXJ2aWNlL0dldFN0YXRlU3RyZWFtJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JTdGF0ZVJlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuSm9iU3RhdGVFdmVudC5Gcm9tU3RyaW5nLAogICAgICAgICkKICAgIHNlbGYuR2V0TWVzc2FnZVN0cmVhbSA9IGNoYW5uZWwudW5hcnlfc3RyZWFtKAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkpvYlNlcnZpY2UvR2V0TWVzc2FnZVN0cmVhbScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuSm9iTWVzc2FnZXNSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkpvYk1lc3NhZ2VzUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLkdldEpvYk1ldHJpY3MgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvb3JnLmFwYWNoZS5iZWFtLm1vZGVsLmpvYl9tYW5hZ2VtZW50LnYxLkpvYlNlcnZpY2UvR2V0Sm9iTWV0cmljcycsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iTWV0cmljc1JlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iTWV0cmljc1Jlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5EZXNjcmliZVBpcGVsaW5lT3B0aW9ucyA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZS9EZXNjcmliZVBpcGVsaW5lT3B0aW9ucycsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuRGVzY3JpYmVQaXBlbGluZU9wdGlvbnNSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkRlc2NyaWJlUGlwZWxpbmVPcHRpb25zUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCgoKY2xhc3MgSm9iU2VydmljZVNlcnZpY2VyKG9iamVjdCk6CiAgIiIiSm9iIFNlcnZpY2UgZm9yIHJ1bm5pbmcgUnVubmVyQVBJIHBpcGVsaW5lcwogICIiIgoKICBkZWYgUHJlcGFyZShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIlByZXBhcmUgYSBqb2IgZm9yIGV4ZWN1dGlvbi4gVGhlIGpvYiB3aWxsIG5vdCBiZSBleGVjdXRlZCB1bnRpbCBhIGNhbGwgaXMgbWFkZSB0byBydW4gd2l0aCB0aGUKICAgIHJldHVybmVkIHByZXBhcmF0aW9uSWQuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBSdW4oc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJTdWJtaXQgdGhlIGpvYiBmb3IgZXhlY3V0aW9uCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBHZXRKb2JzKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiR2V0IGEgbGlzdCBvZiBhbGwgaW52b2tlZCBqb2JzCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBHZXRTdGF0ZShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIkdldCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgam9iCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBHZXRQaXBlbGluZShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIkdldCB0aGUgam9iJ3MgcGlwZWxpbmUKICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgZGVmIENhbmNlbChzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIkNhbmNlbCB0aGUgam9iCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogIGRlZiBHZXRTdGF0ZVN0cmVhbShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIlN1YnNjcmliZSB0byBhIHN0cmVhbSBvZiBzdGF0ZSBjaGFuZ2VzIG9mIHRoZSBqb2IsIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBqb2IgYXMgdGhlIGZpcnN0IHJlc3BvbnNlLgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgR2V0TWVzc2FnZVN0cmVhbShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICIiIlN1YnNjcmliZSB0byBhIHN0cmVhbSBvZiBzdGF0ZSBjaGFuZ2VzIGFuZCBtZXNzYWdlcyBmcm9tIHRoZSBqb2IKICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgZGVmIEdldEpvYk1ldHJpY3Moc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJGZXRjaCBtZXRyaWNzIGZvciBhIGdpdmVuIGpvYgogICAgIiIiCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgRGVzY3JpYmVQaXBlbGluZU9wdGlvbnMoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJHZXQgdGhlIHN1cHBvcnRlZCBwaXBlbGluZSBvcHRpb25zIG9mIHRoZSBydW5uZXIKICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0pvYlNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ1ByZXBhcmUnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLlByZXBhcmUsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLlByZXBhcmVKb2JSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuUHJlcGFyZUpvYlJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnUnVuJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5SdW4sCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLlJ1bkpvYlJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5SdW5Kb2JSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICAgICAgJ0dldEpvYnMnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkdldEpvYnMsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYnNSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9ic1Jlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnR2V0U3RhdGUnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkdldFN0YXRlLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JTdGF0ZVJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5Kb2JTdGF0ZUV2ZW50LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnR2V0UGlwZWxpbmUnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkdldFBpcGVsaW5lLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JQaXBlbGluZVJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5HZXRKb2JQaXBlbGluZVJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnQ2FuY2VsJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5DYW5jZWwsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkNhbmNlbEpvYlJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5DYW5jZWxKb2JSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICAgICAgJ0dldFN0YXRlU3RyZWFtJzogZ3JwYy51bmFyeV9zdHJlYW1fcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuR2V0U3RhdGVTdHJlYW0sCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYlN0YXRlUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkpvYlN0YXRlRXZlbnQuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgICAgICdHZXRNZXNzYWdlU3RyZWFtJzogZ3JwYy51bmFyeV9zdHJlYW1fcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuR2V0TWVzc2FnZVN0cmVhbSwKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuSm9iTWVzc2FnZXNSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuSm9iTWVzc2FnZXNSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKSwKICAgICAgJ0dldEpvYk1ldHJpY3MnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkdldEpvYk1ldHJpY3MsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19qb2JfX2FwaV9fcGIyLkdldEpvYk1ldHJpY3NSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX2pvYl9fYXBpX19wYjIuR2V0Sm9iTWV0cmljc1Jlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnRGVzY3JpYmVQaXBlbGluZU9wdGlvbnMnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkRlc2NyaWJlUGlwZWxpbmVPcHRpb25zLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5EZXNjcmliZVBpcGVsaW5lT3B0aW9uc1JlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YmVhbV9fam9iX19hcGlfX3BiMi5EZXNjcmliZVBpcGVsaW5lT3B0aW9uc1Jlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuam9iX21hbmFnZW1lbnQudjEuSm9iU2VydmljZScsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCpR9lCiMF0pvYlNlcnZpY2VTdHViLl9faW5pdF9flGpWMQEASw1LRIeUjA5Kb2JTZXJ2aWNlU3R1YpRqXTEBAEsJS0SHlIwaSm9iU2VydmljZVNlcnZpY2VyLlByZXBhcmWUalYxAQBLS0tRh5SMFkpvYlNlcnZpY2VTZXJ2aWNlci5SdW6UalYxAQBLU0tYh5SMGkpvYlNlcnZpY2VTZXJ2aWNlci5HZXRKb2JzlGpWMQEAS1pLX4eUjBtKb2JTZXJ2aWNlU2VydmljZXIuR2V0U3RhdGWUalYxAQBLYUtmh5SMHkpvYlNlcnZpY2VTZXJ2aWNlci5HZXRQaXBlbGluZZRqVjEBAEtoS22HlIwZSm9iU2VydmljZVNlcnZpY2VyLkNhbmNlbJRqVjEBAEtvS3SHlIwhSm9iU2VydmljZVNlcnZpY2VyLkdldFN0YXRlU3RyZWFtlGpWMQEAS3ZLe4eUjCNKb2JTZXJ2aWNlU2VydmljZXIuR2V0TWVzc2FnZVN0cmVhbZRqVjEBAEt9S4KHlIwgSm9iU2VydmljZVNlcnZpY2VyLkdldEpvYk1ldHJpY3OUalYxAQBLhEuJh5SMKkpvYlNlcnZpY2VTZXJ2aWNlci5EZXNjcmliZVBpcGVsaW5lT3B0aW9uc5RqVjEBAEuLS5CHlIwSSm9iU2VydmljZVNlcnZpY2VylGpdMQEAS0dLkIeUjCBhZGRfSm9iU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcpRqVjEBAEuTS8qHlHV9lCiMDkpvYlNlcnZpY2VTdHVilGrsAwAAjBJKb2JTZXJ2aWNlU2VydmljZXKUauwDAACMGkpvYlNlcnZpY2VTZXJ2aWNlci5QcmVwYXJllGrsAwAAjBZKb2JTZXJ2aWNlU2VydmljZXIuUnVulGrsAwAAjBpKb2JTZXJ2aWNlU2VydmljZXIuR2V0Sm9ic5Rq7AMAAIwbSm9iU2VydmljZVNlcnZpY2VyLkdldFN0YXRllGrsAwAAjB5Kb2JTZXJ2aWNlU2VydmljZXIuR2V0UGlwZWxpbmWUauwDAACMGUpvYlNlcnZpY2VTZXJ2aWNlci5DYW5jZWyUauwDAACMIUpvYlNlcnZpY2VTZXJ2aWNlci5HZXRTdGF0ZVN0cmVhbZRq7AMAAIwjSm9iU2VydmljZVNlcnZpY2VyLkdldE1lc3NhZ2VTdHJlYW2UauwDAACMIEpvYlNlcnZpY2VTZXJ2aWNlci5HZXRKb2JNZXRyaWNzlGrsAwAAjCpKb2JTZXJ2aWNlU2VydmljZXIuRGVzY3JpYmVQaXBlbGluZU9wdGlvbnOUauwDAACMIGFkZF9Kb2JTZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGrsAwAAdYwxYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fam9iX2FwaV9wYjJfZ3JwY5R0lIw3YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY5QoWBYIAABmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAojIEdlbmVyYXRlZCBieSB0aGUgZ1JQQyBQeXRob24gcHJvdG9jb2wgY29tcGlsZXIgcGx1Z2luLiBETyBOT1QgRURJVCEKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmltcG9ydCBncnBjCgpmcm9tIC4gaW1wb3J0IGJlYW1fcHJvdmlzaW9uX2FwaV9wYjIgYXMgYmVhbV9fcHJvdmlzaW9uX19hcGlfX3BiMgoKCmNsYXNzIFByb3Zpc2lvblNlcnZpY2VTdHViKG9iamVjdCk6CiAgIiIiQSBzZXJ2aWNlIHRvIHByb3ZpZGUgcnVudGltZSBwcm92aXNpb25pbmcgaW5mb3JtYXRpb24gdG8gdGhlIFNESyBoYXJuZXNzCiAgd29ya2VyIGluc3RhbmNlcyAtLSBzdWNoIGFzIHBpcGVsaW5lIG9wdGlvbnMsIHJlc291cmNlIGNvbnN0cmFpbnRzIGFuZAogIG90aGVyIGpvYiBtZXRhZGF0YSAtLSBuZWVkZWQgYnkgYW4gU0RLIGhhcm5lc3MgaW5zdGFuY2UgdG8gaW5pdGlhbGl6ZS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuR2V0UHJvdmlzaW9uSW5mbyA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLlByb3Zpc2lvblNlcnZpY2UvR2V0UHJvdmlzaW9uSW5mbycsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWJlYW1fX3Byb3Zpc2lvbl9fYXBpX19wYjIuR2V0UHJvdmlzaW9uSW5mb1JlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWJlYW1fX3Byb3Zpc2lvbl9fYXBpX19wYjIuR2V0UHJvdmlzaW9uSW5mb1Jlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIFByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlcihvYmplY3QpOgogICIiIkEgc2VydmljZSB0byBwcm92aWRlIHJ1bnRpbWUgcHJvdmlzaW9uaW5nIGluZm9ybWF0aW9uIHRvIHRoZSBTREsgaGFybmVzcwogIHdvcmtlciBpbnN0YW5jZXMgLS0gc3VjaCBhcyBwaXBlbGluZSBvcHRpb25zLCByZXNvdXJjZSBjb25zdHJhaW50cyBhbmQKICBvdGhlciBqb2IgbWV0YWRhdGEgLS0gbmVlZGVkIGJ5IGFuIFNESyBoYXJuZXNzIGluc3RhbmNlIHRvIGluaXRpYWxpemUuCiAgIiIiCgogIGRlZiBHZXRQcm92aXNpb25JbmZvKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIiIiR2V0IHByb3Zpc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIFNESyBoYXJuZXNzIHdvcmtlciBpbnN0YW5jZS4KICAgICIiIgogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX1Byb3Zpc2lvblNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ0dldFByb3Zpc2lvbkluZm8nOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLkdldFByb3Zpc2lvbkluZm8sCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1iZWFtX19wcm92aXNpb25fX2FwaV9fcGIyLkdldFByb3Zpc2lvbkluZm9SZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX3Byb3Zpc2lvbl9fYXBpX19wYjIuR2V0UHJvdmlzaW9uSW5mb1Jlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogIH0KICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICdvcmcuYXBhY2hlLmJlYW0ubW9kZWwuZm5fZXhlY3V0aW9uLnYxLlByb3Zpc2lvblNlcnZpY2UnLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQqUfZQojB1Qcm92aXNpb25TZXJ2aWNlU3R1Yi5fX2luaXRfX5RqVjEBAEsPSxmHlIwUUHJvdmlzaW9uU2VydmljZVN0dWKUal0xAQBLCUsZh5SMKVByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlci5HZXRQcm92aXNpb25JbmZvlGpWMQEASyJLJ4eUjBhQcm92aXNpb25TZXJ2aWNlU2VydmljZXKUal0xAQBLHEsnh5SMJmFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGpWMQEASypLNIeUdX2UKIwUUHJvdmlzaW9uU2VydmljZVN0dWKUagcEAACMGFByb3Zpc2lvblNlcnZpY2VTZXJ2aWNlcpRqBwQAAIwpUHJvdmlzaW9uU2VydmljZVNlcnZpY2VyLkdldFByb3Zpc2lvbkluZm+UagcEAACMJmFkZF9Qcm92aXNpb25TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGoHBAAAdYw3YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcHJvdmlzaW9uX2FwaV9wYjJfZ3JwY5R0lIw0YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwY5QoWGsGAABmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAojIEdlbmVyYXRlZCBieSB0aGUgZ1JQQyBQeXRob24gcHJvdG9jb2wgY29tcGlsZXIgcGx1Z2luLiBETyBOT1QgRURJVCEKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmltcG9ydCBncnBjCgpmcm9tIC4gaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIgYXMgYmVhbV9fcnVubmVyX19hcGlfX3BiMgoKCmNsYXNzIFRlc3RTdHJlYW1TZXJ2aWNlU3R1YihvYmplY3QpOgogICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogIHBhc3MKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWwpOgogICAgIiIiQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICAiIiIKICAgIHNlbGYuRXZlbnRzID0gY2hhbm5lbC51bmFyeV9zdHJlYW0oCiAgICAgICAgJy9vcmcuYXBhY2hlLmJlYW0ubW9kZWwucGlwZWxpbmUudjEuVGVzdFN0cmVhbVNlcnZpY2UvRXZlbnRzJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YmVhbV9fcnVubmVyX19hcGlfX3BiMi5FdmVudHNSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1iZWFtX19ydW5uZXJfX2FwaV9fcGIyLlRlc3RTdHJlYW1QYXlsb2FkLkV2ZW50LkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIFRlc3RTdHJlYW1TZXJ2aWNlU2VydmljZXIob2JqZWN0KToKICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICBwYXNzCgogIGRlZiBFdmVudHMoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJBIFRlc3RTdHJlYW0gd2lsbCByZXF1ZXN0IGZvciBldmVudHMgdXNpbmcgdGhpcyBSUEMuCiAgICAiIiIKICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgoKZGVmIGFkZF9UZXN0U3RyZWFtU2VydmljZVNlcnZpY2VyX3RvX3NlcnZlcihzZXJ2aWNlciwgc2VydmVyKToKICBycGNfbWV0aG9kX2hhbmRsZXJzID0gewogICAgICAnRXZlbnRzJzogZ3JwYy51bmFyeV9zdHJlYW1fcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuRXZlbnRzLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YmVhbV9fcnVubmVyX19hcGlfX3BiMi5FdmVudHNSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWJlYW1fX3J1bm5lcl9fYXBpX19wYjIuVGVzdFN0cmVhbVBheWxvYWQuRXZlbnQuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ29yZy5hcGFjaGUuYmVhbS5tb2RlbC5waXBlbGluZS52MS5UZXN0U3RyZWFtU2VydmljZScsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCpR9lCiMHlRlc3RTdHJlYW1TZXJ2aWNlU3R1Yi5fX2luaXRfX5RqVjEBAEsNSxeHlIwVVGVzdFN0cmVhbVNlcnZpY2VTdHVilGpdMQEASwlLF4eUjCBUZXN0U3RyZWFtU2VydmljZVNlcnZpY2VyLkV2ZW50c5RqVjEBAEseSyOHlIwZVGVzdFN0cmVhbVNlcnZpY2VTZXJ2aWNlcpRqXTEBAEsaSyOHlIwnYWRkX1Rlc3RTdHJlYW1TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGpWMQEASyZLMIeUdX2UKIwVVGVzdFN0cmVhbVNlcnZpY2VTdHVilGqQAwAAjBlUZXN0U3RyZWFtU2VydmljZVNlcnZpY2VylGqQAwAAjCBUZXN0U3RyZWFtU2VydmljZVNlcnZpY2VyLkV2ZW50c5RqkAMAAIwnYWRkX1Rlc3RTdHJlYW1TZXJ2aWNlU2VydmljZXJfdG9fc2VydmVylGqQAwAAdYw0YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwY5R0lIw0YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJuc5QoWCwnAABmcm9tIC4udXRpbHMgaW1wb3J0IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlCmZyb20gLiBpbXBvcnQgbWV0cmljc19wYjIKRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTID0gbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9MYWJlbFByb3BzKCkKRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMgPSBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb1NwZWMoKQoKY2xhc3MgQmVhbUNvbnN0YW50cyhvYmplY3QpOgoKICBjbGFzcyBDb25zdGFudHMob2JqZWN0KToKICAgIE1JTl9USU1FU1RBTVBfTUlMTElTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICctOTIyMzM3MjAzNjg1NDc3NScsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBNQVhfVElNRVNUQU1QX01JTExJUyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCcnLCAnOTIyMzM3MjAzNjg1NDc3NScsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBHTE9CQUxfV0lORE9XX01BWF9USU1FU1RBTVBfTUlMTElTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICc5MjIzMzcxOTUwNDU0Nzc1JywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKCgpjbGFzcyBTdGFuZGFyZEFydGlmYWN0cyhvYmplY3QpOgoKICBjbGFzcyBSb2xlcyhvYmplY3QpOgogICAgU1RBR0lOR19UTyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOmFydGlmYWN0OnJvbGU6c3RhZ2luZ190bzp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKCiAgY2xhc3MgVHlwZXMob2JqZWN0KToKICAgIEZJTEUgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTphcnRpZmFjdDp0eXBlOmZpbGU6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFVSTCA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOmFydGlmYWN0OnR5cGU6dXJsOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBFTUJFRERFRCA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOmFydGlmYWN0OnR5cGU6ZW1iZWRkZWQ6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFBZUEkgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTphcnRpZmFjdDp0eXBlOnB5cGk6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIE1BVkVOID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06YXJ0aWZhY3Q6dHlwZTptYXZlbjp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKCmNsYXNzIFN0YW5kYXJkQ29kZXJzKG9iamVjdCk6CgogIGNsYXNzIEVudW0ob2JqZWN0KToKICAgIEJZVEVTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06Y29kZXI6Ynl0ZXM6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFNUUklOR19VVEY4ID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06Y29kZXI6c3RyaW5nX3V0Zjg6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIEtWID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06Y29kZXI6a3Y6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIEJPT0wgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTpjb2Rlcjpib29sOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBWQVJJTlQgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTpjb2Rlcjp2YXJpbnQ6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIERPVUJMRSA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOmNvZGVyOmRvdWJsZTp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgSVRFUkFCTEUgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTpjb2RlcjppdGVyYWJsZTp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgVElNRVIgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTpjb2Rlcjp0aW1lcjp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgSU5URVJWQUxfV0lORE9XID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06Y29kZXI6aW50ZXJ2YWxfd2luZG93OnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBMRU5HVEhfUFJFRklYID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06Y29kZXI6bGVuZ3RoX3ByZWZpeDp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgR0xPQkFMX1dJTkRPVyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOmNvZGVyOmdsb2JhbF93aW5kb3c6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFdJTkRPV0VEX1ZBTFVFID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06Y29kZXI6d2luZG93ZWRfdmFsdWU6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFBBUkFNX1dJTkRPV0VEX1ZBTFVFID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06Y29kZXI6cGFyYW1fd2luZG93ZWRfdmFsdWU6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFNUQVRFX0JBQ0tFRF9JVEVSQUJMRSA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOmNvZGVyOnN0YXRlX2JhY2tlZF9pdGVyYWJsZTp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgUk9XID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06Y29kZXI6cm93OnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCgoKY2xhc3MgU3RhbmRhcmREaXNwbGF5RGF0YShvYmplY3QpOgoKICBjbGFzcyBEaXNwbGF5RGF0YShvYmplY3QpOgogICAgTEFCRUxMRURfU1RSSU5HID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06ZGlzcGxheV9kYXRhOmxhYmVsbGVkX3N0cmluZzp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKCmNsYXNzIFN0YW5kYXJkRW52aXJvbm1lbnRzKG9iamVjdCk6CgogIGNsYXNzIEVudmlyb25tZW50cyhvYmplY3QpOgogICAgRE9DS0VSID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06ZW52OmRvY2tlcjp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgUFJPQ0VTUyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOmVudjpwcm9jZXNzOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBFWFRFUk5BTCA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOmVudjpleHRlcm5hbDp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKCmNsYXNzIFN0YW5kYXJkUFRyYW5zZm9ybXMob2JqZWN0KToKCiAgY2xhc3MgQ29tYmluZUNvbXBvbmVudHMob2JqZWN0KToKICAgIENPTUJJTkVfUEVSX0tFWV9QUkVDT01CSU5FID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOmNvbWJpbmVfcGVyX2tleV9wcmVjb21iaW5lOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBDT01CSU5FX1BFUl9LRVlfTUVSR0VfQUNDVU1VTEFUT1JTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOmNvbWJpbmVfcGVyX2tleV9tZXJnZV9hY2N1bXVsYXRvcnM6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIENPTUJJTkVfUEVSX0tFWV9FWFRSQUNUX09VVFBVVFMgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTp0cmFuc2Zvcm06Y29tYmluZV9wZXJfa2V5X2V4dHJhY3Rfb3V0cHV0czp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgQ09NQklORV9HUk9VUEVEX1ZBTFVFUyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnRyYW5zZm9ybTpjb21iaW5lX2dyb3VwZWRfdmFsdWVzOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCgoKICBjbGFzcyBDb21wb3NpdGVzKG9iamVjdCk6CiAgICBDT01CSU5FX1BFUl9LRVkgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTp0cmFuc2Zvcm06Y29tYmluZV9wZXJfa2V5OnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBDT01CSU5FX0dMT0JBTExZID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOmNvbWJpbmVfZ2xvYmFsbHk6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFJFU0hVRkZMRSA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnRyYW5zZm9ybTpyZXNodWZmbGU6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFdSSVRFX0ZJTEVTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOndyaXRlX2ZpbGVzOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCgoKICBjbGFzcyBEZXByZWNhdGVkUHJpbWl0aXZlcyhvYmplY3QpOgogICAgUkVBRCA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnRyYW5zZm9ybTpyZWFkOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBDUkVBVEVfVklFVyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnRyYW5zZm9ybTpjcmVhdGVfdmlldzp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKCiAgY2xhc3MgUHJpbWl0aXZlcyhvYmplY3QpOgogICAgUEFSX0RPID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOnBhcmRvOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBGTEFUVEVOID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOmZsYXR0ZW46djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIEdST1VQX0JZX0tFWSA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnRyYW5zZm9ybTpncm91cF9ieV9rZXk6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIElNUFVMU0UgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTp0cmFuc2Zvcm06aW1wdWxzZTp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgQVNTSUdOX1dJTkRPV1MgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTp0cmFuc2Zvcm06d2luZG93X2ludG86djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFRFU1RfU1RSRUFNID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOnRlc3RzdHJlYW06djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIE1BUF9XSU5ET1dTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOm1hcF93aW5kb3dzOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBNRVJHRV9XSU5ET1dTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06dHJhbnNmb3JtOm1lcmdlX3dpbmRvd3M6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKCgogIGNsYXNzIFNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHMob2JqZWN0KToKICAgIFBBSVJfV0lUSF9SRVNUUklDVElPTiA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnRyYW5zZm9ybTpzZGZfcGFpcl93aXRoX3Jlc3RyaWN0aW9uOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBTUExJVF9SRVNUUklDVElPTiA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnRyYW5zZm9ybTpzZGZfc3BsaXRfcmVzdHJpY3Rpb246djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFBST0NFU1NfS0VZRURfRUxFTUVOVFMgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTp0cmFuc2Zvcm06c2RmX3Byb2Nlc3Nfa2V5ZWRfZWxlbWVudHM6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFBST0NFU1NfRUxFTUVOVFMgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTp0cmFuc2Zvcm06c2RmX3Byb2Nlc3NfZWxlbWVudHM6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFNQTElUX0FORF9TSVpFX1JFU1RSSUNUSU9OUyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnRyYW5zZm9ybTpzZGZfc3BsaXRfYW5kX3NpemVfcmVzdHJpY3Rpb25zOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBQUk9DRVNTX1NJWkVEX0VMRU1FTlRTX0FORF9SRVNUUklDVElPTlMgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTp0cmFuc2Zvcm06c2RmX3Byb2Nlc3Nfc2l6ZWRfZWxlbWVudF9hbmRfcmVzdHJpY3Rpb25zOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCgoKY2xhc3MgU3RhbmRhcmRQcm90b2NvbHMob2JqZWN0KToKCiAgY2xhc3MgRW51bShvYmplY3QpOgogICAgTEVHQUNZX1BST0dSRVNTX1JFUE9SVElORyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnByb3RvY29sOnByb2dyZXNzX3JlcG9ydGluZzp2MCcsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgUFJPR1JFU1NfUkVQT1JUSU5HID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06cHJvdG9jb2w6cHJvZ3Jlc3NfcmVwb3J0aW5nOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBXT1JLRVJfU1RBVFVTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06cHJvdG9jb2w6d29ya2VyX3N0YXR1czp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgTVVMVElfQ09SRV9CVU5ETEVfUFJPQ0VTU0lORyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnByb3RvY29sOm11bHRpX2NvcmVfYnVuZGxlX3Byb2Nlc3Npbmc6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKCgpjbGFzcyBTdGFuZGFyZFJlcXVpcmVtZW50cyhvYmplY3QpOgoKICBjbGFzcyBFbnVtKG9iamVjdCk6CiAgICBSRVFVSVJFU19TVEFURUZVTF9QUk9DRVNTSU5HID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06cmVxdWlyZW1lbnQ6cGFyZG86c3RhdGVmdWw6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFJFUVVJUkVTX0JVTkRMRV9GSU5BTElaQVRJT04gPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTpyZXF1aXJlbWVudDpwYXJkbzpmaW5hbGl6YXRpb246djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFJFUVVJUkVTX1NUQUJMRV9JTlBVVCA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnJlcXVpcmVtZW50OnBhcmRvOnN0YWJsZV9pbnB1dDp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgUkVRVUlSRVNfVElNRV9TT1JURURfSU5QVVQgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTpyZXF1aXJlbWVudDpwYXJkbzp0aW1lX3NvcnRlZF9pbnB1dDp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKCmNsYXNzIFN0YW5kYXJkU2lkZUlucHV0VHlwZXMob2JqZWN0KToKCiAgY2xhc3MgRW51bShvYmplY3QpOgogICAgSVRFUkFCTEUgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTpzaWRlX2lucHV0Oml0ZXJhYmxlOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBNVUxUSU1BUCA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOnNpZGVfaW5wdXQ6bXVsdGltYXA6djEnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKCpR9lCiMF0JlYW1Db25zdGFudHMuQ29uc3RhbnRzlGpdMQEASwhLC4eUjA1CZWFtQ29uc3RhbnRzlGpdMQEASwZLC4eUjBdTdGFuZGFyZEFydGlmYWN0cy5Sb2xlc5RqXTEBAEsQSxGHlIwXU3RhbmRhcmRBcnRpZmFjdHMuVHlwZXOUal0xAQBLFEsZh5SMEVN0YW5kYXJkQXJ0aWZhY3RzlGpdMQEASw5LGYeUjBNTdGFuZGFyZENvZGVycy5FbnVtlGpdMQEASx5LLYeUjA5TdGFuZGFyZENvZGVyc5RqXTEBAEscSy2HlIwfU3RhbmRhcmREaXNwbGF5RGF0YS5EaXNwbGF5RGF0YZRqXTEBAEsySzOHlIwTU3RhbmRhcmREaXNwbGF5RGF0YZRqXTEBAEswSzOHlIwhU3RhbmRhcmRFbnZpcm9ubWVudHMuRW52aXJvbm1lbnRzlGpdMQEASzhLO4eUjBRTdGFuZGFyZEVudmlyb25tZW50c5RqXTEBAEs2SzuHlIwlU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21iaW5lQ29tcG9uZW50c5RqXTEBAEtAS0SHlIweU3RhbmRhcmRQVHJhbnNmb3Jtcy5Db21wb3NpdGVzlGpdMQEAS0dLS4eUjChTdGFuZGFyZFBUcmFuc2Zvcm1zLkRlcHJlY2F0ZWRQcmltaXRpdmVzlGpdMQEAS05LUIeUjB5TdGFuZGFyZFBUcmFuc2Zvcm1zLlByaW1pdGl2ZXOUal0xAQBLU0tbh5SMLVN0YW5kYXJkUFRyYW5zZm9ybXMuU3BsaXR0YWJsZVBhckRvQ29tcG9uZW50c5RqXTEBAEteS2SHlIwTU3RhbmRhcmRQVHJhbnNmb3Jtc5RqXTEBAEs+S2SHlIwWU3RhbmRhcmRQcm90b2NvbHMuRW51bZRqXTEBAEtpS22HlIwRU3RhbmRhcmRQcm90b2NvbHOUal0xAQBLZ0tth5SMGVN0YW5kYXJkUmVxdWlyZW1lbnRzLkVudW2Ual0xAQBLckt2h5SMFFN0YW5kYXJkUmVxdWlyZW1lbnRzlGpdMQEAS3BLdoeUjBtTdGFuZGFyZFNpZGVJbnB1dFR5cGVzLkVudW2Ual0xAQBLe0t9h5SMFlN0YW5kYXJkU2lkZUlucHV0VHlwZXOUal0xAQBLeUt9h5R1fZQojA1CZWFtQ29uc3RhbnRzlGpsAwAAjBdCZWFtQ29uc3RhbnRzLkNvbnN0YW50c5RqbAMAAIwRU3RhbmRhcmRBcnRpZmFjdHOUamwDAACMF1N0YW5kYXJkQXJ0aWZhY3RzLlJvbGVzlGpsAwAAjBdTdGFuZGFyZEFydGlmYWN0cy5UeXBlc5RqbAMAAIwOU3RhbmRhcmRDb2RlcnOUamwDAACME1N0YW5kYXJkQ29kZXJzLkVudW2UamwDAACME1N0YW5kYXJkRGlzcGxheURhdGGUamwDAACMH1N0YW5kYXJkRGlzcGxheURhdGEuRGlzcGxheURhdGGUamwDAACMFFN0YW5kYXJkRW52aXJvbm1lbnRzlGpsAwAAjCFTdGFuZGFyZEVudmlyb25tZW50cy5FbnZpcm9ubWVudHOUamwDAACME1N0YW5kYXJkUFRyYW5zZm9ybXOUamwDAACMJVN0YW5kYXJkUFRyYW5zZm9ybXMuQ29tYmluZUNvbXBvbmVudHOUamwDAACMHlN0YW5kYXJkUFRyYW5zZm9ybXMuQ29tcG9zaXRlc5RqbAMAAIwoU3RhbmRhcmRQVHJhbnNmb3Jtcy5EZXByZWNhdGVkUHJpbWl0aXZlc5RqbAMAAIweU3RhbmRhcmRQVHJhbnNmb3Jtcy5QcmltaXRpdmVzlGpsAwAAjC1TdGFuZGFyZFBUcmFuc2Zvcm1zLlNwbGl0dGFibGVQYXJEb0NvbXBvbmVudHOUamwDAACMEVN0YW5kYXJkUHJvdG9jb2xzlGpsAwAAjBZTdGFuZGFyZFByb3RvY29scy5FbnVtlGpsAwAAjBRTdGFuZGFyZFJlcXVpcmVtZW50c5RqbAMAAIwZU3RhbmRhcmRSZXF1aXJlbWVudHMuRW51bZRqbAMAAIwWU3RhbmRhcmRTaWRlSW5wdXRUeXBlc5RqbAMAAIwbU3RhbmRhcmRTaWRlSW5wdXRUeXBlcy5FbnVtlGpsAwAAdYw0YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmJlYW1fcnVubmVyX2FwaV9wYjJfdXJuc5R0lIwsYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLm1ldHJpY3NfcGIyX3VybnOUKFhtFwAAZnJvbSAuLnV0aWxzIGltcG9ydCBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZQpmcm9tIC4gaW1wb3J0IG1ldHJpY3NfcGIyCkVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUyA9IG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvTGFiZWxQcm9wcygpCkVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDID0gbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9TcGVjKCkKCmNsYXNzIE1vbml0b3JpbmdJbmZvKG9iamVjdCk6CgogIGNsYXNzIE1vbml0b3JpbmdJbmZvTGFiZWxzKG9iamVjdCk6CiAgICBUUkFOU0ZPUk0gPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb0xhYmVsUHJvcHMobmFtZT0nUFRSQU5TRk9STScpKQogICAgUENPTExFQ1RJT04gPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb0xhYmVsUHJvcHMobmFtZT0nUENPTExFQ1RJT04nKSkKICAgIFdJTkRPV0lOR19TVFJBVEVHWSA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCcnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvTGFiZWxQcm9wcyhuYW1lPSdXSU5ET1dJTkdfU1RSQVRFR1knKSkKICAgIENPREVSID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9MYWJlbFByb3BzKG5hbWU9J0NPREVSJykpCiAgICBFTlZJUk9OTUVOVCA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCcnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvTGFiZWxQcm9wcyhuYW1lPSdFTlZJUk9OTUVOVCcpKQogICAgTkFNRVNQQUNFID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9MYWJlbFByb3BzKG5hbWU9J05BTUVTUEFDRScpKQogICAgTkFNRSA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCcnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvTGFiZWxQcm9wcyhuYW1lPSdOQU1FJykpCgoKY2xhc3MgTW9uaXRvcmluZ0luZm9TcGVjcyhvYmplY3QpOgoKICBjbGFzcyBFbnVtKG9iamVjdCk6CiAgICBVU0VSX0NPVU5URVIgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnJywgJycsIG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvU3BlYyh1cm49J2JlYW06bWV0cmljOnVzZXInLCB0eXBlX3Vybj0nYmVhbTptZXRyaWNzOnN1bV9pbnRfNjQnLCByZXF1aXJlZF9sYWJlbHM9WydQVFJBTlNGT1JNJywgJ05BTUVTUEFDRScsICdOQU1FJ10sIGFubm90YXRpb25zPVttZXRyaWNzX3BiMi5Bbm5vdGF0aW9uKGtleT0nZGVzY3JpcHRpb24nLCB2YWx1ZT0nVVJOIHV0aWxpemVkIHRvIHJlcG9ydCB1c2VyIG51bWVyaWMgY291bnRlcnMuJyldKSwgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgRUxFTUVOVF9DT1VOVCA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCcnLCAnJywgbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9TcGVjKHVybj0nYmVhbTptZXRyaWM6ZWxlbWVudF9jb3VudDp2MScsIHR5cGVfdXJuPSdiZWFtOm1ldHJpY3M6c3VtX2ludF82NCcsIHJlcXVpcmVkX2xhYmVscz1bJ1BDT0xMRUNUSU9OJ10sIGFubm90YXRpb25zPVttZXRyaWNzX3BiMi5Bbm5vdGF0aW9uKGtleT0nZGVzY3JpcHRpb24nLCB2YWx1ZT0nVGhlIHRvdGFsIGVsZW1lbnRzIG91dHB1dCB0byBhIFBjb2xsZWN0aW9uIGJ5IGEgUFRyYW5zZm9ybS4nKV0pLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBTQU1QTEVEX0JZVEVfU0laRSA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCcnLCAnJywgbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9TcGVjKHVybj0nYmVhbTptZXRyaWM6c2FtcGxlZF9ieXRlX3NpemU6djEnLCB0eXBlX3Vybj0nYmVhbTptZXRyaWNzOmRpc3RyaWJ1dGlvbl9pbnRfNjQnLCByZXF1aXJlZF9sYWJlbHM9WydQQ09MTEVDVElPTiddLCBhbm5vdGF0aW9ucz1bbWV0cmljc19wYjIuQW5ub3RhdGlvbihrZXk9J2Rlc2NyaXB0aW9uJywgdmFsdWU9J1RoZSB0b3RhbCBieXRlIHNpemUgYW5kIGNvdW50IG9mIGEgc2FtcGxlZCAgc2V0IChvciBhbGwpIG9mIGVsZW1lbnRzIGluIHRoZSBwY29sbGVjdGlvbi4gU2FtcGxpbmcgaXMgdXNlZCAgYmVjYXVzZSBjYWxjdWxhdGluZyB0aGUgYnl0ZSBjb3VudCBpbnZvbHZlcyBzZXJpYWxpemluZyB0aGUgIGVsZW1lbnRzIHdoaWNoIGlzIENQVSBpbnRlbnNpdmUuJyldKSwgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgU1RBUlRfQlVORExFX01TRUNTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICcnLCBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb1NwZWModXJuPSdiZWFtOm1ldHJpYzpwYXJkb19leGVjdXRpb25fdGltZTpzdGFydF9idW5kbGVfbXNlY3M6djEnLCB0eXBlX3Vybj0nYmVhbTptZXRyaWNzOnN1bV9pbnRfNjQnLCByZXF1aXJlZF9sYWJlbHM9WydQVFJBTlNGT1JNJ10sIGFubm90YXRpb25zPVttZXRyaWNzX3BiMi5Bbm5vdGF0aW9uKGtleT0nZGVzY3JpcHRpb24nLCB2YWx1ZT0nVGhlIHRvdGFsIGVzdGltYXRlZCBleGVjdXRpb24gdGltZSBvZiB0aGUgc3RhcnQgYnVuZGxlZnVuY3Rpb24gaW4gYSBwYXJkbycpXSksIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFBST0NFU1NfQlVORExFX01TRUNTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICcnLCBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb1NwZWModXJuPSdiZWFtOm1ldHJpYzpwYXJkb19leGVjdXRpb25fdGltZTpwcm9jZXNzX2J1bmRsZV9tc2Vjczp2MScsIHR5cGVfdXJuPSdiZWFtOm1ldHJpY3M6c3VtX2ludF82NCcsIHJlcXVpcmVkX2xhYmVscz1bJ1BUUkFOU0ZPUk0nXSwgYW5ub3RhdGlvbnM9W21ldHJpY3NfcGIyLkFubm90YXRpb24oa2V5PSdkZXNjcmlwdGlvbicsIHZhbHVlPSdUaGUgdG90YWwgZXN0aW1hdGVkIGV4ZWN1dGlvbiB0aW1lIG9mIHRoZSBwcm9jZXNzIGJ1bmRsZWZ1bmN0aW9uIGluIGEgcGFyZG8nKV0pLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBGSU5JU0hfQlVORExFX01TRUNTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICcnLCBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb1NwZWModXJuPSdiZWFtOm1ldHJpYzpwYXJkb19leGVjdXRpb25fdGltZTpmaW5pc2hfYnVuZGxlX21zZWNzOnYxJywgdHlwZV91cm49J2JlYW06bWV0cmljczpzdW1faW50XzY0JywgcmVxdWlyZWRfbGFiZWxzPVsnUFRSQU5TRk9STSddLCBhbm5vdGF0aW9ucz1bbWV0cmljc19wYjIuQW5ub3RhdGlvbihrZXk9J2Rlc2NyaXB0aW9uJywgdmFsdWU9J1RoZSB0b3RhbCBlc3RpbWF0ZWQgZXhlY3V0aW9uIHRpbWUgb2YgdGhlIGZpbmlzaCBidW5kbGUgZnVuY3Rpb24gaW4gYSBwYXJkbycpXSksIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFRPVEFMX01TRUNTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICcnLCBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb1NwZWModXJuPSdiZWFtOm1ldHJpYzpwdHJhbnNmb3JtX2V4ZWN1dGlvbl90aW1lOnRvdGFsX21zZWNzOnYxJywgdHlwZV91cm49J2JlYW06bWV0cmljczpzdW1faW50XzY0JywgcmVxdWlyZWRfbGFiZWxzPVsnUFRSQU5TRk9STSddLCBhbm5vdGF0aW9ucz1bbWV0cmljc19wYjIuQW5ub3RhdGlvbihrZXk9J2Rlc2NyaXB0aW9uJywgdmFsdWU9J1RoZSB0b3RhbCBlc3RpbWF0ZWQgZXhlY3V0aW9uIHRpbWUgb2YgdGhlIHB0cmFuc2Zvcm0nKV0pLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBVU0VSX0RJU1RSSUJVVElPTl9DT1VOVEVSID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICcnLCBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb1NwZWModXJuPSdiZWFtOm1ldHJpYzp1c2VyX2Rpc3RyaWJ1dGlvbicsIHR5cGVfdXJuPSdiZWFtOm1ldHJpY3M6ZGlzdHJpYnV0aW9uX2ludF82NCcsIHJlcXVpcmVkX2xhYmVscz1bJ1BUUkFOU0ZPUk0nLCAnTkFNRVNQQUNFJywgJ05BTUUnXSwgYW5ub3RhdGlvbnM9W21ldHJpY3NfcGIyLkFubm90YXRpb24oa2V5PSdkZXNjcmlwdGlvbicsIHZhbHVlPSdVUk4gdXRpbGl6ZWQgdG8gcmVwb3J0IHVzZXIgZGlzdHJpYnV0aW9uIGNvdW50ZXJzLicpXSksIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIFdPUktfUkVNQUlOSU5HID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJycsICcnLCBtZXRyaWNzX3BiMi5Nb25pdG9yaW5nSW5mb1NwZWModXJuPSdiZWFtOm1ldHJpYzpwdHJhbnNmb3JtX3Byb2dyZXNzOnJlbWFpbmluZzp2MScsIHR5cGVfdXJuPSdiZWFtOm1ldHJpY3M6bGF0ZXN0X2RvdWJsZXMnLCByZXF1aXJlZF9sYWJlbHM9WydQVFJBTlNGT1JNJ10sIGFubm90YXRpb25zPVttZXRyaWNzX3BiMi5Bbm5vdGF0aW9uKGtleT0nZGVzY3JpcHRpb24nLCB2YWx1ZT0nVGhlIHJlbWFpbmluZyBhbW91bnQgb2Ygd29yayBmb3IgZWFjaCBhY3RpdmUgZWxlbWVudC4gRWFjaCBhY3RpdmUgZWxlbWVudCByZXByZXNlbnRzIGFuIGluZGVwZW5kZW50IGFtb3VudCBvZiB3b3JrIG5vdCBzaGFyZWQgd2l0aCBhbnkgb3RoZXIgYWN0aXZlIGVsZW1lbnQuJyldKSwgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgV09SS19DT01QTEVURUQgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnJywgJycsIG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvU3BlYyh1cm49J2JlYW06bWV0cmljOnB0cmFuc2Zvcm1fcHJvZ3Jlc3M6Y29tcGxldGVkOnYxJywgdHlwZV91cm49J2JlYW06bWV0cmljczpsYXRlc3RfZG91YmxlcycsIHJlcXVpcmVkX2xhYmVscz1bJ1BUUkFOU0ZPUk0nXSwgYW5ub3RhdGlvbnM9W21ldHJpY3NfcGIyLkFubm90YXRpb24oa2V5PSdkZXNjcmlwdGlvbicsIHZhbHVlPSdUaGUgcmVtYWluaW5nIGFtb3VudCBvZiB3b3JrIGZvciBlYWNoIGFjdGl2ZSBlbGVtZW50LiBFYWNoIGFjdGl2ZSBlbGVtZW50IHJlcHJlc2VudHMgYW4gaW5kZXBlbmRlbnQgYW1vdW50IG9mIHdvcmsgbm90IHNoYXJlZCB3aXRoIGFueSBvdGhlciBhY3RpdmUgZWxlbWVudC4nKV0pLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCgoKY2xhc3MgTW9uaXRvcmluZ0luZm9UeXBlVXJucyhvYmplY3QpOgoKICBjbGFzcyBFbnVtKG9iamVjdCk6CiAgICBTVU1fSU5UNjRfVFlQRSA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOm1ldHJpY3M6c3VtX2ludF82NCcsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQogICAgRElTVFJJQlVUSU9OX0lOVDY0X1RZUEUgPSBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZSgnYmVhbTptZXRyaWNzOmRpc3RyaWJ1dGlvbl9pbnRfNjQnLCAnJywgRU1QVFlfTU9OSVRPUklOR19JTkZPX1NQRUMsIEVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUykKICAgIExBVEVTVF9JTlQ2NF9UWVBFID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06bWV0cmljczpsYXRlc3RfaW50XzY0JywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCiAgICBMQVRFU1RfRE9VQkxFU19UWVBFID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06bWV0cmljczpsYXRlc3RfZG91YmxlcycsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKlH2UKIwjTW9uaXRvcmluZ0luZm8uTW9uaXRvcmluZ0luZm9MYWJlbHOUal0xAQBLCEsPh5SMDk1vbml0b3JpbmdJbmZvlGpdMQEASwZLD4eUjBhNb25pdG9yaW5nSW5mb1NwZWNzLkVudW2Ual0xAQBLFEseh5SME01vbml0b3JpbmdJbmZvU3BlY3OUal0xAQBLEkseh5SMG01vbml0b3JpbmdJbmZvVHlwZVVybnMuRW51bZRqXTEBAEsjSyeHlIwWTW9uaXRvcmluZ0luZm9UeXBlVXJuc5RqXTEBAEshSyeHlHV9lCiMDk1vbml0b3JpbmdJbmZvlGowAwAAjCNNb25pdG9yaW5nSW5mby5Nb25pdG9yaW5nSW5mb0xhYmVsc5RqMAMAAIwTTW9uaXRvcmluZ0luZm9TcGVjc5RqMAMAAIwYTW9uaXRvcmluZ0luZm9TcGVjcy5FbnVtlGowAwAAjBZNb25pdG9yaW5nSW5mb1R5cGVVcm5zlGowAwAAjBtNb25pdG9yaW5nSW5mb1R5cGVVcm5zLkVudW2UajADAAB1jCxhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkubWV0cmljc19wYjJfdXJuc5R0lIw4YXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLnN0YW5kYXJkX3dpbmRvd19mbnNfcGIyX3VybnOUKFgFBAAAZnJvbSAuLnV0aWxzIGltcG9ydCBQcm9wZXJ0aWVzRnJvbUVudW1WYWx1ZQpmcm9tIC4gaW1wb3J0IG1ldHJpY3NfcGIyCkVNUFRZX01PTklUT1JJTkdfSU5GT19MQUJFTF9QUk9QUyA9IG1ldHJpY3NfcGIyLk1vbml0b3JpbmdJbmZvTGFiZWxQcm9wcygpCkVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDID0gbWV0cmljc19wYjIuTW9uaXRvcmluZ0luZm9TcGVjKCkKCmNsYXNzIEZpeGVkV2luZG93c1BheWxvYWQob2JqZWN0KToKCiAgY2xhc3MgRW51bShvYmplY3QpOgogICAgUFJPUEVSVElFUyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOndpbmRvd19mbjpmaXhlZF93aW5kb3dzOnYxJywgJycsIEVNUFRZX01PTklUT1JJTkdfSU5GT19TUEVDLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fTEFCRUxfUFJPUFMpCgoKY2xhc3MgR2xvYmFsV2luZG93c1BheWxvYWQob2JqZWN0KToKCiAgY2xhc3MgRW51bShvYmplY3QpOgogICAgUFJPUEVSVElFUyA9IFByb3BlcnRpZXNGcm9tRW51bVZhbHVlKCdiZWFtOndpbmRvd19mbjpnbG9iYWxfd2luZG93czp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKCmNsYXNzIFNlc3Npb25XaW5kb3dzUGF5bG9hZChvYmplY3QpOgoKICBjbGFzcyBFbnVtKG9iamVjdCk6CiAgICBQUk9QRVJUSUVTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06d2luZG93X2ZuOnNlc3Npb25fd2luZG93czp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKCmNsYXNzIFNsaWRpbmdXaW5kb3dzUGF5bG9hZChvYmplY3QpOgoKICBjbGFzcyBFbnVtKG9iamVjdCk6CiAgICBQUk9QRVJUSUVTID0gUHJvcGVydGllc0Zyb21FbnVtVmFsdWUoJ2JlYW06d2luZG93X2ZuOnNsaWRpbmdfd2luZG93czp2MScsICcnLCBFTVBUWV9NT05JVE9SSU5HX0lORk9fU1BFQywgRU1QVFlfTU9OSVRPUklOR19JTkZPX0xBQkVMX1BST1BTKQoKlH2UKIwYRml4ZWRXaW5kb3dzUGF5bG9hZC5FbnVtlGpdMQEASwhLCYeUjBNGaXhlZFdpbmRvd3NQYXlsb2FklGpdMQEASwZLCYeUjBlHbG9iYWxXaW5kb3dzUGF5bG9hZC5FbnVtlGpdMQEASw5LD4eUjBRHbG9iYWxXaW5kb3dzUGF5bG9hZJRqXTEBAEsMSw+HlIwaU2Vzc2lvbldpbmRvd3NQYXlsb2FkLkVudW2Ual0xAQBLFEsVh5SMFVNlc3Npb25XaW5kb3dzUGF5bG9hZJRqXTEBAEsSSxWHlIwaU2xpZGluZ1dpbmRvd3NQYXlsb2FkLkVudW2Ual0xAQBLGksbh5SMFVNsaWRpbmdXaW5kb3dzUGF5bG9hZJRqXTEBAEsYSxuHlHV9lCiME0ZpeGVkV2luZG93c1BheWxvYWSUahEEAACMGEZpeGVkV2luZG93c1BheWxvYWQuRW51bZRqEQQAAIwUR2xvYmFsV2luZG93c1BheWxvYWSUahEEAACMGUdsb2JhbFdpbmRvd3NQYXlsb2FkLkVudW2UahEEAACMFVNlc3Npb25XaW5kb3dzUGF5bG9hZJRqEQQAAIwaU2Vzc2lvbldpbmRvd3NQYXlsb2FkLkVudW2UahEEAACMFVNsaWRpbmdXaW5kb3dzUGF5bG9hZJRqEQQAAIwaU2xpZGluZ1dpbmRvd3NQYXlsb2FkLkVudW2UahEEAAB1jDhhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuc3RhbmRhcmRfd2luZG93X2Zuc19wYjJfdXJuc5R0lIwSYXBhY2hlX2JlYW0ucHZhbHVllChY1FMAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUFZhbHVlLCBQQ29sbGVjdGlvbjogb25lIG5vZGUgb2YgYSBkYXRhZmxvdyBncmFwaC4KCkEgbm9kZSBvZiBhIGRhdGFmbG93IHByb2Nlc3NpbmcgZ3JhcGggaXMgYSBQVmFsdWUuIEN1cnJlbnRseSwgdGhlcmUgaXMgb25seQpvbmUgdHlwZTogUENvbGxlY3Rpb24gKGEgcG90ZW50aWFsbHkgdmVyeSBsYXJnZSBzZXQgb2YgYXJiaXRyYXJ5IHZhbHVlcykuCk9uY2UgY3JlYXRlZCwgYSBQVmFsdWUgYmVsb25ncyB0byBhIHBpcGVsaW5lIGFuZCBoYXMgYW4gYXNzb2NpYXRlZAp0cmFuc2Zvcm0gKG9mIHR5cGUgUFRyYW5zZm9ybSksIHdoaWNoIGRlc2NyaWJlcyBob3cgdGhlIHZhbHVlIHdpbGwgYmUKcHJvZHVjZWQgd2hlbiB0aGUgcGlwZWxpbmUgZ2V0cyBleGVjdXRlZC4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBpdGVydG9vbHMKZnJvbSBidWlsdGlucyBpbXBvcnQgaGV4CmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORwpmcm9tIHR5cGluZyBpbXBvcnQgQW55CmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CmZyb20gdHlwaW5nIGltcG9ydCBHZW5lcmljCmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYXRvcgpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSB0eXBpbmcgaW1wb3J0IFNlcXVlbmNlCmZyb20gdHlwaW5nIGltcG9ydCBUeXBlVmFyCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBjb21tb25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBweXRob25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgoKaWYgVFlQRV9DSEVDS0lORzoKICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHNpZGVpbnB1dHMKICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUGFyRG8KICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgV2luZG93aW5nCiAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZQogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0IGltcG9ydCBQaXBlbGluZUNvbnRleHQKCl9fYWxsX18gPSBbCiAgICAnUENvbGxlY3Rpb24nLAogICAgJ1RhZ2dlZE91dHB1dCcsCiAgICAnQXNTaW5nbGV0b24nLAogICAgJ0FzSXRlcicsCiAgICAnQXNMaXN0JywKICAgICdBc0RpY3QnLAogICAgJ0VtcHR5U2lkZUlucHV0JywKXQoKVCA9IFR5cGVWYXIoJ1QnKQoKCmNsYXNzIFBWYWx1ZShvYmplY3QpOgogICIiIkJhc2UgY2xhc3MgZm9yIFBDb2xsZWN0aW9uLgoKICBEYXRhZmxvdyB1c2VycyBzaG91bGQgbm90IGNvbnN0cnVjdCBQVmFsdWUgb2JqZWN0cyBkaXJlY3RseSBpbiB0aGVpcgogIHBpcGVsaW5lcy4KCiAgQSBQVmFsdWUgaGFzIHRoZSBmb2xsb3dpbmcgbWFpbiBjaGFyYWN0ZXJpc3RpY3M6CiAgICAoMSkgQmVsb25ncyB0byBhIHBpcGVsaW5lLiBBZGRlZCBkdXJpbmcgb2JqZWN0IGluaXRpYWxpemF0aW9uLgogICAgKDIpIEhhcyBhIHRyYW5zZm9ybSB0aGF0IGNhbiBjb21wdXRlIHRoZSB2YWx1ZSBpZiBleGVjdXRlZC4KICAgICgzKSBIYXMgYSB2YWx1ZSB3aGljaCBpcyBtZWFuaW5nZnVsIGlmIHRoZSB0cmFuc2Zvcm0gd2FzIGV4ZWN1dGVkLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgcGlwZWxpbmUsICAjIHR5cGU6IFBpcGVsaW5lCiAgICAgICAgICAgICAgIHRhZz1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFtzdHJdCiAgICAgICAgICAgICAgIGVsZW1lbnRfdHlwZT1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFt0eXBlXQogICAgICAgICAgICAgICB3aW5kb3dpbmc9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbV2luZG93aW5nXQogICAgICAgICAgICAgICBpc19ib3VuZGVkPVRydWUsCiAgICAgICAgICAgICAgKToKICAgICIiIkluaXRpYWxpemVzIGEgUFZhbHVlIHdpdGggYWxsIGFyZ3VtZW50cyBoaWRkZW4gYmVoaW5kIGtleXdvcmQgYXJndW1lbnRzLgoKICAgIEFyZ3M6CiAgICAgIHBpcGVsaW5lOiBQaXBlbGluZSBvYmplY3QgZm9yIHRoaXMgUFZhbHVlLgogICAgICB0YWc6IFRhZyBvZiB0aGlzIFBWYWx1ZS4KICAgICAgZWxlbWVudF90eXBlOiBUaGUgdHlwZSBvZiB0aGlzIFBWYWx1ZS4KICAgICIiIgogICAgc2VsZi5waXBlbGluZSA9IHBpcGVsaW5lCiAgICBzZWxmLnRhZyA9IHRhZwogICAgc2VsZi5lbGVtZW50X3R5cGUgPSBlbGVtZW50X3R5cGUKICAgICMgVGhlIEFwcGxpZWRQVHJhbnNmb3JtIGluc3RhbmNlIGZvciB0aGUgYXBwbGljYXRpb24gb2YgdGhlIFBUcmFuc2Zvcm0KICAgICMgZ2VuZXJhdGluZyB0aGlzIFBWYWx1ZS4gVGhlIGZpZWxkIGdldHMgaW5pdGlhbGl6ZWQgd2hlbiBhIHRyYW5zZm9ybQogICAgIyBnZXRzIGFwcGxpZWQuCiAgICBzZWxmLnByb2R1Y2VyID0gTm9uZSAgIyB0eXBlOiBPcHRpb25hbFtBcHBsaWVkUFRyYW5zZm9ybV0KICAgIHNlbGYuaXNfYm91bmRlZCA9IGlzX2JvdW5kZWQKICAgIGlmIHdpbmRvd2luZzoKICAgICAgc2VsZi5fd2luZG93aW5nID0gd2luZG93aW5nCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3N0cl9pbnRlcm5hbCgpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnPCVzIGF0ICVzPicgJSAoc2VsZi5fc3RyX2ludGVybmFsKCksIGhleChpZChzZWxmKSkpCgogIGRlZiBfc3RyX2ludGVybmFsKHNlbGYpOgogICAgcmV0dXJuICIlc1slcy4lc10iICUgKAogICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgIHNlbGYucHJvZHVjZXIuZnVsbF9sYWJlbCBpZiBzZWxmLnByb2R1Y2VyIGVsc2UgTm9uZSwKICAgICAgICBzZWxmLnRhZykKCiAgZGVmIGFwcGx5KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAiIiJBcHBsaWVzIGEgdHJhbnNmb3JtIG9yIGNhbGxhYmxlIHRvIGEgUFZhbHVlLgoKICAgIEFyZ3M6CiAgICAgICphcmdzOiBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KICAgICAgKiprd2FyZ3M6IGtleXdvcmQgYXJndW1lbnRzLgoKICAgIFRoZSBtZXRob2Qgd2lsbCBpbnNlcnQgdGhlIHB2YWx1ZSBhcyB0aGUgbmV4dCBhcmd1bWVudCBmb2xsb3dpbmcgYW4KICAgIG9wdGlvbmFsIGZpcnN0IGxhYmVsIGFuZCBhIHRyYW5zZm9ybS9jYWxsYWJsZSBvYmplY3QuIEl0IHdpbGwgY2FsbCB0aGUKICAgIHBpcGVsaW5lLmFwcGx5KCkgbWV0aG9kIHdpdGggdGhpcyBtb2RpZmllZCBhcmd1bWVudCBsaXN0LgogICAgIiIiCiAgICBhcmdsaXN0ID0gbGlzdChhcmdzKQogICAgYXJnbGlzdC5pbnNlcnQoMSwgc2VsZikKICAgIHJldHVybiBzZWxmLnBpcGVsaW5lLmFwcGx5KCphcmdsaXN0LCAqKmt3YXJncykKCiAgZGVmIF9fb3JfXyhzZWxmLCBwdHJhbnNmb3JtKToKICAgIHJldHVybiBzZWxmLnBpcGVsaW5lLmFwcGx5KHB0cmFuc2Zvcm0sIHNlbGYpCgoKY2xhc3MgUENvbGxlY3Rpb24oUFZhbHVlLCBHZW5lcmljW1RdKToKICAiIiJBIG11bHRpcGxlIHZhbHVlcyAocG90ZW50aWFsbHkgaHVnZSkgY29udGFpbmVyLgoKICBEYXRhZmxvdyB1c2VycyBzaG91bGQgbm90IGNvbnN0cnVjdCBQQ29sbGVjdGlvbiBvYmplY3RzIGRpcmVjdGx5IGluIHRoZWlyCiAgcGlwZWxpbmVzLgogICIiIgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgaXNpbnN0YW5jZShvdGhlciwgUENvbGxlY3Rpb24pOgogICAgICByZXR1cm4gc2VsZi50YWcgPT0gb3RoZXIudGFnIGFuZCBzZWxmLnByb2R1Y2VyID09IG90aGVyLnByb2R1Y2VyCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgoc2VsZi50YWcsIHNlbGYucHJvZHVjZXIpKQoKICBAcHJvcGVydHkKICBkZWYgd2luZG93aW5nKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBXaW5kb3dpbmcKICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfd2luZG93aW5nJyk6CiAgICAgIGFzc2VydCBzZWxmLnByb2R1Y2VyIGlzIG5vdCBOb25lIGFuZCBzZWxmLnByb2R1Y2VyLnRyYW5zZm9ybSBpcyBub3QgTm9uZQogICAgICBzZWxmLl93aW5kb3dpbmcgPSBzZWxmLnByb2R1Y2VyLnRyYW5zZm9ybS5nZXRfd2luZG93aW5nKAogICAgICAgICAgc2VsZi5wcm9kdWNlci5pbnB1dHMpCiAgICByZXR1cm4gc2VsZi5fd2luZG93aW5nCgogIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHVudXNlZF92ZXJzaW9uKToKICAgICMgUGlja2xpbmcgYSBQQ29sbGVjdGlvbiBpcyBhbG1vc3QgYWx3YXlzIHRoZSB3cm9uZyB0aGluZyB0byBkbywgYnV0IHdlCiAgICAjIGNhbid0IHByb2hpYml0IGl0IGFzIGl0IG9mdGVuIGdldHMgaW1wbGljaXRseSBwaWNrZWQgdXAgKGUuZy4gYXMgcGFydAogICAgIyBvZiBhIGNsb3N1cmUpLgogICAgcmV0dXJuIF9JbnZhbGlkVW5waWNrbGVkUENvbGxlY3Rpb24sICgpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV8ocGNvbGwpOgogICAgIyB0eXBlOiAoUFZhbHVlKSAtPiBQQ29sbGVjdGlvbgoKICAgICIiIkNyZWF0ZSBhIFBDb2xsZWN0aW9uLCB1c2luZyBhbm90aGVyIFBDb2xsZWN0aW9uIGFzIGEgc3RhcnRpbmcgcG9pbnQuCgogICAgVHJhbnNmZXJzIHJlbGV2YW50IGF0dHJpYnV0ZXMuCiAgICAiIiIKICAgIHJldHVybiBQQ29sbGVjdGlvbihwY29sbC5waXBlbGluZSwgaXNfYm91bmRlZD1wY29sbC5pc19ib3VuZGVkKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gYmVhbV9ydW5uZXJfYXBpX3BiMi5QQ29sbGVjdGlvbgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuUENvbGxlY3Rpb24oCiAgICAgICAgdW5pcXVlX25hbWU9c2VsZi5fdW5pcXVlX25hbWUoKSwKICAgICAgICBjb2Rlcl9pZD1jb250ZXh0LmNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBlKHNlbGYuZWxlbWVudF90eXBlKSwKICAgICAgICBpc19ib3VuZGVkPWJlYW1fcnVubmVyX2FwaV9wYjIuSXNCb3VuZGVkLkJPVU5ERUQKICAgICAgICBpZiBzZWxmLmlzX2JvdW5kZWQgZWxzZSBiZWFtX3J1bm5lcl9hcGlfcGIyLklzQm91bmRlZC5VTkJPVU5ERUQsCiAgICAgICAgd2luZG93aW5nX3N0cmF0ZWd5X2lkPWNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2lkKAogICAgICAgICAgICBzZWxmLndpbmRvd2luZykpCgogIGRlZiBfdW5pcXVlX25hbWUoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IHN0cgogICAgaWYgc2VsZi5wcm9kdWNlcjoKICAgICAgcmV0dXJuICclZCVzLiVzJyAlICgKICAgICAgICAgIGxlbihzZWxmLnByb2R1Y2VyLmZ1bGxfbGFiZWwpLCBzZWxmLnByb2R1Y2VyLmZ1bGxfbGFiZWwsIHNlbGYudGFnKQogICAgZWxzZToKICAgICAgcmV0dXJuICdQQ29sbGVjdGlvbiVzJyAlIGlkKHNlbGYpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgICMgdHlwZTogKGJlYW1fcnVubmVyX2FwaV9wYjIuUENvbGxlY3Rpb24sIFBpcGVsaW5lQ29udGV4dCkgLT4gUENvbGxlY3Rpb24KICAgICMgUHJvZHVjZXIgYW5kIHRhZyB3aWxsIGJlIGZpbGxlZCBpbiBsYXRlciwgdGhlIGtleSBwb2ludCBpcyB0aGF0IHRoZSBzYW1lCiAgICAjIG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdGhlIHNhbWUgcGNvbGxlY3Rpb24gaWQuCiAgICAjIFdlIHBhc3MgTm9uZSBmb3IgdGhlIFBDb2xsZWN0aW9uJ3MgUGlwZWxpbmUgdG8gYXZvaWQgYSBjeWNsZSBkdXJpbmcKICAgICMgZGVzZXJpYWxpemF0aW9uLiAgSXQgd2lsbCBiZSBwb3B1bGF0ZWQgc29vbiBhZnRlciB0aGlzIGNhbGwsIGluCiAgICAjIFBpcGVsaW5lLmZyb21fcnVubmVyX2FwaSgpLiBUaGlzIGJyaWVmIHBlcmlvZCBpcyB0aGUgb25seSB0aW1lIHRoYXQKICAgICMgUENvbGxlY3Rpb24ucGlwZWxpbmUgaXMgYWxsb3dlZCB0byBiZSBOb25lLgogICAgcmV0dXJuIFBDb2xsZWN0aW9uKAogICAgICAgIE5vbmUsICAjIHR5cGU6IGlnbm9yZVthcmctdHlwZV0KICAgICAgICBlbGVtZW50X3R5cGU9Y29udGV4dC5lbGVtZW50X3R5cGVfZnJvbV9jb2Rlcl9pZChwcm90by5jb2Rlcl9pZCksCiAgICAgICAgd2luZG93aW5nPWNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2J5X2lkKAogICAgICAgICAgICBwcm90by53aW5kb3dpbmdfc3RyYXRlZ3lfaWQpLAogICAgICAgIGlzX2JvdW5kZWQ9cHJvdG8uaXNfYm91bmRlZCA9PSBiZWFtX3J1bm5lcl9hcGlfcGIyLklzQm91bmRlZC5CT1VOREVEKQoKCmNsYXNzIF9JbnZhbGlkVW5waWNrbGVkUENvbGxlY3Rpb24ob2JqZWN0KToKICBwYXNzCgoKY2xhc3MgUEJlZ2luKFBWYWx1ZSk6CiAgIiIiQSBwaXBlbGluZSBiZWdpbiBtYXJrZXIgdXNlZCBhcyBpbnB1dCB0byBjcmVhdGUvcmVhZCB0cmFuc2Zvcm1zLgoKICBUaGUgY2xhc3MgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIHJlcHJlc2VudCBpbnB1dHMgdG8gQ3JlYXRlIGFuZCBSZWFkCiAgdHJhbnNmb3Jtcy4gVGhpcyBhbGxvd3MgdXMgdG8gaGF2ZSB0cmFuc2Zvcm1zIHRoYXQgdW5pZm9ybWx5IHRha2UgUFZhbHVlKHMpCiAgYXMgaW5wdXRzLgogICIiIgogIHBhc3MKCgpjbGFzcyBQRG9uZShQVmFsdWUpOgogICIiIlBEb25lIGlzIHRoZSBvdXRwdXQgb2YgYSB0cmFuc2Zvcm0gdGhhdCBoYXMgYSB0cml2aWFsIHJlc3VsdCBzdWNoIGFzIFdyaXRlLgogICIiIgogIHBhc3MKCgpjbGFzcyBEb091dHB1dHNUdXBsZShvYmplY3QpOgogICIiIkFuIG9iamVjdCBncm91cGluZyB0aGUgbXVsdGlwbGUgb3V0cHV0cyBvZiBhIFBhckRvIG9yIEZsYXRNYXAgdHJhbnNmb3JtLiIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgcGlwZWxpbmUsICAjIHR5cGU6IFBpcGVsaW5lCiAgICAgICAgICAgICAgIHRyYW5zZm9ybSwgICMgdHlwZTogUGFyRG8KICAgICAgICAgICAgICAgdGFncywgICMgdHlwZTogU2VxdWVuY2Vbc3RyXQogICAgICAgICAgICAgICBtYWluX3RhZyAgIyB0eXBlOiBPcHRpb25hbFtzdHJdCiAgICAgICAgICAgICAgKToKICAgIHNlbGYuX3BpcGVsaW5lID0gcGlwZWxpbmUKICAgIHNlbGYuX3RhZ3MgPSB0YWdzCiAgICBzZWxmLl9tYWluX3RhZyA9IG1haW5fdGFnCiAgICBzZWxmLl90cmFuc2Zvcm0gPSB0cmFuc2Zvcm0KICAgICMgVGhlIEFwcGx5UFRyYW5zZm9ybSBpbnN0YW5jZSBmb3IgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBtdWx0aSBGbGF0TWFwCiAgICAjIGdlbmVyYXRpbmcgdGhpcyB2YWx1ZS4gVGhlIGZpZWxkIGdldHMgaW5pdGlhbGl6ZWQgd2hlbiBhIHRyYW5zZm9ybQogICAgIyBnZXRzIGFwcGxpZWQuCiAgICBzZWxmLnByb2R1Y2VyID0gTm9uZSAgIyB0eXBlOiBPcHRpb25hbFtBcHBsaWVkUFRyYW5zZm9ybV0KICAgICMgRGljdGlvbmFyeSBvZiBQQ29sbGVjdGlvbnMgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggdGFncy4KICAgIHNlbGYuX3Bjb2xscyA9IHt9ICAjIHR5cGU6IERpY3RbT3B0aW9uYWxbc3RyXSwgUENvbGxlY3Rpb25dCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXM+JyAlIHNlbGYuX3N0cl9pbnRlcm5hbCgpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnPCVzIGF0ICVzPicgJSAoc2VsZi5fc3RyX2ludGVybmFsKCksIGhleChpZChzZWxmKSkpCgogIGRlZiBfc3RyX2ludGVybmFsKHNlbGYpOgogICAgcmV0dXJuICclcyBtYWluX3RhZz0lcyB0YWdzPSVzIHRyYW5zZm9ybT0lcycgJSAoCiAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX21haW5fdGFnLCBzZWxmLl90YWdzLCBzZWxmLl90cmFuc2Zvcm0pCgogIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gSXRlcmF0b3JbUENvbGxlY3Rpb25dCgogICAgIiIiSXRlcmF0ZXMgb3ZlciB0YWdzIHJldHVybmluZyBmb3IgZWFjaCBjYWxsIGEgKHRhZywgcGNvbGxlY3Rpb24pIHBhaXIuIiIiCiAgICBpZiBzZWxmLl9tYWluX3RhZyBpcyBub3QgTm9uZToKICAgICAgeWllbGQgc2VsZltzZWxmLl9tYWluX3RhZ10KICAgIGZvciB0YWcgaW4gc2VsZi5fdGFnczoKICAgICAgeWllbGQgc2VsZlt0YWddCgogIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB0YWcpOgogICAgIyB0eXBlOiAoc3RyKSAtPiBQQ29sbGVjdGlvbgogICAgIyBTcGVjaWFsIG1ldGhvZHMgd2hpY2ggbWF5IGJlIGFjY2Vzc2VkIGJlZm9yZSB0aGUgb2JqZWN0IGlzCiAgICAjIGZ1bGx5IGNvbnN0cnVjdGVkIChlLmcuIGluIHVucGlja2xpbmcpLgogICAgaWYgdGFnWzoyXSA9PSB0YWdbLTI6XSA9PSAnX18nOgogICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIHRhZykgICMgdHlwZTogaWdub3JlCiAgICByZXR1cm4gc2VsZlt0YWddCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0YWcpOgogICAgIyB0eXBlOiAoVW5pb25baW50LCBzdHIsIE5vbmVdKSAtPiBQQ29sbGVjdGlvbgogICAgIyBBY2NlcHQgaW50IHRhZ3Mgc28gdGhhdCB3ZSBjYW4gbG9vayBhdCBQYXJ0aXRpb24gdGFncyB3aXRoIHRoZQogICAgIyBzYW1lIGludHMgdGhhdCB3ZSB1c2VkIGluIHRoZSBwYXJ0aXRpb24gZnVuY3Rpb24uCiAgICAjIFRPRE8oZ2lsZGVhKTogQ29uc2lkZXIgcmVxdWlyaW5nIHN0cmluZy1iYXNlZCB0YWdzIGV2ZXJ5d2hlcmUuCiAgICAjIFRoaXMgd2lsbCByZXF1aXJlIGEgcGFydGl0aW9uIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgcmV0dXJuIGludHMuCiAgICBpZiBpc2luc3RhbmNlKHRhZywgaW50KToKICAgICAgdGFnID0gc3RyKHRhZykKICAgIGlmIHRhZyA9PSBzZWxmLl9tYWluX3RhZzoKICAgICAgdGFnID0gTm9uZQogICAgZWxpZiBzZWxmLl90YWdzIGFuZCB0YWcgbm90IGluIHNlbGYuX3RhZ3M6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAiVGFnICclcycgaXMgbmVpdGhlciB0aGUgbWFpbiB0YWcgJyVzJyAiCiAgICAgICAgICAibm9yIGFueSBvZiB0aGUgdGFncyAlcyIgJSAodGFnLCBzZWxmLl9tYWluX3RhZywgc2VsZi5fdGFncykpCiAgICAjIENoZWNrIGlmIHdlIGFjY2Vzc2VkIHRoaXMgdGFnIGJlZm9yZS4KICAgIGlmIHRhZyBpbiBzZWxmLl9wY29sbHM6CiAgICAgIHJldHVybiBzZWxmLl9wY29sbHNbdGFnXQoKICAgIGFzc2VydCBzZWxmLnByb2R1Y2VyIGlzIG5vdCBOb25lCiAgICBpZiB0YWcgaXMgbm90IE5vbmU6CiAgICAgIHNlbGYuX3RyYW5zZm9ybS5vdXRwdXRfdGFncy5hZGQodGFnKQogICAgICBwY29sbCA9IFBDb2xsZWN0aW9uKHNlbGYuX3BpcGVsaW5lLCB0YWc9dGFnLCBlbGVtZW50X3R5cGU9dHlwZWhpbnRzLkFueSkKICAgICAgIyBUcmFuc2ZlciB0aGUgcHJvZHVjZXIgZnJvbSB0aGUgRG9PdXRwdXRzVHVwbGUgdG8gdGhlIHJlc3VsdGluZwogICAgICAjIFBDb2xsZWN0aW9uLgogICAgICBwY29sbC5wcm9kdWNlciA9IHNlbGYucHJvZHVjZXIucGFydHNbMF0KICAgICAgIyBBZGQgdGhpcyBhcyBhbiBvdXRwdXQgdG8gYm90aCB0aGUgaW5uZXIgUGFyRG8gYW5kIHRoZSBvdXRlciBfTXVsdGlQYXJEbwogICAgICAjIFBUcmFuc2Zvcm1zLgogICAgICBpZiB0YWcgbm90IGluIHNlbGYucHJvZHVjZXIucGFydHNbMF0ub3V0cHV0czoKICAgICAgICBzZWxmLnByb2R1Y2VyLnBhcnRzWzBdLmFkZF9vdXRwdXQocGNvbGwsIHRhZykKICAgICAgICBzZWxmLnByb2R1Y2VyLmFkZF9vdXRwdXQocGNvbGwsIHRhZykKICAgIGVsc2U6CiAgICAgICMgTWFpbiBvdXRwdXQgaXMgb3V0cHV0IG9mIGlubmVyIFBhckRvLgogICAgICBwdmFsID0gc2VsZi5wcm9kdWNlci5wYXJ0c1swXS5vdXRwdXRzW05vbmVdCiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHB2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFBDb2xsZWN0aW9uKSwgKCJEb091dHB1dHNUdXBsZSBzaG91bGQgZm9sbG93IGEgUGFyRG8uIikKICAgICAgcGNvbGwgPSBwdmFsCiAgICBzZWxmLl9wY29sbHNbdGFnXSA9IHBjb2xsCiAgICByZXR1cm4gcGNvbGwKCgpjbGFzcyBUYWdnZWRPdXRwdXQob2JqZWN0KToKICAiIiJBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdGFnZ2VkIHZhbHVlLgoKICBQYXJEbywgTWFwLCBhbmQgRmxhdE1hcCB0cmFuc2Zvcm1zIGNhbiBlbWl0IHZhbHVlcyBvbiBtdWx0aXBsZSBvdXRwdXRzIHdoaWNoCiAgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgc3RyaW5nIHRhZ3MuIFRoZSBEb0ZuIHdpbGwgcmV0dXJuIHBsYWluIHZhbHVlcwogIGlmIGl0IHdhbnRzIHRvIGVtaXQgb24gdGhlIG1haW4gb3V0cHV0IGFuZCBUYWdnZWRPdXRwdXQgb2JqZWN0cwogIGlmIGl0IHdhbnRzIHRvIGVtaXQgYSB2YWx1ZSBvbiBhIHNwZWNpZmljIHRhZ2dlZCBvdXRwdXQuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgdmFsdWUpOgogICAgIyB0eXBlOiAoc3RyLCBBbnkpIC0+IE5vbmUKICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhZywgKHN0ciwgdW5pY29kZSkpOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnQXR0ZW1wdGluZyB0byBjcmVhdGUgYSBUYWdnZWRPdXRwdXQgd2l0aCBub24tc3RyaW5nIHRhZyAlcycgJQogICAgICAgICAgKHRhZywgKSkKICAgIHNlbGYudGFnID0gdGFnCiAgICBzZWxmLnZhbHVlID0gdmFsdWUKCgpjbGFzcyBBc1NpZGVJbnB1dChvYmplY3QpOgogICIiIk1hcmtlciBzcGVjaWZ5aW5nIHRoYXQgYSBQQ29sbGVjdGlvbiB3aWxsIGJlIHVzZWQgYXMgYSBzaWRlIGlucHV0LgoKICBXaGVuIGEgUENvbGxlY3Rpb24gaXMgc3VwcGxpZWQgYXMgYSBzaWRlIGlucHV0IHRvIGEgUFRyYW5zZm9ybSwgaXQgaXMKICBuZWNlc3NhcnkgdG8gaW5kaWNhdGUgaG93IHRoZSBQQ29sbGVjdGlvbiBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUKICBhcyBhIFBUcmFuc2Zvcm0gc2lkZSBhcmd1bWVudCAoZS5nLiBpbiB0aGUgZm9ybSBvZiBhbiBpdGVyYWJsZSwgbWFwcGluZywKICBvciBzaW5nbGUgdmFsdWUpLiAgVGhpcyBjbGFzcyBpcyB0aGUgc3VwZXJjbGFzcyBvZiBhbGwgdGhlIHZhcmlvdXMKICBvcHRpb25zLCBhbmQgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuIChTZWUgaW5zdGVhZCBBc1NpbmdsZXRvbiwKICBBc0l0ZXIsIGV0Yy4pCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBjb2xsKToKICAgICMgdHlwZTogKFBDb2xsZWN0aW9uKSAtPiBOb25lCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHNpZGVpbnB1dHMKICAgIHNlbGYucHZhbHVlID0gcGNvbGwKICAgIHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuID0gc2lkZWlucHV0cy5kZWZhdWx0X3dpbmRvd19tYXBwaW5nX2ZuKAogICAgICAgIHBjb2xsLndpbmRvd2luZy53aW5kb3dmbikKCiAgZGVmIF92aWV3X29wdGlvbnMoc2VsZik6CiAgICAiIiJJbnRlcm5hbCBvcHRpb25zIGNvcnJlc3BvbmRpbmcgdG8gc3BlY2lmaWMgdmlldy4KCiAgICBJbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIGJ5IHJ1bm5lciBpbXBsZW1lbnRhdGlvbnMuCgogICAgUmV0dXJuczoKICAgICAgVHVwbGUgb2Ygb3B0aW9ucyBmb3IgdGhlIGdpdmVuIHZpZXcuCiAgICAiIiIKICAgIHJldHVybiB7J3dpbmRvd19tYXBwaW5nX2ZuJzogc2VsZi5fd2luZG93X21hcHBpbmdfZm59CgogIEBwcm9wZXJ0eQogIGRlZiBlbGVtZW50X3R5cGUoc2VsZik6CiAgICByZXR1cm4gdHlwZWhpbnRzLkFueQoKICAjIFRPRE8ocm9iZXJ0d2IpOiBHZXQgcmlkIG9mIF9mcm9tX3J1bnRpbWVfaXRlcmFibGUgYW5kIF92aWV3X29wdGlvbnMKICAjIGluIGZhdm9yIG9mIF9zaWRlX2lucHV0X2RhdGEoKS4KICBkZWYgX3NpZGVfaW5wdXRfZGF0YShzZWxmKToKICAgICMgdHlwZTogKCkgLT4gU2lkZUlucHV0RGF0YQogICAgdmlld19vcHRpb25zID0gc2VsZi5fdmlld19vcHRpb25zKCkKICAgIGZyb21fcnVudGltZV9pdGVyYWJsZSA9IHR5cGUoc2VsZikuX2Zyb21fcnVudGltZV9pdGVyYWJsZQogICAgcmV0dXJuIFNpZGVJbnB1dERhdGEoCiAgICAgICAgY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuSVRFUkFCTEUudXJuLAogICAgICAgIHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuLAogICAgICAgIGxhbWJkYSBpdGVyYWJsZTogZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0ZXJhYmxlLCB2aWV3X29wdGlvbnMpKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gYmVhbV9ydW5uZXJfYXBpX3BiMi5TaWRlSW5wdXQKICAgIHJldHVybiBzZWxmLl9zaWRlX2lucHV0X2RhdGEoKS50b19ydW5uZXJfYXBpKGNvbnRleHQpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCAgIyB0eXBlOiBiZWFtX3J1bm5lcl9hcGlfcGIyLlNpZGVJbnB1dAogICAgICAgICAgICAgICAgICAgICAgY29udGV4dCAgIyB0eXBlOiBQaXBlbGluZUNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgKToKICAgICMgdHlwZTogKC4uLikgLT4gX1VucGlja2xlZFNpZGVJbnB1dAogICAgcmV0dXJuIF9VbnBpY2tsZWRTaWRlSW5wdXQoU2lkZUlucHV0RGF0YS5mcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9mcm9tX3J1bnRpbWVfaXRlcmFibGUoaXQsIG9wdGlvbnMpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgcmVxdWlyZXNfa2V5ZWRfaW5wdXQoc2VsZik6CiAgICByZXR1cm4gRmFsc2UKCgpjbGFzcyBfVW5waWNrbGVkU2lkZUlucHV0KEFzU2lkZUlucHV0KToKICBkZWYgX19pbml0X18oc2VsZiwgc2lkZV9pbnB1dF9kYXRhKToKICAgICMgdHlwZTogKFNpZGVJbnB1dERhdGEpIC0+IE5vbmUKICAgIHNlbGYuX2RhdGEgPSBzaWRlX2lucHV0X2RhdGEKICAgIHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuID0gc2lkZV9pbnB1dF9kYXRhLndpbmRvd19tYXBwaW5nX2ZuCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fcnVudGltZV9pdGVyYWJsZShpdCwgb3B0aW9ucyk6CiAgICByZXR1cm4gb3B0aW9uc1snZGF0YSddLnZpZXdfZm4oaXQpCgogIGRlZiBfdmlld19vcHRpb25zKHNlbGYpOgogICAgcmV0dXJuIHsKICAgICAgICAnZGF0YSc6IHNlbGYuX2RhdGEsCiAgICAgICAgIyBGb3Igbm9uLWZuLWFwaSBydW5uZXJzLgogICAgICAgICd3aW5kb3dfbWFwcGluZ19mbic6IHNlbGYuX2RhdGEud2luZG93X21hcHBpbmdfZm4sCiAgICB9CgogIGRlZiBfc2lkZV9pbnB1dF9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2RhdGEKCgpjbGFzcyBTaWRlSW5wdXREYXRhKG9iamVjdCk6CiAgIiIiQWxsIG9mIHRoZSBkYXRhIGFib3V0IGEgc2lkZSBpbnB1dCBleGNlcHQgZm9yIHRoZSBib3VuZCBQQ29sbGVjdGlvbi4iIiIKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgYWNjZXNzX3BhdHRlcm4sICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICB3aW5kb3dfbWFwcGluZ19mbiwgICMgdHlwZTogc2lkZWlucHV0cy5XaW5kb3dNYXBwaW5nRm4KICAgICAgICAgICAgICAgdmlld19mbgogICAgICAgICAgICAgICk6CiAgICBzZWxmLmFjY2Vzc19wYXR0ZXJuID0gYWNjZXNzX3BhdHRlcm4KICAgIHNlbGYud2luZG93X21hcHBpbmdfZm4gPSB3aW5kb3dfbWFwcGluZ19mbgogICAgc2VsZi52aWV3X2ZuID0gdmlld19mbgoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gYmVhbV9ydW5uZXJfYXBpX3BiMi5TaWRlSW5wdXQKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlNpZGVJbnB1dCgKICAgICAgICBhY2Nlc3NfcGF0dGVybj1iZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICAgICAgdXJuPXNlbGYuYWNjZXNzX3BhdHRlcm4pLAogICAgICAgIHZpZXdfZm49YmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWMoCiAgICAgICAgICAgIHVybj1weXRob25fdXJucy5QSUNLTEVEX1ZJRVdGTiwKICAgICAgICAgICAgcGF5bG9hZD1waWNrbGVyLmR1bXBzKHNlbGYudmlld19mbikpLAogICAgICAgIHdpbmRvd19tYXBwaW5nX2ZuPWJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjKAogICAgICAgICAgICB1cm49cHl0aG9uX3VybnMuUElDS0xFRF9XSU5ET1dfTUFQUElOR19GTiwKICAgICAgICAgICAgcGF5bG9hZD1waWNrbGVyLmR1bXBzKHNlbGYud2luZG93X21hcHBpbmdfZm4pKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIHVudXNlZF9jb250ZXh0KToKICAgICMgdHlwZTogKGJlYW1fcnVubmVyX2FwaV9wYjIuU2lkZUlucHV0LCBQaXBlbGluZUNvbnRleHQpIC0+IFNpZGVJbnB1dERhdGEKICAgIGFzc2VydCBwcm90by52aWV3X2ZuLnVybiA9PSBweXRob25fdXJucy5QSUNLTEVEX1ZJRVdGTgogICAgYXNzZXJ0ICgKICAgICAgICBwcm90by53aW5kb3dfbWFwcGluZ19mbi51cm4gPT0gcHl0aG9uX3VybnMuUElDS0xFRF9XSU5ET1dfTUFQUElOR19GTikKICAgIHJldHVybiBTaWRlSW5wdXREYXRhKAogICAgICAgIHByb3RvLmFjY2Vzc19wYXR0ZXJuLnVybiwKICAgICAgICBwaWNrbGVyLmxvYWRzKHByb3RvLndpbmRvd19tYXBwaW5nX2ZuLnBheWxvYWQpLAogICAgICAgIHBpY2tsZXIubG9hZHMocHJvdG8udmlld19mbi5wYXlsb2FkKSkKCgpjbGFzcyBBc1NpbmdsZXRvbihBc1NpZGVJbnB1dCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgdGhhdCBhbiBlbnRpcmUgUENvbGxlY3Rpb24gaXMgdG8gYmUgdXNlZCBhcyBhIHNpZGUgaW5wdXQuCgogIFdoZW4gYSBQQ29sbGVjdGlvbiBpcyBzdXBwbGllZCBhcyBhIHNpZGUgaW5wdXQgdG8gYSBQVHJhbnNmb3JtLCBpdCBpcwogIG5lY2Vzc2FyeSB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBlbnRpcmUgUENvbGxlY3Rpb24gc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlCiAgYXMgYSBQVHJhbnNmb3JtIHNpZGUgYXJndW1lbnQgKGluIHRoZSBmb3JtIG9mIGFuIGl0ZXJhYmxlKSwgb3Igd2hldGhlciBqdXN0CiAgb25lIHZhbHVlIHNob3VsZCBiZSBwdWxsZWQgZnJvbSB0aGUgUENvbGxlY3Rpb24gYW5kIHN1cHBsaWVkIGFzIHRoZSBzaWRlCiAgYXJndW1lbnQgKGFzIGFuIG9yZGluYXJ5IHZhbHVlKS4KCiAgV3JhcHBpbmcgYSBQQ29sbGVjdGlvbiBzaWRlIGlucHV0IGFyZ3VtZW50IHRvIGEgUFRyYW5zZm9ybSBpbiB0aGlzIGNvbnRhaW5lcgogIChlLmcuLCBkYXRhLmFwcGx5KCdsYWJlbCcsIE15UFRyYW5zZm9ybSgpLCBBc1NpbmdsZXRvbihteV9zaWRlX2lucHV0KSApCiAgc2VsZWN0cyB0aGUgbGF0dGVyIGJlaGF2aW9yLgoKICBUaGUgaW5wdXQgUENvbGxlY3Rpb24gbXVzdCBjb250YWluIGV4YWN0bHkgb25lIHZhbHVlIHBlciB3aW5kb3csIHVubGVzcyBhCiAgZGVmYXVsdCBpcyBnaXZlbiwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgYmUgZW1wdHkuCiAgIiIiCiAgX05PX0RFRkFVTFQgPSBvYmplY3QoKQoKICBkZWYgX19pbml0X18oc2VsZiwgcGNvbGwsIGRlZmF1bHRfdmFsdWU9X05PX0RFRkFVTFQpOgogICAgIyB0eXBlOiAoUENvbGxlY3Rpb24sIEFueSkgLT4gTm9uZQogICAgc3VwZXIoQXNTaW5nbGV0b24sIHNlbGYpLl9faW5pdF9fKHBjb2xsKQogICAgc2VsZi5kZWZhdWx0X3ZhbHVlID0gZGVmYXVsdF92YWx1ZQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0FzU2luZ2xldG9uKCVzKScgJSBzZWxmLnB2YWx1ZQoKICBkZWYgX3ZpZXdfb3B0aW9ucyhzZWxmKToKICAgIGJhc2UgPSBzdXBlcihBc1NpbmdsZXRvbiwgc2VsZikuX3ZpZXdfb3B0aW9ucygpCiAgICBpZiBzZWxmLmRlZmF1bHRfdmFsdWUgIT0gQXNTaW5nbGV0b24uX05PX0RFRkFVTFQ6CiAgICAgIHJldHVybiBkaWN0KGJhc2UsIGRlZmF1bHQ9c2VsZi5kZWZhdWx0X3ZhbHVlKQogICAgcmV0dXJuIGJhc2UKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0LCBvcHRpb25zKToKICAgIGhlYWQgPSBsaXN0KGl0ZXJ0b29scy5pc2xpY2UoaXQsIDIpKQogICAgaWYgbm90IGhlYWQ6CiAgICAgIHJldHVybiBvcHRpb25zLmdldCgnZGVmYXVsdCcsIEVtcHR5U2lkZUlucHV0KCkpCiAgICBlbGlmIGxlbihoZWFkKSA9PSAxOgogICAgICByZXR1cm4gaGVhZFswXQogICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAnUENvbGxlY3Rpb24gb2Ygc2l6ZSAlZCB3aXRoIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBhY2Nlc3NlZCBhcyBhICcKICAgICAgICAnc2luZ2xldG9uIHZpZXcuIEZpcnN0IHR3byBlbGVtZW50cyBlbmNvdW50ZXJlZCBhcmUgIiVzIiwgIiVzIi4nICUKICAgICAgICAobGVuKGhlYWQpLCBzdHIoaGVhZFswXSksIHN0cihoZWFkWzFdKSkpCgogIEBwcm9wZXJ0eQogIGRlZiBlbGVtZW50X3R5cGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5wdmFsdWUuZWxlbWVudF90eXBlCgoKY2xhc3MgQXNJdGVyKEFzU2lkZUlucHV0KToKICAiIiJNYXJrZXIgc3BlY2lmeWluZyB0aGF0IGFuIGVudGlyZSBQQ29sbGVjdGlvbiBpcyB0byBiZSB1c2VkIGFzIGEgc2lkZSBpbnB1dC4KCiAgV2hlbiBhIFBDb2xsZWN0aW9uIGlzIHN1cHBsaWVkIGFzIGEgc2lkZSBpbnB1dCB0byBhIFBUcmFuc2Zvcm0sIGl0IGlzCiAgbmVjZXNzYXJ5IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGVudGlyZSBQQ29sbGVjdGlvbiBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUKICBhcyBhIFBUcmFuc2Zvcm0gc2lkZSBhcmd1bWVudCAoaW4gdGhlIGZvcm0gb2YgYW4gaXRlcmFibGUpLCBvciB3aGV0aGVyIGp1c3QKICBvbmUgdmFsdWUgc2hvdWxkIGJlIHB1bGxlZCBmcm9tIHRoZSBQQ29sbGVjdGlvbiBhbmQgc3VwcGxpZWQgYXMgdGhlIHNpZGUKICBhcmd1bWVudCAoYXMgYW4gb3JkaW5hcnkgdmFsdWUpLgoKICBXcmFwcGluZyBhIFBDb2xsZWN0aW9uIHNpZGUgaW5wdXQgYXJndW1lbnQgdG8gYSBQVHJhbnNmb3JtIGluIHRoaXMgY29udGFpbmVyCiAgKGUuZy4sIGRhdGEuYXBwbHkoJ2xhYmVsJywgTXlQVHJhbnNmb3JtKCksIEFzSXRlcihteV9zaWRlX2lucHV0KSApIHNlbGVjdHMgdGhlCiAgZm9ybWVyIGJlaGF2b3IuCiAgIiIiCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdBc0l0ZXIoJXMpJyAlIHNlbGYucHZhbHVlCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fcnVudGltZV9pdGVyYWJsZShpdCwgb3B0aW9ucyk6CiAgICByZXR1cm4gaXQKCiAgZGVmIF9zaWRlX2lucHV0X2RhdGEoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IFNpZGVJbnB1dERhdGEKICAgIHJldHVybiBTaWRlSW5wdXREYXRhKAogICAgICAgIGNvbW1vbl91cm5zLnNpZGVfaW5wdXRzLklURVJBQkxFLnVybiwKICAgICAgICBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiwKICAgICAgICBsYW1iZGEgaXRlcmFibGU6IGl0ZXJhYmxlKQoKICBAcHJvcGVydHkKICBkZWYgZWxlbWVudF90eXBlKHNlbGYpOgogICAgcmV0dXJuIHR5cGVoaW50cy5JdGVyYWJsZVtzZWxmLnB2YWx1ZS5lbGVtZW50X3R5cGVdCgoKY2xhc3MgQXNMaXN0KEFzU2lkZUlucHV0KToKICAiIiJNYXJrZXIgc3BlY2lmeWluZyB0aGF0IGFuIGVudGlyZSBQQ29sbGVjdGlvbiBpcyB0byBiZSB1c2VkIGFzIGEgc2lkZSBpbnB1dC4KCiAgSW50ZW5kZWQgZm9yIHVzZSBpbiBzaWRlLWFyZ3VtZW50IHNwZWNpZmljYXRpb24tLS10aGUgc2FtZSBwbGFjZXMgd2hlcmUKICBBc1NpbmdsZXRvbiBhbmQgQXNJdGVyIGFyZSB1c2VkLCBidXQgZm9yY2VzIG1hdGVyaWFsaXphdGlvbiBvZiB0aGlzCiAgUENvbGxlY3Rpb24gYXMgYSBsaXN0LgoKICBBcmdzOgogICAgcGNvbGw6IElucHV0IHBjb2xsZWN0aW9uLgoKICBSZXR1cm5zOgogICAgQW4gQXNMaXN0LXdyYXBwZXIgYXJvdW5kIGEgUENvbGxlY3Rpb24gd2hvc2Ugb25lIGVsZW1lbnQgaXMgYSBsaXN0CiAgICBjb250YWluaW5nIGFsbCBlbGVtZW50cyBpbiBwY29sbC4KICAiIiIKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9mcm9tX3J1bnRpbWVfaXRlcmFibGUoaXQsIG9wdGlvbnMpOgogICAgcmV0dXJuIGxpc3QoaXQpCgogIGRlZiBfc2lkZV9pbnB1dF9kYXRhKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBTaWRlSW5wdXREYXRhCiAgICByZXR1cm4gU2lkZUlucHV0RGF0YSgKICAgICAgICBjb21tb25fdXJucy5zaWRlX2lucHV0cy5JVEVSQUJMRS51cm4sIHNlbGYuX3dpbmRvd19tYXBwaW5nX2ZuLCBsaXN0KQoKCmNsYXNzIEFzRGljdChBc1NpZGVJbnB1dCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgYSBQQ29sbGVjdGlvbiB0byBiZSB1c2VkIGFzIGFuIGluZGV4YWJsZSBzaWRlIGlucHV0LgoKICBJbnRlbmRlZCBmb3IgdXNlIGluIHNpZGUtYXJndW1lbnQgc3BlY2lmaWNhdGlvbi0tLXRoZSBzYW1lIHBsYWNlcyB3aGVyZQogIEFzU2luZ2xldG9uIGFuZCBBc0l0ZXIgYXJlIHVzZWQsIGJ1dCByZXR1cm5zIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cwogIGtleSBsb29rdXAuCgogIEFyZ3M6CiAgICBwY29sbDogSW5wdXQgcGNvbGxlY3Rpb24uIEFsbCBlbGVtZW50cyBzaG91bGQgYmUga2V5LXZhbHVlIHBhaXJzIChpLmUuCiAgICAgICAyLXR1cGxlcykgd2l0aCB1bmlxdWUga2V5cy4KCiAgUmV0dXJuczoKICAgIEFuIEFzRGljdC13cmFwcGVyIGFyb3VuZCBhIFBDb2xsZWN0aW9uIHdob3NlIG9uZSBlbGVtZW50IGlzIGEgZGljdCB3aXRoCiAgICAgIGVudHJpZXMgZm9yIHVuaXF1ZWx5LWtleWVkIHBhaXJzIGluIHBjb2xsLgogICIiIgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Zyb21fcnVudGltZV9pdGVyYWJsZShpdCwgb3B0aW9ucyk6CiAgICByZXR1cm4gZGljdChpdCkKCiAgZGVmIF9zaWRlX2lucHV0X2RhdGEoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IFNpZGVJbnB1dERhdGEKICAgIHJldHVybiBTaWRlSW5wdXREYXRhKAogICAgICAgIGNvbW1vbl91cm5zLnNpZGVfaW5wdXRzLklURVJBQkxFLnVybiwgc2VsZi5fd2luZG93X21hcHBpbmdfZm4sIGRpY3QpCgoKY2xhc3MgQXNNdWx0aU1hcChBc1NpZGVJbnB1dCk6CiAgIiIiTWFya2VyIHNwZWNpZnlpbmcgYSBQQ29sbGVjdGlvbiB0byBiZSB1c2VkIGFzIGFuIGluZGV4YWJsZSBzaWRlIGlucHV0LgoKICBTaW1pbGFyIHRvIEFzRGljdCwgYnV0IG11bHRpcGxlIHZhbHVlcyBtYXkgYmUgYXNzb2NpYXRlZCBwZXIga2V5LCBhbmQKICB0aGUga2V5cyBhcmUgZmV0Y2hlZCBsYXppbHkgcmF0aGVyIHRoYW4gYWxsIGhhdmluZyB0byBmaXQgaW4gbWVtb3J5LgoKICBJbnRlbmRlZCBmb3IgdXNlIGluIHNpZGUtYXJndW1lbnQgc3BlY2lmaWNhdGlvbi0tLXRoZSBzYW1lIHBsYWNlcyB3aGVyZQogIEFzU2luZ2xldG9uIGFuZCBBc0l0ZXIgYXJlIHVzZWQsIGJ1dCByZXR1cm5zIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cwogIGtleSBsb29rdXAuCiAgIiIiCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZnJvbV9ydW50aW1lX2l0ZXJhYmxlKGl0LCBvcHRpb25zKToKICAgICMgTGVnYWN5IGltcGxlbWVudGF0aW9uLgogICAgcmVzdWx0ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgIGZvciBrLCB2IGluIGl0OgogICAgICByZXN1bHRba10uYXBwZW5kKHYpCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBfc2lkZV9pbnB1dF9kYXRhKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBTaWRlSW5wdXREYXRhCiAgICByZXR1cm4gU2lkZUlucHV0RGF0YSgKICAgICAgICBjb21tb25fdXJucy5zaWRlX2lucHV0cy5NVUxUSU1BUC51cm4sCiAgICAgICAgc2VsZi5fd2luZG93X21hcHBpbmdfZm4sCiAgICAgICAgbGFtYmRhIHg6IHgpCgogIGRlZiByZXF1aXJlc19rZXllZF9pbnB1dChzZWxmKToKICAgIHJldHVybiBUcnVlCgoKY2xhc3MgRW1wdHlTaWRlSW5wdXQob2JqZWN0KToKICAiIiJWYWx1ZSBpbmRpY2F0aW5nIHdoZW4gYSBzaW5nbGV0b24gc2lkZSBpbnB1dCB3YXMgZW1wdHkuCgogIElmIGEgUENvbGxlY3Rpb24gd2FzIGZ1cm5pc2hlZCBhcyBhIHNpbmdsZXRvbiBzaWRlIGlucHV0IHRvIGEgUFRyYW5zZm9ybSwgYW5kCiAgdGhhdCBQQ29sbGVjdGlvbiB3YXMgZW1wdHksIHRoZW4gdGhpcyB2YWx1ZSBpcyBzdXBwbGllZCB0byB0aGUgRG9GbiBpbiB0aGUKICBwbGFjZSB3aGVyZSBhIHZhbHVlIGZyb20gYSBub24tZW1wdHkgUENvbGxlY3Rpb24gd291bGQgaGF2ZSBnb25lLiBUaGlzIGFsZXJ0cwogIHRoZSBEb0ZuIHRoYXQgdGhlIHNpZGUgaW5wdXQgUENvbGxlY3Rpb24gd2FzIGVtcHR5LiBVc2VycyBtYXkgd2FudCB0byBjaGVjawogIHdoZXRoZXIgc2lkZSBpbnB1dCB2YWx1ZXMgYXJlIEVtcHR5U2lkZUlucHV0LCBidXQgdGhleSB3aWxsIHZlcnkgbGlrZWx5IG5ldmVyCiAgd2FudCB0byBjcmVhdGUgbmV3IGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHRoZW1zZWx2ZXMuCiAgIiIiCiAgcGFzcwqUlRplAAAAAAAAfZQojA9QVmFsdWUuX19pbml0X1+UalYxAQBLVktth5SMDlBWYWx1ZS5fX3N0cl9flGpWMQEAS29LcIeUjA9QVmFsdWUuX19yZXByX1+UalYxAQBLcktzh5SMFFBWYWx1ZS5fc3RyX2ludGVybmFslGpWMQEAS3VLeYeUjAxQVmFsdWUuYXBwbHmUalYxAQBLe0uIh5SMDVBWYWx1ZS5fX29yX1+UalYxAQBLikuLh5SMBlBWYWx1ZZRqXTEBAEtKS4uHlIwSUENvbGxlY3Rpb24uX19lcV9flGpWMQEAS5RLloeUjBJQQ29sbGVjdGlvbi5fX25lX1+UalYxAQBLmEuah5SMFFBDb2xsZWN0aW9uLl9faGFzaF9flGpWMQEAS5xLnYeUjBVQQ29sbGVjdGlvbi53aW5kb3dpbmeUalYxAQBLn0umh5SMGVBDb2xsZWN0aW9uLl9fcmVkdWNlX2V4X1+UalYxAQBLqEush5SMEVBDb2xsZWN0aW9uLmZyb21flGpWMQEAS65LtoeUjBlQQ29sbGVjdGlvbi50b19ydW5uZXJfYXBplGpWMQEAS7hLwIeUjBhQQ29sbGVjdGlvbi5fdW5pcXVlX25hbWWUalYxAQBLwkvIh5SMG1BDb2xsZWN0aW9uLmZyb21fcnVubmVyX2FwaZRqVjEBAEvKS9iHlIwLUENvbGxlY3Rpb26Ual0xAQBLjkvYh5SMHF9JbnZhbGlkVW5waWNrbGVkUENvbGxlY3Rpb26Ual0xAQBL20vch5SMBlBCZWdpbpRqXTEBAEvfS+aHlIwFUERvbmWUal0xAQBL6Uvsh5SMF0RvT3V0cHV0c1R1cGxlLl9faW5pdF9flGpWMQEAS/JNAQGHlIwWRG9PdXRwdXRzVHVwbGUuX19zdHJfX5RqVjEBAE0DAU0EAYeUjBdEb091dHB1dHNUdXBsZS5fX3JlcHJfX5RqVjEBAE0GAU0HAYeUjBxEb091dHB1dHNUdXBsZS5fc3RyX2ludGVybmFslGpWMQEATQkBTQsBh5SMF0RvT3V0cHV0c1R1cGxlLl9faXRlcl9flGpWMQEATQ0BTRQBh5SMGkRvT3V0cHV0c1R1cGxlLl9fZ2V0YXR0cl9flGpWMQEATRYBTRwBh5SMGkRvT3V0cHV0c1R1cGxlLl9fZ2V0aXRlbV9flGpWMQEATR4BTUMBh5SMDkRvT3V0cHV0c1R1cGxllGpdMQEAS+9NQwGHlIwVVGFnZ2VkT3V0cHV0Ll9faW5pdF9flGpWMQEATU4BTVUBh5SMDFRhZ2dlZE91dHB1dJRqXTEBAE1GAU1VAYeUjBRBc1NpZGVJbnB1dC5fX2luaXRfX5RqVjEBAE1iAU1nAYeUjBlBc1NpZGVJbnB1dC5fdmlld19vcHRpb25zlGpWMQEATWkBTXEBh5SMGEFzU2lkZUlucHV0LmVsZW1lbnRfdHlwZZRqVjEBAE1zAU11AYeUjBxBc1NpZGVJbnB1dC5fc2lkZV9pbnB1dF9kYXRhlGpWMQEATXkBTYABh5SMGUFzU2lkZUlucHV0LnRvX3J1bm5lcl9hcGmUalYxAQBNggFNhAGHlIwbQXNTaWRlSW5wdXQuZnJvbV9ydW5uZXJfYXBplGpWMQEATYYBTYsBh5SMIkFzU2lkZUlucHV0Ll9mcm9tX3J1bnRpbWVfaXRlcmFibGWUalYxAQBNjQFNjwGHlIwgQXNTaWRlSW5wdXQucmVxdWlyZXNfa2V5ZWRfaW5wdXSUalYxAQBNkQFNkgGHlIwLQXNTaWRlSW5wdXSUal0xAQBNWAFNkgGHlIwcX1VucGlja2xlZFNpZGVJbnB1dC5fX2luaXRfX5RqVjEBAE2WAU2ZAYeUjCpfVW5waWNrbGVkU2lkZUlucHV0Ll9mcm9tX3J1bnRpbWVfaXRlcmFibGWUalYxAQBNmwFNnQGHlIwhX1VucGlja2xlZFNpZGVJbnB1dC5fdmlld19vcHRpb25zlGpWMQEATZ8BTaQBh5SMJF9VbnBpY2tsZWRTaWRlSW5wdXQuX3NpZGVfaW5wdXRfZGF0YZRqVjEBAE2mAU2nAYeUjBNfVW5waWNrbGVkU2lkZUlucHV0lGpdMQEATZUBTacBh5SMFlNpZGVJbnB1dERhdGEuX19pbml0X1+UalYxAQBNrAFNswGHlIwbU2lkZUlucHV0RGF0YS50b19ydW5uZXJfYXBplGpWMQEATbUBTb8Bh5SMHVNpZGVJbnB1dERhdGEuZnJvbV9ydW5uZXJfYXBplGpWMQEATcEBTcoBh5SMDVNpZGVJbnB1dERhdGGUal0xAQBNqgFNygGHlIwUQXNTaW5nbGV0b24uX19pbml0X1+UalYxAQBN3wFN4gGHlIwUQXNTaW5nbGV0b24uX19yZXByX1+UalYxAQBN5AFN5QGHlIwZQXNTaW5nbGV0b24uX3ZpZXdfb3B0aW9uc5RqVjEBAE3nAU3rAYeUjCJBc1NpbmdsZXRvbi5fZnJvbV9ydW50aW1lX2l0ZXJhYmxllGpWMQEATe0BTfcBh5SMGEFzU2luZ2xldG9uLmVsZW1lbnRfdHlwZZRqVjEBAE35AU37AYeUjAtBc1NpbmdsZXRvbpRqXTEBAE3NAU37AYeUjA9Bc0l0ZXIuX19yZXByX1+UalYxAQBNCwJNDAKHlIwdQXNJdGVyLl9mcm9tX3J1bnRpbWVfaXRlcmFibGWUalYxAQBNDgJNEAKHlIwXQXNJdGVyLl9zaWRlX2lucHV0X2RhdGGUalYxAQBNEgJNFwKHlIwTQXNJdGVyLmVsZW1lbnRfdHlwZZRqVjEBAE0ZAk0bAoeUjAZBc0l0ZXKUal0xAQBN/gFNGwKHlIwdQXNMaXN0Ll9mcm9tX3J1bnRpbWVfaXRlcmFibGWUalYxAQBNLAJNLgKHlIwXQXNMaXN0Ll9zaWRlX2lucHV0X2RhdGGUalYxAQBNMAJNMwKHlIwGQXNMaXN0lGpdMQEATR4CTTMCh5SMHUFzRGljdC5fZnJvbV9ydW50aW1lX2l0ZXJhYmxllGpWMQEATUUCTUcCh5SMF0FzRGljdC5fc2lkZV9pbnB1dF9kYXRhlGpWMQEATUkCTUwCh5SMBkFzRGljdJRqXTEBAE02Ak1MAoeUjCFBc011bHRpTWFwLl9mcm9tX3J1bnRpbWVfaXRlcmFibGWUalYxAQBNWQJNXwKHlIwbQXNNdWx0aU1hcC5fc2lkZV9pbnB1dF9kYXRhlGpWMQEATWECTWYCh5SMH0FzTXVsdGlNYXAucmVxdWlyZXNfa2V5ZWRfaW5wdXSUalYxAQBNaAJNaQKHlIwKQXNNdWx0aU1hcJRqXTEBAE1PAk1pAoeUjA5FbXB0eVNpZGVJbnB1dJRqXTEBAE1sAk12AoeUdX2UKIwLUENvbGxlY3Rpb26UajQDAACMEVBDb2xsZWN0aW9uLmZyb21flGo0AwAAjBlQQ29sbGVjdGlvbi50b19ydW5uZXJfYXBplGo0AwAAjBtQQ29sbGVjdGlvbi5mcm9tX3J1bm5lcl9hcGmUajQDAACMDFRhZ2dlZE91dHB1dJRqNAMAAIwLQXNTaW5nbGV0b26UajQDAACMBkFzSXRlcpRqNAMAAIwGQXNMaXN0lGo0AwAAjAZBc0RpY3SUajQDAACMDkVtcHR5U2lkZUlucHV0lGo0AwAAdYwSYXBhY2hlX2JlYW0ucHZhbHVllHSUjD9hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX21ldHJpY3NfcGlwZWxpbmWUKFgsFwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIHdvcmQtY291bnRpbmcgd29ya2Zsb3cuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHRpbWUKCmZyb20gaGFtY3Jlc3QubGlicmFyeS5udW1iZXIub3JkZXJpbmdfY29tcGFyaXNvbiBpbXBvcnQgZ3JlYXRlcl90aGFuCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLm1ldHJpY19yZXN1bHRfbWF0Y2hlcnMgaW1wb3J0IERpc3RyaWJ1dGlvbk1hdGNoZXIKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLm1ldHJpY19yZXN1bHRfbWF0Y2hlcnMgaW1wb3J0IE1ldHJpY1Jlc3VsdE1hdGNoZXIKClNMRUVQX1RJTUVfU0VDUyA9IDEKSU5QVVQgPSBbMCwgMCwgMCwgMTAwXQpNRVRSSUNfTkFNRVNQQUNFID0gKAogICAgJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuJwogICAgJ2RhdGFmbG93X2V4ZXJjaXNlX21ldHJpY3NfcGlwZWxpbmUuVXNlck1ldHJpY3NEb0ZuJykKCgpkZWYgbWV0cmljX21hdGNoZXJzKCk6CiAgIiIiTWV0cmljUmVzdWx0IG1hdGNoZXJzIGNvbW1vbiB0byBhbGwgdGVzdHMuIiIiCiAgIyBUT0RPKGFqYW1hdG8pOiBNYXRjaGVyIGZvciB0aGUgJ21ldHJpY3MnIHN0ZXAncyBFbGVtZW50Q291bnQuCiAgIyBUT0RPKGFqYW1hdG8pOiBNYXRjaGVyIGZvciB0aGUgJ21ldHJpY3MnIHN0ZXAncyBNZWFuQnl0ZUNvdW50LgogICMgVE9ETyhhamFtYXRvKTogTWF0Y2hlciBmb3IgdGhlIHN0YXJ0IGFuZCBmaW5pc2ggZXhlYyB0aW1lcy4KICAjIFRPRE8oYWphbWF0byk6IE1hdGNoZXIgZm9yIGEgZ2F1Z2UgbWV0cmljIG9uY2UgaW1wbGVtZW50ZWQgaW4gZGF0YWZsb3cuCiAgbWF0Y2hlcnMgPSBbCiAgICAgICMgVXNlciBDb3VudGVyIE1ldHJpY3MuCiAgICAgIE1ldHJpY1Jlc3VsdE1hdGNoZXIoCiAgICAgICAgICBuYW1lPSd0b3RhbF92YWx1ZXMnLAogICAgICAgICAgbmFtZXNwYWNlPU1FVFJJQ19OQU1FU1BBQ0UsCiAgICAgICAgICBzdGVwPSdtZXRyaWNzJywKICAgICAgICAgIGF0dGVtcHRlZD1zdW0oSU5QVVQpLAogICAgICAgICAgY29tbWl0dGVkPXN1bShJTlBVVCkpLAogICAgICBNZXRyaWNSZXN1bHRNYXRjaGVyKAogICAgICAgICAgbmFtZT0nRXhlY3V0aW9uVGltZV9TdGFydEJ1bmRsZScsCiAgICAgICAgICBzdGVwPSdtZXRyaWNzJywKICAgICAgICAgIGF0dGVtcHRlZD1ncmVhdGVyX3RoYW4oMCksCiAgICAgICAgICBjb21taXR0ZWQ9Z3JlYXRlcl90aGFuKDApKSwKICAgICAgTWV0cmljUmVzdWx0TWF0Y2hlcigKICAgICAgICAgIG5hbWU9J0V4ZWN1dGlvblRpbWVfUHJvY2Vzc0VsZW1lbnQnLAogICAgICAgICAgc3RlcD0nbWV0cmljcycsCiAgICAgICAgICBhdHRlbXB0ZWQ9Z3JlYXRlcl90aGFuKDApLAogICAgICAgICAgY29tbWl0dGVkPWdyZWF0ZXJfdGhhbigwKSksCiAgICAgIE1ldHJpY1Jlc3VsdE1hdGNoZXIoCiAgICAgICAgICBuYW1lPSdFeGVjdXRpb25UaW1lX0ZpbmlzaEJ1bmRsZScsCiAgICAgICAgICBzdGVwPSdtZXRyaWNzJywKICAgICAgICAgIGF0dGVtcHRlZD1ncmVhdGVyX3RoYW4oMCksCiAgICAgICAgICBjb21taXR0ZWQ9Z3JlYXRlcl90aGFuKDApKSwKICAgICAgTWV0cmljUmVzdWx0TWF0Y2hlcigKICAgICAgICAgIG5hbWU9J2Rpc3RyaWJ1dGlvbl92YWx1ZXMnLAogICAgICAgICAgbmFtZXNwYWNlPU1FVFJJQ19OQU1FU1BBQ0UsCiAgICAgICAgICBzdGVwPSdtZXRyaWNzJywKICAgICAgICAgIGF0dGVtcHRlZD1EaXN0cmlidXRpb25NYXRjaGVyKAogICAgICAgICAgICAgIHN1bV92YWx1ZT1zdW0oSU5QVVQpLAogICAgICAgICAgICAgIGNvdW50X3ZhbHVlPWxlbihJTlBVVCksCiAgICAgICAgICAgICAgbWluX3ZhbHVlPW1pbihJTlBVVCksCiAgICAgICAgICAgICAgbWF4X3ZhbHVlPW1heChJTlBVVCkpLAogICAgICAgICAgY29tbWl0dGVkPURpc3RyaWJ1dGlvbk1hdGNoZXIoCiAgICAgICAgICAgICAgc3VtX3ZhbHVlPXN1bShJTlBVVCksCiAgICAgICAgICAgICAgY291bnRfdmFsdWU9bGVuKElOUFVUKSwKICAgICAgICAgICAgICBtaW5fdmFsdWU9bWluKElOUFVUKSwKICAgICAgICAgICAgICBtYXhfdmFsdWU9bWF4KElOUFVUKSksCiAgICAgICksCiAgICAgICMgRWxlbWVudCBjb3VudCBhbmQgTWVhbkJ5dGVDb3VudCBmb3IgYSBVc2VyIFBhckRvLgogICAgICBNZXRyaWNSZXN1bHRNYXRjaGVyKAogICAgICAgICAgbmFtZT0nRWxlbWVudENvdW50JywKICAgICAgICAgIGxhYmVscz17CiAgICAgICAgICAgICAgJ291dHB1dF91c2VyX25hbWUnOiAnbWV0cmljcy1vdXQwJywKICAgICAgICAgICAgICAnb3JpZ2luYWxfbmFtZSc6ICdtZXRyaWNzLW91dDAtRWxlbWVudENvdW50JwogICAgICAgICAgfSwKICAgICAgICAgIGF0dGVtcHRlZD1ncmVhdGVyX3RoYW4oMCksCiAgICAgICAgICBjb21taXR0ZWQ9Z3JlYXRlcl90aGFuKDApKSwKICAgICAgTWV0cmljUmVzdWx0TWF0Y2hlcigKICAgICAgICAgIG5hbWU9J01lYW5CeXRlQ291bnQnLAogICAgICAgICAgbGFiZWxzPXsKICAgICAgICAgICAgICAnb3V0cHV0X3VzZXJfbmFtZSc6ICdtZXRyaWNzLW91dDAnLAogICAgICAgICAgICAgICdvcmlnaW5hbF9uYW1lJzogJ21ldHJpY3Mtb3V0MC1NZWFuQnl0ZUNvdW50JwogICAgICAgICAgfSwKICAgICAgICAgIGF0dGVtcHRlZD1ncmVhdGVyX3RoYW4oMCksCiAgICAgICAgICBjb21taXR0ZWQ9Z3JlYXRlcl90aGFuKDApKQogIF0KCiAgcGNvbGxfbmFtZXMgPSBbCiAgICAgICdHcm91cEJ5S2V5L1JlaWZ5LW91dDAnLAogICAgICAnR3JvdXBCeUtleS9SZWFkLW91dDAnLAogICAgICAnbWFwX3RvX2NvbW1vbl9rZXktb3V0MCcsCiAgICAgICdHcm91cEJ5S2V5L0dyb3VwQnlXaW5kb3ctb3V0MCcsCiAgICAgICdHcm91cEJ5S2V5L1JlYWQtb3V0MCcsCiAgICAgICdHcm91cEJ5S2V5L1JlaWZ5LW91dDAnCiAgXQogIGZvciBuYW1lIGluIHBjb2xsX25hbWVzOgogICAgbWF0Y2hlcnMuZXh0ZW5kKFsKICAgICAgICBNZXRyaWNSZXN1bHRNYXRjaGVyKAogICAgICAgICAgICBuYW1lPSdFbGVtZW50Q291bnQnLAogICAgICAgICAgICBsYWJlbHM9ewogICAgICAgICAgICAgICAgJ291dHB1dF91c2VyX25hbWUnOiBuYW1lLAogICAgICAgICAgICAgICAgJ29yaWdpbmFsX25hbWUnOiAnJXMtRWxlbWVudENvdW50JyAlIG5hbWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYXR0ZW1wdGVkPWdyZWF0ZXJfdGhhbigwKSwKICAgICAgICAgICAgY29tbWl0dGVkPWdyZWF0ZXJfdGhhbigwKSksCiAgICAgICAgTWV0cmljUmVzdWx0TWF0Y2hlcigKICAgICAgICAgICAgbmFtZT0nTWVhbkJ5dGVDb3VudCcsCiAgICAgICAgICAgIGxhYmVscz17CiAgICAgICAgICAgICAgICAnb3V0cHV0X3VzZXJfbmFtZSc6IG5hbWUsCiAgICAgICAgICAgICAgICAnb3JpZ2luYWxfbmFtZSc6ICclcy1NZWFuQnl0ZUNvdW50JyAlIG5hbWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYXR0ZW1wdGVkPWdyZWF0ZXJfdGhhbigwKSwKICAgICAgICAgICAgY29tbWl0dGVkPWdyZWF0ZXJfdGhhbigwKSksCiAgICBdKQogIHJldHVybiBtYXRjaGVycwoKCmNsYXNzIFVzZXJNZXRyaWNzRG9GbihiZWFtLkRvRm4pOgogICIiIlBhcnNlIGVhY2ggbGluZSBvZiBpbnB1dCB0ZXh0IGludG8gd29yZHMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi50b3RhbF9tZXRyaWMgPSBNZXRyaWNzLmNvdW50ZXIoc2VsZi5fX2NsYXNzX18sICd0b3RhbF92YWx1ZXMnKQogICAgc2VsZi5kaXN0X21ldHJpYyA9IE1ldHJpY3MuZGlzdHJpYnV0aW9uKAogICAgICAgIHNlbGYuX19jbGFzc19fLCAnZGlzdHJpYnV0aW9uX3ZhbHVlcycpCiAgICAjIFRPRE8oYWphbWF0byk6IEFkZCBhIHZlcmlmaWVyIGZvciBnYXVnZSBvbmNlIGl0IGlzIHN1cHBvcnRlZCBieSB0aGUgU0RLcwogICAgIyBhbmQgcnVubmVycy4KICAgIHNlbGYubGF0ZXN0X21ldHJpYyA9IE1ldHJpY3MuZ2F1Z2Uoc2VsZi5fX2NsYXNzX18sICdsYXRlc3RfdmFsdWUnKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgdGltZS5zbGVlcChTTEVFUF9USU1FX1NFQ1MpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgIiIiUmV0dXJucyB0aGUgcHJvY2Vzc2VkIGVsZW1lbnQgYW5kIGluY3JlbWVudHMgdGhlIG1ldHJpY3MuIiIiCiAgICBlbGVtX2ludCA9IGludChlbGVtZW50KQogICAgc2VsZi50b3RhbF9tZXRyaWMuaW5jKGVsZW1faW50KQogICAgc2VsZi5kaXN0X21ldHJpYy51cGRhdGUoZWxlbV9pbnQpCiAgICBzZWxmLmxhdGVzdF9tZXRyaWMuc2V0KGVsZW1faW50KQogICAgdGltZS5zbGVlcChTTEVFUF9USU1FX1NFQ1MpCiAgICByZXR1cm4gW2VsZW1faW50XQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIHRpbWUuc2xlZXAoU0xFRVBfVElNRV9TRUNTKQoKCmRlZiBhcHBseV9hbmRfcnVuKHBpcGVsaW5lKToKICAiIiJHaXZlbiBhbiBpbml0aWFsaXplZCBQaXBlbGluZSBhcHBsaWVzIHRyYW5zZm9ybXMgYW5kIHJ1bnMgaXQuIiIiCiAgXyA9ICgKICAgICAgcGlwZWxpbmUKICAgICAgfCBiZWFtLkNyZWF0ZShJTlBVVCkKICAgICAgfCAnbWV0cmljcycgPj4gKGJlYW0uUGFyRG8oVXNlck1ldHJpY3NEb0ZuKCkpKQogICAgICB8ICdtYXBfdG9fY29tbW9uX2tleScgPj4gYmVhbS5NYXAobGFtYmRhIHg6ICgna2V5JywgeCkpCiAgICAgIHwgYmVhbS5Hcm91cEJ5S2V5KCkKICAgICAgfCAnbV9vdXQnID4+IGJlYW0uRmxhdE1hcCgKICAgICAgICAgIGxhbWJkYSB4OiBbCiAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAyLAogICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAgNCwKICAgICAgICAgICAgICA1LAogICAgICAgICAgICAgIGJlYW0ucHZhbHVlLlRhZ2dlZE91dHB1dCgnb25jZScsIHgpLAogICAgICAgICAgICAgIGJlYW0ucHZhbHVlLlRhZ2dlZE91dHB1dCgndHdpY2UnLCB4KSwKICAgICAgICAgICAgICBiZWFtLnB2YWx1ZS5UYWdnZWRPdXRwdXQoJ3R3aWNlJywgeCkKICAgICAgICAgIF0pKQogIHJlc3VsdCA9IHBpcGVsaW5lLnJ1bigpCiAgcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKICByZXR1cm4gcmVzdWx0CpR9lCiMD21ldHJpY19tYXRjaGVyc5RqVjEBAEsoS4KHlIwYVXNlck1ldHJpY3NEb0ZuLl9faW5pdF9flGpWMQEAS4dLjYeUjBxVc2VyTWV0cmljc0RvRm4uc3RhcnRfYnVuZGxllGpWMQEAS49LkIeUjBdVc2VyTWV0cmljc0RvRm4ucHJvY2Vzc5RqVjEBAEuSS5mHlIwdVXNlck1ldHJpY3NEb0ZuLmZpbmlzaF9idW5kbGWUalYxAQBLm0uch5SMD1VzZXJNZXRyaWNzRG9GbpRqXTEBAEuFS5yHlIwNYXBwbHlfYW5kX3J1bpRqVjEBAEufS7SHlHV9lCiMD21ldHJpY19tYXRjaGVyc5RqHgQAAIwPVXNlck1ldHJpY3NEb0ZulGoeBAAAjBxVc2VyTWV0cmljc0RvRm4uc3RhcnRfYnVuZGxllGoeBAAAjBdVc2VyTWV0cmljc0RvRm4ucHJvY2Vzc5RqHgQAAIwdVXNlck1ldHJpY3NEb0ZuLmZpbmlzaF9idW5kbGWUah4EAACMDWFwcGx5X2FuZF9ydW6Uah4EAAB1jD9hcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X2V4ZXJjaXNlX21ldHJpY3NfcGlwZWxpbmWUdJSMSWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfZXhlcmNpc2Vfc3RyZWFtaW5nX21ldHJpY3NfcGlwZWxpbmWUKFhzDQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIHdvcmQtY291bnRpbmcgd29ya2Zsb3cuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBsb2dnaW5nCmltcG9ydCB0aW1lCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU2V0dXBPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTdGFuZGFyZE9wdGlvbnMKClNMRUVQX1RJTUVfU0VDUyA9IDEKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBTdHJlYW1pbmdVc2VyTWV0cmljc0RvRm4oYmVhbS5Eb0ZuKToKICAiIiJHZW5lcmF0ZXMgdXNlciBtZXRyaWNzIGFuZCBvdXRwdXRzIHNhbWUgZWxlbWVudC4iIiIKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLmRvdWJsZV9tZXNzYWdlX2NvdW50ZXIgPSBNZXRyaWNzLmNvdW50ZXIoCiAgICAgICAgc2VsZi5fX2NsYXNzX18sICdkb3VibGVfbXNnX2NvdW50ZXJfbmFtZScpCiAgICBzZWxmLm1zZ19sZW5fZGlzdF9tZXRyaWMgPSBNZXRyaWNzLmRpc3RyaWJ1dGlvbigKICAgICAgICBzZWxmLl9fY2xhc3NfXywgJ21zZ19sZW5fZGlzdF9tZXRyaWNfbmFtZScpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICB0aW1lLnNsZWVwKFNMRUVQX1RJTUVfU0VDUykKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICAiIiJSZXR1cm5zIHRoZSBwcm9jZXNzZWQgZWxlbWVudCBhbmQgaW5jcmVtZW50cyB0aGUgbWV0cmljcy4iIiIKCiAgICB0ZXh0X2xpbmUgPSBlbGVtZW50LnN0cmlwKCkKCiAgICBzZWxmLmRvdWJsZV9tZXNzYWdlX2NvdW50ZXIuaW5jKCkKICAgIHNlbGYuZG91YmxlX21lc3NhZ2VfY291bnRlci5pbmMoKQogICAgc2VsZi5tc2dfbGVuX2Rpc3RfbWV0cmljLnVwZGF0ZShsZW4odGV4dF9saW5lKSkKCiAgICBfTE9HR0VSLmRlYnVnKCJEb25lIHByb2Nlc3NpbmcgcmV0dXJuaW5nIGVsZW1lbnQgYXJyYXk6ICclcyciLCBlbGVtZW50KQoKICAgIHJldHVybiBbZWxlbWVudF0KCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICB0aW1lLnNsZWVwKFNMRUVQX1RJTUVfU0VDUykKCgpkZWYgcnVuKGFyZ3Y9Tm9uZSk6CiAgIiIiR2l2ZW4gYW4gaW5pdGlhbGl6ZWQgUGlwZWxpbmUgYXBwbGllcyB0cmFuc2Zvcm1zIGFuZCBydW5zIGl0LiIiIgoKICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tb3V0cHV0X3RvcGljJywKICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgaGVscD0oCiAgICAgICAgICAnT3V0cHV0IFB1YlN1YiB0b3BpYyBvZiB0aGUgZm9ybSAnCiAgICAgICAgICAnInByb2plY3RzLzxQUk9KRUNUPi90b3BpYy88VE9QSUM+Ii4nKSkKICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPVRydWUpCiAgZ3JvdXAuYWRkX2FyZ3VtZW50KAogICAgICAnLS1pbnB1dF90b3BpYycsCiAgICAgIGhlbHA9KAogICAgICAgICAgJ0lucHV0IFB1YlN1YiB0b3BpYyBvZiB0aGUgZm9ybSAnCiAgICAgICAgICAnInByb2plY3RzLzxQUk9KRUNUPi90b3BpY3MvPFRPUElDPiIuJykpCiAgZ3JvdXAuYWRkX2FyZ3VtZW50KAogICAgICAnLS1pbnB1dF9zdWJzY3JpcHRpb24nLAogICAgICBoZWxwPSgKICAgICAgICAgICdJbnB1dCBQdWJTdWIgc3Vic2NyaXB0aW9uIG9mIHRoZSBmb3JtICcKICAgICAgICAgICcicHJvamVjdHMvPFBST0pFQ1Q+L3N1YnNjcmlwdGlvbnMvPFNVQlNDUklQVElPTj4uIicpKQogIGtub3duX2FyZ3MsIHBpcGVsaW5lX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQoKICBwaXBlbGluZV9vcHRpb25zID0gUGlwZWxpbmVPcHRpb25zKHBpcGVsaW5lX2FyZ3MpCiAgcGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFNldHVwT3B0aW9ucykuc2F2ZV9tYWluX3Nlc3Npb24gPSBUcnVlCiAgcGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykuc3RyZWFtaW5nID0gVHJ1ZQogIHBpcGVsaW5lID0gYmVhbS5QaXBlbGluZShvcHRpb25zPXBpcGVsaW5lX29wdGlvbnMpCgogIF8gPSAoCiAgICAgIHBpcGVsaW5lCiAgICAgIHwgYmVhbS5pby5SZWFkRnJvbVB1YlN1YihzdWJzY3JpcHRpb249a25vd25fYXJncy5pbnB1dF9zdWJzY3JpcHRpb24pCiAgICAgIHwgJ2dlbmVyYXRlX21ldHJpY3MnID4+IChiZWFtLlBhckRvKFN0cmVhbWluZ1VzZXJNZXRyaWNzRG9GbigpKSkKICAgICAgfCAnZHVtcF90b19wdWInID4+IGJlYW0uaW8uV3JpdGVUb1B1YlN1Yihrbm93bl9hcmdzLm91dHB1dF90b3BpYykpCgogIHJlc3VsdCA9IHBpcGVsaW5lLnJ1bigpCiAgcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKICByZXR1cm4gcmVzdWx0CgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuSU5GTykKICBydW4oKQqUfZQojCFTdHJlYW1pbmdVc2VyTWV0cmljc0RvRm4uX19pbml0X1+UalYxAQBLKUsth5SMJVN0cmVhbWluZ1VzZXJNZXRyaWNzRG9Gbi5zdGFydF9idW5kbGWUalYxAQBLL0swh5SMIFN0cmVhbWluZ1VzZXJNZXRyaWNzRG9Gbi5wcm9jZXNzlGpWMQEASzJLPYeUjCZTdHJlYW1pbmdVc2VyTWV0cmljc0RvRm4uZmluaXNoX2J1bmRsZZRqVjEBAEs/S0CHlIwYU3RyZWFtaW5nVXNlck1ldHJpY3NEb0ZulGpdMQEASydLQIeUjANydW6UalYxAQBLQ0tnh5R1fZQojBhTdHJlYW1pbmdVc2VyTWV0cmljc0RvRm6UanwDAACMJVN0cmVhbWluZ1VzZXJNZXRyaWNzRG9Gbi5zdGFydF9idW5kbGWUanwDAACMIFN0cmVhbWluZ1VzZXJNZXRyaWNzRG9Gbi5wcm9jZXNzlGp8AwAAjCZTdHJlYW1pbmdVc2VyTWV0cmljc0RvRm4uZmluaXNoX2J1bmRsZZRqfAMAAIwDcnVulGp8AwAAdYxJYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19leGVyY2lzZV9zdHJlYW1pbmdfbWV0cmljc19waXBlbGluZZR0lIwtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19tZXRyaWNzlChY6S0AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiCkRhdGFmbG93UnVubmVyIGltcGxlbWVudGF0aW9uIG9mIE1ldHJpY1Jlc3VsdHMuIEl0IGlzIGluIGNoYXJnZSBvZgpyZXNwb25kaW5nIHRvIHF1ZXJpZXMgb2YgY3VycmVudCBtZXRyaWNzIGJ5IGdvaW5nIHRvIHRoZSBkYXRhZmxvdwpzZXJ2aWNlLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG51bWJlcnMKaW1wb3J0IHN5cwpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IGl0ZXJpdGVtcwoKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBEaXN0cmlidXRpb25EYXRhCmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5jZWxscyBpbXBvcnQgRGlzdHJpYnV0aW9uUmVzdWx0CmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5leGVjdXRpb24gaW1wb3J0IE1ldHJpY0tleQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuZXhlY3V0aW9uIGltcG9ydCBNZXRyaWNSZXN1bHQKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYyBpbXBvcnQgTWV0cmljUmVzdWx0cwpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljYmFzZSBpbXBvcnQgTWV0cmljTmFtZQpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpkZWYgX2dldF9tYXRjaChwcm90bywgZmlsdGVyX2ZuKToKICAiIiJGaW5kcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgYSBxdWVyeS4KCiAgSWYgbm8gZWxlbWVudCBtYXRjaGVzIHRoZSBxdWVyeSwgaXQgdGhyb3dzIFZhbHVlRXJyb3IuCiAgSWYgbW9yZSB0aGFuIG9uZSBlbGVtZW50IG1hdGNoZXMgdGhlIHF1ZXJ5LCBpdCByZXR1cm5zIG9ubHkgdGhlIGZpcnN0LgogICIiIgogIHF1ZXJ5ID0gW2VsbSBmb3IgZWxtIGluIHByb3RvIGlmIGZpbHRlcl9mbihlbG0pXQogIGlmIGxlbihxdWVyeSkgPT0gMDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGVsZW1lbnQnKQogIGVsaWYgbGVuKHF1ZXJ5KSA+IDE6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdUb28gbWFueSBtYXRjaGVzJykKCiAgcmV0dXJuIHF1ZXJ5WzBdCgoKIyBWMWIzIE1ldHJpY1N0cnVjdHVyZWROYW1lIGtleXMgdG8gYWNjZXB0IGFuZCBjb3B5IHRvIHRoZSBNZXRyaWNLZXkgbGFiZWxzLgpTVEVQX0xBQkVMID0gJ3N0ZXAnClNUUlVDVFVSRURfTkFNRV9MQUJFTFMgPSBzZXQoCiAgICBbJ2V4ZWN1dGlvbl9zdGVwJywgJ29yaWdpbmFsX25hbWUnLCAnb3V0cHV0X3VzZXJfbmFtZSddKQoKCmNsYXNzIERhdGFmbG93TWV0cmljcyhNZXRyaWNSZXN1bHRzKToKICAiIiJJbXBsZW1lbnRhdGlvbiBvZiBNZXRyaWNSZXN1bHRzIGNsYXNzIGZvciB0aGUgRGF0YWZsb3cgcnVubmVyLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhZmxvd19jbGllbnQ9Tm9uZSwgam9iX3Jlc3VsdD1Ob25lLCBqb2JfZ3JhcGg9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIHRoZSBEYXRhZmxvdyBtZXRyaWNzIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBkYXRhZmxvd19jbGllbnQ6IGFwaWNsaWVudC5EYXRhZmxvd0FwcGxpY2F0aW9uQ2xpZW50IHRvIGludGVyYWN0IHdpdGggdGhlCiAgICAgICAgZGF0YWZsb3cgc2VydmljZS4KICAgICAgam9iX3Jlc3VsdDogRGF0YWZsb3dQaXBlbGluZVJlc3VsdCB3aXRoIHRoZSBzdGF0ZSBhbmQgaWQgaW5mb3JtYXRpb24gb2YKICAgICAgICB0aGUgam9iLgogICAgICBqb2JfZ3JhcGg6IGFwaWNsaWVudC5Kb2IgaW5zdGFuY2UgdG8gYmUgYWJsZSB0byB0cmFuc2xhdGUgYmV0d2VlbiBpbnRlcm5hbAogICAgICAgIHN0ZXAgbmFtZXMgKGUuZy4gInMyIiksIGFuZCB1c2VyIHN0ZXAgbmFtZXMgKGUuZy4gInNwbGl0IikuCiAgICAiIiIKICAgIHN1cGVyKERhdGFmbG93TWV0cmljcywgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5fZGF0YWZsb3dfY2xpZW50ID0gZGF0YWZsb3dfY2xpZW50CiAgICBzZWxmLmpvYl9yZXN1bHQgPSBqb2JfcmVzdWx0CiAgICBzZWxmLl9xdWVyaWVkX2FmdGVyX3Rlcm1pbmF0aW9uID0gRmFsc2UKICAgIHNlbGYuX2NhY2hlZF9tZXRyaWNzID0gTm9uZQogICAgc2VsZi5fam9iX2dyYXBoID0gam9iX2dyYXBoCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2lzX2NvdW50ZXIobWV0cmljX3Jlc3VsdCk6CiAgICByZXR1cm4gaXNpbnN0YW5jZShtZXRyaWNfcmVzdWx0LmF0dGVtcHRlZCwgbnVtYmVycy5OdW1iZXIpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2lzX2Rpc3RyaWJ1dGlvbihtZXRyaWNfcmVzdWx0KToKICAgIHJldHVybiBpc2luc3RhbmNlKG1ldHJpY19yZXN1bHQuYXR0ZW1wdGVkLCBEaXN0cmlidXRpb25SZXN1bHQpCgogIGRlZiBfdHJhbnNsYXRlX3N0ZXBfbmFtZShzZWxmLCBpbnRlcm5hbF9uYW1lKToKICAgICIiIlRyYW5zbGF0ZSBiZXR3ZWVuIGludGVybmFsIHN0ZXAgbmFtZXMgKGUuZy4gInMxIikgYW5kIHVzZXIgc3RlcCBuYW1lcy4iIiIKICAgIGlmIG5vdCBzZWxmLl9qb2JfZ3JhcGg6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NvdWxkIG5vdCB0cmFuc2xhdGUgdGhlIGludGVybmFsIHN0ZXAgbmFtZS4nKQoKICAgIHRyeToKICAgICAgc3RlcCA9IF9nZXRfbWF0Y2goCiAgICAgICAgICBzZWxmLl9qb2JfZ3JhcGgucHJvdG8uc3RlcHMsIGxhbWJkYSB4OiB4Lm5hbWUgPT0gaW50ZXJuYWxfbmFtZSkKICAgICAgdXNlcl9zdGVwX25hbWUgPSBfZ2V0X21hdGNoKAogICAgICAgICAgc3RlcC5wcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLAogICAgICAgICAgbGFtYmRhIHg6IHgua2V5ID09ICd1c2VyX25hbWUnKS52YWx1ZS5zdHJpbmdfdmFsdWUKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdDb3VsZCBub3QgdHJhbnNsYXRlIHRoZSBpbnRlcm5hbCBzdGVwIG5hbWUuJykKICAgIHJldHVybiB1c2VyX3N0ZXBfbmFtZQoKICBkZWYgX2dldF9tZXRyaWNfa2V5KHNlbGYsIG1ldHJpYyk6CiAgICAiIiJQb3B1bGF0ZSB0aGUgTWV0cmljS2V5IG9iamVjdCBmb3IgYSBxdWVyaWVkIG1ldHJpYyByZXN1bHQuIiIiCiAgICBzdGVwID0gIiIKICAgIG5hbWUgPSBtZXRyaWMubmFtZS5uYW1lICAjIEFsd2F5cyBleHRyYWN0IGEgbmFtZQogICAgbGFiZWxzID0gZGljdCgpCiAgICB0cnk6ICAjIFRyeSB0byBleHRyYWN0IHRoZSB1c2VyIHN0ZXAgbmFtZS4KICAgICAgIyBJZiBWYWx1ZUVycm9yIGlzIHRocm93biB3aXRoaW4gdGhpcyB0cnktYmxvY2ssIGl0IGlzIGJlY2F1c2Ugb2YKICAgICAgIyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgICAgIyAxLiBVbmFibGUgdG8gdHJhbnNsYXRlIHRoZSBzdGVwIG5hbWUuIE9ubHkgaGFwcGVuaW5nIHdpdGggaW1wcm9wZXJseQogICAgICAjICAgZm9ybWF0dGVkIGpvYiBncmFwaCAodW5saWtlbHkpLCBvciBzdGVwIG5hbWUgbm90IGJlaW5nIHRoZSBpbnRlcm5hbAogICAgICAjICAgc3RlcCBuYW1lIChvbmx5IGhhcHBlbnMgZm9yIHVuc3RydWN0dXJlZC1uYW1lZCBtZXRyaWNzKS4KICAgICAgIyAyLiBVbmFibGUgdG8gdW5wYWNrIFtzdGVwXSBvciBbbmFtZXNwYWNlXTsgd2hpY2ggc2hvdWxkIG9ubHkgaGFwcGVuCiAgICAgICMgICBmb3IgdW5zdHJ1Y3R1cmVkIG5hbWVzLgogICAgICBzdGVwID0gX2dldF9tYXRjaCgKICAgICAgICAgIG1ldHJpYy5uYW1lLmNvbnRleHQuYWRkaXRpb25hbFByb3BlcnRpZXMsCiAgICAgICAgICBsYW1iZGEgeDogeC5rZXkgPT0gU1RFUF9MQUJFTCkudmFsdWUKICAgICAgc3RlcCA9IHNlbGYuX3RyYW5zbGF0ZV9zdGVwX25hbWUoc3RlcCkKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICBwYXNzCgogICAgbmFtZXNwYWNlID0gImRhdGFmbG93L3YxYjMiICAjIFRyeSB0byBleHRyYWN0IG5hbWVzcGFjZSBvciBhZGQgYSBkZWZhdWx0LgogICAgdHJ5OgogICAgICBuYW1lc3BhY2UgPSBfZ2V0X21hdGNoKAogICAgICAgICAgbWV0cmljLm5hbWUuY29udGV4dC5hZGRpdGlvbmFsUHJvcGVydGllcywKICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnbmFtZXNwYWNlJykudmFsdWUKICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICBwYXNzCgogICAgZm9yIGt2IGluIG1ldHJpYy5uYW1lLmNvbnRleHQuYWRkaXRpb25hbFByb3BlcnRpZXM6CiAgICAgIGlmIGt2LmtleSBpbiBTVFJVQ1RVUkVEX05BTUVfTEFCRUxTOgogICAgICAgIGxhYmVsc1trdi5rZXldID0ga3YudmFsdWUKICAgICMgUGFja2FnZSBldmVyeXRoaW5nIGJlc2lkZXMgbmFtZXNwYWNlIGFuZCBuYW1lIHRoZSBsYWJlbHMgYXMgd2VsbCwKICAgICMgaW5jbHVkaW5nIHVubW9kaWZpZWQgc3RlcCBuYW1lcyB0byBhc3Npc3QgaW4gaW50ZWdyYXRpb24gdGhlIGV4YWN0CiAgICAjIHVubW9kaWZpZWQgdmFsdWVzIHdoaWNoIGNvbWUgZnJvbSBkYXRhZmxvdy4KICAgIHJldHVybiBNZXRyaWNLZXkoc3RlcCwgTWV0cmljTmFtZShuYW1lc3BhY2UsIG5hbWUpLCBsYWJlbHM9bGFiZWxzKQoKICBkZWYgX3BvcHVsYXRlX21ldHJpY3Moc2VsZiwgcmVzcG9uc2UsIHJlc3VsdCwgdXNlcl9tZXRyaWNzPUZhbHNlKToKICAgICIiIk1vdmUgbWV0cmljcyBmcm9tIHJlc3BvbnNlIHRvIHJlc3VsdHMgYXMgTWV0cmljUmVzdWx0cy4iIiIKICAgIGlmIHVzZXJfbWV0cmljczoKICAgICAgbWV0cmljcyA9IFsKICAgICAgICAgIG1ldHJpYyBmb3IgbWV0cmljIGluIHJlc3BvbnNlLm1ldHJpY3MgaWYgbWV0cmljLm5hbWUub3JpZ2luID09ICd1c2VyJwogICAgICBdCiAgICBlbHNlOgogICAgICBtZXRyaWNzID0gWwogICAgICAgICAgbWV0cmljIGZvciBtZXRyaWMgaW4gcmVzcG9uc2UubWV0cmljcwogICAgICAgICAgaWYgbWV0cmljLm5hbWUub3JpZ2luID09ICdkYXRhZmxvdy92MWIzJwogICAgICBdCgogICAgIyBHZXQgdGhlIHRlbnRhdGl2ZS9jb21taXR0ZWQgdmVyc2lvbnMgb2YgZXZlcnkgbWV0cmljIHRvZ2V0aGVyLgogICAgbWV0cmljc19ieV9uYW1lID0gZGVmYXVsdGRpY3QobGFtYmRhOiB7fSkKICAgIGZvciBtZXRyaWMgaW4gbWV0cmljczoKICAgICAgaWYgKG1ldHJpYy5uYW1lLm5hbWUuZW5kc3dpdGgoJ19NSU4nKSBvcgogICAgICAgICAgbWV0cmljLm5hbWUubmFtZS5lbmRzd2l0aCgnX01BWCcpIG9yCiAgICAgICAgICBtZXRyaWMubmFtZS5uYW1lLmVuZHN3aXRoKCdfTUVBTicpIG9yCiAgICAgICAgICBtZXRyaWMubmFtZS5uYW1lLmVuZHN3aXRoKCdfQ09VTlQnKSk6CiAgICAgICAgIyBUaGUgRGF0YWZsb3cgU2VydmljZSBwcmVzZW50cyBkaXN0cmlidXRpb24gbWV0cmljcyBpbiB0d28gd2F5czoKICAgICAgICAjIE9uZSB3YXkgaXMgYXMgYSBzaW5nbGUgZGlzdHJpYnV0aW9uIG9iamVjdCB3aXRoIGFsbCBpdHMgZmllbGRzLCBhbmQKICAgICAgICAjIGFub3RoZXIgd2F5IGlzIGFzIGZvdXIgZGlmZmVyZW50IHNjYWxhciBtZXRyaWNzIGxhYmVsZWQgYXMgX01JTiwKICAgICAgICAjIF9NQVgsIF9DT1VOVF8sIF9NRUFOLgogICAgICAgICMgVE9ETyhwYWJsb2VtKSByZW1vdmUgdGhlc2Ugd2hlbiBkaXN0cmlidXRpb25zIGFyZSBub3QgYmVpbmcgYnJva2VuIHVwCiAgICAgICAgIyAgaW4gdGhlIHNlcnZpY2UuCiAgICAgICAgIyBUaGUgc2Vjb25kIHdheSBpcyBvbmx5IHVzZWZ1bCBmb3IgdGhlIFVJLCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCiAgICAgICAgY29udGludWUKICAgICAgaXNfdGVudGF0aXZlID0gWwogICAgICAgICAgcHJvcCBmb3IgcHJvcCBpbiBtZXRyaWMubmFtZS5jb250ZXh0LmFkZGl0aW9uYWxQcm9wZXJ0aWVzCiAgICAgICAgICBpZiBwcm9wLmtleSA9PSAndGVudGF0aXZlJyBhbmQgcHJvcC52YWx1ZSA9PSAndHJ1ZScKICAgICAgXQogICAgICB0ZW50YXRpdmVfb3JfY29tbWl0dGVkID0gJ3RlbnRhdGl2ZScgaWYgaXNfdGVudGF0aXZlIGVsc2UgJ2NvbW1pdHRlZCcKCiAgICAgIG1ldHJpY19rZXkgPSBzZWxmLl9nZXRfbWV0cmljX2tleShtZXRyaWMpCiAgICAgIGlmIG1ldHJpY19rZXkgaXMgTm9uZToKICAgICAgICBjb250aW51ZQogICAgICBtZXRyaWNzX2J5X25hbWVbbWV0cmljX2tleV1bdGVudGF0aXZlX29yX2NvbW1pdHRlZF0gPSBtZXRyaWMKCiAgICAjIE5vdyB3ZSBjcmVhdGUgdGhlIE1ldHJpY1Jlc3VsdCBlbGVtZW50cy4KICAgIGZvciBtZXRyaWNfa2V5LCBtZXRyaWMgaW4gaXRlcml0ZW1zKG1ldHJpY3NfYnlfbmFtZSk6CiAgICAgIGF0dGVtcHRlZCA9IHNlbGYuX2dldF9tZXRyaWNfdmFsdWUobWV0cmljWyd0ZW50YXRpdmUnXSkKICAgICAgY29tbWl0dGVkID0gc2VsZi5fZ2V0X21ldHJpY192YWx1ZShtZXRyaWNbJ2NvbW1pdHRlZCddKQogICAgICByZXN1bHQuYXBwZW5kKAogICAgICAgICAgTWV0cmljUmVzdWx0KG1ldHJpY19rZXksIGF0dGVtcHRlZD1hdHRlbXB0ZWQsIGNvbW1pdHRlZD1jb21taXR0ZWQpKQoKICBkZWYgX2dldF9tZXRyaWNfdmFsdWUoc2VsZiwgbWV0cmljKToKICAgICIiIkdldCBhIG1ldHJpYyByZXN1bHQgb2JqZWN0IGZyb20gYSBNZXRyaWNVcGRhdGUgZnJvbSBEYXRhZmxvdyBBUEkuIiIiCiAgICBpZiBtZXRyaWMgaXMgTm9uZToKICAgICAgcmV0dXJuIE5vbmUKCiAgICBpZiBtZXRyaWMuc2NhbGFyIGlzIG5vdCBOb25lOgogICAgICByZXR1cm4gbWV0cmljLnNjYWxhci5pbnRlZ2VyX3ZhbHVlCiAgICBlbGlmIG1ldHJpYy5kaXN0cmlidXRpb24gaXMgbm90IE5vbmU6CiAgICAgIGRpc3RfY291bnQgPSBfZ2V0X21hdGNoKAogICAgICAgICAgbWV0cmljLmRpc3RyaWJ1dGlvbi5vYmplY3RfdmFsdWUucHJvcGVydGllcywKICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnY291bnQnKS52YWx1ZS5pbnRlZ2VyX3ZhbHVlCiAgICAgIGRpc3RfbWluID0gX2dldF9tYXRjaCgKICAgICAgICAgIG1ldHJpYy5kaXN0cmlidXRpb24ub2JqZWN0X3ZhbHVlLnByb3BlcnRpZXMsCiAgICAgICAgICBsYW1iZGEgeDogeC5rZXkgPT0gJ21pbicpLnZhbHVlLmludGVnZXJfdmFsdWUKICAgICAgZGlzdF9tYXggPSBfZ2V0X21hdGNoKAogICAgICAgICAgbWV0cmljLmRpc3RyaWJ1dGlvbi5vYmplY3RfdmFsdWUucHJvcGVydGllcywKICAgICAgICAgIGxhbWJkYSB4OiB4LmtleSA9PSAnbWF4JykudmFsdWUuaW50ZWdlcl92YWx1ZQogICAgICBkaXN0X3N1bSA9IF9nZXRfbWF0Y2goCiAgICAgICAgICBtZXRyaWMuZGlzdHJpYnV0aW9uLm9iamVjdF92YWx1ZS5wcm9wZXJ0aWVzLAogICAgICAgICAgbGFtYmRhIHg6IHgua2V5ID09ICdzdW0nKS52YWx1ZS5pbnRlZ2VyX3ZhbHVlCiAgICAgIHJldHVybiBEaXN0cmlidXRpb25SZXN1bHQoCiAgICAgICAgICBEaXN0cmlidXRpb25EYXRhKGRpc3Rfc3VtLCBkaXN0X2NvdW50LCBkaXN0X21pbiwgZGlzdF9tYXgpKQogICAgZWxzZToKICAgICAgcmV0dXJuIE5vbmUKCiAgZGVmIF9nZXRfbWV0cmljc19mcm9tX2RhdGFmbG93KHNlbGYsIGpvYl9pZD1Ob25lKToKICAgICIiIlJldHVybiBjYWNoZWQgbWV0cmljcyBvciBxdWVyeSB0aGUgZGF0YWZsb3cgc2VydmljZS4iIiIKICAgIGlmIG5vdCBqb2JfaWQ6CiAgICAgIHRyeToKICAgICAgICBqb2JfaWQgPSBzZWxmLmpvYl9yZXN1bHQuam9iX2lkKCkKICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgIGpvYl9pZCA9IE5vbmUKICAgIGlmIG5vdCBqb2JfaWQ6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0NhbiBub3QgcXVlcnkgbWV0cmljcy4gSm9iIGlkIGlzIHVua25vd24uJykKCiAgICBpZiBzZWxmLl9jYWNoZWRfbWV0cmljczoKICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZF9tZXRyaWNzCgogICAgam9iX21ldHJpY3MgPSBzZWxmLl9kYXRhZmxvd19jbGllbnQuZ2V0X2pvYl9tZXRyaWNzKGpvYl9pZCkKICAgICMgSWYgd2UgY2Fubm90IGRldGVybWluZSB0aGF0IHRoZSBqb2IgaGFzIHRlcm1pbmF0ZWQsCiAgICAjIHRoZW4gbWV0cmljcyB3aWxsIG5vdCBjaGFuZ2UgYW5kIHdlIGNhbiBjYWNoZSB0aGVtLgogICAgaWYgc2VsZi5qb2JfcmVzdWx0IGFuZCBzZWxmLmpvYl9yZXN1bHQuaXNfaW5fdGVybWluYWxfc3RhdGUoKToKICAgICAgc2VsZi5fY2FjaGVkX21ldHJpY3MgPSBqb2JfbWV0cmljcwogICAgcmV0dXJuIGpvYl9tZXRyaWNzCgogIGRlZiBhbGxfbWV0cmljcyhzZWxmLCBqb2JfaWQ9Tm9uZSk6CiAgICAiIiJSZXR1cm4gYWxsIHVzZXIgYW5kIHN5c3RlbSBtZXRyaWNzIGZyb20gdGhlIGRhdGFmbG93IHNlcnZpY2UuIiIiCiAgICBtZXRyaWNfcmVzdWx0cyA9IFtdCiAgICByZXNwb25zZSA9IHNlbGYuX2dldF9tZXRyaWNzX2Zyb21fZGF0YWZsb3coam9iX2lkPWpvYl9pZCkKICAgIHNlbGYuX3BvcHVsYXRlX21ldHJpY3MocmVzcG9uc2UsIG1ldHJpY19yZXN1bHRzLCB1c2VyX21ldHJpY3M9VHJ1ZSkKICAgIHNlbGYuX3BvcHVsYXRlX21ldHJpY3MocmVzcG9uc2UsIG1ldHJpY19yZXN1bHRzLCB1c2VyX21ldHJpY3M9RmFsc2UpCiAgICByZXR1cm4gbWV0cmljX3Jlc3VsdHMKCiAgZGVmIHF1ZXJ5KHNlbGYsIGZpbHRlcj1Ob25lKToKICAgIG1ldHJpY19yZXN1bHRzID0gW10KICAgIHJlc3BvbnNlID0gc2VsZi5fZ2V0X21ldHJpY3NfZnJvbV9kYXRhZmxvdygpCiAgICBzZWxmLl9wb3B1bGF0ZV9tZXRyaWNzKHJlc3BvbnNlLCBtZXRyaWNfcmVzdWx0cywgdXNlcl9tZXRyaWNzPVRydWUpCiAgICByZXR1cm4gewogICAgICAgIHNlbGYuQ09VTlRFUlM6IFsKICAgICAgICAgICAgZWxtIGZvciBlbG0gaW4gbWV0cmljX3Jlc3VsdHMgaWYgc2VsZi5tYXRjaGVzKGZpbHRlciwgZWxtLmtleSkgYW5kCiAgICAgICAgICAgIERhdGFmbG93TWV0cmljcy5faXNfY291bnRlcihlbG0pCiAgICAgICAgXSwKICAgICAgICBzZWxmLkRJU1RSSUJVVElPTlM6IFsKICAgICAgICAgICAgZWxtIGZvciBlbG0gaW4gbWV0cmljX3Jlc3VsdHMgaWYgc2VsZi5tYXRjaGVzKGZpbHRlciwgZWxtLmtleSkgYW5kCiAgICAgICAgICAgIERhdGFmbG93TWV0cmljcy5faXNfZGlzdHJpYnV0aW9uKGVsbSkKICAgICAgICBdLAogICAgICAgIHNlbGYuR0FVR0VTOiBbXQogICAgfSAgIyBUT0RPKHBhYmxvZW0pOiBBZGQgR2F1Z2Ugc3VwcG9ydCBmb3IgZGF0YWZsb3cuCgoKZGVmIG1haW4oYXJndik6CiAgIiIiUHJpbnQgdGhlIG1ldHJpYyByZXN1bHRzIGZvciBhIHRoZSBkYXRhZmxvdyAtLWpvYl9pZCBhbmQgLS1wcm9qZWN0LgoKICBJbnN0ZWFkIG9mIHJ1bm5pbmcgYW4gZW50aXJlIHBpcGVsaW5lIHdoaWNoIHRha2VzIHNldmVyYWwgbWludXRlcywgdXNlIHRoaXMKICBtYWluIG1ldGhvZCB0byBkaXNwbGF5IE1ldHJpY1Jlc3VsdHMgZm9yIGEgc3BlY2lmaWMgLS1qb2JfaWQgYW5kIC0tcHJvamVjdAogIHdoaWNoIHRha2VzIG9ubHkgYSBmZXcgc2Vjb25kcy4KICAiIiIKICAjIFRPRE8oQkVBTS02ODMzKTogVGhlIE1ldHJpY1Jlc3VsdHMgZG8gbm90IHNob3cgdHJhbnNsYXRlZCBzdGVwIG5hbWVzIGFzIHRoZQogICMgam9iX2dyYXBoIGlzIG5vdCBwcm92aWRlZCB0byBEYXRhZmxvd01ldHJpY3MuCiAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogIHRyeToKICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudAogIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAgICdHb29nbGUgQ2xvdWQgRGF0YWZsb3cgcnVubmVyIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAncGxlYXNlIGluc3RhbGwgYXBhY2hlX2JlYW1bZ2NwXScpCiAgaWYgYXJndlswXSA9PSBfX2ZpbGVfXzoKICAgIGFyZ3YgPSBhcmd2WzE6XQogIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAnLWonLCAnLS1qb2JfaWQnLCB0eXBlPXN0ciwgaGVscD0nVGhlIGpvYiBpZCB0byBxdWVyeSBtZXRyaWNzIGZvci4nKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctcCcsCiAgICAgICctLXByb2plY3QnLAogICAgICB0eXBlPXN0ciwKICAgICAgaGVscD0nVGhlIHByb2plY3QgbmFtZSB0byBxdWVyeSBtZXRyaWNzIGZvci4nKQogIGZsYWdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKCiAgIyBHZXQgYSBEYXRhZmxvdyBBUEkgY2xpZW50IGFuZCBzZXQgaXRzIHByb2plY3QgYW5kIGpvYl9pZCBpbiB0aGUgb3B0aW9ucy4KICBvcHRpb25zID0gUGlwZWxpbmVPcHRpb25zKCkKICBnY2xvdWRfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpCiAgZ2Nsb3VkX29wdGlvbnMucHJvamVjdCA9IGZsYWdzLnByb2plY3QKICBkYXRhZmxvd19jbGllbnQgPSBhcGljbGllbnQuRGF0YWZsb3dBcHBsaWNhdGlvbkNsaWVudChvcHRpb25zKQogIGRmX21ldHJpY3MgPSBEYXRhZmxvd01ldHJpY3MoZGF0YWZsb3dfY2xpZW50KQogIGFsbF9tZXRyaWNzID0gZGZfbWV0cmljcy5hbGxfbWV0cmljcyhqb2JfaWQ9ZmxhZ3Muam9iX2lkKQogIF9MT0dHRVIuaW5mbygKICAgICAgJ1ByaW50aW5nIGFsbCBNZXRyaWNSZXN1bHRzIGZvciAlcyBpbiAlcycsIGZsYWdzLmpvYl9pZCwgZmxhZ3MucHJvamVjdCkKICBmb3IgbWV0cmljX3Jlc3VsdCBpbiBhbGxfbWV0cmljczoKICAgIF9MT0dHRVIuaW5mbyhtZXRyaWNfcmVzdWx0KQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChsb2dnaW5nLklORk8pCiAgbWFpbihzeXMuYXJndikKlH2UKIwKX2dldF9tYXRjaJRqVjEBAEswSzyHlIwYRGF0YWZsb3dNZXRyaWNzLl9faW5pdF9flGpWMQEAS0dLV4eUjBtEYXRhZmxvd01ldHJpY3MuX2lzX2NvdW50ZXKUalYxAQBLWUtbh5SMIERhdGFmbG93TWV0cmljcy5faXNfZGlzdHJpYnV0aW9ulGpWMQEAS11LX4eUjCREYXRhZmxvd01ldHJpY3MuX3RyYW5zbGF0ZV9zdGVwX25hbWWUalYxAQBLYUtuh5SMH0RhdGFmbG93TWV0cmljcy5fZ2V0X21ldHJpY19rZXmUalYxAQBLcEuSh5SMIURhdGFmbG93TWV0cmljcy5fcG9wdWxhdGVfbWV0cmljc5RqVjEBAEuUS7+HlIwhRGF0YWZsb3dNZXRyaWNzLl9nZXRfbWV0cmljX3ZhbHVllGpWMQEAS8FL2IeUjCpEYXRhZmxvd01ldHJpY3MuX2dldF9tZXRyaWNzX2Zyb21fZGF0YWZsb3eUalYxAQBL2kvsh5SMG0RhdGFmbG93TWV0cmljcy5hbGxfbWV0cmljc5RqVjEBAEvuS/SHlIwVRGF0YWZsb3dNZXRyaWNzLnF1ZXJ5lGpWMQEAS/ZNBAGHlIwPRGF0YWZsb3dNZXRyaWNzlGpdMQEAS0VNBAGHlIwEbWFpbpRqVjEBAE0HAU0uAYeUdX2UKIwPRGF0YWZsb3dNZXRyaWNzlGp5AwAAjBtEYXRhZmxvd01ldHJpY3MuYWxsX21ldHJpY3OUankDAACMFURhdGFmbG93TWV0cmljcy5xdWVyeZRqeQMAAIwEbWFpbpRqeQMAAHWMLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfbWV0cmljc5R0lIwsYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXKUKFiJCQEAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIHJ1bm5lciBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1Ym1pdHMgYSBqb2IgZm9yIHJlbW90ZSBleGVjdXRpb24uCgpUaGUgcnVubmVyIHdpbGwgY3JlYXRlIGEgSlNPTiBkZXNjcmlwdGlvbiBvZiB0aGUgam9iIGdyYXBoIGFuZCB0aGVuIHN1Ym1pdCBpdAp0byB0aGUgRGF0YWZsb3cgU2VydmljZSBmb3IgcmVtb3RlIGV4ZWN1dGlvbiBieSBhIHdvcmtlci4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBiYXNlNjQKaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aW1lCmltcG9ydCB0cmFjZWJhY2sKaW1wb3J0IHVybGxpYgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBoZXgKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBlcnJvcgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsLmdjcCBpbXBvcnQganNvbl92YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgRGVidWdPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBHb29nbGVDbG91ZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFNldHVwT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBUZXN0T3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgV29ya2VyT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBjb21tb25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnB2YWx1ZSBpbXBvcnQgQXNTaWRlSW5wdXQKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GblNpZ25hdHVyZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IG5hbWVzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbC5jbGllbnRzIGltcG9ydCBkYXRhZmxvdyBhcyBkYXRhZmxvd19hcGkKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsLm5hbWVzIGltcG9ydCBQcm9wZXJ0eU5hbWVzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbC5uYW1lcyBpbXBvcnQgVHJhbnNmb3JtTmFtZXMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVSZXN1bHQKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVSdW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVTdGF0ZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQVmFsdWVDYWNoZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGEKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBwcm90b191dGlscwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmludGVyYWN0aXZlX3V0aWxzIGltcG9ydCBpc19pbl9ub3RlYm9vawpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnBsdWdpbiBpbXBvcnQgQmVhbVBsdWdpbgoKaWYgc3lzLnZlcnNpb25faW5mb1swXSA+IDI6CiAgdW5xdW90ZV90b19ieXRlcyA9IHVybGxpYi5wYXJzZS51bnF1b3RlX3RvX2J5dGVzCiAgcXVvdGUgPSB1cmxsaWIucGFyc2UucXVvdGUKZWxzZToKICB1bnF1b3RlX3RvX2J5dGVzID0gdXJsbGliLnVucXVvdGUgICMgcHlsaW50OiBkaXNhYmxlPWRlcHJlY2F0ZWQtdXJsbGliLWZ1bmN0aW9uCiAgcXVvdGUgPSB1cmxsaWIucXVvdGUgICMgcHlsaW50OiBkaXNhYmxlPWRlcHJlY2F0ZWQtdXJsbGliLWZ1bmN0aW9uCgpfX2FsbF9fID0gWydEYXRhZmxvd1J1bm5lciddCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgRGF0YWZsb3dSdW5uZXIoUGlwZWxpbmVSdW5uZXIpOgogICIiIkEgcnVubmVyIHRoYXQgY3JlYXRlcyBqb2IgZ3JhcGhzIGFuZCBzdWJtaXRzIHRoZW0gZm9yIHJlbW90ZSBleGVjdXRpb24uCgogIEV2ZXJ5IGV4ZWN1dGlvbiBvZiB0aGUgcnVuKCkgbWV0aG9kIHdpbGwgc3VibWl0IGFuIGluZGVwZW5kZW50IGpvYiBmb3IKICByZW1vdGUgZXhlY3V0aW9uIHRoYXQgY29uc2lzdHMgb2YgdGhlIG5vZGVzIHJlYWNoYWJsZSBmcm9tIHRoZSBwYXNzZWQgaW4KICBub2RlIGFyZ3VtZW50IG9yIGVudGlyZSBncmFwaCBpZiBub2RlIGlzIE5vbmUuIFRoZSBydW4oKSBtZXRob2QgcmV0dXJucwogIGFmdGVyIHRoZSBzZXJ2aWNlIGNyZWF0ZWQgdGhlIGpvYiBhbmQgIHdpbGwgbm90IHdhaXQgZm9yIHRoZSBqb2IgdG8gZmluaXNoCiAgaWYgYmxvY2tpbmcgaXMgc2V0IHRvIEZhbHNlLgogICIiIgoKICAjIEEgbGlzdCBvZiBQVHJhbnNmb3JtT3ZlcnJpZGUgb2JqZWN0cyB0byBiZSBhcHBsaWVkIGJlZm9yZSBydW5uaW5nIGEgcGlwZWxpbmUKICAjIHVzaW5nIERhdGFmbG93UnVubmVyLgogICMgQ3VycmVudGx5IHRoaXMgb25seSB3b3JrcyBmb3Igb3ZlcnJpZGVzIHdoZXJlIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzIGRvCiAgIyBub3QgY2hhbmdlLgogICMgRm9yIGludGVybmFsIFNESyB1c2Ugb25seS4gVGhpcyBzaG91bGQgbm90IGJlIHVwZGF0ZWQgYnkgQmVhbSBwaXBlbGluZQogICMgYXV0aG9ycy4KCiAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAjIFRPRE86IFJlbW92ZSB0aGUgYXBhY2hlX2JlYW0ucGlwZWxpbmUgZGVwZW5kZW5jeSBpbiBDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cucHRyYW5zZm9ybV9vdmVycmlkZXMgaW1wb3J0IENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZQogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcyBpbXBvcnQgUmVhZFBUcmFuc2Zvcm1PdmVycmlkZQogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5wdHJhbnNmb3JtX292ZXJyaWRlcyBpbXBvcnQgSnJoUmVhZFBUcmFuc2Zvcm1PdmVycmlkZQoKICBfUFRSQU5TRk9STV9PVkVSUklERVMgPSBbXQoKICBfSlJIX1BUUkFOU0ZPUk1fT1ZFUlJJREVTID0gWwogICAgICBKcmhSZWFkUFRyYW5zZm9ybU92ZXJyaWRlKCksCiAgXQoKICAjIFRoZXNlIG92ZXJyaWRlcyBzaG91bGQgYmUgYXBwbGllZCBhZnRlciB0aGUgcHJvdG8gcmVwcmVzZW50YXRpb24gb2YgdGhlCiAgIyBncmFwaCBpcyBjcmVhdGVkLgogIF9OT05fUE9SVEFCTEVfUFRSQU5TRk9STV9PVkVSUklERVMgPSBbCiAgICAgIENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZSgpLAogICAgICBSZWFkUFRyYW5zZm9ybU92ZXJyaWRlKCksCiAgXQoKICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGU9Tm9uZSk6CiAgICAjIENhY2hlIG9mIENsb3VkV29ya2Zsb3dTdGVwIHByb3RvcyBnZW5lcmF0ZWQgd2hpbGUgdGhlIHJ1bm5lcgogICAgIyAiZXhlY3V0ZXMiIGEgcGlwZWxpbmUuCiAgICBzZWxmLl9jYWNoZSA9IGNhY2hlIGlmIGNhY2hlIGlzIG5vdCBOb25lIGVsc2UgUFZhbHVlQ2FjaGUoKQogICAgc2VsZi5fdW5pcXVlX3N0ZXBfaWQgPSAwCgogIGRlZiBpc19mbmFwaV9jb21wYXRpYmxlKHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfZ2V0X3VuaXF1ZV9zdGVwX25hbWUoc2VsZik6CiAgICBzZWxmLl91bmlxdWVfc3RlcF9pZCArPSAxCiAgICByZXR1cm4gJ3MlcycgJSBzZWxmLl91bmlxdWVfc3RlcF9pZAoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHBvbGxfZm9yX2pvYl9jb21wbGV0aW9uKHJ1bm5lciwgcmVzdWx0LCBkdXJhdGlvbik6CiAgICAiIiJQb2xscyBmb3IgdGhlIHNwZWNpZmllZCBqb2IgdG8gZmluaXNoIHJ1bm5pbmcgKHN1Y2Nlc3NmdWxseSBvciBub3QpLgoKICAgIFVwZGF0ZXMgdGhlIHJlc3VsdCB3aXRoIHRoZSBuZXcgam9iIGluZm9ybWF0aW9uIGJlZm9yZSByZXR1cm5pbmcuCgogICAgQXJnczoKICAgICAgcnVubmVyOiBEYXRhZmxvd1J1bm5lciBpbnN0YW5jZSB0byB1c2UgZm9yIHBvbGxpbmcgam9iIHN0YXRlLgogICAgICByZXN1bHQ6IERhdGFmbG93UGlwZWxpbmVSZXN1bHQgaW5zdGFuY2UgdXNlZCBmb3Igam9iIGluZm9ybWF0aW9uLgogICAgICBkdXJhdGlvbiAoaW50KTogVGhlIHRpbWUgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igam9iIHRvIGZpbmlzaC4KICAgICAgICBJZiBpdCBpcyBzZXQgdG8gOmRhdGE6YE5vbmVgLCBpdCB3aWxsIHdhaXQgaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBqb2IKICAgICAgICBpcyBmaW5pc2hlZC4KICAgICIiIgogICAgbGFzdF9tZXNzYWdlX3RpbWUgPSBOb25lCiAgICBjdXJyZW50X3NlZW5fbWVzc2FnZXMgPSBzZXQoKQoKICAgIGxhc3RfZXJyb3JfcmFuayA9IGZsb2F0KCctaW5mJykKICAgIGxhc3RfZXJyb3JfbXNnID0gTm9uZQogICAgbGFzdF9qb2Jfc3RhdGUgPSBOb25lCiAgICAjIEhvdyBsb25nIHRvIHdhaXQgYWZ0ZXIgcGlwZWxpbmUgZmFpbHVyZSBmb3IgdGhlIGVycm9yCiAgICAjIG1lc3NhZ2UgdG8gc2hvdyB1cCBnaXZpbmcgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuCiAgICAjIEl0IHR5cGljYWxseSB0YWtlcyBhYm91dCAzMCBzZWNvbmRzLgogICAgZmluYWxfY291bnRkb3duX3RpbWVyX3NlY3MgPSA1MC4wCiAgICBzbGVlcF9zZWNzID0gNS4wCgogICAgIyBUcnkgdG8gcHJpb3JpdGl6ZSB0aGUgdXNlci1sZXZlbCB0cmFjZWJhY2ssIGlmIGFueS4KICAgIGRlZiByYW5rX2Vycm9yKG1zZyk6CiAgICAgIGlmICd3b3JrIGl0ZW0gd2FzIGF0dGVtcHRlZCcgaW4gbXNnOgogICAgICAgIHJldHVybiAtMQogICAgICBlbGlmICdUcmFjZWJhY2snIGluIG1zZzoKICAgICAgICByZXR1cm4gMQogICAgICByZXR1cm4gMAoKICAgIGlmIGR1cmF0aW9uOgogICAgICBzdGFydF9zZWNzID0gdGltZS50aW1lKCkKICAgICAgZHVyYXRpb25fc2VjcyA9IGR1cmF0aW9uIC8vIDEwMDAKCiAgICBqb2JfaWQgPSByZXN1bHQuam9iX2lkKCkKICAgIHdoaWxlIFRydWU6CiAgICAgIHJlc3BvbnNlID0gcnVubmVyLmRhdGFmbG93X2NsaWVudC5nZXRfam9iKGpvYl9pZCkKICAgICAgIyBJZiBnZXQoKSBpcyBjYWxsZWQgdmVyeSBzb29uIGFmdGVyIENyZWF0ZSgpIHRoZSByZXNwb25zZSBtYXkgbm90IGNvbnRhaW4KICAgICAgIyBhbiBpbml0aWFsaXplZCAnY3VycmVudFN0YXRlJyBmaWVsZC4KICAgICAgaWYgcmVzcG9uc2UuY3VycmVudFN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgIGlmIHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSAhPSBsYXN0X2pvYl9zdGF0ZToKICAgICAgICAgIF9MT0dHRVIuaW5mbygnSm9iICVzIGlzIGluIHN0YXRlICVzJywgam9iX2lkLCByZXNwb25zZS5jdXJyZW50U3RhdGUpCiAgICAgICAgICBsYXN0X2pvYl9zdGF0ZSA9IHJlc3BvbnNlLmN1cnJlbnRTdGF0ZQogICAgICAgIGlmIHN0cihyZXNwb25zZS5jdXJyZW50U3RhdGUpICE9ICdKT0JfU1RBVEVfUlVOTklORyc6CiAgICAgICAgICAjIFN0b3AgY2hlY2tpbmcgZm9yIG5ldyBtZXNzYWdlcyBvbiB0aW1lb3V0LCBleHBsYW5hdG9yeQogICAgICAgICAgIyBtZXNzYWdlIHJlY2VpdmVkLCBzdWNjZXNzLCBvciBhIHRlcm1pbmFsIGpvYiBzdGF0ZSBjYXVzZWQKICAgICAgICAgICMgYnkgdGhlIHVzZXIgdGhhdCB0aGVyZWZvcmUgZG9lc24ndCByZXF1aXJlIGV4cGxhbmF0aW9uLgogICAgICAgICAgaWYgKGZpbmFsX2NvdW50ZG93bl90aW1lcl9zZWNzIDw9IDAuMCBvciBsYXN0X2Vycm9yX21zZyBpcyBub3QgTm9uZSBvcgogICAgICAgICAgICAgIHN0cihyZXNwb25zZS5jdXJyZW50U3RhdGUpID09ICdKT0JfU1RBVEVfRE9ORScgb3IKICAgICAgICAgICAgICBzdHIocmVzcG9uc2UuY3VycmVudFN0YXRlKSA9PSAnSk9CX1NUQVRFX0NBTkNFTExFRCcgb3IKICAgICAgICAgICAgICBzdHIocmVzcG9uc2UuY3VycmVudFN0YXRlKSA9PSAnSk9CX1NUQVRFX1VQREFURUQnIG9yCiAgICAgICAgICAgICAgc3RyKHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkgPT0gJ0pPQl9TVEFURV9EUkFJTkVEJyk6CiAgICAgICAgICAgIGJyZWFrCgogICAgICAgICAgIyBDaGVjayB0aGF0IGpvYiBpcyBpbiBhIHBvc3QtcHJlcGFyYXRpb24gc3RhdGUgYmVmb3JlIHN0YXJ0aW5nIHRoZQogICAgICAgICAgIyBmaW5hbCBjb3VudGRvd24uCiAgICAgICAgICBpZiAoc3RyKHJlc3BvbnNlLmN1cnJlbnRTdGF0ZSkgbm90IGluICgnSk9CX1NUQVRFX1BFTkRJTkcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0pPQl9TVEFURV9RVUVVRUQnKSk6CiAgICAgICAgICAgICMgVGhlIGpvYiBoYXMgZmFpbGVkOyBlbnN1cmUgd2Ugc2VlIGFueSBmaW5hbCBlcnJvciBtZXNzYWdlcy4KICAgICAgICAgICAgc2xlZXBfc2VjcyA9IDEuMCAgIyBwb2xsIGZhc3RlciBkdXJpbmcgdGhlIGZpbmFsIGNvdW50ZG93bgogICAgICAgICAgICBmaW5hbF9jb3VudGRvd25fdGltZXJfc2VjcyAtPSBzbGVlcF9zZWNzCgogICAgICB0aW1lLnNsZWVwKHNsZWVwX3NlY3MpCgogICAgICAjIEdldCBhbGwgbWVzc2FnZXMgc2luY2UgYmVnaW5uaW5nIG9mIHRoZSBqb2IgcnVuIG9yIHNpbmNlIGxhc3QgbWVzc2FnZS4KICAgICAgcGFnZV90b2tlbiA9IE5vbmUKICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICBtZXNzYWdlcywgcGFnZV90b2tlbiA9IHJ1bm5lci5kYXRhZmxvd19jbGllbnQubGlzdF9tZXNzYWdlcygKICAgICAgICAgICAgam9iX2lkLCBwYWdlX3Rva2VuPXBhZ2VfdG9rZW4sIHN0YXJ0X3RpbWU9bGFzdF9tZXNzYWdlX3RpbWUpCiAgICAgICAgZm9yIG0gaW4gbWVzc2FnZXM6CiAgICAgICAgICBtZXNzYWdlID0gJyVzOiAlczogJXMnICUgKG0udGltZSwgbS5tZXNzYWdlSW1wb3J0YW5jZSwgbS5tZXNzYWdlVGV4dCkKCiAgICAgICAgICBpZiBub3QgbGFzdF9tZXNzYWdlX3RpbWUgb3IgbS50aW1lID4gbGFzdF9tZXNzYWdlX3RpbWU6CiAgICAgICAgICAgIGxhc3RfbWVzc2FnZV90aW1lID0gbS50aW1lCiAgICAgICAgICAgIGN1cnJlbnRfc2Vlbl9tZXNzYWdlcyA9IHNldCgpCgogICAgICAgICAgaWYgbWVzc2FnZSBpbiBjdXJyZW50X3NlZW5fbWVzc2FnZXM6CiAgICAgICAgICAgICMgU2tpcCB0aGUgbWVzc2FnZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHNlZW4gYXQgdGhlIGN1cnJlbnQKICAgICAgICAgICAgIyB0aW1lLiBUaGlzIGNvdWxkIGJlIHRoZSBjYXNlIHNpbmNlIHRoZSBsaXN0X21lc3NhZ2VzIEFQSSBpcwogICAgICAgICAgICAjIHF1ZXJpZWQgc3RhcnRpbmcgYXQgbGFzdF9tZXNzYWdlX3RpbWUuCiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICBjdXJyZW50X3NlZW5fbWVzc2FnZXMuYWRkKG1lc3NhZ2UpCiAgICAgICAgICAjIFNraXAgZW1wdHkgbWVzc2FnZXMuCiAgICAgICAgICBpZiBtLm1lc3NhZ2VJbXBvcnRhbmNlIGlzIE5vbmU6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICBfTE9HR0VSLmluZm8obWVzc2FnZSkKICAgICAgICAgIGlmIHN0cihtLm1lc3NhZ2VJbXBvcnRhbmNlKSA9PSAnSk9CX01FU1NBR0VfRVJST1InOgogICAgICAgICAgICBpZiByYW5rX2Vycm9yKG0ubWVzc2FnZVRleHQpID49IGxhc3RfZXJyb3JfcmFuazoKICAgICAgICAgICAgICBsYXN0X2Vycm9yX3JhbmsgPSByYW5rX2Vycm9yKG0ubWVzc2FnZVRleHQpCiAgICAgICAgICAgICAgbGFzdF9lcnJvcl9tc2cgPSBtLm1lc3NhZ2VUZXh0CiAgICAgICAgaWYgbm90IHBhZ2VfdG9rZW46CiAgICAgICAgICBicmVhawoKICAgICAgaWYgZHVyYXRpb246CiAgICAgICAgcGFzc2VkX3NlY3MgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3NlY3MKICAgICAgICBpZiBwYXNzZWRfc2VjcyA+IGR1cmF0aW9uX3NlY3M6CiAgICAgICAgICBfTE9HR0VSLndhcm5pbmcoCiAgICAgICAgICAgICAgJ1RpbWluZyBvdXQgb24gd2FpdGluZyBmb3Igam9iICVzIGFmdGVyICVkIHNlY29uZHMnLAogICAgICAgICAgICAgIGpvYl9pZCwKICAgICAgICAgICAgICBwYXNzZWRfc2VjcykKICAgICAgICAgIGJyZWFrCgogICAgcmVzdWx0Ll9qb2IgPSByZXNwb25zZQogICAgcnVubmVyLmxhc3RfZXJyb3JfbXNnID0gbGFzdF9lcnJvcl9tc2cKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBncm91cF9ieV9rZXlfaW5wdXRfdmlzaXRvcigpOgogICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lVmlzaXRvcgoKICAgIGNsYXNzIEdyb3VwQnlLZXlJbnB1dFZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAgICAgIiIiQSB2aXNpdG9yIHRoYXQgcmVwbGFjZXMgYEFueWAgZWxlbWVudCB0eXBlIGZvciBpbnB1dCBgUENvbGxlY3Rpb25gIG9mCiAgICAgIGEgYEdyb3VwQnlLZXlgIG9yIGBfR3JvdXBCeUtleU9ubHlgIHdpdGggYSBgS1ZgIHR5cGUuCgogICAgICBUT0RPKEJFQU0tMTE1KTogT25jZSBQeXRob24gU0RrIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IFJ1bm5lciBBUEksCiAgICAgIHdlIGNvdWxkIGRpcmVjdGx5IHJlcGxhY2UgdGhlIGNvZGVyIGluc3RlYWQgb2YgbXV0YXRpbmcgdGhlIGVsZW1lbnQgdHlwZS4KICAgICAgIiIiCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLnZpc2l0X3RyYW5zZm9ybSh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAgICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgICAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgR3JvdXBCeUtleSwgX0dyb3VwQnlLZXlPbmx5CiAgICAgICAgaWYgaXNpbnN0YW5jZSh0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0sIChHcm91cEJ5S2V5LCBfR3JvdXBCeUtleU9ubHkpKToKICAgICAgICAgIHBjb2xsID0gdHJhbnNmb3JtX25vZGUuaW5wdXRzWzBdCiAgICAgICAgICBwY29sbC5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuY29lcmNlX3RvX2t2X3R5cGUoCiAgICAgICAgICAgICAgcGNvbGwuZWxlbWVudF90eXBlLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsKQogICAgICAgICAga2V5X3R5cGUsIHZhbHVlX3R5cGUgPSBwY29sbC5lbGVtZW50X3R5cGUudHVwbGVfdHlwZXMKICAgICAgICAgIGlmIHRyYW5zZm9ybV9ub2RlLm91dHB1dHM6CiAgICAgICAgICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5wb3J0YWJpbGl0eS5mbl9hcGlfcnVubmVyX3RyYW5zZm9ybXMgaW1wb3J0IFwKICAgICAgICAgICAgICBvbmx5X2VsZW1lbnQKICAgICAgICAgICAga2V5ID0gKAogICAgICAgICAgICAgICAgTm9uZSBpZiBOb25lIGluIHRyYW5zZm9ybV9ub2RlLm91dHB1dHMua2V5cygpIGVsc2Ugb25seV9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLm91dHB1dHMua2V5cygpKSkKICAgICAgICAgICAgdHJhbnNmb3JtX25vZGUub3V0cHV0c1trZXldLmVsZW1lbnRfdHlwZSA9IHR5cGVoaW50cy5LVlsKICAgICAgICAgICAgICAgIGtleV90eXBlLCB0eXBlaGludHMuSXRlcmFibGVbdmFsdWVfdHlwZV1dCgogICAgcmV0dXJuIEdyb3VwQnlLZXlJbnB1dFZpc2l0b3IoKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9zZXRfcGRvbmVfdmlzaXRvcihwaXBlbGluZSk6CiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmVWaXNpdG9yCgogICAgY2xhc3MgU2V0UERvbmVWaXNpdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaXBlbGluZSk6CiAgICAgICAgc2VsZi5fcGlwZWxpbmUgPSBwaXBlbGluZQoKICAgICAgQHN0YXRpY21ldGhvZAogICAgICBkZWYgX21heWJlX2ZpeF9vdXRwdXQodHJhbnNmb3JtX25vZGUsIHBpcGVsaW5lKToKICAgICAgICBpZiBub3QgdHJhbnNmb3JtX25vZGUub3V0cHV0czoKICAgICAgICAgIHB2YWwgPSBwdmFsdWUuUERvbmUocGlwZWxpbmUpCiAgICAgICAgICBwdmFsLnByb2R1Y2VyID0gdHJhbnNmb3JtX25vZGUKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLm91dHB1dHMgPSB7Tm9uZTogcHZhbH0KCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBTZXRQRG9uZVZpc2l0b3IuX21heWJlX2ZpeF9vdXRwdXQodHJhbnNmb3JtX25vZGUsIHNlbGYuX3BpcGVsaW5lKQoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgU2V0UERvbmVWaXNpdG9yLl9tYXliZV9maXhfb3V0cHV0KHRyYW5zZm9ybV9ub2RlLCBzZWxmLl9waXBlbGluZSkKCiAgICByZXR1cm4gU2V0UERvbmVWaXNpdG9yKHBpcGVsaW5lKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHNpZGVfaW5wdXRfdmlzaXRvcih1c2VfdW5pZmllZF93b3JrZXI9RmFsc2UpOgogICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZVZpc2l0b3IKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBQYXJEbwoKICAgIGNsYXNzIFNpZGVJbnB1dFZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAgICAgIiIiRW5zdXJlcyBpbnB1dCBgUENvbGxlY3Rpb25gIHVzZWQgYXMgYSBzaWRlIGlucHV0cyBoYXMgYSBgS1ZgIHR5cGUuCgogICAgICBUT0RPKEJFQU0tMTE1KTogT25jZSBQeXRob24gU0RLIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgbmV3IFJ1bm5lciBBUEksCiAgICAgIHdlIGNvdWxkIGRpcmVjdGx5IHJlcGxhY2UgdGhlIGNvZGVyIGluc3RlYWQgb2YgbXV0YXRpbmcgdGhlIGVsZW1lbnQgdHlwZS4KICAgICAgIiIiCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLCBQYXJEbyk6CiAgICAgICAgICBuZXdfc2lkZV9pbnB1dHMgPSBbXQogICAgICAgICAgZm9yIGl4LCBzaWRlX2lucHV0IGluIGVudW1lcmF0ZSh0cmFuc2Zvcm1fbm9kZS5zaWRlX2lucHV0cyk6CiAgICAgICAgICAgIGFjY2Vzc19wYXR0ZXJuID0gc2lkZV9pbnB1dC5fc2lkZV9pbnB1dF9kYXRhKCkuYWNjZXNzX3BhdHRlcm4KICAgICAgICAgICAgaWYgYWNjZXNzX3BhdHRlcm4gPT0gY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuSVRFUkFCTEUudXJuOgogICAgICAgICAgICAgIGlmIHVzZV91bmlmaWVkX3dvcmtlcjoKICAgICAgICAgICAgICAgICMgVE9ETyhCRUFNLTkxNzMpOiBTdG9wIHBhdGNoaW5nIHVwIHRoZSBhY2Nlc3MgcGF0dGVybiB0bwogICAgICAgICAgICAgICAgIyBhcHBlYXNlIERhdGFmbG93IHdoZW4gdXNpbmcgdGhlIFVXIGFuZCBoYXJkY29kZSB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAjIHR5cGUgdG8gYmUgQW55IHNpbmNlIHRoZSBEYXRhZmxvdyBKU09OIGFuZCBwaXBlbGluZSBwcm90bwogICAgICAgICAgICAgICAgIyBjYW4gZGlmZmVyIGluIGNvZGVycyB3aGljaCBsZWFkcyB0byBlbmNvZGluZy9kZWNvZGluZyBpc3N1ZXMKICAgICAgICAgICAgICAgICMgd2l0aGluIHRoZSBydW5uZXIuCiAgICAgICAgICAgICAgICBzaWRlX2lucHV0LnB2YWx1ZS5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuQW55CiAgICAgICAgICAgICAgICBuZXdfc2lkZV9pbnB1dCA9IF9EYXRhZmxvd0l0ZXJhYmxlU2lkZUlucHV0KHNpZGVfaW5wdXQpCiAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICMgQWRkIGEgbWFwIHRvICgnJywgdmFsdWUpIGFzIERhdGFmbG93IGN1cnJlbnRseSBvbmx5IGhhbmRsZXMKICAgICAgICAgICAgICAgICMga2V5ZWQgc2lkZSBpbnB1dHMgd2hlbiB1c2luZyB0aGUgSlJILgogICAgICAgICAgICAgICAgcGlwZWxpbmUgPSBzaWRlX2lucHV0LnB2YWx1ZS5waXBlbGluZQogICAgICAgICAgICAgICAgbmV3X3NpZGVfaW5wdXQgPSBfRGF0YWZsb3dJdGVyYWJsZUFzTXVsdGltYXBTaWRlSW5wdXQoCiAgICAgICAgICAgICAgICAgICAgc2lkZV9pbnB1dCkKICAgICAgICAgICAgICAgIG5ld19zaWRlX2lucHV0LnB2YWx1ZSA9IGJlYW0ucHZhbHVlLlBDb2xsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lLAogICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfdHlwZT10eXBlaGludHMuS1ZbYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlX2lucHV0LnB2YWx1ZS5lbGVtZW50X3R5cGVdLAogICAgICAgICAgICAgICAgICAgIGlzX2JvdW5kZWQ9c2lkZV9pbnB1dC5wdmFsdWUuaXNfYm91bmRlZCkKICAgICAgICAgICAgICAgIHBhcmVudCA9IHRyYW5zZm9ybV9ub2RlLnBhcmVudCBvciBwaXBlbGluZS5fcm9vdF90cmFuc2Zvcm0oKQogICAgICAgICAgICAgICAgbWFwX3RvX3ZvaWRfa2V5ID0gYmVhbS5waXBlbGluZS5BcHBsaWVkUFRyYW5zZm9ybSgKICAgICAgICAgICAgICAgICAgICBwaXBlbGluZSwKICAgICAgICAgICAgICAgICAgICBiZWFtLk1hcChsYW1iZGEgeDogKGInJywgeCkpLAogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwgKyAnL01hcFRvVm9pZEtleSVzJyAlIGl4LAogICAgICAgICAgICAgICAgICAgIChzaWRlX2lucHV0LnB2YWx1ZSwgKSkKICAgICAgICAgICAgICAgIG5ld19zaWRlX2lucHV0LnB2YWx1ZS5wcm9kdWNlciA9IG1hcF90b192b2lkX2tleQogICAgICAgICAgICAgICAgbWFwX3RvX3ZvaWRfa2V5LmFkZF9vdXRwdXQobmV3X3NpZGVfaW5wdXQucHZhbHVlLCBOb25lKQogICAgICAgICAgICAgICAgcGFyZW50LmFkZF9wYXJ0KG1hcF90b192b2lkX2tleSkKICAgICAgICAgICAgZWxpZiBhY2Nlc3NfcGF0dGVybiA9PSBjb21tb25fdXJucy5zaWRlX2lucHV0cy5NVUxUSU1BUC51cm46CiAgICAgICAgICAgICAgIyBFbnN1cmUgdGhlIGlucHV0IGNvZGVyIGlzIGEgS1YgY29kZXIgYW5kIHBhdGNoIHVwIHRoZQogICAgICAgICAgICAgICMgYWNjZXNzIHBhdHRlcm4gdG8gYXBwZWFzZSBEYXRhZmxvdy4KICAgICAgICAgICAgICBzaWRlX2lucHV0LnB2YWx1ZS5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuY29lcmNlX3RvX2t2X3R5cGUoCiAgICAgICAgICAgICAgICAgIHNpZGVfaW5wdXQucHZhbHVlLmVsZW1lbnRfdHlwZSwgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCkKICAgICAgICAgICAgICBuZXdfc2lkZV9pbnB1dCA9IF9EYXRhZmxvd011bHRpbWFwU2lkZUlucHV0KHNpZGVfaW5wdXQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIGFjY2VzcyBwYXR0ZXJuIGZvciAlcjogJXInICUKICAgICAgICAgICAgICAgICAgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIGFjY2Vzc19wYXR0ZXJuKSkKICAgICAgICAgICAgbmV3X3NpZGVfaW5wdXRzLmFwcGVuZChuZXdfc2lkZV9pbnB1dCkKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLnNpZGVfaW5wdXRzID0gbmV3X3NpZGVfaW5wdXRzCiAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0uc2lkZV9pbnB1dHMgPSBuZXdfc2lkZV9pbnB1dHMKCiAgICByZXR1cm4gU2lkZUlucHV0VmlzaXRvcigpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZmxhdHRlbl9pbnB1dF92aXNpdG9yKCk6CiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmVWaXNpdG9yCgogICAgY2xhc3MgRmxhdHRlbklucHV0VmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgICAiIiJBIHZpc2l0b3IgdGhhdCByZXBsYWNlcyB0aGUgZWxlbWVudCB0eXBlIGZvciBpbnB1dCBgYFBDb2xsZWN0aW9uc2BgcyBvZgogICAgICAgYSBgYEZsYXR0ZW5gYCB0cmFuc2Zvcm0gd2l0aCB0aGF0IG9mIHRoZSBvdXRwdXQgYGBQQ29sbGVjdGlvbmBgLgogICAgICAiIiIKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IEZsYXR0ZW4KICAgICAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybSwgRmxhdHRlbik6CiAgICAgICAgICBvdXRwdXRfcGNvbGwgPSB0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzW05vbmVdCiAgICAgICAgICBmb3IgaW5wdXRfcGNvbGwgaW4gdHJhbnNmb3JtX25vZGUuaW5wdXRzOgogICAgICAgICAgICBpbnB1dF9wY29sbC5lbGVtZW50X3R5cGUgPSBvdXRwdXRfcGNvbGwuZWxlbWVudF90eXBlCgogICAgcmV0dXJuIEZsYXR0ZW5JbnB1dFZpc2l0b3IoKQoKICBkZWYgX2NoZWNrX2Zvcl91bnN1cHBvcnRlZF9mbmFwaV9mZWF0dXJlcyhzZWxmLCBwaXBlbGluZV9wcm90byk6CiAgICBjb21wb25lbnRzID0gcGlwZWxpbmVfcHJvdG8uY29tcG9uZW50cwogICAgZm9yIHdpbmRvd2luZ19zdHJhdGVneSBpbiBjb21wb25lbnRzLndpbmRvd2luZ19zdHJhdGVnaWVzLnZhbHVlcygpOgogICAgICBpZiAod2luZG93aW5nX3N0cmF0ZWd5Lm1lcmdlX3N0YXR1cyA9PQogICAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5NZXJnZVN0YXR1cy5ORUVEU19NRVJHRSBhbmQKICAgICAgICAgIHdpbmRvd2luZ19zdHJhdGVneS53aW5kb3dfZm4udXJuIG5vdCBpbiAoCiAgICAgICAgICAgICAgY29tbW9uX3VybnMuc2Vzc2lvbl93aW5kb3dzLnVybiwgKSk6CiAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAnVW5zdXBwb3J0ZWQgbWVyZ2luZyB3aW5kb3dpbmcgc3RyYXRlZ3k6ICVzJyAlCiAgICAgICAgICAgIHdpbmRvd2luZ19zdHJhdGVneS53aW5kb3dfZm4udXJuKQogICAgICBlbGlmIGNvbXBvbmVudHMuY29kZXJzWwogICAgICAgICAgd2luZG93aW5nX3N0cmF0ZWd5LndpbmRvd19jb2Rlcl9pZF0uc3BlYy51cm4gbm90IGluICgKICAgICAgICAgICAgICBjb21tb25fdXJucy5jb2RlcnMuR0xPQkFMX1dJTkRPVy51cm4sCiAgICAgICAgICAgICAgY29tbW9uX3VybnMuY29kZXJzLklOVEVSVkFMX1dJTkRPVy51cm4pOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgJ1Vuc3VwcG9ydGVkIHdpbmRvdyBjb2RlciAlcyBmb3Igd2luZG93IGZuICVzJyAlICgKICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuY29kZXJzW3dpbmRvd2luZ19zdHJhdGVneS53aW5kb3dfY29kZXJfaWRdLnNwZWMudXJuLAogICAgICAgICAgICAgICAgd2luZG93aW5nX3N0cmF0ZWd5LndpbmRvd19mbi51cm4pKQoKICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYsIHBpcGVsaW5lLCBvcHRpb25zKToKICAgICIiIlJlbW90ZWx5IGV4ZWN1dGVzIGVudGlyZSBwaXBlbGluZSBvciBwYXJ0cyByZWFjaGFibGUgZnJvbSBub2RlLiIiIgogICAgIyBMYWJlbCBnb29nLWRhdGFmbG93LW5vdGVib29rIGlmIGpvYiBpcyBzdGFydGVkIGZyb20gbm90ZWJvb2suCiAgICBpZiBpc19pbl9ub3RlYm9vaygpOgogICAgICBub3RlYm9va192ZXJzaW9uID0gKAogICAgICAgICAgJ2dvb2ctZGF0YWZsb3ctbm90ZWJvb2s9JyArCiAgICAgICAgICBiZWFtLnZlcnNpb24uX192ZXJzaW9uX18ucmVwbGFjZSgnLicsICdfJykpCiAgICAgIGlmIG9wdGlvbnMudmlld19hcyhHb29nbGVDbG91ZE9wdGlvbnMpLmxhYmVsczoKICAgICAgICBvcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS5sYWJlbHMuYXBwZW5kKG5vdGVib29rX3ZlcnNpb24pCiAgICAgIGVsc2U6CiAgICAgICAgb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykubGFiZWxzID0gW25vdGVib29rX3ZlcnNpb25dCgogICAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBhZGRpbmcgdGhlIGRlcGVuZGVuY3kgZm9yIGxvY2FsIHJ1bm5pbmcgc2NlbmFyaW9zLgogICAgdHJ5OgogICAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudAogICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICByYWlzZSBJbXBvcnRFcnJvcigKICAgICAgICAgICdHb29nbGUgQ2xvdWQgRGF0YWZsb3cgcnVubmVyIG5vdCBhdmFpbGFibGUsICcKICAgICAgICAgICdwbGVhc2UgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdJykKCiAgICAjIENvbnZlcnQgYWxsIHNpZGUgaW5wdXRzIGludG8gYSBmb3JtIGFjY2VwdGFibGUgdG8gRGF0YWZsb3cuCiAgICBpZiBhcGljbGllbnQuX3VzZV9mbmFwaShvcHRpb25zKToKICAgICAgcGlwZWxpbmUudmlzaXQoCiAgICAgICAgICBzZWxmLnNpZGVfaW5wdXRfdmlzaXRvcihhcGljbGllbnQuX3VzZV91bmlmaWVkX3dvcmtlcihvcHRpb25zKSkpCgogICAgIyBQZXJmb3JtaW5nIGNvbmZpZ3VyZWQgUFRyYW5zZm9ybSBvdmVycmlkZXMuICBOb3RlIHRoYXQgdGhpcyBpcyBjdXJyZW50bHkKICAgICMgZG9uZSBiZWZvcmUgUnVubmVyIEFQSSBzZXJpYWxpemF0aW9uLCBzaW5jZSB0aGUgbmV3IHByb3RvIG5lZWRzIHRvIGNvbnRhaW4KICAgICMgYW55IGFkZGVkIFBUcmFuc2Zvcm1zLgogICAgcGlwZWxpbmUucmVwbGFjZV9hbGwoRGF0YWZsb3dSdW5uZXIuX1BUUkFOU0ZPUk1fT1ZFUlJJREVTKQoKICAgIGlmIChhcGljbGllbnQuX3VzZV9mbmFwaShvcHRpb25zKSBhbmQKICAgICAgICBub3QgYXBpY2xpZW50Ll91c2VfdW5pZmllZF93b3JrZXIob3B0aW9ucykpOgogICAgICBwaXBlbGluZS5yZXBsYWNlX2FsbChEYXRhZmxvd1J1bm5lci5fSlJIX1BUUkFOU0ZPUk1fT1ZFUlJJREVTKQoKICAgIHVzZV9mbmFwaSA9IGFwaWNsaWVudC5fdXNlX2ZuYXBpKG9wdGlvbnMpCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGVudmlyb25tZW50cwogICAgZGVmYXVsdF9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50cy5Eb2NrZXJFbnZpcm9ubWVudCgKICAgICAgICBjb250YWluZXJfaW1hZ2U9YXBpY2xpZW50LmdldF9jb250YWluZXJfaW1hZ2VfZnJvbV9vcHRpb25zKG9wdGlvbnMpKQoKICAgICMgU25hcHNob3QgdGhlIHBpcGVsaW5lIGluIGEgcG9ydGFibGUgcHJvdG8uCiAgICBzZWxmLnByb3RvX3BpcGVsaW5lLCBzZWxmLnByb3RvX2NvbnRleHQgPSBwaXBlbGluZS50b19ydW5uZXJfYXBpKAogICAgICAgIHJldHVybl9jb250ZXh0PVRydWUsIGRlZmF1bHRfZW52aXJvbm1lbnQ9ZGVmYXVsdF9lbnZpcm9ubWVudCkKCiAgICBpZiB1c2VfZm5hcGk6CiAgICAgIHNlbGYuX2NoZWNrX2Zvcl91bnN1cHBvcnRlZF9mbmFwaV9mZWF0dXJlcyhzZWxmLnByb3RvX3BpcGVsaW5lKQoKICAgICAgIyBDcm9zcyBsYW5ndWFnZSB0cmFuc2Zvcm0gcmVxdWlyZSB1c2luZyBhIHBpcGVsaW5lIG9iamVjdCBjb25zdHJ1Y3RlZAogICAgICAjIGZyb20gdGhlIGZ1bGwgcGlwZWxpbmUgcHJvdG8gdG8gbWFrZSBzdXJlIHRoYXQgZXhwYW5kZWQgdmVyc2lvbiBvZgogICAgICAjIGV4dGVybmFsIHRyYW5zZm9ybXMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgUGlwZWxpbmUgam9iIGdyYXBoLgogICAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBQaXBlbGluZQogICAgICBwaXBlbGluZSA9IFBpcGVsaW5lLmZyb21fcnVubmVyX2FwaSgKICAgICAgICAgIHNlbGYucHJvdG9fcGlwZWxpbmUsCiAgICAgICAgICBwaXBlbGluZS5ydW5uZXIsCiAgICAgICAgICBvcHRpb25zLAogICAgICAgICAgYWxsb3dfcHJvdG9faG9sZGVycz1UcnVlKQoKICAgICAgIyBQaXBlbGluZXMgZ2VuZXJhdGVkIGZyb20gcHJvdG8gZG8gbm90IGhhdmUgb3V0cHV0IHNldCB0byBQRG9uZSBzZXQgZm9yCiAgICAgICMgbGVhZiBlbGVtZW50cy4KICAgICAgcGlwZWxpbmUudmlzaXQoc2VsZi5fc2V0X3Bkb25lX3Zpc2l0b3IocGlwZWxpbmUpKQoKICAgICAgIyBXZSBuZWVkIHRvIGdlbmVyYXRlIGEgbmV3IGNvbnRleHQgdGhhdCBtYXBzIHRvIHRoZSBuZXcgcGlwZWxpbmUgb2JqZWN0LgogICAgICBzZWxmLnByb3RvX3BpcGVsaW5lLCBzZWxmLnByb3RvX2NvbnRleHQgPSBwaXBlbGluZS50b19ydW5uZXJfYXBpKAogICAgICAgICAgcmV0dXJuX2NvbnRleHQ9VHJ1ZSwgZGVmYXVsdF9lbnZpcm9ubWVudD1kZWZhdWx0X2Vudmlyb25tZW50KQoKICAgIGVsc2U6CiAgICAgICMgUGVyZm9ybWluZyBjb25maWd1cmVkIFBUcmFuc2Zvcm0gb3ZlcnJpZGVzIHdoaWNoIHNob3VsZCBub3QgYmUgcmVmbGVjdGVkCiAgICAgICMgaW4gdGhlIHByb3RvIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBncmFwaC4KICAgICAgcGlwZWxpbmUucmVwbGFjZV9hbGwoRGF0YWZsb3dSdW5uZXIuX05PTl9QT1JUQUJMRV9QVFJBTlNGT1JNX09WRVJSSURFUykKCiAgICAjIEFkZCBzZXR1cF9vcHRpb25zIGZvciBhbGwgdGhlIEJlYW1QbHVnaW4gaW1wb3J0cwogICAgc2V0dXBfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhTZXR1cE9wdGlvbnMpCiAgICBwbHVnaW5zID0gQmVhbVBsdWdpbi5nZXRfYWxsX3BsdWdpbl9wYXRocygpCiAgICBpZiBzZXR1cF9vcHRpb25zLmJlYW1fcGx1Z2lucyBpcyBub3QgTm9uZToKICAgICAgcGx1Z2lucyA9IGxpc3Qoc2V0KHBsdWdpbnMgKyBzZXR1cF9vcHRpb25zLmJlYW1fcGx1Z2lucykpCiAgICBzZXR1cF9vcHRpb25zLmJlYW1fcGx1Z2lucyA9IHBsdWdpbnMKCiAgICAjIEVsZXZhdGUgIm1pbl9jcHVfcGxhdGZvcm0iIHRvIHBpcGVsaW5lIG9wdGlvbiwgYnV0IHVzaW5nIHRoZSBleGlzdGluZwogICAgIyBleHBlcmltZW50LgogICAgZGVidWdfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhEZWJ1Z09wdGlvbnMpCiAgICB3b3JrZXJfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhXb3JrZXJPcHRpb25zKQogICAgaWYgd29ya2VyX29wdGlvbnMubWluX2NwdV9wbGF0Zm9ybToKICAgICAgZGVidWdfb3B0aW9ucy5hZGRfZXhwZXJpbWVudCgKICAgICAgICAgICdtaW5fY3B1X3BsYXRmb3JtPScgKyB3b3JrZXJfb3B0aW9ucy5taW5fY3B1X3BsYXRmb3JtKQoKICAgICMgRWxldmF0ZSAiZW5hYmxlX3N0cmVhbWluZ19lbmdpbmUiIHRvIHBpcGVsaW5lIG9wdGlvbiwgYnV0IHVzaW5nIHRoZQogICAgIyBleGlzdGluZyBleHBlcmltZW50LgogICAgZ29vZ2xlX2Nsb3VkX29wdGlvbnMgPSBvcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKQogICAgaWYgZ29vZ2xlX2Nsb3VkX29wdGlvbnMuZW5hYmxlX3N0cmVhbWluZ19lbmdpbmU6CiAgICAgIGRlYnVnX29wdGlvbnMuYWRkX2V4cGVyaW1lbnQoImVuYWJsZV93aW5kbWlsbF9zZXJ2aWNlIikKICAgICAgZGVidWdfb3B0aW9ucy5hZGRfZXhwZXJpbWVudCgiZW5hYmxlX3N0cmVhbWluZ19lbmdpbmUiKQogICAgZWxzZToKICAgICAgaWYgKGRlYnVnX29wdGlvbnMubG9va3VwX2V4cGVyaW1lbnQoImVuYWJsZV93aW5kbWlsbF9zZXJ2aWNlIikgb3IKICAgICAgICAgIGRlYnVnX29wdGlvbnMubG9va3VwX2V4cGVyaW1lbnQoImVuYWJsZV9zdHJlYW1pbmdfZW5naW5lIikpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICIiIlN0cmVhbWluZyBlbmdpbmUgYm90aCBkaXNhYmxlZCBhbmQgZW5hYmxlZDoKICAgICAgICBlbmFibGVfc3RyZWFtaW5nX2VuZ2luZSBmbGFnIGlzIG5vdCBzZXQsIGJ1dCBlbmFibGVfd2luZG1pbGxfc2VydmljZQogICAgICAgIGFuZC9vciBlbmFibGVfc3RyZWFtaW5nX2VuZ2luZSBleHBlcmltZW50cyBhcmUgcHJlc2VudC4KICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB5b3Ugb25seSBzZXQgdGhlIGVuYWJsZV9zdHJlYW1pbmdfZW5naW5lIGZsYWcuIiIiKQoKICAgIGRhdGFmbG93X3dvcmtlcl9qYXIgPSBnZXRhdHRyKHdvcmtlcl9vcHRpb25zLCAnZGF0YWZsb3dfd29ya2VyX2phcicsIE5vbmUpCiAgICBpZiBkYXRhZmxvd193b3JrZXJfamFyIGlzIG5vdCBOb25lOgogICAgICBpZiBub3QgYXBpY2xpZW50Ll91c2VfZm5hcGkob3B0aW9ucyk6CiAgICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgICAnVHlwaWNhbCBlbmQgdXNlcnMgc2hvdWxkIG5vdCB1c2UgdGhpcyB3b3JrZXIgamFyIGZlYXR1cmUuICcKICAgICAgICAgICAgJ0l0IGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBGbkFQSSBpcyBlbmFibGVkLicpCiAgICAgIGVsc2U6CiAgICAgICAgZGVidWdfb3B0aW9ucy5hZGRfZXhwZXJpbWVudCgndXNlX3N0YWdlZF9kYXRhZmxvd193b3JrZXJfamFyJykKCiAgICAjIE1ha2UgRGF0YWZsb3cgd29ya2VycyB1c2UgRmFzdEF2cm8gb24gUHl0aG9uIDMgdW5sZXNzIHVzZV9hdnJvIGV4cGVyaW1lbnQKICAgICMgaXMgc2V0LiBOb3RlIHRoYXQgdXNlX2F2cm8gaXMgb25seSBpbnRlcnByZXRlZCBieSB0aGUgRGF0YWZsb3cgcnVubmVyCiAgICAjIGF0IGpvYiBzdWJtaXNzaW9uIGFuZCBpcyBub3QgaW50ZXJwcmV0ZWQgYnkgRGF0YWZsb3cgc2VydmljZSBvciB3b3JrZXJzLAogICAgIyB3aGljaCBieSBkZWZhdWx0IHVzZSBhdnJvIGxpYnJhcnkgdW5sZXNzIHVzZV9mYXN0YXZybyBleHBlcmltZW50IGlzIHNldC4KICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPiAyIGFuZCAoCiAgICAgICAgbm90IGRlYnVnX29wdGlvbnMubG9va3VwX2V4cGVyaW1lbnQoJ3VzZV9hdnJvJykpOgogICAgICBkZWJ1Z19vcHRpb25zLmFkZF9leHBlcmltZW50KCd1c2VfZmFzdGF2cm8nKQoKICAgIHNlbGYuam9iID0gYXBpY2xpZW50LkpvYihvcHRpb25zLCBzZWxmLnByb3RvX3BpcGVsaW5lKQoKICAgICMgRGF0YWZsb3cgcnVubmVyIHJlcXVpcmVzIGEgS1YgdHlwZSBmb3IgR0JLIGlucHV0cywgaGVuY2Ugd2UgZW5mb3JjZSB0aGF0CiAgICAjIGhlcmUuCiAgICBwaXBlbGluZS52aXNpdChzZWxmLmdyb3VwX2J5X2tleV9pbnB1dF92aXNpdG9yKCkpCgogICAgIyBEYXRhZmxvdyBydW5uZXIgcmVxdWlyZXMgb3V0cHV0IHR5cGUgb2YgdGhlIEZsYXR0ZW4gdG8gYmUgdGhlIHNhbWUgYXMgdGhlCiAgICAjIGlucHV0cywgaGVuY2Ugd2UgZW5mb3JjZSB0aGF0IGhlcmUuCiAgICBwaXBlbGluZS52aXNpdChzZWxmLmZsYXR0ZW5faW5wdXRfdmlzaXRvcigpKQoKICAgICMgVHJpZ2dlciBhIHRyYXZlcnNhbCBvZiBhbGwgcmVhY2hhYmxlIG5vZGVzLgogICAgc2VsZi52aXNpdF90cmFuc2Zvcm1zKHBpcGVsaW5lLCBvcHRpb25zKQoKICAgIHRlc3Rfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhUZXN0T3B0aW9ucykKICAgICMgSWYgaXQgaXMgYSBkcnkgcnVuLCByZXR1cm4gd2l0aG91dCBzdWJtaXR0aW5nIHRoZSBqb2IuCiAgICBpZiB0ZXN0X29wdGlvbnMuZHJ5X3J1bjoKICAgICAgcmVzdWx0ID0gUGlwZWxpbmVSZXN1bHQoUGlwZWxpbmVTdGF0ZS5ET05FKQogICAgICByZXN1bHQud2FpdF91bnRpbF9maW5pc2ggPSBsYW1iZGEgZHVyYXRpb249Tm9uZTogTm9uZQogICAgICByZXR1cm4gcmVzdWx0CgogICAgIyBHZXQgYSBEYXRhZmxvdyBBUEkgY2xpZW50IGFuZCBzZXQgaXRzIG9wdGlvbnMKICAgIHNlbGYuZGF0YWZsb3dfY2xpZW50ID0gYXBpY2xpZW50LkRhdGFmbG93QXBwbGljYXRpb25DbGllbnQob3B0aW9ucykKCiAgICAjIENyZWF0ZSB0aGUgam9iIGRlc2NyaXB0aW9uIGFuZCBzZW5kIGEgcmVxdWVzdCB0byB0aGUgc2VydmljZS4gVGhlIHJlc3VsdAogICAgIyBjYW4gYmUgTm9uZSBpZiB0aGVyZSBpcyBubyBuZWVkIHRvIHNlbmQgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2aWNlIChlLmcuCiAgICAjIHRlbXBsYXRlIGNyZWF0aW9uKS4gSWYgYSByZXF1ZXN0IHdhcyBzZW50IGFuZCBmYWlsZWQgdGhlbiB0aGUgY2FsbCB3aWxsCiAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgIHJlc3VsdCA9IERhdGFmbG93UGlwZWxpbmVSZXN1bHQoCiAgICAgICAgc2VsZi5kYXRhZmxvd19jbGllbnQuY3JlYXRlX2pvYihzZWxmLmpvYiksIHNlbGYpCgogICAgIyBUT0RPKEJFQU0tNDI3NCk6IENpcmN1bGFyIGltcG9ydCBydW5uZXJzLW1ldHJpY3MuIFJlcXVpcmVzIHJlZmFjdG9yaW5nLgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmRhdGFmbG93X21ldHJpY3MgaW1wb3J0IERhdGFmbG93TWV0cmljcwogICAgc2VsZi5fbWV0cmljcyA9IERhdGFmbG93TWV0cmljcyhzZWxmLmRhdGFmbG93X2NsaWVudCwgcmVzdWx0LCBzZWxmLmpvYikKICAgIHJlc3VsdC5tZXRyaWNfcmVzdWx0cyA9IHNlbGYuX21ldHJpY3MKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIF9nZXRfdHlwZWhpbnRfYmFzZWRfZW5jb2Rpbmcoc2VsZiwgdHlwZWhpbnQsIHdpbmRvd19jb2Rlcik6CiAgICAiIiJSZXR1cm5zIGFuIGVuY29kaW5nIGJhc2VkIG9uIGEgdHlwZWhpbnQgb2JqZWN0LiIiIgogICAgcmV0dXJuIHNlbGYuX2dldF9jbG91ZF9lbmNvZGluZygKICAgICAgICBzZWxmLl9nZXRfY29kZXIodHlwZWhpbnQsIHdpbmRvd19jb2Rlcj13aW5kb3dfY29kZXIpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9nZXRfY29kZXIodHlwZWhpbnQsIHdpbmRvd19jb2Rlcik6CiAgICAiIiJSZXR1cm5zIGEgY29kZXIgYmFzZWQgb24gYSB0eXBlaGludCBvYmplY3QuIiIiCiAgICBpZiB3aW5kb3dfY29kZXI6CiAgICAgIHJldHVybiBjb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyKAogICAgICAgICAgY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2Rlcih0eXBlaGludCksIHdpbmRvd19jb2Rlcj13aW5kb3dfY29kZXIpCiAgICByZXR1cm4gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2Rlcih0eXBlaGludCkKCiAgZGVmIF9nZXRfY2xvdWRfZW5jb2Rpbmcoc2VsZiwgY29kZXIsIHVudXNlZD1Ob25lKToKICAgICIiIlJldHVybnMgYW4gZW5jb2RpbmcgYmFzZWQgb24gYSBjb2RlciBvYmplY3QuIiIiCiAgICBpZiBub3QgaXNpbnN0YW5jZShjb2RlciwgY29kZXJzLkNvZGVyKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ0NvZGVyIG9iamVjdCBtdXN0IGluaGVyaXQgZnJvbSBjb2RlcnMuQ29kZXI6ICVzLicgJSBzdHIoY29kZXIpKQogICAgcmV0dXJuIGNvZGVyLmFzX2Nsb3VkX29iamVjdChzZWxmLnByb3RvX2NvbnRleHQuY29kZXJzKQoKICBkZWYgX2dldF9zaWRlX2lucHV0X2VuY29kaW5nKHNlbGYsIGlucHV0X2VuY29kaW5nKToKICAgICIiIlJldHVybnMgYW4gZW5jb2RpbmcgZm9yIHRoZSBvdXRwdXQgb2YgYSB2aWV3IHRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICBpbnB1dF9lbmNvZGluZzogZW5jb2Rpbmcgb2YgY3VycmVudCB0cmFuc2Zvcm0ncyBpbnB1dC4gU2lkZSBpbnB1dHMgbmVlZAogICAgICAgIHRoaXMgYmVjYXVzZSB0aGUgc2VydmljZSB3aWxsIGNoZWNrIHRoYXQgaW5wdXQgYW5kIG91dHB1dCB0eXBlcyBtYXRjaC4KCiAgICBSZXR1cm5zOgogICAgICBBbiBlbmNvZGluZyB0aGF0IG1hdGNoZXMgdGhlIG91dHB1dCBhbmQgaW5wdXQgZW5jb2RpbmcuIFRoaXMgaXMgZXNzZW50aWFsCiAgICAgIGZvciB0aGUgVmlldyB0cmFuc2Zvcm1zIGludHJvZHVjZWQgdG8gcHJvZHVjZSBzaWRlIGlucHV0cyB0byBhIFBhckRvLgogICAgIiIiCiAgICByZXR1cm4gewogICAgICAgICdAdHlwZSc6ICdraW5kOnN0cmVhbScsCiAgICAgICAgJ2NvbXBvbmVudF9lbmNvZGluZ3MnOiBbaW5wdXRfZW5jb2RpbmddLAogICAgICAgICdpc19zdHJlYW1fbGlrZSc6IHsKICAgICAgICAgICAgJ3ZhbHVlJzogVHJ1ZQogICAgICAgIH0sCiAgICB9CgogIGRlZiBfZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHNlbGYsIHRyYW5zZm9ybV9ub2RlLCB3aW5kb3dfdmFsdWU9VHJ1ZSk6CiAgICAiIiJSZXR1cm5zIHRoZSBjbG91ZCBlbmNvZGluZyBvZiB0aGUgY29kZXIgZm9yIHRoZSBvdXRwdXQgb2YgYSB0cmFuc2Zvcm0uIiIiCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucG9ydGFiaWxpdHkuZm5fYXBpX3J1bm5lcl90cmFuc2Zvcm1zIGltcG9ydCBcCiAgICAgIG9ubHlfZWxlbWVudAogICAgaWYgbGVuKHRyYW5zZm9ybV9ub2RlLm91dHB1dHMpID09IDE6CiAgICAgIG91dHB1dF90YWcgPSBvbmx5X2VsZW1lbnQodHJhbnNmb3JtX25vZGUub3V0cHV0cy5rZXlzKCkpCiAgICAgICMgVE9ETyhyb2JlcnR3Yik6IEhhbmRsZSB0eXBlIGhpbnRzIGZvciBtdWx0aS1vdXRwdXQgdHJhbnNmb3Jtcy4KICAgICAgZWxlbWVudF90eXBlID0gdHJhbnNmb3JtX25vZGUub3V0cHV0c1tvdXRwdXRfdGFnXS5lbGVtZW50X3R5cGUKICAgIGVsc2U6CiAgICAgICMgVE9ETyhzaWx2aXVjKTogUmVtb3ZlIHRoaXMgYnJhbmNoIChhbmQgYXNzZXJ0KSB3aGVuIHR5cGVoaW50cyBhcmUKICAgICAgIyBwcm9wYWdhdGVkIGV2ZXJ5d2hlcmUuIFJldHVybmluZyBhbiAnQW55JyBhcyB0eXBlIGhpbnQgd2lsbCB0cmlnZ2VyCiAgICAgICMgdXNhZ2Ugb2YgdGhlIGZhbGxiYWNrIGNvZGVyIChpLmUuLCBjUGlja2xlcikuCiAgICAgIGVsZW1lbnRfdHlwZSA9IHR5cGVoaW50cy5BbnkKICAgIGlmIHdpbmRvd192YWx1ZToKICAgICAgIyBBbGwgb3V0cHV0cyBoYXZlIHRoZSBzYW1lIHdpbmRvd2luZy4gU28gZ2V0dGluZyB0aGUgY29kZXIgZnJvbSBhbgogICAgICAjIGFyYml0cmFyeSB3aW5kb3cgaXMgZmluZS4KICAgICAgb3V0cHV0X3RhZyA9IG5leHQoaXRlcih0cmFuc2Zvcm1fbm9kZS5vdXRwdXRzLmtleXMoKSkpCiAgICAgIHdpbmRvd19jb2RlciA9ICgKICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbb3V0cHV0X3RhZ10ud2luZG93aW5nLndpbmRvd2ZuLgogICAgICAgICAgZ2V0X3dpbmRvd19jb2RlcigpKQogICAgZWxzZToKICAgICAgd2luZG93X2NvZGVyID0gTm9uZQogICAgcmV0dXJuIHNlbGYuX2dldF90eXBlaGludF9iYXNlZF9lbmNvZGluZyhlbGVtZW50X3R5cGUsIHdpbmRvd19jb2RlcikKCiAgZGVmIF9hZGRfc3RlcChzZWxmLCBzdGVwX2tpbmQsIHN0ZXBfbGFiZWwsIHRyYW5zZm9ybV9ub2RlLCBzaWRlX3RhZ3M9KCkpOgogICAgIiIiQ3JlYXRlcyBhIFN0ZXAgb2JqZWN0IGFuZCBhZGRzIGl0IHRvIHRoZSBjYWNoZS4iIiIKICAgICMgSW1wb3J0IGhlcmUgdG8gYXZvaWQgYWRkaW5nIHRoZSBkZXBlbmRlbmN5IGZvciBsb2NhbCBydW5uaW5nIHNjZW5hcmlvcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudAogICAgc3RlcCA9IGFwaWNsaWVudC5TdGVwKHN0ZXBfa2luZCwgc2VsZi5fZ2V0X3VuaXF1ZV9zdGVwX25hbWUoKSkKICAgIHNlbGYuam9iLnByb3RvLnN0ZXBzLmFwcGVuZChzdGVwLnByb3RvKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5VU0VSX05BTUUsIHN0ZXBfbGFiZWwpCiAgICAjIENhY2hlIHRoZSBub2RlL3N0ZXAgYXNzb2NpYXRpb24gZm9yIHRoZSBtYWluIG91dHB1dCBvZiB0aGUgdHJhbnNmb3JtIG5vZGUuCgogICAgIyBNYWluIG91dHB1dCBrZXkgb2YgZXh0ZXJuYWwgdHJhbnNmb3JtcyBjYW4gYmUgYW1iaWd1b3VzLCBzbyB3ZSBvbmx5IHRhZyBpZgogICAgIyB0aGVyZSdzIG9ubHkgb25lIHRhZyBpbnN0ZWFkIG9mIE5vbmUuCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucG9ydGFiaWxpdHkuZm5fYXBpX3J1bm5lcl90cmFuc2Zvcm1zIGltcG9ydCBvbmx5X2VsZW1lbnQKICAgIG91dHB1dF90YWcgPSAoCiAgICAgICAgb25seV9lbGVtZW50KHRyYW5zZm9ybV9ub2RlLm91dHB1dHMua2V5cygpKSBpZiBsZW4oCiAgICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLm91dHB1dHMua2V5cygpKSA9PSAxIGVsc2UgTm9uZSkKCiAgICBzZWxmLl9jYWNoZS5jYWNoZV9vdXRwdXQodHJhbnNmb3JtX25vZGUsIG91dHB1dF90YWcsIHN0ZXApCiAgICAjIElmIHNpZGVfdGFncyBpcyBub3QgKCkgdGhlbiB0aGlzIGlzIGEgbXVsdGktb3V0cHV0IHRyYW5zZm9ybSBub2RlIGFuZCB3ZQogICAgIyBuZWVkIHRvIGNhY2hlIHRoZSAobm9kZSwgdGFnLCBzdGVwKSBmb3IgZWFjaCBvZiB0aGUgdGFncyB1c2VkIHRvIGFjY2VzcwogICAgIyB0aGUgb3V0cHV0cy4gVGhpcyBpcyBlc3NlbnRpYWwgYmVjYXVzZSB0aGUga2V5cyB1c2VkIHRvIHNlYXJjaCBpbiB0aGUKICAgICMgY2FjaGUgYWx3YXlzIGNvbnRhaW4gdGhlIHRhZy4KICAgIGZvciB0YWcgaW4gc2lkZV90YWdzOgogICAgICBzZWxmLl9jYWNoZS5jYWNoZV9vdXRwdXQodHJhbnNmb3JtX25vZGUsIHRhZywgc3RlcCkKCiAgICAjIEZpbmFsbHksIHdlIGFkZCB0aGUgZGlzcGxheSBkYXRhIGl0ZW1zIHRvIHRoZSBwaXBlbGluZSBzdGVwLgogICAgIyBJZiB0aGUgdHJhbnNmb3JtIGNvbnRhaW5zIG5vIGRpc3BsYXkgZGF0YSB0aGVuIGFuIGVtcHR5IGxpc3QgaXMgYWRkZWQuCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLkRJU1BMQVlfREFUQSwKICAgICAgICBbCiAgICAgICAgICAgIGl0ZW0uZ2V0X2RpY3QoKQogICAgICAgICAgICBmb3IgaXRlbSBpbiBEaXNwbGF5RGF0YS5jcmVhdGVfZnJvbSh0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0pLml0ZW1zCiAgICAgICAgXSkKCiAgICByZXR1cm4gc3RlcAoKICBkZWYgX2FkZF9zaW5nbGV0b25fc3RlcCgKICAgICAgc2VsZiwKICAgICAgbGFiZWwsCiAgICAgIGZ1bGxfbGFiZWwsCiAgICAgIHRhZywKICAgICAgaW5wdXRfc3RlcCwKICAgICAgd2luZG93aW5nX3N0cmF0ZWd5LAogICAgICBhY2Nlc3NfcGF0dGVybik6CiAgICAiIiJDcmVhdGVzIGEgQ29sbGVjdGlvblRvU2luZ2xldG9uIHN0ZXAgdXNlZCB0byBoYW5kbGUgUGFyRG8gc2lkZSBpbnB1dHMuIiIiCiAgICAjIEltcG9ydCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0aGUgZGVwZW5kZW5jeSBmb3IgbG9jYWwgcnVubmluZyBzY2VuYXJpb3MuCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudAogICAgc3RlcCA9IGFwaWNsaWVudC5TdGVwKFRyYW5zZm9ybU5hbWVzLkNPTExFQ1RJT05fVE9fU0lOR0xFVE9OLCBsYWJlbCkKICAgIHNlbGYuam9iLnByb3RvLnN0ZXBzLmFwcGVuZChzdGVwLnByb3RvKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5VU0VSX05BTUUsIGZ1bGxfbGFiZWwpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLlBBUkFMTEVMX0lOUFVULAogICAgICAgIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ091dHB1dFJlZmVyZW5jZScsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBpbnB1dF9zdGVwLnByb3RvLm5hbWUsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IGlucHV0X3N0ZXAuZ2V0X291dHB1dCh0YWcpCiAgICAgICAgfSkKICAgIHN0ZXAuZW5jb2RpbmcgPSBzZWxmLl9nZXRfc2lkZV9pbnB1dF9lbmNvZGluZyhpbnB1dF9zdGVwLmVuY29kaW5nKQoKICAgIG91dHB1dF9pbmZvID0gewogICAgICAgIFByb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAnJXMuJXMnICUgKGZ1bGxfbGFiZWwsIFByb3BlcnR5TmFtZXMuT1VUUFVUKSwKICAgICAgICBQcm9wZXJ0eU5hbWVzLkVOQ09ESU5HOiBzdGVwLmVuY29kaW5nLAogICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUCiAgICB9CiAgICBpZiBjb21tb25fdXJucy5zaWRlX2lucHV0cy5NVUxUSU1BUC51cm4gPT0gYWNjZXNzX3BhdHRlcm46CiAgICAgIG91dHB1dF9pbmZvW1Byb3BlcnR5TmFtZXMuVVNFX0lOREVYRURfRk9STUFUXSA9IFRydWUKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuT1VUUFVUX0lORk8sIFtvdXRwdXRfaW5mb10pCgogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5XSU5ET1dJTkdfU1RSQVRFR1ksCiAgICAgICAgc2VsZi5zZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5KHdpbmRvd2luZ19zdHJhdGVneSkpCiAgICByZXR1cm4gc3RlcAoKICBkZWYgcnVuX0ltcHVsc2Uoc2VsZiwgdHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpOgogICAgc3RhbmRhcmRfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpCiAgICBkZWJ1Z19vcHRpb25zID0gb3B0aW9ucy52aWV3X2FzKERlYnVnT3B0aW9ucykKICAgIHVzZV9mbl9hcGkgPSAoCiAgICAgICAgZGVidWdfb3B0aW9ucy5leHBlcmltZW50cyBhbmQKICAgICAgICAnYmVhbV9mbl9hcGknIGluIGRlYnVnX29wdGlvbnMuZXhwZXJpbWVudHMpCiAgICB1c2Vfc3RyZWFtaW5nX2VuZ2luZSA9ICgKICAgICAgICBkZWJ1Z19vcHRpb25zLmV4cGVyaW1lbnRzIGFuZAogICAgICAgICdlbmFibGVfc3RyZWFtaW5nX2VuZ2luZScgaW4gZGVidWdfb3B0aW9ucy5leHBlcmltZW50cyBhbmQKICAgICAgICAnZW5hYmxlX3dpbmRtaWxsX3NlcnZpY2UnIGluIGRlYnVnX29wdGlvbnMuZXhwZXJpbWVudHMpCgogICAgc3RlcCA9IHNlbGYuX2FkZF9zdGVwKAogICAgICAgIFRyYW5zZm9ybU5hbWVzLlJFQUQsIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIHRyYW5zZm9ybV9ub2RlKQogICAgaWYgKHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nIGFuZAogICAgICAgIChub3QgdXNlX2ZuX2FwaSBvciBub3QgdXNlX3N0cmVhbWluZ19lbmdpbmUpKToKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5GT1JNQVQsICdwdWJzdWInKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBVQlNVQl9TVUJTQ1JJUFRJT04sICdfc3RhcnRpbmdfc2lnbmFsLycpCiAgICBlbHNlOgogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLkZPUk1BVCwgJ2ltcHVsc2UnKQogICAgICBlbmNvZGVkX2ltcHVsc2VfZWxlbWVudCA9IGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIoCiAgICAgICAgICBjb2RlcnMuQnl0ZXNDb2RlcigpLAogICAgICAgICAgY29kZXJzLmNvZGVycy5HbG9iYWxXaW5kb3dDb2RlcigpKS5nZXRfaW1wbCgpLmVuY29kZV9uZXN0ZWQoCiAgICAgICAgICAgICAgd2luZG93Lkdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoYicnKSkKCiAgICAgIGlmIHVzZV9mbl9hcGk6CiAgICAgICAgZW5jb2RlZF9pbXB1bHNlX2FzX3N0ciA9IHNlbGYuYnl0ZV9hcnJheV90b19qc29uX3N0cmluZygKICAgICAgICAgICAgZW5jb2RlZF9pbXB1bHNlX2VsZW1lbnQpCiAgICAgIGVsc2U6CiAgICAgICAgZW5jb2RlZF9pbXB1bHNlX2FzX3N0ciA9IGJhc2U2NC5iNjRlbmNvZGUoCiAgICAgICAgICAgIGVuY29kZWRfaW1wdWxzZV9lbGVtZW50KS5kZWNvZGUoJ2FzY2lpJykKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5JTVBVTFNFX0VMRU1FTlQsIGVuY29kZWRfaW1wdWxzZV9hc19zdHIpCgogICAgc3RlcC5lbmNvZGluZyA9IHNlbGYuX2dldF9lbmNvZGVkX291dHB1dF9jb2Rlcih0cmFuc2Zvcm1fbm9kZSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX0lORk8sCiAgICAgICAgW3sKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgICAgICclcy4lcycgJSAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgUHJvcGVydHlOYW1lcy5PVVQpKSwKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogUHJvcGVydHlOYW1lcy5PVVQKICAgICAgICB9XSkKCiAgZGVmIHJ1bl9GbGF0dGVuKHNlbGYsIHRyYW5zZm9ybV9ub2RlLCBvcHRpb25zKToKICAgIHN0ZXAgPSBzZWxmLl9hZGRfc3RlcCgKICAgICAgICBUcmFuc2Zvcm1OYW1lcy5GTEFUVEVOLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCB0cmFuc2Zvcm1fbm9kZSkKICAgIGlucHV0cyA9IFtdCiAgICBmb3Igb25lX2lucHV0IGluIHRyYW5zZm9ybV9ub2RlLmlucHV0czoKICAgICAgaW5wdXRfc3RlcCA9IHNlbGYuX2NhY2hlLmdldF9wdmFsdWUob25lX2lucHV0KQogICAgICBpbnB1dHMuYXBwZW5kKHsKICAgICAgICAgICdAdHlwZSc6ICdPdXRwdXRSZWZlcmVuY2UnLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5TVEVQX05BTUU6IGlucHV0X3N0ZXAucHJvdG8ubmFtZSwKICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IGlucHV0X3N0ZXAuZ2V0X291dHB1dChvbmVfaW5wdXQudGFnKQogICAgICB9KQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5JTlBVVFMsIGlucHV0cykKICAgIHN0ZXAuZW5jb2RpbmcgPSBzZWxmLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXIodHJhbnNmb3JtX25vZGUpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLAogICAgICAgIFt7CiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICAgICAnJXMuJXMnICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIFByb3BlcnR5TmFtZXMuT1VUKSksCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUCiAgICAgICAgfV0pCgogIGRlZiBhcHBseV9Xcml0ZVRvQmlnUXVlcnkoc2VsZiwgdHJhbnNmb3JtLCBwY29sbCwgb3B0aW9ucyk6CiAgICAjIE1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBXcml0ZVRvQmlnUXVlcnkgY2xhc3MgdGhhdCB3ZSBleHBlY3RlZCwgYW5kIHRoYXQKICAgICMgdXNlcnMgZGlkIG5vdCBzcGVjaWZpY2FsbHkgcmVxdWVzdCB0aGUgbmV3IEJRIHNpbmsgYnkgcGFzc2luZyBleHBlcmltZW50CiAgICAjIGZsYWcuCgogICAgIyBUT0RPKEJFQU0tNjkyOCk6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uIGZvciByZWxlYXNlIDIuMTQuMC4KICAgIGV4cGVyaW1lbnRzID0gb3B0aW9ucy52aWV3X2FzKERlYnVnT3B0aW9ucykuZXhwZXJpbWVudHMgb3IgW10KICAgIGlmIChub3QgaXNpbnN0YW5jZSh0cmFuc2Zvcm0sIGJlYW0uaW8uV3JpdGVUb0JpZ1F1ZXJ5KSBvcgogICAgICAgICd1c2VfYmVhbV9icV9zaW5rJyBpbiBleHBlcmltZW50cyk6CiAgICAgIHJldHVybiBzZWxmLmFwcGx5X1BUcmFuc2Zvcm0odHJhbnNmb3JtLCBwY29sbCwgb3B0aW9ucykKICAgIGlmIHRyYW5zZm9ybS5zY2hlbWEgPT0gYmVhbS5pby5nY3AuYmlncXVlcnkuU0NIRU1BX0FVVE9ERVRFQ1Q6CiAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICdTY2hlbWEgYXV0by1kZXRlY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgbmF0aXZlIHNpbmsnKQogICAgc3RhbmRhcmRfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpCiAgICBpZiBzdGFuZGFyZF9vcHRpb25zLnN0cmVhbWluZzoKICAgICAgaWYgKHRyYW5zZm9ybS53cml0ZV9kaXNwb3NpdGlvbiA9PQogICAgICAgICAgYmVhbS5pby5CaWdRdWVyeURpc3Bvc2l0aW9uLldSSVRFX1RSVU5DQVRFKToKICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0NhbiBub3QgdXNlIHdyaXRlIHRydW5jYXRpb24gbW9kZSBpbiBzdHJlYW1pbmcnKQogICAgICByZXR1cm4gc2VsZi5hcHBseV9QVHJhbnNmb3JtKHRyYW5zZm9ybSwgcGNvbGwsIG9wdGlvbnMpCiAgICBlbHNlOgogICAgICBmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5iaWdxdWVyeV90b29scyBpbXBvcnQgcGFyc2VfdGFibGVfc2NoZW1hX2Zyb21fanNvbgogICAgICBzY2hlbWEgPSBOb25lCiAgICAgIGlmIHRyYW5zZm9ybS5zY2hlbWE6CiAgICAgICAgc2NoZW1hID0gcGFyc2VfdGFibGVfc2NoZW1hX2Zyb21fanNvbihqc29uLmR1bXBzKHRyYW5zZm9ybS5zY2hlbWEpKQogICAgICByZXR1cm4gcGNvbGwgfCAnV3JpdGVUb0JpZ1F1ZXJ5JyA+PiBiZWFtLmlvLldyaXRlKAogICAgICAgICAgYmVhbS5pby5CaWdRdWVyeVNpbmsoCiAgICAgICAgICAgICAgdHJhbnNmb3JtLnRhYmxlX3JlZmVyZW5jZS50YWJsZUlkLAogICAgICAgICAgICAgIHRyYW5zZm9ybS50YWJsZV9yZWZlcmVuY2UuZGF0YXNldElkLAogICAgICAgICAgICAgIHRyYW5zZm9ybS50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkLAogICAgICAgICAgICAgIHNjaGVtYSwKICAgICAgICAgICAgICB0cmFuc2Zvcm0uY3JlYXRlX2Rpc3Bvc2l0aW9uLAogICAgICAgICAgICAgIHRyYW5zZm9ybS53cml0ZV9kaXNwb3NpdGlvbiwKICAgICAgICAgICAgICBrbXNfa2V5PXRyYW5zZm9ybS5rbXNfa2V5KSkKCiAgZGVmIGFwcGx5X0dyb3VwQnlLZXkoc2VsZiwgdHJhbnNmb3JtLCBwY29sbCwgb3B0aW9ucyk6CiAgICAjIEluZmVyIGNvZGVyIG9mIHBhcmVudC4KICAgICMKICAgICMgVE9ETyhjY3kpOiBtYWtlIENvZGVyIGluZmVyZW5jZSBhbmQgY2hlY2tpbmcgbGVzcyBzcGVjaWFsaXplZCBhbmQgbW9yZQogICAgIyBjb21wcmVoZW5zaXZlLgogICAgcGFyZW50ID0gcGNvbGwucHJvZHVjZXIKICAgIGlmIHBhcmVudDoKICAgICAgY29kZXIgPSBwYXJlbnQudHJhbnNmb3JtLl9pbmZlcl9vdXRwdXRfY29kZXIoKSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgaWYgbm90IGNvZGVyOgogICAgICBjb2RlciA9IHNlbGYuX2dldF9jb2RlcihwY29sbC5lbGVtZW50X3R5cGUgb3IgdHlwZWhpbnRzLkFueSwgTm9uZSkKICAgIGlmIG5vdCBjb2Rlci5pc19rdl9jb2RlcigpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCgKICAgICAgICAgICdDb2RlciBmb3IgdGhlIEdyb3VwQnlLZXkgb3BlcmF0aW9uICIlcyIgaXMgbm90IGEgJwogICAgICAgICAgJ2tleS12YWx1ZSBjb2RlcjogJXMuJykgJSAodHJhbnNmb3JtLmxhYmVsLCBjb2RlcikpCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBVcGRhdGUgdGhlIGNvZGVyIGl0c2VsZiBpZiBpdCBjaGFuZ2VkLgogICAgY29kZXJzLnJlZ2lzdHJ5LnZlcmlmeV9kZXRlcm1pbmlzdGljKAogICAgICAgIGNvZGVyLmtleV9jb2RlcigpLCAnR3JvdXBCeUtleSBvcGVyYXRpb24gIiVzIicgJSB0cmFuc2Zvcm0ubGFiZWwpCgogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbi5mcm9tXyhwY29sbCkKCiAgZGVmIHJ1bl9Hcm91cEJ5S2V5KHNlbGYsIHRyYW5zZm9ybV9ub2RlLCBvcHRpb25zKToKICAgIGlucHV0X3RhZyA9IHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXS50YWcKICAgIGlucHV0X3N0ZXAgPSBzZWxmLl9jYWNoZS5nZXRfcHZhbHVlKHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXSkKICAgIHN0ZXAgPSBzZWxmLl9hZGRfc3RlcCgKICAgICAgICBUcmFuc2Zvcm1OYW1lcy5HUk9VUCwgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgdHJhbnNmb3JtX25vZGUpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLlBBUkFMTEVMX0lOUFVULAogICAgICAgIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ091dHB1dFJlZmVyZW5jZScsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBpbnB1dF9zdGVwLnByb3RvLm5hbWUsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IGlucHV0X3N0ZXAuZ2V0X291dHB1dChpbnB1dF90YWcpCiAgICAgICAgfSkKICAgIHN0ZXAuZW5jb2RpbmcgPSBzZWxmLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXIodHJhbnNmb3JtX25vZGUpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLAogICAgICAgIFt7CiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICAgICAnJXMuJXMnICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIFByb3BlcnR5TmFtZXMuT1VUKSksCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUCiAgICAgICAgfV0pCiAgICB3aW5kb3dpbmcgPSB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0uZ2V0X3dpbmRvd2luZyh0cmFuc2Zvcm1fbm9kZS5pbnB1dHMpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLlNFUklBTElaRURfRk4sCiAgICAgICAgc2VsZi5zZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5KHdpbmRvd2luZykpCgogIGRlZiBydW5fUnVubmVyQVBJUFRyYW5zZm9ybUhvbGRlcihzZWxmLCB0cmFuc2Zvcm1fbm9kZSwgb3B0aW9ucyk6CiAgICAiIiJBZGRpbmcgRGF0YWZsb3cgcnVubmVyIGpvYiBkZXNjcmlwdGlvbiBmb3IgdHJhbnNmb3JtIGhvbGRlciBvYmplY3RzLgoKICAgIFRoZXNlIGhvbGRlciB0cmFuc2Zvcm0gb2JqZWN0cyBhcmUgZ2VuZXJhdGVkIGZvciBzb21lIG9mIHRoZSB0cmFuc2Zvcm1zIHRoYXQKICAgIGJlY29tZSBhdmFpbGFibGUgYWZ0ZXIgYSBjcm9zcy1sYW5ndWFnZSB0cmFuc2Zvcm0gZXhwYW5zaW9uLCB1c3VhbGx5IGlmIHRoZQogICAgY29ycmVzcG9uZGluZyB0cmFuc2Zvcm0gb2JqZWN0IGNhbm5vdCBiZSBnZW5lcmF0ZWQgaW4gUHl0aG9uIFNESyAoZm9yCiAgICBleGFtcGxlLCBhIHB5dGhvbiBgUGFyRG9gIHRyYW5zZm9ybSBjYW5ub3QgYmUgZ2VuZXJhdGVkIHdpdGhvdXQgYSBzZXJpYWxpemVkCiAgICBQeXRob24gYERvRm5gIG9iamVjdCkuCiAgICAiIiIKICAgIHVybiA9IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybS5wcm90bygpLnVybgogICAgYXNzZXJ0IHVybgogICAgIyBUT0RPKGNoYW1pa2FyYSk6IHN1cHBvcnQgb3RoZXIgdHJhbnNmb3JtcyB0aGF0IHJlcXVpcmVzIGhvbGRlciBvYmplY3RzIGluCiAgICAjICBQeXRob24gU0RrLgogICAgaWYgY29tbW9uX3VybnMucHJpbWl0aXZlcy5QQVJfRE8udXJuID09IHVybjoKICAgICAgc2VsZi5ydW5fUGFyRG8odHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpCiAgICBlbHNlOgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICAgJyVzIHVzZXMgdW5zdXBwb3J0ZWQgVVJOOiAlcycgJSAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgdXJuKSkKCiAgZGVmIHJ1bl9QYXJEbyhzZWxmLCB0cmFuc2Zvcm1fbm9kZSwgb3B0aW9ucyk6CiAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0KICAgIGlucHV0X3RhZyA9IHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXS50YWcKICAgIGlucHV0X3N0ZXAgPSBzZWxmLl9jYWNoZS5nZXRfcHZhbHVlKHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXSkKCiAgICAjIEF0dGFjaCBzaWRlIGlucHV0cy4KICAgIHNpX2RpY3QgPSB7fQogICAgc2lfbGFiZWxzID0ge30KICAgIGZ1bGxfbGFiZWxfY291bnRzID0gZGVmYXVsdGRpY3QoaW50KQogICAgbG9va3VwX2xhYmVsID0gbGFtYmRhIHNpZGVfcHZhbDogc2lfbGFiZWxzW3NpZGVfcHZhbF0KICAgIG5hbWVkX2lucHV0cyA9IHRyYW5zZm9ybV9ub2RlLm5hbWVkX2lucHV0cygpCiAgICBsYWJlbF9yZW5hbWVzID0ge30KICAgIGZvciBpeCwgc2lkZV9wdmFsIGluIGVudW1lcmF0ZSh0cmFuc2Zvcm1fbm9kZS5zaWRlX2lucHV0cyk6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNpZGVfcHZhbCwgQXNTaWRlSW5wdXQpCiAgICAgIHN0ZXBfbmFtZSA9ICdTaWRlSW5wdXQtJyArIHNlbGYuX2dldF91bmlxdWVfc3RlcF9uYW1lKCkKICAgICAgc2lfbGFiZWwgPSAnc2lkZSVkLSVzJyAlIChpeCwgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCkKICAgICAgb2xkX2xhYmVsID0gJ3NpZGUlZCcgJSBpeAogICAgICBsYWJlbF9yZW5hbWVzW29sZF9sYWJlbF0gPSBzaV9sYWJlbAogICAgICBhc3NlcnQgb2xkX2xhYmVsIGluIG5hbWVkX2lucHV0cwogICAgICBwY29sbGVjdGlvbl9sYWJlbCA9ICclcy4lcycgJSAoCiAgICAgICAgICBzaWRlX3B2YWwucHZhbHVlLnByb2R1Y2VyLmZ1bGxfbGFiZWwuc3BsaXQoJy8nKVstMV0sCiAgICAgICAgICBzaWRlX3B2YWwucHZhbHVlLnRhZyBpZiBzaWRlX3B2YWwucHZhbHVlLnRhZyBlbHNlICdvdXQnKQogICAgICBzaV9mdWxsX2xhYmVsID0gJyVzLyVzKCVzLiVzKScgJSAoCiAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLAogICAgICAgICAgc2lkZV9wdmFsLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAgIHBjb2xsZWN0aW9uX2xhYmVsLAogICAgICAgICAgZnVsbF9sYWJlbF9jb3VudHNbcGNvbGxlY3Rpb25fbGFiZWxdKQoKICAgICAgIyBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBzYW1lIFBDb2xsZWN0aW9uIGlzIGEgc2lkZSBpbnB1dAogICAgICAjIHRvIHRoZSBzYW1lIFBhckRvLgogICAgICBmdWxsX2xhYmVsX2NvdW50c1twY29sbGVjdGlvbl9sYWJlbF0gKz0gMQoKICAgICAgc2VsZi5fYWRkX3NpbmdsZXRvbl9zdGVwKAogICAgICAgICAgc3RlcF9uYW1lLAogICAgICAgICAgc2lfZnVsbF9sYWJlbCwKICAgICAgICAgIHNpZGVfcHZhbC5wdmFsdWUudGFnLAogICAgICAgICAgc2VsZi5fY2FjaGUuZ2V0X3B2YWx1ZShzaWRlX3B2YWwucHZhbHVlKSwKICAgICAgICAgIHNpZGVfcHZhbC5wdmFsdWUud2luZG93aW5nLAogICAgICAgICAgc2lkZV9wdmFsLl9zaWRlX2lucHV0X2RhdGEoKS5hY2Nlc3NfcGF0dGVybikKICAgICAgc2lfZGljdFtzaV9sYWJlbF0gPSB7CiAgICAgICAgICAnQHR5cGUnOiAnT3V0cHV0UmVmZXJlbmNlJywKICAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBzdGVwX25hbWUsCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBQcm9wZXJ0eU5hbWVzLk9VVAogICAgICB9CiAgICAgIHNpX2xhYmVsc1tzaWRlX3B2YWxdID0gc2lfbGFiZWwKCiAgICAjIE5vdyBjcmVhdGUgdGhlIHN0ZXAgZm9yIHRoZSBQYXJEbyB0cmFuc2Zvcm0gYmVpbmcgaGFuZGxlZC4KICAgIHRyYW5zZm9ybV9uYW1lID0gdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbC5yc3BsaXQoJy8nLCAxKVstMV0KICAgIHN0ZXAgPSBzZWxmLl9hZGRfc3RlcCgKICAgICAgICBUcmFuc2Zvcm1OYW1lcy5ETywKICAgICAgICB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsICsKICAgICAgICAoJy97fScuZm9ybWF0KHRyYW5zZm9ybV9uYW1lKSBpZiB0cmFuc2Zvcm1fbm9kZS5zaWRlX2lucHV0cyBlbHNlICcnKSwKICAgICAgICB0cmFuc2Zvcm1fbm9kZSwKICAgICAgICB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0ub3V0cHV0X3RhZ3MpCiAgICAjIEltcG9ydCBoZXJlIHRvIGF2b2lkIGFkZGluZyB0aGUgZGVwZW5kZW5jeSBmb3IgbG9jYWwgcnVubmluZyBzY2VuYXJpb3MuCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsIGltcG9ydCBhcGljbGllbnQKICAgIHRyYW5zZm9ybV9wcm90byA9IHNlbGYucHJvdG9fY29udGV4dC50cmFuc2Zvcm1zLmdldF9wcm90byh0cmFuc2Zvcm1fbm9kZSkKICAgIHRyYW5zZm9ybV9pZCA9IHNlbGYucHJvdG9fY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZCh0cmFuc2Zvcm1fbm9kZSkKICAgIHVzZV9mbmFwaSA9IGFwaWNsaWVudC5fdXNlX2ZuYXBpKG9wdGlvbnMpCiAgICB1c2VfdW5pZmllZF93b3JrZXIgPSBhcGljbGllbnQuX3VzZV91bmlmaWVkX3dvcmtlcihvcHRpb25zKQogICAgIyBUaGUgZGF0YSB0cmFuc21pdHRlZCBpbiBTRVJJQUxJWkVEX0ZOIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlcgogICAgIyB0aGlzIGlzIGEgZm5hcGkgcGlwZWxpbmUgb3Igbm90LgogICAgaWYgKHVzZV9mbmFwaSBhbmQKICAgICAgICAodHJhbnNmb3JtX3Byb3RvLnNwZWMudXJuID09IGNvbW1vbl91cm5zLnByaW1pdGl2ZXMuUEFSX0RPLnVybiBvcgogICAgICAgICB1c2VfdW5pZmllZF93b3JrZXIpKToKICAgICAgIyBQYXRjaCBzaWRlIGlucHV0IGlkcyB0byBiZSB1bmlxdWUgYWNyb3NzIGEgZ2l2ZW4gcGlwZWxpbmUuCiAgICAgIGlmIChsYWJlbF9yZW5hbWVzIGFuZAogICAgICAgICAgdHJhbnNmb3JtX3Byb3RvLnNwZWMudXJuID09IGNvbW1vbl91cm5zLnByaW1pdGl2ZXMuUEFSX0RPLnVybik6CiAgICAgICAgIyBQYXRjaCBQVHJhbnNmb3JtIHByb3RvLgogICAgICAgIGZvciBvbGQsIG5ldyBpbiBpdGVyaXRlbXMobGFiZWxfcmVuYW1lcyk6CiAgICAgICAgICB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzW25ld10gPSB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzW29sZF0KICAgICAgICAgIGRlbCB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzW29sZF0KCiAgICAgICAgIyBQYXRjaCBQYXJEbyBwcm90by4KICAgICAgICBwcm90b190eXBlLCBfID0gYmVhbS5QVHJhbnNmb3JtLl9rbm93bl91cm5zW3RyYW5zZm9ybV9wcm90by5zcGVjLnVybl0KICAgICAgICBwcm90byA9IHByb3RvX3V0aWxzLnBhcnNlX0J5dGVzKAogICAgICAgICAgICB0cmFuc2Zvcm1fcHJvdG8uc3BlYy5wYXlsb2FkLCBwcm90b190eXBlKQogICAgICAgIGZvciBvbGQsIG5ldyBpbiBpdGVyaXRlbXMobGFiZWxfcmVuYW1lcyk6CiAgICAgICAgICBwcm90by5zaWRlX2lucHV0c1tuZXddLkNvcHlGcm9tKHByb3RvLnNpZGVfaW5wdXRzW29sZF0pCiAgICAgICAgICBkZWwgcHJvdG8uc2lkZV9pbnB1dHNbb2xkXQogICAgICAgIHRyYW5zZm9ybV9wcm90by5zcGVjLnBheWxvYWQgPSBwcm90by5TZXJpYWxpemVUb1N0cmluZygpCiAgICAgICAgIyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcGlwZWxpbmUgcHJvdG8uCiAgICAgICAgZGVsIHNlbGYucHJvdG9fcGlwZWxpbmUuY29tcG9uZW50cy50cmFuc2Zvcm1zW3RyYW5zZm9ybV9pZF0KICAgICAgICAoCiAgICAgICAgICAgIHNlbGYucHJvdG9fcGlwZWxpbmUuY29tcG9uZW50cy50cmFuc2Zvcm1zW3RyYW5zZm9ybV9pZF0uQ29weUZyb20oCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fcHJvdG8pKQogICAgICBzZXJpYWxpemVkX2RhdGEgPSB0cmFuc2Zvcm1faWQKICAgIGVsc2U6CiAgICAgIHNlcmlhbGl6ZWRfZGF0YSA9IHBpY2tsZXIuZHVtcHMoCiAgICAgICAgICBzZWxmLl9wYXJkb19mbl9kYXRhKHRyYW5zZm9ybV9ub2RlLCBsb29rdXBfbGFiZWwpKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5TRVJJQUxJWkVEX0ZOLCBzZXJpYWxpemVkX2RhdGEpCiAgICAjIFRPRE8oQkVBTS04ODgyKTogRW5hYmxlIG9uY2UgZGF0YWZsb3cgc2VydmljZSBkb2Vzbid0IHJlamVjdCB0aGlzLgogICAgIyBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBJUEVMSU5FX1BST1RPX1RSQU5TRk9STV9JRCwgdHJhbnNmb3JtX2lkKQogICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgUHJvcGVydHlOYW1lcy5QQVJBTExFTF9JTlBVVCwKICAgICAgICB7CiAgICAgICAgICAgICdAdHlwZSc6ICdPdXRwdXRSZWZlcmVuY2UnLAogICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLlNURVBfTkFNRTogaW5wdXRfc3RlcC5wcm90by5uYW1lLAogICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9OQU1FOiBpbnB1dF9zdGVwLmdldF9vdXRwdXQoaW5wdXRfdGFnKQogICAgICAgIH0pCiAgICAjIEFkZCBzaWRlIGlucHV0cyBpZiBhbnkuCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLk5PTl9QQVJBTExFTF9JTlBVVFMsIHNpX2RpY3QpCgogICAgIyBHZW5lcmF0ZSBkZXNjcmlwdGlvbiBmb3IgdGhlIG91dHB1dHMuIFRoZSBvdXRwdXQgbmFtZXMKICAgICMgd2lsbCBiZSAnTm9uZScgZm9yIG1haW4gb3V0cHV0IGFuZCAnPHRhZz4nIGZvciBhIHRhZ2dlZCBvdXRwdXQuCiAgICBvdXRwdXRzID0gW10KICAgIHN0ZXAuZW5jb2RpbmcgPSBzZWxmLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXIodHJhbnNmb3JtX25vZGUpCgogICAgYWxsX291dHB1dF90YWdzID0gdHJhbnNmb3JtX3Byb3RvLm91dHB1dHMua2V5cygpCgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFJ1bm5lckFQSVBUcmFuc2Zvcm1Ib2xkZXIKICAgIGV4dGVybmFsX3RyYW5zZm9ybSA9IGlzaW5zdGFuY2UodHJhbnNmb3JtLCBSdW5uZXJBUElQVHJhbnNmb3JtSG9sZGVyKQoKICAgICMgU29tZSBleHRlcm5hbCB0cmFuc2Zvcm1zIHJlcXVpcmUgb3V0cHV0IHRhZ3MgdG8gbm90IGJlIG1vZGlmaWVkLgogICAgIyBTbyB3ZSByYW5kb21seSBzZWxlY3Qgb25lIG9mIHRoZSBvdXRwdXQgdGFncyBhcyB0aGUgbWFpbiBvdXRwdXQgYW5kCiAgICAjIGxlYXZlIG90aGVycyBhcyBzaWRlIG91dHB1dHMuIFRyYW5zZm9ybSBleGVjdXRpb24gc2hvdWxkIG5vdCBjaGFuZ2UKICAgICMgZGVwZW5kZW5kaW5nIG9uIHdoaWNoIG91dHB1dCB0YWcgd2UgY2hvb3NlIGFzIHRoZSBtYWluIG91dHB1dCBoZXJlLgogICAgIyBBbHNvLCBzb21lIFNES3MgZG8gbm90IHdvcmsgY29ycmVjdGx5IGlmIG91dHB1dCB0YWdzIGFyZSBtb2RpZmllZC4gU28gZm9yCiAgICAjIGV4dGVybmFsIHRyYW5zZm9ybXMsIHdlIGxlYXZlIHRhZ3MgdW5tb2RpZmllZC4KICAgICMKICAgICMgUHl0aG9uIFNESyB1c2VzICdOb25lJyBhcyB0aGUgdGFnIG9mIHRoZSBtYWluIG91dHB1dC4KICAgIG1haW5fb3V0cHV0X3RhZyA9IChhbGxfb3V0cHV0X3RhZ3NbMF0gaWYgZXh0ZXJuYWxfdHJhbnNmb3JtIGVsc2UgJ05vbmUnKQoKICAgIHNpZGVfb3V0cHV0X3RhZ3MgPSBzZXQoYWxsX291dHB1dF90YWdzKS5kaWZmZXJlbmNlKHttYWluX291dHB1dF90YWd9KQoKICAgICMgQWRkIHRoZSBtYWluIG91dHB1dCB0byB0aGUgZGVzY3JpcHRpb24uCiAgICBvdXRwdXRzLmFwcGVuZCh7CiAgICAgICAgUHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgJyVzLiVzJyAlICh0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCBQcm9wZXJ0eU5hbWVzLk9VVCkpLAogICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogbWFpbl9vdXRwdXRfdGFnCiAgICB9KQogICAgZm9yIHNpZGVfdGFnIGluIHNpZGVfb3V0cHV0X3RhZ3M6CiAgICAgICMgVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGFsbCBvdXRwdXRzIHdpbGwgaGF2ZSB0aGUgc2FtZSB0eXBlaGludAogICAgICAjIGFuZCBjb2RlciBhcyB0aGUgbWFpbiBvdXRwdXQuIFRoaXMgaXMgY2VydGFpbmx5IHRoZSBjYXNlIHJpZ2h0IG5vdwogICAgICAjIGJ1dCBjb25jZWl2YWJseSBpdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICAgICAgb3V0cHV0cy5hcHBlbmQoewogICAgICAgICAgUHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgICAnJXMuJXMnICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIHNpZGVfdGFnKSksCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLkVOQ09ESU5HOiBzdGVwLmVuY29kaW5nLAogICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogc2lkZV90YWcKICAgICAgfSkKCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLCBvdXRwdXRzKQoKICAgICMgQWRkIHRoZSByZXN0cmljdGlvbiBlbmNvZGluZyBpZiB3ZSBhcmUgYSBzcGxpdHRhYmxlIERvRm4KICAgICMgYW5kIGFyZSB1c2luZyB0aGUgRm4gQVBJIG9uIHRoZSB1bmlmaWVkIHdvcmtlci4KICAgIHJlc3RyaWN0aW9uX2NvZGVyID0gdHJhbnNmb3JtLmdldF9yZXN0cmljdGlvbl9jb2RlcigpCiAgICBpZiByZXN0cmljdGlvbl9jb2RlcjoKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLlJFU1RSSUNUSU9OX0VOQ09ESU5HLAogICAgICAgICAgc2VsZi5fZ2V0X2Nsb3VkX2VuY29kaW5nKHJlc3RyaWN0aW9uX2NvZGVyKSkKCiAgICBpZiBvcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmcgYW5kIERvRm5TaWduYXR1cmUoCiAgICAgICAgdHJhbnNmb3JtLmRvZm4pLmlzX3N0YXRlZnVsX2RvZm4oKToKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5VU0VTX0tFWUVEX1NUQVRFLCAidHJ1ZSIpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX3BhcmRvX2ZuX2RhdGEodHJhbnNmb3JtX25vZGUsIGdldF9sYWJlbCk6CiAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0KICAgIHNpX3RhZ3NfYW5kX3R5cGVzID0gWyAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogICAgICAgIChnZXRfbGFiZWwoc2lkZV9wdmFsKSwgc2lkZV9wdmFsLl9fY2xhc3NfXywgc2lkZV9wdmFsLl92aWV3X29wdGlvbnMoKSkKICAgICAgICBmb3Igc2lkZV9wdmFsIGluIHRyYW5zZm9ybV9ub2RlLnNpZGVfaW5wdXRzXQogICAgcmV0dXJuICgKICAgICAgICB0cmFuc2Zvcm0uZm4sCiAgICAgICAgdHJhbnNmb3JtLmFyZ3MsCiAgICAgICAgdHJhbnNmb3JtLmt3YXJncywKICAgICAgICBzaV90YWdzX2FuZF90eXBlcywKICAgICAgICB0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0ud2luZG93aW5nKQoKICBkZWYgYXBwbHlfQ29tYmluZVZhbHVlcyhzZWxmLCB0cmFuc2Zvcm0sIHBjb2xsLCBvcHRpb25zKToKICAgIHJldHVybiBwdmFsdWUuUENvbGxlY3Rpb24uZnJvbV8ocGNvbGwpCgogIGRlZiBydW5fQ29tYmluZVZhbHVlcyhzZWxmLCB0cmFuc2Zvcm1fbm9kZSwgb3B0aW9ucyk6CiAgICB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0KICAgIGlucHV0X3RhZyA9IHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXS50YWcKICAgIGlucHV0X3N0ZXAgPSBzZWxmLl9jYWNoZS5nZXRfcHZhbHVlKHRyYW5zZm9ybV9ub2RlLmlucHV0c1swXSkKICAgIHN0ZXAgPSBzZWxmLl9hZGRfc3RlcCgKICAgICAgICBUcmFuc2Zvcm1OYW1lcy5DT01CSU5FLCB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCB0cmFuc2Zvcm1fbm9kZSkKICAgIHRyYW5zZm9ybV9pZCA9IHNlbGYucHJvdG9fY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZCh0cmFuc2Zvcm1fbm9kZS5wYXJlbnQpCgogICAgIyBUaGUgZGF0YSB0cmFuc21pdHRlZCBpbiBTRVJJQUxJWkVEX0ZOIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlcgogICAgIyB0aGlzIGlzIGEgZm5hcGkgcGlwZWxpbmUgb3Igbm90LgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LmludGVybmFsIGltcG9ydCBhcGljbGllbnQKICAgIHVzZV9mbmFwaSA9IGFwaWNsaWVudC5fdXNlX2ZuYXBpKG9wdGlvbnMpCiAgICBpZiB1c2VfZm5hcGk6CiAgICAgICMgRm5hcGkgcGlwZWxpbmVzIHNlbmQgdGhlIHRyYW5zZm9ybSBJRCBvZiB0aGUgQ29tYmluZVZhbHVlcyB0cmFuc2Zvcm0ncwogICAgICAjIHBhcmVudCBjb21wb3NpdGUgYmVjYXVzZSBEYXRhZmxvdyBleHBlY3RzIHRoZSBJRCBvZiBhIENvbWJpbmVQZXJLZXkKICAgICAgIyB0cmFuc2Zvcm0uCiAgICAgIHNlcmlhbGl6ZWRfZGF0YSA9IHRyYW5zZm9ybV9pZAogICAgZWxzZToKICAgICAgIyBDb21iaW5lciBmdW5jdGlvbnMgZG8gbm90IHRha2UgZGVmZXJyZWQgc2lkZS1pbnB1dHMgKGkuZS4gUFZhbHVlcykgYW5kCiAgICAgICMgdGhlcmVmb3JlIHRoZSBjb2RlIHRvIGhhbmRsZSBleHRyYSBhcmdzL2t3YXJncyBpcyBzaW1wbGVyIHRoYW4gZm9yIHRoZQogICAgICAjIERvRm4ncyBvZiB0aGUgUGFyRG8gdHJhbnNmb3JtLiBJbiB0aGUgbGFzdCwgZW1wdHkgYXJndW1lbnQgaXMgd2hlcmUKICAgICAgIyBzaWRlIGlucHV0cyBpbmZvcm1hdGlvbiB3b3VsZCBnby4KICAgICAgc2VyaWFsaXplZF9kYXRhID0gcGlja2xlci5kdW1wcygKICAgICAgICAgICh0cmFuc2Zvcm0uZm4sIHRyYW5zZm9ybS5hcmdzLCB0cmFuc2Zvcm0ua3dhcmdzLCAoKSkpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlNFUklBTElaRURfRk4sIHNlcmlhbGl6ZWRfZGF0YSkKICAgICMgVE9ETyhCRUFNLTg4ODIpOiBFbmFibGUgb25jZSBkYXRhZmxvdyBzZXJ2aWNlIGRvZXNuJ3QgcmVqZWN0IHRoaXMuCiAgICAjIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuUElQRUxJTkVfUFJPVE9fVFJBTlNGT1JNX0lELCB0cmFuc2Zvcm1faWQpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLlBBUkFMTEVMX0lOUFVULAogICAgICAgIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ091dHB1dFJlZmVyZW5jZScsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuU1RFUF9OQU1FOiBpbnB1dF9zdGVwLnByb3RvLm5hbWUsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IGlucHV0X3N0ZXAuZ2V0X291dHB1dChpbnB1dF90YWcpCiAgICAgICAgfSkKICAgICMgTm90ZSB0aGF0IHRoZSBhY2N1bXVsYXRvciBtdXN0IG5vdCBoYXZlIGEgV2luZG93ZWRWYWx1ZSBlbmNvZGluZywgd2hpbGUKICAgICMgdGhlIG91dHB1dCBvZiB0aGlzIHN0ZXAgZG9lcyBpbiBmYWN0IGhhdmUgYSBXaW5kb3dlZFZhbHVlIGVuY29kaW5nLgogICAgYWNjdW11bGF0b3JfZW5jb2RpbmcgPSBzZWxmLl9nZXRfY2xvdWRfZW5jb2RpbmcoCiAgICAgICAgdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLmZuLmdldF9hY2N1bXVsYXRvcl9jb2RlcigpKQogICAgb3V0cHV0X2VuY29kaW5nID0gc2VsZi5fZ2V0X2VuY29kZWRfb3V0cHV0X2NvZGVyKHRyYW5zZm9ybV9ub2RlKQoKICAgIHN0ZXAuZW5jb2RpbmcgPSBvdXRwdXRfZW5jb2RpbmcKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRU5DT0RJTkcsIGFjY3VtdWxhdG9yX2VuY29kaW5nKQogICAgIyBHZW5lcmF0ZSBkZXNjcmlwdGlvbiBmb3IgbWFpbiBvdXRwdXQgJ291dC4nCiAgICBvdXRwdXRzID0gW10KICAgICMgQWRkIHRoZSBtYWluIG91dHB1dCB0byB0aGUgZGVzY3JpcHRpb24uCiAgICBvdXRwdXRzLmFwcGVuZCh7CiAgICAgICAgUHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgJyVzLiVzJyAlICh0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsLCBQcm9wZXJ0eU5hbWVzLk9VVCkpLAogICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogUHJvcGVydHlOYW1lcy5PVVQKICAgIH0pCiAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLCBvdXRwdXRzKQoKICBkZWYgYXBwbHlfUmVhZChzZWxmLCB0cmFuc2Zvcm0sIHBiZWdpbiwgb3B0aW9ucyk6CiAgICBpZiBoYXNhdHRyKHRyYW5zZm9ybS5zb3VyY2UsICdmb3JtYXQnKToKICAgICAgIyBDb25zaWRlciBuYXRpdmUgUmVhZCB0byBiZSBhIHByaW1pdGl2ZSBmb3IgZGF0YWZsb3cuCiAgICAgIHJldHVybiBiZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbi5mcm9tXyhwYmVnaW4pCiAgICBlbHNlOgogICAgICByZXR1cm4gc2VsZi5hcHBseV9QVHJhbnNmb3JtKHRyYW5zZm9ybSwgcGJlZ2luLCBvcHRpb25zKQoKICBkZWYgcnVuX1JlYWQoc2VsZiwgdHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpOgogICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtCiAgICBzdGVwID0gc2VsZi5fYWRkX3N0ZXAoCiAgICAgICAgVHJhbnNmb3JtTmFtZXMuUkVBRCwgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgdHJhbnNmb3JtX25vZGUpCiAgICAjIFRPRE8obWFpcmJlayk6IHJlZmFjdG9yIGlmLWVsc2UgdHJlZSB0byB1c2UgcmVnaXN0ZXJhYmxlIGZ1bmN0aW9ucy4KICAgICMgSW5pdGlhbGl6ZSB0aGUgc291cmNlIHNwZWNpZmljIHByb3BlcnRpZXMuCgogICAgc3RhbmRhcmRfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpCiAgICBpZiBub3QgaGFzYXR0cih0cmFuc2Zvcm0uc291cmNlLCAnZm9ybWF0Jyk6CiAgICAgICMgSWYgYSBmb3JtYXQgaXMgbm90IHNldCwgd2UgYXNzdW1lIHRoZSBzb3VyY2UgdG8gYmUgYSBjdXN0b20gc291cmNlLgogICAgICBzb3VyY2VfZGljdCA9IHt9CgogICAgICBzb3VyY2VfZGljdFsnc3BlYyddID0gewogICAgICAgICAgJ0B0eXBlJzogbmFtZXMuU09VUkNFX1RZUEUsCiAgICAgICAgICBuYW1lcy5TRVJJQUxJWkVEX1NPVVJDRV9LRVk6IHBpY2tsZXIuZHVtcHModHJhbnNmb3JtLnNvdXJjZSkKICAgICAgfQoKICAgICAgdHJ5OgogICAgICAgIHNvdXJjZV9kaWN0WydtZXRhZGF0YSddID0gewogICAgICAgICAgICAnZXN0aW1hdGVkX3NpemVfYnl0ZXMnOiBqc29uX3ZhbHVlLmdldF90eXBlZF92YWx1ZV9kZXNjcmlwdG9yKAogICAgICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS5lc3RpbWF0ZV9zaXplKCkpCiAgICAgICAgfQogICAgICBleGNlcHQgZXJyb3IuUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcjoKICAgICAgICAjIFNpemUgZXN0aW1hdGlvbiBpcyBiZXN0IGVmZm9ydCwgYW5kIHRoaXMgZXJyb3IgaXMgYnkgdmFsdWUgcHJvdmlkZXIuCiAgICAgICAgX0xPR0dFUi5pbmZvKAogICAgICAgICAgICAnQ291bGQgbm90IGVzdGltYXRlIHNpemUgb2Ygc291cmNlICVyIGR1ZSB0byAnICsgXAogICAgICAgICAgICAnUnVudGltZVZhbHVlUHJvdmlkZXJFcnJvcicsIHRyYW5zZm9ybS5zb3VyY2UpCiAgICAgIGV4Y2VwdCBFeGNlcHRpb246ICAjIHB5bGludDogZGlzYWJsZT1icm9hZC1leGNlcHQKICAgICAgICAjIFNpemUgZXN0aW1hdGlvbiBpcyBiZXN0IGVmZm9ydC4gU28gd2UgbG9nIHRoZSBlcnJvciBhbmQgY29udGludWUuCiAgICAgICAgX0xPR0dFUi5pbmZvKAogICAgICAgICAgICAnQ291bGQgbm90IGVzdGltYXRlIHNpemUgb2Ygc291cmNlICVyIGR1ZSB0byBhbiBleGNlcHRpb246ICVzJywKICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZSwKICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuU09VUkNFX1NURVBfSU5QVVQsIHNvdXJjZV9kaWN0KQogICAgZWxpZiB0cmFuc2Zvcm0uc291cmNlLmZvcm1hdCA9PSAndGV4dCc6CiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRklMRV9QQVRURVJOLCB0cmFuc2Zvcm0uc291cmNlLnBhdGgpCiAgICBlbGlmIHRyYW5zZm9ybS5zb3VyY2UuZm9ybWF0ID09ICdiaWdxdWVyeSc6CiAgICAgIGlmIHN0YW5kYXJkX29wdGlvbnMuc3RyZWFtaW5nOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdCaWdRdWVyeSBzb3VyY2UgaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHVzZSAnCiAgICAgICAgICAgICdpbiBzdHJlYW1pbmcgcGlwZWxpbmVzLicpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfRVhQT1JUX0ZPUk1BVCwgJ0ZPUk1BVF9BVlJPJykKICAgICAgIyBUT0RPKHNpbHZpdWMpOiBBZGQgdGFibGUgdmFsaWRhdGlvbiBpZiB0cmFuc2Zvcm0uc291cmNlLnZhbGlkYXRlLgogICAgICBpZiB0cmFuc2Zvcm0uc291cmNlLnRhYmxlX3JlZmVyZW5jZSBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9EQVRBU0VULAogICAgICAgICAgICB0cmFuc2Zvcm0uc291cmNlLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQpCiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuQklHUVVFUllfVEFCTEUsCiAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQpCiAgICAgICAgIyBJZiBwcm9qZWN0IG93bmluZyB0aGUgdGFibGUgd2FzIG5vdCBzcGVjaWZpZWQgdGhlbiB0aGUgcHJvamVjdCBvd25pbmcKICAgICAgICAjIHRoZSB3b3JrZmxvdyAoY3VycmVudCBwcm9qZWN0KSB3aWxsIGJlIHVzZWQuCiAgICAgICAgaWYgdHJhbnNmb3JtLnNvdXJjZS50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkIGlzIG5vdCBOb25lOgogICAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9QUk9KRUNULAogICAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCkKICAgICAgZWxpZiB0cmFuc2Zvcm0uc291cmNlLnF1ZXJ5IGlzIG5vdCBOb25lOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuQklHUVVFUllfUVVFUlksIHRyYW5zZm9ybS5zb3VyY2UucXVlcnkpCiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuQklHUVVFUllfVVNFX0xFR0FDWV9TUUwsCiAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UudXNlX2xlZ2FjeV9zcWwpCiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuQklHUVVFUllfRkxBVFRFTl9SRVNVTFRTLAogICAgICAgICAgICB0cmFuc2Zvcm0uc291cmNlLmZsYXR0ZW5fcmVzdWx0cykKICAgICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnQmlnUXVlcnkgc291cmNlICVyIG11c3Qgc3BlY2lmeSBlaXRoZXIgYSB0YWJsZSBvcicKICAgICAgICAgICAgJyBhIHF1ZXJ5JyAlIHRyYW5zZm9ybS5zb3VyY2UpCiAgICAgIGlmIHRyYW5zZm9ybS5zb3VyY2Uua21zX2tleSBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9LTVNfS0VZLCB0cmFuc2Zvcm0uc291cmNlLmttc19rZXkpCiAgICBlbGlmIHRyYW5zZm9ybS5zb3VyY2UuZm9ybWF0ID09ICdwdWJzdWInOgogICAgICBpZiBub3Qgc3RhbmRhcmRfb3B0aW9ucy5zdHJlYW1pbmc6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ0Nsb3VkIFB1Yi9TdWIgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlICcKICAgICAgICAgICAgJ29ubHkgaW4gc3RyZWFtaW5nIHBpcGVsaW5lcy4nKQogICAgICAjIE9ubHkgb25lIG9mIHRvcGljIG9yIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgc2V0LgogICAgICBpZiB0cmFuc2Zvcm0uc291cmNlLmZ1bGxfc3Vic2NyaXB0aW9uOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLlBVQlNVQl9TVUJTQ1JJUFRJT04sCiAgICAgICAgICAgIHRyYW5zZm9ybS5zb3VyY2UuZnVsbF9zdWJzY3JpcHRpb24pCiAgICAgIGVsaWYgdHJhbnNmb3JtLnNvdXJjZS5mdWxsX3RvcGljOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLlBVQlNVQl9UT1BJQywgdHJhbnNmb3JtLnNvdXJjZS5mdWxsX3RvcGljKQogICAgICBpZiB0cmFuc2Zvcm0uc291cmNlLmlkX2xhYmVsOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLlBVQlNVQl9JRF9MQUJFTCwgdHJhbnNmb3JtLnNvdXJjZS5pZF9sYWJlbCkKICAgICAgaWYgdHJhbnNmb3JtLnNvdXJjZS53aXRoX2F0dHJpYnV0ZXM6CiAgICAgICAgIyBTZXR0aW5nIHRoaXMgcHJvcGVydHkgc2lnbmFscyBEYXRhZmxvdyBydW5uZXIgdG8gcmV0dXJuIGZ1bGwKICAgICAgICAjIFB1YnN1Yk1lc3NhZ2VzIGluc3RlYWQgb2YganVzdCB0aGUgZGF0YSBwYXJ0IG9mIHRoZSBwYXlsb2FkLgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuUFVCU1VCX1NFUklBTElaRURfQVRUUklCVVRFU19GTiwgJycpCiAgICAgIGlmIHRyYW5zZm9ybS5zb3VyY2UudGltZXN0YW1wX2F0dHJpYnV0ZSBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5QVUJTVUJfVElNRVNUQU1QX0FUVFJJQlVURSwKICAgICAgICAgICAgdHJhbnNmb3JtLnNvdXJjZS50aW1lc3RhbXBfYXR0cmlidXRlKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdTb3VyY2UgJXIgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0ICVzLicgJQogICAgICAgICAgKHRyYW5zZm9ybS5zb3VyY2UsIHRyYW5zZm9ybS5zb3VyY2UuZm9ybWF0KSkKCiAgICBpZiBub3QgaGFzYXR0cih0cmFuc2Zvcm0uc291cmNlLCAnZm9ybWF0Jyk6CiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuRk9STUFULCBuYW1lcy5TT1VSQ0VfRk9STUFUKQogICAgZWxzZToKICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5GT1JNQVQsIHRyYW5zZm9ybS5zb3VyY2UuZm9ybWF0KQoKICAgICMgV3JhcCBjb2RlciBpbiBXaW5kb3dlZFZhbHVlQ29kZXI6IHRoaXMgaXMgbmVjZXNzYXJ5IGFzIHRoZSBlbmNvZGluZyBvZiBhCiAgICAjIHN0ZXAgc2hvdWxkIGJlIHRoZSB0eXBlIG9mIHZhbHVlIG91dHB1dHRlZCBieSBlYWNoIHN0ZXAuICBSZWFkIHN0ZXBzCiAgICAjIGF1dG9tYXRpY2FsbHkgd3JhcCBvdXRwdXQgdmFsdWVzIGluIGEgV2luZG93ZWRWYWx1ZSB3cmFwcGVyLCBpZiBuZWNlc3NhcnkuCiAgICAjIFRoaXMgaXMgYWxzbyBuZWNlc3NhcnkgZm9yIHByb3BlciBlbmNvZGluZyBmb3Igc2l6ZSBlc3RpbWF0aW9uLgogICAgIyBVc2luZyBhIEdsb2JhbFdpbmRvd0NvZGVyIGFzIGEgcGxhY2UgaG9sZGVyIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKICAgICMgUGlja2xlQ29kZXIgYmVjYXVzZSBHbG9iYWxXaW5kb3dDb2RlciBpcyBrbm93biBjb2Rlci4KICAgICMgVE9ETyhyb2JlcnR3Yik6IFF1ZXJ5IHRoZSBjb2xsZWN0aW9uIGZvciB0aGUgd2luZG93Zm4gdG8gZXh0cmFjdCB0aGUKICAgICMgY29ycmVjdCBjb2Rlci4KICAgIGNvZGVyID0gY29kZXJzLldpbmRvd2VkVmFsdWVDb2RlcigKICAgICAgICBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHRyYW5zZm9ybV9ub2RlLm91dHB1dHNbTm9uZV0uZWxlbWVudF90eXBlKSwKICAgICAgICBjb2RlcnMuY29kZXJzLkdsb2JhbFdpbmRvd0NvZGVyKCkpCgogICAgc3RlcC5lbmNvZGluZyA9IHNlbGYuX2dldF9jbG91ZF9lbmNvZGluZyhjb2RlcikKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX0lORk8sCiAgICAgICAgW3sKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5VU0VSX05BTUU6ICgKICAgICAgICAgICAgICAgICclcy4lcycgJSAodHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCwgUHJvcGVydHlOYW1lcy5PVVQpKSwKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5FTkNPRElORzogc3RlcC5lbmNvZGluZywKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogUHJvcGVydHlOYW1lcy5PVVQKICAgICAgICB9XSkKCiAgZGVmIHJ1bl9fTmF0aXZlV3JpdGUoc2VsZiwgdHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpOgogICAgdHJhbnNmb3JtID0gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtCiAgICBpbnB1dF90YWcgPSB0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0udGFnCiAgICBpbnB1dF9zdGVwID0gc2VsZi5fY2FjaGUuZ2V0X3B2YWx1ZSh0cmFuc2Zvcm1fbm9kZS5pbnB1dHNbMF0pCiAgICBzdGVwID0gc2VsZi5fYWRkX3N0ZXAoCiAgICAgICAgVHJhbnNmb3JtTmFtZXMuV1JJVEUsIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIHRyYW5zZm9ybV9ub2RlKQogICAgIyBUT0RPKG1haXJiZWspOiByZWZhY3RvciBpZi1lbHNlIHRyZWUgdG8gdXNlIHJlZ2lzdGVyYWJsZSBmdW5jdGlvbnMuCiAgICAjIEluaXRpYWxpemUgdGhlIHNpbmsgc3BlY2lmaWMgcHJvcGVydGllcy4KICAgIGlmIHRyYW5zZm9ybS5zaW5rLmZvcm1hdCA9PSAndGV4dCc6CiAgICAgICMgTm90ZSB0aGF0IGl0IGlzIGltcG9ydGFudCB0byB1c2UgdHlwZWQgcHJvcGVydGllcyAoQHR5cGUvdmFsdWUgZGljdHMpCiAgICAgICMgZm9yIG5vbi1zdHJpbmcgcHJvcGVydGllcyBhbmQgYWxzbyBmb3IgZW1wdHkgc3RyaW5ncy4gRm9yIGV4YW1wbGUsCiAgICAgICMgaW4gdGhlIGNvZGUgYmVsb3cgdGhlIG51bV9zaGFyZHMgbXVzdCBoYXZlIHR5cGUgYW5kIGFsc28KICAgICAgIyBmaWxlX25hbWVfc3VmZml4IGFuZCBzaGFyZF9uYW1lX3RlbXBsYXRlIChjb3VsZCBiZSBlbXB0eSBzdHJpbmdzKS4KICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICBQcm9wZXJ0eU5hbWVzLkZJTEVfTkFNRV9QUkVGSVgsCiAgICAgICAgICB0cmFuc2Zvcm0uc2luay5maWxlX25hbWVfcHJlZml4LAogICAgICAgICAgd2l0aF90eXBlPVRydWUpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgUHJvcGVydHlOYW1lcy5GSUxFX05BTUVfU1VGRklYLAogICAgICAgICAgdHJhbnNmb3JtLnNpbmsuZmlsZV9uYW1lX3N1ZmZpeCwKICAgICAgICAgIHdpdGhfdHlwZT1UcnVlKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgIFByb3BlcnR5TmFtZXMuU0hBUkRfTkFNRV9URU1QTEFURSwKICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLnNoYXJkX25hbWVfdGVtcGxhdGUsCiAgICAgICAgICB3aXRoX3R5cGU9VHJ1ZSkKICAgICAgaWYgdHJhbnNmb3JtLnNpbmsubnVtX3NoYXJkcyA+IDA6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuTlVNX1NIQVJEUywgdHJhbnNmb3JtLnNpbmsubnVtX3NoYXJkcywgd2l0aF90eXBlPVRydWUpCiAgICAgICMgVE9ETyhzaWx2aXVjKTogSW1wbGVtZW50IHNpbmsgdmFsaWRhdGlvbi4KICAgICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5WQUxJREFURV9TSU5LLCBGYWxzZSwgd2l0aF90eXBlPVRydWUpCiAgICBlbGlmIHRyYW5zZm9ybS5zaW5rLmZvcm1hdCA9PSAnYmlncXVlcnknOgogICAgICAjIFRPRE8oc2lsdml1Yyk6IEFkZCB0YWJsZSB2YWxpZGF0aW9uIGlmIHRyYW5zZm9ybS5zaW5rLnZhbGlkYXRlLgogICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgIFByb3BlcnR5TmFtZXMuQklHUVVFUllfREFUQVNFVCwKICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLnRhYmxlX3JlZmVyZW5jZS5kYXRhc2V0SWQpCiAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9UQUJMRSwgdHJhbnNmb3JtLnNpbmsudGFibGVfcmVmZXJlbmNlLnRhYmxlSWQpCiAgICAgICMgSWYgcHJvamVjdCBvd25pbmcgdGhlIHRhYmxlIHdhcyBub3Qgc3BlY2lmaWVkIHRoZW4gdGhlIHByb2plY3Qgb3duaW5nCiAgICAgICMgdGhlIHdvcmtmbG93IChjdXJyZW50IHByb2plY3QpIHdpbGwgYmUgdXNlZC4KICAgICAgaWYgdHJhbnNmb3JtLnNpbmsudGFibGVfcmVmZXJlbmNlLnByb2plY3RJZCBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9QUk9KRUNULAogICAgICAgICAgICB0cmFuc2Zvcm0uc2luay50YWJsZV9yZWZlcmVuY2UucHJvamVjdElkKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgIFByb3BlcnR5TmFtZXMuQklHUVVFUllfQ1JFQVRFX0RJU1BPU0lUSU9OLAogICAgICAgICAgdHJhbnNmb3JtLnNpbmsuY3JlYXRlX2Rpc3Bvc2l0aW9uKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgIFByb3BlcnR5TmFtZXMuQklHUVVFUllfV1JJVEVfRElTUE9TSVRJT04sCiAgICAgICAgICB0cmFuc2Zvcm0uc2luay53cml0ZV9kaXNwb3NpdGlvbikKICAgICAgaWYgdHJhbnNmb3JtLnNpbmsudGFibGVfc2NoZW1hIGlzIG5vdCBOb25lOgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgICAgICBQcm9wZXJ0eU5hbWVzLkJJR1FVRVJZX1NDSEVNQSwgdHJhbnNmb3JtLnNpbmsuc2NoZW1hX2FzX2pzb24oKSkKICAgICAgaWYgdHJhbnNmb3JtLnNpbmsua21zX2tleSBpcyBub3QgTm9uZToKICAgICAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5CSUdRVUVSWV9LTVNfS0VZLCB0cmFuc2Zvcm0uc2luay5rbXNfa2V5KQogICAgZWxpZiB0cmFuc2Zvcm0uc2luay5mb3JtYXQgPT0gJ3B1YnN1Yic6CiAgICAgIHN0YW5kYXJkX29wdGlvbnMgPSBvcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKQogICAgICBpZiBub3Qgc3RhbmRhcmRfb3B0aW9ucy5zdHJlYW1pbmc6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ0Nsb3VkIFB1Yi9TdWIgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlICcKICAgICAgICAgICAgJ29ubHkgaW4gc3RyZWFtaW5nIHBpcGVsaW5lcy4nKQogICAgICBzdGVwLmFkZF9wcm9wZXJ0eShQcm9wZXJ0eU5hbWVzLlBVQlNVQl9UT1BJQywgdHJhbnNmb3JtLnNpbmsuZnVsbF90b3BpYykKICAgICAgaWYgdHJhbnNmb3JtLnNpbmsuaWRfbGFiZWw6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuUFVCU1VCX0lEX0xBQkVMLCB0cmFuc2Zvcm0uc2luay5pZF9sYWJlbCkKICAgICAgaWYgdHJhbnNmb3JtLnNpbmsud2l0aF9hdHRyaWJ1dGVzOgogICAgICAgICMgU2V0dGluZyB0aGlzIHByb3BlcnR5IHNpZ25hbHMgRGF0YWZsb3cgcnVubmVyIHRoYXQgdGhlIFBDb2xsZWN0aW9uCiAgICAgICAgIyBjb250YWlucyBQdWJzdWJNZXNzYWdlIG9iamVjdHMgaW5zdGVhZCBvZiBqdXN0IHJhdyBkYXRhLgogICAgICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuUFVCU1VCX1NFUklBTElaRURfQVRUUklCVVRFU19GTiwgJycpCiAgICAgIGlmIHRyYW5zZm9ybS5zaW5rLnRpbWVzdGFtcF9hdHRyaWJ1dGUgaXMgbm90IE5vbmU6CiAgICAgICAgc3RlcC5hZGRfcHJvcGVydHkoCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuUFVCU1VCX1RJTUVTVEFNUF9BVFRSSUJVVEUsCiAgICAgICAgICAgIHRyYW5zZm9ybS5zaW5rLnRpbWVzdGFtcF9hdHRyaWJ1dGUpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1NpbmsgJXIgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0ICVzLicgJQogICAgICAgICAgKHRyYW5zZm9ybS5zaW5rLCB0cmFuc2Zvcm0uc2luay5mb3JtYXQpKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5GT1JNQVQsIHRyYW5zZm9ybS5zaW5rLmZvcm1hdCkKCiAgICAjIFdyYXAgY29kZXIgaW4gV2luZG93ZWRWYWx1ZUNvZGVyOiB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgcHJvcGVyIGVuY29kaW5nCiAgICAjIGZvciBzaXplIGVzdGltYXRpb24uIFVzaW5nIGEgR2xvYmFsV2luZG93Q29kZXIgYXMgYSBwbGFjZSBob2xkZXIgaW5zdGVhZAogICAgIyBvZiB0aGUgZGVmYXVsdCBQaWNrbGVDb2RlciBiZWNhdXNlIEdsb2JhbFdpbmRvd0NvZGVyIGlzIGtub3duIGNvZGVyLgogICAgIyBUT0RPKHJvYmVydHdiKTogUXVlcnkgdGhlIGNvbGxlY3Rpb24gZm9yIHRoZSB3aW5kb3dmbiB0byBleHRyYWN0IHRoZQogICAgIyBjb3JyZWN0IGNvZGVyLgogICAgY29kZXIgPSBjb2RlcnMuV2luZG93ZWRWYWx1ZUNvZGVyKAogICAgICAgIHRyYW5zZm9ybS5zaW5rLmNvZGVyLCBjb2RlcnMuY29kZXJzLkdsb2JhbFdpbmRvd0NvZGVyKCkpCiAgICBzdGVwLmVuY29kaW5nID0gc2VsZi5fZ2V0X2Nsb3VkX2VuY29kaW5nKGNvZGVyKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5FTkNPRElORywgc3RlcC5lbmNvZGluZykKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KAogICAgICAgIFByb3BlcnR5TmFtZXMuUEFSQUxMRUxfSU5QVVQsCiAgICAgICAgewogICAgICAgICAgICAnQHR5cGUnOiAnT3V0cHV0UmVmZXJlbmNlJywKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5TVEVQX05BTUU6IGlucHV0X3N0ZXAucHJvdG8ubmFtZSwKICAgICAgICAgICAgUHJvcGVydHlOYW1lcy5PVVRQVVRfTkFNRTogaW5wdXRfc3RlcC5nZXRfb3V0cHV0KGlucHV0X3RhZykKICAgICAgICB9KQoKICBkZWYgcnVuX1Rlc3RTdHJlYW0oc2VsZiwgdHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpOgogICAgZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIGltcG9ydCBFbGVtZW50RXZlbnQKICAgIGZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSBpbXBvcnQgUHJvY2Vzc2luZ1RpbWVFdmVudAogICAgZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIGltcG9ydCBXYXRlcm1hcmtFdmVudAogICAgc3RhbmRhcmRfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpCiAgICBpZiBub3Qgc3RhbmRhcmRfb3B0aW9ucy5zdHJlYW1pbmc6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnVGVzdFN0cmVhbSBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciB1c2UgJwogICAgICAgICAgJ29ubHkgaW4gc3RyZWFtaW5nIHBpcGVsaW5lcy4nKQoKICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybV9ub2RlLnRyYW5zZm9ybQogICAgc3RlcCA9IHNlbGYuX2FkZF9zdGVwKAogICAgICAgIFRyYW5zZm9ybU5hbWVzLlJFQUQsIHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIHRyYW5zZm9ybV9ub2RlKQogICAgc3RlcC5hZGRfcHJvcGVydHkoUHJvcGVydHlOYW1lcy5GT1JNQVQsICd0ZXN0X3N0cmVhbScpCiAgICB0ZXN0X3N0cmVhbV9wYXlsb2FkID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5UZXN0U3RyZWFtUGF5bG9hZCgpCiAgICAjIFRlc3RTdHJlYW0gc291cmNlIGRvZXNuJ3QgZG8gYW55IGRlY29kaW5nIG9mIGVsZW1lbnRzLAogICAgIyBzbyB3ZSB3b24ndCBzZXQgdGVzdF9zdHJlYW1fcGF5bG9hZC5jb2Rlcl9pZC4KICAgIG91dHB1dF9jb2RlciA9IHRyYW5zZm9ybS5faW5mZXJfb3V0cHV0X2NvZGVyKCkgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIGZvciBldmVudCBpbiB0cmFuc2Zvcm0uX2V2ZW50czoKICAgICAgbmV3X2V2ZW50ID0gdGVzdF9zdHJlYW1fcGF5bG9hZC5ldmVudHMuYWRkKCkKICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgRWxlbWVudEV2ZW50KToKICAgICAgICBmb3IgdHYgaW4gZXZlbnQudGltZXN0YW1wZWRfdmFsdWVzOgogICAgICAgICAgZWxlbWVudCA9IG5ld19ldmVudC5lbGVtZW50X2V2ZW50LmVsZW1lbnRzLmFkZCgpCiAgICAgICAgICBlbGVtZW50LmVuY29kZWRfZWxlbWVudCA9IG91dHB1dF9jb2Rlci5lbmNvZGUodHYudmFsdWUpCiAgICAgICAgICBlbGVtZW50LnRpbWVzdGFtcCA9IHR2LnRpbWVzdGFtcC5taWNyb3MKICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBQcm9jZXNzaW5nVGltZUV2ZW50KToKICAgICAgICBuZXdfZXZlbnQucHJvY2Vzc2luZ190aW1lX2V2ZW50LmFkdmFuY2VfZHVyYXRpb24gPSAoCiAgICAgICAgICAgIGV2ZW50LmFkdmFuY2VfYnkubWljcm9zKQogICAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIFdhdGVybWFya0V2ZW50KToKICAgICAgICBuZXdfZXZlbnQud2F0ZXJtYXJrX2V2ZW50Lm5ld193YXRlcm1hcmsgPSBldmVudC5uZXdfd2F0ZXJtYXJrLm1pY3JvcwogICAgc2VyaWFsaXplZF9wYXlsb2FkID0gc2VsZi5ieXRlX2FycmF5X3RvX2pzb25fc3RyaW5nKAogICAgICAgIHRlc3Rfc3RyZWFtX3BheWxvYWQuU2VyaWFsaXplVG9TdHJpbmcoKSkKICAgIHN0ZXAuYWRkX3Byb3BlcnR5KFByb3BlcnR5TmFtZXMuU0VSSUFMSVpFRF9URVNUX1NUUkVBTSwgc2VyaWFsaXplZF9wYXlsb2FkKQoKICAgIHN0ZXAuZW5jb2RpbmcgPSBzZWxmLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXIodHJhbnNmb3JtX25vZGUpCiAgICBzdGVwLmFkZF9wcm9wZXJ0eSgKICAgICAgICBQcm9wZXJ0eU5hbWVzLk9VVFBVVF9JTkZPLAogICAgICAgIFt7CiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuVVNFUl9OQU1FOiAoCiAgICAgICAgICAgICAgICAnJXMuJXMnICUgKHRyYW5zZm9ybV9ub2RlLmZ1bGxfbGFiZWwsIFByb3BlcnR5TmFtZXMuT1VUKSksCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuRU5DT0RJTkc6IHN0ZXAuZW5jb2RpbmcsCiAgICAgICAgICAgIFByb3BlcnR5TmFtZXMuT1VUUFVUX05BTUU6IFByb3BlcnR5TmFtZXMuT1VUCiAgICAgICAgfV0pCgogICMgV2UgbXVzdCBtYXJrIHRoaXMgbWV0aG9kIGFzIG5vdCBhIHRlc3Qgb3IgZWxzZSBpdHMgbmFtZSBpcyBhIG1hdGNoZXIgZm9yCiAgIyBub3NldGVzdCB0ZXN0cy4KICBydW5fVGVzdFN0cmVhbS5fX3Rlc3RfXyA9IEZhbHNlCgogIEBjbGFzc21ldGhvZAogIGRlZiBzZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5KGNscywgd2luZG93aW5nKToKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgcGlwZWxpbmVfY29udGV4dAogICAgY29udGV4dCA9IHBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0KCkKICAgIHdpbmRvd2luZ19wcm90byA9IHdpbmRvd2luZy50b19ydW5uZXJfYXBpKGNvbnRleHQpCiAgICByZXR1cm4gY2xzLmJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmcoCiAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5NZXNzYWdlV2l0aENvbXBvbmVudHMoCiAgICAgICAgICAgIGNvbXBvbmVudHM9Y29udGV4dC50b19ydW5uZXJfYXBpKCksCiAgICAgICAgICAgIHdpbmRvd2luZ19zdHJhdGVneT13aW5kb3dpbmdfcHJvdG8pLlNlcmlhbGl6ZVRvU3RyaW5nKCkpCgogIEBjbGFzc21ldGhvZAogIGRlZiBkZXNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3koY2xzLCBzZXJpYWxpemVkX2RhdGEpOgogICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMgaW1wb3J0IHBpcGVsaW5lX2NvbnRleHQKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBXaW5kb3dpbmcKICAgIHByb3RvID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5NZXNzYWdlV2l0aENvbXBvbmVudHMoKQogICAgcHJvdG8uUGFyc2VGcm9tU3RyaW5nKGNscy5qc29uX3N0cmluZ190b19ieXRlX2FycmF5KHNlcmlhbGl6ZWRfZGF0YSkpCiAgICByZXR1cm4gV2luZG93aW5nLmZyb21fcnVubmVyX2FwaSgKICAgICAgICBwcm90by53aW5kb3dpbmdfc3RyYXRlZ3ksCiAgICAgICAgcGlwZWxpbmVfY29udGV4dC5QaXBlbGluZUNvbnRleHQocHJvdG8uY29tcG9uZW50cykpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgYnl0ZV9hcnJheV90b19qc29uX3N0cmluZyhyYXdfYnl0ZXMpOgogICAgIiIiSW1wbGVtZW50cyBvcmcuYXBhY2hlLmJlYW0uc2RrLnV0aWwuU3RyaW5nVXRpbHMuYnl0ZUFycmF5VG9Kc29uU3RyaW5nLiIiIgogICAgcmV0dXJuIHF1b3RlKHJhd19ieXRlcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBqc29uX3N0cmluZ190b19ieXRlX2FycmF5KGVuY29kZWRfc3RyaW5nKToKICAgICIiIkltcGxlbWVudHMgb3JnLmFwYWNoZS5iZWFtLnNkay51dGlsLlN0cmluZ1V0aWxzLmpzb25TdHJpbmdUb0J5dGVBcnJheS4iIiIKICAgIHJldHVybiB1bnF1b3RlX3RvX2J5dGVzKGVuY29kZWRfc3RyaW5nKQoKCmNsYXNzIF9EYXRhZmxvd1NpZGVJbnB1dChiZWFtLnB2YWx1ZS5Bc1NpZGVJbnB1dCk6CiAgIiIiV3JhcHMgYSBzaWRlIGlucHV0IGFzIGEgZGF0YWZsb3ctY29tcGF0aWJsZSBzaWRlIGlucHV0LiIiIgogIGRlZiBfdmlld19vcHRpb25zKHNlbGYpOgogICAgcmV0dXJuIHsKICAgICAgICAnZGF0YSc6IHNlbGYuX2RhdGEsCiAgICB9CgogIGRlZiBfc2lkZV9pbnB1dF9kYXRhKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2RhdGEKCgpjbGFzcyBfRGF0YWZsb3dJdGVyYWJsZUFzTXVsdGltYXBTaWRlSW5wdXQoX0RhdGFmbG93U2lkZUlucHV0KToKICAiIiJXcmFwcyBhbiBpdGVyYWJsZSBzaWRlIGlucHV0IGFzIGRhdGFmbG93LWNvbXBhdGlibGUgc2lkZSBpbnB1dC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgc2lkZV9pbnB1dCk6CiAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICBzaWRlX2lucHV0X2RhdGEgPSBzaWRlX2lucHV0Ll9zaWRlX2lucHV0X2RhdGEoKQogICAgYXNzZXJ0ICgKICAgICAgICBzaWRlX2lucHV0X2RhdGEuYWNjZXNzX3BhdHRlcm4gPT0gY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuSVRFUkFCTEUudXJuKQogICAgaXRlcmFibGVfdmlld19mbiA9IHNpZGVfaW5wdXRfZGF0YS52aWV3X2ZuCiAgICBzZWxmLl9kYXRhID0gYmVhbS5wdmFsdWUuU2lkZUlucHV0RGF0YSgKICAgICAgICBjb21tb25fdXJucy5zaWRlX2lucHV0cy5NVUxUSU1BUC51cm4sCiAgICAgICAgc2lkZV9pbnB1dF9kYXRhLndpbmRvd19tYXBwaW5nX2ZuLAogICAgICAgIGxhbWJkYSBtdWx0aW1hcDogaXRlcmFibGVfdmlld19mbihtdWx0aW1hcFtiJyddKSkKCgpjbGFzcyBfRGF0YWZsb3dJdGVyYWJsZVNpZGVJbnB1dChfRGF0YWZsb3dTaWRlSW5wdXQpOgogICIiIldyYXBzIGFuIGl0ZXJhYmxlIHNpZGUgaW5wdXQgYXMgZGF0YWZsb3ctY29tcGF0aWJsZSBzaWRlIGlucHV0LiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaWRlX2lucHV0KToKICAgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIHNlbGYucHZhbHVlID0gc2lkZV9pbnB1dC5wdmFsdWUKICAgIHNpZGVfaW5wdXRfZGF0YSA9IHNpZGVfaW5wdXQuX3NpZGVfaW5wdXRfZGF0YSgpCiAgICBhc3NlcnQgKAogICAgICAgIHNpZGVfaW5wdXRfZGF0YS5hY2Nlc3NfcGF0dGVybiA9PSBjb21tb25fdXJucy5zaWRlX2lucHV0cy5JVEVSQUJMRS51cm4pCiAgICBzZWxmLl9kYXRhID0gYmVhbS5wdmFsdWUuU2lkZUlucHV0RGF0YSgKICAgICAgICBjb21tb25fdXJucy5zaWRlX2lucHV0cy5JVEVSQUJMRS51cm4sCiAgICAgICAgc2lkZV9pbnB1dF9kYXRhLndpbmRvd19tYXBwaW5nX2ZuLAogICAgICAgIHNpZGVfaW5wdXRfZGF0YS52aWV3X2ZuKQoKCmNsYXNzIF9EYXRhZmxvd011bHRpbWFwU2lkZUlucHV0KF9EYXRhZmxvd1NpZGVJbnB1dCk6CiAgIiIiV3JhcHMgYSBtdWx0aW1hcCBzaWRlIGlucHV0IGFzIGRhdGFmbG93LWNvbXBhdGlibGUgc2lkZSBpbnB1dC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgc2lkZV9pbnB1dCk6CiAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICBzZWxmLnB2YWx1ZSA9IHNpZGVfaW5wdXQucHZhbHVlCiAgICBzaWRlX2lucHV0X2RhdGEgPSBzaWRlX2lucHV0Ll9zaWRlX2lucHV0X2RhdGEoKQogICAgYXNzZXJ0ICgKICAgICAgICBzaWRlX2lucHV0X2RhdGEuYWNjZXNzX3BhdHRlcm4gPT0gY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuTVVMVElNQVAudXJuKQogICAgc2VsZi5fZGF0YSA9IGJlYW0ucHZhbHVlLlNpZGVJbnB1dERhdGEoCiAgICAgICAgY29tbW9uX3VybnMuc2lkZV9pbnB1dHMuTVVMVElNQVAudXJuLAogICAgICAgIHNpZGVfaW5wdXRfZGF0YS53aW5kb3dfbWFwcGluZ19mbiwKICAgICAgICBzaWRlX2lucHV0X2RhdGEudmlld19mbikKCgpjbGFzcyBEYXRhZmxvd1BpcGVsaW5lUmVzdWx0KFBpcGVsaW5lUmVzdWx0KToKICAiIiJSZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIHBpcGVsaW5lIHJ1biBvbiB0aGUgRGF0YWZsb3cgc2VydmljZS4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgam9iLCBydW5uZXIpOgogICAgIiIiSW5pdGlhbGl6ZSBhIG5ldyBEYXRhZmxvd1BpcGVsaW5lUmVzdWx0IGluc3RhbmNlLgoKICAgIEFyZ3M6CiAgICAgIGpvYjogSm9iIG1lc3NhZ2UgZnJvbSB0aGUgRGF0YWZsb3cgQVBJLiBDb3VsZCBiZSA6ZGF0YTpgTm9uZWAgaWYgYSBqb2IKICAgICAgICByZXF1ZXN0IHdhcyBub3Qgc2VudCB0byBEYXRhZmxvdyBzZXJ2aWNlIChlLmcuIHRlbXBsYXRlIGpvYnMpLgogICAgICBydW5uZXI6IERhdGFmbG93UnVubmVyIGluc3RhbmNlLgogICAgIiIiCiAgICBzZWxmLl9qb2IgPSBqb2IKICAgIHNlbGYuX3J1bm5lciA9IHJ1bm5lcgogICAgc2VsZi5tZXRyaWNfcmVzdWx0cyA9IE5vbmUKCiAgZGVmIF91cGRhdGVfam9iKHNlbGYpOgogICAgIyBXZSBuZWVkIHRoZSBqb2IgaWQgdG8gYmUgYWJsZSB0byB1cGRhdGUgam9iIGluZm9ybWF0aW9uLiBUaGVyZSBpcyBubyBuZWVkCiAgICAjIHRvIHVwZGF0ZSB0aGUgam9iIGlmIHdlIGFyZSBpbiBhIGtub3duIHRlcm1pbmFsIHN0YXRlLgogICAgaWYgc2VsZi5oYXNfam9iIGFuZCBub3Qgc2VsZi5pc19pbl90ZXJtaW5hbF9zdGF0ZSgpOgogICAgICBzZWxmLl9qb2IgPSBzZWxmLl9ydW5uZXIuZGF0YWZsb3dfY2xpZW50LmdldF9qb2Ioc2VsZi5qb2JfaWQoKSkKCiAgZGVmIGpvYl9pZChzZWxmKToKICAgIHJldHVybiBzZWxmLl9qb2IuaWQKCiAgZGVmIG1ldHJpY3Moc2VsZik6CiAgICByZXR1cm4gc2VsZi5tZXRyaWNfcmVzdWx0cwoKICBAcHJvcGVydHkKICBkZWYgaGFzX2pvYihzZWxmKToKICAgIHJldHVybiBzZWxmLl9qb2IgaXMgbm90IE5vbmUKCiAgZGVmIF9nZXRfam9iX3N0YXRlKHNlbGYpOgogICAgdmFsdWVzX2VudW0gPSBkYXRhZmxvd19hcGkuSm9iLkN1cnJlbnRTdGF0ZVZhbHVlVmFsdWVzRW51bQoKICAgICMgT3JkZXJlZCBieSB0aGUgZW51bSB2YWx1ZXMuIFZhbHVlcyB0aGF0IG1heSBiZSBpbnRyb2R1Y2VkIGluCiAgICAjIGZ1dHVyZSB2ZXJzaW9ucyBvZiBEYXRhZmxvdyBBUEkgYXJlIGNvbnNpZGVyZWQgVU5SRUNPR05JWkVEIGJ5IHRoZSBTREsuCiAgICBhcGlfam9ic3RhdGVfbWFwID0gZGVmYXVsdGRpY3QoCiAgICAgICAgbGFtYmRhOiBQaXBlbGluZVN0YXRlLlVOUkVDT0dOSVpFRCwKICAgICAgICB7CiAgICAgICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9VTktOT1dOOiBQaXBlbGluZVN0YXRlLlVOS05PV04sCiAgICAgICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9TVE9QUEVEOiBQaXBlbGluZVN0YXRlLlNUT1BQRUQsCiAgICAgICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9SVU5OSU5HOiBQaXBlbGluZVN0YXRlLlJVTk5JTkcsCiAgICAgICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9ET05FOiBQaXBlbGluZVN0YXRlLkRPTkUsCiAgICAgICAgICAgIHZhbHVlc19lbnVtLkpPQl9TVEFURV9GQUlMRUQ6IFBpcGVsaW5lU3RhdGUuRkFJTEVELAogICAgICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfQ0FOQ0VMTEVEOiBQaXBlbGluZVN0YXRlLkNBTkNFTExFRCwKICAgICAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX1VQREFURUQ6IFBpcGVsaW5lU3RhdGUuVVBEQVRFRCwKICAgICAgICAgICAgdmFsdWVzX2VudW0uSk9CX1NUQVRFX0RSQUlOSU5HOiBQaXBlbGluZVN0YXRlLkRSQUlOSU5HLAogICAgICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfRFJBSU5FRDogUGlwZWxpbmVTdGF0ZS5EUkFJTkVELAogICAgICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfUEVORElORzogUGlwZWxpbmVTdGF0ZS5QRU5ESU5HLAogICAgICAgICAgICB2YWx1ZXNfZW51bS5KT0JfU1RBVEVfQ0FOQ0VMTElORzogUGlwZWxpbmVTdGF0ZS5DQU5DRUxMSU5HLAogICAgICAgIH0pCgogICAgcmV0dXJuICgKICAgICAgICBhcGlfam9ic3RhdGVfbWFwW3NlbGYuX2pvYi5jdXJyZW50U3RhdGVdCiAgICAgICAgaWYgc2VsZi5fam9iLmN1cnJlbnRTdGF0ZSBlbHNlIFBpcGVsaW5lU3RhdGUuVU5LTk9XTikKCiAgQHByb3BlcnR5CiAgZGVmIHN0YXRlKHNlbGYpOgogICAgIiIiUmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZW1vdGUgam9iLgoKICAgIFJldHVybnM6CiAgICAgIEEgUGlwZWxpbmVTdGF0ZSBvYmplY3QuCiAgICAiIiIKICAgIGlmIG5vdCBzZWxmLmhhc19qb2I6CiAgICAgIHJldHVybiBQaXBlbGluZVN0YXRlLlVOS05PV04KCiAgICBzZWxmLl91cGRhdGVfam9iKCkKCiAgICByZXR1cm4gc2VsZi5fZ2V0X2pvYl9zdGF0ZSgpCgogIGRlZiBpc19pbl90ZXJtaW5hbF9zdGF0ZShzZWxmKToKICAgIGlmIG5vdCBzZWxmLmhhc19qb2I6CiAgICAgIHJldHVybiBUcnVlCgogICAgcmV0dXJuIFBpcGVsaW5lU3RhdGUuaXNfdGVybWluYWwoc2VsZi5fZ2V0X2pvYl9zdGF0ZSgpKQoKICBkZWYgd2FpdF91bnRpbF9maW5pc2goc2VsZiwgZHVyYXRpb249Tm9uZSk6CiAgICBpZiBub3Qgc2VsZi5pc19pbl90ZXJtaW5hbF9zdGF0ZSgpOgogICAgICBpZiBub3Qgc2VsZi5oYXNfam9iOgogICAgICAgIHJhaXNlIElPRXJyb3IoJ0ZhaWxlZCB0byBnZXQgdGhlIERhdGFmbG93IGpvYiBpZC4nKQoKICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCgKICAgICAgICAgIHRhcmdldD1EYXRhZmxvd1J1bm5lci5wb2xsX2Zvcl9qb2JfY29tcGxldGlvbiwKICAgICAgICAgIGFyZ3M9KHNlbGYuX3J1bm5lciwgc2VsZiwgZHVyYXRpb24pKQoKICAgICAgIyBNYXJrIHRoZSB0aHJlYWQgYXMgYSBkYWVtb24gdGhyZWFkIHNvIGEga2V5Ym9hcmQgaW50ZXJydXB0IG9uIHRoZSBtYWluCiAgICAgICMgdGhyZWFkIHdpbGwgdGVybWluYXRlIGV2ZXJ5dGhpbmcuIFRoaXMgaXMgYWxzbyB0aGUgcmVhc29uIHdlIHdpbGwgbm90CiAgICAgICMgdXNlIHRocmVhZC5qb2luKCkgdG8gd2FpdCBmb3IgdGhlIHBvbGxpbmcgdGhyZWFkLgogICAgICB0aHJlYWQuZGFlbW9uID0gVHJ1ZQogICAgICB0aHJlYWQuc3RhcnQoKQogICAgICB3aGlsZSB0aHJlYWQuaXNBbGl2ZSgpOgogICAgICAgIHRpbWUuc2xlZXAoNS4wKQoKICAgICAgIyBUT0RPOiBNZXJnZSB0aGUgdGVybWluYXRpb24gY29kZSBpbiBwb2xsX2Zvcl9qb2JfY29tcGxldGlvbiBhbmQKICAgICAgIyBpc19pbl90ZXJtaW5hbF9zdGF0ZS4KICAgICAgdGVybWluYXRlZCA9IHNlbGYuaXNfaW5fdGVybWluYWxfc3RhdGUoKQogICAgICBhc3NlcnQgZHVyYXRpb24gb3IgdGVybWluYXRlZCwgKAogICAgICAgICAgJ0pvYiBkaWQgbm90IHJlYWNoIHRvIGEgdGVybWluYWwgc3RhdGUgYWZ0ZXIgd2FpdGluZyBpbmRlZmluaXRlbHkuJykKCiAgICAgIGlmIHRlcm1pbmF0ZWQgYW5kIHNlbGYuc3RhdGUgIT0gUGlwZWxpbmVTdGF0ZS5ET05FOgogICAgICAgICMgVE9ETyhCRUFNLTEyOTApOiBDb25zaWRlciBjb252ZXJ0aW5nIHRoaXMgdG8gYW4gZXJyb3IgbG9nIGJhc2VkIG9uCiAgICAgICAgIyB0aGVyZXNvbHV0aW9uIG9mIHRoZSBpc3N1ZS4KICAgICAgICByYWlzZSBEYXRhZmxvd1J1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICdEYXRhZmxvdyBwaXBlbGluZSBmYWlsZWQuIFN0YXRlOiAlcywgRXJyb3I6XG4lcycgJQogICAgICAgICAgICAoc2VsZi5zdGF0ZSwgZ2V0YXR0cihzZWxmLl9ydW5uZXIsICdsYXN0X2Vycm9yX21zZycsIE5vbmUpKSwKICAgICAgICAgICAgc2VsZikKICAgIHJldHVybiBzZWxmLnN0YXRlCgogIGRlZiBjYW5jZWwoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5oYXNfam9iOgogICAgICByYWlzZSBJT0Vycm9yKCdGYWlsZWQgdG8gZ2V0IHRoZSBEYXRhZmxvdyBqb2IgaWQuJykKCiAgICBzZWxmLl91cGRhdGVfam9iKCkKCiAgICBpZiBzZWxmLmlzX2luX3Rlcm1pbmFsX3N0YXRlKCk6CiAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICdDYW5jZWwgZmFpbGVkIGJlY2F1c2Ugam9iICVzIGlzIGFscmVhZHkgdGVybWluYXRlZCBpbiBzdGF0ZSAlcy4nLAogICAgICAgICAgc2VsZi5qb2JfaWQoKSwKICAgICAgICAgIHNlbGYuc3RhdGUpCiAgICBlbHNlOgogICAgICBpZiBub3Qgc2VsZi5fcnVubmVyLmRhdGFmbG93X2NsaWVudC5tb2RpZnlfam9iX3N0YXRlKAogICAgICAgICAgc2VsZi5qb2JfaWQoKSwgJ0pPQl9TVEFURV9DQU5DRUxMRUQnKToKICAgICAgICBjYW5jZWxfZmFpbGVkX21lc3NhZ2UgPSAoCiAgICAgICAgICAgICdGYWlsZWQgdG8gY2FuY2VsIGpvYiAlcywgcGxlYXNlIGdvIHRvIHRoZSBEZXZlbG9wZXJzIENvbnNvbGUgdG8gJwogICAgICAgICAgICAnY2FuY2VsIGl0IG1hbnVhbGx5LicpICUgc2VsZi5qb2JfaWQoKQogICAgICAgIF9MT0dHRVIuZXJyb3IoY2FuY2VsX2ZhaWxlZF9tZXNzYWdlKQogICAgICAgIHJhaXNlIERhdGFmbG93UnVudGltZUV4Y2VwdGlvbihjYW5jZWxfZmFpbGVkX21lc3NhZ2UsIHNlbGYpCgogICAgcmV0dXJuIHNlbGYuc3RhdGUKCiAgZGVmIF9fc3RyX18oc2VsZik6CiAgICByZXR1cm4gJzwlcyAlcyAlcz4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmpvYl9pZCgpLCBzZWxmLnN0YXRlKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzwlcyAlcyBhdCAlcz4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLl9qb2IsIGhleChpZChzZWxmKSkpCgoKY2xhc3MgRGF0YWZsb3dSdW50aW1lRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgIiIiSW5kaWNhdGVzIGFuIGVycm9yIGhhcyBvY2N1cnJlZCBpbiBydW5uaW5nIHRoaXMgcGlwZWxpbmUuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgcmVzdWx0KToKICAgIHN1cGVyKERhdGFmbG93UnVudGltZUV4Y2VwdGlvbiwgc2VsZikuX19pbml0X18obXNnKQogICAgc2VsZi5yZXN1bHQgPSByZXN1bHQKlawBAQAAAAAAlH2UKIwXRGF0YWZsb3dSdW5uZXIuX19pbml0X1+UalYxAQBLeEt8h5SMIkRhdGFmbG93UnVubmVyLmlzX2ZuYXBpX2NvbXBhdGlibGWUalYxAQBLfkt/h5SMJERhdGFmbG93UnVubmVyLl9nZXRfdW5pcXVlX3N0ZXBfbmFtZZRqVjEBAEuBS4OHlIwmRGF0YWZsb3dSdW5uZXIucG9sbF9mb3Jfam9iX2NvbXBsZXRpb26UalYxAQBLhUvwh5SMWkRhdGFmbG93UnVubmVyLmdyb3VwX2J5X2tleV9pbnB1dF92aXNpdG9yLkdyb3VwQnlLZXlJbnB1dFZpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybZRqVjEBAEv+S/+HlIxQRGF0YWZsb3dSdW5uZXIuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3IuR3JvdXBCeUtleUlucHV0VmlzaXRvci52aXNpdF90cmFuc2Zvcm2UalYxAQBNAQFNEQGHlIxARGF0YWZsb3dSdW5uZXIuZ3JvdXBfYnlfa2V5X2lucHV0X3Zpc2l0b3IuR3JvdXBCeUtleUlucHV0VmlzaXRvcpRqXTEBAEv3TREBh5SMKURhdGFmbG93UnVubmVyLmdyb3VwX2J5X2tleV9pbnB1dF92aXNpdG9ylGpWMQEAS/JNEwGHlIw6RGF0YWZsb3dSdW5uZXIuX3NldF9wZG9uZV92aXNpdG9yLlNldFBEb25lVmlzaXRvci5fX2luaXRfX5RqVjEBAE0bAU0cAYeUjENEYXRhZmxvd1J1bm5lci5fc2V0X3Bkb25lX3Zpc2l0b3IuU2V0UERvbmVWaXNpdG9yLl9tYXliZV9maXhfb3V0cHV0lGpWMQEATR4BTSMBh5SMS0RhdGFmbG93UnVubmVyLl9zZXRfcGRvbmVfdmlzaXRvci5TZXRQRG9uZVZpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybZRqVjEBAE0lAU0mAYeUjEFEYXRhZmxvd1J1bm5lci5fc2V0X3Bkb25lX3Zpc2l0b3IuU2V0UERvbmVWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqVjEBAE0oAU0pAYeUjDFEYXRhZmxvd1J1bm5lci5fc2V0X3Bkb25lX3Zpc2l0b3IuU2V0UERvbmVWaXNpdG9ylGpdMQEATRoBTSkBh5SMIURhdGFmbG93UnVubmVyLl9zZXRfcGRvbmVfdmlzaXRvcpRqVjEBAE0VAU0rAYeUjEJEYXRhZmxvd1J1bm5lci5zaWRlX2lucHV0X3Zpc2l0b3IuU2lkZUlucHV0VmlzaXRvci52aXNpdF90cmFuc2Zvcm2UalYxAQBNOgFNaAGHlIwyRGF0YWZsb3dSdW5uZXIuc2lkZV9pbnB1dF92aXNpdG9yLlNpZGVJbnB1dFZpc2l0b3KUal0xAQBNNAFNaAGHlIwhRGF0YWZsb3dSdW5uZXIuc2lkZV9pbnB1dF92aXNpdG9ylGpWMQEATS0BTWoBh5SMSERhdGFmbG93UnVubmVyLmZsYXR0ZW5faW5wdXRfdmlzaXRvci5GbGF0dGVuSW5wdXRWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqVjEBAE11AU18AYeUjDhEYXRhZmxvd1J1bm5lci5mbGF0dGVuX2lucHV0X3Zpc2l0b3IuRmxhdHRlbklucHV0VmlzaXRvcpRqXTEBAE1xAU18AYeUjCREYXRhZmxvd1J1bm5lci5mbGF0dGVuX2lucHV0X3Zpc2l0b3KUalYxAQBNbAFNfgGHlIw0RGF0YWZsb3dSdW5uZXIuX2NoZWNrX2Zvcl91bnN1cHBvcnRlZF9mbmFwaV9mZWF0dXJlc5RqVjEBAE2AAU2RAYeUjBtEYXRhZmxvd1J1bm5lci5ydW5fcGlwZWxpbmWUalYxAQBNkwFNKgKHlIwrRGF0YWZsb3dSdW5uZXIuX2dldF90eXBlaGludF9iYXNlZF9lbmNvZGluZ5RqVjEBAE0sAk0vAoeUjBlEYXRhZmxvd1J1bm5lci5fZ2V0X2NvZGVylGpWMQEATTECTTcCh5SMIkRhdGFmbG93UnVubmVyLl9nZXRfY2xvdWRfZW5jb2RpbmeUalYxAQBNOQJNPgKHlIwnRGF0YWZsb3dSdW5uZXIuX2dldF9zaWRlX2lucHV0X2VuY29kaW5nlGpWMQEATUACTVECh5SMKERhdGFmbG93UnVubmVyLl9nZXRfZW5jb2RlZF9vdXRwdXRfY29kZXKUalYxAQBNUwJNaQKHlIwYRGF0YWZsb3dSdW5uZXIuX2FkZF9zdGVwlGpWMQEATWsCTY0Ch5SMIkRhdGFmbG93UnVubmVyLl9hZGRfc2luZ2xldG9uX3N0ZXCUalYxAQBNjwJNsgKHlIwaRGF0YWZsb3dSdW5uZXIucnVuX0ltcHVsc2WUalYxAQBNtAJN3AKHlIwaRGF0YWZsb3dSdW5uZXIucnVuX0ZsYXR0ZW6UalYxAQBN3gJN8gKHlIwkRGF0YWZsb3dSdW5uZXIuYXBwbHlfV3JpdGVUb0JpZ1F1ZXJ5lGpWMQEATfQCTRQDh5SMH0RhdGFmbG93UnVubmVyLmFwcGx5X0dyb3VwQnlLZXmUalYxAQBNFgNNKAOHlIwdRGF0YWZsb3dSdW5uZXIucnVuX0dyb3VwQnlLZXmUalYxAQBNKgNNQgOHlIwsRGF0YWZsb3dSdW5uZXIucnVuX1J1bm5lckFQSVBUcmFuc2Zvcm1Ib2xkZXKUalYxAQBNRANNVQOHlIwYRGF0YWZsb3dSdW5uZXIucnVuX1BhckRvlGpWMQEATVcDTfMDh5SMHURhdGFmbG93UnVubmVyLl9wYXJkb19mbl9kYXRhlGpWMQEATfUDTQAEh5SMIkRhdGFmbG93UnVubmVyLmFwcGx5X0NvbWJpbmVWYWx1ZXOUalYxAQBNAgRNAwSHlIwgRGF0YWZsb3dSdW5uZXIucnVuX0NvbWJpbmVWYWx1ZXOUalYxAQBNBQRNOASHlIwZRGF0YWZsb3dSdW5uZXIuYXBwbHlfUmVhZJRqVjEBAE06BE0/BIeUjBdEYXRhZmxvd1J1bm5lci5ydW5fUmVhZJRqVjEBAE1BBE2/BIeUjB9EYXRhZmxvd1J1bm5lci5ydW5fX05hdGl2ZVdyaXRllGpWMQEATcEETR8Fh5SMHURhdGFmbG93UnVubmVyLnJ1bl9UZXN0U3RyZWFtlGpWMQEATSEFTUsFh5SMK0RhdGFmbG93UnVubmVyLnNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3mUalYxAQBNUQVNWQWHlIwtRGF0YWZsb3dSdW5uZXIuZGVzZXJpYWxpemVfd2luZG93aW5nX3N0cmF0ZWd5lGpWMQEATVsFTWUFh5SMKERhdGFmbG93UnVubmVyLmJ5dGVfYXJyYXlfdG9fanNvbl9zdHJpbmeUalYxAQBNZwVNagWHlIwoRGF0YWZsb3dSdW5uZXIuanNvbl9zdHJpbmdfdG9fYnl0ZV9hcnJheZRqVjEBAE1sBU1vBYeUjA5EYXRhZmxvd1J1bm5lcpRqXTEBAEtUTW8Fh5SMIF9EYXRhZmxvd1NpZGVJbnB1dC5fdmlld19vcHRpb25zlGpWMQEATXQFTXcFh5SMI19EYXRhZmxvd1NpZGVJbnB1dC5fc2lkZV9pbnB1dF9kYXRhlGpWMQEATXkFTXoFh5SMEl9EYXRhZmxvd1NpZGVJbnB1dJRqXTEBAE1yBU16BYeUjC1fRGF0YWZsb3dJdGVyYWJsZUFzTXVsdGltYXBTaWRlSW5wdXQuX19pbml0X1+UalYxAQBNfwVNiAWHlIwkX0RhdGFmbG93SXRlcmFibGVBc011bHRpbWFwU2lkZUlucHV0lGpdMQEATX0FTYgFh5SMI19EYXRhZmxvd0l0ZXJhYmxlU2lkZUlucHV0Ll9faW5pdF9flGpWMQEATY0FTZYFh5SMGl9EYXRhZmxvd0l0ZXJhYmxlU2lkZUlucHV0lGpdMQEATYsFTZYFh5SMI19EYXRhZmxvd011bHRpbWFwU2lkZUlucHV0Ll9faW5pdF9flGpWMQEATZsFTaQFh5SMGl9EYXRhZmxvd011bHRpbWFwU2lkZUlucHV0lGpdMQEATZkFTaQFh5SMH0RhdGFmbG93UGlwZWxpbmVSZXN1bHQuX19pbml0X1+UalYxAQBNqQVNswWHlIwiRGF0YWZsb3dQaXBlbGluZVJlc3VsdC5fdXBkYXRlX2pvYpRqVjEBAE21BU25BYeUjB1EYXRhZmxvd1BpcGVsaW5lUmVzdWx0LmpvYl9pZJRqVjEBAE27BU28BYeUjB5EYXRhZmxvd1BpcGVsaW5lUmVzdWx0Lm1ldHJpY3OUalYxAQBNvgVNvwWHlIweRGF0YWZsb3dQaXBlbGluZVJlc3VsdC5oYXNfam9ilGpWMQEATcEFTcMFh5SMJURhdGFmbG93UGlwZWxpbmVSZXN1bHQuX2dldF9qb2Jfc3RhdGWUalYxAQBNxQVN3AWHlIwcRGF0YWZsb3dQaXBlbGluZVJlc3VsdC5zdGF0ZZRqVjEBAE3eBU3qBYeUjCtEYXRhZmxvd1BpcGVsaW5lUmVzdWx0LmlzX2luX3Rlcm1pbmFsX3N0YXRllGpWMQEATewFTfAFh5SMKERhdGFmbG93UGlwZWxpbmVSZXN1bHQud2FpdF91bnRpbF9maW5pc2iUalYxAQBN8gVNEAaHlIwdRGF0YWZsb3dQaXBlbGluZVJlc3VsdC5jYW5jZWyUalYxAQBNEgZNJgaHlIweRGF0YWZsb3dQaXBlbGluZVJlc3VsdC5fX3N0cl9flGpWMQEATSgGTSkGh5SMH0RhdGFmbG93UGlwZWxpbmVSZXN1bHQuX19yZXByX1+UalYxAQBNKwZNLAaHlIwWRGF0YWZsb3dQaXBlbGluZVJlc3VsdJRqXTEBAE2nBU0sBoeUjCFEYXRhZmxvd1J1bnRpbWVFeGNlcHRpb24uX19pbml0X1+UalYxAQBNMQZNMwaHlIwYRGF0YWZsb3dSdW50aW1lRXhjZXB0aW9ulGpdMQEATS8GTTMGh5R1fZQojA5EYXRhZmxvd1J1bm5lcpRqDgQAAIwiRGF0YWZsb3dSdW5uZXIuaXNfZm5hcGlfY29tcGF0aWJsZZRqDgQAAIwmRGF0YWZsb3dSdW5uZXIucG9sbF9mb3Jfam9iX2NvbXBsZXRpb26Uag4EAACMKURhdGFmbG93UnVubmVyLmdyb3VwX2J5X2tleV9pbnB1dF92aXNpdG9ylGoOBAAAjCFEYXRhZmxvd1J1bm5lci5zaWRlX2lucHV0X3Zpc2l0b3KUag4EAACMJERhdGFmbG93UnVubmVyLmZsYXR0ZW5faW5wdXRfdmlzaXRvcpRqDgQAAIwbRGF0YWZsb3dSdW5uZXIucnVuX3BpcGVsaW5llGoOBAAAjBpEYXRhZmxvd1J1bm5lci5ydW5fSW1wdWxzZZRqDgQAAIwaRGF0YWZsb3dSdW5uZXIucnVuX0ZsYXR0ZW6Uag4EAACMJERhdGFmbG93UnVubmVyLmFwcGx5X1dyaXRlVG9CaWdRdWVyeZRqDgQAAIwfRGF0YWZsb3dSdW5uZXIuYXBwbHlfR3JvdXBCeUtleZRqDgQAAIwdRGF0YWZsb3dSdW5uZXIucnVuX0dyb3VwQnlLZXmUag4EAACMLERhdGFmbG93UnVubmVyLnJ1bl9SdW5uZXJBUElQVHJhbnNmb3JtSG9sZGVylGoOBAAAjBhEYXRhZmxvd1J1bm5lci5ydW5fUGFyRG+Uag4EAACMIkRhdGFmbG93UnVubmVyLmFwcGx5X0NvbWJpbmVWYWx1ZXOUag4EAACMIERhdGFmbG93UnVubmVyLnJ1bl9Db21iaW5lVmFsdWVzlGoOBAAAjBlEYXRhZmxvd1J1bm5lci5hcHBseV9SZWFklGoOBAAAjBdEYXRhZmxvd1J1bm5lci5ydW5fUmVhZJRqDgQAAIwfRGF0YWZsb3dSdW5uZXIucnVuX19OYXRpdmVXcml0ZZRqDgQAAIwdRGF0YWZsb3dSdW5uZXIucnVuX1Rlc3RTdHJlYW2Uag4EAACMK0RhdGFmbG93UnVubmVyLnNlcmlhbGl6ZV93aW5kb3dpbmdfc3RyYXRlZ3mUag4EAACMLURhdGFmbG93UnVubmVyLmRlc2VyaWFsaXplX3dpbmRvd2luZ19zdHJhdGVneZRqDgQAAIwoRGF0YWZsb3dSdW5uZXIuYnl0ZV9hcnJheV90b19qc29uX3N0cmluZ5RqDgQAAIwoRGF0YWZsb3dSdW5uZXIuanNvbl9zdHJpbmdfdG9fYnl0ZV9hcnJheZRqDgQAAHWMLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVylHSUjDFhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnB0cmFuc2Zvcm1fb3ZlcnJpZGVzlChYzBAAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUHRyYW5zZm9ybSBvdmVycmlkZXMgZm9yIERhdGFmbG93UnVubmVyLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBUcmFuc2Zvcm1PdmVycmlkZQoKCmNsYXNzIENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICIiIkEgYGBQVHJhbnNmb3JtT3ZlcnJpZGVgYCBmb3IgYGBDcmVhdGVgYCBpbiBzdHJlYW1pbmcgbW9kZS4iIiIKICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBDcmVhdGUKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5pbnRlcm5hbCBpbXBvcnQgYXBpY2xpZW50CgogICAgaWYgaXNpbnN0YW5jZShhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLCBDcmVhdGUpOgogICAgICByZXR1cm4gbm90IGFwaWNsaWVudC5fdXNlX2ZuYXBpKAogICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLm91dHB1dHNbTm9uZV0ucGlwZWxpbmUuX29wdGlvbnMpCiAgICBlbHNlOgogICAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgcHRyYW5zZm9ybSk6CiAgICAjIEltcG9ydGVkIGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IFBUcmFuc2Zvcm0KCiAgICAjIFJldHVybiBhIHdyYXBwZXIgcmF0aGVyIHRoYW4gcHRyYW5zZm9ybS5hc19yZWFkKCkgZGlyZWN0bHkgdG8KICAgICMgZW5zdXJlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9mIHRoZSBwaXBlbGluZSBzdHJ1Y3R1cmUuCiAgICBjbGFzcyBMZWdhY3lDcmVhdGUoUFRyYW5zZm9ybSk6CiAgICAgIGRlZiBleHBhbmQoc2VsZiwgcGJlZ2luKToKICAgICAgICByZXR1cm4gcGJlZ2luIHwgcHRyYW5zZm9ybS5hc19yZWFkKCkKCiAgICByZXR1cm4gTGVnYWN5Q3JlYXRlKCkud2l0aF9vdXRwdXRfdHlwZXMocHRyYW5zZm9ybS5nZXRfb3V0cHV0X3R5cGUoKSkKCgpjbGFzcyBSZWFkUFRyYW5zZm9ybU92ZXJyaWRlKFBUcmFuc2Zvcm1PdmVycmlkZSk6CiAgIiIiQSBgYFBUcmFuc2Zvcm1PdmVycmlkZWBgIGZvciBgYFJlYWQoQm91bmRlZFNvdXJjZSlgYCIiIgogIGRlZiBtYXRjaGVzKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICBmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBSZWFkCiAgICBmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgQm91bmRlZFNvdXJjZQogICAgIyBPbmx5IG92ZXJyaWRlcyBSZWFkKEJvdW5kZWRTb3VyY2UpIHRyYW5zZm9ybQogICAgaWYgKGlzaW5zdGFuY2UoYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSwgUmVhZCkgYW5kCiAgICAgICAgbm90IGdldGF0dHIoYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSwgJ292ZXJyaWRlJywgRmFsc2UpKToKICAgICAgaWYgaXNpbnN0YW5jZShhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLnNvdXJjZSwgQm91bmRlZFNvdXJjZSk6CiAgICAgICAgcmV0dXJuIFRydWUKICAgIHJldHVybiBGYWxzZQoKICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCBwdHJhbnNmb3JtKToKICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQogICAgZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCgogICAgY2xhc3MgUmVhZChpb2Jhc2UuUmVhZCk6CiAgICAgIG92ZXJyaWRlID0gVHJ1ZQoKICAgICAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgICAgIHJldHVybiBwdmFsdWUuUENvbGxlY3Rpb24oCiAgICAgICAgICAgIHNlbGYucGlwZWxpbmUsIGlzX2JvdW5kZWQ9c2VsZi5zb3VyY2UuaXNfYm91bmRlZCgpKQoKICAgIHJldHVybiBSZWFkKHB0cmFuc2Zvcm0uc291cmNlKS53aXRoX291dHB1dF90eXBlcygKICAgICAgICBwdHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCkuc2ltcGxlX291dHB1dF90eXBlKCdSZWFkJykpCgoKY2xhc3MgSnJoUmVhZFBUcmFuc2Zvcm1PdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICIiIkEgYGBQVHJhbnNmb3JtT3ZlcnJpZGVgYCBmb3IgYGBSZWFkKEJvdW5kZWRTb3VyY2UpYGAiIiIKICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgUmVhZAogICAgZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IEJvdW5kZWRTb3VyY2UKICAgIHJldHVybiAoCiAgICAgICAgaXNpbnN0YW5jZShhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLCBSZWFkKSBhbmQKICAgICAgICBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uc291cmNlLCBCb3VuZGVkU291cmNlKSkKCiAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgcHRyYW5zZm9ybSk6CiAgICBmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCBSZWFkCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgdXRpbAogICAgIyBNYWtlIHRoaXMgYSBsb2NhbCB0byBuYXJyb3cgd2hhdCdzIGNhcHR1cmVkIGluIHRoZSBjbG9zdXJlLgogICAgc291cmNlID0gcHRyYW5zZm9ybS5zb3VyY2UKCiAgICBjbGFzcyBKcmhSZWFkKGNvcmUuUFRyYW5zZm9ybSk6CiAgICAgIGRlZiBleHBhbmQoc2VsZiwgcGJlZ2luKToKICAgICAgICByZXR1cm4gKAogICAgICAgICAgICBwYmVnaW4KICAgICAgICAgICAgfCBjb3JlLkltcHVsc2UoKQogICAgICAgICAgICB8ICdTcGxpdCcgPj4gY29yZS5GbGF0TWFwKAogICAgICAgICAgICAgICAgbGFtYmRhIF86IHNvdXJjZS5zcGxpdCgKICAgICAgICAgICAgICAgICAgICBSZWFkLmdldF9kZXNpcmVkX2NodW5rX3NpemUoc291cmNlLmVzdGltYXRlX3NpemUoKSkpKQogICAgICAgICAgICB8IHV0aWwuUmVzaHVmZmxlKCkKICAgICAgICAgICAgfCAnUmVhZFNwbGl0cycgPj4gY29yZS5GbGF0TWFwKAogICAgICAgICAgICAgICAgbGFtYmRhIHNwbGl0OiBzcGxpdC5zb3VyY2UucmVhZCgKICAgICAgICAgICAgICAgICAgICBzcGxpdC5zb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXIoCiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0LnN0YXJ0X3Bvc2l0aW9uLCBzcGxpdC5zdG9wX3Bvc2l0aW9uKSkpKQoKICAgIHJldHVybiBKcmhSZWFkKCkud2l0aF9vdXRwdXRfdHlwZXMoCiAgICAgICAgcHRyYW5zZm9ybS5nZXRfdHlwZV9oaW50cygpLnNpbXBsZV9vdXRwdXRfdHlwZSgnUmVhZCcpKQqUfZQojCBDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc5RqVjEBAEsdSyeHlIxGQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0uTGVnYWN5Q3JlYXRlLmV4cGFuZJRqVjEBAEsxSzKHlIw/Q3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0uTGVnYWN5Q3JlYXRllGpdMQEASzBLMoeUjDJDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqVjEBAEspSzSHlIwYQ3JlYXRlUFRyYW5zZm9ybU92ZXJyaWRllGpdMQEASxtLNIeUjB5SZWFkUFRyYW5zZm9ybU92ZXJyaWRlLm1hdGNoZXOUalYxAQBLOUtBh5SMPFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybS5SZWFkLmV4cGFuZJRqVjEBAEtKS0yHlIw1UmVhZFBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtLlJlYWSUal0xAQBLR0tMh5SMMFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqVjEBAEtDS0+HlIwWUmVhZFBUcmFuc2Zvcm1PdmVycmlkZZRqXTEBAEs3S0+HlIwhSnJoUmVhZFBUcmFuc2Zvcm1PdmVycmlkZS5tYXRjaGVzlGpWMQEAS1RLWYeUjEJKcmhSZWFkUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0uSnJoUmVhZC5leHBhbmSUalYxAQBLY0tuh5SMO0pyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybS5KcmhSZWFklGpdMQEAS2JLboeUjDNKcmhSZWFkUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm2UalYxAQBLW0txh5SMGUpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGWUal0xAQBLUktxh5R1fZQojBhDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGWUamQDAACMIENyZWF0ZVBUcmFuc2Zvcm1PdmVycmlkZS5tYXRjaGVzlGpkAwAAjDJDcmVhdGVQVHJhbnNmb3JtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqZAMAAIwWUmVhZFBUcmFuc2Zvcm1PdmVycmlkZZRqZAMAAIweUmVhZFBUcmFuc2Zvcm1PdmVycmlkZS5tYXRjaGVzlGpkAwAAjDBSZWFkUFRyYW5zZm9ybU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm2UamQDAACMGUpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGWUamQDAACMIUpyaFJlYWRQVHJhbnNmb3JtT3ZlcnJpZGUubWF0Y2hlc5RqZAMAAIwzSnJoUmVhZFBUcmFuc2Zvcm1PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtlGpkAwAAdYwsYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXKUdJSMLWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cubmF0aXZlX2lvLmlvYmFzZZQoWFAqAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkRhdGFmbG93IG5hdGl2ZSBzb3VyY2VzIGFuZCBzaW5rcy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHB0cmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IEhhc0Rpc3BsYXlEYXRhCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmRlZiBfZGljdF9wcmludGFibGVfZmllbGRzKGRpY3Rfb2JqZWN0LCBza2lwX2ZpZWxkcyk6CiAgIiIiUmV0dXJucyBhIGxpc3Qgb2Ygc3RyaW5ncyBmb3IgdGhlIGludGVyZXN0aW5nIGZpZWxkcyBvZiBhIGRpY3QuIiIiCiAgcmV0dXJuIFsKICAgICAgJyVzPSVyJyAlIChuYW1lLCB2YWx1ZSkgZm9yIG5hbWUsCiAgICAgIHZhbHVlIGluIGRpY3Rfb2JqZWN0Lml0ZW1zKCkKICAgICAgIyB3YW50IHRvIG91dHB1dCB2YWx1ZSAwIGJ1dCBub3QgTm9uZSBub3IgW10KICAgICAgaWYgKHZhbHVlIG9yIHZhbHVlID09IDApIGFuZCBuYW1lIG5vdCBpbiBza2lwX2ZpZWxkcwogIF0KCgpfbWlub3JfZmllbGRzID0gWwogICAgJ2NvZGVyJywKICAgICdrZXlfY29kZXInLAogICAgJ3ZhbHVlX2NvZGVyJywKICAgICdjb25maWdfYnl0ZXMnLAogICAgJ2VsZW1lbnRzJywKICAgICdhcHBlbmRfdHJhaWxpbmdfbmV3bGluZXMnLAogICAgJ3N0cmlwX3RyYWlsaW5nX25ld2xpbmVzJywKICAgICdjb21wcmVzc2lvbl90eXBlJwpdCgoKY2xhc3MgTmF0aXZlU291cmNlKGlvYmFzZS5Tb3VyY2VCYXNlKToKICAiIiJBIHNvdXJjZSBpbXBsZW1lbnRlZCBieSBEYXRhZmxvdyBzZXJ2aWNlLgoKICBUaGlzIGNsYXNzIGlzIHRvIGJlIG9ubHkgaW5oZXJpdGVkIGJ5IHNvdXJjZXMgbmF0aXZlbHkgaW1wbGVtZW50ZWQgYnkgQ2xvdWQKICBEYXRhZmxvdyBzZXJ2aWNlLCBoZW5jZSBzaG91bGQgbm90IGJlIHN1Yi1jbGFzc2VkIGJ5IHVzZXJzLgoKICBUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCB0byBkZWZpbmUgbmV3IHNvdXJjZXMuCiAgIiIiCiAgY29kZXIgPSBOb25lICAjIHR5cGU6IE9wdGlvbmFsW2NvZGVycy5Db2Rlcl0KCiAgZGVmIHJlYWRlcihzZWxmKToKICAgICIiIlJldHVybnMgYSBOYXRpdmVTb3VyY2VSZWFkZXIgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cmNlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgaXNfYm91bmRlZChzZWxmKToKICAgIHJldHVybiBUcnVlCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnPHtuYW1lfSB7dmFsc30+Jy5mb3JtYXQoCiAgICAgICAgbmFtZT1zZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICB2YWxzPScsICcuam9pbihfZGljdF9wcmludGFibGVfZmllbGRzKHNlbGYuX19kaWN0X18sIF9taW5vcl9maWVsZHMpKSkKCgpjbGFzcyBOYXRpdmVTb3VyY2VSZWFkZXIob2JqZWN0KToKICAiIiJBIHJlYWRlciBmb3IgYSBzb3VyY2UgaW1wbGVtZW50ZWQgYnkgRGF0YWZsb3cgc2VydmljZS4iIiIKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgIiIiT3BlbnMgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIGEgcmVhZGVyIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX19leGl0X18oc2VsZiwgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgdHJhY2ViYWNrKToKICAgICIiIkNsZWFucyB1cCBhZnRlciBhIHJlYWRlciBleGVjdXRlZC4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgIiIiUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCB0aGUgcmVjb3JkcyBvZiB0aGUgc291cmNlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAcHJvcGVydHkKICBkZWYgcmV0dXJuc193aW5kb3dlZF92YWx1ZXMoc2VsZik6CiAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhpcyByZWFkZXIgcmV0dXJucyB3aW5kb3dlZCB2YWx1ZXMuIiIiCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIGdldF9wcm9ncmVzcyhzZWxmKToKICAgICIiIlJldHVybnMgYSByZXByZXNlbnRhdGlvbiBvZiBob3cgZmFyIHRoZSByZWFkZXIgaGFzIHJlYWQuCgogICAgUmV0dXJuczoKICAgICAgQSBTb3VyY2VSZWFkZXJQcm9ncmVzcyBvYmplY3QgdGhhdCBnaXZlcyB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUKICAgICAgcmVhZGVyLgogICAgIiIiCgogIGRlZiByZXF1ZXN0X2R5bmFtaWNfc3BsaXQoc2VsZiwgZHluYW1pY19zcGxpdF9yZXF1ZXN0KToKICAgICIiIkF0dGVtcHRzIHRvIHNwbGl0IHRoZSBpbnB1dCBpbiB0d28gcGFydHMuCgogICAgVGhlIHR3byBwYXJ0cyBhcmUgbmFtZWQgdGhlICJwcmltYXJ5IiBwYXJ0IGFuZCB0aGUgInJlc2lkdWFsIiBwYXJ0LiBUaGUKICAgIGN1cnJlbnQgJ05hdGl2ZVNvdXJjZVJlYWRlcicga2VlcHMgcHJvY2Vzc2luZyB0aGUgcHJpbWFyeSBwYXJ0LCB3aGlsZSB0aGUKICAgIHJlc2lkdWFsIHBhcnQgd2lsbCBiZSBwcm9jZXNzZWQgZWxzZXdoZXJlIChlLmcuIHBlcmhhcHMgb24gYSBkaWZmZXJlbnQKICAgIHdvcmtlcikuCgogICAgVGhlIHByaW1hcnkgYW5kIHJlc2lkdWFsIHBhcnRzLCBpZiBjb25jYXRlbmF0ZWQsIG11c3QgcmVwcmVzZW50IHRoZQogICAgc2FtZSBpbnB1dCBhcyB0aGUgY3VycmVudCBpbnB1dCBvZiB0aGlzICdOYXRpdmVTb3VyY2VSZWFkZXInIGJlZm9yZSB0aGlzCiAgICBjYWxsLgoKICAgIFRoZSBib3VuZGFyeSBiZXR3ZWVuIHRoZSBwcmltYXJ5IHBhcnQgYW5kIHRoZSByZXNpZHVhbCBwYXJ0IGlzCiAgICBzcGVjaWZpZWQgaW4gYSBmcmFtZXdvcmstc3BlY2lmaWMgd2F5IHVzaW5nICdEeW5hbWljU3BsaXRSZXF1ZXN0JyBlLmcuLAogICAgaWYgdGhlIGZyYW1ld29yayBzdXBwb3J0cyB0aGUgbm90aW9uIG9mIHBvc2l0aW9ucywgaXQgbWlnaHQgYmUgYQogICAgcG9zaXRpb24gYXQgd2hpY2ggdGhlIGlucHV0IGlzIGFza2VkIHRvIHNwbGl0IGl0c2VsZiAod2hpY2ggaXMgbm90CiAgICBuZWNlc3NhcmlseSB0aGUgc2FtZSBwb3NpdGlvbiBhdCB3aGljaCBpdCAqd2lsbCogc3BsaXQgaXRzZWxmKTsgaXQKICAgIG1pZ2h0IGJlIGFuIGFwcHJveGltYXRlIGZyYWN0aW9uIG9mIGlucHV0LCBvciBzb21ldGhpbmcgZWxzZS4KCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSAnRHluYW1pY1NwbGl0UmVzdWx0Jywgd2hpY2ggZW5jb2RlcywgaW4gYQogICAgZnJhbWV3b3JrLXNwZWNpZmljIHdheSwgdGhlIGluZm9ybWF0aW9uIHN1ZmZpY2llbnQgdG8gY29uc3RydWN0IGEKICAgIGRlc2NyaXB0aW9uIG9mIHRoZSByZXN1bHRpbmcgcHJpbWFyeSBhbmQgcmVzaWR1YWwgaW5wdXRzLiBGb3IgZXhhbXBsZSwgaXQKICAgIG1pZ2h0LCBhZ2FpbiwgYmUgYSBwb3NpdGlvbiBkZW1hcmNhdGluZyB0aGVzZSBwYXJ0cywgb3IgaXQgbWlnaHQgYmUgYSBwYWlyCiAgICBvZiBmdWxseS1zcGVjaWZpZWQgaW5wdXQgZGVzY3JpcHRpb25zLCBvciBzb21ldGhpbmcgZWxzZS4KCiAgICBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byAncmVxdWVzdF9keW5hbWljX3NwbGl0KCknLCBzdWJzZXF1ZW50IGNhbGxzCiAgICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIG5ldyBwcmltYXJ5LgoKICAgIEFyZ3M6CiAgICAgIGR5bmFtaWNfc3BsaXRfcmVxdWVzdDogQSAnRHluYW1pY1NwbGl0UmVxdWVzdCcgZGVzY3JpYmluZyB0aGUgc3BsaXQKICAgICAgICByZXF1ZXN0LgoKICAgIFJldHVybnM6CiAgICAgICdOb25lJyBpZiB0aGUgJ0R5bmFtaWNTcGxpdFJlcXVlc3QnIGNhbm5vdCBiZSBob25vcmVkIChpbiB0aGF0CiAgICAgIGNhc2UgdGhlIGlucHV0IHJlcHJlc2VudGVkIGJ5IHRoaXMgJ05hdGl2ZVNvdXJjZVJlYWRlcicgc3RheXMgdGhlIHNhbWUpLAogICAgICBvciBhICdEeW5hbWljU3BsaXRSZXN1bHQnIGRlc2NyaWJpbmcgaG93IHRoZSBpbnB1dCB3YXMgc3BsaXQgaW50byBhCiAgICAgIHByaW1hcnkgYW5kIHJlc2lkdWFsIHBhcnQuCiAgICAiIiIKICAgIF9MT0dHRVIuZGVidWcoCiAgICAgICAgJ1NvdXJjZVJlYWRlciAlciBkb2VzIG5vdCBzdXBwb3J0IGR5bmFtaWMgc3BsaXR0aW5nLiBJZ25vcmluZyBkeW5hbWljICcKICAgICAgICAnc3BsaXQgcmVxdWVzdDogJXInLAogICAgICAgIHNlbGYsCiAgICAgICAgZHluYW1pY19zcGxpdF9yZXF1ZXN0KQoKCmNsYXNzIFJlYWRlclByb2dyZXNzKG9iamVjdCk6CiAgIiIiQSByZXByZXNlbnRhdGlvbiBvZiBob3cgZmFyIGEgTmF0aXZlU291cmNlUmVhZGVyIGhhcyByZWFkLiIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgcG9zaXRpb249Tm9uZSwKICAgICAgcGVyY2VudF9jb21wbGV0ZT1Ob25lLAogICAgICByZW1haW5pbmdfdGltZT1Ob25lLAogICAgICBjb25zdW1lZF9zcGxpdF9wb2ludHM9Tm9uZSwKICAgICAgcmVtYWluaW5nX3NwbGl0X3BvaW50cz1Ob25lKToKCiAgICBzZWxmLl9wb3NpdGlvbiA9IHBvc2l0aW9uCgogICAgaWYgcGVyY2VudF9jb21wbGV0ZSBpcyBub3QgTm9uZToKICAgICAgcGVyY2VudF9jb21wbGV0ZSA9IGZsb2F0KHBlcmNlbnRfY29tcGxldGUpCiAgICAgIGlmIHBlcmNlbnRfY29tcGxldGUgPCAwIG9yIHBlcmNlbnRfY29tcGxldGUgPiAxOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICdUaGUgcGVyY2VudF9jb21wbGV0ZSBhcmd1bWVudCB3YXMgJWYuIE11c3QgYmUgaW4gcmFuZ2UgWzAsIDFdLicgJQogICAgICAgICAgICBwZXJjZW50X2NvbXBsZXRlKQogICAgc2VsZi5fcGVyY2VudF9jb21wbGV0ZSA9IHBlcmNlbnRfY29tcGxldGUKCiAgICBzZWxmLl9yZW1haW5pbmdfdGltZSA9IHJlbWFpbmluZ190aW1lCiAgICBzZWxmLl9jb25zdW1lZF9zcGxpdF9wb2ludHMgPSBjb25zdW1lZF9zcGxpdF9wb2ludHMKICAgIHNlbGYuX3JlbWFpbmluZ19zcGxpdF9wb2ludHMgPSByZW1haW5pbmdfc3BsaXRfcG9pbnRzCgogIEBwcm9wZXJ0eQogIGRlZiBwb3NpdGlvbihzZWxmKToKICAgICIiIlJldHVybnMgcHJvZ3Jlc3MsIHJlcHJlc2VudGVkIGFzIGEgUmVhZGVyUG9zaXRpb24gb2JqZWN0LiIiIgogICAgcmV0dXJuIHNlbGYuX3Bvc2l0aW9uCgogIEBwcm9wZXJ0eQogIGRlZiBwZXJjZW50X2NvbXBsZXRlKHNlbGYpOgogICAgIiIiUmV0dXJucyBwcm9ncmVzcywgcmVwcmVzZW50ZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRvdGFsIHdvcmsuCgogICAgUHJvZ3Jlc3MgcmFuZ2UgZnJvbSAwLjAgKGJlZ2lubmluZywgbm90aGluZyBjb21wbGV0ZSkgdG8gMS4wIChlbmQgb2YgdGhlCiAgICB3b3JrIHJhbmdlLCBlbnRpcmUgV29ya0l0ZW0gY29tcGxldGUpLgoKICAgIFJldHVybnM6CiAgICAgIFByb2dyZXNzIHJlcHJlc2VudGVkIGFzIGEgcGVyY2VudGFnZSBvZiB0b3RhbCB3b3JrLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGVyY2VudF9jb21wbGV0ZQoKICBAcHJvcGVydHkKICBkZWYgcmVtYWluaW5nX3RpbWUoc2VsZik6CiAgICAiIiJSZXR1cm5zIHByb2dyZXNzLCByZXByZXNlbnRlZCBhcyBhbiBlc3RpbWF0ZWQgdGltZSByZW1haW5pbmcuIiIiCiAgICByZXR1cm4gc2VsZi5fcmVtYWluaW5nX3RpbWUKCiAgQHByb3BlcnR5CiAgZGVmIGNvbnN1bWVkX3NwbGl0X3BvaW50cyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9jb25zdW1lZF9zcGxpdF9wb2ludHMKCiAgQHByb3BlcnR5CiAgZGVmIHJlbWFpbmluZ19zcGxpdF9wb2ludHMoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fcmVtYWluaW5nX3NwbGl0X3BvaW50cwoKCmNsYXNzIFJlYWRlclBvc2l0aW9uKG9iamVjdCk6CiAgIiIiQSByZXByZXNlbnRhdGlvbiBvZiBwb3NpdGlvbiBpbiBhbiBpdGVyYXRpb24gb2YgYSAnTmF0aXZlU291cmNlUmVhZGVyJy4iIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGVuZD1Ob25lLAogICAgICBrZXk9Tm9uZSwKICAgICAgYnl0ZV9vZmZzZXQ9Tm9uZSwKICAgICAgcmVjb3JkX2luZGV4PU5vbmUsCiAgICAgIHNodWZmbGVfcG9zaXRpb249Tm9uZSwKICAgICAgY29uY2F0X3Bvc2l0aW9uPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgUmVhZGVyUG9zaXRpb24uCgogICAgQSBSZWFkZXJQb3NpdGlvbiBtYXkgZ2V0IGluc3RhbnRpYXRlZCBmb3Igb25lIG9mIHRoZXNlIHBvc2l0aW9uIHR5cGVzLiBPbmx5CiAgICBvbmUgb2YgdGhlc2Ugc2hvdWxkIGJlIHNwZWNpZmllZC4KCiAgICBBcmdzOgogICAgICBlbmQ6IHBvc2l0aW9uIGlzIHBhc3QgYWxsIG90aGVyIHBvc2l0aW9ucy4gRm9yIGV4YW1wbGUsIHRoaXMgbWF5IGJlIHVzZWQKICAgICAgICB0byByZXByZXNlbnQgdGhlIGVuZCBwb3NpdGlvbiBvZiBhbiB1bmJvdW5kZWQgcmFuZ2UuCiAgICAgIGtleTogcG9zaXRpb24gaXMgYSBzdHJpbmcga2V5LgogICAgICBieXRlX29mZnNldDogcG9zaXRpb24gaXMgYSBieXRlIG9mZnNldC4KICAgICAgcmVjb3JkX2luZGV4OiBwb3NpdGlvbiBpcyBhIHJlY29yZCBpbmRleAogICAgICBzaHVmZmxlX3Bvc2l0aW9uOiBwb3NpdGlvbiBpcyBhIGJhc2U2NCBlbmNvZGVkIHNodWZmbGUgcG9zaXRpb24uCiAgICAgIGNvbmNhdF9wb3NpdGlvbjogcG9zaXRpb24gaXMgYSAnQ29uY2F0UG9zaXRpb24nLgogICAgIiIiCgogICAgc2VsZi5lbmQgPSBlbmQKICAgIHNlbGYua2V5ID0ga2V5CiAgICBzZWxmLmJ5dGVfb2Zmc2V0ID0gYnl0ZV9vZmZzZXQKICAgIHNlbGYucmVjb3JkX2luZGV4ID0gcmVjb3JkX2luZGV4CiAgICBzZWxmLnNodWZmbGVfcG9zaXRpb24gPSBzaHVmZmxlX3Bvc2l0aW9uCgogICAgaWYgY29uY2F0X3Bvc2l0aW9uIGlzIG5vdCBOb25lOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb25jYXRfcG9zaXRpb24sIENvbmNhdFBvc2l0aW9uKQogICAgc2VsZi5jb25jYXRfcG9zaXRpb24gPSBjb25jYXRfcG9zaXRpb24KCgpjbGFzcyBDb25jYXRQb3NpdGlvbihvYmplY3QpOgogICIiIkEgcG9zaXRpb24gdGhhdCBlbmNhcHN1bGF0ZSBhbiBpbm5lciBwb3NpdGlvbiBhbmQgYW4gaW5kZXguCgogIFRoaXMgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIHBvc2l0aW9uIG9mIGEgc291cmNlIHRoYXQgZW5jYXBzdWxhdGUgc2V2ZXJhbAogIG90aGVyIHNvdXJjZXMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGV4LCBwb3NpdGlvbik6CiAgICAiIiJJbml0aWFsaXplcyBDb25jYXRQb3NpdGlvbi4KCiAgICBBcmdzOgogICAgICBpbmRleDogaW5kZXggb2YgdGhlIHNvdXJjZSBjdXJyZW50bHkgYmVpbmcgcmVhZC4KICAgICAgcG9zaXRpb246IGlubmVyIHBvc2l0aW9uIHdpdGhpbiB0aGUgc291cmNlIGN1cnJlbnRseSBiZWluZyByZWFkLgogICAgIiIiCgogICAgaWYgcG9zaXRpb24gaXMgbm90IE5vbmU6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBvc2l0aW9uLCBSZWFkZXJQb3NpdGlvbikKICAgIHNlbGYuaW5kZXggPSBpbmRleAogICAgc2VsZi5wb3NpdGlvbiA9IHBvc2l0aW9uCgoKY2xhc3MgRHluYW1pY1NwbGl0UmVxdWVzdChvYmplY3QpOgogICIiIlNwZWNpZmllcyBob3cgJ05hdGl2ZVNvdXJjZVJlYWRlci5yZXF1ZXN0X2R5bmFtaWNfc3BsaXQnIHNob3VsZCBzcGxpdC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcHJvZ3Jlc3MpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvZ3Jlc3MsIFJlYWRlclByb2dyZXNzKQogICAgc2VsZi5wcm9ncmVzcyA9IHByb2dyZXNzCgoKY2xhc3MgRHluYW1pY1NwbGl0UmVzdWx0KG9iamVjdCk6CiAgcGFzcwoKCmNsYXNzIER5bmFtaWNTcGxpdFJlc3VsdFdpdGhQb3NpdGlvbihEeW5hbWljU3BsaXRSZXN1bHQpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdG9wX3Bvc2l0aW9uKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHN0b3BfcG9zaXRpb24sIFJlYWRlclBvc2l0aW9uKQogICAgc2VsZi5zdG9wX3Bvc2l0aW9uID0gc3RvcF9wb3NpdGlvbgoKCmNsYXNzIE5hdGl2ZVNpbmsoSGFzRGlzcGxheURhdGEpOgogICIiIkEgc2luayBpbXBsZW1lbnRlZCBieSBEYXRhZmxvdyBzZXJ2aWNlLgoKICBUaGlzIGNsYXNzIGlzIHRvIGJlIG9ubHkgaW5oZXJpdGVkIGJ5IHNpbmtzIG5hdGl2ZWx5IGltcGxlbWVudGVkIGJ5IENsb3VkCiAgRGF0YWZsb3cgc2VydmljZSwgaGVuY2Ugc2hvdWxkIG5vdCBiZSBzdWItY2xhc3NlZCBieSB1c2Vycy4KICAiIiIKICBkZWYgd3JpdGVyKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIFNpbmtXcml0ZXIgZm9yIHRoaXMgc291cmNlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJzx7bmFtZX0ge3ZhbHN9PicuZm9ybWF0KAogICAgICAgIG5hbWU9c2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgdmFscz1fZGljdF9wcmludGFibGVfZmllbGRzKHNlbGYuX19kaWN0X18sIF9taW5vcl9maWVsZHMpKQoKCmNsYXNzIE5hdGl2ZVNpbmtXcml0ZXIob2JqZWN0KToKICAiIiJBIHdyaXRlciBmb3IgYSBzaW5rIGltcGxlbWVudGVkIGJ5IERhdGFmbG93IHNlcnZpY2UuIiIiCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICIiIk9wZW5zIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZvciBhIHdyaXRlciB0byBmdW5jdGlvbiBwcm9wZXJseS4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUsIHRyYWNlYmFjayk6CiAgICAiIiJDbGVhbnMgdXAgYWZ0ZXIgYSB3cml0ZXIgZXhlY3V0ZWQuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBwcm9wZXJ0eQogIGRlZiB0YWtlc193aW5kb3dlZF92YWx1ZXMoc2VsZik6CiAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhpcyB3cml0ZXIgdGFrZXMgd2luZG93ZWQgdmFsdWVzLiIiIgogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBXcml0ZShzZWxmLCBvKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICAgIiIiV3JpdGVzIGEgcmVjb3JkIHRvIHRoZSBzaW5rIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHdyaXRlci4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBfTmF0aXZlV3JpdGUocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAiIiJBIFBUcmFuc2Zvcm0gZm9yIHdyaXRpbmcgdG8gYSBEYXRhZmxvdyBuYXRpdmUgc2luay4KCiAgVGhlc2UgYXJlIHNpbmtzIHRoYXQgYXJlIGltcGxlbWVudGVkIG5hdGl2ZWx5IGJ5IHRoZSBEYXRhZmxvdyBzZXJ2aWNlCiAgYW5kIGhlbmNlIHNob3VsZCBub3QgYmUgdXBkYXRlZCBieSB1c2Vycy4gVGhlc2Ugc2lua3MgYXJlIHByb2Nlc3NlZAogIHVzaW5nIGEgRGF0YWZsb3cgbmF0aXZlIHdyaXRlIHRyYW5zZm9ybS4KCiAgQXBwbHlpbmcgdGhpcyB0cmFuc2Zvcm0gcmVzdWx0cyBpbiBhIGBgcHZhbHVlLlBEb25lYGAuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNpbmspOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBXcml0ZSB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgc2luazogU2luayB0byB1c2UgZm9yIHRoZSB3cml0ZQogICAgIiIiCiAgICBzdXBlcihfTmF0aXZlV3JpdGUsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuc2luayA9IHNpbmsKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBzZWxmLl9jaGVja19wY29sbGVjdGlvbihwY29sbCkKICAgIHJldHVybiBwdmFsdWUuUERvbmUocGNvbGwucGlwZWxpbmUpCpR9lCiMFl9kaWN0X3ByaW50YWJsZV9maWVsZHOUalYxAQBLK0syh5SME05hdGl2ZVNvdXJjZS5yZWFkZXKUalYxAQBLS0tNh5SMF05hdGl2ZVNvdXJjZS5pc19ib3VuZGVklGpWMQEAS09LUIeUjBVOYXRpdmVTb3VyY2UuX19yZXByX1+UalYxAQBLUktVh5SMDE5hdGl2ZVNvdXJjZZRqXTEBAEtBS1WHlIwcTmF0aXZlU291cmNlUmVhZGVyLl9fZW50ZXJfX5RqVjEBAEtaS1yHlIwbTmF0aXZlU291cmNlUmVhZGVyLl9fZXhpdF9flGpWMQEAS15LYIeUjBtOYXRpdmVTb3VyY2VSZWFkZXIuX19pdGVyX1+UalYxAQBLYktkh5SMKk5hdGl2ZVNvdXJjZVJlYWRlci5yZXR1cm5zX3dpbmRvd2VkX3ZhbHVlc5RqVjEBAEtmS2mHlIwfTmF0aXZlU291cmNlUmVhZGVyLmdldF9wcm9ncmVzc5RqVjEBAEtrS3GHlIwoTmF0aXZlU291cmNlUmVhZGVyLnJlcXVlc3RfZHluYW1pY19zcGxpdJRqVjEBAEtzS52HlIwSTmF0aXZlU291cmNlUmVhZGVylGpdMQEAS1hLnYeUjBdSZWFkZXJQcm9ncmVzcy5fX2luaXRfX5RqVjEBAEuiS7aHlIwXUmVhZGVyUHJvZ3Jlc3MucG9zaXRpb26UalYxAQBLuEu7h5SMH1JlYWRlclByb2dyZXNzLnBlcmNlbnRfY29tcGxldGWUalYxAQBLvUvHh5SMHVJlYWRlclByb2dyZXNzLnJlbWFpbmluZ190aW1llGpWMQEAS8lLzIeUjCRSZWFkZXJQcm9ncmVzcy5jb25zdW1lZF9zcGxpdF9wb2ludHOUalYxAQBLzkvQh5SMJVJlYWRlclByb2dyZXNzLnJlbWFpbmluZ19zcGxpdF9wb2ludHOUalYxAQBL0kvUh5SMDlJlYWRlclByb2dyZXNzlGpdMQEAS6BL1IeUjBdSZWFkZXJQb3NpdGlvbi5fX2luaXRfX5RqVjEBAEvZS/iHlIwOUmVhZGVyUG9zaXRpb26Ual0xAQBL10v4h5SMF0NvbmNhdFBvc2l0aW9uLl9faW5pdF9flGpWMQEATQEBTQwBh5SMDkNvbmNhdFBvc2l0aW9ulGpdMQEAS/tNDAGHlIwcRHluYW1pY1NwbGl0UmVxdWVzdC5fX2luaXRfX5RqVjEBAE0SAU0UAYeUjBNEeW5hbWljU3BsaXRSZXF1ZXN0lGpdMQEATQ8BTRQBh5SMEkR5bmFtaWNTcGxpdFJlc3VsdJRqXTEBAE0XAU0YAYeUjCdEeW5hbWljU3BsaXRSZXN1bHRXaXRoUG9zaXRpb24uX19pbml0X1+UalYxAQBNHAFNHgGHlIweRHluYW1pY1NwbGl0UmVzdWx0V2l0aFBvc2l0aW9ulGpdMQEATRsBTR4Bh5SMEU5hdGl2ZVNpbmsud3JpdGVylGpWMQEATScBTSkBh5SME05hdGl2ZVNpbmsuX19yZXByX1+UalYxAQBNKwFNLgGHlIwKTmF0aXZlU2lua5RqXTEBAE0hAU0uAYeUjBpOYXRpdmVTaW5rV3JpdGVyLl9fZW50ZXJfX5RqVjEBAE0zAU01AYeUjBlOYXRpdmVTaW5rV3JpdGVyLl9fZXhpdF9flGpWMQEATTcBTTkBh5SMJk5hdGl2ZVNpbmtXcml0ZXIudGFrZXNfd2luZG93ZWRfdmFsdWVzlGpWMQEATTsBTT4Bh5SMFk5hdGl2ZVNpbmtXcml0ZXIuV3JpdGWUalYxAQBNQAFNQgGHlIwQTmF0aXZlU2lua1dyaXRlcpRqXTEBAE0xAU1CAYeUjBVfTmF0aXZlV3JpdGUuX19pbml0X1+UalYxAQBNTgFNVQGHlIwTX05hdGl2ZVdyaXRlLmV4cGFuZJRqVjEBAE1XAU1ZAYeUjAxfTmF0aXZlV3JpdGWUal0xAQBNRQFNWQGHlHV9lCiMDE5hdGl2ZVNvdXJjZZRq5gMAAIwTTmF0aXZlU291cmNlLnJlYWRlcpRq5gMAAIwXTmF0aXZlU291cmNlLmlzX2JvdW5kZWSUauYDAACMEk5hdGl2ZVNvdXJjZVJlYWRlcpRq5gMAAIwfTmF0aXZlU291cmNlUmVhZGVyLmdldF9wcm9ncmVzc5Rq5gMAAIwoTmF0aXZlU291cmNlUmVhZGVyLnJlcXVlc3RfZHluYW1pY19zcGxpdJRq5gMAAIwOUmVhZGVyUHJvZ3Jlc3OUauYDAACMDlJlYWRlclBvc2l0aW9ulGrmAwAAjA5Db25jYXRQb3NpdGlvbpRq5gMAAIwTRHluYW1pY1NwbGl0UmVxdWVzdJRq5gMAAIwSRHluYW1pY1NwbGl0UmVzdWx0lGrmAwAAjB5EeW5hbWljU3BsaXRSZXN1bHRXaXRoUG9zaXRpb26UauYDAACMCk5hdGl2ZVNpbmuUauYDAACMEU5hdGl2ZVNpbmsud3JpdGVylGrmAwAAjBBOYXRpdmVTaW5rV3JpdGVylGrmAwAAjBZOYXRpdmVTaW5rV3JpdGVyLldyaXRllGrmAwAAdYwtYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNllHSUjDFhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVylChYpg8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiV3JhcHBlciBvZiBCZWFtIHJ1bm5lcnMgdGhhdCdzIGJ1aWx0IGZvciBydW5uaW5nIGFuZCB2ZXJpZnlpbmcgZTJlIHRlc3RzLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRpbWUKCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IEdvb2dsZUNsb3VkT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBUZXN0T3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuZGF0YWZsb3dfcnVubmVyIGltcG9ydCBEYXRhZmxvd1J1bm5lcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVN0YXRlCgpfX2FsbF9fID0gWydUZXN0RGF0YWZsb3dSdW5uZXInXQoKIyBEYXRhZmxvdyB0YWtlIHVwIHRvIDEwbWlucyBmb3IgdGhlIGxvbmcgdGFpbCBvZiBzdGFydGluZy9zdG9wcGluZyB3b3JrZXIKIyBwb29sLgpXQUlUX0lOX1NUQVRFX1RJTUVPVVQgPSAxMCAqIDYwCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgVGVzdERhdGFmbG93UnVubmVyKERhdGFmbG93UnVubmVyKToKICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYsIHBpcGVsaW5lLCBvcHRpb25zKToKICAgICIiIkV4ZWN1dGUgdGVzdCBwaXBlbGluZSBhbmQgdmVyaWZ5IHRlc3QgbWF0Y2hlciIiIgogICAgdGVzdF9vcHRpb25zID0gb3B0aW9ucy52aWV3X2FzKFRlc3RPcHRpb25zKQogICAgb25fc3VjY2Vzc19tYXRjaGVyID0gdGVzdF9vcHRpb25zLm9uX3N1Y2Nlc3NfbWF0Y2hlcgogICAgd2FpdF9kdXJhdGlvbiA9IHRlc3Rfb3B0aW9ucy53YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbgogICAgaXNfc3RyZWFtaW5nID0gb3B0aW9ucy52aWV3X2FzKFN0YW5kYXJkT3B0aW9ucykuc3RyZWFtaW5nCgogICAgIyBbQkVBTS0xODg5XSBEbyBub3Qgc2VuZCB0aGlzIHRvIHJlbW90ZSB3b3JrZXJzIGFsc28sIHRoZXJlIGlzIG5vIG5lZWQgdG8KICAgICMgc2VuZCB0aGlzIG9wdGlvbiB0byByZW1vdGUgZXhlY3V0b3JzLgogICAgdGVzdF9vcHRpb25zLm9uX3N1Y2Nlc3NfbWF0Y2hlciA9IE5vbmUKCiAgICBzZWxmLnJlc3VsdCA9IHN1cGVyKFRlc3REYXRhZmxvd1J1bm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikucnVuX3BpcGVsaW5lKHBpcGVsaW5lLCBvcHRpb25zKQogICAgaWYgc2VsZi5yZXN1bHQuaGFzX2pvYjoKICAgICAgIyBUT0RPKG1hcmtmbHloaWdoKShCRUFNLTE4OTApOiBVc2UgcHJpbnQgc2luY2UgTm9zZSBkb3Nlbid0IHNob3cgbG9ncwogICAgICAjIGluIHNvbWUgY2FzZXMuCiAgICAgIHByaW50KCdXb3JrZXIgbG9nczogJXMnICUgc2VsZi5idWlsZF9jb25zb2xlX3VybChvcHRpb25zKSkKCiAgICB0cnk6CiAgICAgIHNlbGYud2FpdF91bnRpbF9pbl9zdGF0ZShQaXBlbGluZVN0YXRlLlJVTk5JTkcpCgogICAgICBpZiBpc19zdHJlYW1pbmcgYW5kIG5vdCB3YWl0X2R1cmF0aW9uOgogICAgICAgIF9MT0dHRVIud2FybmluZygnV2FpdGluZyBpbmRlZmluaXRlbHkgZm9yIHN0cmVhbWluZyBqb2IuJykKICAgICAgc2VsZi5yZXN1bHQud2FpdF91bnRpbF9maW5pc2goZHVyYXRpb249d2FpdF9kdXJhdGlvbikKCiAgICAgIGlmIG9uX3N1Y2Nlc3NfbWF0Y2hlcjoKICAgICAgICBmcm9tIGhhbWNyZXN0IGltcG9ydCBhc3NlcnRfdGhhdCBhcyBoY19hc3NlcnRfdGhhdAogICAgICAgIGhjX2Fzc2VydF90aGF0KHNlbGYucmVzdWx0LCBwaWNrbGVyLmxvYWRzKG9uX3N1Y2Nlc3NfbWF0Y2hlcikpCiAgICBmaW5hbGx5OgogICAgICBpZiBub3Qgc2VsZi5yZXN1bHQuaXNfaW5fdGVybWluYWxfc3RhdGUoKToKICAgICAgICBzZWxmLnJlc3VsdC5jYW5jZWwoKQogICAgICAgIHNlbGYud2FpdF91bnRpbF9pbl9zdGF0ZShQaXBlbGluZVN0YXRlLkNBTkNFTExFRCkKCiAgICByZXR1cm4gc2VsZi5yZXN1bHQKCiAgZGVmIGJ1aWxkX2NvbnNvbGVfdXJsKHNlbGYsIG9wdGlvbnMpOgogICAgIiIiQnVpbGQgYSBjb25zb2xlIHVybCBvZiBEYXRhZmxvdyBqb2IuIiIiCiAgICBwcm9qZWN0ID0gb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucHJvamVjdAogICAgcmVnaW9uX2lkID0gb3B0aW9ucy52aWV3X2FzKEdvb2dsZUNsb3VkT3B0aW9ucykucmVnaW9uCiAgICBqb2JfaWQgPSBzZWxmLnJlc3VsdC5qb2JfaWQoKQogICAgcmV0dXJuICgKICAgICAgICAnaHR0cHM6Ly9jb25zb2xlLmNsb3VkLmdvb2dsZS5jb20vZGF0YWZsb3cvam9icy8lcy8lcz9wcm9qZWN0PSVzJyAlCiAgICAgICAgKHJlZ2lvbl9pZCwgam9iX2lkLCBwcm9qZWN0KSkKCiAgZGVmIHdhaXRfdW50aWxfaW5fc3RhdGUoc2VsZiwgZXhwZWN0ZWRfc3RhdGUsIHRpbWVvdXQ9V0FJVF9JTl9TVEFURV9USU1FT1VUKToKICAgICIiIldhaXQgdW50aWwgRGF0YWZsb3cgcGlwZWxpbmUgZW50ZXJzIGEgY2VydGFpbiBzdGF0ZS4iIiIKICAgIGlmIG5vdCBzZWxmLnJlc3VsdC5oYXNfam9iOgogICAgICByYWlzZSBJT0Vycm9yKCdGYWlsZWQgdG8gZ2V0IHRoZSBEYXRhZmxvdyBqb2IgaWQuJykKCiAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgIHdoaWxlIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8PSB0aW1lb3V0OgogICAgICBqb2Jfc3RhdGUgPSBzZWxmLnJlc3VsdC5zdGF0ZQogICAgICBpZiBzZWxmLnJlc3VsdC5pc19pbl90ZXJtaW5hbF9zdGF0ZSgpIG9yIGpvYl9zdGF0ZSA9PSBleHBlY3RlZF9zdGF0ZToKICAgICAgICByZXR1cm4gam9iX3N0YXRlCiAgICAgIHRpbWUuc2xlZXAoNSkKCiAgICByYWlzZSBSdW50aW1lRXJyb3IoCiAgICAgICAgJ1RpbWVvdXQgYWZ0ZXIgJWQgc2Vjb25kcyB3aGlsZSB3YWl0aW5nIGZvciBqb2IgJXMgJwogICAgICAgICdlbnRlcnMgZXhwZWN0ZWQgc3RhdGUgJXMuIEN1cnJlbnQgc3RhdGUgaXMgJXMuJyAlCiAgICAgICAgKHRpbWVvdXQsIHNlbGYucmVzdWx0LmpvYl9pZCgpLCBleHBlY3RlZF9zdGF0ZSwgc2VsZi5yZXN1bHQuc3RhdGUpKQqUfZQojB9UZXN0RGF0YWZsb3dSdW5uZXIucnVuX3BpcGVsaW5llGpWMQEASy1LToeUjCRUZXN0RGF0YWZsb3dSdW5uZXIuYnVpbGRfY29uc29sZV91cmyUalYxAQBLUEtXh5SMJlRlc3REYXRhZmxvd1J1bm5lci53YWl0X3VudGlsX2luX3N0YXRllGpWMQEAS1lLaIeUjBJUZXN0RGF0YWZsb3dSdW5uZXKUal0xAQBLLEtoh5R1fZQojBJUZXN0RGF0YWZsb3dSdW5uZXKUagAEAACMH1Rlc3REYXRhZmxvd1J1bm5lci5ydW5fcGlwZWxpbmWUagAEAACMJFRlc3REYXRhZmxvd1J1bm5lci5idWlsZF9jb25zb2xlX3VybJRqAAQAAIwmVGVzdERhdGFmbG93UnVubmVyLndhaXRfdW50aWxfaW5fc3RhdGWUagAEAAB1jDFhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93LnRlc3RfZGF0YWZsb3dfcnVubmVylHSUjClhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeZQoWLwdAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgVW5jb21taXR0ZWRCdW5kbGVzLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHR5cGluZyBpbXBvcnQgSXRlcmFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IEl0ZXJhdG9yCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgpmcm9tIHR5cGluZyBpbXBvcnQgY2FzdAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycyBpbXBvcnQgY29tbW9uCmZyb20gYXBhY2hlX2JlYW0udXRpbHMud2luZG93ZWRfdmFsdWUgaW1wb3J0IFdpbmRvd2VkVmFsdWUKCgpjbGFzcyBCdW5kbGVGYWN0b3J5KG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBCdW5kbGVGYWN0b3J5IGNyZWF0ZXMgb3V0cHV0IGJ1bmRsZXMgdG8gYmUgdXNlZCBieSB0cmFuc2Zvcm0gZXZhbHVhdG9ycy4KCiAgQXJnczoKICAgIHN0YWNrZWQ6IHdoZXRoZXIgb3Igbm90IHRvIHN0YWNrIHRoZSBXaW5kb3dlZFZhbHVlcyB3aXRoaW4gdGhlIGJ1bmRsZQogICAgICBpbiBjYXNlIGNvbnNlY3V0aXZlIG9uZXMgc2hhcmUgdGhlIHNhbWUgdGltZXN0YW1wIGFuZCB3aW5kb3dzLgogICAgICBEaXJlY3RSdW5uZXJPcHRpb25zLmRpcmVjdF9ydW5uZXJfdXNlX3N0YWNrZWRfYnVuZGxlIGNvbnRyb2xzIHRoaXMgb3B0aW9uLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFja2VkKToKICAgICMgdHlwZTogKGJvb2wpIC0+IE5vbmUKICAgIHNlbGYuX3N0YWNrZWQgPSBzdGFja2VkCgogIGRlZiBjcmVhdGVfYnVuZGxlKHNlbGYsIG91dHB1dF9wY29sbGVjdGlvbik6CiAgICAjIHR5cGU6IChVbmlvbltwdmFsdWUuUEJlZ2luLCBwdmFsdWUuUENvbGxlY3Rpb25dKSAtPiBfQnVuZGxlCiAgICByZXR1cm4gX0J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24sIHNlbGYuX3N0YWNrZWQpCgogIGRlZiBjcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZShzZWxmLCBvdXRwdXRfcGNvbGxlY3Rpb24pOgogICAgIyB0eXBlOiAoVW5pb25bcHZhbHVlLlBCZWdpbiwgcHZhbHVlLlBDb2xsZWN0aW9uXSkgLT4gX0J1bmRsZQogICAgYnVuZGxlID0gc2VsZi5jcmVhdGVfYnVuZGxlKG91dHB1dF9wY29sbGVjdGlvbikKICAgIGJ1bmRsZS5jb21taXQoTm9uZSkKICAgIHJldHVybiBidW5kbGUKCgojIGEgYnVuZGxlIHJlcHJlc2VudHMgYSB1bml0IG9mIHdvcmsgdGhhdCB3aWxsIGJlIHByb2Nlc3NlZCBieSBhIHRyYW5zZm9ybS4KY2xhc3MgX0J1bmRsZShjb21tb24uUmVjZWl2ZXIpOgogICIiIlBhcnQgb2YgYSBQQ29sbGVjdGlvbiB3aXRoIG91dHB1dCBlbGVtZW50cy4KCiAgUGFydCBvZiBhIFBDb2xsZWN0aW9uLiBFbGVtZW50cyBhcmUgb3V0cHV0IHRvIGEgYnVuZGxlLCB3aGljaCB3aWxsIGNhdXNlIHRoZW0KICB0byBiZSBleGVjdXRlZCBieSBQVHJhbnNmb3JtIHRoYXQgY29uc3VtZSB0aGUgUENvbGxlY3Rpb24gdGhpcyBidW5kbGUgaXMgYQogIHBhcnQgb2YgYXQgYSBsYXRlciBwb2ludC4gSXQgc3RhcnRzIGFzIGFuIHVuY29tbWl0dGVkIGJ1bmRsZSBhbmQgY2FuIGhhdmUKICBlbGVtZW50cyBhZGRlZCB0byBpdC4gSXQgbmVlZHMgdG8gYmUgY29tbWl0dGVkIHRvIG1ha2UgaXQgaW1tdXRhYmxlIGJlZm9yZQogIHBhc3NpbmcgaXQgdG8gYSBkb3duc3RyZWFtIHB0cmFuc2Zvcm0uCgogIFRoZSBzdG9yZWQgZWxlbWVudHMgYXJlIFdpbmRvd2VkVmFsdWVzLCB3aGljaCBjb250YWlucyB0aW1lc3RhbXAgYW5kIHdpbmRvd3MKICBpbmZvcm1hdGlvbi4KCiAgQnVuZGxlIGludGVybmFsbHkgb3B0aW1pemVzIHN0b3JhZ2UgYnkgc3RhY2tpbmcgZWxlbWVudHMgd2l0aCB0aGUgc2FtZQogIHRpbWVzdGFtcCBhbmQgd2luZG93cyBpbnRvIFN0YWNrZWRXaW5kb3dlZFZhbHVlcywgYW5kIHRoZW4gcmV0dXJucyBhbiBpdGVyYWJsZQogIHRvIHJlc3RvcmUgV2luZG93ZWRWYWx1ZXMgdXBvbiBnZXRfZWxlbWVudHMoKSBjYWxsLgoKICBXaGVuIHRoaXMgb3B0aW1pemF0aW9uIGlzIG5vdCBkZXNpcmVkLCBpdCBjYW4gYmUgYXZvaWRlZCBieSBhbiBvcHRpb24gd2hlbgogIGNyZWF0aW5nIGJ1bmRsZXMsIGxpa2U6OjoKCiAgICBiID0gQnVuZGxlKHN0YWNrZWQ9RmFsc2UpCiAgIiIiCiAgY2xhc3MgX1N0YWNrZWRXaW5kb3dlZFZhbHVlcyhvYmplY3QpOgogICAgIiIiQSBzdGFjayBvZiBXaW5kb3dlZFZhbHVlcyB3aXRoIHRoZSBzYW1lIHRpbWVzdGFtcCBhbmQgd2luZG93cy4KCiAgICBJdCBtdXN0IGJlIGluaXRpYWxpemVkIGZyb20gYSBzaW5nbGUgV2luZG93ZWRWYWx1ZS4KCiAgICBFeGFtcGxlOjo6CgogICAgICBzID0gU3RhY2tlZFdpbmRvd2VkVmFsdWVzKHdpbmRvd2VkX3ZhbHVlKQogICAgICBpZiAoYW5vdGhlcl93aW5kb3dlZF92YWx1ZS50aW1lc3RhbXAgPT0gcy50aW1lc3RhbXAgYW5kCiAgICAgICAgICBhbm90aGVyX3dpbmRvd2VkX3ZhbHVlLndpbmRvd3MgPT0gcy53aW5kb3dzKToKICAgICAgICBzLmFkZF92YWx1ZShhbm90aGVyX3dpbmRvd2VkX3ZhbHVlLnZhbHVlKQogICAgICB3aW5kb3dlZF92YWx1ZXMgPSBbd3YgZm9yIHd2IGluIHMud2luZG93ZWRfdmFsdWVzKCldCiAgICAgICMgbm93IHdpbmRvd2VkX3ZhbHVlcyBlcXVhbHMgdG8gW3dpbmRvd2VkX3ZhbHVlLCBhbm90aGVyX3dpbmRvd2VkX3ZhbHVlXQogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF93aW5kb3dlZF92YWx1ZSk6CiAgICAgIHNlbGYuX2luaXRpYWxfd2luZG93ZWRfdmFsdWUgPSBpbml0aWFsX3dpbmRvd2VkX3ZhbHVlCiAgICAgIHNlbGYuX2FwcGVuZGVkX3ZhbHVlcyA9IFtdCgogICAgQHByb3BlcnR5CiAgICBkZWYgdGltZXN0YW1wKHNlbGYpOgogICAgICByZXR1cm4gc2VsZi5faW5pdGlhbF93aW5kb3dlZF92YWx1ZS50aW1lc3RhbXAKCiAgICBAcHJvcGVydHkKICAgIGRlZiB3aW5kb3dzKHNlbGYpOgogICAgICByZXR1cm4gc2VsZi5faW5pdGlhbF93aW5kb3dlZF92YWx1ZS53aW5kb3dzCgogICAgQHByb3BlcnR5CiAgICBkZWYgcGFuZV9pbmZvKHNlbGYpOgogICAgICByZXR1cm4gc2VsZi5faW5pdGlhbF93aW5kb3dlZF92YWx1ZS5wYW5lX2luZm8KCiAgICBkZWYgYWRkX3ZhbHVlKHNlbGYsIHZhbHVlKToKICAgICAgc2VsZi5fYXBwZW5kZWRfdmFsdWVzLmFwcGVuZCh2YWx1ZSkKCiAgICBkZWYgd2luZG93ZWRfdmFsdWVzKHNlbGYpOgogICAgICAjIHR5cGU6ICgpIC0+IEl0ZXJhdG9yW1dpbmRvd2VkVmFsdWVdCiAgICAgICMgeWllbGQgZmlyc3Qgd2luZG93ZWRfdmFsdWUgYXMgaXMsIHRoZW4gaXRlcmF0ZSB0aHJvdWdoCiAgICAgICMgX2FwcGVuZGVkX3ZhbHVlcyB0byB5aWVsZCBXaW5kb3dlZFZhbHVlIG9uIHRoZSBmbHkuCiAgICAgIHlpZWxkIHNlbGYuX2luaXRpYWxfd2luZG93ZWRfdmFsdWUKICAgICAgZm9yIHYgaW4gc2VsZi5fYXBwZW5kZWRfdmFsdWVzOgogICAgICAgIHlpZWxkIHNlbGYuX2luaXRpYWxfd2luZG93ZWRfdmFsdWUud2l0aF92YWx1ZSh2KQoKICBkZWYgX19pbml0X18oc2VsZiwgcGNvbGxlY3Rpb24sIHN0YWNrZWQ9VHJ1ZSk6CiAgICAjIHR5cGU6IChVbmlvbltwdmFsdWUuUEJlZ2luLCBwdmFsdWUuUENvbGxlY3Rpb25dLCBib29sKSAtPiBOb25lCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwY29sbGVjdGlvbiwgKHB2YWx1ZS5QQmVnaW4sIHB2YWx1ZS5QQ29sbGVjdGlvbikpCiAgICBzZWxmLl9wY29sbGVjdGlvbiA9IHBjb2xsZWN0aW9uCiAgICBzZWxmLl9lbGVtZW50cyA9IFsKICAgIF0gICMgdHlwZTogTGlzdFtVbmlvbltXaW5kb3dlZFZhbHVlLCBfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXNdXQogICAgc2VsZi5fc3RhY2tlZCA9IHN0YWNrZWQKICAgIHNlbGYuX2NvbW1pdHRlZCA9IEZhbHNlCiAgICBzZWxmLl90YWcgPSBOb25lICAjIG9wdGlvbmFsIHRhZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBidW5kbGUKCiAgZGVmIGdldF9lbGVtZW50c19pdGVyYWJsZShzZWxmLCBtYWtlX2NvcHk9RmFsc2UpOgogICAgIyB0eXBlOiAoYm9vbCkgLT4gSXRlcmFibGVbV2luZG93ZWRWYWx1ZV0KCiAgICAiIiJSZXR1cm5zIGl0ZXJhYmxlIGVsZW1lbnRzLgoKICAgIEFyZ3M6CiAgICAgIG1ha2VfY29weTogd2hldGhlciB0byBmb3JjZSByZXR1cm5pbmcgY29weSBvciB5aWVsZGVkIGl0ZXJhYmxlLgoKICAgIFJldHVybnM6CiAgICAgIHVuc3RhY2tlZCBlbGVtZW50cywKICAgICAgaW4gdGhlIGZvcm0gb2YgaXRlcmFibGUgaWYgY29tbWl0dGVkIGFuZCBtYWtlX2NvcHkgaXMgbm90IFRydWUsCiAgICAgIG9yIGFzIGEgbGlzdCBvZiBjb3BpZWQgV2luZG93ZWRWYWx1ZXMuCiAgICAiIiIKICAgIGlmIG5vdCBzZWxmLl9zdGFja2VkOgogICAgICAjIHdlIGNhbiBzYWZlbHkgYXNzdW1lIHNlbGYuX2VsZW1lbnRzIGNvbnRhaW5zIG9ubHkgV2luZG93ZWRWYWx1ZXMKICAgICAgZWxlbWVudHMgPSBjYXN0KCdMaXN0W1dpbmRvd2VkVmFsdWVdJywgc2VsZi5fZWxlbWVudHMpCiAgICAgIGlmIHNlbGYuX2NvbW1pdHRlZCBhbmQgbm90IG1ha2VfY29weToKICAgICAgICByZXR1cm4gZWxlbWVudHMKICAgICAgcmV0dXJuIGxpc3QoZWxlbWVudHMpCgogICAgZGVmIGl0ZXJhYmxlX3N0YWNrZWRfb3JfZWxlbWVudHMoZWxlbWVudHMpOgogICAgICBmb3IgZSBpbiBlbGVtZW50czoKICAgICAgICBpZiBpc2luc3RhbmNlKGUsIF9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcyk6CiAgICAgICAgICBmb3IgdyBpbiBlLndpbmRvd2VkX3ZhbHVlcygpOgogICAgICAgICAgICB5aWVsZCB3CiAgICAgICAgZWxzZToKICAgICAgICAgIHlpZWxkIGUKCiAgICBpZiBzZWxmLl9jb21taXR0ZWQgYW5kIG5vdCBtYWtlX2NvcHk6CiAgICAgIHJldHVybiBpdGVyYWJsZV9zdGFja2VkX29yX2VsZW1lbnRzKHNlbGYuX2VsZW1lbnRzKQogICAgIyByZXR1cm5zIGEgY29weS4KICAgIHJldHVybiBbZSBmb3IgZSBpbiBpdGVyYWJsZV9zdGFja2VkX29yX2VsZW1lbnRzKHNlbGYuX2VsZW1lbnRzKV0KCiAgZGVmIGhhc19lbGVtZW50cyhzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5fZWxlbWVudHMpID4gMAoKICBAcHJvcGVydHkKICBkZWYgdGFnKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3RhZwoKICBAdGFnLnNldHRlcgogIGRlZiB0YWcoc2VsZiwgdmFsdWUpOgogICAgYXNzZXJ0IG5vdCBzZWxmLl90YWcKICAgIHNlbGYuX3RhZyA9IHZhbHVlCgogIEBwcm9wZXJ0eQogIGRlZiBwY29sbGVjdGlvbihzZWxmKToKICAgICIiIlBDb2xsZWN0aW9uIHRoYXQgdGhlIGVsZW1lbnRzIG9mIHRoaXMgVW5jb21taXR0ZWRCdW5kbGUgYmVsb25nIHRvLiIiIgogICAgcmV0dXJuIHNlbGYuX3Bjb2xsZWN0aW9uCgogIGRlZiBhZGQoc2VsZiwgZWxlbWVudCk6CiAgICAiIiJPdXRwdXRzIGFuIGVsZW1lbnQgdG8gdGhpcyBidW5kbGUuCgogICAgQXJnczoKICAgICAgZWxlbWVudDogV2luZG93ZWRWYWx1ZQogICAgIiIiCiAgICBhc3NlcnQgbm90IHNlbGYuX2NvbW1pdHRlZAogICAgaWYgbm90IHNlbGYuX3N0YWNrZWQ6CiAgICAgIHNlbGYuX2VsZW1lbnRzLmFwcGVuZChlbGVtZW50KQogICAgICByZXR1cm4KICAgIGlmIChzZWxmLl9lbGVtZW50cyBhbmQKICAgICAgICAoaXNpbnN0YW5jZShzZWxmLl9lbGVtZW50c1stMV0sCiAgICAgICAgICAgICAgICAgICAgKFdpbmRvd2VkVmFsdWUsIF9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcykpKSBhbmQKICAgICAgICBzZWxmLl9lbGVtZW50c1stMV0udGltZXN0YW1wID09IGVsZW1lbnQudGltZXN0YW1wIGFuZAogICAgICAgIHNlbGYuX2VsZW1lbnRzWy0xXS53aW5kb3dzID09IGVsZW1lbnQud2luZG93cyBhbmQKICAgICAgICBzZWxmLl9lbGVtZW50c1stMV0ucGFuZV9pbmZvID09IGVsZW1lbnQucGFuZV9pbmZvKToKICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLl9lbGVtZW50c1stMV0sIFdpbmRvd2VkVmFsdWUpOgogICAgICAgIHNlbGYuX2VsZW1lbnRzWy0xXSA9IF9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcyhzZWxmLl9lbGVtZW50c1stMV0pCiAgICAgIHNlbGYuX2VsZW1lbnRzWy0xXS5hZGRfdmFsdWUoZWxlbWVudC52YWx1ZSkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2VsZW1lbnRzLmFwcGVuZChlbGVtZW50KQoKICBkZWYgb3V0cHV0KHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5hZGQoZWxlbWVudCkKCiAgZGVmIHJlY2VpdmUoc2VsZiwgZWxlbWVudCk6CiAgICAjIHR5cGU6IChXaW5kb3dlZFZhbHVlKSAtPiBOb25lCiAgICBzZWxmLmFkZChlbGVtZW50KQoKICBkZWYgY29tbWl0KHNlbGYsIHN5bmNocm9uaXplZF9wcm9jZXNzaW5nX3RpbWUpOgogICAgIiIiQ29tbWl0cyB0aGlzIGJ1bmRsZS4KCiAgICBVbmNvbW1pdHRlZCBidW5kbGUgd2lsbCBiZWNvbWUgY29tbWl0dGVkIChpbW11dGFibGUpIGFmdGVyIHRoaXMgY2FsbC4KCiAgICBBcmdzOgogICAgICBzeW5jaHJvbml6ZWRfcHJvY2Vzc2luZ190aW1lOiB0aGUgc3luY2hyb25pemVkIHByb2Nlc3NpbmcgdGltZSBhdCB3aGljaAogICAgICB0aGlzIGJ1bmRsZSB3YXMgY29tbWl0dGVkCiAgICAiIiIKICAgIGFzc2VydCBub3Qgc2VsZi5fY29tbWl0dGVkCiAgICBzZWxmLl9jb21taXR0ZWQgPSBUcnVlCiAgICBzZWxmLl9lbGVtZW50cyA9IHR1cGxlKHNlbGYuX2VsZW1lbnRzKQogICAgc2VsZi5fc3luY2hyb25pemVkX3Byb2Nlc3NpbmdfdGltZSA9IHN5bmNocm9uaXplZF9wcm9jZXNzaW5nX3RpbWUKlH2UKIwWQnVuZGxlRmFjdG9yeS5fX2luaXRfX5RqVjEBAEsuSzCHlIwbQnVuZGxlRmFjdG9yeS5jcmVhdGVfYnVuZGxllGpWMQEASzJLNIeUjCtCdW5kbGVGYWN0b3J5LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxllGpWMQEASzZLOoeUjA1CdW5kbGVGYWN0b3J5lGpdMQEASyRLOoeUjCdfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMuX19pbml0X1+UalYxAQBLYUtjh5SMKF9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcy50aW1lc3RhbXCUalYxAQBLZUtnh5SMJl9CdW5kbGUuX1N0YWNrZWRXaW5kb3dlZFZhbHVlcy53aW5kb3dzlGpWMQEAS2lLa4eUjChfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMucGFuZV9pbmZvlGpWMQEAS21Lb4eUjChfQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMuYWRkX3ZhbHVllGpWMQEAS3FLcoeUjC5fQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXMud2luZG93ZWRfdmFsdWVzlGpWMQEAS3RLeoeUjB5fQnVuZGxlLl9TdGFja2VkV2luZG93ZWRWYWx1ZXOUal0xAQBLU0t6h5SMEF9CdW5kbGUuX19pbml0X1+UalYxAQBLfEuEh5SMHV9CdW5kbGUuZ2V0X2VsZW1lbnRzX2l0ZXJhYmxllGpWMQEAS4ZLpYeUjBRfQnVuZGxlLmhhc19lbGVtZW50c5RqVjEBAEunS6iHlIwLX0J1bmRsZS50YWeUalYxAQBLrkuxh5SME19CdW5kbGUucGNvbGxlY3Rpb26UalYxAQBLs0u2h5SMC19CdW5kbGUuYWRklGpWMQEAS7hLzIeUjA5fQnVuZGxlLm91dHB1dJRqVjEBAEvOS8+HlIwPX0J1bmRsZS5yZWNlaXZllGpWMQEAS9FL04eUjA5fQnVuZGxlLmNvbW1pdJRqVjEBAEvVS+GHlIwHX0J1bmRsZZRqXTEBAEs+S+GHlHV9lCiMDUJ1bmRsZUZhY3RvcnmUapoDAACMG0J1bmRsZUZhY3RvcnkuY3JlYXRlX2J1bmRsZZRqmgMAAIwrQnVuZGxlRmFjdG9yeS5jcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZZRqmgMAAHWMKWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5lHSUjCBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9ja5QoWDkGAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNsb2NrIGltcGxlbWVudGF0aW9ucyBmb3IgcmVhbCB0aW1lIHByb2Nlc3NpbmcgYW5kIHRlc3RpbmcuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHRpbWUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CgoKY2xhc3MgQ2xvY2sob2JqZWN0KToKICBkZWYgdGltZShzZWxmKToKICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGVwb2NoLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCgogIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZV9ieSk6CiAgICAiIiJBZHZhbmNlcyB0aGUgY2xvY2sgYnkgYSBudW1iZXIgb2Ygc2Vjb25kcy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQoKCmNsYXNzIFJlYWxDbG9jayhvYmplY3QpOgogIGRlZiB0aW1lKHNlbGYpOgogICAgcmV0dXJuIHRpbWUudGltZSgpCgoKY2xhc3MgVGVzdENsb2NrKG9iamVjdCk6CiAgIiIiQ2xvY2sgdXNlZCBmb3IgVGVzdGluZyIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjdXJyZW50X3RpbWU9MCk6CiAgICBzZWxmLl9jdXJyZW50X3RpbWUgPSBjdXJyZW50X3RpbWUKCiAgZGVmIHRpbWUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fY3VycmVudF90aW1lCgogIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZV9ieSk6CiAgICBzZWxmLl9jdXJyZW50X3RpbWUgKz0gYWR2YW5jZV9ieQqUfZQojApDbG9jay50aW1llGpWMQEASx9LIYeUjBJDbG9jay5hZHZhbmNlX3RpbWWUalYxAQBLI0slh5SMBUNsb2NrlGpdMQEASx5LJYeUjA5SZWFsQ2xvY2sudGltZZRqVjEBAEspSyqHlIwJUmVhbENsb2NrlGpdMQEASyhLKoeUjBJUZXN0Q2xvY2suX19pbml0X1+UalYxAQBLL0swh5SMDlRlc3RDbG9jay50aW1llGpWMQEASzJLM4eUjBZUZXN0Q2xvY2suYWR2YW5jZV90aW1llGpWMQEASzVLNoeUjAlUZXN0Q2xvY2uUal0xAQBLLUs2h5R1fZQojAVDbG9ja5RqUAMAAIwKQ2xvY2sudGltZZRqUAMAAIwSQ2xvY2suYWR2YW5jZV90aW1llGpQAwAAjAlSZWFsQ2xvY2uUalADAACMDlJlYWxDbG9jay50aW1llGpQAwAAjAlUZXN0Q2xvY2uUalADAACMDlRlc3RDbG9jay50aW1llGpQAwAAjBZUZXN0Q2xvY2suYWR2YW5jZV90aW1llGpQAwAAdYwgYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2uUdJSMPWFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3KUKFjWCgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLCBhIFBpcGVsaW5lVmlzaXRvciBvYmplY3QuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSB0eXBpbmcgaW1wb3J0IFNldAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lVmlzaXRvcgoKaWYgVFlQRV9DSEVDS0lORzoKICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBBcHBsaWVkUFRyYW5zZm9ybQoKCmNsYXNzIENvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFZpc2l0b3IgZm9yIGV4dHJhY3RpbmcgdmFsdWUtY29uc3VtZXIgcmVsYXRpb25zIGZyb20gdGhlIGdyYXBoLgoKICBUcmFja3MgdGhlIEFwcGxpZWRQVHJhbnNmb3JtcyB0aGF0IGNvbnN1bWUgZWFjaCBQVmFsdWUgaW4gdGhlIFBpcGVsaW5lLiBUaGlzCiAgaXMgdXNlZCB0byBzY2hlZHVsZSBjb25zdW1pbmcgUFRyYW5zZm9ybXMgdG8gY29uc3VtZSBpbnB1dCBhZnRlciB0aGUgdXBzdHJlYW0KICB0cmFuc2Zvcm0gaGFzIHByb2R1Y2VkIGFuZCBjb21taXR0ZWQgb3V0cHV0LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHNlbGYudmFsdWVfdG9fY29uc3VtZXJzID0gewogICAgfSAgIyB0eXBlOiBEaWN0W3B2YWx1ZS5QVmFsdWUsIExpc3RbQXBwbGllZFBUcmFuc2Zvcm1dXQogICAgc2VsZi5yb290X3RyYW5zZm9ybXMgPSBzZXQoKSAgIyB0eXBlOiBTZXRbQXBwbGllZFBUcmFuc2Zvcm1dCiAgICBzZWxmLnN0ZXBfbmFtZXMgPSB7fSAgIyB0eXBlOiBEaWN0W0FwcGxpZWRQVHJhbnNmb3JtLCBzdHJdCgogICAgc2VsZi5fbnVtX3RyYW5zZm9ybXMgPSAwCiAgICBzZWxmLl92aWV3cyA9IHNldCgpCgogIEBwcm9wZXJ0eQogIGRlZiB2aWV3cyhzZWxmKToKICAgICIiIlJldHVybnMgYSBsaXN0IG9mIHNpZGUgaW50cHV0cyBleHRyYWN0ZWQgZnJvbSB0aGUgZ3JhcGguCgogICAgUmV0dXJuczoKICAgICAgQSBsaXN0IG9mIHB2YWx1ZS5Bc1NpZGVJbnB1dC4KICAgICIiIgogICAgcmV0dXJuIGxpc3Qoc2VsZi5fdmlld3MpCgogIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICMgdHlwZTogKEFwcGxpZWRQVHJhbnNmb3JtKSAtPiBOb25lCiAgICBpbnB1dHMgPSBsaXN0KGFwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHMpCiAgICBpZiBpbnB1dHM6CiAgICAgIGZvciBpbnB1dF92YWx1ZSBpbiBpbnB1dHM6CiAgICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dF92YWx1ZSwgcHZhbHVlLlBCZWdpbik6CiAgICAgICAgICBzZWxmLnJvb3RfdHJhbnNmb3Jtcy5hZGQoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgICAgIGlmIGlucHV0X3ZhbHVlIG5vdCBpbiBzZWxmLnZhbHVlX3RvX2NvbnN1bWVyczoKICAgICAgICAgIHNlbGYudmFsdWVfdG9fY29uc3VtZXJzW2lucHV0X3ZhbHVlXSA9IFtdCiAgICAgICAgc2VsZi52YWx1ZV90b19jb25zdW1lcnNbaW5wdXRfdmFsdWVdLmFwcGVuZChhcHBsaWVkX3B0cmFuc2Zvcm0pCiAgICBlbHNlOgogICAgICBzZWxmLnJvb3RfdHJhbnNmb3Jtcy5hZGQoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgc2VsZi5zdGVwX25hbWVzW2FwcGxpZWRfcHRyYW5zZm9ybV0gPSAncyVkJyAlIChzZWxmLl9udW1fdHJhbnNmb3JtcykKICAgIHNlbGYuX251bV90cmFuc2Zvcm1zICs9IDEKCiAgICBmb3Igc2lkZV9pbnB1dCBpbiBhcHBsaWVkX3B0cmFuc2Zvcm0uc2lkZV9pbnB1dHM6CiAgICAgIHNlbGYuX3ZpZXdzLmFkZChzaWRlX2lucHV0KQqUfZQojChDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLl9faW5pdF9flGpWMQEASy1LNIeUjCVDb25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLnZpZXdzlGpWMQEASzZLPYeUjC9Db25zdW1lclRyYWNraW5nUGlwZWxpbmVWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqVjEBAEs/S0+HlIwfQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvcpRqXTEBAEskS0+HlHV9lCiMH0NvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3KUatwDAACML0NvbnN1bWVyVHJhY2tpbmdQaXBlbGluZVZpc2l0b3IudmlzaXRfdHJhbnNmb3JtlGrcAwAAdYw9YXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY29uc3VtZXJfdHJhY2tpbmdfcGlwZWxpbmVfdmlzaXRvcpR0lIwpYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3OUKFhlEgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKRGlyZWN0UnVubmVyIGltcGxlbWVudGF0aW9uIG9mIE1ldHJpY1Jlc3VsdHMuIEl0IGlzIGluIGNoYXJnZSBub3Qgb25seSBvZgpyZXNwb25kaW5nIHRvIHF1ZXJpZXMgb2YgY3VycmVudCBtZXRyaWNzLCBidXQgYWxzbyBvZiBrZWVwaW5nIHRoZSBjb21tb24Kc3RhdGUgY29uc2lzdGVudC4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgdGhyZWFkaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAoKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBDb3VudGVyQWdncmVnYXRvcgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuY2VsbHMgaW1wb3J0IERpc3RyaWJ1dGlvbkFnZ3JlZ2F0b3IKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBHYXVnZUFnZ3JlZ2F0b3IKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmV4ZWN1dGlvbiBpbXBvcnQgTWV0cmljS2V5CmZyb20gYXBhY2hlX2JlYW0ubWV0cmljcy5leGVjdXRpb24gaW1wb3J0IE1ldHJpY1Jlc3VsdApmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MubWV0cmljIGltcG9ydCBNZXRyaWNSZXN1bHRzCgoKY2xhc3MgRGlyZWN0TWV0cmljcyhNZXRyaWNSZXN1bHRzKToKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLl9jb3VudGVycyA9IGRlZmF1bHRkaWN0KGxhbWJkYTogRGlyZWN0TWV0cmljKENvdW50ZXJBZ2dyZWdhdG9yKCkpKQogICAgc2VsZi5fZGlzdHJpYnV0aW9ucyA9IGRlZmF1bHRkaWN0KAogICAgICAgIGxhbWJkYTogRGlyZWN0TWV0cmljKERpc3RyaWJ1dGlvbkFnZ3JlZ2F0b3IoKSkpCiAgICBzZWxmLl9nYXVnZXMgPSBkZWZhdWx0ZGljdChsYW1iZGE6IERpcmVjdE1ldHJpYyhHYXVnZUFnZ3JlZ2F0b3IoKSkpCgogIGRlZiBfYXBwbHlfb3BlcmF0aW9uKHNlbGYsIGJ1bmRsZSwgdXBkYXRlcywgb3ApOgogICAgZm9yIGssIHYgaW4gdXBkYXRlcy5jb3VudGVycy5pdGVtcygpOgogICAgICBvcChzZWxmLl9jb3VudGVyc1trXSwgYnVuZGxlLCB2KQoKICAgIGZvciBrLCB2IGluIHVwZGF0ZXMuZGlzdHJpYnV0aW9ucy5pdGVtcygpOgogICAgICBvcChzZWxmLl9kaXN0cmlidXRpb25zW2tdLCBidW5kbGUsIHYpCgogICAgZm9yIGssIHYgaW4gdXBkYXRlcy5nYXVnZXMuaXRlbXMoKToKICAgICAgb3Aoc2VsZi5fZ2F1Z2VzW2tdLCBidW5kbGUsIHYpCgogIGRlZiBjb21taXRfbG9naWNhbChzZWxmLCBidW5kbGUsIHVwZGF0ZXMpOgogICAgb3AgPSBsYW1iZGEgb2JqLCBidW5kbGUsIHVwZGF0ZTogb2JqLmNvbW1pdF9sb2dpY2FsKGJ1bmRsZSwgdXBkYXRlKQogICAgc2VsZi5fYXBwbHlfb3BlcmF0aW9uKGJ1bmRsZSwgdXBkYXRlcywgb3ApCgogIGRlZiBjb21taXRfcGh5c2ljYWwoc2VsZiwgYnVuZGxlLCB1cGRhdGVzKToKICAgIG9wID0gbGFtYmRhIG9iaiwgYnVuZGxlLCB1cGRhdGU6IG9iai5jb21taXRfcGh5c2ljYWwoYnVuZGxlLCB1cGRhdGUpCiAgICBzZWxmLl9hcHBseV9vcGVyYXRpb24oYnVuZGxlLCB1cGRhdGVzLCBvcCkKCiAgZGVmIHVwZGF0ZV9waHlzaWNhbChzZWxmLCBidW5kbGUsIHVwZGF0ZXMpOgogICAgb3AgPSBsYW1iZGEgb2JqLCBidW5kbGUsIHVwZGF0ZTogb2JqLnVwZGF0ZV9waHlzaWNhbChidW5kbGUsIHVwZGF0ZSkKICAgIHNlbGYuX2FwcGx5X29wZXJhdGlvbihidW5kbGUsIHVwZGF0ZXMsIG9wKQoKICBkZWYgcXVlcnkoc2VsZiwgZmlsdGVyPU5vbmUpOgogICAgY291bnRlcnMgPSBbCiAgICAgICAgTWV0cmljUmVzdWx0KAogICAgICAgICAgICBNZXRyaWNLZXkoay5zdGVwLCBrLm1ldHJpYyksCiAgICAgICAgICAgIHYuZXh0cmFjdF9jb21taXR0ZWQoKSwKICAgICAgICAgICAgdi5leHRyYWN0X2xhdGVzdF9hdHRlbXB0ZWQoKSkgZm9yIGssCiAgICAgICAgdiBpbiBzZWxmLl9jb3VudGVycy5pdGVtcygpIGlmIHNlbGYubWF0Y2hlcyhmaWx0ZXIsIGspCiAgICBdCiAgICBkaXN0cmlidXRpb25zID0gWwogICAgICAgIE1ldHJpY1Jlc3VsdCgKICAgICAgICAgICAgTWV0cmljS2V5KGsuc3RlcCwgay5tZXRyaWMpLAogICAgICAgICAgICB2LmV4dHJhY3RfY29tbWl0dGVkKCksCiAgICAgICAgICAgIHYuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVkKCkpIGZvciBrLAogICAgICAgIHYgaW4gc2VsZi5fZGlzdHJpYnV0aW9ucy5pdGVtcygpIGlmIHNlbGYubWF0Y2hlcyhmaWx0ZXIsIGspCiAgICBdCiAgICBnYXVnZXMgPSBbCiAgICAgICAgTWV0cmljUmVzdWx0KAogICAgICAgICAgICBNZXRyaWNLZXkoay5zdGVwLCBrLm1ldHJpYyksCiAgICAgICAgICAgIHYuZXh0cmFjdF9jb21taXR0ZWQoKSwKICAgICAgICAgICAgdi5leHRyYWN0X2xhdGVzdF9hdHRlbXB0ZWQoKSkgZm9yIGssCiAgICAgICAgdiBpbiBzZWxmLl9nYXVnZXMuaXRlbXMoKSBpZiBzZWxmLm1hdGNoZXMoZmlsdGVyLCBrKQogICAgXQoKICAgIHJldHVybiB7CiAgICAgICAgc2VsZi5DT1VOVEVSUzogY291bnRlcnMsCiAgICAgICAgc2VsZi5ESVNUUklCVVRJT05TOiBkaXN0cmlidXRpb25zLAogICAgICAgIHNlbGYuR0FVR0VTOiBnYXVnZXMKICAgIH0KCgpjbGFzcyBEaXJlY3RNZXRyaWMob2JqZWN0KToKICAiIiIgS2VlcHMgYSBjb25zaXN0ZW50IHN0YXRlIGZvciBhIHNpbmdsZSBtZXRyaWMuCgogIEl0IGtlZXBzIHRyYWNrIG9mIHRoZSBtZXRyaWMncyBwaHlzaWNhbCBhbmQgbG9naWNhbCB1cGRhdGVzLgogIEl0J3MgdGhyZWFkIHNhZmUuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGFnZ3JlZ2F0b3IpOgogICAgc2VsZi5hZ2dyZWdhdG9yID0gYWdncmVnYXRvcgogICAgc2VsZi5fYXR0ZW1wdGVkX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAgICBzZWxmLmZpbmlzaGVkX2F0dGVtcHRlZCA9IGFnZ3JlZ2F0b3IuaWRlbnRpdHlfZWxlbWVudCgpCiAgICBzZWxmLmluZmxpZ2h0X2F0dGVtcHRlZCA9IHt9CiAgICBzZWxmLl9jb21taXR0ZWRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgIHNlbGYuZmluaXNoZWRfY29tbWl0dGVkID0gYWdncmVnYXRvci5pZGVudGl0eV9lbGVtZW50KCkKCiAgZGVmIGNvbW1pdF9sb2dpY2FsKHNlbGYsIGJ1bmRsZSwgdXBkYXRlKToKICAgIHdpdGggc2VsZi5fY29tbWl0dGVkX2xvY2s6CiAgICAgIHNlbGYuZmluaXNoZWRfY29tbWl0dGVkID0gc2VsZi5hZ2dyZWdhdG9yLmNvbWJpbmUoCiAgICAgICAgICB1cGRhdGUsIHNlbGYuZmluaXNoZWRfY29tbWl0dGVkKQoKICBkZWYgY29tbWl0X3BoeXNpY2FsKHNlbGYsIGJ1bmRsZSwgdXBkYXRlKToKICAgIHdpdGggc2VsZi5fYXR0ZW1wdGVkX2xvY2s6CiAgICAgIHNlbGYuaW5mbGlnaHRfYXR0ZW1wdGVkW2J1bmRsZV0gPSB1cGRhdGUKICAgICAgc2VsZi5maW5pc2hlZF9hdHRlbXB0ZWQgPSBzZWxmLmFnZ3JlZ2F0b3IuY29tYmluZSgKICAgICAgICAgIHVwZGF0ZSwgc2VsZi5maW5pc2hlZF9hdHRlbXB0ZWQpCiAgICAgIGRlbCBzZWxmLmluZmxpZ2h0X2F0dGVtcHRlZFtidW5kbGVdCgogIGRlZiB1cGRhdGVfcGh5c2ljYWwoc2VsZiwgYnVuZGxlLCB1cGRhdGUpOgogICAgc2VsZi5pbmZsaWdodF9hdHRlbXB0ZWRbYnVuZGxlXSA9IHVwZGF0ZQoKICBkZWYgZXh0cmFjdF9jb21taXR0ZWQoc2VsZik6CiAgICByZXR1cm4gc2VsZi5hZ2dyZWdhdG9yLnJlc3VsdChzZWxmLmZpbmlzaGVkX2NvbW1pdHRlZCkKCiAgZGVmIGV4dHJhY3RfbGF0ZXN0X2F0dGVtcHRlZChzZWxmKToKICAgIHJlcyA9IHNlbGYuZmluaXNoZWRfYXR0ZW1wdGVkCiAgICBmb3IgXywgdSBpbiBzZWxmLmluZmxpZ2h0X2F0dGVtcHRlZC5pdGVtcygpOgogICAgICByZXMgPSBzZWxmLmFnZ3JlZ2F0b3IuY29tYmluZShyZXMsIHUpCgogICAgcmV0dXJuIHNlbGYuYWdncmVnYXRvci5yZXN1bHQocmVzKQqUfZQojBZEaXJlY3RNZXRyaWNzLl9faW5pdF9flGpWMQEASyhLLIeUjB5EaXJlY3RNZXRyaWNzLl9hcHBseV9vcGVyYXRpb26UalYxAQBLLks2h5SMHERpcmVjdE1ldHJpY3MuY29tbWl0X2xvZ2ljYWyUalYxAQBLOEs6h5SMHURpcmVjdE1ldHJpY3MuY29tbWl0X3BoeXNpY2FslGpWMQEASzxLPoeUjB1EaXJlY3RNZXRyaWNzLnVwZGF0ZV9waHlzaWNhbJRqVjEBAEtAS0KHlIwTRGlyZWN0TWV0cmljcy5xdWVyeZRqVjEBAEtES1+HlIwNRGlyZWN0TWV0cmljc5RqXTEBAEsnS1+HlIwVRGlyZWN0TWV0cmljLl9faW5pdF9flGpWMQEAS2hLboeUjBtEaXJlY3RNZXRyaWMuY29tbWl0X2xvZ2ljYWyUalYxAQBLcEtzh5SMHERpcmVjdE1ldHJpYy5jb21taXRfcGh5c2ljYWyUalYxAQBLdUt6h5SMHERpcmVjdE1ldHJpYy51cGRhdGVfcGh5c2ljYWyUalYxAQBLfEt9h5SMHkRpcmVjdE1ldHJpYy5leHRyYWN0X2NvbW1pdHRlZJRqVjEBAEt/S4CHlIwlRGlyZWN0TWV0cmljLmV4dHJhY3RfbGF0ZXN0X2F0dGVtcHRlZJRqVjEBAEuCS4eHlIwMRGlyZWN0TWV0cmljlGpdMQEAS2JLh4eUdX2UKIwNRGlyZWN0TWV0cmljc5RqMgMAAIwcRGlyZWN0TWV0cmljcy5jb21taXRfbG9naWNhbJRqMgMAAIwdRGlyZWN0TWV0cmljcy5jb21taXRfcGh5c2ljYWyUajIDAACMHURpcmVjdE1ldHJpY3MudXBkYXRlX3BoeXNpY2FslGoyAwAAjBNEaXJlY3RNZXRyaWNzLnF1ZXJ5lGoyAwAAjAxEaXJlY3RNZXRyaWOUajIDAACMG0RpcmVjdE1ldHJpYy5jb21taXRfbG9naWNhbJRqMgMAAIwcRGlyZWN0TWV0cmljLmNvbW1pdF9waHlzaWNhbJRqMgMAAIwcRGlyZWN0TWV0cmljLnVwZGF0ZV9waHlzaWNhbJRqMgMAAIweRGlyZWN0TWV0cmljLmV4dHJhY3RfY29tbWl0dGVklGoyAwAAjCVEaXJlY3RNZXRyaWMuZXh0cmFjdF9sYXRlc3RfYXR0ZW1wdGVklGoyAwAAdYwpYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X21ldHJpY3OUdJSMKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXKUKFg8RwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJEaXJlY3RSdW5uZXIsIGV4ZWN1dGluZyBvbiB0aGUgbG9jYWwgbWFjaGluZS4KClRoZSBEaXJlY3RSdW5uZXIgaXMgYSBydW5uZXIgaW1wbGVtZW50YXRpb24gdGhhdCBleGVjdXRlcyB0aGUgZW50aXJlCmdyYXBoIG9mIHRyYW5zZm9ybWF0aW9ucyBiZWxvbmdpbmcgdG8gYSBwaXBlbGluZSBvbiB0aGUgbG9jYWwgbWFjaGluZS4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGltZQppbXBvcnQgdHlwaW5nCgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgd3JhcHBlcnNfcGIyCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgdHlwZWhpbnRzCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwudXRpbCBpbXBvcnQgQXJndW1lbnRQbGFjZWhvbGRlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgRGlyZWN0T3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy52YWx1ZV9wcm92aWRlciBpbXBvcnQgUnVudGltZVZhbHVlUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS5wdmFsdWUgaW1wb3J0IFBDb2xsZWN0aW9uCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuYnVuZGxlX2ZhY3RvcnkgaW1wb3J0IEJ1bmRsZUZhY3RvcnkKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5jbG9jayBpbXBvcnQgUmVhbENsb2NrCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuY2xvY2sgaW1wb3J0IFRlc3RDbG9jawpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVJlc3VsdApmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVJ1bm5lcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVN0YXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBDb21iaW5lUGVyS2V5CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBDb21iaW5lVmFsdWVzRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IF9Hcm91cEFsc29CeVdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgX0dyb3VwQWxzb0J5V2luZG93RG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgX0dyb3VwQnlLZXlPbmx5CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtCgojIE5vdGUgdGhhdCB0aGUgQnVuZGxlQmFzZWREaXJlY3RSdW5uZXIgYW5kIFN3aXRjaGluZ0RpcmVjdFJ1bm5lciBuYW1lcyBhcmUKIyBleHBlcmltZW50YWwgYW5kIGhhdmUgbm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KX19hbGxfXyA9IFsnQnVuZGxlQmFzZWREaXJlY3RSdW5uZXInLCAnRGlyZWN0UnVubmVyJywgJ1N3aXRjaGluZ0RpcmVjdFJ1bm5lciddCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKY2xhc3MgU3dpdGNoaW5nRGlyZWN0UnVubmVyKFBpcGVsaW5lUnVubmVyKToKICAiIiJFeGVjdXRlcyBhIHNpbmdsZSBwaXBlbGluZSBvbiB0aGUgbG9jYWwgbWFjaGluZS4KCiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBzd2l0Y2hlcyBiZXR3ZWVuIHVzaW5nIHRoZSBGbkFwaVJ1bm5lciAod2hpY2ggaGFzCiAgaGlnaCB0aHJvdWdocHV0IGZvciBiYXRjaCBqb2JzKSBhbmQgdXNpbmcgdGhlIEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLAogIHdoaWNoIHN1cHBvcnRzIHN0cmVhbWluZyBleGVjdXRpb24gYW5kIGNlcnRhaW4gcHJpbWl0aXZlcyBub3QgeWV0CiAgaW1wbGVtZW50ZWQgaW4gdGhlIEZuQXBpUnVubmVyLgogICIiIgogIGRlZiBpc19mbmFwaV9jb21wYXRpYmxlKHNlbGYpOgogICAgcmV0dXJuIEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLmlzX2ZuYXBpX2NvbXBhdGlibGUoKQoKICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYsIHBpcGVsaW5lLCBvcHRpb25zKToKCiAgICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZVZpc2l0b3IKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlIGltcG9ydCBOYXRpdmVTb3VyY2UKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5uYXRpdmVfaW8uaW9iYXNlIGltcG9ydCBfTmF0aXZlV3JpdGUKICAgIGZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSBpbXBvcnQgVGVzdFN0cmVhbQoKICAgIGNsYXNzIF9GbkFwaVJ1bm5lclN1cHBvcnRWaXNpdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgICIiIlZpc2l0b3IgZGV0ZXJtaW5pbmcgaWYgYSBQaXBlbGluZSBjYW4gYmUgcnVuIG9uIHRoZSBGbkFwaVJ1bm5lci4iIiIKICAgICAgZGVmIGFjY2VwdChzZWxmLCBwaXBlbGluZSk6CiAgICAgICAgc2VsZi5zdXBwb3J0ZWRfYnlfZm5hcGlfcnVubmVyID0gVHJ1ZQogICAgICAgIHBpcGVsaW5lLnZpc2l0KHNlbGYpCiAgICAgICAgcmV0dXJuIHNlbGYuc3VwcG9ydGVkX2J5X2ZuYXBpX3J1bm5lcgoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAgIHRyYW5zZm9ybSA9IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0KICAgICAgICAjIFRoZSBGbkFwaVJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZyBleGVjdXRpb24uCiAgICAgICAgaWYgaXNpbnN0YW5jZSh0cmFuc2Zvcm0sIFRlc3RTdHJlYW0pOgogICAgICAgICAgc2VsZi5zdXBwb3J0ZWRfYnlfZm5hcGlfcnVubmVyID0gRmFsc2UKICAgICAgICAjIFRoZSBGbkFwaVJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IHJlYWRzIGZyb20gTmF0aXZlU291cmNlcy4KICAgICAgICBpZiAoaXNpbnN0YW5jZSh0cmFuc2Zvcm0sIGJlYW0uaW8uUmVhZCkgYW5kCiAgICAgICAgICAgIGlzaW5zdGFuY2UodHJhbnNmb3JtLnNvdXJjZSwgTmF0aXZlU291cmNlKSk6CiAgICAgICAgICBzZWxmLnN1cHBvcnRlZF9ieV9mbmFwaV9ydW5uZXIgPSBGYWxzZQogICAgICAgICMgVGhlIEZuQXBpUnVubmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHVzZSBvZiBfTmF0aXZlV3JpdGVzLgogICAgICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtLCBfTmF0aXZlV3JpdGUpOgogICAgICAgICAgc2VsZi5zdXBwb3J0ZWRfYnlfZm5hcGlfcnVubmVyID0gRmFsc2UKICAgICAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybSwgYmVhbS5QYXJEbyk6CiAgICAgICAgICBkb2ZuID0gdHJhbnNmb3JtLmRvZm4KICAgICAgICAgICMgVGhlIEZuQXBpUnVubmVyIGRvZXMgbm90IHN1cHBvcnQgZXhlY3V0aW9uIG9mIENvbWJpbmVGbnMgd2l0aAogICAgICAgICAgIyBkZWZlcnJlZCBzaWRlIGlucHV0cy4KICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZG9mbiwgQ29tYmluZVZhbHVlc0RvRm4pOgogICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSB0cmFuc2Zvcm0ucmF3X3NpZGVfaW5wdXRzCiAgICAgICAgICAgIGFyZ3NfdG9fY2hlY2sgPSBpdGVydG9vbHMuY2hhaW4oYXJncywga3dhcmdzLnZhbHVlcygpKQogICAgICAgICAgICBpZiBhbnkoaXNpbnN0YW5jZShhcmcsIEFyZ3VtZW50UGxhY2Vob2xkZXIpCiAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3NfdG9fY2hlY2spOgogICAgICAgICAgICAgIHNlbGYuc3VwcG9ydGVkX2J5X2ZuYXBpX3J1bm5lciA9IEZhbHNlCgogICAgIyBDaGVjayB3aGV0aGVyIGFsbCB0cmFuc2Zvcm1zIHVzZWQgaW4gdGhlIHBpcGVsaW5lIGFyZSBzdXBwb3J0ZWQgYnkgdGhlCiAgICAjIEZuQXBpUnVubmVyLCBhbmQgdGhlIHBpcGVsaW5lIHdhcyBub3QgbWVhbnQgdG8gYmUgcnVuIGFzIHN0cmVhbWluZy4KICAgIHVzZV9mbmFwaV9ydW5uZXIgPSAoX0ZuQXBpUnVubmVyU3VwcG9ydFZpc2l0b3IoKS5hY2NlcHQocGlwZWxpbmUpKQoKICAgICMgQWxzbyBlbnN1cmUgZ3JwYyBpcyBhdmFpbGFibGUuCiAgICB0cnk6CiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKICAgICAgaW1wb3J0IGdycGMKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgdXNlX2ZuYXBpX3J1bm5lciA9IEZhbHNlCgogICAgaWYgdXNlX2ZuYXBpX3J1bm5lcjoKICAgICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnBvcnRhYmlsaXR5LmZuX2FwaV9ydW5uZXIgaW1wb3J0IEZuQXBpUnVubmVyCiAgICAgIHJ1bm5lciA9IEZuQXBpUnVubmVyKCkKICAgIGVsc2U6CiAgICAgIHJ1bm5lciA9IEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyKCkKCiAgICByZXR1cm4gcnVubmVyLnJ1bl9waXBlbGluZShwaXBlbGluZSwgb3B0aW9ucykKCgojIFR5cGUgdmFyaWFibGVzLgpLID0gdHlwaW5nLlR5cGVWYXIoJ0snKQpWID0gdHlwaW5nLlR5cGVWYXIoJ1YnKQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBpbmcuVHVwbGVbSywgVl0pCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwaW5nLlR1cGxlW0ssIHR5cGluZy5JdGVyYWJsZVtWXV0pCmNsYXNzIF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seShfR3JvdXBCeUtleU9ubHkpOgogICIiIlN0cmVhbWluZyBHcm91cEJ5S2V5T25seSBwbGFjZWhvbGRlciBmb3Igb3ZlcnJpZGluZyBpbiBEaXJlY3RSdW5uZXIuIiIiCiAgdXJuID0gImRpcmVjdF9ydW5uZXI6c3RyZWFtaW5nX2dia286djAuMSIKCiAgIyBUaGVzZSBhcmUgbmVlZGVkIGR1ZSB0byBhcHBseSBvdmVybG9hZHMuCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHkudXJuLCBOb25lCgogIEBzdGF0aWNtZXRob2QKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4odXJuLCBOb25lKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKAogICAgICB1bnVzZWRfcHRyYW5zZm9ybSwgdW51c2VkX3BheWxvYWQsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHkoKQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBpbmcuVHVwbGVbSywgdHlwaW5nLkl0ZXJhYmxlW1ZdXSkKQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBpbmcuVHVwbGVbSywgdHlwaW5nLkl0ZXJhYmxlW1ZdXSkKY2xhc3MgX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93KF9Hcm91cEFsc29CeVdpbmRvdyk6CiAgIiIiU3RyZWFtaW5nIEdyb3VwQWxzb0J5V2luZG93IHBsYWNlaG9sZGVyIGZvciBvdmVycmlkaW5nIGluIERpcmVjdFJ1bm5lci4iIiIKICB1cm4gPSAiZGlyZWN0X3J1bm5lcjpzdHJlYW1pbmdfZ2Fidzp2MC4xIgoKICAjIFRoZXNlIGFyZSBuZWVkZWQgZHVlIHRvIGFwcGx5IG92ZXJsb2Fkcy4KICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gKAogICAgICAgIF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdy51cm4sCiAgICAgICAgd3JhcHBlcnNfcGIyLkJ5dGVzVmFsdWUoCiAgICAgICAgICAgIHZhbHVlPWNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2lkKHNlbGYud2luZG93aW5nKSkpCgogIEBzdGF0aWNtZXRob2QKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4odXJuLCB3cmFwcGVyc19wYjIuQnl0ZXNWYWx1ZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcih1bnVzZWRfcHRyYW5zZm9ybSwgcGF5bG9hZCwgY29udGV4dCk6CiAgICByZXR1cm4gX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93KAogICAgICAgIGNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMuZ2V0X2J5X2lkKHBheWxvYWQudmFsdWUpKQoKCmRlZiBfZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMocGlwZWxpbmVfb3B0aW9ucyk6CiAgIyBBIGxpc3Qgb2YgUFRyYW5zZm9ybU92ZXJyaWRlIG9iamVjdHMgdG8gYmUgYXBwbGllZCBiZWZvcmUgcnVubmluZyBhIHBpcGVsaW5lCiAgIyB1c2luZyBEaXJlY3RSdW5uZXIuCiAgIyBDdXJyZW50bHkgdGhpcyBvbmx5IHdvcmtzIGZvciBvdmVycmlkZXMgd2hlcmUgdGhlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgZG8KICAjIG5vdCBjaGFuZ2UuCiAgIyBGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogICMgSW1wb3J0aW5nIGZvbGxvd2luZyBsb2NhbGx5IHRvIGF2b2lkIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS4KICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQVHJhbnNmb3JtT3ZlcnJpZGUKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmhlbHBlcl90cmFuc2Zvcm1zIGltcG9ydCBMaWZ0ZWRDb21iaW5lUGVyS2V5CiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lciBpbXBvcnQgUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lciBpbXBvcnQgU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUKCiAgY2xhc3MgQ29tYmluZVBlcktleU92ZXJyaWRlKFBUcmFuc2Zvcm1PdmVycmlkZSk6CiAgICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICBpZiBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIENvbWJpbmVQZXJLZXkpOgogICAgICAgIHJldHVybiBhcHBsaWVkX3B0cmFuc2Zvcm0uaW5wdXRzWzBdLndpbmRvd2luZy5pc19kZWZhdWx0KCkKCiAgICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm0pOgogICAgICAjIFRPRE86IE1vdmUgaW1wb3J0cyB0byB0b3AuIFBpcGVsaW5lIDwtPiBSdW5uZXIgZGVwZW5kZW5jeSBjYXVzZSBwcm9ibGVtcwogICAgICAjIHdpdGggcmVzb2x2aW5nIGltcG9ydHMgd2hlbiB0aGV5IGFyZSBhdCB0b3AuCiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICB0cnk6CiAgICAgICAgcmV0dXJuIExpZnRlZENvbWJpbmVQZXJLZXkoCiAgICAgICAgICAgIHRyYW5zZm9ybS5mbiwgdHJhbnNmb3JtLmFyZ3MsIHRyYW5zZm9ybS5rd2FyZ3MpCiAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgogICAgICAgIHJldHVybiB0cmFuc2Zvcm0KCiAgY2xhc3MgU3RyZWFtaW5nR3JvdXBCeUtleU92ZXJyaWRlKFBUcmFuc2Zvcm1PdmVycmlkZSk6CiAgICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAjIE5vdGU6IHdlIG1hdGNoIHRoZSBleGFjdCBjbGFzcywgc2luY2Ugd2UgcmVwbGFjZSBpdCB3aXRoIGEgc3ViY2xhc3MuCiAgICAgIHJldHVybiBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLl9fY2xhc3NfXyA9PSBfR3JvdXBCeUtleU9ubHkKCiAgICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm0pOgogICAgICAjIFVzZSBzcGVjaWFsaXplZCBzdHJlYW1pbmcgaW1wbGVtZW50YXRpb24uCiAgICAgIHRyYW5zZm9ybSA9IF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seSgpCiAgICAgIHJldHVybiB0cmFuc2Zvcm0KCiAgY2xhc3MgU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dPdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICAgZGVmIG1hdGNoZXMoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICAgIyBOb3RlOiB3ZSBtYXRjaCB0aGUgZXhhY3QgY2xhc3MsIHNpbmNlIHdlIHJlcGxhY2UgaXQgd2l0aCBhIHN1YmNsYXNzLgogICAgICB0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICAgIHJldHVybiAoCiAgICAgICAgICBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIFBhckRvKSBhbmQKICAgICAgICAgIGlzaW5zdGFuY2UodHJhbnNmb3JtLmRvZm4sIF9Hcm91cEFsc29CeVdpbmRvd0RvRm4pIGFuZAogICAgICAgICAgdHJhbnNmb3JtLl9fY2xhc3NfXyAhPSBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cpCgogICAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtKToKICAgICAgIyBVc2Ugc3BlY2lhbGl6ZWQgc3RyZWFtaW5nIGltcGxlbWVudGF0aW9uLgogICAgICB0cmFuc2Zvcm0gPSBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3codHJhbnNmb3JtLmRvZm4ud2luZG93aW5nKQogICAgICByZXR1cm4gdHJhbnNmb3JtCgogIGNsYXNzIFRlc3RTdHJlYW1PdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICAgZGVmIG1hdGNoZXMoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICAgZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3Rfc3RyZWFtIGltcG9ydCBUZXN0U3RyZWFtCiAgICAgIHNlbGYuYXBwbGllZF9wdHJhbnNmb3JtID0gYXBwbGllZF9wdHJhbnNmb3JtCiAgICAgIHJldHVybiBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIFRlc3RTdHJlYW0pCgogICAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtKToKICAgICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X3N0cmVhbV9pbXBsIGltcG9ydCBfRXhwYW5kYWJsZVRlc3RTdHJlYW0KICAgICAgcmV0dXJuIF9FeHBhbmRhYmxlVGVzdFN0cmVhbSh0cmFuc2Zvcm0pCgogIG92ZXJyaWRlcyA9IFsKICAgICAgU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUoKSwKICAgICAgUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRlKCksCiAgICAgIENvbWJpbmVQZXJLZXlPdmVycmlkZSgpLAogICAgICBUZXN0U3RyZWFtT3ZlcnJpZGUoKSwKICBdCgogICMgQWRkIHN0cmVhbWluZyBvdmVycmlkZXMsIGlmIG5lY2Vzc2FyeS4KICBpZiBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmc6CiAgICBvdmVycmlkZXMuYXBwZW5kKFN0cmVhbWluZ0dyb3VwQnlLZXlPdmVycmlkZSgpKQogICAgb3ZlcnJpZGVzLmFwcGVuZChTdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd092ZXJyaWRlKCkpCgogICMgQWRkIFB1YlN1YiBvdmVycmlkZXMsIGlmIFB1YlN1YiBpcyBhdmFpbGFibGUuCiAgdHJ5OgogICAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AgaW1wb3J0IHB1YnN1YiBhcyB1bnVzZWRfcHVic3ViCiAgICBvdmVycmlkZXMgKz0gX2dldF9wdWJzdWJfdHJhbnNmb3JtX292ZXJyaWRlcyhwaXBlbGluZV9vcHRpb25zKQogIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIHBhc3MKCiAgcmV0dXJuIG92ZXJyaWRlcwoKCmNsYXNzIF9EaXJlY3RSZWFkRnJvbVB1YlN1YihQVHJhbnNmb3JtKToKICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlKToKICAgIHNlbGYuX3NvdXJjZSA9IHNvdXJjZQoKICBkZWYgX2luZmVyX291dHB1dF9jb2RlcigKICAgICAgc2VsZiwgdW51c2VkX2lucHV0X3R5cGU9Tm9uZSwgdW51c2VkX2lucHV0X2NvZGVyPU5vbmUpOgogICAgIyB0eXBlOiAoLi4uKSAtPiB0eXBpbmcuT3B0aW9uYWxbY29kZXJzLkNvZGVyXQogICAgcmV0dXJuIGNvZGVycy5CeXRlc0NvZGVyKCkKCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgaW5wdXRzKToKICAgIHJldHVybiBiZWFtLldpbmRvd2luZyhiZWFtLndpbmRvdy5HbG9iYWxXaW5kb3dzKCkpCgogIGRlZiBleHBhbmQoc2VsZiwgcHZhbHVlKToKICAgICMgVGhpcyBpcyBoYW5kbGVkIGFzIGEgbmF0aXZlIHRyYW5zZm9ybS4KICAgIHJldHVybiBQQ29sbGVjdGlvbihzZWxmLnBpcGVsaW5lLCBpc19ib3VuZGVkPXNlbGYuX3NvdXJjZS5pc19ib3VuZGVkKCkpCgoKY2xhc3MgX0RpcmVjdFdyaXRlVG9QdWJTdWJGbihEb0ZuKToKICBCVUZGRVJfU0laRV9FTEVNRU5UUyA9IDEwMAogIEZMVVNIX1RJTUVPVVRfU0VDUyA9IEJVRkZFUl9TSVpFX0VMRU1FTlRTICogMC41CgogIGRlZiBfX2luaXRfXyhzZWxmLCBzaW5rKToKICAgIHNlbGYucHJvamVjdCA9IHNpbmsucHJvamVjdAogICAgc2VsZi5zaG9ydF90b3BpY19uYW1lID0gc2luay50b3BpY19uYW1lCiAgICBzZWxmLmlkX2xhYmVsID0gc2luay5pZF9sYWJlbAogICAgc2VsZi50aW1lc3RhbXBfYXR0cmlidXRlID0gc2luay50aW1lc3RhbXBfYXR0cmlidXRlCiAgICBzZWxmLndpdGhfYXR0cmlidXRlcyA9IHNpbmsud2l0aF9hdHRyaWJ1dGVzCgogICAgIyBUT0RPKEJFQU0tNDI3NSk6IEFkZCBzdXBwb3J0IGZvciBpZF9sYWJlbCBhbmQgdGltZXN0YW1wX2F0dHJpYnV0ZS4KICAgIGlmIHNpbmsuaWRfbGFiZWw6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnRGlyZWN0UnVubmVyOiBpZF9sYWJlbCBpcyBub3Qgc3VwcG9ydGVkIGZvciAnCiAgICAgICAgICAnUHViU3ViIHdyaXRlcycpCiAgICBpZiBzaW5rLnRpbWVzdGFtcF9hdHRyaWJ1dGU6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnRGlyZWN0UnVubmVyOiB0aW1lc3RhbXBfYXR0cmlidXRlIGlzIG5vdCAnCiAgICAgICAgICAnc3VwcG9ydGVkIGZvciBQdWJTdWIgd3JpdGVzJykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX2J1ZmZlciA9IFtdCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW0pOgogICAgc2VsZi5fYnVmZmVyLmFwcGVuZChlbGVtKQogICAgaWYgbGVuKHNlbGYuX2J1ZmZlcikgPj0gc2VsZi5CVUZGRVJfU0laRV9FTEVNRU5UUzoKICAgICAgc2VsZi5fZmx1c2goKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIHNlbGYuX2ZsdXNoKCkKCiAgZGVmIF9mbHVzaChzZWxmKToKICAgIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCBwdWJzdWIKICAgIHB1Yl9jbGllbnQgPSBwdWJzdWIuUHVibGlzaGVyQ2xpZW50KCkKICAgIHRvcGljID0gcHViX2NsaWVudC50b3BpY19wYXRoKHNlbGYucHJvamVjdCwgc2VsZi5zaG9ydF90b3BpY19uYW1lKQoKICAgIGlmIHNlbGYud2l0aF9hdHRyaWJ1dGVzOgogICAgICBmdXR1cmVzID0gWwogICAgICAgICAgcHViX2NsaWVudC5wdWJsaXNoKHRvcGljLCBlbGVtLmRhdGEsICoqZWxlbS5hdHRyaWJ1dGVzKQogICAgICAgICAgZm9yIGVsZW0gaW4gc2VsZi5fYnVmZmVyCiAgICAgIF0KICAgIGVsc2U6CiAgICAgIGZ1dHVyZXMgPSBbcHViX2NsaWVudC5wdWJsaXNoKHRvcGljLCBlbGVtKSBmb3IgZWxlbSBpbiBzZWxmLl9idWZmZXJdCgogICAgdGltZXJfc3RhcnQgPSB0aW1lLnRpbWUoKQogICAgZm9yIGZ1dHVyZSBpbiBmdXR1cmVzOgogICAgICByZW1haW5pbmcgPSBzZWxmLkZMVVNIX1RJTUVPVVRfU0VDUyAtICh0aW1lLnRpbWUoKSAtIHRpbWVyX3N0YXJ0KQogICAgICBmdXR1cmUucmVzdWx0KHJlbWFpbmluZykKICAgIHNlbGYuX2J1ZmZlciA9IFtdCgoKZGVmIF9nZXRfcHVic3ViX3RyYW5zZm9ybV9vdmVycmlkZXMocGlwZWxpbmVfb3B0aW9ucyk6CiAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AgaW1wb3J0IHB1YnN1YiBhcyBiZWFtX3B1YnN1YgogIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBUcmFuc2Zvcm1PdmVycmlkZQoKICBjbGFzcyBSZWFkRnJvbVB1YlN1Yk92ZXJyaWRlKFBUcmFuc2Zvcm1PdmVycmlkZSk6CiAgICBkZWYgbWF0Y2hlcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICByZXR1cm4gaXNpbnN0YW5jZSgKICAgICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIGJlYW1fcHVic3ViLlJlYWRGcm9tUHViU3ViKQoKICAgIGRlZiBnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybSk6CiAgICAgIGlmIG5vdCBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmc6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAogICAgICAgICAgICAnUHViU3ViIEkvTyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgbW9kZSAnCiAgICAgICAgICAgICcodXNlIHRoZSAtLXN0cmVhbWluZyBmbGFnKS4nKQogICAgICByZXR1cm4gX0RpcmVjdFJlYWRGcm9tUHViU3ViKHRyYW5zZm9ybS5fc291cmNlKQoKICBjbGFzcyBXcml0ZVRvUHViU3ViT3ZlcnJpZGUoUFRyYW5zZm9ybU92ZXJyaWRlKToKICAgIGRlZiBtYXRjaGVzKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAgIHJldHVybiBpc2luc3RhbmNlKAogICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSwKICAgICAgICAgIChiZWFtX3B1YnN1Yi5Xcml0ZVRvUHViU3ViLCBiZWFtX3B1YnN1Yi5fV3JpdGVTdHJpbmdzVG9QdWJTdWIpKQoKICAgIGRlZiBnZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybSk6CiAgICAgIGlmIG5vdCBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmc6CiAgICAgICAgcmFpc2UgRXhjZXB0aW9uKAogICAgICAgICAgICAnUHViU3ViIEkvTyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBzdHJlYW1pbmcgbW9kZSAnCiAgICAgICAgICAgICcodXNlIHRoZSAtLXN0cmVhbWluZyBmbGFnKS4nKQogICAgICByZXR1cm4gYmVhbS5QYXJEbyhfRGlyZWN0V3JpdGVUb1B1YlN1YkZuKHRyYW5zZm9ybS5fc2luaykpCgogIHJldHVybiBbUmVhZEZyb21QdWJTdWJPdmVycmlkZSgpLCBXcml0ZVRvUHViU3ViT3ZlcnJpZGUoKV0KCgpjbGFzcyBCdW5kbGVCYXNlZERpcmVjdFJ1bm5lcihQaXBlbGluZVJ1bm5lcik6CiAgIiIiRXhlY3V0ZXMgYSBzaW5nbGUgcGlwZWxpbmUgb24gdGhlIGxvY2FsIG1hY2hpbmUuIiIiCiAgQHN0YXRpY21ldGhvZAogIGRlZiBpc19mbmFwaV9jb21wYXRpYmxlKCk6CiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIHJ1bl9waXBlbGluZShzZWxmLCBwaXBlbGluZSwgb3B0aW9ucyk6CiAgICAiIiJFeGVjdXRlIHRoZSBlbnRpcmUgcGlwZWxpbmUgYW5kIHJldHVybnMgYW4gRGlyZWN0UGlwZWxpbmVSZXN1bHQuIiIiCgogICAgIyBUT0RPOiBNb3ZlIGltcG9ydHMgdG8gdG9wLiBQaXBlbGluZSA8LT4gUnVubmVyIGRlcGVuZGVuY3kgY2F1c2UgcHJvYmxlbXMKICAgICMgd2l0aCByZXNvbHZpbmcgaW1wb3J0cyB3aGVuIHRoZXkgYXJlIGF0IHRvcC4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmVWaXNpdG9yCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmNvbnN1bWVyX3RyYWNraW5nX3BpcGVsaW5lX3Zpc2l0b3IgaW1wb3J0IFwKICAgICAgQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvcgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHQgaW1wb3J0IEV2YWx1YXRpb25Db250ZXh0CiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yIGltcG9ydCBFeGVjdXRvcgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50cmFuc2Zvcm1fZXZhbHVhdG9yIGltcG9ydCBcCiAgICAgIFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5CiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3Rfc3RyZWFtX2ltcGwgaW1wb3J0IF9UZXN0U3RyZWFtCgogICAgIyBQZXJmb3JtaW5nIGNvbmZpZ3VyZWQgUFRyYW5zZm9ybSBvdmVycmlkZXMuCiAgICBwaXBlbGluZS5yZXBsYWNlX2FsbChfZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMob3B0aW9ucykpCgogICAgIyBJZiB0aGUgVGVzdFN0cmVhbSBJL08gaXMgdXNlZCwgdXNlIGEgbW9jayB0ZXN0IGNsb2NrLgogICAgY2xhc3MgX1Rlc3RTdHJlYW1Vc2FnZVZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAgICAgIiIiVmlzaXRvciBkZXRlcm1pbmluZyB3aGV0aGVyIGEgUGlwZWxpbmUgdXNlcyBhIFRlc3RTdHJlYW0uIiIiCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLnVzZXNfdGVzdF9zdHJlYW0gPSBGYWxzZQoKICAgICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAgIGlmIGlzaW5zdGFuY2UoYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSwgX1Rlc3RTdHJlYW0pOgogICAgICAgICAgc2VsZi51c2VzX3Rlc3Rfc3RyZWFtID0gVHJ1ZQoKICAgIHZpc2l0b3IgPSBfVGVzdFN0cmVhbVVzYWdlVmlzaXRvcigpCiAgICBwaXBlbGluZS52aXNpdCh2aXNpdG9yKQogICAgY2xvY2sgPSBUZXN0Q2xvY2soKSBpZiB2aXNpdG9yLnVzZXNfdGVzdF9zdHJlYW0gZWxzZSBSZWFsQ2xvY2soKQoKICAgIF9MT0dHRVIuaW5mbygnUnVubmluZyBwaXBlbGluZSB3aXRoIERpcmVjdFJ1bm5lci4nKQogICAgc2VsZi5jb25zdW1lcl90cmFja2luZ192aXNpdG9yID0gQ29uc3VtZXJUcmFja2luZ1BpcGVsaW5lVmlzaXRvcigpCiAgICBwaXBlbGluZS52aXNpdChzZWxmLmNvbnN1bWVyX3RyYWNraW5nX3Zpc2l0b3IpCgogICAgZXZhbHVhdGlvbl9jb250ZXh0ID0gRXZhbHVhdGlvbkNvbnRleHQoCiAgICAgICAgb3B0aW9ucywKICAgICAgICBCdW5kbGVGYWN0b3J5KAogICAgICAgICAgICBzdGFja2VkPW9wdGlvbnMudmlld19hcygKICAgICAgICAgICAgICAgIERpcmVjdE9wdGlvbnMpLmRpcmVjdF9ydW5uZXJfdXNlX3N0YWNrZWRfYnVuZGxlKSwKICAgICAgICBzZWxmLmNvbnN1bWVyX3RyYWNraW5nX3Zpc2l0b3Iucm9vdF90cmFuc2Zvcm1zLAogICAgICAgIHNlbGYuY29uc3VtZXJfdHJhY2tpbmdfdmlzaXRvci52YWx1ZV90b19jb25zdW1lcnMsCiAgICAgICAgc2VsZi5jb25zdW1lcl90cmFja2luZ192aXNpdG9yLnN0ZXBfbmFtZXMsCiAgICAgICAgc2VsZi5jb25zdW1lcl90cmFja2luZ192aXNpdG9yLnZpZXdzLAogICAgICAgIGNsb2NrKQoKICAgIGV4ZWN1dG9yID0gRXhlY3V0b3IoCiAgICAgICAgc2VsZi5jb25zdW1lcl90cmFja2luZ192aXNpdG9yLnZhbHVlX3RvX2NvbnN1bWVycywKICAgICAgICBUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeShldmFsdWF0aW9uX2NvbnRleHQpLAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCkKICAgICMgRGlyZWN0UnVubmVyIGRvZXMgbm90IHN1cHBvcnQgaW5qZWN0aW5nCiAgICAjIFBpcGVsaW5lT3B0aW9ucyB2YWx1ZXMgYXQgcnVudGltZQogICAgUnVudGltZVZhbHVlUHJvdmlkZXIuc2V0X3J1bnRpbWVfb3B0aW9ucyh7fSkKICAgICMgU3RhcnQgdGhlIGV4ZWN1dG9yLiBUaGlzIGlzIGEgbm9uLWJsb2NraW5nIGNhbGwsIGl0IHdpbGwgc3RhcnQgdGhlCiAgICAjIGV4ZWN1dGlvbiBpbiBiYWNrZ3JvdW5kIHRocmVhZHMgYW5kIHJldHVybi4KICAgIGV4ZWN1dG9yLnN0YXJ0KHNlbGYuY29uc3VtZXJfdHJhY2tpbmdfdmlzaXRvci5yb290X3RyYW5zZm9ybXMpCiAgICByZXN1bHQgPSBEaXJlY3RQaXBlbGluZVJlc3VsdChleGVjdXRvciwgZXZhbHVhdGlvbl9jb250ZXh0KQoKICAgIHJldHVybiByZXN1bHQKCgojIFVzZSB0aGUgU3dpdGNoaW5nRGlyZWN0UnVubmVyIGFzIHRoZSBkZWZhdWx0LgpEaXJlY3RSdW5uZXIgPSBTd2l0Y2hpbmdEaXJlY3RSdW5uZXIKCgpjbGFzcyBEaXJlY3RQaXBlbGluZVJlc3VsdChQaXBlbGluZVJlc3VsdCk6CiAgIiIiQSBEaXJlY3RQaXBlbGluZVJlc3VsdCBwcm92aWRlcyBhY2Nlc3MgdG8gaW5mbyBhYm91dCBhIHBpcGVsaW5lLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRvciwgZXZhbHVhdGlvbl9jb250ZXh0KToKICAgIHN1cGVyKERpcmVjdFBpcGVsaW5lUmVzdWx0LCBzZWxmKS5fX2luaXRfXyhQaXBlbGluZVN0YXRlLlJVTk5JTkcpCiAgICBzZWxmLl9leGVjdXRvciA9IGV4ZWN1dG9yCiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKCiAgZGVmIF9fZGVsX18oc2VsZik6CiAgICBpZiBzZWxmLl9zdGF0ZSA9PSBQaXBlbGluZVN0YXRlLlJVTk5JTkc6CiAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICdUaGUgRGlyZWN0UGlwZWxpbmVSZXN1bHQgaXMgYmVpbmcgZ2FyYmFnZS1jb2xsZWN0ZWQgd2hpbGUgdGhlICcKICAgICAgICAgICdEaXJlY3RSdW5uZXIgaXMgc3RpbGwgcnVubmluZyB0aGUgY29ycmVzcG9uZGluZyBwaXBlbGluZS4gVGhpcyBtYXkgJwogICAgICAgICAgJ2xlYWQgdG8gaW5jb21wbGV0ZSBleGVjdXRpb24gb2YgdGhlIHBpcGVsaW5lIGlmIHRoZSBtYWluIHRocmVhZCAnCiAgICAgICAgICAnZXhpdHMgYmVmb3JlIHBpcGVsaW5lIGNvbXBsZXRpb24uIENvbnNpZGVyIHVzaW5nICcKICAgICAgICAgICdyZXN1bHQud2FpdF91bnRpbF9maW5pc2goKSB0byB3YWl0IGZvciBjb21wbGV0aW9uIG9mIHBpcGVsaW5lICcKICAgICAgICAgICdleGVjdXRpb24uJykKCiAgZGVmIHdhaXRfdW50aWxfZmluaXNoKHNlbGYsIGR1cmF0aW9uPU5vbmUpOgogICAgaWYgbm90IFBpcGVsaW5lU3RhdGUuaXNfdGVybWluYWwoc2VsZi5zdGF0ZSk6CiAgICAgIGlmIGR1cmF0aW9uOgogICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAgICdEaXJlY3RSdW5uZXIgZG9lcyBub3Qgc3VwcG9ydCBkdXJhdGlvbiBhcmd1bWVudC4nKQogICAgICB0cnk6CiAgICAgICAgc2VsZi5fZXhlY3V0b3IuYXdhaXRfY29tcGxldGlvbigpCiAgICAgICAgc2VsZi5fc3RhdGUgPSBQaXBlbGluZVN0YXRlLkRPTkUKICAgICAgZXhjZXB0OiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgc2VsZi5fc3RhdGUgPSBQaXBlbGluZVN0YXRlLkZBSUxFRAogICAgICAgIHJhaXNlCiAgICByZXR1cm4gc2VsZi5fc3RhdGUKCiAgZGVmIGFnZ3JlZ2F0ZWRfdmFsdWVzKHNlbGYsIGFnZ3JlZ2F0b3Jfb3JfbmFtZSk6CiAgICByZXR1cm4gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmdldF9hZ2dyZWdhdG9yX3ZhbHVlcyhhZ2dyZWdhdG9yX29yX25hbWUpCgogIGRlZiBtZXRyaWNzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5tZXRyaWNzKCkKCiAgZGVmIGNhbmNlbChzZWxmKToKICAgICIiIlNodXRzIGRvd24gcGlwZWxpbmUgd29ya2Vycy4KCiAgICBGb3IgdGVzdGluZyB1c2Ugb25seS4gRG9lcyBub3QgcHJvcGVybHkgd2FpdCBmb3IgcGlwZWxpbmUgd29ya2VycyB0byBzaHV0CiAgICBkb3duLgogICAgIiIiCiAgICBzZWxmLl9zdGF0ZSA9IFBpcGVsaW5lU3RhdGUuQ0FOQ0VMTElORwogICAgc2VsZi5fZXhlY3V0b3Iuc2h1dGRvd24oKQogICAgc2VsZi5fc3RhdGUgPSBQaXBlbGluZVN0YXRlLkNBTkNFTExFRAqUlRwAAQAAAAAAfZQojClTd2l0Y2hpbmdEaXJlY3RSdW5uZXIuaXNfZm5hcGlfY29tcGF0aWJsZZRqVjEBAEtJS0qHlIxEU3dpdGNoaW5nRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZS5fRm5BcGlSdW5uZXJTdXBwb3J0VmlzaXRvci5hY2NlcHSUalYxAQBLVUtYh5SMTVN3aXRjaGluZ0RpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmUuX0ZuQXBpUnVubmVyU3VwcG9ydFZpc2l0b3IudmlzaXRfdHJhbnNmb3JtlGpWMQEAS1pLb4eUjD1Td2l0Y2hpbmdEaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5lLl9GbkFwaVJ1bm5lclN1cHBvcnRWaXNpdG9ylGpdMQEAS1NLb4eUjCJTd2l0Y2hpbmdEaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5llGpWMQEAS0xLgoeUjBVTd2l0Y2hpbmdEaXJlY3RSdW5uZXKUal0xAQBLQUuCh5SMMF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAEuRS5KHlIwyX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBLlEuYh5SMGF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seZRqXTEBAEuKS5iHlIwzX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEAS6JLpoeUjDVfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAEuoS6yHlIwbX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93lGpdMQEAS5tLrIeUjDZfZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMuQ29tYmluZVBlcktleU92ZXJyaWRlLm1hdGNoZXOUalYxAQBLvUu/h5SMSF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5Db21iaW5lUGVyS2V5T3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqVjEBAEvBS8mHlIwuX2dldF90cmFuc2Zvcm1fb3ZlcnJpZGVzLkNvbWJpbmVQZXJLZXlPdmVycmlkZZRqXTEBAEu8S8mHlIw8X2dldF90cmFuc2Zvcm1fb3ZlcnJpZGVzLlN0cmVhbWluZ0dyb3VwQnlLZXlPdmVycmlkZS5tYXRjaGVzlGpWMQEAS8xLzoeUjE5fZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMuU3RyZWFtaW5nR3JvdXBCeUtleU92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm2UalYxAQBL0EvTh5SMNF9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5TdHJlYW1pbmdHcm91cEJ5S2V5T3ZlcnJpZGWUal0xAQBLy0vTh5SMQ19nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd092ZXJyaWRlLm1hdGNoZXOUalYxAQBL1kvch5SMVV9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd092ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm2UalYxAQBL3kvhh5SMO19nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd092ZXJyaWRllGpdMQEAS9VL4YeUjDNfZ2V0X3RyYW5zZm9ybV9vdmVycmlkZXMuVGVzdFN0cmVhbU92ZXJyaWRlLm1hdGNoZXOUalYxAQBL5Evnh5SMRV9nZXRfdHJhbnNmb3JtX292ZXJyaWRlcy5UZXN0U3RyZWFtT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqVjEBAEvpS+uHlIwrX2dldF90cmFuc2Zvcm1fb3ZlcnJpZGVzLlRlc3RTdHJlYW1PdmVycmlkZZRqXTEBAEvjS+uHlIwYX2dldF90cmFuc2Zvcm1fb3ZlcnJpZGVzlGpWMQEAS69NAAGHlIweX0RpcmVjdFJlYWRGcm9tUHViU3ViLl9faW5pdF9flGpWMQEATQQBTQUBh5SMKV9EaXJlY3RSZWFkRnJvbVB1YlN1Yi5faW5mZXJfb3V0cHV0X2NvZGVylGpWMQEATQcBTQoBh5SMI19EaXJlY3RSZWFkRnJvbVB1YlN1Yi5nZXRfd2luZG93aW5nlGpWMQEATQwBTQ0Bh5SMHF9EaXJlY3RSZWFkRnJvbVB1YlN1Yi5leHBhbmSUalYxAQBNDwFNEQGHlIwVX0RpcmVjdFJlYWRGcm9tUHViU3VilGpdMQEATQMBTREBh5SMH19EaXJlY3RXcml0ZVRvUHViU3ViRm4uX19pbml0X1+UalYxAQBNGAFNJwGHlIwjX0RpcmVjdFdyaXRlVG9QdWJTdWJGbi5zdGFydF9idW5kbGWUalYxAQBNKQFNKgGHlIweX0RpcmVjdFdyaXRlVG9QdWJTdWJGbi5wcm9jZXNzlGpWMQEATSwBTS8Bh5SMJF9EaXJlY3RXcml0ZVRvUHViU3ViRm4uZmluaXNoX2J1bmRsZZRqVjEBAE0xAU0yAYeUjB1fRGlyZWN0V3JpdGVUb1B1YlN1YkZuLl9mbHVzaJRqVjEBAE00AU1FAYeUjBZfRGlyZWN0V3JpdGVUb1B1YlN1YkZulGpdMQEATRQBTUUBh5SMPl9nZXRfcHVic3ViX3RyYW5zZm9ybV9vdmVycmlkZXMuUmVhZEZyb21QdWJTdWJPdmVycmlkZS5tYXRjaGVzlGpWMQEATU0BTU8Bh5SMUF9nZXRfcHVic3ViX3RyYW5zZm9ybV9vdmVycmlkZXMuUmVhZEZyb21QdWJTdWJPdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtlGpWMQEATVEBTVYBh5SMNl9nZXRfcHVic3ViX3RyYW5zZm9ybV9vdmVycmlkZXMuUmVhZEZyb21QdWJTdWJPdmVycmlkZZRqXTEBAE1MAU1WAYeUjD1fZ2V0X3B1YnN1Yl90cmFuc2Zvcm1fb3ZlcnJpZGVzLldyaXRlVG9QdWJTdWJPdmVycmlkZS5tYXRjaGVzlGpWMQEATVkBTVwBh5SMT19nZXRfcHVic3ViX3RyYW5zZm9ybV9vdmVycmlkZXMuV3JpdGVUb1B1YlN1Yk92ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm2UalYxAQBNXgFNYwGHlIw1X2dldF9wdWJzdWJfdHJhbnNmb3JtX292ZXJyaWRlcy5Xcml0ZVRvUHViU3ViT3ZlcnJpZGWUal0xAQBNWAFNYwGHlIwfX2dldF9wdWJzdWJfdHJhbnNmb3JtX292ZXJyaWRlc5RqVjEBAE1IAU1lAYeUjCtCdW5kbGVCYXNlZERpcmVjdFJ1bm5lci5pc19mbmFwaV9jb21wYXRpYmxllGpWMQEATWoBTWwBh5SMRUJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZS5fVGVzdFN0cmVhbVVzYWdlVmlzaXRvci5fX2luaXRfX5RqVjEBAE2DAU2EAYeUjExCdW5kbGVCYXNlZERpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmUuX1Rlc3RTdHJlYW1Vc2FnZVZpc2l0b3IudmlzaXRfdHJhbnNmb3JtlGpWMQEATYYBTYgBh5SMPEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZS5fVGVzdFN0cmVhbVVzYWdlVmlzaXRvcpRqXTEBAE2BAU2IAYeUjCRCdW5kbGVCYXNlZERpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmWUalYxAQBNbgFNqQGHlIwXQnVuZGxlQmFzZWREaXJlY3RSdW5uZXKUal0xAQBNaAFNqQGHlIwdRGlyZWN0UGlwZWxpbmVSZXN1bHQuX19pbml0X1+UalYxAQBNsgFNtQGHlIwcRGlyZWN0UGlwZWxpbmVSZXN1bHQuX19kZWxfX5RqVjEBAE23AU2/AYeUjCZEaXJlY3RQaXBlbGluZVJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaJRqVjEBAE3BAU3MAYeUjCZEaXJlY3RQaXBlbGluZVJlc3VsdC5hZ2dyZWdhdGVkX3ZhbHVlc5RqVjEBAE3OAU3PAYeUjBxEaXJlY3RQaXBlbGluZVJlc3VsdC5tZXRyaWNzlGpWMQEATdEBTdIBh5SMG0RpcmVjdFBpcGVsaW5lUmVzdWx0LmNhbmNlbJRqVjEBAE3UAU3cAYeUjBREaXJlY3RQaXBlbGluZVJlc3VsdJRqXTEBAE2wAU3cAYeUdX2UKIwVU3dpdGNoaW5nRGlyZWN0UnVubmVylGr3AwAAjClTd2l0Y2hpbmdEaXJlY3RSdW5uZXIuaXNfZm5hcGlfY29tcGF0aWJsZZRq9wMAAIwiU3dpdGNoaW5nRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZZRq9wMAAIwXQnVuZGxlQmFzZWREaXJlY3RSdW5uZXKUavcDAACMK0J1bmRsZUJhc2VkRGlyZWN0UnVubmVyLmlzX2ZuYXBpX2NvbXBhdGlibGWUavcDAACMJEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLnJ1bl9waXBlbGluZZRq9wMAAHWMKGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXKUdJSMK2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGWUKFg3JAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJTdXBwb3J0IGZvciB1c2VyIHN0YXRlIGluIHRoZSBCdW5kbGVCYXNlZERpcmVjdFJ1bm5lci4iIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpdGVydG9vbHMKCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgdXNlcnN0YXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBfTGlzdFN0YXRlVGFnCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBfU2V0U3RhdGVUYWcKCgpjbGFzcyBEaXJlY3RSdW50aW1lU3RhdGUodXNlcnN0YXRlLlJ1bnRpbWVTdGF0ZSk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgY3VycmVudF92YWx1ZV9hY2Nlc3Nvcik6CiAgICBzZWxmLl9zdGF0ZV9zcGVjID0gc3RhdGVfc3BlYwogICAgc2VsZi5fc3RhdGVfdGFnID0gc3RhdGVfdGFnCiAgICBzZWxmLl9jdXJyZW50X3ZhbHVlX2FjY2Vzc29yID0gY3VycmVudF92YWx1ZV9hY2Nlc3NvcgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZvcl9zcGVjKHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgY3VycmVudF92YWx1ZV9hY2Nlc3Nvcik6CiAgICBpZiBpc2luc3RhbmNlKHN0YXRlX3NwZWMsIHVzZXJzdGF0ZS5CYWdTdGF0ZVNwZWMpOgogICAgICByZXR1cm4gQmFnUnVudGltZVN0YXRlKHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgY3VycmVudF92YWx1ZV9hY2Nlc3NvcikKICAgIGVsaWYgaXNpbnN0YW5jZShzdGF0ZV9zcGVjLCB1c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWMpOgogICAgICByZXR1cm4gQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUoCiAgICAgICAgICBzdGF0ZV9zcGVjLCBzdGF0ZV90YWcsIGN1cnJlbnRfdmFsdWVfYWNjZXNzb3IpCiAgICBlbGlmIGlzaW5zdGFuY2Uoc3RhdGVfc3BlYywgdXNlcnN0YXRlLlNldFN0YXRlU3BlYyk6CiAgICAgIHJldHVybiBTZXRSdW50aW1lU3RhdGUoc3RhdGVfc3BlYywgc3RhdGVfdGFnLCBjdXJyZW50X3ZhbHVlX2FjY2Vzc29yKQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBzdGF0ZSBzcGVjOiAlcycgJSBzdGF0ZV9zcGVjKQoKICBkZWYgX2VuY29kZShzZWxmLCB2YWx1ZSk6CiAgICByZXR1cm4gc2VsZi5fc3RhdGVfc3BlYy5jb2Rlci5lbmNvZGUodmFsdWUpCgogIGRlZiBfZGVjb2RlKHNlbGYsIHZhbHVlKToKICAgIHJldHVybiBzZWxmLl9zdGF0ZV9zcGVjLmNvZGVyLmRlY29kZSh2YWx1ZSkKCgojIFNlbnRpbmVsIGRlc2lnbmF0aW5nIGFuIHVucmVhZCB2YWx1ZS4KVU5SRUFEX1ZBTFVFID0gb2JqZWN0KCkKCgpjbGFzcyBCYWdSdW50aW1lU3RhdGUoRGlyZWN0UnVudGltZVN0YXRlLCB1c2Vyc3RhdGUuQmFnUnVudGltZVN0YXRlKToKICBkZWYgX19pbml0X18oc2VsZiwgc3RhdGVfc3BlYywgc3RhdGVfdGFnLCBjdXJyZW50X3ZhbHVlX2FjY2Vzc29yKToKICAgIHN1cGVyKEJhZ1J1bnRpbWVTdGF0ZSwKICAgICAgICAgIHNlbGYpLl9faW5pdF9fKHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgY3VycmVudF92YWx1ZV9hY2Nlc3NvcikKICAgIHNlbGYuX2NhY2hlZF92YWx1ZSA9IFVOUkVBRF9WQUxVRQogICAgc2VsZi5fY2xlYXJlZCA9IEZhbHNlCiAgICBzZWxmLl9uZXdfdmFsdWVzID0gW10KCiAgZGVmIHJlYWQoc2VsZik6CiAgICBpZiBzZWxmLl9jYWNoZWRfdmFsdWUgaXMgVU5SRUFEX1ZBTFVFOgogICAgICBzZWxmLl9jYWNoZWRfdmFsdWUgPSBzZWxmLl9jdXJyZW50X3ZhbHVlX2FjY2Vzc29yKCkKICAgIGlmIG5vdCBzZWxmLl9jbGVhcmVkOgogICAgICBlbmNvZGVkX3ZhbHVlcyA9IGl0ZXJ0b29scy5jaGFpbihzZWxmLl9jYWNoZWRfdmFsdWUsIHNlbGYuX25ld192YWx1ZXMpCiAgICBlbHNlOgogICAgICBlbmNvZGVkX3ZhbHVlcyA9IHNlbGYuX25ld192YWx1ZXMKICAgIHJldHVybiAoc2VsZi5fZGVjb2RlKHYpIGZvciB2IGluIGVuY29kZWRfdmFsdWVzKQoKICBkZWYgYWRkKHNlbGYsIHZhbHVlKToKICAgIHNlbGYuX25ld192YWx1ZXMuYXBwZW5kKHNlbGYuX2VuY29kZSh2YWx1ZSkpCgogIGRlZiBjbGVhcihzZWxmKToKICAgIHNlbGYuX2NsZWFyZWQgPSBUcnVlCiAgICBzZWxmLl9jYWNoZWRfdmFsdWUgPSBbXQogICAgc2VsZi5fbmV3X3ZhbHVlcyA9IFtdCgoKY2xhc3MgU2V0UnVudGltZVN0YXRlKERpcmVjdFJ1bnRpbWVTdGF0ZSwgdXNlcnN0YXRlLlNldFJ1bnRpbWVTdGF0ZSk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlX3NwZWMsIHN0YXRlX3RhZywgY3VycmVudF92YWx1ZV9hY2Nlc3Nvcik6CiAgICBzdXBlcihTZXRSdW50aW1lU3RhdGUsCiAgICAgICAgICBzZWxmKS5fX2luaXRfXyhzdGF0ZV9zcGVjLCBzdGF0ZV90YWcsIGN1cnJlbnRfdmFsdWVfYWNjZXNzb3IpCiAgICBzZWxmLl9jdXJyZW50X2FjY3VtdWxhdG9yID0gVU5SRUFEX1ZBTFVFCiAgICBzZWxmLl9tb2RpZmllZCA9IEZhbHNlCgogIGRlZiBfcmVhZF9pbml0aWFsX3ZhbHVlKHNlbGYpOgogICAgaWYgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvciBpcyBVTlJFQURfVkFMVUU6CiAgICAgIHNlbGYuX2N1cnJlbnRfYWNjdW11bGF0b3IgPSB7CiAgICAgICAgICBzZWxmLl9kZWNvZGUoYSkKICAgICAgICAgIGZvciBhIGluIHNlbGYuX2N1cnJlbnRfdmFsdWVfYWNjZXNzb3IoKQogICAgICB9CgogIGRlZiByZWFkKHNlbGYpOgogICAgc2VsZi5fcmVhZF9pbml0aWFsX3ZhbHVlKCkKICAgIHJldHVybiBzZWxmLl9jdXJyZW50X2FjY3VtdWxhdG9yCgogIGRlZiBhZGQoc2VsZiwgdmFsdWUpOgogICAgc2VsZi5fcmVhZF9pbml0aWFsX3ZhbHVlKCkKICAgIHNlbGYuX21vZGlmaWVkID0gVHJ1ZQogICAgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvci5hZGQodmFsdWUpCgogIGRlZiBjbGVhcihzZWxmKToKICAgIHNlbGYuX2N1cnJlbnRfYWNjdW11bGF0b3IgPSBzZXQoKQogICAgc2VsZi5fbW9kaWZpZWQgPSBUcnVlCgogIGRlZiBpc19tb2RpZmllZChzZWxmKToKICAgIHJldHVybiBzZWxmLl9tb2RpZmllZAoKCmNsYXNzIENvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlKERpcmVjdFJ1bnRpbWVTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnN0YXRlLkNvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlKToKICAiIiJDb21iaW5pbmcgdmFsdWUgc3RhdGUgaW50ZXJmYWNlIG9iamVjdCBwYXNzZWQgdG8gdXNlciBjb2RlLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0ZV9zcGVjLCBzdGF0ZV90YWcsIGN1cnJlbnRfdmFsdWVfYWNjZXNzb3IpOgogICAgc3VwZXIoQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUsCiAgICAgICAgICBzZWxmKS5fX2luaXRfXyhzdGF0ZV9zcGVjLCBzdGF0ZV90YWcsIGN1cnJlbnRfdmFsdWVfYWNjZXNzb3IpCiAgICBzZWxmLl9jdXJyZW50X2FjY3VtdWxhdG9yID0gVU5SRUFEX1ZBTFVFCiAgICBzZWxmLl9tb2RpZmllZCA9IEZhbHNlCiAgICBzZWxmLl9jb21iaW5lX2ZuID0gc3RhdGVfc3BlYy5jb21iaW5lX2ZuCgogIGRlZiBfcmVhZF9pbml0aWFsX3ZhbHVlKHNlbGYpOgogICAgaWYgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvciBpcyBVTlJFQURfVkFMVUU6CiAgICAgIGV4aXN0aW5nX2FjY3VtdWxhdG9ycyA9IGxpc3QoCiAgICAgICAgICBzZWxmLl9kZWNvZGUoYSkgZm9yIGEgaW4gc2VsZi5fY3VycmVudF92YWx1ZV9hY2Nlc3NvcigpKQogICAgICBpZiBleGlzdGluZ19hY2N1bXVsYXRvcnM6CiAgICAgICAgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvciA9IHNlbGYuX2NvbWJpbmVfZm4ubWVyZ2VfYWNjdW11bGF0b3JzKAogICAgICAgICAgICBleGlzdGluZ19hY2N1bXVsYXRvcnMpCiAgICAgIGVsc2U6CiAgICAgICAgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvciA9IHNlbGYuX2NvbWJpbmVfZm4uY3JlYXRlX2FjY3VtdWxhdG9yKCkKCiAgZGVmIHJlYWQoc2VsZik6CiAgICBzZWxmLl9yZWFkX2luaXRpYWxfdmFsdWUoKQogICAgcmV0dXJuIHNlbGYuX2NvbWJpbmVfZm4uZXh0cmFjdF9vdXRwdXQoc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvcikKCiAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6CiAgICBzZWxmLl9yZWFkX2luaXRpYWxfdmFsdWUoKQogICAgc2VsZi5fbW9kaWZpZWQgPSBUcnVlCiAgICBzZWxmLl9jdXJyZW50X2FjY3VtdWxhdG9yID0gc2VsZi5fY29tYmluZV9mbi5hZGRfaW5wdXQoCiAgICAgICAgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvciwgdmFsdWUpCgogIGRlZiBjbGVhcihzZWxmKToKICAgIHNlbGYuX21vZGlmaWVkID0gVHJ1ZQogICAgc2VsZi5fY3VycmVudF9hY2N1bXVsYXRvciA9IHNlbGYuX2NvbWJpbmVfZm4uY3JlYXRlX2FjY3VtdWxhdG9yKCkKCgpjbGFzcyBEaXJlY3RVc2VyU3RhdGVDb250ZXh0KHVzZXJzdGF0ZS5Vc2VyU3RhdGVDb250ZXh0KToKICAiIiJ1c2Vyc3RhdGUuVXNlclN0YXRlQ29udGV4dCBmb3IgdGhlIEJ1bmRsZUJhc2VkRGlyZWN0UnVubmVyLgoKICBUaGUgRGlyZWN0VXNlclN0YXRlQ29udGV4dCBidWZmZXJzIHVwIHVwZGF0ZXMgdGhhdCBhcmUgdG8gYmUgY29tbWl0dGVkCiAgYnkgdGhlIFRyYW5zZm9ybUV2YWx1YXRvciBhZnRlciBydW5uaW5nIGEgRG9Gbi4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc3RlcF9jb250ZXh0LCBkb2ZuLCBrZXlfY29kZXIpOgogICAgc2VsZi5zdGVwX2NvbnRleHQgPSBzdGVwX2NvbnRleHQKICAgIHNlbGYuZG9mbiA9IGRvZm4KICAgIHNlbGYua2V5X2NvZGVyID0ga2V5X2NvZGVyCgogICAgc2VsZi5hbGxfc3RhdGVfc3BlY3MsIHNlbGYuYWxsX3RpbWVyX3NwZWNzID0gKAogICAgICAgIHVzZXJzdGF0ZS5nZXRfZG9mbl9zcGVjcyhkb2ZuKSkKICAgIHNlbGYuc3RhdGVfdGFncyA9IHt9CiAgICBmb3Igc3RhdGVfc3BlYyBpbiBzZWxmLmFsbF9zdGF0ZV9zcGVjczoKICAgICAgc3RhdGVfa2V5ID0gJ3VzZXIvJXMnICUgc3RhdGVfc3BlYy5uYW1lCiAgICAgIGlmIGlzaW5zdGFuY2Uoc3RhdGVfc3BlYywgdXNlcnN0YXRlLkJhZ1N0YXRlU3BlYyk6CiAgICAgICAgc3RhdGVfdGFnID0gX0xpc3RTdGF0ZVRhZyhzdGF0ZV9rZXkpCiAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGF0ZV9zcGVjLCB1c2Vyc3RhdGUuQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWMpOgogICAgICAgIHN0YXRlX3RhZyA9IF9MaXN0U3RhdGVUYWcoc3RhdGVfa2V5KQogICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RhdGVfc3BlYywgdXNlcnN0YXRlLlNldFN0YXRlU3BlYyk6CiAgICAgICAgc3RhdGVfdGFnID0gX1NldFN0YXRlVGFnKHN0YXRlX2tleSkKICAgICAgZWxzZToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHN0YXRlIHNwZWM6ICVzJyAlIHN0YXRlX3NwZWMpCiAgICAgIHNlbGYuc3RhdGVfdGFnc1tzdGF0ZV9zcGVjXSA9IHN0YXRlX3RhZwoKICAgIHNlbGYuY2FjaGVkX3N0YXRlcyA9IHt9CiAgICBzZWxmLmNhY2hlZF90aW1lcnMgPSB7fQoKICBkZWYgZ2V0X3RpbWVyKHNlbGYsIHRpbWVyX3NwZWMsIGtleSwgd2luZG93KToKICAgIGFzc2VydCB0aW1lcl9zcGVjIGluIHNlbGYuYWxsX3RpbWVyX3NwZWNzCiAgICBlbmNvZGVkX2tleSA9IHNlbGYua2V5X2NvZGVyLmVuY29kZShrZXkpCiAgICBjYWNoZV9rZXkgPSAoZW5jb2RlZF9rZXksIHdpbmRvdywgdGltZXJfc3BlYykKICAgIGlmIGNhY2hlX2tleSBub3QgaW4gc2VsZi5jYWNoZWRfdGltZXJzOgogICAgICBzZWxmLmNhY2hlZF90aW1lcnNbY2FjaGVfa2V5XSA9IHVzZXJzdGF0ZS5SdW50aW1lVGltZXIodGltZXJfc3BlYykKICAgIHJldHVybiBzZWxmLmNhY2hlZF90aW1lcnNbY2FjaGVfa2V5XQoKICBkZWYgZ2V0X3N0YXRlKHNlbGYsIHN0YXRlX3NwZWMsIGtleSwgd2luZG93KToKICAgIGFzc2VydCBzdGF0ZV9zcGVjIGluIHNlbGYuYWxsX3N0YXRlX3NwZWNzCiAgICBlbmNvZGVkX2tleSA9IHNlbGYua2V5X2NvZGVyLmVuY29kZShrZXkpCiAgICBjYWNoZV9rZXkgPSAoZW5jb2RlZF9rZXksIHdpbmRvdywgc3RhdGVfc3BlYykKICAgIGlmIGNhY2hlX2tleSBub3QgaW4gc2VsZi5jYWNoZWRfc3RhdGVzOgogICAgICBzdGF0ZV90YWcgPSBzZWxmLnN0YXRlX3RhZ3Nbc3RhdGVfc3BlY10KICAgICAgdmFsdWVfYWNjZXNzb3IgPSAoCiAgICAgICAgICBsYW1iZGE6IHNlbGYuX2dldF91bmRlcmx5aW5nX3N0YXRlKHN0YXRlX3NwZWMsIGtleSwgd2luZG93KSkKICAgICAgc2VsZi5jYWNoZWRfc3RhdGVzW2NhY2hlX2tleV0gPSBEaXJlY3RSdW50aW1lU3RhdGUuZm9yX3NwZWMoCiAgICAgICAgICBzdGF0ZV9zcGVjLCBzdGF0ZV90YWcsIHZhbHVlX2FjY2Vzc29yKQogICAgcmV0dXJuIHNlbGYuY2FjaGVkX3N0YXRlc1tjYWNoZV9rZXldCgogIGRlZiBfZ2V0X3VuZGVybHlpbmdfc3RhdGUoc2VsZiwgc3RhdGVfc3BlYywga2V5LCB3aW5kb3cpOgogICAgc3RhdGVfdGFnID0gc2VsZi5zdGF0ZV90YWdzW3N0YXRlX3NwZWNdCiAgICBlbmNvZGVkX2tleSA9IHNlbGYua2V5X2NvZGVyLmVuY29kZShrZXkpCiAgICByZXR1cm4gKAogICAgICAgIHNlbGYuc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShlbmNvZGVkX2tleSkuZ2V0X3N0YXRlKAogICAgICAgICAgICB3aW5kb3csIHN0YXRlX3RhZykpCgogIGRlZiBjb21taXQoc2VsZik6CiAgICAjIENvbW1pdCBzdGF0ZSBtb2RpZmljYXRpb25zLgogICAgZm9yIGNhY2hlX2tleSwgcnVudGltZV9zdGF0ZSBpbiBzZWxmLmNhY2hlZF9zdGF0ZXMuaXRlbXMoKToKICAgICAgZW5jb2RlZF9rZXksIHdpbmRvdywgc3RhdGVfc3BlYyA9IGNhY2hlX2tleQogICAgICBzdGF0ZSA9IHNlbGYuc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShlbmNvZGVkX2tleSkKICAgICAgc3RhdGVfdGFnID0gc2VsZi5zdGF0ZV90YWdzW3N0YXRlX3NwZWNdCiAgICAgIGlmIGlzaW5zdGFuY2Uoc3RhdGVfc3BlYywgdXNlcnN0YXRlLkJhZ1N0YXRlU3BlYyk6CiAgICAgICAgaWYgcnVudGltZV9zdGF0ZS5fY2xlYXJlZDoKICAgICAgICAgIHN0YXRlLmNsZWFyX3N0YXRlKHdpbmRvdywgc3RhdGVfdGFnKQogICAgICAgIGZvciBuZXdfdmFsdWUgaW4gcnVudGltZV9zdGF0ZS5fbmV3X3ZhbHVlczoKICAgICAgICAgIHN0YXRlLmFkZF9zdGF0ZSh3aW5kb3csIHN0YXRlX3RhZywgbmV3X3ZhbHVlKQogICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RhdGVfc3BlYywgdXNlcnN0YXRlLkNvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjKToKICAgICAgICBpZiBydW50aW1lX3N0YXRlLl9tb2RpZmllZDoKICAgICAgICAgIHN0YXRlLmNsZWFyX3N0YXRlKHdpbmRvdywgc3RhdGVfdGFnKQogICAgICAgICAgc3RhdGUuYWRkX3N0YXRlKAogICAgICAgICAgICAgIHdpbmRvdywKICAgICAgICAgICAgICBzdGF0ZV90YWcsCiAgICAgICAgICAgICAgc3RhdGVfc3BlYy5jb2Rlci5lbmNvZGUocnVudGltZV9zdGF0ZS5fY3VycmVudF9hY2N1bXVsYXRvcikpCiAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGF0ZV9zcGVjLCB1c2Vyc3RhdGUuU2V0U3RhdGVTcGVjKToKICAgICAgICBpZiBydW50aW1lX3N0YXRlLmlzX21vZGlmaWVkKCk6CiAgICAgICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHN0YXRlX3RhZykKICAgICAgICAgIGZvciBuZXdfdmFsdWUgaW4gcnVudGltZV9zdGF0ZS5fY3VycmVudF9hY2N1bXVsYXRvcjoKICAgICAgICAgICAgc3RhdGUuYWRkX3N0YXRlKAogICAgICAgICAgICAgICAgd2luZG93LCBzdGF0ZV90YWcsIHN0YXRlX3NwZWMuY29kZXIuZW5jb2RlKG5ld192YWx1ZSkpCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBzdGF0ZSBzcGVjOiAlcycgJSBzdGF0ZV9zcGVjKQoKICAgICMgQ29tbWl0IG5ldyB0aW1lcnMuCiAgICBmb3IgY2FjaGVfa2V5LCBydW50aW1lX3RpbWVyIGluIHNlbGYuY2FjaGVkX3RpbWVycy5pdGVtcygpOgogICAgICBlbmNvZGVkX2tleSwgd2luZG93LCB0aW1lcl9zcGVjID0gY2FjaGVfa2V5CiAgICAgIHN0YXRlID0gc2VsZi5zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKGVuY29kZWRfa2V5KQogICAgICB0aW1lcl9uYW1lID0gJ3VzZXIvJXMnICUgdGltZXJfc3BlYy5uYW1lCiAgICAgIGlmIHJ1bnRpbWVfdGltZXIuX2NsZWFyZWQ6CiAgICAgICAgc3RhdGUuY2xlYXJfdGltZXIod2luZG93LCB0aW1lcl9uYW1lLCB0aW1lcl9zcGVjLnRpbWVfZG9tYWluKQogICAgICBpZiBydW50aW1lX3RpbWVyLl9uZXdfdGltZXN0YW1wIGlzIG5vdCBOb25lOgogICAgICAgICMgVE9ETyhjY3kpOiBhZGQgY29ycmVzcG9uZGluZyB3YXRlcm1hcmsgaG9sZHMgYWZ0ZXIgdGhlIERpcmVjdFJ1bm5lcgogICAgICAgICMgYWxsb3dzIGZvciBrZXllZCB3YXRlcm1hcmsgaG9sZHMuCiAgICAgICAgc3RhdGUuc2V0X3RpbWVyKAogICAgICAgICAgICB3aW5kb3csCiAgICAgICAgICAgIHRpbWVyX25hbWUsCiAgICAgICAgICAgIHRpbWVyX3NwZWMudGltZV9kb21haW4sCiAgICAgICAgICAgIHJ1bnRpbWVfdGltZXIuX25ld190aW1lc3RhbXApCpR9lCiMG0RpcmVjdFJ1bnRpbWVTdGF0ZS5fX2luaXRfX5RqVjEBAEsfSyKHlIwbRGlyZWN0UnVudGltZVN0YXRlLmZvcl9zcGVjlGpWMQEASyRLLoeUjBpEaXJlY3RSdW50aW1lU3RhdGUuX2VuY29kZZRqVjEBAEswSzGHlIwaRGlyZWN0UnVudGltZVN0YXRlLl9kZWNvZGWUalYxAQBLM0s0h5SMEkRpcmVjdFJ1bnRpbWVTdGF0ZZRqXTEBAEseSzSHlIwYQmFnUnVudGltZVN0YXRlLl9faW5pdF9flGpWMQEASzxLQYeUjBRCYWdSdW50aW1lU3RhdGUucmVhZJRqVjEBAEtDS0qHlIwTQmFnUnVudGltZVN0YXRlLmFkZJRqVjEBAEtMS02HlIwVQmFnUnVudGltZVN0YXRlLmNsZWFylGpWMQEAS09LUoeUjA9CYWdSdW50aW1lU3RhdGWUal0xAQBLO0tSh5SMGFNldFJ1bnRpbWVTdGF0ZS5fX2luaXRfX5RqVjEBAEtWS1qHlIwjU2V0UnVudGltZVN0YXRlLl9yZWFkX2luaXRpYWxfdmFsdWWUalYxAQBLXEthh5SMFFNldFJ1bnRpbWVTdGF0ZS5yZWFklGpWMQEAS2NLZYeUjBNTZXRSdW50aW1lU3RhdGUuYWRklGpWMQEAS2dLaoeUjBVTZXRSdW50aW1lU3RhdGUuY2xlYXKUalYxAQBLbEtuh5SMG1NldFJ1bnRpbWVTdGF0ZS5pc19tb2RpZmllZJRqVjEBAEtwS3GHlIwPU2V0UnVudGltZVN0YXRllGpdMQEAS1VLcYeUjCNDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZS5fX2luaXRfX5RqVjEBAEt3S3yHlIwuQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUuX3JlYWRfaW5pdGlhbF92YWx1ZZRqVjEBAEt+S4aHlIwfQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUucmVhZJRqVjEBAEuIS4qHlIweQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGUuYWRklGpWMQEAS4xLkIeUjCBDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZS5jbGVhcpRqVjEBAEuSS5SHlIwaQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGWUal0xAQBLdEuUh5SMH0RpcmVjdFVzZXJTdGF0ZUNvbnRleHQuX19pbml0X1+UalYxAQBLnUuyh5SMIERpcmVjdFVzZXJTdGF0ZUNvbnRleHQuZ2V0X3RpbWVylGpWMQEAS7RLuoeUjCBEaXJlY3RVc2VyU3RhdGVDb250ZXh0LmdldF9zdGF0ZZRqVjEBAEu8S8aHlIwsRGlyZWN0VXNlclN0YXRlQ29udGV4dC5fZ2V0X3VuZGVybHlpbmdfc3RhdGWUalYxAQBLyEvNh5SMHURpcmVjdFVzZXJTdGF0ZUNvbnRleHQuY29tbWl0lGpWMQEAS89L+IeUjBZEaXJlY3RVc2VyU3RhdGVDb250ZXh0lGpdMQEAS5dL+IeUdX2UKIwSRGlyZWN0UnVudGltZVN0YXRllGq3AwAAjBtEaXJlY3RSdW50aW1lU3RhdGUuZm9yX3NwZWOUarcDAACMD0JhZ1J1bnRpbWVTdGF0ZZRqtwMAAIwUQmFnUnVudGltZVN0YXRlLnJlYWSUarcDAACME0JhZ1J1bnRpbWVTdGF0ZS5hZGSUarcDAACMFUJhZ1J1bnRpbWVTdGF0ZS5jbGVhcpRqtwMAAIwPU2V0UnVudGltZVN0YXRllGq3AwAAjBRTZXRSdW50aW1lU3RhdGUucmVhZJRqtwMAAIwTU2V0UnVudGltZVN0YXRlLmFkZJRqtwMAAIwVU2V0UnVudGltZVN0YXRlLmNsZWFylGq3AwAAjBtTZXRSdW50aW1lU3RhdGUuaXNfbW9kaWZpZWSUarcDAACMGkNvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRllGq3AwAAjB9Db21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZS5yZWFklGq3AwAAjB5Db21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZS5hZGSUarcDAACMIENvbWJpbmluZ1ZhbHVlUnVudGltZVN0YXRlLmNsZWFylGq3AwAAjBZEaXJlY3RVc2VyU3RhdGVDb250ZXh0lGq3AwAAjCBEaXJlY3RVc2VyU3RhdGVDb250ZXh0LmdldF90aW1lcpRqtwMAAIwgRGlyZWN0VXNlclN0YXRlQ29udGV4dC5nZXRfc3RhdGWUarcDAACMHURpcmVjdFVzZXJTdGF0ZUNvbnRleHQuY29tbWl0lGq3AwAAdYwrYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZGlyZWN0X3VzZXJzdGF0ZZR0lIwtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0lChYbEYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRXZhbHVhdGlvbkNvbnRleHQgdHJhY2tzIGdsb2JhbCBzdGF0ZSwgdHJpZ2dlcnMgYW5kIHdhdGVybWFya3MuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCB0aHJlYWRpbmcKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKZnJvbSB0eXBpbmcgaW1wb3J0IERlZmF1bHREaWN0CmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYWJsZQpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdApmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgoKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfbWV0cmljcyBpbXBvcnQgRGlyZWN0TWV0cmljcwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9yIGltcG9ydCBUcmFuc2Zvcm1FeGVjdXRvcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyIGltcG9ydCBXYXRlcm1hcmtNYW5hZ2VyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgc2lkZWlucHV0cwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgSW5NZW1vcnlVbm1lcmdlZFN0YXRlCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IGNvdW50ZXJzCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQogIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IEFwcGxpZWRQVHJhbnNmb3JtCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeSBpbXBvcnQgQnVuZGxlRmFjdG9yeSwgX0J1bmRsZQogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCBpbXBvcnQgVGltZXJGaXJpbmcKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwgaW1wb3J0IFRyYW5zZm9ybVJlc3VsdAogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXIgaW1wb3J0IF9UcmFuc2Zvcm1XYXRlcm1hcmtzCiAgZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRpbWVzdGFtcAoKCmNsYXNzIF9FeGVjdXRpb25Db250ZXh0KG9iamVjdCk6CiAgIiIiQ29udGFpbnMgdGhlIGNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgYSBzaW5nbGUgUFRyYW5zZm9ybS4KCiAgSXQgaG9sZHMgdGhlIHdhdGVybWFya3MgZm9yIHRoYXQgdHJhbnNmb3JtLCBhcyB3ZWxsIGFzIGtleWVkIHN0YXRlcy4KICAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIHdhdGVybWFya3MsICAjIHR5cGU6IF9UcmFuc2Zvcm1XYXRlcm1hcmtzCiAgICAgIGtleWVkX3N0YXRlcyk6CiAgICBzZWxmLndhdGVybWFya3MgPSB3YXRlcm1hcmtzCiAgICBzZWxmLmtleWVkX3N0YXRlcyA9IGtleWVkX3N0YXRlcwoKICAgIHNlbGYuX3N0ZXBfY29udGV4dCA9IE5vbmUKCiAgZGVmIGdldF9zdGVwX2NvbnRleHQoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5fc3RlcF9jb250ZXh0OgogICAgICBzZWxmLl9zdGVwX2NvbnRleHQgPSBEaXJlY3RTdGVwQ29udGV4dChzZWxmLmtleWVkX3N0YXRlcykKICAgIHJldHVybiBzZWxmLl9zdGVwX2NvbnRleHQKCiAgZGVmIHJlc2V0KHNlbGYpOgogICAgc2VsZi5fc3RlcF9jb250ZXh0ID0gTm9uZQoKCmNsYXNzIF9TaWRlSW5wdXRWaWV3KG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHZpZXcpOgogICAgc2VsZi5fdmlldyA9IHZpZXcKICAgIHNlbGYuYmxvY2tlZF90YXNrcyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKICAgIHNlbGYuZWxlbWVudHMgPSBbXQogICAgc2VsZi52YWx1ZSA9IE5vbmUKICAgIHNlbGYud2F0ZXJtYXJrID0gTm9uZQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICBlbGVtZW50c19zdHJpbmcgPSAoCiAgICAgICAgJywgJy5qb2luKHN0cihlbG0pIGZvciBlbG0gaW4gc2VsZi5lbGVtZW50cykgaWYgc2VsZi5lbGVtZW50cyBlbHNlICdbXScpCiAgICByZXR1cm4gJ19TaWRlSW5wdXRWaWV3KGVsZW1lbnRzPSVzKScgJSBlbGVtZW50c19zdHJpbmcKCgpjbGFzcyBfU2lkZUlucHV0c0NvbnRhaW5lcihvYmplY3QpOgogICIiIkFuIGluLXByb2Nlc3MgY29udGFpbmVyIGZvciBzaWRlIGlucHV0cy4KCiAgSXQgcHJvdmlkZXMgbWV0aG9kcyBmb3IgYmxvY2tpbmcgdW50aWwgYSBzaWRlLWlucHV0IGlzIGF2YWlsYWJsZSBhbmQgd3JpdGluZwogIHRvIGEgc2lkZSBpbnB1dC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc2lkZV9pbnB1dHMpOgogICAgIyB0eXBlOiAoSXRlcmFibGVbcHZhbHVlLkFzU2lkZUlucHV0XSkgLT4gTm9uZQogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgIHNlbGYuX3ZpZXdzID0ge30gICMgdHlwZTogRGljdFtwdmFsdWUuQXNTaWRlSW5wdXQsIF9TaWRlSW5wdXRWaWV3XQogICAgc2VsZi5fdHJhbnNmb3JtX3RvX3NpZGVfaW5wdXRzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoCiAgICAgICAgbGlzdAogICAgKSAgIyB0eXBlOiBEZWZhdWx0RGljdFtPcHRpb25hbFtBcHBsaWVkUFRyYW5zZm9ybV0sIExpc3RbcHZhbHVlLkFzU2lkZUlucHV0XV0KICAgIHNlbGYuX3NpZGVfaW5wdXRfdG9fYmxvY2tlZF90YXNrcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KAogICAgICAgIGxpc3QpICAjIHR5cGU6IGlnbm9yZSAgIyB1c3VzZWQ/CgogICAgZm9yIHNpZGUgaW4gc2lkZV9pbnB1dHM6CiAgICAgIHNlbGYuX3ZpZXdzW3NpZGVdID0gX1NpZGVJbnB1dFZpZXcoc2lkZSkKICAgICAgc2VsZi5fdHJhbnNmb3JtX3RvX3NpZGVfaW5wdXRzW3NpZGUucHZhbHVlLnByb2R1Y2VyXS5hcHBlbmQoc2lkZSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgdmlld3Nfc3RyaW5nID0gKAogICAgICAgICcsICcuam9pbihzdHIoZWxtKQogICAgICAgICAgICAgICAgICBmb3IgZWxtIGluIHNlbGYuX3ZpZXdzLnZhbHVlcygpKSBpZiBzZWxmLl92aWV3cyBlbHNlICdbXScpCiAgICByZXR1cm4gJ19TaWRlSW5wdXRzQ29udGFpbmVyKF92aWV3cz0lcyknICUgdmlld3Nfc3RyaW5nCgogIGRlZiBnZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHkoc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVfaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLCAgIyB0eXBlOiBUcmFuc2Zvcm1FeGVjdXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfdW50aWwgICMgdHlwZTogVGltZXN0YW1wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IEFueQoKICAgICIiIlJldHVybnMgdGhlIHZhbHVlIG9mIGEgdmlldyB3aG9zZSB0YXNrIGlzIHVuYmxvY2tlZCBvciBibG9ja3MgaXRzIHRhc2suCgogICAgSXQgZ2V0cyB0aGUgdmFsdWUgb2YgYSB2aWV3IHdob3NlIHdhdGVybWFyayBoYXMgYmVlbiB1cGRhdGVkIGFuZAogICAgc3VycGFzc2VzIGEgZ2l2ZW4gdmFsdWUuCgogICAgQXJnczoKICAgICAgc2lkZV9pbnB1dDogYGBfVW5waWNrbGVkU2lkZUlucHV0YGAgdmFsdWUuCiAgICAgIHRhc2s6IGBgVHJhbnNmb3JtRXhlY3V0b3JgYCB0YXNrIHdhaXRpbmcgb24gYSBzaWRlIGlucHV0LgogICAgICBibG9ja191bnRpbDogVGltZXN0YW1wIGFmdGVyIHdoaWNoIHRoZSB0YXNrIGdldHMgdW5ibG9ja2VkLgoKICAgIFJldHVybnM6CiAgICAgIFRoZSBgYFNpZGVJbnB1dE1hcGBgIHZhbHVlIG9mIGEgdmlldyB3aGVuIHRoZSB0YXNrcyBpdCBibG9ja3MgYXJlCiAgICAgIHVuYmxvY2tlZC4gT3RoZXJ3aXNlLCBOb25lLgogICAgIiIiCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHZpZXcgPSBzZWxmLl92aWV3c1tzaWRlX2lucHV0XQogICAgICBpZiB2aWV3LndhdGVybWFyayBhbmQgdmlldy53YXRlcm1hcmsub3V0cHV0X3dhdGVybWFyayA+PSBibG9ja191bnRpbDoKICAgICAgICB2aWV3LnZhbHVlID0gc2VsZi5fcHZhbHVlX3RvX3ZhbHVlKHNpZGVfaW5wdXQsIHZpZXcuZWxlbWVudHMpCiAgICAgICAgcmV0dXJuIHZpZXcudmFsdWUKICAgICAgZWxzZToKICAgICAgICB2aWV3LmJsb2NrZWRfdGFza3MuYXBwZW5kKCh0YXNrLCBibG9ja191bnRpbCkpCiAgICAgICAgdGFzay5ibG9ja2VkID0gVHJ1ZQoKICBkZWYgYWRkX3ZhbHVlcyhzZWxmLCBzaWRlX2lucHV0LCB2YWx1ZXMpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICB2aWV3ID0gc2VsZi5fdmlld3Nbc2lkZV9pbnB1dF0KICAgICAgdmlldy5lbGVtZW50cy5leHRlbmQodmFsdWVzKQoKICBkZWYgdXBkYXRlX3dhdGVybWFya3NfZm9yX3RyYW5zZm9ybV9hbmRfdW5ibG9ja190YXNrcygKICAgICAgc2VsZiwgcHRyYW5zZm9ybSwgd2F0ZXJtYXJrKToKICAgICMgdHlwZTogKC4uLikgLT4gTGlzdFtUdXBsZVtUcmFuc2Zvcm1FeGVjdXRvciwgVGltZXN0YW1wXV0KCiAgICAiIiJVcGRhdGVzIF9TaWRlSW5wdXRzQ29udGFpbmVyIGFmdGVyIGEgd2F0ZXJtYXJrIHVwZGF0ZSBhbmQgdW5ibG9rcyB0YXNrcy4KCiAgICBJdCB0cmF2ZXJzZXMgdGhlIGxpc3Qgb2Ygc2lkZSBpbnB1dHMgcGVyIFBUcmFuc2Zvcm0gYW5kIGNhbGxzCiAgICBfdXBkYXRlX3dhdGVybWFya3NfZm9yX3NpZGVfaW5wdXRfYW5kX3VuYmxvY2tfdGFza3MgdG8gdW5ibG9jayB0YXNrcy4KCiAgICBBcmdzOgogICAgICBwdHJhbnNmb3JtOiBWYWx1ZSBvZiBhIFBUcmFuc2Zvcm0uCiAgICAgIHdhdGVybWFyazogVmFsdWUgb2YgdGhlIHdhdGVybWFyayBhZnRlciBhbiB1cGRhdGUgZm9yIGEgUFRyYW5zZm9ybS4KCiAgICBSZXR1cm5zOgogICAgICBUYXNrcyB0aGF0IGdldCB1bmJsb2NrZWQgYXMgYSByZXN1bHQgb2YgdGhlIHdhdGVybWFyayBhZHZhbmNpbmcuCiAgICAiIiIKICAgIHVuYmxvY2tlZF90YXNrcyA9IFtdCiAgICBmb3Igc2lkZSBpbiBzZWxmLl90cmFuc2Zvcm1fdG9fc2lkZV9pbnB1dHNbcHRyYW5zZm9ybV06CiAgICAgIHVuYmxvY2tlZF90YXNrcy5leHRlbmQoCiAgICAgICAgICBzZWxmLl91cGRhdGVfd2F0ZXJtYXJrc19mb3Jfc2lkZV9pbnB1dF9hbmRfdW5ibG9ja190YXNrcygKICAgICAgICAgICAgICBzaWRlLCB3YXRlcm1hcmspKQogICAgcmV0dXJuIHVuYmxvY2tlZF90YXNrcwoKICBkZWYgX3VwZGF0ZV93YXRlcm1hcmtzX2Zvcl9zaWRlX2lucHV0X2FuZF91bmJsb2NrX3Rhc2tzKAogICAgICBzZWxmLCBzaWRlX2lucHV0LCB3YXRlcm1hcmspOgogICAgIyB0eXBlOiAoLi4uKSAtPiBMaXN0W1R1cGxlW1RyYW5zZm9ybUV4ZWN1dG9yLCBUaW1lc3RhbXBdXQoKICAgICIiIkhlbHBzIHVwZGF0ZSBfU2lkZUlucHV0c0NvbnRhaW5lciBhZnRlciBhIHdhdGVybWFyayB1cGRhdGUuCgogICAgRm9yIGVhY2ggdmlldyBvZiB0aGUgc2lkZSBpbnB1dCwgaXQgdXBkYXRlcyB0aGUgdmFsdWUgb2YgdGhlIHdhdGVybWFyawogICAgcmVjb3JkZWQgd2hlbiB0aGUgd2F0ZXJtYXJrIG1vdmVkIGFuZCB1bmJsb2NrcyB0YXNrcyBhY2NvcmRpbmdseS4KCiAgICBBcmdzOgogICAgICBzaWRlX2lucHV0OiBgYF9VbnBpY2tsZWRTaWRlSW5wdXRgYCB2YWx1ZS4KICAgICAgd2F0ZXJtYXJrOiBWYWx1ZSBvZiB0aGUgd2F0ZXJtYXJrIGFmdGVyIGFuIHVwZGF0ZSBmb3IgYSBQVHJhbnNmb3JtLgoKICAgIFJldHVybnM6CiAgICAgIFRhc2tzIHRoYXQgZ2V0IHVuYmxvY2tlZCBhcyBhIHJlc3VsdCBvZiB0aGUgd2F0ZXJtYXJrIGFkdmFuY2luZy4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICB2aWV3ID0gc2VsZi5fdmlld3Nbc2lkZV9pbnB1dF0KICAgICAgdmlldy53YXRlcm1hcmsgPSB3YXRlcm1hcmsKCiAgICAgIHVuYmxvY2tlZF90YXNrcyA9IFtdCiAgICAgIHRhc2tzX2p1c3RfdW5ibG9ja2VkID0gW10KICAgICAgZm9yIHRhc2ssIGJsb2NrX3VudGlsIGluIHZpZXcuYmxvY2tlZF90YXNrczoKICAgICAgICBpZiB3YXRlcm1hcmsub3V0cHV0X3dhdGVybWFyayA+PSBibG9ja191bnRpbDoKICAgICAgICAgIHZpZXcudmFsdWUgPSBzZWxmLl9wdmFsdWVfdG9fdmFsdWUoc2lkZV9pbnB1dCwgdmlldy5lbGVtZW50cykKICAgICAgICAgIHVuYmxvY2tlZF90YXNrcy5hcHBlbmQodGFzaykKICAgICAgICAgIHRhc2tzX2p1c3RfdW5ibG9ja2VkLmFwcGVuZCgodGFzaywgYmxvY2tfdW50aWwpKQogICAgICAgICAgdGFzay5ibG9ja2VkID0gRmFsc2UKICAgICAgZm9yIHRhc2sgaW4gdGFza3NfanVzdF91bmJsb2NrZWQ6CiAgICAgICAgdmlldy5ibG9ja2VkX3Rhc2tzLnJlbW92ZSh0YXNrKQogICAgICByZXR1cm4gdW5ibG9ja2VkX3Rhc2tzCgogIGRlZiBfcHZhbHVlX3RvX3ZhbHVlKHNlbGYsIHNpZGVfaW5wdXQsIHZhbHVlcyk6CiAgICAiIiJHaXZlbiBhIHNpZGUgaW5wdXQsIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgdmFsdWUgaW4gaXRzIHJlcXVlc3RlZCBmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHNpZGVfaW5wdXQ6IF9VbnBpY2tsZWRTaWRlSW5wdXQgb2JqZWN0LgogICAgICB2YWx1ZXM6IEl0ZXJhYmxlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNpZGUgaW5wdXQuCgogICAgUmV0dXJuczoKICAgICAgVGhlIHNpZGUgaW5wdXQgaW4gaXRzIHJlcXVlc3RlZCBmb3JtLgoKICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogSWYgdmFsdWVzIGNhbm5vdCBiZSBjb252ZXJ0ZWQgaW50byB0aGUgcmVxdWVzdGVkIGZvcm0uCiAgICAiIiIKICAgIHJldHVybiBzaWRlaW5wdXRzLlNpZGVJbnB1dE1hcCgKICAgICAgICB0eXBlKHNpZGVfaW5wdXQpLCBzaWRlX2lucHV0Ll92aWV3X29wdGlvbnMoKSwgdmFsdWVzKQoKCmNsYXNzIEV2YWx1YXRpb25Db250ZXh0KG9iamVjdCk6CiAgIiIiRXZhbHVhdGlvbiBjb250ZXh0IHdpdGggdGhlIGdsb2JhbCBzdGF0ZSBpbmZvcm1hdGlvbiBvZiB0aGUgcGlwZWxpbmUuCgogIFRoZSBldmFsdWF0aW9uIGNvbnRleHQgZm9yIGEgc3BlY2lmaWMgcGlwZWxpbmUgYmVpbmcgZXhlY3V0ZWQgYnkgdGhlCiAgRGlyZWN0UnVubmVyLiBDb250YWlucyBzdGF0ZSBzaGFyZWQgd2l0aGluIHRoZSBleGVjdXRpb24gYWNyb3NzIGFsbAogIHRyYW5zZm9ybXMuCgogIEV2YWx1YXRpb25Db250ZXh0IGNvbnRhaW5zIHNoYXJlZCBzdGF0ZSBmb3IgYW4gZXhlY3V0aW9uIG9mIHRoZQogIERpcmVjdFJ1bm5lciB0aGF0IGNhbiBiZSB1c2VkIHdoaWxlIGV2YWx1YXRpbmcgYSBQVHJhbnNmb3JtLiBUaGlzCiAgY29uc2lzdHMgb2Ygdmlld3MgaW50byB1bmRlcmx5aW5nIHN0YXRlIGFuZCB3YXRlcm1hcmsgaW1wbGVtZW50YXRpb25zLCBhY2Nlc3MKICB0byByZWFkIGFuZCB3cml0ZSBzaWRlIGlucHV0cywgYW5kIGNvbnN0cnVjdGluZyBjb3VudGVyIHNldHMgYW5kCiAgZXhlY3V0aW9uIGNvbnRleHRzLiBUaGlzIGluY2x1ZGVzIGV4ZWN1dGluZyBjYWxsYmFja3MgYXN5bmNocm9ub3VzbHkgd2hlbgogIHN0YXRlIGNoYW5nZXMgdG8gdGhlIGFwcHJvcHJpYXRlIHBvaW50IChlLmcuIHdoZW4gYSBzaWRlIGlucHV0IGlzCiAgcmVxdWVzdGVkIGFuZCBrbm93biB0byBiZSBlbXB0eSkuCgogIEV2YWx1YXRpb25Db250ZXh0IGFsc28gaGFuZGxlcyByZXN1bHRzIGJ5IGNvbW1pdHRpbmcgZmluYWxpemluZwogIGJ1bmRsZXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgZ2xvYmFsIHN0YXRlIGFuZCB1cGRhdGluZyB0aGUgZ2xvYmFsIHN0YXRlCiAgYXBwcm9wcmlhdGVseS4gVGhpcyBpbmNsdWRlcyB1cGRhdGluZyB0aGUgcGVyLShzdGVwLGtleSkgc3RhdGUsIHVwZGF0aW5nCiAgZ2xvYmFsIHdhdGVybWFya3MsIGFuZCBleGVjdXRpbmcgYW55IGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBleGVjdXRlZC4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIHBpcGVsaW5lX29wdGlvbnMsCiAgICAgICAgICAgICAgIGJ1bmRsZV9mYWN0b3J5LCAgIyB0eXBlOiBCdW5kbGVGYWN0b3J5CiAgICAgICAgICAgICAgIHJvb3RfdHJhbnNmb3JtcywKICAgICAgICAgICAgICAgdmFsdWVfdG9fY29uc3VtZXJzLAogICAgICAgICAgICAgICBzdGVwX25hbWVzLAogICAgICAgICAgICAgICB2aWV3cywgICMgdHlwZTogSXRlcmFibGVbcHZhbHVlLkFzU2lkZUlucHV0XQogICAgICAgICAgICAgICBjbG9jawogICAgICAgICAgICAgICk6CiAgICBzZWxmLnBpcGVsaW5lX29wdGlvbnMgPSBwaXBlbGluZV9vcHRpb25zCiAgICBzZWxmLl9idW5kbGVfZmFjdG9yeSA9IGJ1bmRsZV9mYWN0b3J5CiAgICBzZWxmLl9yb290X3RyYW5zZm9ybXMgPSByb290X3RyYW5zZm9ybXMKICAgIHNlbGYuX3ZhbHVlX3RvX2NvbnN1bWVycyA9IHZhbHVlX3RvX2NvbnN1bWVycwogICAgc2VsZi5fc3RlcF9uYW1lcyA9IHN0ZXBfbmFtZXMKICAgIHNlbGYudmlld3MgPSB2aWV3cwogICAgc2VsZi5fcGNvbGxlY3Rpb25fdG9fdmlld3MgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdCgKICAgICAgICBsaXN0KSAgIyB0eXBlOiBEZWZhdWx0RGljdFtwdmFsdWUuUENvbGxlY3Rpb24sIExpc3RbcHZhbHVlLkFzU2lkZUlucHV0XV0KICAgIGZvciB2aWV3IGluIHZpZXdzOgogICAgICBzZWxmLl9wY29sbGVjdGlvbl90b192aWV3c1t2aWV3LnB2YWx1ZV0uYXBwZW5kKHZpZXcpCiAgICBzZWxmLl90cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzID0gc2VsZi5faW5pdGlhbGl6ZV9rZXllZF9zdGF0ZXMoCiAgICAgICAgcm9vdF90cmFuc2Zvcm1zLCB2YWx1ZV90b19jb25zdW1lcnMpCiAgICBzZWxmLl9zaWRlX2lucHV0c19jb250YWluZXIgPSBfU2lkZUlucHV0c0NvbnRhaW5lcih2aWV3cykKICAgIHNlbGYuX3dhdGVybWFya19tYW5hZ2VyID0gV2F0ZXJtYXJrTWFuYWdlcigKICAgICAgICBjbG9jaywKICAgICAgICByb290X3RyYW5zZm9ybXMsCiAgICAgICAgdmFsdWVfdG9fY29uc3VtZXJzLAogICAgICAgIHNlbGYuX3RyYW5zZm9ybV9rZXllZF9zdGF0ZXMpCiAgICBzZWxmLl9wZW5kaW5nX3VuYmxvY2tlZF90YXNrcyA9IFsKICAgIF0gICMgdHlwZTogTGlzdFtUdXBsZVtUcmFuc2Zvcm1FeGVjdXRvciwgVGltZXN0YW1wXV0KICAgIHNlbGYuX2NvdW50ZXJfZmFjdG9yeSA9IGNvdW50ZXJzLkNvdW50ZXJGYWN0b3J5KCkKICAgIHNlbGYuX21ldHJpY3MgPSBEaXJlY3RNZXRyaWNzKCkKCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQoKICBkZWYgX2luaXRpYWxpemVfa2V5ZWRfc3RhdGVzKHNlbGYsIHJvb3RfdHJhbnNmb3JtcywgdmFsdWVfdG9fY29uc3VtZXJzKToKICAgICIiIkluaXRpYWxpemUgdXNlciBzdGF0ZSBkaWN0cy4KCiAgICBUaGVzZSBkaWN0cyB0cmFjayB1c2VyIHN0YXRlIHBlci1rZXksIHBlci10cmFuc2Zvcm0gYW5kIHBlci13aW5kb3cuCiAgICAiIiIKICAgIHRyYW5zZm9ybV9rZXllZF9zdGF0ZXMgPSB7fQogICAgZm9yIHRyYW5zZm9ybSBpbiByb290X3RyYW5zZm9ybXM6CiAgICAgIHRyYW5zZm9ybV9rZXllZF9zdGF0ZXNbdHJhbnNmb3JtXSA9IHt9CiAgICBmb3IgY29uc3VtZXJzIGluIHZhbHVlX3RvX2NvbnN1bWVycy52YWx1ZXMoKToKICAgICAgZm9yIGNvbnN1bWVyIGluIGNvbnN1bWVyczoKICAgICAgICB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW2NvbnN1bWVyXSA9IHt9CiAgICByZXR1cm4gdHJhbnNmb3JtX2tleWVkX3N0YXRlcwoKICBkZWYgbWV0cmljcyhzZWxmKToKICAgICMgVE9ETy4gU2hvdWxkIHRoaXMgYmUgbWFkZSBhIEBwcm9wZXJ0eT8KICAgIHJldHVybiBzZWxmLl9tZXRyaWNzCgogIGRlZiBpc19yb290X3RyYW5zZm9ybShzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgIyB0eXBlOiAoQXBwbGllZFBUcmFuc2Zvcm0pIC0+IGJvb2wKICAgIHJldHVybiBhcHBsaWVkX3B0cmFuc2Zvcm0gaW4gc2VsZi5fcm9vdF90cmFuc2Zvcm1zCgogIGRlZiBoYW5kbGVfcmVzdWx0KHNlbGYsCiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkX2J1bmRsZSwgICMgdHlwZTogX0J1bmRsZQogICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF90aW1lcnMsCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICAjIHR5cGU6IFRyYW5zZm9ybVJlc3VsdAogICAgICAgICAgICAgICAgICAgKToKICAgICIiIkhhbmRsZSB0aGUgcHJvdmlkZWQgcmVzdWx0IHByb2R1Y2VkIGFmdGVyIGV2YWx1YXRpbmcgdGhlIGlucHV0IGJ1bmRsZS4KCiAgICBIYW5kbGUgdGhlIHByb3ZpZGVkIFRyYW5zZm9ybVJlc3VsdCwgcHJvZHVjZWQgYWZ0ZXIgZXZhbHVhdGluZwogICAgdGhlIHByb3ZpZGVkIGNvbW1pdHRlZCBidW5kbGUgKHBvdGVudGlhbGx5IE5vbmUsIGlmIHRoZSByZXN1bHQgb2YgYSByb290CiAgICBQVHJhbnNmb3JtKS4KCiAgICBUaGUgcmVzdWx0IGlzIHRoZSBvdXRwdXQgb2YgcnVubmluZyB0aGUgdHJhbnNmb3JtIGNvbnRhaW5lZCBpbiB0aGUKICAgIFRyYW5zZm9ybVJlc3VsdCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHByb3ZpZGVkIGJ1bmRsZS4KCiAgICBBcmdzOgogICAgICBjb21wbGV0ZWRfYnVuZGxlOiB0aGUgYnVuZGxlIHRoYXQgd2FzIHByb2Nlc3NlZCB0byBwcm9kdWNlIHRoZSByZXN1bHQuCiAgICAgIGNvbXBsZXRlZF90aW1lcnM6IHRoZSB0aW1lcnMgdGhhdCB3ZXJlIGRlbGl2ZXJlZCB0byBwcm9kdWNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfYnVuZGxlLgogICAgICByZXN1bHQ6IHRoZSBgYFRyYW5zZm9ybVJlc3VsdGBgIG9mIGV2YWx1YXRpbmcgdGhlIGlucHV0IGJ1bmRsZQoKICAgIFJldHVybnM6CiAgICAgIHRoZSBjb21taXR0ZWQgYnVuZGxlcyBjb250YWluZWQgd2l0aGluIHRoZSBoYW5kbGVkIHJlc3VsdC4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBjb21taXR0ZWRfYnVuZGxlcywgdW5wcm9jZXNzZWRfYnVuZGxlcyA9IHNlbGYuX2NvbW1pdF9idW5kbGVzKAogICAgICAgICAgcmVzdWx0LnVuY29tbWl0dGVkX291dHB1dF9idW5kbGVzLAogICAgICAgICAgcmVzdWx0LnVucHJvY2Vzc2VkX2J1bmRsZXMpCgogICAgICBzZWxmLl9tZXRyaWNzLmNvbW1pdF9sb2dpY2FsKAogICAgICAgICAgY29tcGxldGVkX2J1bmRsZSwgcmVzdWx0LmxvZ2ljYWxfbWV0cmljX3VwZGF0ZXMpCgogICAgICAjIElmIHRoZSByZXN1bHQgaXMgZm9yIGEgdmlldywgdXBkYXRlIHNpZGUgaW5wdXRzIGNvbnRhaW5lci4KICAgICAgc2VsZi5fdXBkYXRlX3NpZGVfaW5wdXRzX2NvbnRhaW5lcihjb21taXR0ZWRfYnVuZGxlcywgcmVzdWx0KQoKICAgICAgIyBUYXNrcyBnZW5lcmF0ZWQgZnJvbSB1bmJsb2NrZWQgc2lkZSBpbnB1dHMgYXMgdGhlIHdhdGVybWFyayBwcm9ncmVzc2VzLgogICAgICB0YXNrcyA9IHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLnVwZGF0ZV93YXRlcm1hcmtzKAogICAgICAgICAgY29tcGxldGVkX2J1bmRsZSwKICAgICAgICAgIHJlc3VsdC50cmFuc2Zvcm0sCiAgICAgICAgICBjb21wbGV0ZWRfdGltZXJzLAogICAgICAgICAgY29tbWl0dGVkX2J1bmRsZXMsCiAgICAgICAgICB1bnByb2Nlc3NlZF9idW5kbGVzLAogICAgICAgICAgcmVzdWx0LmtleWVkX3dhdGVybWFya19ob2xkcywKICAgICAgICAgIHNlbGYuX3NpZGVfaW5wdXRzX2NvbnRhaW5lcikKICAgICAgc2VsZi5fcGVuZGluZ191bmJsb2NrZWRfdGFza3MuZXh0ZW5kKHRhc2tzKQoKICAgICAgaWYgcmVzdWx0LmNvdW50ZXJzOgogICAgICAgIGZvciBjb3VudGVyIGluIHJlc3VsdC5jb3VudGVyczoKICAgICAgICAgIG1lcmdlZF9jb3VudGVyID0gc2VsZi5fY291bnRlcl9mYWN0b3J5LmdldF9jb3VudGVyKAogICAgICAgICAgICAgIGNvdW50ZXIubmFtZSwgY291bnRlci5jb21iaW5lX2ZuKQogICAgICAgICAgbWVyZ2VkX2NvdW50ZXIuYWNjdW11bGF0b3IubWVyZ2UoW2NvdW50ZXIuYWNjdW11bGF0b3JdKQoKICAgICAgIyBDb21taXQgcGFydGlhbCBHQksgc3RhdGVzCiAgICAgIGV4aXN0aW5nX2tleWVkX3N0YXRlID0gc2VsZi5fdHJhbnNmb3JtX2tleWVkX3N0YXRlc1tyZXN1bHQudHJhbnNmb3JtXQogICAgICBmb3IgaywgdiBpbiByZXN1bHQucGFydGlhbF9rZXllZF9zdGF0ZS5pdGVtcygpOgogICAgICAgIGV4aXN0aW5nX2tleWVkX3N0YXRlW2tdID0gdgogICAgICByZXR1cm4gY29tbWl0dGVkX2J1bmRsZXMKCiAgZGVmIF91cGRhdGVfc2lkZV9pbnB1dHNfY29udGFpbmVyKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZF9idW5kbGVzLCAgIyB0eXBlOiBJdGVyYWJsZVtfQnVuZGxlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgICMgdHlwZTogVHJhbnNmb3JtUmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKToKICAgICIiIlVwZGF0ZSB0aGUgc2lkZSBpbnB1dHMgY29udGFpbmVyIGlmIHdlIGFyZSBvdXRwdXR0aW5nIGludG8gYSBzaWRlIGlucHV0LgoKICAgIExvb2sgYXQgdGhlIHJlc3VsdCwgYW5kIGlmIGl0J3Mgb3V0cHV0aW5nIGludG8gYSBQQ29sbGVjdGlvbiB0aGF0IHdlIGhhdmUKICAgIHJlZ2lzdGVyZWQgYXMgYSBQQ29sbGVjdGlvblZpZXcsIHdlIGFkZCB0aGUgcmVzdWx0IHRvIHRoZSBQQ29sbGVjdGlvblZpZXcuCiAgICAiIiIKICAgIGlmIChyZXN1bHQudW5jb21taXR0ZWRfb3V0cHV0X2J1bmRsZXMgYW5kCiAgICAgICAgcmVzdWx0LnVuY29tbWl0dGVkX291dHB1dF9idW5kbGVzWzBdLnBjb2xsZWN0aW9uIGluCiAgICAgICAgc2VsZi5fcGNvbGxlY3Rpb25fdG9fdmlld3MpOgogICAgICBmb3IgdmlldyBpbiBzZWxmLl9wY29sbGVjdGlvbl90b192aWV3c1sKICAgICAgICAgIHJlc3VsdC51bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlc1swXS5wY29sbGVjdGlvbl06CiAgICAgICAgZm9yIGNvbW1pdHRlZF9idW5kbGUgaW4gY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgICAgICAjIHNpZGVfaW5wdXQgbXVzdCBiZSBtYXRlcmlhbGl6ZWQuCiAgICAgICAgICBzZWxmLl9zaWRlX2lucHV0c19jb250YWluZXIuYWRkX3ZhbHVlcygKICAgICAgICAgICAgICB2aWV3LCBjb21taXR0ZWRfYnVuZGxlLmdldF9lbGVtZW50c19pdGVyYWJsZShtYWtlX2NvcHk9VHJ1ZSkpCgogIGRlZiBnZXRfYWdncmVnYXRvcl92YWx1ZXMoc2VsZiwgYWdncmVnYXRvcl9vcl9uYW1lKToKICAgIHJldHVybiBzZWxmLl9jb3VudGVyX2ZhY3RvcnkuZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzKGFnZ3JlZ2F0b3Jfb3JfbmFtZSkKCiAgZGVmIHNjaGVkdWxlX3BlbmRpbmdfdW5ibG9ja2VkX3Rhc2tzKHNlbGYsIGV4ZWN1dG9yX3NlcnZpY2UpOgogICAgaWYgc2VsZi5fcGVuZGluZ191bmJsb2NrZWRfdGFza3M6CiAgICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgICBmb3IgdGFzayBpbiBzZWxmLl9wZW5kaW5nX3VuYmxvY2tlZF90YXNrczoKICAgICAgICAgIGV4ZWN1dG9yX3NlcnZpY2Uuc3VibWl0KHRhc2spCiAgICAgICAgc2VsZi5fcGVuZGluZ191bmJsb2NrZWRfdGFza3MgPSBbXQoKICBkZWYgX2NvbW1pdF9idW5kbGVzKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICB1bmNvbW1pdHRlZF9idW5kbGVzLCAgIyB0eXBlOiBJdGVyYWJsZVtfQnVuZGxlXQogICAgICAgICAgICAgICAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlcyAgIyB0eXBlOiBJdGVyYWJsZVtfQnVuZGxlXQogICAgICAgICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBUdXBsZVtUdXBsZVtfQnVuZGxlLCAuLi5dLCBUdXBsZVtfQnVuZGxlLCAuLi5dXQoKICAgICIiIkNvbW1pdHMgYnVuZGxlcyBhbmQgcmV0dXJucyBhIGltbXV0YWJsZSBzZXQgb2YgY29tbWl0dGVkIGJ1bmRsZXMuIiIiCiAgICBmb3IgaW5fcHJvZ3Jlc3NfYnVuZGxlIGluIHVuY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgIHByb2R1Y2luZ19hcHBsaWVkX3B0cmFuc2Zvcm0gPSBpbl9wcm9ncmVzc19idW5kbGUucGNvbGxlY3Rpb24ucHJvZHVjZXIKICAgICAgd2F0ZXJtYXJrcyA9IHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLmdldF93YXRlcm1hcmtzKAogICAgICAgICAgcHJvZHVjaW5nX2FwcGxpZWRfcHRyYW5zZm9ybSkKICAgICAgaW5fcHJvZ3Jlc3NfYnVuZGxlLmNvbW1pdCh3YXRlcm1hcmtzLnN5bmNocm9uaXplZF9wcm9jZXNzaW5nX291dHB1dF90aW1lKQoKICAgIGZvciB1bnByb2Nlc3NlZF9idW5kbGUgaW4gdW5wcm9jZXNzZWRfYnVuZGxlczoKICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlLmNvbW1pdChOb25lKQogICAgcmV0dXJuIHR1cGxlKHVuY29tbWl0dGVkX2J1bmRsZXMpLCB0dXBsZSh1bnByb2Nlc3NlZF9idW5kbGVzKQoKICBkZWYgZ2V0X2V4ZWN1dGlvbl9jb250ZXh0KHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAjIHR5cGU6IChBcHBsaWVkUFRyYW5zZm9ybSkgLT4gX0V4ZWN1dGlvbkNvbnRleHQKICAgIHJldHVybiBfRXhlY3V0aW9uQ29udGV4dCgKICAgICAgICBzZWxmLl93YXRlcm1hcmtfbWFuYWdlci5nZXRfd2F0ZXJtYXJrcyhhcHBsaWVkX3B0cmFuc2Zvcm0pLAogICAgICAgIHNlbGYuX3RyYW5zZm9ybV9rZXllZF9zdGF0ZXNbYXBwbGllZF9wdHJhbnNmb3JtXSkKCiAgZGVmIGNyZWF0ZV9idW5kbGUoc2VsZiwgb3V0cHV0X3Bjb2xsZWN0aW9uKToKICAgICMgdHlwZTogKFVuaW9uW3B2YWx1ZS5QQmVnaW4sIHB2YWx1ZS5QQ29sbGVjdGlvbl0pIC0+IF9CdW5kbGUKCiAgICAiIiJDcmVhdGUgYW4gdW5jb21taXR0ZWQgYnVuZGxlIGZvciB0aGUgc3BlY2lmaWVkIFBDb2xsZWN0aW9uLiIiIgogICAgcmV0dXJuIHNlbGYuX2J1bmRsZV9mYWN0b3J5LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQoKICBkZWYgY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoc2VsZiwgb3V0cHV0X3Bjb2xsZWN0aW9uKToKICAgICMgdHlwZTogKHB2YWx1ZS5QQ29sbGVjdGlvbikgLT4gX0J1bmRsZQoKICAgICIiIkNyZWF0ZSBlbXB0eSBidW5kbGUgdXNlZnVsIGZvciB0cmlnZ2VyaW5nIGV2YWx1YXRpb24uIiIiCiAgICByZXR1cm4gc2VsZi5fYnVuZGxlX2ZhY3RvcnkuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoCiAgICAgICAgb3V0cHV0X3Bjb2xsZWN0aW9uKQoKICBkZWYgZXh0cmFjdF9hbGxfdGltZXJzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBUdXBsZVtMaXN0W1R1cGxlW0FwcGxpZWRQVHJhbnNmb3JtLCBMaXN0W1RpbWVyRmlyaW5nXV1dLCBib29sXQogICAgcmV0dXJuIHNlbGYuX3dhdGVybWFya19tYW5hZ2VyLmV4dHJhY3RfYWxsX3RpbWVycygpCgogIGRlZiBpc19kb25lKHNlbGYsIHRyYW5zZm9ybT1Ob25lKToKICAgICMgdHlwZTogKE9wdGlvbmFsW0FwcGxpZWRQVHJhbnNmb3JtXSkgLT4gYm9vbAoKICAgICIiIkNoZWNrcyBjb21wbGV0aW9uIG9mIGEgc3RlcCBvciB0aGUgcGlwZWxpbmUuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtOiBBcHBsaWVkUFRyYW5zZm9ybSB0byBjaGVjayBmb3IgY29tcGxldGlvbi4KCiAgICBSZXR1cm5zOgogICAgICBUcnVlIGlmIHRoZSBzdGVwIHdpbGwgbm90IHByb2R1Y2UgYWRkaXRpb25hbCBvdXRwdXQuIElmIHRyYW5zZm9ybSBpcyBOb25lCiAgICAgIHJldHVybnMgdHJ1ZSBpZiBhbGwgc3RlcHMgYXJlIGRvbmUuCiAgICAiIiIKICAgIGlmIHRyYW5zZm9ybToKICAgICAgcmV0dXJuIHNlbGYuX2lzX3RyYW5zZm9ybV9kb25lKHRyYW5zZm9ybSkKCiAgICBmb3IgYXBwbGllZF9wdHJhbnNmb3JtIGluIHNlbGYuX3N0ZXBfbmFtZXM6CiAgICAgIGlmIG5vdCBzZWxmLl9pc190cmFuc2Zvcm1fZG9uZShhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCiAgZGVmIF9pc190cmFuc2Zvcm1fZG9uZShzZWxmLCB0cmFuc2Zvcm0pOgogICAgIyB0eXBlOiAoQXBwbGllZFBUcmFuc2Zvcm0pIC0+IGJvb2wKICAgIHR3ID0gc2VsZi5fd2F0ZXJtYXJrX21hbmFnZXIuZ2V0X3dhdGVybWFya3ModHJhbnNmb3JtKQogICAgcmV0dXJuIHR3Lm91dHB1dF93YXRlcm1hcmsgPT0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORgoKICBkZWYgZ2V0X3ZhbHVlX29yX2Jsb2NrX3VudGlsX3JlYWR5KHNlbGYsIHNpZGVfaW5wdXQsIHRhc2ssIGJsb2NrX3VudGlsKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHRhc2ssIFRyYW5zZm9ybUV4ZWN1dG9yKQogICAgcmV0dXJuIHNlbGYuX3NpZGVfaW5wdXRzX2NvbnRhaW5lci5nZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHkoCiAgICAgICAgc2lkZV9pbnB1dCwgdGFzaywgYmxvY2tfdW50aWwpCgoKY2xhc3MgRGlyZWN0VW5tZXJnZWRTdGF0ZShJbk1lbW9yeVVubWVyZ2VkU3RhdGUpOgogICIiIlVubWVyZ2VkU3RhdGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBEaXJlY3RSdW5uZXIuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc3VwZXIoRGlyZWN0VW5tZXJnZWRTdGF0ZSwgc2VsZikuX19pbml0X18oZGVmZW5zaXZlX2NvcHk9RmFsc2UpCgoKY2xhc3MgRGlyZWN0U3RlcENvbnRleHQob2JqZWN0KToKICAiIiJDb250ZXh0IGZvciB0aGUgY3VycmVudGx5LWV4ZWN1dGluZyBzdGVwLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBleGlzdGluZ19rZXllZF9zdGF0ZSk6CiAgICBzZWxmLmV4aXN0aW5nX2tleWVkX3N0YXRlID0gZXhpc3Rpbmdfa2V5ZWRfc3RhdGUKICAgICMgSW4gb3JkZXIgdG8gYXZvaWQgcGFydGlhbCB3cml0ZXMgb2YgYSBidW5kbGUsIGV2ZXJ5IHRpbWUKICAgICMgZXhpc3Rpbmdfa2V5ZWRfc3RhdGUgaXMgYWNjZXNzZWQsIGEgY29weSBvZiB0aGUgc3RhdGUgaXMgbWFkZQogICAgIyB0byBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgYnVuZGxlIHN0YXRlIG9uY2UgdGhlIGJ1bmRsZSBpcyBjb21taXR0ZWQuCiAgICBzZWxmLnBhcnRpYWxfa2V5ZWRfc3RhdGUgPSB7fQoKICBkZWYgZ2V0X2tleWVkX3N0YXRlKHNlbGYsIGtleSk6CiAgICBpZiBub3Qgc2VsZi5leGlzdGluZ19rZXllZF9zdGF0ZS5nZXQoa2V5KToKICAgICAgc2VsZi5leGlzdGluZ19rZXllZF9zdGF0ZVtrZXldID0gRGlyZWN0VW5tZXJnZWRTdGF0ZSgpCiAgICBpZiBub3Qgc2VsZi5wYXJ0aWFsX2tleWVkX3N0YXRlLmdldChrZXkpOgogICAgICBzZWxmLnBhcnRpYWxfa2V5ZWRfc3RhdGVba2V5XSA9IHNlbGYuZXhpc3Rpbmdfa2V5ZWRfc3RhdGVba2V5XS5jb3B5KCkKICAgIHJldHVybiBzZWxmLnBhcnRpYWxfa2V5ZWRfc3RhdGVba2V5XQqUfZQojBpfRXhlY3V0aW9uQ29udGV4dC5fX2luaXRfX5RqVjEBAEs7S0KHlIwiX0V4ZWN1dGlvbkNvbnRleHQuZ2V0X3N0ZXBfY29udGV4dJRqVjEBAEtES0eHlIwXX0V4ZWN1dGlvbkNvbnRleHQucmVzZXSUalYxAQBLSUtKh5SMEV9FeGVjdXRpb25Db250ZXh0lGpdMQEASzZLSoeUjBdfU2lkZUlucHV0Vmlldy5fX2luaXRfX5RqVjEBAEtOS1OHlIwXX1NpZGVJbnB1dFZpZXcuX19yZXByX1+UalYxAQBLVUtYh5SMDl9TaWRlSW5wdXRWaWV3lGpdMQEAS01LWIeUjB1fU2lkZUlucHV0c0NvbnRhaW5lci5fX2luaXRfX5RqVjEBAEthS22HlIwdX1NpZGVJbnB1dHNDb250YWluZXIuX19yZXByX1+UalYxAQBLb0tzh5SMM19TaWRlSW5wdXRzQ29udGFpbmVyLmdldF92YWx1ZV9vcl9ibG9ja191bnRpbF9yZWFkeZRqVjEBAEt1S5GHlIwfX1NpZGVJbnB1dHNDb250YWluZXIuYWRkX3ZhbHVlc5RqVjEBAEuTS5aHlIxGX1NpZGVJbnB1dHNDb250YWluZXIudXBkYXRlX3dhdGVybWFya3NfZm9yX3RyYW5zZm9ybV9hbmRfdW5ibG9ja190YXNrc5RqVjEBAEuYS62HlIxIX1NpZGVJbnB1dHNDb250YWluZXIuX3VwZGF0ZV93YXRlcm1hcmtzX2Zvcl9zaWRlX2lucHV0X2FuZF91bmJsb2NrX3Rhc2tzlGpWMQEAS69LzYeUjCVfU2lkZUlucHV0c0NvbnRhaW5lci5fcHZhbHVlX3RvX3ZhbHVllGpWMQEAS89L3YeUjBRfU2lkZUlucHV0c0NvbnRhaW5lcpRqXTEBAEtbS92HlIwaRXZhbHVhdGlvbkNvbnRleHQuX19pbml0X1+UalYxAQBL9U0VAYeUjCpFdmFsdWF0aW9uQ29udGV4dC5faW5pdGlhbGl6ZV9rZXllZF9zdGF0ZXOUalYxAQBNFwFNIgGHlIwZRXZhbHVhdGlvbkNvbnRleHQubWV0cmljc5RqVjEBAE0kAU0mAYeUjCNFdmFsdWF0aW9uQ29udGV4dC5pc19yb290X3RyYW5zZm9ybZRqVjEBAE0oAU0qAYeUjB9FdmFsdWF0aW9uQ29udGV4dC5oYW5kbGVfcmVzdWx0lGpWMQEATSwBTWMBh5SML0V2YWx1YXRpb25Db250ZXh0Ll91cGRhdGVfc2lkZV9pbnB1dHNfY29udGFpbmVylGpWMQEATWUBTXYBh5SMJ0V2YWx1YXRpb25Db250ZXh0LmdldF9hZ2dyZWdhdG9yX3ZhbHVlc5RqVjEBAE14AU15AYeUjDJFdmFsdWF0aW9uQ29udGV4dC5zY2hlZHVsZV9wZW5kaW5nX3VuYmxvY2tlZF90YXNrc5RqVjEBAE17AU2AAYeUjCFFdmFsdWF0aW9uQ29udGV4dC5fY29tbWl0X2J1bmRsZXOUalYxAQBNggFNkQGHlIwnRXZhbHVhdGlvbkNvbnRleHQuZ2V0X2V4ZWN1dGlvbl9jb250ZXh0lGpWMQEATZMBTZcBh5SMH0V2YWx1YXRpb25Db250ZXh0LmNyZWF0ZV9idW5kbGWUalYxAQBNmQFNnQGHlIwvRXZhbHVhdGlvbkNvbnRleHQuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGWUalYxAQBNnwFNpAGHlIwkRXZhbHVhdGlvbkNvbnRleHQuZXh0cmFjdF9hbGxfdGltZXJzlGpWMQEATaYBTagBh5SMGUV2YWx1YXRpb25Db250ZXh0LmlzX2RvbmWUalYxAQBNqgFNvAGHlIwkRXZhbHVhdGlvbkNvbnRleHQuX2lzX3RyYW5zZm9ybV9kb25llGpWMQEATb4BTcEBh5SMMEV2YWx1YXRpb25Db250ZXh0LmdldF92YWx1ZV9vcl9ibG9ja191bnRpbF9yZWFkeZRqVjEBAE3DAU3GAYeUjBFFdmFsdWF0aW9uQ29udGV4dJRqXTEBAEvgTcYBh5SMHERpcmVjdFVubWVyZ2VkU3RhdGUuX19pbml0X1+UalYxAQBNywFNzAGHlIwTRGlyZWN0VW5tZXJnZWRTdGF0ZZRqXTEBAE3JAU3MAYeUjBpEaXJlY3RTdGVwQ29udGV4dC5fX2luaXRfX5RqVjEBAE3RAU3WAYeUjCFEaXJlY3RTdGVwQ29udGV4dC5nZXRfa2V5ZWRfc3RhdGWUalYxAQBN2AFN3QGHlIwRRGlyZWN0U3RlcENvbnRleHSUal0xAQBNzwFN3QGHlHV9lCiMEUV2YWx1YXRpb25Db250ZXh0lGr2AwAAjBlFdmFsdWF0aW9uQ29udGV4dC5tZXRyaWNzlGr2AwAAjCNFdmFsdWF0aW9uQ29udGV4dC5pc19yb290X3RyYW5zZm9ybZRq9gMAAIwfRXZhbHVhdGlvbkNvbnRleHQuaGFuZGxlX3Jlc3VsdJRq9gMAAIwnRXZhbHVhdGlvbkNvbnRleHQuZ2V0X2FnZ3JlZ2F0b3JfdmFsdWVzlGr2AwAAjDJFdmFsdWF0aW9uQ29udGV4dC5zY2hlZHVsZV9wZW5kaW5nX3VuYmxvY2tlZF90YXNrc5Rq9gMAAIwnRXZhbHVhdGlvbkNvbnRleHQuZ2V0X2V4ZWN1dGlvbl9jb250ZXh0lGr2AwAAjB9FdmFsdWF0aW9uQ29udGV4dC5jcmVhdGVfYnVuZGxllGr2AwAAjC9FdmFsdWF0aW9uQ29udGV4dC5jcmVhdGVfZW1wdHlfY29tbWl0dGVkX2J1bmRsZZRq9gMAAIwkRXZhbHVhdGlvbkNvbnRleHQuZXh0cmFjdF9hbGxfdGltZXJzlGr2AwAAjBlFdmFsdWF0aW9uQ29udGV4dC5pc19kb25llGr2AwAAjDBFdmFsdWF0aW9uQ29udGV4dC5nZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHmUavYDAACME0RpcmVjdFVubWVyZ2VkU3RhdGWUavYDAACMEURpcmVjdFN0ZXBDb250ZXh0lGr2AwAAjCFEaXJlY3RTdGVwQ29udGV4dC5nZXRfa2V5ZWRfc3RhdGWUavYDAAB1jC1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5ldmFsdWF0aW9uX2NvbnRleHSUdJSMI2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9ylChYT2kAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQW4gZXhlY3V0b3IgdGhhdCBzY2hlZHVsZXMgYW5kIGV4ZWN1dGVzIGFwcGxpZWQgcHRyYW5zZm9ybXMuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0cmFjZWJhY2sKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKZnJvbSB0eXBpbmcgaW1wb3J0IEZyb3plblNldApmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSB0eXBpbmcgaW1wb3J0IFNldApmcm9tIHdlYWtyZWYgaW1wb3J0IFdlYWtWYWx1ZURpY3Rpb25hcnkKCmZyb20gZnV0dXJlLm1vdmVzIGltcG9ydCBxdWV1ZQpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgcmFpc2VfCgpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MuZXhlY3V0aW9uIGltcG9ydCBNZXRyaWNzQ29udGFpbmVyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy53b3JrZXIgaW1wb3J0IHN0YXRlc2FtcGxlcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHNpZGVpbnB1dHMKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgY291bnRlcnMKCmlmIFRZUEVfQ0hFQ0tJTkc6CiAgZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5idW5kbGVfZmFjdG9yeSBpbXBvcnQgX0J1bmRsZQogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0IGltcG9ydCBFdmFsdWF0aW9uQ29udGV4dAogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvciBpbXBvcnQgVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBfRXhlY3V0b3JTZXJ2aWNlKG9iamVjdCk6CiAgIiIiVGhyZWFkIHBvb2wgZm9yIGV4ZWN1dGluZyB0YXNrcyBpbiBwYXJhbGxlbC4iIiIKICBjbGFzcyBDYWxsYWJsZVRhc2sob2JqZWN0KToKICAgIGRlZiBjYWxsKHNlbGYsIHN0YXRlX3NhbXBsZXIpOgogICAgICBwYXNzCgogICAgQHByb3BlcnR5CiAgICBkZWYgbmFtZShzZWxmKToKICAgICAgcmV0dXJuIE5vbmUKCiAgY2xhc3MgX0V4ZWN1dG9yU2VydmljZVdvcmtlcih0aHJlYWRpbmcuVGhyZWFkKToKICAgICIiIldvcmtlciB0aHJlYWQgZm9yIGV4ZWN1dGluZyBhIHNpbmdsZSB0YXNrIGF0IGEgdGltZS4iIiIKCiAgICAjIEFtb3VudCB0byBibG9jayB3YWl0aW5nIGZvciBnZXR0aW5nIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUgaW4gc2Vjb25kcy4KICAgIFRJTUVPVVQgPSA1CgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgcXVldWUsICAjIHR5cGU6IHF1ZXVlLlF1ZXVlW19FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrXQogICAgICAgIGluZGV4KToKICAgICAgc3VwZXIoX0V4ZWN1dG9yU2VydmljZS5fRXhlY3V0b3JTZXJ2aWNlV29ya2VyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgIHNlbGYucXVldWUgPSBxdWV1ZQogICAgICBzZWxmLl9pbmRleCA9IGluZGV4CiAgICAgIHNlbGYuX2RlZmF1bHRfbmFtZSA9ICdFeGVjdXRvclNlcnZpY2VXb3JrZXItJyArIHN0cihpbmRleCkKICAgICAgc2VsZi5fdXBkYXRlX25hbWUoKQogICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3RlZCA9IEZhbHNlCgogICAgICAjIFN0b3Agd29ya2VyIHRocmVhZCB3aGVuIG1haW4gdGhyZWFkIGV4aXRzLgogICAgICBzZWxmLmRhZW1vbiA9IFRydWUKICAgICAgc2VsZi5zdGFydCgpCgogICAgZGVmIF91cGRhdGVfbmFtZShzZWxmLCB0YXNrPU5vbmUpOgogICAgICBpZiB0YXNrIGFuZCB0YXNrLm5hbWU6CiAgICAgICAgbmFtZSA9IHRhc2submFtZQogICAgICBlbHNlOgogICAgICAgIG5hbWUgPSBzZWxmLl9kZWZhdWx0X25hbWUKICAgICAgc2VsZi5uYW1lID0gJ1RocmVhZDogJWQsICVzICglcyknICUgKAogICAgICAgICAgc2VsZi5faW5kZXgsIG5hbWUsICdleGVjdXRpbmcnIGlmIHRhc2sgZWxzZSAnaWRsZScpCgogICAgZGVmIF9nZXRfdGFza19vcl9ub25lKHNlbGYpOgogICAgICAjIHR5cGU6ICgpIC0+IE9wdGlvbmFsW19FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrXQogICAgICB0cnk6CiAgICAgICAgIyBEbyBub3QgYmxvY2sgaW5kZWZpbml0ZWx5LCBvdGhlcndpc2Ugd2UgbWF5IG5vdCBhY3QgZm9yIGEgcmVxdWVzdGVkCiAgICAgICAgIyBzaHV0ZG93bi4KICAgICAgICByZXR1cm4gc2VsZi5xdWV1ZS5nZXQoCiAgICAgICAgICAgIHRpbWVvdXQ9X0V4ZWN1dG9yU2VydmljZS5fRXhlY3V0b3JTZXJ2aWNlV29ya2VyLlRJTUVPVVQpCiAgICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiBydW4oc2VsZik6CiAgICAgIHN0YXRlX3NhbXBsZXIgPSBzdGF0ZXNhbXBsZXIuU3RhdGVTYW1wbGVyKCcnLCBjb3VudGVycy5Db3VudGVyRmFjdG9yeSgpKQogICAgICBzdGF0ZXNhbXBsZXIuc2V0X2N1cnJlbnRfdHJhY2tlcihzdGF0ZV9zYW1wbGVyKQogICAgICB3aGlsZSBub3Qgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0ZWQ6CiAgICAgICAgdGFzayA9IHNlbGYuX2dldF90YXNrX29yX25vbmUoKQogICAgICAgIGlmIHRhc2s6CiAgICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNodXRkb3duX3JlcXVlc3RlZDoKICAgICAgICAgICAgICBzZWxmLl91cGRhdGVfbmFtZSh0YXNrKQogICAgICAgICAgICAgIHRhc2suY2FsbChzdGF0ZV9zYW1wbGVyKQogICAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9uYW1lKCkKICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgIHNlbGYucXVldWUudGFza19kb25lKCkKCiAgICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdGVkID0gVHJ1ZQoKICBkZWYgX19pbml0X18oc2VsZiwgbnVtX3dvcmtlcnMpOgogICAgc2VsZi5xdWV1ZSA9IHF1ZXVlLlF1ZXVlKAogICAgKSAgIyB0eXBlOiBxdWV1ZS5RdWV1ZVtfRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFza10KICAgIHNlbGYud29ya2VycyA9IFsKICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIoc2VsZi5xdWV1ZSwgaSkKICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fd29ya2VycykKICAgIF0KICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdGVkID0gRmFsc2UKCiAgZGVmIHN1Ym1pdChzZWxmLCB0YXNrKToKICAgICMgdHlwZTogKF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrKSAtPiBOb25lCiAgICBhc3NlcnQgaXNpbnN0YW5jZSh0YXNrLCBfRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFzaykKICAgIGlmIG5vdCBzZWxmLnNodXRkb3duX3JlcXVlc3RlZDoKICAgICAgc2VsZi5xdWV1ZS5wdXQodGFzaykKCiAgZGVmIGF3YWl0X2NvbXBsZXRpb24oc2VsZik6CiAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKICAgICAgd29ya2VyLmpvaW4oKQoKICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICBzZWxmLnNodXRkb3duX3JlcXVlc3RlZCA9IFRydWUKCiAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKICAgICAgd29ya2VyLnNodXRkb3duKCkKCiAgICAjIENvbnN1bWUgYWxsIHRoZSByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHF1ZXVlCiAgICB3aGlsZSBub3Qgc2VsZi5xdWV1ZS5lbXB0eSgpOgogICAgICB0cnk6CiAgICAgICAgc2VsZi5xdWV1ZS5nZXRfbm93YWl0KCkKICAgICAgICBzZWxmLnF1ZXVlLnRhc2tfZG9uZSgpCiAgICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKICAgICAgICBjb250aW51ZQogICAgIyBBbGwgZXhpc3RpbmcgdGhyZWFkcyB3aWxsIGV2ZW50dWFsbHkgdGVybWluYXRlIChhZnRlciB0aGV5IGNvbXBsZXRlIHRoZWlyCiAgICAjIGxhc3QgdGFzaykuCgoKY2xhc3MgX1RyYW5zZm9ybUV2YWx1YXRpb25TdGF0ZShvYmplY3QpOgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZXhlY3V0b3Jfc2VydmljZSwKICAgICAgc2NoZWR1bGVkICAjIHR5cGU6IFNldFtUcmFuc2Zvcm1FeGVjdXRvcl0KICApOgogICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlID0gZXhlY3V0b3Jfc2VydmljZQogICAgc2VsZi5zY2hlZHVsZWQgPSBzY2hlZHVsZWQKCiAgZGVmIHNjaGVkdWxlKHNlbGYsIHdvcmspOgogICAgc2VsZi5zY2hlZHVsZWQuYWRkKHdvcmspCiAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2Uuc3VibWl0KHdvcmspCgogIGRlZiBjb21wbGV0ZShzZWxmLCBjb21wbGV0ZWRfd29yayk6CiAgICBzZWxmLnNjaGVkdWxlZC5yZW1vdmUoY29tcGxldGVkX3dvcmspCgoKY2xhc3MgX1BhcmFsbGVsRXZhbHVhdGlvblN0YXRlKF9UcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUpOgogICIiIkEgVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlIHdpdGggdW5saW1pdGVkIHBhcmFsbGVsaXNtLgoKICBBbnkgVHJhbnNmb3JtRXhlY3V0b3Igc2NoZWR1bGVkIHdpbGwgYmUgaW1tZWRpYXRlbHkgc3VibWl0dGVkIHRvIHRoZQogIEV4ZWN1dG9yU2VydmljZS4KCiAgQSBwcmluY2lwYWwgdXNlIG9mIHRoaXMgaXMgZm9yIGV2YWx1YXRvcnMgdGhhdCBjYW4gZ2VuZXJhdGUgb3V0cHV0IGJ1bmRsZXMKICBvbmx5IHVzaW5nIHRoZSBpbnB1dCBidW5kbGUgKGUuZy4gUGFyRG8pLgogICIiIgogIHBhc3MKCgpjbGFzcyBfU2VyaWFsRXZhbHVhdGlvblN0YXRlKF9UcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUpOgogICIiIkEgVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlIHdpdGggYSBzaW5nbGUgd29yayBxdWV1ZS4KCiAgQW55IFRyYW5zZm9ybUV4ZWN1dG9yIHNjaGVkdWxlZCB3aWxsIGJlIHBsYWNlZCBvbiB0aGUgd29yayBxdWV1ZS4gT25seSBvbmUKICBpdGVtIG9mIHdvcmsgd2lsbCBiZSBzdWJtaXR0ZWQgdG8gdGhlIEV4ZWN1dG9yU2VydmljZSBhdCBhbnkgdGltZS4KCiAgQSBwcmluY2lwYWwgdXNlIG9mIHRoaXMgaXMgZm9yIGV2YWx1YXRvcnMgdGhhdCBrZWVwcyBhIGdsb2JhbCBzdGF0ZSBzdWNoIGFzCiAgX0dyb3VwQnlLZXlPbmx5LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBleGVjdXRvcl9zZXJ2aWNlLCBzY2hlZHVsZWQpOgogICAgc3VwZXIoX1NlcmlhbEV2YWx1YXRpb25TdGF0ZSwgc2VsZikuX19pbml0X18oZXhlY3V0b3Jfc2VydmljZSwgc2NoZWR1bGVkKQogICAgc2VsZi5zZXJpYWxfcXVldWUgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCiAgICBzZWxmLmN1cnJlbnRseV9ldmFsdWF0aW5nID0gTm9uZQogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKCiAgZGVmIGNvbXBsZXRlKHNlbGYsIGNvbXBsZXRlZF93b3JrKToKICAgIHNlbGYuX3VwZGF0ZV9jdXJyZW50bHlfZXZhbHVhdGluZyhOb25lLCBjb21wbGV0ZWRfd29yaykKICAgIHN1cGVyKF9TZXJpYWxFdmFsdWF0aW9uU3RhdGUsIHNlbGYpLmNvbXBsZXRlKGNvbXBsZXRlZF93b3JrKQoKICBkZWYgc2NoZWR1bGUoc2VsZiwgbmV3X3dvcmspOgogICAgc2VsZi5fdXBkYXRlX2N1cnJlbnRseV9ldmFsdWF0aW5nKG5ld193b3JrLCBOb25lKQoKICBkZWYgX3VwZGF0ZV9jdXJyZW50bHlfZXZhbHVhdGluZyhzZWxmLCBuZXdfd29yaywgY29tcGxldGVkX3dvcmspOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiBuZXdfd29yazoKICAgICAgICBzZWxmLnNlcmlhbF9xdWV1ZS5hcHBlbmQobmV3X3dvcmspCiAgICAgIGlmIGNvbXBsZXRlZF93b3JrOgogICAgICAgIGFzc2VydCBzZWxmLmN1cnJlbnRseV9ldmFsdWF0aW5nID09IGNvbXBsZXRlZF93b3JrCiAgICAgICAgc2VsZi5jdXJyZW50bHlfZXZhbHVhdGluZyA9IE5vbmUKICAgICAgaWYgc2VsZi5zZXJpYWxfcXVldWUgYW5kIG5vdCBzZWxmLmN1cnJlbnRseV9ldmFsdWF0aW5nOgogICAgICAgIG5leHRfd29yayA9IHNlbGYuc2VyaWFsX3F1ZXVlLnBvcCgpCiAgICAgICAgc2VsZi5jdXJyZW50bHlfZXZhbHVhdGluZyA9IG5leHRfd29yawogICAgICAgIHN1cGVyKF9TZXJpYWxFdmFsdWF0aW9uU3RhdGUsIHNlbGYpLnNjaGVkdWxlKG5leHRfd29yaykKCgpjbGFzcyBfVHJhbnNmb3JtRXhlY3V0b3JTZXJ2aWNlcyhvYmplY3QpOgogICIiIlNjaGVkdWxlcyBhbmQgY29tcGxldGVzIFRyYW5zZm9ybUV4ZWN1dG9ycy4KCiAgQ29udHJvbHMgdGhlIGNvbmN1cnJlbmN5IGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgYXBwbGllZCB0cmFuc2Zvcm0gdGhlIGV4ZWN1dG9yCiAgZXhpc3RzIGZvci4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0b3Jfc2VydmljZSk6CiAgICAjIHR5cGU6IChfRXhlY3V0b3JTZXJ2aWNlKSAtPiBOb25lCiAgICBzZWxmLl9leGVjdXRvcl9zZXJ2aWNlID0gZXhlY3V0b3Jfc2VydmljZQogICAgc2VsZi5fc2NoZWR1bGVkID0gc2V0KCkgICMgdHlwZTogU2V0W1RyYW5zZm9ybUV4ZWN1dG9yXQogICAgc2VsZi5fcGFyYWxsZWwgPSBfUGFyYWxsZWxFdmFsdWF0aW9uU3RhdGUoCiAgICAgICAgc2VsZi5fZXhlY3V0b3Jfc2VydmljZSwgc2VsZi5fc2NoZWR1bGVkKQogICAgc2VsZi5fc2VyaWFsX2NhY2hlID0gV2Vha1ZhbHVlRGljdGlvbmFyeSgKICAgICkgICMgdHlwZTogV2Vha1ZhbHVlRGljdGlvbmFyeVtBbnksIF9TZXJpYWxFdmFsdWF0aW9uU3RhdGVdCgogIGRlZiBwYXJhbGxlbChzZWxmKToKICAgICMgdHlwZTogKCkgLT4gX1BhcmFsbGVsRXZhbHVhdGlvblN0YXRlCiAgICByZXR1cm4gc2VsZi5fcGFyYWxsZWwKCiAgZGVmIHNlcmlhbChzZWxmLCBzdGVwKToKICAgICMgdHlwZTogKEFueSkgLT4gX1NlcmlhbEV2YWx1YXRpb25TdGF0ZQogICAgY2FjaGVkID0gc2VsZi5fc2VyaWFsX2NhY2hlLmdldChzdGVwKQogICAgaWYgbm90IGNhY2hlZDoKICAgICAgY2FjaGVkID0gX1NlcmlhbEV2YWx1YXRpb25TdGF0ZShzZWxmLl9leGVjdXRvcl9zZXJ2aWNlLCBzZWxmLl9zY2hlZHVsZWQpCiAgICAgIHNlbGYuX3NlcmlhbF9jYWNoZVtzdGVwXSA9IGNhY2hlZAogICAgcmV0dXJuIGNhY2hlZAoKICBAcHJvcGVydHkKICBkZWYgZXhlY3V0b3JzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBGcm96ZW5TZXRbVHJhbnNmb3JtRXhlY3V0b3JdCiAgICByZXR1cm4gZnJvemVuc2V0KHNlbGYuX3NjaGVkdWxlZCkKCgpjbGFzcyBfQ29tcGxldGlvbkNhbGxiYWNrKG9iamVjdCk6CiAgIiIiVGhlIGRlZmF1bHQgY29tcGxldGlvbiBjYWxsYmFjay4KCiAgVGhlIGRlZmF1bHQgY29tcGxldGlvbiBjYWxsYmFjayBpcyB1c2VkIHRvIGNvbXBsZXRlIHRyYW5zZm9ybSBldmFsdWF0aW9ucwogIHRoYXQgYXJlIHRyaWdnZXJlZCBkdWUgdG8gdGhlIGFycml2YWwgb2YgZWxlbWVudHMgZnJvbSBhbiB1cHN0cmVhbSB0cmFuc2Zvcm0sCiAgb3IgZm9yIGEgc291cmNlIHRyYW5zZm9ybS4KICAiIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgICMgdHlwZTogRXZhbHVhdGlvbkNvbnRleHQKICAgICAgICAgICAgICAgYWxsX3VwZGF0ZXMsCiAgICAgICAgICAgICAgIHRpbWVyX2ZpcmluZ3M9Tm9uZQogICAgICAgICAgICAgICk6CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2FsbF91cGRhdGVzID0gYWxsX3VwZGF0ZXMKICAgIHNlbGYuX3RpbWVyX2ZpcmluZ3MgPSB0aW1lcl9maXJpbmdzIG9yIFtdCgogIGRlZiBoYW5kbGVfcmVzdWx0KAogICAgICBzZWxmLCB0cmFuc2Zvcm1fZXhlY3V0b3IsIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsIHRyYW5zZm9ybV9yZXN1bHQpOgogICAgb3V0cHV0X2NvbW1pdHRlZF9idW5kbGVzID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmhhbmRsZV9yZXN1bHQoCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwgc2VsZi5fdGltZXJfZmlyaW5ncywgdHJhbnNmb3JtX3Jlc3VsdCkKICAgIGZvciBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZSBpbiBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgIHNlbGYuX2FsbF91cGRhdGVzLm9mZmVyKAogICAgICAgICAgX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlKAogICAgICAgICAgICAgIHRyYW5zZm9ybV9leGVjdXRvciwgY29tbWl0dGVkX2J1bmRsZT1vdXRwdXRfY29tbWl0dGVkX2J1bmRsZSkpCiAgICBmb3IgdW5wcm9jZXNzZWRfYnVuZGxlIGluIHRyYW5zZm9ybV9yZXN1bHQudW5wcm9jZXNzZWRfYnVuZGxlczoKICAgICAgc2VsZi5fYWxsX3VwZGF0ZXMub2ZmZXIoCiAgICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fRXhlY3V0b3JVcGRhdGUoCiAgICAgICAgICAgICAgdHJhbnNmb3JtX2V4ZWN1dG9yLCB1bnByb2Nlc3NlZF9idW5kbGU9dW5wcm9jZXNzZWRfYnVuZGxlKSkKICAgIHJldHVybiBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZXMKCiAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgdHJhbnNmb3JtX2V4ZWN1dG9yLCBleGNlcHRpb24pOgogICAgc2VsZi5fYWxsX3VwZGF0ZXMub2ZmZXIoCiAgICAgICAgX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX0V4ZWN1dG9yVXBkYXRlKAogICAgICAgICAgICB0cmFuc2Zvcm1fZXhlY3V0b3IsIGV4Y2VwdGlvbj1leGNlcHRpb24pKQoKCmNsYXNzIFRyYW5zZm9ybUV4ZWN1dG9yKF9FeGVjdXRvclNlcnZpY2UuQ2FsbGFibGVUYXNrKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFRyYW5zZm9ybUV4ZWN1dG9yIHdpbGwgZXZhbHVhdGUgYSBidW5kbGUgdXNpbmcgYW4gYXBwbGllZCBwdHJhbnNmb3JtLgoKICBBIENhbGxhYmxlVGFzayByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIGEgVHJhbnNmb3JtRXZhbHVhdG9yIGFuZAogIGV2YWx1YXRpbmcgaXQgb24gc29tZSBidW5kbGUgb2YgaW5wdXQsIGFuZCByZWdpc3RlcmluZyB0aGUgcmVzdWx0IHVzaW5nIHRoZQogIGNvbXBsZXRpb24gY2FsbGJhY2suCiAgIiIiCgogIF9NQVhfUkVUUllfUEVSX0JVTkRMRSA9IDQKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIHRyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnksICAjIHR5cGU6IFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5CiAgICAgICAgICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgICMgdHlwZTogRXZhbHVhdGlvbkNvbnRleHQKICAgICAgICAgICAgICAgaW5wdXRfYnVuZGxlLCAgIyB0eXBlOiBfQnVuZGxlCiAgICAgICAgICAgICAgIGZpcmVkX3RpbWVycywKICAgICAgICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICBjb21wbGV0aW9uX2NhbGxiYWNrLAogICAgICAgICAgICAgICB0cmFuc2Zvcm1fZXZhbHVhdGlvbl9zdGF0ZSAgIyB0eXBlOiBfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlCiAgICAgICAgICAgICAgKToKICAgIHNlbGYuX3RyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnkgPSB0cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2lucHV0X2J1bmRsZSA9IGlucHV0X2J1bmRsZQogICAgIyBGb3Igbm9uLWVtcHR5IGJ1bmRsZXMsIHN0b3JlIHRoZSB3aW5kb3cgb2YgdGhlIG1heCBFT1cuCiAgICAjIFRPRE8obWFyaWFnaCk6IE1vdmUgdG8gY2xhc3MgX0J1bmRsZSdzIGlubmVyIF9TdGFja2VkV2luZG93ZWRWYWx1ZXMKICAgIHNlbGYuX2xhdGVzdF9tYWluX2lucHV0X3dpbmRvdyA9IE5vbmUKICAgIGlmIGlucHV0X2J1bmRsZS5oYXNfZWxlbWVudHMoKToKICAgICAgc2VsZi5fbGF0ZXN0X21haW5faW5wdXRfd2luZG93ID0gaW5wdXRfYnVuZGxlLl9lbGVtZW50c1swXS53aW5kb3dzWzBdCiAgICAgIGZvciBlbGVtIGluIGlucHV0X2J1bmRsZS5nZXRfZWxlbWVudHNfaXRlcmFibGUoKToKICAgICAgICBpZiBlbGVtLndpbmRvd3NbMF0uZW5kID4gc2VsZi5fbGF0ZXN0X21haW5faW5wdXRfd2luZG93LmVuZDoKICAgICAgICAgIHNlbGYuX2xhdGVzdF9tYWluX2lucHV0X3dpbmRvdyA9IGVsZW0ud2luZG93c1swXQogICAgc2VsZi5fZmlyZWRfdGltZXJzID0gZmlyZWRfdGltZXJzCiAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0KICAgIHNlbGYuX2NvbXBsZXRpb25fY2FsbGJhY2sgPSBjb21wbGV0aW9uX2NhbGxiYWNrCiAgICBzZWxmLl90cmFuc2Zvcm1fZXZhbHVhdGlvbl9zdGF0ZSA9IHRyYW5zZm9ybV9ldmFsdWF0aW9uX3N0YXRlCiAgICBzZWxmLl9zaWRlX2lucHV0X3ZhbHVlcyA9IHt9ICAjIHR5cGU6IERpY3RbcHZhbHVlLkFzU2lkZUlucHV0LCBBbnldCiAgICBzZWxmLmJsb2NrZWQgPSBGYWxzZQogICAgc2VsZi5fY2FsbF9jb3VudCA9IDAKICAgIHNlbGYuX3JldHJ5X2NvdW50ID0gMAogICAgc2VsZi5fbWF4X3JldHJpZXNfcGVyX2J1bmRsZSA9IFRyYW5zZm9ybUV4ZWN1dG9yLl9NQVhfUkVUUllfUEVSX0JVTkRMRQoKICBkZWYgY2FsbChzZWxmLCBzdGF0ZV9zYW1wbGVyKToKICAgIHNlbGYuX2NhbGxfY291bnQgKz0gMQogICAgYXNzZXJ0IHNlbGYuX2NhbGxfY291bnQgPD0gKDEgKyBsZW4oc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnNpZGVfaW5wdXRzKSkKICAgIG1ldHJpY3NfY29udGFpbmVyID0gTWV0cmljc0NvbnRhaW5lcihzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uZnVsbF9sYWJlbCkKICAgIHN0YXJ0X3N0YXRlID0gc3RhdGVfc2FtcGxlci5zY29wZWRfc3RhdGUoCiAgICAgICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLmZ1bGxfbGFiZWwsCiAgICAgICAgJ3N0YXJ0JywKICAgICAgICBtZXRyaWNzX2NvbnRhaW5lcj1tZXRyaWNzX2NvbnRhaW5lcikKICAgIHByb2Nlc3Nfc3RhdGUgPSBzdGF0ZV9zYW1wbGVyLnNjb3BlZF9zdGF0ZSgKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uZnVsbF9sYWJlbCwKICAgICAgICAncHJvY2VzcycsCiAgICAgICAgbWV0cmljc19jb250YWluZXI9bWV0cmljc19jb250YWluZXIpCiAgICBmaW5pc2hfc3RhdGUgPSBzdGF0ZV9zYW1wbGVyLnNjb3BlZF9zdGF0ZSgKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uZnVsbF9sYWJlbCwKICAgICAgICAnZmluaXNoJywKICAgICAgICBtZXRyaWNzX2NvbnRhaW5lcj1tZXRyaWNzX2NvbnRhaW5lcikKCiAgICB3aXRoIHN0YXJ0X3N0YXRlOgogICAgICAjIFNpZGUgaW5wdXQgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGFjY291bnRlZCBmb3IgaW4gc3RhcnRfc3RhdGUuCiAgICAgIGZvciBzaWRlX2lucHV0IGluIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5zaWRlX2lucHV0czoKICAgICAgICAjIEZpbmQgdGhlIHByb2plY3Rpb24gb2YgbWFpbidzIHdpbmRvdyBvbnRvIHRoZSBzaWRlIGlucHV0J3Mgd2luZG93LgogICAgICAgIHdpbmRvd19tYXBwaW5nX2ZuID0gc2lkZV9pbnB1dC5fdmlld19vcHRpb25zKCkuZ2V0KAogICAgICAgICAgICAnd2luZG93X21hcHBpbmdfZm4nLCBzaWRlaW5wdXRzLl9nbG9iYWxfd2luZG93X21hcHBpbmdfZm4pCiAgICAgICAgbWFpbl9vbnRvX3NpZGVfd2luZG93ID0gd2luZG93X21hcHBpbmdfZm4oCiAgICAgICAgICAgIHNlbGYuX2xhdGVzdF9tYWluX2lucHV0X3dpbmRvdykKICAgICAgICBibG9ja191bnRpbCA9IG1haW5fb250b19zaWRlX3dpbmRvdy5lbmQKCiAgICAgICAgaWYgc2lkZV9pbnB1dCBub3QgaW4gc2VsZi5fc2lkZV9pbnB1dF92YWx1ZXM6CiAgICAgICAgICB2YWx1ZSA9IHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5nZXRfdmFsdWVfb3JfYmxvY2tfdW50aWxfcmVhZHkoCiAgICAgICAgICAgICAgc2lkZV9pbnB1dCwgc2VsZiwgYmxvY2tfdW50aWwpCiAgICAgICAgICBpZiBub3QgdmFsdWU6CiAgICAgICAgICAgICMgTW9uaXRvciB0YXNrIHdpbGwgcmVzY2hlZHVsZSB0aGlzIGV4ZWN1dG9yIG9uY2UgdGhlIHNpZGUgaW5wdXQgaXMKICAgICAgICAgICAgIyBhdmFpbGFibGUuCiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgc2VsZi5fc2lkZV9pbnB1dF92YWx1ZXNbc2lkZV9pbnB1dF0gPSB2YWx1ZQogICAgICBzaWRlX2lucHV0X3ZhbHVlcyA9IFsKICAgICAgICAgIHNlbGYuX3NpZGVfaW5wdXRfdmFsdWVzW3NpZGVfaW5wdXRdCiAgICAgICAgICBmb3Igc2lkZV9pbnB1dCBpbiBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uc2lkZV9pbnB1dHMKICAgICAgXQoKICAgIHdoaWxlIHNlbGYuX3JldHJ5X2NvdW50IDwgc2VsZi5fbWF4X3JldHJpZXNfcGVyX2J1bmRsZToKICAgICAgdHJ5OgogICAgICAgIHNlbGYuYXR0ZW1wdF9jYWxsKAogICAgICAgICAgICBtZXRyaWNzX2NvbnRhaW5lciwKICAgICAgICAgICAgc2lkZV9pbnB1dF92YWx1ZXMsCiAgICAgICAgICAgIHN0YXJ0X3N0YXRlLAogICAgICAgICAgICBwcm9jZXNzX3N0YXRlLAogICAgICAgICAgICBmaW5pc2hfc3RhdGUpCiAgICAgICAgYnJlYWsKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHNlbGYuX3JldHJ5X2NvdW50ICs9IDEKICAgICAgICBfTE9HR0VSLmVycm9yKAogICAgICAgICAgICAnRXhjZXB0aW9uIGF0IGJ1bmRsZSAlciwgZHVlIHRvIGFuIGV4Y2VwdGlvbi5cbiAlcycsCiAgICAgICAgICAgIHNlbGYuX2lucHV0X2J1bmRsZSwKICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKICAgICAgICBpZiBzZWxmLl9yZXRyeV9jb3VudCA9PSBzZWxmLl9tYXhfcmV0cmllc19wZXJfYnVuZGxlOgogICAgICAgICAgX0xPR0dFUi5lcnJvcigKICAgICAgICAgICAgICAnR2l2aW5nIHVwIGFmdGVyICVzIGF0dGVtcHRzLicsIHNlbGYuX21heF9yZXRyaWVzX3Blcl9idW5kbGUpCiAgICAgICAgICBzZWxmLl9jb21wbGV0aW9uX2NhbGxiYWNrLmhhbmRsZV9leGNlcHRpb24oc2VsZiwgZSkKCiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQubWV0cmljcygpLmNvbW1pdF9waHlzaWNhbCgKICAgICAgICBzZWxmLl9pbnB1dF9idW5kbGUsIG1ldHJpY3NfY29udGFpbmVyLmdldF9jdW11bGF0aXZlKCkpCiAgICBzZWxmLl90cmFuc2Zvcm1fZXZhbHVhdGlvbl9zdGF0ZS5jb21wbGV0ZShzZWxmKQoKICBkZWYgYXR0ZW1wdF9jYWxsKAogICAgICBzZWxmLAogICAgICBtZXRyaWNzX2NvbnRhaW5lciwKICAgICAgc2lkZV9pbnB1dF92YWx1ZXMsCiAgICAgIHN0YXJ0X3N0YXRlLAogICAgICBwcm9jZXNzX3N0YXRlLAogICAgICBmaW5pc2hfc3RhdGUpOgogICAgIiIiQXR0ZW1wdHMgdG8gcnVuIGEgYnVuZGxlLiIiIgogICAgZXZhbHVhdG9yID0gc2VsZi5fdHJhbnNmb3JtX2V2YWx1YXRvcl9yZWdpc3RyeS5nZXRfZXZhbHVhdG9yKAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybSwgc2VsZi5faW5wdXRfYnVuZGxlLCBzaWRlX2lucHV0X3ZhbHVlcykKCiAgICB3aXRoIHN0YXJ0X3N0YXRlOgogICAgICBldmFsdWF0b3Iuc3RhcnRfYnVuZGxlKCkKCiAgICB3aXRoIHByb2Nlc3Nfc3RhdGU6CiAgICAgIGlmIHNlbGYuX2ZpcmVkX3RpbWVyczoKICAgICAgICBmb3IgdGltZXJfZmlyaW5nIGluIHNlbGYuX2ZpcmVkX3RpbWVyczoKICAgICAgICAgIGV2YWx1YXRvci5wcm9jZXNzX3RpbWVyX3dyYXBwZXIodGltZXJfZmlyaW5nKQoKICAgICAgaWYgc2VsZi5faW5wdXRfYnVuZGxlOgogICAgICAgIGZvciB2YWx1ZSBpbiBzZWxmLl9pbnB1dF9idW5kbGUuZ2V0X2VsZW1lbnRzX2l0ZXJhYmxlKCk6CiAgICAgICAgICBldmFsdWF0b3IucHJvY2Vzc19lbGVtZW50KHZhbHVlKQoKICAgIHdpdGggZmluaXNoX3N0YXRlOgogICAgICByZXN1bHQgPSBldmFsdWF0b3IuZmluaXNoX2J1bmRsZSgpCiAgICAgIHJlc3VsdC5sb2dpY2FsX21ldHJpY191cGRhdGVzID0gbWV0cmljc19jb250YWluZXIuZ2V0X2N1bXVsYXRpdmUoKQoKICAgIHNlbGYuX2NvbXBsZXRpb25fY2FsbGJhY2suaGFuZGxlX3Jlc3VsdChzZWxmLCBzZWxmLl9pbnB1dF9idW5kbGUsIHJlc3VsdCkKICAgIHJldHVybiByZXN1bHQKCgpjbGFzcyBFeGVjdXRvcihvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHNlbGYuX2V4ZWN1dG9yID0gX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IoKmFyZ3MsICoqa3dhcmdzKQoKICBkZWYgc3RhcnQoc2VsZiwgcm9vdHMpOgogICAgc2VsZi5fZXhlY3V0b3Iuc3RhcnQocm9vdHMpCgogIGRlZiBhd2FpdF9jb21wbGV0aW9uKHNlbGYpOgogICAgc2VsZi5fZXhlY3V0b3IuYXdhaXRfY29tcGxldGlvbigpCgogIGRlZiBzaHV0ZG93bihzZWxmKToKICAgIHNlbGYuX2V4ZWN1dG9yLnJlcXVlc3Rfc2h1dGRvd24oKQoKCmNsYXNzIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yKG9iamVjdCk6CiAgIiIiQW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZm9yIEV4ZWN1dG9yLiIiIgoKICBOVU1fV09SS0VSUyA9IDEKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICB2YWx1ZV90b19jb25zdW1lcnMsCiAgICAgIHRyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnksCiAgICAgIGV2YWx1YXRpb25fY29udGV4dCAgIyB0eXBlOiBFdmFsdWF0aW9uQ29udGV4dAogICk6CiAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2UgPSBfRXhlY3V0b3JTZXJ2aWNlKAogICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLk5VTV9XT1JLRVJTKQogICAgc2VsZi50cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZXMgPSBfVHJhbnNmb3JtRXhlY3V0b3JTZXJ2aWNlcygKICAgICAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2UpCiAgICBzZWxmLnZhbHVlX3RvX2NvbnN1bWVycyA9IHZhbHVlX3RvX2NvbnN1bWVycwogICAgc2VsZi50cmFuc2Zvcm1fZXZhbHVhdG9yX3JlZ2lzdHJ5ID0gdHJhbnNmb3JtX2V2YWx1YXRvcl9yZWdpc3RyeQogICAgc2VsZi5ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuYWxsX3VwZGF0ZXMgPSBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVHlwZWRVcGRhdGVRdWV1ZSgKICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fRXhlY3V0b3JVcGRhdGUpCiAgICBzZWxmLnZpc2libGVfdXBkYXRlcyA9IF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9UeXBlZFVwZGF0ZVF1ZXVlKAogICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUpCiAgICBzZWxmLmRlZmF1bHRfY29tcGxldGlvbl9jYWxsYmFjayA9IF9Db21wbGV0aW9uQ2FsbGJhY2soCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LCBzZWxmLmFsbF91cGRhdGVzKQoKICBkZWYgc3RhcnQoc2VsZiwgcm9vdHMpOgogICAgc2VsZi5yb290X25vZGVzID0gZnJvemVuc2V0KHJvb3RzKQogICAgc2VsZi5hbGxfbm9kZXMgPSBmcm96ZW5zZXQoCiAgICAgICAgaXRlcnRvb2xzLmNoYWluKAogICAgICAgICAgICByb290cywgKml0ZXJ0b29scy5jaGFpbihzZWxmLnZhbHVlX3RvX2NvbnN1bWVycy52YWx1ZXMoKSkpKQogICAgc2VsZi5ub2RlX3RvX3BlbmRpbmdfYnVuZGxlcyA9IHt9CiAgICBmb3Igcm9vdF9ub2RlIGluIHNlbGYucm9vdF9ub2RlczoKICAgICAgcHJvdmlkZXIgPSAoCiAgICAgICAgICBzZWxmLnRyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnkuZ2V0X3Jvb3RfYnVuZGxlX3Byb3ZpZGVyKHJvb3Rfbm9kZSkpCiAgICAgIHNlbGYubm9kZV90b19wZW5kaW5nX2J1bmRsZXNbcm9vdF9ub2RlXSA9IHByb3ZpZGVyLmdldF9yb290X2J1bmRsZXMoKQogICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlLnN1Ym1pdCgKICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2soc2VsZikpCgogIGRlZiBhd2FpdF9jb21wbGV0aW9uKHNlbGYpOgogICAgdXBkYXRlID0gc2VsZi52aXNpYmxlX3VwZGF0ZXMudGFrZSgpCiAgICB0cnk6CiAgICAgIGlmIHVwZGF0ZS5leGNlcHRpb246CiAgICAgICAgdCwgdiwgdGIgPSB1cGRhdGUuZXhjX2luZm8KICAgICAgICByYWlzZV8odCwgdiwgdGIpCiAgICBmaW5hbGx5OgogICAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2Uuc2h1dGRvd24oKQogICAgICBzZWxmLmV4ZWN1dG9yX3NlcnZpY2UuYXdhaXRfY29tcGxldGlvbigpCgogIGRlZiByZXF1ZXN0X3NodXRkb3duKHNlbGYpOgogICAgc2VsZi5leGVjdXRvcl9zZXJ2aWNlLnNodXRkb3duKCkKCiAgZGVmIHNjaGVkdWxlX2NvbnN1bWVycyhzZWxmLCBjb21taXR0ZWRfYnVuZGxlKToKICAgICMgdHlwZTogKF9CdW5kbGUpIC0+IE5vbmUKICAgIGlmIGNvbW1pdHRlZF9idW5kbGUucGNvbGxlY3Rpb24gaW4gc2VsZi52YWx1ZV90b19jb25zdW1lcnM6CiAgICAgIGNvbnN1bWVycyA9IHNlbGYudmFsdWVfdG9fY29uc3VtZXJzW2NvbW1pdHRlZF9idW5kbGUucGNvbGxlY3Rpb25dCiAgICAgIGZvciBhcHBsaWVkX3B0cmFuc2Zvcm0gaW4gY29uc3VtZXJzOgogICAgICAgIHNlbGYuc2NoZWR1bGVfY29uc3VtcHRpb24oCiAgICAgICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICAgICAgY29tbWl0dGVkX2J1bmRsZSwgW10sCiAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9jb21wbGV0aW9uX2NhbGxiYWNrKQoKICBkZWYgc2NoZWR1bGVfdW5wcm9jZXNzZWRfYnVuZGxlKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSwgdW5wcm9jZXNzZWRfYnVuZGxlKToKICAgIHNlbGYubm9kZV90b19wZW5kaW5nX2J1bmRsZXNbYXBwbGllZF9wdHJhbnNmb3JtXS5hcHBlbmQodW5wcm9jZXNzZWRfYnVuZGxlKQoKICBkZWYgc2NoZWR1bGVfY29uc3VtcHRpb24oc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJfYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXR0ZWRfYnVuZGxlLCAgIyB0eXBlOiBfQnVuZGxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmVkX3RpbWVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgb25fY29tcGxldGUKICAgICAgICAgICAgICAgICAgICAgICAgICApOgogICAgIiIiU2NoZWR1bGVzIGV2YWx1YXRpb24gb2YgdGhlIGdpdmVuIGJ1bmRsZSB3aXRoIHRoZSB0cmFuc2Zvcm0uIiIiCiAgICBhc3NlcnQgY29uc3VtZXJfYXBwbGllZF9wdHJhbnNmb3JtCiAgICBhc3NlcnQgY29tbWl0dGVkX2J1bmRsZQogICAgYXNzZXJ0IG9uX2NvbXBsZXRlCiAgICBpZiBzZWxmLnRyYW5zZm9ybV9ldmFsdWF0b3JfcmVnaXN0cnkuc2hvdWxkX2V4ZWN1dGVfc2VyaWFsbHkoCiAgICAgICAgY29uc3VtZXJfYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICAgdHJhbnNmb3JtX2V4ZWN1dG9yX3NlcnZpY2UgPSBzZWxmLnRyYW5zZm9ybV9leGVjdXRvcl9zZXJ2aWNlcy5zZXJpYWwoCiAgICAgICAgICBjb25zdW1lcl9hcHBsaWVkX3B0cmFuc2Zvcm0pICAjIHR5cGU6IF9UcmFuc2Zvcm1FdmFsdWF0aW9uU3RhdGUKICAgIGVsc2U6CiAgICAgIHRyYW5zZm9ybV9leGVjdXRvcl9zZXJ2aWNlID0gc2VsZi50cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZXMucGFyYWxsZWwoKQoKICAgIHRyYW5zZm9ybV9leGVjdXRvciA9IFRyYW5zZm9ybUV4ZWN1dG9yKAogICAgICAgIHNlbGYudHJhbnNmb3JtX2V2YWx1YXRvcl9yZWdpc3RyeSwKICAgICAgICBzZWxmLmV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBjb21taXR0ZWRfYnVuZGxlLAogICAgICAgIGZpcmVkX3RpbWVycywKICAgICAgICBjb25zdW1lcl9hcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgb25fY29tcGxldGUsCiAgICAgICAgdHJhbnNmb3JtX2V4ZWN1dG9yX3NlcnZpY2UpCiAgICB0cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZS5zY2hlZHVsZSh0cmFuc2Zvcm1fZXhlY3V0b3IpCgogIGNsYXNzIF9UeXBlZFVwZGF0ZVF1ZXVlKG9iamVjdCk6CiAgICAiIiJUeXBlIGNoZWNraW5nIHVwZGF0ZSBxdWV1ZSB3aXRoIGJsb2NraW5nIGFuZCBub24tYmxvY2tpbmcgb3BlcmF0aW9ucy4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtX3R5cGUpOgogICAgICBzZWxmLl9pdGVtX3R5cGUgPSBpdGVtX3R5cGUKICAgICAgc2VsZi5fcXVldWUgPSBxdWV1ZS5RdWV1ZSgpCgogICAgZGVmIHBvbGwoc2VsZik6CiAgICAgIHRyeToKICAgICAgICBpdGVtID0gc2VsZi5fcXVldWUuZ2V0X25vd2FpdCgpCiAgICAgICAgc2VsZi5fcXVldWUudGFza19kb25lKCkKICAgICAgICByZXR1cm4gaXRlbQogICAgICBleGNlcHQgcXVldWUuRW1wdHk6CiAgICAgICAgcmV0dXJuIE5vbmUKCiAgICBkZWYgdGFrZShzZWxmKToKICAgICAgIyBUaGUgaW1wbGVtZW50YXRpb24gb2YgUXVldWUuUXVldWUuZ2V0KCkgZG9lcyBub3QgcHJvcGFnYXRlCiAgICAgICMgS2V5Ym9hcmRJbnRlcnJ1cHRzIHdoZW4gYSB0aW1lb3V0IGlzIG5vdCB1c2VkLiAgV2UgdGhlcmVmb3JlIHVzZSBhCiAgICAgICMgb25lLXNlY29uZCB0aW1lb3V0IGluIHRoZSBmb2xsb3dpbmcgbG9vcCB0byBhbGxvdyBLZXlib2FyZEludGVycnVwdHMKICAgICAgIyB0byBiZSBjb3JyZWN0bHkgcHJvcGFnYXRlZC4KICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICB0cnk6CiAgICAgICAgICBpdGVtID0gc2VsZi5fcXVldWUuZ2V0KHRpbWVvdXQ9MSkKICAgICAgICAgIHNlbGYuX3F1ZXVlLnRhc2tfZG9uZSgpCiAgICAgICAgICByZXR1cm4gaXRlbQogICAgICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKICAgICAgICAgIHBhc3MKCiAgICBkZWYgb2ZmZXIoc2VsZiwgaXRlbSk6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKGl0ZW0sIHNlbGYuX2l0ZW1fdHlwZSkKICAgICAgc2VsZi5fcXVldWUucHV0X25vd2FpdChpdGVtKQoKICBjbGFzcyBfRXhlY3V0b3JVcGRhdGUob2JqZWN0KToKICAgICIiIkFuIGludGVybmFsIHN0YXR1cyB1cGRhdGUgb24gdGhlIHN0YXRlIG9mIHRoZSBleGVjdXRvci4iIiIKICAgIGRlZiBfX2luaXRfXygKICAgICAgICBzZWxmLAogICAgICAgIHRyYW5zZm9ybV9leGVjdXRvciwKICAgICAgICBjb21taXR0ZWRfYnVuZGxlPU5vbmUsCiAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlPU5vbmUsCiAgICAgICAgZXhjZXB0aW9uPU5vbmUpOgogICAgICBzZWxmLnRyYW5zZm9ybV9leGVjdXRvciA9IHRyYW5zZm9ybV9leGVjdXRvcgogICAgICAjIEV4YWN0bHkgb25lIG9mIHRoZW0gc2hvdWxkIGJlIG5vdC1Ob25lCiAgICAgIGFzc2VydCBzdW0oCiAgICAgICAgICBbYm9vbChjb21taXR0ZWRfYnVuZGxlKSwgYm9vbCh1bnByb2Nlc3NlZF9idW5kbGUpLAogICAgICAgICAgIGJvb2woZXhjZXB0aW9uKV0pID09IDEKICAgICAgc2VsZi5jb21taXR0ZWRfYnVuZGxlID0gY29tbWl0dGVkX2J1bmRsZQogICAgICBzZWxmLnVucHJvY2Vzc2VkX2J1bmRsZSA9IHVucHJvY2Vzc2VkX2J1bmRsZQogICAgICBzZWxmLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbgogICAgICBzZWxmLmV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKICAgICAgaWYgc2VsZi5leGNfaW5mb1sxXSBpcyBub3QgZXhjZXB0aW9uOgogICAgICAgICMgTm90IHRoZSByaWdodCBleGNlcHRpb24uCiAgICAgICAgc2VsZi5leGNfaW5mbyA9IChleGNlcHRpb24sIE5vbmUsIE5vbmUpCgogIGNsYXNzIF9WaXNpYmxlRXhlY3V0b3JVcGRhdGUob2JqZWN0KToKICAgICIiIkFuIHVwZGF0ZSBvZiBpbnRlcmVzdCB0byB0aGUgdXNlci4KCiAgICBVc2VkIGZvciBhd2FpdGluZyB0aGUgY29tcGxldGlvbiB0byBkZWNpZGUgd2hldGhlciB0byByZXR1cm4gbm9ybWFsbHkgb3IKICAgIHJhaXNlIGFuIGV4Y2VwdGlvbi4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y19pbmZvPShOb25lLCBOb25lLCBOb25lKSk6CiAgICAgIHNlbGYuZmluaXNoZWQgPSBleGNfaW5mb1swXSBpcyBub3QgTm9uZQogICAgICBzZWxmLmV4Y2VwdGlvbiA9IGV4Y19pbmZvWzFdIG9yIGV4Y19pbmZvWzBdCiAgICAgIHNlbGYuZXhjX2luZm8gPSBleGNfaW5mbwoKICBjbGFzcyBfTW9uaXRvclRhc2soX0V4ZWN1dG9yU2VydmljZS5DYWxsYWJsZVRhc2spOgogICAgIiIiTW9uaXRvclRhc2sgY29udGludW91c2x5IHJ1bnMgdG8gZW5zdXJlIHRoYXQgcGlwZWxpbmUgbWFrZXMgcHJvZ3Jlc3MuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgZXhlY3V0b3IpOgogICAgICAjIHR5cGU6IChfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvcikgLT4gTm9uZQogICAgICBzZWxmLl9leGVjdXRvciA9IGV4ZWN1dG9yCgogICAgQHByb3BlcnR5CiAgICBkZWYgbmFtZShzZWxmKToKICAgICAgcmV0dXJuICdtb25pdG9yJwoKICAgIGRlZiBjYWxsKHNlbGYsIHN0YXRlX3NhbXBsZXIpOgogICAgICB0cnk6CiAgICAgICAgdXBkYXRlID0gc2VsZi5fZXhlY3V0b3IuYWxsX3VwZGF0ZXMucG9sbCgpCiAgICAgICAgd2hpbGUgdXBkYXRlOgogICAgICAgICAgaWYgdXBkYXRlLmNvbW1pdHRlZF9idW5kbGU6CiAgICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLnNjaGVkdWxlX2NvbnN1bWVycyh1cGRhdGUuY29tbWl0dGVkX2J1bmRsZSkKICAgICAgICAgIGVsaWYgdXBkYXRlLnVucHJvY2Vzc2VkX2J1bmRsZToKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3Iuc2NoZWR1bGVfdW5wcm9jZXNzZWRfYnVuZGxlKAogICAgICAgICAgICAgICAgdXBkYXRlLnRyYW5zZm9ybV9leGVjdXRvci5fYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgdXBkYXRlLnVucHJvY2Vzc2VkX2J1bmRsZSkKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIGFzc2VydCB1cGRhdGUuZXhjZXB0aW9uCiAgICAgICAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICAgICAgICdBIHRhc2sgZmFpbGVkIHdpdGggZXhjZXB0aW9uOiAlcycsIHVwZGF0ZS5leGNlcHRpb24pCiAgICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLnZpc2libGVfdXBkYXRlcy5vZmZlcigKICAgICAgICAgICAgICAgIF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9WaXNpYmxlRXhlY3V0b3JVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlLmV4Y19pbmZvKSkKICAgICAgICAgIHVwZGF0ZSA9IHNlbGYuX2V4ZWN1dG9yLmFsbF91cGRhdGVzLnBvbGwoKQogICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV2YWx1YXRpb25fY29udGV4dC5zY2hlZHVsZV9wZW5kaW5nX3VuYmxvY2tlZF90YXNrcygKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3IuZXhlY3V0b3Jfc2VydmljZSkKICAgICAgICBzZWxmLl9hZGRfd29ya19pZl9uZWNlc3Nhcnkoc2VsZi5fZmlyZV90aW1lcnMoKSkKICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgX0xPR0dFUi5lcnJvcignTW9uaXRvciB0YXNrIGRpZWQgZHVlIHRvIGV4Y2VwdGlvbi5cbiAlcycsIGUpCiAgICAgICAgc2VsZi5fZXhlY3V0b3IudmlzaWJsZV91cGRhdGVzLm9mZmVyKAogICAgICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVmlzaWJsZUV4ZWN1dG9yVXBkYXRlKAogICAgICAgICAgICAgICAgc3lzLmV4Y19pbmZvKCkpKQogICAgICBmaW5hbGx5OgogICAgICAgIGlmIG5vdCBzZWxmLl9zaG91bGRfc2h1dGRvd24oKToKICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV4ZWN1dG9yX3NlcnZpY2Uuc3VibWl0KHNlbGYpCgogICAgZGVmIF9zaG91bGRfc2h1dGRvd24oc2VsZik6CiAgICAgICMgdHlwZTogKCkgLT4gYm9vbAoKICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgdGhlIHBpcGVsaW5lIGlzIGNvbXBsZXRlZCBhbmQgc2hvdWxkIGJlIHNodXQgZG93bi4KCiAgICAgIElmIHRoZXJlIGlzIGFueXRoaW5nIGluIHRoZSBxdWV1ZSBvZiB0YXNrcyB0byBkbyBvcgogICAgICBpZiB0aGVyZSBhcmUgYW55IHJlYWx0aW1lIHRpbWVycyBzZXQsIGRvIG5vdCBzaHV0IGRvd24uCgogICAgICBPdGhlcndpc2UsIGNoZWNrIGlmIGFsbCB0aGUgdHJhbnNmb3Jtcycgd2F0ZXJtYXJrcyBhcmUgY29tcGxldGUuCiAgICAgIElmIHRoZXkgYXJlIG5vdCwgdGhlIHBpcGVsaW5lIGlzIG5vdCBwcm9ncmVzc2luZyAoc3RhbGwgZGV0ZWN0ZWQpLgogICAgICBXaGV0aGVyIHRoZSBwaXBlbGluZSBoYXMgc3RhbGxlZCBvciBub3QsIHRoZSBleGVjdXRvciBzaG91bGQgc2h1dAogICAgICBkb3duIHRoZSBwaXBlbGluZS4KCiAgICAgIFJldHVybnM6CiAgICAgICAgVHJ1ZSBvbmx5IGlmIHRoZSBwaXBlbGluZSBoYXMgcmVhY2hlZCBhIHRlcm1pbmFsIHN0YXRlIGFuZCBzaG91bGQKICAgICAgICBiZSBzaHV0IGRvd24uCgogICAgICAiIiIKICAgICAgaWYgc2VsZi5faXNfZXhlY3V0aW5nKCk6CiAgICAgICAgIyBUaGVyZSBhcmUgc29tZSBidW5kbGVzIHN0aWxsIGluIHByb2dyZXNzLgogICAgICAgIHJldHVybiBGYWxzZQoKICAgICAgd2F0ZXJtYXJrX21hbmFnZXIgPSBzZWxmLl9leGVjdXRvci5ldmFsdWF0aW9uX2NvbnRleHQuX3dhdGVybWFya19tYW5hZ2VyCiAgICAgIF8sIGFueV91bmZpcmVkX3JlYWx0aW1lX3RpbWVycyA9IHdhdGVybWFya19tYW5hZ2VyLmV4dHJhY3RfYWxsX3RpbWVycygpCiAgICAgIGlmIGFueV91bmZpcmVkX3JlYWx0aW1lX3RpbWVyczoKICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgIGVsc2U6CiAgICAgICAgaWYgc2VsZi5fZXhlY3V0b3IuZXZhbHVhdGlvbl9jb250ZXh0LmlzX2RvbmUoKToKICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLnZpc2libGVfdXBkYXRlcy5vZmZlcigKICAgICAgICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVmlzaWJsZUV4ZWN1dG9yVXBkYXRlKCkpCiAgICAgICAgZWxzZToKICAgICAgICAgICMgTm90aGluZyBpcyBzY2hlZHVsZWQgZm9yIGV4ZWN1dGlvbiwgYnV0IHdhdGVybWFya3MgaW5jb21wbGV0ZS4KICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLnZpc2libGVfdXBkYXRlcy5vZmZlcigKICAgICAgICAgICAgICBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVmlzaWJsZUV4ZWN1dG9yVXBkYXRlKCgKICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uKCdNb25pdG9yIHRhc2sgZGV0ZWN0ZWQgYSBwaXBlbGluZSBzdGFsbC4nKSwKICAgICAgICAgICAgICAgICAgTm9uZSwKICAgICAgICAgICAgICAgICAgTm9uZSkpKQogICAgICAgIHNlbGYuX2V4ZWN1dG9yLmV4ZWN1dG9yX3NlcnZpY2Uuc2h1dGRvd24oKQogICAgICAgIHJldHVybiBUcnVlCgogICAgZGVmIF9maXJlX3RpbWVycyhzZWxmKToKICAgICAgIiIiU2NoZWR1bGVzIHRyaWdnZXJlZCBjb25zdW1lcnMgaWYgYW55IHRpbWVycyBmaXJlZC4KCiAgICAgIFJldHVybnM6CiAgICAgICAgVHJ1ZSBpZiB0aW1lcnMgZmlyZWQuCiAgICAgICIiIgogICAgICB0cmFuc2Zvcm1fZmlyZWRfdGltZXJzLCBfID0gKAogICAgICAgICAgc2VsZi5fZXhlY3V0b3IuZXZhbHVhdGlvbl9jb250ZXh0LmV4dHJhY3RfYWxsX3RpbWVycygpKQogICAgICBmb3IgYXBwbGllZF9wdHJhbnNmb3JtLCBmaXJlZF90aW1lcnMgaW4gdHJhbnNmb3JtX2ZpcmVkX3RpbWVyczoKICAgICAgICAjIFVzZSBhbiBlbXB0eSBjb21taXR0ZWQgYnVuZGxlLiBqdXN0IHRvIHRyaWdnZXIuCiAgICAgICAgZW1wdHlfYnVuZGxlID0gKAogICAgICAgICAgICBzZWxmLl9leGVjdXRvci5ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2VtcHR5X2NvbW1pdHRlZF9idW5kbGUoCiAgICAgICAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0uaW5wdXRzWzBdKSkKICAgICAgICB0aW1lcl9jb21wbGV0aW9uX2NhbGxiYWNrID0gX0NvbXBsZXRpb25DYWxsYmFjaygKICAgICAgICAgICAgc2VsZi5fZXhlY3V0b3IuZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICAgICAgICBzZWxmLl9leGVjdXRvci5hbGxfdXBkYXRlcywKICAgICAgICAgICAgdGltZXJfZmlyaW5ncz1maXJlZF90aW1lcnMpCgogICAgICAgIHNlbGYuX2V4ZWN1dG9yLnNjaGVkdWxlX2NvbnN1bXB0aW9uKAogICAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgICAgIGVtcHR5X2J1bmRsZSwKICAgICAgICAgICAgZmlyZWRfdGltZXJzLAogICAgICAgICAgICB0aW1lcl9jb21wbGV0aW9uX2NhbGxiYWNrKQogICAgICByZXR1cm4gYm9vbCh0cmFuc2Zvcm1fZmlyZWRfdGltZXJzKQoKICAgIGRlZiBfaXNfZXhlY3V0aW5nKHNlbGYpOgogICAgICAjIHR5cGU6ICgpIC0+IGJvb2wKCiAgICAgICIiIkNoZWNrcyB3aGV0aGVyIHRoZSBqb2IgaXMgc3RpbGwgZXhlY3V0aW5nLgoKICAgICAgUmV0dXJuczoKICAgICAgICBUcnVlIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBub24tYmxvY2tlZCBUcmFuc2Zvcm1FeGVjdXRvciBhY3RpdmUuIiIiCgogICAgICBleGVjdXRvcnMgPSBzZWxmLl9leGVjdXRvci50cmFuc2Zvcm1fZXhlY3V0b3Jfc2VydmljZXMuZXhlY3V0b3JzCiAgICAgIGlmIG5vdCBleGVjdXRvcnM6CiAgICAgICAgIyBOb3RoaW5nIGlzIGV4ZWN1dGluZy4KICAgICAgICByZXR1cm4gRmFsc2UKCiAgICAgICMgRW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRob3NlIGV4ZWN1dG9ycyBpcyBub3QgYmxvY2tlZC4KICAgICAgZm9yIHRyYW5zZm9ybV9leGVjdXRvciBpbiBleGVjdXRvcnM6CiAgICAgICAgaWYgbm90IHRyYW5zZm9ybV9leGVjdXRvci5ibG9ja2VkOgogICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIF9hZGRfd29ya19pZl9uZWNlc3Nhcnkoc2VsZiwgdGltZXJzX2ZpcmVkKToKICAgICAgIiIiQWRkcyBtb3JlIHdvcmsgZnJvbSB0aGUgcm9vdHMgaWYgcGlwZWxpbmUgcmVxdWlyZXMgbW9yZSBpbnB1dC4KCiAgICAgIElmIGFsbCBhY3RpdmUgVHJhbnNmb3JtRXhlY3V0b3JzIGFyZSBpbiBhIGJsb2NrZWQgc3RhdGUsIGFkZCBtb3JlIHdvcmsKICAgICAgZnJvbSByb290IG5vZGVzIHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCB3b3JrLiBUaGlzIGVuc3VyZXMgdGhhdCBpZiBhCiAgICAgIHBpcGVsaW5lIGhhcyBlbGVtZW50cyBhdmFpbGFibGUgZnJvbSB0aGUgcm9vdCBub2RlcyBpdCB3aWxsIGFkZCB0aG9zZQogICAgICBlbGVtZW50cyB3aGVuIG5lY2Vzc2FyeS4KCiAgICAgIEFyZ3M6CiAgICAgICAgdGltZXJzX2ZpcmVkOiBUcnVlIGlmIGFueSB0aW1lcnMgZmlyZWQgcHJpb3IgdG8gdGhpcyBjYWxsLgogICAgICAiIiIKICAgICAgIyBJZiBhbnkgdGltZXJzIGhhdmUgZmlyZWQsIHRoZXkgd2lsbCBhZGQgbW9yZSB3b3JrOyBObyBuZWVkIHRvIGFkZCBtb3JlLgogICAgICBpZiB0aW1lcnNfZmlyZWQ6CiAgICAgICAgcmV0dXJuCgogICAgICBpZiBzZWxmLl9pc19leGVjdXRpbmcoKToKICAgICAgICAjIFdlIGhhdmUgYXQgbGVhc3Qgb25lIGV4ZWN1dG9yIHRoYXQgY2FuIHByb2NlZWQgd2l0aG91dCBhZGRpbmcKICAgICAgICAjIGFkZGl0aW9uYWwgd29yay4KICAgICAgICByZXR1cm4KCiAgICAgICMgQWxsIGN1cnJlbnQgVHJhbnNmb3JtRXhlY3V0b3JzIGFyZSBibG9ja2VkOyBhZGQgbW9yZSB3b3JrIGZyb20gYW55CiAgICAgICMgcGVuZGluZyBidW5kbGVzLgogICAgICBmb3IgYXBwbGllZF9wdHJhbnNmb3JtIGluIHNlbGYuX2V4ZWN1dG9yLmFsbF9ub2RlczoKICAgICAgICBpZiBub3Qgc2VsZi5fZXhlY3V0b3IuZXZhbHVhdGlvbl9jb250ZXh0LmlzX2RvbmUoYXBwbGllZF9wdHJhbnNmb3JtKToKICAgICAgICAgIHBlbmRpbmdfYnVuZGxlcyA9IHNlbGYuX2V4ZWN1dG9yLm5vZGVfdG9fcGVuZGluZ19idW5kbGVzLmdldCgKICAgICAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sIFtdKQogICAgICAgICAgZm9yIGJ1bmRsZSBpbiBwZW5kaW5nX2J1bmRsZXM6CiAgICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLnNjaGVkdWxlX2NvbnN1bXB0aW9uKAogICAgICAgICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgICAgICAgICAgYnVuZGxlLCBbXSwKICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLmRlZmF1bHRfY29tcGxldGlvbl9jYWxsYmFjaykKICAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLm5vZGVfdG9fcGVuZGluZ19idW5kbGVzW2FwcGxpZWRfcHRyYW5zZm9ybV0gPSBbXQqUfZQojCJfRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFzay5jYWxslGpWMQEASzxLPYeUjCJfRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFzay5uYW1llGpWMQEASz9LQYeUjB1fRXhlY3V0b3JTZXJ2aWNlLkNhbGxhYmxlVGFza5RqXTEBAEs7S0GHlIwwX0V4ZWN1dG9yU2VydmljZS5fRXhlY3V0b3JTZXJ2aWNlV29ya2VyLl9faW5pdF9flGpWMQEAS0lLVoeUjDRfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuX3VwZGF0ZV9uYW1llGpWMQEAS1hLXoeUjDlfRXhlY3V0b3JTZXJ2aWNlLl9FeGVjdXRvclNlcnZpY2VXb3JrZXIuX2dldF90YXNrX29yX25vbmWUalYxAQBLYEtoh5SMK19FeGVjdXRvclNlcnZpY2UuX0V4ZWN1dG9yU2VydmljZVdvcmtlci5ydW6UalYxAQBLakt2h5SMMF9FeGVjdXRvclNlcnZpY2UuX0V4ZWN1dG9yU2VydmljZVdvcmtlci5zaHV0ZG93bpRqVjEBAEt4S3mHlIwnX0V4ZWN1dG9yU2VydmljZS5fRXhlY3V0b3JTZXJ2aWNlV29ya2VylGpdMQEAS0NLeYeUjBlfRXhlY3V0b3JTZXJ2aWNlLl9faW5pdF9flGpWMQEAS3tLgoeUjBdfRXhlY3V0b3JTZXJ2aWNlLnN1Ym1pdJRqVjEBAEuES4iHlIwhX0V4ZWN1dG9yU2VydmljZS5hd2FpdF9jb21wbGV0aW9ulGpWMQEAS4pLjIeUjBlfRXhlY3V0b3JTZXJ2aWNlLnNodXRkb3dulGpWMQEAS45LmoeUjBBfRXhlY3V0b3JTZXJ2aWNllGpdMQEASzlLmoeUjCJfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlLl9faW5pdF9flGpWMQEAS6BLpoeUjCJfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlLnNjaGVkdWxllGpWMQEAS6hLqoeUjCJfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRlLmNvbXBsZXRllGpWMQEAS6xLrYeUjBlfVHJhbnNmb3JtRXZhbHVhdGlvblN0YXRllGpdMQEAS59LrYeUjBhfUGFyYWxsZWxFdmFsdWF0aW9uU3RhdGWUal0xAQBLsEu5h5SMH19TZXJpYWxFdmFsdWF0aW9uU3RhdGUuX19pbml0X1+UalYxAQBLxUvJh5SMH19TZXJpYWxFdmFsdWF0aW9uU3RhdGUuY29tcGxldGWUalYxAQBLy0vNh5SMH19TZXJpYWxFdmFsdWF0aW9uU3RhdGUuc2NoZWR1bGWUalYxAQBLz0vQh5SMM19TZXJpYWxFdmFsdWF0aW9uU3RhdGUuX3VwZGF0ZV9jdXJyZW50bHlfZXZhbHVhdGluZ5RqVjEBAEvSS9yHlIwWX1NlcmlhbEV2YWx1YXRpb25TdGF0ZZRqXTEBAEu8S9yHlIwjX1RyYW5zZm9ybUV4ZWN1dG9yU2VydmljZXMuX19pbml0X1+UalYxAQBL5Uvsh5SMI19UcmFuc2Zvcm1FeGVjdXRvclNlcnZpY2VzLnBhcmFsbGVslGpWMQEAS+5L8IeUjCFfVHJhbnNmb3JtRXhlY3V0b3JTZXJ2aWNlcy5zZXJpYWyUalYxAQBL8kv4h5SMJF9UcmFuc2Zvcm1FeGVjdXRvclNlcnZpY2VzLmV4ZWN1dG9yc5RqVjEBAEv6S/2HlIwaX1RyYW5zZm9ybUV4ZWN1dG9yU2VydmljZXOUal0xAQBL30v9h5SMHF9Db21wbGV0aW9uQ2FsbGJhY2suX19pbml0X1+UalYxAQBNCAFNDwGHlIwhX0NvbXBsZXRpb25DYWxsYmFjay5oYW5kbGVfcmVzdWx0lGpWMQEATREBTR0Bh5SMJF9Db21wbGV0aW9uQ2FsbGJhY2suaGFuZGxlX2V4Y2VwdGlvbpRqVjEBAE0fAU0iAYeUjBNfQ29tcGxldGlvbkNhbGxiYWNrlGpdMQEATQABTSIBh5SMGlRyYW5zZm9ybUV4ZWN1dG9yLl9faW5pdF9flGpWMQEATTEBTU0Bh5SMFlRyYW5zZm9ybUV4ZWN1dG9yLmNhbGyUalYxAQBNTwFNjQGHlIweVHJhbnNmb3JtRXhlY3V0b3IuYXR0ZW1wdF9jYWxslGpWMQEATY8BTasBh5SMEVRyYW5zZm9ybUV4ZWN1dG9ylGpdMQEATSUBTasBh5SMEUV4ZWN1dG9yLl9faW5pdF9flGpWMQEATbABTbEBh5SMDkV4ZWN1dG9yLnN0YXJ0lGpWMQEATbMBTbQBh5SMGUV4ZWN1dG9yLmF3YWl0X2NvbXBsZXRpb26UalYxAQBNtgFNtwGHlIwRRXhlY3V0b3Iuc2h1dGRvd26UalYxAQBNuQFNugGHlIwIRXhlY3V0b3KUal0xAQBNrgFNugGHlIwpX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX19pbml0X1+UalYxAQBNwgFN1AGHlIwmX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3Iuc3RhcnSUalYxAQBN1gFN4QGHlIwxX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuYXdhaXRfY29tcGxldGlvbpRqVjEBAE3jAU3rAYeUjDFfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5yZXF1ZXN0X3NodXRkb3dulGpWMQEATe0BTe4Bh5SMM19FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLnNjaGVkdWxlX2NvbnN1bWVyc5RqVjEBAE3wAU34AYeUjDxfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5zY2hlZHVsZV91bnByb2Nlc3NlZF9idW5kbGWUalYxAQBN+gFN+wGHlIw1X0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3Iuc2NoZWR1bGVfY29uc3VtcHRpb26UalYxAQBN/QFNFgKHlIw7X0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX1R5cGVkVXBkYXRlUXVldWUuX19pbml0X1+UalYxAQBNGgJNHAKHlIw3X0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX1R5cGVkVXBkYXRlUXVldWUucG9sbJRqVjEBAE0eAk0kAoeUjDdfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVHlwZWRVcGRhdGVRdWV1ZS50YWtllGpWMQEATSYCTTECh5SMOF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9UeXBlZFVwZGF0ZVF1ZXVlLm9mZmVylGpWMQEATTMCTTUCh5SMMl9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9UeXBlZFVwZGF0ZVF1ZXVllGpdMQEATRgCTTUCh5SMOV9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9FeGVjdXRvclVwZGF0ZS5fX2luaXRfX5RqVjEBAE05Ak1KAoeUjDBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fRXhlY3V0b3JVcGRhdGWUal0xAQBNNwJNSgKHlIxAX0V4ZWN1dG9yU2VydmljZVBhcmFsbGVsRXhlY3V0b3IuX1Zpc2libGVFeGVjdXRvclVwZGF0ZS5fX2luaXRfX5RqVjEBAE1SAk1VAoeUjDdfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fVmlzaWJsZUV4ZWN1dG9yVXBkYXRllGpdMQEATUwCTVUCh5SMNl9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzay5fX2luaXRfX5RqVjEBAE1ZAk1bAoeUjDJfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2submFtZZSVCioBAAAAAABqVjEBAE1dAk1fAoeUjDJfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2suY2FsbJRqVjEBAE1hAk19AoeUjD5fRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2suX3Nob3VsZF9zaHV0ZG93bpRqVjEBAE1/Ak2mAoeUjDpfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvci5fTW9uaXRvclRhc2suX2ZpcmVfdGltZXJzlGpWMQEATagCTb8Ch5SMO19FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzay5faXNfZXhlY3V0aW5nlGpWMQEATcECTdICh5SMRF9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFzay5fYWRkX3dvcmtfaWZfbmVjZXNzYXJ5lGpWMQEATdQCTfMCh5SMLV9FeGVjdXRvclNlcnZpY2VQYXJhbGxlbEV4ZWN1dG9yLl9Nb25pdG9yVGFza5RqXTEBAE1XAk3zAoeUjCBfRXhlY3V0b3JTZXJ2aWNlUGFyYWxsZWxFeGVjdXRvcpRqXTEBAE29AU3zAoeUdX2UKIwRVHJhbnNmb3JtRXhlY3V0b3KUaowDAACMFlRyYW5zZm9ybUV4ZWN1dG9yLmNhbGyUaowDAACMHlRyYW5zZm9ybUV4ZWN1dG9yLmF0dGVtcHRfY2FsbJRqjAMAAIwIRXhlY3V0b3KUaowDAACMDkV4ZWN1dG9yLnN0YXJ0lGqMAwAAjBlFeGVjdXRvci5hd2FpdF9jb21wbGV0aW9ulGqMAwAAjBFFeGVjdXRvci5zaHV0ZG93bpRqjAMAAHWMI2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV4ZWN1dG9ylHSUjCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtc5QoWGMPAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGl0ZXJ0b29scwppbXBvcnQgdHlwaW5nCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbC51dGlsIGltcG9ydCBBcmd1bWVudFBsYWNlaG9sZGVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMgaW1wb3J0IF9DdXJyaWVkRm4KZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKCmNsYXNzIExpZnRlZENvbWJpbmVQZXJLZXkoYmVhbS5QVHJhbnNmb3JtKToKICAiIiJBbiBpbXBsZW1lbnRhdGlvbiBvZiBDb21iaW5lUGVyS2V5IHRoYXQgZG9lcyBtYXBwZXItc2lkZSBwcmUtY29tYmluaW5nLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21iaW5lX2ZuLCBhcmdzLCBrd2FyZ3MpOgogICAgYXJnc190b19jaGVjayA9IGl0ZXJ0b29scy5jaGFpbihhcmdzLCBrd2FyZ3MudmFsdWVzKCkpCiAgICBpZiBpc2luc3RhbmNlKGNvbWJpbmVfZm4sIF9DdXJyaWVkRm4pOgogICAgICBhcmdzX3RvX2NoZWNrID0gaXRlcnRvb2xzLmNoYWluKAogICAgICAgICAgYXJnc190b19jaGVjaywgY29tYmluZV9mbi5hcmdzLCBjb21iaW5lX2ZuLmt3YXJncy52YWx1ZXMoKSkKICAgIGlmIGFueShpc2luc3RhbmNlKGFyZywgQXJndW1lbnRQbGFjZWhvbGRlcikgZm9yIGFyZyBpbiBhcmdzX3RvX2NoZWNrKToKICAgICAgIyBUaGlzIGlzbid0IGltcGxlbWVudGVkIGluIGRhdGFmbG93IGVpdGhlci4uLgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdEZWZlcnJlZCBDb21iaW5lRm4gc2lkZSBpbnB1dHMuJykKICAgIHNlbGYuX2NvbWJpbmVfZm4gPSBiZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzLmN1cnJ5X2NvbWJpbmVfZm4oCiAgICAgICAgY29tYmluZV9mbiwgYXJncywga3dhcmdzKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHJldHVybiAoCiAgICAgICAgcGNvbGwKICAgICAgICB8IGJlYW0uUGFyRG8oUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMoc2VsZi5fY29tYmluZV9mbikpCiAgICAgICAgfCBiZWFtLkdyb3VwQnlLZXkoKQogICAgICAgIHwgYmVhbS5QYXJEbyhGaW5pc2hDb21iaW5lKHNlbGYuX2NvbWJpbmVfZm4pKSkKCgpjbGFzcyBQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcyhiZWFtLkRvRm4pOgogICIiIkFnZ3JlZ2F0ZXMgdmFsdWVzIGludG8gYSBwZXIta2V5LXdpbmRvdyBjYWNoZS4KCiAgQXMgYnVuZGxlcyBhcmUgaW4tbWVtb3J5LXNpemVkLCB3ZSBkb24ndCBib3RoZXIgZmx1c2hpbmcgdW50aWwgdGhlIHZlcnkgZW5kLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21iaW5lX2ZuKToKICAgIHNlbGYuX2NvbWJpbmVfZm4gPSBjb21iaW5lX2ZuCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLl9jYWNoZSA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KHNlbGYuX2NvbWJpbmVfZm4uY3JlYXRlX2FjY3VtdWxhdG9yKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB3aW5kb3c9YmVhbS5Eb0ZuLldpbmRvd1BhcmFtKToKICAgIGssIHZpID0gZWxlbWVudAogICAgc2VsZi5fY2FjaGVbaywgd2luZG93XSA9IHNlbGYuX2NvbWJpbmVfZm4uYWRkX2lucHV0KAogICAgICAgIHNlbGYuX2NhY2hlW2ssIHdpbmRvd10sIHZpKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIGZvciAoaywgdyksIHZhIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CiAgICAgICMgV2UgY29tcGFjdCB0aGUgYWNjdW11bGF0b3Igc2luY2UgYSBHQksgKHdoaWNoIG5lY2Vzc2l0YXRlcyBlbmNvZGluZykKICAgICAgIyB3aWxsIGZvbGxvdy4KICAgICAgeWllbGQgV2luZG93ZWRWYWx1ZSgoaywgc2VsZi5fY29tYmluZV9mbi5jb21wYWN0KHZhKSksIHcuZW5kLCAodywgKSkKCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIGhpbnRzID0gc2VsZi5fY29tYmluZV9mbi5nZXRfdHlwZV9oaW50cygpCiAgICBLID0gdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSgnSycpCiAgICBpZiBoaW50cy5pbnB1dF90eXBlczoKICAgICAgYXJncywga3dhcmdzID0gaGludHMuaW5wdXRfdHlwZXMKICAgICAgYXJncyA9ICh0eXBlaGludHMuVHVwbGVbSywgYXJnc1swXV0sICkgKyBhcmdzWzE6XQogICAgICBoaW50cyA9IGhpbnRzLndpdGhfaW5wdXRfdHlwZXMoKmFyZ3MsICoqa3dhcmdzKQogICAgZWxzZToKICAgICAgaGludHMgPSBoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGVoaW50cy5UdXBsZVtLLCB0eXBpbmcuQW55XSkKICAgIGhpbnRzID0gaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLlR1cGxlW0ssIHR5cGluZy5BbnldKQogICAgcmV0dXJuIGhpbnRzCgoKY2xhc3MgRmluaXNoQ29tYmluZShiZWFtLkRvRm4pOgogICIiIk1lcmdlcyBwYXJ0aWFsbHkgY29tYmluZWQgcmVzdWx0cy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgY29tYmluZV9mbik6CiAgICBzZWxmLl9jb21iaW5lX2ZuID0gY29tYmluZV9mbgoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIGssIHZzID0gZWxlbWVudAogICAgcmV0dXJuIFsoCiAgICAgICAgaywKICAgICAgICBzZWxmLl9jb21iaW5lX2ZuLmV4dHJhY3Rfb3V0cHV0KAogICAgICAgICAgICBzZWxmLl9jb21iaW5lX2ZuLm1lcmdlX2FjY3VtdWxhdG9ycyh2cykpKV0KCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIGhpbnRzID0gc2VsZi5fY29tYmluZV9mbi5nZXRfdHlwZV9oaW50cygpCiAgICBLID0gdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSgnSycpCiAgICBoaW50cyA9IGhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZWhpbnRzLlR1cGxlW0ssIHR5cGluZy5BbnldKQogICAgaWYgaGludHMub3V0cHV0X3R5cGVzOgogICAgICBtYWluX291dHB1dF90eXBlID0gaGludHMuc2ltcGxlX291dHB1dF90eXBlKCcnKQogICAgICBoaW50cyA9IGhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5UdXBsZVtLLCBtYWluX291dHB1dF90eXBlXSkKICAgIHJldHVybiBoaW50cwqUfZQojBxMaWZ0ZWRDb21iaW5lUGVyS2V5Ll9faW5pdF9flGpWMQEASyRLLYeUjBpMaWZ0ZWRDb21iaW5lUGVyS2V5LmV4cGFuZJRqVjEBAEsvSzSHlIwTTGlmdGVkQ29tYmluZVBlcktleZRqXTEBAEshSzSHlIwpUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuX19pbml0X1+UalYxAQBLPEs9h5SMLVBhcnRpYWxHcm91cEJ5S2V5Q29tYmluaW5nVmFsdWVzLnN0YXJ0X2J1bmRsZZRqVjEBAEs/S0CHlIwoUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMucHJvY2Vzc5RqVjEBAEtCS0WHlIwuUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuZmluaXNoX2J1bmRsZZRqVjEBAEtHS0uHlIwzUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuZGVmYXVsdF90eXBlX2hpbnRzlGpWMQEAS01LV4eUjCBQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlc5RqXTEBAEs3S1eHlIwWRmluaXNoQ29tYmluZS5fX2luaXRfX5RqVjEBAEtdS16HlIwVRmluaXNoQ29tYmluZS5wcm9jZXNzlGpWMQEAS2BLZYeUjCBGaW5pc2hDb21iaW5lLmRlZmF1bHRfdHlwZV9oaW50c5RqVjEBAEtnS26HlIwNRmluaXNoQ29tYmluZZRqXTEBAEtaS26HlHV9lCiME0xpZnRlZENvbWJpbmVQZXJLZXmUal0DAACMGkxpZnRlZENvbWJpbmVQZXJLZXkuZXhwYW5klGpdAwAAjCBQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlc5RqXQMAAIwtUGFydGlhbEdyb3VwQnlLZXlDb21iaW5pbmdWYWx1ZXMuc3RhcnRfYnVuZGxllGpdAwAAjChQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5wcm9jZXNzlGpdAwAAjC5QYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5maW5pc2hfYnVuZGxllGpdAwAAjDNQYXJ0aWFsR3JvdXBCeUtleUNvbWJpbmluZ1ZhbHVlcy5kZWZhdWx0X3R5cGVfaGludHOUal0DAACMDUZpbmlzaENvbWJpbmWUal0DAACMFUZpbmlzaENvbWJpbmUucHJvY2Vzc5RqXQMAAIwgRmluaXNoQ29tYmluZS5kZWZhdWx0X3R5cGVfaGludHOUal0DAAB1jCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5oZWxwZXJfdHJhbnNmb3Jtc5R0lIwsYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXKUKFhxTgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUaGlzIG1vZHVsZSBjb250YWlucyBTcGxpdHRhYmxlIERvRm4gbG9naWMgdGhhdCBpcyBzcGVjaWZpYyB0byBEaXJlY3RSdW5uZXIuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCB1dWlkCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHRocmVhZGluZyBpbXBvcnQgTG9jawpmcm9tIHRocmVhZGluZyBpbXBvcnQgVGltZXIKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgSXRlcmFibGUKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IFRpbWVEb21haW4KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCB0eXBlY29kZXJzCmZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZXN0cmljdGlvblRyYWNrZXIKZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUFRyYW5zZm9ybU92ZXJyaWRlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5Db250ZXh0CmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5JbnZva2VyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5TaWduYXR1cmUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgT3V0cHV0UHJvY2Vzc29yCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QuZXZhbHVhdGlvbl9jb250ZXh0IGltcG9ydCBEaXJlY3RTdGVwQ29udGV4dApmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwgaW1wb3J0IEtleWVkV29ya0l0ZW0KZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC53YXRlcm1hcmtfbWFuYWdlciBpbXBvcnQgV2F0ZXJtYXJrTWFuYWdlcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzIGltcG9ydCBOb09wV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFBhckRvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBQcm9jZXNzQ29udGludWF0aW9uCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBfVmFsdWVTdGF0ZVRhZwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLndpbmRvd2VkX3ZhbHVlIGltcG9ydCBXaW5kb3dlZFZhbHVlCgoKY2xhc3MgU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGUoUFRyYW5zZm9ybU92ZXJyaWRlKToKICAiIiJBIHRyYW5zZm9ybSBvdmVycmlkZSBmb3IgUGFyRG8gdHJhbnNmb3Jtc3Mgb2YgU3BsaXR0YWJsZURvRm5zLgoKICBSZXBsYWNlcyB0aGUgUGFyRG8gdHJhbnNmb3JtIHdpdGggYSBTcGxpdHRhYmxlUGFyRG8gdHJhbnNmb3JtIHRoYXQgcGVyZm9ybXMKICBTREYgc3BlY2lmaWMgbG9naWMuCiAgIiIiCiAgZGVmIG1hdGNoZXMoc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtKToKICAgIGFzc2VydCBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybSwgQXBwbGllZFBUcmFuc2Zvcm0pCiAgICB0cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybSwgUGFyRG8pOgogICAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKHRyYW5zZm9ybS5mbikKICAgICAgcmV0dXJuIHNpZ25hdHVyZS5pc19zcGxpdHRhYmxlX2RvZm4oKQoKICBkZWYgZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybShzZWxmLCBwdHJhbnNmb3JtKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHB0cmFuc2Zvcm0sIFBhckRvKQogICAgZG9fZm4gPSBwdHJhbnNmb3JtLmZuCiAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKGRvX2ZuKQogICAgaWYgc2lnbmF0dXJlLmlzX3NwbGl0dGFibGVfZG9mbigpOgogICAgICByZXR1cm4gU3BsaXR0YWJsZVBhckRvKHB0cmFuc2Zvcm0pCiAgICBlbHNlOgogICAgICByZXR1cm4gcHRyYW5zZm9ybQoKCmNsYXNzIFNwbGl0dGFibGVQYXJEbyhQVHJhbnNmb3JtKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IHByb2Nlc3NlcyBhIFBDb2xsZWN0aW9uIHVzaW5nIGEgU3BsaXR0YWJsZSBEb0ZuLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwdHJhbnNmb3JtKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHB0cmFuc2Zvcm0sIFBhckRvKQogICAgc2VsZi5fcHRyYW5zZm9ybSA9IHB0cmFuc2Zvcm0KCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBzZGYgPSBzZWxmLl9wdHJhbnNmb3JtLmZuCiAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKHNkZikKICAgIHJlc3RyaWN0aW9uX2NvZGVyID0gc2lnbmF0dXJlLmdldF9yZXN0cmljdGlvbl9jb2RlcigpCiAgICBlbGVtZW50X2NvZGVyID0gdHlwZWNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIocGNvbGwuZWxlbWVudF90eXBlKQoKICAgIGtleWVkX2VsZW1lbnRzID0gKAogICAgICAgIHBjb2xsCiAgICAgICAgfCAncGFpcicgPj4gUGFyRG8oUGFpcldpdGhSZXN0cmljdGlvbkZuKHNkZikpCiAgICAgICAgfCAnc3BsaXQnID4+IFBhckRvKFNwbGl0UmVzdHJpY3Rpb25GbihzZGYpKQogICAgICAgIHwgJ2V4cGxvZGUnID4+IFBhckRvKEV4cGxvZGVXaW5kb3dzRm4oKSkKICAgICAgICB8ICdyYW5kb20nID4+IFBhckRvKFJhbmRvbVVuaXF1ZUtleUZuKCkpKQoKICAgIHJldHVybiBrZXllZF9lbGVtZW50cyB8IFByb2Nlc3NLZXllZEVsZW1lbnRzKAogICAgICAgIHNkZiwKICAgICAgICBlbGVtZW50X2NvZGVyLAogICAgICAgIHJlc3RyaWN0aW9uX2NvZGVyLAogICAgICAgIHBjb2xsLndpbmRvd2luZywKICAgICAgICBzZWxmLl9wdHJhbnNmb3JtLmFyZ3MsCiAgICAgICAgc2VsZi5fcHRyYW5zZm9ybS5rd2FyZ3MsCiAgICAgICAgc2VsZi5fcHRyYW5zZm9ybS5zaWRlX2lucHV0cykKCgpjbGFzcyBFbGVtZW50QW5kUmVzdHJpY3Rpb24ob2JqZWN0KToKICAiIiJBIGhvbGRlciBmb3IgYW4gZWxlbWVudCBhbmQgYSByZXN0cmljdGlvbi4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgc2VsZi5lbGVtZW50ID0gZWxlbWVudAogICAgc2VsZi5yZXN0cmljdGlvbiA9IHJlc3RyaWN0aW9uCgoKY2xhc3MgUGFpcldpdGhSZXN0cmljdGlvbkZuKGJlYW0uRG9Gbik6CiAgIiIiQSB0cmFuc2Zvcm0gdGhhdCBwYWlycyBlYWNoIGVsZW1lbnQgd2l0aCBhIHJlc3RyaWN0aW9uLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkb19mbik6CiAgICBzZWxmLl9kb19mbiA9IGRvX2ZuCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKHNlbGYuX2RvX2ZuKQogICAgc2VsZi5faW52b2tlciA9IERvRm5JbnZva2VyLmNyZWF0ZV9pbnZva2VyKAogICAgICAgIHNpZ25hdHVyZSwKICAgICAgICBvdXRwdXRfcHJvY2Vzc29yPV9Ob25lU2hhbGxQYXNzT3V0cHV0UHJvY2Vzc29yKCksCiAgICAgICAgcHJvY2Vzc19pbnZvY2F0aW9uPUZhbHNlKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB3aW5kb3c9YmVhbS5Eb0ZuLldpbmRvd1BhcmFtLCAqYXJncywgKiprd2FyZ3MpOgogICAgaW5pdGlhbF9yZXN0cmljdGlvbiA9IHNlbGYuX2ludm9rZXIuaW52b2tlX2luaXRpYWxfcmVzdHJpY3Rpb24oZWxlbWVudCkKICAgIHlpZWxkIEVsZW1lbnRBbmRSZXN0cmljdGlvbihlbGVtZW50LCBpbml0aWFsX3Jlc3RyaWN0aW9uKQoKCmNsYXNzIFNwbGl0UmVzdHJpY3Rpb25GbihiZWFtLkRvRm4pOgogICIiIkEgdHJhbnNmb3JtIHRoYXQgcGVyZm9ybSBpbml0aWFsIHNwbGl0dGluZyBvZiBTcGxpdHRhYmxlIERvRm4gaW5wdXRzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkb19mbik6CiAgICBzZWxmLl9kb19mbiA9IGRvX2ZuCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzaWduYXR1cmUgPSBEb0ZuU2lnbmF0dXJlKHNlbGYuX2RvX2ZuKQogICAgc2VsZi5faW52b2tlciA9IERvRm5JbnZva2VyLmNyZWF0ZV9pbnZva2VyKAogICAgICAgIHNpZ25hdHVyZSwKICAgICAgICBvdXRwdXRfcHJvY2Vzc29yPV9Ob25lU2hhbGxQYXNzT3V0cHV0UHJvY2Vzc29yKCksCiAgICAgICAgcHJvY2Vzc19pbnZvY2F0aW9uPUZhbHNlKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50X2FuZF9yZXN0cmljdGlvbiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGVsZW1lbnQgPSBlbGVtZW50X2FuZF9yZXN0cmljdGlvbi5lbGVtZW50CiAgICByZXN0cmljdGlvbiA9IGVsZW1lbnRfYW5kX3Jlc3RyaWN0aW9uLnJlc3RyaWN0aW9uCiAgICByZXN0cmljdGlvbl9wYXJ0cyA9IHNlbGYuX2ludm9rZXIuaW52b2tlX3NwbGl0KGVsZW1lbnQsIHJlc3RyaWN0aW9uKQogICAgZm9yIHBhcnQgaW4gcmVzdHJpY3Rpb25fcGFydHM6CiAgICAgIHlpZWxkIEVsZW1lbnRBbmRSZXN0cmljdGlvbihlbGVtZW50LCBwYXJ0KQoKCmNsYXNzIEV4cGxvZGVXaW5kb3dzRm4oYmVhbS5Eb0ZuKToKICAiIiJBIHRyYW5zZm9ybSB0aGF0IGZvcmNlcyB0aGUgcnVubmVyIHRvIGV4cGxvZGUgd2luZG93cy4KCiAgVGhpcyBpcyBkb25lIHRvIG1ha2Ugc3VyZSB0aGF0IFNwbGl0dGFibGUgRG9GbiBwcm9jZXNlcyBhbiBlbGVtZW50IGZvciBlYWNoIG9mCiAgdGhlIHdpbmRvd3MgdGhhdCBlbGVtZW50IGJlbG9uZ3MgdG8uCiAgIiIiCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCwgd2luZG93PWJlYW0uRG9Gbi5XaW5kb3dQYXJhbSwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHlpZWxkIGVsZW1lbnQKCgpjbGFzcyBSYW5kb21VbmlxdWVLZXlGbihiZWFtLkRvRm4pOgogICIiIkEgdHJhbnNmb3JtIHRoYXQgYXNzaWducyBhIHVuaXF1ZSBrZXkgdG8gZWFjaCBlbGVtZW50LiIiIgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsIHdpbmRvdz1iZWFtLkRvRm4uV2luZG93UGFyYW0sICphcmdzLCAqKmt3YXJncyk6CiAgICAjIFdlIGlnbm9yZSBVVUlEIGNvbGxpc2lvbnMgaGVyZSBzaW5jZSB0aGV5IGFyZSBleHRyZW1lbHkgcmFyZS4KICAgIHlpZWxkICh1dWlkLnV1aWQ0KCkuYnl0ZXMsIGVsZW1lbnQpCgoKY2xhc3MgUHJvY2Vzc0tleWVkRWxlbWVudHMoUFRyYW5zZm9ybSk6CiAgIiIiQSBwcmltaXRpdmUgdHJhbnNmb3JtIHRoYXQgcGVyZm9ybXMgU3BsaXR0YWJsZURvRm4gbWFnaWMuCgogIElucHV0IHRvIHRoaXMgdHJhbnNmb3JtIHNob3VsZCBiZSBhIFBDb2xsZWN0aW9uIG9mIGtleWVkIEVsZW1lbnRBbmRSZXN0cmljdGlvbgogIG9iamVjdHMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBzZGYsCiAgICAgIGVsZW1lbnRfY29kZXIsCiAgICAgIHJlc3RyaWN0aW9uX2NvZGVyLAogICAgICB3aW5kb3dpbmdfc3RyYXRlZ3ksCiAgICAgIHB0cmFuc2Zvcm1fYXJncywKICAgICAgcHRyYW5zZm9ybV9rd2FyZ3MsCiAgICAgIHB0cmFuc2Zvcm1fc2lkZV9pbnB1dHMpOgogICAgc2VsZi5zZGYgPSBzZGYKICAgIHNlbGYuZWxlbWVudF9jb2RlciA9IGVsZW1lbnRfY29kZXIKICAgIHNlbGYucmVzdHJpY3Rpb25fY29kZXIgPSByZXN0cmljdGlvbl9jb2RlcgogICAgc2VsZi53aW5kb3dpbmdfc3RyYXRlZ3kgPSB3aW5kb3dpbmdfc3RyYXRlZ3kKICAgIHNlbGYucHRyYW5zZm9ybV9hcmdzID0gcHRyYW5zZm9ybV9hcmdzCiAgICBzZWxmLnB0cmFuc2Zvcm1fa3dhcmdzID0gcHRyYW5zZm9ybV9rd2FyZ3MKICAgIHNlbGYucHRyYW5zZm9ybV9zaWRlX2lucHV0cyA9IHB0cmFuc2Zvcm1fc2lkZV9pbnB1dHMKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uLmZyb21fKHBjb2xsKQoKCmNsYXNzIFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZShQVHJhbnNmb3JtT3ZlcnJpZGUpOgogICIiIkEgdHJhbnNmb3JtIG92ZXJyaWRlIGZvciBQcm9jZXNzRWxlbWVudHMgdHJhbnNmb3JtLiIiIgogIGRlZiBtYXRjaGVzKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICByZXR1cm4gaXNpbnN0YW5jZShhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLCBQcm9jZXNzS2V5ZWRFbGVtZW50cykKCiAgZGVmIGdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm0oc2VsZiwgcHRyYW5zZm9ybSk6CiAgICByZXR1cm4gUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtcyhwdHJhbnNmb3JtKQoKCmNsYXNzIFByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXMoUFRyYW5zZm9ybSk6CiAgIiIiQSB0cmFuc2Zvcm0gdGhhdCBwcm9jZXNzZXMgU3BsaXR0YWJsZSBEb0ZuIGlucHV0IHZpYSBLZXllZFdvcmtJdGVtcy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0pOgogICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0gPSBwcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHByb2Nlc3NfZWxlbWVudHMgPSBQcm9jZXNzRWxlbWVudHMoc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0pCiAgICBwcm9jZXNzX2VsZW1lbnRzLmFyZ3MgPSAoCiAgICAgICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0ucHRyYW5zZm9ybV9hcmdzKQogICAgcHJvY2Vzc19lbGVtZW50cy5rd2FyZ3MgPSAoCiAgICAgICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0ucHRyYW5zZm9ybV9rd2FyZ3MpCiAgICBwcm9jZXNzX2VsZW1lbnRzLnNpZGVfaW5wdXRzID0gKAogICAgICAgIHNlbGYuX3Byb2Nlc3Nfa2V5ZWRfZWxlbWVudHNfdHJhbnNmb3JtLnB0cmFuc2Zvcm1fc2lkZV9pbnB1dHMpCiAgICByZXR1cm4gcGNvbGwgfCBiZWFtLmNvcmUuR3JvdXBCeUtleSgpIHwgcHJvY2Vzc19lbGVtZW50cwoKCmNsYXNzIFByb2Nlc3NFbGVtZW50cyhQVHJhbnNmb3JtKToKICAiIiJBIHByaW1pdGl2ZSB0cmFuc2Zvcm0gZm9yIHByb2Nlc3Npbmcga2V5ZWQgZWxlbWVudHMgb3IgS2V5ZWRXb3JrSXRlbXMuCgogIFdpbGwgYmUgZXZhbHVhdGVkIGJ5CiAgYHJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3IuX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvcmAuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfa2V5ZWRfZWxlbWVudHNfdHJhbnNmb3JtKToKICAgIHNlbGYuX3Byb2Nlc3Nfa2V5ZWRfZWxlbWVudHNfdHJhbnNmb3JtID0gcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0KICAgIHNlbGYuc2RmID0gc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0uc2RmCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbi5mcm9tXyhwY29sbCkKCiAgZGVmIG5ld19wcm9jZXNzX2ZuKHNlbGYsIHNkZik6CiAgICByZXR1cm4gUHJvY2Vzc0ZuKAogICAgICAgIHNkZiwKICAgICAgICBzZWxmLl9wcm9jZXNzX2tleWVkX2VsZW1lbnRzX3RyYW5zZm9ybS5wdHJhbnNmb3JtX2FyZ3MsCiAgICAgICAgc2VsZi5fcHJvY2Vzc19rZXllZF9lbGVtZW50c190cmFuc2Zvcm0ucHRyYW5zZm9ybV9rd2FyZ3MpCgoKY2xhc3MgUHJvY2Vzc0ZuKGJlYW0uRG9Gbik6CiAgIiIiQSBgRG9GbmAgdGhhdCBleGVjdXRlcyBtYWNoaW5lYXJ5IGZvciBpbnZva2luZyBhIFNwbGl0dGFibGUgYERvRm5gLgoKICBJbnB1dCB0byB0aGUgYFBhckRvYCBzdGVwIHRoYXQgaW5jbHVkZXMgYSBgUHJvY2Vzc0ZuYCB3aWxsIGJlIGEgYFBDb2xsZWN0aW9uYAogIG9mIGBFbGVtZW50QW5kUmVzdHJpY3Rpb25gIG9iamVjdHMuCgogIFRoaXMgY2xhc3MgaXMgbWFpbmx5IHJlc3BvbnNpYmxlIGZvciBmb2xsb3dpbmcuCiAgKDEpIHNldHVwIGVudmlyb25tZW50IGZvciBwcm9wZXJseSBpbnZva2luZyBhIFNwbGl0dGFibGUgYERvRm5gLgogICgyKSBpbnZva2UgYHByb2Nlc3MoKWAgbWV0aG9kIG9mIGEgU3BsaXR0YWJsZSBgRG9GbmAuCiAgKDMpIGFmdGVyIHRoZSBgcHJvY2VzcygpYCBpbnZvY2F0aW9uIG9mIHRoZSBTcGxpdHRhYmxlIGBEb0ZuYCwgZGV0ZXJtaW5lIGlmIGEKICByZS1pbnZvY2F0aW9uIG9mIHRoZSBlbGVtZW50IGlzIG5lZWRlZC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgc2V0IHN0YXRlIGFuZAogIGEgdGltZXIgZm9yIGEgcmUtaW52b2NhdGlvbiBhbmQgaG9sZCBvdXRwdXQgd2F0ZXJtYXJrIHRpbGwgdGhpcwogIHJlLWludm9jYXRpb24uCiAgKDQpIGFmdGVyIHRoZSBmaW5hbCBpbnZvY2F0aW9uIG9mIGEgZ2l2ZW4gZWxlbWVudCBjbGVhciBhbnkgcHJldmlvdXMgc3RhdGUgc2V0CiAgZm9yIHJlLWludm9raW5nIHRoZSBlbGVtZW50IGFuZCByZWxlYXNlIHRoZSBvdXRwdXQgd2F0ZXJtYXJrLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBzZGYsIGFyZ3NfZm9yX2ludm9rZXIsIGt3YXJnc19mb3JfaW52b2tlcik6CiAgICBzZWxmLnNkZiA9IHNkZgogICAgc2VsZi5fZWxlbWVudF90YWcgPSBfVmFsdWVTdGF0ZVRhZygnZWxlbWVudCcpCiAgICBzZWxmLl9yZXN0cmljdGlvbl90YWcgPSBfVmFsdWVTdGF0ZVRhZygncmVzdHJpY3Rpb24nKQogICAgc2VsZi53YXRlcm1hcmtfaG9sZF90YWcgPSBfVmFsdWVTdGF0ZVRhZygnd2F0ZXJtYXJrX2hvbGQnKQogICAgc2VsZi5fcHJvY2Vzc19lbGVtZW50X2ludm9rZXIgPSBOb25lCiAgICBzZWxmLl9vdXRwdXRfcHJvY2Vzc29yID0gX091dHB1dFByb2Nlc3NvcigpCgogICAgc2VsZi5zZGZfaW52b2tlciA9IERvRm5JbnZva2VyLmNyZWF0ZV9pbnZva2VyKAogICAgICAgIERvRm5TaWduYXR1cmUoc2VsZi5zZGYpLAogICAgICAgIGNvbnRleHQ9RG9GbkNvbnRleHQoJ3VudXNlZF9jb250ZXh0JyksCiAgICAgICAgb3V0cHV0X3Byb2Nlc3Nvcj1zZWxmLl9vdXRwdXRfcHJvY2Vzc29yLAogICAgICAgIGlucHV0X2FyZ3M9YXJnc19mb3JfaW52b2tlciwKICAgICAgICBpbnB1dF9rd2FyZ3M9a3dhcmdzX2Zvcl9pbnZva2VyKQoKICAgIHNlbGYuX3N0ZXBfY29udGV4dCA9IE5vbmUKCiAgQHByb3BlcnR5CiAgZGVmIHN0ZXBfY29udGV4dChzZWxmKToKICAgIHJldHVybiBzZWxmLl9zdGVwX2NvbnRleHQKCiAgQHN0ZXBfY29udGV4dC5zZXR0ZXIKICBkZWYgc3RlcF9jb250ZXh0KHNlbGYsIHN0ZXBfY29udGV4dCk6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShzdGVwX2NvbnRleHQsIERpcmVjdFN0ZXBDb250ZXh0KQogICAgc2VsZi5fc3RlcF9jb250ZXh0ID0gc3RlcF9jb250ZXh0CgogIGRlZiBzZXRfcHJvY2Vzc19lbGVtZW50X2ludm9rZXIoc2VsZiwgcHJvY2Vzc19lbGVtZW50X2ludm9rZXIpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvY2Vzc19lbGVtZW50X2ludm9rZXIsIFNERlByb2Nlc3NFbGVtZW50SW52b2tlcikKICAgIHNlbGYuX3Byb2Nlc3NfZWxlbWVudF9pbnZva2VyID0gcHJvY2Vzc19lbGVtZW50X2ludm9rZXIKCiAgZGVmIHByb2Nlc3MoCiAgICAgIHNlbGYsCiAgICAgIGVsZW1lbnQsCiAgICAgIHRpbWVzdGFtcD1iZWFtLkRvRm4uVGltZXN0YW1wUGFyYW0sCiAgICAgIHdpbmRvdz1iZWFtLkRvRm4uV2luZG93UGFyYW0sCiAgICAgICphcmdzLAogICAgICAqKmt3YXJncyk6CiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIEtleWVkV29ya0l0ZW0pOgogICAgICAjIE11c3QgYmUgYSB0aW1lciBmaXJpbmcuCiAgICAgIGtleSA9IGVsZW1lbnQuZW5jb2RlZF9rZXkKICAgIGVsc2U6CiAgICAgIGtleSwgdmFsdWVzID0gZWxlbWVudAogICAgICB2YWx1ZXMgPSBsaXN0KHZhbHVlcykKICAgICAgYXNzZXJ0IGxlbih2YWx1ZXMpID09IDEKICAgICAgIyBWYWx1ZSBoZXJlIHdpbGwgZWl0aGVyIGJlIGEgV2luZG93ZWRWYWx1ZSBvciBhbiBFbGVtZW50QW5kUmVzdHJpY3Rpb24KICAgICAgIyBvYmplY3QuCiAgICAgICMgVE9ETzogaGFuZGxlIGtleSBjb2xsaXNpb25zIGhlcmUuCiAgICAgIGFzc2VydCBsZW4odmFsdWVzKSA9PSAxLCAnSW50ZXJuYWwgZXJyb3IuIFByb2Nlc3Npbmcgb2Ygc3BsaXR0YWJsZSAnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEb0ZuIGNhbm5vdCBjb250aW51ZSBzaW5jZSBlbGVtZW50cyBkaWQgbm90ICcgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhdmUgdW5pcXVlIGtleXMuJwogICAgICB2YWx1ZSA9IHZhbHVlc1swXQogICAgICBpZiBsZW4odmFsdWVzKSAhPSAxOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJycpCgogICAgc3RhdGUgPSBzZWxmLl9zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKGtleSkKICAgIGVsZW1lbnRfc3RhdGUgPSBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLl9lbGVtZW50X3RhZykKICAgICMgSW5pdGlhbGx5IGVsZW1lbnRfc3RhdGUgaXMgYW4gZW1wdHkgbGlzdC4KICAgIGlzX3NlZWRfY2FsbCA9IG5vdCBlbGVtZW50X3N0YXRlCgogICAgaWYgbm90IGlzX3NlZWRfY2FsbDoKICAgICAgZWxlbWVudCA9IHN0YXRlLmdldF9zdGF0ZSh3aW5kb3csIHNlbGYuX2VsZW1lbnRfdGFnKQogICAgICByZXN0cmljdGlvbiA9IHN0YXRlLmdldF9zdGF0ZSh3aW5kb3csIHNlbGYuX3Jlc3RyaWN0aW9uX3RhZykKICAgICAgd2luZG93ZWRfZWxlbWVudCA9IFdpbmRvd2VkVmFsdWUoZWxlbWVudCwgdGltZXN0YW1wLCBbd2luZG93XSkKICAgIGVsc2U6CiAgICAgICMgQWZ0ZXIgdmFsdWVzIGl0ZXJhdG9yIGlzIGV4cGFuZGVkIGFib3ZlIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhIGxpc3QKICAgICAgIyB3aXRoIGEgc2luZ2xlIEVsZW1lbnRBbmRSZXN0cmljdGlvbiBvYmplY3QuCiAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlLCBFbGVtZW50QW5kUmVzdHJpY3Rpb24pCiAgICAgIGVsZW1lbnRfYW5kX3Jlc3RyaWN0aW9uID0gdmFsdWUKICAgICAgZWxlbWVudCA9IGVsZW1lbnRfYW5kX3Jlc3RyaWN0aW9uLmVsZW1lbnQKICAgICAgcmVzdHJpY3Rpb24gPSBlbGVtZW50X2FuZF9yZXN0cmljdGlvbi5yZXN0cmljdGlvbgoKICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgV2luZG93ZWRWYWx1ZSk6CiAgICAgICAgd2luZG93ZWRfZWxlbWVudCA9IFdpbmRvd2VkVmFsdWUoCiAgICAgICAgICAgIGVsZW1lbnQsIHZhbHVlLnRpbWVzdGFtcCwgdmFsdWUud2luZG93cykKICAgICAgZWxzZToKICAgICAgICB3aW5kb3dlZF9lbGVtZW50ID0gV2luZG93ZWRWYWx1ZShlbGVtZW50LCB0aW1lc3RhbXAsIFt3aW5kb3ddKQoKICAgIHRyYWNrZXIgPSBzZWxmLnNkZl9pbnZva2VyLmludm9rZV9jcmVhdGVfdHJhY2tlcihyZXN0cmljdGlvbikKICAgIGFzc2VydCBzZWxmLl9wcm9jZXNzX2VsZW1lbnRfaW52b2tlcgogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5fcHJvY2Vzc19lbGVtZW50X2ludm9rZXIsIFNERlByb2Nlc3NFbGVtZW50SW52b2tlcikKCiAgICBvdXRwdXRfdmFsdWVzID0gc2VsZi5fcHJvY2Vzc19lbGVtZW50X2ludm9rZXIuaW52b2tlX3Byb2Nlc3NfZWxlbWVudCgKICAgICAgICBzZWxmLnNkZl9pbnZva2VyLAogICAgICAgIHNlbGYuX291dHB1dF9wcm9jZXNzb3IsCiAgICAgICAgd2luZG93ZWRfZWxlbWVudCwKICAgICAgICB0cmFja2VyLAogICAgICAgICphcmdzLAogICAgICAgICoqa3dhcmdzKQoKICAgIHNkZl9yZXN1bHQgPSBOb25lCiAgICBmb3Igb3V0cHV0IGluIG91dHB1dF92YWx1ZXM6CiAgICAgIGlmIGlzaW5zdGFuY2Uob3V0cHV0LCBTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0KToKICAgICAgICAjIFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHQgc2hvdWxkIGJlIHRoZSBsYXN0IGl0ZW0geWllbGRlZC4KICAgICAgICBzZGZfcmVzdWx0ID0gb3V0cHV0CiAgICAgICAgYnJlYWsKICAgICAgeWllbGQgb3V0cHV0CgogICAgYXNzZXJ0IHNkZl9yZXN1bHQsICgnU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyIG11c3QgcmV0dXJuIGEgJwogICAgICAgICAgICAgICAgICAgICAgICAnU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdCBvYmplY3QgYXMgdGhlIGxhc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUgb2YgYSBTREYgaW52b2tlX3Byb2Nlc3NfZWxlbWVudCgpIGludm9jYXRpb24uJykKCiAgICBpZiBub3Qgc2RmX3Jlc3VsdC5yZXNpZHVhbF9yZXN0cmljdGlvbjoKICAgICAgIyBBbGwgd29yayBmb3IgY3VycmVudCByZXNpZHVhbCBhbmQgcmVzdHJpY3Rpb24gcGFpciBpcyBjb21wbGV0ZS4KICAgICAgc3RhdGUuY2xlYXJfc3RhdGUod2luZG93LCBzZWxmLl9lbGVtZW50X3RhZykKICAgICAgc3RhdGUuY2xlYXJfc3RhdGUod2luZG93LCBzZWxmLl9yZXN0cmljdGlvbl90YWcpCiAgICAgICMgUmVsZWFzaW5nIG91dHB1dCB3YXRlcm1hcmsgYnkgc2V0dGluZyBpdCB0byBwb3NpdGl2ZSBpbmZpbml0eS4KICAgICAgc3RhdGUuYWRkX3N0YXRlKAogICAgICAgICAgd2luZG93LCBzZWxmLndhdGVybWFya19ob2xkX3RhZywgV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORikKICAgIGVsc2U6CiAgICAgIHN0YXRlLmFkZF9zdGF0ZSh3aW5kb3csIHNlbGYuX2VsZW1lbnRfdGFnLCBlbGVtZW50KQogICAgICBzdGF0ZS5hZGRfc3RhdGUoCiAgICAgICAgICB3aW5kb3csIHNlbGYuX3Jlc3RyaWN0aW9uX3RhZywgc2RmX3Jlc3VsdC5yZXNpZHVhbF9yZXN0cmljdGlvbikKICAgICAgIyBIb2xkaW5nIG91dHB1dCB3YXRlcm1hcmsgYnkgc2V0dGluZyBpdCB0byBuZWdhdGl2ZSBpbmZpbml0eS4KICAgICAgc3RhdGUuYWRkX3N0YXRlKAogICAgICAgICAgd2luZG93LCBzZWxmLndhdGVybWFya19ob2xkX3RhZywgV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfTkVHX0lORikKCiAgICAgICMgU2V0dGluZyBhIHRpbWVyIHRvIGJlIHJlaW52b2tlZCB0byBjb250aW51ZSBwcm9jZXNzaW5nIHRoZSBlbGVtZW50LgogICAgICAjIEN1cnJlbnRseSBQeXRob24gU0RLIG9ubHkgc3VwcG9ydHMgc2V0dGluZyB0aW1lcnMgYmFzZWQgb24gd2F0ZXJtYXJrLiBTbwogICAgICAjIGZvcmNpbmcgYSByZWludm9jYXRpb24gYnkgc2V0dGluZyBhIHRpbWVyIGZvciB3YXRlcm1hcmsgbmVnYXRpdmUKICAgICAgIyBpbmZpbml0eS4KICAgICAgIyBUT0RPKGNoYW1pa2FyYSk6IHVwZGF0ZSB0aGlzIGJ5IHNldHRpbmcgYSB0aW1lciBmb3IgdGhlIHByb3BlcgogICAgICAjIHByb2Nlc3NpbmcgdGltZSB3aGVuIFB5dGhvbiBTREsgc3VwcG9ydHMgdGhhdC4KICAgICAgc3RhdGUuc2V0X3RpbWVyKAogICAgICAgICAgd2luZG93LCAnJywgVGltZURvbWFpbi5XQVRFUk1BUkssIFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX05FR19JTkYpCgoKY2xhc3MgU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyKG9iamVjdCk6CiAgIiIiQSB1dGlsaXR5IHRoYXQgaW52b2tlcyBTREYgYHByb2Nlc3MoKWAgbWV0aG9kIGFuZCByZXF1ZXN0cyBjaGVja3BvaW50cy4KCiAgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgaW52b2tpbmcgdGhlIGBwcm9jZXNzKClgIG1ldGhvZCBvZiBhIFNwbGl0dGFibGUKICBgRG9GbmAgYW5kIG1ha2luZyBzdXJlIHRoYXQgaW52b2NhdGlvbiB0ZXJtaW5hdGVkIHByb3Blcmx5LiBCYXNlZCBvbiB0aGUgaW5wdXQKICBjb25maWd1cmF0aW9uLCB0aGlzIGNsYXNzIG1heSBkZWNpZGUgdG8gcmVxdWVzdCBhIGNoZWNrcG9pbnQgZm9yIGEgYHByb2Nlc3MoKWAKICBleGVjdXRpb24gc28gdGhhdCBydW5uZXIgY2FuIHByb2Nlc3MgY3VycmVudCBvdXRwdXQgYW5kIHJlc3VtZSB0aGUgaW52b2NhdGlvbgogIGF0IGEgbGF0ZXIgdGltZS4KCiAgTW9yZSBzcGVjaWZpY2FsbHksIHdoZW4gaW5pdGlhbGl6aW5nIGEgYFNERlByb2Nlc3NFbGVtZW50SW52b2tlcmAsIGNhbGxlciBtYXkKICBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzIG9yIHByb2Nlc3NpbmcgdGltZSBhZnRlciB3aGljaCBhCiAgY2hlY2twb2ludCBzaG91bGQgYmUgcmVxdWVzdGVkLiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBwcm9wZXJseQogIHJlcXVlc3RpbmcgYSBjaGVja3BvaW50IGJhc2VkIG9uIGVpdGhlciBvZiB0aGVzZSBjcml0ZXJpYS4KICBXaGVuIHRoZSBgcHJvY2VzcygpYCBjYWxsIG9mIFNwbGl0dGFibGUgYERvRm5gIGVuZHMsIHRoaXMgY2xhc3MgcGVyZm9ybXMKICB2YWxpZGF0aW9ucyB0byBtYWtlIHN1cmUgdGhhdCBwcm9jZXNzaW5nIGVuZGVkIGdyYWNlZnVsbHkgYW5kIHJldHVybnMgYQogIGBTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0YCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZSB1c2VkCiAgYnkgdGhlIGNhbGxlciB0byBwZXJmb3JtIGFub3RoZXIgYHByb2Nlc3MoKWAgaW52b2NhdGlvbiBmb3IgdGhlIHJlc2lkdWFsLgoKICBBIGBwcm9jZXNzKClgIGludm9jYXRpb24gbWF5IGRlY2lkZSB0byBnaXZlIHVwIHByb2Nlc3Npbmcgdm9sdW50YXJpbHkgYnkKICByZXR1cm5pbmcgYSBgUHJvY2Vzc0NvbnRpbnVhdGlvbmAgb2JqZWN0IChzZWUgZG9jdW1lbnRhdGlvbiBvZgogIGBQcm9jZXNzQ29udGludWF0aW9uYCBmb3IgbW9yZSBkZXRhaWxzKS4gU28gaWYgYSAnUHJvY2Vzc0NvbnRpbnVhdGlvbicgaXMKICBwcm9kdWNlZCB0aGlzIGNsYXNzIGVuZHMgdGhlIGV4ZWN1dGlvbiBhbmQgcGVyZm9ybXMgc3RlcHMgdG8gZmluYWxpemUgdGhlCiAgY3VycmVudCBpbnZvY2F0aW9uLgogICIiIgogIGNsYXNzIFJlc3VsdChvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKAogICAgICAgIHNlbGYsCiAgICAgICAgcmVzaWR1YWxfcmVzdHJpY3Rpb249Tm9uZSwKICAgICAgICBwcm9jZXNzX2NvbnRpbnVhdGlvbj1Ob25lLAogICAgICAgIGZ1dHVyZV9vdXRwdXRfd2F0ZXJtYXJrPU5vbmUpOgogICAgICAiIiJSZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBhIGBpbnZva2VfcHJvY2Vzc19lbGVtZW50KClgIGludm9jYXRpb24uCgogICAgICBBcmdzOgogICAgICAgIHJlc2lkdWFsX3Jlc3RyaWN0aW9uOiBhIHJlc3RyaWN0aW9uIGZvciB0aGUgdW5wcm9jZXNzZWQgcGFydCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LgogICAgICAgIHByb2Nlc3NfY29udGludWF0aW9uOiBhIGBQcm9jZXNzQ29udGludWF0aW9uYCBpZiBvbmUgd2FzIHJldHVybmVkIGFzIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IGVsZW1lbnQgb2YgdGhlIFNERiBgcHJvY2VzcygpYCBpbnZvY2F0aW9uLgogICAgICAgIGZ1dHVyZV9vdXRwdXRfd2F0ZXJtYXJrOiBvdXRwdXQgd2F0ZXJtYXJrIG9mIHRoZSByZXN1bHRzIHRoYXQgd2lsbCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWNlZCB3aGVuIGludm9raW5nIHRoZSBTcGxpdHRhYmxlIGBEb0ZuYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGN1cnJlbnQgZWxlbWVudCB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGByZXNpZHVhbF9yZXN0cmljdGlvbmAuCiAgICAgICIiIgoKICAgICAgc2VsZi5yZXNpZHVhbF9yZXN0cmljdGlvbiA9IHJlc2lkdWFsX3Jlc3RyaWN0aW9uCiAgICAgIHNlbGYucHJvY2Vzc19jb250aW51YXRpb24gPSBwcm9jZXNzX2NvbnRpbnVhdGlvbgogICAgICBzZWxmLmZ1dHVyZV9vdXRwdXRfd2F0ZXJtYXJrID0gZnV0dXJlX291dHB1dF93YXRlcm1hcmsKCiAgZGVmIF9faW5pdF9fKHNlbGYsIG1heF9udW1fb3V0cHV0cywgbWF4X2R1cmF0aW9uKToKICAgIHNlbGYuX21heF9udW1fb3V0cHV0cyA9IG1heF9udW1fb3V0cHV0cwogICAgc2VsZi5fbWF4X2R1cmF0aW9uID0gbWF4X2R1cmF0aW9uCiAgICBzZWxmLl9jaGVja3BvaW50X2xvY2sgPSBMb2NrKCkKCiAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgogICAgcmFpc2UgVmFsdWVFcnJvcgoKICBkZWYgaW52b2tlX3Byb2Nlc3NfZWxlbWVudCgKICAgICAgc2VsZiwgc2RmX2ludm9rZXIsIG91dHB1dF9wcm9jZXNzb3IsIGVsZW1lbnQsIHRyYWNrZXIsICphcmdzLCAqKmt3YXJncyk6CiAgICAiIiJJbnZva2VzIGBwcm9jZXNzKClgIG1ldGhvZCBvZiBhIFNwbGl0dGFibGUgYERvRm5gIGZvciBhIGdpdmVuIGVsZW1lbnQuCgogICAgIEFyZ3M6CiAgICAgICBzZGZfaW52b2tlcjogYSBgRG9Gbkludm9rZXJgIGZvciB0aGUgU3BsaXR0YWJsZSBgRG9GbmAuCiAgICAgICBlbGVtZW50OiB0aGUgZWxlbWVudCB0byBwcm9jZXNzCiAgICAgICB0cmFja2VyOiBhIGBSZXN0cmljdGlvblRyYWNrZXJgIGZvciB0aGUgZWxlbWVudCB0aGF0IHdpbGwgYmUgcGFzc2VkIHdoZW4KICAgICAgICAgICAgICAgIGludm9raW5nIHRoZSBgcHJvY2VzcygpYCBtZXRob2Qgb2YgdGhlIFNwbGl0dGFibGUgYERvRm5gLgogICAgIFJldHVybnM6CiAgICAgICBhIGBTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0YCBvYmplY3QuCiAgICAgIiIiCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZGZfaW52b2tlciwgRG9Gbkludm9rZXIpCiAgICBhc3NlcnQgaXNpbnN0YW5jZSh0cmFja2VyLCBSZXN0cmljdGlvblRyYWNrZXIpCgogICAgY2xhc3MgQ2hlY2twb2ludFN0YXRlKG9iamVjdCk6CiAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNoZWNrcG9pbnRlZCA9IE5vbmUKICAgICAgICBzZWxmLnJlc2lkdWFsX3Jlc3RyaWN0aW9uID0gTm9uZQoKICAgIGNoZWNrcG9pbnRfc3RhdGUgPSBDaGVja3BvaW50U3RhdGUoKQoKICAgIGRlZiBpbml0aWF0ZV9jaGVja3BvaW50KCk6CiAgICAgIHdpdGggc2VsZi5fY2hlY2twb2ludF9sb2NrOgogICAgICAgIGlmIGNoZWNrcG9pbnRfc3RhdGUuY2hlY2twb2ludGVkOgogICAgICAgICAgcmV0dXJuCiAgICAgIGNoZWNrcG9pbnRfc3RhdGUucmVzaWR1YWxfcmVzdHJpY3Rpb24gPSB0cmFja2VyLmNoZWNrcG9pbnQoKQogICAgICBjaGVja3BvaW50X3N0YXRlLmNoZWNrcG9pbnRlZCA9IG9iamVjdCgpCgogICAgb3V0cHV0X3Byb2Nlc3Nvci5yZXNldCgpCiAgICBub29wX2VzdGltYXRvciA9ICgKICAgICAgICBOb09wV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIoKS5jcmVhdGVfd2F0ZXJtYXJrX2VzdGltYXRvcihOb25lKSkKICAgIFRpbWVyKHNlbGYuX21heF9kdXJhdGlvbiwgaW5pdGlhdGVfY2hlY2twb2ludCkuc3RhcnQoKQogICAgc2RmX2ludm9rZXIuaW52b2tlX3Byb2Nlc3MoCiAgICAgICAgZWxlbWVudCwKICAgICAgICByZXN0cmljdGlvbl90cmFja2VyPXRyYWNrZXIsCiAgICAgICAgd2F0ZXJtYXJrX2VzdGltYXRvcj1ub29wX2VzdGltYXRvciwKICAgICAgICBhZGRpdGlvbmFsX2FyZ3M9YXJncywKICAgICAgICBhZGRpdGlvbmFsX2t3YXJncz1rd2FyZ3MpCgogICAgYXNzZXJ0IG91dHB1dF9wcm9jZXNzb3Iub3V0cHV0X2l0ZXIgaXMgbm90IE5vbmUKICAgIG91dHB1dF9jb3VudCA9IDAKCiAgICAjIFdlIGhhdmUgdG8gZXhwYW5kIGFuZCByZS15aWVsZCBoZXJlIHRvIHN1cHBvcnQgZW5kaW5nIGV4ZWN1dGlvbiBmb3IgYQogICAgIyBnaXZlbiBudW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzIGFzIHdlbGwgYXMgdG8gY2FwdHVyZSB0aGUKICAgICMgUHJvY2Vzc0NvbnRpbnVhdGlvbiBvZiBvbmUgd2FzIHJldHVybmVkLgogICAgcHJvY2Vzc19jb250aW51YXRpb24gPSBOb25lCiAgICBmb3Igb3V0cHV0IGluIG91dHB1dF9wcm9jZXNzb3Iub3V0cHV0X2l0ZXI6CiAgICAgICMgQSBQcm9jZXNzQ29udGludWF0aW9uLCBpZiByZXR1cm5lZCwgc2hvdWxkIGJlIHRoZSBsYXN0IGVsZW1lbnQuCiAgICAgIGFzc2VydCBub3QgcHJvY2Vzc19jb250aW51YXRpb24KICAgICAgaWYgaXNpbnN0YW5jZShvdXRwdXQsIFByb2Nlc3NDb250aW51YXRpb24pOgogICAgICAgICMgVGFraW5nIGEgY2hlY2twb2ludCBzbyB0aGF0IHdlIGNhbiBkZXRlcm1pbmUgcHJpbWFyeSBhbmQgcmVzaWR1YWwKICAgICAgICAjIHJlc3RyaWN0aW9ucy4KICAgICAgICBpbml0aWF0ZV9jaGVja3BvaW50KCkKCiAgICAgICAgIyBBIFByb2Nlc3NDb250aW51YXRpb24gc2hvdWxkIGFsd2F5cyBiZSB0aGUgbGFzdCBlbGVtZW50IHByb2R1Y2VkIGJ5CiAgICAgICAgIyB0aGUgb3V0cHV0IGl0ZXJhdG9yLgogICAgICAgICMgVE9ETzogc3VwcG9ydCBjb250aW51aW5nIGFmdGVyIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIGRlbGF5LgoKICAgICAgICAjIENvbnRpbnVpbmcgaGVyZSBpbnN0ZWFkIG9mIGJyZWFraW5nIHRvIGVuZm9yY2UgdGhhdCB0aGlzIGlzIHRoZSBsYXN0CiAgICAgICAgIyBlbGVtZW50LgogICAgICAgIHByb2Nlc3NfY29udGludWF0aW9uID0gb3V0cHV0CiAgICAgICAgY29udGludWUKCiAgICAgIHlpZWxkIG91dHB1dAogICAgICBvdXRwdXRfY291bnQgKz0gMQogICAgICBpZiBzZWxmLl9tYXhfbnVtX291dHB1dHMgYW5kIG91dHB1dF9jb3VudCA+PSBzZWxmLl9tYXhfbnVtX291dHB1dHM6CiAgICAgICAgaW5pdGlhdGVfY2hlY2twb2ludCgpCgogICAgdHJhY2tlci5jaGVja19kb25lKCkKICAgIHJlc3VsdCA9ICgKICAgICAgICBTREZQcm9jZXNzRWxlbWVudEludm9rZXIuUmVzdWx0KAogICAgICAgICAgICByZXNpZHVhbF9yZXN0cmljdGlvbj1jaGVja3BvaW50X3N0YXRlLnJlc2lkdWFsX3Jlc3RyaWN0aW9uKQogICAgICAgIGlmIGNoZWNrcG9pbnRfc3RhdGUucmVzaWR1YWxfcmVzdHJpY3Rpb24gZWxzZQogICAgICAgIFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHQoKSkKICAgIHlpZWxkIHJlc3VsdAoKCmNsYXNzIF9PdXRwdXRQcm9jZXNzb3IoT3V0cHV0UHJvY2Vzc29yKToKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLm91dHB1dF9pdGVyID0gTm9uZQoKICBkZWYgcHJvY2Vzc19vdXRwdXRzKAogICAgICBzZWxmLCB3aW5kb3dlZF9pbnB1dF9lbGVtZW50LCBvdXRwdXRfaXRlciwgd2F0ZXJtYXJrX2VzdGltYXRvcj1Ob25lKToKICAgICMgdHlwZTogKFdpbmRvd2VkVmFsdWUsIEl0ZXJhYmxlW0FueV0pIC0+IE5vbmUKICAgIHNlbGYub3V0cHV0X2l0ZXIgPSBvdXRwdXRfaXRlcgoKICBkZWYgcmVzZXQoc2VsZik6CiAgICBzZWxmLm91dHB1dF9pdGVyID0gTm9uZQoKCmNsYXNzIF9Ob25lU2hhbGxQYXNzT3V0cHV0UHJvY2Vzc29yKE91dHB1dFByb2Nlc3Nvcik6CiAgZGVmIHByb2Nlc3Nfb3V0cHV0cygKICAgICAgc2VsZiwgd2luZG93ZWRfaW5wdXRfZWxlbWVudCwgb3V0cHV0X2l0ZXIsIHdhdGVybWFya19lc3RpbWF0b3I9Tm9uZSk6CiAgICByYWlzZSBSdW50aW1lRXJyb3IoKQqUfZQojB9TcGxpdHRhYmxlUGFyRG9PdmVycmlkZS5tYXRjaGVzlGpWMQEASzxLQYeUjDFTcGxpdHRhYmxlUGFyRG9PdmVycmlkZS5nZXRfcmVwbGFjZW1lbnRfdHJhbnNmb3JtlGpWMQEAS0NLSoeUjBdTcGxpdHRhYmxlUGFyRG9PdmVycmlkZZRqXTEBAEs2S0qHlIwYU3BsaXR0YWJsZVBhckRvLl9faW5pdF9flGpWMQEAS09LUYeUjBZTcGxpdHRhYmxlUGFyRG8uZXhwYW5klGpWMQEAS1NLZ4eUjA9TcGxpdHRhYmxlUGFyRG+Ual0xAQBLTUtnh5SMHkVsZW1lbnRBbmRSZXN0cmljdGlvbi5fX2luaXRfX5RqVjEBAEtsS26HlIwVRWxlbWVudEFuZFJlc3RyaWN0aW9ulGpdMQEAS2pLboeUjB5QYWlyV2l0aFJlc3RyaWN0aW9uRm4uX19pbml0X1+UalYxAQBLc0t0h5SMIlBhaXJXaXRoUmVzdHJpY3Rpb25Gbi5zdGFydF9idW5kbGWUalYxAQBLdkt7h5SMHVBhaXJXaXRoUmVzdHJpY3Rpb25Gbi5wcm9jZXNzlGpWMQEAS31Lf4eUjBVQYWlyV2l0aFJlc3RyaWN0aW9uRm6Ual0xAQBLcUt/h5SMG1NwbGl0UmVzdHJpY3Rpb25Gbi5fX2luaXRfX5RqVjEBAEuES4WHlIwfU3BsaXRSZXN0cmljdGlvbkZuLnN0YXJ0X2J1bmRsZZRqVjEBAEuHS4yHlIwaU3BsaXRSZXN0cmljdGlvbkZuLnByb2Nlc3OUalYxAQBLjkuTh5SMElNwbGl0UmVzdHJpY3Rpb25GbpRqXTEBAEuCS5OHlIwYRXhwbG9kZVdpbmRvd3NGbi5wcm9jZXNzlGpWMQEAS5xLnYeUjBBFeHBsb2RlV2luZG93c0ZulGpdMQEAS5ZLnYeUjBlSYW5kb21VbmlxdWVLZXlGbi5wcm9jZXNzlGpWMQEAS6JLpIeUjBFSYW5kb21VbmlxdWVLZXlGbpRqXTEBAEugS6SHlIwdUHJvY2Vzc0tleWVkRWxlbWVudHMuX19pbml0X1+UalYxAQBLrUu8h5SMG1Byb2Nlc3NLZXllZEVsZW1lbnRzLmV4cGFuZJRqVjEBAEu+S7+HlIwUUHJvY2Vzc0tleWVkRWxlbWVudHOUal0xAQBLp0u/h5SMNVByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZS5tYXRjaGVzlGpWMQEAS8RLxYeUjEdQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqVjEBAEvHS8iHlIwtUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc092ZXJyaWRllGpdMQEAS8JLyIeUjC5Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zLl9faW5pdF9flGpWMQEAS81LzoeUjCxQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zLmV4cGFuZJRqVjEBAEvQS9iHlIwlUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc5RqXTEBAEvLS9iHlIwYUHJvY2Vzc0VsZW1lbnRzLl9faW5pdF9flGpWMQEAS+FL44eUjBZQcm9jZXNzRWxlbWVudHMuZXhwYW5klGpWMQEAS+VL5oeUjB5Qcm9jZXNzRWxlbWVudHMubmV3X3Byb2Nlc3NfZm6UalYxAQBL6Evsh5SMD1Byb2Nlc3NFbGVtZW50c5RqXTEBAEvbS+yHlIwSUHJvY2Vzc0ZuLl9faW5pdF9flGpWMQEAS/9NDgGHlIwWUHJvY2Vzc0ZuLnN0ZXBfY29udGV4dJRqVjEBAE0UAU0XAYeUjCVQcm9jZXNzRm4uc2V0X3Byb2Nlc3NfZWxlbWVudF9pbnZva2VylGpWMQEATRkBTRsBh5SMEVByb2Nlc3NGbi5wcm9jZXNzlGpWMQEATR0BTXoBh5SMCVByb2Nlc3NGbpRqXTEBAEvvTXoBh5SMKFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHQuX19pbml0X1+UalYxAQBNlgFNqgGHlIwfU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLlJlc3VsdJRqXTEBAE2VAU2qAYeUjCFTREZQcm9jZXNzRWxlbWVudEludm9rZXIuX19pbml0X1+UalYxAQBNrAFNrwGHlIwkU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLnRlc3RfbWV0aG9klGpWMQEATbEBTbIBh5SMSFNERlByb2Nlc3NFbGVtZW50SW52b2tlci5pbnZva2VfcHJvY2Vzc19lbGVtZW50LkNoZWNrcG9pbnRTdGF0ZS5fX2luaXRfX5RqVjEBAE3EAU3GAYeUjD9TREZQcm9jZXNzRWxlbWVudEludm9rZXIuaW52b2tlX3Byb2Nlc3NfZWxlbWVudC5DaGVja3BvaW50U3RhdGWUal0xAQBNwwFNxgGHlIwvU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLmludm9rZV9wcm9jZXNzX2VsZW1lbnSUalYxAQBNtAFN/wGHlIwYU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VylGpdMQEATX0BTf8Bh5SMGV9PdXRwdXRQcm9jZXNzb3IuX19pbml0X1+UalYxAQBNAwJNBAKHlIwgX091dHB1dFByb2Nlc3Nvci5wcm9jZXNzX291dHB1dHOUalYxAQBNBgJNCQKHlIwWX091dHB1dFByb2Nlc3Nvci5yZXNldJRqVjEBAE0LAk0MAoeUjBBfT3V0cHV0UHJvY2Vzc29ylGpdMQEATQICTQwCh5SMLV9Ob25lU2hhbGxQYXNzT3V0cHV0UHJvY2Vzc29yLnByb2Nlc3Nfb3V0cHV0c5RqVjEBAE0QAk0SAoeUjB1fTm9uZVNoYWxsUGFzc091dHB1dFByb2Nlc3NvcpRqXTEBAE0PAk0SAoeUdX2UKIwXU3BsaXR0YWJsZVBhckRvT3ZlcnJpZGWUakoDAACMH1NwbGl0dGFibGVQYXJEb092ZXJyaWRlLm1hdGNoZXOUakoDAACMMVNwbGl0dGFibGVQYXJEb092ZXJyaWRlLmdldF9yZXBsYWNlbWVudF90cmFuc2Zvcm2UakoDAACMD1NwbGl0dGFibGVQYXJEb5RqSgMAAIwWU3BsaXR0YWJsZVBhckRvLmV4cGFuZJRqSgMAAIwVRWxlbWVudEFuZFJlc3RyaWN0aW9ulGpKAwAAjBVQYWlyV2l0aFJlc3RyaWN0aW9uRm6UakoDAACMIlBhaXJXaXRoUmVzdHJpY3Rpb25Gbi5zdGFydF9idW5kbGWUakoDAACMHVBhaXJXaXRoUmVzdHJpY3Rpb25Gbi5wcm9jZXNzlGpKAwAAjBJTcGxpdFJlc3RyaWN0aW9uRm6UakoDAACMH1NwbGl0UmVzdHJpY3Rpb25Gbi5zdGFydF9idW5kbGWUakoDAACMGlNwbGl0UmVzdHJpY3Rpb25Gbi5wcm9jZXNzlGpKAwAAjBBFeHBsb2RlV2luZG93c0ZulGpKAwAAjBhFeHBsb2RlV2luZG93c0ZuLnByb2Nlc3OUakoDAACMEVJhbmRvbVVuaXF1ZUtleUZulGpKAwAAjBlSYW5kb21VbmlxdWVLZXlGbi5wcm9jZXNzlGpKAwAAjBRQcm9jZXNzS2V5ZWRFbGVtZW50c5RqSgMAAIwbUHJvY2Vzc0tleWVkRWxlbWVudHMuZXhwYW5klGpKAwAAjC1Qcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGWUakoDAACMNVByb2Nlc3NLZXllZEVsZW1lbnRzVmlhS2V5ZWRXb3JrSXRlbXNPdmVycmlkZS5tYXRjaGVzlGpKAwAAjEdQcm9jZXNzS2V5ZWRFbGVtZW50c1ZpYUtleWVkV29ya0l0ZW1zT3ZlcnJpZGUuZ2V0X3JlcGxhY2VtZW50X3RyYW5zZm9ybZRqSgMAAIwlUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtc5RqSgMAAIwsUHJvY2Vzc0tleWVkRWxlbWVudHNWaWFLZXllZFdvcmtJdGVtcy5leHBhbmSUakoDAACMD1Byb2Nlc3NFbGVtZW50c5RqSgMAAIwWUHJvY2Vzc0VsZW1lbnRzLmV4cGFuZJRqSgMAAIweUHJvY2Vzc0VsZW1lbnRzLm5ld19wcm9jZXNzX2ZulGpKAwAAjAlQcm9jZXNzRm6UakoDAACMJVByb2Nlc3NGbi5zZXRfcHJvY2Vzc19lbGVtZW50X2ludm9rZXKUakoDAACMEVByb2Nlc3NGbi5wcm9jZXNzlGpKAwAAjBhTREZQcm9jZXNzRWxlbWVudEludm9rZXKUakoDAACMH1NERlByb2Nlc3NFbGVtZW50SW52b2tlci5SZXN1bHSUakoDAACMJFNERlByb2Nlc3NFbGVtZW50SW52b2tlci50ZXN0X21ldGhvZJRqSgMAAIwvU0RGUHJvY2Vzc0VsZW1lbnRJbnZva2VyLmludm9rZV9wcm9jZXNzX2VsZW1lbnSUakoDAAB1jCxhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lcpR0lIwtYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudGVzdF9kaXJlY3RfcnVubmVylChYwQgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiV3JhcHBlciBvZiBCZWFtIHJ1bm5lcnMgdGhhdCdzIGJ1aWx0IGZvciBydW5uaW5nIGFuZCB2ZXJpZnlpbmcgZTJlIHRlc3RzLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBUZXN0T3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIgaW1wb3J0IERpcmVjdFJ1bm5lcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVN0YXRlCgpfX2FsbF9fID0gWydUZXN0RGlyZWN0UnVubmVyJ10KCgpjbGFzcyBUZXN0RGlyZWN0UnVubmVyKERpcmVjdFJ1bm5lcik6CiAgZGVmIHJ1bl9waXBlbGluZShzZWxmLCBwaXBlbGluZSwgb3B0aW9ucyk6CiAgICAiIiJFeGVjdXRlIHRlc3QgcGlwZWxpbmUgYW5kIHZlcmlmeSB0ZXN0IG1hdGNoZXIiIiIKICAgIHRlc3Rfb3B0aW9ucyA9IG9wdGlvbnMudmlld19hcyhUZXN0T3B0aW9ucykKICAgIG9uX3N1Y2Nlc3NfbWF0Y2hlciA9IHRlc3Rfb3B0aW9ucy5vbl9zdWNjZXNzX21hdGNoZXIKICAgIGlzX3N0cmVhbWluZyA9IG9wdGlvbnMudmlld19hcyhTdGFuZGFyZE9wdGlvbnMpLnN0cmVhbWluZwoKICAgICMgW0JFQU0tMTg4OV0gRG8gbm90IHNlbmQgdGhpcyB0byByZW1vdGUgd29ya2VycyBhbHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAjIHNlbmQgdGhpcyBvcHRpb24gdG8gcmVtb3RlIGV4ZWN1dG9ycy4KICAgIHRlc3Rfb3B0aW9ucy5vbl9zdWNjZXNzX21hdGNoZXIgPSBOb25lCgogICAgc2VsZi5yZXN1bHQgPSBzdXBlcihUZXN0RGlyZWN0UnVubmVyLCBzZWxmKS5ydW5fcGlwZWxpbmUocGlwZWxpbmUsIG9wdGlvbnMpCgogICAgdHJ5OgogICAgICBpZiBub3QgaXNfc3RyZWFtaW5nOgogICAgICAgIHNlbGYucmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKCiAgICAgIGlmIG9uX3N1Y2Nlc3NfbWF0Y2hlcjoKICAgICAgICBmcm9tIGhhbWNyZXN0IGltcG9ydCBhc3NlcnRfdGhhdCBhcyBoY19hc3NlcnRfdGhhdAogICAgICAgIGhjX2Fzc2VydF90aGF0KHNlbGYucmVzdWx0LCBwaWNrbGVyLmxvYWRzKG9uX3N1Y2Nlc3NfbWF0Y2hlcikpCiAgICBmaW5hbGx5OgogICAgICBpZiBub3QgUGlwZWxpbmVTdGF0ZS5pc190ZXJtaW5hbChzZWxmLnJlc3VsdC5zdGF0ZSk6CiAgICAgICAgc2VsZi5yZXN1bHQuY2FuY2VsKCkKICAgICAgICBzZWxmLnJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpCgogICAgcmV0dXJuIHNlbGYucmVzdWx0CpR9lCiMHVRlc3REaXJlY3RSdW5uZXIucnVuX3BpcGVsaW5llGpWMQEASyNLO4eUjBBUZXN0RGlyZWN0UnVubmVylGpdMQEASyJLO4eUdX2UKIwQVGVzdERpcmVjdFJ1bm5lcpRqHwQAAIwdVGVzdERpcmVjdFJ1bm5lci5ydW5fcGlwZWxpbmWUah8EAAB1jC1hcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X2RpcmVjdF9ydW5uZXKUdJSMLmFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRyYW5zZm9ybV9ldmFsdWF0b3KUKFibrAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBbiBldmFsdWF0b3Igb2YgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBvZiBhIHRyYW5zZm9ybS4iIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXRleGl0CmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgbG9nZ2luZwppbXBvcnQgcmFuZG9tCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORwpmcm9tIHR5cGluZyBpbXBvcnQgQW55CmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQpmcm9tIHR5cGluZyBpbXBvcnQgVHlwZQpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24KCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKCmltcG9ydCBhcGFjaGVfYmVhbS5pbyBhcyBpbwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBjb21tb24KZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GblJ1bm5lcgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuY29tbW9uIGltcG9ydCBEb0ZuU3RhdGUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRhdGFmbG93Lm5hdGl2ZV9pby5pb2Jhc2UgaW1wb3J0IF9OYXRpdmVXcml0ZSAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2Vzcwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIgaW1wb3J0IF9EaXJlY3RSZWFkRnJvbVB1YlN1Ygpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIgaW1wb3J0IF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIgaW1wb3J0IF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF91c2Vyc3RhdGUgaW1wb3J0IERpcmVjdFVzZXJTdGF0ZUNvbnRleHQKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5zZGZfZGlyZWN0X3J1bm5lciBpbXBvcnQgUHJvY2Vzc0VsZW1lbnRzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Quc2RmX2RpcmVjdF9ydW5uZXIgaW1wb3J0IFByb2Nlc3NGbgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnNkZl9kaXJlY3RfcnVubmVyIGltcG9ydCBTREZQcm9jZXNzRWxlbWVudEludm9rZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC50ZXN0X3N0cmVhbV9pbXBsIGltcG9ydCBfVGVzdFN0cmVhbQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnRlc3Rfc3RyZWFtX2ltcGwgaW1wb3J0IF9XYXRlcm1hcmtDb250cm9sbGVyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCBpbXBvcnQgS2V5ZWRXb3JrSXRlbQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWwgaW1wb3J0IFRyYW5zZm9ybVJlc3VsdApmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VyIGltcG9ydCBXYXRlcm1hcmtNYW5hZ2VyCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSBpbXBvcnQgRWxlbWVudEV2ZW50CmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbSBpbXBvcnQgUHJvY2Vzc2luZ1RpbWVFdmVudApmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW0gaW1wb3J0IFdhdGVybWFya0V2ZW50CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY29yZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgSW5NZW1vcnlVbm1lcmdlZFN0YXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBUaW1lRG9tYWluCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgX0xpc3RTdGF0ZVRhZwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgX1ZhbHVlU3RhdGVUYWcKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IGNyZWF0ZV90cmlnZ2VyX2RyaXZlcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlIGltcG9ydCBnZXRfZG9mbl9zcGVjcwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlIGltcG9ydCBpc19zdGF0ZWZ1bF9kb2ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEdsb2JhbFdpbmRvd3MKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgV2luZG93ZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2sgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IGNvdW50ZXJzCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBNSU5fVElNRVNUQU1QCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBUaW1lc3RhbXAKCmlmIFRZUEVfQ0hFQ0tJTkc6CiAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViIGltcG9ydCBfUHViU3ViU291cmNlCiAgZnJvbSBhcGFjaGVfYmVhbS5pby5nY3AucHVic3ViIGltcG9ydCBQdWJzdWJNZXNzYWdlCiAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmV2YWx1YXRpb25fY29udGV4dCBpbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeShvYmplY3QpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQ3JlYXRlcyBpbnN0YW5jZXMgb2YgVHJhbnNmb3JtRXZhbHVhdG9yIGZvciB0aGUgYXBwbGljYXRpb24gb2YgYSB0cmFuc2Zvcm0uCiAgIiIiCgogIF90ZXN0X2V2YWx1YXRvcnNfb3ZlcnJpZGVzID0gewogIH0gICMgdHlwZTogRGljdFtUeXBlW2NvcmUuUFRyYW5zZm9ybV0sIFR5cGVbX1RyYW5zZm9ybUV2YWx1YXRvcl1dCgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQpOgogICAgIyB0eXBlOiAoRXZhbHVhdGlvbkNvbnRleHQpIC0+IE5vbmUKICAgIGFzc2VydCBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dCA9IGV2YWx1YXRpb25fY29udGV4dAogICAgc2VsZi5fZXZhbHVhdG9ycyA9IHsKICAgICAgICBpby5SZWFkOiBfQm91bmRlZFJlYWRFdmFsdWF0b3IsCiAgICAgICAgX0RpcmVjdFJlYWRGcm9tUHViU3ViOiBfUHViU3ViUmVhZEV2YWx1YXRvciwKICAgICAgICBjb3JlLkZsYXR0ZW46IF9GbGF0dGVuRXZhbHVhdG9yLAogICAgICAgIGNvcmUuSW1wdWxzZTogX0ltcHVsc2VFdmFsdWF0b3IsCiAgICAgICAgY29yZS5QYXJEbzogX1BhckRvRXZhbHVhdG9yLAogICAgICAgIGNvcmUuX0dyb3VwQnlLZXlPbmx5OiBfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IsCiAgICAgICAgX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5OiBfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IsCiAgICAgICAgX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93OiBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dFdmFsdWF0b3IsCiAgICAgICAgX05hdGl2ZVdyaXRlOiBfTmF0aXZlV3JpdGVFdmFsdWF0b3IsCiAgICAgICAgX1Rlc3RTdHJlYW06IF9UZXN0U3RyZWFtRXZhbHVhdG9yLAogICAgICAgIFByb2Nlc3NFbGVtZW50czogX1Byb2Nlc3NFbGVtZW50c0V2YWx1YXRvciwKICAgICAgICBfV2F0ZXJtYXJrQ29udHJvbGxlcjogX1dhdGVybWFya0NvbnRyb2xsZXJFdmFsdWF0b3IsCiAgICB9ICAjIHR5cGU6IERpY3RbVHlwZVtjb3JlLlBUcmFuc2Zvcm1dLCBUeXBlW19UcmFuc2Zvcm1FdmFsdWF0b3JdXQogICAgc2VsZi5fZXZhbHVhdG9ycy51cGRhdGUoc2VsZi5fdGVzdF9ldmFsdWF0b3JzX292ZXJyaWRlcykKICAgIHNlbGYuX3Jvb3RfYnVuZGxlX3Byb3ZpZGVycyA9IHsKICAgICAgICBjb3JlLlBUcmFuc2Zvcm06IERlZmF1bHRSb290QnVuZGxlUHJvdmlkZXIsCiAgICAgICAgX1Rlc3RTdHJlYW06IF9UZXN0U3RyZWFtUm9vdEJ1bmRsZVByb3ZpZGVyLAogICAgfQoKICBkZWYgZ2V0X2V2YWx1YXRvcigKICAgICAgc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtLCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLCBzaWRlX2lucHV0cyk6CiAgICAiIiJSZXR1cm5zIGEgVHJhbnNmb3JtRXZhbHVhdG9yIHN1aXRhYmxlIGZvciBwcm9jZXNzaW5nIGdpdmVuIGlucHV0cy4iIiIKICAgIGFzc2VydCBhcHBsaWVkX3B0cmFuc2Zvcm0KICAgIGFzc2VydCBib29sKGFwcGxpZWRfcHRyYW5zZm9ybS5zaWRlX2lucHV0cykgPT0gYm9vbChzaWRlX2lucHV0cykKCiAgICAjIFdhbGsgdXAgdGhlIGNsYXNzIGhpZXJhcmNoeSB0byBmaW5kIGFuIGV2YWx1YWJsZSB0eXBlLiBUaGlzIGlzIG5lY2Vzc2FyeQogICAgIyBmb3Igc3VwcG9ydGluZyBzdWItY2xhc3NlcyBvZiBjb3JlIHRyYW5zZm9ybXMuCiAgICBmb3IgY2xzIGluIGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uX19jbGFzc19fLm1ybygpOgogICAgICBldmFsdWF0b3IgPSBzZWxmLl9ldmFsdWF0b3JzLmdldChjbHMpCiAgICAgIGlmIGV2YWx1YXRvcjoKICAgICAgICBicmVhawoKICAgIGlmIG5vdCBldmFsdWF0b3I6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgICAnRXhlY3V0aW9uIG9mIFslc10gbm90IGltcGxlbWVudGVkIGluIHJ1bm5lciAlcy4nICUKICAgICAgICAgICh0eXBlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0pLCBzZWxmKSkKICAgIHJldHVybiBldmFsdWF0b3IoCiAgICAgICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzKQoKICBkZWYgZ2V0X3Jvb3RfYnVuZGxlX3Byb3ZpZGVyKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICBwcm92aWRlcl9jbHMgPSBOb25lCiAgICBmb3IgY2xzIGluIGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uX19jbGFzc19fLm1ybygpOgogICAgICBwcm92aWRlcl9jbHMgPSBzZWxmLl9yb290X2J1bmRsZV9wcm92aWRlcnMuZ2V0KGNscykKICAgICAgaWYgcHJvdmlkZXJfY2xzOgogICAgICAgIGJyZWFrCiAgICBpZiBub3QgcHJvdmlkZXJfY2xzOgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICAgJ1Jvb3QgcHJvdmlkZXIgZm9yIFslc10gbm90IGltcGxlbWVudGVkIGluIHJ1bm5lciAlcycgJQogICAgICAgICAgKHR5cGUoYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSksIHNlbGYpKQogICAgcmV0dXJuIHByb3ZpZGVyX2NscyhzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSkKCiAgZGVmIHNob3VsZF9leGVjdXRlX3NlcmlhbGx5KHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhpcyBhcHBsaWVkX3B0cmFuc2Zvcm0gc2hvdWxkIHJ1biBvbmUgYnVuZGxlIGF0IGEgdGltZS4KCiAgICBTb21lIFRyYW5zZm9ybUV2YWx1YXRvcnMgdXNlIGEgZ2xvYmFsIHN0YXRlIG9iamVjdCB0byBrZWVwIHRyYWNrIG9mIHRoZWlyCiAgICBnbG9iYWwgZXhlY3V0aW9uIHN0YXRlLiBGb3IgZXhhbXBsZSBldmFsdWF0b3IgZm9yIF9Hcm91cEJ5S2V5T25seSB1c2VzIHRoaXMKICAgIHN0YXRlIGFzIGFuIGluIG1lbW9yeSBkaWN0aW9uYXJ5IHRvIGJ1ZmZlciBrZXlzLgoKICAgIFNlcmlhbGx5IGV4ZWN1dGVkIGV2YWx1YXRvcnMgd2lsbCBhY3QgYXMgc3luY2luZyBwb2ludCBpbiB0aGUgZ3JhcGggYW5kCiAgICBleGVjdXRpb24gd2lsbCBub3QgbW92ZSBmb3J3YXJkIHVudGlsIHRoZXkgcmVjZWl2ZSBhbGwgb2YgdGhlaXIgaW5wdXRzLiBPbmNlCiAgICB0aGV5IHJlY2VpdmUgYWxsIG9mIHRoZWlyIGlucHV0LCB0aGV5IHdpbGwgcmVsZWFzZSB0aGUgY29tYmluZWQgb3V0cHV0LgogICAgVGhlaXIgb3V0cHV0IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGJ1bmRsZXMgYXMgdGhleSBtYXkgZGl2aWRlIHRoZWlyIG91dHB1dAogICAgaW50byBwaWVjZXMgYmVmb3JlIHJlbGVhc2luZy4KCiAgICBBcmdzOgogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm06IFRyYW5zZm9ybSB0byBiZSB1c2VkIGZvciBleGVjdXRpb24uCgogICAgUmV0dXJuczoKICAgICAgVHJ1ZSBpZiBleGVjdXRvciBzaG91bGQgZXhlY3V0ZSBhcHBsaWVkX3B0cmFuc2Zvcm0gc2VyaWFsbHkuCiAgICAiIiIKICAgIGlmIGlzaW5zdGFuY2UoYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgKGNvcmUuX0dyb3VwQnlLZXlPbmx5LAogICAgICAgICAgICAgICAgICAgX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5LAogICAgICAgICAgICAgICAgICAgX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93LAogICAgICAgICAgICAgICAgICAgX05hdGl2ZVdyaXRlKSk6CiAgICAgIHJldHVybiBUcnVlCiAgICBlbGlmIChpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0sIGNvcmUuUGFyRG8pIGFuZAogICAgICAgICAgaXNfc3RhdGVmdWxfZG9mbihhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLmRvZm4pKToKICAgICAgcmV0dXJuIFRydWUKICAgIHJldHVybiBGYWxzZQoKCmNsYXNzIFJvb3RCdW5kbGVQcm92aWRlcihvYmplY3QpOgogICIiIlByb3ZpZGVzIGJ1bmRsZXMgZm9yIHRoZSBpbml0aWFsIGV4ZWN1dGlvbiBvZiBhIHJvb3QgdHJhbnNmb3JtLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybSA9IGFwcGxpZWRfcHRyYW5zZm9ybQoKICBkZWYgZ2V0X3Jvb3RfYnVuZGxlcyhzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBEZWZhdWx0Um9vdEJ1bmRsZVByb3ZpZGVyKFJvb3RCdW5kbGVQcm92aWRlcik6CiAgIiIiUHJvdmlkZXMgYW4gZW1wdHkgYnVuZGxlIGJ5IGRlZmF1bHQgZm9yIHJvb3QgdHJhbnNmb3Jtcy4iIiIKICBkZWYgZ2V0X3Jvb3RfYnVuZGxlcyhzZWxmKToKICAgIGlucHV0X25vZGUgPSBwdmFsdWUuUEJlZ2luKHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0ucGlwZWxpbmUpCiAgICBlbXB0eV9idW5kbGUgPSAoCiAgICAgICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9lbXB0eV9jb21taXR0ZWRfYnVuZGxlKGlucHV0X25vZGUpKQogICAgcmV0dXJuIFtlbXB0eV9idW5kbGVdCgoKY2xhc3MgX1Rlc3RTdHJlYW1Sb290QnVuZGxlUHJvdmlkZXIoUm9vdEJ1bmRsZVByb3ZpZGVyKToKICAiIiJQcm92aWRlcyBhbiBpbml0aWFsIGJ1bmRsZSBmb3IgdGhlIFRlc3RTdHJlYW0gZXZhbHVhdG9yLgoKICBUaGlzIGJ1bmRsZSBpcyB1c2VkIGFzIHRoZSBpbml0aWFsIHN0YXRlIHRvIHRoZSBUZXN0U3RyZWFtLiBFYWNoIHVucHJvY2Vzc2VkCiAgYnVuZGxlIGVtaXR0ZWQgZnJvbSB0aGUgVGVzdFN0cmVhbSBhZnRlcndhcmRzIGlzIGl0cyBzdGF0ZTogaW5kZXggaW50byB0aGUKICBzdHJlYW0sIGFuZCB0aGUgd2F0ZXJtYXJrLgogICIiIgogIGRlZiBnZXRfcm9vdF9idW5kbGVzKHNlbGYpOgogICAgdGVzdF9zdHJlYW0gPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZSgKICAgICAgICBwdmFsdWUuUEJlZ2luKHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0ucGlwZWxpbmUpKQogICAgYnVuZGxlLmFkZCgKICAgICAgICBHbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKAogICAgICAgICAgICB0ZXN0X3N0cmVhbS5iZWdpbigpLCB0aW1lc3RhbXA9TUlOX1RJTUVTVEFNUCkpCiAgICBidW5kbGUuY29tbWl0KE5vbmUpCiAgICByZXR1cm4gW2J1bmRsZV0KCgpjbGFzcyBfVHJhbnNmb3JtRXZhbHVhdG9yKG9iamVjdCk6CiAgIiIiQW4gZXZhbHVhdG9yIG9mIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gb2YgYSB0cmFuc2Zvcm0uIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsICMgdHlwZTogRXZhbHVhdGlvbkNvbnRleHQKICAgICAgICAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLCAgIyB0eXBlOiBBcHBsaWVkUFRyYW5zZm9ybQogICAgICAgICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgICAgICAgICBzaWRlX2lucHV0cwogICAgICAgICAgICAgICk6CiAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQgPSBldmFsdWF0aW9uX2NvbnRleHQKICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybSA9IGFwcGxpZWRfcHRyYW5zZm9ybQogICAgc2VsZi5faW5wdXRfY29tbWl0dGVkX2J1bmRsZSA9IGlucHV0X2NvbW1pdHRlZF9idW5kbGUKICAgIHNlbGYuX3NpZGVfaW5wdXRzID0gc2lkZV9pbnB1dHMKICAgIHNlbGYuX2V4cGFuZF9vdXRwdXRzKCkKICAgIHNlbGYuX2V4ZWN1dGlvbl9jb250ZXh0ID0gZXZhbHVhdGlvbl9jb250ZXh0LmdldF9leGVjdXRpb25fY29udGV4dCgKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0pCiAgICBzZWxmLl9zdGVwX2NvbnRleHQgPSBzZWxmLl9leGVjdXRpb25fY29udGV4dC5nZXRfc3RlcF9jb250ZXh0KCkKCiAgZGVmIF9leHBhbmRfb3V0cHV0cyhzZWxmKToKICAgIG91dHB1dHMgPSBzZXQoKQogICAgZm9yIHB2YWwgaW4gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLm91dHB1dHMudmFsdWVzKCk6CiAgICAgIGlmIGlzaW5zdGFuY2UocHZhbCwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIHB2YWwpCiAgICAgIGVsc2U6CiAgICAgICAgcHZhbHMgPSAocHZhbCwgKQogICAgICBmb3IgdiBpbiBwdmFsczoKICAgICAgICBvdXRwdXRzLmFkZCh2KQogICAgc2VsZi5fb3V0cHV0cyA9IGZyb3plbnNldChvdXRwdXRzKQoKICBkZWYgX3NwbGl0X2xpc3RfaW50b19idW5kbGVzKAogICAgICBzZWxmLAogICAgICBvdXRwdXRfcGNvbGxlY3Rpb24sCiAgICAgIGVsZW1lbnRzLAogICAgICBtYXhfZWxlbWVudF9wZXJfYnVuZGxlLAogICAgICBlbGVtZW50X3NpemVfZm4pOgogICAgIiIiU3BsaXRzIGVsZW1lbnRzLCBhbiBpdGVyYWJsZSwgaW50byBtdWx0aXBsZSBvdXRwdXQgYnVuZGxlcy4KCiAgICBBcmdzOgogICAgICBvdXRwdXRfcGNvbGxlY3Rpb246IFBDb2xsZWN0aW9uIHRoYXQgdGhlIGVsZW1lbnRzIGJlbG9uZyB0by4KICAgICAgZWxlbWVudHM6IGVsZW1lbnRzIHRvIGJlIGNodW5rZWQgaW50byBidW5kbGVzLgogICAgICBtYXhfZWxlbWVudF9wZXJfYnVuZGxlOiAoYXBwcm94aW1hdGVseSkgdGhlIG1heGltdW0gZWxlbWVudCBwZXIgYnVuZGxlLgogICAgICAgIElmIGl0IGlzIE5vbmUsIG9ubHkgYSBzaW5nbGUgYnVuZGxlIHdpbGwgYmUgcHJvZHVjZWQuCiAgICAgIGVsZW1lbnRfc2l6ZV9mbjogRnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBzaXplIG9mIGEgZ2l2ZW4gZWxlbWVudC4KCiAgICBSZXR1cm5zOgogICAgICBMaXN0IG9mIG91dHB1dCB1bmNvbW1pdHRlZCBidW5kbGVzIHdpdGggYXQgbGVhc3Qgb25lIGJ1bmRsZS4KICAgICIiIgogICAgYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUob3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgYnVuZGxlX3NpemUgPSAwCiAgICBidW5kbGVzID0gW2J1bmRsZV0KICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgogICAgICBpZiBtYXhfZWxlbWVudF9wZXJfYnVuZGxlIGFuZCBidW5kbGVfc2l6ZSA+PSBtYXhfZWxlbWVudF9wZXJfYnVuZGxlOgogICAgICAgIGJ1bmRsZSA9IHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5jcmVhdGVfYnVuZGxlKG91dHB1dF9wY29sbGVjdGlvbikKICAgICAgICBidW5kbGVfc2l6ZSA9IDAKICAgICAgICBidW5kbGVzLmFwcGVuZChidW5kbGUpCgogICAgICBidW5kbGUub3V0cHV0KGVsZW1lbnQpCiAgICAgIGJ1bmRsZV9zaXplICs9IGVsZW1lbnRfc2l6ZV9mbihlbGVtZW50KQogICAgcmV0dXJuIGJ1bmRsZXMKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgICIiIlN0YXJ0cyBhIG5ldyBidW5kbGUuIiIiCiAgICBwYXNzCgogIGRlZiBwcm9jZXNzX3RpbWVyX3dyYXBwZXIoc2VsZiwgdGltZXJfZmlyaW5nKToKICAgICIiIlByb2Nlc3MgdGltZXIgYnkgY2xlYXJpbmcgYW5kIHRoZW4gY2FsbGluZyBwcm9jZXNzX3RpbWVyKCkuCgogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdpdGggYW55IHRpbWVyIGZpcmluZyBhbmQgY2xlYXJzIHRoZSBkZWxpdmVyZWQKICAgIHRpbWVyIGZyb20gdGhlIGtleWVkIHN0YXRlIGFuZCB0aGVuIGNhbGxzIHByb2Nlc3NfdGltZXIoKS4gIFRoZSBkZWZhdWx0CiAgICBwcm9jZXNzX3RpbWVyKCkgaW1wbGVtZW50YXRpb24gZW1pdHMgYSBLZXllZFdvcmtJdGVtIGZvciB0aGUgcGFydGljdWxhcgogICAgdGltZXIgYW5kIHBhc3NlcyBpdCB0byBwcm9jZXNzX2VsZW1lbnQoKS4gIEV2YWx1YXRvciBzdWJjbGFzc2VzIHdoaWNoCiAgICBkZXNpcmUgZGlmZmVyZW50IHRpbWVyIGRlbGl2ZXJ5IHNlbWFudGljcyBjYW4gb3ZlcnJpZGUgcHJvY2Vzc190aW1lcigpLgogICAgIiIiCiAgICBzdGF0ZSA9IHNlbGYuX3N0ZXBfY29udGV4dC5nZXRfa2V5ZWRfc3RhdGUodGltZXJfZmlyaW5nLmVuY29kZWRfa2V5KQogICAgc3RhdGUuY2xlYXJfdGltZXIoCiAgICAgICAgdGltZXJfZmlyaW5nLndpbmRvdywgdGltZXJfZmlyaW5nLm5hbWUsIHRpbWVyX2ZpcmluZy50aW1lX2RvbWFpbikKICAgIHNlbGYucHJvY2Vzc190aW1lcih0aW1lcl9maXJpbmcpCgogIGRlZiBwcm9jZXNzX3RpbWVyKHNlbGYsIHRpbWVyX2ZpcmluZyk6CiAgICAiIiJEZWZhdWx0IHByb2Nlc3NfdGltZXIoKSBpbXBsLiBnZW5lcmF0aW5nIEtleWVkV29ya0l0ZW0gZWxlbWVudC4iIiIKICAgIHNlbGYucHJvY2Vzc19lbGVtZW50KAogICAgICAgIEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoCiAgICAgICAgICAgIEtleWVkV29ya0l0ZW0oCiAgICAgICAgICAgICAgICB0aW1lcl9maXJpbmcuZW5jb2RlZF9rZXksIHRpbWVyX2ZpcmluZ3M9W3RpbWVyX2ZpcmluZ10pKSkKCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgICIiIlByb2Nlc3NlcyBhIG5ldyBlbGVtZW50IGFzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYnVuZGxlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignJXMgZG8gbm90IHByb2Nlc3MgZWxlbWVudHMuJyAlIHR5cGUoc2VsZikpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBUcmFuc2Zvcm1SZXN1bHQKCiAgICAiIiJGaW5pc2hlcyB0aGUgYnVuZGxlIGFuZCBwcm9kdWNlcyBvdXRwdXQuIiIiCiAgICBwYXNzCgoKY2xhc3MgX0JvdW5kZWRSZWFkRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgYm91bmRlZCBSZWFkIHRyYW5zZm9ybS4iIiIKCiAgIyBBZnRlciBzb21lIGJlbmNobWFya3MsIDEwMDAgd2FzIG9wdGltYWwgYW1vbmcgezEwMCwxMDAwLDEwMDAwfQogIE1BWF9FTEVNRU5UX1BFUl9CVU5ETEUgPSAxMDAwCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgIHNpZGVfaW5wdXRzKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHNlbGYuX3NvdXJjZSA9IGFwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0uc291cmNlCiAgICBzZWxmLl9zb3VyY2UucGlwZWxpbmVfb3B0aW9ucyA9IGV2YWx1YXRpb25fY29udGV4dC5waXBlbGluZV9vcHRpb25zCiAgICBzdXBlcihfQm91bmRlZFJlYWRFdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBhc3NlcnQgbGVuKHNlbGYuX291dHB1dHMpID09IDEKICAgIG91dHB1dF9wY29sbGVjdGlvbiA9IGxpc3Qoc2VsZi5fb3V0cHV0cylbMF0KCiAgICBkZWYgX3JlYWRfdmFsdWVzX3RvX2J1bmRsZXMocmVhZGVyKToKICAgICAgcmVhZF9yZXN1bHQgPSBbR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShlKSBmb3IgZSBpbiByZWFkZXJdCiAgICAgIHJldHVybiBzZWxmLl9zcGxpdF9saXN0X2ludG9fYnVuZGxlcygKICAgICAgICAgIG91dHB1dF9wY29sbGVjdGlvbiwKICAgICAgICAgIHJlYWRfcmVzdWx0LAogICAgICAgICAgX0JvdW5kZWRSZWFkRXZhbHVhdG9yLk1BWF9FTEVNRU5UX1BFUl9CVU5ETEUsCiAgICAgICAgICBsYW1iZGEgXzogMSkKCiAgICBpZiBpc2luc3RhbmNlKHNlbGYuX3NvdXJjZSwgaW8uaW9iYXNlLkJvdW5kZWRTb3VyY2UpOgogICAgICAjIEdldHRpbmcgYSBSYW5nZVRyYWNrZXIgZm9yIHRoZSBkZWZhdWx0IHJhbmdlIG9mIHRoZSBzb3VyY2UgYW5kIHJlYWRpbmcKICAgICAgIyB0aGUgZnVsbCBzb3VyY2UgdXNpbmcgdGhhdC4KICAgICAgcmFuZ2VfdHJhY2tlciA9IHNlbGYuX3NvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcihOb25lLCBOb25lKQogICAgICByZWFkZXIgPSBzZWxmLl9zb3VyY2UucmVhZChyYW5nZV90cmFja2VyKQogICAgICBidW5kbGVzID0gX3JlYWRfdmFsdWVzX3RvX2J1bmRsZXMocmVhZGVyKQogICAgZWxzZToKICAgICAgd2l0aCBzZWxmLl9zb3VyY2UucmVhZGVyKCkgYXMgcmVhZGVyOgogICAgICAgIGJ1bmRsZXMgPSBfcmVhZF92YWx1ZXNfdG9fYnVuZGxlcyhyZWFkZXIpCgogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBidW5kbGVzLCBbXSwgTm9uZSwgTm9uZSkKCgpjbGFzcyBfV2F0ZXJtYXJrQ29udHJvbGxlckV2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIHRoZSBfV2F0ZXJtYXJrQ29udHJvbGxlciB0cmFuc2Zvcm0uCgogIFRoaXMgaXMgdXNlZCB0byBlbmFibGUgbXVsdGlwbGUgb3V0cHV0IHdhdGVybWFya3MgZm9yIHRoZSBUZXN0U3RyZWFtLgogICIiIgoKICAjIFRoZSBzdGF0ZSB0YWcgdXNlZCB0byBzdG9yZSB0aGUgd2F0ZXJtYXJrLgogIFdBVEVSTUFSS19UQUcgPSBfVmFsdWVTdGF0ZVRhZygnX1dhdGVybWFya0NvbnRyb2xsZXJFdmFsdWF0b3JfV2F0ZXJtYXJrX1RhZycpCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgIHNpZGVfaW5wdXRzKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHNlbGYudHJhbnNmb3JtID0gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybQogICAgc3VwZXIoX1dhdGVybWFya0NvbnRyb2xsZXJFdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKICAgIHNlbGYuX2luaXRfc3RhdGUoKQoKICBkZWYgX2luaXRfc3RhdGUoc2VsZik6CiAgICAiIiJHZXRzIGFuZCBzZXRzIHRoZSBpbml0aWFsIHN0YXRlLgoKICAgIFRoaXMgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB3YXRlcm1hcmsgaG9sZCBiZXR3ZWVuIGNhbGxzLgogICAgIiIiCiAgICB0cmFuc2Zvcm1fc3RhdGVzID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0Ll90cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzCiAgICBzdGF0ZSA9IHRyYW5zZm9ybV9zdGF0ZXNbc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtXQogICAgaWYgc2VsZi5XQVRFUk1BUktfVEFHIG5vdCBpbiBzdGF0ZToKICAgICAgd2F0ZXJtYXJrX3N0YXRlID0gSW5NZW1vcnlVbm1lcmdlZFN0YXRlKCkKICAgICAgd2F0ZXJtYXJrX3N0YXRlLnNldF9nbG9iYWxfc3RhdGUoc2VsZi5XQVRFUk1BUktfVEFHLCBNSU5fVElNRVNUQU1QKQogICAgICBzdGF0ZVtzZWxmLldBVEVSTUFSS19UQUddID0gd2F0ZXJtYXJrX3N0YXRlCiAgICBzZWxmLl9zdGF0ZSA9IHN0YXRlW3NlbGYuV0FURVJNQVJLX1RBR10KCiAgQHByb3BlcnR5CiAgZGVmIF93YXRlcm1hcmsoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fc3RhdGUuZ2V0X2dsb2JhbF9zdGF0ZShzZWxmLldBVEVSTUFSS19UQUcpCgogIEBfd2F0ZXJtYXJrLnNldHRlcgogIGRlZiBfd2F0ZXJtYXJrKHNlbGYsIHdhdGVybWFyayk6CiAgICBzZWxmLl9zdGF0ZS5zZXRfZ2xvYmFsX3N0YXRlKHNlbGYuV0FURVJNQVJLX1RBRywgd2F0ZXJtYXJrKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5idW5kbGVzID0gW10KCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgICMgSW4gb3JkZXIgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGJldHdlZW4gdGhlIHNjcmlwdCBhbmQgd2hhdAogICAgIyBmbG93cyB0aHJvdWdoIHRoZSBwaXBlbGluZSB0aGUgc2FtZSwgZW1pdCB0aGUgZWxlbWVudHMgaGVyZS4KICAgIGV2ZW50ID0gZWxlbWVudC52YWx1ZQogICAgaWYgaXNpbnN0YW5jZShldmVudCwgV2F0ZXJtYXJrRXZlbnQpOgogICAgICBzZWxmLl93YXRlcm1hcmsgPSBldmVudC5uZXdfd2F0ZXJtYXJrCiAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIEVsZW1lbnRFdmVudCk6CiAgICAgIG1haW5fb3V0cHV0ID0gbGlzdChzZWxmLl9vdXRwdXRzKVswXQogICAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShtYWluX291dHB1dCkKICAgICAgZm9yIHR2IGluIGV2ZW50LnRpbWVzdGFtcGVkX3ZhbHVlczoKICAgICAgICBidW5kbGUub3V0cHV0KAogICAgICAgICAgICBHbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKHR2LnZhbHVlLCB0aW1lc3RhbXA9dHYudGltZXN0YW1wKSkKICAgICAgc2VsZi5idW5kbGVzLmFwcGVuZChidW5kbGUpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgIyBUaGUgd2F0ZXJtYXJrIGhvbGQgd2Ugc2V0IGhlcmUgaXMgdGhlIHdheSB3ZSBhbGxvdyB0aGUgVGVzdFN0cmVhbSBldmVudHMKICAgICMgdG8gY29udHJvbCB0aGUgb3V0cHV0IHdhdGVybWFyay4KICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoCiAgICAgICAgc2VsZiwgc2VsZi5idW5kbGVzLCBbXSwgTm9uZSwge05vbmU6IHNlbGYuX3dhdGVybWFya30pCgoKY2xhc3MgX1Rlc3RTdHJlYW1FdmFsdWF0b3IoX1RyYW5zZm9ybUV2YWx1YXRvcik6CiAgIiIiVHJhbnNmb3JtRXZhbHVhdG9yIGZvciB0aGUgVGVzdFN0cmVhbSB0cmFuc2Zvcm0uCgogIFRoaXMgZXZhbHVhdG9yJ3MgcmVzcG9uc2liaWxpdHkgaXMgdG8gcmV0cmlldmUgdGhlIG5leHQgZXZlbnQgZnJvbSB0aGUKICBfVGVzdFN0cmVhbSBhbmQgZWl0aGVyOiBhZHZhbmNlIHRoZSBjbG9jaywgYWR2YW5jZSB0aGUgX1Rlc3RTdHJlYW0gd2F0ZXJtYXJrLAogIG9yIHBhc3MgdGhlIGV2ZW50IHRvIHRoZSBfV2F0ZXJtYXJrQ29udHJvbGxlci4KCiAgVGhlIF9XYXRlcm1hcmtDb250cm9sbGVyIGlzIGluIGNoYXJnZSBvZiBlbWl0dGluZyB0aGUgZWxlbWVudHMgdG8gdGhlCiAgZG93bnN0cmVhbSBjb25zdW1lcnMgYW5kIHNldHRpbmcgaXRzIG93biBvdXRwdXQgd2F0ZXJtYXJrLgogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgIHNpZGVfaW5wdXRzKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHNlbGYudGVzdF9zdHJlYW0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBzdXBlcihfVGVzdFN0cmVhbUV2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5jdXJyZW50X2luZGV4ID0gMAogICAgc2VsZi5idW5kbGVzID0gW10KICAgIHNlbGYud2F0ZXJtYXJrID0gTUlOX1RJTUVTVEFNUAoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgIyBUaGUgaW5kZXggaW50byB0aGUgVGVzdFN0cmVhbSBsaXN0IG9mIGV2ZW50cy4KICAgIHNlbGYuY3VycmVudF9pbmRleCA9IGVsZW1lbnQudmFsdWUKCiAgICAjIFRoZSB3YXRlcm1hcmsgb2YgdGhlIF9UZXN0U3RyZWFtIHRyYW5zZm9ybSBpdHNlbGYuCiAgICBzZWxmLndhdGVybWFyayA9IGVsZW1lbnQudGltZXN0YW1wCgogICAgIyBXZSBjYW4gZWl0aGVyIGhhdmUgdGhlIF9UZXN0U3RyZWFtIG9yIHRoZSBfV2F0ZXJtYXJrQ29udHJvbGxlciB0byBlbWl0CiAgICAjIHRoZSBlbGVtZW50cy4gV2UgY2hvc2UgdG8gZW1pdCBpbiB0aGUgX1dhdGVybWFya0NvbnRyb2xsZXIgc28gdGhhdCB0aGUKICAgICMgZWxlbWVudCBpcyBlbWl0dGVkIGF0IHRoZSBjb3JyZWN0IHdhdGVybWFyayB2YWx1ZS4KICAgIGZvciBldmVudCBpbiBzZWxmLnRlc3Rfc3RyZWFtLmV2ZW50cyhzZWxmLmN1cnJlbnRfaW5kZXgpOgogICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCAoRWxlbWVudEV2ZW50LCBXYXRlcm1hcmtFdmVudCkpOgogICAgICAgICMgVGhlIFdBVEVSTUFSS19DT05UUk9MX1RBRyBpcyB1c2VkIHRvIGhvbGQgdGhlIF9UZXN0U3RyZWFtJ3MKICAgICAgICAjIHdhdGVybWFyayB0byAtaW5mLCB0aGVuICtpbmYtMSwgdGhlbiAraW5mLiBUaGlzIHdhdGVybWFyayBwcm9ncmVzc2lvbgogICAgICAgICMgaXMgdWx0aW1hdGVseSB1c2VkIHRvIHNldCB1cCB0aGUgcHJvcGVyIGhvbGRzIHRvIGFsbG93IHRoZQogICAgICAgICMgX1dhdGVybWFya0NvbnRyb2xsZXJzIHRvIGNvbnRyb2wgdGhlaXIgb3duIG91dHB1dCB3YXRlcm1hcmtzLgogICAgICAgIGlmIGV2ZW50LnRhZyA9PSBfVGVzdFN0cmVhbS5XQVRFUk1BUktfQ09OVFJPTF9UQUc6CiAgICAgICAgICBzZWxmLndhdGVybWFyayA9IGV2ZW50Lm5ld193YXRlcm1hcmsKICAgICAgICBlbHNlOgogICAgICAgICAgbWFpbl9vdXRwdXQgPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCiAgICAgICAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShtYWluX291dHB1dCkKICAgICAgICAgIGJ1bmRsZS5vdXRwdXQoR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShldmVudCkpCiAgICAgICAgICBzZWxmLmJ1bmRsZXMuYXBwZW5kKGJ1bmRsZSkKICAgICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBQcm9jZXNzaW5nVGltZUV2ZW50KToKICAgICAgICBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuX3dhdGVybWFya19tYW5hZ2VyLl9jbG9jay5hZHZhbmNlX3RpbWUoCiAgICAgICAgICAgIGV2ZW50LmFkdmFuY2VfYnkpCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBUZXN0U3RyZWFtIGV2ZW50OiAlcy4nICUgZXZlbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgdW5wcm9jZXNzZWRfYnVuZGxlcyA9IFtdCiAgICBuZXh0X2luZGV4ID0gc2VsZi50ZXN0X3N0cmVhbS5uZXh0KHNlbGYuY3VycmVudF9pbmRleCkKICAgIGlmIG5vdCBzZWxmLnRlc3Rfc3RyZWFtLmVuZChuZXh0X2luZGV4KToKICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUoCiAgICAgICAgICBwdmFsdWUuUEJlZ2luKHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0ucGlwZWxpbmUpKQogICAgICB1bnByb2Nlc3NlZF9idW5kbGUuYWRkKAogICAgICAgICAgR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShuZXh0X2luZGV4LCB0aW1lc3RhbXA9c2VsZi53YXRlcm1hcmspKQogICAgICB1bnByb2Nlc3NlZF9idW5kbGVzLmFwcGVuZCh1bnByb2Nlc3NlZF9idW5kbGUpCgogICAgIyBSZXR1cm5pbmcgdGhlIHdhdGVybWFyayBpbiB0aGUgZGljdCBoZXJlIGlzIHVzZWQgYXMgYSB3YXRlcm1hcmsgaG9sZC4KICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoCiAgICAgICAgc2VsZiwgc2VsZi5idW5kbGVzLCB1bnByb2Nlc3NlZF9idW5kbGVzLCBOb25lLCB7Tm9uZTogc2VsZi53YXRlcm1hcmt9KQoKCmNsYXNzIF9QdWJTdWJSZWFkRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgUHViU3ViIHJlYWQuIiIiCgogICMgQSBtYXBwaW5nIG9mIHRyYW5zZm9ybSB0byBfUHViU3ViU3Vic2NyaXB0aW9uV3JhcHBlci4KICAjIFRPRE8oQkVBTS03NzUwKTogUHJldmVudHMgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIHBpcGVsaW5lIGluc3RhbmNlcy4KICBfc3Vic2NyaXB0aW9uX2NhY2hlID0ge30gICMgdHlwZTogRGljdFtBcHBsaWVkUFRyYW5zZm9ybSwgc3RyXQoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICBzaWRlX2lucHV0cyk6CiAgICBhc3NlcnQgbm90IHNpZGVfaW5wdXRzCiAgICBzdXBlcihfUHViU3ViUmVhZEV2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzKQoKICAgIHNlbGYuc291cmNlID0gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5fc291cmNlICAjIHR5cGU6IF9QdWJTdWJTb3VyY2UKICAgIGlmIHNlbGYuc291cmNlLmlkX2xhYmVsOgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICAgJ0RpcmVjdFJ1bm5lcjogaWRfbGFiZWwgaXMgbm90IHN1cHBvcnRlZCBmb3IgUHViU3ViIHJlYWRzJykKCiAgICBzdWJfcHJvamVjdCA9IE5vbmUKICAgIGlmIGhhc2F0dHIoc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LCAncGlwZWxpbmVfb3B0aW9ucycpOgogICAgICBmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCiAgICAgIHN1Yl9wcm9qZWN0ID0gKAogICAgICAgICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LnBpcGVsaW5lX29wdGlvbnMudmlld19hcygKICAgICAgICAgICAgICBHb29nbGVDbG91ZE9wdGlvbnMpLnByb2plY3QpCiAgICBpZiBub3Qgc3ViX3Byb2plY3Q6CiAgICAgIHN1Yl9wcm9qZWN0ID0gc2VsZi5zb3VyY2UucHJvamVjdAoKICAgIHNlbGYuX3N1Yl9uYW1lID0gc2VsZi5nZXRfc3Vic2NyaXB0aW9uKAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICBzZWxmLnNvdXJjZS5wcm9qZWN0LAogICAgICAgIHNlbGYuc291cmNlLnRvcGljX25hbWUsCiAgICAgICAgc3ViX3Byb2plY3QsCiAgICAgICAgc2VsZi5zb3VyY2Uuc3Vic2NyaXB0aW9uX25hbWUpCgogIEBjbGFzc21ldGhvZAogIGRlZiBnZXRfc3Vic2NyaXB0aW9uKAogICAgICBjbHMsIHRyYW5zZm9ybSwgcHJvamVjdCwgc2hvcnRfdG9waWNfbmFtZSwgc3ViX3Byb2plY3QsIHNob3J0X3N1Yl9uYW1lKToKICAgIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCBwdWJzdWIKCiAgICBpZiBzaG9ydF9zdWJfbmFtZToKICAgICAgcmV0dXJuIHB1YnN1Yi5TdWJzY3JpYmVyQ2xpZW50LnN1YnNjcmlwdGlvbl9wYXRoKHByb2plY3QsIHNob3J0X3N1Yl9uYW1lKQoKICAgIGlmIHRyYW5zZm9ybSBpbiBjbHMuX3N1YnNjcmlwdGlvbl9jYWNoZToKICAgICAgcmV0dXJuIGNscy5fc3Vic2NyaXB0aW9uX2NhY2hlW3RyYW5zZm9ybV0KCiAgICBzdWJfY2xpZW50ID0gcHVic3ViLlN1YnNjcmliZXJDbGllbnQoKQogICAgc3ViX25hbWUgPSBzdWJfY2xpZW50LnN1YnNjcmlwdGlvbl9wYXRoKAogICAgICAgIHN1Yl9wcm9qZWN0LAogICAgICAgICdiZWFtXyVkXyV4JyAlIChpbnQodGltZS50aW1lKCkpLCByYW5kb20ucmFuZHJhbmdlKDEgPDwgMzIpKSkKICAgIHRvcGljX25hbWUgPSBzdWJfY2xpZW50LnRvcGljX3BhdGgocHJvamVjdCwgc2hvcnRfdG9waWNfbmFtZSkKICAgIHN1Yl9jbGllbnQuY3JlYXRlX3N1YnNjcmlwdGlvbihzdWJfbmFtZSwgdG9waWNfbmFtZSkKICAgIGF0ZXhpdC5yZWdpc3RlcihzdWJfY2xpZW50LmRlbGV0ZV9zdWJzY3JpcHRpb24sIHN1Yl9uYW1lKQogICAgY2xzLl9zdWJzY3JpcHRpb25fY2FjaGVbdHJhbnNmb3JtXSA9IHN1Yl9uYW1lCiAgICByZXR1cm4gY2xzLl9zdWJzY3JpcHRpb25fY2FjaGVbdHJhbnNmb3JtXQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgcGFzcwoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgcGFzcwoKICBkZWYgX3JlYWRfZnJvbV9wdWJzdWIoc2VsZiwgdGltZXN0YW1wX2F0dHJpYnV0ZSk6CiAgICAjIHR5cGU6ICguLi4pIC0+IExpc3RbVHVwbGVbVGltZXN0YW1wLCBQdWJzdWJNZXNzYWdlXV0KICAgIGZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YiBpbXBvcnQgUHVic3ViTWVzc2FnZQogICAgZnJvbSBnb29nbGUuY2xvdWQgaW1wb3J0IHB1YnN1YgoKICAgIGRlZiBfZ2V0X2VsZW1lbnQobWVzc2FnZSk6CiAgICAgIHBhcnNlZF9tZXNzYWdlID0gUHVic3ViTWVzc2FnZS5fZnJvbV9tZXNzYWdlKG1lc3NhZ2UpCiAgICAgIGlmICh0aW1lc3RhbXBfYXR0cmlidXRlIGFuZAogICAgICAgICAgdGltZXN0YW1wX2F0dHJpYnV0ZSBpbiBwYXJzZWRfbWVzc2FnZS5hdHRyaWJ1dGVzKToKICAgICAgICByZmMzMzM5X29yX21pbGxpID0gcGFyc2VkX21lc3NhZ2UuYXR0cmlidXRlc1t0aW1lc3RhbXBfYXR0cmlidXRlXQogICAgICAgIHRyeToKICAgICAgICAgIHRpbWVzdGFtcCA9IFRpbWVzdGFtcChtaWNyb3M9aW50KHJmYzMzMzlfb3JfbWlsbGkpICogMTAwMCkKICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgIHRyeToKICAgICAgICAgICAgdGltZXN0YW1wID0gVGltZXN0YW1wLmZyb21fcmZjMzMzOShyZmMzMzM5X29yX21pbGxpKQogICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQmFkIHRpbWVzdGFtcCB2YWx1ZTogJXMnICUgZSkKICAgICAgZWxzZToKICAgICAgICB0aW1lc3RhbXAgPSBUaW1lc3RhbXAoCiAgICAgICAgICAgIG1lc3NhZ2UucHVibGlzaF90aW1lLnNlY29uZHMsIG1lc3NhZ2UucHVibGlzaF90aW1lLm5hbm9zIC8vIDEwMDApCgogICAgICByZXR1cm4gdGltZXN0YW1wLCBwYXJzZWRfbWVzc2FnZQoKICAgICMgQmVjYXVzZSBvZiB0aGUgQXV0b0Fjaywgd2UgYXJlIG5vdCBhYmxlIHRvIHJlcmVhZCBtZXNzYWdlcyBpZiB0aGlzCiAgICAjIGV2YWx1YXRvciBmYWlscyB3aXRoIGFuIGV4Y2VwdGlvbiBiZWZvcmUgZW1pdHRpbmcgYSBidW5kbGUuIEhvd2V2ZXIsCiAgICAjIHRoZSBEaXJlY3RSdW5uZXIgY3VycmVudGx5IGRvZXNuJ3QgcmV0cnkgd29yayBpdGVtcyBhbnl3YXksIHNvIHRoZQogICAgIyBwaXBlbGluZSB3b3VsZCBlbnRlciBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgb24gYW55IGVycm9yLgogICAgc3ViX2NsaWVudCA9IHB1YnN1Yi5TdWJzY3JpYmVyQ2xpZW50KCkKICAgIHRyeToKICAgICAgcmVzcG9uc2UgPSBzdWJfY2xpZW50LnB1bGwoCiAgICAgICAgICBzZWxmLl9zdWJfbmFtZSwgbWF4X21lc3NhZ2VzPTEwLCByZXR1cm5faW1tZWRpYXRlbHk9VHJ1ZSkKICAgICAgcmVzdWx0cyA9IFtfZ2V0X2VsZW1lbnQocm0ubWVzc2FnZSkgZm9yIHJtIGluIHJlc3BvbnNlLnJlY2VpdmVkX21lc3NhZ2VzXQogICAgICBhY2tfaWRzID0gW3JtLmFja19pZCBmb3Igcm0gaW4gcmVzcG9uc2UucmVjZWl2ZWRfbWVzc2FnZXNdCiAgICAgIGlmIGFja19pZHM6CiAgICAgICAgc3ViX2NsaWVudC5hY2tub3dsZWRnZShzZWxmLl9zdWJfbmFtZSwgYWNrX2lkcykKICAgIGZpbmFsbHk6CiAgICAgIHN1Yl9jbGllbnQuYXBpLnRyYW5zcG9ydC5jaGFubmVsLmNsb3NlKCkKCiAgICByZXR1cm4gcmVzdWx0cwoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgICMgdHlwZTogKCkgLT4gVHJhbnNmb3JtUmVzdWx0CiAgICBkYXRhID0gc2VsZi5fcmVhZF9mcm9tX3B1YnN1YihzZWxmLnNvdXJjZS50aW1lc3RhbXBfYXR0cmlidXRlKQogICAgaWYgZGF0YToKICAgICAgb3V0cHV0X3Bjb2xsZWN0aW9uID0gbGlzdChzZWxmLl9vdXRwdXRzKVswXQogICAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24pCiAgICAgICMgVE9ETyhjY3kpOiBSZXNwZWN0IHRoZSBQdWJTdWIgc291cmNlJ3MgaWRfbGFiZWwgZmllbGQuCiAgICAgIGZvciB0aW1lc3RhbXAsIG1lc3NhZ2UgaW4gZGF0YToKICAgICAgICBpZiBzZWxmLnNvdXJjZS53aXRoX2F0dHJpYnV0ZXM6CiAgICAgICAgICBlbGVtZW50ID0gbWVzc2FnZQogICAgICAgIGVsc2U6CiAgICAgICAgICBlbGVtZW50ID0gbWVzc2FnZS5kYXRhCiAgICAgICAgYnVuZGxlLm91dHB1dCgKICAgICAgICAgICAgR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShlbGVtZW50LCB0aW1lc3RhbXA9dGltZXN0YW1wKSkKICAgICAgYnVuZGxlcyA9IFtidW5kbGVdCiAgICBlbHNlOgogICAgICBidW5kbGVzID0gW10KICAgIGFzc2VydCBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtIGlzIG5vdCBOb25lCiAgICBpZiBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uaW5wdXRzOgogICAgICBpbnB1dF9wdmFsdWUgPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0uaW5wdXRzWwogICAgICAgICAgMF0gICMgdHlwZTogVW5pb25bcHZhbHVlLlBCZWdpbiwgcHZhbHVlLlBDb2xsZWN0aW9uXQogICAgZWxzZToKICAgICAgaW5wdXRfcHZhbHVlID0gcHZhbHVlLlBCZWdpbihzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtLnBpcGVsaW5lKQogICAgdW5wcm9jZXNzZWRfYnVuZGxlID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0LmNyZWF0ZV9idW5kbGUoaW5wdXRfcHZhbHVlKQoKICAgICMgVE9ETyh1ZGltKTogQ29ycmVjdCB2YWx1ZSBmb3Igd2F0ZXJtYXJrIGhvbGQuCiAgICByZXR1cm4gVHJhbnNmb3JtUmVzdWx0KAogICAgICAgIHNlbGYsCiAgICAgICAgYnVuZGxlcywgW3VucHJvY2Vzc2VkX2J1bmRsZV0sCiAgICAgICAgTm9uZSwge05vbmU6IFRpbWVzdGFtcC5vZih0aW1lLnRpbWUoKSl9KQoKCmNsYXNzIF9GbGF0dGVuRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgRmxhdHRlbiB0cmFuc2Zvcm0uIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBldmFsdWF0aW9uX2NvbnRleHQsCiAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgc2lkZV9pbnB1dHMpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc3VwZXIoX0ZsYXR0ZW5FdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIGFzc2VydCBsZW4oc2VsZi5fb3V0cHV0cykgPT0gMQogICAgb3V0cHV0X3Bjb2xsZWN0aW9uID0gbGlzdChzZWxmLl9vdXRwdXRzKVswXQogICAgc2VsZi5idW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24pCgogIGRlZiBwcm9jZXNzX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLmJ1bmRsZS5vdXRwdXQoZWxlbWVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBidW5kbGVzID0gW3NlbGYuYnVuZGxlXQogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBidW5kbGVzLCBbXSwgTm9uZSwgTm9uZSkKCgpjbGFzcyBfSW1wdWxzZUV2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIEltcHVsc2UgdHJhbnNmb3JtLiIiIgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgYXNzZXJ0IGxlbihzZWxmLl9vdXRwdXRzKSA9PSAxCiAgICBvdXRwdXRfcGNvbGxlY3Rpb24gPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCiAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShvdXRwdXRfcGNvbGxlY3Rpb24pCiAgICBidW5kbGUub3V0cHV0KEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoYicnKSkKICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoc2VsZiwgW2J1bmRsZV0sIFtdLCBOb25lLCBOb25lKQoKCmNsYXNzIF9UYWdnZWRSZWNlaXZlcnMoZGljdCk6CiAgIiIiUmVjZWl2ZWQgUGFyRG8gb3V0cHV0IGFuZCByZWRpcmVjdCB0byB0aGUgYXNzb2NpYXRlZCBvdXRwdXQgYnVuZGxlLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBldmFsdWF0aW9uX2NvbnRleHQpOgogICAgc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0ID0gZXZhbHVhdGlvbl9jb250ZXh0CiAgICBzZWxmLl9udWxsX3JlY2VpdmVyID0gTm9uZQogICAgc3VwZXIoX1RhZ2dlZFJlY2VpdmVycywgc2VsZikuX19pbml0X18oKQoKICBjbGFzcyBOdWxsUmVjZWl2ZXIoY29tbW9uLlJlY2VpdmVyKToKICAgICIiIklnbm9yZXMgdW5kZWNsYXJlZCBvdXRwdXRzLCBkZWZhdWx0IGV4ZWN1dGlvbiBtb2RlLiIiIgogICAgZGVmIHJlY2VpdmUoc2VsZiwgZWxlbWVudCk6CiAgICAgICMgdHlwZTogKFdpbmRvd2VkVmFsdWUpIC0+IE5vbmUKICAgICAgcGFzcwoKICBjbGFzcyBfSW5NZW1vcnlSZWNlaXZlcihjb21tb24uUmVjZWl2ZXIpOgogICAgIiIiQnVmZmVycyB1bmRlY2xhcmVkIG91dHB1dHMgdG8gdGhlIGdpdmVuIGRpY3Rpb25hcnkuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgdGFyZ2V0LCB0YWcpOgogICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKICAgICAgc2VsZi5fdGFnID0gdGFnCgogICAgZGVmIHJlY2VpdmUoc2VsZiwgZWxlbWVudCk6CiAgICAgICMgdHlwZTogKFdpbmRvd2VkVmFsdWUpIC0+IE5vbmUKICAgICAgc2VsZi5fdGFyZ2V0W3NlbGYuX3RhZ10uYXBwZW5kKGVsZW1lbnQpCgogIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgogICAgaWYgbm90IHNlbGYuX251bGxfcmVjZWl2ZXI6CiAgICAgIHNlbGYuX251bGxfcmVjZWl2ZXIgPSBfVGFnZ2VkUmVjZWl2ZXJzLk51bGxSZWNlaXZlcigpCiAgICByZXR1cm4gc2VsZi5fbnVsbF9yZWNlaXZlcgoKCmNsYXNzIF9QYXJEb0V2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIFBhckRvIHRyYW5zZm9ybS4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwgIyB0eXBlOiBFdmFsdWF0aW9uQ29udGV4dAogICAgICAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sICAjIHR5cGU6IEFwcGxpZWRQVHJhbnNmb3JtCiAgICAgICAgICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgICAgICAgIHNpZGVfaW5wdXRzLAogICAgICAgICAgICAgICBwZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3Q9VHJ1ZQogICAgICAgICAgICAgICk6CiAgICBzdXBlcihfUGFyRG9FdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKICAgICMgVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIFNERiBpbXBsZW1lbnRhdGlvbi4gU0RGIGltcGxlbWVudGF0aW9uIGFkZHMgc3RhdGUKICAgICMgdG8gdGhlIFNERiB0aGF0IGlzIG5vdCBwaWNrbGFibGUuCiAgICBzZWxmLl9wZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3QgPSBwZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3QKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHRyYW5zZm9ybSA9IHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS50cmFuc2Zvcm0KCiAgICBzZWxmLl90YWdnZWRfcmVjZWl2ZXJzID0gX1RhZ2dlZFJlY2VpdmVycyhzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQpCiAgICBmb3Igb3V0cHV0X3RhZyBpbiBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0ub3V0cHV0czoKICAgICAgb3V0cHV0X3Bjb2xsZWN0aW9uID0gcHZhbHVlLlBDb2xsZWN0aW9uKE5vbmUsIHRhZz1vdXRwdXRfdGFnKQogICAgICBvdXRwdXRfcGNvbGxlY3Rpb24ucHJvZHVjZXIgPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0KICAgICAgc2VsZi5fdGFnZ2VkX3JlY2VpdmVyc1tvdXRwdXRfdGFnXSA9ICgKICAgICAgICAgIHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5jcmVhdGVfYnVuZGxlKG91dHB1dF9wY29sbGVjdGlvbikpCiAgICAgIHNlbGYuX3RhZ2dlZF9yZWNlaXZlcnNbb3V0cHV0X3RhZ10udGFnID0gb3V0cHV0X3RhZwoKICAgIHNlbGYuX2NvdW50ZXJfZmFjdG9yeSA9IGNvdW50ZXJzLkNvdW50ZXJGYWN0b3J5KCkKCiAgICAjIFRPRE8oYWFsdGF5KTogQ29uc2lkZXIgc3RvcmluZyB0aGUgc2VyaWFsaXplZCBmb3JtIGFzIGFuIG9wdGltaXphdGlvbi4KICAgIGRvZm4gPSAoCiAgICAgICAgcGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHRyYW5zZm9ybS5kb2ZuKSkKICAgICAgICBpZiBzZWxmLl9wZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3QgZWxzZSB0cmFuc2Zvcm0uZG9mbikKCiAgICBhcmdzID0gdHJhbnNmb3JtLmFyZ3MgaWYgaGFzYXR0cih0cmFuc2Zvcm0sICdhcmdzJykgZWxzZSBbXQogICAga3dhcmdzID0gdHJhbnNmb3JtLmt3YXJncyBpZiBoYXNhdHRyKHRyYW5zZm9ybSwgJ2t3YXJncycpIGVsc2Uge30KCiAgICBzZWxmLnVzZXJfc3RhdGVfY29udGV4dCA9IE5vbmUKICAgIHNlbGYudXNlcl90aW1lcl9tYXAgPSB7fQogICAgaWYgaXNfc3RhdGVmdWxfZG9mbihkb2ZuKToKICAgICAga3ZfdHlwZV9oaW50ID0gc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLmlucHV0c1swXS5lbGVtZW50X3R5cGUKICAgICAgaWYga3ZfdHlwZV9oaW50IGFuZCBrdl90eXBlX2hpbnQgIT0gQW55OgogICAgICAgIGNvZGVyID0gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2Rlcihrdl90eXBlX2hpbnQpCiAgICAgICAgc2VsZi5rZXlfY29kZXIgPSBjb2Rlci5rZXlfY29kZXIoKQogICAgICBlbHNlOgogICAgICAgIHNlbGYua2V5X2NvZGVyID0gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihBbnkpCgogICAgICBzZWxmLnVzZXJfc3RhdGVfY29udGV4dCA9IERpcmVjdFVzZXJTdGF0ZUNvbnRleHQoCiAgICAgICAgICBzZWxmLl9zdGVwX2NvbnRleHQsIGRvZm4sIHNlbGYua2V5X2NvZGVyKQogICAgICBfLCBhbGxfdGltZXJfc3BlY3MgPSBnZXRfZG9mbl9zcGVjcyhkb2ZuKQogICAgICBmb3IgdGltZXJfc3BlYyBpbiBhbGxfdGltZXJfc3BlY3M6CiAgICAgICAgc2VsZi51c2VyX3RpbWVyX21hcFsndXNlci8lcycgJSB0aW1lcl9zcGVjLm5hbWVdID0gdGltZXJfc3BlYwoKICAgIHNlbGYucnVubmVyID0gRG9GblJ1bm5lcigKICAgICAgICBkb2ZuLAogICAgICAgIGFyZ3MsCiAgICAgICAga3dhcmdzLAogICAgICAgIHNlbGYuX3NpZGVfaW5wdXRzLAogICAgICAgIHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHNbMF0ud2luZG93aW5nLAogICAgICAgIHRhZ2dlZF9yZWNlaXZlcnM9c2VsZi5fdGFnZ2VkX3JlY2VpdmVycywKICAgICAgICBzdGVwX25hbWU9c2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLmZ1bGxfbGFiZWwsCiAgICAgICAgc3RhdGU9RG9GblN0YXRlKHNlbGYuX2NvdW50ZXJfZmFjdG9yeSksCiAgICAgICAgdXNlcl9zdGF0ZV9jb250ZXh0PXNlbGYudXNlcl9zdGF0ZV9jb250ZXh0KQogICAgc2VsZi5ydW5uZXIuc3RhcnQoKQoKICBkZWYgcHJvY2Vzc190aW1lcihzZWxmLCB0aW1lcl9maXJpbmcpOgogICAgaWYgdGltZXJfZmlyaW5nLm5hbWUgbm90IGluIHNlbGYudXNlcl90aW1lcl9tYXA6CiAgICAgIF9MT0dHRVIud2FybmluZygnVW5rbm93biB0aW1lciBmaXJlZDogJXMnLCB0aW1lcl9maXJpbmcpCiAgICB0aW1lcl9zcGVjID0gc2VsZi51c2VyX3RpbWVyX21hcFt0aW1lcl9maXJpbmcubmFtZV0KICAgIHNlbGYucnVubmVyLnByb2Nlc3NfdXNlcl90aW1lcigKICAgICAgICB0aW1lcl9zcGVjLAogICAgICAgIHNlbGYua2V5X2NvZGVyLmRlY29kZSh0aW1lcl9maXJpbmcuZW5jb2RlZF9rZXkpLAogICAgICAgIHRpbWVyX2ZpcmluZy53aW5kb3csCiAgICAgICAgdGltZXJfZmlyaW5nLnRpbWVzdGFtcCkKCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgIHNlbGYucnVubmVyLnByb2Nlc3MoZWxlbWVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBzZWxmLnJ1bm5lci5maW5pc2goKQogICAgYnVuZGxlcyA9IGxpc3Qoc2VsZi5fdGFnZ2VkX3JlY2VpdmVycy52YWx1ZXMoKSkKICAgIHJlc3VsdF9jb3VudGVycyA9IHNlbGYuX2NvdW50ZXJfZmFjdG9yeS5nZXRfY291bnRlcnMoKQogICAgaWYgc2VsZi51c2VyX3N0YXRlX2NvbnRleHQ6CiAgICAgIHNlbGYudXNlcl9zdGF0ZV9jb250ZXh0LmNvbW1pdCgpCiAgICByZXR1cm4gVHJhbnNmb3JtUmVzdWx0KHNlbGYsIGJ1bmRsZXMsIFtdLCByZXN1bHRfY291bnRlcnMsIE5vbmUpCgoKY2xhc3MgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgX0dyb3VwQnlLZXlPbmx5IHRyYW5zZm9ybS4iIiIKCiAgTUFYX0VMRU1FTlRfUEVSX0JVTkRMRSA9IE5vbmUKICBFTEVNRU5UU19UQUcgPSBfTGlzdFN0YXRlVGFnKCdlbGVtZW50cycpCiAgQ09NUExFVElPTl9UQUcgPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygnY29tcGxldGVkJywgYW55KQoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICBzaWRlX2lucHV0cyk6CiAgICBhc3NlcnQgbm90IHNpZGVfaW5wdXRzCiAgICBzdXBlcihfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKCiAgZGVmIF9pc19maW5hbF9idW5kbGUoc2VsZik6CiAgICByZXR1cm4gKAogICAgICAgIHNlbGYuX2V4ZWN1dGlvbl9jb250ZXh0LndhdGVybWFya3MuaW5wdXRfd2F0ZXJtYXJrID09CiAgICAgICAgV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORikKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuZ2xvYmFsX3N0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShOb25lKQoKICAgIGFzc2VydCBsZW4oc2VsZi5fb3V0cHV0cykgPT0gMQogICAgc2VsZi5vdXRwdXRfcGNvbGxlY3Rpb24gPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCgogICAgIyBUaGUgb3V0cHV0IHR5cGUgb2YgYSBHcm91cEJ5S2V5IHdpbGwgYmUgVHVwbGVbQW55LCBBbnldIG9yIG1vcmUgc3BlY2lmaWMuCiAgICAjIFRPRE8oQkVBTS0yNzE3KTogSW5mZXIgY29kZXJzIGVhcmxpZXIuCiAgICBrdl90eXBlX2hpbnQgPSAoCiAgICAgICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLm91dHB1dHNbTm9uZV0uZWxlbWVudF90eXBlIG9yCiAgICAgICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5nZXRfdHlwZV9oaW50cygpLmlucHV0X3R5cGVzWzBdWzBdKQogICAgc2VsZi5rZXlfY29kZXIgPSBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKGt2X3R5cGVfaGludC50dXBsZV90eXBlc1swXSkKCiAgZGVmIHByb2Nlc3NfdGltZXIoc2VsZiwgdGltZXJfZmlyaW5nKToKICAgICMgV2UgZG8gbm90IG5lZWQgdG8gZW1pdCBhIEtleWVkV29ya0l0ZW0gdG8gcHJvY2Vzc19lbGVtZW50KCkuCiAgICBwYXNzCgogIGRlZiBwcm9jZXNzX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICBhc3NlcnQgbm90IHNlbGYuZ2xvYmFsX3N0YXRlLmdldF9zdGF0ZSgKICAgICAgICBOb25lLCBfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuQ09NUExFVElPTl9UQUcpCiAgICBpZiAoaXNpbnN0YW5jZShlbGVtZW50LCBXaW5kb3dlZFZhbHVlKSBhbmQKICAgICAgICBpc2luc3RhbmNlKGVsZW1lbnQudmFsdWUsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKSBhbmQKICAgICAgICBsZW4oZWxlbWVudC52YWx1ZSkgPT0gMik6CiAgICAgIGssIHYgPSBlbGVtZW50LnZhbHVlCiAgICAgIGVuY29kZWRfayA9IHNlbGYua2V5X2NvZGVyLmVuY29kZShrKQogICAgICBzdGF0ZSA9IHNlbGYuX3N0ZXBfY29udGV4dC5nZXRfa2V5ZWRfc3RhdGUoZW5jb2RlZF9rKQogICAgICBzdGF0ZS5hZGRfc3RhdGUoTm9uZSwgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLkVMRU1FTlRTX1RBRywgdikKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgJ0lucHV0IHRvIF9Hcm91cEJ5S2V5T25seSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gb2YgJwogICAgICAgICAgJ3dpbmRvd2VkIGtleS12YWx1ZSBwYWlycy4gSW5zdGVhZCByZWNlaXZlZDogJXIuJyAlIGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgaWYgc2VsZi5faXNfZmluYWxfYnVuZGxlKCk6CiAgICAgIGlmIHNlbGYuZ2xvYmFsX3N0YXRlLmdldF9zdGF0ZShOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLkNPTVBMRVRJT05fVEFHKToKICAgICAgICAjIElnbm9yZSBlbXB0eSBidW5kbGVzIGFmdGVyIGVtaXR0aW5nIG91dHB1dC4gKFRoaXMgbWF5IGhhcHBlbiBiZWNhdXNlCiAgICAgICAgIyBlbXB0eSBidW5kbGVzIGRvIG5vdCBhZmZlY3QgaW5wdXQgd2F0ZXJtYXJrcy4pCiAgICAgICAgYnVuZGxlcyA9IFtdCiAgICAgIGVsc2U6CiAgICAgICAgZ2JrX3Jlc3VsdCA9IFtdCiAgICAgICAgIyBUT0RPKGNjeSk6IHBlcmhhcHMgd2UgY2FuIGNsZWFuIHRoaXMgdXAgdG8gbm90IHVzZSB0aGlzCiAgICAgICAgIyBpbnRlcm5hbCBhdHRyaWJ1dGUgb2YgdGhlIERpcmVjdFN0ZXBDb250ZXh0LgogICAgICAgIGZvciBlbmNvZGVkX2sgaW4gc2VsZi5fc3RlcF9jb250ZXh0LmV4aXN0aW5nX2tleWVkX3N0YXRlOgogICAgICAgICAgIyBJZ25vcmUgZ2xvYmFsIHN0YXRlLgogICAgICAgICAgaWYgZW5jb2RlZF9rIGlzIE5vbmU6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICBrID0gc2VsZi5rZXlfY29kZXIuZGVjb2RlKGVuY29kZWRfaykKICAgICAgICAgIHN0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShlbmNvZGVkX2spCiAgICAgICAgICB2cyA9IHN0YXRlLmdldF9zdGF0ZShOb25lLCBfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuRUxFTUVOVFNfVEFHKQogICAgICAgICAgZ2JrX3Jlc3VsdC5hcHBlbmQoR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZSgoaywgdnMpKSkKCiAgICAgICAgZGVmIGxlbl9lbGVtZW50X2ZuKGVsZW1lbnQpOgogICAgICAgICAgXywgdiA9IGVsZW1lbnQudmFsdWUKICAgICAgICAgIHJldHVybiBsZW4odikKCiAgICAgICAgYnVuZGxlcyA9IHNlbGYuX3NwbGl0X2xpc3RfaW50b19idW5kbGVzKAogICAgICAgICAgICBzZWxmLm91dHB1dF9wY29sbGVjdGlvbiwKICAgICAgICAgICAgZ2JrX3Jlc3VsdCwKICAgICAgICAgICAgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLk1BWF9FTEVNRU5UX1BFUl9CVU5ETEUsCiAgICAgICAgICAgIGxlbl9lbGVtZW50X2ZuKQoKICAgICAgc2VsZi5nbG9iYWxfc3RhdGUuYWRkX3N0YXRlKAogICAgICAgICAgTm9uZSwgX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLkNPTVBMRVRJT05fVEFHLCBUcnVlKQogICAgICBob2xkID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORgogICAgZWxzZToKICAgICAgYnVuZGxlcyA9IFtdCiAgICAgIGhvbGQgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19ORUdfSU5GCiAgICAgIHNlbGYuZ2xvYmFsX3N0YXRlLnNldF90aW1lcigKICAgICAgICAgIE5vbmUsICcnLCBUaW1lRG9tYWluLldBVEVSTUFSSywgV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORikKCiAgICByZXR1cm4gVHJhbnNmb3JtUmVzdWx0KHNlbGYsIGJ1bmRsZXMsIFtdLCBOb25lLCB7Tm9uZTogaG9sZH0pCgoKY2xhc3MgX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5IHRyYW5zZm9ybS4KCiAgVGhlIF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvciBidWZmZXJzIGVsZW1lbnRzIHVudGlsIGl0cyBpbnB1dCB3YXRlcm1hcmsgZ29lcwogIHRvIGluZmluaXR5LCB3aGljaCBpcyBzdWl0YWJsZSBmb3IgYmF0Y2ggbW9kZSBleGVjdXRpb24uIER1cmluZyBzdHJlYW1pbmcKICBtb2RlIGV4ZWN1dGlvbiwgd2UgZW1pdCBlYWNoIGJ1bmRsZSBhcyBpdCBjb21lcyB0byB0aGUgbmV4dCB0cmFuc2Zvcm0uCiAgIiIiCgogIE1BWF9FTEVNRU5UX1BFUl9CVU5ETEUgPSBOb25lCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgIHNpZGVfaW5wdXRzKToKICAgIGFzc2VydCBub3Qgc2lkZV9pbnB1dHMKICAgIHN1cGVyKF9TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvciwgc2VsZikuX19pbml0X18oCiAgICAgICAgZXZhbHVhdGlvbl9jb250ZXh0LAogICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIHNpZGVfaW5wdXRzKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5nYmtfaXRlbXMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQoKICAgIGFzc2VydCBsZW4oc2VsZi5fb3V0cHV0cykgPT0gMQogICAgc2VsZi5vdXRwdXRfcGNvbGxlY3Rpb24gPSBsaXN0KHNlbGYuX291dHB1dHMpWzBdCgogICAgIyBUaGUgaW5wdXQgdHlwZSBvZiBhIEdyb3VwQnlLZXkgd2lsbCBiZSBUdXBsZVtBbnksIEFueV0gb3IgbW9yZSBzcGVjaWZpYy4KICAgIGt2X3R5cGVfaGludCA9IHNlbGYuX2FwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHNbMF0uZWxlbWVudF90eXBlCiAgICBrZXlfdHlwZV9oaW50ID0gKGt2X3R5cGVfaGludC50dXBsZV90eXBlc1swXSBpZiBrdl90eXBlX2hpbnQgZWxzZSBBbnkpCiAgICBzZWxmLmtleV9jb2RlciA9IGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIoa2V5X3R5cGVfaGludCkKCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgIGlmIChpc2luc3RhbmNlKGVsZW1lbnQsIFdpbmRvd2VkVmFsdWUpIGFuZAogICAgICAgIGlzaW5zdGFuY2UoZWxlbWVudC52YWx1ZSwgY29sbGVjdGlvbnMuSXRlcmFibGUpIGFuZAogICAgICAgIGxlbihlbGVtZW50LnZhbHVlKSA9PSAyKToKICAgICAgaywgdiA9IGVsZW1lbnQudmFsdWUKICAgICAgc2VsZi5nYmtfaXRlbXNbc2VsZi5rZXlfY29kZXIuZW5jb2RlKGspXS5hcHBlbmQodikKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgJ0lucHV0IHRvIF9Hcm91cEJ5S2V5T25seSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gb2YgJwogICAgICAgICAgJ3dpbmRvd2VkIGtleS12YWx1ZSBwYWlycy4gSW5zdGVhZCByZWNlaXZlZDogJXIuJyAlIGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgYnVuZGxlcyA9IFtdCiAgICBidW5kbGUgPSBOb25lCiAgICBmb3IgZW5jb2RlZF9rLCB2cyBpbiBpdGVyaXRlbXMoc2VsZi5nYmtfaXRlbXMpOgogICAgICBpZiBub3QgYnVuZGxlOgogICAgICAgIGJ1bmRsZSA9IHNlbGYuX2V2YWx1YXRpb25fY29udGV4dC5jcmVhdGVfYnVuZGxlKHNlbGYub3V0cHV0X3Bjb2xsZWN0aW9uKQogICAgICAgIGJ1bmRsZXMuYXBwZW5kKGJ1bmRsZSkKICAgICAga3dpID0gS2V5ZWRXb3JrSXRlbShlbmNvZGVkX2ssIGVsZW1lbnRzPXZzKQogICAgICBidW5kbGUuYWRkKEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWUoa3dpKSkKCiAgICByZXR1cm4gVHJhbnNmb3JtUmVzdWx0KHNlbGYsIGJ1bmRsZXMsIFtdLCBOb25lLCBOb25lKQoKCmNsYXNzIF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvcihfVHJhbnNmb3JtRXZhbHVhdG9yKToKICAiIiJUcmFuc2Zvcm1FdmFsdWF0b3IgZm9yIHRoZSBfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3cgdHJhbnNmb3JtLgoKICBUaGlzIGV2YWx1YXRvciBpcyBvbmx5IHVzZWQgaW4gc3RyZWFtaW5nIG1vZGUuICBJbiBiYXRjaCBtb2RlLCB0aGUKICBHcm91cEFsc29CeVdpbmRvdyBvcGVyYXRpb24gaXMgZXZhbHVhdGVkIGFzIGEgbm9ybWFsIERvRm4sIGFzIGRlZmluZWQKICBpbiB0cmFuc2Zvcm1zL2NvcmUucHkuCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBldmFsdWF0aW9uX2NvbnRleHQsCiAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgc2lkZV9pbnB1dHMpOgogICAgYXNzZXJ0IG5vdCBzaWRlX2lucHV0cwogICAgc3VwZXIoX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93RXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsCiAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dHMpCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBhc3NlcnQgbGVuKHNlbGYuX291dHB1dHMpID09IDEKICAgIHNlbGYub3V0cHV0X3Bjb2xsZWN0aW9uID0gbGlzdChzZWxmLl9vdXRwdXRzKVswXQogICAgc2VsZi5kcml2ZXIgPSBjcmVhdGVfdHJpZ2dlcl9kcml2ZXIoCiAgICAgICAgc2VsZi5fYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS53aW5kb3dpbmcsCiAgICAgICAgY2xvY2s9c2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0Ll93YXRlcm1hcmtfbWFuYWdlci5fY2xvY2spCiAgICBzZWxmLmdhYndfaXRlbXMgPSBbXQogICAgc2VsZi5rZXllZF9ob2xkcyA9IHt9CgogICAgIyBUaGUgaW5wdXQgdHlwZSAod2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG91dHB1dCB0eXBlKSBvZiBhCiAgICAjIEdyb3VwQWxzb0J5V2luZG93IHdpbGwgYmUgVHVwbGVbQW55LCBJdGVyW0FueV1dIG9yIG1vcmUgc3BlY2lmaWMuCiAgICBrdl90eXBlX2hpbnQgPSBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0ub3V0cHV0c1tOb25lXS5lbGVtZW50X3R5cGUKICAgIGtleV90eXBlX2hpbnQgPSAoa3ZfdHlwZV9oaW50LnR1cGxlX3R5cGVzWzBdIGlmIGt2X3R5cGVfaGludCBlbHNlIEFueSkKICAgIHNlbGYua2V5X2NvZGVyID0gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihrZXlfdHlwZV9oaW50KQoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAga3dpID0gZWxlbWVudC52YWx1ZQogICAgYXNzZXJ0IGlzaW5zdGFuY2Uoa3dpLCBLZXllZFdvcmtJdGVtKSwga3dpCiAgICBlbmNvZGVkX2ssIHRpbWVyX2ZpcmluZ3MsIHZzID0gKAogICAgICAgIGt3aS5lbmNvZGVkX2tleSwga3dpLnRpbWVyX2ZpcmluZ3MsIGt3aS5lbGVtZW50cykKICAgIGsgPSBzZWxmLmtleV9jb2Rlci5kZWNvZGUoZW5jb2RlZF9rKQogICAgc3RhdGUgPSBzZWxmLl9zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKGVuY29kZWRfaykKCiAgICB3YXRlcm1hcmtzID0gc2VsZi5fZXZhbHVhdGlvbl9jb250ZXh0Ll93YXRlcm1hcmtfbWFuYWdlci5nZXRfd2F0ZXJtYXJrcygKICAgICAgICBzZWxmLl9hcHBsaWVkX3B0cmFuc2Zvcm0pCiAgICBmb3IgdGltZXJfZmlyaW5nIGluIHRpbWVyX2ZpcmluZ3M6CiAgICAgIGZvciB3dmFsdWUgaW4gc2VsZi5kcml2ZXIucHJvY2Vzc190aW1lcih0aW1lcl9maXJpbmcud2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfZmlyaW5nLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9maXJpbmcudGltZV9kb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9maXJpbmcudGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRlcm1hcmtzLmlucHV0X3dhdGVybWFyayk6CiAgICAgICAgc2VsZi5nYWJ3X2l0ZW1zLmFwcGVuZCh3dmFsdWUud2l0aF92YWx1ZSgoaywgd3ZhbHVlLnZhbHVlKSkpCiAgICBpZiB2czoKICAgICAgZm9yIHd2YWx1ZSBpbiBzZWxmLmRyaXZlci5wcm9jZXNzX2VsZW1lbnRzKHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRlcm1hcmtzLm91dHB1dF93YXRlcm1hcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXRlcm1hcmtzLmlucHV0X3dhdGVybWFyayk6CiAgICAgICAgc2VsZi5nYWJ3X2l0ZW1zLmFwcGVuZCh3dmFsdWUud2l0aF92YWx1ZSgoaywgd3ZhbHVlLnZhbHVlKSkpCgogICAgc2VsZi5rZXllZF9ob2xkc1tlbmNvZGVkX2tdID0gc3RhdGUuZ2V0X2VhcmxpZXN0X2hvbGQoKQoKICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgIGJ1bmRsZXMgPSBbXQogICAgaWYgc2VsZi5nYWJ3X2l0ZW1zOgogICAgICBidW5kbGUgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQuY3JlYXRlX2J1bmRsZShzZWxmLm91dHB1dF9wY29sbGVjdGlvbikKICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5nYWJ3X2l0ZW1zOgogICAgICAgIGJ1bmRsZS5hZGQoaXRlbSkKICAgICAgYnVuZGxlcy5hcHBlbmQoYnVuZGxlKQoKICAgIHJldHVybiBUcmFuc2Zvcm1SZXN1bHQoc2VsZiwgYnVuZGxlcywgW10sIE5vbmUsIHNlbGYua2V5ZWRfaG9sZHMpCgoKY2xhc3MgX05hdGl2ZVdyaXRlRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIlRyYW5zZm9ybUV2YWx1YXRvciBmb3IgX05hdGl2ZVdyaXRlIHRyYW5zZm9ybS4iIiIKCiAgRUxFTUVOVFNfVEFHID0gX0xpc3RTdGF0ZVRhZygnZWxlbWVudHMnKQoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICBzaWRlX2lucHV0cyk6CiAgICBhc3NlcnQgbm90IHNpZGVfaW5wdXRzCiAgICBzdXBlcihfTmF0aXZlV3JpdGVFdmFsdWF0b3IsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cykKCiAgICBhc3NlcnQgYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5zaW5rCiAgICBzZWxmLl9zaW5rID0gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybS5zaW5rCgogIEBwcm9wZXJ0eQogIGRlZiBfaXNfZmluYWxfYnVuZGxlKHNlbGYpOgogICAgcmV0dXJuICgKICAgICAgICBzZWxmLl9leGVjdXRpb25fY29udGV4dC53YXRlcm1hcmtzLmlucHV0X3dhdGVybWFyayA9PQogICAgICAgIFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpCgogIEBwcm9wZXJ0eQogIGRlZiBfaGFzX2FscmVhZHlfcHJvZHVjZWRfb3V0cHV0KHNlbGYpOgogICAgcmV0dXJuICgKICAgICAgICBzZWxmLl9leGVjdXRpb25fY29udGV4dC53YXRlcm1hcmtzLm91dHB1dF93YXRlcm1hcmsgPT0KICAgICAgICBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKQoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5nbG9iYWxfc3RhdGUgPSBzZWxmLl9zdGVwX2NvbnRleHQuZ2V0X2tleWVkX3N0YXRlKE5vbmUpCgogIGRlZiBwcm9jZXNzX3RpbWVyKHNlbGYsIHRpbWVyX2ZpcmluZyk6CiAgICAjIFdlIGRvIG5vdCBuZWVkIHRvIGVtaXQgYSBLZXllZFdvcmtJdGVtIHRvIHByb2Nlc3NfZWxlbWVudCgpLgogICAgcGFzcwoKICBkZWYgcHJvY2Vzc19lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5nbG9iYWxfc3RhdGUuYWRkX3N0YXRlKAogICAgICAgIE5vbmUsIF9OYXRpdmVXcml0ZUV2YWx1YXRvci5FTEVNRU5UU19UQUcsIGVsZW1lbnQpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgIyBmaW5pc2hfYnVuZGxlIHdpbGwgYXBwZW5kIGluY29taW5nIGJ1bmRsZXMgaW4gbWVtb3J5IHVudGlsIGFsbCB0aGUgYnVuZGxlcwogICAgIyBjYXJyeWluZyBkYXRhIGlzIHByb2Nlc3NlZC4gVGhpcyBpcyBkb25lIHRvIHByb2R1Y2Ugb25seSBhIHNpbmdsZSBvdXRwdXQKICAgICMgc2hhcmQgKHNvbWUgdGVzdHMgZGVwZW5kcyBvbiB0aGlzIGJlaGF2aW9yKS4gSXQgaXMgcG9zc2libGUgdG8gaGF2ZQogICAgIyBpbmNvbWluZyBlbXB0eSBidW5kbGVzIGFmdGVyIHRoZSBvdXRwdXQgaXMgcHJvZHVjZWQsIHRoZXNlIGJ1bmRsZXMgd2lsbCBiZQogICAgIyBpZ25vcmVkIGFuZCB3b3VsZCBub3QgZ2VuZXJhdGUgYWRkaXRpb25hbCBvdXRwdXQgZmlsZXMuCiAgICAjIFRPRE8oYWx0YXkpOiBEbyBub3Qgd2FpdCB1bnRpbCB0aGUgbGFzdCBidW5kbGUgdG8gd3JpdGUgaW4gYSBzaW5nbGUgc2hhcmQuCiAgICBpZiBzZWxmLl9pc19maW5hbF9idW5kbGU6CiAgICAgIGVsZW1lbnRzID0gc2VsZi5nbG9iYWxfc3RhdGUuZ2V0X3N0YXRlKAogICAgICAgICAgTm9uZSwgX05hdGl2ZVdyaXRlRXZhbHVhdG9yLkVMRU1FTlRTX1RBRykKICAgICAgaWYgc2VsZi5faGFzX2FscmVhZHlfcHJvZHVjZWRfb3V0cHV0OgogICAgICAgICMgSWdub3JlIGVtcHR5IGJ1bmRsZXMgdGhhdCBhcnJpdmUgYWZ0ZXIgdGhlIG91dHB1dCBpcyBwcm9kdWNlZC4KICAgICAgICBhc3NlcnQgZWxlbWVudHMgPT0gW10KICAgICAgZWxzZToKICAgICAgICBzZWxmLl9zaW5rLnBpcGVsaW5lX29wdGlvbnMgPSBzZWxmLl9ldmFsdWF0aW9uX2NvbnRleHQucGlwZWxpbmVfb3B0aW9ucwogICAgICAgIHdpdGggc2VsZi5fc2luay53cml0ZXIoKSBhcyB3cml0ZXI6CiAgICAgICAgICBmb3IgdiBpbiBlbGVtZW50czoKICAgICAgICAgICAgd3JpdGVyLldyaXRlKHYudmFsdWUpCiAgICAgIGhvbGQgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCiAgICBlbHNlOgogICAgICBob2xkID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfTkVHX0lORgogICAgICBzZWxmLmdsb2JhbF9zdGF0ZS5zZXRfdGltZXIoCiAgICAgICAgICBOb25lLCAnJywgVGltZURvbWFpbi5XQVRFUk1BUkssIFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpCgogICAgcmV0dXJuIFRyYW5zZm9ybVJlc3VsdChzZWxmLCBbXSwgW10sIE5vbmUsIHtOb25lOiBob2xkfSkKCgpjbGFzcyBfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yKF9UcmFuc2Zvcm1FdmFsdWF0b3IpOgogICIiIkFuIGV2YWx1YXRvciBmb3Igc2RmX2RpcmVjdF9ydW5uZXIuUHJvY2Vzc0VsZW1lbnRzIHRyYW5zZm9ybS4iIiIKCiAgIyBNYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IHdpbGwgYmUgcHJvZHVjZWQgYnkgYSBTcGxpdHRhYmxlIERvRm4gYmVmb3JlCiAgIyBhIGNoZWNrcG9pbnQgaXMgcmVxdWVzdGVkIGJ5IHRoZSBydW5uZXIuCiAgREVGQVVMVF9NQVhfTlVNX09VVFBVVFMgPSBOb25lCiAgIyBNYXhpbXVtIGR1cmF0aW9uIGEgU3BsaXR0YWJsZSBEb0ZuIHdpbGwgcHJvY2VzcyBhbiBlbGVtZW50IGJlZm9yZSBhCiAgIyBjaGVja3BvaW50IGlzIHJlcXVlc3RlZCBieSB0aGUgcnVubmVyLgogIERFRkFVTFRfTUFYX0RVUkFUSU9OID0gMQoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLAogICAgICBzaWRlX2lucHV0cyk6CiAgICBzdXBlcihfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBldmFsdWF0aW9uX2NvbnRleHQsCiAgICAgICAgYXBwbGllZF9wdHJhbnNmb3JtLAogICAgICAgIGlucHV0X2NvbW1pdHRlZF9idW5kbGUsCiAgICAgICAgc2lkZV9pbnB1dHMpCgogICAgcHJvY2Vzc19lbGVtZW50c190cmFuc2Zvcm0gPSBhcHBsaWVkX3B0cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm9jZXNzX2VsZW1lbnRzX3RyYW5zZm9ybSwgUHJvY2Vzc0VsZW1lbnRzKQoKICAgICMgUmVwbGFjaW5nIHRoZSBkb19mbiBvZiB0aGUgdHJhbnNmb3JtIHdpdGggYSB3cmFwcGVyIGRvX2ZuIHRoYXQgcGVyZm9ybXMKICAgICMgU0RGIG1hZ2ljLgogICAgdHJhbnNmb3JtID0gYXBwbGllZF9wdHJhbnNmb3JtLnRyYW5zZm9ybQogICAgc2RmID0gdHJhbnNmb3JtLnNkZgogICAgc2VsZi5fcHJvY2Vzc19mbiA9IHRyYW5zZm9ybS5uZXdfcHJvY2Vzc19mbihzZGYpCiAgICB0cmFuc2Zvcm0uZG9mbiA9IHNlbGYuX3Byb2Nlc3NfZm4KCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLl9wcm9jZXNzX2ZuLCBQcm9jZXNzRm4pCgogICAgc2VsZi5fcHJvY2Vzc19mbi5zdGVwX2NvbnRleHQgPSBzZWxmLl9zdGVwX2NvbnRleHQKCiAgICBwcm9jZXNzX2VsZW1lbnRfaW52b2tlciA9ICgKICAgICAgICBTREZQcm9jZXNzRWxlbWVudEludm9rZXIoCiAgICAgICAgICAgIG1heF9udW1fb3V0cHV0cz1zZWxmLkRFRkFVTFRfTUFYX05VTV9PVVRQVVRTLAogICAgICAgICAgICBtYXhfZHVyYXRpb249c2VsZi5ERUZBVUxUX01BWF9EVVJBVElPTikpCiAgICBzZWxmLl9wcm9jZXNzX2ZuLnNldF9wcm9jZXNzX2VsZW1lbnRfaW52b2tlcihwcm9jZXNzX2VsZW1lbnRfaW52b2tlcikKCiAgICBzZWxmLl9wYXJfZG9fZXZhbHVhdG9yID0gX1BhckRvRXZhbHVhdG9yKAogICAgICAgIGV2YWx1YXRpb25fY29udGV4dCwKICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sCiAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICBzaWRlX2lucHV0cywKICAgICAgICBwZXJmb3JtX2RvZm5fcGlja2xlX3Rlc3Q9RmFsc2UpCiAgICBzZWxmLmtleWVkX2hvbGRzID0ge30KCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX3Bhcl9kb19ldmFsdWF0b3Iuc3RhcnRfYnVuZGxlKCkKCiAgZGVmIHByb2Nlc3NfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgIGFzc2VydCBpc2luc3RhbmNlKGVsZW1lbnQsIFdpbmRvd2VkVmFsdWUpCiAgICBhc3NlcnQgbGVuKGVsZW1lbnQud2luZG93cykgPT0gMQogICAgd2luZG93ID0gZWxlbWVudC53aW5kb3dzWzBdCiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQudmFsdWUsIEtleWVkV29ya0l0ZW0pOgogICAgICBrZXkgPSBlbGVtZW50LnZhbHVlLmVuY29kZWRfa2V5CiAgICBlbHNlOgogICAgICAjIElmIG5vdCBhIGBLZXllZFdvcmtJdGVtYCwgdGhpcyBtdXN0IGJlIGEgdHVwbGUgd2hlcmUga2V5IGlzIGEgcmFuZG9tbHkKICAgICAgIyBnZW5lcmF0ZWQga2V5IGFuZCB0aGUgdmFsdWUgaXMgYSBgV2luZG93ZWRWYWx1ZWAgdGhhdCBjb250YWlucyBhbgogICAgICAjIGBFbGVtZW50QW5kUmVzdHJpY3Rpb25gIG9iamVjdC4KICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZWxlbWVudC52YWx1ZSwgdHVwbGUpCiAgICAgIGtleSA9IGVsZW1lbnQudmFsdWVbMF0KCiAgICBzZWxmLl9wYXJfZG9fZXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudChlbGVtZW50KQoKICAgIHN0YXRlID0gc2VsZi5fc3RlcF9jb250ZXh0LmdldF9rZXllZF9zdGF0ZShrZXkpCiAgICBzZWxmLmtleWVkX2hvbGRzW2tleV0gPSBzdGF0ZS5nZXRfc3RhdGUoCiAgICAgICAgd2luZG93LCBzZWxmLl9wcm9jZXNzX2ZuLndhdGVybWFya19ob2xkX3RhZykKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBwYXJfZG9fcmVzdWx0ID0gc2VsZi5fcGFyX2RvX2V2YWx1YXRvci5maW5pc2hfYnVuZGxlKCkKCiAgICB0cmFuc2Zvcm1fcmVzdWx0ID0gVHJhbnNmb3JtUmVzdWx0KAogICAgICAgIHNlbGYsCiAgICAgICAgcGFyX2RvX3Jlc3VsdC51bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcywKICAgICAgICBwYXJfZG9fcmVzdWx0LnVucHJvY2Vzc2VkX2J1bmRsZXMsCiAgICAgICAgcGFyX2RvX3Jlc3VsdC5jb3VudGVycywKICAgICAgICBwYXJfZG9fcmVzdWx0LmtleWVkX3dhdGVybWFya19ob2xkcywKICAgICAgICBwYXJfZG9fcmVzdWx0LnVuZGVjbGFyZWRfdGFnX3ZhbHVlcykKICAgIGZvciBrZXkgaW4gc2VsZi5rZXllZF9ob2xkczoKICAgICAgdHJhbnNmb3JtX3Jlc3VsdC5rZXllZF93YXRlcm1hcmtfaG9sZHNba2V5XSA9IHNlbGYua2V5ZWRfaG9sZHNba2V5XQogICAgcmV0dXJuIHRyYW5zZm9ybV9yZXN1bHQKlJXbFAEAAAAAAH2UKIwjVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuX19pbml0X1+UalYxAQBLYUt3h5SMKFRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LmdldF9ldmFsdWF0b3KUalYxAQBLeUuOh5SMM1RyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5LmdldF9yb290X2J1bmRsZV9wcm92aWRlcpRqVjEBAEuQS5qHlIwyVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuc2hvdWxkX2V4ZWN1dGVfc2VyaWFsbHmUalYxAQBLnEu4h5SMGlRyYW5zZm9ybUV2YWx1YXRvclJlZ2lzdHJ5lGpdMQEAS1hLuIeUjBtSb290QnVuZGxlUHJvdmlkZXIuX19pbml0X1+UalYxAQBLvUu/h5SMI1Jvb3RCdW5kbGVQcm92aWRlci5nZXRfcm9vdF9idW5kbGVzlGpWMQEAS8FLwoeUjBJSb290QnVuZGxlUHJvdmlkZXKUal0xAQBLu0vCh5SMKkRlZmF1bHRSb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc5RqVjEBAEvHS8uHlIwZRGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlcpRqXTEBAEvFS8uHlIwuX1Rlc3RTdHJlYW1Sb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc5RqVjEBAEvVS92HlIwdX1Rlc3RTdHJlYW1Sb290QnVuZGxlUHJvdmlkZXKUal0xAQBLzkvdh5SMHF9UcmFuc2Zvcm1FdmFsdWF0b3IuX19pbml0X1+UalYxAQBL40vwh5SMI19UcmFuc2Zvcm1FdmFsdWF0b3IuX2V4cGFuZF9vdXRwdXRzlGpWMQEAS/JL+4eUjCxfVHJhbnNmb3JtRXZhbHVhdG9yLl9zcGxpdF9saXN0X2ludG9fYnVuZGxlc5RqVjEBAEv9TRoBh5SMIF9UcmFuc2Zvcm1FdmFsdWF0b3Iuc3RhcnRfYnVuZGxllGpWMQEATRwBTR4Bh5SMKV9UcmFuc2Zvcm1FdmFsdWF0b3IucHJvY2Vzc190aW1lcl93cmFwcGVylGpWMQEATSABTSwBh5SMIV9UcmFuc2Zvcm1FdmFsdWF0b3IucHJvY2Vzc190aW1lcpRqVjEBAE0uAU0zAYeUjCNfVHJhbnNmb3JtRXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudJRqVjEBAE01AU03AYeUjCFfVHJhbnNmb3JtRXZhbHVhdG9yLmZpbmlzaF9idW5kbGWUalYxAQBNOQFNPQGHlIwTX1RyYW5zZm9ybUV2YWx1YXRvcpRqXTEBAEvgTT0Bh5SMHl9Cb3VuZGVkUmVhZEV2YWx1YXRvci5fX2luaXRfX5RqVjEBAE1GAU1TAYeUjCNfQm91bmRlZFJlYWRFdmFsdWF0b3IuZmluaXNoX2J1bmRsZZRqVjEBAE1VAU1rAYeUjBVfQm91bmRlZFJlYWRFdmFsdWF0b3KUal0xAQBNQAFNawGHlIwmX1dhdGVybWFya0NvbnRyb2xsZXJFdmFsdWF0b3IuX19pbml0X1+UalYxAQBNdwFNhAGHlIwpX1dhdGVybWFya0NvbnRyb2xsZXJFdmFsdWF0b3IuX2luaXRfc3RhdGWUalYxAQBNhgFNkQGHlIwoX1dhdGVybWFya0NvbnRyb2xsZXJFdmFsdWF0b3IuX3dhdGVybWFya5RqVjEBAE2XAU2ZAYeUjCpfV2F0ZXJtYXJrQ29udHJvbGxlckV2YWx1YXRvci5zdGFydF9idW5kbGWUalYxAQBNmwFNnAGHlIwtX1dhdGVybWFya0NvbnRyb2xsZXJFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50lGpWMQEATZ4BTaoBh5SMK19XYXRlcm1hcmtDb250cm9sbGVyRXZhbHVhdG9yLmZpbmlzaF9idW5kbGWUalYxAQBNrAFNsAGHlIwdX1dhdGVybWFya0NvbnRyb2xsZXJFdmFsdWF0b3KUal0xAQBNbgFNsAGHlIwdX1Rlc3RTdHJlYW1FdmFsdWF0b3IuX19pbml0X1+UalYxAQBNvQFNyQGHlIwhX1Rlc3RTdHJlYW1FdmFsdWF0b3Iuc3RhcnRfYnVuZGxllGpWMQEATcsBTc4Bh5SMJF9UZXN0U3RyZWFtRXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudJRqVjEBAE3QAU3rAYeUjCJfVGVzdFN0cmVhbUV2YWx1YXRvci5maW5pc2hfYnVuZGxllGpWMQEATe0BTfkBh5SMFF9UZXN0U3RyZWFtRXZhbHVhdG9ylGpdMQEATbMBTfkBh5SMHV9QdWJTdWJSZWFkRXZhbHVhdG9yLl9faW5pdF9flGpWMQEATQMCTSMCh5SMJV9QdWJTdWJSZWFkRXZhbHVhdG9yLmdldF9zdWJzY3JpcHRpb26UalYxAQBNJQJNOAKHlIwhX1B1YlN1YlJlYWRFdmFsdWF0b3Iuc3RhcnRfYnVuZGxllGpWMQEATToCTTsCh5SMJF9QdWJTdWJSZWFkRXZhbHVhdG9yLnByb2Nlc3NfZWxlbWVudJRqVjEBAE09Ak0+AoeUjCZfUHViU3ViUmVhZEV2YWx1YXRvci5fcmVhZF9mcm9tX3B1YnN1YpRqVjEBAE1AAk1mAoeUjCJfUHViU3ViUmVhZEV2YWx1YXRvci5maW5pc2hfYnVuZGxllGpWMQEATWgCTYUCh5SMFF9QdWJTdWJSZWFkRXZhbHVhdG9ylGpdMQEATfwBTYUCh5SMGl9GbGF0dGVuRXZhbHVhdG9yLl9faW5pdF9flGpWMQEATYoCTZUCh5SMHl9GbGF0dGVuRXZhbHVhdG9yLnN0YXJ0X2J1bmRsZZRqVjEBAE2XAk2aAoeUjCFfRmxhdHRlbkV2YWx1YXRvci5wcm9jZXNzX2VsZW1lbnSUalYxAQBNnAJNnQKHlIwfX0ZsYXR0ZW5FdmFsdWF0b3IuZmluaXNoX2J1bmRsZZRqVjEBAE2fAk2hAoeUjBFfRmxhdHRlbkV2YWx1YXRvcpRqXTEBAE2IAk2hAoeUjB9fSW1wdWxzZUV2YWx1YXRvci5maW5pc2hfYnVuZGxllGpWMQEATaYCTasCh5SMEV9JbXB1bHNlRXZhbHVhdG9ylGpdMQEATaQCTasCh5SMGV9UYWdnZWRSZWNlaXZlcnMuX19pbml0X1+UalYxAQBNsAJNswKHlIwlX1RhZ2dlZFJlY2VpdmVycy5OdWxsUmVjZWl2ZXIucmVjZWl2ZZRqVjEBAE23Ak25AoeUjB1fVGFnZ2VkUmVjZWl2ZXJzLk51bGxSZWNlaXZlcpRqXTEBAE21Ak25AoeUjCtfVGFnZ2VkUmVjZWl2ZXJzLl9Jbk1lbW9yeVJlY2VpdmVyLl9faW5pdF9flGpWMQEATb0CTb8Ch5SMKl9UYWdnZWRSZWNlaXZlcnMuX0luTWVtb3J5UmVjZWl2ZXIucmVjZWl2ZZRqVjEBAE3BAk3DAoeUjCJfVGFnZ2VkUmVjZWl2ZXJzLl9Jbk1lbW9yeVJlY2VpdmVylGpdMQEATbsCTcMCh5SMHF9UYWdnZWRSZWNlaXZlcnMuX19taXNzaW5nX1+UalYxAQBNxQJNyAKHlIwQX1RhZ2dlZFJlY2VpdmVyc5RqXTEBAE2uAk3IAoeUjBhfUGFyRG9FdmFsdWF0b3IuX19pbml0X1+UalYxAQBNzgJN3AKHlIwcX1BhckRvRXZhbHVhdG9yLnN0YXJ0X2J1bmRsZZRqVjEBAE3eAk0NA4eUjB1fUGFyRG9FdmFsdWF0b3IucHJvY2Vzc190aW1lcpRqVjEBAE0PA00XA4eUjB9fUGFyRG9FdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50lGpWMQEATRkDTRoDh5SMHV9QYXJEb0V2YWx1YXRvci5maW5pc2hfYnVuZGxllGpWMQEATRwDTSIDh5SMD19QYXJEb0V2YWx1YXRvcpRqXTEBAE3LAk0iA4eUjCFfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuX19pbml0X1+UalYxAQBNLANNNwOHlIwpX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLl9pc19maW5hbF9idW5kbGWUalYxAQBNOQNNPAOHlIwlX0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLnN0YXJ0X2J1bmRsZZRqVjEBAE0+A01JA4eUjCZfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IucHJvY2Vzc190aW1lcpRqVjEBAE1LA01NA4eUjChfR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50lGpWMQEATU8DTVwDh5SMNV9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5maW5pc2hfYnVuZGxlLmxlbl9lbGVtZW50X2ZulGpWMQEATXIDTXQDh5SMJl9Hcm91cEJ5S2V5T25seUV2YWx1YXRvci5maW5pc2hfYnVuZGxllGpWMQEATV4DTYUDh5SMGF9Hcm91cEJ5S2V5T25seUV2YWx1YXRvcpRqXTEBAE0lA02FA4eUjCpfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IuX19pbml0X1+UalYxAQBNkgNNnQOHlIwuX1N0cmVhbWluZ0dyb3VwQnlLZXlPbmx5RXZhbHVhdG9yLnN0YXJ0X2J1bmRsZZRqVjEBAE2fA02oA4eUjDFfU3RyZWFtaW5nR3JvdXBCeUtleU9ubHlFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50lGpWMQEATaoDTbMDh5SML19TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvci5maW5pc2hfYnVuZGxllGpWMQEATbUDTb8Dh5SMIV9TdHJlYW1pbmdHcm91cEJ5S2V5T25seUV2YWx1YXRvcpRqXTEBAE2IA02/A4eUjC1fU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dFdmFsdWF0b3IuX19pbml0X1+UalYxAQBNyQNN1AOHlIwxX1N0cmVhbWluZ0dyb3VwQWxzb0J5V2luZG93RXZhbHVhdG9yLnN0YXJ0X2J1bmRsZZRqVjEBAE3WA03jA4eUjDRfU3RyZWFtaW5nR3JvdXBBbHNvQnlXaW5kb3dFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50lGpWMQEATeUDTf4Dh5SMMl9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvci5maW5pc2hfYnVuZGxllGpWMQEATQAETQgEh5SMJF9TdHJlYW1pbmdHcm91cEFsc29CeVdpbmRvd0V2YWx1YXRvcpRqXTEBAE3CA00IBIeUjB5fTmF0aXZlV3JpdGVFdmFsdWF0b3IuX19pbml0X1+UalYxAQBNEARNHgSHlIwmX05hdGl2ZVdyaXRlRXZhbHVhdG9yLl9pc19maW5hbF9idW5kbGWUalYxAQBNIARNJASHlIwyX05hdGl2ZVdyaXRlRXZhbHVhdG9yLl9oYXNfYWxyZWFkeV9wcm9kdWNlZF9vdXRwdXSUalYxAQBNJgRNKgSHlIwiX05hdGl2ZVdyaXRlRXZhbHVhdG9yLnN0YXJ0X2J1bmRsZZRqVjEBAE0sBE0tBIeUjCNfTmF0aXZlV3JpdGVFdmFsdWF0b3IucHJvY2Vzc190aW1lcpRqVjEBAE0vBE0xBIeUjCVfTmF0aXZlV3JpdGVFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50lGpWMQEATTMETTUEh5SMI19OYXRpdmVXcml0ZUV2YWx1YXRvci5maW5pc2hfYnVuZGxllGpWMQEATTcETU8Eh5SMFV9OYXRpdmVXcml0ZUV2YWx1YXRvcpRqXTEBAE0LBE1PBIeUjCJfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9yLl9faW5pdF9flGpWMQEATVwETYIEh5SMJl9Qcm9jZXNzRWxlbWVudHNFdmFsdWF0b3Iuc3RhcnRfYnVuZGxllGpWMQEATYQETYUEh5SMKV9Qcm9jZXNzRWxlbWVudHNFdmFsdWF0b3IucHJvY2Vzc19lbGVtZW50lGpWMQEATYcETZgEh5SMJ19Qcm9jZXNzRWxlbWVudHNFdmFsdWF0b3IuZmluaXNoX2J1bmRsZZRqVjEBAE2aBE2mBIeUjBlfUHJvY2Vzc0VsZW1lbnRzRXZhbHVhdG9ylGpdMQEATVIETaYEh5R1fZQojBpUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeZRq5AMAAIwoVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuZ2V0X2V2YWx1YXRvcpRq5AMAAIwzVHJhbnNmb3JtRXZhbHVhdG9yUmVnaXN0cnkuZ2V0X3Jvb3RfYnVuZGxlX3Byb3ZpZGVylGrkAwAAjDJUcmFuc2Zvcm1FdmFsdWF0b3JSZWdpc3RyeS5zaG91bGRfZXhlY3V0ZV9zZXJpYWxseZRq5AMAAIwSUm9vdEJ1bmRsZVByb3ZpZGVylGrkAwAAjCNSb290QnVuZGxlUHJvdmlkZXIuZ2V0X3Jvb3RfYnVuZGxlc5Rq5AMAAIwZRGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlcpRq5AMAAIwqRGVmYXVsdFJvb3RCdW5kbGVQcm92aWRlci5nZXRfcm9vdF9idW5kbGVzlGrkAwAAdYwuYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudHJhbnNmb3JtX2V2YWx1YXRvcpR0lIwfYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbJQoWI8MAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdHkgY2xhc3NlcyB1c2VkIGJ5IHRoZSBEaXJlY3RSdW5uZXIuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKCmNsYXNzIFRyYW5zZm9ybVJlc3VsdChvYmplY3QpOgogICIiIlJlc3VsdCBvZiBldmFsdWF0aW5nIGFuIEFwcGxpZWRQVHJhbnNmb3JtIHdpdGggYSBUcmFuc2Zvcm1FdmFsdWF0b3IuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICB0cmFuc2Zvcm1fZXZhbHVhdG9yLAogICAgICB1bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcywKICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlcywKICAgICAgY291bnRlcnMsCiAgICAgIGtleWVkX3dhdGVybWFya19ob2xkcywKICAgICAgdW5kZWNsYXJlZF90YWdfdmFsdWVzPU5vbmUpOgogICAgc2VsZi50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1fZXZhbHVhdG9yLl9hcHBsaWVkX3B0cmFuc2Zvcm0KICAgIHNlbGYudW5jb21taXR0ZWRfb3V0cHV0X2J1bmRsZXMgPSB1bmNvbW1pdHRlZF9vdXRwdXRfYnVuZGxlcwogICAgc2VsZi51bnByb2Nlc3NlZF9idW5kbGVzID0gdW5wcm9jZXNzZWRfYnVuZGxlcwogICAgc2VsZi5jb3VudGVycyA9IGNvdW50ZXJzCiAgICAjIE1hcHBpbmcgb2Yga2V5IC0+IGVhcmxpZXN0IGhvbGQgdGltZXN0YW1wIG9yIE5vbmUuICBLZXlzIHNob3VsZCBiZQogICAgIyBzdHJpbmdzIG9yIE5vbmUuCiAgICAjCiAgICAjIEZvciBlYWNoIGtleSwgd2UgcmVjZWl2ZSBhcyBpdHMgY29ycmVzcG9uZGluZyB2YWx1ZSB0aGUgZWFybGllc3QKICAgICMgd2F0ZXJtYXJrIGhvbGQgZm9yIHRoYXQga2V5ICh0aGUga2V5IGNhbiBiZSBOb25lIGZvciBnbG9iYWwgc3RhdGUpLCBwYXN0CiAgICAjIHdoaWNoIHRoZSBvdXRwdXQgd2F0ZXJtYXJrIGZvciB0aGUgY3VycmVudGx5LWV4ZWN1dGluZyBzdGVwIHdpbGwgbm90CiAgICAjIGFkdmFuY2UuICBJZiB0aGUgdmFsdWUgaXMgTm9uZSBvciB1dGlscy50aW1lc3RhbXAuTUFYX1RJTUVTVEFNUCwgdGhlCiAgICAjIHdhdGVybWFyayBob2xkIHdpbGwgYmUgcmVtb3ZlZC4KICAgIHNlbGYua2V5ZWRfd2F0ZXJtYXJrX2hvbGRzID0ga2V5ZWRfd2F0ZXJtYXJrX2hvbGRzIG9yIHt9CiAgICAjIE9ubHkgdXNlZCB3aGVuIGNhY2hpbmcgKG1hdGVyaWFsaXppbmcpIGFsbCB2YWx1ZXMgaXMgcmVxdWVzdGVkLgogICAgc2VsZi51bmRlY2xhcmVkX3RhZ192YWx1ZXMgPSB1bmRlY2xhcmVkX3RhZ192YWx1ZXMKICAgICMgUG9wdWxhdGVkIGJ5IHRoZSBUcmFuc2Zvcm1FeGVjdXRvci4KICAgIHNlbGYubG9naWNhbF9tZXRyaWNfdXBkYXRlcyA9IE5vbmUKCiAgICBzdGVwX2NvbnRleHQgPSB0cmFuc2Zvcm1fZXZhbHVhdG9yLl9leGVjdXRpb25fY29udGV4dC5nZXRfc3RlcF9jb250ZXh0KCkKICAgIHNlbGYucGFydGlhbF9rZXllZF9zdGF0ZSA9IHN0ZXBfY29udGV4dC5wYXJ0aWFsX2tleWVkX3N0YXRlCgoKY2xhc3MgVGltZXJGaXJpbmcob2JqZWN0KToKICAiIiJBIHNpbmdsZSBpbnN0YW5jZSBvZiBhIGZpcmVkIHRpbWVyLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBlbmNvZGVkX2tleSwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKToKICAgIHNlbGYuZW5jb2RlZF9rZXkgPSBlbmNvZGVkX2tleQogICAgc2VsZi53aW5kb3cgPSB3aW5kb3cKICAgIHNlbGYubmFtZSA9IG5hbWUKICAgIHNlbGYudGltZV9kb21haW4gPSB0aW1lX2RvbWFpbgogICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdUaW1lckZpcmluZyh7IXJ9LCB7IXJ9LCB7fSwge30pJy5mb3JtYXQoCiAgICAgICAgc2VsZi5lbmNvZGVkX2tleSwgc2VsZi5uYW1lLCBzZWxmLnRpbWVfZG9tYWluLCBzZWxmLnRpbWVzdGFtcCkKCgpjbGFzcyBLZXllZFdvcmtJdGVtKG9iamVjdCk6CiAgIiIiQSBrZXllZCBpdGVtIHRoYXQgY2FuIGVpdGhlciBiZSBhIHRpbWVyIGZpcmluZyBvciBhIGxpc3Qgb2YgZWxlbWVudHMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVuY29kZWRfa2V5LCB0aW1lcl9maXJpbmdzPU5vbmUsIGVsZW1lbnRzPU5vbmUpOgogICAgc2VsZi5lbmNvZGVkX2tleSA9IGVuY29kZWRfa2V5CiAgICBzZWxmLnRpbWVyX2ZpcmluZ3MgPSB0aW1lcl9maXJpbmdzIG9yIFtdCiAgICBzZWxmLmVsZW1lbnRzID0gZWxlbWVudHMgb3IgW10KCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdLZXllZFdvcmtJdGVtKHshcn0sIHt9LCB7fSknLmZvcm1hdCgKICAgICAgICBzZWxmLmVuY29kZWRfa2V5LCBzZWxmLnRpbWVyX2ZpcmluZ3MsIHNlbGYuZWxlbWVudHMpCpR9lCiMGFRyYW5zZm9ybVJlc3VsdC5fX2luaXRfX5RqVjEBAEsgSzuHlIwPVHJhbnNmb3JtUmVzdWx0lGpdMQEASx5LO4eUjBRUaW1lckZpcmluZy5fX2luaXRfX5RqVjEBAEtAS0WHlIwUVGltZXJGaXJpbmcuX19yZXByX1+UalYxAQBLR0tJh5SMC1RpbWVyRmlyaW5nlGpdMQEASz5LSYeUjBZLZXllZFdvcmtJdGVtLl9faW5pdF9flGpWMQEAS05LUYeUjBZLZXllZFdvcmtJdGVtLl9fcmVwcl9flGpWMQEAS1NLVYeUjA1LZXllZFdvcmtJdGVtlGpdMQEAS0xLVYeUdX2UKIwPVHJhbnNmb3JtUmVzdWx0lGrhAwAAjAtUaW1lckZpcmluZ5Rq4QMAAIwNS2V5ZWRXb3JrSXRlbZRq4QMAAHWMH2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LnV0aWyUdJSMLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VylChYpzIAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiTWFuYWdlcyB3YXRlcm1hcmtzIG9mIFBDb2xsZWN0aW9ucyBhbmQgQXBwbGllZFBUcmFuc2Zvcm1zLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCB0aHJlYWRpbmcKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYWJsZQpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdApmcm9tIHR5cGluZyBpbXBvcnQgU2V0CmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QudXRpbCBpbXBvcnQgVGltZXJGaXJpbmcKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1BWF9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1JTl9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRJTUVfR1JBTlVMQVJJVFkKCmlmIFRZUEVfQ0hFQ0tJTkc6CiAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmJ1bmRsZV9mYWN0b3J5IGltcG9ydCBfQnVuZGxlCiAgZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRpbWVzdGFtcAoKCmNsYXNzIFdhdGVybWFya01hbmFnZXIob2JqZWN0KToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIFRyYWNrcyBhbmQgdXBkYXRlcyB3YXRlcm1hcmtzIGZvciBhbGwgQXBwbGllZFBUcmFuc2Zvcm1zLiIiIgoKICBXQVRFUk1BUktfUE9TX0lORiA9IE1BWF9USU1FU1RBTVAKICBXQVRFUk1BUktfTkVHX0lORiA9IE1JTl9USU1FU1RBTVAKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLCBjbG9jaywgcm9vdF90cmFuc2Zvcm1zLCB2YWx1ZV90b19jb25zdW1lcnMsIHRyYW5zZm9ybV9rZXllZF9zdGF0ZXMpOgogICAgc2VsZi5fY2xvY2sgPSBjbG9jawogICAgc2VsZi5fcm9vdF90cmFuc2Zvcm1zID0gcm9vdF90cmFuc2Zvcm1zCiAgICBzZWxmLl92YWx1ZV90b19jb25zdW1lcnMgPSB2YWx1ZV90b19jb25zdW1lcnMKICAgIHNlbGYuX3RyYW5zZm9ybV9rZXllZF9zdGF0ZXMgPSB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzCiAgICAjIEFwcGxpZWRQVHJhbnNmb3JtIC0+IFRyYW5zZm9ybVdhdGVybWFya3MKICAgIHNlbGYuX3RyYW5zZm9ybV90b193YXRlcm1hcmtzID0gewogICAgfSAgIyB0eXBlOiBEaWN0W0FwcGxpZWRQVHJhbnNmb3JtLCBfVHJhbnNmb3JtV2F0ZXJtYXJrc10KCiAgICBmb3Igcm9vdF90cmFuc2Zvcm0gaW4gcm9vdF90cmFuc2Zvcm1zOgogICAgICBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrc1tyb290X3RyYW5zZm9ybV0gPSBfVHJhbnNmb3JtV2F0ZXJtYXJrcygKICAgICAgICAgIHNlbGYuX2Nsb2NrLCB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW3Jvb3RfdHJhbnNmb3JtXSwgcm9vdF90cmFuc2Zvcm0pCgogICAgZm9yIGNvbnN1bWVycyBpbiB2YWx1ZV90b19jb25zdW1lcnMudmFsdWVzKCk6CiAgICAgIGZvciBjb25zdW1lciBpbiBjb25zdW1lcnM6CiAgICAgICAgc2VsZi5fdHJhbnNmb3JtX3RvX3dhdGVybWFya3NbY29uc3VtZXJdID0gX1RyYW5zZm9ybVdhdGVybWFya3MoCiAgICAgICAgICAgIHNlbGYuX2Nsb2NrLCB0cmFuc2Zvcm1fa2V5ZWRfc3RhdGVzW2NvbnN1bWVyXSwgY29uc3VtZXIpCgogICAgZm9yIGNvbnN1bWVycyBpbiB2YWx1ZV90b19jb25zdW1lcnMudmFsdWVzKCk6CiAgICAgIGZvciBjb25zdW1lciBpbiBjb25zdW1lcnM6CiAgICAgICAgc2VsZi5fdXBkYXRlX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzKGNvbnN1bWVyKQoKICBkZWYgX3VwZGF0ZV9pbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcyhzZWxmLCBhcHBsaWVkX3B0cmFuc2Zvcm0pOgogICAgIyB0eXBlOiAoQXBwbGllZFBUcmFuc2Zvcm0pIC0+IE5vbmUKICAgIGFzc2VydCBpc2luc3RhbmNlKGFwcGxpZWRfcHRyYW5zZm9ybSwgcGlwZWxpbmUuQXBwbGllZFBUcmFuc2Zvcm0pCiAgICBpbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcyA9IFtdCiAgICBmb3IgaW5wdXRfcHZhbHVlIGluIGFwcGxpZWRfcHRyYW5zZm9ybS5pbnB1dHM6CiAgICAgIGFzc2VydCBpbnB1dF9wdmFsdWUucHJvZHVjZXIgb3IgaXNpbnN0YW5jZShpbnB1dF9wdmFsdWUsIHB2YWx1ZS5QQmVnaW4pCiAgICAgIGlmIGlucHV0X3B2YWx1ZS5wcm9kdWNlcjoKICAgICAgICBpbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcy5hcHBlbmQoCiAgICAgICAgICAgIHNlbGYuZ2V0X3dhdGVybWFya3MoaW5wdXRfcHZhbHVlLnByb2R1Y2VyKSkKICAgIHNlbGYuX3RyYW5zZm9ybV90b193YXRlcm1hcmtzWwogICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybV0udXBkYXRlX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzKAogICAgICAgICAgICBpbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcykKCiAgZGVmIGdldF93YXRlcm1hcmtzKHNlbGYsIGFwcGxpZWRfcHRyYW5zZm9ybSk6CiAgICAjIHR5cGU6IChBcHBsaWVkUFRyYW5zZm9ybSkgLT4gX1RyYW5zZm9ybVdhdGVybWFya3MKCiAgICAiIiJHZXRzIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHdhdGVybWFya3MgZm9yIGFuIEFwcGxpZWRQVHJhbnNmb3JtLgoKICAgIElmIHRoZSBhcHBsaWVkX3B0cmFuc2Zvcm0gaGFzIG5vdCBwcm9jZXNzZWQgYW55IGVsZW1lbnRzLCByZXR1cm4gYQogICAgd2F0ZXJtYXJrIHdpdGggbWluaW11bSB2YWx1ZS4KCiAgICBBcmdzOgogICAgICBhcHBsaWVkX3B0cmFuc2Zvcm06IEFwcGxpZWRQVHJhbnNmb3JtIHRvIGdldCB0aGUgd2F0ZXJtYXJrcyBmb3IuCgogICAgUmV0dXJuczoKICAgICAgQSBzbmFwc2hvdCAoVHJhbnNmb3JtV2F0ZXJtYXJrcykgb2YgdGhlIGlucHV0IHdhdGVybWFyayBhbmQgb3V0cHV0CiAgICAgIHdhdGVybWFyayBmb3IgdGhlIHByb3ZpZGVkIHRyYW5zZm9ybS4KICAgICIiIgoKICAgICMgVE9ETyhhbHRheSk6IENvbXBvc2l0ZSB0cmFuc2Zvcm1zIHNob3VsZCBoYXZlIGEgY29tcG9zaXRlIHdhdGVybWFyay4gVW50aWwKICAgICMgdGhlbiB0aGV5IGFyZSByZXByZXNlbnRlZCBieSB0aGVpciBsYXN0IHRyYW5zZm9ybS4KICAgIHdoaWxlIGFwcGxpZWRfcHRyYW5zZm9ybS5wYXJ0czoKICAgICAgYXBwbGllZF9wdHJhbnNmb3JtID0gYXBwbGllZF9wdHJhbnNmb3JtLnBhcnRzWy0xXQoKICAgIHJldHVybiBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrc1thcHBsaWVkX3B0cmFuc2Zvcm1dCgogIGRlZiB1cGRhdGVfd2F0ZXJtYXJrcyhzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRfY29tbWl0dGVkX2J1bmRsZSwgICMgdHlwZTogX0J1bmRsZQogICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sICAjIHR5cGU6IEFwcGxpZWRQVHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF90aW1lcnMsCiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMsCiAgICAgICAgICAgICAgICAgICAgICAgIHVucHJvY2Vzc2VkX2J1bmRsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIGtleWVkX2VhcmxpZXN0X2hvbGRzLAogICAgICAgICAgICAgICAgICAgICAgICBzaWRlX2lucHV0c19jb250YWluZXIKICAgICAgICAgICAgICAgICAgICAgICApOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXBwbGllZF9wdHJhbnNmb3JtLCBwaXBlbGluZS5BcHBsaWVkUFRyYW5zZm9ybSkKICAgIHNlbGYuX3VwZGF0ZV9wZW5kaW5nKAogICAgICAgIGNvbXBsZXRlZF9jb21taXR0ZWRfYnVuZGxlLAogICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwKICAgICAgICBjb21wbGV0ZWRfdGltZXJzLAogICAgICAgIG91dHB1dHMsCiAgICAgICAgdW5wcm9jZXNzZWRfYnVuZGxlcykKICAgIHR3ID0gc2VsZi5nZXRfd2F0ZXJtYXJrcyhhcHBsaWVkX3B0cmFuc2Zvcm0pCiAgICB0dy5ob2xkKGtleWVkX2VhcmxpZXN0X2hvbGRzKQogICAgcmV0dXJuIHNlbGYuX3JlZnJlc2hfd2F0ZXJtYXJrcyhhcHBsaWVkX3B0cmFuc2Zvcm0sIHNpZGVfaW5wdXRzX2NvbnRhaW5lcikKCiAgZGVmIF91cGRhdGVfcGVuZGluZyhzZWxmLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSwKICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWRfcHRyYW5zZm9ybSwgICMgdHlwZTogQXBwbGllZFBUcmFuc2Zvcm0KICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF90aW1lcnMsCiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZXMsICAjIHR5cGU6IEl0ZXJhYmxlW19CdW5kbGVdCiAgICAgICAgICAgICAgICAgICAgICB1bnByb2Nlc3NlZF9idW5kbGVzICAjIHR5cGU6IEl0ZXJhYmxlW19CdW5kbGVdCiAgICAgICAgICAgICAgICAgICAgICk6CiAgICAiIiJVcGRhdGVkIGxpc3Qgb2YgcGVuZGluZyBidW5kbGVzIGZvciB0aGUgZ2l2ZW4gQXBwbGllZFBUcmFuc2Zvcm0uIiIiCgogICAgIyBVcGRhdGUgcGVuZGluZyBlbGVtZW50cy4gRmlsdGVyIG91dCBlbXB0eSBidW5kbGVzLiBUaGV5IGRvIG5vdCBpbXBhY3QKICAgICMgd2F0ZXJtYXJrcyBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGRvd25zdHJlYW0gZXhlY3V0aW9uLgogICAgZm9yIG91dHB1dCBpbiBvdXRwdXRfY29tbWl0dGVkX2J1bmRsZXM6CiAgICAgIGlmIG91dHB1dC5oYXNfZWxlbWVudHMoKToKICAgICAgICBpZiBvdXRwdXQucGNvbGxlY3Rpb24gaW4gc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzOgogICAgICAgICAgY29uc3VtZXJzID0gc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzW291dHB1dC5wY29sbGVjdGlvbl0KICAgICAgICAgIGZvciBjb25zdW1lciBpbiBjb25zdW1lcnM6CiAgICAgICAgICAgIGNvbnN1bWVyX3R3ID0gc2VsZi5fdHJhbnNmb3JtX3RvX3dhdGVybWFya3NbY29uc3VtZXJdCiAgICAgICAgICAgIGNvbnN1bWVyX3R3LmFkZF9wZW5kaW5nKG91dHB1dCkKCiAgICBjb21wbGV0ZWRfdHcgPSBzZWxmLl90cmFuc2Zvcm1fdG9fd2F0ZXJtYXJrc1thcHBsaWVkX3B0cmFuc2Zvcm1dCiAgICBjb21wbGV0ZWRfdHcudXBkYXRlX3RpbWVycyhjb21wbGV0ZWRfdGltZXJzKQoKICAgIGZvciB1bnByb2Nlc3NlZF9idW5kbGUgaW4gdW5wcm9jZXNzZWRfYnVuZGxlczoKICAgICAgY29tcGxldGVkX3R3LmFkZF9wZW5kaW5nKHVucHJvY2Vzc2VkX2J1bmRsZSkKCiAgICBhc3NlcnQgaW5wdXRfY29tbWl0dGVkX2J1bmRsZSBvciBhcHBsaWVkX3B0cmFuc2Zvcm0gaW4gc2VsZi5fcm9vdF90cmFuc2Zvcm1zCiAgICBpZiBpbnB1dF9jb21taXR0ZWRfYnVuZGxlIGFuZCBpbnB1dF9jb21taXR0ZWRfYnVuZGxlLmhhc19lbGVtZW50cygpOgogICAgICBjb21wbGV0ZWRfdHcucmVtb3ZlX3BlbmRpbmcoaW5wdXRfY29tbWl0dGVkX2J1bmRsZSkKCiAgZGVmIF9yZWZyZXNoX3dhdGVybWFya3Moc2VsZiwgYXBwbGllZF9wdHJhbnNmb3JtLCBzaWRlX2lucHV0c19jb250YWluZXIpOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXBwbGllZF9wdHJhbnNmb3JtLCBwaXBlbGluZS5BcHBsaWVkUFRyYW5zZm9ybSkKICAgIHVuYmxvY2tlZF90YXNrcyA9IFtdCiAgICB0dyA9IHNlbGYuZ2V0X3dhdGVybWFya3MoYXBwbGllZF9wdHJhbnNmb3JtKQogICAgaWYgdHcucmVmcmVzaCgpOgogICAgICBmb3IgcHZhbCBpbiBhcHBsaWVkX3B0cmFuc2Zvcm0ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICBpZiBpc2luc3RhbmNlKHB2YWwsIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSk6CiAgICAgICAgICBwdmFscyA9ICh2IGZvciB2IGluIHB2YWwpCiAgICAgICAgZWxzZToKICAgICAgICAgIHB2YWxzID0gKHB2YWwsICkKICAgICAgICBmb3IgdiBpbiBwdmFsczoKICAgICAgICAgIGlmIHYgaW4gc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzOiAgIyBJZiB0aGVyZSBhcmUgZG93bnN0cmVhbSBjb25zdW1lcnMKICAgICAgICAgICAgY29uc3VtZXJzID0gc2VsZi5fdmFsdWVfdG9fY29uc3VtZXJzW3ZdCiAgICAgICAgICAgIGZvciBjb25zdW1lciBpbiBjb25zdW1lcnM6CiAgICAgICAgICAgICAgdW5ibG9ja2VkX3Rhc2tzLmV4dGVuZCgKICAgICAgICAgICAgICAgICAgc2VsZi5fcmVmcmVzaF93YXRlcm1hcmtzKGNvbnN1bWVyLCBzaWRlX2lucHV0c19jb250YWluZXIpKQogICAgICAjIE5vdGlmeSB0aGUgc2lkZV9pbnB1dHNfY29udGFpbmVyLgogICAgICB1bmJsb2NrZWRfdGFza3MuZXh0ZW5kKAogICAgICAgICAgc2lkZV9pbnB1dHNfY29udGFpbmVyLgogICAgICAgICAgdXBkYXRlX3dhdGVybWFya3NfZm9yX3RyYW5zZm9ybV9hbmRfdW5ibG9ja190YXNrcygKICAgICAgICAgICAgICBhcHBsaWVkX3B0cmFuc2Zvcm0sIHR3KSkKICAgIHJldHVybiB1bmJsb2NrZWRfdGFza3MKCiAgZGVmIGV4dHJhY3RfYWxsX3RpbWVycyhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gVHVwbGVbTGlzdFtUdXBsZVtBcHBsaWVkUFRyYW5zZm9ybSwgTGlzdFtUaW1lckZpcmluZ11dXSwgYm9vbF0KCiAgICAiIiJFeHRyYWN0cyBmaXJlZCB0aW1lcnMgZm9yIGFsbCB0cmFuc2Zvcm1zCiAgICBhbmQgcmVwb3J0cyBpZiB0aGVyZSBhcmUgYW55IHRpbWVycyBzZXQuIiIiCiAgICBhbGxfdGltZXJzID0gW10gICMgdHlwZTogTGlzdFtUdXBsZVtBcHBsaWVkUFRyYW5zZm9ybSwgTGlzdFtUaW1lckZpcmluZ11dXQogICAgaGFzX3JlYWx0aW1lX3RpbWVyID0gRmFsc2UKICAgIGZvciBhcHBsaWVkX3B0cmFuc2Zvcm0sIHR3IGluIHNlbGYuX3RyYW5zZm9ybV90b193YXRlcm1hcmtzLml0ZW1zKCk6CiAgICAgIGZpcmVkX3RpbWVycywgaGFkX3JlYWx0aW1lX3RpbWVyID0gdHcuZXh0cmFjdF90cmFuc2Zvcm1fdGltZXJzKCkKICAgICAgaWYgZmlyZWRfdGltZXJzOgogICAgICAgICMgV2Ugc2hvdWxkIHNvcnQgdGhlIHRpbWVyIGZpcmluZ3MsIHNvIHRoZXkgYXJlIGZpcmVkIGluIG9yZGVyLgogICAgICAgIGZpcmVkX3RpbWVycy5zb3J0KGtleT1sYW1iZGEgZnQ6IGZ0LnRpbWVzdGFtcCkKICAgICAgICBhbGxfdGltZXJzLmFwcGVuZCgoYXBwbGllZF9wdHJhbnNmb3JtLCBmaXJlZF90aW1lcnMpKQogICAgICBpZiAoaGFkX3JlYWx0aW1lX3RpbWVyIGFuZAogICAgICAgICAgdHcub3V0cHV0X3dhdGVybWFyayA8IFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpOgogICAgICAgIGhhc19yZWFsdGltZV90aW1lciA9IFRydWUKICAgIHJldHVybiBhbGxfdGltZXJzLCBoYXNfcmVhbHRpbWVfdGltZXIKCgpjbGFzcyBfVHJhbnNmb3JtV2F0ZXJtYXJrcyhvYmplY3QpOgogICIiIlRyYWNrcyBpbnB1dCBhbmQgb3V0cHV0IHdhdGVybWFya3MgZm9yIGFuIEFwcGxpZWRQVHJhbnNmb3JtLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjbG9jaywga2V5ZWRfc3RhdGVzLCB0cmFuc2Zvcm0pOgogICAgc2VsZi5fY2xvY2sgPSBjbG9jawogICAgc2VsZi5fa2V5ZWRfc3RhdGVzID0ga2V5ZWRfc3RhdGVzCiAgICBzZWxmLl9pbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcyA9IFtdICAjIHR5cGU6IExpc3RbX1RyYW5zZm9ybVdhdGVybWFya3NdCiAgICBzZWxmLl9pbnB1dF93YXRlcm1hcmsgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19ORUdfSU5GCiAgICBzZWxmLl9vdXRwdXRfd2F0ZXJtYXJrID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfTkVHX0lORgogICAgc2VsZi5fa2V5ZWRfZWFybGllc3RfaG9sZHMgPSB7fQogICAgIyBTY2hlZHVsZWQgYnVuZGxlcyB0YXJnZXRlZCBmb3IgdGhpcyB0cmFuc2Zvcm0uCiAgICBzZWxmLl9wZW5kaW5nID0gc2V0KCkgICMgdHlwZTogU2V0W19CdW5kbGVdCiAgICBzZWxmLl9maXJlZF90aW1lcnMgPSBzZXQoKQogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKCiAgICBzZWxmLl9sYWJlbCA9IHN0cih0cmFuc2Zvcm0pCgogIGRlZiB1cGRhdGVfaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3Moc2VsZiwgaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3MpOgogICAgIyB0eXBlOiAoTGlzdFtfVHJhbnNmb3JtV2F0ZXJtYXJrc10pIC0+IE5vbmUKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5faW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3MgPSBpbnB1dF90cmFuc2Zvcm1fd2F0ZXJtYXJrcwoKICBkZWYgdXBkYXRlX3RpbWVycyhzZWxmLCBjb21wbGV0ZWRfdGltZXJzKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgZm9yIHRpbWVyX2ZpcmluZyBpbiBjb21wbGV0ZWRfdGltZXJzOgogICAgICAgIHNlbGYuX2ZpcmVkX3RpbWVycy5yZW1vdmUodGltZXJfZmlyaW5nKQoKICBAcHJvcGVydHkKICBkZWYgaW5wdXRfd2F0ZXJtYXJrKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBUaW1lc3RhbXAKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYuX2lucHV0X3dhdGVybWFyawoKICBAcHJvcGVydHkKICBkZWYgb3V0cHV0X3dhdGVybWFyayhzZWxmKToKICAgICMgdHlwZTogKCkgLT4gVGltZXN0YW1wCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9vdXRwdXRfd2F0ZXJtYXJrCgogIGRlZiBob2xkKHNlbGYsIGtleWVkX2VhcmxpZXN0X2hvbGRzKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgZm9yIGtleSwgaG9sZF92YWx1ZSBpbiBrZXllZF9lYXJsaWVzdF9ob2xkcy5pdGVtcygpOgogICAgICAgIHNlbGYuX2tleWVkX2VhcmxpZXN0X2hvbGRzW2tleV0gPSBob2xkX3ZhbHVlCiAgICAgICAgaWYgKGhvbGRfdmFsdWUgaXMgTm9uZSBvcgogICAgICAgICAgICBob2xkX3ZhbHVlID09IFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYpOgogICAgICAgICAgZGVsIHNlbGYuX2tleWVkX2VhcmxpZXN0X2hvbGRzW2tleV0KCiAgZGVmIGFkZF9wZW5kaW5nKHNlbGYsIHBlbmRpbmcpOgogICAgIyB0eXBlOiAoX0J1bmRsZSkgLT4gTm9uZQogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzZWxmLl9wZW5kaW5nLmFkZChwZW5kaW5nKQoKICBkZWYgcmVtb3ZlX3BlbmRpbmcoc2VsZiwgY29tcGxldGVkKToKICAgICMgdHlwZTogKF9CdW5kbGUpIC0+IE5vbmUKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgIyBJZ25vcmUgcmVwZWF0ZWQgcmVtb3Zlcy4gVGhpcyB3aWxsIGhhcHBlbiBpZiBhIHRyYW5zZm9ybSBoYXMgYSByZXBlYXRlZAogICAgICAjIGlucHV0LgogICAgICBpZiBjb21wbGV0ZWQgaW4gc2VsZi5fcGVuZGluZzoKICAgICAgICBzZWxmLl9wZW5kaW5nLnJlbW92ZShjb21wbGV0ZWQpCgogIGRlZiByZWZyZXNoKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBib29sCgogICAgIiIiUmVmcmVzaCB0aGUgd2F0ZXJtYXJrIGZvciBhIGdpdmVuIHRyYW5zZm9ybS4KCiAgICBUaGlzIG1ldGhvZCBsb29rcyBhdCB0aGUgd2F0ZXJtYXJrIGNvbWluZyBmcm9tIGFsbCBpbnB1dCBQVHJhbnNmb3JtcywgYW5kCiAgICB0aGUgdGltZXN0YW1wIG9mIHRoZSBtaW5pbXVtIGVsZW1lbnQsIGFzIHdlbGwgYXMgYW55IHdhdGVybWFyayBob2xkcy4KCiAgICBSZXR1cm5zOgogICAgICBUcnVlIGlmIHRoZSB3YXRlcm1hcmsgaGFzIGFkdmFuY2VkLCBhbmQgRmFsc2UgaWYgaXQgaGFzIG5vdC4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBtaW5fcGVuZGluZ190aW1lc3RhbXAgPSBXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GCiAgICAgIGhhc19wZW5kaW5nX2VsZW1lbnRzID0gRmFsc2UKICAgICAgZm9yIGlucHV0X2J1bmRsZSBpbiBzZWxmLl9wZW5kaW5nOgogICAgICAgICMgVE9ETyhjY3kpOiB3ZSBjYW4gaGF2ZSB0aGUgQnVuZGxlIGNsYXNzIGtlZXAgdHJhY2sgb2YgdGhlIG1pbmltdW0KICAgICAgICAjIHRpbWVzdGFtcCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFuIGl0ZXJhdGlvbiBoZXJlLgogICAgICAgIGZvciB3diBpbiBpbnB1dF9idW5kbGUuZ2V0X2VsZW1lbnRzX2l0ZXJhYmxlKCk6CiAgICAgICAgICBoYXNfcGVuZGluZ19lbGVtZW50cyA9IFRydWUKICAgICAgICAgIGlmIHd2LnRpbWVzdGFtcCA8IG1pbl9wZW5kaW5nX3RpbWVzdGFtcDoKICAgICAgICAgICAgbWluX3BlbmRpbmdfdGltZXN0YW1wID0gd3YudGltZXN0YW1wCgogICAgICAjIElmIHRoZXJlIGlzIGEgcGVuZGluZyBlbGVtZW50IHdpdGggYSBjZXJ0YWluIHRpbWVzdGFtcCwgd2UgY2FuIGF0IG1vc3QKICAgICAgIyBhZHZhbmNlIG91ciB3YXRlcm1hcmsgdG8gdGhlIG1heGltdW0gdGltZXN0YW1wIGxlc3MgdGhhbiB0aGF0CiAgICAgICMgdGltZXN0YW1wLgogICAgICBwZW5kaW5nX2hvbGRlciA9IFdhdGVybWFya01hbmFnZXIuV0FURVJNQVJLX1BPU19JTkYKICAgICAgaWYgaGFzX3BlbmRpbmdfZWxlbWVudHM6CiAgICAgICAgcGVuZGluZ19ob2xkZXIgPSBtaW5fcGVuZGluZ190aW1lc3RhbXAgLSBUSU1FX0dSQU5VTEFSSVRZCgogICAgICBpbnB1dF93YXRlcm1hcmtzID0gWwogICAgICAgICAgdHcub3V0cHV0X3dhdGVybWFyayBmb3IgdHcgaW4gc2VsZi5faW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3MKICAgICAgXQogICAgICBpbnB1dF93YXRlcm1hcmtzLmFwcGVuZChXYXRlcm1hcmtNYW5hZ2VyLldBVEVSTUFSS19QT1NfSU5GKQogICAgICBwcm9kdWNlcl93YXRlcm1hcmsgPSBtaW4oaW5wdXRfd2F0ZXJtYXJrcykKCiAgICAgIHNlbGYuX2lucHV0X3dhdGVybWFyayA9IG1heCgKICAgICAgICAgIHNlbGYuX2lucHV0X3dhdGVybWFyaywgbWluKHBlbmRpbmdfaG9sZGVyLCBwcm9kdWNlcl93YXRlcm1hcmspKQogICAgICBlYXJsaWVzdF9ob2xkID0gV2F0ZXJtYXJrTWFuYWdlci5XQVRFUk1BUktfUE9TX0lORgogICAgICBmb3IgaG9sZCBpbiBzZWxmLl9rZXllZF9lYXJsaWVzdF9ob2xkcy52YWx1ZXMoKToKICAgICAgICBpZiBob2xkIDwgZWFybGllc3RfaG9sZDoKICAgICAgICAgIGVhcmxpZXN0X2hvbGQgPSBob2xkCiAgICAgIG5ld19vdXRwdXRfd2F0ZXJtYXJrID0gbWluKHNlbGYuX2lucHV0X3dhdGVybWFyaywgZWFybGllc3RfaG9sZCkKCiAgICAgIGFkdmFuY2VkID0gbmV3X291dHB1dF93YXRlcm1hcmsgPiBzZWxmLl9vdXRwdXRfd2F0ZXJtYXJrCiAgICAgIHNlbGYuX291dHB1dF93YXRlcm1hcmsgPSBuZXdfb3V0cHV0X3dhdGVybWFyawogICAgICByZXR1cm4gYWR2YW5jZWQKCiAgQHByb3BlcnR5CiAgZGVmIHN5bmNocm9uaXplZF9wcm9jZXNzaW5nX291dHB1dF90aW1lKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2Nsb2NrLnRpbWUoKQoKICBkZWYgZXh0cmFjdF90cmFuc2Zvcm1fdGltZXJzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBUdXBsZVtMaXN0W1RpbWVyRmlyaW5nXSwgYm9vbF0KCiAgICAiIiJFeHRyYWN0cyBmaXJlZCB0aW1lcnMgYW5kIHJlcG9ydHMgb2YgYW55IHRpbWVycyBzZXQgcGVyIHRyYW5zZm9ybS4iIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgZmlyZWRfdGltZXJzID0gW10KICAgICAgaGFzX3JlYWx0aW1lX3RpbWVyID0gRmFsc2UKICAgICAgZm9yIGVuY29kZWRfa2V5LCBzdGF0ZSBpbiBzZWxmLl9rZXllZF9zdGF0ZXMuaXRlbXMoKToKICAgICAgICB0aW1lcnMsIGhhZF9yZWFsdGltZV90aW1lciA9IHN0YXRlLmdldF90aW1lcnMoCiAgICAgICAgICAgIHdhdGVybWFyaz1zZWxmLl9pbnB1dF93YXRlcm1hcmssCiAgICAgICAgICAgIHByb2Nlc3NpbmdfdGltZT1zZWxmLl9jbG9jay50aW1lKCkpCiAgICAgICAgaWYgaGFkX3JlYWx0aW1lX3RpbWVyOgogICAgICAgICAgaGFzX3JlYWx0aW1lX3RpbWVyID0gVHJ1ZQogICAgICAgIGZvciBleHBpcmVkIGluIHRpbWVyczoKICAgICAgICAgIHdpbmRvdywgKG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApID0gZXhwaXJlZAogICAgICAgICAgZmlyZWRfdGltZXJzLmFwcGVuZCgKICAgICAgICAgICAgICBUaW1lckZpcmluZyhlbmNvZGVkX2tleSwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKSkKICAgICAgc2VsZi5fZmlyZWRfdGltZXJzLnVwZGF0ZShmaXJlZF90aW1lcnMpCiAgICAgIHJldHVybiBmaXJlZF90aW1lcnMsIGhhc19yZWFsdGltZV90aW1lcgqUfZQojBlXYXRlcm1hcmtNYW5hZ2VyLl9faW5pdF9flGpWMQEASzZLS4eUjDNXYXRlcm1hcmtNYW5hZ2VyLl91cGRhdGVfaW5wdXRfdHJhbnNmb3JtX3dhdGVybWFya3OUalYxAQBLTUtYh5SMH1dhdGVybWFya01hbmFnZXIuZ2V0X3dhdGVybWFya3OUalYxAQBLWktvh5SMIldhdGVybWFya01hbmFnZXIudXBkYXRlX3dhdGVybWFya3OUalYxAQBLcUuDh5SMIFdhdGVybWFya01hbmFnZXIuX3VwZGF0ZV9wZW5kaW5nlGpWMQEAS4VLoIeUjCRXYXRlcm1hcmtNYW5hZ2VyLl9yZWZyZXNoX3dhdGVybWFya3OUalYxAQBLoku3h5SMI1dhdGVybWFya01hbmFnZXIuZXh0cmFjdF9hbGxfdGltZXJzlGpWMQEAS7lLyYeUjBBXYXRlcm1hcmtNYW5hZ2VylGpdMQEASy5LyYeUjB1fVHJhbnNmb3JtV2F0ZXJtYXJrcy5fX2luaXRfX5RqVjEBAEvOS9qHlIw2X1RyYW5zZm9ybVdhdGVybWFya3MudXBkYXRlX2lucHV0X3RyYW5zZm9ybV93YXRlcm1hcmtzlGpWMQEAS9xL34eUjCJfVHJhbnNmb3JtV2F0ZXJtYXJrcy51cGRhdGVfdGltZXJzlGpWMQEAS+FL5IeUjCRfVHJhbnNmb3JtV2F0ZXJtYXJrcy5pbnB1dF93YXRlcm1hcmuUalYxAQBL5kvqh5SMJV9UcmFuc2Zvcm1XYXRlcm1hcmtzLm91dHB1dF93YXRlcm1hcmuUalYxAQBL7Evwh5SMGV9UcmFuc2Zvcm1XYXRlcm1hcmtzLmhvbGSUalYxAQBL8kv4h5SMIF9UcmFuc2Zvcm1XYXRlcm1hcmtzLmFkZF9wZW5kaW5nlGpWMQEAS/pL/YeUjCNfVHJhbnNmb3JtV2F0ZXJtYXJrcy5yZW1vdmVfcGVuZGluZ5RqVjEBAEv/TQUBh5SMHF9UcmFuc2Zvcm1XYXRlcm1hcmtzLnJlZnJlc2iUalYxAQBNBwFNNAGHlIw4X1RyYW5zZm9ybVdhdGVybWFya3Muc3luY2hyb25pemVkX3Byb2Nlc3Npbmdfb3V0cHV0X3RpbWWUalYxAQBNNgFNOAGHlIwtX1RyYW5zZm9ybVdhdGVybWFya3MuZXh0cmFjdF90cmFuc2Zvcm1fdGltZXJzlGpWMQEATToBTUwBh5SMFF9UcmFuc2Zvcm1XYXRlcm1hcmtzlGpdMQEAS8xNTAGHlHV9lCiMEFdhdGVybWFya01hbmFnZXKUaosDAACMH1dhdGVybWFya01hbmFnZXIuZ2V0X3dhdGVybWFya3OUaosDAACMIldhdGVybWFya01hbmFnZXIudXBkYXRlX3dhdGVybWFya3OUaosDAACMI1dhdGVybWFya01hbmFnZXIuZXh0cmFjdF9hbGxfdGltZXJzlGqLAwAAdYwsYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3Qud2F0ZXJtYXJrX21hbmFnZXKUdJSMG2FwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcJQoWL8zAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlRpbWVzdGFtcCB1dGlsaXRpZXMuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGRhdGV0aW1lCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHR5cGluZyBpbXBvcnQgQW55CmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgpmcm9tIHR5cGluZyBpbXBvcnQgb3ZlcmxvYWQKCmltcG9ydCBkYXRldXRpbC5wYXJzZXIKaW1wb3J0IHB5dHoKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IGR1cmF0aW9uX3BiMgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgdGltZXN0YW1wX3BiMgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IGxvbmcKCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IGNvbW1vbl91cm5zCgojIHR5cGVzIGNvbXBhdGlibGUgd2l0aCBUaW1lc3RhbXAub2YoKQpUaW1lc3RhbXBUeXBlcyA9IFVuaW9uW2ludCwgZmxvYXQsICdUaW1lc3RhbXAnXQojIHR5cGVzIGNvbXBhdGlibGUgd2l0aCBEdXJhdGlvbi5vZigpCkR1cmF0aW9uVHlwZXMgPSBVbmlvbltpbnQsIGZsb2F0LCAnRHVyYXRpb24nXQpUaW1lc3RhbXBEdXJhdGlvblR5cGVzID0gVW5pb25baW50LCBmbG9hdCwgJ0R1cmF0aW9uJywgJ1RpbWVzdGFtcCddCgoKY2xhc3MgVGltZXN0YW1wKG9iamVjdCk6CiAgIiIiUmVwcmVzZW50cyBhIFVuaXggc2Vjb25kIHRpbWVzdGFtcCB3aXRoIG1pY3Jvc2Vjb25kIGdyYW51bGFyaXR5LgoKICBDYW4gYmUgdHJlYXRlZCBpbiBjb21tb24gdGltZXN0YW1wIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcyBhIG51bWVyaWMgdHlwZS4KCiAgSW50ZXJuYWxseSBzdG9yZXMgYSB0aW1lIGludGVydmFsIGFzIGFuIGludCBvZiBtaWNyb3NlY29uZHMuIFRoaXMgc3RyYXRlZ3kKICBpcyBuZWNlc3Nhcnkgc2luY2UgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGxvc2UgcHJlY2lzaW9uIHdoZW4gc3RvcmluZyB2YWx1ZXMsCiAgZXNwZWNpYWxseSBhZnRlciBhcml0aG1ldGljIG9wZXJhdGlvbnMgKGZvciBleGFtcGxlLCAxMDAwMDAwMCAlIDAuMSBldmFsdWF0ZXMKICB0byAwLjA5OTk5OTk5OTQ0NDg4ODUpLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBzZWNvbmRzPTAsIG1pY3Jvcz0wKToKICAgICMgdHlwZTogKFVuaW9uW2ludCwgZmxvYXRdLCBVbmlvbltpbnQsIGZsb2F0XSkgLT4gTm9uZQogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2Vjb25kcywgKGludCwgbG9uZywgZmxvYXQpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ0Nhbm5vdCBpbnRlcnByZXQgJXMgJXMgYXMgc2Vjb25kcy4nICUgKHNlY29uZHMsIHR5cGUoc2Vjb25kcykpKQogICAgaWYgbm90IGlzaW5zdGFuY2UobWljcm9zLCAoaW50LCBsb25nLCBmbG9hdCkpOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnQ2Fubm90IGludGVycHJldCAlcyAlcyBhcyBtaWNyb3MuJyAlIChtaWNyb3MsIHR5cGUobWljcm9zKSkpCiAgICBzZWxmLm1pY3JvcyA9IGludChzZWNvbmRzICogMTAwMDAwMCkgKyBpbnQobWljcm9zKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG9mKHNlY29uZHMpOgogICAgIyB0eXBlOiAoVGltZXN0YW1wVHlwZXMpIC0+IFRpbWVzdGFtcAoKICAgICIiIlJldHVybiB0aGUgVGltZXN0YW1wIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMuCgogICAgSWYgdGhlIGlucHV0IGlzIGFscmVhZHkgYSBUaW1lc3RhbXAsIHRoZSBpbnB1dCBpdHNlbGYgd2lsbCBiZSByZXR1cm5lZC4KCiAgICBBcmdzOgogICAgICBzZWNvbmRzOiBOdW1iZXIgb2Ygc2Vjb25kcyBhcyBpbnQsIGZsb2F0LCBsb25nLCBvciBUaW1lc3RhbXAuCgogICAgUmV0dXJuczoKICAgICAgQ29ycmVzcG9uZGluZyBUaW1lc3RhbXAgb2JqZWN0LgogICAgIiIiCgogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2Vjb25kcywgKGludCwgbG9uZywgZmxvYXQsIFRpbWVzdGFtcCkpOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnQ2Fubm90IGludGVycHJldCAlcyAlcyBhcyBUaW1lc3RhbXAuJyAlIChzZWNvbmRzLCB0eXBlKHNlY29uZHMpKSkKICAgIGlmIGlzaW5zdGFuY2Uoc2Vjb25kcywgVGltZXN0YW1wKToKICAgICAgcmV0dXJuIHNlY29uZHMKICAgIHJldHVybiBUaW1lc3RhbXAoc2Vjb25kcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBub3coKToKICAgIHJldHVybiBUaW1lc3RhbXAoc2Vjb25kcz10aW1lLnRpbWUoKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZXBvY2hfZGF0ZXRpbWVfdXRjKCk6CiAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgwLCBweXR6LnV0YykKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGZyb21fdXRjX2RhdGV0aW1lKGNscywgZHQpOgogICAgIiIiQ3JlYXRlIGEgYGBUaW1lc3RhbXBgYCBpbnN0YW5jZSBmcm9tIGEgYGBkYXRldGltZS5kYXRldGltZWBgIG9iamVjdC4KCiAgICBBcmdzOgogICAgICBkdDogQSBgYGRhdGV0aW1lLmRhdGV0aW1lYGAgb2JqZWN0IGluIFVUQyAob2Zmc2V0LWF3YXJlKS4KICAgICIiIgogICAgaWYgZHQudHppbmZvICE9IHB5dHoudXRjOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdkdCBub3QgaW4gVVRDOiAlcycgJSBkdCkKICAgIGR1cmF0aW9uID0gZHQgLSBjbHMuX2Vwb2NoX2RhdGV0aW1lX3V0YygpCiAgICByZXR1cm4gVGltZXN0YW1wKGR1cmF0aW9uLnRvdGFsX3NlY29uZHMoKSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGZyb21fcmZjMzMzOShjbHMsIHJmYzMzMzkpOgogICAgIiIiQ3JlYXRlIGEgYGBUaW1lc3RhbXBgYCBpbnN0YW5jZSBmcm9tIGFuIFJGQyAzMzM5IGNvbXBsaWFudCBzdHJpbmcuCgogICAgLi4gbm90ZTo6CiAgICAgIEFsbCB0aW1lem9uZXMgYXJlIGltcGxpY2l0bHkgY29udmVydGVkIHRvIFVUQy4KCiAgICBBcmdzOgogICAgICByZmMzMzM5OiBTdHJpbmcgaW4gUkZDIDMzMzkgZm9ybS4KICAgICIiIgogICAgdHJ5OgogICAgICBkdCA9IGRhdGV1dGlsLnBhcnNlci5pc29wYXJzZShyZmMzMzM5KS5hc3RpbWV6b25lKHB5dHouVVRDKQogICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJDb3VsZCBub3QgcGFyc2UgUkZDIDMzMzkgc3RyaW5nICd7fScgZHVlIHRvIGVycm9yOiAne30nLiIuZm9ybWF0KAogICAgICAgICAgICAgIHJmYzMzMzksIGUpKQogICAgcmV0dXJuIGNscy5mcm9tX3V0Y19kYXRldGltZShkdCkKCiAgZGVmIHByZWRlY2Vzc29yKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgbGFyZ2VzdCB0aW1lc3RhbXAgc21hbGxlciB0aGFuIHNlbGYuIiIiCiAgICByZXR1cm4gVGltZXN0YW1wKG1pY3Jvcz1zZWxmLm1pY3JvcyAtIDEpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIG1pY3JvcyA9IHNlbGYubWljcm9zCiAgICBzaWduID0gJycKICAgIGlmIG1pY3JvcyA8IDA6CiAgICAgIHNpZ24gPSAnLScKICAgICAgbWljcm9zID0gLW1pY3JvcwogICAgaW50X3BhcnQgPSBtaWNyb3MgLy8gMTAwMDAwMAogICAgZnJhY19wYXJ0ID0gbWljcm9zICUgMTAwMDAwMAogICAgaWYgZnJhY19wYXJ0OgogICAgICByZXR1cm4gJ1RpbWVzdGFtcCglcyVkLiUwNmQpJyAlIChzaWduLCBpbnRfcGFydCwgZnJhY19wYXJ0KQogICAgcmV0dXJuICdUaW1lc3RhbXAoJXMlZCknICUgKHNpZ24sIGludF9wYXJ0KQoKICBkZWYgdG9fdXRjX2RhdGV0aW1lKHNlbGYpOgogICAgIyBXZSBjYW4ndCBlYXNpbHkgY29uc3RydWN0IGEgZGF0ZXRpbWUgb2JqZWN0IGZyb20gbWljcm9zZWNvbmRzLCBzbyB3ZQogICAgIyBjcmVhdGUgb25lIGF0IHRoZSBlcG9jaCBhbmQgYWRkIGFuIGFwcHJvcHJpYXRlIHRpbWVkZWx0YSBpbnRlcnZhbC4KICAgIHJldHVybiBzZWxmLl9lcG9jaF9kYXRldGltZV91dGMoKS5yZXBsYWNlKHR6aW5mbz1Ob25lKSArIGRhdGV0aW1lLnRpbWVkZWx0YSgKICAgICAgICBtaWNyb3NlY29uZHM9c2VsZi5taWNyb3MpCgogIGRlZiB0b19yZmMzMzM5KHNlbGYpOgogICAgIyBBcHBlbmQgJ1onIGZvciBVVEMgdGltZXpvbmUuCiAgICByZXR1cm4gc2VsZi50b191dGNfZGF0ZXRpbWUoKS5pc29mb3JtYXQoKSArICdaJwoKICBkZWYgdG9fcHJvdG8oc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBgZ29vZ2xlLnByb3RvYnVmLnRpbWVzdGFtcF9wYjJgIHJlcHJlc2VudGF0aW9uLiIiIgogICAgc2VjcyA9IHNlbGYubWljcm9zIC8vIDEwMDAwMDAKICAgIG5hbm9zID0gKHNlbGYubWljcm9zICUgMTAwMDAwMCkgKiAxMDAwCiAgICByZXR1cm4gdGltZXN0YW1wX3BiMi5UaW1lc3RhbXAoc2Vjb25kcz1zZWNzLCBuYW5vcz1uYW5vcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3Byb3RvKHRpbWVzdGFtcF9wcm90byk6CiAgICAiIiJDcmVhdGVzIGEgVGltZXN0YW1wIGZyb20gYSBgZ29vZ2xlLnByb3RvYnVmLnRpbWVzdGFtcF9wYjJgLgoKICAgIE5vdGUgdGhhdCB0aGUgZ29vZ2xlIGhhcyBhIHN1Yi1zZWNvbmQgcmVzb2x1dGlvbiBvZiBuYW5vc2Vjb25kcyB3aGVyZWFzIHRoaXMKICAgIGNsYXNzIGhhcyBhIHJlc29sdXRpb24gb2YgbWljcm9zZW5kcy4gVGhpcyBjbGFzcyB3aWxsIHRydW5jYXRlIHRoZQogICAgbmFub3NlY29uZCByZXNvbHV0aW9uIGRvd24gdG8gdGhlIG1pY3Jvc2Vjb25kLgogICAgIiIiCgogICAgaWYgdGltZXN0YW1wX3Byb3RvLm5hbm9zICUgMTAwMCAhPSAwOgogICAgICAjIFRPRE8oQkVBTS04NzM4KTogQmV0dGVyIGRlZmluZSB0aW1lc3RhbXBzLgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgIkNhbm5vdCBjb252ZXJ0IGZyb20gbmFub3NlY29uZHMgdG8gbWljcm9zZWNvbmRzICIgKwogICAgICAgICAgImJlY2F1c2UgdGhpcyBsb3NlcyBwcmVjaXNpb24uIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCAiICsKICAgICAgICAgICJ0aGlzIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIHlvdSB3YW50IGFuZCBtYW51YWxseSAiICsKICAgICAgICAgICJ0cnVuY2F0ZSB0aGUgcHJlY2lzaW9uIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kcy4gIiArCiAgICAgICAgICAiU2VlIFtCRUFNLTg3MzhdIGZvciBtb3JlIGluZm9ybWF0aW9uLiIpCgogICAgcmV0dXJuIFRpbWVzdGFtcCgKICAgICAgICBzZWNvbmRzPXRpbWVzdGFtcF9wcm90by5zZWNvbmRzLCBtaWNyb3M9dGltZXN0YW1wX3Byb3RvLm5hbm9zIC8vIDEwMDApCgogIGRlZiBfX2Zsb2F0X18oc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGZsb2F0CiAgICAjIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgdmFsdWUgbWF5IGhhdmUgbG9zdCBwcmVjaXNpb24uCiAgICByZXR1cm4gc2VsZi5taWNyb3MgLyAxMDAwMDAwCgogIGRlZiBfX2ludF9fKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBpbnQKICAgICMgTm90ZSB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBtYXkgaGF2ZSBsb3N0IHByZWNpc2lvbi4KICAgIHJldHVybiBzZWxmLm1pY3JvcyAvLyAxMDAwMDAwCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoVGltZXN0YW1wRHVyYXRpb25UeXBlcykgLT4gYm9vbAogICAgIyBBbGxvdyBjb21wYXJpc29ucyBiZXR3ZWVuIER1cmF0aW9uIGFuZCBUaW1lc3RhbXAgdmFsdWVzLgogICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIER1cmF0aW9uKToKICAgICAgdHJ5OgogICAgICAgIG90aGVyID0gVGltZXN0YW1wLm9mKG90aGVyKQogICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgcmV0dXJuIHNlbGYubWljcm9zID09IG90aGVyLm1pY3JvcwoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKEFueSkgLT4gYm9vbAogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKFRpbWVzdGFtcER1cmF0aW9uVHlwZXMpIC0+IGJvb2wKICAgICMgQWxsb3cgY29tcGFyaXNvbnMgYmV0d2VlbiBEdXJhdGlvbiBhbmQgVGltZXN0YW1wIHZhbHVlcy4KICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBEdXJhdGlvbik6CiAgICAgIG90aGVyID0gVGltZXN0YW1wLm9mKG90aGVyKQogICAgcmV0dXJuIHNlbGYubWljcm9zIDwgb3RoZXIubWljcm9zCgogIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoVGltZXN0YW1wRHVyYXRpb25UeXBlcykgLT4gYm9vbAogICAgcmV0dXJuIG5vdCAoc2VsZiA8IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpCgogIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoVGltZXN0YW1wRHVyYXRpb25UeXBlcykgLT4gYm9vbAogICAgcmV0dXJuIHNlbGYgPCBvdGhlciBvciBzZWxmID09IG90aGVyCgogIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoVGltZXN0YW1wRHVyYXRpb25UeXBlcykgLT4gYm9vbAogICAgcmV0dXJuIG5vdCBzZWxmIDwgb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5taWNyb3MpCgogIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKER1cmF0aW9uVHlwZXMpIC0+IFRpbWVzdGFtcAogICAgb3RoZXIgPSBEdXJhdGlvbi5vZihvdGhlcikKICAgIHJldHVybiBUaW1lc3RhbXAobWljcm9zPXNlbGYubWljcm9zICsgb3RoZXIubWljcm9zKQoKICBkZWYgX19yYWRkX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoRHVyYXRpb25UeXBlcykgLT4gVGltZXN0YW1wCiAgICByZXR1cm4gc2VsZiArIG90aGVyCgogIEBvdmVybG9hZAogIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKER1cmF0aW9uVHlwZXMpIC0+IFRpbWVzdGFtcAogICAgcGFzcwoKICBAb3ZlcmxvYWQKICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CiAgICAjIHR5cGU6IChUaW1lc3RhbXApIC0+IER1cmF0aW9uCiAgICBwYXNzCgogIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRpbWVzdGFtcCk6CiAgICAgIHJldHVybiBEdXJhdGlvbihtaWNyb3M9c2VsZi5taWNyb3MgLSBvdGhlci5taWNyb3MpCiAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIFRpbWVzdGFtcChtaWNyb3M9c2VsZi5taWNyb3MgLSBvdGhlci5taWNyb3MpCgogIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKER1cmF0aW9uVHlwZXMpIC0+IER1cmF0aW9uCiAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIER1cmF0aW9uKG1pY3Jvcz1zZWxmLm1pY3JvcyAlIG90aGVyLm1pY3JvcykKCgpNSU5fVElNRVNUQU1QID0gVGltZXN0YW1wKAogICAgbWljcm9zPWludChjb21tb25fdXJucy5jb25zdGFudHMuTUlOX1RJTUVTVEFNUF9NSUxMSVMuY29uc3RhbnQpICogMTAwMCkKTUFYX1RJTUVTVEFNUCA9IFRpbWVzdGFtcCgKICAgIG1pY3Jvcz1pbnQoY29tbW9uX3VybnMuY29uc3RhbnRzLk1BWF9USU1FU1RBTVBfTUlMTElTLmNvbnN0YW50KSAqIDEwMDApCgoKY2xhc3MgRHVyYXRpb24ob2JqZWN0KToKICAiIiJSZXByZXNlbnRzIGEgc2Vjb25kIGR1cmF0aW9uIHdpdGggbWljcm9zZWNvbmQgZ3JhbnVsYXJpdHkuCgogIENhbiBiZSB0cmVhdGVkIGluIGNvbW1vbiBhcml0aG1ldGljIG9wZXJhdGlvbnMgYXMgYSBudW1lcmljIHR5cGUuCgogIEludGVybmFsbHkgc3RvcmVzIGEgdGltZSBpbnRlcnZhbCBhcyBhbiBpbnQgb2YgbWljcm9zZWNvbmRzLiBUaGlzIHN0cmF0ZWd5CiAgaXMgbmVjZXNzYXJ5IHNpbmNlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBsb3NlIHByZWNpc2lvbiB3aGVuIHN0b3JpbmcgdmFsdWVzLAogIGVzcGVjaWFsbHkgYWZ0ZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChmb3IgZXhhbXBsZSwgMTAwMDAwMDAgJSAwLjEgZXZhbHVhdGVzCiAgdG8gMC4wOTk5OTk5OTk0NDQ4ODg1KS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgc2Vjb25kcz0wLCBtaWNyb3M9MCk6CiAgICAjIHR5cGU6IChVbmlvbltpbnQsIGZsb2F0XSwgVW5pb25baW50LCBmbG9hdF0pIC0+IE5vbmUKICAgIHNlbGYubWljcm9zID0gaW50KHNlY29uZHMgKiAxMDAwMDAwKSArIGludChtaWNyb3MpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgb2Yoc2Vjb25kcyk6CiAgICAjIHR5cGU6IChEdXJhdGlvblR5cGVzKSAtPiBEdXJhdGlvbgoKICAgICIiIlJldHVybiB0aGUgRHVyYXRpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBVbml4IGVwb2NoLgoKICAgIElmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGEgRHVyYXRpb24sIHRoZSBpbnB1dCBpdHNlbGYgd2lsbCBiZSByZXR1cm5lZC4KCiAgICBBcmdzOgogICAgICBzZWNvbmRzOiBOdW1iZXIgb2Ygc2Vjb25kcyBhcyBpbnQsIGZsb2F0IG9yIER1cmF0aW9uLgoKICAgIFJldHVybnM6CiAgICAgIENvcnJlc3BvbmRpbmcgRHVyYXRpb24gb2JqZWN0LgogICAgIiIiCgogICAgaWYgaXNpbnN0YW5jZShzZWNvbmRzLCBUaW1lc3RhbXApOgogICAgICByYWlzZSBUeXBlRXJyb3IoJ0Nhbm5vdCBpbnRlcnByZXQgJXMgYXMgRHVyYXRpb24uJyAlIHNlY29uZHMpCiAgICBpZiBpc2luc3RhbmNlKHNlY29uZHMsIER1cmF0aW9uKToKICAgICAgcmV0dXJuIHNlY29uZHMKICAgIHJldHVybiBEdXJhdGlvbihzZWNvbmRzKQoKICBkZWYgdG9fcHJvdG8oc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBgZ29vZ2xlLnByb3RvYnVmLmR1cmF0aW9uX3BiMmAgcmVwcmVzZW50YXRpb24uIiIiCiAgICBzZWNzID0gc2VsZi5taWNyb3MgLy8gMTAwMDAwMAogICAgbmFub3MgPSAoc2VsZi5taWNyb3MgJSAxMDAwMDAwKSAqIDEwMDAKICAgIHJldHVybiBkdXJhdGlvbl9wYjIuRHVyYXRpb24oc2Vjb25kcz1zZWNzLCBuYW5vcz1uYW5vcykKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3Byb3RvKGR1cmF0aW9uX3Byb3RvKToKICAgICIiIkNyZWF0ZXMgYSBEdXJhdGlvbiBmcm9tIGEgYGdvb2dsZS5wcm90b2J1Zi5kdXJhdGlvbl9wYjJgLgoKICAgIE5vdGUgdGhhdCB0aGUgZ29vZ2xlIGhhcyBhIHN1Yi1zZWNvbmQgcmVzb2x1dGlvbiBvZiBuYW5vc2Vjb25kcyB3aGVyZWFzIHRoaXMKICAgIGNsYXNzIGhhcyBhIHJlc29sdXRpb24gb2YgbWljcm9zZW5kcy4gVGhpcyBjbGFzcyB3aWxsIHRydW5jYXRlIHRoZQogICAgbmFub3NlY29uZCByZXNvbHV0aW9uIGRvd24gdG8gdGhlIG1pY3Jvc2Vjb25kLgogICAgIiIiCgogICAgaWYgZHVyYXRpb25fcHJvdG8ubmFub3MgJSAxMDAwICE9IDA6CiAgICAgICMgVE9ETyhCRUFNLTg3MzgpOiBCZXR0ZXIgZGVmaW5lIGR1cmF0aW9ucy4KICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJDYW5ub3QgY29udmVydCBmcm9tIG5hbm9zZWNvbmRzIHRvIG1pY3Jvc2Vjb25kcyAiICsKICAgICAgICAgICJiZWNhdXNlIHRoaXMgbG9zZXMgcHJlY2lzaW9uLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgIiArCiAgICAgICAgICAidGhpcyBpcyB0aGUgY29ycmVjdCBiZWhhdmlvciB5b3Ugd2FudCBhbmQgbWFudWFsbHkgIiArCiAgICAgICAgICAidHJ1bmNhdGUgdGhlIHByZWNpc2lvbiB0byB0aGUgbmVhcmVzdCBtaWNyb3NlY29uZHMuICIgKwogICAgICAgICAgIlNlZSBbQkVBTS04NzM4XSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKQoKICAgIHJldHVybiBEdXJhdGlvbigKICAgICAgICBzZWNvbmRzPWR1cmF0aW9uX3Byb3RvLnNlY29uZHMsIG1pY3Jvcz1kdXJhdGlvbl9wcm90by5uYW5vcyAvLyAxMDAwKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICBtaWNyb3MgPSBzZWxmLm1pY3JvcwogICAgc2lnbiA9ICcnCiAgICBpZiBtaWNyb3MgPCAwOgogICAgICBzaWduID0gJy0nCiAgICAgIG1pY3JvcyA9IC1taWNyb3MKICAgIGludF9wYXJ0ID0gbWljcm9zIC8vIDEwMDAwMDAKICAgIGZyYWNfcGFydCA9IG1pY3JvcyAlIDEwMDAwMDAKICAgIGlmIGZyYWNfcGFydDoKICAgICAgcmV0dXJuICdEdXJhdGlvbiglcyVkLiUwNmQpJyAlIChzaWduLCBpbnRfcGFydCwgZnJhY19wYXJ0KQogICAgcmV0dXJuICdEdXJhdGlvbiglcyVkKScgJSAoc2lnbiwgaW50X3BhcnQpCgogIGRlZiBfX2Zsb2F0X18oc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGZsb2F0CiAgICAjIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgdmFsdWUgbWF5IGhhdmUgbG9zdCBwcmVjaXNpb24uCiAgICByZXR1cm4gc2VsZi5taWNyb3MgLyAxMDAwMDAwCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoVW5pb25baW50LCBmbG9hdCwgRHVyYXRpb24sIFRpbWVzdGFtcF0pIC0+IGJvb2wKICAgICMgQWxsb3cgY29tcGFyaXNvbnMgYmV0d2VlbiBEdXJhdGlvbiBhbmQgVGltZXN0YW1wIHZhbHVlcy4KICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBUaW1lc3RhbXApOgogICAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIHNlbGYubWljcm9zID09IG90aGVyLm1pY3JvcwoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKEFueSkgLT4gYm9vbAogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKFRpbWVzdGFtcER1cmF0aW9uVHlwZXMpIC0+IGJvb2wKICAgICMgQWxsb3cgY29tcGFyaXNvbnMgYmV0d2VlbiBEdXJhdGlvbiBhbmQgVGltZXN0YW1wIHZhbHVlcy4KICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBUaW1lc3RhbXApOgogICAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIHNlbGYubWljcm9zIDwgb3RoZXIubWljcm9zCgogIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoVGltZXN0YW1wRHVyYXRpb25UeXBlcykgLT4gYm9vbAogICAgcmV0dXJuIG5vdCAoc2VsZiA8IG90aGVyIG9yIHNlbGYgPT0gb3RoZXIpCgogIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoVGltZXN0YW1wRHVyYXRpb25UeXBlcykgLT4gYm9vbAogICAgcmV0dXJuIHNlbGYgPCBvdGhlciBvciBzZWxmID09IG90aGVyCgogIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoVGltZXN0YW1wRHVyYXRpb25UeXBlcykgLT4gYm9vbAogICAgcmV0dXJuIG5vdCBzZWxmIDwgb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goc2VsZi5taWNyb3MpCgogIGRlZiBfX25lZ19fKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBEdXJhdGlvbgogICAgcmV0dXJuIER1cmF0aW9uKG1pY3Jvcz0tc2VsZi5taWNyb3MpCgogIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKICAgICMgdHlwZTogKER1cmF0aW9uVHlwZXMpIC0+IER1cmF0aW9uCiAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUaW1lc3RhbXApOgogICAgICByZXR1cm4gb3RoZXIgKyBzZWxmCiAgICBvdGhlciA9IER1cmF0aW9uLm9mKG90aGVyKQogICAgcmV0dXJuIER1cmF0aW9uKG1pY3Jvcz1zZWxmLm1pY3JvcyArIG90aGVyLm1pY3JvcykKCiAgZGVmIF9fcmFkZF9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmICsgb3RoZXIKCiAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoRHVyYXRpb25UeXBlcykgLT4gRHVyYXRpb24KICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gRHVyYXRpb24obWljcm9zPXNlbGYubWljcm9zIC0gb3RoZXIubWljcm9zKQoKICBkZWYgX19yc3ViX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIC0oc2VsZiAtIG90aGVyKQoKICBkZWYgX19tdWxfXyhzZWxmLCBvdGhlcik6CiAgICAjIHR5cGU6IChEdXJhdGlvblR5cGVzKSAtPiBEdXJhdGlvbgogICAgb3RoZXIgPSBEdXJhdGlvbi5vZihvdGhlcikKICAgIHJldHVybiBEdXJhdGlvbihtaWNyb3M9c2VsZi5taWNyb3MgKiBvdGhlci5taWNyb3MgLy8gMTAwMDAwMCkKCiAgZGVmIF9fcm11bF9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmICogb3RoZXIKCiAgZGVmIF9fbW9kX18oc2VsZiwgb3RoZXIpOgogICAgIyB0eXBlOiAoRHVyYXRpb25UeXBlcykgLT4gRHVyYXRpb24KICAgIG90aGVyID0gRHVyYXRpb24ub2Yob3RoZXIpCiAgICByZXR1cm4gRHVyYXRpb24obWljcm9zPXNlbGYubWljcm9zICUgb3RoZXIubWljcm9zKQoKCiMgVGhlIG1pbmltdW0gZ3JhbnVsYXJpdHkgLyBpbnRlcnZhbCBleHByZXNzaWJsZSBpbiBhIFRpbWVzdGFtcCAvIER1cmF0aW9uCiMgb2JqZWN0LgpUSU1FX0dSQU5VTEFSSVRZID0gRHVyYXRpb24obWljcm9zPTEpCpR9lCiMElRpbWVzdGFtcC5fX2luaXRfX5RqVjEBAEs8S0SHlIwMVGltZXN0YW1wLm9mlGpWMQEAS0ZLWoeUjA1UaW1lc3RhbXAubm93lGpWMQEAS1xLXoeUjB1UaW1lc3RhbXAuX2Vwb2NoX2RhdGV0aW1lX3V0Y5RqVjEBAEtgS2KHlIwbVGltZXN0YW1wLmZyb21fdXRjX2RhdGV0aW1llGpWMQEAS2RLboeUjBZUaW1lc3RhbXAuZnJvbV9yZmMzMzM5lGpWMQEAS3BLgIeUjBVUaW1lc3RhbXAucHJlZGVjZXNzb3KUalYxAQBLgkuEh5SMElRpbWVzdGFtcC5fX3JlcHJfX5RqVjEBAEuGS5CHlIwZVGltZXN0YW1wLnRvX3V0Y19kYXRldGltZZRqVjEBAEuSS5aHlIwUVGltZXN0YW1wLnRvX3JmYzMzMzmUalYxAQBLmEuah5SMElRpbWVzdGFtcC50b19wcm90b5RqVjEBAEucS6CHlIwUVGltZXN0YW1wLmZyb21fcHJvdG+UalYxAQBLoku1h5SME1RpbWVzdGFtcC5fX2Zsb2F0X1+UalYxAQBLt0u6h5SMEVRpbWVzdGFtcC5fX2ludF9flGpWMQEAS7xLv4eUjBBUaW1lc3RhbXAuX19lcV9flGpWMQEAS8FLyYeUjBBUaW1lc3RhbXAuX19uZV9flGpWMQEAS8tLzoeUjBBUaW1lc3RhbXAuX19sdF9flGpWMQEAS9BL1YeUjBBUaW1lc3RhbXAuX19ndF9flGpWMQEAS9dL2YeUjBBUaW1lc3RhbXAuX19sZV9flGpWMQEAS9tL3YeUjBBUaW1lc3RhbXAuX19nZV9flGpWMQEAS99L4YeUjBJUaW1lc3RhbXAuX19oYXNoX1+UalYxAQBL40vkh5SMEVRpbWVzdGFtcC5fX2FkZF9flGpWMQEAS+ZL6YeUjBJUaW1lc3RhbXAuX19yYWRkX1+UalYxAQBL60vth5SMEVRpbWVzdGFtcC5fX3N1Yl9flGpWMQEAS/lL/YeUjBFUaW1lc3RhbXAuX19tb2RfX5RqVjEBAEv/TQIBh5SMCVRpbWVzdGFtcJRqXTEBAEsyTQIBh5SMEUR1cmF0aW9uLl9faW5pdF9flGpWMQEATRUBTRcBh5SMC0R1cmF0aW9uLm9mlGpWMQEATRkBTSwBh5SMEUR1cmF0aW9uLnRvX3Byb3RvlGpWMQEATS4BTTIBh5SME0R1cmF0aW9uLmZyb21fcHJvdG+UalYxAQBNNAFNRwGHlIwRRHVyYXRpb24uX19yZXByX1+UalYxAQBNSQFNUwGHlIwSRHVyYXRpb24uX19mbG9hdF9flGpWMQEATVUBTVgBh5SMD0R1cmF0aW9uLl9fZXFfX5RqVjEBAE1aAU1fAYeUjA9EdXJhdGlvbi5fX25lX1+UalYxAQBNYQFNZAGHlIwPRHVyYXRpb24uX19sdF9flGpWMQEATWYBTWsBh5SMD0R1cmF0aW9uLl9fZ3RfX5RqVjEBAE1tAU1vAYeUjA9EdXJhdGlvbi5fX2xlX1+UalYxAQBNcQFNcwGHlIwPRHVyYXRpb24uX19nZV9flGpWMQEATXUBTXcBh5SMEUR1cmF0aW9uLl9faGFzaF9flGpWMQEATXkBTXoBh5SMEER1cmF0aW9uLl9fbmVnX1+UalYxAQBNfAFNfgGHlIwQRHVyYXRpb24uX19hZGRfX5RqVjEBAE2AAU2FAYeUjBFEdXJhdGlvbi5fX3JhZGRfX5RqVjEBAE2HAU2IAYeUjBBEdXJhdGlvbi5fX3N1Yl9flGpWMQEATYoBTY0Bh5SMEUR1cmF0aW9uLl9fcnN1Yl9flGpWMQEATY8BTZABh5SMEER1cmF0aW9uLl9fbXVsX1+UalYxAQBNkgFNlQGHlIwRRHVyYXRpb24uX19ybXVsX1+UalYxAQBNlwFNmAGHlIwQRHVyYXRpb24uX19tb2RfX5RqVjEBAE2aAU2dAYeUjAhEdXJhdGlvbpRqXTEBAE0LAU2dAYeUdX2UKIwJVGltZXN0YW1wlGqsAwAAjAxUaW1lc3RhbXAub2aUaqwDAACMDVRpbWVzdGFtcC5ub3eUaqwDAACMG1RpbWVzdGFtcC5mcm9tX3V0Y19kYXRldGltZZRqrAMAAIwWVGltZXN0YW1wLmZyb21fcmZjMzMzOZRqrAMAAIwVVGltZXN0YW1wLnByZWRlY2Vzc29ylGqsAwAAjBlUaW1lc3RhbXAudG9fdXRjX2RhdGV0aW1llGqsAwAAjBRUaW1lc3RhbXAudG9fcmZjMzMzOZRqrAMAAIwSVGltZXN0YW1wLnRvX3Byb3RvlGqsAwAAjBRUaW1lc3RhbXAuZnJvbV9wcm90b5RqrAMAAIwIRHVyYXRpb26UaqwDAACMC0R1cmF0aW9uLm9mlGqsAwAAjBFEdXJhdGlvbi50b19wcm90b5RqrAMAAIwTRHVyYXRpb24uZnJvbV9wcm90b5RqrAMAAHWMLGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LndhdGVybWFya19tYW5hZ2VylHSUjDZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2KUKFh9MQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJNb2R1bGUgdG8gYnVpbGQgYW5kIHJ1biBiYWNrZ3JvdW5kIGNhY2hpbmcgam9iLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKQSBiYWNrZ3JvdW5kIGNhY2hpbmcgam9iIGlzIGEgam9iIHRoYXQgY2FwdHVyZXMgZXZlbnRzIGZvciBhbGwgY2FwdHVyYWJsZQpzb3VyY2VzIG9mIGEgZ2l2ZW4gcGlwZWxpbmUuIFdpdGggSW50ZXJhY3RpdmUgQmVhbSwgb25lIHN1Y2ggam9iIGlzIHN0YXJ0ZWQgd2hlbgphIHBpcGVsaW5lIHJ1biBoYXBwZW5zICh3aGljaCBwcm9kdWNlcyBhIG1haW4gam9iIGluIGNvbnRyYXN0IHRvIHRoZSBiYWNrZ3JvdW5kCmNhY2hpbmcgam9iKSBhbmQgbWVldHMgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKICAjLiBUaGUgcGlwZWxpbmUgY29udGFpbnMgY2FwdHVyYWJsZSBzb3VyY2VzLCBjb25maWd1cmVkIHRocm91Z2gKICAgICBpbnRlcmFjdGl2ZV9iZWFtLm9wdGlvbnMuY2FwdHVyYWJsZV9zb3VyY2VzLgogICMuIE5vIHN1Y2ggYmFja2dyb3VuZCBqb2IgaXMgcnVubmluZy4KICAjLiBObyBzdWNoIGJhY2tncm91bmQgam9iIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCB0aGUgY2FjaGVkIGV2ZW50cyBhcmUKICAgICBzdGlsbCB2YWxpZCAoaW52YWxpZGF0ZWQgd2hlbiBjYXB0dXJhYmxlIHNvdXJjZXMgY2hhbmdlIGluIHRoZSBwaXBlbGluZSkuCgpPbmNlIHN0YXJ0ZWQsIHRoZSBiYWNrZ3JvdW5kIGNhY2hpbmcgam9iIHJ1bnMgYXN5bmNocm9ub3VzbHkgdW50aWwgaXQgaGl0cyBzb21lCmNhcHR1cmUgbGltaXQgY29uZmlndXJlZCBpbiBpbnRlcmFjdGl2ZV9iZWFtLm9wdGlvbnMuIE1lYW53aGlsZSwgdGhlIG1haW4gam9iCmFuZCBmdXR1cmUgbWFpbiBqb2JzIGZyb20gdGhlIHBpcGVsaW5lIHdpbGwgcnVuIHVzaW5nIHRoZSBkZXRlcm1pbmlzdGljCnJlcGxheWFibGUgY2FwdHVyZWQgZXZlbnRzIHVudGlsIHRoZXkgYXJlIGludmFsaWRhdGVkLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB0aW1lCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUgaW1wb3J0IGludGVyYWN0aXZlX2Vudmlyb25tZW50IGFzIGllCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoaW5nIGltcG9ydCBzdHJlYW1pbmdfY2FjaGUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lciBpbXBvcnQgUGlwZWxpbmVTdGF0ZQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIEJhY2tncm91bmRDYWNoaW5nSm9iKG9iamVjdCk6CiAgIiIiQSBzaW1wbGUgYWJzdHJhY3Rpb24gdGhhdCBjb250cm9scyBuZWNlc3NhcnkgY29tcG9uZW50cyBvZiBhIHRpbWVkIGFuZAogIHNwYWNlIGxpbWl0ZWQgYmFja2dyb3VuZCBjYWNoaW5nIGpvYi4KCiAgQSBiYWNrZ3JvdW5kIGNhY2hpbmcgam9iIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZSBzb3VyY2UgZGF0YSBjYXB0dXJlIGluIDIKICBjb25kaXRpb25zOgoKICAgICMuIFRoZSBqb2IgaXMgZmluaXRlIGFuZCBydW5zIGludG8gRE9ORSBzdGF0ZTsKICAgICMuIFRoZSBqb2IgaXMgaW5maW5pdGUgYnV0IGhpdHMgYW4gaW50ZXJhY3RpdmVfYmVhbS5vcHRpb25zIGNvbmZpZ3VyZWQgbGltaXQKICAgICAgIGFuZCBnZXRzIGNhbmNlbGxlZCBpbnRvIENBTkNFTExFRC9DQU5DRUxMSU5HIHN0YXRlLgoKICBJbiBib3RoIHNpdHVhdGlvbnMsIHRoZSBiYWNrZ3JvdW5kIGNhY2hpbmcgam9iIHNob3VsZCBiZSB0cmVhdGVkIGFzIGRvbmUKICBzdWNjZXNzZnVsbHkuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lX3Jlc3VsdCwgc3RhcnRfbGltaXRfY2hlY2tlcnM9VHJ1ZSk6CiAgICBzZWxmLl9waXBlbGluZV9yZXN1bHQgPSBwaXBlbGluZV9yZXN1bHQKICAgIHNlbGYuX3RpbWVyID0gdGhyZWFkaW5nLlRpbWVyKAogICAgICAgIGllLmN1cnJlbnRfZW52KCkub3B0aW9ucy5jYXB0dXJlX2R1cmF0aW9uLnRvdGFsX3NlY29uZHMoKSwgc2VsZi5fY2FuY2VsKQogICAgc2VsZi5fdGltZXIuZGFlbW9uID0gVHJ1ZQogICAgc2VsZi5fY29uZGl0aW9uX2NoZWNrZXIgPSB0aHJlYWRpbmcuVGhyZWFkKAogICAgICAgIHRhcmdldD1zZWxmLl9iYWNrZ3JvdW5kX2NhY2hpbmdfam9iX2NvbmRpdGlvbl9jaGVja2VyLCBkYWVtb249VHJ1ZSkKICAgIGlmIHN0YXJ0X2xpbWl0X2NoZWNrZXJzOgogICAgICBzZWxmLl90aW1lci5zdGFydCgpCiAgICAgIHNlbGYuX2NvbmRpdGlvbl9jaGVja2VyLnN0YXJ0KCkKICAgIHNlbGYuX3RpbWVyX3RyaWdnZXJlZCA9IEZhbHNlCiAgICBzZWxmLl9jb25kaXRpb25fY2hlY2tlcl90cmlnZ2VyZWQgPSBGYWxzZQoKICBkZWYgX2JhY2tncm91bmRfY2FjaGluZ19qb2JfY29uZGl0aW9uX2NoZWNrZXIoc2VsZik6CiAgICB3aGlsZSBub3QgUGlwZWxpbmVTdGF0ZS5pc190ZXJtaW5hbChzZWxmLl9waXBlbGluZV9yZXN1bHQuc3RhdGUpOgogICAgICBpZiBzZWxmLl9zaG91bGRfZW5kX2NvbmRpdGlvbl9jaGVja2VyKCk6CiAgICAgICAgYnJlYWsKICAgICAgdGltZS5zbGVlcCg1KQoKICBkZWYgX3Nob3VsZF9lbmRfY29uZGl0aW9uX2NoZWNrZXIoc2VsZik6CiAgICBpZiBpZS5jdXJyZW50X2VudigpLm9wdGlvbnMuY2FwdHVyZV9jb250cm9sLmlzX2NhcHR1cmVfc2l6ZV9yZWFjaGVkKCk6CiAgICAgIHNlbGYuX2NvbmRpdGlvbl9jaGVja2VyX3RyaWdnZXJlZCA9IFRydWUKICAgICAgc2VsZi5jYW5jZWwoKQogICAgICByZXR1cm4gVHJ1ZQogICAgaWYgbm90IHNlbGYuX3RpbWVyLmlzX2FsaXZlKCk6CiAgICAgICMgSWYgdGhlIHRpbWVyIGlzIG5vdCBhbGl2ZSBhbnkgbW9yZSwgdGhlIGJhY2tncm91bmQgY2FjaGluZyBqb2IgbXVzdAogICAgICAjIGhhdmUgYmVlbiBjYW5jZWxsZWQgYnkgdGhlIGJ1c2luZXNzIGxvZ2ljIG9yIHRoZSB0aW1lci4KICAgICAgcmV0dXJuIFRydWUKICAgIHJldHVybiBGYWxzZQoKICBkZWYgaXNfZG9uZShzZWxmKToKICAgIHJldHVybiAoCiAgICAgICAgc2VsZi5fcGlwZWxpbmVfcmVzdWx0LnN0YXRlIGlzIFBpcGVsaW5lU3RhdGUuRE9ORSBvcgogICAgICAgICgoc2VsZi5fdGltZXJfdHJpZ2dlcmVkIG9yIHNlbGYuX2NvbmRpdGlvbl9jaGVja2VyX3RyaWdnZXJlZCkgYW5kCiAgICAgICAgIHNlbGYuX3BpcGVsaW5lX3Jlc3VsdC5zdGF0ZSBpbgogICAgICAgICAoUGlwZWxpbmVTdGF0ZS5DQU5DRUxMRUQsIFBpcGVsaW5lU3RhdGUuQ0FOQ0VMTElORykpKQoKICBkZWYgaXNfcnVubmluZyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9waXBlbGluZV9yZXN1bHQuc3RhdGUgaXMgUGlwZWxpbmVTdGF0ZS5SVU5OSU5HCgogIGRlZiBjYW5jZWwoc2VsZik6CiAgICAiIiJDYW5jZWxzIHRoaXMgYmFja2dyb3VuZCBjYWNoaW5nIGpvYiBhbmQgaXRzIHRlcm1pbmF0aW5nIHRpbWVyIGJlY2F1c2UKICAgIHRoZSBqb2IgaXMgaW52YWxpZGF0ZWQgYW5kIG5vIGxvbmdlciB1c2VmdWwuCgogICAgVGhpcyBwcm9jZXNzIGNhbmNlbHMgYW55IG5vbi10ZXJtaW5hdGVkIGpvYiBhbmQgaXRzIHRlcm1pbmF0aW5nIHRpbWVyLgogICAgIiIiCiAgICBzZWxmLl9jYW5jZWwoKQogICAgIyBXaGVuZXZlciB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQsIHRoZSBjYW5jZWxsYXRpb24gaXMgbm90IGRvbmUgYnkgdGhlCiAgICAjIHRlcm1pbmF0aW5nIHRpbWVyLCB0aHVzIHJlLW1hcmsgdGhlIHRpbWVyIGFzIG5vdCB0cmlnZ2VyZWQuCiAgICBzZWxmLl90aW1lcl90cmlnZ2VyZWQgPSBGYWxzZQogICAgaWYgc2VsZi5fdGltZXIuaXNfYWxpdmUoKToKICAgICAgc2VsZi5fdGltZXIuY2FuY2VsKCkKCiAgZGVmIF9jYW5jZWwoc2VsZik6CiAgICBzZWxmLl90aW1lcl90cmlnZ2VyZWQgPSBUcnVlCiAgICBpZiBub3QgUGlwZWxpbmVTdGF0ZS5pc190ZXJtaW5hbChzZWxmLl9waXBlbGluZV9yZXN1bHQuc3RhdGUpOgogICAgICB0cnk6CiAgICAgICAgc2VsZi5fcGlwZWxpbmVfcmVzdWx0LmNhbmNlbCgpCiAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgogICAgICAgICMgSWdub3JlIHRoZSBjYW5jZWwgaW52b2NhdGlvbiBpZiBpdCBpcyBuZXZlciBpbXBsZW1lbnRlZCBieSB0aGUgcnVubmVyLgogICAgICAgIHBhc3MKCgpkZWYgYXR0ZW1wdF90b19ydW5fYmFja2dyb3VuZF9jYWNoaW5nX2pvYihydW5uZXIsIHVzZXJfcGlwZWxpbmUsIG9wdGlvbnM9Tm9uZSk6CiAgIiIiQXR0ZW1wdHMgdG8gcnVuIGEgYmFja2dyb3VuZCBjYWNoaW5nIGpvYiBmb3IgYSB1c2VyLWRlZmluZWQgcGlwZWxpbmUuCgogIFRoZSBwaXBlbGluZSByZXN1bHQgaXMgYXV0b21hdGljYWxseSB0cmFja2VkIGJ5IEludGVyYWN0aXZlIEJlYW0gaW4gY2FzZQogIGZ1dHVyZSBjYW5jZWxsYXRpb24vY2xlYW51cCBpcyBuZWVkZWQuCiAgIiIiCiAgaWYgaXNfYmFja2dyb3VuZF9jYWNoaW5nX2pvYl9uZWVkZWQodXNlcl9waXBlbGluZSk6CiAgICAjIENhbmNlbCBub24tdGVybWluYWwgam9icyBpZiB0aGVyZSBpcyBhbnkgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IG9uZS4KICAgIGF0dGVtcHRfdG9fY2FuY2VsX2JhY2tncm91bmRfY2FjaGluZ19qb2IodXNlcl9waXBlbGluZSkKICAgICMgQ2FuY2VsIHRoZSBnUlBDIHNlcnZlciBzZXJ2aW5nIHRoZSB0ZXN0IHN0cmVhbSBpZiB0aGVyZSBpcyBvbmUuCiAgICBhdHRlbXB0X3RvX3N0b3BfdGVzdF9zdHJlYW1fc2VydmljZSh1c2VyX3BpcGVsaW5lKQogICAgIyBUT0RPKEJFQU0tODMzNSk6IHJlZmFjdG9yIGJhY2tncm91bmQgY2FjaGluZyBqb2IgbG9naWMgZnJvbQogICAgIyBwaXBlbGluZV9pbnN0cnVtZW50IG1vZHVsZSB0byB0aGlzIG1vZHVsZSBhbmQgYWdncmVnYXRlIHRlc3RzLgogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBwaXBlbGluZV9pbnN0cnVtZW50IGFzIGluc3RyCiAgICBydW5uZXJfcGlwZWxpbmUgPSBiZWFtLnBpcGVsaW5lLlBpcGVsaW5lLmZyb21fcnVubmVyX2FwaSgKICAgICAgICB1c2VyX3BpcGVsaW5lLnRvX3J1bm5lcl9hcGkodXNlX2Zha2VfY29kZXJzPVRydWUpLCBydW5uZXIsIG9wdGlvbnMpCiAgICBiYWNrZ3JvdW5kX2NhY2hpbmdfam9iX3Jlc3VsdCA9IGJlYW0ucGlwZWxpbmUuUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgIGluc3RyLmJ1aWxkX3BpcGVsaW5lX2luc3RydW1lbnQoCiAgICAgICAgICAgIHJ1bm5lcl9waXBlbGluZSkuYmFja2dyb3VuZF9jYWNoaW5nX3BpcGVsaW5lX3Byb3RvKCksCiAgICAgICAgcnVubmVyLAogICAgICAgIG9wdGlvbnMpLnJ1bigpCiAgICBpZS5jdXJyZW50X2VudigpLnNldF9iYWNrZ3JvdW5kX2NhY2hpbmdfam9iKAogICAgICAgIHVzZXJfcGlwZWxpbmUsIEJhY2tncm91bmRDYWNoaW5nSm9iKGJhY2tncm91bmRfY2FjaGluZ19qb2JfcmVzdWx0KSkKCgpkZWYgaXNfYmFja2dyb3VuZF9jYWNoaW5nX2pvYl9uZWVkZWQodXNlcl9waXBlbGluZSk6CiAgIiIiRGV0ZXJtaW5lcyBpZiBhIGJhY2tncm91bmQgY2FjaGluZyBqb2IgbmVlZHMgdG8gYmUgc3RhcnRlZC4KCiAgSXQgZG9lcyBzZXZlcmFsIHN0YXRlIGNoZWNrcyBhbmQgcmVjb3JkIHN0YXRlIGNoYW5nZXMgdGhyb3VnaG91dCB0aGUgcHJvY2Vzcy4KICBJdCBpcyBub3QgaWRlbXBvdGVudCB0byBzaW1wbGlmeSB0aGUgdXNhZ2UuCiAgIiIiCiAgam9iID0gaWUuY3VycmVudF9lbnYoKS5nZXRfYmFja2dyb3VuZF9jYWNoaW5nX2pvYih1c2VyX3BpcGVsaW5lKQogICMgQ2hlY2tzIGlmIHRoZSBwaXBlbGluZSBjb250YWlucyBhbnkgc291cmNlIHRoYXQgbmVlZHMgdG8gYmUgY2FjaGVkLgogIG5lZWRfY2FjaGUgPSBoYXNfc291cmNlX3RvX2NhY2hlKHVzZXJfcGlwZWxpbmUpCiAgIyBJZiB0aGlzIGlzIFRydWUsIHdlIGNhbiBpbnZhbGlkYXRlIGEgcHJldmlvdXMgZG9uZS9ydW5uaW5nIGpvYiBpZiB0aGVyZSBpcwogICMgb25lLgogIGNhY2hlX2NoYW5nZWQgPSBpc19zb3VyY2VfdG9fY2FjaGVfY2hhbmdlZCh1c2VyX3BpcGVsaW5lKQogIHJldHVybiAoCiAgICAgIG5lZWRfY2FjaGUgYW5kCiAgICAgICMgQ2hlY2tzIGlmIGl0J3MgdGhlIGZpcnN0IHRpbWUgcnVubmluZyBhIGpvYiBmcm9tIHRoZSBwaXBlbGluZS4KICAgICAgKAogICAgICAgICAgbm90IGpvYiBvcgogICAgICAgICAgIyBPciBjaGVja3MgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgam9iLgogICAgICAgICAgIyBET05FIG1lYW5zIGEgcHJldmlvdXMgam9iIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCB0aGUKICAgICAgICAgICMgY2FjaGVkIGV2ZW50cyBtaWdodCBzdGlsbCBiZSB2YWxpZC4KICAgICAgICAgIG5vdCAoCiAgICAgICAgICAgICAgam9iLmlzX2RvbmUoKSBvcgogICAgICAgICAgICAgICMgUlVOTklORyBtZWFucyBhIHByZXZpb3VzIGpvYiBoYXMgYmVlbiBzdGFydGVkIGFuZCBpcyBzdGlsbAogICAgICAgICAgICAgICMgcnVubmluZy4KICAgICAgICAgICAgICBqb2IuaXNfcnVubmluZygpKSBvcgogICAgICAgICAgIyBPciBjaGVja3MgaWYgd2UgY2FuIGludmFsaWRhdGUgdGhlIHByZXZpb3VzIGpvYi4KICAgICAgICAgIGNhY2hlX2NoYW5nZWQpKQoKCmRlZiBoYXNfc291cmNlX3RvX2NhY2hlKHVzZXJfcGlwZWxpbmUpOgogICIiIkRldGVybWluZXMgaWYgYSB1c2VyLWRlZmluZWQgcGlwZWxpbmUgY29udGFpbnMgYW55IHNvdXJjZSB0aGF0IG5lZWQgdG8gYmUKICBjYWNoZWQuIElmIHNvLCBhbHNvIGltbWVkaWF0ZWx5IHdyYXAgY3VycmVudCBjYWNoZSBtYW5hZ2VyIGhlbGQgYnkgY3VycmVudAogIGludGVyYWN0aXZlIGVudmlyb25tZW50IGludG8gYSBzdHJlYW1pbmcgY2FjaGUgaWYgdGhpcyBoYXMgbm90IGJlZW4gZG9uZS4KICBUaGUgd3JhcHBpbmcgZG9lc24ndCBpbnZhbGlkYXRlIGV4aXN0aW5nIGNhY2hlIGluIGFueSB3YXkuCgogIFRoaXMgY2FuIGhlbHAgZGV0ZXJtaW5pbmcgaWYgYSBiYWNrZ3JvdW5kIGNhY2hpbmcgam9iIGlzIG5lZWRlZCB0byB3cml0ZSBjYWNoZQogIGZvciBzb3VyY2VzIGFuZCBpZiBhIHRlc3Qgc3RyZWFtIHNlcnZpY2UgaXMgbmVlZGVkIHRvIHNlcnZlIHRoZSBjYWNoZS4KCiAgVGhyb3VnaG91dCB0aGUgY2hlY2ssIGlmIHNvdXJjZS10by1jYWNoZSBoYXMgY2hhbmdlZCBmcm9tIHRoZSBsYXN0IGNoZWNrLCBpdAogIGFsc28gY2xlYW5zIHVwIHRoZSBpbnZhbGlkYXRlZCBjYWNoZSBlYXJseSBvbi4KICAiIiIKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUgaW1wb3J0IHBpcGVsaW5lX2luc3RydW1lbnQgYXMgaW5zdHIKICAjIFRPRE8oQkVBTS04MzM1KTogd2UgdGVtcG9yYXJpbHkgb25seSBjYWNoZSByZXBsYWNlYWJsZSB1bmJvdW5kZWQgc291cmNlcy4KICAjIEFkZCBsb2dpYyBmb3Igb3RoZXIgY2FjaGVhYmxlIHNvdXJjZXMgaGVyZSB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4KICBoYXNfY2FjaGUgPSBpbnN0ci5oYXNfdW5ib3VuZGVkX3NvdXJjZXModXNlcl9waXBlbGluZSkKICBpZiBoYXNfY2FjaGU6CiAgICBpZiBub3QgaXNpbnN0YW5jZShpZS5jdXJyZW50X2VudigpLmNhY2hlX21hbmFnZXIoKSwKICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbWluZ19jYWNoZS5TdHJlYW1pbmdDYWNoZSk6CiAgICAgICMgVE9ETyhCRUFNLTgzMzUpOiBjb252ZXJ0IHRoZSBjYWNoZSBtYW5hZ2VyIGludG8gYSBzdHJlYW1pbmcgY2FjaGUKICAgICAgIyBtYW5hZ2VyLiBOb3RlIHRoaXMgZG9lcyBub3QgaW52YWxpZGF0ZSB0aGUgY3VycmVudCBjYWNoZSBpbmNsdWRpbmcgdGhlCiAgICAgICMgc291cmNlIGRhdGEgY2FwdHVyZS4KICAgICAgcGFzcwogIHJldHVybiBoYXNfY2FjaGUKCgpkZWYgYXR0ZW1wdF90b19jYW5jZWxfYmFja2dyb3VuZF9jYWNoaW5nX2pvYih1c2VyX3BpcGVsaW5lKToKICAiIiJBdHRlbXB0cyB0byBjYW5jZWwgYmFja2dyb3VuZCBjYWNoaW5nIGpvYiBmb3IgYSB1c2VyLWRlZmluZWQgcGlwZWxpbmUuCgogIElmIG5vIGJhY2tncm91bmQgY2FjaGluZyBqb2IgbmVlZHMgdG8gYmUgY2FuY2VsbGVkLCBOT09QLiBPdGhlcndpc2UsIGNhbmNlbAogIHN1Y2ggam9iLgogICIiIgogIGpvYiA9IGllLmN1cnJlbnRfZW52KCkuZ2V0X2JhY2tncm91bmRfY2FjaGluZ19qb2IodXNlcl9waXBlbGluZSkKICBpZiBqb2I6CiAgICBqb2IuY2FuY2VsKCkKCgpkZWYgYXR0ZW1wdF90b19zdG9wX3Rlc3Rfc3RyZWFtX3NlcnZpY2UodXNlcl9waXBlbGluZSk6CiAgIiIiQXR0ZW1wdHMgdG8gc3RvcCB0aGUgZ1JQQyBzZXJ2ZXIvc2VydmljZSBzZXJ2aW5nIHRoZSB0ZXN0IHN0cmVhbS4KCiAgSWYgdGhlcmUgaXMgbm8gc3VjaCBzZXJ2ZXIgc3RhcnRlZCwgTk9PUC4gT3RoZXJ3aXNlLCBzdG9wIGl0LgogICIiIgogIGlmIGlzX2FfdGVzdF9zdHJlYW1fc2VydmljZV9ydW5uaW5nKHVzZXJfcGlwZWxpbmUpOgogICAgaWUuY3VycmVudF9lbnYoKS5ldmljdF90ZXN0X3N0cmVhbV9zZXJ2aWNlX2NvbnRyb2xsZXIodXNlcl9waXBlbGluZSkuc3RvcCgpCgoKZGVmIGlzX2FfdGVzdF9zdHJlYW1fc2VydmljZV9ydW5uaW5nKHVzZXJfcGlwZWxpbmUpOgogICIiIkNoZWNrcyB0byBzZWUgaWYgdGhlcmUgaXMgYSBnUFJDIHNlcnZlci9zZXJ2aWNlIHJ1bm5pbmcgdGhhdCBzZXJ2ZXMgdGhlCiAgdGVzdCBzdHJlYW0gdG8gYW55IGpvYiBzdGFydGVkIGZyb20gdGhlIGdpdmVuIHVzZXJfcGlwZWxpbmUuCiAgIiIiCiAgcmV0dXJuIGllLmN1cnJlbnRfZW52KCkuZ2V0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcigKICAgICAgdXNlcl9waXBlbGluZSkgaXMgbm90IE5vbmUKCgpkZWYgaXNfc291cmNlX3RvX2NhY2hlX2NoYW5nZWQoCiAgICB1c2VyX3BpcGVsaW5lLCB1cGRhdGVfY2FjaGVkX3NvdXJjZV9zaWduYXR1cmU9VHJ1ZSk6CiAgIiIiRGV0ZXJtaW5lcyBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlIGluIHRoZSBzb3VyY2VzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQKICB1c2VkIGJ5IHRoZSB1c2VyLWRlZmluZWQgcGlwZWxpbmUuCgogIER1ZSB0byB0aGUgZXhwZW5zaXZlbmVzcyBvZiBjb21wdXRhdGlvbnMgYW5kIGZvciB0aGUgc2ltcGxpY2l0eSBvZiB1c2FnZSwgdGhpcwogIGZ1bmN0aW9uIGlzIG5vdCBpZGVtcG90ZW50IGJlY2F1c2UgSW50ZXJhY3RpdmUgQmVhbSBhdXRvbWF0aWNhbGx5IGRpc2NhcmRzCiAgcHJldmlvdXNseSB0cmFja2VkIHNpZ25hdHVyZSBvZiB0cmFuc2Zvcm1zIGFuZCB0cmFja3MgdGhlIGN1cnJlbnQgc2lnbmF0dXJlIG9mCiAgdHJhbnNmb3JtcyBmb3IgdGhlIHVzZXItZGVmaW5lZCBwaXBlbGluZSBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlLgoKICBXaGVuIGl0J3MgVHJ1ZSwgdGhlcmUgaXMgYWRkaXRpb24vZGVsZXRpb24vbXV0YXRpb24gb2Ygc291cmNlIHRyYW5zZm9ybXMgdGhhdAogIHJlcXVpcmVzIGEgbmV3IGJhY2tncm91bmQgY2FjaGluZyBqb2IuCiAgIiIiCiAgIyBCeSBkZWZhdWx0IGdldHMgZW1wdHkgc2V0IGlmIHRoZSB1c2VyX3BpcGVsaW5lIGlzIGZpcnN0IHRpbWUgc2VlbiBiZWNhdXNlCiAgIyB3ZSBjYW4gdHJlYXQgaXQgYXMgYWRkaW5nIHRyYW5zZm9ybXMuCiAgcmVjb3JkZWRfc2lnbmF0dXJlID0gaWUuY3VycmVudF9lbnYoKS5nZXRfY2FjaGVkX3NvdXJjZV9zaWduYXR1cmUoCiAgICAgIHVzZXJfcGlwZWxpbmUpCiAgY3VycmVudF9zaWduYXR1cmUgPSBleHRyYWN0X3NvdXJjZV90b19jYWNoZV9zaWduYXR1cmUodXNlcl9waXBlbGluZSkKICBpc19jaGFuZ2VkID0gbm90IGN1cnJlbnRfc2lnbmF0dXJlLmlzc3Vic2V0KHJlY29yZGVkX3NpZ25hdHVyZSkKICAjIFRoZSBjb21wdXRhdGlvbiBvZiBleHRyYWN0X3VuYm91bmRlZF9zb3VyY2Vfc2lnbmF0dXJlIGlzIGV4cGVuc2l2ZSwgdHJhY2sgb24KICAjIGNoYW5nZSBieSBkZWZhdWx0LgogIGlmIGlzX2NoYW5nZWQgYW5kIHVwZGF0ZV9jYWNoZWRfc291cmNlX3NpZ25hdHVyZToKICAgIGlmIGllLmN1cnJlbnRfZW52KCkub3B0aW9ucy5lbmFibGVfY2FwdHVyZV9yZXBsYXk6CiAgICAgICMgVE9ETyhCRUFNLTgzMzUpOiBkaXNwbGF5IHJhdGhlciB0aGFuIGxvZ2dpbmcgd2hlbiBpc19pbl9ub3RlYm9vay4KICAgICAgaWYgbm90IHJlY29yZGVkX3NpZ25hdHVyZToKICAgICAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgICAgICdJbnRlcmFjdGl2ZSBCZWFtIGhhcyBkZXRlY3RlZCB5b3UgaGF2ZSB1bmJvdW5kZWQgc291cmNlcyAnCiAgICAgICAgICAgICdpbiB5b3VyIHBpcGVsaW5lLiBJbiBvcmRlciB0byBoYXZlIGEgZGV0ZXJtaW5pc3RpYyByZXBsYXkgJwogICAgICAgICAgICAnb2YgeW91ciBwaXBlbGluZSwgZGF0YSBmcm9tIHNvdXJjZXMgd2lsbCBiZSBjYXB0dXJlZC4gJXMnLAogICAgICAgICAgICBpZS5jdXJyZW50X2VudigpLm9wdGlvbnMuY2FwdHVyZV9jb250cm9sKQogICAgICBlbHNlOgogICAgICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAgICAgJ0ludGVyYWN0aXZlIEJlYW0gaGFzIGRldGVjdGVkIGEgbmV3IHN0cmVhbWluZyBzb3VyY2Ugd2FzICcKICAgICAgICAgICAgJ2FkZGVkIHRvIHRoZSBwaXBlbGluZS4gSW4gb3JkZXIgZm9yIHRoZSBjYXB0dXJlZCBzdHJlYW1pbmcgJwogICAgICAgICAgICAnZGF0YSB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lLCBhbGwgY2FwdHVyZWQgZGF0YSBoYXZlIGJlZW4gJwogICAgICAgICAgICAnY2xlYXJlZC4gJXMnLAogICAgICAgICAgICBpZS5jdXJyZW50X2VudigpLm9wdGlvbnMuY2FwdHVyZV9jb250cm9sKQoKICAgIGllLmN1cnJlbnRfZW52KCkuY2xlYW51cCgpCiAgICBpZS5jdXJyZW50X2VudigpLnNldF9jYWNoZWRfc291cmNlX3NpZ25hdHVyZSgKICAgICAgICB1c2VyX3BpcGVsaW5lLCBjdXJyZW50X3NpZ25hdHVyZSkKICByZXR1cm4gaXNfY2hhbmdlZAoKCmRlZiBleHRyYWN0X3NvdXJjZV90b19jYWNoZV9zaWduYXR1cmUodXNlcl9waXBlbGluZSk6CiAgIiIiRXh0cmFjdHMgYSBzZXQgb2Ygc2lnbmF0dXJlIGZvciBzb3VyY2VzIHRoYXQgbmVlZCB0byBiZSBjYWNoZWQgaW4gdGhlCiAgdXNlci1kZWZpbmVkIHBpcGVsaW5lLgoKICBBIHNpZ25hdHVyZSBpcyBhIHN0ciByZXByZXNlbnRhdGlvbiBvZiB1cm4gYW5kIHBheWxvYWQgb2YgYSBzb3VyY2UuCiAgIiIiCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBwaXBlbGluZV9pbnN0cnVtZW50IGFzIGluc3RyCiAgIyBUT0RPKEJFQU0tODMzNSk6IHdlIHRlbXBvcmFyaWx5IG9ubHkgY2FjaGUgcmVwbGFjZWFibGUgdW5ib3VuZGVkIHNvdXJjZXMuCiAgIyBBZGQgbG9naWMgZm9yIG90aGVyIGNhY2hlYWJsZSBzb3VyY2VzIGhlcmUgd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuCiAgdW5ib3VuZGVkX3NvdXJjZXNfYXNfYXBwbGllZF90cmFuc2Zvcm1zID0gaW5zdHIudW5ib3VuZGVkX3NvdXJjZXMoCiAgICAgIHVzZXJfcGlwZWxpbmUpCiAgdW5ib3VuZGVkX3NvdXJjZXNfYXNfcHRyYW5zZm9ybXMgPSBzZXQoCiAgICAgIG1hcChsYW1iZGEgeDogeC50cmFuc2Zvcm0sIHVuYm91bmRlZF9zb3VyY2VzX2FzX2FwcGxpZWRfdHJhbnNmb3JtcykpCiAgY29udGV4dCwgXyA9IHVzZXJfcGlwZWxpbmUudG9fcnVubmVyX2FwaSgKICAgICAgcmV0dXJuX2NvbnRleHQ9VHJ1ZSwgdXNlX2Zha2VfY29kZXJzPVRydWUpCiAgc2lnbmF0dXJlID0gc2V0KAogICAgICBtYXAoCiAgICAgICAgICBsYW1iZGEgdHJhbnNmb3JtOiBzdHIodHJhbnNmb3JtLnRvX3J1bm5lcl9hcGkoY29udGV4dCkpLAogICAgICAgICAgdW5ib3VuZGVkX3NvdXJjZXNfYXNfcHRyYW5zZm9ybXMpKQogIHJldHVybiBzaWduYXR1cmUKlH2UKIwdQmFja2dyb3VuZENhY2hpbmdKb2IuX19pbml0X1+UalYxAQBLRUtQh5SMPkJhY2tncm91bmRDYWNoaW5nSm9iLl9iYWNrZ3JvdW5kX2NhY2hpbmdfam9iX2NvbmRpdGlvbl9jaGVja2VylGpWMQEAS1JLVoeUjDJCYWNrZ3JvdW5kQ2FjaGluZ0pvYi5fc2hvdWxkX2VuZF9jb25kaXRpb25fY2hlY2tlcpRqVjEBAEtYS2GHlIwcQmFja2dyb3VuZENhY2hpbmdKb2IuaXNfZG9uZZRqVjEBAEtjS2iHlIwfQmFja2dyb3VuZENhY2hpbmdKb2IuaXNfcnVubmluZ5RqVjEBAEtqS2uHlIwbQmFja2dyb3VuZENhY2hpbmdKb2IuY2FuY2VslGpWMQEAS21LeIeUjBxCYWNrZ3JvdW5kQ2FjaGluZ0pvYi5fY2FuY2VslGpWMQEAS3pLgYeUjBRCYWNrZ3JvdW5kQ2FjaGluZ0pvYpRqXTEBAEs3S4GHlIwlYXR0ZW1wdF90b19ydW5fYmFja2dyb3VuZF9jYWNoaW5nX2pvYpRqVjEBAEuES5qHlIwgaXNfYmFja2dyb3VuZF9jYWNoaW5nX2pvYl9uZWVkZWSUalYxAQBLnUu3h5SME2hhc19zb3VyY2VfdG9fY2FjaGWUalYxAQBLukvRh5SMKGF0dGVtcHRfdG9fY2FuY2VsX2JhY2tncm91bmRfY2FjaGluZ19qb2KUalYxAQBL1Evch5SMI2F0dGVtcHRfdG9fc3RvcF90ZXN0X3N0cmVhbV9zZXJ2aWNllGpWMQEAS99L5YeUjCBpc19hX3Rlc3Rfc3RyZWFtX3NlcnZpY2VfcnVubmluZ5RqVjEBAEvoS+2HlIwaaXNfc291cmNlX3RvX2NhY2hlX2NoYW5nZWSUalYxAQBL8E0ZAYeUjCFleHRyYWN0X3NvdXJjZV90b19jYWNoZV9zaWduYXR1cmWUalYxAQBNHAFNLwGHlHV9lCiMFEJhY2tncm91bmRDYWNoaW5nSm9ilGriAwAAjBxCYWNrZ3JvdW5kQ2FjaGluZ0pvYi5pc19kb25llGriAwAAjB9CYWNrZ3JvdW5kQ2FjaGluZ0pvYi5pc19ydW5uaW5nlGriAwAAjBtCYWNrZ3JvdW5kQ2FjaGluZ0pvYi5jYW5jZWyUauIDAACMJWF0dGVtcHRfdG9fcnVuX2JhY2tncm91bmRfY2FjaGluZ19qb2KUauIDAACMIGlzX2JhY2tncm91bmRfY2FjaGluZ19qb2JfbmVlZGVklGriAwAAjBNoYXNfc291cmNlX3RvX2NhY2hllGriAwAAjChhdHRlbXB0X3RvX2NhbmNlbF9iYWNrZ3JvdW5kX2NhY2hpbmdfam9ilGriAwAAjCNhdHRlbXB0X3RvX3N0b3BfdGVzdF9zdHJlYW1fc2VydmljZZRq4gMAAIwgaXNfYV90ZXN0X3N0cmVhbV9zZXJ2aWNlX3J1bm5pbmeUauIDAACMGmlzX3NvdXJjZV90b19jYWNoZV9jaGFuZ2VklGriAwAAjCFleHRyYWN0X3NvdXJjZV90b19jYWNoZV9zaWduYXR1cmWUauIDAAB1jDZhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmJhY2tncm91bmRfY2FjaGluZ19qb2KUdJSMLWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGVfbWFuYWdlcpQoWNAlAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBkYXRldGltZQppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHVybGxpYgoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGZpbGVzeXN0ZW1zCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IHRleHRpbwpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCB0ZnJlY29yZGlvCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY29tYmluZXJzCgppZiBzeXMudmVyc2lvbl9pbmZvWzBdID4gMjoKICB1bnF1b3RlX3RvX2J5dGVzID0gdXJsbGliLnBhcnNlLnVucXVvdGVfdG9fYnl0ZXMKICBxdW90ZSA9IHVybGxpYi5wYXJzZS5xdW90ZQplbHNlOgogIHVucXVvdGVfdG9fYnl0ZXMgPSB1cmxsaWIudW5xdW90ZSAgIyBweWxpbnQ6IGRpc2FibGU9ZGVwcmVjYXRlZC11cmxsaWItZnVuY3Rpb24KICBxdW90ZSA9IHVybGxpYi5xdW90ZSAgIyBweWxpbnQ6IGRpc2FibGU9ZGVwcmVjYXRlZC11cmxsaWItZnVuY3Rpb24KCgpjbGFzcyBDYWNoZU1hbmFnZXIob2JqZWN0KToKICAiIiJBYnN0cmFjdCBjbGFzcyBmb3IgY2FjaGluZyBQQ29sbGVjdGlvbnMuCgogIEEgUENvbGxlY3Rpb24gY2FjaGUgaXMgaWRlbnRpZmllZCBieSBsYWJlbHMsIHdoaWNoIGNvbnNpc3Qgb2YgYSBwcmVmaXggKGVpdGhlcgogICdmdWxsJyBvciAnc2FtcGxlJykgYW5kIGEgY2FjaGVfbGFiZWwgd2hpY2ggaXMgYSBoYXNoIG9mIHRoZSBQQ29sbGVjdGlvbgogIGRlcml2YXRpb24uCiAgIiIiCiAgZGVmIGV4aXN0cyhzZWxmLCAqbGFiZWxzKToKICAgICIiIlJldHVybnMgaWYgdGhlIFBDb2xsZWN0aW9uIGNhY2hlIGV4aXN0cy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGlzX2xhdGVzdF92ZXJzaW9uKHNlbGYsIHZlcnNpb24sICpsYWJlbHMpOgogICAgIiIiUmV0dXJucyBpZiB0aGUgZ2l2ZW4gdmVyc2lvbiBudW1iZXIgaXMgdGhlIGxhdGVzdC4iIiIKICAgIHJldHVybiB2ZXJzaW9uID09IHNlbGYuX2xhdGVzdF92ZXJzaW9uKCpsYWJlbHMpCgogIGRlZiBfbGF0ZXN0X3ZlcnNpb24oc2VsZiwgKmxhYmVscyk6CiAgICAiIiJSZXR1cm5zIHRoZSBsYXRlc3QgdmVyc2lvbiBudW1iZXIgb2YgdGhlIFBDb2xsZWN0aW9uIGNhY2hlLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgcmVhZChzZWxmLCAqbGFiZWxzKToKICAgICIiIlJldHVybiB0aGUgUENvbGxlY3Rpb24gYXMgYSBsaXN0IGFzIHdlbGwgYXMgdGhlIHZlcnNpb24gbnVtYmVyLgoKICAgIEFyZ3M6CiAgICAgICpsYWJlbHM6IExpc3Qgb2YgbGFiZWxzIGZvciBQQ29sbGVjdGlvbiBpbnN0YW5jZS4KCiAgICBSZXR1cm5zOgogICAgICBUdXBsZVtMaXN0W0FueV0sIGludF06IEEgdHVwbGUgY29udGFpbmluZyBhIGxpc3Qgb2YgaXRlbXMgaW4gdGhlCiAgICAgICAgUENvbGxlY3Rpb24gYW5kIHRoZSB2ZXJzaW9uIG51bWJlci4KCiAgICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSB2ZXJzaW9uIG51bWJlcnMgZnJvbSByZWFkKCkgYW5kX2xhdGVzdF92ZXJzaW9uKCkKICAgIGFyZSBkaWZmZXJlbnQuIFRoaXMgdXN1YWxseSBtZWFucyB0aGF0IHRoZSBjYWNoZSdzIGJlZW4gZXZpY3RlZCAodGh1cwogICAgdW5hdmFpbGFibGUgPT4gcmVhZCgpIHJldHVybnMgdmVyc2lvbiA9IC0xKSwgYnV0IGl0IGhhZCByZWFjaGVkIHZlcnNpb24gbgogICAgYmVmb3JlIGV2aWN0aW9uLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBzb3VyY2Uoc2VsZiwgKmxhYmVscyk6CiAgICAiIiJSZXR1cm5zIGEgYmVhbS5pby5Tb3VyY2UgdGhhdCByZWFkcyB0aGUgUENvbGxlY3Rpb24gY2FjaGUuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBzaW5rKHNlbGYsICpsYWJlbHMpOgogICAgIiIiUmV0dXJucyBhIGJlYW0uaW8uU2luayB0aGF0IHdyaXRlcyB0aGUgUENvbGxlY3Rpb24gY2FjaGUuIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBzYXZlX3Bjb2RlcihzZWxmLCBwY29kZXIsICpsYWJlbHMpOgogICAgIiIiU2F2ZXMgcGNvZGVyIGZvciBnaXZlbiBQQ29sbGVjdGlvbi4KCiAgICBDb3JyZWN0IHJlYWRpbmcgb2YgUENvbGxlY3Rpb24gZnJvbSBDYWNoZSByZXF1aXJlcyBQQ29kZXIgdG8gYmUga25vd24uCiAgICBUaGlzIG1ldGhvZCBzYXZlcyBkZXNpcmVkIFBDb2RlciBmb3IgUENvbGxlY3Rpb24gdGhhdCB3aWxsIHN1YnNlcXVlbnRseQogICAgYmUgdXNlZCBieSBzaW5rKC4uLiksIHNvdXJjZSguLi4pLCBhbmQsIG1vc3QgaW1wb3J0YW50bHksIHJlYWQoLi4uKSBtZXRob2QuCiAgICBUaGUgbGF0dGVyIG11c3QgYmUgYWJsZSB0byByZWFkIGEgUENvbGxlY3Rpb24gd3JpdHRlbiBieSBCZWFtIHVzaW5nCiAgICBub24tQmVhbSBJTy4KCiAgICBBcmdzOgogICAgICBwY29kZXI6IEEgUENvZGVyIHRvIGJlIHVzZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgYSBQQ29sbGVjdGlvbi4KICAgICAgKmxhYmVsczogTGlzdCBvZiBsYWJlbHMgZm9yIFBDb2xsZWN0aW9uIGluc3RhbmNlLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBsb2FkX3Bjb2RlcihzZWxmLCAqbGFiZWxzKToKICAgICIiIlJldHVybnMgcHJldmlvdXNseSBzYXZlZCBQQ29kZXIgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgUENvbGxlY3Rpb24uIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjbGVhbnVwKHNlbGYpOgogICAgIiIiQ2xlYW5zIHVwIGFsbCB0aGUgUENvbGxlY3Rpb24gY2FjaGVzLiIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCmNsYXNzIEZpbGVCYXNlZENhY2hlTWFuYWdlcihDYWNoZU1hbmFnZXIpOgogICIiIk1hcHMgUENvbGxlY3Rpb25zIHRvIGxvY2FsIHRlbXAgZmlsZXMgZm9yIG1hdGVyaWFsaXphdGlvbi4iIiIKCiAgX2F2YWlsYWJsZV9mb3JtYXRzID0gewogICAgICAndGV4dCc6ICh0ZXh0aW8uUmVhZEZyb21UZXh0LCB0ZXh0aW8uV3JpdGVUb1RleHQpLAogICAgICAndGZyZWNvcmQnOiAodGZyZWNvcmRpby5SZWFkRnJvbVRGUmVjb3JkLCB0ZnJlY29yZGlvLldyaXRlVG9URlJlY29yZCkKICB9CgogIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZV9kaXI9Tm9uZSwgY2FjaGVfZm9ybWF0PSd0ZXh0Jyk6CiAgICBpZiBjYWNoZV9kaXI6CiAgICAgIHNlbGYuX2NhY2hlX2RpciA9IGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmpvaW4oCiAgICAgICAgICBjYWNoZV9kaXIsCiAgICAgICAgICBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgiY2FjaGUtJXktJW0tJWQtJUhfJU1fJVMiKSkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2NhY2hlX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoCiAgICAgICAgICBwcmVmaXg9J2ludGVyYWN0aXZlLXRlbXAtJywgZGlyPW9zLmVudmlyb24uZ2V0KCdURVNUX1RNUERJUicsIE5vbmUpKQogICAgc2VsZi5fdmVyc2lvbnMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsYW1iZGE6IHNlbGYuX0NhY2hlVmVyc2lvbigpKQoKICAgIGlmIGNhY2hlX2Zvcm1hdCBub3QgaW4gc2VsZi5fYXZhaWxhYmxlX2Zvcm1hdHM6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGNhY2hlIGZvcm1hdDogJyVzJy4iICUgY2FjaGVfZm9ybWF0KQogICAgc2VsZi5fcmVhZGVyX2NsYXNzLCBzZWxmLl93cml0ZXJfY2xhc3MgPSBzZWxmLl9hdmFpbGFibGVfZm9ybWF0c1sKICAgICAgICBjYWNoZV9mb3JtYXRdCiAgICBzZWxmLl9kZWZhdWx0X3Bjb2RlciA9ICgKICAgICAgICBTYWZlRmFzdFByaW1pdGl2ZXNDb2RlcigpIGlmIGNhY2hlX2Zvcm1hdCA9PSAndGV4dCcgZWxzZSBOb25lKQoKICAgICMgTGlzdCBvZiBzYXZlZCBwY29kZXJzIGtleWVkIGJ5IFBDb2xsZWN0aW9uIHBhdGguIEl0IGlzIE9LIHRvIGtlZXAgdGhpcwogICAgIyBsaXN0IGluIG1lbW9yeSBiZWNhdXNlIG9uY2UgRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyIG9iamVjdCBpcwogICAgIyBkZXN0cm95ZWQvcmUtY3JlYXRlZCBpdCBsb3NlcyB0aGUgYWNjZXNzIHRvIHByZXZpb3VzbHkgd3JpdHRlbiBjYWNoZQogICAgIyBvYmplY3RzIGFueXdheXMgZXZlbiBpZiBjYWNoZV9kaXIgYWxyZWFkeSBleGlzdHMuIEluIG90aGVyIHdvcmRzLAogICAgIyBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVzdW1lIGV4ZWN1dGlvbiBvZiBCZWFtIHBpcGVsaW5lIGZyb20gdGhlCiAgICAjIHNhdmVkIGNhY2hlIGlmIEZpbGVCYXNlZENhY2hlTWFuYWdlciBoYXMgYmVlbiByZXNldC4KICAgICMKICAgICMgSG93ZXZlciwgaWYgd2UgYXJlIHRvIGltcGxlbWVudCBiZXR0ZXIgY2FjaGUgcGVyc2lzdGVuY2UsIG9uZSBuZWVkcwogICAgIyB0byB0YWtlIGNhcmUgb2Yga2VlcGluZyBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBjYWNoZWQgUENvbGxlY3Rpb24KICAgICMgYW5kIGl0cyBQQ29kZXIgdHlwZS4KICAgIHNlbGYuX3NhdmVkX3Bjb2RlcnMgPSB7fQoKICBkZWYgZXhpc3RzKHNlbGYsICpsYWJlbHMpOgogICAgcmV0dXJuIGJvb2woc2VsZi5fbWF0Y2goKmxhYmVscykpCgogIGRlZiBfbGF0ZXN0X3ZlcnNpb24oc2VsZiwgKmxhYmVscyk6CiAgICB0aW1lc3RhbXAgPSAwCiAgICBmb3IgcGF0aCBpbiBzZWxmLl9tYXRjaCgqbGFiZWxzKToKICAgICAgdGltZXN0YW1wID0gbWF4KHRpbWVzdGFtcCwgZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMubGFzdF91cGRhdGVkKHBhdGgpKQogICAgcmVzdWx0ID0gc2VsZi5fdmVyc2lvbnNbIi0iLmpvaW4obGFiZWxzKV0uZ2V0X3ZlcnNpb24odGltZXN0YW1wKQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgc2F2ZV9wY29kZXIoc2VsZiwgcGNvZGVyLCAqbGFiZWxzKToKICAgIHNlbGYuX3NhdmVkX3Bjb2RlcnNbc2VsZi5fcGF0aCgqbGFiZWxzKV0gPSBwY29kZXIKCiAgZGVmIGxvYWRfcGNvZGVyKHNlbGYsICpsYWJlbHMpOgogICAgcmV0dXJuICgKICAgICAgICBzZWxmLl9kZWZhdWx0X3Bjb2RlciBpZiBzZWxmLl9kZWZhdWx0X3Bjb2RlciBpcyBub3QgTm9uZSBlbHNlCiAgICAgICAgc2VsZi5fc2F2ZWRfcGNvZGVyc1tzZWxmLl9wYXRoKCpsYWJlbHMpXSkKCiAgZGVmIHJlYWQoc2VsZiwgKmxhYmVscyk6CiAgICBpZiBub3Qgc2VsZi5leGlzdHMoKmxhYmVscyk6CiAgICAgIHJldHVybiBbXSwgLTEKCiAgICBzb3VyY2UgPSBzZWxmLnNvdXJjZSgqbGFiZWxzKQogICAgcmFuZ2VfdHJhY2tlciA9IHNvdXJjZS5nZXRfcmFuZ2VfdHJhY2tlcihOb25lLCBOb25lKQogICAgcmVzdWx0ID0gbGlzdChzb3VyY2UucmVhZChyYW5nZV90cmFja2VyKSkKICAgIHZlcnNpb24gPSBzZWxmLl9sYXRlc3RfdmVyc2lvbigqbGFiZWxzKQogICAgcmV0dXJuIHJlc3VsdCwgdmVyc2lvbgoKICBkZWYgc291cmNlKHNlbGYsICpsYWJlbHMpOgogICAgcmV0dXJuIHNlbGYuX3JlYWRlcl9jbGFzcygKICAgICAgICBzZWxmLl9nbG9iX3BhdGgoKmxhYmVscyksIGNvZGVyPXNlbGYubG9hZF9wY29kZXIoKmxhYmVscykpLl9zb3VyY2UKCiAgZGVmIHNpbmsoc2VsZiwgKmxhYmVscyk6CiAgICByZXR1cm4gc2VsZi5fd3JpdGVyX2NsYXNzKAogICAgICAgIHNlbGYuX3BhdGgoKmxhYmVscyksIGNvZGVyPXNlbGYubG9hZF9wY29kZXIoKmxhYmVscykpLl9zaW5rCgogIGRlZiBjbGVhbnVwKHNlbGYpOgogICAgaWYgZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuZXhpc3RzKHNlbGYuX2NhY2hlX2Rpcik6CiAgICAgIGZpbGVzeXN0ZW1zLkZpbGVTeXN0ZW1zLmRlbGV0ZShbc2VsZi5fY2FjaGVfZGlyXSkKICAgIHNlbGYuX3NhdmVkX3Bjb2RlcnMgPSB7fQoKICBkZWYgX2dsb2JfcGF0aChzZWxmLCAqbGFiZWxzKToKICAgIHJldHVybiBzZWxmLl9wYXRoKCpsYWJlbHMpICsgJy0qLW9mLSonCgogIGRlZiBfcGF0aChzZWxmLCAqbGFiZWxzKToKICAgIHJldHVybiBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5qb2luKHNlbGYuX2NhY2hlX2RpciwgKmxhYmVscykKCiAgZGVmIF9tYXRjaChzZWxmLCAqbGFiZWxzKToKICAgIG1hdGNoID0gZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMubWF0Y2goW3NlbGYuX2dsb2JfcGF0aCgqbGFiZWxzKV0pCiAgICBhc3NlcnQgbGVuKG1hdGNoKSA9PSAxCiAgICByZXR1cm4gW21ldGFkYXRhLnBhdGggZm9yIG1ldGFkYXRhIGluIG1hdGNoWzBdLm1ldGFkYXRhX2xpc3RdCgogIGNsYXNzIF9DYWNoZVZlcnNpb24ob2JqZWN0KToKICAgICIiIlRoaXMgY2xhc3Mga2VlcHMgdHJhY2sgb2YgdGhlIHRpbWVzdGFtcCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmVyc2lvbi4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgc2VsZi5jdXJyZW50X3ZlcnNpb24gPSAtMQogICAgICBzZWxmLmN1cnJlbnRfdGltZXN0YW1wID0gMAoKICAgIGRlZiBnZXRfdmVyc2lvbihzZWxmLCB0aW1lc3RhbXApOgogICAgICAiIiJVcGRhdGVzIHZlcnNpb24gaWYgbmVjZXNzYXJ5IGFuZCByZXR1cm5zIHRoZSB2ZXJzaW9uIG51bWJlci4KCiAgICAgIEFyZ3M6CiAgICAgICAgdGltZXN0YW1wOiAoaW50KSB1bml4IHRpbWVzdGFtcCB3aGVuIHRoZSBjYWNoZSBpcyB1cGRhdGVkLiBUaGlzIHZhbHVlIGlzCiAgICAgICAgICAgIHplcm8gaWYgdGhlIGNhY2hlIGhhcyBiZWVuIGV2aWN0ZWQgb3IgZG9lc24ndCBleGlzdC4KICAgICAgIiIiCiAgICAgICMgRG8gbm90IHVwZGF0ZSB0aW1lc3RhbXAgaWYgdGhlIGNhY2hlJ3MgYmVlbiBldmljdGVkLgogICAgICBpZiB0aW1lc3RhbXAgIT0gMCBhbmQgdGltZXN0YW1wICE9IHNlbGYuY3VycmVudF90aW1lc3RhbXA6CiAgICAgICAgYXNzZXJ0IHRpbWVzdGFtcCA+IHNlbGYuY3VycmVudF90aW1lc3RhbXAKICAgICAgICBzZWxmLmN1cnJlbnRfdmVyc2lvbiA9IHNlbGYuY3VycmVudF92ZXJzaW9uICsgMQogICAgICAgIHNlbGYuY3VycmVudF90aW1lc3RhbXAgPSB0aW1lc3RhbXAKICAgICAgcmV0dXJuIHNlbGYuY3VycmVudF92ZXJzaW9uCgoKY2xhc3MgUmVhZENhY2hlKGJlYW0uUFRyYW5zZm9ybSk6CiAgIiIiQSBQVHJhbnNmb3JtIHRoYXQgcmVhZHMgdGhlIFBDb2xsZWN0aW9ucyBmcm9tIHRoZSBjYWNoZS4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVfbWFuYWdlciwgbGFiZWwpOgogICAgc2VsZi5fY2FjaGVfbWFuYWdlciA9IGNhY2hlX21hbmFnZXIKICAgIHNlbGYuX2xhYmVsID0gbGFiZWwKCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgIyBweWxpbnQ6IGRpc2FibGU9ZXhwcmVzc2lvbi1ub3QtYXNzaWduZWQKICAgIHJldHVybiBwYmVnaW4gfCAnUmVhZCcgPj4gYmVhbS5pby5SZWFkKAogICAgICAgIHNlbGYuX2NhY2hlX21hbmFnZXIuc291cmNlKCdmdWxsJywgc2VsZi5fbGFiZWwpKQoKCmNsYXNzIFdyaXRlQ2FjaGUoYmVhbS5QVHJhbnNmb3JtKToKICAiIiJBIFBUcmFuc2Zvcm0gdGhhdCB3cml0ZXMgdGhlIFBDb2xsZWN0aW9ucyB0byB0aGUgY2FjaGUuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNhY2hlX21hbmFnZXIsIGxhYmVsLCBzYW1wbGU9RmFsc2UsIHNhbXBsZV9zaXplPTApOgogICAgc2VsZi5fY2FjaGVfbWFuYWdlciA9IGNhY2hlX21hbmFnZXIKICAgIHNlbGYuX2xhYmVsID0gbGFiZWwKICAgIHNlbGYuX3NhbXBsZSA9IHNhbXBsZQogICAgc2VsZi5fc2FtcGxlX3NpemUgPSBzYW1wbGVfc2l6ZQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHByZWZpeCA9ICdzYW1wbGUnIGlmIHNlbGYuX3NhbXBsZSBlbHNlICdmdWxsJwoKICAgICMgV2Ugc2F2ZSBwY29kZXIgdGhhdCBpcyBuZWNlc3NhcnkgZm9yIHByb3BlciByZWFkaW5nIG9mCiAgICAjIGNhY2hlZCBQQ29sbGVjdGlvbi4gX2NhY2hlX21hbmFnZXIuc2luayguLi4pIGNhbGwgYmVsb3cKICAgICMgc2hvdWxkIGJlIHVzaW5nIHRoaXMgc2F2ZWQgcGNvZGVyLgogICAgc2VsZi5fY2FjaGVfbWFuYWdlci5zYXZlX3Bjb2RlcigKICAgICAgICBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHBjb2xsLmVsZW1lbnRfdHlwZSksIHByZWZpeCwgc2VsZi5fbGFiZWwpCgogICAgaWYgc2VsZi5fc2FtcGxlOgogICAgICBwY29sbCB8PSAnU2FtcGxlJyA+PiAoCiAgICAgICAgICBjb21iaW5lcnMuU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5KHNlbGYuX3NhbXBsZV9zaXplKQogICAgICAgICAgfCBiZWFtLkZsYXRNYXAobGFtYmRhIHNhbXBsZTogc2FtcGxlKSkKICAgICMgcHlsaW50OiBkaXNhYmxlPWV4cHJlc3Npb24tbm90LWFzc2lnbmVkCiAgICByZXR1cm4gcGNvbGwgfCAnV3JpdGUnID4+IGJlYW0uaW8uV3JpdGUoCiAgICAgICAgc2VsZi5fY2FjaGVfbWFuYWdlci5zaW5rKHByZWZpeCwgc2VsZi5fbGFiZWwpKQoKCmNsYXNzIFNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyKGNvZGVycy5Db2Rlcik6CiAgIiIiVGhpcyBjbGFzcyBhZGQgYW4gcXVvdGUvdW5xdW90ZSBzdGVwIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMuIiIiCgogICMgcHlsaW50OiBkaXNhYmxlPWRlcHJlY2F0ZWQtdXJsbGliLWZ1bmN0aW9uCgogIGRlZiBlbmNvZGUoc2VsZiwgdmFsdWUpOgogICAgcmV0dXJuIHF1b3RlKAogICAgICAgIGNvZGVycy5jb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLmVuY29kZSh2YWx1ZSkpLmVuY29kZSgndXRmLTgnKQoKICBkZWYgZGVjb2RlKHNlbGYsIHZhbHVlKToKICAgIHJldHVybiBjb2RlcnMuY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKS5kZWNvZGUodW5xdW90ZV90b19ieXRlcyh2YWx1ZSkpCpR9lCiME0NhY2hlTWFuYWdlci5leGlzdHOUalYxAQBLNUs3h5SMHkNhY2hlTWFuYWdlci5pc19sYXRlc3RfdmVyc2lvbpRqVjEBAEs5SzuHlIwcQ2FjaGVNYW5hZ2VyLl9sYXRlc3RfdmVyc2lvbpRqVjEBAEs9Sz+HlIwRQ2FjaGVNYW5hZ2VyLnJlYWSUalYxAQBLQUtQh5SME0NhY2hlTWFuYWdlci5zb3VyY2WUalYxAQBLUktUh5SMEUNhY2hlTWFuYWdlci5zaW5rlGpWMQEAS1ZLWIeUjBhDYWNoZU1hbmFnZXIuc2F2ZV9wY29kZXKUalYxAQBLWktnh5SMGENhY2hlTWFuYWdlci5sb2FkX3Bjb2RlcpRqVjEBAEtpS2uHlIwUQ2FjaGVNYW5hZ2VyLmNsZWFudXCUalYxAQBLbUtvh5SMDENhY2hlTWFuYWdlcpRqXTEBAEsuS2+HlIweRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLl9faW5pdF9flGpWMQEAS3pLlYeUjBxGaWxlQmFzZWRDYWNoZU1hbmFnZXIuZXhpc3RzlGpWMQEAS5dLmIeUjCVGaWxlQmFzZWRDYWNoZU1hbmFnZXIuX2xhdGVzdF92ZXJzaW9ulGpWMQEAS5pLn4eUjCFGaWxlQmFzZWRDYWNoZU1hbmFnZXIuc2F2ZV9wY29kZXKUalYxAQBLoUuih5SMIUZpbGVCYXNlZENhY2hlTWFuYWdlci5sb2FkX3Bjb2RlcpRqVjEBAEukS6eHlIwaRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLnJlYWSUalYxAQBLqUuxh5SMHEZpbGVCYXNlZENhY2hlTWFuYWdlci5zb3VyY2WUalYxAQBLs0u1h5SMGkZpbGVCYXNlZENhY2hlTWFuYWdlci5zaW5rlGpWMQEAS7dLuYeUjB1GaWxlQmFzZWRDYWNoZU1hbmFnZXIuY2xlYW51cJRqVjEBAEu7S76HlIwgRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLl9nbG9iX3BhdGiUalYxAQBLwEvBh5SMG0ZpbGVCYXNlZENhY2hlTWFuYWdlci5fcGF0aJRqVjEBAEvDS8SHlIwcRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLl9tYXRjaJRqVjEBAEvGS8mHlIwsRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLl9DYWNoZVZlcnNpb24uX19pbml0X1+UalYxAQBLzUvPh5SML0ZpbGVCYXNlZENhY2hlTWFuYWdlci5fQ2FjaGVWZXJzaW9uLmdldF92ZXJzaW9ulGpWMQEAS9FL3YeUjCNGaWxlQmFzZWRDYWNoZU1hbmFnZXIuX0NhY2hlVmVyc2lvbpRqXTEBAEvLS92HlIwVRmlsZUJhc2VkQ2FjaGVNYW5hZ2VylGpdMQEAS3JL3YeUjBJSZWFkQ2FjaGUuX19pbml0X1+UalYxAQBL4kvkh5SMEFJlYWRDYWNoZS5leHBhbmSUalYxAQBL5kvph5SMCVJlYWRDYWNoZZRqXTEBAEvgS+mHlIwTV3JpdGVDYWNoZS5fX2luaXRfX5RqVjEBAEvuS/KHlIwRV3JpdGVDYWNoZS5leHBhbmSUalYxAQBL9E0DAYeUjApXcml0ZUNhY2hllGpdMQEAS+xNAwGHlIweU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIuZW5jb2RllGpWMQEATQsBTQ0Bh5SMHlNhZmVGYXN0UHJpbWl0aXZlc0NvZGVyLmRlY29kZZRqVjEBAE0PAU0QAYeUjBdTYWZlRmFzdFByaW1pdGl2ZXNDb2RlcpRqXTEBAE0GAU0QAYeUdX2UKIwMQ2FjaGVNYW5hZ2VylGrEAwAAjBNDYWNoZU1hbmFnZXIuZXhpc3RzlGrEAwAAjB5DYWNoZU1hbmFnZXIuaXNfbGF0ZXN0X3ZlcnNpb26UasQDAACMEUNhY2hlTWFuYWdlci5yZWFklGrEAwAAjBNDYWNoZU1hbmFnZXIuc291cmNllGrEAwAAjBFDYWNoZU1hbmFnZXIuc2lua5RqxAMAAIwYQ2FjaGVNYW5hZ2VyLnNhdmVfcGNvZGVylGrEAwAAjBhDYWNoZU1hbmFnZXIubG9hZF9wY29kZXKUasQDAACMFENhY2hlTWFuYWdlci5jbGVhbnVwlGrEAwAAjBVGaWxlQmFzZWRDYWNoZU1hbmFnZXKUasQDAACMHEZpbGVCYXNlZENhY2hlTWFuYWdlci5leGlzdHOUasQDAACMIUZpbGVCYXNlZENhY2hlTWFuYWdlci5zYXZlX3Bjb2RlcpRqxAMAAIwhRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLmxvYWRfcGNvZGVylGrEAwAAjBpGaWxlQmFzZWRDYWNoZU1hbmFnZXIucmVhZJRqxAMAAIwcRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLnNvdXJjZZRqxAMAAIwaRmlsZUJhc2VkQ2FjaGVNYW5hZ2VyLnNpbmuUasQDAACMHUZpbGVCYXNlZENhY2hlTWFuYWdlci5jbGVhbnVwlGrEAwAAjAlSZWFkQ2FjaGWUasQDAACMEFJlYWRDYWNoZS5leHBhbmSUasQDAACMCldyaXRlQ2FjaGWUasQDAACMEVdyaXRlQ2FjaGUuZXhwYW5klGrEAwAAjBdTYWZlRmFzdFByaW1pdGl2ZXNDb2RlcpRqxAMAAIweU2FmZUZhc3RQcmltaXRpdmVzQ29kZXIuZW5jb2RllGrEAwAAjB5TYWZlRmFzdFByaW1pdGl2ZXNDb2Rlci5kZWNvZGWUasQDAAB1jC1hcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmNhY2hlX21hbmFnZXKUdJSMN2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuY2FjaGluZy5zdHJlYW1pbmdfY2FjaGWUKFgEGgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkuYmVhbV9ydW5uZXJfYXBpX3BiMiBpbXBvcnQgVGVzdFN0cmVhbVBheWxvYWQKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgdGltZXN0YW1wCgoKY2xhc3MgU3RyZWFtaW5nQ2FjaGUob2JqZWN0KToKICAiIiJBYnN0cmFjdGlvbiB0aGF0IGhvbGRzIHRoZSBsb2dpYyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byBjYWNoZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcmVhZGVycyk6CiAgICBzZWxmLl9yZWFkZXJzID0gcmVhZGVycwoKICBjbGFzcyBSZWFkZXIob2JqZWN0KToKICAgICIiIkFic3RyYWN0aW9uIHRoYXQgcmVhZHMgZnJvbSBQQ29sbGVjdGlvbiByZWFkZXJzLgoKICAgIFRoaXMgY2xhc3MgaXMgYW4gQWJzdHJhY3Rpb24gbGF5ZXIgb3ZlciBtdWx0aXBsZSBQQ29sbGVjdGlvbiByZWFkZXJzIHRvIGJlCiAgICB1c2VkIGZvciBzdXBwbHlpbmcgYSBUZXN0U3RyZWFtIHNlcnZpY2Ugd2l0aCBldmVudHMuCgogICAgVGhpcyBjbGFzcyBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBob2xkaW5nIHRoZSBzdGF0ZSBvZiB0aGUgY2xvY2ssIGluamVjdGluZwogICAgY2xvY2sgYWR2YW5jZW1lbnQgZXZlbnRzLCBhbmQgd2F0ZXJtYXJrIGFkdmFuY2VtZW50IGV2ZW50cy4KICAgICIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWRlcnMpOgogICAgICAjIFRoaXMgdGltZXN0YW1wIGlzIHVzZWQgYXMgdGhlIG1vbm90b25pYyBjbG9jayB0byBvcmRlciBldmVudHMgaW4gdGhlCiAgICAgICMgcmVwbGF5LgogICAgICBzZWxmLl9tb25vdG9uaWNfY2xvY2sgPSB0aW1lc3RhbXAuVGltZXN0YW1wLm9mKDApCgogICAgICAjIFRoZSBQQ29sbGVjdGlvbiBjYWNoZSByZWFkZXJzLgogICAgICBzZWxmLl9yZWFkZXJzID0ge30KCiAgICAgICMgVGhlIGZpbGUgaGVhZGVycyB0aGF0IGFyZSBtZXRhZGF0YSBmb3IgdGhhdCBwYXJ0aWN1bGFyIFBDb2xsZWN0aW9uLgogICAgICAjIFRoZSBoZWFkZXIgYWxsb3dzIGZvciBtZXRhZGF0YSBhYm91dCBhbiBlbnRpcmUgc3RyZWFtLCBzbyB0aGF0IHRoZSBkYXRhCiAgICAgICMgaXNuJ3QgY29waWVkIHBlciByZWNvcmQuCiAgICAgIHNlbGYuX2hlYWRlcnMgPSB7ci5oZWFkZXIoKS50YWc6IHIuaGVhZGVyKCkgZm9yIHIgaW4gcmVhZGVyc30KICAgICAgc2VsZi5fcmVhZGVycyA9IHtyLmhlYWRlcigpLnRhZzogci5yZWFkKCkgZm9yIHIgaW4gcmVhZGVyc30KCiAgICAgICMgVGhlIG1vc3QgcmVjZW50bHkgcmVhZCB0aW1lc3RhbXAgcGVyIHRhZy4KICAgICAgc2VsZi5fc3RyZWFtX3RpbWVzID0gewogICAgICAgICAgdGFnOiB0aW1lc3RhbXAuVGltZXN0YW1wKHNlY29uZHM9MCkKICAgICAgICAgIGZvciB0YWcgaW4gc2VsZi5faGVhZGVycwogICAgICB9CgogICAgZGVmIF90ZXN0X3N0cmVhbV9ldmVudHNfYmVmb3JlX3RhcmdldChzZWxmLCB0YXJnZXRfdGltZXN0YW1wKToKICAgICAgIiIiUmVhZHMgdGhlIG5leHQgaXRlcmF0aW9uIG9mIGVsZW1lbnRzIGZyb20gZWFjaCBzdHJlYW0uCgogICAgICBSZXRyaWV2ZXMgYW4gZWxlbWVudCBmcm9tIGVhY2ggc3RyZWFtIGlmZiB0aGUgbW9zdCByZWNlbnRseSByZWFkIHRpbWVzdGFtcAogICAgICBmcm9tIHRoYXQgc3RyZWFtIGlzIGxlc3MgdGhhbiB0aGUgdGFyZ2V0X3RpbWVzdGFtcC4gU2luY2UgdGhlIGFtb3VudCBvZgogICAgICBldmVudHMgbWF5IG5vdCBmaXQgaW50byBtZW1vcnksIHRoaXMgU3RyZWFtaW5nQ2FjaGUgcmVhZHMgYXQgbW9zdCBvbmUKICAgICAgZWxlbWVudCBmcm9tIGVhY2ggc3RyZWFtIGF0IGEgdGltZS4KICAgICAgIiIiCiAgICAgIHJlY29yZHMgPSBbXQogICAgICBmb3IgdGFnLCByIGluIHNlbGYuX3JlYWRlcnMuaXRlbXMoKToKICAgICAgICAjIFRoZSB0YXJnZXRfdGltZXN0YW1wIGlzIHRoZSBtYXhpbXVtIHRpbWVzdGFtcCB0aGF0IHdhcyByZWFkIGZyb20gdGhlCiAgICAgICAgIyBzdHJlYW0uIFNvbWUgcmVhZGVycyBtYXkgaGF2ZSBlbGVtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gdGhpcy4gVGh1cywKICAgICAgICAjIHdlIHNraXAgYWxsIHJlYWRlcnMgdGhhdCBhbHJlYWR5IGhhdmUgZWxlbWVudHMgdGhhdCBhcmUgYXQgdGhpcwogICAgICAgICMgdGltZXN0YW1wIHNvIHRoYXQgd2UgZG9uJ3QgcmVhZCBldmVyeXRoaW5nIGludG8gbWVtb3J5LgogICAgICAgIGlmIHNlbGYuX3N0cmVhbV90aW1lc1t0YWddID49IHRhcmdldF90aW1lc3RhbXA6CiAgICAgICAgICBjb250aW51ZQogICAgICAgIHRyeToKICAgICAgICAgIHJlY29yZCA9IG5leHQocikucmVjb3JkZWRfZXZlbnQKICAgICAgICAgIGlmIHJlY29yZC5IYXNGaWVsZCgncHJvY2Vzc2luZ190aW1lX2V2ZW50Jyk6CiAgICAgICAgICAgIHNlbGYuX3N0cmVhbV90aW1lc1t0YWddICs9IHRpbWVzdGFtcC5EdXJhdGlvbigKICAgICAgICAgICAgICAgIG1pY3Jvcz1yZWNvcmQucHJvY2Vzc2luZ190aW1lX2V2ZW50LmFkdmFuY2VfZHVyYXRpb24pCiAgICAgICAgICByZWNvcmRzLmFwcGVuZCgodGFnLCByZWNvcmQsIHNlbGYuX3N0cmVhbV90aW1lc1t0YWddKSkKICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgIHBhc3MKICAgICAgcmV0dXJuIHJlY29yZHMKCiAgICBkZWYgX21lcmdlX3NvcnQoc2VsZiwgcHJldmlvdXNfZXZlbnRzLCBuZXdfZXZlbnRzKToKICAgICAgcmV0dXJuIHNvcnRlZCgKICAgICAgICAgIHByZXZpb3VzX2V2ZW50cyArIG5ld19ldmVudHMsIGtleT1sYW1iZGEgeDogeFsyXSwgcmV2ZXJzZT1UcnVlKQoKICAgIGRlZiBfbWluX3RpbWVzdGFtcF9vZihzZWxmLCBldmVudHMpOgogICAgICByZXR1cm4gZXZlbnRzWy0xXVsyXSBpZiBldmVudHMgZWxzZSB0aW1lc3RhbXAuTUFYX1RJTUVTVEFNUAoKICAgIGRlZiBfZXZlbnRfc3RyZWFtX2NhdWdodF91cF90b190YXJnZXQoc2VsZiwgZXZlbnRzLCB0YXJnZXRfdGltZXN0YW1wKToKICAgICAgZW1wdHlfZXZlbnRzID0gbm90IGV2ZW50cwogICAgICBzdHJlYW1faXNfcGFzdF90YXJnZXQgPSBzZWxmLl9taW5fdGltZXN0YW1wX29mKGV2ZW50cykgPiB0YXJnZXRfdGltZXN0YW1wCiAgICAgIHJldHVybiBlbXB0eV9ldmVudHMgb3Igc3RyZWFtX2lzX3Bhc3RfdGFyZ2V0CgogICAgZGVmIHJlYWQoc2VsZik6CiAgICAgICIiIlJlYWRzIHJlY29yZHMgZnJvbSBQQ29sbGVjdGlvbiByZWFkZXJzLgogICAgICAiIiIKCiAgICAgICMgVGhlIGxhcmdlc3QgdGltZXN0YW1wIHJlYWQgZnJvbSB0aGUgZGlmZmVyZW50IHN0cmVhbXMuCiAgICAgIHRhcmdldF90aW1lc3RhbXAgPSB0aW1lc3RhbXAuTUFYX1RJTUVTVEFNUAoKICAgICAgIyBUaGUgZXZlbnRzIGZyb20gbGFzdCBpdGVyYXRpb24gdGhhdCBhcmUgcGFzdCB0aGUgdGFyZ2V0IHRpbWVzdGFtcC4KICAgICAgdW5zZW50X2V2ZW50cyA9IFtdCgogICAgICAjIEVtaXQgZXZlbnRzIHVudGlsIGFsbCBldmVudHMgaGF2ZSBiZWVuIHJlYWQuCiAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgIyBSZWFkIHRoZSBuZXh0IHNldCBvZiBldmVudHMuIFRoZSByZWFkIGV2ZW50cyB3aWxsIG1vc3QgbGlrZWx5IGJlCiAgICAgICAgIyBvdXQgb2Ygb3JkZXIgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHJlYWRlcnMuIEhlcmUgd2Ugc29ydCB0aGVtIGludG8KICAgICAgICAjIGEgbW9yZSBtYW5hZ2VhYmxlIHN0YXRlLgogICAgICAgIG5ld19ldmVudHMgPSBzZWxmLl90ZXN0X3N0cmVhbV9ldmVudHNfYmVmb3JlX3RhcmdldCh0YXJnZXRfdGltZXN0YW1wKQogICAgICAgIGV2ZW50c190b19zZW5kID0gc2VsZi5fbWVyZ2Vfc29ydCh1bnNlbnRfZXZlbnRzLCBuZXdfZXZlbnRzKQogICAgICAgIGlmIG5vdCBldmVudHNfdG9fc2VuZDoKICAgICAgICAgIGJyZWFrCgogICAgICAgICMgR2V0IHRoZSBuZXh0IGxhcmdlc3QgdGltZXN0YW1wIGluIHRoZSBzdHJlYW0uIFRoaXMgaXMgdXNlZCBhcyB0aGUKICAgICAgICAjIHRpbWVzdGFtcCBmb3IgcmVhZGVycyB0byAiY2F0Y2gtdXAiIHRvLiBUaGlzIHdpbGwgb25seSByZWFkIGZyb20KICAgICAgICAjIHJlYWRlcnMgd2l0aCBhIHRpbWVzdGFtcCBsZXNzIHRoYW4gdGhpcy4KICAgICAgICB0YXJnZXRfdGltZXN0YW1wID0gc2VsZi5fbWluX3RpbWVzdGFtcF9vZihldmVudHNfdG9fc2VuZCkKCiAgICAgICAgIyBMb29wIHRocm91Z2ggdGhlIGVsZW1lbnRzIHdpdGggdGhlIGNvcnJlY3QgdGltZXN0YW1wLgogICAgICAgIHdoaWxlIG5vdCBzZWxmLl9ldmVudF9zdHJlYW1fY2F1Z2h0X3VwX3RvX3RhcmdldChldmVudHNfdG9fc2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3RpbWVzdGFtcCk6CgogICAgICAgICAgIyBGaXJzdCBhZHZhbmNlIHRoZSBjbG9jayB0byBtYXRjaCB0aGUgdGltZSBvZiB0aGUgc3RyZWFtLiBUaGlzIGhhcwogICAgICAgICAgIyBhIHNpZGUtZWZmZWN0IG9mIGFsc28gYWR2YW5jaW5nIHRoaXMgY2FjaGUncyBjbG9jay4KICAgICAgICAgIHRhZywgciwgY3Vycl90aW1lc3RhbXAgPSBldmVudHNfdG9fc2VuZC5wb3AoKQogICAgICAgICAgaWYgY3Vycl90aW1lc3RhbXAgPiBzZWxmLl9tb25vdG9uaWNfY2xvY2s6CiAgICAgICAgICAgIHlpZWxkIHNlbGYuX2FkdmFuY2VfcHJvY2Vzc2luZ190aW1lKGN1cnJfdGltZXN0YW1wKQoKICAgICAgICAgICMgVGhlbiwgc2VuZCBlaXRoZXIgYSBuZXcgZWxlbWVudCBvciB3YXRlcm1hcmsuCiAgICAgICAgICBpZiByLkhhc0ZpZWxkKCdlbGVtZW50X2V2ZW50Jyk6CiAgICAgICAgICAgIHIuZWxlbWVudF9ldmVudC50YWcgPSB0YWcKICAgICAgICAgICAgeWllbGQgcgogICAgICAgICAgZWxpZiByLkhhc0ZpZWxkKCd3YXRlcm1hcmtfZXZlbnQnKToKICAgICAgICAgICAgci53YXRlcm1hcmtfZXZlbnQudGFnID0gdGFnCiAgICAgICAgICAgIHlpZWxkIHIKICAgICAgICB1bnNlbnRfZXZlbnRzID0gZXZlbnRzX3RvX3NlbmQKICAgICAgICB0YXJnZXRfdGltZXN0YW1wID0gc2VsZi5fbWluX3RpbWVzdGFtcF9vZih1bnNlbnRfZXZlbnRzKQoKICAgIGRlZiBfYWRkX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgdGFnKToKICAgICAgIiIiQ29uc3RydWN0cyBhbiBBZGRFbGVtZW50IGV2ZW50IGZvciB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgYW5kIHRhZy4KICAgICAgIiIiCiAgICAgIHJldHVybiBUZXN0U3RyZWFtUGF5bG9hZC5FdmVudCgKICAgICAgICAgIGVsZW1lbnRfZXZlbnQ9VGVzdFN0cmVhbVBheWxvYWQuRXZlbnQuQWRkRWxlbWVudHMoCiAgICAgICAgICAgICAgZWxlbWVudHM9W2VsZW1lbnRdLCB0YWc9dGFnKSkKCiAgICBkZWYgX2FkdmFuY2VfcHJvY2Vzc2luZ190aW1lKHNlbGYsIG5ld190aW1lc3RhbXApOgogICAgICAiIiJBZHZhbmNlcyB0aGUgaW50ZXJuYWwgY2xvY2sgYW5kIHJldHVybnMgYW4gQWR2YW5jZVByb2Nlc3NpbmdUaW1lIGV2ZW50LgogICAgICAiIiIKICAgICAgYWR2YW5jeV9ieSA9IG5ld190aW1lc3RhbXAubWljcm9zIC0gc2VsZi5fbW9ub3RvbmljX2Nsb2NrLm1pY3JvcwogICAgICBlID0gVGVzdFN0cmVhbVBheWxvYWQuRXZlbnQoCiAgICAgICAgICBwcm9jZXNzaW5nX3RpbWVfZXZlbnQ9VGVzdFN0cmVhbVBheWxvYWQuRXZlbnQuQWR2YW5jZVByb2Nlc3NpbmdUaW1lKAogICAgICAgICAgICAgIGFkdmFuY2VfZHVyYXRpb249YWR2YW5jeV9ieSkpCiAgICAgIHNlbGYuX21vbm90b25pY19jbG9jayA9IG5ld190aW1lc3RhbXAKICAgICAgcmV0dXJuIGUKCiAgZGVmIHJlYWRlcihzZWxmKToKICAgIHJldHVybiBTdHJlYW1pbmdDYWNoZS5SZWFkZXIoc2VsZi5fcmVhZGVycykKlJXoFgEAAAAAAH2UKIwXU3RyZWFtaW5nQ2FjaGUuX19pbml0X1+UalYxAQBLHUseh5SMHlN0cmVhbWluZ0NhY2hlLlJlYWRlci5fX2luaXRfX5RqVjEBAEspSzuHlIw3U3RyZWFtaW5nQ2FjaGUuUmVhZGVyLl90ZXN0X3N0cmVhbV9ldmVudHNfYmVmb3JlX3RhcmdldJRqVjEBAEs9S1WHlIwhU3RyZWFtaW5nQ2FjaGUuUmVhZGVyLl9tZXJnZV9zb3J0lGpWMQEAS1dLWYeUjCdTdHJlYW1pbmdDYWNoZS5SZWFkZXIuX21pbl90aW1lc3RhbXBfb2aUalYxAQBLW0tch5SMN1N0cmVhbWluZ0NhY2hlLlJlYWRlci5fZXZlbnRfc3RyZWFtX2NhdWdodF91cF90b190YXJnZXSUalYxAQBLXkthh5SMGlN0cmVhbWluZ0NhY2hlLlJlYWRlci5yZWFklGpWMQEAS2NLjoeUjCJTdHJlYW1pbmdDYWNoZS5SZWFkZXIuX2FkZF9lbGVtZW50lGpWMQEAS5BLlYeUjC5TdHJlYW1pbmdDYWNoZS5SZWFkZXIuX2FkdmFuY2VfcHJvY2Vzc2luZ190aW1llGpWMQEAS5dLn4eUjBVTdHJlYW1pbmdDYWNoZS5SZWFkZXKUal0xAQBLIEufh5SMFVN0cmVhbWluZ0NhY2hlLnJlYWRlcpRqVjEBAEuhS6KHlIwOU3RyZWFtaW5nQ2FjaGWUal0xAQBLGkuih5R1fZQojA5TdHJlYW1pbmdDYWNoZZRqxQMAAIwVU3RyZWFtaW5nQ2FjaGUuUmVhZGVylGrFAwAAjBpTdHJlYW1pbmdDYWNoZS5SZWFkZXIucmVhZJRqxQMAAIwVU3RyZWFtaW5nQ2FjaGUucmVhZGVylGrFAwAAdYw3YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5jYWNoaW5nLnN0cmVhbWluZ19jYWNoZZR0lIw3YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmRpc3BsYXlfbWFuYWdlcpQoWIYbAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1hbmFnZXMgZGlzcGxheWluZyBwaXBlbGluZSBncmFwaCBhbmQgZXhlY3V0aW9uIHN0YXR1cyBvbiB0aGUgZnJvbnRlbmQuCgpUaGlzIG1vZHVsZSBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdGltZQpmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORwoKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkgaW1wb3J0IGludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoCgp0cnk6CiAgaW1wb3J0IElQeXRob24gICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgogIGZyb20gSVB5dGhvbiBpbXBvcnQgZ2V0X2lweXRob24gICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgogIGZyb20gSVB5dGhvbi5kaXNwbGF5IGltcG9ydCBkaXNwbGF5IGFzIGlwX2Rpc3BsYXkgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgogICMgX2Rpc3BsYXlfcHJvZ3Jlc3MgZGVmaW5lcyBob3cgb3V0cHV0cyBhcmUgcHJpbnRlZCBvbiB0aGUgZnJvbnRlbmQuCiAgX2Rpc3BsYXlfcHJvZ3Jlc3MgPSBpcF9kaXNwbGF5CgogIGlmIG5vdCBUWVBFX0NIRUNLSU5HOgoKICAgIGRlZiBfZm9ybWF0dGVyKHN0cmluZywgcHAsIGN5Y2xlKTogICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAogICAgICBwcC50ZXh0KHN0cmluZykKCiAgICBpZiBnZXRfaXB5dGhvbigpOgogICAgICBwbGFpbiA9IGdldF9pcHl0aG9uKCkuZGlzcGxheV9mb3JtYXR0ZXIuZm9ybWF0dGVyc1sndGV4dC9wbGFpbiddICAjIHB5bGludDogZGlzYWJsZT11bmRlZmluZWQtdmFyaWFibGUKICAgICAgcGxhaW4uZm9yX3R5cGUoc3RyLCBfZm9ybWF0dGVyKQoKZXhjZXB0IEltcG9ydEVycm9yOgogIElQeXRob24gPSBOb25lCiAgX2Rpc3BsYXlfcHJvZ3Jlc3MgPSBwcmludAoKCmNsYXNzIERpc3BsYXlNYW5hZ2VyKG9iamVjdCk6CiAgIiIiTWFuYWdlcyBkaXNwbGF5aW5nIHBpcGVsaW5lIGdyYXBoIGFuZCBleGVjdXRpb24gc3RhdHVzIG9uIHRoZSBmcm9udGVuZC4iIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIHBpcGVsaW5lX3Byb3RvLAogICAgICBwaXBlbGluZV9hbmFseXplciwKICAgICAgY2FjaGVfbWFuYWdlciwKICAgICAgcGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIpOgogICAgIiIiQ29uc3RydWN0b3Igb2YgRGlzcGxheU1hbmFnZXIuCgogICAgQXJnczoKICAgICAgcGlwZWxpbmVfcHJvdG86IChQaXBlbGluZSBwcm90bykKICAgICAgcGlwZWxpbmVfYW5hbHl6ZXI6IChQaXBlbGluZUFuYWx5emVyKSB0aGUgcGlwZWxpbmUgYW5hbHl6ZXIgdGhhdAogICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyByb3VuZCBvZiBleGVjdXRpb24uIFRoaXMgd2lsbCBwcm92aWRlIG1vcmUKICAgICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgcGlwZWxpbmUKICAgICAgY2FjaGVfbWFuYWdlcjogKGludGVyYWN0aXZlX3J1bm5lci5DYWNoZU1hbmFnZXIpIERpc3BsYXlNYW5hZ2VyIGZldGNoZXMKICAgICAgICAgIHRoZSBsYXRlc3Qgc3RhdHVzIG9mIHBpcGVsaW5lIGV4ZWN1dGlvbiBieSBxdWVyeWluZyBjYWNoZV9tYW5hZ2VyLgogICAgICBwaXBlbGluZV9ncmFwaF9yZW5kZXJlcjogKHBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyLlBpcGVsaW5lR3JhcGhSZW5kZXJlcikKICAgICAgICAgIGRlY2lkZXMgaG93IGEgcGlwZWxpbmUgZ3JhcGggaXMgcmVuZGVyZWQuCiAgICAiIiIKICAgICMgRXZlcnkgcGFyYW1ldGVyIGV4Y2VwdCBjYWNoZV9tYW5hZ2VyIGlzIGV4cGVjdGVkIHRvIHJlbWFpbiBjb25zdGFudC4KICAgIHNlbGYuX2FuYWx5emVyID0gcGlwZWxpbmVfYW5hbHl6ZXIKICAgIHNlbGYuX2NhY2hlX21hbmFnZXIgPSBjYWNoZV9tYW5hZ2VyCiAgICBzZWxmLl9waXBlbGluZV9ncmFwaCA9IGludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoLkludGVyYWN0aXZlUGlwZWxpbmVHcmFwaCgKICAgICAgICBwaXBlbGluZV9wcm90bywKICAgICAgICByZXF1aXJlZF90cmFuc2Zvcm1zPXNlbGYuX2FuYWx5emVyLnRsX3JlcXVpcmVkX3RyYW5zX2lkcygpLAogICAgICAgIHJlZmVyZW5jZWRfcGNvbGxlY3Rpb25zPXNlbGYuX2FuYWx5emVyLnRsX3JlZmVyZW5jZWRfcGNvbGxfaWRzKCksCiAgICAgICAgY2FjaGVkX3Bjb2xsZWN0aW9ucz1zZWxmLl9hbmFseXplci5jYWNoZXNfdXNlZCgpKQogICAgc2VsZi5fcmVuZGVyZXIgPSBwaXBlbGluZV9ncmFwaF9yZW5kZXJlcgoKICAgICMgX3RleHRfdG9fcHJpbnQga2VlcHMgdHJhY2sgb2YgaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxheWVkLgogICAgc2VsZi5fdGV4dF90b19wcmludCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKICAgIHNlbGYuX3RleHRfdG9fcHJpbnRbJ3N1bW1hcnknXSA9ICgKICAgICAgICAnVXNpbmcgJXMgY2FjaGVkIFBDb2xsZWN0aW9uc1xuRXhlY3V0aW5nICVzIG9mICVzICcKICAgICAgICAndHJhbnNmb3Jtcy4nKSAlICgKICAgICAgICAgICAgbGVuKHNlbGYuX2FuYWx5emVyLmNhY2hlc191c2VkKCkpLAogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICBsZW4oc2VsZi5fYW5hbHl6ZXIudGxfcmVxdWlyZWRfdHJhbnNfaWRzKCkpIC0KICAgICAgICAgICAgICAgIGxlbihzZWxmLl9hbmFseXplci5yZWFkX2NhY2hlX2lkcygpKSAtCiAgICAgICAgICAgICAgICBsZW4oc2VsZi5fYW5hbHl6ZXIud3JpdGVfY2FjaGVfaWRzKCkpKSwKICAgICAgICAgICAgbGVuKAogICAgICAgICAgICAgICAgcGlwZWxpbmVfcHJvdG8uY29tcG9uZW50cy50cmFuc2Zvcm1zWwogICAgICAgICAgICAgICAgICAgIHBpcGVsaW5lX3Byb3RvLnJvb3RfdHJhbnNmb3JtX2lkc1swXV0uc3VidHJhbnNmb3JtcykpCiAgICBzZWxmLl90ZXh0X3RvX3ByaW50LnVwZGF0ZSgKICAgICAgICB7cGNvbGxfaWQ6ICIiCiAgICAgICAgIGZvciBwY29sbF9pZCBpbiBzZWxmLl9hbmFseXplci50bF9yZWZlcmVuY2VkX3Bjb2xsX2lkcygpfSkKCiAgICAjIF9wY29sbGVjdGlvbl9zdGF0cyBtYXBzIHBjb2xsX2lkIHRvCiAgICAjIHsgJ2NhY2hlX2xhYmVsJzogY2FjaGVfbGFiZWwsIHZlcnNpb24nOiB2ZXJzaW9uLCAnc2FtcGxlJzogcGNvbGxfaW5fbGlzdCB9CiAgICBzZWxmLl9wY29sbGVjdGlvbl9zdGF0cyA9IHt9CiAgICBmb3IgcGNvbGxfaWQgaW4gc2VsZi5fYW5hbHl6ZXIudGxfcmVmZXJlbmNlZF9wY29sbF9pZHMoKToKICAgICAgc2VsZi5fcGNvbGxlY3Rpb25fc3RhdHNbcGNvbGxfaWRdID0gewogICAgICAgICAgJ2NhY2hlX2xhYmVsJzogc2VsZi5fYW5hbHl6ZXIucGlwZWxpbmVfaW5mbygpLmNhY2hlX2xhYmVsKHBjb2xsX2lkKSwKICAgICAgICAgICd2ZXJzaW9uJzogLTEsCiAgICAgICAgICAnc2FtcGxlJzogW10KICAgICAgfQoKICAgIHNlbGYuX3Byb2R1Y2VycyA9IHt9CiAgICBmb3IgXywgdHJhbnNmb3JtIGluIHBpcGVsaW5lX3Byb3RvLmNvbXBvbmVudHMudHJhbnNmb3Jtcy5pdGVtcygpOgogICAgICBmb3IgcGNvbGxfaWQgaW4gdHJhbnNmb3JtLm91dHB1dHMudmFsdWVzKCk6CiAgICAgICAgaWYgcGNvbGxfaWQgbm90IGluIHNlbGYuX3Byb2R1Y2VycyBvciAnLycgbm90IGluIHRyYW5zZm9ybS51bmlxdWVfbmFtZToKICAgICAgICAgIHNlbGYuX3Byb2R1Y2Vyc1twY29sbF9pZF0gPSB0cmFuc2Zvcm0udW5pcXVlX25hbWUKCiAgICAjIEZvciBwZXJpb2RpYyB1cGRhdGUuCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgc2VsZi5fcGVyaW9kaWNfdXBkYXRlID0gRmFsc2UKCiAgZGVmIHVwZGF0ZV9kaXNwbGF5KHNlbGYsIGZvcmNlPUZhbHNlKToKICAgICIiIlVwZGF0ZXMgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuCgogICAgUmV0cmlldmVzIHRoZSBsYXRlc3QgZXhlY3V0aW9uIHN0YXR1cyBieSBxdWVyeWluZyBDYWNoZU1hbmFnZXIgYW5kIHVwZGF0ZXMKICAgIGRpc3BsYXkgb24gdGhlIGZyb25lbmQuIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgcGlwZWxpbmUgaW4KICAgIGEgY2VsbCwgYmVjYXVzZSBpdCBjbGVhcnMgdXAgZXZlcnl0aGluZyBpbiB0aGUgY2VsbCBvdXRwdXQgZXZlcnkgdXBkYXRlCiAgICBjeWNsZS4KCiAgICBBcmdzOgogICAgICBmb3JjZTogKGJvb2wpIHdoZXRoZXIgdG8gZm9yY2UgdXBkYXRpbmcgd2hlbiBubyBzdGF0cyBjaGFuZ2UgaGFwcGVucy4KICAgICIiIgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBzdGF0c191cGRhdGVkID0gRmFsc2UKCiAgICAgIGZvciBwY29sbF9pZCwgc3RhdHMgaW4gc2VsZi5fcGNvbGxlY3Rpb25fc3RhdHMuaXRlbXMoKToKICAgICAgICBjYWNoZV9sYWJlbCA9IHN0YXRzWydjYWNoZV9sYWJlbCddCiAgICAgICAgdmVyc2lvbiA9IHN0YXRzWyd2ZXJzaW9uJ10KCiAgICAgICAgaWYgZm9yY2Ugb3Igbm90IHNlbGYuX2NhY2hlX21hbmFnZXIuaXNfbGF0ZXN0X3ZlcnNpb24oCiAgICAgICAgICAgIHZlcnNpb24sICdzYW1wbGUnLCBjYWNoZV9sYWJlbCk6CiAgICAgICAgICBwY29sbF9saXN0LCB2ZXJzaW9uID0gc2VsZi5fY2FjaGVfbWFuYWdlci5yZWFkKCdzYW1wbGUnLCBjYWNoZV9sYWJlbCkKICAgICAgICAgIHN0YXRzWydzYW1wbGUnXSA9IHBjb2xsX2xpc3QKICAgICAgICAgIHN0YXRzWyd2ZXJzaW9uJ10gPSB2ZXJzaW9uCiAgICAgICAgICBzdGF0c191cGRhdGVkID0gVHJ1ZQoKICAgICAgICAgIGlmIHBjb2xsX2lkIGluIHNlbGYuX2FuYWx5emVyLnRsX3JlZmVyZW5jZWRfcGNvbGxfaWRzKCk6CiAgICAgICAgICAgIHNlbGYuX3RleHRfdG9fcHJpbnRbcGNvbGxfaWRdID0gKAogICAgICAgICAgICAgICAgc3RyKAogICAgICAgICAgICAgICAgICAgICclcyBwcm9kdWNlZCAlcycgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Byb2R1Y2Vyc1twY29sbF9pZF0sCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBoLmZvcm1hdF9zYW1wbGUocGNvbGxfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1KSkpKQoKICAgICAgaWYgZm9yY2Ugb3Igc3RhdHNfdXBkYXRlZDoKICAgICAgICBzZWxmLl9waXBlbGluZV9ncmFwaC51cGRhdGVfcGNvbGxlY3Rpb25fc3RhdHMoc2VsZi5fcGNvbGxlY3Rpb25fc3RhdHMpCgogICAgICAgIGlmIElQeXRob246CiAgICAgICAgICBmcm9tIElQeXRob24uY29yZSBpbXBvcnQgZGlzcGxheQogICAgICAgICAgZGlzcGxheS5jbGVhcl9vdXRwdXQoVHJ1ZSkKICAgICAgICAgIHJlbmRlcmVkX2dyYXBoID0gc2VsZi5fcmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBoKAogICAgICAgICAgICAgIHNlbGYuX3BpcGVsaW5lX2dyYXBoKQogICAgICAgICAgZGlzcGxheS5kaXNwbGF5KGRpc3BsYXkuSFRNTChyZW5kZXJlZF9ncmFwaCkpCgogICAgICAgIF9kaXNwbGF5X3Byb2dyZXNzKCdSdW5uaW5nLi4uJykKICAgICAgICBmb3IgdGV4dCBpbiBzZWxmLl90ZXh0X3RvX3ByaW50LnZhbHVlcygpOgogICAgICAgICAgaWYgdGV4dCAhPSAiIjoKICAgICAgICAgICAgX2Rpc3BsYXlfcHJvZ3Jlc3ModGV4dCkKCiAgZGVmIHN0YXJ0X3BlcmlvZGljX3VwZGF0ZShzZWxmKToKICAgICIiIlN0YXJ0IGEgdGhyZWFkIHRoYXQgcGVyaW9kaWNhbGx5IHVwZGF0ZXMgdGhlIGRpc3BsYXkuIiIiCiAgICBzZWxmLnVwZGF0ZV9kaXNwbGF5KFRydWUpCiAgICBzZWxmLl9wZXJpb2RpY191cGRhdGUgPSBUcnVlCgogICAgZGVmIF91cGRhdGVyKCk6CiAgICAgIHdoaWxlIHNlbGYuX3BlcmlvZGljX3VwZGF0ZToKICAgICAgICBzZWxmLnVwZGF0ZV9kaXNwbGF5KCkKICAgICAgICB0aW1lLnNsZWVwKC4wMikKCiAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3VwZGF0ZXIpCiAgICB0LmRhZW1vbiA9IFRydWUKICAgIHQuc3RhcnQoKQoKICBkZWYgc3RvcF9wZXJpb2RpY191cGRhdGUoc2VsZik6CiAgICAiIiJTdG9wIHBlcmlvZGljYWxseSB1cGRhdGluZyB0aGUgZGlzcGxheS4iIiIKICAgIHNlbGYudXBkYXRlX2Rpc3BsYXkoVHJ1ZSkKICAgIHNlbGYuX3BlcmlvZGljX3VwZGF0ZSA9IEZhbHNlCpR9lCiMCl9mb3JtYXR0ZXKUalYxAQBLLUsuh5SMF0Rpc3BsYXlNYW5hZ2VyLl9faW5pdF9flGpWMQEASztLeoeUjB1EaXNwbGF5TWFuYWdlci51cGRhdGVfZGlzcGxheZRqVjEBAEt8S6qHlIwkRGlzcGxheU1hbmFnZXIuc3RhcnRfcGVyaW9kaWNfdXBkYXRllGpWMQEAS6xLuIeUjCNEaXNwbGF5TWFuYWdlci5zdG9wX3BlcmlvZGljX3VwZGF0ZZRqVjEBAEu6S72HlIwORGlzcGxheU1hbmFnZXKUal0xAQBLOUu9h5R1fZQojA5EaXNwbGF5TWFuYWdlcpRqRwMAAIwdRGlzcGxheU1hbmFnZXIudXBkYXRlX2Rpc3BsYXmUakcDAACMJERpc3BsYXlNYW5hZ2VyLnN0YXJ0X3BlcmlvZGljX3VwZGF0ZZRqRwMAAIwjRGlzcGxheU1hbmFnZXIuc3RvcF9wZXJpb2RpY191cGRhdGWUakcDAAB1jDdhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuZGlzcGxheV9tYW5hZ2VylHSUjEJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkuaW50ZXJhY3RpdmVfcGlwZWxpbmVfZ3JhcGiUKFjuFQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJIZWxwZXIgdG8gcmVuZGVyIHBpcGVsaW5lIGdyYXBoIGluIElQeXRob24gd2hlbiBydW5uaW5nIGludGVyYWN0aXZlbHkuCgpUaGlzIG1vZHVsZSBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgcmUKCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5IGltcG9ydCBwaXBlbGluZV9ncmFwaAoKCmRlZiBuaWNlX3N0cihvKToKICBzID0gcmVwcihvKQogIHMgPSBzLnJlcGxhY2UoJyInLCAiJyIpCiAgcyA9IHMucmVwbGFjZSgnXFwnLCAnfCcpCiAgcyA9IHJlLnN1YihyJ1teXHgyMC1ceDdGXScsICcgJywgcykKICBhc3NlcnQgJyInIG5vdCBpbiBzCiAgaWYgbGVuKHMpID4gMzU6CiAgICBzID0gc1s6MzVdICsgJy4uLicKICByZXR1cm4gcwoKCmRlZiBmb3JtYXRfc2FtcGxlKGNvbnRlbnRzLCBjb3VudD0xMDAwKToKICBjb250ZW50cyA9IGxpc3QoY29udGVudHMpCiAgZWxlbXMgPSAnLCAnLmpvaW4oW25pY2Vfc3RyKG8pIGZvciBvIGluIGNvbnRlbnRzWzpjb3VudF1dKQogIGlmIGxlbihjb250ZW50cykgPiBjb3VudDoKICAgIGVsZW1zICs9ICcsIC4uLicKICBhc3NlcnQgJyInIG5vdCBpbiBlbGVtcwogIHJldHVybiAneyVzfScgJSBlbGVtcwoKCmNsYXNzIEludGVyYWN0aXZlUGlwZWxpbmVHcmFwaChwaXBlbGluZV9ncmFwaC5QaXBlbGluZUdyYXBoKToKICAiIiJDcmVhdGVzIHRoZSBET1QgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZXJhY3RpdmUgcGlwZWxpbmUuIFRocmVhZC1zYWZlLiIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgcGlwZWxpbmUsCiAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXM9Tm9uZSwKICAgICAgcmVmZXJlbmNlZF9wY29sbGVjdGlvbnM9Tm9uZSwKICAgICAgY2FjaGVkX3Bjb2xsZWN0aW9ucz1Ob25lKToKICAgICIiIkNvbnN0cnVjdG9yIG9mIFBpcGVsaW5lR3JhcGguCgogICAgQXJnczoKICAgICAgcGlwZWxpbmU6IChQaXBlbGluZSBwcm90bykgb3IgKFBpcGVsaW5lKSBwaXBlbGluZSB0byBiZSByZW5kZXJlZC4KICAgICAgcmVxdWlyZWRfdHJhbnNmb3JtczogKGxpc3Qvc2V0IG9mIHN0cikgSUQgb2YgdG9wIGxldmVsIFBUcmFuc2Zvcm1zIHRoYXQKICAgICAgICAgIGxlYWQgdG8gdmlzaWJsZSByZXN1bHRzLgogICAgICByZWZlcmVuY2VkX3Bjb2xsZWN0aW9uczogKGxpc3Qvc2V0IG9mIHN0cikgSUQgb2YgUENvbGxlY3Rpb25zIHRoYXQgYXJlCiAgICAgICAgICByZWZlcmVuY2VkIGJ5IHRvcCBsZXZlbCBQVHJhbnNmb3JtcyBleGVjdXRlZCAoaS5lLgogICAgICAgICAgcmVxdWlyZWRfdHJhbnNmb3JtcykKICAgICAgY2FjaGVkX3Bjb2xsZWN0aW9uczogKHNldCBvZiBzdHIpIGEgc2V0IG9mIFBDb2xsZWN0aW9uIElEcyBvZiB0aG9zZSB3aG9zZQogICAgICAgICAgY2FjaGVkIHJlc3VsdHMgYXJlIHVzZWQgaW4gdGhlIGV4ZWN1dGlvbi4KICAgICIiIgogICAgc2VsZi5fcmVxdWlyZWRfdHJhbnNmb3JtcyA9IHJlcXVpcmVkX3RyYW5zZm9ybXMgb3Igc2V0KCkKICAgIHNlbGYuX3JlZmVyZW5jZWRfcGNvbGxlY3Rpb25zID0gcmVmZXJlbmNlZF9wY29sbGVjdGlvbnMgb3Igc2V0KCkKICAgIHNlbGYuX2NhY2hlZF9wY29sbGVjdGlvbnMgPSBjYWNoZWRfcGNvbGxlY3Rpb25zIG9yIHNldCgpCgogICAgc3VwZXIoSW50ZXJhY3RpdmVQaXBlbGluZUdyYXBoLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBwaXBlbGluZT1waXBlbGluZSwKICAgICAgICBkZWZhdWx0X3ZlcnRleF9hdHRycz17CiAgICAgICAgICAgICdjb2xvcic6ICdncmF5JywgJ2ZvbnRjb2xvcic6ICdncmF5JwogICAgICAgIH0sCiAgICAgICAgZGVmYXVsdF9lZGdlX2F0dHJzPXsnY29sb3InOiAnZ3JheSd9KQoKICAgIHRyYW5zZm9ybV91cGRhdGVzLCBwY29sbGVjdGlvbl91cGRhdGVzID0gc2VsZi5fZ2VuZXJhdGVfZ3JhcGhfdXBkYXRlX2RpY3RzKCkKICAgIHNlbGYuX3VwZGF0ZV9ncmFwaCh0cmFuc2Zvcm1fdXBkYXRlcywgcGNvbGxlY3Rpb25fdXBkYXRlcykKCiAgZGVmIHVwZGF0ZV9wY29sbGVjdGlvbl9zdGF0cyhzZWxmLCBwY29sbGVjdGlvbl9zdGF0cyk6CiAgICAiIiJVcGRhdGVzIFBDb2xsZWN0aW9uIHN0YXRzLgoKICAgIEFyZ3M6CiAgICAgIHBjb2xsZWN0aW9uX3N0YXRzOiAoZGljdCBvZiBkaWN0KSBtYXBzIFBDb2xsZWN0aW9uIElEcyB0byBpbmZvcm1hdGlvbnMuIEluCiAgICAgICAgICBwYXJ0aWN1bGFyLCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGZpZWxkICdzYW1wbGUnIHdoaWNoIHNob3VsZCBiZSBhCiAgICAgICAgICB0aGUgUENvbGxlY3Rpb24gcmVzdWx0IGluIGFzIGEgbGlzdC4KICAgICIiIgogICAgZWRnZV9kaWN0ID0ge30KICAgIGZvciBwY29sbF9pZCwgc3RhdHMgaW4gcGNvbGxlY3Rpb25fc3RhdHMuaXRlbXMoKToKICAgICAgYXR0cnMgPSB7fQogICAgICBwY29sbF9saXN0ID0gc3RhdHNbJ3NhbXBsZSddCiAgICAgIGlmIHBjb2xsX2xpc3Q6CiAgICAgICAgYXR0cnNbJ2xhYmVsJ10gPSBmb3JtYXRfc2FtcGxlKHBjb2xsX2xpc3QsIDEpCiAgICAgICAgYXR0cnNbJ2xhYmVsdG9vbHRpcCddID0gZm9ybWF0X3NhbXBsZShwY29sbF9saXN0LCAxMCkKICAgICAgZWxzZToKICAgICAgICBhdHRyc1snbGFiZWwnXSA9ICc/JwogICAgICBlZGdlX2RpY3RbcGNvbGxfaWRdID0gYXR0cnMKCiAgICBzZWxmLl91cGRhdGVfZ3JhcGgoZWRnZV9kaWN0PWVkZ2VfZGljdCkKCiAgZGVmIF9nZW5lcmF0ZV9ncmFwaF91cGRhdGVfZGljdHMoc2VsZik6CiAgICAiIiJHZW5lcmF0ZSB1cGRhdGVzIHNwZWNpZmljIHRvIGludGVyYWN0aXZlIHBpcGVsaW5lLgoKICAgIFJldHVybnM6CiAgICAgIHZlcnRleF9kaWN0OiAoRGljdFtzdHIsIERpY3Rbc3RyLCBzdHJdXSkgbWFwcyB2ZXJ0ZXggbmFtZSB0byBhdHRyaWJ1dGVzCiAgICAgIGVkZ2VfZGljdDogKERpY3Rbc3RyLCBEaWN0W3N0ciwgc3RyXV0pIG1hcHMgdmVydGV4IG5hbWUgdG8gYXR0cmlidXRlcwogICAgIiIiCiAgICB0cmFuc2Zvcm1fZGljdCA9IHt9ICAjIG1hcHMgUFRyYW5zZm9ybSBJRHMgdG8gcHJvcGVydGllcwogICAgcGNvbGxfZGljdCA9IHt9ICAjIG1hcHMgUENvbGxlY3Rpb24gSURzIHRvIHByb3BlcnRpZXMKCiAgICBmb3IgdHJhbnNmb3JtX2lkLCB0cmFuc2Zvcm1fcHJvdG8gaW4gc2VsZi5fdG9wX2xldmVsX3RyYW5zZm9ybXMoKToKICAgICAgdHJhbnNmb3JtX2RpY3RbdHJhbnNmb3JtX3Byb3RvLnVuaXF1ZV9uYW1lXSA9IHsKICAgICAgICAgICdyZXF1aXJlZCc6IHRyYW5zZm9ybV9pZCBpbiBzZWxmLl9yZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIH0KCiAgICAgIGZvciBwY29sbF9pZCBpbiB0cmFuc2Zvcm1fcHJvdG8ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICBwY29sbF9kaWN0W3Bjb2xsX2lkXSA9IHsKICAgICAgICAgICAgJ2NhY2hlZCc6IHBjb2xsX2lkIGluIHNlbGYuX2NhY2hlZF9wY29sbGVjdGlvbnMsCiAgICAgICAgICAgICdyZWZlcmVuY2VkJzogcGNvbGxfaWQgaW4gc2VsZi5fcmVmZXJlbmNlZF9wY29sbGVjdGlvbnMKICAgICAgICB9CgogICAgZGVmIHZlcnRleF9wcm9wZXJ0aWVzX3RvX2F0dHJpYnV0ZXModmVydGV4KToKICAgICAgIiIiQ29udmVydHMgUENvbGxlY3Rpb24gcHJvcGVydGllcyB0byBET1QgdmVydGV4IGF0dHJpYnV0ZXMuIiIiCiAgICAgIGF0dHJzID0ge30KICAgICAgaWYgJ2xlYWYnIGluIHZlcnRleDoKICAgICAgICBhdHRyc1snc3R5bGUnXSA9ICdpbnZpcycKICAgICAgZWxpZiB2ZXJ0ZXguZ2V0KCdyZXF1aXJlZCcpOgogICAgICAgIGF0dHJzWydjb2xvciddID0gJ2JsdWUnCiAgICAgICAgYXR0cnNbJ2ZvbnRjb2xvciddID0gJ2JsdWUnCiAgICAgIGVsc2U6CiAgICAgICAgYXR0cnNbJ2NvbG9yJ10gPSAnZ3JleScKICAgICAgcmV0dXJuIGF0dHJzCgogICAgZGVmIGVkZ2VfcHJvcGVydGllc190b19hdHRyaWJ1dGVzKGVkZ2UpOgogICAgICAiIiJDb252ZXJ0cyBQVHJhbnNmb3JtIHByb3BlcnRpZXMgdG8gRE9UIGVkZ2UgYXR0cmlidXRlcy4iIiIKICAgICAgYXR0cnMgPSB7fQogICAgICBpZiBlZGdlLmdldCgnY2FjaGVkJyk6CiAgICAgICAgYXR0cnNbJ2NvbG9yJ10gPSAncmVkJwogICAgICBlbGlmIGVkZ2UuZ2V0KCdyZWZlcmVuY2VkJyk6CiAgICAgICAgYXR0cnNbJ2NvbG9yJ10gPSAnYmxhY2snCiAgICAgIGVsc2U6CiAgICAgICAgYXR0cnNbJ2NvbG9yJ10gPSAnZ3JleScKICAgICAgcmV0dXJuIGF0dHJzCgogICAgdmVydGV4X2RpY3QgPSB7fSAgIyBtYXBzIHZlcnRleCBuYW1lcyB0byBhdHRyaWJ1dGVzCiAgICBlZGdlX2RpY3QgPSB7fSAgIyBtYXBzIGVkZ2UgbmFtZXMgdG8gYXR0cmlidXRlcwoKICAgIGZvciB0cmFuc2Zvcm1fbmFtZSwgdHJhbnNmb3JtX3Byb3BlcnRpZXMgaW4gdHJhbnNmb3JtX2RpY3QuaXRlbXMoKToKICAgICAgdmVydGV4X2RpY3RbdHJhbnNmb3JtX25hbWVdID0gdmVydGV4X3Byb3BlcnRpZXNfdG9fYXR0cmlidXRlcygKICAgICAgICAgIHRyYW5zZm9ybV9wcm9wZXJ0aWVzKQoKICAgIGZvciBwY29sbF9pZCwgcGNvbGxfcHJvcGVydGllcyBpbiBwY29sbF9kaWN0Lml0ZW1zKCk6CiAgICAgIGVkZ2VfZGljdFtwY29sbF9pZF0gPSBlZGdlX3Byb3BlcnRpZXNfdG9fYXR0cmlidXRlcyhwY29sbF9wcm9wZXJ0aWVzKQoKICAgIHJldHVybiB2ZXJ0ZXhfZGljdCwgZWRnZV9kaWN0CpR9lCiMCG5pY2Vfc3RylGpWMQEASyJLKoeUjA1mb3JtYXRfc2FtcGxllGpWMQEASy1LM4eUjCFJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGguX19pbml0X1+UalYxAQBLOEtWh5SMMUludGVyYWN0aXZlUGlwZWxpbmVHcmFwaC51cGRhdGVfcGNvbGxlY3Rpb25fc3RhdHOUalYxAQBLWEtrh5SMNUludGVyYWN0aXZlUGlwZWxpbmVHcmFwaC5fZ2VuZXJhdGVfZ3JhcGhfdXBkYXRlX2RpY3RzlGpWMQEAS21Lo4eUjBhJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGiUal0xAQBLNkujh5R1fZQojAhuaWNlX3N0cpRqhwMAAIwNZm9ybWF0X3NhbXBsZZRqhwMAAIwYSW50ZXJhY3RpdmVQaXBlbGluZUdyYXBolGqHAwAAjDFJbnRlcmFjdGl2ZVBpcGVsaW5lR3JhcGgudXBkYXRlX3Bjb2xsZWN0aW9uX3N0YXRzlGqHAwAAdYxCYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LmludGVyYWN0aXZlX3BpcGVsaW5lX2dyYXBolHSUjDthcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkucGNvbGxfdmlzdWFsaXphdGlvbpQoWKkyAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1vZHVsZSB2aXN1YWxpemVzIFBDb2xsZWN0aW9uIGRhdGEuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCk9ubHkgd29ya3Mgd2l0aCBQeXRob24gMy41Ky4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYmFzZTY0CmltcG9ydCBsb2dnaW5nCmZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQoKZnJvbSBwYW5kYXMuaW8uanNvbiBpbXBvcnQganNvbl9ub3JtYWxpemUKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUgaW1wb3J0IGludGVyYWN0aXZlX2Vudmlyb25tZW50IGFzIGllCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZSBpbXBvcnQgcGlwZWxpbmVfaW5zdHJ1bWVudCBhcyBpbnN0cgoKdHJ5OgogIGltcG9ydCBqc29ucyAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgZnJvbSBJUHl0aG9uIGltcG9ydCBnZXRfaXB5dGhvbiAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgZnJvbSBJUHl0aG9uLmNvcmUuZGlzcGxheSBpbXBvcnQgSFRNTCAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgZnJvbSBJUHl0aG9uLmNvcmUuZGlzcGxheSBpbXBvcnQgSmF2YXNjcmlwdCAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgZnJvbSBJUHl0aG9uLmNvcmUuZGlzcGxheSBpbXBvcnQgZGlzcGxheSAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgZnJvbSBJUHl0aG9uLmNvcmUuZGlzcGxheSBpbXBvcnQgZGlzcGxheV9qYXZhc2NyaXB0ICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKICBmcm9tIElQeXRob24uY29yZS5kaXNwbGF5IGltcG9ydCB1cGRhdGVfZGlzcGxheSAgIyBweWxpbnQ6IGRpc2FibGU9aW1wb3J0LWVycm9yCiAgZnJvbSBmYWNldHNfb3ZlcnZpZXcuZ2VuZXJpY19mZWF0dXJlX3N0YXRpc3RpY3NfZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmljRmVhdHVyZVN0YXRpc3RpY3NHZW5lcmF0b3IgICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgogIGZyb20gdGltZWxvb3AgaW1wb3J0IFRpbWVsb29wICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKCiAgaWYgZ2V0X2lweXRob24oKToKICAgIF9wY29sbF92aXN1YWxpemF0aW9uX3JlYWR5ID0gVHJ1ZQogIGVsc2U6CiAgICBfcGNvbGxfdmlzdWFsaXphdGlvbl9yZWFkeSA9IEZhbHNlCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBfcGNvbGxfdmlzdWFsaXphdGlvbl9yZWFkeSA9IEZhbHNlCgojIDEtZCB0eXBlcyB0aGF0IG5lZWQgYWRkaXRpb25hbCBub3JtYWxpemF0aW9uIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBEYXRhRnJhbWUuCl9vbmVfZGltZW5zaW9uX3R5cGVzID0gKGludCwgZmxvYXQsIHN0ciwgYm9vbCwgbGlzdCwgdHVwbGUpCgpfRElWRV9TQ1JJUFRfVEVNUExBVEUgPSAiIiIKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3tkaXNwbGF5X2lkfSIpLmRhdGEgPSB7anNvbnN0cn07IiIiCl9ESVZFX0hUTUxfVEVNUExBVEUgPSAiIiIKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3dlYmNvbXBvbmVudHNqcy8xLjMuMy93ZWJjb21wb25lbnRzLWxpdGUuanMiPjwvc2NyaXB0PgogICAgICAgICAgICA8bGluayByZWw9ImltcG9ydCIgaHJlZj0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1BBSVItY29kZS9mYWNldHMvMS4wLjAvZmFjZXRzLWRpc3QvZmFjZXRzLWp1cHl0ZXIuaHRtbCI+CiAgICAgICAgICAgIDxmYWNldHMtZGl2ZSBzcHJpdGUtaW1hZ2Utd2lkdGg9IntzcHJpdGVfc2l6ZX0iIHNwcml0ZS1pbWFnZS1oZWlnaHQ9IntzcHJpdGVfc2l6ZX0iIGlkPSJ7ZGlzcGxheV9pZH0iIGhlaWdodD0iNjAwIj48L2ZhY2V0cy1kaXZlPgogICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN7ZGlzcGxheV9pZH0iKS5kYXRhID0ge2pzb25zdHJ9OwogICAgICAgICAgICA8L3NjcmlwdD4iIiIKX09WRVJWSUVXX1NDUklQVF9URU1QTEFURSA9ICIiIgogICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN7ZGlzcGxheV9pZH0iKS5wcm90b0lucHV0ID0gIntwcm90b3N0cn0iOwogICAgICAgICAgICAgICIiIgpfT1ZFUlZJRVdfSFRNTF9URU1QTEFURSA9ICIiIgogICAgICAgICAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvd2ViY29tcG9uZW50c2pzLzEuMy4zL3dlYmNvbXBvbmVudHMtbGl0ZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgICAgIDxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vUEFJUi1jb2RlL2ZhY2V0cy8xLjAuMC9mYWNldHMtZGlzdC9mYWNldHMtanVweXRlci5odG1sIj4KICAgICAgICAgICAgPGZhY2V0cy1vdmVydmlldyBpZD0ie2Rpc3BsYXlfaWR9Ij48L2ZhY2V0cy1vdmVydmlldz4KICAgICAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIje2Rpc3BsYXlfaWR9IikucHJvdG9JbnB1dCA9ICJ7cHJvdG9zdHJ9IjsKICAgICAgICAgICAgPC9zY3JpcHQ+IiIiCl9EQVRBRlJBTUVfUEFHSU5BVElPTl9URU1QTEFURSA9ICIiIgogICAgICAgICAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMi4yLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5kYXRhdGFibGVzLm5ldC8xLjEwLjIwL2pzL2pxdWVyeS5kYXRhVGFibGVzLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uZGF0YXRhYmxlcy5uZXQvMS4xMC4yMC9jc3MvanF1ZXJ5LmRhdGFUYWJsZXMubWluLmNzcyI+CiAgICAgICAgICAgIHtkYXRhZnJhbWVfaHRtbH0KICAgICAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeSgKICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkge3sKICAgICAgICAgICAgICAgICAgJCgiI3t0YWJsZV9pZH0iKS5EYXRhVGFibGUoKTsKICAgICAgICAgICAgICAgIH19KTsKICAgICAgICAgICAgPC9zY3JpcHQ+IiIiCgoKZGVmIHZpc3VhbGl6ZShwY29sbCwgZHluYW1pY19wbG90dGluZ19pbnRlcnZhbD1Ob25lKToKICAiIiJWaXN1YWxpemVzIHRoZSBkYXRhIG9mIGEgZ2l2ZW4gUENvbGxlY3Rpb24uIE9wdGlvbmFsbHkgZW5hYmxlcyBkeW5hbWljCiAgcGxvdHRpbmcgd2l0aCBpbnRlcnZhbCBpbiBzZWNvbmRzIGlmIHRoZSBQQ29sbGVjdGlvbiBpcyBiZWluZyBwcm9kdWNlZCBieSBhCiAgcnVubmluZyBwaXBlbGluZSBvciB0aGUgcGlwZWxpbmUgaXMgc3RyZWFtaW5nIGluZGVmaW5pdGVseS4gVGhlIGZ1bmN0aW9uCiAgYWx3YXlzIHJldHVybnMgaW1tZWRpYXRlbHkgYW5kIGlzIGFzeW5jaHJvbm91cyB3aGVuIGR5bmFtaWMgcGxvdHRpbmcgaXMgb24uCgogIElmIGR5bmFtaWMgcGxvdHRpbmcgZW5hYmxlZCwgdGhlIHZpc3VhbGl6YXRpb24gaXMgdXBkYXRlZCBjb250aW51b3VzbHkgdW50aWwKICB0aGUgcGlwZWxpbmUgcHJvZHVjaW5nIHRoZSBQQ29sbGVjdGlvbiBpcyBpbiBhbiBlbmQgc3RhdGUuIFRoZSB2aXN1YWxpemF0aW9uCiAgd291bGQgYmUgYW5jaG9yZWQgdG8gdGhlIG5vdGVib29rIGNlbGwgb3V0cHV0IGFyZWEuIFRoZSBmdW5jdGlvbgogIGFzeW5jaHJvbm91c2x5IHJldHVybnMgYSBoYW5kbGUgdG8gdGhlIHZpc3VhbGl6YXRpb24gam9iIGltbWVkaWF0ZWx5LiBUaGUgdXNlcgogIGNvdWxkIG1hbnVhbGx5IGRvOjoKCiAgICAjIEluIG9uZSBub3RlYm9vayBjZWxsLCBlbmFibGUgZHluYW1pYyBwbG90dGluZyBldmVyeSAxIHNlY29uZDoKICAgIGhhbmRsZSA9IHZpc3VhbGl6ZShwY29sbCwgZHluYW1pY19wbG90dGluZ19pbnRlcnZhbD0xKQogICAgIyBWaXN1YWxpemF0aW9uIGFuY2hvcmVkIHRvIHRoZSBjZWxsJ3Mgb3V0cHV0IGFyZWEuCiAgICAjIEluIGEgZGlmZmVyZW50IGNlbGw6CiAgICBoYW5kbGUuc3RvcCgpCiAgICAjIFdpbGwgc3RvcCB0aGUgZHluYW1pYyBwbG90dGluZyBvZiB0aGUgYWJvdmUgdmlzdWFsaXphdGlvbiBtYW51YWxseS4KICAgICMgT3RoZXJ3aXNlLCBkeW5hbWljIHBsb3R0aW5nIGVuZHMgd2hlbiBwaXBlbGluZSBpcyBub3QgcnVubmluZyBhbnltb3JlLgoKICBJZiBkeW5hbWljX3Bsb3R0aW5nIGlzIG5vdCBlbmFibGVkIChieSBkZWZhdWx0KSwgTm9uZSBpcyByZXR1cm5lZC4KCiAgVGhlIGZ1bmN0aW9uIGlzIGV4cGVyaW1lbnRhbC4gRm9yIGludGVybmFsIHVzZSBvbmx5OyBubwogIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiAgIiIiCiAgaWYgbm90IF9wY29sbF92aXN1YWxpemF0aW9uX3JlYWR5OgogICAgcmV0dXJuIE5vbmUKICBwdiA9IFBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbihwY29sbCkKICBpZiBpZS5jdXJyZW50X2VudigpLmlzX2luX25vdGVib29rOgogICAgcHYuZGlzcGxheV9mYWNldHMoKQogIGVsc2U6CiAgICBwdi5kaXNwbGF5X3BsYWluX3RleHQoKQogICAgIyBXZSBkb24ndCB3YW50IHRvIGRvIGR5bmFtaWMgcGxvdHRpbmcgaWYgdGhlcmUgaXMgbm8gbm90ZWJvb2sgZnJvbnRlbmQuCiAgICByZXR1cm4gTm9uZQoKICBpZiBkeW5hbWljX3Bsb3R0aW5nX2ludGVydmFsOgogICAgIyBEaXNhYmxlcyB0aGUgdmVyYm9zZSBsb2dnaW5nIGZyb20gdGltZWxvb3AuCiAgICBsb2dnaW5nLmdldExvZ2dlcigndGltZWxvb3AnKS5kaXNhYmxlZCA9IFRydWUKICAgIHRsID0gVGltZWxvb3AoKQoKICAgIGRlZiBkeW5hbWljX3Bsb3R0aW5nKHBjb2xsLCBwdiwgdGwpOgogICAgICBAdGwuam9iKGludGVydmFsPXRpbWVkZWx0YShzZWNvbmRzPWR5bmFtaWNfcGxvdHRpbmdfaW50ZXJ2YWwpKQogICAgICBkZWYgY29udGludW91c191cGRhdGVfZGlzcGxheSgpOiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlCiAgICAgICAgIyBBbHdheXMgY3JlYXRlcyBhIG5ldyBQQ29sbFZpc3VhbGl6YXRpb24gaW5zdGFuY2Ugd2hlbiB0aGUKICAgICAgICAjIFBDb2xsZWN0aW9uIG1hdGVyaWFsaXphdGlvbiBpcyBiZWluZyB1cGRhdGVkIGFuZCBkeW5hbWljCiAgICAgICAgIyBwbG90dGluZyBpcyBpbi1wcm9jZXNzLgogICAgICAgIHVwZGF0ZWRfcHYgPSBQQ29sbGVjdGlvblZpc3VhbGl6YXRpb24ocGNvbGwpCiAgICAgICAgdXBkYXRlZF9wdi5kaXNwbGF5X2ZhY2V0cyh1cGRhdGluZ19wdj1wdikKICAgICAgICBpZiBpZS5jdXJyZW50X2VudigpLmlzX3Rlcm1pbmF0ZWQocGNvbGwucGlwZWxpbmUpOgogICAgICAgICAgdHJ5OgogICAgICAgICAgICB0bC5zdG9wKCkKICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CiAgICAgICAgICAgICMgVGhlIGpvYiBjYW4gb25seSBiZSBzdG9wcGVkIG9uY2UuIElnbm9yZSBleGNlc3NpdmUgc3RvcHMuCiAgICAgICAgICAgIHBhc3MKCiAgICAgIHRsLnN0YXJ0KCkKICAgICAgcmV0dXJuIHRsCgogICAgcmV0dXJuIGR5bmFtaWNfcGxvdHRpbmcocGNvbGwsIHB2LCB0bCkKICByZXR1cm4gTm9uZQoKCmNsYXNzIFBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbihvYmplY3QpOgogICIiIkEgdmlzdWFsaXphdGlvbiBvZiBhIFBDb2xsZWN0aW9uLgoKICBUaGUgY2xhc3MgcmVsaWVzIG9uIGNyZWF0aW5nIGEgUGlwZWxpbmVJbnN0cnVtZW50IHcvbyBhY3R1YWwgaW5zdHJ1bWVudCB0bwogIGFjY2VzcyBjdXJyZW50IGludGVyYWN0aXZlIGVudmlyb25tZW50IGZvciBtYXRlcmlhbGl6ZWQgUENvbGxlY3Rpb24gZGF0YSBhdAogIHRoZSBtb21lbnQgb2Ygc2VsZiBpbnN0YW50aWF0aW9uIHRocm91Z2ggY2FjaGUuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBjb2xsKToKICAgIGFzc2VydCBfcGNvbGxfdmlzdWFsaXphdGlvbl9yZWFkeSwgKAogICAgICAgICdEZXBlbmRlbmNpZXMgZm9yIFBDb2xsZWN0aW9uIHZpc3VhbGl6YXRpb24gYXJlIG5vdCBhdmFpbGFibGUuIFBsZWFzZSAnCiAgICAgICAgJ3VzZSBgcGlwIGluc3RhbGwgYXBhY2hlLWJlYW1baW50ZXJhY3RpdmVdYCB0byBpbnN0YWxsIG5lY2Vzc2FyeSAnCiAgICAgICAgJ2RlcGVuZGVuY2llcyBhbmQgbWFrZSBzdXJlIHRoYXQgeW91IGFyZSBleGVjdXRpbmcgY29kZSBpbiBhbiAnCiAgICAgICAgJ2ludGVyYWN0aXZlIGVudmlyb25tZW50IHN1Y2ggYXMgYSBKdXB5dGVyIG5vdGVib29rLicpCiAgICBhc3NlcnQgaXNpbnN0YW5jZSgKICAgICAgICBwY29sbCwKICAgICAgICBwdmFsdWUuUENvbGxlY3Rpb24pLCAoJ3Bjb2xsIHNob3VsZCBiZSBhcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24nKQogICAgc2VsZi5fcGNvbGwgPSBwY29sbAogICAgIyBUaGlzIGFsbG93cyB1cyB0byBhY2Nlc3MgY2FjaGUga2V5IGFuZCBvdGhlciBtZXRhIGRhdGEgYWJvdXQgdGhlIHBpcGVsaW5lCiAgICAjIHdoZXRoZXIgaXQncyB0aGUgcGlwZWxpbmUgZGVmaW5lZCBpbiB1c2VyIGNvZGUgb3IgYSBjb3B5IG9mIHRoYXQgcGlwZWxpbmUuCiAgICAjIFRodXMsIHRoaXMgbW9kdWxlIGRvZXNuJ3QgbmVlZCBhbnkgb3RoZXIgdXNlciBpbnB1dCBidXQgdGhlIFBDb2xsZWN0aW9uCiAgICAjIHZhcmlhYmxlIHRvIGJlIHZpc3VhbGl6ZWQuIEl0IHRoZW4gYXV0b21hdGljYWxseSBmaWd1cmVzIG91dCB0aGUgcGlwZWxpbmUKICAgICMgZGVmaW5pdGlvbiwgbWF0ZXJpYWxpemVkIGRhdGEgYW5kIHRoZSBwaXBlbGluZSByZXN1bHQgZm9yIHRoZSBleGVjdXRpb24KICAgICMgZXZlbiBpZiB0aGUgdXNlciBuZXZlciBhc3NpZ25lZCBvciB3YWl0ZWQgdGhlIHJlc3VsdCBleHBsaWNpdGx5LgogICAgIyBXaXRoIG9ubHkgdGhlIGNvbnN0cnVjdG9yIG9mIFBpcGVsaW5lSW5zdHJ1bWVudCwgYW55IGludGVyYWN0aXZpdHkgcmVsYXRlZAogICAgIyBwcmUtcHJvY2VzcyBvciBpbnN0cnVtZW50IGlzIG5vdCB0cmlnZ2VyZWQgZm9yIHBlcmZvcm1hbmNlIGNvbmNlcm5zLgogICAgc2VsZi5fcGluID0gaW5zdHIuUGlwZWxpbmVJbnN0cnVtZW50KHBjb2xsLnBpcGVsaW5lKQogICAgc2VsZi5fY2FjaGVfa2V5ID0gc2VsZi5fcGluLmNhY2hlX2tleShzZWxmLl9wY29sbCkKICAgIHNlbGYuX2RpdmVfZGlzcGxheV9pZCA9ICdmYWNldHNfZGl2ZV97fV97fScuZm9ybWF0KAogICAgICAgIHNlbGYuX2NhY2hlX2tleSwgaWQoc2VsZikpCiAgICBzZWxmLl9vdmVydmlld19kaXNwbGF5X2lkID0gJ2ZhY2V0c19vdmVydmlld197fV97fScuZm9ybWF0KAogICAgICAgIHNlbGYuX2NhY2hlX2tleSwgaWQoc2VsZikpCiAgICBzZWxmLl9kZl9kaXNwbGF5X2lkID0gJ2RmX3t9X3t9Jy5mb3JtYXQoc2VsZi5fY2FjaGVfa2V5LCBpZChzZWxmKSkKCiAgZGVmIGRpc3BsYXlfcGxhaW5fdGV4dChzZWxmKToKICAgICIiIkRpc3BsYXlzIGEgaGVhZCBzYW1wbGUgb2YgdGhlIG5vcm1hbGl6ZWQgUENvbGxlY3Rpb24gZGF0YS4KCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiB0aGUgaXB5dGhvbiBrZXJuZWwgaXMgbm90IGNvbm5lY3RlZCB0byBhCiAgICBub3RlYm9vayBmcm9udGVuZCBzdWNoIGFzIHdoZW4gcnVubmluZyBpcHl0aG9uIGluIHRlcm1pbmFsIG9yIGluIHVuaXQgdGVzdHMuCiAgICBJdCdzIGEgdmlzdWFsaXphdGlvbiBpbiB0ZXJtaW5hbC1saWtlIFVJLCBub3QgYSBmdW5jdGlvbiB0byByZXRyaWV2ZSBkYXRhCiAgICBmb3IgcHJvZ3JhbW1hdGljYWxseSB1c2FnZXMuCiAgICAiIiIKICAgICMgRG91YmxlIGNoZWNrIGlmIHRoZSBkZXBlbmRlbmN5IGlzIHJlYWR5IGluIGNhc2Ugc29tZW9uZSBtaXN0YWtlbmx5IHVzZXMKICAgICMgdGhlIGZ1bmN0aW9uLgogICAgaWYgX3Bjb2xsX3Zpc3VhbGl6YXRpb25fcmVhZHk6CiAgICAgIGRhdGEgPSBzZWxmLl90b19kYXRhZnJhbWUoKQogICAgICAjIERpc3BsYXlzIGEgZGF0YS10YWJsZSB3aXRoIGF0IG1vc3QgMjUgZW50cmllcyBmcm9tIHRoZSBoZWFkLgogICAgICBkYXRhX3NhbXBsZSA9IGRhdGEuaGVhZCgyNSkKICAgICAgZGlzcGxheShkYXRhX3NhbXBsZSkKCiAgZGVmIGRpc3BsYXlfZmFjZXRzKHNlbGYsIHVwZGF0aW5nX3B2PU5vbmUpOgogICAgIiIiRGlzcGxheXMgdGhlIHZpc3VhbGl6YXRpb24gdGhyb3VnaCBJUHl0aG9uLgoKICAgIEFyZ3M6CiAgICAgIHVwZGF0aW5nX3B2OiBBIFBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbiBvYmplY3QuIFdoZW4gcHJvdmlkZWQsIHRoZQogICAgICAgIGRpc3BsYXlfaWQgb2YgZWFjaCB2aXN1YWxpemF0aW9uIHBhcnQgd2lsbCBpbmhlcml0IGZyb20gdGhlIGluaXRpYWwKICAgICAgICBkaXNwbGF5IG9mIHVwZGF0aW5nX3B2IGFuZCBvbmx5IHVwZGF0ZSB0aGF0IHZpc3VhbGl6YXRpb24gd2ViIGVsZW1lbnQKICAgICAgICBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ldyBvbmVzLgoKICAgIFRoZSB2aXN1YWxpemF0aW9uIGhhcyAzIHBhcnRzOiBmYWNldHMtZGl2ZSwgZmFjZXRzLW92ZXJ2aWV3IGFuZCBwYWdpbmF0ZWQKICAgIGRhdGEgdGFibGUuIEVhY2ggcGFydCBpcyBhc3NpZ25lZCBhbiBhdXRvLWdlbmVyYXRlZCB1bmlxdWUgZGlzcGxheSBpZAogICAgKHRoZSB1bmlxdWVuZXNzIGlzIGd1YXJhbnRlZWQgdGhyb3VnaG91dCB0aGUgbGlmZXNwYW4gb2YgdGhlIFBDb2xsZWN0aW9uCiAgICB2YXJpYWJsZSkuCiAgICAiIiIKICAgICMgRW5zdXJlcyB0aGF0IGRpdmUsIG92ZXJ2aWV3IGFuZCB0YWJsZSByZW5kZXIgdGhlIHNhbWUgZGF0YSBiZWNhdXNlIHRoZQogICAgIyBtYXRlcmlhbGl6ZWQgUENvbGxlY3Rpb24gZGF0YSBtaWdodCBiZWluZyB1cGRhdGVkIGNvbnRpbnVvdXNseS4KICAgIGRhdGEgPSBzZWxmLl90b19kYXRhZnJhbWUoKQogICAgaWYgdXBkYXRpbmdfcHY6CiAgICAgIHNlbGYuX2Rpc3BsYXlfZGl2ZShkYXRhLCB1cGRhdGluZ19wdi5fZGl2ZV9kaXNwbGF5X2lkKQogICAgICBzZWxmLl9kaXNwbGF5X292ZXJ2aWV3KGRhdGEsIHVwZGF0aW5nX3B2Ll9vdmVydmlld19kaXNwbGF5X2lkKQogICAgICBzZWxmLl9kaXNwbGF5X2RhdGFmcmFtZShkYXRhLCB1cGRhdGluZ19wdi5fZGZfZGlzcGxheV9pZCkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2Rpc3BsYXlfZGl2ZShkYXRhKQogICAgICBzZWxmLl9kaXNwbGF5X292ZXJ2aWV3KGRhdGEpCiAgICAgIHNlbGYuX2Rpc3BsYXlfZGF0YWZyYW1lKGRhdGEpCgogIGRlZiBfZGlzcGxheV9kaXZlKHNlbGYsIGRhdGEsIHVwZGF0ZT1Ob25lKToKICAgIHNwcml0ZV9zaXplID0gMzIgaWYgbGVuKGRhdGEuaW5kZXgpID4gNTAwMDAgZWxzZSA2NAogICAganNvbnN0ciA9IGRhdGEudG9fanNvbihvcmllbnQ9J3JlY29yZHMnKQogICAgaWYgdXBkYXRlOgogICAgICBzY3JpcHQgPSBfRElWRV9TQ1JJUFRfVEVNUExBVEUuZm9ybWF0KGRpc3BsYXlfaWQ9dXBkYXRlLCBqc29uc3RyPWpzb25zdHIpCiAgICAgIGRpc3BsYXlfamF2YXNjcmlwdChKYXZhc2NyaXB0KHNjcmlwdCkpCiAgICBlbHNlOgogICAgICBodG1sID0gX0RJVkVfSFRNTF9URU1QTEFURS5mb3JtYXQoCiAgICAgICAgICBkaXNwbGF5X2lkPXNlbGYuX2RpdmVfZGlzcGxheV9pZCwKICAgICAgICAgIGpzb25zdHI9anNvbnN0ciwKICAgICAgICAgIHNwcml0ZV9zaXplPXNwcml0ZV9zaXplKQogICAgICBkaXNwbGF5KEhUTUwoaHRtbCkpCgogIGRlZiBfZGlzcGxheV9vdmVydmlldyhzZWxmLCBkYXRhLCB1cGRhdGU9Tm9uZSk6CiAgICBnZnNnID0gR2VuZXJpY0ZlYXR1cmVTdGF0aXN0aWNzR2VuZXJhdG9yKCkKICAgIHByb3RvID0gZ2ZzZy5Qcm90b0Zyb21EYXRhRnJhbWVzKFt7J25hbWUnOiAnZGF0YScsICd0YWJsZSc6IGRhdGF9XSkKICAgIHByb3Rvc3RyID0gYmFzZTY0LmI2NGVuY29kZShwcm90by5TZXJpYWxpemVUb1N0cmluZygpKS5kZWNvZGUoJ3V0Zi04JykKICAgIGlmIHVwZGF0ZToKICAgICAgc2NyaXB0ID0gX09WRVJWSUVXX1NDUklQVF9URU1QTEFURS5mb3JtYXQoCiAgICAgICAgICBkaXNwbGF5X2lkPXVwZGF0ZSwgcHJvdG9zdHI9cHJvdG9zdHIpCiAgICAgIGRpc3BsYXlfamF2YXNjcmlwdChKYXZhc2NyaXB0KHNjcmlwdCkpCiAgICBlbHNlOgogICAgICBodG1sID0gX09WRVJWSUVXX0hUTUxfVEVNUExBVEUuZm9ybWF0KAogICAgICAgICAgZGlzcGxheV9pZD1zZWxmLl9vdmVydmlld19kaXNwbGF5X2lkLCBwcm90b3N0cj1wcm90b3N0cikKICAgICAgZGlzcGxheShIVE1MKGh0bWwpKQoKICBkZWYgX2Rpc3BsYXlfZGF0YWZyYW1lKHNlbGYsIGRhdGEsIHVwZGF0ZT1Ob25lKToKICAgIGlmIHVwZGF0ZToKICAgICAgdGFibGVfaWQgPSAndGFibGVfe30nLmZvcm1hdCh1cGRhdGUpCiAgICAgIGh0bWwgPSBfREFUQUZSQU1FX1BBR0lOQVRJT05fVEVNUExBVEUuZm9ybWF0KAogICAgICAgICAgZGF0YWZyYW1lX2h0bWw9ZGF0YS50b19odG1sKG5vdGVib29rPVRydWUsIHRhYmxlX2lkPXRhYmxlX2lkKSwKICAgICAgICAgIHRhYmxlX2lkPXRhYmxlX2lkKQogICAgICB1cGRhdGVfZGlzcGxheShIVE1MKGh0bWwpLCBkaXNwbGF5X2lkPXVwZGF0ZSkKICAgIGVsc2U6CiAgICAgIHRhYmxlX2lkID0gJ3RhYmxlX3t9Jy5mb3JtYXQoc2VsZi5fZGZfZGlzcGxheV9pZCkKICAgICAgaHRtbCA9IF9EQVRBRlJBTUVfUEFHSU5BVElPTl9URU1QTEFURS5mb3JtYXQoCiAgICAgICAgICBkYXRhZnJhbWVfaHRtbD1kYXRhLnRvX2h0bWwobm90ZWJvb2s9VHJ1ZSwgdGFibGVfaWQ9dGFibGVfaWQpLAogICAgICAgICAgdGFibGVfaWQ9dGFibGVfaWQpCiAgICAgIGRpc3BsYXkoSFRNTChodG1sKSwgZGlzcGxheV9pZD1zZWxmLl9kZl9kaXNwbGF5X2lkKQoKICBkZWYgX3RvX2VsZW1lbnRfbGlzdChzZWxmKToKICAgIHBjb2xsX2xpc3QgPSBbXQogICAgaWYgaWUuY3VycmVudF9lbnYoKS5jYWNoZV9tYW5hZ2VyKCkuZXhpc3RzKCdmdWxsJywgc2VsZi5fY2FjaGVfa2V5KToKICAgICAgcGNvbGxfbGlzdCwgXyA9IGllLmN1cnJlbnRfZW52KCkuY2FjaGVfbWFuYWdlcigpLnJlYWQoJ2Z1bGwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZV9rZXkpCiAgICByZXR1cm4gcGNvbGxfbGlzdAoKICBkZWYgX3RvX2RhdGFmcmFtZShzZWxmKToKICAgIG5vcm1hbGl6ZWRfbGlzdCA9IFtdCiAgICAjIENvbHVtbiBuYW1lIGZvciBfb25lX2RpbWVuc2lvbl90eXBlcyBpZiBwcmVzZW50cy4KICAgIG5vcm1hbGl6ZWRfY29sdW1uID0gc3RyKHNlbGYuX3Bjb2xsKQogICAgIyBOb3JtYWxpemF0aW9uIG5lZWRzIHRvIGJlIGRvbmUgZm9yIGVhY2ggZWxlbWVudCBiZWNhdXNlIHRoZXkgbWlnaHQgYmUgb2YKICAgICMgZGlmZmVyZW50IHR5cGVzLiBUaGUgY2hlY2sgaXMgb25seSBkb25lIG9uIHRoZSByb290IGxldmVsLCBwYW5kYXMganNvbgogICAgIyBub3JtYWxpemF0aW9uIEkvTyB3b3VsZCB0YWtlIGNhcmUgb2YgdGhlIG5lc3RlZCBsZXZlbHMuCiAgICBmb3IgZWwgaW4gc2VsZi5fdG9fZWxlbWVudF9saXN0KCk6CiAgICAgIGlmIHNlbGYuX2lzX29uZV9kaW1lbnNpb25fdHlwZShlbCk6CiAgICAgICAgIyBNYWtlcyBzdWNoIGRhdGEgc3RydWN0dXJlZC4KICAgICAgICBub3JtYWxpemVkX2xpc3QuYXBwZW5kKHtub3JtYWxpemVkX2NvbHVtbjogZWx9KQogICAgICBlbHNlOgogICAgICAgIG5vcm1hbGl6ZWRfbGlzdC5hcHBlbmQoanNvbnMubG9hZChqc29ucy5kdW1wKGVsKSkpCiAgICAjIENyZWF0ZXMgYSBkYXRhZnJhbWUgdGhhdCBzdHIoKSAxLWQgaXRlcmFibGUgZWxlbWVudHMgYWZ0ZXIKICAgICMgbm9ybWFsaXphdGlvbiBzbyB0aGF0IGZhY2V0c19vdmVydmlldyBjYW4gdHJlYXQgc3VjaCBkYXRhIGFzIGNhdGVnb3JpY2FsLgogICAgcmV0dXJuIGpzb25fbm9ybWFsaXplKG5vcm1hbGl6ZWRfbGlzdCkuYXBwbHltYXAoCiAgICAgICAgbGFtYmRhIHg6IHN0cih4KSBpZiB0eXBlKHgpIGluIChsaXN0LCB0dXBsZSkgZWxzZSB4KQoKICBkZWYgX2lzX29uZV9kaW1lbnNpb25fdHlwZShzZWxmLCB2YWwpOgogICAgcmV0dXJuIHR5cGUodmFsKSBpbiBfb25lX2RpbWVuc2lvbl90eXBlcwqUfZQojBp2aXN1YWxpemUuZHluYW1pY19wbG90dGluZ5RqVjEBAEuCS5KHlIwJdmlzdWFsaXpllGpWMQEAS1pLlYeUjCFQQ29sbGVjdGlvblZpc3VhbGl6YXRpb24uX19pbml0X1+UalYxAQBLn0u3h5SMK1BDb2xsZWN0aW9uVmlzdWFsaXphdGlvbi5kaXNwbGF5X3BsYWluX3RleHSUalYxAQBLuUvHh5SMJ1BDb2xsZWN0aW9uVmlzdWFsaXphdGlvbi5kaXNwbGF5X2ZhY2V0c5RqVjEBAEvJS+GHlIwmUENvbGxlY3Rpb25WaXN1YWxpemF0aW9uLl9kaXNwbGF5X2RpdmWUalYxAQBL40vuh5SMKlBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbi5fZGlzcGxheV9vdmVydmlld5RqVjEBAEvwS/uHlIwrUENvbGxlY3Rpb25WaXN1YWxpemF0aW9uLl9kaXNwbGF5X2RhdGFmcmFtZZRqVjEBAEv9TQkBh5SMKVBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbi5fdG9fZWxlbWVudF9saXN0lGpWMQEATQsBTRABh5SMJlBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbi5fdG9fZGF0YWZyYW1llGpWMQEATRIBTSIBh5SML1BDb2xsZWN0aW9uVmlzdWFsaXphdGlvbi5faXNfb25lX2RpbWVuc2lvbl90eXBllGpWMQEATSQBTSUBh5SMGFBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbpRqXTEBAEuYTSUBh5R1fZQojAl2aXN1YWxpemWUalsDAACMGFBDb2xsZWN0aW9uVmlzdWFsaXphdGlvbpRqWwMAAIwrUENvbGxlY3Rpb25WaXN1YWxpemF0aW9uLmRpc3BsYXlfcGxhaW5fdGV4dJRqWwMAAIwnUENvbGxlY3Rpb25WaXN1YWxpemF0aW9uLmRpc3BsYXlfZmFjZXRzlGpbAwAAdYw7YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBjb2xsX3Zpc3VhbGl6YXRpb26UdJSMNmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaJQoWOUsAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkZvciBnZW5lcmF0aW5nIEJlYW0gcGlwZWxpbmUgZ3JhcGggaW4gRE9UIHJlcHJlc2VudGF0aW9uLgoKVGhpcyBtb2R1bGUgaXMgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBsb2dnaW5nCmltcG9ydCB0aHJlYWRpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IERlZmF1bHREaWN0CmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYXRvcgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdApmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCgppbXBvcnQgcHlkb3QKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZSBpbXBvcnQgaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQgYXMgaWUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBwaXBlbGluZV9pbnN0cnVtZW50IGFzIGluc3QKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmRpc3BsYXkgaW1wb3J0IHBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyCgojIHB5bGludCBkb2VzIG5vdCB1bmRlcnN0YW5kIGNvbnRleHQKIyBweWxpbnQ6ZGlzYWJsZT1kYW5nZXJvdXMtZGVmYXVsdC12YWx1ZQoKCmNsYXNzIFBpcGVsaW5lR3JhcGgob2JqZWN0KToKICAiIiJDcmVhdGVzIGEgRE9UIHJlcHJlc2VudGluZyB0aGUgcGlwZWxpbmUuIFRocmVhZC1zYWZlLiBSdW5uZXIgYWdub3N0aWMuIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBwaXBlbGluZSwgICMgdHlwZTogVW5pb25bYmVhbV9ydW5uZXJfYXBpX3BiMi5QaXBlbGluZSwgYmVhbS5QaXBlbGluZV0KICAgICAgICAgICAgICAgZGVmYXVsdF92ZXJ0ZXhfYXR0cnM9eydzaGFwZSc6ICdib3gnfSwKICAgICAgICAgICAgICAgZGVmYXVsdF9lZGdlX2F0dHJzPU5vbmUsCiAgICAgICAgICAgICAgIHJlbmRlcl9vcHRpb249Tm9uZSk6CiAgICAiIiJDb25zdHJ1Y3RvciBvZiBQaXBlbGluZUdyYXBoLgoKICAgIEV4YW1wbGVzOgogICAgICBncmFwaCA9IHBpcGVsaW5lX2dyYXBoLlBpcGVsaW5lR3JhcGgocGlwZWxpbmVfcHJvdG8pCiAgICAgIGdyYXBoLmdldF9kb3QoKQoKICAgICAgb3IKCiAgICAgIGdyYXBoID0gcGlwZWxpbmVfZ3JhcGguUGlwZWxpbmVHcmFwaChwaXBlbGluZSkKICAgICAgZ3JhcGguZ2V0X2RvdCgpCgogICAgQXJnczoKICAgICAgcGlwZWxpbmU6IChQaXBlbGluZSBwcm90bykgb3IgKFBpcGVsaW5lKSBwaXBlbGluZSB0byBiZSByZW5kZXJlZC4KICAgICAgZGVmYXVsdF92ZXJ0ZXhfYXR0cnM6IChEaWN0W3N0ciwgc3RyXSkgYSBkaWN0IG9mIGRlZmF1bHQgdmVydGV4IGF0dHJpYnV0ZXMKICAgICAgZGVmYXVsdF9lZGdlX2F0dHJzOiAoRGljdFtzdHIsIHN0cl0pIGEgZGljdCBvZiBkZWZhdWx0IGVkZ2UgYXR0cmlidXRlcwogICAgICByZW5kZXJfb3B0aW9uOiAoc3RyKSB0aGlzIHBhcmFtZXRlciBkZWNpZGVzIGhvdyB0aGUgcGlwZWxpbmUgZ3JhcGggaXMKICAgICAgICAgIHJlbmRlcmVkLiBTZWUgZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlciBmb3IgYXZhaWxhYmxlIG9wdGlvbnMuCiAgICAiIiIKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAgICBzZWxmLl9ncmFwaCA9IE5vbmUgICMgdHlwZTogcHlkb3QuRG90CiAgICBzZWxmLl9waXBlbGluZV9pbnN0cnVtZW50ID0gTm9uZQogICAgaWYgaXNpbnN0YW5jZShwaXBlbGluZSwgYmVhbS5QaXBlbGluZSk6CiAgICAgIHNlbGYuX3BpcGVsaW5lX2luc3RydW1lbnQgPSBpbnN0LlBpcGVsaW5lSW5zdHJ1bWVudChwaXBlbGluZSkKICAgICAgIyBUaGUgcHJlLXByb2Nlc3MgbGlua3MgdXNlciBwaXBlbGluZSB0byBydW5uZXIgcGlwZWxpbmUgdGhyb3VnaCBhbmFseXNpcwogICAgICAjIGJ1dCB3aXRob3V0IG11dGF0aW5nIHJ1bm5lciBwaXBlbGluZS4KICAgICAgc2VsZi5fcGlwZWxpbmVfaW5zdHJ1bWVudC5wcmVwcm9jZXNzKCkKCiAgICBpZiBpc2luc3RhbmNlKHBpcGVsaW5lLCBiZWFtX3J1bm5lcl9hcGlfcGIyLlBpcGVsaW5lKToKICAgICAgc2VsZi5fcGlwZWxpbmVfcHJvdG8gPSBwaXBlbGluZQogICAgZWxpZiBpc2luc3RhbmNlKHBpcGVsaW5lLCBiZWFtLlBpcGVsaW5lKToKICAgICAgc2VsZi5fcGlwZWxpbmVfcHJvdG8gPSBwaXBlbGluZS50b19ydW5uZXJfYXBpKCkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdwaXBlbGluZSBzaG91bGQgZWl0aGVyIGJlIGEgJXMgb3IgJXMsIHdoaWxlICVzIGlzIGdpdmVuJyAlCiAgICAgICAgICAoYmVhbV9ydW5uZXJfYXBpX3BiMi5QaXBlbGluZSwgYmVhbS5QaXBlbGluZSwgdHlwZShwaXBlbGluZSkpKQoKICAgICMgQSBkaWN0IGZyb20gUENvbGxlY3Rpb24gSUQgdG8gYSBsaXN0IG9mIGl0cyBjb25zdW1pbmcgVHJhbnNmb3JtIElEcwogICAgc2VsZi5fY29uc3VtZXJzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoCiAgICAgICAgbGlzdCkgICMgdHlwZTogRGVmYXVsdERpY3Rbc3RyLCBMaXN0W3N0cl1dCiAgICAjIEEgZGljdCBmcm9tIFBDb2xsZWN0aW9uIElEIHRvIGl0cyBwcm9kdWNpbmcgVHJhbnNmb3JtIElECiAgICBzZWxmLl9wcm9kdWNlcnMgPSB7fSAgIyB0eXBlOiBEaWN0W3N0ciwgc3RyXQoKICAgIGZvciB0cmFuc2Zvcm1faWQsIHRyYW5zZm9ybV9wcm90byBpbiBzZWxmLl90b3BfbGV2ZWxfdHJhbnNmb3JtcygpOgogICAgICBmb3IgcGNvbGxfaWQgaW4gdHJhbnNmb3JtX3Byb3RvLmlucHV0cy52YWx1ZXMoKToKICAgICAgICBzZWxmLl9jb25zdW1lcnNbcGNvbGxfaWRdLmFwcGVuZCh0cmFuc2Zvcm1faWQpCiAgICAgIGZvciBwY29sbF9pZCBpbiB0cmFuc2Zvcm1fcHJvdG8ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICBzZWxmLl9wcm9kdWNlcnNbcGNvbGxfaWRdID0gdHJhbnNmb3JtX2lkCgogICAgZGVmYXVsdF92ZXJ0ZXhfYXR0cnMgPSBkZWZhdWx0X3ZlcnRleF9hdHRycyBvciB7J3NoYXBlJzogJ2JveCd9CiAgICBpZiAnY29sb3InIG5vdCBpbiBkZWZhdWx0X3ZlcnRleF9hdHRyczoKICAgICAgZGVmYXVsdF92ZXJ0ZXhfYXR0cnNbJ2NvbG9yJ10gPSAnYmx1ZScKICAgIGlmICdmb250Y29sb3InIG5vdCBpbiBkZWZhdWx0X3ZlcnRleF9hdHRyczoKICAgICAgZGVmYXVsdF92ZXJ0ZXhfYXR0cnNbJ2ZvbnRjb2xvciddID0gJ2JsdWUnCgogICAgdmVydGV4X2RpY3QsIGVkZ2VfZGljdCA9IHNlbGYuX2dlbmVyYXRlX2dyYXBoX2RpY3RzKCkKICAgIHNlbGYuX2NvbnN0cnVjdF9ncmFwaCgKICAgICAgICB2ZXJ0ZXhfZGljdCwgZWRnZV9kaWN0LCBkZWZhdWx0X3ZlcnRleF9hdHRycywgZGVmYXVsdF9lZGdlX2F0dHJzKQoKICAgIHNlbGYuX3JlbmRlcmVyID0gcGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIuZ2V0X3JlbmRlcmVyKHJlbmRlcl9vcHRpb24pCgogIGRlZiBnZXRfZG90KHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBzdHIKICAgIHJldHVybiBzZWxmLl9nZXRfZ3JhcGgoKS50b19zdHJpbmcoKQoKICBkZWYgZGlzcGxheV9ncmFwaChzZWxmKToKICAgIHJlbmRlcmVkX2dyYXBoID0gc2VsZi5fcmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBoKHNlbGYpCiAgICBpZiBpZS5jdXJyZW50X2VudigpLmlzX2luX25vdGVib29rOgogICAgICB0cnk6CiAgICAgICAgZnJvbSBJUHl0aG9uLmNvcmUgaW1wb3J0IGRpc3BsYXkKICAgICAgICBkaXNwbGF5LmRpc3BsYXkoZGlzcGxheS5IVE1MKHJlbmRlcmVkX2dyYXBoKSkKICAgICAgZXhjZXB0IEltcG9ydEVycm9yOiAgIyBVbmxpa2VseSB0byBoYXBwZW4gd2hlbiBpc19pbl9ub3RlYm9vay4KICAgICAgICBsb2dnaW5nLndhcm5pbmcoCiAgICAgICAgICAgICdGYWlsZWQgdG8gaW1wb3J0IElQeXRob24gZGlzcGxheSBtb2R1bGUgd2hlbiBjdXJyZW50ICcKICAgICAgICAgICAgJ2Vudmlyb25tZW50IGlzIGluIGEgbm90ZWJvb2suIENhbm5vdCBkaXNwbGF5IHRoZSAnCiAgICAgICAgICAgICdwaXBlbGluZSBncmFwaC4nKQoKICBkZWYgX3RvcF9sZXZlbF90cmFuc2Zvcm1zKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBJdGVyYXRvcltUdXBsZVtzdHIsIGJlYW1fcnVubmVyX2FwaV9wYjIuUFRyYW5zZm9ybV1dCgogICAgIiIiWWllbGRzIGFsbCB0b3AgbGV2ZWwgUFRyYW5zZm9ybXMgKHN1YnRyYW5zZm9ybXMgb2YgdGhlIHJvb3QgUFRyYW5zZm9ybSkuCgogICAgWWllbGRzOiAoc3RyLCBQVHJhbnNmb3JtIHByb3RvKSBJRCwgcHJvdG8gcGFpciBvZiB0b3AgbGV2ZWwgUFRyYW5zZm9ybXMuCiAgICAiIiIKICAgIHRyYW5zZm9ybXMgPSBzZWxmLl9waXBlbGluZV9wcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXMKICAgIGZvciByb290X3RyYW5zZm9ybV9pZCBpbiBzZWxmLl9waXBlbGluZV9wcm90by5yb290X3RyYW5zZm9ybV9pZHM6CiAgICAgIHJvb3RfdHJhbnNmb3JtX3Byb3RvID0gdHJhbnNmb3Jtc1tyb290X3RyYW5zZm9ybV9pZF0KICAgICAgZm9yIHRvcF9sZXZlbF90cmFuc2Zvcm1faWQgaW4gcm9vdF90cmFuc2Zvcm1fcHJvdG8uc3VidHJhbnNmb3JtczoKICAgICAgICB0b3BfbGV2ZWxfdHJhbnNmb3JtX3Byb3RvID0gdHJhbnNmb3Jtc1t0b3BfbGV2ZWxfdHJhbnNmb3JtX2lkXQogICAgICAgIHlpZWxkIHRvcF9sZXZlbF90cmFuc2Zvcm1faWQsIHRvcF9sZXZlbF90cmFuc2Zvcm1fcHJvdG8KCiAgZGVmIF9kZWNvcmF0ZShzZWxmLCB2YWx1ZSk6CiAgICAiIiJEZWNvcmF0ZXMgbGFiZWwtaXNoIHZhbHVlcyB1c2VkIGZvciByZW5kZXJpbmcgaW4gZG90IGxhbmd1YWdlLgoKICAgIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBnaXZlbiBzdHIgdmFsdWUgZm9yIGRvdCBsYW5ndWFnZS4gQWxsCiAgICBQVHJhbnNmb3JtIHVuaXF1ZSBuYW1lcyBhcmUgZXNjYXBlZCBpbXBsaWNpdGx5IGluIHRoaXMgbW9kdWxlIHdoZW4gYnVpbGRpbmcKICAgIGRvdCByZXByZXNlbnRhdGlvbi4gT3RoZXJ3aXNlLCBzcGVjaWFsIGNoYXJhY3RlcnMgd2lsbCBicmVhayB0aGUgZ3JhcGgKICAgIHJlbmRlcmVkIG9yIGNhdXNlIHJ1bnRpbWUgZXJyb3JzLgogICAgIiIiCiAgICAjIFJlcGxhY2UgcHkgc3RyIGxpdGVyYWwgYFxcYCB3aGljaCBpcyBgXGAgaW4gZG90IHdpdGggcHkgc3RyIGxpdGVyYWwKICAgICMgYFxcXFxgIHdoaWNoIGlzIGBcXGAgaW4gZG90IHNvIHRoYXQgZG90IGBcXGAgY2FuIGJlIHJlbmRlcmVkIGFzIGBcYC4gVGhlbgogICAgIyByZXBsYWNlIGAiYCB3aXRoIGBcXCJgIHNvIHRoYXQgdGhlIGRvdCBnZW5lcmF0ZWQgd2lsbCBiZSBgXCJgIGFuZCBiZQogICAgIyByZW5kZXJlZCBhcyBgImAuCiAgICByZXR1cm4gJyJ7fSInLmZvcm1hdCh2YWx1ZS5yZXBsYWNlKCdcXCcsICdcXFxcJykucmVwbGFjZSgnIicsICdcXCInKSkKCiAgZGVmIF9nZW5lcmF0ZV9ncmFwaF9kaWN0cyhzZWxmKToKICAgICIiIkZyb20gcGlwZWxpbmVfcHJvdG8gYW5kIG90aGVyIGluZm8sIGdlbmVyYXRlIHRoZSBncmFwaC4KCiAgICBSZXR1cm5zOgogICAgICB2ZXJ0ZXhfZGljdDogKERpY3Rbc3RyLCBEaWN0W3N0ciwgc3RyXV0pIHZlcnRleCBtYXBwZWQgdG8gYXR0cmlidXRlcy4KICAgICAgZWRnZV9kaWN0OiAoRGljdFsoc3RyLCBzdHIpLCBEaWN0W3N0ciwgc3RyXV0pIHZlcnRleCBwYWlyIG1hcHBlZCB0byB0aGUKICAgICAgICAgIGVkZ2UncyBhdHRyaWJ1dGUuCiAgICAiIiIKICAgIHRyYW5zZm9ybXMgPSBzZWxmLl9waXBlbGluZV9wcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXMKCiAgICAjIEEgZGljdCBmcm9tIHZlcnRleCBuYW1lIChpLmUuIFBDb2xsZWN0aW9uIElEKSB0byBpdHMgYXR0cmlidXRlcy4KICAgIHZlcnRleF9kaWN0ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoZGljdCkKICAgICMgQSBkaWN0IGZyb20gdmVydGV4IG5hbWUgcGFpcnMgZGVmaW5pbmcgdGhlIGVkZ2UgKGkuZS4gYSBwYWlyIG9mIFBUcmFuc2Zvcm0KICAgICMgSURzIGRlZmluaW5nIHRoZSBQQ29sbGVjdGlvbikgdG8gaXRzIGF0dHJpYnV0ZXMuCiAgICBlZGdlX2RpY3QgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChkaWN0KQoKICAgIHNlbGYuX2VkZ2VfdG9fdmVydGV4X3BhaXJzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKCiAgICBmb3IgXywgdHJhbnNmb3JtIGluIHNlbGYuX3RvcF9sZXZlbF90cmFuc2Zvcm1zKCk6CiAgICAgIHZlcnRleF9kaWN0W3NlbGYuX2RlY29yYXRlKHRyYW5zZm9ybS51bmlxdWVfbmFtZSldID0ge30KCiAgICAgIGZvciBwY29sbF9pZCBpbiB0cmFuc2Zvcm0ub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICBwY29sbF9ub2RlID0gTm9uZQogICAgICAgIGlmIHNlbGYuX3BpcGVsaW5lX2luc3RydW1lbnQ6CiAgICAgICAgICBwY29sbF9ub2RlID0gc2VsZi5fcGlwZWxpbmVfaW5zdHJ1bWVudC5jYWNoZWFibGVfdmFyX2J5X3Bjb2xsX2lkKAogICAgICAgICAgICAgIHBjb2xsX2lkKQogICAgICAgICMgSWYgbm8gUGlwZWxpbmVJbnN0cnVtZW50IGlzIGF2YWlsYWJsZSBvciB0aGUgUENvbGxlY3Rpb24gaXMgbm90CiAgICAgICAgIyB3YXRjaGVkLgogICAgICAgIGlmIG5vdCBwY29sbF9ub2RlOgogICAgICAgICAgcGNvbGxfbm9kZSA9ICdwY29sbCVzJyAlIChoYXNoKHBjb2xsX2lkKSAlIDEwMDAwKQogICAgICAgICAgdmVydGV4X2RpY3RbcGNvbGxfbm9kZV0gPSB7CiAgICAgICAgICAgICAgJ3NoYXBlJzogJ2NpcmNsZScsCiAgICAgICAgICAgICAgJ2xhYmVsJzogJycsICAjIFRoZSBwY29sbCBub2RlIGhhcyBubyBuYW1lLgogICAgICAgICAgfQogICAgICAgICMgVGhlcmUgaXMgUGlwZWxpbmVJbnN0cnVtZW50IGFuZCB0aGUgUENvbGxlY3Rpb24gaXMgd2F0Y2hlZCB3aXRoIGFuCiAgICAgICAgIyBhc3NpZ25lZCB2YXJpYWJsZS4KICAgICAgICBlbHNlOgogICAgICAgICAgdmVydGV4X2RpY3RbcGNvbGxfbm9kZV0gPSB7J3NoYXBlJzogJ2NpcmNsZSd9CiAgICAgICAgaWYgcGNvbGxfaWQgbm90IGluIHNlbGYuX2NvbnN1bWVyczoKICAgICAgICAgIHNlbGYuX2VkZ2VfdG9fdmVydGV4X3BhaXJzW3Bjb2xsX2lkXS5hcHBlbmQoCiAgICAgICAgICAgICAgKHNlbGYuX2RlY29yYXRlKHRyYW5zZm9ybS51bmlxdWVfbmFtZSksIHBjb2xsX25vZGUpKQogICAgICAgICAgZWRnZV9kaWN0WyhzZWxmLl9kZWNvcmF0ZSh0cmFuc2Zvcm0udW5pcXVlX25hbWUpLCBwY29sbF9ub2RlKV0gPSB7fQogICAgICAgIGVsc2U6CiAgICAgICAgICBmb3IgY29uc3VtZXIgaW4gc2VsZi5fY29uc3VtZXJzW3Bjb2xsX2lkXToKICAgICAgICAgICAgcHJvZHVjZXJfbmFtZSA9IHNlbGYuX2RlY29yYXRlKHRyYW5zZm9ybS51bmlxdWVfbmFtZSkKICAgICAgICAgICAgY29uc3VtZXJfbmFtZSA9IHNlbGYuX2RlY29yYXRlKHRyYW5zZm9ybXNbY29uc3VtZXJdLnVuaXF1ZV9uYW1lKQogICAgICAgICAgICBzZWxmLl9lZGdlX3RvX3ZlcnRleF9wYWlyc1twY29sbF9pZF0uYXBwZW5kKAogICAgICAgICAgICAgICAgKHByb2R1Y2VyX25hbWUsIHBjb2xsX25vZGUpKQogICAgICAgICAgICBlZGdlX2RpY3RbKHByb2R1Y2VyX25hbWUsIHBjb2xsX25vZGUpXSA9IHt9CiAgICAgICAgICAgIHNlbGYuX2VkZ2VfdG9fdmVydGV4X3BhaXJzW3Bjb2xsX2lkXS5hcHBlbmQoCiAgICAgICAgICAgICAgICAocGNvbGxfbm9kZSwgY29uc3VtZXJfbmFtZSkpCiAgICAgICAgICAgIGVkZ2VfZGljdFsocGNvbGxfbm9kZSwgY29uc3VtZXJfbmFtZSldID0ge30KCiAgICByZXR1cm4gdmVydGV4X2RpY3QsIGVkZ2VfZGljdAoKICBkZWYgX2dldF9ncmFwaChzZWxmKToKICAgICIiIlJldHVybnMgcHlkb3QuRG90IG9iamVjdCBmb3IgdGhlIHBpcGVsaW5lIGdyYXBoLgoKICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGF2b2lkIGFjY2Vzc2luZyB0aGUgZ3JhcGggd2hpbGUgaXQgaXMKICAgIHVwZGF0ZWQuIE5vIG9uZSBleGNlcHQgZm9yIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBhY2Nlc3NpbmcgX2dyYXBoIGRpcmVjdGx5LgoKICAgIFJldHVybnM6CiAgICAgIChweWRvdC5Eb3QpCiAgICAiIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYuX2dyYXBoCgogIGRlZiBfY29uc3RydWN0X2dyYXBoKAogICAgICBzZWxmLCB2ZXJ0ZXhfZGljdCwgZWRnZV9kaWN0LCBkZWZhdWx0X3ZlcnRleF9hdHRycywgZGVmYXVsdF9lZGdlX2F0dHJzKToKICAgICIiIkNvbnN0cnVjdHMgdGhlIHB5ZG90LkRvdCBvYmplY3QgZm9yIHRoZSBwaXBlbGluZSBncmFwaC4KCiAgICBBcmdzOgogICAgICB2ZXJ0ZXhfZGljdDogKERpY3Rbc3RyLCBEaWN0W3N0ciwgc3RyXV0pIG1hcHMgdmVydGV4IG5hbWVzIHRvIGF0dHJpYnV0ZXMKICAgICAgZWRnZV9kaWN0OiAoRGljdFsoc3RyLCBzdHIpLCBEaWN0W3N0ciwgc3RyXV0pIG1hcHMgdmVydGV4IG5hbWUgcGFpcnMgdG8KICAgICAgICAgIGF0dHJpYnV0ZXMKICAgICAgZGVmYXVsdF92ZXJ0ZXhfYXR0cnM6IChEaWN0W3N0ciwgc3RyXSkgYSBkaWN0IG9mIGF0dHJpYnV0ZXMKICAgICAgZGVmYXVsdF9lZGdlX2F0dHJzOiAoRGljdFtzdHIsIHN0cl0pIGEgZGljdCBvZiBhdHRyaWJ1dGVzCiAgICAiIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5fZ3JhcGggPSBweWRvdC5Eb3QoKQoKICAgICAgaWYgZGVmYXVsdF92ZXJ0ZXhfYXR0cnM6CiAgICAgICAgc2VsZi5fZ3JhcGguc2V0X25vZGVfZGVmYXVsdHMoKipkZWZhdWx0X3ZlcnRleF9hdHRycykKICAgICAgaWYgZGVmYXVsdF9lZGdlX2F0dHJzOgogICAgICAgIHNlbGYuX2dyYXBoLnNldF9lZGdlX2RlZmF1bHRzKCoqZGVmYXVsdF9lZGdlX2F0dHJzKQoKICAgICAgc2VsZi5fdmVydGV4X3JlZnMgPSB7fSAgIyBNYXBzIHZlcnRleCBuYW1lIHRvIHB5ZG90Lk5vZGUKICAgICAgc2VsZi5fZWRnZV9yZWZzID0ge30gICMgTWFwcyB2ZXJ0ZXggbmFtZSBwYWlycyB0byBweWRvdC5FZGdlCgogICAgICBmb3IgdmVydGV4LCB2ZXJ0ZXhfYXR0cnMgaW4gdmVydGV4X2RpY3QuaXRlbXMoKToKICAgICAgICB2ZXJ0ZXhfcmVmID0gcHlkb3QuTm9kZSh2ZXJ0ZXgsICoqdmVydGV4X2F0dHJzKQogICAgICAgIHNlbGYuX3ZlcnRleF9yZWZzW3ZlcnRleF0gPSB2ZXJ0ZXhfcmVmCiAgICAgICAgc2VsZi5fZ3JhcGguYWRkX25vZGUodmVydGV4X3JlZikKCiAgICAgIGZvciBlZGdlLCBlZGdlX2F0dHJzIGluIGVkZ2VfZGljdC5pdGVtcygpOgogICAgICAgIHZlcnRleF9zcmMgPSBzZWxmLl92ZXJ0ZXhfcmVmc1tlZGdlWzBdXQogICAgICAgIHZlcnRleF9kc3QgPSBzZWxmLl92ZXJ0ZXhfcmVmc1tlZGdlWzFdXQoKICAgICAgICBlZGdlX3JlZiA9IHB5ZG90LkVkZ2UodmVydGV4X3NyYywgdmVydGV4X2RzdCwgKiplZGdlX2F0dHJzKQogICAgICAgIHNlbGYuX2VkZ2VfcmVmc1tlZGdlXSA9IGVkZ2VfcmVmCiAgICAgICAgc2VsZi5fZ3JhcGguYWRkX2VkZ2UoZWRnZV9yZWYpCgogIGRlZiBfdXBkYXRlX2dyYXBoKHNlbGYsIHZlcnRleF9kaWN0PU5vbmUsIGVkZ2VfZGljdD1Ob25lKToKICAgICIiIlVwZGF0ZXMgdGhlIHB5ZG90LkRvdCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gYXR0cmlidXRlIHVwZGF0ZQoKICAgIEFyZ3M6CiAgICAgIHZlcnRleF9kaWN0OiAoRGljdFtzdHIsIERpY3Rbc3RyLCBzdHJdXSkgbWFwcyB2ZXJ0ZXggbmFtZXMgdG8gYXR0cmlidXRlcwogICAgICBlZGdlX2RpY3Q6IFRoaXMgc2hvdWxkIGJlCiAgICAgICAgICBFaXRoZXIgKERpY3Rbc3RyLCBEaWN0W3N0ciwgc3RyXV0pIHdoaWNoIG1hcHMgZWRnZSBuYW1lcyB0byBhdHRyaWJ1dGVzCiAgICAgICAgICBPciAoRGljdFsoc3RyLCBzdHIpLCBEaWN0W3N0ciwgc3RyXV0pIHdoaWNoIG1hcHMgdmVydGV4IHBhaXJzIHRvIGVkZ2UKICAgICAgICAgIGF0dHJpYnV0ZXMKICAgICIiIgogICAgZGVmIHNldF9hdHRycyhyZWYsIGF0dHJzKToKICAgICAgZm9yIGF0dHJfbmFtZSwgYXR0cl92YWwgaW4gYXR0cnMuaXRlbXMoKToKICAgICAgICByZWYuc2V0KGF0dHJfbmFtZSwgYXR0cl92YWwpCgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICBpZiB2ZXJ0ZXhfZGljdDoKICAgICAgICBmb3IgdmVydGV4LCB2ZXJ0ZXhfYXR0cnMgaW4gdmVydGV4X2RpY3QuaXRlbXMoKToKICAgICAgICAgIHNldF9hdHRycyhzZWxmLl92ZXJ0ZXhfcmVmc1t2ZXJ0ZXhdLCB2ZXJ0ZXhfYXR0cnMpCiAgICAgIGlmIGVkZ2VfZGljdDoKICAgICAgICBmb3IgZWRnZSwgZWRnZV9hdHRycyBpbiBlZGdlX2RpY3QuaXRlbXMoKToKICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWRnZSwgdHVwbGUpOgogICAgICAgICAgICBzZXRfYXR0cnMoc2VsZi5fZWRnZV9yZWZzW2VkZ2VdLCBlZGdlX2F0dHJzKQogICAgICAgICAgZWxzZToKICAgICAgICAgICAgZm9yIHZlcnRleF9wYWlyIGluIHNlbGYuX2VkZ2VfdG9fdmVydGV4X3BhaXJzW2VkZ2VdOgogICAgICAgICAgICAgIHNldF9hdHRycyhzZWxmLl9lZGdlX3JlZnNbdmVydGV4X3BhaXJdLCBlZGdlX2F0dHJzKQqUfZQojBZQaXBlbGluZUdyYXBoLl9faW5pdF9flGpWMQEASzZLdYeUjBVQaXBlbGluZUdyYXBoLmdldF9kb3SUalYxAQBLd0t5h5SMG1BpcGVsaW5lR3JhcGguZGlzcGxheV9ncmFwaJRqVjEBAEt7S4WHlIwjUGlwZWxpbmVHcmFwaC5fdG9wX2xldmVsX3RyYW5zZm9ybXOUalYxAQBLh0uTh5SMF1BpcGVsaW5lR3JhcGguX2RlY29yYXRllGpWMQEAS5VLoYeUjCNQaXBlbGluZUdyYXBoLl9nZW5lcmF0ZV9ncmFwaF9kaWN0c5RqVjEBAEujS9iHlIwYUGlwZWxpbmVHcmFwaC5fZ2V0X2dyYXBolGpWMQEAS9pL5IeUjB5QaXBlbGluZUdyYXBoLl9jb25zdHJ1Y3RfZ3JhcGiUalYxAQBL5k0HAYeUjBtQaXBlbGluZUdyYXBoLl91cGRhdGVfZ3JhcGiUalYxAQBNCQFNIQGHlIwNUGlwZWxpbmVHcmFwaJRqXTEBAEszTSEBh5R1fZQojA1QaXBlbGluZUdyYXBolGpyAwAAjBVQaXBlbGluZUdyYXBoLmdldF9kb3SUanIDAACMG1BpcGVsaW5lR3JhcGguZGlzcGxheV9ncmFwaJRqcgMAAHWMNmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaJR0lIw/YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVylChYvw8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRm9yIHJlbmRlcmluZyBwaXBlbGluZSBncmFwaCBpbiBIVE1MLWNvbXBhdGlibGUgZm9ybWF0LgoKVGhpcyBtb2R1bGUgaXMgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGFiYwppbXBvcnQgb3MKaW1wb3J0IHN1YnByb2Nlc3MKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBUeXBlCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgd2l0aF9tZXRhY2xhc3MKCmZyb20gYXBhY2hlX2JlYW0udXRpbHMucGx1Z2luIGltcG9ydCBCZWFtUGx1Z2luCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5LnBpcGVsaW5lX2dyYXBoIGltcG9ydCBQaXBlbGluZUdyYXBoCgoKY2xhc3MgUGlwZWxpbmVHcmFwaFJlbmRlcmVyKHdpdGhfbWV0YWNsYXNzKGFiYy5BQkNNZXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVhbVBsdWdpbikpOiAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAiIiJBYnN0cmFjdCBjbGFzcyBmb3IgcmVuZGVyZXJzLCB3aG8gZGVjaWRlIGhvdyBwaXBlbGluZSBncmFwaHMgYXJlIHJlbmRlcmVkLgogICIiIgogIEBjbGFzc21ldGhvZAogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgb3B0aW9uKGNscyk6CiAgICAjIHR5cGU6ICgpIC0+IHN0cgoKICAgICIiIlRoZSBjb3JyZXNwb25kaW5nIHJlbmRlcmluZyBvcHRpb24gZm9yIHRoZSByZW5kZXJlci4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgZGVmIHJlbmRlcl9waXBlbGluZV9ncmFwaChzZWxmLCBwaXBlbGluZV9ncmFwaCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUdyYXBoKSAtPiBzdHIKCiAgICAiIiJSZW5kZXJzIHRoZSBwaXBlbGluZSBncmFwaCBpbiBIVE1MLWNvbXBhdGlibGUgZm9ybWF0LgoKICAgIEFyZ3M6CiAgICAgIHBpcGVsaW5lX2dyYXBoOiAocGlwZWxpbmVfZ3JhcGguUGlwZWxpbmVHcmFwaCkgdGhlIGdyYXBoIHRvIGJlIHJlbmRlcmVyZC4KCiAgICBSZXR1cm5zOgogICAgICB1bmljb2RlLCBzdHIgb3IgYnl0ZXMgdGhhdCBjYW4gYmUgZXhwcmVzc2VkIGFzIEhUTUwuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBNdXRlUmVuZGVyZXIoUGlwZWxpbmVHcmFwaFJlbmRlcmVyKToKICAiIiJVc2UgdGhpcyByZW5kZXJlciB0byBtdXRlIHRoZSBwaXBlbGluZSBkaXNwbGF5LgogICIiIgogIEBjbGFzc21ldGhvZAogIGRlZiBvcHRpb24oY2xzKToKICAgICMgdHlwZTogKCkgLT4gc3RyCiAgICByZXR1cm4gJ211dGUnCgogIGRlZiByZW5kZXJfcGlwZWxpbmVfZ3JhcGgoc2VsZiwgcGlwZWxpbmVfZ3JhcGgpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVHcmFwaCkgLT4gc3RyCiAgICByZXR1cm4gJycKCgpjbGFzcyBUZXh0UmVuZGVyZXIoUGlwZWxpbmVHcmFwaFJlbmRlcmVyKToKICAiIiJUaGlzIHJlbmRlcmVyIHNpbXBseSByZXR1cm5zIHRoZSBkb3QgcmVwcmVzZW50YXRpb24gaW4gdGV4dCBmb3JtYXQuCiAgIiIiCiAgQGNsYXNzbWV0aG9kCiAgZGVmIG9wdGlvbihjbHMpOgogICAgIyB0eXBlOiAoKSAtPiBzdHIKICAgIHJldHVybiAndGV4dCcKCiAgZGVmIHJlbmRlcl9waXBlbGluZV9ncmFwaChzZWxmLCBwaXBlbGluZV9ncmFwaCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUdyYXBoKSAtPiBzdHIKICAgIHJldHVybiBwaXBlbGluZV9ncmFwaC5nZXRfZG90KCkKCgpjbGFzcyBQeWRvdFJlbmRlcmVyKFBpcGVsaW5lR3JhcGhSZW5kZXJlcik6CiAgIiIiVGhpcyByZW5kZXJlciByZW5kZXJzIHRoZSBncmFwaCB1c2luZyBweWRvdC4KCiAgSXQgZGVwZW5kcyBvbgogICAgMS4gVGhlIHNvZnR3YXJlIEdyYXBodml6OiBodHRwczovL3d3dy5ncmFwaHZpei5vcmcvCiAgICAyLiBUaGUgcHl0aG9uIG1vZHVsZSBweWRvdDogaHR0cHM6Ly9weXBpLm9yZy9wcm9qZWN0L3B5ZG90LwogICIiIgogIEBjbGFzc21ldGhvZAogIGRlZiBvcHRpb24oY2xzKToKICAgICMgdHlwZTogKCkgLT4gc3RyCiAgICByZXR1cm4gJ2dyYXBoJwoKICBkZWYgcmVuZGVyX3BpcGVsaW5lX2dyYXBoKHNlbGYsIHBpcGVsaW5lX2dyYXBoKToKICAgICMgdHlwZTogKFBpcGVsaW5lR3JhcGgpIC0+IHN0cgogICAgcmV0dXJuIHBpcGVsaW5lX2dyYXBoLl9nZXRfZ3JhcGgoKS5jcmVhdGVfc3ZnKCkuZGVjb2RlKCJ1dGYtOCIpICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgoKZGVmIGdldF9yZW5kZXJlcihvcHRpb249Tm9uZSk6CiAgIyB0eXBlOiAoT3B0aW9uYWxbc3RyXSkgLT4gVHlwZVtQaXBlbGluZUdyYXBoUmVuZGVyZXJdCgogICIiIkdldCBhbiBpbnN0YW5jZSBvZiBQaXBlbGluZUdyYXBoUmVuZGVyZXIgZ2l2ZW4gcmVuZGVyaW5nIG9wdGlvbi4KCiAgQXJnczoKICAgIG9wdGlvbjogKHN0cikgdGhlIHJlbmRlcmluZyBvcHRpb24uCgogIFJldHVybnM6CiAgICAoUGlwZWxpbmVHcmFwaFJlbmRlcmVyKQogICIiIgogIGlmIG9wdGlvbiBpcyBOb25lOgogICAgaWYgb3MubmFtZSA9PSAnbnQnOgogICAgICBleGlzdHMgPSBzdWJwcm9jZXNzLmNhbGwoWyd3aGVyZScsICdkb3QuZXhlJ10pID09IDAKICAgIGVsc2U6CiAgICAgIGV4aXN0cyA9IHN1YnByb2Nlc3MuY2FsbChbJ3doaWNoJywgJ2RvdCddKSA9PSAwCgogICAgaWYgZXhpc3RzOgogICAgICBvcHRpb24gPSAnZ3JhcGgnCiAgICBlbHNlOgogICAgICBvcHRpb24gPSAndGV4dCcKCiAgcmVuZGVyZXIgPSBbCiAgICAgIHIgZm9yIHIgaW4gUGlwZWxpbmVHcmFwaFJlbmRlcmVyLmdldF9hbGxfc3ViY2xhc3NlcygpCiAgICAgIGlmIG9wdGlvbiA9PSByLm9wdGlvbigpCiAgXQogIGlmIGxlbihyZW5kZXJlcikgPT0gMDoKICAgIHJhaXNlIFZhbHVlRXJyb3IoKQogIGVsaWYgbGVuKHJlbmRlcmVyKSA9PSAxOgogICAgcmV0dXJuIHJlbmRlcmVyWzBdKCkKICBlbHNlOgogICAgcmFpc2UgVmFsdWVFcnJvcignRm91bmQgbW9yZSB0aGFuIG9uZSByZW5kZXJlciBmb3Igb3B0aW9uOiAlcycsIG9wdGlvbikKlH2UKIwcUGlwZWxpbmVHcmFwaFJlbmRlcmVyLm9wdGlvbpRqVjEBAEswSzeHlIwrUGlwZWxpbmVHcmFwaFJlbmRlcmVyLnJlbmRlcl9waXBlbGluZV9ncmFwaJRqVjEBAEs5S0WHlIwVUGlwZWxpbmVHcmFwaFJlbmRlcmVylGpdMQEASyxLRYeUjBNNdXRlUmVuZGVyZXIub3B0aW9ulGpWMQEAS0tLToeUjCJNdXRlUmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBolGpWMQEAS1BLUoeUjAxNdXRlUmVuZGVyZXKUal0xAQBLSEtSh5SME1RleHRSZW5kZXJlci5vcHRpb26UalYxAQBLWEtbh5SMIlRleHRSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGiUalYxAQBLXUtfh5SMDFRleHRSZW5kZXJlcpRqXTEBAEtVS1+HlIwUUHlkb3RSZW5kZXJlci5vcHRpb26UalYxAQBLaUtsh5SMI1B5ZG90UmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBolGpWMQEAS25LcIeUjA1QeWRvdFJlbmRlcmVylGpdMQEAS2JLcIeUjAxnZXRfcmVuZGVyZXKUalYxAQBLc0uSh5R1fZQojBVQaXBlbGluZUdyYXBoUmVuZGVyZXKUai8DAACMHFBpcGVsaW5lR3JhcGhSZW5kZXJlci5vcHRpb26Uai8DAACMK1BpcGVsaW5lR3JhcGhSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGiUai8DAACMDE11dGVSZW5kZXJlcpRqLwMAAIwTTXV0ZVJlbmRlcmVyLm9wdGlvbpRqLwMAAIwiTXV0ZVJlbmRlcmVyLnJlbmRlcl9waXBlbGluZV9ncmFwaJRqLwMAAIwMVGV4dFJlbmRlcmVylGovAwAAjBNUZXh0UmVuZGVyZXIub3B0aW9ulGovAwAAjCJUZXh0UmVuZGVyZXIucmVuZGVyX3BpcGVsaW5lX2dyYXBolGovAwAAjA1QeWRvdFJlbmRlcmVylGovAwAAjBRQeWRvdFJlbmRlcmVyLm9wdGlvbpRqLwMAAIwjUHlkb3RSZW5kZXJlci5yZW5kZXJfcGlwZWxpbmVfZ3JhcGiUai8DAACMDGdldF9yZW5kZXJlcpRqLwMAAHWMP2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5waXBlbGluZV9ncmFwaF9yZW5kZXJlcpR0lIwwYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtlChYYSkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiTW9kdWxlIG9mIEludGVyYWN0aXZlIEJlYW0gZmVhdHVyZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBub3RlYm9vay4KClRoZSBwdXJwb3NlIG9mIHRoZSBtb2R1bGUgaXMgdG8gcmVkdWNlIHRoZSBsZWFybmluZyBjdXJ2ZSBvZiBJbnRlcmFjdGl2ZSBCZWFtCnVzZXJzLCBwcm92aWRlIGEgc2luZ2xlIHBsYWNlIGZvciBpbXBvcnRpbmcgYW5kIGFkZCBzdWdhciBzeW50YXggZm9yIGFsbApJbnRlcmFjdGl2ZSBCZWFtIGNvbXBvbmVudHMuIEl0IGdpdmVzIHVzZXJzIGNhcGFiaWxpdHkgdG8gaW50ZXJhY3Qgd2l0aCBleGlzdGluZwplbnZpcm9ubWVudC9zZXNzaW9uL2NvbnRleHQgZm9yIEludGVyYWN0aXZlIEJlYW0gYW5kIHZpc3VhbGl6ZSBQQ29sbGVjdGlvbnMgYXMKYm91bmRlZCBkYXRhc2V0LiBJbiB0aGUgbWVhbnRpbWUsIGl0IGhpZGVzIHRoZSBpbnRlcmFjdGl2aXR5IGltcGxlbWVudGF0aW9uCmZyb20gdXNlcnMgc28gdGhhdCB1c2VycyBjYW4gZm9jdXMgb24gZGV2ZWxvcGluZyBCZWFtIHBpcGVsaW5lIHdpdGhvdXQgd29ycnlpbmcKYWJvdXQgaG93IGhpZGRlbiBzdGF0ZXMgaW4gdGhlIGludGVyYWN0aXZlIHNlc3Npb24gYXJlIG1hbmFnZWQuCgpOb3RlOiBJZiB5b3Ugd2FudCBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LCBvbmx5IGludm9rZSBpbnRlcmZhY2VzIHByb3ZpZGVkIGJ5CnRoaXMgbW9kdWxlIGluIHlvdXIgbm90ZWJvb2sgb3IgYXBwbGljYXRpb24gY29kZS4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHJlCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUgaW1wb3J0IGJhY2tncm91bmRfY2FjaGluZ19qb2IgYXMgYmNqCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZSBpbXBvcnQgaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQgYXMgaWUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBpbnRlcmFjdGl2ZV9ydW5uZXIgYXMgaXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBwaXBlbGluZV9mcmFnbWVudCBhcyBwZgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUuZGlzcGxheS5wY29sbF92aXN1YWxpemF0aW9uIGltcG9ydCB2aXN1YWxpemUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLm9wdGlvbnMgaW1wb3J0IGludGVyYWN0aXZlX29wdGlvbnMKCgpjbGFzcyBPcHRpb25zKGludGVyYWN0aXZlX29wdGlvbnMuSW50ZXJhY3RpdmVPcHRpb25zKToKICAiIiJPcHRpb25zIHRoYXQgZ3VpZGUgaG93IEludGVyYWN0aXZlIEJlYW0gd29ya3MuIiIiCiAgQHByb3BlcnR5CiAgZGVmIGVuYWJsZV9jYXB0dXJlX3JlcGxheShzZWxmKToKICAgICIiIldoZXRoZXIgcmVwbGF5YWJsZSBzb3VyY2UgZGF0YSBjYXB0dXJlIHNob3VsZCBiZSByZXBsYXllZCBmb3IgbXVsdGlwbGUKICAgIFBDb2xsZWN0aW9uIGV2YWx1YXRpb25zIGFuZCBwaXBlbGluZSBydW5zIGFzIGxvbmcgYXMgdGhlIGRhdGEgY2FwdHVyZWQgaXMKICAgIHN0aWxsIHZhbGlkLiIiIgogICAgcmV0dXJuIHNlbGYuY2FwdHVyZV9jb250cm9sLl9lbmFibGVfY2FwdHVyZV9yZXBsYXkKCiAgQGVuYWJsZV9jYXB0dXJlX3JlcGxheS5zZXR0ZXIKICBkZWYgZW5hYmxlX2NhcHR1cmVfcmVwbGF5KHNlbGYsIHZhbHVlKToKICAgICIiIlNldHMgd2hldGhlciBzb3VyY2UgZGF0YSBjYXB0dXJlIHNob3VsZCBiZSByZXBsYXllZC4gVHJ1ZSAtIEVuYWJsZXMKICAgIGNhcHR1cmUgb2YgcmVwbGF5YWJsZSBzb3VyY2UgZGF0YSBzbyB0aGF0IGZvbGxvd2luZyBQQ29sbGVjdGlvbiBldmFsdWF0aW9ucwogICAgYW5kIHBpcGVsaW5lIHJ1bnMgYWx3YXlzIHVzZSB0aGUgc2FtZSBkYXRhIGNhcHR1cmVkOyBGYWxzZSAtIERpc2FibGVzCiAgICBjYXB0dXJlIG9mIHJlcGxheWFibGUgc291cmNlIGRhdGEgc28gdGhhdCBmb2xsb3dpbmcgUENvbGxlY3Rpb24gZXZhbHVhdGlvbgogICAgYW5kIHBpcGVsaW5lIHJ1bnMgYWx3YXlzIHVzZSBuZXcgZGF0YSBmcm9tIHNvdXJjZXMuIiIiCiAgICBzZWxmLmNhcHR1cmVfY29udHJvbC5fZW5hYmxlX2NhcHR1cmVfcmVwbGF5ID0gdmFsdWUKCiAgQHByb3BlcnR5CiAgZGVmIGNhcHR1cmFibGVfc291cmNlcyhzZWxmKToKICAgICIiIkludGVyYWN0aXZlIEJlYW0gYXV0b21hdGljYWxseSBjYXB0dXJlcyBkYXRhIGZyb20gc291cmNlcyBpbiB0aGlzIHNldC4iIiIKICAgIHJldHVybiBzZWxmLmNhcHR1cmVfY29udHJvbC5fY2FwdHVyYWJsZV9zb3VyY2VzCgogIEBwcm9wZXJ0eQogIGRlZiBjYXB0dXJlX2R1cmF0aW9uKHNlbGYpOgogICAgIiIiVGhlIGRhdGEgY2FwdHVyZSBvZiBzb3VyY2VzIGVuZHMgYXMgc29vbiBhcyB0aGUgYmFja2dyb3VuZCBjYWNoaW5nIGpvYgogICAgaGFzIHJ1biBmb3IgdGhpcyBsb25nLiIiIgogICAgcmV0dXJuIHNlbGYuY2FwdHVyZV9jb250cm9sLl9jYXB0dXJlX2R1cmF0aW9uCgogIEBjYXB0dXJlX2R1cmF0aW9uLnNldHRlcgogIGRlZiBjYXB0dXJlX2R1cmF0aW9uKHNlbGYsIHZhbHVlKToKICAgICIiIlNldHMgdGhlIGNhcHR1cmUgZHVyYXRpb24gYXMgYSB0aW1lZGVsdGEuCgogICAgRXhhbXBsZTo6CgogICAgICAjIFNldHMgdGhlIGNhcHR1cmUgZHVyYXRpb24gbGltaXQgdG8gMTAgc2Vjb25kcy4KICAgICAgaW50ZXJhY3RpdmVfYmVhbS5vcHRpb25zLmNhcHR1cmVfZHVyYXRpb24gPSB0aW1lZGVsdGEoc2Vjb25kcz0xMCkKICAgICAgIyBFdmljdHMgYWxsIGNhcHR1cmVkIGRhdGEgaWYgdGhlcmUgaXMgYW55LgogICAgICBpbnRlcmFjdGl2ZV9iZWFtLmV2aWN0X2NhcHR1cmVkX2RhdGEoKQogICAgICAjIFRoZSBuZXh0IFBDb2xsZWN0aW9uIGV2YWx1YXRpb24gd2lsbCBjYXB0dXJlIGZyZXNoIGRhdGEgZnJvbSBzb3VyY2VzLAogICAgICAjIGFuZCB0aGUgZGF0YSBjYXB0dXJlZCB3aWxsIGJlIHJlcGxheWVkIHVudGlsIGFub3RoZXIgZXZpY3Rpb24uCiAgICAiIiIKICAgIHNlbGYuY2FwdHVyZV9jb250cm9sLl9jYXB0dXJlX2R1cmF0aW9uID0gdmFsdWUKCiAgIyBUT0RPKEJFQU0tODMzNSk6IGFkZCBjYXB0dXJlX3NpemUgb3B0aW9ucyB3aGVuIHRoZXkgYXJlIHN1cHBvcnRlZC4KCgojIFVzZXJzIGNhbiBzZXQgb3B0aW9ucyB0byBndWlkZSBob3cgSW50ZXJhY3RpdmUgQmVhbSB3b3Jrcy4KIyBFeGFtcGxlczoKIyBmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKIyBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUgaW1wb3J0IGludGVyYWN0aXZlX2JlYW0gYXMgaWIKIyBpYi5vcHRpb25zLmVuYWJsZV9jYXB0dXJlX3JlcGxheSA9IEZhbHNlL1RydWUKIyBpYi5vcHRpb25zLmNhcHR1cmVfZHVyYXRpb24gPSB0aW1lZGVsdGEoc2Vjb25kcz02MCkKIyBpYi5vcHRpb25zLmNhcHR1cmFibGVfc291cmNlcy5hZGQoU291cmNlQ2xhc3MpCm9wdGlvbnMgPSBPcHRpb25zKCkKCgpkZWYgd2F0Y2god2F0Y2hhYmxlKToKICAiIiJNb25pdG9ycyBhIHdhdGNoYWJsZS4KCiAgVGhpcyBhbGxvd3MgSW50ZXJhY3RpdmUgQmVhbSB0byBpbXBsaWNpdGx5IHBhc3Mgb24gdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQogIGxvY2F0aW9uIG9mIHlvdXIgcGlwZWxpbmUgZGVmaW5pdGlvbi4KCiAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBtYWlubHkgd2F0Y2hlcyBmb3IgUENvbGxlY3Rpb24gdmFyaWFibGVzIGRlZmluZWQgaW4KICB1c2VyIGNvZGUuIEEgd2F0Y2hhYmxlIGNhbiBiZSBhIGRpY3Rpb25hcnkgb2YgdmFyaWFibGUgbWV0YWRhdGEgc3VjaCBhcwogIGxvY2FscygpLCBhIHN0ciBuYW1lIG9mIGEgbW9kdWxlLCBhIG1vZHVsZSBvYmplY3Qgb3IgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcy4KICBUaGUgdmFyaWFibGUgY2FuIGNvbWUgZnJvbSBhbnkgc2NvcGUgZXZlbiBsb2NhbCB2YXJpYWJsZXMgaW4gYSBtZXRob2Qgb2YgYQogIGNsYXNzIGRlZmluZWQgaW4gYSBtb2R1bGUuCgogICAgQmVsb3cgYXJlIGFsbCB2YWxpZDo6CgogICAgICB3YXRjaChfX21haW5fXykgICMgaWYgaW1wb3J0IF9fbWFpbl9fIGlzIGFscmVhZHkgaW52b2tlZAogICAgICB3YXRjaCgnX19tYWluX18nKSAgIyBkb2VzIG5vdCByZXF1aXJlIGludm9raW5nIGltcG9ydCBfX21haW5fXyBiZWZvcmVoYW5kCiAgICAgIHdhdGNoKHNlbGYpICAjIGluc2lkZSBhIGNsYXNzCiAgICAgIHdhdGNoKFNvbWVJbnN0YW5jZSgpKSAgIyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzCiAgICAgIHdhdGNoKGxvY2FscygpKSAgIyBpbnNpZGUgYSBmdW5jdGlvbiwgd2F0Y2hpbmcgbG9jYWwgdmFyaWFibGVzIHdpdGhpbgoKICBJZiB5b3Ugd3JpdGUgYSBCZWFtIHBpcGVsaW5lIGluIHRoZSBfX21haW5fXyBtb2R1bGUgZGlyZWN0bHksIHNpbmNlIHRoZQogIF9fbWFpbl9fIG1vZHVsZSBpcyBhbHdheXMgd2F0Y2hlZCwgeW91IGRvbid0IGhhdmUgdG8gaW5zdHJ1Y3QgSW50ZXJhY3RpdmUKICBCZWFtLiBJZiB5b3VyIEJlYW0gcGlwZWxpbmUgaXMgZGVmaW5lZCBpbiBzb21lIG1vZHVsZSBvdGhlciB0aGFuIF9fbWFpbl9fLAogIHN1Y2ggYXMgaW5zaWRlIGEgY2xhc3MgZnVuY3Rpb24gb3IgYSB1bml0IHRlc3QsIHlvdSBjYW4gd2F0Y2goKSB0aGUgc2NvcGUuCgogICAgRm9yIGV4YW1wbGU6OgoKICAgICAgY2xhc3MgRm9vKG9iamVjdCkKICAgICAgICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYpOgogICAgICAgICAgd2l0aCBiZWFtLlBpcGVsaW5lKCkgYXMgcDoKICAgICAgICAgICAgaW5pdF9wY29sbCA9IHAgfCAgJ0luaXQgQ3JlYXRlJyA+PiBiZWFtLkNyZWF0ZShyYW5nZSgxMCkpCiAgICAgICAgICAgIHdhdGNoKGxvY2FscygpKQogICAgICAgICAgcmV0dXJuIGluaXRfcGNvbGwKICAgICAgaW5pdF9wY29sbCA9IEZvbygpLnJ1bl9waXBlbGluZSgpCgogICAgSW50ZXJhY3RpdmUgQmVhbSBjYWNoZXMgaW5pdF9wY29sbCBmb3IgdGhlIGZpcnN0IHJ1bi4KCiAgICBUaGVuIHlvdSBjYW4gdXNlOjoKCiAgICAgIHZpc3VhbGl6ZShpbml0X3Bjb2xsKQoKICAgIFRvIHZpc3VhbGl6ZSBkYXRhIGZyb20gaW5pdF9wY29sbCBvbmNlIHRoZSBwaXBlbGluZSBpcyBleGVjdXRlZC4KICAiIiIKICBpZS5jdXJyZW50X2VudigpLndhdGNoKHdhdGNoYWJsZSkKCgpkZWYgc2hvdygqcGNvbGxzKToKICAiIiJWaXN1YWxpemVzIGdpdmVuIFBDb2xsZWN0aW9ucyBpbiBhbiBpbnRlcmFjdGl2ZSBleHBsb3JhdG9yeSB3YXkgaWYgdXNlZAogIHdpdGhpbiBhIG5vdGVib29rLCBvciBwcmludHMgYSBoZWFkaW5nIHNhbXBsZWQgZGF0YSBpZiB1c2VkIHdpdGhpbiBhbiBpcHl0aG9uCiAgc2hlbGwuIE5vb3AgaWYgdXNlZCBpbiBhIG5vbi1pbnRlcmFjdGl2ZSBlbnZpcm9ubWVudC4KCiAgQWQgaG9jIGJ1aWxkcyBhIHBpcGVsaW5lIGZyYWdtZW50IGluY2x1ZGluZyBvbmx5IHRyYW5zZm9ybXMgdGhhdCBhcmUKICBuZWNlc3NhcnkgdG8gcHJvZHVjZSBkYXRhIGZvciBnaXZlbiBQQ29sbGVjdGlvbnMgcGNvbGxzLCBydW5zIHRoZSBwaXBlbGluZQogIGZyYWdtZW50IHRvIGNvbXB1dGUgZGF0YSBmb3IgdGhvc2UgcGNvbGxzIGFuZCB0aGVuIHZpc3VhbGl6ZXMgdGhlIGRhdGEuCgogIFRoZSBmdW5jdGlvbiBpcyBhbHdheXMgYmxvY2tpbmcuIElmIHVzZWQgd2l0aGluIGEgbm90ZWJvb2ssIHRoZSBkYXRhCiAgdmlzdWFsaXplZCBtaWdodCBiZSBkeW5hbWljYWxseSB1cGRhdGVkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBhcyBtb3JlCiAgYW5kIG1vcmUgZGF0YSBjb3VsZCBnZXR0aW5nIHByb2Nlc3NlZCBhbmQgZW1pdHRlZCB3aGVuIHRoZSBwaXBlbGluZSBmcmFnbWVudAogIGlzIGJlaW5nIGV4ZWN1dGVkLiBJZiB1c2VkIHdpdGhpbiBhbiBpcHl0aG9uIHNoZWxsLCB0aGVyZSB3aWxsIGJlIG5vIGR5bmFtaWMKICBwbG90dGluZyBidXQgYSBzdGF0aWMgcGxvdHRpbmcgaW4gdGhlIGVuZCBvZiBwaXBlbGluZSBmcmFnbWVudCBleGVjdXRpb24uCgogIFRoZSBQQ29sbGVjdGlvbnMgZ2l2ZW4gbXVzdCBiZWxvbmcgdG8gdGhlIHNhbWUgcGlwZWxpbmUuCgogICAgRm9yIGV4YW1wbGU6OgoKICAgICAgcCA9IGJlYW0uUGlwZWxpbmUoSW50ZXJhY3RpdmVSdW5uZXIoKSkKICAgICAgaW5pdCA9IHAgfCAnSW5pdCcgPj4gYmVhbS5DcmVhdGUocmFuZ2UoMTAwMCkpCiAgICAgIHNxdWFyZSA9IGluaXQgfCAnU3F1YXJlJyA+PiBiZWFtLk1hcChsYW1iZGEgeDogeCAqIHgpCiAgICAgIGN1YmUgPSBpbml0IHwgJ0N1YmUnID4+IGJlYW0uTWFwKGxhbWJkYSB4OiB4ICoqIDMpCgogICAgICAjIEJlbG93IGJ1aWxkcyBhIHBpcGVsaW5lIGZyYWdtZW50IGZyb20gdGhlIGRlZmluZWQgcGlwZWxpbmUgYHBgIHRoYXQKICAgICAgIyBjb250YWlucyBvbmx5IGFwcGxpZWQgdHJhbnNmb3JtcyBvZiBgSW5pdGAgYW5kIGBTcXVhcmVgLiBUaGVuIHRoZQogICAgICAjIGludGVyYWN0aXZlIHJ1bm5lciBydW5zIHRoZSBwaXBlbGluZSBmcmFnbWVudCBpbXBsaWNpdGx5IHRvIGNvbXB1dGUgZGF0YQogICAgICAjIHJlcHJlc2VudGVkIGJ5IFBDb2xsZWN0aW9uIGBzcXVhcmVgIGFuZCB2aXN1YWxpemVzIGl0LgogICAgICBzaG93KHNxdWFyZSkKCiAgICAgICMgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBzaG93KHNxdWFyZSlgIGJlY2F1c2UgYHNxdWFyZWAgZGVwZW5kcyBvbiBgaW5pdGAKICAgICAgIyBhbmQgYGluaXRgIGlzIGluY2x1ZGVkIGluIHRoZSBwaXBlbGluZSBmcmFnbWVudCBhbmQgY29tcHV0ZWQgYW55d2F5LgogICAgICBzaG93KGluaXQsIHNxdWFyZSkKCiAgICAgICMgQmVsb3cgaXMgc2ltaWxhciB0byBydW5uaW5nIGBwLnJ1bigpYC4gSXQgY29tcHV0ZXMgZGF0YSBmb3IgYm90aAogICAgICAjIFBDb2xsZWN0aW9uIGBzcXVhcmVgIGFuZCBQQ29sbGVjdGlvbiBgY3ViZWAsIHRoZW4gdmlzdWFsaXplcyB0aGVtLgogICAgICBzaG93KHNxdWFyZSwgY3ViZSkKICAiIiIKICBhc3NlcnQgbGVuKHBjb2xscykgPiAwLCAoCiAgICAgICdOZWVkIGF0IGxlYXN0IDEgUENvbGxlY3Rpb24gdG8gc2hvdyBkYXRhIHZpc3VhbGl6YXRpb24uJykKICBmb3IgcGNvbGwgaW4gcGNvbGxzOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocGNvbGwsIGJlYW0ucHZhbHVlLlBDb2xsZWN0aW9uKSwgKAogICAgICAgICd7fSBpcyBub3QgYW4gYXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uLicuZm9ybWF0KHBjb2xsKSkKICB1c2VyX3BpcGVsaW5lID0gcGNvbGxzWzBdLnBpcGVsaW5lCiAgZm9yIHBjb2xsIGluIHBjb2xsczoKICAgIGFzc2VydCBwY29sbC5waXBlbGluZSBpcyB1c2VyX3BpcGVsaW5lLCAoCiAgICAgICAgJ3t9IGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgdXNlci1kZWZpbmVkIHBpcGVsaW5lICh7fSkgdGhhbiB0aGF0IG9mJwogICAgICAgICcgb3RoZXIgUENvbGxlY3Rpb25zICh7fSkuJy5mb3JtYXQoCiAgICAgICAgICAgIHBjb2xsLCBwY29sbC5waXBlbGluZSwgdXNlcl9waXBlbGluZSkpCiAgcnVubmVyID0gdXNlcl9waXBlbGluZS5ydW5uZXIKICBpZiBpc2luc3RhbmNlKHJ1bm5lciwgaXIuSW50ZXJhY3RpdmVSdW5uZXIpOgogICAgcnVubmVyID0gcnVubmVyLl91bmRlcmx5aW5nX3J1bm5lcgoKICAjIE1ha2Ugc3VyZSB0aGF0IGFsbCBQQ29sbGVjdGlvbnMgdG8gYmUgc2hvd24gYXJlIHdhdGNoZWQuIElmIGEgUENvbGxlY3Rpb24KICAjIGhhcyBub3QgYmVlbiB3YXRjaGVkLCBtYWtlIHVwIGEgdmFyaWFibGUgbmFtZSBmb3IgdGhhdCBQQ29sbGVjdGlvbiBhbmQgd2F0Y2gKICAjIGl0LiBObyB2YWxpZGF0aW9uIGlzIG5lZWRlZCBoZXJlIGJlY2F1c2UgdGhlIHdhdGNoIGxvZ2ljIGNhbiBoYW5kbGUKICAjIGFyYml0cmFyeSB2YXJpYWJsZXMuCiAgd2F0Y2hlZF9wY29sbGVjdGlvbnMgPSBzZXQoKQogIGZvciB3YXRjaGluZyBpbiBpZS5jdXJyZW50X2VudigpLndhdGNoaW5nKCk6CiAgICBmb3IgXywgdmFsIGluIHdhdGNoaW5nOgogICAgICBpZiBoYXNhdHRyKHZhbCwgJ19fY2xhc3NfXycpIGFuZCBpc2luc3RhbmNlKHZhbCwgYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24pOgogICAgICAgIHdhdGNoZWRfcGNvbGxlY3Rpb25zLmFkZCh2YWwpCiAgZm9yIHBjb2xsIGluIHBjb2xsczoKICAgIGlmIHBjb2xsIG5vdCBpbiB3YXRjaGVkX3Bjb2xsZWN0aW9uczoKICAgICAgd2F0Y2goe3JlLnN1YihyJ1tcW1xdXChcKV0nLCAnXycsIHN0cihwY29sbCkpOiBwY29sbH0pCgogICMgQXR0ZW1wdCB0byBydW4gYmFja2dyb3VuZCBjYWNoaW5nIGpvYiBzaW5jZSB3ZSBoYXZlIHRoZSByZWZlcmVuY2UgdG8gdGhlCiAgIyB1c2VyLWRlZmluZWQgcGlwZWxpbmUuCiAgYmNqLmF0dGVtcHRfdG9fcnVuX2JhY2tncm91bmRfY2FjaGluZ19qb2IocnVubmVyLCB1c2VyX3BpcGVsaW5lKQoKICAjIEJ1aWxkIGEgcGlwZWxpbmUgZnJhZ21lbnQgZm9yIHRoZSBQQ29sbGVjdGlvbnMgYW5kIHJ1biBpdC4KICByZXN1bHQgPSBwZi5QaXBlbGluZUZyYWdtZW50KGxpc3QocGNvbGxzKSkucnVuKCkKICBpZS5jdXJyZW50X2VudigpLnNldF9waXBlbGluZV9yZXN1bHQodXNlcl9waXBlbGluZSwgcmVzdWx0KQoKICAjIElmIGluIG5vdGVib29rLCBkeW5hbWljIHBsb3R0aW5nIGFzIGNvbXB1dGF0aW9uIGdvZXMuCiAgaWYgaWUuY3VycmVudF9lbnYoKS5pc19pbl9ub3RlYm9vazoKICAgIGZvciBwY29sbCBpbiBwY29sbHM6CiAgICAgIHZpc3VhbGl6ZShwY29sbCwgZHluYW1pY19wbG90dGluZ19pbnRlcnZhbD0xKQoKICAjIEludm9rZSB3YWl0X3VudGlsX2ZpbmlzaCB0byBlbnN1cmUgdGhlIGJsb2NraW5nIG5hdHVyZSBvZiB0aGlzIEFQSSB3aXRob3V0CiAgIyByZWx5aW5nIG9uIHRoZSBydW4gdG8gYmUgYmxvY2tpbmcuCiAgcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKCiAgIyBJZiBqdXN0IGluIGlweXRob24gc2hlbGwsIHBsb3R0aW5nIG9uY2Ugd2hlbiB0aGUgY29tcHV0YXRpb24gaXMgY29tcGxldGVkLgogIGlmIGllLmN1cnJlbnRfZW52KCkuaXNfaW5faXB5dGhvbiBhbmQgbm90IGllLmN1cnJlbnRfZW52KCkuaXNfaW5fbm90ZWJvb2s6CiAgICBmb3IgcGNvbGwgaW4gcGNvbGxzOgogICAgICB2aXN1YWxpemUocGNvbGwpCgogICMgSWYgdGhlIHBpcGVsaW5lIGV4ZWN1dGlvbiBpcyBzdWNjZXNzZnVsIGF0IHRoaXMgc3RhZ2UsIG1hcmsgdGhlIGNvbXB1dGF0aW9uCiAgIyBjb21wbGV0ZW5lc3MgZm9yIHRoZSBnaXZlbiBQQ29sbGVjdGlvbnMgc28gdGhhdCB3aGVuIGZ1cnRoZXIgYHNob3dgCiAgIyBpbnZvY2F0aW9uIG9jY3VycywgSW50ZXJhY3RpdmUgQmVhbSB3b3VsZG4ndCBuZWVkIHRvIHJlLWNvbXB1dGUgdGhlbS4KICBpZiByZXN1bHQuc3RhdGUgaXMgYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkRPTkU6CiAgICBpZS5jdXJyZW50X2VudigpLm1hcmtfcGNvbGxlY3Rpb25fY29tcHV0ZWQocGNvbGxzKQoKCmRlZiBldmljdF9jYXB0dXJlZF9kYXRhKCk6CiAgIiIiRm9yY2VmdWxseSBldmljdHMgYWxsIGNhcHR1cmVkIHJlcGxheWFibGUgZGF0YS4KCiAgT25jZSBpbnZva2VkLCBJbnRlcmFjdGl2ZSBCZWFtIHdpbGwgY2FwdHVyZSBuZXcgZGF0YSBiYXNlZCBvbiB0aGUgZ3VpZGFuY2Ugb2YKICBvcHRpb25zIHRoZSBuZXh0IHRpbWUgaXQgZXZhbHVhdGVzL3Zpc3VhbGl6ZXMgUENvbGxlY3Rpb25zIG9yIHJ1bnMgcGlwZWxpbmVzLgogICIiIgogIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zIGltcG9ydCBjYXB0dXJlX2NvbnRyb2wKICBjYXB0dXJlX2NvbnRyb2wuZXZpY3RfY2FwdHVyZWRfZGF0YSgpCpR9lCiMHU9wdGlvbnMuZW5hYmxlX2NhcHR1cmVfcmVwbGF5lGpWMQEASzhLP4eUjBpPcHRpb25zLmNhcHR1cmFibGVfc291cmNlc5RqVjEBAEtBS0SHlIwYT3B0aW9ucy5jYXB0dXJlX2R1cmF0aW9ulGpWMQEAS0xLWYeUjAdPcHRpb25zlGpdMQEASy9LWYeUjAV3YXRjaJRqVjEBAEtoS5OHlIwEc2hvd5RqVjEBAEuWS/KHlIwTZXZpY3RfY2FwdHVyZWRfZGF0YZRqVjEBAEv1S/yHlHV9lCiMB09wdGlvbnOUaiAEAACMBXdhdGNolGogBAAAjARzaG93lGogBAAAjBNldmljdF9jYXB0dXJlZF9kYXRhlGogBAAAdYwwYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtlHSUjDdhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX2Vudmlyb25tZW50lChY/jkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiTW9kdWxlIG9mIHRoZSBjdXJyZW50IEludGVyYWN0aXZlIEJlYW0gZW52aXJvbm1lbnQuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuClByb3ZpZGVzIGludGVyZmFjZXMgdG8gaW50ZXJhY3Qgd2l0aCBleGlzdGluZyBJbnRlcmFjdGl2ZSBCZWFtIGVudmlyb25tZW50LgpFeHRlcm5hbCBJbnRlcmFjdGl2ZSBCZWFtIHVzZXJzIHBsZWFzZSB1c2UgaW50ZXJhY3RpdmVfYmVhbSBtb2R1bGUgaW4KYXBwbGljYXRpb24gY29kZSBvciBub3RlYm9vay4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXRleGl0CmltcG9ydCBpbXBvcnRsaWIKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzIGltcG9ydCBydW5uZXIKZnJvbSBhcGFjaGVfYmVhbS51dGlscy5pbnRlcmFjdGl2ZV91dGlscyBpbXBvcnQgaXNfaW5faXB5dGhvbgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmludGVyYWN0aXZlX3V0aWxzIGltcG9ydCBpc19pbl9ub3RlYm9vawoKIyBJbnRlcmFjdGl2ZSBCZWFtIHVzZXIgZmxvdyBpcyBkYXRhLWNlbnRyaWMgcmF0aGVyIHRoYW4gcGlwZWxpbmUtY2VudHJpYywgc28KIyB0aGVyZSBpcyBvbmx5IG9uZSBnbG9iYWwgaW50ZXJhY3RpdmUgZW52aXJvbm1lbnQgaW5zdGFuY2UgdGhhdCBtYW5hZ2VzCiMgaW1wbGVtZW50YXRpb24gdGhhdCBlbmFibGVzIGludGVyYWN0aXZpdHkuCl9pbnRlcmFjdGl2ZV9iZWFtX2VudiA9IE5vbmUKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpkZWYgY3VycmVudF9lbnYoY2FjaGVfbWFuYWdlcj1Ob25lKToKICAiIiJHZXRzIGN1cnJlbnQgSW50ZXJhY3RpdmUgQmVhbSBlbnZpcm9ubWVudC4iIiIKICBnbG9iYWwgX2ludGVyYWN0aXZlX2JlYW1fZW52CiAgaWYgbm90IF9pbnRlcmFjdGl2ZV9iZWFtX2VudjoKICAgIF9pbnRlcmFjdGl2ZV9iZWFtX2VudiA9IEludGVyYWN0aXZlRW52aXJvbm1lbnQoY2FjaGVfbWFuYWdlcikKICByZXR1cm4gX2ludGVyYWN0aXZlX2JlYW1fZW52CgoKZGVmIG5ld19lbnYoY2FjaGVfbWFuYWdlcj1Ob25lKToKICAiIiJDcmVhdGVzIGEgbmV3IEludGVyYWN0aXZlIEJlYW0gZW52aXJvbm1lbnQgdG8gcmVwbGFjZSBjdXJyZW50IG9uZS4iIiIKICBnbG9iYWwgX2ludGVyYWN0aXZlX2JlYW1fZW52CiAgaWYgX2ludGVyYWN0aXZlX2JlYW1fZW52OgogICAgX2ludGVyYWN0aXZlX2JlYW1fZW52LmNsZWFudXAoKQogIF9pbnRlcmFjdGl2ZV9iZWFtX2VudiA9IE5vbmUKICByZXR1cm4gY3VycmVudF9lbnYoY2FjaGVfbWFuYWdlcikKCgpjbGFzcyBJbnRlcmFjdGl2ZUVudmlyb25tZW50KG9iamVjdCk6CiAgIiIiQW4gaW50ZXJhY3RpdmUgZW52aXJvbm1lbnQgd2l0aCBjYWNoZSBhbmQgcGlwZWxpbmUgdmFyaWFibGUgbWV0YWRhdGEuCgogIEludGVyYWN0aXZlIEJlYW0gd2lsbCB1c2UgdGhlIHdhdGNoZWQgdmFyaWFibGUgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIGlmIGEKICBQQ29sbGVjdGlvbiBpcyBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIGluIHVzZXIgcGlwZWxpbmUgZGVmaW5pdGlvbi4gV2hlbgogIGV4ZWN1dGluZyB0aGUgcGlwZWxpbmUsIGludGVyYWN0aXZpdHkgaXMgYXBwbGllZCB3aXRoIGltcGxpY2l0IGNhY2hlCiAgbWVjaGFuaXNtIGZvciB0aG9zZSBQQ29sbGVjdGlvbnMgaWYgdGhlIHBpcGVsaW5lIGlzIGludGVyYWN0aXZlLiBVc2VycyBjYW4KICBhbHNvIHZpc3VhbGl6ZSBhbmQgaW50cm9zcGVjdCB0aG9zZSBQQ29sbGVjdGlvbnMgaW4gdXNlciBjb2RlIHNpbmNlIHRoZXkgaGF2ZQogIGhhbmRsZXMgdG8gdGhlIHZhcmlhYmxlcy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgY2FjaGVfbWFuYWdlcj1Ob25lKToKICAgIHNlbGYuX2NhY2hlX21hbmFnZXIgPSBjYWNoZV9tYW5hZ2VyCiAgICAjIFJlZ2lzdGVyIGEgY2xlYW51cCByb3V0aW5lIHdoZW4ga2VybmVsIGlzIHJlc3RhcnRlZCBvciB0ZXJtaW5hdGVkLgogICAgaWYgY2FjaGVfbWFuYWdlcjoKICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuY2xlYW51cCkKICAgICMgSG9sZHMgY2xhc3MgaW5zdGFuY2VzLCBtb2R1bGUgb2JqZWN0LCBzdHJpbmcgb2YgbW9kdWxlIG5hbWVzLgogICAgc2VsZi5fd2F0Y2hpbmdfc2V0ID0gc2V0KCkKICAgICMgSG9sZHMgdmFyaWFibGVzIGxpc3Qgb2YgKERpY3Rbc3RyLCBvYmplY3RdKS4KICAgIHNlbGYuX3dhdGNoaW5nX2RpY3RfbGlzdCA9IFtdCiAgICAjIEhvbGRzIHJlc3VsdHMgb2YgbWFpbiBqb2JzIGFzIERpY3RbUGlwZWxpbmUsIFBpcGVsaW5lUmVzdWx0XS4KICAgICMgRWFjaCBrZXkgaXMgYSBwaXBlbGluZSBpbnN0YW5jZSBkZWZpbmVkIGJ5IHRoZSBlbmQgdXNlci4gVGhlCiAgICAjIEludGVyYWN0aXZlUnVubmVyIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoaXMgZGljdGlvbmFyeQogICAgIyBpbXBsaWNpdGx5LgogICAgc2VsZi5fbWFpbl9waXBlbGluZV9yZXN1bHRzID0ge30KICAgICMgSG9sZHMgYmFja2dyb3VuZCBjYWNoaW5nIGpvYnMgYXMgRGljdFtQaXBlbGluZSwgQmFja2dyb3VuZENhY2hpbmdKb2JdLgogICAgIyBFYWNoIGtleSBpcyBhIHBpcGVsaW5lIGluc3RhbmNlIGRlZmluZWQgYnkgdGhlIGVuZCB1c2VyLiBUaGUKICAgICMgSW50ZXJhY3RpdmVSdW5uZXIgb3IgaXRzIGVuY2xvc2luZyBzY29wZSBpcyByZXNwb25zaWJsZSBmb3IgcG9wdWxhdGluZwogICAgIyB0aGlzIGRpY3Rpb25hcnkgaW1wbGljaXRseSB3aGVuIGEgYmFja2dyb3VuZCBjYWNoaW5nIGpvYnMgaXMgc3RhcnRlZC4KICAgIHNlbGYuX2JhY2tncm91bmRfY2FjaGluZ19qb2JzID0ge30KICAgICMgSG9sZHMgVGVzdFN0cmVhbVNlcnZpY2VDb250cm9sbGVycyB0aGF0IGNvbnRyb2xzIGdSUEMgc2VydmVycyBzZXJ2aW5nCiAgICAjIGV2ZW50cyBhcyB0ZXN0IHN0cmVhbSBvZiBUZXN0U3RyZWFtUGF5bG9hZC5FdmVudC4KICAgICMgRGljdFtQaXBlbGluZSwgVGVzdFN0cmVhbVNlcnZpY2VDb250cm9sbGVyXS4gRWFjaCBrZXkgaXMgYSBwaXBlbGluZQogICAgIyBpbnN0YW5jZSBkZWZpbmVkIGJ5IHRoZSBlbmQgdXNlci4gVGhlIEludGVyYWN0aXZlUnVubmVyIG9yIGl0cyBlbmNsb3NpbmcKICAgICMgc2NvcGUgaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhpcyBkaWN0aW9uYXJ5IGltcGxpY2l0bHkgd2hlbiBhIG5ldwogICAgIyBjb250cm9sbGVyIGlzIGNyZWF0ZWQgdG8gc3RhcnQgYSBuZXcgZ1JQQyBzZXJ2ZXIuIFRoZSBzZXJ2ZXIgc3RheXMgYWxpdmUKICAgICMgdW50aWwgYSBuZXcgYmFja2dyb3VuZCBjYWNoaW5nIGpvYiBpcyBzdGFydGVkIHRodXMgaW52YWxpZGF0aW5nIGV2ZXJ5dGhpbmcKICAgICMgdGhlIGdSUEMgc2VydmVyIHNlcnZlcy4KICAgIHNlbGYuX3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcnMgPSB7fQogICAgc2VsZi5fY2FjaGVkX3NvdXJjZV9zaWduYXR1cmUgPSB7fQogICAgc2VsZi5fdHJhY2tlZF91c2VyX3BpcGVsaW5lcyA9IHNldCgpCiAgICAjIFRyYWNrcyB0aGUgY29tcHV0YXRpb24gY29tcGxldGVuZXNzIG9mIFBDb2xsZWN0aW9ucy4gUENvbGxlY3Rpb25zIHRyYWNrZWQKICAgICMgaGVyZSBkb24ndCBuZWVkIHRvIGJlIHJlLWNvbXB1dGVkIHdoZW4gZGF0YSBpbnRyb3NwZWN0aW9uIGlzIG5lZWRlZC4KICAgIHNlbGYuX2NvbXB1dGVkX3Bjb2xscyA9IHNldCgpCiAgICAjIEFsd2F5cyB3YXRjaCBfX21haW5fXyBtb2R1bGUuCiAgICBzZWxmLndhdGNoKCdfX21haW5fXycpCiAgICAjIERvIGEgd2FybmluZyBsZXZlbCBsb2dnaW5nIGlmIGN1cnJlbnQgcHl0aG9uIHZlcnNpb24gaXMgYmVsb3cgMy42LgogICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCA2KToKICAgICAgc2VsZi5faXNfcHlfdmVyc2lvbl9yZWFkeSA9IEZhbHNlCiAgICAgIF9MT0dHRVIud2FybmluZygnSW50ZXJhY3RpdmUgQmVhbSByZXF1aXJlcyBQeXRob24gMy41LjMrLicpCiAgICBlbHNlOgogICAgICBzZWxmLl9pc19weV92ZXJzaW9uX3JlYWR5ID0gVHJ1ZQogICAgIyBDaGVjayBpZiBbaW50ZXJhY3RpdmVdIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkLgogICAgdHJ5OgogICAgICBpbXBvcnQgSVB5dGhvbiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWltcG9ydAogICAgICBpbXBvcnQganNvbnMgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKICAgICAgaW1wb3J0IHRpbWVsb29wICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiAgICAgIGZyb20gZmFjZXRzX292ZXJ2aWV3LmdlbmVyaWNfZmVhdHVyZV9zdGF0aXN0aWNzX2dlbmVyYXRvciBpbXBvcnQgR2VuZXJpY0ZlYXR1cmVTdGF0aXN0aWNzR2VuZXJhdG9yICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0CiAgICAgIHNlbGYuX2lzX2ludGVyYWN0aXZlX3JlYWR5ID0gVHJ1ZQogICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICBzZWxmLl9pc19pbnRlcmFjdGl2ZV9yZWFkeSA9IEZhbHNlCiAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICdEZXBlbmRlbmNpZXMgcmVxdWlyZWQgZm9yIEludGVyYWN0aXZlIEJlYW0gUENvbGxlY3Rpb24gJwogICAgICAgICAgJ3Zpc3VhbGl6YXRpb24gYXJlIG5vdCBhdmFpbGFibGUsIHBsZWFzZSB1c2U6IGBwaXAgJwogICAgICAgICAgJ2luc3RhbGwgYXBhY2hlLWJlYW1baW50ZXJhY3RpdmVdYCB0byBpbnN0YWxsIG5lY2Vzc2FyeSAnCiAgICAgICAgICAnZGVwZW5kZW5jaWVzIHRvIGVuYWJsZSBhbGwgZGF0YSB2aXN1YWxpemF0aW9uIGZlYXR1cmVzLicpCgogICAgc2VsZi5faXNfaW5faXB5dGhvbiA9IGlzX2luX2lweXRob24oKQogICAgc2VsZi5faXNfaW5fbm90ZWJvb2sgPSBpc19pbl9ub3RlYm9vaygpCiAgICBpZiBub3Qgc2VsZi5faXNfaW5faXB5dGhvbjoKICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgJ1lvdSBjYW5ub3QgdXNlIEludGVyYWN0aXZlIEJlYW0gZmVhdHVyZXMgd2hlbiB5b3UgYXJlICcKICAgICAgICAgICdub3QgaW4gYW4gaW50ZXJhY3RpdmUgZW52aXJvbm1lbnQgc3VjaCBhcyBhIEp1cHl0ZXIgJwogICAgICAgICAgJ25vdGVib29rIG9yIGlweXRob24gdGVybWluYWwuJykKICAgIGlmIHNlbGYuX2lzX2luX2lweXRob24gYW5kIG5vdCBzZWxmLl9pc19pbl9ub3RlYm9vazoKICAgICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICAgJ1lvdSBoYXZlIGxpbWl0ZWQgSW50ZXJhY3RpdmUgQmVhbSBmZWF0dXJlcyBzaW5jZSB5b3VyICcKICAgICAgICAgICdpcHl0aG9uIGtlcm5lbCBpcyBub3QgY29ubmVjdGVkIGFueSBub3RlYm9vayBmcm9udGVuZC4nKQoKICBAcHJvcGVydHkKICBkZWYgb3B0aW9ucyhzZWxmKToKICAgICIiIkEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgaW50ZXJhY3RpdmUgb3B0aW9ucy4KCiAgICBQcm92aWRlZCB0byBhdm9pZCBpbXBvcnQgbG9vcCBvciBleGNlc3NpdmUgZHluYW1pYyBpbXBvcnQuIEFsbCBpbnRlcm5hbAogICAgSW50ZXJhY3RpdmUgQmVhbSBtb2R1bGVzIHNob3VsZCBhY2Nlc3MgaW50ZXJhY3RpdmVfYmVhbS5vcHRpb25zIHRocm91Z2gKICAgIHRoaXMgcHJvcGVydHkuCiAgICAiIiIKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9iZWFtIGltcG9ydCBvcHRpb25zCiAgICByZXR1cm4gb3B0aW9ucwoKICBAcHJvcGVydHkKICBkZWYgaXNfcHlfdmVyc2lvbl9yZWFkeShzZWxmKToKICAgICIiIklmIFB5dGhvbiB2ZXJzaW9uIGlzIGFib3ZlIHRoZSBtaW5pbXVtIHJlcXVpcmVtZW50LiIiIgogICAgcmV0dXJuIHNlbGYuX2lzX3B5X3ZlcnNpb25fcmVhZHkKCiAgQHByb3BlcnR5CiAgZGVmIGlzX2ludGVyYWN0aXZlX3JlYWR5KHNlbGYpOgogICAgIiIiSWYgdGhlIFtpbnRlcmFjdGl2ZV0gZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQuIiIiCiAgICByZXR1cm4gc2VsZi5faXNfaW50ZXJhY3RpdmVfcmVhZHkKCiAgQHByb3BlcnR5CiAgZGVmIGlzX2luX2lweXRob24oc2VsZik6CiAgICAiIiJJZiB0aGUgcnVudGltZSBpcyB3aXRoaW4gYW4gSVB5dGhvbiBrZXJuZWwuIiIiCiAgICByZXR1cm4gc2VsZi5faXNfaW5faXB5dGhvbgoKICBAcHJvcGVydHkKICBkZWYgaXNfaW5fbm90ZWJvb2soc2VsZik6CiAgICAiIiJJZiB0aGUga2VybmVsIGlzIGNvbm5lY3RlZCB0byBhIG5vdGVib29rIGZyb250ZW5kLgoKICAgIElmIG5vdCwgaXQgY291bGQgYmUgdGhhdCB0aGUgdXNlciBpcyB1c2luZyBrZXJuZWwgaW4gYSB0ZXJtaW5hbCBvciBhIHVuaXQKICAgIHRlc3QuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9pc19pbl9ub3RlYm9vawoKICBkZWYgY2xlYW51cChzZWxmKToKICAgICMgVXRpbGl6ZXMgY2FjaGUgbWFuYWdlciB0byBjbGVhbiB1cCBjYWNoZSBmcm9tIGV2ZXJ5d2hlcmUuCiAgICBpZiBzZWxmLmNhY2hlX21hbmFnZXIoKToKICAgICAgc2VsZi5jYWNoZV9tYW5hZ2VyKCkuY2xlYW51cCgpCiAgICBzZWxmLmV2aWN0X2NvbXB1dGVkX3Bjb2xsZWN0aW9ucygpCiAgICBzZWxmLmV2aWN0X2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJlKCkKCiAgZGVmIHdhdGNoKHNlbGYsIHdhdGNoYWJsZSk6CiAgICAiIiJXYXRjaGVzIGEgd2F0Y2hhYmxlLgoKICAgIEEgd2F0Y2hhYmxlIGNhbiBiZSBhIGRpY3Rpb25hcnkgb2YgdmFyaWFibGUgbWV0YWRhdGEgc3VjaCBhcyBsb2NhbHMoKSwgYSBzdHIKICAgIG5hbWUgb2YgYSBtb2R1bGUsIGEgbW9kdWxlIG9iamVjdCBvciBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzLiBUaGUgdmFyaWFibGUKICAgIGNhbiBjb21lIGZyb20gYW55IHNjb3BlIGV2ZW4gbG9jYWwuIER1cGxpY2F0ZWQgdmFyaWFibGUgbmFtaW5nIGRvZXNuJ3QKICAgIG1hdHRlciBzaW5jZSB0aGV5IGFyZSBkaWZmZXJlbnQgaW5zdGFuY2VzLiBEdXBsaWNhdGVkIHZhcmlhYmxlcyBhcmUgYWxzbwogICAgYWxsb3dlZCB3aGVuIHdhdGNoaW5nLgogICAgIiIiCiAgICBpZiBpc2luc3RhbmNlKHdhdGNoYWJsZSwgZGljdCk6CiAgICAgIHNlbGYuX3dhdGNoaW5nX2RpY3RfbGlzdC5hcHBlbmQod2F0Y2hhYmxlLml0ZW1zKCkpCiAgICBlbHNlOgogICAgICBzZWxmLl93YXRjaGluZ19zZXQuYWRkKHdhdGNoYWJsZSkKCiAgZGVmIHdhdGNoaW5nKHNlbGYpOgogICAgIiIiQW5hbHl6ZXMgYW5kIHJldHVybnMgYSBsaXN0IG9mIHBhaXIgbGlzdHMgcmVmZXJyaW5nIHRvIHZhcmlhYmxlIG5hbWVzIGFuZAogICAgdmFsdWVzIGZyb20gd2F0Y2hlZCBzY29wZXMuCgogICAgRWFjaCBlbnRyeSBpbiB0aGUgbGlzdCByZXByZXNlbnRzIHRoZSB2YXJpYWJsZSBkZWZpbmVkIHdpdGhpbiBhIHdhdGNoZWQKICAgIHdhdGNoYWJsZS4gQ3VycmVudGx5LCBlYWNoIGVudHJ5IGhvbGRzIGEgbGlzdCBvZiBwYWlycy4gVGhlIGZvcm1hdCBtaWdodAogICAgY2hhbmdlIGluIHRoZSBmdXR1cmUgdG8gaG9sZCBtb3JlIG1ldGFkYXRhLiBEdXBsaWNhdGVkIHBhaXJzIGFyZSBhbGxvd2VkLgogICAgQW5kIG11bHRpcGxlIHBhcmlzIGNhbiBoYXZlIHRoZSBzYW1lIHZhcmlhYmxlIG5hbWUgYXMgdGhlICJmaXJzdCIgd2hpbGUKICAgIGhhdmluZyBkaWZmZXJlbnQgdmFyaWFibGUgdmFsdWVzIGFzIHRoZSAic2Vjb25kIiBzaW5jZSB2YXJpYWJsZXMgaW4KICAgIGRpZmZlcmVudCBzY29wZXMgY2FuIGhhdmUgdGhlIHNhbWUgbmFtZS4KICAgICIiIgogICAgd2F0Y2hpbmcgPSBsaXN0KHNlbGYuX3dhdGNoaW5nX2RpY3RfbGlzdCkKICAgIGZvciB3YXRjaGFibGUgaW4gc2VsZi5fd2F0Y2hpbmdfc2V0OgogICAgICBpZiBpc2luc3RhbmNlKHdhdGNoYWJsZSwgc3RyKToKICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSh3YXRjaGFibGUpCiAgICAgICAgd2F0Y2hpbmcuYXBwZW5kKHZhcnMobW9kdWxlKS5pdGVtcygpKQogICAgICBlbHNlOgogICAgICAgIHdhdGNoaW5nLmFwcGVuZCh2YXJzKHdhdGNoYWJsZSkuaXRlbXMoKSkKICAgIHJldHVybiB3YXRjaGluZwoKICBkZWYgc2V0X2NhY2hlX21hbmFnZXIoc2VsZiwgY2FjaGVfbWFuYWdlcik6CiAgICAiIiJTZXRzIHRoZSBjYWNoZSBtYW5hZ2VyIGhlbGQgYnkgY3VycmVudCBJbnRlcmFjdGl2ZSBFbnZpcm9ubWVudC4iIiIKICAgIGlmIHNlbGYuX2NhY2hlX21hbmFnZXIgaXMgY2FjaGVfbWFuYWdlcjoKICAgICAgIyBOT09QIGlmIHNldHRpbmcgdG8gdGhlIHNhbWUgY2FjaGVfbWFuYWdlci4KICAgICAgcmV0dXJuCiAgICBpZiBzZWxmLl9jYWNoZV9tYW5hZ2VyOgogICAgICAjIEludm9rZSBjbGVhbnVwIHJvdXRpbmUgd2hlbiBhIG5ldyBjYWNoZV9tYW5hZ2VyIGlzIGZvcmNlZnVsbHkgc2V0IGFuZAogICAgICAjIGN1cnJlbnQgY2FjaGVfbWFuYWdlciBpcyBub3QgTm9uZS4KICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgYXRleGl0LnVucmVnaXN0ZXIoc2VsZi5jbGVhbnVwKQogICAgc2VsZi5fY2FjaGVfbWFuYWdlciA9IGNhY2hlX21hbmFnZXIKICAgIGlmIHNlbGYuX2NhY2hlX21hbmFnZXI6CiAgICAgICMgUmUtcmVnaXN0ZXIgY2xlYW51cCByb3V0aW5lIGZvciB0aGUgbmV3IGNhY2hlX21hbmFnZXIgaWYgaXQncyBub3QgTm9uZS4KICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuY2xlYW51cCkKCiAgZGVmIGNhY2hlX21hbmFnZXIoc2VsZik6CiAgICAiIiJHZXRzIHRoZSBjYWNoZSBtYW5hZ2VyIGhlbGQgYnkgY3VycmVudCBJbnRlcmFjdGl2ZSBFbnZpcm9ubWVudC4iIiIKICAgIHJldHVybiBzZWxmLl9jYWNoZV9tYW5hZ2VyCgogIGRlZiBzZXRfcGlwZWxpbmVfcmVzdWx0KHNlbGYsIHBpcGVsaW5lLCByZXN1bHQpOgogICAgIiIiU2V0cyB0aGUgcGlwZWxpbmUgcnVuIHJlc3VsdC4gQWRkcyBvbmUgaWYgYWJzZW50LiBPdGhlcndpc2UsIHJlcGxhY2UuIiIiCiAgICBhc3NlcnQgaXNzdWJjbGFzcyh0eXBlKHBpcGVsaW5lKSwgYmVhbS5QaXBlbGluZSksICgKICAgICAgICAncGlwZWxpbmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhcGFjaGVfYmVhbS5QaXBlbGluZSBvciBpdHMgc3ViY2xhc3MnKQogICAgYXNzZXJ0IGlzc3ViY2xhc3ModHlwZShyZXN1bHQpLCBydW5uZXIuUGlwZWxpbmVSZXN1bHQpLCAoCiAgICAgICAgJ3Jlc3VsdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICcKICAgICAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXIuUGlwZWxpbmVSZXN1bHQgb3IgaXRzIHN1YmNsYXNzJykKICAgIHNlbGYuX21haW5fcGlwZWxpbmVfcmVzdWx0c1twaXBlbGluZV0gPSByZXN1bHQKCiAgZGVmIGV2aWN0X3BpcGVsaW5lX3Jlc3VsdChzZWxmLCBwaXBlbGluZSk6CiAgICAiIiJFdmljdHMgdGhlIHRyYWNraW5nIG9mIGdpdmVuIHBpcGVsaW5lIHJ1bi4gTm9vcCBpZiBhYnNlbnQuIiIiCiAgICByZXR1cm4gc2VsZi5fbWFpbl9waXBlbGluZV9yZXN1bHRzLnBvcChwaXBlbGluZSwgTm9uZSkKCiAgZGVmIHBpcGVsaW5lX3Jlc3VsdChzZWxmLCBwaXBlbGluZSk6CiAgICAiIiJHZXRzIHRoZSBwaXBlbGluZSBydW4gcmVzdWx0LiBOb25lIGlmIGFic2VudC4iIiIKICAgIHJldHVybiBzZWxmLl9tYWluX3BpcGVsaW5lX3Jlc3VsdHMuZ2V0KHBpcGVsaW5lLCBOb25lKQoKICBkZWYgc2V0X2JhY2tncm91bmRfY2FjaGluZ19qb2Ioc2VsZiwgcGlwZWxpbmUsIGJhY2tncm91bmRfY2FjaGluZ19qb2IpOgogICAgIiIiU2V0cyB0aGUgYmFja2dyb3VuZCBjYWNoaW5nIGpvYiBzdGFydGVkIGZyb20gdGhlIGdpdmVuIHBpcGVsaW5lLiIiIgogICAgYXNzZXJ0IGlzc3ViY2xhc3ModHlwZShwaXBlbGluZSksIGJlYW0uUGlwZWxpbmUpLCAoCiAgICAgICAgJ3BpcGVsaW5lIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYXBhY2hlX2JlYW0uUGlwZWxpbmUgb3IgaXRzIHN1YmNsYXNzJykKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5iYWNrZ3JvdW5kX2NhY2hpbmdfam9iIGltcG9ydCBCYWNrZ3JvdW5kQ2FjaGluZ0pvYgogICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmFja2dyb3VuZF9jYWNoaW5nX2pvYiwgQmFja2dyb3VuZENhY2hpbmdKb2IpLCAoCiAgICAgICAgJ2JhY2tncm91bmRfY2FjaGluZyBqb2IgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBCYWNrZ3JvdW5kQ2FjaGluZ0pvYicpCiAgICBzZWxmLl9iYWNrZ3JvdW5kX2NhY2hpbmdfam9ic1twaXBlbGluZV0gPSBiYWNrZ3JvdW5kX2NhY2hpbmdfam9iCgogIGRlZiBnZXRfYmFja2dyb3VuZF9jYWNoaW5nX2pvYihzZWxmLCBwaXBlbGluZSk6CiAgICAiIiJHZXRzIHRoZSBiYWNrZ3JvdW5kIGNhY2hpbmcgam9iIHN0YXJ0ZWQgZnJvbSB0aGUgZ2l2ZW4gcGlwZWxpbmUuIiIiCiAgICByZXR1cm4gc2VsZi5fYmFja2dyb3VuZF9jYWNoaW5nX2pvYnMuZ2V0KHBpcGVsaW5lLCBOb25lKQoKICBkZWYgc2V0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcihzZWxmLCBwaXBlbGluZSwgY29udHJvbGxlcik6CiAgICAiIiJTZXRzIHRoZSB0ZXN0IHN0cmVhbSBzZXJ2aWNlIGNvbnRyb2xsZXIgdGhhdCBoYXMgc3RhcnRlZCBhIGdSUEMgc2VydmVyCiAgICBzZXJ2aW5nIHRoZSB0ZXN0IHN0cmVhbSBmb3IgYW55IGpvYiBzdGFydGVkIGZyb20gdGhlIGdpdmVuIHVzZXItZGVmaW5lZAogICAgcGlwZWxpbmUuCiAgICAiIiIKICAgIHNlbGYuX3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcnNbcGlwZWxpbmVdID0gY29udHJvbGxlcgoKICBkZWYgZ2V0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcihzZWxmLCBwaXBlbGluZSk6CiAgICAiIiJHZXRzIHRoZSB0ZXN0IHN0cmVhbSBzZXJ2aWNlIGNvbnRyb2xsZXIgdGhhdCBoYXMgc3RhcnRlZCBhIGdSUEMgc2VydmVyCiAgICBzZXJ2aW5nIHRoZSB0ZXN0IHN0cmVhbSBmb3IgYW55IGpvYiBzdGFydGVkIGZyb20gdGhlIGdpdmVuIHVzZXItZGVmaW5lZAogICAgcGlwZWxpbmUuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl90ZXN0X3N0cmVhbV9zZXJ2aWNlX2NvbnRyb2xsZXJzLmdldChwaXBlbGluZSwgTm9uZSkKCiAgZGVmIGV2aWN0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcihzZWxmLCBwaXBlbGluZSk6CiAgICAiIiJFdmljdHMgYW5kIHBvcHMgdGhlIHRlc3Qgc3RyZWFtIHNlcnZpY2UgY29udHJvbGxlciB0aGF0IGhhcyBzdGFydGVkIGEKICAgIGdSUEMgc2VydmVyIHNlcnZpbmcgdGhlIHRlc3Qgc3RyZWFtIGZvciBhbnkgam9iIHN0YXJ0ZWQgZnJvbSB0aGUgZ2l2ZW4KICAgIHVzZXItZGVmaW5lZCBwaXBlbGluZS4KICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcnMucG9wKHBpcGVsaW5lLCBOb25lKQoKICBkZWYgaXNfdGVybWluYXRlZChzZWxmLCBwaXBlbGluZSk6CiAgICAiIiJRdWVyaWVzIGlmIHRoZSBtb3N0IHJlY2VudCBqb2IgKGJ5IGV4ZWN1dGluZyB0aGUgZ2l2ZW4gcGlwZWxpbmUpIHN0YXRlCiAgICBpcyBpbiBhIHRlcm1pbmFsIHN0YXRlLiBUcnVlIGlmIGFic2VudC4iIiIKICAgIHJlc3VsdCA9IHNlbGYucGlwZWxpbmVfcmVzdWx0KHBpcGVsaW5lKQogICAgaWYgcmVzdWx0OgogICAgICByZXR1cm4gcnVubmVyLlBpcGVsaW5lU3RhdGUuaXNfdGVybWluYWwocmVzdWx0LnN0YXRlKQogICAgcmV0dXJuIFRydWUKCiAgZGVmIHNldF9jYWNoZWRfc291cmNlX3NpZ25hdHVyZShzZWxmLCBwaXBlbGluZSwgc2lnbmF0dXJlKToKICAgIHNlbGYuX2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJlW3BpcGVsaW5lXSA9IHNpZ25hdHVyZQoKICBkZWYgZ2V0X2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJlKHNlbGYsIHBpcGVsaW5lKToKICAgIHJldHVybiBzZWxmLl9jYWNoZWRfc291cmNlX3NpZ25hdHVyZS5nZXQocGlwZWxpbmUsIHNldCgpKQoKICBkZWYgZXZpY3RfY2FjaGVkX3NvdXJjZV9zaWduYXR1cmUoc2VsZiwgcGlwZWxpbmU9Tm9uZSk6CiAgICBpZiBwaXBlbGluZToKICAgICAgc2VsZi5fY2FjaGVkX3NvdXJjZV9zaWduYXR1cmUucG9wKHBpcGVsaW5lLCBOb25lKQogICAgZWxzZToKICAgICAgc2VsZi5fY2FjaGVkX3NvdXJjZV9zaWduYXR1cmUuY2xlYXIoKQoKICBkZWYgdHJhY2tfdXNlcl9waXBlbGluZXMoc2VsZik6CiAgICAiIiJSZWNvcmQgcmVmZXJlbmNlcyB0byBhbGwgdXNlci1kZWZpbmVkIHBpcGVsaW5lIGluc3RhbmNlcyB3YXRjaGVkIGluCiAgICBjdXJyZW50IGVudmlyb25tZW50LgoKICAgIEN1cnJlbnQgc3RhdGljIGdsb2JhbCBzaW5nbGV0b24gaW50ZXJhY3RpdmUgZW52aXJvbm1lbnQgaG9sZHMgcmVmZXJlbmNlcyB0bwogICAgYSBzZXQgb2YgcGlwZWxpbmUgaW5zdGFuY2VzIGRlZmluZWQgYnkgdGhlIHVzZXIgaW4gdGhlIHdhdGNoZWQgc2NvcGUuCiAgICBJbnRlcmFjdGl2ZSBCZWFtIGZlYXR1cmVzIGNvdWxkIHVzZSB0aGUgcmVmZXJlbmNlcyB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbgogICAgcGlwZWxpbmUgaXMgZGVmaW5lZCBieSB1c2VyIG9yIGltcGxpY2l0bHkgY3JlYXRlZCBieSBCZWFtIFNESyBvciBydW5uZXJzLAogICAgdGhlbiBoYW5kbGUgdGhlbSBkaWZmZXJlbnRseS4KCiAgICBUaGlzIGlzIGludm9rZWQgZXZlcnkgdGltZSBhIFBUcmFuc2Zvcm0gaXMgdG8gYmUgYXBwbGllZCBpZiB0aGUgY3VycmVudAogICAgY29kZSBleGVjdXRpb24gaXMgdW5kZXIgaXB5dGhvbiBkdWUgdG8gdGhlIHBvc3NpYmlsaXR5IHRoYXQgYW55IHVzZXItZGVmaW5lZAogICAgcGlwZWxpbmUgY2FuIGJlIHJlLWV2YWx1YXRlZCB0aHJvdWdoIG5vdGVib29rIGNlbGwgcmUtZXhlY3V0aW9uIGF0IGFueSB0aW1lLgoKICAgIEVhY2ggdGltZSB0aGlzIGlzIGludm9rZWQsIHRoZSB0cmFja2VkIHVzZXIgcGlwZWxpbmVzIGFyZSByZWZyZXNoZWQgdG8KICAgIHJlbW92ZSBhbnkgcGlwZWxpbmUgaW5zdGFuY2VzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB3YXRjaGVkIHNjb3BlLiBGb3IKICAgIGV4YW1wbGUsIGFmdGVyIGEgbm90ZWJvb2sgY2VsbCByZS1leGVjdXRpb24gcmUtZXZhbHVhdGluZyBhIHBpcGVsaW5lCiAgICBjcmVhdGlvbiwgdGhlIGxhc3QgcGlwZWxpbmUgcmVmZXJlbmNlIGNyZWF0ZWQgYnkgbGFzdCBldmFsdWF0aW9uIHdpbGwgbm90IGJlCiAgICBpbiB3YXRjaGVkIHNjb3BlIGFueW1vcmUuCiAgICAiIiIKICAgIHNlbGYuX3RyYWNrZWRfdXNlcl9waXBlbGluZXMgPSBzZXQoKQogICAgZm9yIHdhdGNoaW5nIGluIHNlbGYud2F0Y2hpbmcoKToKICAgICAgZm9yIF8sIHZhbCBpbiB3YXRjaGluZzoKICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgYmVhbS5waXBlbGluZS5QaXBlbGluZSk6CiAgICAgICAgICBzZWxmLl90cmFja2VkX3VzZXJfcGlwZWxpbmVzLmFkZCh2YWwpCgogIEBwcm9wZXJ0eQogIGRlZiB0cmFja2VkX3VzZXJfcGlwZWxpbmVzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3RyYWNrZWRfdXNlcl9waXBlbGluZXMKCiAgZGVmIG1hcmtfcGNvbGxlY3Rpb25fY29tcHV0ZWQoc2VsZiwgcGNvbGxzKToKICAgICIiIk1hcmtzIGNvbXB1dGF0aW9uIGNvbXBsZXRlbmVzcyBmb3IgdGhlIGdpdmVuIHBjb2xscy4KCiAgICBJbnRlcmFjdGl2ZSBCZWFtIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBjb21wdXRhdGlvbiBpcwogICAgbmVlZGVkIHRvIGludHJvc3BlY3QgdGhlIGRhdGEgb2YgYW55IGdpdmVuIFBDb2xsZWN0aW9uLgogICAgIiIiCiAgICBzZWxmLl9jb21wdXRlZF9wY29sbHMudXBkYXRlKHBjb2xsIGZvciBwY29sbCBpbiBwY29sbHMpCgogIGRlZiBldmljdF9jb21wdXRlZF9wY29sbGVjdGlvbnMoc2VsZik6CiAgICAiIiJFdmljdHMgYWxsIGNvbXB1dGVkIFBDb2xsZWN0aW9ucy4KCiAgICBJbnRlcmFjdGl2ZSBCZWFtIHdpbGwgdHJlYXQgbm9uZSBvZiB0aGUgUENvbGxlY3Rpb25zIGluIGFueSBnaXZlbiBwaXBlbGluZQogICAgYXMgY29tcGxldGVseSBjb21wdXRlZC4KICAgICIiIgogICAgc2VsZi5fY29tcHV0ZWRfcGNvbGxzID0gc2V0KCkKCiAgQHByb3BlcnR5CiAgZGVmIGNvbXB1dGVkX3Bjb2xsZWN0aW9ucyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9jb21wdXRlZF9wY29sbHMKlJV3JAEAAAAAAH2UKIwLY3VycmVudF9lbnaUalYxAQBLL0s0h5SMB25ld19lbnaUalYxAQBLN0s9h5SMH0ludGVyYWN0aXZlRW52aXJvbm1lbnQuX19pbml0X1+UalYxAQBLSkuMh5SMHkludGVyYWN0aXZlRW52aXJvbm1lbnQub3B0aW9uc5RqVjEBAEuOS5eHlIwqSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5pc19weV92ZXJzaW9uX3JlYWR5lGpWMQEAS5lLnIeUjCtJbnRlcmFjdGl2ZUVudmlyb25tZW50LmlzX2ludGVyYWN0aXZlX3JlYWR5lGpWMQEAS55LoYeUjCRJbnRlcmFjdGl2ZUVudmlyb25tZW50LmlzX2luX2lweXRob26UalYxAQBLo0umh5SMJUludGVyYWN0aXZlRW52aXJvbm1lbnQuaXNfaW5fbm90ZWJvb2uUalYxAQBLqEuvh5SMHkludGVyYWN0aXZlRW52aXJvbm1lbnQuY2xlYW51cJRqVjEBAEuxS7aHlIwcSW50ZXJhY3RpdmVFbnZpcm9ubWVudC53YXRjaJRqVjEBAEu4S8SHlIwfSW50ZXJhY3RpdmVFbnZpcm9ubWVudC53YXRjaGluZ5RqVjEBAEvGS9iHlIwoSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5zZXRfY2FjaGVfbWFuYWdlcpRqVjEBAEvaS+eHlIwkSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5jYWNoZV9tYW5hZ2VylGpWMQEAS+lL64eUjCpJbnRlcmFjdGl2ZUVudmlyb25tZW50LnNldF9waXBlbGluZV9yZXN1bHSUalYxAQBL7Uv0h5SMLEludGVyYWN0aXZlRW52aXJvbm1lbnQuZXZpY3RfcGlwZWxpbmVfcmVzdWx0lGpWMQEAS/ZL+IeUjCZJbnRlcmFjdGl2ZUVudmlyb25tZW50LnBpcGVsaW5lX3Jlc3VsdJRqVjEBAEv6S/yHlIwxSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5zZXRfYmFja2dyb3VuZF9jYWNoaW5nX2pvYpRqVjEBAEv+TQUBh5SMMUludGVyYWN0aXZlRW52aXJvbm1lbnQuZ2V0X2JhY2tncm91bmRfY2FjaGluZ19qb2KUalYxAQBNBwFNCQGHlIw5SW50ZXJhY3RpdmVFbnZpcm9ubWVudC5zZXRfdGVzdF9zdHJlYW1fc2VydmljZV9jb250cm9sbGVylGpWMQEATQsBTRABh5SMOUludGVyYWN0aXZlRW52aXJvbm1lbnQuZ2V0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcpRqVjEBAE0SAU0XAYeUjDtJbnRlcmFjdGl2ZUVudmlyb25tZW50LmV2aWN0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcpRqVjEBAE0ZAU0eAYeUjCRJbnRlcmFjdGl2ZUVudmlyb25tZW50LmlzX3Rlcm1pbmF0ZWSUalYxAQBNIAFNJgGHlIwySW50ZXJhY3RpdmVFbnZpcm9ubWVudC5zZXRfY2FjaGVkX3NvdXJjZV9zaWduYXR1cmWUalYxAQBNKAFNKQGHlIwySW50ZXJhY3RpdmVFbnZpcm9ubWVudC5nZXRfY2FjaGVkX3NvdXJjZV9zaWduYXR1cmWUalYxAQBNKwFNLAGHlIw0SW50ZXJhY3RpdmVFbnZpcm9ubWVudC5ldmljdF9jYWNoZWRfc291cmNlX3NpZ25hdHVyZZRqVjEBAE0uAU0yAYeUjCtJbnRlcmFjdGl2ZUVudmlyb25tZW50LnRyYWNrX3VzZXJfcGlwZWxpbmVzlGpWMQEATTQBTUwBh5SMLUludGVyYWN0aXZlRW52aXJvbm1lbnQudHJhY2tlZF91c2VyX3BpcGVsaW5lc5RqVjEBAE1OAU1QAYeUjDBJbnRlcmFjdGl2ZUVudmlyb25tZW50Lm1hcmtfcGNvbGxlY3Rpb25fY29tcHV0ZWSUalYxAQBNUgFNWAGHlIwySW50ZXJhY3RpdmVFbnZpcm9ubWVudC5ldmljdF9jb21wdXRlZF9wY29sbGVjdGlvbnOUalYxAQBNWgFNYAGHlIwsSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5jb21wdXRlZF9wY29sbGVjdGlvbnOUalYxAQBNYgFNZAGHlIwWSW50ZXJhY3RpdmVFbnZpcm9ubWVudJRqXTEBAEtATWQBh5R1fZQojAtjdXJyZW50X2VudpRqRQMAAIwHbmV3X2VudpRqRQMAAIwWSW50ZXJhY3RpdmVFbnZpcm9ubWVudJRqRQMAAIweSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5jbGVhbnVwlGpFAwAAjBxJbnRlcmFjdGl2ZUVudmlyb25tZW50LndhdGNolGpFAwAAjB9JbnRlcmFjdGl2ZUVudmlyb25tZW50LndhdGNoaW5nlGpFAwAAjChJbnRlcmFjdGl2ZUVudmlyb25tZW50LnNldF9jYWNoZV9tYW5hZ2VylGpFAwAAjCRJbnRlcmFjdGl2ZUVudmlyb25tZW50LmNhY2hlX21hbmFnZXKUakUDAACMKkludGVyYWN0aXZlRW52aXJvbm1lbnQuc2V0X3BpcGVsaW5lX3Jlc3VsdJRqRQMAAIwsSW50ZXJhY3RpdmVFbnZpcm9ubWVudC5ldmljdF9waXBlbGluZV9yZXN1bHSUakUDAACMJkludGVyYWN0aXZlRW52aXJvbm1lbnQucGlwZWxpbmVfcmVzdWx0lGpFAwAAjDFJbnRlcmFjdGl2ZUVudmlyb25tZW50LnNldF9iYWNrZ3JvdW5kX2NhY2hpbmdfam9ilGpFAwAAjDFJbnRlcmFjdGl2ZUVudmlyb25tZW50LmdldF9iYWNrZ3JvdW5kX2NhY2hpbmdfam9ilGpFAwAAjDlJbnRlcmFjdGl2ZUVudmlyb25tZW50LnNldF90ZXN0X3N0cmVhbV9zZXJ2aWNlX2NvbnRyb2xsZXKUakUDAACMOUludGVyYWN0aXZlRW52aXJvbm1lbnQuZ2V0X3Rlc3Rfc3RyZWFtX3NlcnZpY2VfY29udHJvbGxlcpRqRQMAAIw7SW50ZXJhY3RpdmVFbnZpcm9ubWVudC5ldmljdF90ZXN0X3N0cmVhbV9zZXJ2aWNlX2NvbnRyb2xsZXKUakUDAACMJEludGVyYWN0aXZlRW52aXJvbm1lbnQuaXNfdGVybWluYXRlZJRqRQMAAIwySW50ZXJhY3RpdmVFbnZpcm9ubWVudC5zZXRfY2FjaGVkX3NvdXJjZV9zaWduYXR1cmWUakUDAACMMkludGVyYWN0aXZlRW52aXJvbm1lbnQuZ2V0X2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJllGpFAwAAjDRJbnRlcmFjdGl2ZUVudmlyb25tZW50LmV2aWN0X2NhY2hlZF9zb3VyY2Vfc2lnbmF0dXJllGpFAwAAjCtJbnRlcmFjdGl2ZUVudmlyb25tZW50LnRyYWNrX3VzZXJfcGlwZWxpbmVzlGpFAwAAjDBJbnRlcmFjdGl2ZUVudmlyb25tZW50Lm1hcmtfcGNvbGxlY3Rpb25fY29tcHV0ZWSUakUDAACMMkludGVyYWN0aXZlRW52aXJvbm1lbnQuZXZpY3RfY29tcHV0ZWRfcGNvbGxlY3Rpb25zlGpFAwAAdYw3YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudJR0lIwyYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXKUKFjsIAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIHJ1bm5lciB0aGF0IGFsbG93cyBydW5uaW5nIG9mIEJlYW0gcGlwZWxpbmVzIGludGVyYWN0aXZlbHkuCgpUaGlzIG1vZHVsZSBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgbG9nZ2luZwoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcnVubmVycwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgRGVidWdPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5kaXJlY3QgaW1wb3J0IGRpcmVjdF9ydW5uZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBjYWNoZV9tYW5hZ2VyIGFzIGNhY2hlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZSBpbXBvcnQgaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQgYXMgaWUKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBwaXBlbGluZV9pbnN0cnVtZW50IGFzIGluc3QKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBiYWNrZ3JvdW5kX2NhY2hpbmdfam9iCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5kaXNwbGF5IGltcG9ydCBwaXBlbGluZV9ncmFwaAoKIyBzaXplIG9mIFBDb2xsZWN0aW9uIHNhbXBsZXMgY2FjaGVkLgpTQU1QTEVfU0laRSA9IDgKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBJbnRlcmFjdGl2ZVJ1bm5lcihydW5uZXJzLlBpcGVsaW5lUnVubmVyKToKICAiIiJBbiBpbnRlcmFjdGl2ZSBydW5uZXIgZm9yIEJlYW0gUHl0aG9uIHBpcGVsaW5lcy4KCiAgQWxsb3dzIGludGVyYWN0aXZlbHkgYnVpbGRpbmcgYW5kIHJ1bm5pbmcgQmVhbSBQeXRob24gcGlwZWxpbmVzLgogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgdW5kZXJseWluZ19ydW5uZXI9Tm9uZSwKICAgICAgY2FjaGVfZGlyPU5vbmUsCiAgICAgIGNhY2hlX2Zvcm1hdD0ndGV4dCcsCiAgICAgIHJlbmRlcl9vcHRpb249Tm9uZSwKICAgICAgc2tpcF9kaXNwbGF5PUZhbHNlLAogICAgICBmb3JjZV9jb21wdXRlPVRydWUsCiAgICAgIGJsb2NraW5nPVRydWUpOgogICAgIiIiQ29uc3RydWN0b3Igb2YgSW50ZXJhY3RpdmVSdW5uZXIuCgogICAgQXJnczoKICAgICAgdW5kZXJseWluZ19ydW5uZXI6IChydW5uZXIuUGlwZWxpbmVSdW5uZXIpCiAgICAgIGNhY2hlX2RpcjogKHN0cikgdGhlIGRpcmVjdG9yeSB3aGVyZSBQQ29sbGVjdGlvbiBjYWNoZXMgYXJlIGtlcHQKICAgICAgY2FjaGVfZm9ybWF0OiAoc3RyKSB0aGUgZmlsZSBmb3JtYXQgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3Igc2F2aW5nCiAgICAgICAgICBQQ29sbGVjdGlvbiBjYWNoZXMuIEF2YWlsYWJsZSBvcHRpb25zIGFyZSAndGV4dCcgYW5kICd0ZnJlY29yZCcuCiAgICAgIHJlbmRlcl9vcHRpb246IChzdHIpIHRoaXMgcGFyYW1ldGVyIGRlY2lkZXMgaG93IHRoZSBwaXBlbGluZSBncmFwaCBpcwogICAgICAgICAgcmVuZGVyZWQuIFNlZSBkaXNwbGF5LnBpcGVsaW5lX2dyYXBoX3JlbmRlcmVyIGZvciBhdmFpbGFibGUgb3B0aW9ucy4KICAgICAgc2tpcF9kaXNwbGF5OiAoYm9vbCkgd2hldGhlciB0byBza2lwIGRpc3BsYXkgb3BlcmF0aW9ucyB3aGVuIHJ1bm5pbmcgdGhlCiAgICAgICAgICBwaXBlbGluZS4gVXNlZnVsIGlmIHJ1bm5pbmcgbGFyZ2UgcGlwZWxpbmVzIHdoZW4gZGlzcGxheSBpcyBub3QKICAgICAgICAgIG5lZWRlZC4KICAgICAgZm9yY2VfY29tcHV0ZTogKGJvb2wpIHdoZXRoZXIgc2VxdWVudGlhbCBwaXBlbGluZSBydW5zIGNhbiB1c2UgY2FjaGVkIGRhdGEKICAgICAgICAgIG9mIFBDb2xsZWN0aW9ucyBjb21wdXRlZCBmcm9tIHRoZSBwcmV2aW91cyBydW5zIGluY2x1ZGluZyBzaG93IEFQSQogICAgICAgICAgaW52b2NhdGlvbiBmcm9tIGludGVyYWN0aXZlX2JlYW0gbW9kdWxlLiBJZiBUcnVlLCBhbHdheXMgcnVuIHRoZSB3aG9sZQogICAgICAgICAgcGlwZWxpbmUgYW5kIGNvbXB1dGUgZGF0YSBmb3IgUENvbGxlY3Rpb25zIGZvcmNlZnVsbHkuIElmIEZhbHNlLCB1c2UKICAgICAgICAgIGF2YWlsYWJsZSBkYXRhIGFuZCBydW4gbWluaW11bSBwaXBlbGluZSBmcmFnbWVudCB0byBvbmx5IGNvbXB1dGUgZGF0YQogICAgICAgICAgbm90IGF2YWlsYWJsZS4KICAgICAgYmxvY2tpbmc6IChib29sKSB3aGV0aGVyIHRoZSBwaXBlbGluZSBydW4gc2hvdWxkIGJlIGJsb2NraW5nIG9yIG5vdC4KICAgICIiIgogICAgc2VsZi5fdW5kZXJseWluZ19ydW5uZXIgPSAoCiAgICAgICAgdW5kZXJseWluZ19ydW5uZXIgb3IgZGlyZWN0X3J1bm5lci5EaXJlY3RSdW5uZXIoKSkKICAgIGlmIG5vdCBpZS5jdXJyZW50X2VudigpLmNhY2hlX21hbmFnZXIoKToKICAgICAgaWUuY3VycmVudF9lbnYoKS5zZXRfY2FjaGVfbWFuYWdlcigKICAgICAgICAgIGNhY2hlLkZpbGVCYXNlZENhY2hlTWFuYWdlcihjYWNoZV9kaXIsIGNhY2hlX2Zvcm1hdCkpCiAgICBzZWxmLl9jYWNoZV9tYW5hZ2VyID0gaWUuY3VycmVudF9lbnYoKS5jYWNoZV9tYW5hZ2VyKCkKICAgIHNlbGYuX3JlbmRlcl9vcHRpb24gPSByZW5kZXJfb3B0aW9uCiAgICBzZWxmLl9pbl9zZXNzaW9uID0gRmFsc2UKICAgIHNlbGYuX3NraXBfZGlzcGxheSA9IHNraXBfZGlzcGxheQogICAgc2VsZi5fZm9yY2VfY29tcHV0ZSA9IGZvcmNlX2NvbXB1dGUKICAgIHNlbGYuX2Jsb2NraW5nID0gYmxvY2tpbmcKCiAgZGVmIGlzX2ZuYXBpX2NvbXBhdGlibGUoc2VsZik6CiAgICAjIFRPRE8oQkVBTS04NDM2KTogcmV0dXJuIHNlbGYuX3VuZGVybHlpbmdfcnVubmVyLmlzX2ZuYXBpX2NvbXBhdGlibGUoKQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBzZXRfcmVuZGVyX29wdGlvbihzZWxmLCByZW5kZXJfb3B0aW9uKToKICAgICIiIlNldHMgdGhlIHJlbmRlcmluZyBvcHRpb24uCgogICAgQXJnczoKICAgICAgcmVuZGVyX29wdGlvbjogKHN0cikgdGhpcyBwYXJhbWV0ZXIgZGVjaWRlcyBob3cgdGhlIHBpcGVsaW5lIGdyYXBoIGlzCiAgICAgICAgICByZW5kZXJlZC4gU2VlIGRpc3BsYXkucGlwZWxpbmVfZ3JhcGhfcmVuZGVyZXIgZm9yIGF2YWlsYWJsZSBvcHRpb25zLgogICAgIiIiCiAgICBzZWxmLl9yZW5kZXJfb3B0aW9uID0gcmVuZGVyX29wdGlvbgoKICBkZWYgc3RhcnRfc2Vzc2lvbihzZWxmKToKICAgICIiIlN0YXJ0IHRoZSBzZXNzaW9uIHRoYXQga2VlcHMgYmFjay1lbmQgbWFuYWdlcnMgYW5kIHdvcmtlcnMgYWxpdmUuCiAgICAiIiIKICAgIGlmIHNlbGYuX2luX3Nlc3Npb246CiAgICAgIHJldHVybgoKICAgIGVudGVyID0gZ2V0YXR0cihzZWxmLl91bmRlcmx5aW5nX3J1bm5lciwgJ19fZW50ZXJfXycsIE5vbmUpCiAgICBpZiBlbnRlciBpcyBub3QgTm9uZToKICAgICAgX0xPR0dFUi5pbmZvKCdTdGFydGluZyBzZXNzaW9uLicpCiAgICAgIHNlbGYuX2luX3Nlc3Npb24gPSBUcnVlCiAgICAgIGVudGVyKCkKICAgIGVsc2U6CiAgICAgIF9MT0dHRVIuZXJyb3IoJ0tlZXAgYWxpdmUgbm90IHN1cHBvcnRlZC4nKQoKICBkZWYgZW5kX3Nlc3Npb24oc2VsZik6CiAgICAiIiJFbmQgdGhlIHNlc3Npb24gdGhhdCBrZWVwcyBiYWNrZW5kIG1hbmFnZXJzIGFuZCB3b3JrZXJzIGFsaXZlLgogICAgIiIiCiAgICBpZiBub3Qgc2VsZi5faW5fc2Vzc2lvbjoKICAgICAgcmV0dXJuCgogICAgZXhpdCA9IGdldGF0dHIoc2VsZi5fdW5kZXJseWluZ19ydW5uZXIsICdfX2V4aXRfXycsIE5vbmUpCiAgICBpZiBleGl0IGlzIG5vdCBOb25lOgogICAgICBzZWxmLl9pbl9zZXNzaW9uID0gRmFsc2UKICAgICAgX0xPR0dFUi5pbmZvKCdFbmRpbmcgc2Vzc2lvbi4nKQogICAgICBleGl0KE5vbmUsIE5vbmUsIE5vbmUpCgogIGRlZiBjbGVhbnVwKHNlbGYpOgogICAgc2VsZi5fY2FjaGVfbWFuYWdlci5jbGVhbnVwKCkKCiAgZGVmIGFwcGx5KHNlbGYsIHRyYW5zZm9ybSwgcHZhbHVlaXNoLCBvcHRpb25zKToKICAgICMgVE9ETyhxaW55ZWxpLCBCRUFNLTY0Nik6IFJlbW92ZSBydW5uZXIgaW50ZXJjZXB0aW9uIG9mIGFwcGx5LgogICAgIyBUT0RPKEJFQU0tOTMyMik6IE9uY2UgbmVzdGVkIFBDb2xsZWN0aW9uIG5hbWluZyBzY2hlbWVzIGhhdmUgYmVlbiBpcm9uZWQKICAgICMgb3V0LCB0aGlzIGNhbiBiZSByZW1vdmVkLgogICAgb3B0aW9ucy52aWV3X2FzKERlYnVnT3B0aW9ucykuYWRkX2V4cGVyaW1lbnQoCiAgICAgICAgJ3Bhc3N0aHJvdWdoX3Bjb2xsZWN0aW9uX291dHB1dF9pZHMnKQogICAgcmV0dXJuIHNlbGYuX3VuZGVybHlpbmdfcnVubmVyLmFwcGx5KHRyYW5zZm9ybSwgcHZhbHVlaXNoLCBvcHRpb25zKQoKICBkZWYgcnVuX3BpcGVsaW5lKHNlbGYsIHBpcGVsaW5lLCBvcHRpb25zKToKICAgIGlmIHNlbGYuX2ZvcmNlX2NvbXB1dGU6CiAgICAgIGllLmN1cnJlbnRfZW52KCkuZXZpY3RfY29tcHV0ZWRfcGNvbGxlY3Rpb25zKCkKCiAgICBwaXBlbGluZV9pbnN0cnVtZW50ID0gaW5zdC5idWlsZF9waXBlbGluZV9pbnN0cnVtZW50KHBpcGVsaW5lLCBvcHRpb25zKQoKICAgICMgVGhlIHVzZXJfcGlwZWxpbmUgYW5hbHl6ZWQgbWlnaHQgYmUgTm9uZSBpZiB0aGUgcGlwZWxpbmUgZ2l2ZW4gaGFzIG5vdGhpbmcKICAgICMgdG8gYmUgY2FjaGVkIGFuZCB0cmFjaW5nIGJhY2sgdG8gdGhlIHVzZXIgZGVmaW5lZCBwaXBlbGluZSBpcyBpbXBvc3NpYmxlLgogICAgIyBXaGVuIGl0J3MgTm9uZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWNoZSBpbmNsdWRpbmcgdGhlIGJhY2tncm91bmQKICAgICMgY2FjaGluZyBqb2IgYW5kIG5vIHJlc3VsdCB0byB0cmFjayBzaW5jZSBubyBiYWNrZ3JvdW5kIGNhY2hpbmcgam9iIGlzCiAgICAjIHN0YXJ0ZWQgYXQgYWxsLgogICAgdXNlcl9waXBlbGluZSA9IHBpcGVsaW5lX2luc3RydW1lbnQudXNlcl9waXBlbGluZQogICAgaWYgdXNlcl9waXBlbGluZToKICAgICAgIyBTaG91bGQgdXNlIHRoZSB1bmRlcmx5aW5nIHJ1bm5lciBhbmQgcnVuIGFzeW5jaHJvbm91c2x5LgogICAgICBiYWNrZ3JvdW5kX2NhY2hpbmdfam9iLmF0dGVtcHRfdG9fcnVuX2JhY2tncm91bmRfY2FjaGluZ19qb2IoCiAgICAgICAgICBzZWxmLl91bmRlcmx5aW5nX3J1bm5lciwgdXNlcl9waXBlbGluZSwgb3B0aW9ucykKCiAgICBwaXBlbGluZV90b19leGVjdXRlID0gYmVhbS5waXBlbGluZS5QaXBlbGluZS5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgcGlwZWxpbmVfaW5zdHJ1bWVudC5pbnN0cnVtZW50ZWRfcGlwZWxpbmVfcHJvdG8oKSwKICAgICAgICBzZWxmLl91bmRlcmx5aW5nX3J1bm5lciwKICAgICAgICBvcHRpb25zKQoKICAgIGlmIG5vdCBzZWxmLl9za2lwX2Rpc3BsYXk6CiAgICAgIGFfcGlwZWxpbmVfZ3JhcGggPSBwaXBlbGluZV9ncmFwaC5QaXBlbGluZUdyYXBoKAogICAgICAgICAgcGlwZWxpbmVfaW5zdHJ1bWVudC5vcmlnaW5hbF9waXBlbGluZSwKICAgICAgICAgIHJlbmRlcl9vcHRpb249c2VsZi5fcmVuZGVyX29wdGlvbikKICAgICAgYV9waXBlbGluZV9ncmFwaC5kaXNwbGF5X2dyYXBoKCkKCiAgICBtYWluX2pvYl9yZXN1bHQgPSBQaXBlbGluZVJlc3VsdCgKICAgICAgICBwaXBlbGluZV90b19leGVjdXRlLnJ1bigpLCBwaXBlbGluZV9pbnN0cnVtZW50KQogICAgIyBJbiBhZGRpdGlvbiB0byB0aGlzIHBpcGVsaW5lIHJlc3VsdCBzZXR0aW5nLCByZWR1bmRhbnQgcmVzdWx0IHNldHRpbmcgZnJvbQogICAgIyBvdXRlciBzY29wZXMgYXJlIGFsc28gcmVjb21tZW5kZWQgc2luY2UgdGhlIHVzZXJfcGlwZWxpbmUgbWlnaHQgbm90IGJlCiAgICAjIGF2YWlsYWJsZSBmcm9tIHdpdGhpbiB0aGlzIHNjb3BlLgogICAgaWYgdXNlcl9waXBlbGluZToKICAgICAgaWUuY3VycmVudF9lbnYoKS5zZXRfcGlwZWxpbmVfcmVzdWx0KHVzZXJfcGlwZWxpbmUsIG1haW5fam9iX3Jlc3VsdCkKCiAgICBpZiBzZWxmLl9ibG9ja2luZzoKICAgICAgbWFpbl9qb2JfcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKCiAgICBpZiBtYWluX2pvYl9yZXN1bHQuc3RhdGUgaXMgYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVN0YXRlLkRPTkU6CiAgICAgICMgcHlsaW50OiBkaXNhYmxlPWRpY3QtdmFsdWVzLW5vdC1pdGVyYXRpbmcKICAgICAgaWUuY3VycmVudF9lbnYoKS5tYXJrX3Bjb2xsZWN0aW9uX2NvbXB1dGVkKAogICAgICAgICAgcGlwZWxpbmVfaW5zdHJ1bWVudC5ydW5uZXJfcGNvbGxfdG9fdXNlcl9wY29sbC52YWx1ZXMoKSkKCiAgICByZXR1cm4gbWFpbl9qb2JfcmVzdWx0CgoKY2xhc3MgUGlwZWxpbmVSZXN1bHQoYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJlc3VsdCk6CiAgIiIiUHJvdmlkZXMgYWNjZXNzIHRvIGluZm9ybWF0aW9uIGFib3V0IGEgcGlwZWxpbmUuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHVuZGVybHlpbmdfcmVzdWx0LCBwaXBlbGluZV9pbnN0cnVtZW50KToKICAgICIiIkNvbnN0cnVjdG9yIG9mIFBpcGVsaW5lUmVzdWx0LgoKICAgIEFyZ3M6CiAgICAgIHVuZGVybHlpbmdfcmVzdWx0OiAoUGlwZWxpbmVSZXN1bHQpIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIHVuZGVybHlpbmcKICAgICAgICAgIHJ1bm5lciBydW5uaW5nIHRoZSBwaXBlbGluZS4KICAgICAgcGlwZWxpbmVfaW5zdHJ1bWVudDogKFBpcGVsaW5lSW5zdHJ1bWVudCkgcGlwZWxpbmUgaW5zdHJ1bWVudCBkZXNjcmliaW5nCiAgICAgICAgICB0aGUgcGlwZWxpbmUgYmVpbmcgZXhlY3V0ZWQgd2l0aCBpbnRlcmFjdGl2aXR5IGFwcGxpZWQgYW5kIHJlbGF0ZWQKICAgICAgICAgIG1ldGFkYXRhIGluY2x1ZGluZyB3aGVyZSB0aGUgaW50ZXJhY3Rpdml0eS1iYWNraW5nIGNhY2hlIGxpZXMuCiAgICAiIiIKICAgIHN1cGVyKFBpcGVsaW5lUmVzdWx0LCBzZWxmKS5fX2luaXRfXyh1bmRlcmx5aW5nX3Jlc3VsdC5zdGF0ZSkKICAgIHNlbGYuX3VuZGVybHlpbmdfcmVzdWx0ID0gdW5kZXJseWluZ19yZXN1bHQKICAgIHNlbGYuX3BpcGVsaW5lX2luc3RydW1lbnQgPSBwaXBlbGluZV9pbnN0cnVtZW50CgogIGRlZiB3YWl0X3VudGlsX2ZpbmlzaChzZWxmKToKICAgIHNlbGYuX3VuZGVybHlpbmdfcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKCiAgZGVmIGdldChzZWxmLCBwY29sbCk6CiAgICBrZXkgPSBzZWxmLl9waXBlbGluZV9pbnN0cnVtZW50LmNhY2hlX2tleShwY29sbCkKICAgIGlmIGllLmN1cnJlbnRfZW52KCkuY2FjaGVfbWFuYWdlcigpLmV4aXN0cygnZnVsbCcsIGtleSk6CiAgICAgIHBjb2xsX2xpc3QsIF8gPSBpZS5jdXJyZW50X2VudigpLmNhY2hlX21hbmFnZXIoKS5yZWFkKCdmdWxsJywga2V5KQogICAgICByZXR1cm4gcGNvbGxfbGlzdAogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignUENvbGxlY3Rpb24gbm90IGF2YWlsYWJsZSwgcGxlYXNlIHJ1biB0aGUgcGlwZWxpbmUuJykKCiAgZGVmIGNhbmNlbChzZWxmKToKICAgIHNlbGYuX3VuZGVybHlpbmdfcmVzdWx0LmNhbmNlbCgpCpR9lCiMGkludGVyYWN0aXZlUnVubmVyLl9faW5pdF9flGpWMQEASzRLW4eUjCVJbnRlcmFjdGl2ZVJ1bm5lci5pc19mbmFwaV9jb21wYXRpYmxllGpWMQEAS11LX4eUjCNJbnRlcmFjdGl2ZVJ1bm5lci5zZXRfcmVuZGVyX29wdGlvbpRqVjEBAEthS2iHlIwfSW50ZXJhY3RpdmVSdW5uZXIuc3RhcnRfc2Vzc2lvbpRqVjEBAEtqS3aHlIwdSW50ZXJhY3RpdmVSdW5uZXIuZW5kX3Nlc3Npb26UalYxAQBLeEuCh5SMGUludGVyYWN0aXZlUnVubmVyLmNsZWFudXCUalYxAQBLhEuFh5SMF0ludGVyYWN0aXZlUnVubmVyLmFwcGx5lGpWMQEAS4dLjYeUjB5JbnRlcmFjdGl2ZVJ1bm5lci5ydW5fcGlwZWxpbmWUalYxAQBLj0u7h5SMEUludGVyYWN0aXZlUnVubmVylGpdMQEASy9Lu4eUjBdQaXBlbGluZVJlc3VsdC5fX2luaXRfX5RqVjEBAEvAS8yHlIwgUGlwZWxpbmVSZXN1bHQud2FpdF91bnRpbF9maW5pc2iUalYxAQBLzkvPh5SMElBpcGVsaW5lUmVzdWx0LmdldJRqVjEBAEvRS9eHlIwVUGlwZWxpbmVSZXN1bHQuY2FuY2VslGpWMQEAS9lL2oeUjA5QaXBlbGluZVJlc3VsdJRqXTEBAEu+S9qHlHV9lCiMEUludGVyYWN0aXZlUnVubmVylGqZAwAAjCVJbnRlcmFjdGl2ZVJ1bm5lci5pc19mbmFwaV9jb21wYXRpYmxllGqZAwAAjCNJbnRlcmFjdGl2ZVJ1bm5lci5zZXRfcmVuZGVyX29wdGlvbpRqmQMAAIwfSW50ZXJhY3RpdmVSdW5uZXIuc3RhcnRfc2Vzc2lvbpRqmQMAAIwdSW50ZXJhY3RpdmVSdW5uZXIuZW5kX3Nlc3Npb26UapkDAACMGUludGVyYWN0aXZlUnVubmVyLmNsZWFudXCUapkDAACMF0ludGVyYWN0aXZlUnVubmVyLmFwcGx5lGqZAwAAjB5JbnRlcmFjdGl2ZVJ1bm5lci5ydW5fcGlwZWxpbmWUapkDAACMDlBpcGVsaW5lUmVzdWx0lGqZAwAAjCBQaXBlbGluZVJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaJRqmQMAAIwSUGlwZWxpbmVSZXN1bHQuZ2V0lGqZAwAAjBVQaXBlbGluZVJlc3VsdC5jYW5jZWyUapkDAAB1jDJhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLmludGVyYWN0aXZlX3J1bm5lcpR0lIw3YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmNhcHR1cmVfY29udHJvbJQoWIYMAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1vZHVsZSB0byBjb250cm9sIGhvdyBJbnRlcmFjdGl2ZSBCZWFtIGNhcHR1cmVzIGRhdGEgZnJvbSBzb3VyY2VzIGZvcgpkZXRlcm1pbmlzdGljIHJlcGxheWFibGUgUENvbGxlY3Rpb24gZXZhbHVhdGlvbiBhbmQgcGlwZWxpbmUgcnVucy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmdjcC5wdWJzdWIgaW1wb3J0IFJlYWRGcm9tUHViU3ViCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZSBpbXBvcnQgYmFja2dyb3VuZF9jYWNoaW5nX2pvYiBhcyBiY2oKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBpbnRlcmFjdGl2ZV9lbnZpcm9ubWVudCBhcyBpZQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIENhcHR1cmVDb250cm9sKG9iamVjdCk6CiAgIiIiT3B0aW9ucyBhbmQgdGhlaXIgdXRpbGl0aWVzIHRoYXQgY29udHJvbHMgaG93IEludGVyYWN0aXZlIEJlYW0gY2FwdHVyZXMKICBkZXRlcm1pbmlzdGljIHJlcGxheWFibGUgZGF0YSBmcm9tIHNvdXJjZXMuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgc2VsZi5fZW5hYmxlX2NhcHR1cmVfcmVwbGF5ID0gVHJ1ZQogICAgc2VsZi5fY2FwdHVyYWJsZV9zb3VyY2VzID0gewogICAgICAgIFJlYWRGcm9tUHViU3ViLAogICAgfQogICAgc2VsZi5fY2FwdHVyZV9kdXJhdGlvbiA9IHRpbWVkZWx0YShzZWNvbmRzPTUpCiAgICBzZWxmLl9jYXB0dXJlX3NpemUgPSAxZTkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgIyBUT0RPKEJFQU0tODMzNSk6IGFkZCBjYXB0dXJlX3NpemUgaW4gdGhlIGZvcm1hdCBvbmNlIGl0J3Mgc3VwcG9ydGVkLgogICAgcmV0dXJuICgKICAgICAgICAnQSBzZWdtZW50IG9mIGRhdGEgd2lsbCBiZSByZWNvcmRlZCBmb3Ige30gc2Vjb25kcywgZm9yIGFsbCB7fSB0eXBlZCcKICAgICAgICAnIHNvdXJjZXMgaW4gdGhlIHBpcGVsaW5lLicuZm9ybWF0KAogICAgICAgICAgICBzZWxmLl9jYXB0dXJlX2R1cmF0aW9uLnRvdGFsX3NlY29uZHMoKSwgc2VsZi5fY2FwdHVyYWJsZV9zb3VyY2VzKSkKCiAgZGVmIGlzX2NhcHR1cmVfc2l6ZV9yZWFjaGVkKHNlbGYpOgogICAgIiIiRGV0ZXJtaW5lcyBpZiB0aGUgY2FwdHVyZSBzaXplIGhhcyBiZWVuIHJlYWNoZWQuIiIiCiAgICBjYWNoZV9tYW5hZ2VyID0gaWUuY3VycmVudF9lbnYoKS5jYWNoZV9tYW5hZ2VyKCkKICAgICMgVE9ETyhCRUFNLTgzMzUpOiBpbXBsZW1lbnQgdGhlIGNhcHR1cmVfc2l6ZSBhdHRyaWJ1dGUgd2hlbiBzdHJlYW1pbmdfY2FjaGUKICAgICMgaW1wbGVtZW50cyBjYWNoZV9tYW5hZ2VyLgogICAgaWYgaGFzYXR0cihjYWNoZV9tYW5hZ2VyLCAnY2FwdHVyZV9zaXplJyk6CiAgICAgIHJldHVybiBjYWNoZV9tYW5hZ2VyLmNhcHR1cmVfc2l6ZSA+PSBzZWxmLl9jYXB0dXJlX3NpemUKICAgIHJldHVybiBGYWxzZQoKCmRlZiBldmljdF9jYXB0dXJlZF9kYXRhKCk6CiAgIiIiRXZpY3RzIGFsbCBkZXRlcm1pbmlzdGljIHJlcGxheWFibGUgZGF0YSB0aGF0IGhhdmUgYmVlbiBjYXB0dXJlZCBieQogIEludGVyYWN0aXZlIEJlYW0uIEluIGZ1dHVyZSBQQ29sbGVjdGlvbiBldmFsdWF0aW9uL3Zpc3VhbGl6YXRpb24gYW5kIHBpcGVsaW5lCiAgcnVucywgSW50ZXJhY3RpdmUgQmVhbSB3aWxsIGNhcHR1cmUgZnJlc2ggZGF0YS4iIiIKICBpZiBpZS5jdXJyZW50X2VudigpLm9wdGlvbnMuZW5hYmxlX2NhcHR1cmVfcmVwbGF5OgogICAgIyBUT0RPKEJFQU0tODMzNSk6IGRpc3BsYXkgcmF0aGVyIHRoYW4gbG9nZ2luZyB3aGVuIGlzX2luX25vdGVib29rLgogICAgX0xPR0dFUi5pbmZvKAogICAgICAgICdZb3UgaGF2ZSByZXF1ZXN0ZWQgSW50ZXJhY3RpdmUgQmVhbSB0byBldmljdCBhbGwgY2FwdHVyZWQgJwogICAgICAgICdkYXRhIHRoYXQgY291bGQgYmUgZGV0ZXJtaW5pc3RpY2FsbHkgcmVwbGF5ZWQgYW1vbmcgbXVsdGlwbGUgJwogICAgICAgICdwaXBlbGluZSBydW5zLicpCiAgaWUuY3VycmVudF9lbnYoKS50cmFja191c2VyX3BpcGVsaW5lcygpCiAgZm9yIHVzZXJfcGlwZWxpbmUgaW4gaWUuY3VycmVudF9lbnYoKS50cmFja2VkX3VzZXJfcGlwZWxpbmVzOgogICAgYmNqLmF0dGVtcHRfdG9fY2FuY2VsX2JhY2tncm91bmRfY2FjaGluZ19qb2IodXNlcl9waXBlbGluZSkKICAgIGJjai5hdHRlbXB0X3RvX3N0b3BfdGVzdF9zdHJlYW1fc2VydmljZSh1c2VyX3BpcGVsaW5lKQogIGllLmN1cnJlbnRfZW52KCkuY2xlYW51cCgpCpR9lCiMF0NhcHR1cmVDb250cm9sLl9faW5pdF9flGpWMQEASylLL4eUjBdDYXB0dXJlQ29udHJvbC5fX3JlcHJfX5RqVjEBAEsxSzaHlIwmQ2FwdHVyZUNvbnRyb2wuaXNfY2FwdHVyZV9zaXplX3JlYWNoZWSUalYxAQBLOEs/h5SMDkNhcHR1cmVDb250cm9slGpdMQEASyZLP4eUjBNldmljdF9jYXB0dXJlZF9kYXRhlGpWMQEAS0JLUIeUdX2UKIwOQ2FwdHVyZUNvbnRyb2yUajEDAACMJkNhcHR1cmVDb250cm9sLmlzX2NhcHR1cmVfc2l6ZV9yZWFjaGVklGoxAwAAjBNldmljdF9jYXB0dXJlZF9kYXRhlGoxAwAAdYw3YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmNhcHR1cmVfY29udHJvbJR0lIw7YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5vcHRpb25zLmludGVyYWN0aXZlX29wdGlvbnOUKFi5BQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJNb2R1bGUgdG8gZXhwb3NlIG9wdGlvbnMgdGhhdCBjb250cm9sIGhvdyBJbnRlcmFjdGl2ZSBCZWFtIHdvcmtzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucyBpbXBvcnQgY2FwdHVyZV9jb250cm9sCgoKY2xhc3MgSW50ZXJhY3RpdmVPcHRpb25zKG9iamVjdCk6CiAgIiIiQW4gaW50ZXJtZWRpYXRlIGZhY2FkZSB0byBxdWVyeSBhbmQgY29uZmlndXJlIG9wdGlvbnMgdGhhdCBndWlkZSBob3cKICBJbnRlcmFjdGl2ZSBCZWFtIHdvcmtzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHNlbGYuX2NhcHR1cmVfY29udHJvbCA9IGNhcHR1cmVfY29udHJvbC5DYXB0dXJlQ29udHJvbCgpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnV2l0aCBjdXJyZW50IGludGVyYWN0aXZlX2JlYW0ub3B0aW9uczoge30nLmZvcm1hdCgKICAgICAgICBzZWxmLl9jYXB0dXJlX2NvbnRyb2wpCgogIEBwcm9wZXJ0eQogIGRlZiBjYXB0dXJlX2NvbnRyb2woc2VsZik6CiAgICByZXR1cm4gc2VsZi5fY2FwdHVyZV9jb250cm9sCpR9lCiMG0ludGVyYWN0aXZlT3B0aW9ucy5fX2luaXRfX5RqVjEBAEshSyKHlIwbSW50ZXJhY3RpdmVPcHRpb25zLl9fcmVwcl9flGpWMQEASyRLJoeUjCJJbnRlcmFjdGl2ZU9wdGlvbnMuY2FwdHVyZV9jb250cm9slGpWMQEASyhLKoeUjBJJbnRlcmFjdGl2ZU9wdGlvbnOUal0xAQBLHksqh5R1fZSMEkludGVyYWN0aXZlT3B0aW9uc5RqGQQAAHOMO2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUub3B0aW9ucy5pbnRlcmFjdGl2ZV9vcHRpb25zlHSUjDFhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlLnBpcGVsaW5lX2FuYWx5emVylChYF0UAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQW5hbHl6ZXMgYW5kIG1vZGlmaWVzIHRoZSBwaXBlbGluZSB0aGF0IHV0aWxpemUgdGhlIFBDb2xsZWN0aW9uIGNhY2hlLgoKVGhpcyBtb2R1bGUgaXMgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGNvbGxlY3Rpb25zCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUgaW1wb3J0IGNhY2hlX21hbmFnZXIgYXMgY2FjaGUKCgpjbGFzcyBQaXBlbGluZUFuYWx5emVyKG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBjYWNoZV9tYW5hZ2VyLAogICAgICBwaXBlbGluZV9wcm90bywKICAgICAgdW5kZXJseWluZ19ydW5uZXIsCiAgICAgIG9wdGlvbnM9Tm9uZSwKICAgICAgZGVzaXJlZF9jYWNoZV9sYWJlbHM9Tm9uZSk6CiAgICAiIiJDb25zdHJ1Y3RvciBvZiBQaXBlbGluZUFuYW5seXplci4KCiAgICBBcmdzOgogICAgICBjYWNoZV9tYW5hZ2VyOiAoQ2FjaGVNYW5hZ2VyKQogICAgICBwaXBlbGluZV9wcm90bzogKFBpcGVsaW5lIHByb3RvKQogICAgICB1bmRlcmx5aW5nX3J1bm5lcjogKFBpcGVsaW5lUnVubmVyKQogICAgICBvcHRpb25zOiAoUGlwZWxpbmVPcHRpb25zKQogICAgICBkZXNpcmVkX2NhY2hlX2xhYmVsczogKFNldFtzdHJdKSBhIHNldCBvZiBsYWJlbHMgb2YgdGhlIFBDb2xsZWN0aW9uCiAgICAgICAgcXVlcmllZCBieSB0aGUgdXNlci4KICAgICIiIgogICAgc2VsZi5fY2FjaGVfbWFuYWdlciA9IGNhY2hlX21hbmFnZXIKICAgIHNlbGYuX3BpcGVsaW5lX3Byb3RvID0gcGlwZWxpbmVfcHJvdG8KICAgIHNlbGYuX2Rlc2lyZWRfY2FjaGVfbGFiZWxzID0gZGVzaXJlZF9jYWNoZV9sYWJlbHMgb3IgW10KCiAgICBzZWxmLl9waXBlbGluZSA9IGJlYW0ucGlwZWxpbmUuUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgIHNlbGYuX3BpcGVsaW5lX3Byb3RvLCBydW5uZXI9dW5kZXJseWluZ19ydW5uZXIsIG9wdGlvbnM9b3B0aW9ucykKICAgICMgY29udGV4dCByZXR1cm5lZCBmcm9tIHRvX3J1bm5lcl9hcGkgaXMgbW9yZSBpbmZvcm1hdGl2ZSB0aGFuIHRoYXQgcmV0dXJuZWQKICAgICMgZnJvbSBmcm9tX3J1bm5lcl9hcGkuCiAgICBfLCBzZWxmLl9jb250ZXh0ID0gc2VsZi5fcGlwZWxpbmUudG9fcnVubmVyX2FwaSgKICAgICAgICByZXR1cm5fY29udGV4dD1UcnVlLCB1c2VfZmFrZV9jb2RlcnM9VHJ1ZSkKICAgIHNlbGYuX3BpcGVsaW5lX2luZm8gPSBQaXBlbGluZUluZm8oc2VsZi5fcGlwZWxpbmVfcHJvdG8uY29tcG9uZW50cykKCiAgICAjIFJlc3VsdCBvZiB0aGUgYW5hbHlzaXMgdGhhdCBjYW4gYmUgcXVlcmllZCBieSB0aGUgdXNlci4KICAgIHNlbGYuX3BpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGUgPSBOb25lCiAgICBzZWxmLl90b3BfbGV2ZWxfcmVmZXJlbmNlZF9wY29sbF9pZHMgPSBOb25lCiAgICBzZWxmLl90b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtcyA9IE5vbmUKCiAgICBzZWxmLl9jYWNoZXNfdXNlZCA9IHNldCgpCiAgICBzZWxmLl9yZWFkX2NhY2hlX2lkcyA9IHNldCgpCiAgICBzZWxmLl93cml0ZV9jYWNoZV9pZHMgPSBzZXQoKQoKICAgICMgdXNlZCBmb3IgX2luc2VydF9wcm9kdWNpbmdfdHJhbnNmb3JtcygpCiAgICBzZWxmLl9hbmFseXplZF9wY29sbF9pZHMgPSBzZXQoKQoKICAgIHNlbGYuX2FuYWx5emVfcGlwZWxpbmUoKQoKICBkZWYgX2FuYWx5emVfcGlwZWxpbmUoc2VsZik6CiAgICAiIiJBbmFseXplcyB0aGUgcGlwZWxpbmUgYW5kIHNldHMgdGhlIHZhcmlhYmxlcyB0aGF0IGNhbiBiZSBxdWVyaWVkLgoKICAgIFRoaXMgZnVuY3Rpb24gY29uc3RydWN0IFBpcGVsaW5lIHByb3RvIHRvIGV4ZWN1dGUgYnkKICAgICAgMS4gU3RhcnQgZnJvbSB0YXJnZXQgUENvbGxlY3Rpb25zIGFuZCByZWN1cnNpdmVseSBpbnNlcnQgdGhlIHByb2R1Y2luZwogICAgICAgICBQVHJhbnNmb3JtcyBvZiB0aG9zZSBQQ29sbGVjdGlvbnMsIHdoZXJlIHRoZSBwcm9kdWNpbmcgUFRyYW5zZm9ybXMgYXJlCiAgICAgICAgIGVpdGhlciBSZWFkQ2FjaGUgb3IgUFRyYW5zZm9ybXMgaW4gdGhlIG9yaWdpbmFsIHBpcGVsaW5lLgogICAgICAyLiBBcHBlbmQgV3JpdGVDYWNoZSBQVHJhbnNmb3JtcyBpbiB0aGUgcGlwZWxpbmUuCgogICAgQWZ0ZXIgcnVubmluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyB3aWxsIGJlIHNldDoKICAgICAgc2VsZi5fcGlwZWxpbmVfcHJvdG9fdG9fZXhlY3V0ZQogICAgICBzZWxmLl90b3BfbGV2ZWxfcmVmZXJlbmNlZF9wY29sbF9pZHMKICAgICAgc2VsZi5fdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMKICAgICAgc2VsZi5fY2FjaGVzX3VzZWQKICAgICAgc2VsZi5fcmVhZF9jYWNoZV9pZHMKICAgICAgc2VsZi5fd3JpdGVfY2FjaGVfaWRzCiAgICAiIiIKICAgICMgV2UgZmlsdGVyIFBUcmFuc2Zvcm1zIHRvIGJlIGV4ZWN1dGVkIGJvdHRvbS11cCBmcm9tIHRoZXNlIFBDb2xsZWN0aW9ucy4KICAgIGRlc2lyZWRfcGNvbGxlY3Rpb25zID0gc2VsZi5fZGVzaXJlZF9wY29sbGVjdGlvbnMoc2VsZi5fcGlwZWxpbmVfaW5mbykKCiAgICByZXF1aXJlZF90cmFuc2Zvcm1zID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQogICAgdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCgogICAgZm9yIHBjb2xsX2lkIGluIGRlc2lyZWRfcGNvbGxlY3Rpb25zOgogICAgICAjIFRPRE8ocWlueWVsaSk6IENvbGxlY3Rpb25zIGNvbnN1bWVkIGJ5IG5vLW91dHB1dCB0cmFuc2Zvcm1zLgogICAgICBzZWxmLl9pbnNlcnRfcHJvZHVjaW5nX3RyYW5zZm9ybXMoCiAgICAgICAgICBwY29sbF9pZCwgcmVxdWlyZWRfdHJhbnNmb3JtcywgdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMpCgogICAgdG9wX2xldmVsX3JlZmVyZW5jZWRfcGNvbGxfaWRzID0gc2VsZi5fcmVmZXJlbmNlZF9wY29sbF9pZHMoCiAgICAgICAgdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMpCgogICAgZm9yIHBjb2xsX2lkIGluIHNlbGYuX3BpcGVsaW5lX2luZm8uYWxsX3Bjb2xsZWN0aW9ucygpOgogICAgICBpZiBub3QgcGNvbGxfaWQgaW4gdG9wX2xldmVsX3JlZmVyZW5jZWRfcGNvbGxfaWRzOgogICAgICAgIGNvbnRpbnVlCgogICAgICBpZiAocGNvbGxfaWQgaW4gZGVzaXJlZF9wY29sbGVjdGlvbnMgYW5kCiAgICAgICAgICBub3QgcGNvbGxfaWQgaW4gc2VsZi5fY2FjaGVzX3VzZWQpOgogICAgICAgIHNlbGYuX2luc2VydF9jYWNoaW5nX3RyYW5zZm9ybXMoCiAgICAgICAgICAgIHBjb2xsX2lkLCByZXF1aXJlZF90cmFuc2Zvcm1zLCB0b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtcykKCiAgICAgIGlmIG5vdCBzZWxmLl9jYWNoZV9tYW5hZ2VyLmV4aXN0cygKICAgICAgICAgICdzYW1wbGUnLCBzZWxmLl9waXBlbGluZV9pbmZvLmNhY2hlX2xhYmVsKHBjb2xsX2lkKSk6CiAgICAgICAgc2VsZi5faW5zZXJ0X2NhY2hpbmdfdHJhbnNmb3JtcygKICAgICAgICAgICAgcGNvbGxfaWQsCiAgICAgICAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXMsCiAgICAgICAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zLAogICAgICAgICAgICBzYW1wbGU9VHJ1ZSkKCiAgICByZXF1aXJlZF90cmFuc2Zvcm1zWydfcm9vdCddID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5QVHJhbnNmb3JtKAogICAgICAgIHN1YnRyYW5zZm9ybXM9bGlzdCh0b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtcykpCgogICAgcmVmZXJlbmNlZF9wY29sbF9pZHMgPSBzZWxmLl9yZWZlcmVuY2VkX3Bjb2xsX2lkcyhyZXF1aXJlZF90cmFuc2Zvcm1zKQogICAgcmVmZXJlbmNlZF9wY29sbGVjdGlvbnMgPSB7fQogICAgZm9yIHBjb2xsX2lkIGluIHJlZmVyZW5jZWRfcGNvbGxfaWRzOgogICAgICBvYmogPSBzZWxmLl9jb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfYnlfaWQocGNvbGxfaWQpCiAgICAgIHByb3RvID0gc2VsZi5fY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X3Byb3RvKG9iaikKICAgICAgcmVmZXJlbmNlZF9wY29sbGVjdGlvbnNbcGNvbGxfaWRdID0gcHJvdG8KCiAgICBwaXBlbGluZV90b19leGVjdXRlID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5QaXBlbGluZSgpCiAgICBwaXBlbGluZV90b19leGVjdXRlLnJvb3RfdHJhbnNmb3JtX2lkc1s6XSA9IFsnX3Jvb3QnXQogICAgc2V0X3Byb3RvX21hcCgKICAgICAgICBwaXBlbGluZV90b19leGVjdXRlLmNvbXBvbmVudHMudHJhbnNmb3JtcywgcmVxdWlyZWRfdHJhbnNmb3JtcykKICAgIHNldF9wcm90b19tYXAoCiAgICAgICAgcGlwZWxpbmVfdG9fZXhlY3V0ZS5jb21wb25lbnRzLnBjb2xsZWN0aW9ucywgcmVmZXJlbmNlZF9wY29sbGVjdGlvbnMpCiAgICBzZXRfcHJvdG9fbWFwKAogICAgICAgIHBpcGVsaW5lX3RvX2V4ZWN1dGUuY29tcG9uZW50cy5jb2RlcnMsCiAgICAgICAgc2VsZi5fY29udGV4dC50b19ydW5uZXJfYXBpKCkuY29kZXJzKQogICAgc2V0X3Byb3RvX21hcCgKICAgICAgICBwaXBlbGluZV90b19leGVjdXRlLmNvbXBvbmVudHMud2luZG93aW5nX3N0cmF0ZWdpZXMsCiAgICAgICAgc2VsZi5fY29udGV4dC50b19ydW5uZXJfYXBpKCkud2luZG93aW5nX3N0cmF0ZWdpZXMpCgogICAgc2VsZi5fcGlwZWxpbmVfcHJvdG9fdG9fZXhlY3V0ZSA9IHBpcGVsaW5lX3RvX2V4ZWN1dGUKICAgIHNlbGYuX3RvcF9sZXZlbF9yZWZlcmVuY2VkX3Bjb2xsX2lkcyA9IHRvcF9sZXZlbF9yZWZlcmVuY2VkX3Bjb2xsX2lkcwogICAgc2VsZi5fdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMgPSB0b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtcwoKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAjIEdldHRlcnMKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgZGVmIHBpcGVsaW5lX2luZm8oc2VsZik6CiAgICAiIiJSZXR1cm4gUGlwZWxpbmVJbmZvIG9mIHRoZSBvcmlnaW5hbCBwaXBlbGluZS4KICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3BpcGVsaW5lX2luZm8KCiAgZGVmIHBpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGUoc2VsZik6CiAgICAiIiJSZXR1cm5zIFBpcGVsaW5lIHByb3RvIHRvIGJlIGV4ZWN1dGVkLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcGlwZWxpbmVfcHJvdG9fdG9fZXhlY3V0ZQoKICBkZWYgdGxfcmVmZXJlbmNlZF9wY29sbF9pZHMoc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgc2V0IG9mIFBDb2xsZWN0aW9uIElEcyByZWZlcmVuY2VkIGJ5IHRvcCBsZXZlbCBQVHJhbnNmb3Jtcy4KICAgICIiIgogICAgcmV0dXJuIHNlbGYuX3RvcF9sZXZlbF9yZWZlcmVuY2VkX3Bjb2xsX2lkcwoKICBkZWYgdGxfcmVxdWlyZWRfdHJhbnNfaWRzKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIHNldCBvZiByZXF1aXJlZCB0b3AgbGV2ZWwgUFRyYW5zZm9ybSBJRHMuCiAgICAiIiIKICAgIHJldHVybiBsaXN0KHNlbGYuX3RvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zKQoKICBkZWYgY2FjaGVzX3VzZWQoc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgc2V0IG9mIFBDb2xsZWN0aW9uIElEcyB0byByZWFkIGZyb20gY2FjaGUuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl9jYWNoZXNfdXNlZAoKICBkZWYgcmVhZF9jYWNoZV9pZHMoc2VsZik6CiAgICAiIiJSZXR1cm4gYSBzZXQgb2YgUmVhZENhY2hlIFBUcmFuc2Zvcm0gSURzIGluc2VydGVkLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fcmVhZF9jYWNoZV9pZHMKCiAgZGVmIHdyaXRlX2NhY2hlX2lkcyhzZWxmKToKICAgICIiIlJldHVybiBhIHNldCBvZiBXcml0ZUNhY2hlIFBUcmFuc2Zvcm0gSURzIGluc2VydGVkLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5fd3JpdGVfY2FjaGVfaWRzCgogICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICMgSGVscGVyIG1ldGhvZHMgZm9yIF9hbmFseXplX3BpcGVsaW5lKCkKICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgZGVmIF9pbnNlcnRfcHJvZHVjaW5nX3RyYW5zZm9ybXMoCiAgICAgIHNlbGYsCiAgICAgIHBjb2xsX2lkLAogICAgICByZXF1aXJlZF90cmFuc2Zvcm1zLAogICAgICB0b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtcywKICAgICAgbGVhZj1GYWxzZSk6CiAgICAiIiJJbnNlcnRzIFBUcmFuc2Zvcm1zIHByb2R1Y2luZyB0aGUgZ2l2ZW4gUENvbGxlY3Rpb24gaW50byB0aGUgZGljdHMuCgogICAgQXJnczoKICAgICAgcGNvbGxfaWQ6IChzdHIpCiAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXM6IChEaWN0W3N0ciwgUFRyYW5zZm9ybSBwcm90b10pCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zOiAoRGljdFtzdHIsIFBUcmFuc2Zvcm0gcHJvdG9dKQogICAgICBsZWFmOiAoYm9vbCkgd2hldGhlciB0aGUgUENvbGxlY3Rpb24gc2hvdWxkIGJlIHJlYWQgZnJvbSBjYWNoZSBpZiB0aGUKICAgICAgICBjYWNoZSBleGlzdHMuCgogICAgTW9kaWZpZXM6CiAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXMKICAgICAgdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMKICAgICAgc2VsZi5fcmVhZF9jYWNoZV9pZHMKICAgICIiIgogICAgaWYgcGNvbGxfaWQgaW4gc2VsZi5fYW5hbHl6ZWRfcGNvbGxfaWRzOgogICAgICByZXR1cm4KICAgIGVsc2U6CiAgICAgIHNlbGYuX2FuYWx5emVkX3Bjb2xsX2lkcy5hZGQocGNvbGxfaWQpCgogICAgY2FjaGVfbGFiZWwgPSBzZWxmLl9waXBlbGluZV9pbmZvLmNhY2hlX2xhYmVsKHBjb2xsX2lkKQogICAgaWYgc2VsZi5fY2FjaGVfbWFuYWdlci5leGlzdHMoJ2Z1bGwnLCBjYWNoZV9sYWJlbCkgYW5kIG5vdCBsZWFmOgogICAgICBzZWxmLl9jYWNoZXNfdXNlZC5hZGQocGNvbGxfaWQpCgogICAgICBjYWNoZV9sYWJlbCA9IHNlbGYuX3BpcGVsaW5lX2luZm8uY2FjaGVfbGFiZWwocGNvbGxfaWQpCiAgICAgIGR1bW15X3Bjb2xsID0gKAogICAgICAgICAgc2VsZi5fcGlwZWxpbmUKICAgICAgICAgIHwgJ0xvYWQlcycgJSBjYWNoZV9sYWJlbCA+PiBjYWNoZS5SZWFkQ2FjaGUoCiAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfbWFuYWdlciwgY2FjaGVfbGFiZWwpKQoKICAgICAgcmVhZF9jYWNoZSA9IHNlbGYuX3RvcF9sZXZlbF9wcm9kdWNlcihkdW1teV9wY29sbCkKICAgICAgcmVhZF9jYWNoZV9pZCA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQocmVhZF9jYWNoZSkKICAgICAgcmVhZF9jYWNoZV9wcm90byA9IHJlYWRfY2FjaGUudG9fcnVubmVyX2FwaShzZWxmLl9jb250ZXh0KQogICAgICByZWFkX2NhY2hlX3Byb3RvLm91dHB1dHNbJ05vbmUnXSA9IHBjb2xsX2lkCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zW3JlYWRfY2FjaGVfaWRdID0gcmVhZF9jYWNoZV9wcm90bwogICAgICBzZWxmLl9yZWFkX2NhY2hlX2lkcy5hZGQocmVhZF9jYWNoZV9pZCkKCiAgICAgIGZvciB0cmFuc2Zvcm0gaW4gc2VsZi5faW5jbHVkZV9zdWJ0cmFuc2Zvcm1zKHJlYWRfY2FjaGUpOgogICAgICAgIHRyYW5zZm9ybV9pZCA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQodHJhbnNmb3JtKQogICAgICAgIHRyYW5zZm9ybV9wcm90byA9IHRyYW5zZm9ybS50b19ydW5uZXJfYXBpKHNlbGYuX2NvbnRleHQpCiAgICAgICAgaWYgZHVtbXlfcGNvbGwgaW4gdHJhbnNmb3JtLm91dHB1dHMudmFsdWVzKCk6CiAgICAgICAgICB0cmFuc2Zvcm1fcHJvdG8ub3V0cHV0c1snTm9uZSddID0gcGNvbGxfaWQKICAgICAgICByZXF1aXJlZF90cmFuc2Zvcm1zW3RyYW5zZm9ybV9pZF0gPSB0cmFuc2Zvcm1fcHJvdG8KCiAgICBlbHNlOgogICAgICBwY29sbCA9IHNlbGYuX2NvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChwY29sbF9pZCkKCiAgICAgIHRvcF9sZXZlbF90cmFuc2Zvcm0gPSBzZWxmLl90b3BfbGV2ZWxfcHJvZHVjZXIocGNvbGwpCiAgICAgIGZvciB0cmFuc2Zvcm0gaW4gc2VsZi5faW5jbHVkZV9zdWJ0cmFuc2Zvcm1zKHRvcF9sZXZlbF90cmFuc2Zvcm0pOgogICAgICAgIHRyYW5zZm9ybV9pZCA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfaWQodHJhbnNmb3JtKQogICAgICAgIHRyYW5zZm9ybV9wcm90byA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfcHJvdG8odHJhbnNmb3JtKQoKICAgICAgICAjIEluc2VydGluZyBhbmNlc3RvciBQVHJhbnNmb3Jtcy4KICAgICAgICBmb3IgaW5wdXRfaWQgaW4gdHJhbnNmb3JtX3Byb3RvLmlucHV0cy52YWx1ZXMoKToKICAgICAgICAgIHNlbGYuX2luc2VydF9wcm9kdWNpbmdfdHJhbnNmb3JtcygKICAgICAgICAgICAgICBpbnB1dF9pZCwgcmVxdWlyZWRfdHJhbnNmb3JtcywgdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXMpCiAgICAgICAgcmVxdWlyZWRfdHJhbnNmb3Jtc1t0cmFuc2Zvcm1faWRdID0gdHJhbnNmb3JtX3Byb3RvCgogICAgICAjIE11c3QgYmUgaW5zZXJ0ZWQgYWZ0ZXIgaW5zZXJ0aW5nIGFuY2VzdG9yIFBUcmFuc2Zvcm1zLgogICAgICB0b3BfbGV2ZWxfaWQgPSBzZWxmLl9jb250ZXh0LnRyYW5zZm9ybXMuZ2V0X2lkKHRvcF9sZXZlbF90cmFuc2Zvcm0pCiAgICAgIHRvcF9sZXZlbF9wcm90byA9IHNlbGYuX2NvbnRleHQudHJhbnNmb3Jtcy5nZXRfcHJvdG8odG9wX2xldmVsX3RyYW5zZm9ybSkKICAgICAgdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXNbdG9wX2xldmVsX2lkXSA9IHRvcF9sZXZlbF9wcm90bwoKICBkZWYgX2luc2VydF9jYWNoaW5nX3RyYW5zZm9ybXMoCiAgICAgIHNlbGYsCiAgICAgIHBjb2xsX2lkLAogICAgICByZXF1aXJlZF90cmFuc2Zvcm1zLAogICAgICB0b3BfbGV2ZWxfcmVxdWlyZWRfdHJhbnNmb3JtcywKICAgICAgc2FtcGxlPUZhbHNlKToKICAgICIiIkluc2VydHMgUFRyYW5zZm9ybXMgY2FjaGluZyB0aGUgZ2l2ZW4gUENvbGxlY3Rpb24gaW50byB0aGUgZGljdHMuCgogICAgQXJnczoKICAgICAgcGNvbGxfaWQ6IChzdHIpCiAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXM6IChEaWN0W3N0ciwgUFRyYW5zZm9ybSBwcm90b10pCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zOiAoRGljdFtzdHIsIFBUcmFuc2Zvcm0gcHJvdG9dKQogICAgICBzYW1wbGU6IChib29sKSB3aGV0aGVyIHRvIGNhY2hlIHNhbXBsZSBvciBjYWNoZSBmdWxsLgoKICAgIE1vZGlmaWVzOgogICAgICByZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIHRvcF9sZXZlbF9yZXF1aXJlZF90cmFuc2Zvcm1zCiAgICAgIHNlbGYuX3dyaXRlX2NhY2hlX2lkcwogICAgIiIiCiAgICBjYWNoZV9sYWJlbCA9IHNlbGYuX3BpcGVsaW5lX2luZm8uY2FjaGVfbGFiZWwocGNvbGxfaWQpCiAgICBwY29sbCA9IHNlbGYuX2NvbnRleHQucGNvbGxlY3Rpb25zLmdldF9ieV9pZChwY29sbF9pZCkKCiAgICBpZiBub3Qgc2FtcGxlOgogICAgICBwZG9uZSA9IHBjb2xsIHwgJ0NhY2hlRnVsbCVzJyAlIGNhY2hlX2xhYmVsID4+IGNhY2hlLldyaXRlQ2FjaGUoCiAgICAgICAgICBzZWxmLl9jYWNoZV9tYW5hZ2VyLCBjYWNoZV9sYWJlbCkKICAgIGVsc2U6CiAgICAgIHBkb25lID0gcGNvbGwgfCAnQ2FjaGVTYW1wbGUlcycgJSBjYWNoZV9sYWJlbCA+PiBjYWNoZS5Xcml0ZUNhY2hlKAogICAgICAgICAgc2VsZi5fY2FjaGVfbWFuYWdlciwgY2FjaGVfbGFiZWwsIHNhbXBsZT1UcnVlLCBzYW1wbGVfc2l6ZT0xMCkKCiAgICB3cml0ZV9jYWNoZSA9IHNlbGYuX3RvcF9sZXZlbF9wcm9kdWNlcihwZG9uZSkKICAgIHdyaXRlX2NhY2hlX2lkID0gc2VsZi5fY29udGV4dC50cmFuc2Zvcm1zLmdldF9pZCh3cml0ZV9jYWNoZSkKICAgIHdyaXRlX2NhY2hlX3Byb3RvID0gd3JpdGVfY2FjaGUudG9fcnVubmVyX2FwaShzZWxmLl9jb250ZXh0KQogICAgdG9wX2xldmVsX3JlcXVpcmVkX3RyYW5zZm9ybXNbd3JpdGVfY2FjaGVfaWRdID0gd3JpdGVfY2FjaGVfcHJvdG8KICAgIHNlbGYuX3dyaXRlX2NhY2hlX2lkcy5hZGQod3JpdGVfY2FjaGVfaWQpCgogICAgZm9yIHRyYW5zZm9ybSBpbiBzZWxmLl9pbmNsdWRlX3N1YnRyYW5zZm9ybXMod3JpdGVfY2FjaGUpOgogICAgICB0cmFuc2Zvcm1faWQgPSBzZWxmLl9jb250ZXh0LnRyYW5zZm9ybXMuZ2V0X2lkKHRyYW5zZm9ybSkKICAgICAgdHJhbnNmb3JtX3Byb3RvID0gdHJhbnNmb3JtLnRvX3J1bm5lcl9hcGkoc2VsZi5fY29udGV4dCkKICAgICAgcmVxdWlyZWRfdHJhbnNmb3Jtc1t0cmFuc2Zvcm1faWRdID0gdHJhbnNmb3JtX3Byb3RvCgogIGRlZiBfZGVzaXJlZF9wY29sbGVjdGlvbnMoc2VsZiwgcGlwZWxpbmVfaW5mbyk6CiAgICAiIiJSZXR1cm5zIElEcyBvZiBkZXNpcmVkIChxdWVyaWVkIG9yIGxlYWYpIFBDb2xsZWN0aW9ucy4KCiAgICBBcmdzOgogICAgICBwaXBlbGluZV9pbmZvOiAoUGlwZWxpbmVJbmZvKSBpbmZvIG9mIHRoZSBvcmlnaW5hbCBwaXBlbGluZS4KCiAgICBSZXR1cm5zOgogICAgICAoU2V0W3N0cl0pIGEgc2V0IG9mIFBDb2xsZWN0aW9ucyBJRHMgb2YgZWl0aGVyIGxlYWYgUENvbGxlY3Rpb25zIG9yCiAgICAgIFBDb2xsZWN0aW9ucyByZWZlcmVuY2VkIGJ5IHRoZSB1c2VyLiBUaGVzZSBQQ29sbGVjdGlvbnMgc2hvdWxkIGJlIGNhY2hlZAogICAgICBhdCB0aGUgZW5kIG9mIHBpcGVsaW5lIGV4ZWN1dGlvbi4KICAgICIiIgogICAgZGVzaXJlZF9wY29sbGVjdGlvbnMgPSBzZXQocGlwZWxpbmVfaW5mby5sZWFmX3Bjb2xsZWN0aW9ucygpKQogICAgZm9yIHBjb2xsX2lkIGluIHBpcGVsaW5lX2luZm8uYWxsX3Bjb2xsZWN0aW9ucygpOgogICAgICBjYWNoZV9sYWJlbCA9IHBpcGVsaW5lX2luZm8uY2FjaGVfbGFiZWwocGNvbGxfaWQpCgogICAgICBpZiBjYWNoZV9sYWJlbCBpbiBzZWxmLl9kZXNpcmVkX2NhY2hlX2xhYmVsczoKICAgICAgICBkZXNpcmVkX3Bjb2xsZWN0aW9ucy5hZGQocGNvbGxfaWQpCiAgICByZXR1cm4gZGVzaXJlZF9wY29sbGVjdGlvbnMKCiAgZGVmIF9yZWZlcmVuY2VkX3Bjb2xsX2lkcyhzZWxmLCByZXF1aXJlZF90cmFuc2Zvcm1zKToKICAgICIiIlJldHVybnMgUENvbGxlY3Rpb24gSURzIHJlZmVyZW5jZWQgaW4gdGhlIGdpdmVuIHRyYW5zZm9ybXMuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtczogKERpY3Rbc3RyLCBQVHJhbnNmb3JtIHByb3RvXSkgbWFwcGluZyBJRCB0byBwcm90b3MuCgogICAgUmV0dXJuczoKICAgICAgKFNldFtzdHJdKSBQQ29sbGVjdGlvbiBJRHMgcmVmZXJlbmNlZCBhcyBlaXRoZXIgaW5wdXQgb3Igb3V0cHV0IGluIHRoZQogICAgICAgIGdpdmVuIHRyYW5zZm9ybXMuCiAgICAiIiIKICAgIHJlZmVyZW5jZWRfcGNvbGxfaWRzID0gc2V0KCkKICAgIGZvciB0cmFuc2Zvcm1fcHJvdG8gaW4gcmVxdWlyZWRfdHJhbnNmb3Jtcy52YWx1ZXMoKToKICAgICAgZm9yIHBjb2xsX2lkIGluIHRyYW5zZm9ybV9wcm90by5pbnB1dHMudmFsdWVzKCk6CiAgICAgICAgcmVmZXJlbmNlZF9wY29sbF9pZHMuYWRkKHBjb2xsX2lkKQoKICAgICAgZm9yIHBjb2xsX2lkIGluIHRyYW5zZm9ybV9wcm90by5vdXRwdXRzLnZhbHVlcygpOgogICAgICAgIHJlZmVyZW5jZWRfcGNvbGxfaWRzLmFkZChwY29sbF9pZCkKCiAgICByZXR1cm4gcmVmZXJlbmNlZF9wY29sbF9pZHMKCiAgZGVmIF90b3BfbGV2ZWxfcHJvZHVjZXIoc2VsZiwgcGNvbGwpOgogICAgIiIiR2l2ZW4gYSBQQ29sbGVjdGlvbiwgcmV0dXJucyB0aGUgdG9wIGxldmVsIHByb2R1Y2luZyBQVHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHBjb2xsOiAoUENvbGxlY3Rpb24pCgogICAgUmV0dXJuczoKICAgICAgKEFwcGxpZWRQVHJhbnNmb3JtKSB0b3AgbGV2ZWwgcHJvZHVjaW5nIEFwcGxpZWRQVHJhbnNmb3JtIG9mIHBjb2xsLgogICAgIiIiCiAgICB0b3BfbGV2ZWxfdHJhbnNmb3JtID0gcGNvbGwucHJvZHVjZXIKICAgIHdoaWxlIHRvcF9sZXZlbF90cmFuc2Zvcm0ucGFyZW50LnBhcmVudDoKICAgICAgdG9wX2xldmVsX3RyYW5zZm9ybSA9IHRvcF9sZXZlbF90cmFuc2Zvcm0ucGFyZW50CiAgICByZXR1cm4gdG9wX2xldmVsX3RyYW5zZm9ybQoKICBkZWYgX2luY2x1ZGVfc3VidHJhbnNmb3JtcyhzZWxmLCB0cmFuc2Zvcm0pOgogICAgIiIiRGVwdGgtZmlyc3QgeWllbGQgdGhlIFBUcmFuc2Zvcm0gaXRzZWxmIGFuZCBpdHMgc3ViIHRyYW5zZm9ybXMuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtOiAoQXBwbGllZFBUcmFuc2Zvcm0pCgogICAgWWllbGRzOgogICAgICBUaGUgaW5wdXQgQXBwbGllZFBUcmFuc2Zvcm0gaXRzZWxmIGFuZCBhbGwgaXRzIHN1YiB0cmFuc2Zvcm1zLgogICAgIiIiCiAgICB5aWVsZCB0cmFuc2Zvcm0KICAgIGZvciBzdWJ0cmFuc2Zvcm0gaW4gdHJhbnNmb3JtLnBhcnRzWzo6LTFdOgogICAgICBmb3IgeWllbGRlZCBpbiBzZWxmLl9pbmNsdWRlX3N1YnRyYW5zZm9ybXMoc3VidHJhbnNmb3JtKToKICAgICAgICB5aWVsZCB5aWVsZGVkCgoKY2xhc3MgUGlwZWxpbmVJbmZvKG9iamVjdCk6CiAgIiIiUHJvdmlkZXMgYWNjZXNzIHRvIHBpcGVsaW5lIG1ldGFkYXRhLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90byk6CiAgICBzZWxmLl9wcm90byA9IHByb3RvCiAgICBzZWxmLl9wcm9kdWNlcnMgPSB7fQogICAgc2VsZi5fY29uc3VtZXJzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgIGZvciB0cmFuc2Zvcm1faWQsIHRyYW5zZm9ybV9wcm90byBpbiBzZWxmLl9wcm90by50cmFuc2Zvcm1zLml0ZW1zKCk6CiAgICAgIGlmIHRyYW5zZm9ybV9wcm90by5zdWJ0cmFuc2Zvcm1zOgogICAgICAgIGNvbnRpbnVlCiAgICAgICMgSWRlbnRpZnkgcHJvZHVjZXJzIG9mIGVhY2ggUENvbGxlY3Rpb24uIEEgUFRyYW5zZm9ybSBpcyBhIHByb2R1Y2VyIG9mCiAgICAgICMgYSBQQ29sbGVjdGlvbiBpZiBpdCBvdXRwdXRzIHRoZSBQQ29sbGVjdGlvbiBidXQgZG9lcyBub3QgY29uc3VtZSB0aGUKICAgICAgIyBzYW1lIFBDb2xsZWN0aW9uIGFzIGlucHV0LiBUaGUgbGF0dGVyIHBhcnQgb2YgdGhlIGRlZmluaXRpb24gaXMgdG8gYXZvaWQKICAgICAgIyBpbmZpbml0ZSByZWN1cnNpb25zIHdoZW4gY29uc3RydWN0aW5nIHRoZSBQQ29sbGVjdGlvbidzIGRlcml2YXRpb24uCiAgICAgIHRyYW5zZm9ybV9pbnB1dHMgPSBzZXQodHJhbnNmb3JtX3Byb3RvLmlucHV0cy52YWx1ZXMoKSkKICAgICAgZm9yIHRhZywgcGNvbGxfaWQgaW4gdHJhbnNmb3JtX3Byb3RvLm91dHB1dHMuaXRlbXMoKToKICAgICAgICBpZiBwY29sbF9pZCBpbiB0cmFuc2Zvcm1faW5wdXRzOgogICAgICAgICAgIyBBIHRyYW5zZm9ybSBpcyBub3QgdGhlIHByb2R1Y2VyIG9mIGEgUENvbGxlY3Rpb24gaWYgaXQgY29uc3VtZXMgdGhlCiAgICAgICAgICAjIFBDb2xsZWN0aW9uIGFzIGFuIGlucHV0LgogICAgICAgICAgY29udGludWUKICAgICAgICBzZWxmLl9wcm9kdWNlcnNbcGNvbGxfaWRdID0gdHJhbnNmb3JtX2lkLCB0YWcKICAgICAgZm9yIHBjb2xsX2lkIGluIHRyYW5zZm9ybV9pbnB1dHM6CiAgICAgICAgc2VsZi5fY29uc3VtZXJzW3Bjb2xsX2lkXS5hcHBlbmQodHJhbnNmb3JtX2lkKQogICAgc2VsZi5fZGVyaXZhdGlvbnMgPSB7fQoKICBkZWYgYWxsX3Bjb2xsZWN0aW9ucyhzZWxmKToKICAgIHJldHVybiBzZWxmLl9wcm90by5wY29sbGVjdGlvbnMua2V5cygpCgogIGRlZiBsZWFmX3Bjb2xsZWN0aW9ucyhzZWxmKToKICAgIGZvciBwY29sbF9pZCBpbiBzZWxmLl9wcm90by5wY29sbGVjdGlvbnM6CiAgICAgIGlmIG5vdCBzZWxmLl9jb25zdW1lcnNbcGNvbGxfaWRdOgogICAgICAgIHlpZWxkIHBjb2xsX2lkCgogIGRlZiBwcm9kdWNlcihzZWxmLCBwY29sbF9pZCk6CiAgICByZXR1cm4gc2VsZi5fcHJvZHVjZXJzW3Bjb2xsX2lkXQoKICBkZWYgY2FjaGVfbGFiZWwoc2VsZiwgcGNvbGxfaWQpOgogICAgIiIiUmV0dXJucyB0aGUgY2FjaGUgbGFiZWwgZ2l2ZW4gdGhlIFBDb2xsZWN0aW9uIElELiIiIgogICAgcmV0dXJuIHNlbGYuX2Rlcml2YXRpb24ocGNvbGxfaWQpLmNhY2hlX2xhYmVsKCkKCiAgZGVmIF9kZXJpdmF0aW9uKHNlbGYsIHBjb2xsX2lkKToKICAgIGlmIHBjb2xsX2lkIG5vdCBpbiBzZWxmLl9kZXJpdmF0aW9uczoKICAgICAgdHJhbnNmb3JtX2lkLCBvdXRwdXRfdGFnID0gc2VsZi5fcHJvZHVjZXJzW3Bjb2xsX2lkXQogICAgICB0cmFuc2Zvcm1fcHJvdG8gPSBzZWxmLl9wcm90by50cmFuc2Zvcm1zW3RyYW5zZm9ybV9pZF0KICAgICAgc2VsZi5fZGVyaXZhdGlvbnNbcGNvbGxfaWRdID0gc2VsZi5EZXJpdmF0aW9uKHsKICAgICAgICAgIGlucHV0X3RhZzogc2VsZi5fZGVyaXZhdGlvbihpbnB1dF9pZCkKICAgICAgICAgIGZvciBpbnB1dF90YWcsCiAgICAgICAgICBpbnB1dF9pZCBpbiB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzLml0ZW1zKCkKICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF90YWcpCiAgICByZXR1cm4gc2VsZi5fZGVyaXZhdGlvbnNbcGNvbGxfaWRdCgogIGNsYXNzIERlcml2YXRpb24ob2JqZWN0KToKICAgICIiIlJlY29yZHMgZGVyaXZhdGlvbiBpbmZvIG9mIGEgUENvbGxlY3Rpb24uIEhlbHBlciBmb3IgUGlwZWxpbmVJbmZvLiIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0cywgdHJhbnNmb3JtX3Byb3RvLCBvdXRwdXRfdGFnKToKICAgICAgIiIiQ29uc3RydWN0b3Igb2YgRGVyaXZhdGlvbi4KCiAgICAgIEFyZ3M6CiAgICAgICAgaW5wdXRzOiAoRGljdFtzdHIsIERlcml2YXRpb25dKSBtYXBzIFBDb2xsZWN0aW9uIG5hbWVzIHRvIERlcml2YXRpb25zLgogICAgICAgIHRyYW5zZm9ybV9wcm90bzogKFRyYW5zZm9ybSBwcm90bykgdGhlIHByb2R1Y2luZyBQVHJhbnNmb3JtLgogICAgICAgIG91dHB1dF90YWc6IChzdHIpIGxvY2FsIG5hbWUgb2YgdGhlIFBDb2xsZWN0aW9uIGluIGFuYWx5c2lzLgogICAgICAiIiIKICAgICAgc2VsZi5faW5wdXRzID0gaW5wdXRzCiAgICAgIHNlbGYuX3RyYW5zZm9ybV9pbmZvID0gewogICAgICAgICAgIyBUT0RPKHFpbnllbGkpOiByZW1vdmUgbmFtZSBmaWVsZCB3aGVuIGNvbGxpc2lvbiBpcyByZXNvbHZlZC4KICAgICAgICAgICduYW1lJzogdHJhbnNmb3JtX3Byb3RvLnVuaXF1ZV9uYW1lLAogICAgICAgICAgJ3Vybic6IHRyYW5zZm9ybV9wcm90by5zcGVjLnVybiwKICAgICAgICAgICdwYXlsb2FkJzogdHJhbnNmb3JtX3Byb3RvLnNwZWMucGF5bG9hZC5kZWNvZGUoJ2xhdGluMScpCiAgICAgIH0KICAgICAgc2VsZi5fb3V0cHV0X3RhZyA9IG91dHB1dF90YWcKICAgICAgc2VsZi5faGFzaCA9IE5vbmUKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5EZXJpdmF0aW9uKToKICAgICAgICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgc2VsZi5faW5wdXRzID09IG90aGVyLl9pbnB1dHMgYW5kCiAgICAgICAgICAgIHNlbGYuX3RyYW5zZm9ybV9pbmZvID09IG90aGVyLl90cmFuc2Zvcm1faW5mbykKCiAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICBpZiBzZWxmLl9oYXNoIGlzIE5vbmU6CiAgICAgICAgc2VsZi5faGFzaCA9ICgKICAgICAgICAgICAgaGFzaCh0dXBsZShzb3J0ZWQoc2VsZi5fdHJhbnNmb3JtX2luZm8uaXRlbXMoKSkpKSArCiAgICAgICAgICAgIHN1bShoYXNoKHRhZykgKiBoYXNoKGlucHV0KQogICAgICAgICAgICAgICAgZm9yIHRhZywgaW5wdXQgaW4gc2VsZi5faW5wdXRzLml0ZW1zKCkpICsKICAgICAgICAgICAgaGFzaChzZWxmLl9vdXRwdXRfdGFnKSkKICAgICAgcmV0dXJuIHNlbGYuX2hhc2gKCiAgICBkZWYgY2FjaGVfbGFiZWwoc2VsZik6CiAgICAgICMgVE9ETyhxaW55ZWxpKTogQ29sbGlzaW9uIHJlc2lzdGFuY2U/CiAgICAgIHJldHVybiAnUGNvbGwtJXgnICUgYWJzKGhhc2goc2VsZikpCgogICAgZGVmIGpzb24oc2VsZik6CiAgICAgIHJldHVybiB7CiAgICAgICAgICAnaW5wdXRzJzogc2VsZi5faW5wdXRzLAogICAgICAgICAgJ3RyYW5zZm9ybSc6IHNlbGYuX3RyYW5zZm9ybV9pbmZvLAogICAgICAgICAgJ291dHB1dF90YWcnOiBzZWxmLl9vdXRwdXRfdGFnCiAgICAgIH0KCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiBzdHIoc2VsZi5qc29uKCkpCgoKIyBUT0RPKHFpbnllbGkpIG1vdmUgdG8gcHJvdG9fdXRpbHMKZGVmIHNldF9wcm90b19tYXAocHJvdG9fbWFwLCBuZXdfdmFsdWUpOgogIHByb3RvX21hcC5jbGVhcigpCiAgZm9yIGtleSwgdmFsdWUgaW4gbmV3X3ZhbHVlLml0ZW1zKCk6CiAgICBwcm90b19tYXBba2V5XS5Db3B5RnJvbSh2YWx1ZSkKlH2UKIwZUGlwZWxpbmVBbmFseXplci5fX2luaXRfX5RqVjEBAEslS06HlIwiUGlwZWxpbmVBbmFseXplci5fYW5hbHl6ZV9waXBlbGluZZRqVjEBAEtQS5mHlIweUGlwZWxpbmVBbmFseXplci5waXBlbGluZV9pbmZvlGpWMQEAS59LooeUjCpQaXBlbGluZUFuYWx5emVyLnBpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGWUalYxAQBLpEunh5SMKFBpcGVsaW5lQW5hbHl6ZXIudGxfcmVmZXJlbmNlZF9wY29sbF9pZHOUalYxAQBLqUush5SMJlBpcGVsaW5lQW5hbHl6ZXIudGxfcmVxdWlyZWRfdHJhbnNfaWRzlGpWMQEAS65LsYeUjBxQaXBlbGluZUFuYWx5emVyLmNhY2hlc191c2VklGpWMQEAS7NLtoeUjB9QaXBlbGluZUFuYWx5emVyLnJlYWRfY2FjaGVfaWRzlGpWMQEAS7hLu4eUjCBQaXBlbGluZUFuYWx5emVyLndyaXRlX2NhY2hlX2lkc5RqVjEBAEu9S8CHlIwtUGlwZWxpbmVBbmFseXplci5faW5zZXJ0X3Byb2R1Y2luZ190cmFuc2Zvcm1zlGpWMQEAS8ZNCAGHlIwrUGlwZWxpbmVBbmFseXplci5faW5zZXJ0X2NhY2hpbmdfdHJhbnNmb3Jtc5RqVjEBAE0KAU0wAYeUjCZQaXBlbGluZUFuYWx5emVyLl9kZXNpcmVkX3Bjb2xsZWN0aW9uc5RqVjEBAE0yAU1DAYeUjCZQaXBlbGluZUFuYWx5emVyLl9yZWZlcmVuY2VkX3Bjb2xsX2lkc5RqVjEBAE1FAU1XAYeUjCRQaXBlbGluZUFuYWx5emVyLl90b3BfbGV2ZWxfcHJvZHVjZXKUalYxAQBNWQFNZQGHlIwnUGlwZWxpbmVBbmFseXplci5faW5jbHVkZV9zdWJ0cmFuc2Zvcm1zlGpWMQEATWcBTXMBh5SMEFBpcGVsaW5lQW5hbHl6ZXKUal0xAQBLJE1zAYeUjBVQaXBlbGluZUluZm8uX19pbml0X1+UalYxAQBNeAFNjAGHlIwdUGlwZWxpbmVJbmZvLmFsbF9wY29sbGVjdGlvbnOUalYxAQBNjgFNjwGHlIweUGlwZWxpbmVJbmZvLmxlYWZfcGNvbGxlY3Rpb25zlGpWMQEATZEBTZQBh5SMFVBpcGVsaW5lSW5mby5wcm9kdWNlcpRqVjEBAE2WAU2XAYeUjBhQaXBlbGluZUluZm8uY2FjaGVfbGFiZWyUalYxAQBNmQFNmwGHlIwYUGlwZWxpbmVJbmZvLl9kZXJpdmF0aW9ulGpWMQEATZ0BTagBh5SMIFBpcGVsaW5lSW5mby5EZXJpdmF0aW9uLl9faW5pdF9flGpWMQEATawBTbwBh5SMHlBpcGVsaW5lSW5mby5EZXJpdmF0aW9uLl9fZXFfX5RqVjEBAE2+AU3DAYeUjB5QaXBlbGluZUluZm8uRGVyaXZhdGlvbi5fX25lX1+UalYxAQBNxQFNxwGHlIwgUGlwZWxpbmVJbmZvLkRlcml2YXRpb24uX19oYXNoX1+UalYxAQBNyQFN0AGHlIwjUGlwZWxpbmVJbmZvLkRlcml2YXRpb24uY2FjaGVfbGFiZWyUalYxAQBN0gFN1AGHlIwcUGlwZWxpbmVJbmZvLkRlcml2YXRpb24uanNvbpRqVjEBAE3WAU3bAYeUjCBQaXBlbGluZUluZm8uRGVyaXZhdGlvbi5fX3JlcHJfX5RqVjEBAE3dAU3eAYeUjBdQaXBlbGluZUluZm8uRGVyaXZhdGlvbpRqXTEBAE2qAU3eAYeUjAxQaXBlbGluZUluZm+Ual0xAQBNdgFN3gGHlIwNc2V0X3Byb3RvX21hcJRqVjEBAE3iAU3lAYeUdX2UKIwQUGlwZWxpbmVBbmFseXplcpRqwwMAAIweUGlwZWxpbmVBbmFseXplci5waXBlbGluZV9pbmZvlGrDAwAAjCpQaXBlbGluZUFuYWx5emVyLnBpcGVsaW5lX3Byb3RvX3RvX2V4ZWN1dGWUasMDAACMKFBpcGVsaW5lQW5hbHl6ZXIudGxfcmVmZXJlbmNlZF9wY29sbF9pZHOUasMDAACMJlBpcGVsaW5lQW5hbHl6ZXIudGxfcmVxdWlyZWRfdHJhbnNfaWRzlGrDAwAAjBxQaXBlbGluZUFuYWx5emVyLmNhY2hlc191c2VklGrDAwAAjB9QaXBlbGluZUFuYWx5emVyLnJlYWRfY2FjaGVfaWRzlGrDAwAAjCBQaXBlbGluZUFuYWx5emVyLndyaXRlX2NhY2hlX2lkc5RqwwMAAIwMUGlwZWxpbmVJbmZvlGrDAwAAjB1QaXBlbGluZUluZm8uYWxsX3Bjb2xsZWN0aW9uc5RqwwMAAIweUGlwZWxpbmVJbmZvLmxlYWZfcGNvbGxlY3Rpb25zlGrDAwAAjBVQaXBlbGluZUluZm8ucHJvZHVjZXKUasMDAACMGFBpcGVsaW5lSW5mby5jYWNoZV9sYWJlbJRqwwMAAIwXUGlwZWxpbmVJbmZvLkRlcml2YXRpb26UasMDAACMI1BpcGVsaW5lSW5mby5EZXJpdmF0aW9uLmNhY2hlX2xhYmVslGrDAwAAjBxQaXBlbGluZUluZm8uRGVyaXZhdGlvbi5qc29ulGrDAwAAjA1zZXRfcHJvdG9fbWFwlGrDAwAAdYwxYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9hbmFseXplcpR0lIwxYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5waXBlbGluZV9mcmFnbWVudJQoWOgkAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1vZHVsZSB0byBidWlsZCBwaXBlbGluZSBmcmFnbWVudCB0aGF0IHByb2R1Y2VzIGdpdmVuIFBDb2xsZWN0aW9ucy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZVZpc2l0b3IKCgpjbGFzcyBQaXBlbGluZUZyYWdtZW50KG9iamVjdCk6CiAgIiIiQSBmcmFnbWVudCBvZiBhIHBpcGVsaW5lIGRlZmluaXRpb24uCgogIEEgcGlwZWxpbmUgZnJhZ21lbnQgaXMgYnVpbHQgZnJvbSB0aGUgb3JpZ2luYWwgcGlwZWxpbmUgZGVmaW5pdGlvbiB0byBpbmNsdWRlCiAgb25seSBQVHJhbnNmb3JtcyB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gcHJvZHVjZSB0aGUgZ2l2ZW4gUENvbGxlY3Rpb25zLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwY29sbHMsIG9wdGlvbnM9Tm9uZSk6CiAgICAiIiJDb25zdHJ1Y3RvciBvZiBQaXBlbGluZUZyYWdtZW50LgoKICAgIEFyZ3M6CiAgICAgIHBjb2xsczogKExpc3RbUENvbGxlY3Rpb25dKSBhIGxpc3Qgb2YgUENvbGxlY3Rpb25zIHRvIGJ1aWxkIHBpcGVsaW5lCiAgICAgICAgICBmcmFnbWVudCBmb3IuCiAgICAgIG9wdGlvbnM6IChQaXBlbGluZU9wdGlvbnMpIHRoZSBwaXBlbGluZSBvcHRpb25zIGZvciB0aGUgaW1wbGljaXQKICAgICAgICAgIHBpcGVsaW5lIHJ1bi4KICAgICIiIgogICAgYXNzZXJ0IGxlbihwY29sbHMpID4gMCwgKAogICAgICAgICdOZWVkIGF0IGxlYXN0IDEgUENvbGxlY3Rpb24gYXMgdGhlIHRhcmdldCBkYXRhIHRvIGJ1aWxkIGEgcGlwZWxpbmUgJwogICAgICAgICdmcmFnbWVudCB0aGF0IHByb2R1Y2VzIGl0LicpCiAgICBmb3IgcGNvbGwgaW4gcGNvbGxzOgogICAgICBhc3NlcnQgaXNpbnN0YW5jZShwY29sbCwgYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24pLCAoCiAgICAgICAgICAne30gaXMgbm90IGFuIGFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbi4nLmZvcm1hdChwY29sbCkpCiAgICAjIE5vIG1vZGlmaWNhdGlvbiB0byBzZWxmLl91c2VyX3BpcGVsaW5lIGlzIGFsbG93ZWQuCiAgICBzZWxmLl91c2VyX3BpcGVsaW5lID0gcGNvbGxzWzBdLnBpcGVsaW5lCiAgICAjIFRoZXNlIGFyZSB1c2VyIFBDb2xsZWN0aW9ucy4gRG8gbm90IHVzZSB0aGVtIHRvIGRlZHVjZSBhbnl0aGluZyB0aGF0CiAgICAjIHdpbGwgYmUgZXhlY3V0ZWQgYnkgYW55IHJ1bm5lci4gSW5zdGVhZCwgdXNlCiAgICAjIGBzZWxmLl9ydW5uZXJfcGNvbGxzX3RvX3VzZXJfcGNvbGxzLmtleXMoKWAgdG8gZ2V0IGNvcGllZCBQQ29sbGVjdGlvbnMuCiAgICBzZWxmLl9wY29sbHMgPSBzZXQocGNvbGxzKQogICAgZm9yIHBjb2xsIGluIHNlbGYuX3Bjb2xsczoKICAgICAgYXNzZXJ0IHBjb2xsLnBpcGVsaW5lIGlzIHNlbGYuX3VzZXJfcGlwZWxpbmUsICgKICAgICAgICAgICd7fSBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHVzZXIgcGlwZWxpbmUgdGhhbiBvdGhlciBQQ29sbGVjdGlvbnMgJwogICAgICAgICAgJ2dpdmVuIGFuZCBjYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHBpcGVsaW5lIGZyYWdtZW50IHRoYXQgcHJvZHVjZXMgJwogICAgICAgICAgJ3RoZSBnaXZlbiBQQ29sbGVjdGlvbnMuJy5mb3JtYXQocGNvbGwpKQogICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKCiAgICAjIEEgY29waWVkIHBpcGVsaW5lIGluc3RhbmNlIGZvciBtb2RpZmljYXRpb24gd2l0aG91dCBjaGFuZ2luZyB0aGUgdXNlcgogICAgIyBwaXBlbGluZSBpbnN0YW5jZSBoZWxkIGJ5IHRoZSBlbmQgdXNlci4gVGhpcyBpbnN0YW5jZSBjYW4gYmUgcHJvY2Vzc2VkCiAgICAjIGludG8gYSBwaXBlbGluZSBmcmFnbWVudCB0aGF0IGxhdGVyIHJ1biBieSB0aGUgdW5kZXJseWluZyBydW5uZXIuCiAgICBzZWxmLl9ydW5uZXJfcGlwZWxpbmUgPSBzZWxmLl9idWlsZF9ydW5uZXJfcGlwZWxpbmUoKQogICAgXywgc2VsZi5fY29udGV4dCA9IHNlbGYuX3J1bm5lcl9waXBlbGluZS50b19ydW5uZXJfYXBpKAogICAgICAgIHJldHVybl9jb250ZXh0PVRydWUsIHVzZV9mYWtlX2NvZGVycz1UcnVlKQogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBwaXBlbGluZV9pbnN0cnVtZW50IGFzIGluc3RyCiAgICBzZWxmLl9ydW5uZXJfcGNvbGxfdG9faWQgPSBpbnN0ci5wY29sbHNfdG9fcGNvbGxfaWQoCiAgICAgICAgc2VsZi5fcnVubmVyX3BpcGVsaW5lLCBzZWxmLl9jb250ZXh0KQogICAgIyBDb3JyZWxhdGUgY29tcG9uZW50cyBpbiB0aGUgcnVubmVyIHBpcGVsaW5lIHRvIGNvbXBvbmVudHMgaW4gdGhlIHVzZXIKICAgICMgcGlwZWxpbmUuIFRoZSB0YXJnZXQgcGNvbGxzIGFyZSB0aGUgcGNvbGxzIGdpdmVuIGFuZCBkZWZpbmVkIGluIHRoZSB1c2VyCiAgICAjIHBpcGVsaW5lLgogICAgc2VsZi5faWRfdG9fdGFyZ2V0X3Bjb2xsID0gc2VsZi5fY2FsY3VsYXRlX3RhcmdldF9wY29sbF9pZHMoKQogICAgc2VsZi5fbGFiZWxfdG9fdXNlcl90cmFuc2Zvcm0gPSBzZWxmLl9jYWxjdWxhdGVfdXNlcl90cmFuc2Zvcm1fbGFiZWxzKCkKICAgICMgQmVsb3cgd2lsbCBnaXZlIHVzIHRoZSAxOjEgY29ycmVsYXRpb24gYmV0d2VlbgogICAgIyBQQ29sbGVjdGlvbnMvQXBwbGllZFBUcmFuc2Zvcm1zIGZyb20gdGhlIGNvcGllZCBydW5uZXIgcGlwZWxpbmUgYW5kCiAgICAjIFBDb2xsZWN0aW9ucy9BcHBsaWVkUFRyYW5zZm9ybXMgZnJvbSB0aGUgdXNlciBwaXBlbGluZS4KICAgICMgKERpY3RbUENvbGxlY3Rpb24sIFBDb2xsZWN0aW9uXSkKICAgICgKICAgICAgICBzZWxmLl9ydW5uZXJfcGNvbGxzX3RvX3VzZXJfcGNvbGxzLAogICAgICAgICMgKERpY3RbQXBwbGllZFBUcmFuc2Zvcm0sIEFwcGxpZWRQVHJhbnNmb3JtXSkKICAgICAgICBzZWxmLl9ydW5uZXJfdHJhbnNmb3Jtc190b191c2VyX3RyYW5zZm9ybXMKICAgICkgPSBzZWxmLl9idWlsZF9jb3JyZWxhdGlvbl9iZXR3ZWVuX3BpcGVsaW5lcygKICAgICAgICBzZWxmLl9ydW5uZXJfcGNvbGxfdG9faWQsCiAgICAgICAgc2VsZi5faWRfdG9fdGFyZ2V0X3Bjb2xsLAogICAgICAgIHNlbGYuX2xhYmVsX3RvX3VzZXJfdHJhbnNmb3JtKQoKICAgICMgQmVsb3cgYXJlIG9wZXJhdGVkIG9uIHRoZSBydW5uZXIgcGlwZWxpbmUuCiAgICAoc2VsZi5fbmVjZXNzYXJ5X3RyYW5zZm9ybXMsCiAgICAgc2VsZi5fbmVjZXNzYXJ5X3Bjb2xsZWN0aW9ucykgPSBzZWxmLl9tYXJrX25lY2Vzc2FyeV90cmFuc2Zvcm1zX2FuZF9wY29sbHMoCiAgICAgICAgIHNlbGYuX3J1bm5lcl9wY29sbHNfdG9fdXNlcl9wY29sbHMpCiAgICBzZWxmLl9ydW5uZXJfcGlwZWxpbmUgPSBzZWxmLl9wcnVuZV9ydW5uZXJfcGlwZWxpbmVfdG9fZnJhZ21lbnQoCiAgICAgICAgc2VsZi5fcnVubmVyX3BpcGVsaW5lLCBzZWxmLl9uZWNlc3NhcnlfdHJhbnNmb3JtcykKCiAgZGVmIGRlZHVjZV9mcmFnbWVudChzZWxmKToKICAgICIiIkRlZHVjZSB0aGUgcGlwZWxpbmUgZnJhZ21lbnQgYXMgYW4gYXBhY2hlX2JlYW0uUGlwZWxpbmUgaW5zdGFuY2UuIiIiCiAgICByZXR1cm4gYmVhbS5waXBlbGluZS5QaXBlbGluZS5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgc2VsZi5fcnVubmVyX3BpcGVsaW5lLnRvX3J1bm5lcl9hcGkodXNlX2Zha2VfY29kZXJzPVRydWUpLAogICAgICAgIHNlbGYuX3J1bm5lcl9waXBlbGluZS5ydW5uZXIsCiAgICAgICAgc2VsZi5fb3B0aW9ucykKCiAgZGVmIHJ1bihzZWxmLCBkaXNwbGF5X3BpcGVsaW5lX2dyYXBoPUZhbHNlLCB1c2VfY2FjaGU9VHJ1ZSwgYmxvY2tpbmc9RmFsc2UpOgogICAgIiIiU2hvcnRoYW5kIHRvIHJ1biB0aGUgcGlwZWxpbmUgZnJhZ21lbnQuIiIiCiAgICB0cnk6CiAgICAgIHByZXNlcnZlZF9za2lwX2Rpc3BsYXkgPSBzZWxmLl9ydW5uZXJfcGlwZWxpbmUucnVubmVyLl9za2lwX2Rpc3BsYXkKICAgICAgcHJlc2VydmVkX2ZvcmNlX2NvbXB1dGUgPSBzZWxmLl9ydW5uZXJfcGlwZWxpbmUucnVubmVyLl9mb3JjZV9jb21wdXRlCiAgICAgIHByZXNlcnZlZF9ibG9ja2luZyA9IHNlbGYuX3J1bm5lcl9waXBlbGluZS5ydW5uZXIuX2Jsb2NraW5nCiAgICAgIHNlbGYuX3J1bm5lcl9waXBlbGluZS5ydW5uZXIuX3NraXBfZGlzcGxheSA9IG5vdCBkaXNwbGF5X3BpcGVsaW5lX2dyYXBoCiAgICAgIHNlbGYuX3J1bm5lcl9waXBlbGluZS5ydW5uZXIuX2ZvcmNlX2NvbXB1dGUgPSBub3QgdXNlX2NhY2hlCiAgICAgIHNlbGYuX3J1bm5lcl9waXBlbGluZS5ydW5uZXIuX2Jsb2NraW5nID0gYmxvY2tpbmcKICAgICAgcmV0dXJuIHNlbGYuZGVkdWNlX2ZyYWdtZW50KCkucnVuKCkKICAgIGZpbmFsbHk6CiAgICAgIHNlbGYuX3J1bm5lcl9waXBlbGluZS5ydW5uZXIuX3NraXBfZGlzcGxheSA9IHByZXNlcnZlZF9za2lwX2Rpc3BsYXkKICAgICAgc2VsZi5fcnVubmVyX3BpcGVsaW5lLnJ1bm5lci5fZm9yY2VfY29tcHV0ZSA9IHByZXNlcnZlZF9mb3JjZV9jb21wdXRlCiAgICAgIHNlbGYuX3J1bm5lcl9waXBlbGluZS5ydW5uZXIuX2Jsb2NraW5nID0gcHJlc2VydmVkX2Jsb2NraW5nCgogIGRlZiBfYnVpbGRfcnVubmVyX3BpcGVsaW5lKHNlbGYpOgogICAgcmV0dXJuIGJlYW0ucGlwZWxpbmUuUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgIHNlbGYuX3VzZXJfcGlwZWxpbmUudG9fcnVubmVyX2FwaSh1c2VfZmFrZV9jb2RlcnM9VHJ1ZSksCiAgICAgICAgc2VsZi5fdXNlcl9waXBlbGluZS5ydW5uZXIsCiAgICAgICAgc2VsZi5fb3B0aW9ucykKCiAgZGVmIF9jYWxjdWxhdGVfdGFyZ2V0X3Bjb2xsX2lkcyhzZWxmKToKICAgIHBjb2xsX2lkX3RvX3RhcmdldF9wY29sbCA9IHt9CiAgICBmb3IgcGNvbGwgaW4gc2VsZi5fcGNvbGxzOgogICAgICBwY29sbF9pZF90b190YXJnZXRfcGNvbGxbc2VsZi5fcnVubmVyX3Bjb2xsX3RvX2lkLmdldChzdHIocGNvbGwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyldID0gcGNvbGwKICAgIHJldHVybiBwY29sbF9pZF90b190YXJnZXRfcGNvbGwKCiAgZGVmIF9jYWxjdWxhdGVfdXNlcl90cmFuc2Zvcm1fbGFiZWxzKHNlbGYpOgogICAgbGFiZWxfdG9fdXNlcl90cmFuc2Zvcm0gPSB7fQoKICAgIGNsYXNzIFVzZXJUcmFuc2Zvcm1WaXNpdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLnZpc2l0X3RyYW5zZm9ybSh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGlmIHRyYW5zZm9ybV9ub2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgbGFiZWxfdG9fdXNlcl90cmFuc2Zvcm1bdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbF0gPSB0cmFuc2Zvcm1fbm9kZQoKICAgIHYgPSBVc2VyVHJhbnNmb3JtVmlzaXRvcigpCiAgICBzZWxmLl9ydW5uZXJfcGlwZWxpbmUudmlzaXQodikKICAgIHJldHVybiBsYWJlbF90b191c2VyX3RyYW5zZm9ybQoKICBkZWYgX2J1aWxkX2NvcnJlbGF0aW9uX2JldHdlZW5fcGlwZWxpbmVzKAogICAgICBzZWxmLCBydW5uZXJfcGNvbGxfdG9faWQsIGlkX3RvX3RhcmdldF9wY29sbCwgbGFiZWxfdG9fdXNlcl90cmFuc2Zvcm0pOgogICAgcnVubmVyX3Bjb2xsc190b191c2VyX3Bjb2xscyA9IHt9CiAgICBydW5uZXJfdHJhbnNmb3Jtc190b191c2VyX3RyYW5zZm9ybXMgPSB7fQoKICAgIGNsYXNzIENvcnJlbGF0aW9uVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgc2VsZi52aXNpdF90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUpCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLl9wcm9jZXNzX3RyYW5zZm9ybSh0cmFuc2Zvcm1fbm9kZSkKICAgICAgICBmb3IgaW5fcGNvbGwgaW4gdHJhbnNmb3JtX25vZGUuaW5wdXRzOgogICAgICAgICAgc2VsZi5fcHJvY2Vzc19wY29sbChpbl9wY29sbCkKICAgICAgICBmb3Igb3V0X3Bjb2xsIGluIHRyYW5zZm9ybV9ub2RlLm91dHB1dHMudmFsdWVzKCk6CiAgICAgICAgICBzZWxmLl9wcm9jZXNzX3Bjb2xsKG91dF9wY29sbCkKCiAgICAgIGRlZiBfcHJvY2Vzc19wY29sbChzZWxmLCBwY29sbCk6CiAgICAgICAgcGNvbGxfaWQgPSBydW5uZXJfcGNvbGxfdG9faWQuZ2V0KHN0cihwY29sbCksICcnKQogICAgICAgIGlmIHBjb2xsX2lkIGluIGlkX3RvX3RhcmdldF9wY29sbDoKICAgICAgICAgIHJ1bm5lcl9wY29sbHNfdG9fdXNlcl9wY29sbHNbcGNvbGxdID0gKGlkX3RvX3RhcmdldF9wY29sbFtwY29sbF9pZF0pCgogICAgICBkZWYgX3Byb2Nlc3NfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBpZiB0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsIGluIGxhYmVsX3RvX3VzZXJfdHJhbnNmb3JtOgogICAgICAgICAgcnVubmVyX3RyYW5zZm9ybXNfdG9fdXNlcl90cmFuc2Zvcm1zW3RyYW5zZm9ybV9ub2RlXSA9ICgKICAgICAgICAgICAgICBsYWJlbF90b191c2VyX3RyYW5zZm9ybVt0cmFuc2Zvcm1fbm9kZS5mdWxsX2xhYmVsXSkKCiAgICB2ID0gQ29ycmVsYXRpb25WaXNpdG9yKCkKICAgIHNlbGYuX3J1bm5lcl9waXBlbGluZS52aXNpdCh2KQogICAgcmV0dXJuIHJ1bm5lcl9wY29sbHNfdG9fdXNlcl9wY29sbHMsIHJ1bm5lcl90cmFuc2Zvcm1zX3RvX3VzZXJfdHJhbnNmb3JtcwoKICBkZWYgX21hcmtfbmVjZXNzYXJ5X3RyYW5zZm9ybXNfYW5kX3Bjb2xscyhzZWxmLCBydW5uZXJfcGNvbGxzX3RvX3VzZXJfcGNvbGxzKToKICAgIG5lY2Vzc2FyeV90cmFuc2Zvcm1zID0gc2V0KCkKICAgIGFsbF9pbnB1dHMgPSBzZXQoKQogICAgdXBkYXRlZF9hbGxfaW5wdXRzID0gc2V0KHJ1bm5lcl9wY29sbHNfdG9fdXNlcl9wY29sbHMua2V5cygpKQogICAgIyBEbyB0aGlzIHVudGlsIG5vIG1vcmUgbmV3IFBDb2xsZWN0aW9uIGlzIHJlY29yZGVkLgogICAgd2hpbGUgbGVuKHVwZGF0ZWRfYWxsX2lucHV0cykgIT0gbGVuKGFsbF9pbnB1dHMpOgogICAgICBhbGxfaW5wdXRzID0gc2V0KHVwZGF0ZWRfYWxsX2lucHV0cykKICAgICAgZm9yIHBjb2xsIGluIGFsbF9pbnB1dHM6CiAgICAgICAgcHJvZHVjZXIgPSBwY29sbC5wcm9kdWNlcgogICAgICAgIHdoaWxlIHByb2R1Y2VyOgogICAgICAgICAgaWYgcHJvZHVjZXIgaW4gbmVjZXNzYXJ5X3RyYW5zZm9ybXM6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAjIE1hcmsgdGhlIEFwcGxpZWRQVHJhbnNmb3JtIGFzIG5lY2Vzc2FyeS4KICAgICAgICAgIG5lY2Vzc2FyeV90cmFuc2Zvcm1zLmFkZChwcm9kdWNlcikKICAgICAgICAgICMgUmVjb3JkIGFsbCBuZWNlc3NhcnkgaW5wdXQgYW5kIHNpZGUgaW5wdXQgUENvbGxlY3Rpb25zLgogICAgICAgICAgdXBkYXRlZF9hbGxfaW5wdXRzLnVwZGF0ZShwcm9kdWNlci5pbnB1dHMpCiAgICAgICAgICAjIHB5bGludDogZGlzYWJsZT1tYXAtYnVpbHRpbi1ub3QtaXRlcmF0aW5nCiAgICAgICAgICBzaWRlX2lucHV0X3B2YWx1ZXMgPSBzZXQoCiAgICAgICAgICAgICAgbWFwKGxhbWJkYSBzaWRlX2lucHV0OiBzaWRlX2lucHV0LnB2YWx1ZSwgcHJvZHVjZXIuc2lkZV9pbnB1dHMpKQogICAgICAgICAgdXBkYXRlZF9hbGxfaW5wdXRzLnVwZGF0ZShzaWRlX2lucHV0X3B2YWx1ZXMpCiAgICAgICAgICAjIEdvIHRvIGl0cyBwYXJlbnQgQXBwbGllZFBUcmFuc2Zvcm0uCiAgICAgICAgICBwcm9kdWNlciA9IHByb2R1Y2VyLnBhcmVudAogICAgcmV0dXJuIG5lY2Vzc2FyeV90cmFuc2Zvcm1zLCBhbGxfaW5wdXRzCgogIGRlZiBfcHJ1bmVfcnVubmVyX3BpcGVsaW5lX3RvX2ZyYWdtZW50KAogICAgICBzZWxmLCBydW5uZXJfcGlwZWxpbmUsIG5lY2Vzc2FyeV90cmFuc2Zvcm1zKToKICAgIGNsYXNzIFBydW5lVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgcHJ1bmVkX3BhcnRzID0gbGlzdCh0cmFuc2Zvcm1fbm9kZS5wYXJ0cykKICAgICAgICBmb3IgcGFydCBpbiB0cmFuc2Zvcm1fbm9kZS5wYXJ0czoKICAgICAgICAgIGlmIHBhcnQgbm90IGluIG5lY2Vzc2FyeV90cmFuc2Zvcm1zOgogICAgICAgICAgICBwcnVuZWRfcGFydHMucmVtb3ZlKHBhcnQpCiAgICAgICAgdHJhbnNmb3JtX25vZGUucGFydHMgPSB0dXBsZShwcnVuZWRfcGFydHMpCiAgICAgICAgc2VsZi52aXNpdF90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUpCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBpZiB0cmFuc2Zvcm1fbm9kZSBub3QgaW4gbmVjZXNzYXJ5X3RyYW5zZm9ybXM6CiAgICAgICAgICB0cmFuc2Zvcm1fbm9kZS5wYXJlbnQgPSBOb25lCgogICAgdiA9IFBydW5lVmlzaXRvcigpCiAgICBydW5uZXJfcGlwZWxpbmUudmlzaXQodikKICAgIHJldHVybiBydW5uZXJfcGlwZWxpbmUKlH2UKIwZUGlwZWxpbmVGcmFnbWVudC5fX2luaXRfX5RqVjEBAEsiS16HlIwgUGlwZWxpbmVGcmFnbWVudC5kZWR1Y2VfZnJhZ21lbnSUalYxAQBLYEtlh5SMFFBpcGVsaW5lRnJhZ21lbnQucnVulGpWMQEAS2dLdIeUjCdQaXBlbGluZUZyYWdtZW50Ll9idWlsZF9ydW5uZXJfcGlwZWxpbmWUalYxAQBLdkt6h5SMLFBpcGVsaW5lRnJhZ21lbnQuX2NhbGN1bGF0ZV90YXJnZXRfcGNvbGxfaWRzlGpWMQEAS3xLgYeUjGBQaXBlbGluZUZyYWdtZW50Ll9jYWxjdWxhdGVfdXNlcl90cmFuc2Zvcm1fbGFiZWxzLlVzZXJUcmFuc2Zvcm1WaXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm2UalYxAQBLh0uIh5SMVlBpcGVsaW5lRnJhZ21lbnQuX2NhbGN1bGF0ZV91c2VyX3RyYW5zZm9ybV9sYWJlbHMuVXNlclRyYW5zZm9ybVZpc2l0b3IudmlzaXRfdHJhbnNmb3JtlGpWMQEAS4pLjIeUjEZQaXBlbGluZUZyYWdtZW50Ll9jYWxjdWxhdGVfdXNlcl90cmFuc2Zvcm1fbGFiZWxzLlVzZXJUcmFuc2Zvcm1WaXNpdG9ylGpdMQEAS4ZLjIeUjDFQaXBlbGluZUZyYWdtZW50Ll9jYWxjdWxhdGVfdXNlcl90cmFuc2Zvcm1fbGFiZWxzlGpWMQEAS4NLkIeUjGJQaXBlbGluZUZyYWdtZW50Ll9idWlsZF9jb3JyZWxhdGlvbl9iZXR3ZWVuX3BpcGVsaW5lcy5Db3JyZWxhdGlvblZpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybZRqVjEBAEuYS5mHlIxYUGlwZWxpbmVGcmFnbWVudC5fYnVpbGRfY29ycmVsYXRpb25fYmV0d2Vlbl9waXBlbGluZXMuQ29ycmVsYXRpb25WaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqVjEBAEubS6CHlIxXUGlwZWxpbmVGcmFnbWVudC5fYnVpbGRfY29ycmVsYXRpb25fYmV0d2Vlbl9waXBlbGluZXMuQ29ycmVsYXRpb25WaXNpdG9yLl9wcm9jZXNzX3Bjb2xslGpWMQEAS6JLpYeUjFtQaXBlbGluZUZyYWdtZW50Ll9idWlsZF9jb3JyZWxhdGlvbl9iZXR3ZWVuX3BpcGVsaW5lcy5Db3JyZWxhdGlvblZpc2l0b3IuX3Byb2Nlc3NfdHJhbnNmb3JtlGpWMQEAS6dLqoeUjEhQaXBlbGluZUZyYWdtZW50Ll9idWlsZF9jb3JyZWxhdGlvbl9iZXR3ZWVuX3BpcGVsaW5lcy5Db3JyZWxhdGlvblZpc2l0b3KUal0xAQBLl0uqh5SMNVBpcGVsaW5lRnJhZ21lbnQuX2J1aWxkX2NvcnJlbGF0aW9uX2JldHdlZW5fcGlwZWxpbmVzlGpWMQEAS5JLroeUjDZQaXBlbGluZUZyYWdtZW50Ll9tYXJrX25lY2Vzc2FyeV90cmFuc2Zvcm1zX2FuZF9wY29sbHOUalYxAQBLsEvGh5SMWlBpcGVsaW5lRnJhZ21lbnQuX3BydW5lX3J1bm5lcl9waXBlbGluZV90b19mcmFnbWVudC5QcnVuZVZpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybZRqVjEBAEvLS9GHlIxQUGlwZWxpbmVGcmFnbWVudC5fcHJ1bmVfcnVubmVyX3BpcGVsaW5lX3RvX2ZyYWdtZW50LlBydW5lVmlzaXRvci52aXNpdF90cmFuc2Zvcm2UalYxAQBL00vVh5SMQFBpcGVsaW5lRnJhZ21lbnQuX3BydW5lX3J1bm5lcl9waXBlbGluZV90b19mcmFnbWVudC5QcnVuZVZpc2l0b3KUal0xAQBLykvVh5SMM1BpcGVsaW5lRnJhZ21lbnQuX3BydW5lX3J1bm5lcl9waXBlbGluZV90b19mcmFnbWVudJRqVjEBAEvIS9mHlIwQUGlwZWxpbmVGcmFnbWVudJRqXTEBAEscS9mHlHV9lCiMEFBpcGVsaW5lRnJhZ21lbnSUasoDAACMIFBpcGVsaW5lRnJhZ21lbnQuZGVkdWNlX2ZyYWdtZW50lGrKAwAAjBRQaXBlbGluZUZyYWdtZW50LnJ1bpRqygMAAHWMMWFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfZnJhZ21lbnSUdJSMM2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudJQoWAVlAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1vZHVsZSB0byBpbnN0cnVtZW50IGludGVyYWN0aXZpdHkgdG8gdGhlIGdpdmVuIHBpcGVsaW5lLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgpUaGlzIG1vZHVsZSBhY2Nlc3NlcyBjdXJyZW50IGludGVyYWN0aXZlIGVudmlyb25tZW50IGFuZCBhbmFseXplcyBnaXZlbiBwaXBlbGluZQp0byB0cmFuc2Zvcm0gb3JpZ2luYWwgcGlwZWxpbmUgaW50byBhIG9uZS1zaG90IHBpcGVsaW5lIHdpdGggaW50ZXJhY3Rpdml0eS4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZVZpc2l0b3IKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmludGVyYWN0aXZlIGltcG9ydCBjYWNoZV9tYW5hZ2VyIGFzIGNhY2hlCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZSBpbXBvcnQgaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQgYXMgaWUKClJFQURfQ0FDSEUgPSAiX1JlYWRDYWNoZV8iCldSSVRFX0NBQ0hFID0gIl9Xcml0ZUNhY2hlXyIKCgpjbGFzcyBQaXBlbGluZUluc3RydW1lbnQob2JqZWN0KToKICAiIiJBIHBpcGVsaW5lIGluc3RydW1lbnQgZm9yIHBpcGVsaW5lIHRvIGJlIGV4ZWN1dGVkIGJ5IGludGVyYWN0aXZlIHJ1bm5lci4KCiAgVGhpcyBtb2R1bGUgc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiB1bmRlcmx5aW5nIHJ1bm5lciB0aGF0IGludGVyYWN0aXZlIHJ1bm5lcgogIGRlbGVnYXRlcy4gSXQgaW5zdHJ1bWVudHMgdGhlIG9yaWdpbmFsIGluc3RhbmNlIG9mIHBpcGVsaW5lIGRpcmVjdGx5IGJ5CiAgYXBwZW5kaW5nIG9yIHJlcGxhY2luZyB0cmFuc2Zvcm1zIHdpdGggaGVscCBvZiBjYWNoZS4gSXQgcHJvdmlkZXMKICBpbnRlcmZhY2VzIHRvIHJlY292ZXIgc3RhdGVzIG9mIG9yaWdpbmFsIHBpcGVsaW5lLiBJdCdzIHRoZSBpbnRlcmFjdGl2ZQogIHJ1bm5lcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNvb3JkaW5hdGUgc3VwcG9ydGVkIHVuZGVybHlpbmcgcnVubmVycyB0byBydW4KICB0aGUgcGlwZWxpbmUgaW5zdHJ1bWVudGVkIGFuZCByZWNvdmVyIHRoZSBvcmlnaW5hbCBwaXBlbGluZSBzdGF0ZXMgaWYgbmVlZGVkLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwaXBlbGluZSwgb3B0aW9ucz1Ob25lKToKICAgIHNlbGYuX3BpcGVsaW5lID0gcGlwZWxpbmUKICAgICMgVGhlIGdsb2JhbCBjYWNoZSBtYW5hZ2VyIGlzIGxhemlseSBpbml0aWF0ZWQgb3V0c2lkZSBvZiB0aGlzIG1vZHVsZSBieSBhbnkKICAgICMgaW50ZXJhY3RpdmUgcnVubmVyIHNvIHRoYXQgaXRzIGxpZmVzcGFuIGNvdWxkIGNvdmVyIG11bHRpcGxlIHJ1bnMgaW4KICAgICMgdGhlIGludGVyYWN0aXZlIGVudmlyb25tZW50LiBPd25lZCBieSBpbnRlcmFjdGl2ZV9lbnZpcm9ubWVudCBtb2R1bGUuIE5vdAogICAgIyBvd25lZCBieSB0aGlzIG1vZHVsZS4KICAgIHNlbGYuX2NhY2hlX21hbmFnZXIgPSBpZS5jdXJyZW50X2VudigpLmNhY2hlX21hbmFnZXIoKQoKICAgICMgSW52b2tlIGEgcm91bmQgdHJpcCB0aHJvdWdoIHRoZSBydW5uZXIgQVBJLiBUaGlzIG1ha2VzIHN1cmUgdGhlIFBpcGVsaW5lCiAgICAjIHByb3RvIGlzIHN0YWJsZS4gVGhlIHNuYXBzaG90IG9mIHBpcGVsaW5lIHdpbGwgbm90IGJlIG11dGF0ZWQgd2l0aGluIHRoaXMKICAgICMgbW9kdWxlIGFuZCBjYW4gYmUgdXNlZCB0byByZWNvdmVyIG9yaWdpbmFsIHBpcGVsaW5lIGlmIG5lZWRlZC4KICAgIHNlbGYuX3BpcGVsaW5lX3NuYXAgPSBiZWFtLnBpcGVsaW5lLlBpcGVsaW5lLmZyb21fcnVubmVyX2FwaSgKICAgICAgICBwaXBlbGluZS50b19ydW5uZXJfYXBpKHVzZV9mYWtlX2NvZGVycz1UcnVlKSwgcGlwZWxpbmUucnVubmVyLCBvcHRpb25zKQoKICAgIHNlbGYuX2JhY2tncm91bmRfY2FjaGluZ19waXBlbGluZSA9IGJlYW0ucGlwZWxpbmUuUGlwZWxpbmUuZnJvbV9ydW5uZXJfYXBpKAogICAgICAgIHBpcGVsaW5lLnRvX3J1bm5lcl9hcGkodXNlX2Zha2VfY29kZXJzPVRydWUpLCBwaXBlbGluZS5ydW5uZXIsIG9wdGlvbnMpCgogICAgIyBTbmFwc2hvdCBvZiBvcmlnaW5hbCBwaXBlbGluZSBpbmZvcm1hdGlvbi4KICAgIChzZWxmLl9vcmlnaW5hbF9waXBlbGluZV9wcm90bywKICAgICBzZWxmLl9vcmlnaW5hbF9jb250ZXh0KSA9IHNlbGYuX3BpcGVsaW5lX3NuYXAudG9fcnVubmVyX2FwaSgKICAgICAgICAgcmV0dXJuX2NvbnRleHQ9VHJ1ZSwgdXNlX2Zha2VfY29kZXJzPVRydWUpCgogICAgIyBBbGwgY29tcHV0ZS1vbmNlLWFnYWluc3Qtb3JpZ2luYWwtcGlwZWxpbmUgZmllbGRzLgogICAgc2VsZi5fdW5ib3VuZGVkX3NvdXJjZXMgPSB1bmJvdW5kZWRfc291cmNlcygKICAgICAgICBzZWxmLl9iYWNrZ3JvdW5kX2NhY2hpbmdfcGlwZWxpbmUpCiAgICAjIFRPRE8oQkVBTS03NzYwKTogb25jZSBjYWNoZSBzY29wZSBjaGFuZ2VkLCB0aGlzIGlzIG5vdCBuZWVkZWQgdG8gbWFuYWdlCiAgICAjIHJlbGF0aW9uc2hpcHMgYWNyb3NzIHBpcGVsaW5lcywgcnVubmVycywgYW5kIGpvYnMuCiAgICBzZWxmLl9wY29sbHNfdG9fcGNvbGxfaWQgPSBwY29sbHNfdG9fcGNvbGxfaWQoCiAgICAgICAgc2VsZi5fcGlwZWxpbmVfc25hcCwgc2VsZi5fb3JpZ2luYWxfY29udGV4dCkKCiAgICAjIEEgbWFwcGluZyBmcm9tIFBDb2xsZWN0aW9uIGlkIHRvIHB5dGhvbiBpZCgpIHZhbHVlIGluIHVzZXIgZGVmaW5lZAogICAgIyBwaXBlbGluZSBpbnN0YW5jZS4KICAgICgKICAgICAgICBzZWxmLl9wY29sbF92ZXJzaW9uX21hcCwKICAgICAgICBzZWxmLl9jYWNoZWFibGVzLAogICAgICAgICMgQSBkaWN0IGZyb20gcGNvbGxfaWQgdG8gdmFyaWFibGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlZCBQQ29sbGVjdGlvbi4KICAgICAgICAjIChEaWN0W3N0ciwgc3RyXSkKICAgICAgICBzZWxmLl9jYWNoZWFibGVfdmFyX2J5X3Bjb2xsX2lkKSA9IGNhY2hlYWJsZXMoc2VsZi5wY29sbHNfdG9fcGNvbGxfaWQpCgogICAgIyBBIGRpY3QgZnJvbSBjYWNoZSBrZXkgdG8gUENvbGxlY3Rpb24gdGhhdCBpcyByZWFkIGZyb20gY2FjaGUuCiAgICAjIElmIGV4aXN0cywgY2FsbGVyIHNob3VsZCByZXVzZSB0aGUgUENvbGxlY3Rpb24gcmVhZC4gSWYgbm90LCBjYWxsZXIKICAgICMgc2hvdWxkIGNyZWF0ZSBuZXcgdHJhbnNmb3JtIGFuZCB0cmFjayB0aGUgUENvbGxlY3Rpb24gcmVhZCBmcm9tIGNhY2hlLgogICAgIyAoRGljdFtzdHIsIEFwcGxpZWRQVHJhbnNmb3JtXSkuCiAgICBzZWxmLl9jYWNoZWRfcGNvbGxfcmVhZCA9IHt9CgogICAgIyBSZWZlcmVuY2UgdG8gdGhlIHVzZXIgZGVmaW5lZCBwaXBlbGluZSBpbnN0YW5jZSBiYXNlZCBvbiB0aGUgZ2l2ZW4KICAgICMgcGlwZWxpbmUuIFRoZSBjbGFzcyBuZXZlciBtdXRhdGVzIGl0LgogICAgIyBOb3RlOiB0aGUgb3JpZ2luYWwgcGlwZWxpbmUgaXMgbm90IHRoZSB1c2VyIHBpcGVsaW5lLgogICAgc2VsZi5fdXNlcl9waXBlbGluZSA9IE5vbmUKCiAgICAjIEEgZGljdCBmcm9tIFBDb2xsZWN0aW9ucyBpbiB0aGUgcnVubmVyIHBpcGVsaW5lIGluc3RhbmNlIHRvIHRoZWlyCiAgICAjIGNvcnJlc3BvbmRpbmcgUENvbGxlY3Rpb25zIGluIHRoZSB1c2VyIHBpcGVsaW5lIGluc3RhbmNlLiBQb3B1bGF0ZWQKICAgICMgYWZ0ZXIgcHJlcHJvY2VzcygpLgogICAgc2VsZi5fcnVubmVyX3Bjb2xsX3RvX3VzZXJfcGNvbGwgPSB7fQoKICBkZWYgaW5zdHJ1bWVudGVkX3BpcGVsaW5lX3Byb3RvKHNlbGYpOgogICAgIiIiQWx3YXlzIHJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgcG9ydGFibGUgaW5zdHJ1bWVudGVkIHByb3RvLiIiIgogICAgcmV0dXJuIHNlbGYuX3BpcGVsaW5lLnRvX3J1bm5lcl9hcGkodXNlX2Zha2VfY29kZXJzPVRydWUpCgogIGRlZiBfcmVxdWlyZWRfY29tcG9uZW50cyhzZWxmLCBwaXBlbGluZV9wcm90bywgcmVxdWlyZWRfdHJhbnNmb3Jtc19pZHMpOgogICAgIiIiUmV0dXJucyB0aGUgY29tcG9uZW50cyBhbmQgc3ViY29tcG9uZW50cyBvZiB0aGUgZ2l2ZW4gdHJhbnNmb3Jtcy4KCiAgICBUaGlzIG1ldGhvZCByZXR1cm5zIGFsbCB0aGUgY29tcG9uZW50cyAodHJhbnNmb3JtcywgUENvbGxlY3Rpb25zLCBjb2RlcnMsCiAgICBhbmQgd2luZG93aW5nIHN0cmF0Z2llcykgcmVsYXRlZCB0byB0aGUgZ2l2ZW4gdHJhbnNmb3JtcyBhbmQgdG8gYWxsIG9mIHRoZWlyCiAgICBzdWJ0cmFuc2Zvcm1zLiBUaGlzIG1ldGhvZCBhY2NvbXBsaXNoZXMgdGhpcyByZWN1cnNpdmVseS4KICAgICIiIgogICAgdHJhbnNmb3JtcyA9IHBpcGVsaW5lX3Byb3RvLmNvbXBvbmVudHMudHJhbnNmb3JtcwogICAgcGNvbGxlY3Rpb25zID0gcGlwZWxpbmVfcHJvdG8uY29tcG9uZW50cy5wY29sbGVjdGlvbnMKICAgIGNvZGVycyA9IHBpcGVsaW5lX3Byb3RvLmNvbXBvbmVudHMuY29kZXJzCiAgICB3aW5kb3dpbmdfc3RyYXRlZ2llcyA9IHBpcGVsaW5lX3Byb3RvLmNvbXBvbmVudHMud2luZG93aW5nX3N0cmF0ZWdpZXMKCiAgICAjIENhY2hlIHRoZSB0cmFuc2Zvcm1zIHRoYXQgd2lsbCBiZSBjb3BpZWQgaW50byB0aGUgbmV3IHBpcGVsaW5lIHByb3RvLgogICAgcmVxdWlyZWRfdHJhbnNmb3JtcyA9IHtrOiB0cmFuc2Zvcm1zW2tdIGZvciBrIGluIHJlcXVpcmVkX3RyYW5zZm9ybXNfaWRzfQoKICAgICMgQ2FjaGUgYWxsIHRoZSBvdXRwdXQgUENvbGxlY3Rpb25zIG9mIHRoZSB0cmFuc2Zvcm1zLgogICAgcGNvbGxlY3Rpb25faWRzID0gWwogICAgICAgIHBjIGZvciB0IGluIHJlcXVpcmVkX3RyYW5zZm9ybXMudmFsdWVzKCkgZm9yIHBjIGluIHQub3V0cHV0cy52YWx1ZXMoKQogICAgXQogICAgcmVxdWlyZWRfcGNvbGxlY3Rpb25zID0gewogICAgICAgIHBjX2lkOiBwY29sbGVjdGlvbnNbcGNfaWRdCiAgICAgICAgZm9yIHBjX2lkIGluIHBjb2xsZWN0aW9uX2lkcwogICAgfQoKICAgICMgQ2FjaGUgYWxsIHRoZSBQQ29sbGVjdGlvbiBjb2RlcnMuCiAgICBjb2Rlcl9pZHMgPSBbcGMuY29kZXJfaWQgZm9yIHBjIGluIHJlcXVpcmVkX3Bjb2xsZWN0aW9ucy52YWx1ZXMoKV0KICAgIHJlcXVpcmVkX2NvZGVycyA9IHtjX2lkOiBjb2RlcnNbY19pZF0gZm9yIGNfaWQgaW4gY29kZXJfaWRzfQoKICAgICMgQ2FjaGUgYWxsIHRoZSB3aW5kb3dpbmcgc3RyYXRlZ3kgaWRzLgogICAgd2luZG93aW5nX3N0cmF0ZWdpZXNfaWRzID0gWwogICAgICAgIHBjLndpbmRvd2luZ19zdHJhdGVneV9pZCBmb3IgcGMgaW4gcmVxdWlyZWRfcGNvbGxlY3Rpb25zLnZhbHVlcygpCiAgICBdCiAgICByZXF1aXJlZF93aW5kb3dpbmdfc3RyYXRlZ2llcyA9IHsKICAgICAgICB3c19pZDogd2luZG93aW5nX3N0cmF0ZWdpZXNbd3NfaWRdCiAgICAgICAgZm9yIHdzX2lkIGluIHdpbmRvd2luZ19zdHJhdGVnaWVzX2lkcwogICAgfQoKICAgIHN1YnRyYW5zZm9ybXMgPSB7fQogICAgc3VicGNvbGxlY3Rpb25zID0ge30KICAgIHN1YmNvZGVycyA9IHt9CiAgICBzdWJ3aW5kb3dpbmdfc3RyYXRlZ2llcyA9IHt9CgogICAgIyBSZWN1cnNpdmVseSBnbyB0aHJvdWdoIGFsbCB0aGUgc3VidHJhbnNmb3JtcyBhbmQgYWRkIHRoZWlyIGNvbXBvbmVudHMuCiAgICBmb3IgdHJhbnNmb3JtX2lkLCB0cmFuc2Zvcm0gaW4gcmVxdWlyZWRfdHJhbnNmb3Jtcy5pdGVtcygpOgogICAgICBpZiB0cmFuc2Zvcm1faWQgaW4gcGlwZWxpbmVfcHJvdG8ucm9vdF90cmFuc2Zvcm1faWRzOgogICAgICAgIGNvbnRpbnVlCiAgICAgICh0LCBwYywgYywKICAgICAgIHdzKSA9IHNlbGYuX3JlcXVpcmVkX2NvbXBvbmVudHMocGlwZWxpbmVfcHJvdG8sIHRyYW5zZm9ybS5zdWJ0cmFuc2Zvcm1zKQogICAgICBzdWJ0cmFuc2Zvcm1zLnVwZGF0ZSh0KQogICAgICBzdWJwY29sbGVjdGlvbnMudXBkYXRlKHBjKQogICAgICBzdWJjb2RlcnMudXBkYXRlKGMpCiAgICAgIHN1YndpbmRvd2luZ19zdHJhdGVnaWVzLnVwZGF0ZSh3cykKCiAgICAjIE5vdyB3ZSBnb3QgYWxsIHRoZSBjb21wb25lbnRzIGFuZCB0aGVpciBzdWJjb21wb25lbnRzLCBzbyByZXR1cm4gdGhlCiAgICAjIGNvbXBsZXRlIGNvbGxlY3Rpb24uCiAgICByZXF1aXJlZF90cmFuc2Zvcm1zLnVwZGF0ZShzdWJ0cmFuc2Zvcm1zKQogICAgcmVxdWlyZWRfcGNvbGxlY3Rpb25zLnVwZGF0ZShzdWJwY29sbGVjdGlvbnMpCiAgICByZXF1aXJlZF9jb2RlcnMudXBkYXRlKHN1YmNvZGVycykKICAgIHJlcXVpcmVkX3dpbmRvd2luZ19zdHJhdGVnaWVzLnVwZGF0ZShzdWJ3aW5kb3dpbmdfc3RyYXRlZ2llcykKCiAgICByZXR1cm4gKAogICAgICAgIHJlcXVpcmVkX3RyYW5zZm9ybXMsCiAgICAgICAgcmVxdWlyZWRfcGNvbGxlY3Rpb25zLAogICAgICAgIHJlcXVpcmVkX2NvZGVycywKICAgICAgICByZXF1aXJlZF93aW5kb3dpbmdfc3RyYXRlZ2llcykKCiAgZGVmIGJhY2tncm91bmRfY2FjaGluZ19waXBlbGluZV9wcm90byhzZWxmKToKICAgICIiIlJldHVybnMgdGhlIGJhY2tncm91bmQgY2FjaGluZyBwaXBlbGluZS4KCiAgICBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgYmFja2dyb3VuZCBjYWNoaW5nIHBpcGVsaW5lIGJ5OiBhZGRpbmcgd3JpdGVzIHRvIGNhY2hlCiAgICBmcm9tIGVhY2ggdW5ib3VuZGVkIHNvdXJjZSAoZG9uZSBpbiB0aGUgaW5zdHJ1bWVudCBtZXRob2QpLCBhbmQgY3V0dGluZyBvdXQKICAgIGFsbCBjb21wb25lbnRzICh0cmFuc2Zvcm0sIFBDb2xsZWN0aW9ucywgY29kZXJzLCB3aW5kb3dpbmcgc3RyYXRlZ2llcykgdGhhdAogICAgYXJlIG5vdCB0aGUgdW5ib3VuZGVkIHNvdXJjZXMgb3Igd3JpdGVzIHRvIGNhY2hlIChvciBzdWJ0cmFuc2Zvcm1zIHRoZXJlb2YpLgogICAgIiIiCiAgICAjIENyZWF0ZSB0aGUgcGlwZWxpbmVfcHJvdG8gdG8gcmVhZCBhbGwgdGhlIGNvbXBvbmVudHMgZnJvbS4gSXQgd2lsbCBsYXRlcgogICAgIyBjcmVhdGUgYSBuZXcgcGlwZWxpbmUgcHJvdG8gZnJvbSB0aGUgY3V0IG91dCBjb21wb25lbnRzLgogICAgcGlwZWxpbmVfcHJvdG8gPSBzZWxmLl9iYWNrZ3JvdW5kX2NhY2hpbmdfcGlwZWxpbmUudG9fcnVubmVyX2FwaSgKICAgICAgICByZXR1cm5fY29udGV4dD1GYWxzZSwgdXNlX2Zha2VfY29kZXJzPVRydWUpCgogICAgIyBHZXQgYWxsIHRoZSBzb3VyY2VzIHdlIHdhbnQgdG8gY2FjaGUuCiAgICBzb3VyY2VzID0gdW5ib3VuZGVkX3NvdXJjZXMoc2VsZi5fYmFja2dyb3VuZF9jYWNoaW5nX3BpcGVsaW5lKQoKICAgICMgR2V0IGFsbCB0aGUgcm9vdCB0cmFuc2Zvcm1zLiBUaGUgY2FjaGluZyB0cmFuc2Zvcm1zIHdpbGwgYmUgc3VidHJhbnNmb3JtcwogICAgIyBvZiBvbmUgb2YgdGhlc2Ugcm9vdHMuCiAgICByb290cyA9IFtyb290IGZvciByb290IGluIHBpcGVsaW5lX3Byb3RvLnJvb3RfdHJhbnNmb3JtX2lkc10KCiAgICAjIEdldCB0aGUgdHJhbnNmb3JtIElEcyBvZiB0aGUgY2FjaGluZyB0cmFuc2Zvcm1zLiBUaGVzZSBjYWNoaW5nIG9wZXJhdGlvbnMKICAgICMgYXJlIGFkZGVkIHRoZSB0aGUgX2JhY2tncm91bmRfY2FjaGluZ19waXBlbGluZSBpbiB0aGUgaW5zdHJ1bWVudCgpIG1ldGhvZC4KICAgICMgSXQncyBhZGRlZCB0aGVyZSBzbyB0aGF0IG11bHRpcGxlIGNhbGxzIHRvIHRoaXMgbWV0aG9kIHdvbid0IGFkZCBtdWx0aXBsZQogICAgIyBjYWNoaW5nIG9wZXJhdGlvbnMgKGlkZW1wb3RlbnQpLgogICAgdHJhbnNmb3JtcyA9IHBpcGVsaW5lX3Byb3RvLmNvbXBvbmVudHMudHJhbnNmb3JtcwogICAgY2FjaGluZ190cmFuc2Zvcm1faWRzID0gWwogICAgICAgIHRfaWQgZm9yIHJvb3QgaW4gcm9vdHMgZm9yIHRfaWQgaW4gdHJhbnNmb3Jtc1tyb290XS5zdWJ0cmFuc2Zvcm1zCiAgICAgICAgaWYgV1JJVEVfQ0FDSEUgaW4gdF9pZAogICAgXQoKICAgICMgR2V0IHRoZSBJRHMgb2YgdGhlIHVuYm91bmRlZCBzb3VyY2VzLgogICAgcmVxdWlyZWRfdHJhbnNmb3JtX2xhYmVscyA9IFtzcmMuZnVsbF9sYWJlbCBmb3Igc3JjIGluIHNvdXJjZXNdCiAgICB1bmJvdW5kZWRfc291cmNlX2lkcyA9IFsKICAgICAgICBrIGZvciBrLAogICAgICAgIHYgaW4gdHJhbnNmb3Jtcy5pdGVtcygpIGlmIHYudW5pcXVlX25hbWUgaW4gcmVxdWlyZWRfdHJhbnNmb3JtX2xhYmVscwogICAgXQoKICAgICMgVGhlIHJlcXVpcmVkIHRyYW5zZm9ybXMgYXJlIHRoZSB0cmFuZm9ybXMgdGhhdCB3ZSB3YW50IHRvIGN1dCBvdXQgb2YKICAgICMgdGhlIHBpcGVsaW5lX3Byb3RvIGFuZCBpbnNlcnQgaW50byBhIG5ldyBwaXBlbGluZSB0byByZXR1cm4uCiAgICByZXF1aXJlZF90cmFuc2Zvcm1faWRzID0gKAogICAgICAgIHJvb3RzICsgY2FjaGluZ190cmFuc2Zvcm1faWRzICsgdW5ib3VuZGVkX3NvdXJjZV9pZHMpCiAgICAodCwgcCwgYywKICAgICB3KSA9IHNlbGYuX3JlcXVpcmVkX2NvbXBvbmVudHMocGlwZWxpbmVfcHJvdG8sIHJlcXVpcmVkX3RyYW5zZm9ybV9pZHMpCgogICAgZGVmIHNldF9wcm90b19tYXAocHJvdG9fbWFwLCBuZXdfdmFsdWUpOgogICAgICBwcm90b19tYXAuY2xlYXIoKQogICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBuZXdfdmFsdWUuaXRlbXMoKToKICAgICAgICBwcm90b19tYXBba2V5XS5Db3B5RnJvbSh2YWx1ZSkKCiAgICAjIENvcHkgdGhlIHRyYW5zZm9ybXMgaW50byB0aGUgbmV3IHBpcGVsaW5lLgogICAgcGlwZWxpbmVfdG9fZXhlY3V0ZSA9IGJlYW1fcnVubmVyX2FwaV9wYjIuUGlwZWxpbmUoKQogICAgcGlwZWxpbmVfdG9fZXhlY3V0ZS5yb290X3RyYW5zZm9ybV9pZHNbOl0gPSByb290cwogICAgc2V0X3Byb3RvX21hcChwaXBlbGluZV90b19leGVjdXRlLmNvbXBvbmVudHMudHJhbnNmb3JtcywgdCkKICAgIHNldF9wcm90b19tYXAocGlwZWxpbmVfdG9fZXhlY3V0ZS5jb21wb25lbnRzLnBjb2xsZWN0aW9ucywgcCkKICAgIHNldF9wcm90b19tYXAocGlwZWxpbmVfdG9fZXhlY3V0ZS5jb21wb25lbnRzLmNvZGVycywgYykKICAgIHNldF9wcm90b19tYXAocGlwZWxpbmVfdG9fZXhlY3V0ZS5jb21wb25lbnRzLndpbmRvd2luZ19zdHJhdGVnaWVzLCB3KQoKICAgICMgQ3V0IG91dCBhbGwgc3VidHJhbnNmb3JtcyBpbiB0aGUgcm9vdCB0aGF0IGFyZW4ndCB0aGUgcmVxdWlyZWQgdHJhbnNmb3Jtcy4KICAgIGZvciByb290X2lkIGluIHJvb3RzOgogICAgICByb290ID0gcGlwZWxpbmVfdG9fZXhlY3V0ZS5jb21wb25lbnRzLnRyYW5zZm9ybXNbcm9vdF9pZF0KICAgICAgcm9vdC5zdWJ0cmFuc2Zvcm1zWzpdID0gWwogICAgICAgICAgdHJhbnNmb3JtX2lkIGZvciB0cmFuc2Zvcm1faWQgaW4gcm9vdC5zdWJ0cmFuc2Zvcm1zCiAgICAgICAgICBpZiB0cmFuc2Zvcm1faWQgaW4gcGlwZWxpbmVfdG9fZXhlY3V0ZS5jb21wb25lbnRzLnRyYW5zZm9ybXMKICAgICAgXQoKICAgIHJldHVybiBwaXBlbGluZV90b19leGVjdXRlCgogIEBwcm9wZXJ0eQogIGRlZiBoYXNfdW5ib3VuZGVkX3NvdXJjZXMoc2VsZik6CiAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHBpcGVsaW5lIGhhcyBhbnkgY2FwdHVyYWJsZSBzb3VyY2VzLgogICAgIiIiCiAgICByZXR1cm4gbGVuKHNlbGYuX3VuYm91bmRlZF9zb3VyY2VzKSA+IDAKCiAgQHByb3BlcnR5CiAgZGVmIGNhY2hlYWJsZXMoc2VsZik6CiAgICAiIiJGaW5kcyBjYWNoZWFibGUgUENvbGxlY3Rpb25zIGZyb20gdGhlIHBpcGVsaW5lLgoKICAgIFRoZSBmdW5jdGlvbiBvbmx5IHRyZWF0cyB0aGUgcmVzdWx0IGFzIGNhY2hlYWJsZXMgc2luY2UgdGhlcmUgaXMgbm8KICAgIGd1YXJhbnRlZSB3aGV0aGVyIFBDb2xsZWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY2FjaGVkIGhhdmUgYmVlbiBjYWNoZWQgb3IKICAgIG5vdC4gQSBQQ29sbGVjdGlvbiBuZWVkcyB0byBiZSBjYWNoZWQgd2hlbiBpdCdzIGJvdW5kIHRvIGEgdXNlciBkZWZpbmVkCiAgICB2YXJpYWJsZSBpbiB0aGUgc291cmNlIGNvZGUuIE90aGVyd2lzZSwgdGhlIFBDb2xsZWN0aW9uIGlzIG5vdCByZXVzYWJsZQogICAgbm9yIGludHJvc3BlY3RhYmxlIHdoaWNoIG51bGxpZmllcyB0aGUgbmVlZCBvZiBjYWNoZS4KICAgICIiIgogICAgcmV0dXJuIHNlbGYuX2NhY2hlYWJsZXMKCiAgQHByb3BlcnR5CiAgZGVmIHBjb2xsc190b19wY29sbF9pZChzZWxmKToKICAgICIiIlJldHVybnMgYSBkaWN0IG1hcHBpbmcgc3RyKFBDb2xsZWN0aW9uKXMgdG8gSURzLiIiIgogICAgcmV0dXJuIHNlbGYuX3Bjb2xsc190b19wY29sbF9pZAoKICBAcHJvcGVydHkKICBkZWYgb3JpZ2luYWxfcGlwZWxpbmVfcHJvdG8oc2VsZik6CiAgICAiIiJSZXR1cm5zIHRoZSBwb3J0YWJsZSBwcm90byByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGlwZWxpbmUgYmVmb3JlCiAgICBpbnN0cnVtZW50YXRpb24uIiIiCiAgICByZXR1cm4gc2VsZi5fb3JpZ2luYWxfcGlwZWxpbmVfcHJvdG8KCiAgQHByb3BlcnR5CiAgZGVmIG9yaWdpbmFsX3BpcGVsaW5lKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBwaXBlbGluZSBiZWZvcmUgaW5zdHJ1bWVudGF0aW9uLiIiIgogICAgcmV0dXJuIHNlbGYuX3BpcGVsaW5lX3NuYXAKCiAgQHByb3BlcnR5CiAgZGVmIHVzZXJfcGlwZWxpbmUoc2VsZik6CiAgICAiIiJSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBwaXBlbGluZSBpbnN0YW5jZSBkZWZpbmVkIGJ5IHRoZSB1c2VyLiBJZiBhCiAgICBwaXBlbGluZSBoYXMgbm8gY2FjaGVhYmxlIFBDb2xsZWN0aW9uIGFuZCB0aGUgdXNlciBwaXBlbGluZSBjYW5ub3QgYmUKICAgIGZvdW5kLCByZXR1cm4gTm9uZSBpbmRpY2F0aW5nIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgY2FjaGVkIGluIHRoZSB1c2VyCiAgICBwaXBlbGluZS4KCiAgICBUaGUgcGlwZWxpbmUgZ2l2ZW4gZm9yIGluc3RydW1lbnRpbmcgYW5kIG11dGF0ZWQgaW4gdGhpcyBjbGFzcyBpcyBub3QKICAgIG5lY2Vzc2FyaWx5IHRoZSBwaXBlbGluZSBpbnN0YW5jZSBkZWZpbmVkIGJ5IHRoZSB1c2VyLiBGcm9tIHRoZSB3YXRjaGVkCiAgICBzY29wZXMsIHRoaXMgY2xhc3MgZmlndXJlcyBvdXQgd2hhdCB0aGUgdXNlciBwaXBlbGluZSBpbnN0YW5jZSBpcy4KICAgIFRoaXMgbWV0YWRhdGEgY2FuIGJlIHVzZWQgZm9yIHRyYWNraW5nIHBpcGVsaW5lIHJlc3VsdHMuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLl91c2VyX3BpcGVsaW5lCgogIEBwcm9wZXJ0eQogIGRlZiBydW5uZXJfcGNvbGxfdG9fdXNlcl9wY29sbChzZWxmKToKICAgICIiIlJldHVybnMgY2FjaGVhYmxlIFBDb2xsZWN0aW9ucyBjb3JyZWxhdGVkIGZyb20gaW5zdGFuY2VzIGluIHRoZSBydW5uZXIKICAgIHBpcGVsaW5lIHRvIGluc3RhbmNlcyBpbiB0aGUgdXNlciBwaXBlbGluZS4iIiIKICAgIHJldHVybiBzZWxmLl9ydW5uZXJfcGNvbGxfdG9fdXNlcl9wY29sbAoKICBkZWYgaW5zdHJ1bWVudChzZWxmKToKICAgICIiIkluc3RydW1lbnRzIG9yaWdpbmFsIHBpcGVsaW5lIHdpdGggY2FjaGUuCgogICAgRm9yIGNhY2hlYWJsZSBvdXRwdXQgUENvbGxlY3Rpb24sIGlmIGNhY2hlIGZvciB0aGUga2V5IGRvZXNuJ3QgZXhpc3QsIGRvCiAgICBfd3JpdGVfY2FjaGUoKTsgZm9yIGNhY2hlYWJsZSBpbnB1dCBQQ29sbGVjdGlvbiwgaWYgY2FjaGUgZm9yIHRoZSBrZXkKICAgIGV4aXN0cywgZG8gX3JlYWRfY2FjaGUoKS4gTm8gaW5zdHJ1bWVudCBpbiBhbnkgb3RoZXIgc2l0dWF0aW9uLgoKICAgIE1vZGlmaWVzOgogICAgICBzZWxmLl9waXBlbGluZQogICAgIiIiCiAgICBjYWNoZWFibGVfaW5wdXRzID0gc2V0KCkKCiAgICBjbGFzcyBJbnN0cnVtZW50VmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgICAiIiJWaXNpdG9yIHV0aWxpemVzIGNhY2hlIHRvIGluc3RydW1lbnQgdGhlIHBpcGVsaW5lLiIiIgogICAgICBkZWYgX19pbml0X18oc2VsZiwgcGluKToKICAgICAgICBzZWxmLl9waW4gPSBwaW4KCiAgICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBzZWxmLnZpc2l0X3RyYW5zZm9ybSh0cmFuc2Zvcm1fbm9kZSkKCiAgICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICAgIGNhY2hlYWJsZV9pbnB1dHMudXBkYXRlKHNlbGYuX3Bpbi5fY2FjaGVhYmxlX2lucHV0cyh0cmFuc2Zvcm1fbm9kZSkpCgogICAgdiA9IEluc3RydW1lbnRWaXNpdG9yKHNlbGYpCiAgICBzZWxmLl9waXBlbGluZS52aXNpdCh2KQogICAgIyBDcmVhdGUgUmVhZENhY2hlIHRyYW5zZm9ybXMuCiAgICBmb3IgY2FjaGVhYmxlX2lucHV0IGluIGNhY2hlYWJsZV9pbnB1dHM6CiAgICAgIHNlbGYuX3JlYWRfY2FjaGUoc2VsZi5fcGlwZWxpbmUsIGNhY2hlYWJsZV9pbnB1dCkKICAgICMgUmVwbGFjZS93aXJlIGlucHV0cyB3LyBjYWNoZWQgUENvbGxlY3Rpb25zIGZyb20gUmVhZENhY2hlIHRyYW5zZm9ybXMuCiAgICBzZWxmLl9yZXBsYWNlX3dpdGhfY2FjaGVkX2lucHV0cyhzZWxmLl9waXBlbGluZSkKICAgICMgV3JpdGUgY2FjaGUgZm9yIGFsbCBjYWNoZWFibGVzLgogICAgZm9yIF8sIGNhY2hlYWJsZSBpbiBzZWxmLmNhY2hlYWJsZXMuaXRlbXMoKToKICAgICAgc2VsZi5fd3JpdGVfY2FjaGUoc2VsZi5fcGlwZWxpbmUsIGNhY2hlYWJsZVsncGNvbGwnXSkKCiAgICAjIEluc3RydW1lbnQgdGhlIGJhY2tncm91bmQgY2FjaGluZyBwaXBlbGluZSBpZiB3ZSBjYW4uCiAgICBpZiBzZWxmLmhhc191bmJvdW5kZWRfc291cmNlczoKICAgICAgZm9yIHNvdXJjZSBpbiBzZWxmLl91bmJvdW5kZWRfc291cmNlczoKICAgICAgICBzZWxmLl93cml0ZV9jYWNoZSgKICAgICAgICAgICAgc2VsZi5fYmFja2dyb3VuZF9jYWNoaW5nX3BpcGVsaW5lLCBzb3VyY2Uub3V0cHV0c1tOb25lXSkKCiAgICAjIFRPRE8oQkVBTS03NzYwKTogcHJ1bmUgc3ViIGdyYXBocyB0aGF0IGRvZXNuJ3QgbmVlZCB0byBiZSBleGVjdXRlZC4KCiAgZGVmIHByZXByb2Nlc3Moc2VsZik6CiAgICAiIiJQcmUtcHJvY2Vzc2VzIHRoZSBwaXBlbGluZS4KCiAgICBTaW5jZSB0aGUgcGlwZWxpbmUgaW5zdGFuY2UgaW4gdGhlIGNsYXNzIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBpbnN0YW5jZQogICAgZGVmaW5lZCBpbiB0aGUgdXNlciBjb2RlLCB0aGUgcHJlLXByb2Nlc3Mgd2lsbCBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAKICAgIG9mIGNhY2hlYWJsZSBQQ29sbGVjdGlvbnMgYmV0d2VlbiB0aGVzZSAyIGluc3RhbmNlcyBieSByZXBsYWNpbmcgJ3Bjb2xsJwogICAgZmllbGRzIGluIHRoZSBjYWNoZWFibGUgZGljdGlvbmFyeSB3aXRoIG9uZXMgZnJvbSB0aGUgcnVubmluZyBpbnN0YW5jZS4KICAgICIiIgogICAgY2xhc3MgUHJlcHJvY2Vzc1Zpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBpbik6CiAgICAgICAgc2VsZi5fcGluID0gcGluCgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgc2VsZi52aXNpdF90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUpCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBmb3IgaW5fcGNvbGwgaW4gdHJhbnNmb3JtX25vZGUuaW5wdXRzOgogICAgICAgICAgc2VsZi5fcHJvY2Vzcyhpbl9wY29sbCkKICAgICAgICBmb3Igb3V0X3Bjb2xsIGluIHRyYW5zZm9ybV9ub2RlLm91dHB1dHMudmFsdWVzKCk6CiAgICAgICAgICBzZWxmLl9wcm9jZXNzKG91dF9wY29sbCkKCiAgICAgIGRlZiBfcHJvY2VzcyhzZWxmLCBwY29sbCk6CiAgICAgICAgcGNvbGxfaWQgPSBzZWxmLl9waW4ucGNvbGxzX3RvX3Bjb2xsX2lkLmdldChzdHIocGNvbGwpLCAnJykKICAgICAgICBpZiBwY29sbF9pZCBpbiBzZWxmLl9waW4uX3Bjb2xsX3ZlcnNpb25fbWFwOgogICAgICAgICAgY2FjaGVhYmxlX2tleSA9IHNlbGYuX3Bpbi5fY2FjaGVhYmxlX2tleShwY29sbCkKICAgICAgICAgIHVzZXJfcGNvbGwgPSBzZWxmLl9waW4uY2FjaGVhYmxlc1tjYWNoZWFibGVfa2V5XVsncGNvbGwnXQogICAgICAgICAgaWYgKGNhY2hlYWJsZV9rZXkgaW4gc2VsZi5fcGluLmNhY2hlYWJsZXMgYW5kIHVzZXJfcGNvbGwgIT0gcGNvbGwpOgogICAgICAgICAgICBpZiBub3Qgc2VsZi5fcGluLl91c2VyX3BpcGVsaW5lOgogICAgICAgICAgICAgICMgUmV0cmlldmUgYSByZWZlcmVuY2UgdG8gdGhlIHVzZXIgZGVmaW5lZCBwaXBlbGluZSBpbnN0YW5jZS4KICAgICAgICAgICAgICBzZWxmLl9waW4uX3VzZXJfcGlwZWxpbmUgPSB1c2VyX3Bjb2xsLnBpcGVsaW5lCiAgICAgICAgICAgIHNlbGYuX3Bpbi5fcnVubmVyX3Bjb2xsX3RvX3VzZXJfcGNvbGxbcGNvbGxdID0gdXNlcl9wY29sbAogICAgICAgICAgICBzZWxmLl9waW4uY2FjaGVhYmxlc1tjYWNoZWFibGVfa2V5XVsncGNvbGwnXSA9IHBjb2xsCgogICAgdiA9IFByZXByb2Nlc3NWaXNpdG9yKHNlbGYpCiAgICBzZWxmLl9waXBlbGluZS52aXNpdCh2KQoKICBkZWYgX3dyaXRlX2NhY2hlKHNlbGYsIHBpcGVsaW5lLCBwY29sbCk6CiAgICAiIiJDYWNoZXMgYSBjYWNoZWFibGUgUENvbGxlY3Rpb24uCgogICAgRm9yIHRoZSBnaXZlbiBQQ29sbGVjdGlvbiwgYnkgYXBwZW5kaW5nIHN1YiB0cmFuc2Zvcm0gcGFydCB0aGF0IG1hdGVyaWFsaXplCiAgICB0aGUgUENvbGxlY3Rpb24gdGhyb3VnaCBzaW5rIGludG8gY2FjaGUgaW1wbGVtZW50YXRpb24uIFRoZSBjYWNoZSB3cml0ZSBpcwogICAgbm90IGltbWVkaWF0ZS4gSXQgaGFwcGVucyB3aGVuIHRoZSBydW5uZXIgcnVucyB0aGUgdHJhbnNmb3JtZWQgcGlwZWxpbmUKICAgIGFuZCB0aHVzIG5vdCB1c2FibGUgZm9yIHRoaXMgcnVuIGFzIGludGVuZGVkLiBUaGlzIGZ1bmN0aW9uIGFsd2F5cyB3cml0ZXMKICAgIHRoZSBjYWNoZSBmb3IgdGhlIGdpdmVuIFBDb2xsZWN0aW9uIGFzIGxvbmcgYXMgdGhlIFBDb2xsZWN0aW9uIGJlbG9uZ3MgdG8KICAgIHRoZSBwaXBlbGluZSBiZWluZyBpbnN0cnVtZW50ZWQgYW5kIHRoZSBrZXllZCBjYWNoZSBpcyBhYnNlbnQuCgogICAgTW9kaWZpZXM6CiAgICAgIHBpcGVsaW5lCiAgICAiIiIKICAgICMgTWFrZXMgc3VyZSB0aGUgcGNvbGwgYmVsb25ncyB0byB0aGUgcGlwZWxpbmUgYmVpbmcgaW5zdHJ1bWVudGVkLgogICAgaWYgcGNvbGwucGlwZWxpbmUgaXMgbm90IHBpcGVsaW5lOgogICAgICByZXR1cm4KICAgICMgVGhlIGtleWVkIGNhY2hlIGlzIGFsd2F5cyB2YWxpZCB3aXRoaW4gdGhpcyBpbnN0cnVtZW50YXRpb24uCiAgICBrZXkgPSBzZWxmLmNhY2hlX2tleShwY29sbCkKICAgICMgT25seSBuZWVkIHRvIHdyaXRlIHdoZW4gdGhlIGNhY2hlIHdpdGggZXhwZWN0ZWQga2V5IGRvZXNuJ3QgZXhpc3QuCiAgICBpZiBub3Qgc2VsZi5fY2FjaGVfbWFuYWdlci5leGlzdHMoJ2Z1bGwnLCBrZXkpOgogICAgICBsYWJlbCA9ICd7fXt9Jy5mb3JtYXQoV1JJVEVfQ0FDSEUsIGtleSkKICAgICAgXyA9IHBjb2xsIHwgbGFiZWwgPj4gY2FjaGUuV3JpdGVDYWNoZShzZWxmLl9jYWNoZV9tYW5hZ2VyLCBrZXkpCgogIGRlZiBfcmVhZF9jYWNoZShzZWxmLCBwaXBlbGluZSwgcGNvbGwpOgogICAgIiIiUmVhZHMgYSBjYWNoZWQgcHZhbHVlLgoKICAgIEEgbm9vcCB3aWxsIGNhdXNlIHRoZSBwaXBlbGluZSB0byBleGVjdXRlIHRoZSB0cmFuc2Zvcm0gYXMKICAgIGl0IGlzIGFuZCBjYWNoZSBub3RoaW5nIGZyb20gdGhpcyB0cmFuc2Zvcm0gZm9yIG5leHQgcnVuLgoKICAgIE1vZGlmaWVzOgogICAgICBwaXBlbGluZQogICAgIiIiCiAgICAjIE1ha2VzIHN1cmUgdGhlIHBjb2xsIGJlbG9uZ3MgdG8gdGhlIHBpcGVsaW5lIGJlaW5nIGluc3RydW1lbnRlZC4KICAgIGlmIHBjb2xsLnBpcGVsaW5lIGlzIG5vdCBwaXBlbGluZToKICAgICAgcmV0dXJuCiAgICAjIFRoZSBrZXllZCBjYWNoZSBpcyBhbHdheXMgdmFsaWQgd2l0aGluIHRoaXMgaW5zdHJ1bWVudGF0aW9uLgogICAga2V5ID0gc2VsZi5jYWNoZV9rZXkocGNvbGwpCiAgICAjIENhbiBvbmx5IHJlYWQgZnJvbSBjYWNoZSB3aGVuIHRoZSBjYWNoZSB3aXRoIGV4cGVjdGVkIGtleSBleGlzdHMgYW5kIGl0cwogICAgIyBjb21wdXRhdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQuCiAgICBpZiAoc2VsZi5fY2FjaGVfbWFuYWdlci5leGlzdHMoJ2Z1bGwnLCBrZXkpIGFuZAogICAgICAgIChzZWxmLl9ydW5uZXJfcGNvbGxfdG9fdXNlcl9wY29sbFtwY29sbF0gaW4KICAgICAgICAgaWUuY3VycmVudF9lbnYoKS5jb21wdXRlZF9wY29sbGVjdGlvbnMpKToKICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLl9jYWNoZWRfcGNvbGxfcmVhZDoKICAgICAgICAjIE11dGF0ZXMgdGhlIHBpcGVsaW5lIHdpdGggY2FjaGUgcmVhZCB0cmFuc2Zvcm0gYXR0YWNoZWQKICAgICAgICAjIHRvIHJvb3Qgb2YgdGhlIHBpcGVsaW5lLgogICAgICAgIHBjb2xsX2Zyb21fY2FjaGUgPSAoCiAgICAgICAgICAgIHBpcGVsaW5lCiAgICAgICAgICAgIHwgJ3t9e30nLmZvcm1hdChSRUFEX0NBQ0hFLCBrZXkpID4+IGNhY2hlLlJlYWRDYWNoZSgKICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX21hbmFnZXIsIGtleSkpCiAgICAgICAgc2VsZi5fY2FjaGVkX3Bjb2xsX3JlYWRba2V5XSA9IHBjb2xsX2Zyb21fY2FjaGUKICAgICMgZWxzZTogTk9PUCB3aGVuIGNhY2hlIGRvZXNuJ3QgZXhpc3QsIGp1c3QgY29tcHV0ZSB0aGUgb3JpZ2luYWwgZ3JhcGguCgogIGRlZiBfcmVwbGFjZV93aXRoX2NhY2hlZF9pbnB1dHMoc2VsZiwgcGlwZWxpbmUpOgogICAgIiIiUmVwbGFjZSBQQ29sbGVjdGlvbiBpbnB1dHMgaW4gdGhlIHBpcGVsaW5lIHdpdGggY2FjaGUgaWYgcG9zc2libGUuCgogICAgRm9yIGFueSBpbnB1dCBQQ29sbGVjdGlvbiwgZmluZCBvdXQgd2hldGhlciB0aGVyZSBpcyB2YWxpZCBjYWNoZS4gSWYgc28sCiAgICByZXBsYWNlIHRoZSBpbnB1dCBvZiB0aGUgQXBwbGllZFBUcmFuc2Zvcm0gd2l0aCBvdXRwdXQgb2YgdGhlCiAgICBBcHBsaWVkUHRyYW5zZm9ybSB0aGF0IHNvdXJjZXMgcHZhbHVlIGZyb20gdGhlIGNhY2hlLiBJZiB0aGVyZSBpcyBubyB2YWxpZAogICAgY2FjaGUsIG5vb3AuCiAgICAiIiIKICAgIGNsYXNzIFJlYWRDYWNoZVdpcmVWaXNpdG9yKFBpcGVsaW5lVmlzaXRvcik6CiAgICAgICIiIlZpc2l0b3Igd2lyZXMgY2FjaGUgcmVhZCBhcyBpbnB1dHMgdG8gcmVwbGFjZSBjb3JyZXNwb25kaW5nIG9yaWdpbmFsCiAgICAgIGlucHV0IFBDb2xsZWN0aW9ucyBpbiBwaXBlbGluZS4KICAgICAgIiIiCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaW4pOgogICAgICAgICIiIkluaXRpYWxpemVzIHdpdGggYSBQaXBlbGluZUluc3RydW1lbnQuIiIiCiAgICAgICAgc2VsZi5fcGluID0gcGluCgogICAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgICAgc2VsZi52aXNpdF90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUpCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICBpZiB0cmFuc2Zvcm1fbm9kZS5pbnB1dHM6CiAgICAgICAgICBpbnB1dF9saXN0ID0gbGlzdCh0cmFuc2Zvcm1fbm9kZS5pbnB1dHMpCiAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oaW5wdXRfbGlzdCkpOgogICAgICAgICAgICBrZXkgPSBzZWxmLl9waW4uY2FjaGVfa2V5KGlucHV0X2xpc3RbaV0pCiAgICAgICAgICAgIGlmIGtleSBpbiBzZWxmLl9waW4uX2NhY2hlZF9wY29sbF9yZWFkOgogICAgICAgICAgICAgIGlucHV0X2xpc3RbaV0gPSBzZWxmLl9waW4uX2NhY2hlZF9wY29sbF9yZWFkW2tleV0KICAgICAgICAgIHRyYW5zZm9ybV9ub2RlLmlucHV0cyA9IHR1cGxlKGlucHV0X2xpc3QpCgogICAgdiA9IFJlYWRDYWNoZVdpcmVWaXNpdG9yKHNlbGYpCiAgICBwaXBlbGluZS52aXNpdCh2KQoKICBkZWYgX2NhY2hlYWJsZV9pbnB1dHMoc2VsZiwgdHJhbnNmb3JtKToKICAgIGlucHV0cyA9IHNldCgpCiAgICBmb3IgaW5fcGNvbGwgaW4gdHJhbnNmb3JtLmlucHV0czoKICAgICAgaWYgc2VsZi5fY2FjaGVhYmxlX2tleShpbl9wY29sbCkgaW4gc2VsZi5jYWNoZWFibGVzOgogICAgICAgIGlucHV0cy5hZGQoaW5fcGNvbGwpCiAgICByZXR1cm4gaW5wdXRzCgogIGRlZiBfY2FjaGVhYmxlX2tleShzZWxmLCBwY29sbCk6CiAgICAiIiJHZXRzIHRoZSBrZXkgYSBjYWNoZWFibGUgUENvbGxlY3Rpb24gaXMgdHJhY2tlZCB3aXRoaW4gdGhlIGluc3RydW1lbnQuIiIiCiAgICByZXR1cm4gY2FjaGVhYmxlX2tleSgKICAgICAgICBwY29sbCwgc2VsZi5wY29sbHNfdG9fcGNvbGxfaWQsIHNlbGYuX3Bjb2xsX3ZlcnNpb25fbWFwKQoKICBkZWYgY2FjaGVfa2V5KHNlbGYsIHBjb2xsKToKICAgICIiIkdldHMgdGhlIGlkZW50aWZpZXIgb2YgYSBjYWNoZWFibGUgUENvbGxlY3Rpb24gaW4gY2FjaGUuCgogICAgSWYgdGhlIHBjb2xsIGlzIG5vdCBhIGNhY2hlYWJsZSwgcmV0dXJuICcnLgogICAgVGhlIGtleSBpcyB3aGF0IHRoZSBwY29sbCB3b3VsZCB1c2UgYXMgaWRlbnRpZmllciBpZiBpdCdzIG1hdGVyaWFsaXplZCBpbgogICAgY2FjaGUuIEl0IGRvZXNuJ3QgbWVhbiB0aGF0IHRoZXJlIHdvdWxkIGRlZmluaXRlbHkgYmUgc3VjaCBjYWNoZSBhbHJlYWR5LgogICAgQWxzbywgdGhlIHBjb2xsIGNhbiBjb21lIGZyb20gdGhlIG9yaWdpbmFsIHVzZXIgZGVmaW5lZCBwaXBlbGluZSBvYmplY3Qgb3IKICAgIGFuIGVxdWl2YWxlbnQgcGNvbGwgZnJvbSBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHBpcGVsaW5lLgoKICAgICdwY29sbF9pZCcgb2YgY2FjaGVhYmxlIGlzIG5vdCBzdGFibGUgZm9yIGNhY2hlX2tleSwgdGh1cyBub3QgaW5jbHVkZWQgaW4KICAgIGNhY2hlIGtleS4gQSBjb21iaW5hdGlvbiBvZiAndmFyJywgJ3ZlcnNpb24nIGFuZCAncHJvZHVjZXJfdmVyc2lvbicgaXMKICAgIHN1ZmZpY2llbnQgdG8gaWRlbnRpZnkgYSBjYWNoZWQgUENvbGxlY3Rpb24uCiAgICAiIiIKICAgIGNhY2hlYWJsZSA9IHNlbGYuY2FjaGVhYmxlcy5nZXQoc2VsZi5fY2FjaGVhYmxlX2tleShwY29sbCksIE5vbmUpCiAgICBpZiBjYWNoZWFibGU6CiAgICAgIHJldHVybiAnXycuam9pbigoCiAgICAgICAgICBjYWNoZWFibGVbJ3ZhciddLCBjYWNoZWFibGVbJ3ZlcnNpb24nXSwKICAgICAgICAgIGNhY2hlYWJsZVsncHJvZHVjZXJfdmVyc2lvbiddKSkKICAgIHJldHVybiAnJwoKICBkZWYgY2FjaGVhYmxlX3Zhcl9ieV9wY29sbF9pZChzZWxmLCBwY29sbF9pZCk6CiAgICAiIiJSZXRyaWV2ZXMgdGhlIHZhcmlhYmxlIG5hbWUgb2YgYSBQQ29sbGVjdGlvbi4KCiAgICBJbiBzb3VyY2UgY29kZSwgUENvbGxlY3Rpb24gdmFyaWFibGVzIGFyZSBkZWZpbmVkIGluIHRoZSB1c2VyIHBpcGVsaW5lLiBXaGVuCiAgICBpdCdzIGNvbnZlcnRlZCB0byB0aGUgcnVubmVyIGFwaSByZXByZXNlbnRhdGlvbiwgZWFjaCBQQ29sbGVjdGlvbiByZWZlcmVuY2VkCiAgICBpbiB0aGUgdXNlciBwaXBlbGluZSBpcyBhc3NpZ25lZCBhIHVuaXF1ZS13aXRoaW4tcGlwZWxpbmUgcGNvbGxfaWQuIEdpdmVuCiAgICBzdWNoIHBjb2xsX2lkLCByZXRyaWV2ZXMgdGhlIHN0ciB2YXJpYWJsZSBuYW1lIGRlZmluZWQgaW4gdXNlciBwaXBlbGluZSBmb3IKICAgIHRoYXQgcmVmZXJlbmNlZCBQQ29sbGVjdGlvbi4gSWYgdGhlIFBDb2xsZWN0aW9uIGlzIG5vdCB3YXRjaGVkLCByZXR1cm4gTm9uZS4KICAgICIiIgogICAgcmV0dXJuIHNlbGYuX2NhY2hlYWJsZV92YXJfYnlfcGNvbGxfaWQuZ2V0KHBjb2xsX2lkLCBOb25lKQoKCmRlZiBidWlsZF9waXBlbGluZV9pbnN0cnVtZW50KHBpcGVsaW5lLCBvcHRpb25zPU5vbmUpOgogICIiIkNyZWF0ZXMgUGlwZWxpbmVJbnN0cnVtZW50IGZvciBhIHBpcGVsaW5lIGFuZCBpdHMgb3B0aW9ucyB3aXRoIGNhY2hlLgoKICBUaHJvdWdob3V0IHRoZSBwcm9jZXNzLCB0aGUgcmV0dXJuZWQgUGlwZWxpbmVJbnN0cnVtZW50IHNuYXBzaG90cyB0aGUgZ2l2ZW4KICBwaXBlbGluZSBhbmQgdGhlbiBtdXRhdGVzIHRoZSBwaXBlbGluZS4gSXQncyBpbnZva2VkIGJ5IGludGVyYWN0aXZlIGNvbXBvbmVudHMKICBzdWNoIGFzIHRoZSBJbnRlcmFjdGl2ZVJ1bm5lciBhbmQgdGhlIGdpdmVuIHBpcGVsaW5lIHNob3VsZCBiZSBpbXBsaWNpdGx5CiAgY3JlYXRlZCBydW5uZXIgcGlwZWxpbmVzIGluc3RlYWQgb2YgcGlwZWxpbmUgaW5zdGFuY2VzIGRlZmluZWQgYnkgdGhlIHVzZXIuCgogIFRoaXMgaXMgdGhlIHNob3J0aGFuZCBmb3IgZG9pbmcgMyBzdGVwczogMSkgY29tcHV0ZSBvbmNlIGZvciBtZXRhZGF0YSBvZiB0aGUKICBnaXZlbiBydW5uZXIgcGlwZWxpbmUgYW5kIGV2ZXJ5dGhpbmcgd2F0Y2hlZCBmcm9tIHVzZXIgcGlwZWxpbmVzOyAyKSBhc3NvY2lhdGUKICBpbmZvIGJldHdlZW4gdGhlIHJ1bm5lciBwaXBlbGluZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgdXNlciBwaXBlbGluZSwKICBlbGltaW5hdGUgZGF0YSBmcm9tIG90aGVyIHVzZXIgcGlwZWxpbmVzIGlmIHRoZXJlIGFyZSBhbnk7IDMpIG11dGF0ZSB0aGUKICBydW5uZXIgcGlwZWxpbmUgdG8gYXBwbHkgaW50ZXJhY3Rpdml0eS4KICAiIiIKICBwaSA9IFBpcGVsaW5lSW5zdHJ1bWVudChwaXBlbGluZSwgb3B0aW9ucykKICBwaS5wcmVwcm9jZXNzKCkKICBwaS5pbnN0cnVtZW50KCkgICMgSW5zdHJ1bWVudHMgdGhlIHBpcGVsaW5lIG9ubHkgb25jZS4KICByZXR1cm4gcGkKCgpkZWYgY2FjaGVhYmxlcyhwY29sbHNfdG9fcGNvbGxfaWQpOgogICIiIkZpbmRzIFBDb2xsZWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY2FjaGVkIGZvciBhbmFseXplZCBQQ29sbGVjdGlvbnMuCgogIFRoZSBmdW5jdGlvbiBvbmx5IHRyZWF0cyB0aGUgcmVzdWx0IGFzIGNhY2hlYWJsZXMgc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlCiAgd2hldGhlciBQQ29sbGVjdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNhY2hlZCBoYXZlIGJlZW4gY2FjaGVkIG9yIG5vdC4gQQogIFBDb2xsZWN0aW9uIG5lZWRzIHRvIGJlIGNhY2hlZCB3aGVuIGl0J3MgYm91bmQgdG8gYSB1c2VyIGRlZmluZWQgdmFyaWFibGUgaW4KICB0aGUgc291cmNlIGNvZGUuIE90aGVyd2lzZSwgdGhlIFBDb2xsZWN0aW9uIGlzIG5vdCByZXVzYWJsZSBub3IgaW50cm9zcGVjdGFibGUKICB3aGljaCBudWxsaWZpZXMgdGhlIG5lZWQgb2YgY2FjaGUuIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIHBpcGVsaW5lcyBkZWZpbmVkCiAgYW5kIHdhdGNoZWQsIHRoaXMgd2lsbCBvbmx5IHJldHVybiBmb3IgUENvbGxlY3Rpb25zIHdpdGggcGNvbGxzX3RvX3Bjb2xsX2lkCiAgYW5hbHl6ZWQuIFRoZSBjaGVjayBpcyBub3Qgc3RyaWN0IGJlY2F1c2UgcGNvbGxfaWQgaXMgbm90IHVuaXF1ZSBhY3Jvc3MKICBtdWx0aXBsZSBwaXBlbGluZXMuIEFkZGl0aW9uYWwgY2hlY2sgbmVlZHMgdG8gYmUgZG9uZSBkdXJpbmcgaW5zdHJ1bWVudC4KICAiIiIKICBwY29sbF92ZXJzaW9uX21hcCA9IHt9CiAgY2FjaGVhYmxlcyA9IHt9CiAgY2FjaGVhYmxlX3Zhcl9ieV9wY29sbF9pZCA9IHt9CiAgZm9yIHdhdGNoaW5nIGluIGllLmN1cnJlbnRfZW52KCkud2F0Y2hpbmcoKToKICAgIGZvciBrZXksIHZhbCBpbiB3YXRjaGluZzoKICAgICAgIyBUT0RPKEJFQU0tODI4OCk6IGNsZWFudXAgdGhlIGF0dHJpYnV0ZSBjaGVjayB3aGVuIHB5MiBpcyBub3Qgc3VwcG9ydGVkLgogICAgICBpZiBoYXNhdHRyKHZhbCwgJ19fY2xhc3NfXycpIGFuZCBpc2luc3RhbmNlKHZhbCwgYmVhbS5wdmFsdWUuUENvbGxlY3Rpb24pOgogICAgICAgIGNhY2hlYWJsZSA9IHt9CiAgICAgICAgY2FjaGVhYmxlWydwY29sbF9pZCddID0gcGNvbGxzX3RvX3Bjb2xsX2lkLmdldChzdHIodmFsKSwgTm9uZSkKICAgICAgICAjIEl0J3MgaGlnaGx5IHBvc3NpYmxlIHRoYXQgUENvbGxlY3Rpb24gc3RyIGlzIG5vdCB1bmlxdWUgYWNyb3NzCiAgICAgICAgIyBtdWx0aXBsZSBwaXBlbGluZXMsIGZ1cnRoZXIgY2hlY2sgZHVyaW5nIGluc3RydW1lbnQgaXMgbmVlZGVkLgogICAgICAgIGlmIG5vdCBjYWNoZWFibGVbJ3Bjb2xsX2lkJ106CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGNhY2hlYWJsZVsndmFyJ10gPSBrZXkKICAgICAgICBjYWNoZWFibGVbJ3ZlcnNpb24nXSA9IHN0cihpZCh2YWwpKQogICAgICAgIGNhY2hlYWJsZVsncGNvbGwnXSA9IHZhbAogICAgICAgIGNhY2hlYWJsZVsncHJvZHVjZXJfdmVyc2lvbiddID0gc3RyKGlkKHZhbC5wcm9kdWNlcikpCiAgICAgICAgcGNvbGxfdmVyc2lvbl9tYXBbY2FjaGVhYmxlWydwY29sbF9pZCddXSA9IGNhY2hlYWJsZVsndmVyc2lvbiddCiAgICAgICAgY2FjaGVhYmxlc1tjYWNoZWFibGVfa2V5KHZhbCwgcGNvbGxzX3RvX3Bjb2xsX2lkKV0gPSBjYWNoZWFibGUKICAgICAgICBjYWNoZWFibGVfdmFyX2J5X3Bjb2xsX2lkW2NhY2hlYWJsZVsncGNvbGxfaWQnXV0gPSBrZXkKCiAgcmV0dXJuIHBjb2xsX3ZlcnNpb25fbWFwLCBjYWNoZWFibGVzLCBjYWNoZWFibGVfdmFyX2J5X3Bjb2xsX2lkCgoKZGVmIGNhY2hlYWJsZV9rZXkocGNvbGwsIHBjb2xsc190b19wY29sbF9pZCwgcGNvbGxfdmVyc2lvbl9tYXA9Tm9uZSk6CiAgcGNvbGxfdmVyc2lvbiA9IHN0cihpZChwY29sbCkpCiAgcGNvbGxfaWQgPSBwY29sbHNfdG9fcGNvbGxfaWQuZ2V0KHN0cihwY29sbCksICcnKQogIGlmIHBjb2xsX3ZlcnNpb25fbWFwOgogICAgb3JpZ2luYWxfcGlwZWxpbmVfcGNvbGxfdmVyc2lvbiA9IHBjb2xsX3ZlcnNpb25fbWFwLmdldChwY29sbF9pZCwgTm9uZSkKICAgIGlmIG9yaWdpbmFsX3BpcGVsaW5lX3Bjb2xsX3ZlcnNpb246CiAgICAgIHBjb2xsX3ZlcnNpb24gPSBvcmlnaW5hbF9waXBlbGluZV9wY29sbF92ZXJzaW9uCiAgcmV0dXJuICdfJy5qb2luKChwY29sbF92ZXJzaW9uLCBwY29sbF9pZCkpCgoKZGVmIGhhc191bmJvdW5kZWRfc291cmNlcyhwaXBlbGluZSk6CiAgIiIiQ2hlY2tzIGlmIGEgZ2l2ZW4gcGlwZWxpbmUgaGFzIGNhcHR1cmFibGUgc291cmNlcy4iIiIKICByZXR1cm4gbGVuKHVuYm91bmRlZF9zb3VyY2VzKHBpcGVsaW5lKSkgPiAwCgoKZGVmIHVuYm91bmRlZF9zb3VyY2VzKHBpcGVsaW5lKToKICAiIiJSZXR1cm5zIGEgcGlwZWxpbmUncyBjYXB0dXJhYmxlIHNvdXJjZXMuIiIiCiAgY2xhc3MgQ2hlY2tVbmJvdW5kZWRuZXNzVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgIiIiVmlzaXRvciBjaGVja3MgaWYgdGhlcmUgYXJlIGFueSB1bmJvdW5kZWQgcmVhZCBzb3VyY2VzIGluIHRoZSBQaXBlbGluZS4KCiAgICBWaXNpdG9yIHZpc2l0cyBhbGwgbm9kZXMgYW5kIGNoZWNrcyBpZiBpdCBpcyBhbiBpbnN0YW5jZSBvZiBjYXB0dXJhYmxlCiAgICBzb3VyY2VzLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgIHNlbGYudW5ib3VuZGVkX3NvdXJjZXMgPSBbXQoKICAgIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgc2VsZi52aXNpdF90cmFuc2Zvcm0odHJhbnNmb3JtX25vZGUpCgogICAgZGVmIHZpc2l0X3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgIHR1cGxlKGllLmN1cnJlbnRfZW52KCkub3B0aW9ucy5jYXB0dXJhYmxlX3NvdXJjZXMpKToKICAgICAgICBzZWxmLnVuYm91bmRlZF9zb3VyY2VzLmFwcGVuZCh0cmFuc2Zvcm1fbm9kZSkKCiAgdiA9IENoZWNrVW5ib3VuZGVkbmVzc1Zpc2l0b3IoKQogIHBpcGVsaW5lLnZpc2l0KHYpCiAgcmV0dXJuIHYudW5ib3VuZGVkX3NvdXJjZXMKCgpkZWYgcGNvbGxzX3RvX3Bjb2xsX2lkKHBpcGVsaW5lLCBvcmlnaW5hbF9jb250ZXh0KToKICAiIiJSZXR1cm5zIGEgZGljdCBtYXBwaW5nIFBDb2xsZWN0aW9ucyBzdHJpbmcgdG8gUENvbGxlY3Rpb24gSURzLgoKICBVc2luZyBhIFBpcGVsaW5lVmlzaXRvciB0byBpdGVyYXRlIG92ZXIgZXZlcnkgbm9kZSBpbiB0aGUgcGlwZWxpbmUsCiAgcmVjb3JkcyB0aGUgbWFwcGluZyBmcm9tIFBDb2xsZWN0aW9ucyB0byBQQ29sbGVjdGlvbnMgSURzLiBUaGlzIG1hcHBpbmcKICB3aWxsIGJlIHVzZWQgdG8gcXVlcnkgY2FjaGVkIFBDb2xsZWN0aW9ucy4KCiAgUmV0dXJuczoKICAgIChkaWN0IGZyb20gc3RyIHRvIHN0cikgYSBkaWN0IG1hcHBpbmcgc3RyKHBjb2xsKSB0byBwY29sbF9pZC4KICAiIiIKICBjbGFzcyBQQ29sbFZpc2l0b3IoUGlwZWxpbmVWaXNpdG9yKToKICAgICIiIiJBIHZpc2l0b3IgdGhhdCByZWNvcmRzIGlucHV0IGFuZCBvdXRwdXQgdmFsdWVzIHRvIGJlIHJlcGxhY2VkLgoKICAgIElucHV0IGFuZCBvdXRwdXQgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHVwZGF0ZWQgYXJlIHJlY29yZGVkIGluIG1hcHMKICAgIGlucHV0X3JlcGxhY2VtZW50cyBhbmQgb3V0cHV0X3JlcGxhY2VtZW50cyByZXNwZWN0aXZlbHkuCgogICAgV2UgY2Fubm90IHVwZGF0ZSBpbnB1dCBhbmQgb3V0cHV0IHZhbHVlcyB3aGlsZSB2aXNpdGluZyBzaW5jZSB0aGF0CiAgICByZXN1bHRzIGluIHZhbGlkYXRpb24gZXJyb3JzLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgIHNlbGYucGNvbGxzX3RvX3Bjb2xsX2lkID0ge30KCiAgICBkZWYgZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCB0cmFuc2Zvcm1fbm9kZSk6CiAgICAgIHNlbGYudmlzaXRfdHJhbnNmb3JtKHRyYW5zZm9ybV9ub2RlKQoKICAgIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtX25vZGUpOgogICAgICBmb3IgcGNvbGwgaW4gdHJhbnNmb3JtX25vZGUub3V0cHV0cy52YWx1ZXMoKToKICAgICAgICBzZWxmLnBjb2xsc190b19wY29sbF9pZFtzdHIocGNvbGwpXSA9ICgKICAgICAgICAgICAgb3JpZ2luYWxfY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2lkKHBjb2xsKSkKCiAgdiA9IFBDb2xsVmlzaXRvcigpCiAgcGlwZWxpbmUudmlzaXQodikKICByZXR1cm4gdi5wY29sbHNfdG9fcGNvbGxfaWQKlJWeDAEAAAAAAH2UKIwbUGlwZWxpbmVJbnN0cnVtZW50Ll9faW5pdF9flGpWMQEASzBLZYeUjC5QaXBlbGluZUluc3RydW1lbnQuaW5zdHJ1bWVudGVkX3BpcGVsaW5lX3Byb3RvlGpWMQEAS2dLaYeUjCdQaXBlbGluZUluc3RydW1lbnQuX3JlcXVpcmVkX2NvbXBvbmVudHOUalYxAQBLa0urh5SMNFBpcGVsaW5lSW5zdHJ1bWVudC5iYWNrZ3JvdW5kX2NhY2hpbmdfcGlwZWxpbmVfcHJvdG+UalYxAQBLrUvuh5SMKFBpcGVsaW5lSW5zdHJ1bWVudC5oYXNfdW5ib3VuZGVkX3NvdXJjZXOUalYxAQBL8Ev0h5SMHVBpcGVsaW5lSW5zdHJ1bWVudC5jYWNoZWFibGVzlGpWMQEAS/ZNAAGHlIwlUGlwZWxpbmVJbnN0cnVtZW50LnBjb2xsc190b19wY29sbF9pZJRqVjEBAE0CAU0FAYeUjCpQaXBlbGluZUluc3RydW1lbnQub3JpZ2luYWxfcGlwZWxpbmVfcHJvdG+UalYxAQBNBwFNCwGHlIwkUGlwZWxpbmVJbnN0cnVtZW50Lm9yaWdpbmFsX3BpcGVsaW5llGpWMQEATQ0BTRABh5SMIFBpcGVsaW5lSW5zdHJ1bWVudC51c2VyX3BpcGVsaW5llGpWMQEATRIBTR4Bh5SMLVBpcGVsaW5lSW5zdHJ1bWVudC5ydW5uZXJfcGNvbGxfdG9fdXNlcl9wY29sbJRqVjEBAE0gAU0kAYeUjDhQaXBlbGluZUluc3RydW1lbnQuaW5zdHJ1bWVudC5JbnN0cnVtZW50VmlzaXRvci5fX2luaXRfX5RqVjEBAE00AU01AYeUjElQaXBlbGluZUluc3RydW1lbnQuaW5zdHJ1bWVudC5JbnN0cnVtZW50VmlzaXRvci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtlGpWMQEATTcBTTgBh5SMP1BpcGVsaW5lSW5zdHJ1bWVudC5pbnN0cnVtZW50Lkluc3RydW1lbnRWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqVjEBAE06AU07AYeUjC9QaXBlbGluZUluc3RydW1lbnQuaW5zdHJ1bWVudC5JbnN0cnVtZW50VmlzaXRvcpRqXTEBAE0yAU07AYeUjB1QaXBlbGluZUluc3RydW1lbnQuaW5zdHJ1bWVudJRqVjEBAE0mAU1MAYeUjDhQaXBlbGluZUluc3RydW1lbnQucHJlcHJvY2Vzcy5QcmVwcm9jZXNzVmlzaXRvci5fX2luaXRfX5RqVjEBAE1ZAU1aAYeUjElQaXBlbGluZUluc3RydW1lbnQucHJlcHJvY2Vzcy5QcmVwcm9jZXNzVmlzaXRvci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtlGpWMQEATVwBTV0Bh5SMP1BpcGVsaW5lSW5zdHJ1bWVudC5wcmVwcm9jZXNzLlByZXByb2Nlc3NWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqVjEBAE1fAU1jAYeUjDhQaXBlbGluZUluc3RydW1lbnQucHJlcHJvY2Vzcy5QcmVwcm9jZXNzVmlzaXRvci5fcHJvY2Vzc5RqVjEBAE1lAU1vAYeUjC9QaXBlbGluZUluc3RydW1lbnQucHJlcHJvY2Vzcy5QcmVwcm9jZXNzVmlzaXRvcpRqXTEBAE1YAU1vAYeUjB1QaXBlbGluZUluc3RydW1lbnQucHJlcHJvY2Vzc5RqVjEBAE1QAU1yAYeUjB9QaXBlbGluZUluc3RydW1lbnQuX3dyaXRlX2NhY2hllGpWMQEATXQBTYkBh5SMHlBpcGVsaW5lSW5zdHJ1bWVudC5fcmVhZF9jYWNoZZRqVjEBAE2LAU2lAYeUjExQaXBlbGluZUluc3RydW1lbnQuX3JlcGxhY2Vfd2l0aF9jYWNoZWRfaW5wdXRzLlJlYWRDYWNoZVdpcmVWaXNpdG9yLl9faW5pdF9flGpWMQEATbQBTbYBh5SMXVBpcGVsaW5lSW5zdHJ1bWVudC5fcmVwbGFjZV93aXRoX2NhY2hlZF9pbnB1dHMuUmVhZENhY2hlV2lyZVZpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybZRqVjEBAE24AU25AYeUjFNQaXBlbGluZUluc3RydW1lbnQuX3JlcGxhY2Vfd2l0aF9jYWNoZWRfaW5wdXRzLlJlYWRDYWNoZVdpcmVWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqVjEBAE27AU3CAYeUjENQaXBlbGluZUluc3RydW1lbnQuX3JlcGxhY2Vfd2l0aF9jYWNoZWRfaW5wdXRzLlJlYWRDYWNoZVdpcmVWaXNpdG9ylGpdMQEATbABTcIBh5SMLlBpcGVsaW5lSW5zdHJ1bWVudC5fcmVwbGFjZV93aXRoX2NhY2hlZF9pbnB1dHOUalYxAQBNqAFNxQGHlIwkUGlwZWxpbmVJbnN0cnVtZW50Ll9jYWNoZWFibGVfaW5wdXRzlGpWMQEATccBTcwBh5SMIVBpcGVsaW5lSW5zdHJ1bWVudC5fY2FjaGVhYmxlX2tleZRqVjEBAE3OAU3RAYeUjBxQaXBlbGluZUluc3RydW1lbnQuY2FjaGVfa2V5lGpWMQEATdMBTeUBh5SMLFBpcGVsaW5lSW5zdHJ1bWVudC5jYWNoZWFibGVfdmFyX2J5X3Bjb2xsX2lklGpWMQEATecBTfABh5SMElBpcGVsaW5lSW5zdHJ1bWVudJRqXTEBAEsmTfABh5SMGWJ1aWxkX3BpcGVsaW5lX2luc3RydW1lbnSUalYxAQBN8wFNBAKHlIwKY2FjaGVhYmxlc5RqVjEBAE0HAk0oAoeUjA1jYWNoZWFibGVfa2V5lGpWMQEATSsCTTICh5SMFWhhc191bmJvdW5kZWRfc291cmNlc5RqVjEBAE01Ak03AoeUjDR1bmJvdW5kZWRfc291cmNlcy5DaGVja1VuYm91bmRlZG5lc3NWaXNpdG9yLl9faW5pdF9flGpWMQEATUICTUMCh5SMRXVuYm91bmRlZF9zb3VyY2VzLkNoZWNrVW5ib3VuZGVkbmVzc1Zpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybZRqVjEBAE1FAk1GAoeUjDt1bmJvdW5kZWRfc291cmNlcy5DaGVja1VuYm91bmRlZG5lc3NWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqVjEBAE1IAk1LAoeUjCt1bmJvdW5kZWRfc291cmNlcy5DaGVja1VuYm91bmRlZG5lc3NWaXNpdG9ylGpdMQEATTwCTUsCh5SMEXVuYm91bmRlZF9zb3VyY2VzlGpWMQEATToCTU8Ch5SMKHBjb2xsc190b19wY29sbF9pZC5QQ29sbFZpc2l0b3IuX19pbml0X1+UalYxAQBNZQJNZgKHlIw5cGNvbGxzX3RvX3Bjb2xsX2lkLlBDb2xsVmlzaXRvci5lbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtlGpWMQEATWgCTWkCh5SML3Bjb2xsc190b19wY29sbF9pZC5QQ29sbFZpc2l0b3IudmlzaXRfdHJhbnNmb3JtlGpWMQEATWsCTW4Ch5SMH3Bjb2xsc190b19wY29sbF9pZC5QQ29sbFZpc2l0b3KUal0xAQBNXAJNbgKHlIwScGNvbGxzX3RvX3Bjb2xsX2lklGpWMQEATVICTXICh5R1fZQojBJQaXBlbGluZUluc3RydW1lbnSUaj0DAACMLlBpcGVsaW5lSW5zdHJ1bWVudC5pbnN0cnVtZW50ZWRfcGlwZWxpbmVfcHJvdG+Uaj0DAACMNFBpcGVsaW5lSW5zdHJ1bWVudC5iYWNrZ3JvdW5kX2NhY2hpbmdfcGlwZWxpbmVfcHJvdG+Uaj0DAACMHVBpcGVsaW5lSW5zdHJ1bWVudC5pbnN0cnVtZW50lGo9AwAAjB1QaXBlbGluZUluc3RydW1lbnQucHJlcHJvY2Vzc5RqPQMAAIwcUGlwZWxpbmVJbnN0cnVtZW50LmNhY2hlX2tleZRqPQMAAIwsUGlwZWxpbmVJbnN0cnVtZW50LmNhY2hlYWJsZV92YXJfYnlfcGNvbGxfaWSUaj0DAACMGWJ1aWxkX3BpcGVsaW5lX2luc3RydW1lbnSUaj0DAACMCmNhY2hlYWJsZXOUaj0DAACMDWNhY2hlYWJsZV9rZXmUaj0DAACMFWhhc191bmJvdW5kZWRfc291cmNlc5RqPQMAAIwRdW5ib3VuZGVkX3NvdXJjZXOUaj0DAACMEnBjb2xsc190b19wY29sbF9pZJRqPQMAAHWMM2FwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUucGlwZWxpbmVfaW5zdHJ1bWVudJR0lIw0YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLm1vY2tfaXB5dGhvbpQoWF8IAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCgpkZWYgbW9ja19nZXRfaXB5dGhvbigpOgogICIiIk1vY2sgYW4gaXB5dGhvbiBlbnZpcm9ubWVudCB3L28gc2V0dGluZyB1cCByZWFsIGlweXRob24ga2VybmVsLgoKICBFYWNoIGVudGVyaW5nIG9mIGdldF9pcHl0aG9uKCkgaW52b2NhdGlvbiB3aWxsIGhhdmUgdGhlIHByb21wdCBpbmNyZWFzZWQgYnkKICBvbmUuIEdyb3VwaW5nIGFyYml0cmFyeSBweXRob24gY29kZSBpbnRvIHNlcGFyYXRlIGNlbGxzIHVzaW5nIGB3aXRoYCBjbGF1c2UuCgogIEV4YW1wbGVzOjoKCiAgICAjIFVzYWdlLCBiZWZvcmUgZWFjaCB0ZXN0IGZ1bmN0aW9uLCBwcmVwZW5kOgogICAgQHBhdGNoKCdJUHl0aG9uLmdldF9pcHl0aG9uJywgbmV3X2NhbGxhYmxlPW1vY2tfZ2V0X2lweXRob24pCgogICAgIyBJbiB0aGUgdGVzdCBmdW5jdGlvbidzIHNpZ25hdHVyZSwgYWRkIGFuIGFyZ3VtZW50IGZvciB0aGUgcGF0Y2gsIGUuZy46CiAgICBkZWYgc29tZV90ZXN0KHNlbGYsIGNlbGwpOgoKICAgICMgR3JvdXAgbGluZXMgb2YgY29kZSBpbnRvIGEgY2VsbCB1c2luZyB0aGUgYXJndW1lbnQ6CiAgICB3aXRoIGNlbGw6CiAgICAgICMgYXJiaXRyYXJ5IHB5dGhvbiBjb2RlCiAgICAgICMgLi4uCiAgICAgICMgYXJiaXRyYXJ5IHB5dGhvbiBjb2RlCgogICAgIyBOZXh0IGNlbGwgd2l0aCBwcm9tcHQgaW5jcmVhc2VkIGJ5IG9uZToKICAgIHdpdGggY2VsbDogICMgQXV0by1pbmNyZW1lbnRhbAogICAgICAjIGFyYml0cmFyeSBweXRob24gY29kZQogICAgICAjIC4uLgogICAgICAjIGFyYml0cmFyeSBweXRob24gY29kZQogICIiIgogIGNsYXNzIE1vY2tlZEdldElweXRob24ob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgc2VsZi5fZXhlY3V0aW9uX2NvdW50ID0gMAoKICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKICAgICAgcmV0dXJuIHNlbGYKCiAgICBAcHJvcGVydHkKICAgIGRlZiBleGVjdXRpb25fY291bnQoc2VsZik6CiAgICAgICIiIkV4ZWN1dGlvbiBjb3VudCBhbHdheXMgc3RhcnRzIGZyb20gMSBhbmQgaXMgY29uc3RhbnQgd2l0aGluIGEgY2VsbC4iIiIKICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGlvbl9jb3VudAoKICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICIiIk1hcmtzIGVudGVyaW5nIG9mIGEgY2VsbC9wcm9tcHQuIiIiCiAgICAgIHNlbGYuX2V4ZWN1dGlvbl9jb3VudCA9IHNlbGYuX2V4ZWN1dGlvbl9jb3VudCArIDEKCiAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgIiIiTWFya3MgZXhpdGluZyBvZiBhIGNlbGwvcHJvbXB0LiIiIgogICAgICBwYXNzCgogIHJldHVybiBNb2NrZWRHZXRJcHl0aG9uKCkKlH2UKIwqbW9ja19nZXRfaXB5dGhvbi5Nb2NrZWRHZXRJcHl0aG9uLl9faW5pdF9flGpWMQEASy5LL4eUjCptb2NrX2dldF9pcHl0aG9uLk1vY2tlZEdldElweXRob24uX19jYWxsX1+UalYxAQBLMUsyh5SMMW1vY2tfZ2V0X2lweXRob24uTW9ja2VkR2V0SXB5dGhvbi5leGVjdXRpb25fY291bnSUalYxAQBLNEs3h5SMK21vY2tfZ2V0X2lweXRob24uTW9ja2VkR2V0SXB5dGhvbi5fX2VudGVyX1+UalYxAQBLOUs7h5SMKm1vY2tfZ2V0X2lweXRob24uTW9ja2VkR2V0SXB5dGhvbi5fX2V4aXRfX5RqVjEBAEs9Sz+HlIwhbW9ja19nZXRfaXB5dGhvbi5Nb2NrZWRHZXRJcHl0aG9ulGpdMQEASy1LP4eUjBBtb2NrX2dldF9pcHl0aG9ulGpWMQEASxNLQYeUdX2UjBBtb2NrX2dldF9pcHl0aG9ulGquAwAAc4w0YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLm1vY2tfaXB5dGhvbpR0lIw6YXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS50ZXN0aW5nLnBpcGVsaW5lX2Fzc2VydGlvbpQoWCEPAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1vZHVsZSB0byB2ZXJpZnkgaW1wbGljaXQgY2FjaGUgdHJhbnNmb3JtcyBhcHBsaWVkIGJ5IEludGVyYWN0aXZlIEJlYW0uCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuClRoaXMgdXRpbGl0eSBzaG91bGQgb25seSBiZSB1c2VkIGJ5IEludGVyYWN0aXZlIEJlYW0gdGVzdHMuIEZvciBleGFtcGxlLCBpdCBjYW4KYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGltcGxpY2l0IGNhY2hlIHRyYW5zZm9ybXMgYXJlIGFwcGxpZWQgYXMgZXhwZWN0ZWQgd2hlbgpydW5uaW5nIGEgcGlwZWxpbmUgd2l0aCB0aGUgSW50ZXJhY3RpdmVSdW5uZXIuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gdmVyaWZ5IGlmCmEgcGlwZWxpbmUgZnJhZ21lbnQgaGFzIHBydW5lZCB1bm5lY2Vzc2FyeSB0cmFuc2Zvcm1zLiBJdCBzaG91bGRuJ3QgYmUgdXNlZCB0bwp2ZXJpZnkgZXF1aXZhbGVuY2UgYmV0d2VlbiBwaXBlbGluZXMgaWYgdGhlIGNvZGUgdG8gYmUgdGVzdGVkIGRlcGVuZHMgb24gb3IKbXV0YXRlcyB1c2VyIGNvZGUgd2l0aGluIHRyYW5zZm9ybXMgaW4gcGlwZWxpbmVzLgoiIiIKCgpkZWYgYXNzZXJ0X3BpcGVsaW5lX2VxdWFsKHRlc3RfY2FzZSwgZXhwZWN0ZWRfcGlwZWxpbmUsIGFjdHVhbF9waXBlbGluZSk6CiAgIiIiQXNzZXJ0cyB0aGUgZXF1aXZhbGVuY2UgYmV0d2VlbiB0d28gZ2l2ZW4gYXBhY2hlX2JlYW0uUGlwZWxpbmUgaW5zdGFuY2VzLgoKICBBcmdzOgogICAgdGVzdF9jYXNlOiAodW5pdHRlc3QuVGVzdENhc2UpIHRoZSB1bml0dGVzdCB0ZXN0Y2FzZSB3aGVyZSBpdCBhc3NlcnRzLgogICAgZXhwZWN0ZWRfcGlwZWxpbmU6IChQaXBlbGluZSkgdGhlIHBpcGVsaW5lIGluc3RhbmNlIGV4cGVjdGVkLgogICAgYWN0dWFsX3BpcGVsaW5lOiAoUGlwZWxpbmUpIHRoZSBhY3R1YWwgcGlwZWxpbmUgaW5zdGFuY2UgdG8gYmUgYXNzZXJ0ZWQuCiAgIiIiCiAgZXhwZWN0ZWRfcGlwZWxpbmVfcHJvdG8gPSBleHBlY3RlZF9waXBlbGluZS50b19ydW5uZXJfYXBpKAogICAgICB1c2VfZmFrZV9jb2RlcnM9VHJ1ZSkKICBhY3R1YWxfcGlwZWxpbmVfcHJvdG8gPSBhY3R1YWxfcGlwZWxpbmUudG9fcnVubmVyX2FwaSh1c2VfZmFrZV9jb2RlcnM9VHJ1ZSkKICBhc3NlcnRfcGlwZWxpbmVfcHJvdG9fZXF1YWwoCiAgICAgIHRlc3RfY2FzZSwgZXhwZWN0ZWRfcGlwZWxpbmVfcHJvdG8sIGFjdHVhbF9waXBlbGluZV9wcm90bykKCgpkZWYgYXNzZXJ0X3BpcGVsaW5lX3Byb3RvX2VxdWFsKAogICAgdGVzdF9jYXNlLCBleHBlY3RlZF9waXBlbGluZV9wcm90bywgYWN0dWFsX3BpcGVsaW5lX3Byb3RvKToKICAiIiJBc3NlcnRzIHRoZSBlcXVpdmFsZW5jZSBiZXR3ZWVuIHR3byBwaXBlbGluZSBwcm90byByZXByZXNlbnRhdGlvbnMuIiIiCiAgY29tcG9uZW50czEgPSBleHBlY3RlZF9waXBlbGluZV9wcm90by5jb21wb25lbnRzCiAgY29tcG9uZW50czIgPSBhY3R1YWxfcGlwZWxpbmVfcHJvdG8uY29tcG9uZW50cwogIHRlc3RfY2FzZS5hc3NlcnRFcXVhbCgKICAgICAgbGVuKGNvbXBvbmVudHMxLnRyYW5zZm9ybXMpLCBsZW4oY29tcG9uZW50czIudHJhbnNmb3JtcykpCiAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKAogICAgICBsZW4oY29tcG9uZW50czEucGNvbGxlY3Rpb25zKSwgbGVuKGNvbXBvbmVudHMyLnBjb2xsZWN0aW9ucykpCgogICMgVE9ETyhCRUFNLTc5MjYpOiBVcGRhdGUgdGVzdHMgYW5kIG1ha2UgYmVsb3cgMiBhc3NlcnRpb25zIGFzc2VydEVxdWFsLgogIHRlc3RfY2FzZS5hc3NlcnRMZXNzRXF1YWwoCiAgICAgIGxlbihjb21wb25lbnRzMS53aW5kb3dpbmdfc3RyYXRlZ2llcyksCiAgICAgIGxlbihjb21wb25lbnRzMi53aW5kb3dpbmdfc3RyYXRlZ2llcykpCiAgdGVzdF9jYXNlLmFzc2VydExlc3NFcXVhbChsZW4oY29tcG9uZW50czEuY29kZXJzKSwgbGVuKGNvbXBvbmVudHMyLmNvZGVycykpCgogIF9hc3NlcnRfdHJhbnNmb3JtX2VxdWFsKAogICAgICB0ZXN0X2Nhc2UsCiAgICAgIGFjdHVhbF9waXBlbGluZV9wcm90bywKICAgICAgYWN0dWFsX3BpcGVsaW5lX3Byb3RvLnJvb3RfdHJhbnNmb3JtX2lkc1swXSwKICAgICAgZXhwZWN0ZWRfcGlwZWxpbmVfcHJvdG8sCiAgICAgIGV4cGVjdGVkX3BpcGVsaW5lX3Byb3RvLnJvb3RfdHJhbnNmb3JtX2lkc1swXSkKCgpkZWYgX2Fzc2VydF90cmFuc2Zvcm1fZXF1YWwoCiAgICB0ZXN0X2Nhc2UsCiAgICBleHBlY3RlZF9waXBlbGluZV9wcm90bywKICAgIGV4cGVjdGVkX3RyYW5zZm9ybV9pZCwKICAgIGFjdHVhbF9waXBlbGluZV9wcm90bywKICAgIGFjdHVhbF90cmFuc2Zvcm1faWQpOgogICIiIkFzc2VydHMgdGhlIGVxdWl2YWxlbmNlIGJldHdlZW4gdHJhbnNmb3JtcyBmcm9tIHR3byBnaXZlbiBwaXBlbGluZXMuICIiIgogIHRyYW5zZm9ybV9wcm90bzEgPSBleHBlY3RlZF9waXBlbGluZV9wcm90by5jb21wb25lbnRzLnRyYW5zZm9ybXNbCiAgICAgIGV4cGVjdGVkX3RyYW5zZm9ybV9pZF0KICB0cmFuc2Zvcm1fcHJvdG8yID0gYWN0dWFsX3BpcGVsaW5lX3Byb3RvLmNvbXBvbmVudHMudHJhbnNmb3Jtc1sKICAgICAgYWN0dWFsX3RyYW5zZm9ybV9pZF0KICB0ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwodHJhbnNmb3JtX3Byb3RvMS5zcGVjLnVybiwgdHJhbnNmb3JtX3Byb3RvMi5zcGVjLnVybikKICAjIFNraXBwaW5nIHBheWxvYWQgY2hlY2tpbmcgYmVjYXVzZSBQVHJhbnNmb3JtcyBvZiB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5CiAgIyBjb3VsZCBnZW5lcmF0ZSBkaWZmZXJlbnQgcGF5bG9hZHMuCiAgdGVzdF9jYXNlLmFzc2VydEVxdWFsKAogICAgICBsZW4odHJhbnNmb3JtX3Byb3RvMS5zdWJ0cmFuc2Zvcm1zKSwgbGVuKHRyYW5zZm9ybV9wcm90bzIuc3VidHJhbnNmb3JtcykpCiAgdGVzdF9jYXNlLmFzc2VydFNldEVxdWFsKAogICAgICBzZXQodHJhbnNmb3JtX3Byb3RvMS5pbnB1dHMpLCBzZXQodHJhbnNmb3JtX3Byb3RvMi5pbnB1dHMpKQogIHRlc3RfY2FzZS5hc3NlcnRTZXRFcXVhbCgKICAgICAgc2V0KHRyYW5zZm9ybV9wcm90bzEub3V0cHV0cyksIHNldCh0cmFuc2Zvcm1fcHJvdG8yLm91dHB1dHMpKQqUfZQojBVhc3NlcnRfcGlwZWxpbmVfZXF1YWyUalYxAQBLHksqh5SMG2Fzc2VydF9waXBlbGluZV9wcm90b19lcXVhbJRqVjEBAEstS0KHlIwXX2Fzc2VydF90cmFuc2Zvcm1fZXF1YWyUalYxAQBLRUtYh5R1fZQojBVhc3NlcnRfcGlwZWxpbmVfZXF1YWyUav0DAACMG2Fzc2VydF9waXBlbGluZV9wcm90b19lcXVhbJRq/QMAAHWMOmFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUudGVzdGluZy5waXBlbGluZV9hc3NlcnRpb26UdJSMH2FwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLm1hbmFnZXKUKFh8BwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIG9iamVjdCB0byBjb250cm9sIHRvIHRoZSBKb2IgQVBJIENvLVByb2Nlc3MKIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IHRpbWUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CgppbXBvcnQgZ3JwYwoKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fam9iX2FwaV9wYjJfZ3JwYwoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIERvY2tlclJQQ01hbmFnZXIob2JqZWN0KToKICAiIiJBIG5hdGl2ZSBjby1wcm9jZXNzIHRvIHN0YXJ0IGEgY29udGlhbmVyIHRoYXQgc3BlYWtzIHRoZSBKb2JBcGkKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcnVuX2NvbW1hbmQ9Tm9uZSk6CiAgICAjIFRPRE8oQkVBTS0yNDMxKTogQ2hhbmdlIHRoaXMgdG8gYSBkb2NrZXIgY29udGFpbmVyIGZyb20gYSBjb21tYW5kLgogICAgc2VsZi5wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihbCiAgICAgICAgJ3B5dGhvbicsCiAgICAgICAgJy1tJywKICAgICAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5leHBlcmltZW50YWwucHl0aG9uX3JwY19kaXJlY3Quc2VydmVyJwogICAgXSkKCiAgICBzZWxmLmNoYW5uZWwgPSBncnBjLmluc2VjdXJlX2NoYW5uZWwoJ2xvY2FsaG9zdDo1MDA1MScpCiAgICBzZWxmLnNlcnZpY2UgPSBiZWFtX2pvYl9hcGlfcGIyX2dycGMuSm9iU2VydmljZVN0dWIoc2VsZi5jaGFubmVsKQoKICAgICMgU2xlZXAgZm9yIDIgc2Vjb25kcyBmb3IgcHJvY2VzcyB0byBzdGFydCBjb21wbGV0ZWx5CiAgICAjIFRoaXMgaXMganVzdCBmb3IgdGhlIGNvLXByb2Nlc3MgYW5kIHdvdWxkIGJlIHJlbW92ZWQKICAgICMgb25jZSB3ZSBtaWdyYXRlIHRvIGRvY2tlci4KICAgIHRpbWUuc2xlZXAoMikKCiAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAiIiJUZXJtaW5hdGUgdGhlIGNvLXByb2Nlc3Mgd2hlbiB0aGUgbWFuYWdlciBpcyBHQydlZAogICAgIiIiCiAgICBfTE9HR0VSLmluZm8oJ1NodXR0aW5nIHRoZSBjby1wcm9jZXNzJykKICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQqUfZQojBlEb2NrZXJSUENNYW5hZ2VyLl9faW5pdF9flGpWMQEASyhLNoeUjBhEb2NrZXJSUENNYW5hZ2VyLl9fZGVsX1+UalYxAQBLOEs8h5SMEERvY2tlclJQQ01hbmFnZXKUal0xAQBLJUs8h5R1fZSMEERvY2tlclJQQ01hbmFnZXKUakkDAABzjB9hcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi5tYW5hZ2VylHSUjB1hcGFjaGVfYmVhbS5ydW5uZXJzLmpvYi51dGlsc5QoWPcEAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlV0aWxpdHkgZnVuY3Rpb25zIGZvciBlZmZpY2llbnRseSBwcm9jZXNzaW5nIHdpdGggdGhlIGpvYiBBUEkKIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGpzb24KCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBqc29uX2Zvcm1hdApmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgc3RydWN0X3BiMgoKCmRlZiBkaWN0X3RvX3N0cnVjdChkaWN0X29iaik6CiAgIyB0eXBlOiAoZGljdCkgLT4gc3RydWN0X3BiMi5TdHJ1Y3QKICByZXR1cm4ganNvbl9mb3JtYXQuUGFyc2VEaWN0KGRpY3Rfb2JqLCBzdHJ1Y3RfcGIyLlN0cnVjdCgpKQoKCmRlZiBzdHJ1Y3RfdG9fZGljdChzdHJ1Y3Rfb2JqKToKICAjIHR5cGU6IChzdHJ1Y3RfcGIyLlN0cnVjdCkgLT4gZGljdAogIHJldHVybiBqc29uLmxvYWRzKGpzb25fZm9ybWF0Lk1lc3NhZ2VUb0pzb24oc3RydWN0X29iaikpCpR9lCiMDmRpY3RfdG9fc3RydWN0lGpWMQEASx9LIYeUjA5zdHJ1Y3RfdG9fZGljdJRqVjEBAEskSyaHlHV9lCiMDmRpY3RfdG9fc3RydWN0lGqfAwAAjA5zdHJ1Y3RfdG9fZGljdJRqnwMAAHWMHWFwYWNoZV9iZWFtLnJ1bm5lcnMuam9iLnV0aWxzlHSUjCRhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHSUKFhAIQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlsaXR5IGNsYXNzIGZvciBzZXJpYWxpemluZyBwaXBlbGluZXMgdmlhIHRoZSBydW5uZXIgQVBJLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdApmcm9tIHR5cGluZyBpbXBvcnQgSXRlcmFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IE1hcHBpbmcKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHBpcGVsaW5lCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2ZuX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjb3JlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgZW52aXJvbm1lbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBuYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5CgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBtZXNzYWdlICAjIHB5bGludDogZGlzYWJsZT11bmdyb3VwZWQtaW1wb3J0cwogIGZyb20gYXBhY2hlX2JlYW0uY29kZXJzLmNvZGVyX2ltcGwgaW1wb3J0IEl0ZXJhYmxlU3RhdGVSZWFkZXIKICBmcm9tIGFwYWNoZV9iZWFtLmNvZGVycy5jb2Rlcl9pbXBsIGltcG9ydCBJdGVyYWJsZVN0YXRlV3JpdGVyCgoKY2xhc3MgX1BpcGVsaW5lQ29udGV4dE1hcChvYmplY3QpOgogICIiIlRoaXMgaXMgYSBiaS1kaXJlY3Rpb25hbCBtYXAgYmV0d2VlbiBvYmplY3RzIGFuZCBpZHMuCgogIFVuZGVyIHRoZSBob29kIGl0IGVuY29kZXMgYW5kIGRlY29kZXMgdGhlc2Ugb2JqZWN0cyBpbnRvIHJ1bm5lciBBUEkKICByZXByZXNlbnRhdGlvbnMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICAgICAgIG9ial90eXBlLAogICAgICAgICAgICAgICBuYW1lc3BhY2UsICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICBwcm90b19tYXA9Tm9uZSAgIyB0eXBlOiBPcHRpb25hbFtNYXBwaW5nW3N0ciwgbWVzc2FnZS5NZXNzYWdlXV0KICAgICAgICAgICAgICApOgogICAgc2VsZi5fcGlwZWxpbmVfY29udGV4dCA9IGNvbnRleHQKICAgIHNlbGYuX29ial90eXBlID0gb2JqX3R5cGUKICAgIHNlbGYuX25hbWVzcGFjZSA9IG5hbWVzcGFjZQogICAgc2VsZi5fb2JqX3RvX2lkID0ge30gICMgdHlwZTogRGljdFtBbnksIHN0cl0KICAgIHNlbGYuX2lkX3RvX29iaiA9IHt9ICAjIHR5cGU6IERpY3Rbc3RyLCBBbnldCiAgICBzZWxmLl9pZF90b19wcm90byA9IGRpY3QocHJvdG9fbWFwKSBpZiBwcm90b19tYXAgZWxzZSB7fQogICAgc2VsZi5fY291bnRlciA9IDAKCiAgZGVmIF91bmlxdWVfcmVmKHNlbGYsIG9iaj1Ob25lLCBsYWJlbD1Ob25lKToKICAgICMgdHlwZTogKE9wdGlvbmFsW0FueV0sIE9wdGlvbmFsW3N0cl0pIC0+IHN0cgogICAgc2VsZi5fY291bnRlciArPSAxCiAgICByZXR1cm4gIiVzXyVzXyVzXyVkIiAlICgKICAgICAgICBzZWxmLl9uYW1lc3BhY2UsCiAgICAgICAgc2VsZi5fb2JqX3R5cGUuX19uYW1lX18sCiAgICAgICAgbGFiZWwgb3IgdHlwZShvYmopLl9fbmFtZV9fLAogICAgICAgIHNlbGYuX2NvdW50ZXIpCgogIGRlZiBwb3B1bGF0ZV9tYXAoc2VsZiwgcHJvdG9fbWFwKToKICAgICMgdHlwZTogKE1hcHBpbmdbc3RyLCBtZXNzYWdlLk1lc3NhZ2VdKSAtPiBOb25lCiAgICBmb3IgaWQsIHByb3RvIGluIHNlbGYuX2lkX3RvX3Byb3RvLml0ZW1zKCk6CiAgICAgIHByb3RvX21hcFtpZF0uQ29weUZyb20ocHJvdG8pCgogIGRlZiBnZXRfaWQoc2VsZiwgb2JqLCBsYWJlbD1Ob25lKToKICAgICMgdHlwZTogKEFueSwgT3B0aW9uYWxbc3RyXSkgLT4gc3RyCiAgICBpZiBvYmogbm90IGluIHNlbGYuX29ial90b19pZDoKICAgICAgaWQgPSBzZWxmLl91bmlxdWVfcmVmKG9iaiwgbGFiZWwpCiAgICAgIHNlbGYuX2lkX3RvX29ialtpZF0gPSBvYmoKICAgICAgc2VsZi5fb2JqX3RvX2lkW29ial0gPSBpZAogICAgICBzZWxmLl9pZF90b19wcm90b1tpZF0gPSBvYmoudG9fcnVubmVyX2FwaShzZWxmLl9waXBlbGluZV9jb250ZXh0KQogICAgcmV0dXJuIHNlbGYuX29ial90b19pZFtvYmpdCgogIGRlZiBnZXRfcHJvdG8oc2VsZiwgb2JqLCBsYWJlbD1Ob25lKToKICAgICMgdHlwZTogKEFueSwgT3B0aW9uYWxbc3RyXSkgLT4gbWVzc2FnZS5NZXNzYWdlCiAgICByZXR1cm4gc2VsZi5faWRfdG9fcHJvdG9bc2VsZi5nZXRfaWQob2JqLCBsYWJlbCldCgogIGRlZiBnZXRfYnlfaWQoc2VsZiwgaWQpOgogICAgIyB0eXBlOiAoc3RyKSAtPiBBbnkKICAgIGlmIGlkIG5vdCBpbiBzZWxmLl9pZF90b19vYmo6CiAgICAgIHNlbGYuX2lkX3RvX29ialtpZF0gPSBzZWxmLl9vYmpfdHlwZS5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgICBzZWxmLl9pZF90b19wcm90b1tpZF0sIHNlbGYuX3BpcGVsaW5lX2NvbnRleHQpCiAgICByZXR1cm4gc2VsZi5faWRfdG9fb2JqW2lkXQoKICBkZWYgZ2V0X2J5X3Byb3RvKHNlbGYsIG1heWJlX25ld19wcm90bywgbGFiZWw9Tm9uZSwgZGVkdXBsaWNhdGU9RmFsc2UpOgogICAgIyB0eXBlOiAobWVzc2FnZS5NZXNzYWdlLCBPcHRpb25hbFtzdHJdLCBib29sKSAtPiBzdHIKICAgIGlmIGRlZHVwbGljYXRlOgogICAgICBmb3IgaWQsIHByb3RvIGluIHNlbGYuX2lkX3RvX3Byb3RvLml0ZW1zKCk6CiAgICAgICAgaWYgcHJvdG8gPT0gbWF5YmVfbmV3X3Byb3RvOgogICAgICAgICAgcmV0dXJuIGlkCiAgICByZXR1cm4gc2VsZi5wdXRfcHJvdG8oc2VsZi5fdW5pcXVlX3JlZihsYWJlbCksIG1heWJlX25ld19wcm90bykKCiAgZGVmIGdldF9pZF90b19wcm90b19tYXAoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IERpY3Rbc3RyLCBtZXNzYWdlLk1lc3NhZ2VdCiAgICByZXR1cm4gc2VsZi5faWRfdG9fcHJvdG8KCiAgZGVmIHB1dF9wcm90byhzZWxmLCBpZCwgcHJvdG8pOgogICAgIyB0eXBlOiAoc3RyLCBtZXNzYWdlLk1lc3NhZ2UpIC0+IHN0cgogICAgaWYgaWQgaW4gc2VsZi5faWRfdG9fcHJvdG86CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIklkICclcycgaXMgYWxyZWFkeSB0YWtlbi4iICUgaWQpCiAgICBzZWxmLl9pZF90b19wcm90b1tpZF0gPSBwcm90bwogICAgcmV0dXJuIGlkCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpZCk6CiAgICAjIHR5cGU6IChzdHIpIC0+IEFueQogICAgcmV0dXJuIHNlbGYuZ2V0X2J5X2lkKGlkKQoKICBkZWYgX19jb250YWluc19fKHNlbGYsIGlkKToKICAgICMgdHlwZTogKHN0cikgLT4gYm9vbAogICAgcmV0dXJuIGlkIGluIHNlbGYuX2lkX3RvX3Byb3RvCgoKY2xhc3MgUGlwZWxpbmVDb250ZXh0KG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBVc2VkIGZvciBhY2Nlc3NpbmcgYW5kIGNvbnN0cnVjdGluZyB0aGUgcmVmZXJlbmNlZCBvYmplY3RzIG9mIGEgUGlwZWxpbmUuCiAgIiIiCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICBwcm90bz1Ob25lLCAgIyB0eXBlOiBPcHRpb25hbFtVbmlvbltiZWFtX3J1bm5lcl9hcGlfcGIyLkNvbXBvbmVudHMsIGJlYW1fZm5fYXBpX3BiMi5Qcm9jZXNzQnVuZGxlRGVzY3JpcHRvcl1dCiAgICAgICAgICAgICAgIGRlZmF1bHRfZW52aXJvbm1lbnQ9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbZW52aXJvbm1lbnRzLkVudmlyb25tZW50XQogICAgICAgICAgICAgICB1c2VfZmFrZV9jb2RlcnM9RmFsc2UsCiAgICAgICAgICAgICAgIGl0ZXJhYmxlX3N0YXRlX3JlYWQ9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbSXRlcmFibGVTdGF0ZVJlYWRlcl0KICAgICAgICAgICAgICAgaXRlcmFibGVfc3RhdGVfd3JpdGU9Tm9uZSwgICMgdHlwZTogT3B0aW9uYWxbSXRlcmFibGVTdGF0ZVdyaXRlcl0KICAgICAgICAgICAgICAgbmFtZXNwYWNlPSdyZWYnLAogICAgICAgICAgICAgICBhbGxvd19wcm90b19ob2xkZXJzPUZhbHNlLAogICAgICAgICAgICAgICByZXF1aXJlbWVudHM9KCksICAjIHR5cGU6IEl0ZXJhYmxlW3N0cl0KICAgICAgICAgICAgICApOgogICAgaWYgaXNpbnN0YW5jZShwcm90bywgYmVhbV9mbl9hcGlfcGIyLlByb2Nlc3NCdW5kbGVEZXNjcmlwdG9yKToKICAgICAgcHJvdG8gPSBiZWFtX3J1bm5lcl9hcGlfcGIyLkNvbXBvbmVudHMoCiAgICAgICAgICBjb2RlcnM9ZGljdChwcm90by5jb2RlcnMuaXRlbXMoKSksCiAgICAgICAgICB3aW5kb3dpbmdfc3RyYXRlZ2llcz1kaWN0KHByb3RvLndpbmRvd2luZ19zdHJhdGVnaWVzLml0ZW1zKCkpLAogICAgICAgICAgZW52aXJvbm1lbnRzPWRpY3QocHJvdG8uZW52aXJvbm1lbnRzLml0ZW1zKCkpKQoKICAgIHNlbGYudHJhbnNmb3JtcyA9IF9QaXBlbGluZUNvbnRleHRNYXAoCiAgICAgICAgc2VsZiwKICAgICAgICBwaXBlbGluZS5BcHBsaWVkUFRyYW5zZm9ybSwKICAgICAgICBuYW1lc3BhY2UsCiAgICAgICAgcHJvdG8udHJhbnNmb3JtcyBpZiBwcm90byBpcyBub3QgTm9uZSBlbHNlIE5vbmUpCiAgICBzZWxmLnBjb2xsZWN0aW9ucyA9IF9QaXBlbGluZUNvbnRleHRNYXAoCiAgICAgICAgc2VsZiwKICAgICAgICBwdmFsdWUuUENvbGxlY3Rpb24sCiAgICAgICAgbmFtZXNwYWNlLAogICAgICAgIHByb3RvLnBjb2xsZWN0aW9ucyBpZiBwcm90byBpcyBub3QgTm9uZSBlbHNlIE5vbmUpCiAgICBzZWxmLmNvZGVycyA9IF9QaXBlbGluZUNvbnRleHRNYXAoCiAgICAgICAgc2VsZiwKICAgICAgICBjb2RlcnMuQ29kZXIsCiAgICAgICAgbmFtZXNwYWNlLAogICAgICAgIHByb3RvLmNvZGVycyBpZiBwcm90byBpcyBub3QgTm9uZSBlbHNlIE5vbmUpCiAgICBzZWxmLndpbmRvd2luZ19zdHJhdGVnaWVzID0gX1BpcGVsaW5lQ29udGV4dE1hcCgKICAgICAgICBzZWxmLAogICAgICAgIGNvcmUuV2luZG93aW5nLAogICAgICAgIG5hbWVzcGFjZSwKICAgICAgICBwcm90by53aW5kb3dpbmdfc3RyYXRlZ2llcyBpZiBwcm90byBpcyBub3QgTm9uZSBlbHNlIE5vbmUpCiAgICBzZWxmLmVudmlyb25tZW50cyA9IF9QaXBlbGluZUNvbnRleHRNYXAoCiAgICAgICAgc2VsZiwKICAgICAgICBlbnZpcm9ubWVudHMuRW52aXJvbm1lbnQsCiAgICAgICAgbmFtZXNwYWNlLAogICAgICAgIHByb3RvLmVudmlyb25tZW50cyBpZiBwcm90byBpcyBub3QgTm9uZSBlbHNlIE5vbmUpCgogICAgaWYgZGVmYXVsdF9lbnZpcm9ubWVudDoKICAgICAgc2VsZi5fZGVmYXVsdF9lbnZpcm9ubWVudF9pZCA9IHNlbGYuZW52aXJvbm1lbnRzLmdldF9pZCgKICAgICAgICAgIGRlZmF1bHRfZW52aXJvbm1lbnQsCiAgICAgICAgICBsYWJlbD0nZGVmYXVsdF9lbnZpcm9ubWVudCcpICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KICAgIGVsc2U6CiAgICAgIHNlbGYuX2RlZmF1bHRfZW52aXJvbm1lbnRfaWQgPSBOb25lCiAgICBzZWxmLnVzZV9mYWtlX2NvZGVycyA9IHVzZV9mYWtlX2NvZGVycwogICAgc2VsZi5pdGVyYWJsZV9zdGF0ZV9yZWFkID0gaXRlcmFibGVfc3RhdGVfcmVhZAogICAgc2VsZi5pdGVyYWJsZV9zdGF0ZV93cml0ZSA9IGl0ZXJhYmxlX3N0YXRlX3dyaXRlCiAgICBzZWxmLmFsbG93X3Byb3RvX2hvbGRlcnMgPSBhbGxvd19wcm90b19ob2xkZXJzCiAgICBzZWxmLl9yZXF1aXJlbWVudHMgPSBzZXQocmVxdWlyZW1lbnRzKQoKICBkZWYgYWRkX3JlcXVpcmVtZW50KHNlbGYsIHJlcXVpcmVtZW50KToKICAgIHNlbGYuX3JlcXVpcmVtZW50cy5hZGQocmVxdWlyZW1lbnQpCgogIGRlZiByZXF1aXJlbWVudHMoc2VsZik6CiAgICByZXR1cm4gZnJvemVuc2V0KHNlbGYuX3JlcXVpcmVtZW50cykKCiAgIyBJZiBmYWtlIGNvZGVycyBhcmUgcmVxdWVzdGVkLCByZXR1cm4gYSBwaWNrbGVkIHZlcnNpb24gb2YgdGhlIGVsZW1lbnQgdHlwZQogICMgcmF0aGVyIHRoYW4gYW4gYWN0dWFsIGNvZGVyLiBUaGUgZWxlbWVudCB0eXBlIGlzIHJlcXVpcmVkIGZvciBzb21lIHJ1bm5lcnMsCiAgIyBhcyB3ZWxsIGFzIHBlcmZvcm1pbmcgYSByb3VuZC10cmlwIHRocm91Z2ggcHJvdG9zLgogICMgVE9ETyhCRUFNLTI3MTcpOiBSZW1vdmUgb25jZSB0aGlzIGlzIG5vIGxvbmdlciBuZWVkZWQuCiAgZGVmIGNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBlKHNlbGYsIGVsZW1lbnRfdHlwZSk6CiAgICAjIHR5cGU6IChBbnkpIC0+IHN0cgogICAgaWYgc2VsZi51c2VfZmFrZV9jb2RlcnM6CiAgICAgIHJldHVybiBwaWNrbGVyLmR1bXBzKGVsZW1lbnRfdHlwZSkuZGVjb2RlKCdhc2NpaScpCiAgICBlbHNlOgogICAgICByZXR1cm4gc2VsZi5jb2RlcnMuZ2V0X2lkKGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIoZWxlbWVudF90eXBlKSkKCiAgZGVmIGVsZW1lbnRfdHlwZV9mcm9tX2NvZGVyX2lkKHNlbGYsIGNvZGVyX2lkKToKICAgICMgdHlwZTogKHN0cikgLT4gQW55CiAgICBpZiBzZWxmLnVzZV9mYWtlX2NvZGVycyBvciBjb2Rlcl9pZCBub3QgaW4gc2VsZi5jb2RlcnM6CiAgICAgIHJldHVybiBwaWNrbGVyLmxvYWRzKGNvZGVyX2lkKQogICAgZWxzZToKICAgICAgcmV0dXJuIG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGUoCiAgICAgICAgICBzZWxmLmNvZGVyc1tjb2Rlcl9pZF0udG9fdHlwZV9oaW50KCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvKToKICAgICMgdHlwZTogKGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tcG9uZW50cykgLT4gUGlwZWxpbmVDb250ZXh0CiAgICByZXR1cm4gUGlwZWxpbmVDb250ZXh0KHByb3RvKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmKToKICAgICMgdHlwZTogKCkgLT4gYmVhbV9ydW5uZXJfYXBpX3BiMi5Db21wb25lbnRzCiAgICBjb250ZXh0X3Byb3RvID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5Db21wb25lbnRzKCkKCiAgICBzZWxmLnRyYW5zZm9ybXMucG9wdWxhdGVfbWFwKGNvbnRleHRfcHJvdG8udHJhbnNmb3JtcykKICAgIHNlbGYucGNvbGxlY3Rpb25zLnBvcHVsYXRlX21hcChjb250ZXh0X3Byb3RvLnBjb2xsZWN0aW9ucykKICAgIHNlbGYuY29kZXJzLnBvcHVsYXRlX21hcChjb250ZXh0X3Byb3RvLmNvZGVycykKICAgIHNlbGYud2luZG93aW5nX3N0cmF0ZWdpZXMucG9wdWxhdGVfbWFwKGNvbnRleHRfcHJvdG8ud2luZG93aW5nX3N0cmF0ZWdpZXMpCiAgICBzZWxmLmVudmlyb25tZW50cy5wb3B1bGF0ZV9tYXAoY29udGV4dF9wcm90by5lbnZpcm9ubWVudHMpCgogICAgcmV0dXJuIGNvbnRleHRfcHJvdG8KCiAgZGVmIGRlZmF1bHRfZW52aXJvbm1lbnRfaWQoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IE9wdGlvbmFsW3N0cl0KICAgIHJldHVybiBzZWxmLl9kZWZhdWx0X2Vudmlyb25tZW50X2lkCpR9lCiMHF9QaXBlbGluZUNvbnRleHRNYXAuX19pbml0X1+UalYxAQBLOktGh5SMH19QaXBlbGluZUNvbnRleHRNYXAuX3VuaXF1ZV9yZWaUalYxAQBLSEtPh5SMIF9QaXBlbGluZUNvbnRleHRNYXAucG9wdWxhdGVfbWFwlGpWMQEAS1FLVIeUjBpfUGlwZWxpbmVDb250ZXh0TWFwLmdldF9pZJRqVjEBAEtWS12HlIwdX1BpcGVsaW5lQ29udGV4dE1hcC5nZXRfcHJvdG+UalYxAQBLX0thh5SMHV9QaXBlbGluZUNvbnRleHRNYXAuZ2V0X2J5X2lklGpWMQEAS2NLaIeUjCBfUGlwZWxpbmVDb250ZXh0TWFwLmdldF9ieV9wcm90b5RqVjEBAEtqS3CHlIwnX1BpcGVsaW5lQ29udGV4dE1hcC5nZXRfaWRfdG9fcHJvdG9fbWFwlGpWMQEAS3JLdIeUjB1fUGlwZWxpbmVDb250ZXh0TWFwLnB1dF9wcm90b5RqVjEBAEt2S3uHlIwfX1BpcGVsaW5lQ29udGV4dE1hcC5fX2dldGl0ZW1fX5RqVjEBAEt9S3+HlIwgX1BpcGVsaW5lQ29udGV4dE1hcC5fX2NvbnRhaW5zX1+UalYxAQBLgUuDh5SME19QaXBlbGluZUNvbnRleHRNYXCUal0xAQBLNEuDh5SMGFBpcGVsaW5lQ29udGV4dC5fX2luaXRfX5RqVjEBAEuMS8CHlIwfUGlwZWxpbmVDb250ZXh0LmFkZF9yZXF1aXJlbWVudJRqVjEBAEvCS8OHlIwcUGlwZWxpbmVDb250ZXh0LnJlcXVpcmVtZW50c5RqVjEBAEvFS8aHlIwqUGlwZWxpbmVDb250ZXh0LmNvZGVyX2lkX2Zyb21fZWxlbWVudF90eXBllGpWMQEAS8xL0YeUjCpQaXBlbGluZUNvbnRleHQuZWxlbWVudF90eXBlX2Zyb21fY29kZXJfaWSUalYxAQBL00vZh5SMH1BpcGVsaW5lQ29udGV4dC5mcm9tX3J1bm5lcl9hcGmUalYxAQBL20veh5SMHVBpcGVsaW5lQ29udGV4dC50b19ydW5uZXJfYXBplGpWMQEAS+BL6oeUjCZQaXBlbGluZUNvbnRleHQuZGVmYXVsdF9lbnZpcm9ubWVudF9pZJRqVjEBAEvsS+6HlIwPUGlwZWxpbmVDb250ZXh0lGpdMQEAS4ZL7oeUdX2UKIwPUGlwZWxpbmVDb250ZXh0lGpwAwAAjB9QaXBlbGluZUNvbnRleHQuYWRkX3JlcXVpcmVtZW50lGpwAwAAjBxQaXBlbGluZUNvbnRleHQucmVxdWlyZW1lbnRzlGpwAwAAjCpQaXBlbGluZUNvbnRleHQuY29kZXJfaWRfZnJvbV9lbGVtZW50X3R5cGWUanADAACMKlBpcGVsaW5lQ29udGV4dC5lbGVtZW50X3R5cGVfZnJvbV9jb2Rlcl9pZJRqcAMAAIwfUGlwZWxpbmVDb250ZXh0LmZyb21fcnVubmVyX2FwaZRqcAMAAIwdUGlwZWxpbmVDb250ZXh0LnRvX3J1bm5lcl9hcGmUanADAACMJlBpcGVsaW5lQ29udGV4dC5kZWZhdWx0X2Vudmlyb25tZW50X2lklGpwAwAAdYwkYXBhY2hlX2JlYW0ucnVubmVycy5waXBlbGluZV9jb250ZXh0lHSUjBphcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lcpQoWL86AAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlBpcGVsaW5lUnVubmVyLCBhbiBhYnN0cmFjdCBiYXNlIHJ1bm5lciBvYmplY3QuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGltcG9ydGxpYgppbXBvcnQgbG9nZ2luZwppbXBvcnQgb3MKaW1wb3J0IHNoZWx2ZQppbXBvcnQgc2h1dGlsCmltcG9ydCB0ZW1wZmlsZQpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHB2YWx1ZQogIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IFBUcmFuc2Zvcm0KICBmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCiAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZQogIGZyb20gYXBhY2hlX2JlYW0ucGlwZWxpbmUgaW1wb3J0IFBpcGVsaW5lVmlzaXRvcgoKX19hbGxfXyA9IFsnUGlwZWxpbmVSdW5uZXInLCAnUGlwZWxpbmVTdGF0ZScsICdQaXBlbGluZVJlc3VsdCddCgpfQUxMX0tOT1dOX1JVTk5FUlMgPSAoCiAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5kYXRhZmxvdy5kYXRhZmxvd19ydW5uZXIuRGF0YWZsb3dSdW5uZXInLAogICAgJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuQnVuZGxlQmFzZWREaXJlY3RSdW5uZXInLAogICAgJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuZGlyZWN0LmRpcmVjdF9ydW5uZXIuRGlyZWN0UnVubmVyJywKICAgICdhcGFjaGVfYmVhbS5ydW5uZXJzLmRpcmVjdC5kaXJlY3RfcnVubmVyLlN3aXRjaGluZ0RpcmVjdFJ1bm5lcicsCiAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5pbnRlcmFjdGl2ZS5pbnRlcmFjdGl2ZV9ydW5uZXIuSW50ZXJhY3RpdmVSdW5uZXInLAogICAgJ2FwYWNoZV9iZWFtLnJ1bm5lcnMucG9ydGFiaWxpdHkuZmxpbmtfcnVubmVyLkZsaW5rUnVubmVyJywKICAgICdhcGFjaGVfYmVhbS5ydW5uZXJzLnBvcnRhYmlsaXR5LnBvcnRhYmxlX3J1bm5lci5Qb3J0YWJsZVJ1bm5lcicsCiAgICAnYXBhY2hlX2JlYW0ucnVubmVycy5wb3J0YWJpbGl0eS5zcGFya19ydW5uZXIuU3BhcmtSdW5uZXInLAogICAgJ2FwYWNoZV9iZWFtLnJ1bm5lcnMudGVzdC5UZXN0RGlyZWN0UnVubmVyJywKICAgICdhcGFjaGVfYmVhbS5ydW5uZXJzLnRlc3QuVGVzdERhdGFmbG93UnVubmVyJywKKQoKX0tOT1dOX1JVTk5FUl9OQU1FUyA9IFtwYXRoLnNwbGl0KCcuJylbLTFdIGZvciBwYXRoIGluIF9BTExfS05PV05fUlVOTkVSU10KCl9SVU5ORVJfTUFQID0ge3BhdGguc3BsaXQoJy4nKVstMV0ubG93ZXIoKTogcGF0aCBmb3IgcGF0aCBpbiBfQUxMX0tOT1dOX1JVTk5FUlN9CgojIEFsbG93IHRoaXMgYWxpYXMsIGJ1dCBkb24ndCBtYWtlIHB1YmxpYy4KX1JVTk5FUl9NQVBbJ3B5dGhvbnJwY2RpcmVjdHJ1bm5lciddID0gKAogICAgJ2FwYWNoZV9iZWFtLnJ1bm5lcnMuZXhwZXJpbWVudGFsJwogICAgJy5weXRob25fcnBjX2RpcmVjdC5weXRob25fcnBjX2RpcmVjdF9ydW5uZXIuUHl0aG9uUlBDRGlyZWN0UnVubmVyJykKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpkZWYgY3JlYXRlX3J1bm5lcihydW5uZXJfbmFtZSk6CiAgIyB0eXBlOiAoc3RyKSAtPiBQaXBlbGluZVJ1bm5lcgoKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIENyZWF0ZXMgYSBydW5uZXIgaW5zdGFuY2UgZnJvbSBhIHJ1bm5lciBjbGFzcyBuYW1lLgoKICBBcmdzOgogICAgcnVubmVyX25hbWU6IE5hbWUgb2YgdGhlIHBpcGVsaW5lIHJ1bm5lci4gUG9zc2libGUgdmFsdWVzIGFyZSBsaXN0ZWQgaW4KICAgICAgX1JVTk5FUl9NQVAgYWJvdmUuCgogIFJldHVybnM6CiAgICBBIHJ1bm5lciBvYmplY3QuCgogIFJhaXNlczoKICAgIFJ1bnRpbWVFcnJvcjogaWYgYW4gaW52YWxpZCBydW5uZXIgbmFtZSBpcyB1c2VkLgogICIiIgoKICAjIEdldCB0aGUgcXVhbGlmaWVkIHJ1bm5lciBuYW1lIGJ5IHVzaW5nIHRoZSBsb3dlciBjYXNlIHJ1bm5lciBuYW1lLiBJZiB0aGF0CiAgIyBmYWlscyB0cnkgYXBwZW5kaW5nIHRoZSBuYW1lIHdpdGggJ3J1bm5lcicgYW5kIGNoZWNrIGlmIGl0IG1hdGNoZXMuCiAgIyBJZiB0aGF0IGFsc28gZmFpbHMsIHVzZSB0aGUgZ2l2ZW4gcnVubmVyIG5hbWUgYXMgaXMuCiAgcnVubmVyX25hbWUgPSBfUlVOTkVSX01BUC5nZXQoCiAgICAgIHJ1bm5lcl9uYW1lLmxvd2VyKCksCiAgICAgIF9SVU5ORVJfTUFQLmdldChydW5uZXJfbmFtZS5sb3dlcigpICsgJ3J1bm5lcicsIHJ1bm5lcl9uYW1lKSkKCiAgaWYgJy4nIGluIHJ1bm5lcl9uYW1lOgogICAgbW9kdWxlLCBydW5uZXIgPSBydW5uZXJfbmFtZS5yc3BsaXQoJy4nLCAxKQogICAgdHJ5OgogICAgICByZXR1cm4gZ2V0YXR0cihpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2R1bGUpLCBydW5uZXIpKCkKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgaWYgJ2RhdGFmbG93JyBpbiBydW5uZXJfbmFtZS5sb3dlcigpOgogICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAogICAgICAgICAgICAnR29vZ2xlIENsb3VkIERhdGFmbG93IHJ1bm5lciBub3QgYXZhaWxhYmxlLCAnCiAgICAgICAgICAgICdwbGVhc2UgaW5zdGFsbCBhcGFjaGVfYmVhbVtnY3BdJykKICAgICAgZWxpZiAnaW50ZXJhY3RpdmUnIGluIHJ1bm5lcl9uYW1lLmxvd2VyKCk6CiAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICdJbnRlcmFjdGl2ZSBydW5uZXIgbm90IGF2YWlsYWJsZSwgJwogICAgICAgICAgICAncGxlYXNlIGluc3RhbGwgYXBhY2hlX2JlYW1baW50ZXJhY3RpdmVdJykKICAgICAgZWxzZToKICAgICAgICByYWlzZQogIGVsc2U6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICdVbmV4cGVjdGVkIHBpcGVsaW5lIHJ1bm5lcjogJXMuIFZhbGlkIHZhbHVlcyBhcmUgJXMgJwogICAgICAgICdvciB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgYSBQaXBlbGluZVJ1bm5lciBzdWJjbGFzcy4nICUKICAgICAgICAocnVubmVyX25hbWUsICcsICcuam9pbihfS05PV05fUlVOTkVSX05BTUVTKSkpCgoKY2xhc3MgUGlwZWxpbmVSdW5uZXIob2JqZWN0KToKICAiIiJBIHJ1bm5lciBvZiBhIHBpcGVsaW5lIG9iamVjdC4KCiAgVGhlIGJhc2UgcnVubmVyIHByb3ZpZGVzIGEgcnVuKCkgbWV0aG9kIGZvciB2aXNpdGluZyBldmVyeSBub2RlIGluIHRoZQogIHBpcGVsaW5lJ3MgREFHIGFuZCBleGVjdXRpbmcgdGhlIHRyYW5zZm9ybXMgY29tcHV0aW5nIHRoZSBQVmFsdWUgaW4gdGhlIG5vZGUuCgogIEEgY3VzdG9tIHJ1bm5lciB3aWxsIHR5cGljYWxseSBwcm92aWRlIGltcGxlbWVudGF0aW9ucyBmb3Igc29tZSBvZiB0aGUKICB0cmFuc2Zvcm0gbWV0aG9kcyAoUGFyRG8sIEdyb3VwQnlLZXksIENyZWF0ZSwgZXRjLikuIEl0IG1heSBhbHNvCiAgcHJvdmlkZSBhIG5ldyBpbXBsZW1lbnRhdGlvbiBmb3IgY2xlYXJfcHZhbHVlKCksIHdoaWNoIGlzIHVzZWQgdG8gd2lwZSBvdXQKICBtYXRlcmlhbGl6ZWQgdmFsdWVzIGluIG9yZGVyIHRvIHJlZHVjZSBmb290cHJpbnQuCiAgIiIiCgogIGRlZiBydW4oc2VsZiwKICAgICAgICAgIHRyYW5zZm9ybSwgICMgdHlwZTogUFRyYW5zZm9ybQogICAgICAgICAgb3B0aW9ucz1Ob25lICAjIHR5cGU6IE9wdGlvbmFsW1BpcGVsaW5lT3B0aW9uc10KICAgICAgICAgKToKICAgICMgdHlwZTogKC4uLikgLT4gUGlwZWxpbmVSZXN1bHQKCiAgICAiIiJSdW4gdGhlIGdpdmVuIHRyYW5zZm9ybSBvciBjYWxsYWJsZSB3aXRoIHRoaXMgcnVubmVyLgoKICAgIEJsb2NrcyB1bnRpbCB0aGUgcGlwZWxpbmUgaXMgY29tcGxldGUuICBTZWUgYWxzbyBgUGlwZWxpbmVSdW5uZXIucnVuX2FzeW5jYC4KICAgICIiIgogICAgcmVzdWx0ID0gc2VsZi5ydW5fYXN5bmModHJhbnNmb3JtLCBvcHRpb25zKQogICAgcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIHJ1bl9hc3luYyhzZWxmLAogICAgICAgICAgICAgICAgdHJhbnNmb3JtLCAgIyB0eXBlOiBQVHJhbnNmb3JtCiAgICAgICAgICAgICAgICBvcHRpb25zPU5vbmUgICMgdHlwZTogT3B0aW9uYWxbUGlwZWxpbmVPcHRpb25zXQogICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBQaXBlbGluZVJlc3VsdAoKICAgICIiIlJ1biB0aGUgZ2l2ZW4gdHJhbnNmb3JtIG9yIGNhbGxhYmxlIHdpdGggdGhpcyBydW5uZXIuCgogICAgTWF5IHJldHVybiBpbW1lZGlhdGVseSwgZXhlY3V0aW5nIHRoZSBwaXBlbGluZSBpbiB0aGUgYmFja2dyb3VuZC4KICAgIFRoZSByZXR1cm5lZCByZXN1bHQgb2JqZWN0IGNhbiBiZSBxdWVyaWVkIGZvciBwcm9ncmVzcywgYW5kCiAgICBgd2FpdF91bnRpbF9maW5pc2hgIG1heSBiZSBjYWxsZWQgdG8gYmxvY2sgdW50aWwgY29tcGxldGlvbi4KICAgICIiIgogICAgIyBJbXBvcnRlZCBoZXJlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcy4KICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBQVHJhbnNmb3JtCiAgICBmcm9tIGFwYWNoZV9iZWFtLnB2YWx1ZSBpbXBvcnQgUEJlZ2luCiAgICBmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZQogICAgcCA9IFBpcGVsaW5lKHJ1bm5lcj1zZWxmLCBvcHRpb25zPW9wdGlvbnMpCiAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybSwgUFRyYW5zZm9ybSk6CiAgICAgIHAgfCB0cmFuc2Zvcm0KICAgIGVsc2U6CiAgICAgIHRyYW5zZm9ybShQQmVnaW4ocCkpCiAgICByZXR1cm4gcC5ydW4oKQoKICBkZWYgcnVuX3BpcGVsaW5lKAogICAgICBzZWxmLAogICAgICBwaXBlbGluZSwgICMgdHlwZTogUGlwZWxpbmUKICAgICAgb3B0aW9ucyAgIyB0eXBlOiBQaXBlbGluZU9wdGlvbnMKICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBQaXBlbGluZVJlc3VsdAoKICAgICIiIkV4ZWN1dGUgdGhlIGVudGlyZSBwaXBlbGluZSBvciB0aGUgc3ViLURBRyByZWFjaGFibGUgZnJvbSBhIG5vZGUuCgogICAgUnVubmVycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGFwcGx5KHNlbGYsCiAgICAgICAgICAgIHRyYW5zZm9ybSwgICMgdHlwZTogUFRyYW5zZm9ybQogICAgICAgICAgICBpbnB1dCwgICMgdHlwZTogcHZhbHVlLlBDb2xsZWN0aW9uCiAgICAgICAgICAgIG9wdGlvbnMgICMgdHlwZTogUGlwZWxpbmVPcHRpb25zCiAgICAgICAgICAgKToKICAgICIiIlJ1bm5lciBjYWxsYmFjayBmb3IgYSBwaXBlbGluZS5hcHBseSBjYWxsLgoKICAgIEFyZ3M6CiAgICAgIHRyYW5zZm9ybTogdGhlIHRyYW5zZm9ybSB0byBhcHBseS4KICAgICAgaW5wdXQ6IHRyYW5zZm9ybSdzIGlucHV0ICh0eXBpY2FsbHkgYSBQQ29sbGVjdGlvbikuCgogICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVubmVyIGNsYXNzIG1heSB3YW50IHRvIGRvIGN1c3RvbQogICAgcGlwZWxpbmUgY29uc3RydWN0aW9uIGZvciBhIGdpdmVuIHRyYW5zZm9ybS4gIFRvIG92ZXJyaWRlIHRoZSBiZWhhdmlvcgogICAgZm9yIGEgdHJhbnNmb3JtIGNsYXNzIFh5eiwgaW1wbGVtZW50IGFuIGFwcGx5X1h5eiBtZXRob2Qgd2l0aCB0aGlzIHNhbWUKICAgIHNpZ25hdHVyZS4KICAgICIiIgogICAgZm9yIGNscyBpbiB0cmFuc2Zvcm0uX19jbGFzc19fLm1ybygpOgogICAgICBtID0gZ2V0YXR0cihzZWxmLCAnYXBwbHlfJXMnICUgY2xzLl9fbmFtZV9fLCBOb25lKQogICAgICBpZiBtOgogICAgICAgIHJldHVybiBtKHRyYW5zZm9ybSwgaW5wdXQsIG9wdGlvbnMpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdFeGVjdXRpb24gb2YgWyVzXSBub3QgaW1wbGVtZW50ZWQgaW4gcnVubmVyICVzLicgJSAodHJhbnNmb3JtLCBzZWxmKSkKCiAgZGVmIHZpc2l0X3RyYW5zZm9ybXMoCiAgICAgIHNlbGYsCiAgICAgIHBpcGVsaW5lLCAgIyB0eXBlOiBQaXBlbGluZQogICAgICBvcHRpb25zICAjIHR5cGU6IFBpcGVsaW5lT3B0aW9ucwogICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE5vbmUKICAgICMgSW1wb3J0ZWQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmVWaXNpdG9yCgogICAgY2xhc3MgUnVuVmlzaXRvcihQaXBlbGluZVZpc2l0b3IpOgogICAgICBkZWYgX19pbml0X18oc2VsZiwgcnVubmVyKToKICAgICAgICAjIHR5cGU6IChQaXBlbGluZVJ1bm5lcikgLT4gTm9uZQogICAgICAgIHNlbGYucnVubmVyID0gcnVubmVyCgogICAgICBkZWYgdmlzaXRfdHJhbnNmb3JtKHNlbGYsIHRyYW5zZm9ybV9ub2RlKToKICAgICAgICB0cnk6CiAgICAgICAgICBzZWxmLnJ1bm5lci5ydW5fdHJhbnNmb3JtKHRyYW5zZm9ybV9ub2RlLCBvcHRpb25zKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgIF9MT0dHRVIuZXJyb3IoJ0Vycm9yIHdoaWxlIHZpc2l0aW5nICVzJywgdHJhbnNmb3JtX25vZGUuZnVsbF9sYWJlbCkKICAgICAgICAgIHJhaXNlCgogICAgcGlwZWxpbmUudmlzaXQoUnVuVmlzaXRvcihzZWxmKSkKCiAgZGVmIGFwcGx5X1BUcmFuc2Zvcm0oc2VsZiwgdHJhbnNmb3JtLCBpbnB1dCwgb3B0aW9ucyk6CiAgICAjIFRoZSBiYXNlIGNhc2Ugb2YgYXBwbHkgaXMgdG8gY2FsbCB0aGUgdHJhbnNmb3JtJ3MgZXhwYW5kLgogICAgcmV0dXJuIHRyYW5zZm9ybS5leHBhbmQoaW5wdXQpCgogIGRlZiBydW5fdHJhbnNmb3JtKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX25vZGUsICAjIHR5cGU6IEFwcGxpZWRQVHJhbnNmb3JtCiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyAgIyB0eXBlOiBQaXBlbGluZU9wdGlvbnMKICAgICAgICAgICAgICAgICAgICk6CiAgICAiIiJSdW5uZXIgY2FsbGJhY2sgZm9yIGEgcGlwZWxpbmUucnVuIGNhbGwuCgogICAgQXJnczoKICAgICAgdHJhbnNmb3JtX25vZGU6IHRyYW5zZm9ybSBub2RlIGZvciB0aGUgdHJhbnNmb3JtIHRvIHJ1bi4KCiAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdW5uZXIgY2xhc3MgbXVzdCBpbXBsZW1lbnQgcnVuX0FiYyBmb3IKICAgIHNvbWUgY2xhc3MgQWJjIGluIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgZXZlcnkgbm9uLWNvbXBvc2l0ZQogICAgdHJhbnNmb3JtIFh5eiBpbiB0aGUgcGlwZWxpbmUuCiAgICAiIiIKICAgIGZvciBjbHMgaW4gdHJhbnNmb3JtX25vZGUudHJhbnNmb3JtLl9fY2xhc3NfXy5tcm8oKToKICAgICAgbSA9IGdldGF0dHIoc2VsZiwgJ3J1bl8lcycgJSBjbHMuX19uYW1lX18sIE5vbmUpCiAgICAgIGlmIG06CiAgICAgICAgcmV0dXJuIG0odHJhbnNmb3JtX25vZGUsIG9wdGlvbnMpCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdFeGVjdXRpb24gb2YgWyVzXSBub3QgaW1wbGVtZW50ZWQgaW4gcnVubmVyICVzLicgJQogICAgICAgICh0cmFuc2Zvcm1fbm9kZS50cmFuc2Zvcm0sIHNlbGYpKQoKICBkZWYgaXNfZm5hcGlfY29tcGF0aWJsZShzZWxmKToKICAgICIiIldoZXRoZXIgdG8gZW5hYmxlIHRoZSBiZWFtX2ZuX2FwaSBleHBlcmltZW50IGJ5IGRlZmF1bHQuIiIiCiAgICByZXR1cm4gVHJ1ZQoKCmNsYXNzIFBWYWx1ZUNhY2hlKG9iamVjdCk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBMb2NhbCBjYWNoZSBmb3IgYXJiaXRyYXJ5IGluZm9ybWF0aW9uIGNvbXB1dGVkIGZvciBQVmFsdWUgb2JqZWN0cy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgdXNlX2Rpc2tfYmFja2VkX2NhY2hlPUZhbHNlKToKICAgICMgQ2FjaGUgb2YgdmFsdWVzIGNvbXB1dGVkIHdoaWxlIGEgcnVubmVyIGV4ZWN1dGVzIGEgcGlwZWxpbmUuIFRoaXMgaXMgYQogICAgIyBkaWN0aW9uYXJ5IG9mIFBWYWx1ZXMgYW5kIHRoZWlyIGNvbXB1dGVkIHZhbHVlcy4gTm90ZSB0aGF0IGluIHByaW5jaXBsZQogICAgIyB0aGUgcnVubmVyIGNvdWxkIGNvbnRhaW4gUFZhbHVlcyBmcm9tIHNldmVyYWwgcGlwZWxpbmVzIHdpdGhvdXQgY2xhc2hlcwogICAgIyBzaW5jZSBhIFBWYWx1ZSBpcyBhc3NvY2lhdGVkIHdpdGggb25lIGFuZCBvbmx5IG9uZSBwaXBlbGluZS4gVGhlIGtleXMgb2YKICAgICMgdGhlIGRpY3Rpb25hcnkgYXJlIHR1cGxlIG9mIFBWYWx1ZSBpbnN0YW5jZSBhZGRyZXNzZXMgb2J0YWluZWQgdXNpbmcgaWQoKQogICAgIyBhbmQgdGFnIG5hbWVzIGNvbnZlcnRlZCB0byBzdHJpbmdzLgoKICAgIHNlbGYuX3VzZV9kaXNrX2JhY2tlZF9jYWNoZSA9IHVzZV9kaXNrX2JhY2tlZF9jYWNoZQogICAgaWYgdXNlX2Rpc2tfYmFja2VkX2NhY2hlOgogICAgICBzZWxmLl90ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgIHNlbGYuX2NhY2hlID0gc2hlbHZlLm9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3RlbXBkaXIsICdzaGVsdmUnKSkKICAgIGVsc2U6CiAgICAgIHNlbGYuX2NhY2hlID0ge30KCiAgZGVmIF9fZGVsX18oc2VsZik6CiAgICBpZiBzZWxmLl91c2VfZGlza19iYWNrZWRfY2FjaGU6CiAgICAgIHNlbGYuX2NhY2hlLmNsb3NlKCkKICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLl90ZW1wZGlyKQoKICBkZWYgX19sZW5fXyhzZWxmKToKICAgIHJldHVybiBsZW4oc2VsZi5fY2FjaGUpCgogIGRlZiB0b19jYWNoZV9rZXkoc2VsZiwgdHJhbnNmb3JtLCB0YWcpOgogICAgcmV0dXJuIHRyYW5zZm9ybS5mdWxsX2xhYmVsLCB0YWcKCiAgZGVmIF9lbnN1cmVfcHZhbHVlX2hhc19yZWFsX3Byb2R1Y2VyKHNlbGYsIHB2YWx1ZSk6CiAgICAiIiJFbnN1cmUgdGhlIHBhc3NlZC1pbiBQVmFsdWUgaGFzIHRoZSByZWFsX3Byb2R1Y2VyIGF0dHJpYnV0ZS4KCiAgICBBcmdzOgogICAgICBwdmFsdWU6IEEgUFZhbHVlIGluc3RhbmNlIHdob3NlIGNhY2hlZCB2YWx1ZSBpcyByZXF1ZXN0ZWQuCgogICAgRHVyaW5nIHRoZSBydW5uZXIncyBleGVjdXRpb24gb25seSB0aGUgcmVzdWx0cyBvZiB0aGUgcHJpbWl0aXZlIHRyYW5zZm9ybXMKICAgIGFyZSBjYWNoZWQuIFdoZW5ldmVyIHdlIGFyZSBsb29raW5nIGZvciBhIFBWYWx1ZSB0aGF0IGlzIHRoZSBvdXRwdXQgb2YgYQogICAgY29tcG9zaXRlIHRyYW5zZm9ybSB3ZSBuZWVkIHRvIGZpbmQgdGhlIG91dHB1dCBvZiBpdHMgcmlnaHRtb3N0IHRyYW5zZm9ybQogICAgcGFydC4KICAgICIiIgogICAgaWYgbm90IGhhc2F0dHIocHZhbHVlLCAncmVhbF9wcm9kdWNlcicpOgogICAgICByZWFsX3Byb2R1Y2VyID0gcHZhbHVlLnByb2R1Y2VyCiAgICAgIHdoaWxlIHJlYWxfcHJvZHVjZXIucGFydHM6CiAgICAgICAgcmVhbF9wcm9kdWNlciA9IHJlYWxfcHJvZHVjZXIucGFydHNbLTFdCiAgICAgIHB2YWx1ZS5yZWFsX3Byb2R1Y2VyID0gcmVhbF9wcm9kdWNlcgoKICBkZWYgaXNfY2FjaGVkKHNlbGYsIHBvYmopOgogICAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgQXBwbGllZFBUcmFuc2Zvcm0KICAgIGlmIGlzaW5zdGFuY2UocG9iaiwgQXBwbGllZFBUcmFuc2Zvcm0pOgogICAgICB0cmFuc2Zvcm0gPSBwb2JqCiAgICAgIHRhZyA9IE5vbmUKICAgIGVsc2U6CiAgICAgIHNlbGYuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXIocG9iaikKICAgICAgdHJhbnNmb3JtID0gcG9iai5yZWFsX3Byb2R1Y2VyCiAgICAgIHRhZyA9IHBvYmoudGFnCiAgICByZXR1cm4gc2VsZi50b19jYWNoZV9rZXkodHJhbnNmb3JtLCB0YWcpIGluIHNlbGYuX2NhY2hlCgogIGRlZiBjYWNoZV9vdXRwdXQoc2VsZiwgdHJhbnNmb3JtLCB0YWdfb3JfdmFsdWUsIHZhbHVlPU5vbmUpOgogICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgdmFsdWUgPSB0YWdfb3JfdmFsdWUKICAgICAgdGFnID0gTm9uZQogICAgZWxzZToKICAgICAgdGFnID0gdGFnX29yX3ZhbHVlCiAgICBzZWxmLl9jYWNoZVtzZWxmLnRvX2NhY2hlX2tleSh0cmFuc2Zvcm0sIHRhZyldID0gdmFsdWUKCiAgZGVmIGdldF9wdmFsdWUoc2VsZiwgcHZhbHVlKToKICAgICIiIkdldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIFBWYWx1ZSBmcm9tIHRoZSBjYWNoZS4iIiIKICAgIHNlbGYuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXIocHZhbHVlKQogICAgdHJ5OgogICAgICByZXR1cm4gc2VsZi5fY2FjaGVbc2VsZi5rZXkocHZhbHVlKV0KICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgaWYgKHB2YWx1ZS50YWcgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgICBzZWxmLnRvX2NhY2hlX2tleShwdmFsdWUucmVhbF9wcm9kdWNlciwgTm9uZSkgaW4gc2VsZi5fY2FjaGUpOgogICAgICAgICMgVGhpcyBpcyBhbiB1bmRlY2xhcmVkLCBlbXB0eSBvdXRwdXQgb2YgYSBEb0ZuIGV4ZWN1dGVkCiAgICAgICAgIyBpbiB0aGUgbG9jYWwgcnVubmVyIGJlZm9yZSB0aGlzIG91dHB1dCB3YXMgcmVmZXJlbmNlZC4KICAgICAgICByZXR1cm4gW10KICAgICAgZWxzZToKICAgICAgICByYWlzZQoKICBkZWYgZ2V0X3Vud2luZG93ZWRfcHZhbHVlKHNlbGYsIHB2YWx1ZSk6CiAgICByZXR1cm4gW3YudmFsdWUgZm9yIHYgaW4gc2VsZi5nZXRfcHZhbHVlKHB2YWx1ZSldCgogIGRlZiBjbGVhcl9wdmFsdWUoc2VsZiwgcHZhbHVlKToKICAgICIiIlJlbW92ZXMgYSBQVmFsdWUgZnJvbSB0aGUgY2FjaGUuIiIiCiAgICBpZiBzZWxmLmlzX2NhY2hlZChwdmFsdWUpOgogICAgICBkZWwgc2VsZi5fY2FjaGVbc2VsZi5rZXkocHZhbHVlKV0KCiAgZGVmIGtleShzZWxmLCBwb2JqKToKICAgIHNlbGYuX2Vuc3VyZV9wdmFsdWVfaGFzX3JlYWxfcHJvZHVjZXIocG9iaikKICAgIHJldHVybiBzZWxmLnRvX2NhY2hlX2tleShwb2JqLnJlYWxfcHJvZHVjZXIsIHBvYmoudGFnKQoKCiMgRklYTUU6IHJlcGxhY2Ugd2l0aCBQaXBlbGluZVN0YXRlKHN0ciwgZW51bS5FbnVtKQpjbGFzcyBQaXBlbGluZVN0YXRlKG9iamVjdCk6CiAgIiIiU3RhdGUgb2YgdGhlIFBpcGVsaW5lLCBhcyByZXR1cm5lZCBieSA6YXR0cjpgUGlwZWxpbmVSZXN1bHQuc3RhdGVgLgoKICBUaGlzIGlzIG1lYW50IHRvIGJlIHRoZSB1bmlvbiBvZiBhbGwgdGhlIHN0YXRlcyBhbnkgcnVubmVyIGNhbiBwdXQgYQogIHBpcGVsaW5lIGluLiBDdXJyZW50bHksIGl0IHJlcHJlc2VudHMgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YWZsb3cKICBBUEkgSm9iU3RhdGUgZW51bS4KICAiIiIKICBVTktOT1dOID0gJ1VOS05PV04nICAjIG5vdCBzcGVjaWZpZWQgYnkgYSBydW5uZXIsIG9yIHVua25vd24gdG8gYSBydW5uZXIuCiAgU1RBUlRJTkcgPSAnU1RBUlRJTkcnICAjIG5vdCB5ZXQgc3RhcnRlZAogIFNUT1BQRUQgPSAnU1RPUFBFRCcgICMgcGF1c2VkIG9yIG5vdCB5ZXQgc3RhcnRlZAogIFJVTk5JTkcgPSAnUlVOTklORycgICMgY3VycmVudGx5IHJ1bm5pbmcKICBET05FID0gJ0RPTkUnICAjIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgKHRlcm1pbmFsIHN0YXRlKQogIEZBSUxFRCA9ICdGQUlMRUQnICAjIGZhaWxlZCAodGVybWluYWwgc3RhdGUpCiAgQ0FOQ0VMTEVEID0gJ0NBTkNFTExFRCcgICMgZXhwbGljaXRseSBjYW5jZWxsZWQgKHRlcm1pbmFsIHN0YXRlKQogIFVQREFURUQgPSAnVVBEQVRFRCcgICMgcmVwbGFjZWQgYnkgYW5vdGhlciBqb2IgKHRlcm1pbmFsIHN0YXRlKQogIERSQUlOSU5HID0gJ0RSQUlOSU5HJyAgIyBzdGlsbCBwcm9jZXNzaW5nLCBubyBsb25nZXIgcmVhZGluZyBkYXRhCiAgRFJBSU5FRCA9ICdEUkFJTkVEJyAgIyBkcmFpbmluZyBjb21wbGV0ZWQgKHRlcm1pbmFsIHN0YXRlKQogIFBFTkRJTkcgPSAnUEVORElORycgICMgdGhlIGpvYiBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBpcyBub3QgeWV0IHJ1bm5pbmcuCiAgQ0FOQ0VMTElORyA9ICdDQU5DRUxMSU5HJyAgIyBqb2IgaGFzIGJlZW4gZXhwbGljaXRseSBjYW5jZWxsZWQgYW5kIGlzCiAgIyBpbiB0aGUgcHJvY2VzcyBvZiBzdG9wcGluZwogIFVOUkVDT0dOSVpFRCA9ICdVTlJFQ09HTklaRUQnICAjIHRoZSBqb2Igc3RhdGUgcmVwb3J0ZWQgYnkgYSBydW5uZXIgY2Fubm90IGJlCiAgIyBpbnRlcnByZXRlZCBieSB0aGUgU0RLLgoKICBAY2xhc3NtZXRob2QKICBkZWYgaXNfdGVybWluYWwoY2xzLCBzdGF0ZSk6CiAgICByZXR1cm4gc3RhdGUgaW4gWwogICAgICAgIGNscy5ET05FLCBjbHMuRkFJTEVELCBjbHMuQ0FOQ0VMTEVELCBjbHMuVVBEQVRFRCwgY2xzLkRSQUlORUQKICAgIF0KCgpjbGFzcyBQaXBlbGluZVJlc3VsdChvYmplY3QpOgogICIiIkEgOmNsYXNzOmBQaXBlbGluZVJlc3VsdGAgcHJvdmlkZXMgYWNjZXNzIHRvIGluZm8gYWJvdXQgYSBwaXBlbGluZS4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgc3RhdGUpOgogICAgc2VsZi5fc3RhdGUgPSBzdGF0ZQoKICBAcHJvcGVydHkKICBkZWYgc3RhdGUoc2VsZik6CiAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHBpcGVsaW5lIGV4ZWN1dGlvbi4iIiIKICAgIHJldHVybiBzZWxmLl9zdGF0ZQoKICBkZWYgd2FpdF91bnRpbF9maW5pc2goc2VsZiwgZHVyYXRpb249Tm9uZSk6CiAgICAiIiJXYWl0cyB1bnRpbCB0aGUgcGlwZWxpbmUgZmluaXNoZXMgYW5kIHJldHVybnMgdGhlIGZpbmFsIHN0YXR1cy4KCiAgICBBcmdzOgogICAgICBkdXJhdGlvbiAoaW50KTogVGhlIHRpbWUgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igam9iIHRvIGZpbmlzaC4KICAgICAgICBJZiBpdCBpcyBzZXQgdG8gOmRhdGE6YE5vbmVgLCBpdCB3aWxsIHdhaXQgaW5kZWZpbml0ZWx5IHVudGlsIHRoZSBqb2IKICAgICAgICBpcyBmaW5pc2hlZC4KCiAgICBSYWlzZXM6CiAgICAgIElPRXJyb3I6IElmIHRoZXJlIGlzIGEgcGVyc2lzdGVudCBwcm9ibGVtIGdldHRpbmcgam9iCiAgICAgICAgaW5mb3JtYXRpb24uCiAgICAgIE5vdEltcGxlbWVudGVkRXJyb3I6IElmIHRoZSBydW5uZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzCiAgICAgICAgb3BlcmF0aW9uLgoKICAgIFJldHVybnM6CiAgICAgIFRoZSBmaW5hbCBzdGF0ZSBvZiB0aGUgcGlwZWxpbmUsIG9yIDpkYXRhOmBOb25lYCBvbiB0aW1lb3V0LgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBjYW5jZWwoc2VsZik6CiAgICAiIiJDYW5jZWxzIHRoZSBwaXBlbGluZSBleGVjdXRpb24uCgogICAgUmFpc2VzOgogICAgICBJT0Vycm9yOiBJZiB0aGVyZSBpcyBhIHBlcnNpc3RlbnQgcHJvYmxlbSBnZXR0aW5nIGpvYgogICAgICAgIGluZm9ybWF0aW9uLgogICAgICBOb3RJbXBsZW1lbnRlZEVycm9yOiBJZiB0aGUgcnVubmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcwogICAgICAgIG9wZXJhdGlvbi4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgZmluYWwgc3RhdGUgb2YgdGhlIHBpcGVsaW5lLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBtZXRyaWNzKHNlbGYpOgogICAgIiIiUmV0dXJucyA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5tZXRyaWNzLm1ldHJpYy5NZXRyaWNSZXN1bHRzYCBvYmplY3QgdG8KICAgIHF1ZXJ5IG1ldHJpY3MgZnJvbSB0aGUgcnVubmVyLgoKICAgIFJhaXNlczoKICAgICAgTm90SW1wbGVtZW50ZWRFcnJvcjogSWYgdGhlIHJ1bm5lciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMKICAgICAgICBvcGVyYXRpb24uCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLWFyZ3VtZW50CiAgZGVmIGFnZ3JlZ2F0ZWRfdmFsdWVzKHNlbGYsIGFnZ3JlZ2F0b3Jfb3JfbmFtZSk6CiAgICAiIiJSZXR1cm4gYSBkaWN0IG9mIHN0ZXAgbmFtZXMgdG8gdmFsdWVzIG9mIHRoZSBBZ2dyZWdhdG9yLiIiIgogICAgX0xPR0dFUi53YXJuaW5nKAogICAgICAgICclcyBkb2VzIG5vdCBpbXBsZW1lbnQgYWdncmVnYXRlZF92YWx1ZXMnLCBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKICAgIHJldHVybiB7fQqUfZQojA1jcmVhdGVfcnVubmVylGpWMQEAS0VLcYeUjBJQaXBlbGluZVJ1bm5lci5ydW6UalYxAQBLgEuMh5SMGFBpcGVsaW5lUnVubmVyLnJ1bl9hc3luY5RqVjEBAEuOS6SHlIwbUGlwZWxpbmVSdW5uZXIucnVuX3BpcGVsaW5llGpWMQEAS6ZLsYeUjBRQaXBlbGluZVJ1bm5lci5hcHBseZRqVjEBAEuzS8iHlIwzUGlwZWxpbmVSdW5uZXIudmlzaXRfdHJhbnNmb3Jtcy5SdW5WaXNpdG9yLl9faW5pdF9flGpWMQEAS9VL14eUjDpQaXBlbGluZVJ1bm5lci52aXNpdF90cmFuc2Zvcm1zLlJ1blZpc2l0b3IudmlzaXRfdHJhbnNmb3JtlGpWMQEAS9lL3oeUjCpQaXBlbGluZVJ1bm5lci52aXNpdF90cmFuc2Zvcm1zLlJ1blZpc2l0b3KUal0xAQBL1Eveh5SMH1BpcGVsaW5lUnVubmVyLnZpc2l0X3RyYW5zZm9ybXOUalYxAQBLykvgh5SMH1BpcGVsaW5lUnVubmVyLmFwcGx5X1BUcmFuc2Zvcm2UalYxAQBL4kvkh5SMHFBpcGVsaW5lUnVubmVyLnJ1bl90cmFuc2Zvcm2UalYxAQBL5kv5h5SMIlBpcGVsaW5lUnVubmVyLmlzX2ZuYXBpX2NvbXBhdGlibGWUalYxAQBL+0v9h5SMDlBpcGVsaW5lUnVubmVylGpdMQEAS3RL/YeUjBRQVmFsdWVDYWNoZS5fX2luaXRfX5RqVjEBAE0EAU0RAYeUjBNQVmFsdWVDYWNoZS5fX2RlbF9flGpWMQEATRMBTRYBh5SME1BWYWx1ZUNhY2hlLl9fbGVuX1+UalYxAQBNGAFNGQGHlIwYUFZhbHVlQ2FjaGUudG9fY2FjaGVfa2V5lGpWMQEATRsBTRwBh5SMLFBWYWx1ZUNhY2hlLl9lbnN1cmVfcHZhbHVlX2hhc19yZWFsX3Byb2R1Y2VylGpWMQEATR4BTS0Bh5SMFVBWYWx1ZUNhY2hlLmlzX2NhY2hlZJRqVjEBAE0vAU04AYeUjBhQVmFsdWVDYWNoZS5jYWNoZV9vdXRwdXSUalYxAQBNOgFNQAGHlIwWUFZhbHVlQ2FjaGUuZ2V0X3B2YWx1ZZRqVjEBAE1CAU1OAYeUjCFQVmFsdWVDYWNoZS5nZXRfdW53aW5kb3dlZF9wdmFsdWWUalYxAQBNUAFNUQGHlIwYUFZhbHVlQ2FjaGUuY2xlYXJfcHZhbHVllGpWMQEATVMBTVYBh5SMD1BWYWx1ZUNhY2hlLmtleZRqVjEBAE1YAU1aAYeUjAtQVmFsdWVDYWNoZZRqXTEBAE0AAU1aAYeUjBlQaXBlbGluZVN0YXRlLmlzX3Rlcm1pbmFslGpWMQEATXUBTXkBh5SMDVBpcGVsaW5lU3RhdGWUal0xAQBNXgFNeQGHlIwXUGlwZWxpbmVSZXN1bHQuX19pbml0X1+UalYxAQBNfgFNfwGHlIwUUGlwZWxpbmVSZXN1bHQuc3RhdGWUalYxAQBNgQFNhAGHlIwgUGlwZWxpbmVSZXN1bHQud2FpdF91bnRpbF9maW5pc2iUalYxAQBNhgFNlwGHlIwVUGlwZWxpbmVSZXN1bHQuY2FuY2VslGpWMQEATZkBTaUBh5SMFlBpcGVsaW5lUmVzdWx0Lm1ldHJpY3OUalYxAQBNpwFNrwGHlIwgUGlwZWxpbmVSZXN1bHQuYWdncmVnYXRlZF92YWx1ZXOUalYxAQBNsgFNtgGHlIwOUGlwZWxpbmVSZXN1bHSUal0xAQBNfAFNtgGHlHV9lCiMDlBpcGVsaW5lUnVubmVylGo6AwAAjBJQaXBlbGluZVJ1bm5lci5ydW6UajoDAACMGFBpcGVsaW5lUnVubmVyLnJ1bl9hc3luY5RqOgMAAIwbUGlwZWxpbmVSdW5uZXIucnVuX3BpcGVsaW5llGo6AwAAjBRQaXBlbGluZVJ1bm5lci5hcHBseZRqOgMAAIwfUGlwZWxpbmVSdW5uZXIudmlzaXRfdHJhbnNmb3Jtc5RqOgMAAIwfUGlwZWxpbmVSdW5uZXIuYXBwbHlfUFRyYW5zZm9ybZRqOgMAAIwcUGlwZWxpbmVSdW5uZXIucnVuX3RyYW5zZm9ybZRqOgMAAIwiUGlwZWxpbmVSdW5uZXIuaXNfZm5hcGlfY29tcGF0aWJsZZRqOgMAAIwNUGlwZWxpbmVTdGF0ZZRqOgMAAIwZUGlwZWxpbmVTdGF0ZS5pc190ZXJtaW5hbJRqOgMAAIwOUGlwZWxpbmVSZXN1bHSUajoDAACMIFBpcGVsaW5lUmVzdWx0LndhaXRfdW50aWxfZmluaXNolGo6AwAAjBVQaXBlbGluZVJlc3VsdC5jYW5jZWyUajoDAACMFlBpcGVsaW5lUmVzdWx0Lm1ldHJpY3OUajoDAACMIFBpcGVsaW5lUmVzdWx0LmFnZ3JlZ2F0ZWRfdmFsdWVzlGo6AwAAdYwaYXBhY2hlX2JlYW0ucnVubmVycy5ydW5uZXKUdJSMHWFwYWNoZV9iZWFtLnJ1bm5lcnMuc2RmX3V0aWxzlChYxyMAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIyBweXR5cGU6IHNraXAtZmlsZQoKIiIiQ29tbW9uIHV0aWxpdHkgY2xhc3MgdG8gaGVscCBTREsgaGFybmVzcyB0byBleGVjdXRlIGFuIFNERi4gIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgbG9nZ2luZwppbXBvcnQgdGhyZWFkaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORwpmcm9tIHR5cGluZyBpbXBvcnQgQW55CmZyb20gdHlwaW5nIGltcG9ydCBOYW1lZFR1cGxlCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbApmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlcgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBpbXBvcnQgRHVyYXRpb24KZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRpbWVzdGFtcApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLndpbmRvd2VkX3ZhbHVlIGltcG9ydCBXaW5kb3dlZFZhbHVlCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBSZXN0cmljdGlvblByb2dyZXNzCiAgZnJvbSBhcGFjaGVfYmVhbS5pby5pb2Jhc2UgaW1wb3J0IFJlc3RyaWN0aW9uVHJhY2tlcgogIGZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBXYXRlcm1hcmtFc3RpbWF0b3IKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKClNwbGl0UmVzdWx0UHJpbWFyeSA9IE5hbWVkVHVwbGUoCiAgICAnU3BsaXRSZXN1bHRQcmltYXJ5JywgWygncHJpbWFyeV92YWx1ZScsIFdpbmRvd2VkVmFsdWUpXSkKClNwbGl0UmVzdWx0UmVzaWR1YWwgPSBOYW1lZFR1cGxlKAogICAgJ1NwbGl0UmVzdWx0UmVzaWR1YWwnLAogICAgWygncmVzaWR1YWxfdmFsdWUnLCBXaW5kb3dlZFZhbHVlKSwgKCdjdXJyZW50X3dhdGVybWFyaycsIFRpbWVzdGFtcCksCiAgICAgKCdkZWZlcnJlZF90aW1lc3RhbXAnLCBEdXJhdGlvbildKQoKCmNsYXNzIFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIob2JqZWN0KToKICAiIiJBIHRocmVhZC1zYWZlIHdyYXBwZXIgd2hpY2ggd3JhcHMgYSBgUmVzdHJpdGlvblRyYWNrZXJgLgoKICBUaGlzIHdyYXBwZXIgZ3VhcmFudGVlcyBzeW5jaHJvbml6YXRpb24gb2YgbW9kaWZ5aW5nIHJlc3RyaWN0aW9ucyBhY3Jvc3MKICBtdWx0aS10aHJlYWQuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3RyaWN0aW9uX3RyYWNrZXIpOgogICAgIyB0eXBlOiAoUmVzdHJpY3Rpb25UcmFja2VyKSAtPiBOb25lCiAgICBmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgUmVzdHJpY3Rpb25UcmFja2VyCiAgICBpZiBub3QgaXNpbnN0YW5jZShyZXN0cmljdGlvbl90cmFja2VyLCBSZXN0cmljdGlvblRyYWNrZXIpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0luaXRpYWxpemUgVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlciByZXF1aXJlcycKICAgICAgICAgICdSZXN0cmljdGlvblRyYWNrZXIuJykKICAgIHNlbGYuX3Jlc3RyaWN0aW9uX3RyYWNrZXIgPSByZXN0cmljdGlvbl90cmFja2VyCiAgICAjIFJlY29yZHMgYW4gYWJzb2x1dGUgdGltZXN0YW1wIHdoZW4gZGVmZXJfcmVtYWluZGVyIGlzIGNhbGxlZC4KICAgIHNlbGYuX3RpbWVzdGFtcCA9IE5vbmUKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuUkxvY2soKQogICAgc2VsZi5fZGVmZXJyZWRfcmVzaWR1YWwgPSBOb25lCiAgICBzZWxmLl9kZWZlcnJlZF90aW1lc3RhbXAgPSBOb25lCgogIGRlZiBjdXJyZW50X3Jlc3RyaWN0aW9uKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5fcmVzdHJpY3Rpb25fdHJhY2tlci5jdXJyZW50X3Jlc3RyaWN0aW9uKCkKCiAgZGVmIHRyeV9jbGFpbShzZWxmLCBwb3NpdGlvbik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9yZXN0cmljdGlvbl90cmFja2VyLnRyeV9jbGFpbShwb3NpdGlvbikKCiAgZGVmIGRlZmVyX3JlbWFpbmRlcihzZWxmLCBkZWZlcnJlZF90aW1lPU5vbmUpOgogICAgIiIiUGVyZm9ybXMgc2VsZi1jaGVja3BvaW50IG9uIGN1cnJlbnQgcHJvY2Vzc2luZyByZXN0cmljdGlvbiB3aXRoIGFuCiAgICBleHBlY3RlZCByZXN1bWluZyB0aW1lLgoKICAgIFNlbGYtY2hlY2twb2ludCBjb3VsZCBoYXBwZW4gZHVyaW5nIHByb2Nlc3NpbmcgZWxlbWVudHMuIFdoZW4gZXhlY3V0aW5nIGFuCiAgICBEb0ZuLnByb2Nlc3MoKSwgeW91IG1heSB3YW50IHRvIHN0b3AgcHJvY2Vzc2luZyBhbiBlbGVtZW50IGFuZCByZXN1bWluZwogICAgbGF0ZXIgaWYgY3VycmVudCBlbGVtZW50IGhhcyBiZWVuIHByb2Nlc3NlZCBxdWl0IGEgbG9uZyB0aW1lIG9yIHlvdSBhbHNvCiAgICB3YW50IHRvIGhhdmUgc29tZSBvdXRwdXRzIGZyb20gb3RoZXIgZWxlbWVudHMuIGBgZGVmZXJfcmVtYWluZGVyKClgYCBjYW4gYmUKICAgIGNhbGxlZCBvbiBwZXIgZWxlbWVudCBpZiBuZWVkZWQuCgogICAgQXJnczoKICAgICAgZGVmZXJyZWRfdGltZTogQSByZWxhdGl2ZSBgYER1cmF0aW9uYGAgdGhhdCBpbmRpY2F0ZXMgdGhlIGlkZWFsIHRpbWUgZ2FwCiAgICAgICAgYmV0d2VlbiBub3cgYW5kIHJlc3VtaW5nLCBvciBhbiBhYnNvbHV0ZSBgYFRpbWVzdGFtcGBgIGZvciByZXN1bWluZwogICAgICAgIGV4ZWN1dGlvbiB0aW1lLiBJZiB0aGUgdGltZV9kZWxheSBpcyBOb25lLCB0aGUgZGVmZXJyZWQgd29yayB3aWxsIGJlCiAgICAgICAgZXhlY3V0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAgICIiIgoKICAgICMgUmVjb3JkIGN1cnJlbnQgdGltZSBmb3IgY2FsY3VsYXRpbmcgZGVmZXJyZWRfdGltZSBsYXRlci4KICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5fdGltZXN0YW1wID0gVGltZXN0YW1wLm5vdygpCiAgICAgIGlmIChkZWZlcnJlZF90aW1lIGFuZCBub3QgaXNpbnN0YW5jZShkZWZlcnJlZF90aW1lLCBEdXJhdGlvbikgYW5kCiAgICAgICAgICBub3QgaXNpbnN0YW5jZShkZWZlcnJlZF90aW1lLCBUaW1lc3RhbXApKToKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnVGhlIHRpbWVzdGFtcCBvZiBkZXRlcl9yZW1haW5kZXIoKSBzaG91bGQgYmUgYSAnCiAgICAgICAgICAgICdEdXJhdGlvbiBvciBhIFRpbWVzdGFtcCwgb3IgTm9uZS4nKQogICAgICBzZWxmLl9kZWZlcnJlZF90aW1lc3RhbXAgPSBkZWZlcnJlZF90aW1lCiAgICAgIGNoZWNrcG9pbnQgPSBzZWxmLnRyeV9zcGxpdCgwKQogICAgICBpZiBjaGVja3BvaW50OgogICAgICAgIF8sIHNlbGYuX2RlZmVycmVkX3Jlc2lkdWFsID0gY2hlY2twb2ludAoKICBkZWYgY2hlY2tfZG9uZShzZWxmKToKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYuX3Jlc3RyaWN0aW9uX3RyYWNrZXIuY2hlY2tfZG9uZSgpCgogIGRlZiBjdXJyZW50X3Byb2dyZXNzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBSZXN0cmljdGlvblByb2dyZXNzCiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9yZXN0cmljdGlvbl90cmFja2VyLmN1cnJlbnRfcHJvZ3Jlc3MoKQoKICBkZWYgdHJ5X3NwbGl0KHNlbGYsIGZyYWN0aW9uX29mX3JlbWFpbmRlcik6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIHJldHVybiBzZWxmLl9yZXN0cmljdGlvbl90cmFja2VyLnRyeV9zcGxpdChmcmFjdGlvbl9vZl9yZW1haW5kZXIpCgogIGRlZiBkZWZlcnJlZF9zdGF0dXMoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IE9wdGlvbmFsW1R1cGxlW0FueSwgVGltZXN0YW1wXV0KCiAgICAiIiJSZXR1cm5zIGRlZmVycmVkIHdvcmsgd2hpY2ggaXMgcHJvZHVjZWQgYnkgYGBkZWZlcl9yZW1haW5kZXIoKWBgLgoKICAgIFdoZW4gdGhlcmUgaXMgYSBzZWxmLWNoZWNrcG9pbnQgcGVyZm9ybWVkLCB0aGUgc3lzdGVtIG5lZWRzIHRvIGZ1bGZpbGwgdGhlCiAgICBEZWxheWVkQnVuZGxlQXBwbGljYXRpb24gd2l0aCBkZWZlcnJlZF93b3JrIGZvciBhICBQcm9jZXNzQnVuZGxlUmVzcG9uc2UuCiAgICBUaGUgc3lzdGVtIGNhbGxzIHRoaXMgQVBJIHRvIGdldCBkZWZlcnJlZF9yZXNpZHVhbCB3aXRoIHdhdGVybWFyayB0b2dldGhlcgogICAgdG8gaGVscCB0aGUgcnVubmVyIHRvIHNjaGVkdWxlIGEgZnV0dXJlIHdvcmsuCgogICAgUmV0dXJuczogKGRlZmVycmVkX3Jlc2lkdWFsLCB0aW1lX2RlbGF5KSBpZiBoYXZpbmcgYW55IHJlc2lkdWFsLCBlbHNlIE5vbmUuCiAgICAiIiIKICAgIGlmIHNlbGYuX2RlZmVycmVkX3Jlc2lkdWFsOgogICAgICAjIElmIF9kZWZlcnJlZF90aW1lc3RhbXAgaXMgTm9uZSwgY3JlYXRlIER1cmF0aW9uKDApLgogICAgICBpZiBub3Qgc2VsZi5fZGVmZXJyZWRfdGltZXN0YW1wOgogICAgICAgIHNlbGYuX2RlZmVycmVkX3RpbWVzdGFtcCA9IER1cmF0aW9uKCkKICAgICAgIyBJZiBhbiBhYnNvbHV0ZSB0aW1lc3RhbXAgaXMgcHJvdmlkZWQsIGNhbGN1bGF0ZSB0aGUgZGVsdGEgYmV0d2VlbgogICAgICAjIHRoZSBhYnNvbHV0ZWQgdGltZSBhbmQgdGhlIHRpbWUgZGVmZXJyZWRfc3RhdHVzKCkgaXMgY2FsbGVkLgogICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5fZGVmZXJyZWRfdGltZXN0YW1wLCBUaW1lc3RhbXApOgogICAgICAgIHNlbGYuX2RlZmVycmVkX3RpbWVzdGFtcCA9IChzZWxmLl9kZWZlcnJlZF90aW1lc3RhbXAgLSBUaW1lc3RhbXAubm93KCkpCiAgICAgICMgSWYgYSBEdXJhdGlvbiBpcyBwcm92aWRlZCwgdGhlIGRlZmVycmVkIHRpbWUgc2hvdWxkIGJlOgogICAgICAjIHByb3ZpZGVkIGR1cmF0aW9uIC0gdGhlIHNwZW50IHRpbWUgc2luY2UgdGhlIGRlZmVyX3JlbWFpbmRlcigpIGlzCiAgICAgICMgY2FsbGVkLgogICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5fZGVmZXJyZWRfdGltZXN0YW1wLCBEdXJhdGlvbik6CiAgICAgICAgc2VsZi5fZGVmZXJyZWRfdGltZXN0YW1wIC09IChUaW1lc3RhbXAubm93KCkgLSBzZWxmLl90aW1lc3RhbXApCiAgICAgIHJldHVybiBzZWxmLl9kZWZlcnJlZF9yZXNpZHVhbCwgc2VsZi5fZGVmZXJyZWRfdGltZXN0YW1wCiAgICByZXR1cm4gTm9uZQoKCmNsYXNzIFJlc3RyaWN0aW9uVHJhY2tlclZpZXcob2JqZWN0KToKICAiIiJBIERvRm4gdmlldyBvZiB0aHJlYWQtc2FmZSBSZXN0cmljdGlvblRyYWNrZXIuCgogIFRoZSBSZXN0cmljdGlvblRyYWNrZXJWaWV3IHdyYXBzIGEgVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlciBhbmQgb25seQogIGV4cG9zZXMgQVBJcyB0aGF0IHdpbGwgYmUgY2FsbGVkIGJ5IGEgYGBEb0ZuLnByb2Nlc3MoKWBgLiBEdXJpbmcgZXhlY3V0aW9uCiAgdGltZSwgdGhlIFJlc3RyaWN0aW9uVHJhY2tlclZpZXcgd2lsbCBiZSBmZWQgaW50byB0aGUgYGBEb0ZuLnByb2Nlc3NgYCBhcyBhCiAgcmVzdHJpY3Rpb25fdHJhY2tlci4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgdGhyZWFkc2FmZV9yZXN0cmljdGlvbl90cmFja2VyKToKICAgICMgdHlwZTogKFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIpIC0+IE5vbmUKICAgIGlmIG5vdCBpc2luc3RhbmNlKHRocmVhZHNhZmVfcmVzdHJpY3Rpb25fdHJhY2tlciwKICAgICAgICAgICAgICAgICAgICAgIFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0luaXRpYWxpemUgUmVzdHJpY3Rpb25UcmFja2VyVmlldyByZXF1aXJlcyAnCiAgICAgICAgICAnVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlci4nKQogICAgc2VsZi5fdGhyZWFkc2FmZV9yZXN0cmljdGlvbl90cmFja2VyID0gdGhyZWFkc2FmZV9yZXN0cmljdGlvbl90cmFja2VyCgogIGRlZiBjdXJyZW50X3Jlc3RyaWN0aW9uKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3RocmVhZHNhZmVfcmVzdHJpY3Rpb25fdHJhY2tlci5jdXJyZW50X3Jlc3RyaWN0aW9uKCkKCiAgZGVmIHRyeV9jbGFpbShzZWxmLCBwb3NpdGlvbik6CiAgICByZXR1cm4gc2VsZi5fdGhyZWFkc2FmZV9yZXN0cmljdGlvbl90cmFja2VyLnRyeV9jbGFpbShwb3NpdGlvbikKCiAgZGVmIGRlZmVyX3JlbWFpbmRlcihzZWxmLCBkZWZlcnJlZF90aW1lPU5vbmUpOgogICAgc2VsZi5fdGhyZWFkc2FmZV9yZXN0cmljdGlvbl90cmFja2VyLmRlZmVyX3JlbWFpbmRlcihkZWZlcnJlZF90aW1lKQoKCmNsYXNzIFRocmVhZHNhZmVXYXRlcm1hcmtFc3RpbWF0b3Iob2JqZWN0KToKICAiIiJBIHRocmVhZHNhZmUgd3JhcHBlciB3aGljaCB3cmFwcyBhIFdhdGVybWFya0VzdGltYXRvciB3aXRoIGxvY2tpbmcKICBtZWNoYW5pc20gdG8gZ3VhcmFudGVlIG11bHRpLXRocmVhZCBzYWZldHkuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdhdGVybWFya19lc3RpbWF0b3IpOgogICAgIyB0eXBlOiAoV2F0ZXJtYXJrRXN0aW1hdG9yKSAtPiBOb25lCiAgICBmcm9tIGFwYWNoZV9iZWFtLmlvLmlvYmFzZSBpbXBvcnQgV2F0ZXJtYXJrRXN0aW1hdG9yCiAgICBpZiBub3QgaXNpbnN0YW5jZSh3YXRlcm1hcmtfZXN0aW1hdG9yLCBXYXRlcm1hcmtFc3RpbWF0b3IpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbml0aWFsaXppbmcgVGhyZWFkc2FmZSByZXF1aXJlcyBhIFdhdGVybWFya0VzdGltYXRvcicpCiAgICBzZWxmLl93YXRlcm1hcmtfZXN0aW1hdG9yID0gd2F0ZXJtYXJrX2VzdGltYXRvcgogICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKCiAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgaWYgaGFzYXR0cihzZWxmLl93YXRlcm1hcmtfZXN0aW1hdG9yLCBhdHRyKToKCiAgICAgIGRlZiBtZXRob2Rfd3JhcHBlcigqYXJncywgKiprdyk6CiAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fd2F0ZXJtYXJrX2VzdGltYXRvciwgYXR0cikoKmFyZ3MsICoqa3cpCgogICAgICByZXR1cm4gbWV0aG9kX3dyYXBwZXIKICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKGF0dHIpCgogIGRlZiBnZXRfZXN0aW1hdG9yX3N0YXRlKHNlbGYpOgogICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICByZXR1cm4gc2VsZi5fd2F0ZXJtYXJrX2VzdGltYXRvci5nZXRfZXN0aW1hdG9yX3N0YXRlKCkKCiAgZGVmIGN1cnJlbnRfd2F0ZXJtYXJrKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBUaW1lc3RhbXAKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgcmV0dXJuIHNlbGYuX3dhdGVybWFya19lc3RpbWF0b3IuY3VycmVudF93YXRlcm1hcmsoKQoKICBkZWYgb2JzZXJ2ZV90aW1lc3RhbXAoc2VsZiwgdGltZXN0YW1wKToKICAgICMgdHlwZTogKFRpbWVzdGFtcCkgLT4gTm9uZQogICAgaWYgbm90IGlzaW5zdGFuY2UodGltZXN0YW1wLCBUaW1lc3RhbXApOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0lucHV0IG9mIG9ic2VydmVfdGltZXN0YW1wIHNob3VsZCBiZSBhIFRpbWVzdGFtcCAnCiAgICAgICAgICAnb2JqZWN0JykKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgc2VsZi5fd2F0ZXJtYXJrX2VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcCh0aW1lc3RhbXApCgoKY2xhc3MgTm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyKFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyKToKICAiIiJBIFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyIHdoaWNoIGNyZWF0ZXMgTm9PcFdhdGVybWFya0VzdGltYXRvciBmb3IgdGhlCiAgZnJhbWV3b3JrLgogICIiIgogIGRlZiBpbml0aWFsX2VzdGltYXRvcl9zdGF0ZShzZWxmLCBlbGVtZW50LCByZXN0cmljdGlvbik6CiAgICByZXR1cm4gTm9uZQoKICBkZWYgY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3Ioc2VsZiwgZXN0aW1hdG9yX3N0YXRlKToKICAgIGZyb20gYXBhY2hlX2JlYW0uaW8uaW9iYXNlIGltcG9ydCBXYXRlcm1hcmtFc3RpbWF0b3IKCiAgICBjbGFzcyBfTm9PcFdhdGVybWFya0VzdGltYXRvcihXYXRlcm1hcmtFc3RpbWF0b3IpOgogICAgICAiIiJBIE5vLW9wIFdhdGVybWFya0VzdGltYXRvciB3aGljaCBpcyBwcm92aWRlZCBmb3IgdGhlIGZyYW1ld29yayBpZiB0aGVyZQogICAgICBpcyBubyBjdXN0b20gb25lLgogICAgICAiIiIKICAgICAgZGVmIG9ic2VydmVfdGltZXN0YW1wKHNlbGYsIHRpbWVzdGFtcCk6CiAgICAgICAgcGFzcwoKICAgICAgZGVmIGN1cnJlbnRfd2F0ZXJtYXJrKHNlbGYpOgogICAgICAgIHJldHVybiBOb25lCgogICAgICBkZWYgZ2V0X2VzdGltYXRvcl9zdGF0ZShzZWxmKToKICAgICAgICByZXR1cm4gTm9uZQoKICAgIHJldHVybiBfTm9PcFdhdGVybWFya0VzdGltYXRvcigpCpR9lCiMJVRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuX19pbml0X1+UalYxAQBLPUtJh5SMMFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbpRqVjEBAEtLS02HlIwmVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlci50cnlfY2xhaW2UalYxAQBLT0tRh5SMLFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuZGVmZXJfcmVtYWluZGVylGpWMQEAS1NLb4eUjCdUaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmWUalYxAQBLcUtzh5SMLVRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9wcm9ncmVzc5RqVjEBAEt1S3iHlIwmVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlci50cnlfc3BsaXSUalYxAQBLekt8h5SMLFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuZGVmZXJyZWRfc3RhdHVzlGpWMQEAS35LmIeUjBxUaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VylGpdMQEASzdLmIeUjB9SZXN0cmljdGlvblRyYWNrZXJWaWV3Ll9faW5pdF9flGpWMQEAS6NLqoeUjCpSZXN0cmljdGlvblRyYWNrZXJWaWV3LmN1cnJlbnRfcmVzdHJpY3Rpb26UalYxAQBLrEuth5SMIFJlc3RyaWN0aW9uVHJhY2tlclZpZXcudHJ5X2NsYWltlGpWMQEAS69LsIeUjCZSZXN0cmljdGlvblRyYWNrZXJWaWV3LmRlZmVyX3JlbWFpbmRlcpRqVjEBAEuyS7OHlIwWUmVzdHJpY3Rpb25UcmFja2VyVmlld5RqXTEBAEubS7OHlIwlVGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvci5fX2luaXRfX5RqVjEBAEu6S8CHlIw3VGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvci5fX2dldGF0dHJfXy5tZXRob2Rfd3JhcHBlcpRqVjEBAEvFS8eHlIwoVGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvci5fX2dldGF0dHJfX5RqVjEBAEvCS8qHlIwwVGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvci5nZXRfZXN0aW1hdG9yX3N0YXRllGpWMQEAS8xLzoeUjC5UaHJlYWRzYWZlV2F0ZXJtYXJrRXN0aW1hdG9yLmN1cnJlbnRfd2F0ZXJtYXJrlGpWMQEAS9BL04eUjC5UaHJlYWRzYWZlV2F0ZXJtYXJrRXN0aW1hdG9yLm9ic2VydmVfdGltZXN0YW1wlGpWMQEAS9VL3IeUjBxUaHJlYWRzYWZlV2F0ZXJtYXJrRXN0aW1hdG9ylGpdMQEAS7ZL3IeUjDZOb09wV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIuaW5pdGlhbF9lc3RpbWF0b3Jfc3RhdGWUalYxAQBL40vkh5SMY05vT3BXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlci5jcmVhdGVfd2F0ZXJtYXJrX2VzdGltYXRvci5fTm9PcFdhdGVybWFya0VzdGltYXRvci5vYnNlcnZlX3RpbWVzdGFtcJRqVjEBAEvtS+6HlIxjTm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyLmNyZWF0ZV93YXRlcm1hcmtfZXN0aW1hdG9yLl9Ob09wV2F0ZXJtYXJrRXN0aW1hdG9yLmN1cnJlbnRfd2F0ZXJtYXJrlGpWMQEAS/BL8YeUjGVOb09wV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIuY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3IuX05vT3BXYXRlcm1hcmtFc3RpbWF0b3IuZ2V0X2VzdGltYXRvcl9zdGF0ZZRqVjEBAEvzS/SHlIxRTm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyLmNyZWF0ZV93YXRlcm1hcmtfZXN0aW1hdG9yLl9Ob09wV2F0ZXJtYXJrRXN0aW1hdG9ylGpdMQEAS+lL9IeUjDlOb09wV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIuY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3KUalYxAQBL5kv2h5SMHk5vT3BXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlcpRqXTEBAEvfS/aHlHV9lCiMHFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXKUalkDAACMMFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9yZXN0cmljdGlvbpRqWQMAAIwmVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlci50cnlfY2xhaW2UalkDAACMLFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuZGVmZXJfcmVtYWluZGVylGpZAwAAjCdUaHJlYWRzYWZlUmVzdHJpY3Rpb25UcmFja2VyLmNoZWNrX2RvbmWUalkDAACMLVRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuY3VycmVudF9wcm9ncmVzc5RqWQMAAIwmVGhyZWFkc2FmZVJlc3RyaWN0aW9uVHJhY2tlci50cnlfc3BsaXSUalkDAACMLFRocmVhZHNhZmVSZXN0cmljdGlvblRyYWNrZXIuZGVmZXJyZWRfc3RhdHVzlGpZAwAAjBZSZXN0cmljdGlvblRyYWNrZXJWaWV3lGpZAwAAjCpSZXN0cmljdGlvblRyYWNrZXJWaWV3LmN1cnJlbnRfcmVzdHJpY3Rpb26UalkDAACMIFJlc3RyaWN0aW9uVHJhY2tlclZpZXcudHJ5X2NsYWltlGpZAwAAjCZSZXN0cmljdGlvblRyYWNrZXJWaWV3LmRlZmVyX3JlbWFpbmRlcpRqWQMAAIwcVGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvcpRqWQMAAIwwVGhyZWFkc2FmZVdhdGVybWFya0VzdGltYXRvci5nZXRfZXN0aW1hdG9yX3N0YXRllGpZAwAAjC5UaHJlYWRzYWZlV2F0ZXJtYXJrRXN0aW1hdG9yLmN1cnJlbnRfd2F0ZXJtYXJrlGpZAwAAjC5UaHJlYWRzYWZlV2F0ZXJtYXJrRXN0aW1hdG9yLm9ic2VydmVfdGltZXN0YW1wlGpZAwAAjB5Ob09wV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXKUalkDAACMNk5vT3BXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlci5pbml0aWFsX2VzdGltYXRvcl9zdGF0ZZRqWQMAAIw5Tm9PcFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyLmNyZWF0ZV93YXRlcm1hcmtfZXN0aW1hdG9ylGpZAwAAdYwdYXBhY2hlX2JlYW0ucnVubmVycy5zZGZfdXRpbHOUdJSMO2FwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm1vZGVscy5uZXhtYXJrX21vZGVslChYsgoAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiTmV4bWFyayBtb2RlbC4KClRoZSBuZXhtYXJrIHN1aXRlIGlzIGEgc2VyaWVzIG9mIHF1ZXJpZXMgKHN0cmVhbWluZyBwaXBlbGluZXMpIHBlcmZvcm1lZApvbiBhIHNpbXVsYXRpb24gb2YgYXVjdGlvbiBldmVudHMuIFRoZSBtb2RlbCBpbmNsdWRlcyB0aGUgdGhyZWUgcm9sZXMgdGhhdApnZW5lcmF0ZSBldmVudHM6CgogIC0gVGhlIHBlcnNvbiB3aG8gc3RhcnRzIGFuZCBhdWN0aW9uIG9yIG1ha2VzIGEgYmlkIChQZXJzb24pLgogIC0gVGhlIGF1Y3Rpb24gaXRlbSAoQXVjdGlvbikuCiAgLSBUaGUgYmlkIG9uIGFuIGl0ZW0gZm9yIGF1Y3Rpb24gKEJpZCkuCgoiIiIKCgpjbGFzcyBQZXJzb24ob2JqZWN0KToKICAiQXV0aG9yIG9mIGFuIGF1Y3Rpb24gb3IgYSBiaWQuIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIGlkLCBuYW1lLCBlbWFpbCwgY3JlZGl0X2NhcmQsIGNpdHksIHN0YXRlLCB0aW1lc3RhbXAsIGV4dHJhPU5vbmUpOgogICAgc2VsZi5pZCA9IGlkCiAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICBzZWxmLmVtYWlsID0gZW1haWwgICMga2V5CiAgICBzZWxmLmNyZWRpdF9jYXJkID0gY3JlZGl0X2NhcmQKICAgIHNlbGYuY2l0eSA9IGNpdHkKICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQogICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKICAgIHNlbGYuZXh0cmEgPSBleHRyYQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1BlcnNvbih7aWR9LCB7ZW1haWx9KScuZm9ybWF0KAogICAgICAgICoqewogICAgICAgICAgICAnaWQnOiBzZWxmLmlkLCAnZW1haWwnOiBzZWxmLmVtYWlsCiAgICAgICAgfSkKCgpjbGFzcyBBdWN0aW9uKG9iamVjdCk6CiAgIkl0ZW0gZm9yIGF1Y3Rpb24uIgoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGlkLAogICAgICBpdGVtX25hbWUsCiAgICAgIGRlc2NyaXB0aW9uLAogICAgICBpbml0aWFsX2JpZCwKICAgICAgcmVzZXJ2ZV9wcmljZSwKICAgICAgdGltZXN0YW1wLAogICAgICBleHBpcmVzLAogICAgICBzZWxsZXIsCiAgICAgIGNhdGVnb3J5LAogICAgICBleHRyYT1Ob25lKToKICAgIHNlbGYuaWQgPSBpZAogICAgc2VsZi5pdGVtX25hbWUgPSBpdGVtX25hbWUgICMga2V5CiAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KICAgIHNlbGYuaW5pdGlhbF9iaWQgPSBpbml0aWFsX2JpZAogICAgc2VsZi5yZXNlcnZlX3ByaWNlID0gcmVzZXJ2ZV9wcmljZQogICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKICAgIHNlbGYuZXhwaXJlcyA9IGV4cGlyZXMKICAgIHNlbGYuc2VsbGVyID0gc2VsbGVyCiAgICBzZWxmLmNhdGVnb3J5ID0gY2F0ZWdvcnkKICAgIHNlbGYuZXh0cmEgPSBleHRyYQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0F1Y3Rpb24oe2lkfSwge2l0ZW1fbmFtZX0pJy5mb3JtYXQoCiAgICAgICAgKip7CiAgICAgICAgICAgICdpZCc6IHNlbGYuaWQsICdpdGVtX25hbWUnOiBzZWxmLml0ZW1fbmFtZQogICAgICAgIH0pCgoKY2xhc3MgQmlkKG9iamVjdCk6CiAgIkEgYmlkIGZvciBhbiBpdGVtIGZvciBhdWN0aW9uLiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGF1Y3Rpb24sIGJpZGRlciwgcHJpY2UsIHRpbWVzdGFtcCwgZXh0cmE9Tm9uZSk6CiAgICBzZWxmLmF1Y3Rpb24gPSBhdWN0aW9uICAjIGtleQogICAgc2VsZi5iaWRkZXIgPSBiaWRkZXIKICAgIHNlbGYucHJpY2UgPSBwcmljZQogICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKICAgIHNlbGYuZXh0cmEgPSBleHRyYQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0JpZCh7YXVjdGlvbn0sIHtiaWRkZXJ9LCB7cHJpY2V9KScuZm9ybWF0KAogICAgICAgICoqewogICAgICAgICAgICAnYXVjdGlvbic6IHNlbGYuYXVjdGlvbiwgJ2JpZGRlcic6IHNlbGYuYmlkZGVyLCAncHJpY2UnOiBzZWxmLnByaWNlCiAgICAgICAgfSkKlH2UKIwPUGVyc29uLl9faW5pdF9flGpWMQEASyJLK4eUjA9QZXJzb24uX19yZXByX1+UalYxAQBLLUsxh5SMBlBlcnNvbpRqXTEBAEsfSzGHlIwQQXVjdGlvbi5fX2luaXRfX5RqVjEBAEs3S0yHlIwQQXVjdGlvbi5fX3JlcHJfX5RqVjEBAEtOS1KHlIwHQXVjdGlvbpRqXTEBAEs0S1KHlIwMQmlkLl9faW5pdF9flGpWMQEAS1hLXYeUjAxCaWQuX19yZXByX1+UalYxAQBLX0tjh5SMA0JpZJRqXTEBAEtVS2OHlHV9lCiMBlBlcnNvbpRqIQQAAIwHQXVjdGlvbpRqIQQAAIwDQmlklGohBAAAdYw7YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubW9kZWxzLm5leG1hcmtfbW9kZWyUdJSMN2FwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfbGF1bmNoZXKUKFiAIwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJOZXhtYXJrIGxhdW5jaGVyLgoKVGhlIE5leG1hcmsgc3VpdGUgaXMgYSBzZXJpZXMgb2YgcXVlcmllcyAoc3RyZWFtaW5nIHBpcGVsaW5lcykgcGVyZm9ybWVkCm9uIGEgc2ltdWxhdGlvbiBvZiBhdWN0aW9uIGV2ZW50cy4gVGhlIGxhdW5jaGVyIG9yY2hlc3RyYXRlcyB0aGUgZ2VuZXJhdGlvbgphbmQgcGFyc2luZyBvZiBzdHJlYW1pbmcgZXZlbnRzIGFuZCB0aGUgcnVubmluZyBvZiBxdWVyaWVzLgoKTW9kZWwKICAtIFBlcnNvbjogQXV0aG9yIG9mIGFuIGF1Y3Rpb24gb3IgYSBiaWQuCiAgLSBBdWN0aW9uOiBJdGVtIHVuZGVyIGF1Y3Rpb24uCiAgLSBCaWQ6IEEgYmlkIGZvciBhbiBpdGVtIHVuZGVyIGF1Y3Rpb24uCgpFdmVudHMKIC0gQ3JlYXRlIFBlcnNvbgogLSBDcmVhdGUgQXVjdGlvbgogLSBDcmVhdGUgQmlkCgpRdWVyaWVzCiAgLSBRdWVyeTA6IFBhc3MgdGhyb3VnaCAoc2VuZCBhbmQgcmVjZWl2ZSBhdWN0aW9uIGV2ZW50cykuCgpVc2FnZQogIC0gRGlyZWN0UnVubmVyCiAgICAgIHB5dGhvbiBuZXhtYXJrX2xhdW5jaGVyLnB5IFwKICAgICAgICAgIC0tcXVlcnkvcSA8cXVlcnkgbnVtYmVyPiBcCiAgICAgICAgICAtLXByb2plY3QgPHByb2plY3QgaWQ+IFwKICAgICAgICAgIC0tbG9nbGV2ZWw9REVCVUcgKG9wdGlvbmFsKSBcCiAgICAgICAgICAtLXdhaXRfdW50aWxfZmluaXNoX2R1cmF0aW9uIDx0aW1lX2luX21zPiBcCiAgICAgICAgICAtLXN0cmVhbWluZwoKICAtIERhdGFmbG93UnVubmVyCiAgICAgIHB5dGhvbiBuZXhtYXJrX2xhdW5jaGVyLnB5IFwKICAgICAgICAgIC0tcXVlcnkvcSA8cXVlcnkgbnVtYmVyPiBcCiAgICAgICAgICAtLXByb2plY3QgPHByb2plY3QgaWQ+IFwKICAgICAgICAgIC0tbG9nbGV2ZWw9REVCVUcgKG9wdGlvbmFsKSBcCiAgICAgICAgICAtLXdhaXRfdW50aWxfZmluaXNoX2R1cmF0aW9uIDx0aW1lX2luX21zPiBcCiAgICAgICAgICAtLXN0cmVhbWluZyBcCiAgICAgICAgICAtLXNka19sb2NhdGlvbiA8YXBhY2hlX2JlYW0gdGFyLmd6PiBcCiAgICAgICAgICAtLXN0YWdpbmdfbG9jYXRpb249Z3M6Ly8uLi4gXAogICAgICAgICAgLS10ZW1wX2xvY2F0aW9uPWdzOi8vCgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgbG9nZ2luZwppbXBvcnQgc3lzCmltcG9ydCB1dWlkCgpmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgcHVic3ViCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgR29vZ2xlQ2xvdWRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFNldHVwT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU3RhbmRhcmRPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBUZXN0T3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbCBpbXBvcnQgQ29tbWFuZApmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMgaW1wb3J0IHF1ZXJ5MApmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMgaW1wb3J0IHF1ZXJ5MQpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMgaW1wb3J0IHF1ZXJ5MgoKCmNsYXNzIE5leG1hcmtMYXVuY2hlcihvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHNlbGYucGFyc2VfYXJncygpCiAgICBzZWxmLnV1aWQgPSBzdHIodXVpZC51dWlkNCgpKQogICAgc2VsZi50b3BpY19uYW1lID0gc2VsZi5hcmdzLnRvcGljX25hbWUgKyBzZWxmLnV1aWQKICAgIHNlbGYuc3Vic2NyaXB0aW9uX25hbWUgPSBzZWxmLmFyZ3Muc3Vic2NyaXB0aW9uX25hbWUgKyBzZWxmLnV1aWQKICAgIHB1Ymxpc2hfY2xpZW50ID0gcHVic3ViLkNsaWVudChwcm9qZWN0PXNlbGYucHJvamVjdCkKICAgIHRvcGljID0gcHVibGlzaF9jbGllbnQudG9waWMoc2VsZi50b3BpY19uYW1lKQogICAgaWYgdG9waWMuZXhpc3RzKCk6CiAgICAgIGxvZ2dpbmcuaW5mbygnZGVsZXRpbmcgdG9waWMgJXMnLCBzZWxmLnRvcGljX25hbWUpCiAgICAgIHRvcGljLmRlbGV0ZSgpCiAgICBsb2dnaW5nLmluZm8oJ2NyZWF0aW5nIHRvcGljICVzJywgc2VsZi50b3BpY19uYW1lKQogICAgdG9waWMuY3JlYXRlKCkKICAgIHN1YiA9IHRvcGljLnN1YnNjcmlwdGlvbihzZWxmLnN1YnNjcmlwdGlvbl9uYW1lKQogICAgaWYgc3ViLmV4aXN0cygpOgogICAgICBsb2dnaW5nLmluZm8oJ2RlbGV0aW5nIHN1YiAlcycsIHNlbGYudG9waWNfbmFtZSkKICAgICAgc3ViLmRlbGV0ZSgpCiAgICBsb2dnaW5nLmluZm8oJ2NyZWF0aW5nIHN1YiAlcycsIHNlbGYudG9waWNfbmFtZSkKICAgIHN1Yi5jcmVhdGUoKQoKICBkZWYgcGFyc2VfYXJncyhzZWxmKToKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXF1ZXJ5JywKICAgICAgICAnLXEnLAogICAgICAgIHR5cGU9aW50LAogICAgICAgIGFjdGlvbj0nYXBwZW5kJywKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIGNob2ljZXM9WzAsIDEsIDJdLAogICAgICAgIGhlbHA9J1F1ZXJ5IHRvIHJ1bicpCgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgICAnLS1zdWJzY3JpcHRpb25fbmFtZScsCiAgICAgICAgdHlwZT1zdHIsCiAgICAgICAgaGVscD0nUHViL1N1YiBzdWJzY3JpcHRpb24gdG8gcmVhZCBmcm9tJykKCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLXRvcGljX25hbWUnLCB0eXBlPXN0ciwgaGVscD0nUHViL1N1YiB0b3BpYyB0byByZWFkIGZyb20nKQoKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbG9nbGV2ZWwnLAogICAgICAgIGNob2ljZXM9WydERUJVRycsICdJTkZPJywgJ1dBUk5JTkcnLCAnRVJST1InLCAnQ1JJVElDQUwnXSwKICAgICAgICBkZWZhdWx0PSdJTkZPJywKICAgICAgICBoZWxwPSdTZXQgbG9nZ2luZyBsZXZlbCB0byBkZWJ1ZycpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICctLWlucHV0JywKICAgICAgICB0eXBlPXN0ciwKICAgICAgICByZXF1aXJlZD1UcnVlLAogICAgICAgIGhlbHA9J1BhdGggdG8gdGhlIGRhdGEgZmlsZSBjb250YWluaW5nIG5leG1hcmsgZXZlbnRzLicpCgogICAgc2VsZi5hcmdzLCBzZWxmLnBpcGVsaW5lX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncygpCiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKAogICAgICAgIGxldmVsPWdldGF0dHIobG9nZ2luZywgc2VsZi5hcmdzLmxvZ2xldmVsLCBOb25lKSwKICAgICAgICBmb3JtYXQ9JyglKHRocmVhZE5hbWUpLTEwcykgJShtZXNzYWdlKXMnKQoKICAgIHNlbGYucGlwZWxpbmVfb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhzZWxmLnBpcGVsaW5lX2FyZ3MpCiAgICBsb2dnaW5nLmRlYnVnKCdhcmdzLCBwaXBlbGluZV9hcmdzOiAlcywgJXMnLCBzZWxmLmFyZ3MsIHNlbGYucGlwZWxpbmVfYXJncykKCiAgICAjIFVzYWdlIHdpdGggRGF0YWZsb3cgcmVxdWlyZXMgYSBwcm9qZWN0IHRvIGJlIHN1cHBsaWVkLgogICAgc2VsZi5wcm9qZWN0ID0gc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoR29vZ2xlQ2xvdWRPcHRpb25zKS5wcm9qZWN0CiAgICBpZiBzZWxmLnByb2plY3QgaXMgTm9uZToKICAgICAgcGFyc2VyLnByaW50X3VzYWdlKCkKICAgICAgcHJpbnQoc3lzLmFyZ3ZbMF0gKyAnOiBlcnJvcjogYXJndW1lbnQgLS1wcm9qZWN0IGlzIHJlcXVpcmVkJykKICAgICAgc3lzLmV4aXQoMSkKCiAgICAjIFB1Yi9TdWIgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIG9ubHkgaW4gc3RyZWFtaW5nIHBpcGVsaW5lcy4KICAgIHNlbGYuc3RyZWFtaW5nID0gc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmcKICAgIGlmIHNlbGYuc3RyZWFtaW5nIGlzIE5vbmU6CiAgICAgIHBhcnNlci5wcmludF91c2FnZSgpCiAgICAgIHByaW50KHN5cy5hcmd2WzBdICsgJzogZXJyb3I6IGFyZ3VtZW50IC0tc3RyZWFtaW5nIGlzIHJlcXVpcmVkJykKICAgICAgc3lzLmV4aXQoMSkKCiAgICAjIHdhaXRfdW50aWxfZmluaXNoIGVuc3VyZXMgdGhhdCB0aGUgc3RyZWFtaW5nIGpvYiBpcyBjYW5jZWxlZC4KICAgIHNlbGYud2FpdF91bnRpbF9maW5pc2hfZHVyYXRpb24gPSAoCiAgICAgICAgc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoVGVzdE9wdGlvbnMpLndhaXRfdW50aWxfZmluaXNoX2R1cmF0aW9uKQogICAgaWYgc2VsZi53YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbiBpcyBOb25lOgogICAgICBwYXJzZXIucHJpbnRfdXNhZ2UoKQogICAgICBwcmludChzeXMuYXJndlswXSArICc6IGVycm9yOiBhcmd1bWVudCAtLXdhaXRfdW50aWxfZmluaXNoX2R1cmF0aW9uIGlzIHJlcXVpcmVkJykgICMgcHlsaW50OiBkaXNhYmxlPWxpbmUtdG9vLWxvbmcKICAgICAgc3lzLmV4aXQoMSkKCiAgICAjIFdlIHVzZSB0aGUgc2F2ZV9tYWluX3Nlc3Npb24gb3B0aW9uIGJlY2F1c2Ugb25lIG9yIG1vcmUgRG9GbidzIGluIHRoaXMKICAgICMgd29ya2Zsb3cgcmVseSBvbiBnbG9iYWwgY29udGV4dCAoZS5nLiwgYSBtb2R1bGUgaW1wb3J0ZWQgYXQgbW9kdWxlIGxldmVsKS4KICAgIHNlbGYucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFNldHVwT3B0aW9ucykuc2F2ZV9tYWluX3Nlc3Npb24gPSBUcnVlCgogIGRlZiBnZW5lcmF0ZV9ldmVudHMoc2VsZik6CiAgICBwdWJsaXNoX2NsaWVudCA9IHB1YnN1Yi5DbGllbnQocHJvamVjdD1zZWxmLnByb2plY3QpCiAgICB0b3BpYyA9IHB1Ymxpc2hfY2xpZW50LnRvcGljKHNlbGYudG9waWNfbmFtZSkKICAgIHN1YiA9IHRvcGljLnN1YnNjcmlwdGlvbihzZWxmLnN1YnNjcmlwdGlvbl9uYW1lKQoKICAgIGxvZ2dpbmcuaW5mbygnR2VuZXJhdGluZyBhdWN0aW9uIGV2ZW50cyB0byB0b3BpYyAlcycsIHRvcGljLm5hbWUpCgogICAgaWYgc2VsZi5hcmdzLmlucHV0LnN0YXJ0c3dpdGgoJ2dzOi8vJyk6CiAgICAgIGZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLmdjc2ZpbGVzeXN0ZW0gaW1wb3J0IEdDU0ZpbGVTeXN0ZW0KICAgICAgZnMgPSBHQ1NGaWxlU3lzdGVtKHNlbGYucGlwZWxpbmVfb3B0aW9ucykKICAgICAgd2l0aCBmcy5vcGVuKHNlbGYuYXJncy5pbnB1dCkgYXMgaW5maWxlOgogICAgICAgIGZvciBsaW5lIGluIGluZmlsZToKICAgICAgICAgIHRvcGljLnB1Ymxpc2gobGluZSkKICAgIGVsc2U6CiAgICAgIHdpdGggb3BlbihzZWxmLmFyZ3MuaW5wdXQpIGFzIGluZmlsZToKICAgICAgICBmb3IgbGluZSBpbiBpbmZpbGU6CiAgICAgICAgICB0b3BpYy5wdWJsaXNoKGxpbmUpCgogICAgbG9nZ2luZy5pbmZvKCdGaW5pc2hlZCBldmVudCBnZW5lcmF0aW9uLicpCgogICAgIyBSZWFkIGZyb20gUHViU3ViIGludG8gYSBQQ29sbGVjdGlvbi4KICAgIGlmIHNlbGYuYXJncy5zdWJzY3JpcHRpb25fbmFtZToKICAgICAgcmF3X2V2ZW50cyA9IHNlbGYucGlwZWxpbmUgfCAnUmVhZFB1YlN1YicgPj4gYmVhbS5pby5SZWFkRnJvbVB1YlN1YigKICAgICAgICAgIHN1YnNjcmlwdGlvbj1zdWIuZnVsbF9uYW1lKQogICAgZWxzZToKICAgICAgcmF3X2V2ZW50cyA9IHNlbGYucGlwZWxpbmUgfCAnUmVhZFB1YlN1YicgPj4gYmVhbS5pby5SZWFkRnJvbVB1YlN1YigKICAgICAgICAgIHRvcGljPXRvcGljLmZ1bGxfbmFtZSkKCiAgICByZXR1cm4gcmF3X2V2ZW50cwoKICBkZWYgcnVuX3F1ZXJ5KHNlbGYsIHF1ZXJ5LCBxdWVyeV9hcmdzLCBxdWVyeV9lcnJvcnMpOgogICAgdHJ5OgogICAgICBzZWxmLnBhcnNlX2FyZ3MoKQogICAgICBzZWxmLnBpcGVsaW5lID0gYmVhbS5QaXBlbGluZShvcHRpb25zPXNlbGYucGlwZWxpbmVfb3B0aW9ucykKICAgICAgcmF3X2V2ZW50cyA9IHNlbGYuZ2VuZXJhdGVfZXZlbnRzKCkKICAgICAgcXVlcnkubG9hZChyYXdfZXZlbnRzLCBxdWVyeV9hcmdzKQogICAgICByZXN1bHQgPSBzZWxmLnBpcGVsaW5lLnJ1bigpCiAgICAgIGpvYl9kdXJhdGlvbiA9ICgKICAgICAgICAgIHNlbGYucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFRlc3RPcHRpb25zKS53YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbikKICAgICAgaWYgc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5ydW5uZXIgPT0gJ0RhdGFmbG93UnVubmVyJzogICMgcHlsaW50OiBkaXNhYmxlPWxpbmUtdG9vLWxvbmcKICAgICAgICByZXN1bHQud2FpdF91bnRpbF9maW5pc2goZHVyYXRpb249am9iX2R1cmF0aW9uKQogICAgICAgIHJlc3VsdC5jYW5jZWwoKQogICAgICBlbHNlOgogICAgICAgIHJlc3VsdC53YWl0X3VudGlsX2ZpbmlzaCgpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgcXVlcnlfZXJyb3JzLmFwcGVuZChzdHIoZXhjKSkKICAgICAgcmFpc2UKCiAgZGVmIGNsZWFudXAoc2VsZik6CiAgICBwdWJsaXNoX2NsaWVudCA9IHB1YnN1Yi5DbGllbnQocHJvamVjdD1zZWxmLnByb2plY3QpCiAgICB0b3BpYyA9IHB1Ymxpc2hfY2xpZW50LnRvcGljKHNlbGYudG9waWNfbmFtZSkKICAgIGlmIHRvcGljLmV4aXN0cygpOgogICAgICB0b3BpYy5kZWxldGUoKQogICAgc3ViID0gdG9waWMuc3Vic2NyaXB0aW9uKHNlbGYuc3Vic2NyaXB0aW9uX25hbWUpCiAgICBpZiBzdWIuZXhpc3RzKCk6CiAgICAgIHN1Yi5kZWxldGUoKQoKICBkZWYgcnVuKHNlbGYpOgogICAgcXVlcmllcyA9IHsKICAgICAgICAwOiBxdWVyeTAsCiAgICAgICAgMTogcXVlcnkxLAogICAgICAgIDI6IHF1ZXJ5MiwgICMgVE9ETyhtYXJpYWdoKTogQWRkIG1vcmUgcXVlcmllcy4KICAgIH0KCiAgICAjIFRPRE8obWFyaWFnaCk6IE1vdmUgdG8gYSBjb25maWcgZmlsZS4KICAgIHF1ZXJ5X2FyZ3MgPSB7MjogeydhdWN0aW9uX2lkJzogJ2ExMDAzJ319CgogICAgcXVlcnlfZXJyb3JzID0gW10KICAgIGZvciBpIGluIHNlbGYuYXJncy5xdWVyeToKICAgICAgc2VsZi5wYXJzZV9hcmdzKCkKICAgICAgbG9nZ2luZy5pbmZvKCdSdW5uaW5nIHF1ZXJ5ICVkJywgaSkKCiAgICAgICMgVGhlIERpcmVjdFJ1bm5lciBpcyB0aGUgZGVmYXVsdCBydW5uZXIsIGFuZCBpdCBuZWVkcwogICAgICAjIHNwZWNpYWwgaGFuZGxpbmcgdG8gY2FuY2VsIHN0cmVhbWluZyBqb2JzLgogICAgICBsYXVuY2hfZnJvbV9kaXJlY3RfcnVubmVyID0gc2VsZi5waXBlbGluZV9vcHRpb25zLnZpZXdfYXMoCiAgICAgICAgICBTdGFuZGFyZE9wdGlvbnMpLnJ1bm5lciBpbiBbTm9uZSwgJ0RpcmVjdFJ1bm5lciddCgogICAgICBxdWVyeV9kdXJhdGlvbiA9IHNlbGYucGlwZWxpbmVfb3B0aW9ucy52aWV3X2FzKFRlc3RPcHRpb25zKS53YWl0X3VudGlsX2ZpbmlzaF9kdXJhdGlvbiAgIyBweWxpbnQ6IGRpc2FibGU9bGluZS10b28tbG9uZwogICAgICBpZiBsYXVuY2hfZnJvbV9kaXJlY3RfcnVubmVyOgogICAgICAgIGNvbW1hbmQgPSBDb21tYW5kKAogICAgICAgICAgICBzZWxmLnJ1bl9xdWVyeSwgYXJncz1bcXVlcmllc1tpXSwgcXVlcnlfYXJncy5nZXQoaSksIHF1ZXJ5X2Vycm9yc10pCiAgICAgICAgY29tbWFuZC5ydW4odGltZW91dD1xdWVyeV9kdXJhdGlvbiAvLyAxMDAwKQogICAgICBlbHNlOgogICAgICAgIHRyeToKICAgICAgICAgIHNlbGYucnVuX3F1ZXJ5KHF1ZXJpZXNbaV0sIHF1ZXJ5X2FyZ3MuZ2V0KGkpLCBxdWVyeV9lcnJvcnM9Tm9uZSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKICAgICAgICAgIHF1ZXJ5X2Vycm9ycy5hcHBlbmQoZXhjKQoKICAgIGlmIHF1ZXJ5X2Vycm9yczoKICAgICAgbG9nZ2luZy5lcnJvcignUXVlcnkgZmFpbGVkIHdpdGggJXMnLCAnLCAnLmpvaW4ocXVlcnlfZXJyb3JzKSkKICAgIGVsc2U6CiAgICAgIGxvZ2dpbmcuaW5mbygnUXVlcmllcyBydW46ICVzJywgc2VsZi5hcmdzLnF1ZXJ5KQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbGF1bmNoZXIgPSBOZXhtYXJrTGF1bmNoZXIoKQogIGxhdW5jaGVyLnJ1bigpCiAgbGF1bmNoZXIuY2xlYW51cCgpCpR9lCiMGE5leG1hcmtMYXVuY2hlci5fX2luaXRfX5RqVjEBAEtUS2WHlIwaTmV4bWFya0xhdW5jaGVyLnBhcnNlX2FyZ3OUalYxAQBLZ0umh5SMH05leG1hcmtMYXVuY2hlci5nZW5lcmF0ZV9ldmVudHOUalYxAQBLqEvEh5SMGU5leG1hcmtMYXVuY2hlci5ydW5fcXVlcnmUalYxAQBLxkvWh5SMF05leG1hcmtMYXVuY2hlci5jbGVhbnVwlGpWMQEAS9hL34eUjBNOZXhtYXJrTGF1bmNoZXIucnVulGpWMQEAS+FNAwGHlIwPTmV4bWFya0xhdW5jaGVylGpdMQEAS1NNAwGHlHV9lCiMD05leG1hcmtMYXVuY2hlcpRqSwMAAIwaTmV4bWFya0xhdW5jaGVyLnBhcnNlX2FyZ3OUaksDAACMH05leG1hcmtMYXVuY2hlci5nZW5lcmF0ZV9ldmVudHOUaksDAACMGU5leG1hcmtMYXVuY2hlci5ydW5fcXVlcnmUaksDAACMF05leG1hcmtMYXVuY2hlci5jbGVhbnVwlGpLAwAAjBNOZXhtYXJrTGF1bmNoZXIucnVulGpLAwAAdYw3YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya19sYXVuY2hlcpR0lIwzYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlslChY7AwAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXRpbGl0aWVzIGZvciB0aGUgTmV4bWFyayBzdWl0ZS4KClRoZSBOZXhtYXJrIHN1aXRlIGlzIGEgc2VyaWVzIG9mIHF1ZXJpZXMgKHN0cmVhbWluZyBwaXBlbGluZXMpIHBlcmZvcm1lZApvbiBhIHNpbXVsYXRpb24gb2YgYXVjdGlvbiBldmVudHMuIFRoaXMgdXRpbCBpbmNsdWRlczoKCiAgLSBBIENvbW1hbmQgY2xhc3MgdXNlZCB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbWluZyBqb2JzCiAgICBsYXVuY2hlZCBpbiBuZXhtYXJrX2xhdW5jaGVyLnB5IGJ5IHRoZSBEaXJlY3RSdW5uZXIuCiAgLSBBIFBhcnNlRXZlbnRGbiBEb0ZuIHRvIHBhcnNlIGV2ZW50cyByZWNlaXZlZCBmcm9tIFB1YlN1Yi4KClVzYWdlOgoKVG8gcnVuIGEgcHJvY2VzcyBmb3IgYSBjZXJ0YWluIGR1cmF0aW9uLCBkZWZpbmUgaW4gdGhlIGNvZGU6CiAgY29tbWFuZCA9IENvbW1hbmQocHJvY2Vzc190b190ZXJtaW5hdGUsIGFyZ3MpCiAgY29tbWFuZC5ydW4odGltZW91dD1kdXJhdGlvbikKCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRocmVhZGluZwoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMgaW1wb3J0IG5leG1hcmtfbW9kZWwKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBDb21tYW5kKG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZCwgYXJncyk6CiAgICBzZWxmLmNtZCA9IGNtZAogICAgc2VsZi5hcmdzID0gYXJncwoKICBkZWYgcnVuKHNlbGYsIHRpbWVvdXQpOgogICAgZGVmIHRocmVhZF90YXJnZXQoKToKICAgICAgbG9nZ2luZy5kZWJ1ZygKICAgICAgICAgICdTdGFydGluZyB0aHJlYWQgZm9yICVkIHNlY29uZHM6ICVzJywgdGltZW91dCwgc2VsZi5jbWQuX19uYW1lX18pCgogICAgICBzZWxmLmNtZCgqc2VsZi5hcmdzKQogICAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgICAnJWQgc2Vjb25kcyBlbGFwc2VkLiBUaHJlYWQgKCVzKSBmaW5pc2hlZC4nLAogICAgICAgICAgdGltZW91dCwKICAgICAgICAgIHNlbGYuY21kLl9fbmFtZV9fKQoKICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXRocmVhZF90YXJnZXQsIG5hbWU9J1RocmVhZC10aW1lb3V0JykKICAgIHRocmVhZC5kYWVtb24gPSBUcnVlCiAgICB0aHJlYWQuc3RhcnQoKQogICAgdGhyZWFkLmpvaW4odGltZW91dCkKCgpjbGFzcyBQYXJzZUV2ZW50Rm4oYmVhbS5Eb0ZuKToKICAiIiJQYXJzZXMgdGhlIHJhdyBldmVudCBpbmZvIGludG8gYSBQeXRob24gb2JqZWN0cy4KCiAgRWFjaCBldmVudCBsaW5lIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKCiAgICBwZXJzb246IDxpZCBzdGFydGluZyB3aXRoICdwJz4sbmFtZSxlbWFpbCxjcmVkaXRfY2FyZCxjaXR5LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsdGltZXN0YW1wLGV4dHJhCiAgICBhdWN0aW9uOiA8aWQgc3RhcnRpbmcgd2l0aCAnYSc+LGl0ZW1fbmFtZSwgZGVzY3JpcHRpb24saW5pdGlhbF9iaWQsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlX3ByaWNlLHRpbWVzdGFtcCxleHBpcmVzLHNlbGxlcixjYXRlZ29yeSxleHRyYQogICAgYmlkOiA8YXVjdGlvbiBzdGFydGluZyB3aXRoICdiJz4sYmlkZGVyLHByaWNlLHRpbWVzdGFtcCxleHRyYQoKICBGb3IgZXhhbXBsZToKCiAgICAncDEyMzQ1LG1hcmlhLG1hcmlhQG1hcmlhLmNvbSwxMjM0LTU2NzgtOTAxMi0zNDU2LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW5ueXZhbGUsQ0EsMTUyODA5ODgzMTUzNicKICAgICdhMTIzNDUsY2FyNjcsMjAxMiBoeXVuZGFpIGVsYW50cmEsMTUwMDAsMjAwMDAsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MjgwOTg4MzE1MzYsMjAxODA2MzAsbWFyaWEsdmVoaWNsZScKICAgICdiMTIzNDUsbWFyaWEsMjAwMDAsMTUyODA5ODgzMTUzNicKICAiIiIKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtKToKICAgIG1vZGVsX2RpY3QgPSB7CiAgICAgICAgJ3AnOiBuZXhtYXJrX21vZGVsLlBlcnNvbiwKICAgICAgICAnYSc6IG5leG1hcmtfbW9kZWwuQXVjdGlvbiwKICAgICAgICAnYic6IG5leG1hcmtfbW9kZWwuQmlkLAogICAgfQogICAgcm93ID0gZWxlbS5zcGxpdCgnLCcpCiAgICBtb2RlbCA9IG1vZGVsX2RpY3QuZ2V0KGVsZW1bMF0pCiAgICBpZiBub3QgbW9kZWw6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZXZlbnQ6ICVzLicgJSByb3cpCgogICAgZXZlbnQgPSBtb2RlbCgqcm93KQogICAgbG9nZ2luZy5kZWJ1ZygnUGFyc2VkIGV2ZW50OiAlcycsIGV2ZW50KQogICAgeWllbGQgZXZlbnQKCgpkZWYgZGlzcGxheShlbG0pOgogIGxvZ2dpbmcuZGVidWcoZWxtKQogIHJldHVybiBlbG0KlJWZNgEAAAAAAH2UKIwQQ29tbWFuZC5fX2luaXRfX5RqVjEBAEsySzSHlIwLQ29tbWFuZC5ydW6UalYxAQBLNktEh5SMB0NvbW1hbmSUal0xAQBLMUtEh5SMFFBhcnNlRXZlbnRGbi5wcm9jZXNzlGpWMQEAS1pLZ4eUjAxQYXJzZUV2ZW50Rm6Ual0xAQBLR0tnh5SMB2Rpc3BsYXmUalYxAQBLaktsh5R1fZQojAdDb21tYW5klGqGAwAAjAtDb21tYW5kLnJ1bpRqhgMAAIwMUGFyc2VFdmVudEZulGqGAwAAjBRQYXJzZUV2ZW50Rm4ucHJvY2Vzc5RqhgMAAIwHZGlzcGxheZRqhgMAAHWMM2FwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbJR0lIw1YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTCUKFiMBQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJOZXhtYXJrIFF1ZXJ5IDA6IFBhc3MgdGhyb3VnaCAoc2VuZCBhbmQgcmVjZWl2ZSBhdWN0aW9uIGV2ZW50cykuCgpUaGUgTmV4bWFyayBzdWl0ZSBpcyBhIHNlcmllcyBvZiBxdWVyaWVzIChzdHJlYW1pbmcgcGlwZWxpbmVzKSBwZXJmb3JtZWQKb24gYSBzaW11bGF0aW9uIG9mIGF1Y3Rpb24gZXZlbnRzLgoKVGhpcyBxdWVyeSBpcyBhIHBhc3MgdGhyb3VnaCB0aGF0CnNpbXBseSBwYXJzZXMgdGhlIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdGhlIGxhdW5jaGVyLiBJdCBzZXJ2ZXMgYXMgYSB0ZXN0CnRvIHZlcmlmeSB0aGUgaW5mcmFzdHJ1Y3R1cmUuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsubmV4bWFya191dGlsIGltcG9ydCBQYXJzZUV2ZW50Rm4KCgpkZWYgbG9hZChyYXdfZXZlbnRzLCBxdWVyeV9hcmdzPU5vbmUpOgogIHJldHVybiByYXdfZXZlbnRzIHwgJ1BhcnNlRXZlbnRGbicgPj4gYmVhbS5QYXJEbyhQYXJzZUV2ZW50Rm4oKSkgICMgcHlsaW50OiBkaXNhYmxlPWV4cHJlc3Npb24tbm90LWFzc2lnbmVkCpR9lIwEbG9hZJRqVjEBAEskSyWHlHN9lIwEbG9hZJRqGwQAAHOMNWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkwlHSUjDVhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MZQoWFYHAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk5leG1hcmsgUXVlcnkgMTogQ29udmVydCBiaWQgcHJpY2VzIGZyb20gZG9sbGFycyB0byBldXJvcy4KClRoZSBOZXhtYXJrIHN1aXRlIGlzIGEgc2VyaWVzIG9mIHF1ZXJpZXMgKHN0cmVhbWluZyBwaXBlbGluZXMpIHBlcmZvcm1lZApvbiBhIHNpbXVsYXRpb24gb2YgYXVjdGlvbiBldmVudHMuCgpUaGlzIHF1ZXJ5IGNvbnZlcnRzIGJpZCBwcmljZXMgZnJvbSBkb2xsYXJzIHRvIGV1cm9zLgpJdCBpbGx1c3RyYXRlcyBhIHNpbXBsZSBtYXAuCiIiIgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMgaW1wb3J0IG5leG1hcmtfbW9kZWwKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwgaW1wb3J0IFBhcnNlRXZlbnRGbgpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbCBpbXBvcnQgZGlzcGxheQoKCmRlZiBsb2FkKHJhd19ldmVudHMsIHF1ZXJ5X2FyZ3M9Tm9uZSk6CiAgcmV0dXJuICgKICAgICAgcmF3X2V2ZW50cwogICAgICB8ICdQYXJzZUV2ZW50Rm4nID4+IGJlYW0uUGFyRG8oUGFyc2VFdmVudEZuKCkpCiAgICAgIHwgJ0ZpbHRlckluQmlkcycgPj4KICAgICAgYmVhbS5GaWx0ZXIobGFtYmRhIGV2ZW50OiBpc2luc3RhbmNlKGV2ZW50LCBuZXhtYXJrX21vZGVsLkJpZCkpCiAgICAgIHwgJ0NvbnZlcnRUb0V1cm8nID4+IGJlYW0uTWFwKAogICAgICAgICAgbGFtYmRhIGJpZDogbmV4bWFya19tb2RlbC5CaWQoCiAgICAgICAgICAgICAgYmlkLmF1Y3Rpb24sCiAgICAgICAgICAgICAgYmlkLmJpZGRlciwgKGZsb2F0KGJpZC5wcmljZSkgKiA4OSkgLy8gMTAwLAogICAgICAgICAgICAgIGJpZC50aW1lc3RhbXAsCiAgICAgICAgICAgICAgYmlkLmV4dHJhKSkKICAgICAgfCAnRGlzcGxheVF1ZXJ5MScgPj4gYmVhbS5NYXAoZGlzcGxheSkpICAjIHB5bGludDogZGlzYWJsZT1leHByZXNzaW9uLW5vdC1hc3NpZ25lZAqUfZSMBGxvYWSUalYxAQBLJEswh5RzfZSMBGxvYWSUapYDAABzjDVhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5xdWVyaWVzLnF1ZXJ5MZR0lIw1YXBhY2hlX2JlYW0udGVzdGluZy5iZW5jaG1hcmtzLm5leG1hcmsucXVlcmllcy5xdWVyeTKUKFjiBgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJOZXhtYXJrIFF1ZXJ5IDI6IFNlbGVjdCBhdWN0aW9ucyBieSBhdWN0aW9uIGlkLgoKVGhlIE5leG1hcmsgc3VpdGUgaXMgYSBzZXJpZXMgb2YgcXVlcmllcyAoc3RyZWFtaW5nIHBpcGVsaW5lcykgcGVyZm9ybWVkCm9uIGEgc2ltdWxhdGlvbiBvZiBhdWN0aW9uIGV2ZW50cy4KClRoaXMgcXVlcnkgc2VsZWN0cyBhdWN0aW9ucyAoaXRlbXMpIHRoYXQgaGF2ZSBhIHBhcnRpY3VsYXIgaWQuCkl0IGlsbHVzdHJhdGVzIGEgc2ltcGxlIGZpbHRlci4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5tb2RlbHMgaW1wb3J0IG5leG1hcmtfbW9kZWwKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmJlbmNobWFya3MubmV4bWFyay5uZXhtYXJrX3V0aWwgaW1wb3J0IFBhcnNlRXZlbnRGbgpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLm5leG1hcmtfdXRpbCBpbXBvcnQgZGlzcGxheQoKCmRlZiBsb2FkKHJhd19ldmVudHMsIG1ldGFkYXRhPU5vbmUpOgogIHJldHVybiAoCiAgICAgIHJhd19ldmVudHMKICAgICAgfCAnUGFyc2VFdmVudEZuJyA+PiBiZWFtLlBhckRvKFBhcnNlRXZlbnRGbigpKQogICAgICB8ICdGaWx0ZXJJbkF1Y3Rpb25zV2l0aFNlbGVjdGVkSWQnID4+IGJlYW0uRmlsdGVyKAogICAgICAgICAgbGFtYmRhIGV2ZW50OiAoCiAgICAgICAgICAgICAgaXNpbnN0YW5jZShldmVudCwgbmV4bWFya19tb2RlbC5BdWN0aW9uKSBhbmQgZXZlbnQuaWQgPT0gbWV0YWRhdGEuCiAgICAgICAgICAgICAgZ2V0KCdhdWN0aW9uX2lkJykpKQogICAgICB8ICdEaXNwbGF5UXVlcnkyJyA+PiBiZWFtLk1hcChkaXNwbGF5KSkgICMgcHlsaW50OiBkaXNhYmxlPWV4cHJlc3Npb24tbm90LWFzc2lnbmVkCpR9lIwEbG9hZJRqVjEBAEslSy2HlHN9lIwEbG9hZJRqegMAAHOMNWFwYWNoZV9iZWFtLnRlc3RpbmcuYmVuY2htYXJrcy5uZXhtYXJrLnF1ZXJpZXMucXVlcnkylHSUjCZhcGFjaGVfYmVhbS50ZXN0aW5nLmRhdGF0eXBlX2luZmVyZW5jZZQoWMoQAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcnJheQppbXBvcnQganNvbgpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHRyaXZpYWxfaW5mZXJlbmNlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0eXBlaGludHMKCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCnRyeToKICBmcm9tIGF2cm8uc2NoZW1hIGltcG9ydCBQYXJzZSAgIyBhdnJvLXB5dGhvbjMgbGlicmFyeSBmb3IgcHl0aG9uMwpleGNlcHQgSW1wb3J0RXJyb3I6CiAgZnJvbSBhdnJvLnNjaGVtYSBpbXBvcnQgcGFyc2UgYXMgUGFyc2UgICMgYXZybyBsaWJyYXJ5IGZvciBweXRob24yCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KCnRyeToKICBpbXBvcnQgcHlhcnJvdyBhcyBwYQpleGNlcHQgSW1wb3J0RXJyb3I6CiAgcGEgPSBOb25lCgoKZGVmIGluZmVyX2VsZW1lbnRfdHlwZShlbGVtZW50cyk6CiAgIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBJbmZlciBhIEJlYW0gdHlwZSBmb3IgYSBsaXN0IG9mIGVsZW1lbnRzLgoKICBBcmdzOgogICAgZWxlbWVudHMgKExpc3RbQW55XSk6IEEgbGlzdCBvZiBlbGVtZW50cyBmb3Igd2hpY2ggdGhlIHR5cGUgc2hvdWxkIGJlCiAgICAgICAgaW5mZXJyZWQuCgogIFJldHVybnM6CiAgICBBIEJlYW0gdHlwZSBlbmNvbXBhc3NpbmcgYWxsIGVsZW1lbnRzLgogICIiIgogIGVsZW1lbnRfdHlwZSA9IHR5cGVoaW50cy5VbmlvbltbCiAgICAgIHRyaXZpYWxfaW5mZXJlbmNlLmluc3RhbmNlX3RvX3R5cGUoZSkgZm9yIGUgaW4gZWxlbWVudHMKICBdXQogIHJldHVybiBlbGVtZW50X3R5cGUKCgpkZWYgaW5mZXJfdHlwZWhpbnRzX3NjaGVtYShkYXRhKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEluZmVyIEJlYW0gdHlwZXMgZm9yIHRhYnVsYXIgZGF0YS4KCiAgQXJnczoKICAgIGRhdGEgKExpc3RbZGljdF0pOiBBIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyByb3dzIGluIGEgdGFibGUuCgogIFJldHVybnM6CiAgICBBbiBPcmRlcmVkRGljdCBtYXBwaW5nIGNvbHVtbiBuYW1lcyB0byBCZWFtIHR5cGVzLgogICIiIgogIGNvbHVtbl9kYXRhID0gT3JkZXJlZERpY3QoKQogIGZvciByb3cgaW4gZGF0YToKICAgIGZvciBrZXksIHZhbHVlIGluIHJvdy5pdGVtcygpOgogICAgICBjb2x1bW5fZGF0YS5zZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2YWx1ZSkKICBjb2x1bW5fdHlwZXMgPSBPcmRlcmVkRGljdChbCiAgICAgIChrZXksIGluZmVyX2VsZW1lbnRfdHlwZSh2YWx1ZXMpKSBmb3Iga2V5LCB2YWx1ZXMgaW4gY29sdW1uX2RhdGEuaXRlbXMoKQogIF0pCiAgcmV0dXJuIGNvbHVtbl90eXBlcwoKCmRlZiBpbmZlcl9hdnJvX3NjaGVtYShkYXRhLCB1c2VfZmFzdGF2cm89RmFsc2UpOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgSW5mZXIgYXZybyBzY2hlbWEgZm9yIHRhYnVsYXIgZGF0YS4KCiAgQXJnczoKICAgIGRhdGEgKExpc3RbZGljdF0pOiBBIGxpc3Qgb2YgZGljdGlvbmFyaWVzIHJlcHJlc2VudGluZyByb3dzIGluIGEgdGFibGUuCiAgICB1c2VfZmFzdGF2cm8gKGJvb2wpOiBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzY2hlbWEgc2hvdWxkIGJlCiAgICAgICAgY29uc3RydWN0ZWQgdXNpbmcgZmFzdGF2cm8uCgogIFJldHVybnM6CiAgICBBbiBhdnJvIHNjaGVtYSBvYmplY3QuCiAgIiIiCiAgX3R5cGVoaW50X3RvX2F2cm9fdHlwZSA9IHsKICAgICAgdHlwZShOb25lKTogIm51bGwiLAogICAgICBpbnQ6ICJpbnQiLAogICAgICBmbG9hdDogImRvdWJsZSIsCiAgICAgIHN0cjogInN0cmluZyIsCiAgICAgIHVuaWNvZGU6ICJzdHJpbmciLAogICAgICBieXRlczogImJ5dGVzIiwKICAgICAgbnAubmRhcnJheTogImJ5dGVzIiwKICAgICAgYXJyYXkuYXJyYXk6ICJieXRlcyIsCiAgfQoKICBkZWYgdHlwZWhpbnRfdG9fYXZyb190eXBlKHZhbHVlKToKICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHR5cGVoaW50cy5VbmlvbkNvbnN0cmFpbnQpOgogICAgICByZXR1cm4gc29ydGVkKAogICAgICAgICAgdHlwZWhpbnRfdG9fYXZyb190eXBlKHVuaW9uX3R5cGUpIGZvciB1bmlvbl90eXBlIGluIHZhbHVlLnVuaW9uX3R5cGVzKQogICAgZWxzZToKICAgICAgcmV0dXJuIF90eXBlaGludF90b19hdnJvX3R5cGVbdmFsdWVdCgogIGNvbHVtbl90eXBlcyA9IGluZmVyX3R5cGVoaW50c19zY2hlbWEoZGF0YSkKICBhdnJvX2ZpZWxkcyA9IFt7CiAgICAgICJuYW1lIjogc3RyKGtleSksICJ0eXBlIjogdHlwZWhpbnRfdG9fYXZyb190eXBlKHZhbHVlKQogIH0gZm9yIGtleSwKICAgICAgICAgICAgICAgICB2YWx1ZSBpbiBjb2x1bW5fdHlwZXMuaXRlbXMoKV0KICBzY2hlbWFfZGljdCA9IHsKICAgICAgIm5hbWVzcGFjZSI6ICJleGFtcGxlLmF2cm8iLAogICAgICAibmFtZSI6ICJVc2VyIiwKICAgICAgInR5cGUiOiAicmVjb3JkIiwKICAgICAgImZpZWxkcyI6IGF2cm9fZmllbGRzCiAgfQogIGlmIHVzZV9mYXN0YXZybzoKICAgIGZyb20gZmFzdGF2cm8gaW1wb3J0IHBhcnNlX3NjaGVtYQogICAgcmV0dXJuIHBhcnNlX3NjaGVtYShzY2hlbWFfZGljdCkKICBlbHNlOgogICAgcmV0dXJuIFBhcnNlKGpzb24uZHVtcHMoc2NoZW1hX2RpY3QpKQoKCmRlZiBpbmZlcl9weWFycm93X3NjaGVtYShkYXRhKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEluZmVyIFB5QXJyb3cgc2NoZW1hIGZvciB0YWJ1bGFyIGRhdGEuCgogIEFyZ3M6CiAgICBkYXRhIChMaXN0W2RpY3RdKTogQSBsaXN0IG9mIGRpY3Rpb25hcmllcyByZXByZXNlbnRpbmcgcm93cyBpbiBhIHRhYmxlLgoKICBSZXR1cm5zOgogICAgQSBQeUFycm93IHNjaGVtYSBvYmplY3QuCiAgIiIiCiAgY29sdW1uX2RhdGEgPSBPcmRlcmVkRGljdCgpCiAgZm9yIHJvdyBpbiBkYXRhOgogICAgZm9yIGtleSwgdmFsdWUgaW4gcm93Lml0ZW1zKCk6CiAgICAgIGNvbHVtbl9kYXRhLnNldGRlZmF1bHQoa2V5LCBbXSkuYXBwZW5kKHZhbHVlKQogIGNvbHVtbl90eXBlcyA9IE9yZGVyZWREaWN0KFsKICAgICAgKGtleSwgcGEuYXJyYXkodmFsdWUpLnR5cGUpIGZvciBrZXksIHZhbHVlIGluIGNvbHVtbl9kYXRhLml0ZW1zKCkKICBdKQogIHJldHVybiBwYS5zY2hlbWEobGlzdChjb2x1bW5fdHlwZXMuaXRlbXMoKSkpCpR9lCiMEmluZmVyX2VsZW1lbnRfdHlwZZRqVjEBAEssSzuHlIwWaW5mZXJfdHlwZWhpbnRzX3NjaGVtYZRqVjEBAEs+S1CHlIwRaW5mZXJfYXZyb19zY2hlbWGUalYxAQBLU0uBh5SMFGluZmVyX3B5YXJyb3dfc2NoZW1hlGpWMQEAS4RLloeUdX2UKIwSaW5mZXJfZWxlbWVudF90eXBllGr1AwAAjBZpbmZlcl90eXBlaGludHNfc2NoZW1hlGr1AwAAjBFpbmZlcl9hdnJvX3NjaGVtYZRq9QMAAIwUaW5mZXJfcHlhcnJvd19zY2hlbWGUavUDAAB1jCZhcGFjaGVfYmVhbS50ZXN0aW5nLmRhdGF0eXBlX2luZmVyZW5jZZR0lIwkYXBhY2hlX2JlYW0udGVzdGluZy5leHRyYV9hc3NlcnRpb25zlChYewgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHN5cwoKaW1wb3J0IG51bXB5IGFzIG5wCgoKY2xhc3MgRXh0cmFBc3NlcnRpb25zTWl4aW4ob2JqZWN0KToKCiAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CgogICAgZGVmIGFzc2VydENvdW50RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgogICAgICAiIiJBc3NlcnQgdGhhdCB0d28gY29udGFpbmVycyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiB0aGUgc2FtZSBpdGVtcyBpbgogICAgICBhbnkgb3JkZXIuCiAgICAgICIiIgogICAgICByZXR1cm4gc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZpcnN0LCBzZWNvbmQsIG1zZz1tc2cpCgogIGRlZiBhc3NlcnRVbmhhc2hhYmxlQ291bnRFcXVhbChzZWxmLCBkYXRhMSwgZGF0YTIpOgogICAgIiIiQXNzZXJ0IHRoYXQgdHdvIGNvbnRhaW5lcnMgaGF2ZSB0aGUgc2FtZSBpdGVtcywgd2l0aCBzcGVjaWFsIHRyZWF0bWVudAogICAgZm9yIG51bXB5IGFycmF5cy4KICAgICIiIgogICAgdHJ5OgogICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoZGF0YTEsIGRhdGEyKQogICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICBkYXRhMSA9IFtzZWxmLl90b19oYXNoYWJsZShkKSBmb3IgZCBpbiBkYXRhMV0KICAgICAgZGF0YTIgPSBbc2VsZi5fdG9faGFzaGFibGUoZCkgZm9yIGQgaW4gZGF0YTJdCiAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChkYXRhMSwgZGF0YTIpCgogIGRlZiBfdG9faGFzaGFibGUoc2VsZiwgZWxlbWVudCk6CiAgICB0cnk6CiAgICAgIGhhc2goZWxlbWVudCkKICAgICAgcmV0dXJuIGVsZW1lbnQKICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgIHBhc3MKCiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIGxpc3QpOgogICAgICByZXR1cm4gdHVwbGUoc2VsZi5fdG9faGFzaGFibGUoZSkgZm9yIGUgaW4gZWxlbWVudCkKCiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIGRpY3QpOgogICAgICBoYXNoYWJsZV9lbGVtZW50cyA9IFtdCiAgICAgIGZvciBrZXksIHZhbHVlIGluIHNvcnRlZChlbGVtZW50Lml0ZW1zKCksIGtleT1sYW1iZGEgdDogaGFzaCh0WzBdKSk6CiAgICAgICAgaGFzaGFibGVfZWxlbWVudHMuYXBwZW5kKChrZXksIHNlbGYuX3RvX2hhc2hhYmxlKHZhbHVlKSkpCiAgICAgIHJldHVybiB0dXBsZShoYXNoYWJsZV9lbGVtZW50cykKCiAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIG5wLm5kYXJyYXkpOgogICAgICByZXR1cm4gZWxlbWVudC50b2J5dGVzKCkKCiAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiRW5jb3VudGVyZWQgdW5oYXNoYWJsZSBlbGVtZW50OiB7fS4iLmZvcm1hdChlbGVtZW50KSkKlH2UKIwlRXh0cmFBc3NlcnRpb25zTWl4aW4uYXNzZXJ0Q291bnRFcXVhbJRqVjEBAEseSyKHlIwvRXh0cmFBc3NlcnRpb25zTWl4aW4uYXNzZXJ0VW5oYXNoYWJsZUNvdW50RXF1YWyUalYxAQBLJEsth5SMIUV4dHJhQXNzZXJ0aW9uc01peGluLl90b19oYXNoYWJsZZRqVjEBAEsvS0KHlIwURXh0cmFBc3NlcnRpb25zTWl4aW6Ual0xAQBLGktCh5R1fZQojBRFeHRyYUFzc2VydGlvbnNNaXhpbpRq2QMAAIwvRXh0cmFBc3NlcnRpb25zTWl4aW4uYXNzZXJ0VW5oYXNoYWJsZUNvdW50RXF1YWyUatkDAAB1jCRhcGFjaGVfYmVhbS50ZXN0aW5nLmV4dHJhX2Fzc2VydGlvbnOUdJSMNmFwYWNoZV9iZWFtLnRlc3RpbmcubG9hZF90ZXN0cy5sb2FkX3Rlc3RfbWV0cmljc191dGlsc5QoWA45AAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIgpVdGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGZvciBpbnRlZ3JhdGluZyBNZXRyaWNzIEFQSSBpbnRvIGxvYWQgdGVzdHMgcGlwZWxpbmVzLgoKTWV0cmljcyBhcmUgc2VuZCB0byBCaWdRdWVyeSBpbiBmb2xsb3dpbmcgZm9ybWF0Ogp0ZXN0X2lkIHwgc3VibWl0X3RpbWVzdGFtcCB8IG1ldHJpY190eXBlIHwgdmFsdWUKClRoZSAndGVzdF9pZCcgaXMgY29tbW9uIGZvciBhbGwgbWV0cmljcyBmb3Igb25lIHJ1bi4KQ3VycmVudGx5IGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgZm9sbG93aW5nIG1ldHJpY3MgdHlwZXM6CiogcnVudGltZQoqIHRvdGFsX2J5dGVzX2NvdW50CiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmltcG9ydCB0aW1lCmltcG9ydCB1dWlkCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKCnRyeToKICBmcm9tIGdvb2dsZS5jbG91ZCBpbXBvcnQgYmlncXVlcnkKICBmcm9tIGdvb2dsZS5jbG91ZC5iaWdxdWVyeS5zY2hlbWEgaW1wb3J0IFNjaGVtYUZpZWxkCiAgZnJvbSBnb29nbGUuY2xvdWQuZXhjZXB0aW9ucyBpbXBvcnQgTm90Rm91bmQKZXhjZXB0IEltcG9ydEVycm9yOgogIGJpZ3F1ZXJ5ID0gTm9uZQogIFNjaGVtYUZpZWxkID0gTm9uZQogIE5vdEZvdW5kID0gTm9uZQoKUlVOVElNRV9NRVRSSUMgPSAncnVudGltZScKQ09VTlRFUl9MQUJFTCA9ICd0b3RhbF9ieXRlc19jb3VudCcKCklEX0xBQkVMID0gJ3Rlc3RfaWQnClNVQk1JVF9USU1FU1RBTVBfTEFCRUwgPSAndGltZXN0YW1wJwpNRVRSSUNTX1RZUEVfTEFCRUwgPSAnbWV0cmljJwpWQUxVRV9MQUJFTCA9ICd2YWx1ZScKClNDSEVNQSA9IFt7CiAgICAnbmFtZSc6IElEX0xBQkVMLCAnZmllbGRfdHlwZSc6ICdTVFJJTkcnLCAnbW9kZSc6ICdSRVFVSVJFRCcKfSwKICAgICAgICAgIHsKICAgICAgICAgICAgICAnbmFtZSc6IFNVQk1JVF9USU1FU1RBTVBfTEFCRUwsCiAgICAgICAgICAgICAgJ2ZpZWxkX3R5cGUnOiAnVElNRVNUQU1QJywKICAgICAgICAgICAgICAnbW9kZSc6ICdSRVFVSVJFRCcKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICAgJ25hbWUnOiBNRVRSSUNTX1RZUEVfTEFCRUwsCiAgICAgICAgICAgICAgJ2ZpZWxkX3R5cGUnOiAnU1RSSU5HJywKICAgICAgICAgICAgICAnbW9kZSc6ICdSRVFVSVJFRCcKICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAnbmFtZSc6IFZBTFVFX0xBQkVMLCAnZmllbGRfdHlwZSc6ICdGTE9BVCcsICdtb2RlJzogJ1JFUVVJUkVEJwogICAgICAgICAgfV0KCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpkZWYgcGFyc2Vfc3RlcChzdGVwX25hbWUpOgogICIiIlJlcGxhY2VzIHdoaXRlIHNwYWNlcyBhbmQgcmVtb3ZlcyAnU3RlcDonIGxhYmVsCgogIEFyZ3M6CiAgICBzdGVwX25hbWUoc3RyKTogc3RlcCBuYW1lIHBhc3NlZCBpbiBtZXRyaWMgUGFyRG8KCiAgUmV0dXJuczoKICAgIGxvd2VyIGNhc2Ugc3RlcCBuYW1lIHdpdGhvdXQgbmFtZXNwYWNlIGFuZCBzdGVwIGxhYmVsCiAgIiIiCiAgcmV0dXJuIHN0ZXBfbmFtZS5sb3dlcigpLnJlcGxhY2UoJyAnLCAnXycpLnN0cmlwKCdzdGVwOl8nKQoKCmRlZiBzcGxpdF9tZXRyaWNzX2J5X25hbWVzcGFjZV9hbmRfbmFtZShtZXRyaWNzLCBuYW1lc3BhY2UsIG5hbWUpOgogICIiIlNwbGl0cyBtZXRyaWNzIGxpc3QgbmFtZXNwYWNlIGFuZCBuYW1lLgoKICBBcmdzOgogICAgbWV0cmljczogbGlzdCBvZiBtZXRyaWNzIGZyb20gcGlwZWxpbmUgcmVzdWx0CiAgICBuYW1lc3BhY2Uoc3RyKTogZmlsdGVyIG1ldHJpY3MgYnkgbmFtZXNwYWNlCiAgICBuYW1lKHN0cik6IGZpbHRlciBtZXRyaWNzIGJ5IG5hbWUKCiAgUmV0dXJuczoKICAgIHR3byBsaXN0cyAtIG9uZSBvZiBtZXRyaWNzIHdoaWNoIGFyZSBtYXRjaGluZyBmaWx0ZXJzCiAgICBhbmQgc2Vjb25kIG9mIG5vdCBtYXRjaGluZwogICIiIgogIG1hdGNoaW5nX21ldHJpY3MgPSBbXQogIG5vdF9tYXRjaGluZ19tZXRyaWNzID0gW10KICBmb3IgZGlzdCBpbiBtZXRyaWNzOgogICAgaWYgZGlzdC5rZXkubWV0cmljLm5hbWVzcGFjZSA9PSBuYW1lc3BhY2VcCiAgICAgICAgYW5kIGRpc3Qua2V5Lm1ldHJpYy5uYW1lID09IG5hbWU6CiAgICAgIG1hdGNoaW5nX21ldHJpY3MuYXBwZW5kKGRpc3QpCiAgICBlbHNlOgogICAgICBub3RfbWF0Y2hpbmdfbWV0cmljcy5hcHBlbmQoZGlzdCkKICByZXR1cm4gbWF0Y2hpbmdfbWV0cmljcywgbm90X21hdGNoaW5nX21ldHJpY3MKCgpkZWYgZ2V0X2dlbmVyaWNfZGlzdHJpYnV0aW9ucyhnZW5lcmljX2Rpc3RzLCBtZXRyaWNfaWQpOgogICIiIkNyZWF0ZXMgZmxhdHRlbiBsaXN0IG9mIGRpc3RyaWJ1dGlvbnMgcGVyIGl0cyB2YWx1ZSB0eXBlLgogIEEgZ2VuZXJpYyBkaXN0cmlidXRpb24gaXMgdGhlIG9uZSB3aGljaCBpcyBub3QgcHJvY2Vzc2VkIGJ1dCBzYXZlZCBpbgogIHRoZSBtb3N0IHJhdyB2ZXJzaW9uLgoKICBBcmdzOgogICAgZ2VuZXJpY19kaXN0czogbGlzdCBvZiBkaXN0cmlidXRpb25zIHRvIGJlIHNhdmVkCiAgICBtZXRyaWNfaWQodXVpZCk6IGlkIG9mIHRoZSBjdXJyZW50IHRlc3QgcnVuCgogIFJldHVybnM6CiAgICBsaXN0IG9mIGRpY3Rpb25hcmllcyBtYWRlIGZyb20gOmNsYXNzOmBEaXN0cmlidXRpb25NZXRyaWNgCiAgIiIiCiAgcmV0dXJuIHN1bSgoCiAgICAgIGdldF9hbGxfZGlzdHJpYnV0aW9uc19ieV90eXBlKGRpc3QsIG1ldHJpY19pZCkgZm9yIGRpc3QgaW4gZ2VuZXJpY19kaXN0cyksCiAgICAgICAgICAgICBbXSkKCgpkZWYgZ2V0X2FsbF9kaXN0cmlidXRpb25zX2J5X3R5cGUoZGlzdCwgbWV0cmljX2lkKToKICAiIiJDcmVhdGVzIG5ldyBsaXN0IG9mIG9iamVjdHMgd2l0aCB0eXBlIG9mIGVhY2ggZGlzdHJpYnV0aW9uCiAgbWV0cmljIHZhbHVlLgoKICBBcmdzOgogICAgZGlzdChvYmplY3QpOiBEaXN0cmlidXRpb25NZXRyaWMgb2JqZWN0IHRvIGJlIHBhcnNlZAogICAgbWV0cmljX2lkKHV1aWQpOiBpZCBvZiB0aGUgY3VycmVudCB0ZXN0IHJ1bgogIFJldHVybnM6CiAgICBsaXN0IG9mIDpjbGFzczpgRGlzdHJpYnV0aW9uTWV0cmljYCBvYmplY3RzCiAgIiIiCiAgc3VibWl0X3RpbWVzdGFtcCA9IHRpbWUudGltZSgpCiAgZGlzdF90eXBlcyA9IFsnbWVhbicsICdtYXgnLCAnbWluJywgJ3N1bSddCiAgcmV0dXJuIFsKICAgICAgZ2V0X2Rpc3RyaWJ1dGlvbl9kaWN0KGRpc3RfdHlwZSwgc3VibWl0X3RpbWVzdGFtcCwgZGlzdCwgbWV0cmljX2lkKQogICAgICBmb3IgZGlzdF90eXBlIGluIGRpc3RfdHlwZXMKICBdCgoKZGVmIGdldF9kaXN0cmlidXRpb25fZGljdChtZXRyaWNfdHlwZSwgc3VibWl0X3RpbWVzdGFtcCwgZGlzdCwgbWV0cmljX2lkKToKICAiIiJGdW5jdGlvbiBjcmVhdGVzIDpjbGFzczpgRGlzdHJpYnV0aW9uTWV0cmljYAoKICBBcmdzOgogICAgbWV0cmljX3R5cGUoc3RyKTogdHlwZSBvZiB2YWx1ZSBmcm9tIGRpc3RyaWJ1dGlvbiBtZXRyaWMgd2hpY2ggd2lsbAogICAgICBiZSBzYXZlZCAoZXguIG1heCwgbWluLCBtZWFuLCBzdW0pCiAgICBzdWJtaXRfdGltZXN0YW1wOiB0aW1lc3RhbXAgd2hlbiBtZXRyaWMgaXMgc2F2ZWQKICAgIGRpc3Qob2JqZWN0KSBkaXN0cmlidXRpb24gb2JqZWN0IGZyb20gcGlwZWxpbmUgcmVzdWx0CiAgICBtZXRyaWNfaWQodXVpZCk6IGlkIG9mIHRoZSBjdXJyZW50IHRlc3QgcnVuCgogIFJldHVybnM6CiAgICBkaWN0aW9uYXJ5IHByZXBhcmVkIGZvciBzYXZpbmcgYWNjb3JkaW5nIHRvIHNjaGVtYQogICIiIgogIHJldHVybiBEaXN0cmlidXRpb25NZXRyaWMoZGlzdCwgc3VibWl0X3RpbWVzdGFtcCwgbWV0cmljX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljX3R5cGUpLmFzX2RpY3QoKQoKCmNsYXNzIE1ldHJpY3NSZWFkZXIob2JqZWN0KToKICAiIiIKICBBIDpjbGFzczpgTWV0cmljc1JlYWRlcmAgcmV0cmlldmVzIG1ldHJpY3MgZnJvbSBwaXBlbGluZSByZXN1bHQsCiAgcHJlcGFyZXMgaXQgZm9yIHB1Ymxpc2hlcnMgYW5kIHNldHVwIHB1Ymxpc2hlcnMuCiAgIiIiCiAgcHVibGlzaGVycyA9IFtdICAjIHR5cGU6IExpc3RbQ29uc29sZU1ldHJpY3NQdWJsaXNoZXJdCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgcHJvamVjdF9uYW1lPU5vbmUsCiAgICAgIGJxX3RhYmxlPU5vbmUsCiAgICAgIGJxX2RhdGFzZXQ9Tm9uZSwKICAgICAgcHVibGlzaF90b19icT1GYWxzZSwKICAgICAgZmlsdGVycz1Ob25lKToKICAgICIiIkluaXRpYWxpemVzIDpjbGFzczpgTWV0cmljc1JlYWRlcmAgLgoKICAgIEFyZ3M6CiAgICAgIHByb2plY3RfbmFtZSAoc3RyKTogcHJvamVjdCB3aXRoIEJpZ1F1ZXJ5IHdoZXJlIG1ldHJpY3Mgd2lsbCBiZSBzYXZlZAogICAgICBicV90YWJsZSAoc3RyKTogQmlnUXVlcnkgdGFibGUgd2hlcmUgbWV0cmljcyB3aWxsIGJlIHNhdmVkCiAgICAgIGJxX2RhdGFzZXQgKHN0cik6IEJpZ1F1ZXJ5IGRhdGFzZXQgd2hlcmUgbWV0cmljcyB3aWxsIGJlIHNhdmVkCiAgICAgIGZpbHRlcnM6IE1ldHJpY0ZpbHRlciB0byBxdWVyeSBvbmx5IGZpbHRlcmVkIG1ldHJpY3MKICAgICIiIgogICAgc2VsZi5fbmFtZXNwYWNlID0gYnFfdGFibGUKICAgIHNlbGYucHVibGlzaGVycy5hcHBlbmQoQ29uc29sZU1ldHJpY3NQdWJsaXNoZXIoKSkKCiAgICBjaGVjayA9IHByb2plY3RfbmFtZSBhbmQgYnFfdGFibGUgYW5kIGJxX2RhdGFzZXQgYW5kIHB1Ymxpc2hfdG9fYnEKICAgIGlmIGNoZWNrOgogICAgICBicV9wdWJsaXNoZXIgPSBCaWdRdWVyeU1ldHJpY3NQdWJsaXNoZXIoCiAgICAgICAgICBwcm9qZWN0X25hbWUsIGJxX3RhYmxlLCBicV9kYXRhc2V0KQogICAgICBzZWxmLnB1Ymxpc2hlcnMuYXBwZW5kKGJxX3B1Ymxpc2hlcikKICAgIHNlbGYuZmlsdGVycyA9IGZpbHRlcnMKCiAgZGVmIHB1Ymxpc2hfbWV0cmljcyhzZWxmLCByZXN1bHQpOgogICAgbWV0cmljcyA9IHJlc3VsdC5tZXRyaWNzKCkucXVlcnkoc2VsZi5maWx0ZXJzKQoKICAgICMgTWV0cmljcyBmcm9tIHBpcGVsaW5lIHJlc3VsdCBhcmUgc3RvcmVkIGluIG1hcCB3aXRoIGtleXM6ICdnYXVnZXMnLAogICAgIyAnZGlzdHJpYnV0aW9ucycgYW5kICdjb3VudGVycycuCiAgICAjIFVuZGVyIGVhY2gga2V5IHRoZXJlIGlzIGxpc3Qgb2Ygb2JqZWN0cyBvZiBlYWNoIG1ldHJpYyB0eXBlLiBJdCBpcwogICAgIyByZXF1aXJlZCB0byBwcmVwYXJlIG1ldHJpY3MgZm9yIHB1Ymxpc2hpbmcgcHVycG9zZXMuIEV4cGVjdGVkIGlzIHRvIGhhdmUKICAgICMgYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBtYXRjaGluZyB0aGUgc2NoZW1hLgogICAgaW5zZXJ0X2RpY3RzID0gc2VsZi5fcHJlcGFyZV9hbGxfbWV0cmljcyhtZXRyaWNzKQogICAgaWYgbGVuKGluc2VydF9kaWN0cykgPiAwOgogICAgICBmb3IgcHVibGlzaGVyIGluIHNlbGYucHVibGlzaGVyczoKICAgICAgICBwdWJsaXNoZXIucHVibGlzaChpbnNlcnRfZGljdHMpCgogIGRlZiBfcHJlcGFyZV9hbGxfbWV0cmljcyhzZWxmLCBtZXRyaWNzKToKICAgIG1ldHJpY19pZCA9IHV1aWQudXVpZDQoKS5oZXgKCiAgICBpbnNlcnRfcm93cyA9IHNlbGYuX2dldF9jb3VudGVycyhtZXRyaWNzWydjb3VudGVycyddLCBtZXRyaWNfaWQpCiAgICBpbnNlcnRfcm93cyArPSBzZWxmLl9nZXRfZGlzdHJpYnV0aW9ucyhtZXRyaWNzWydkaXN0cmlidXRpb25zJ10sIG1ldHJpY19pZCkKICAgIHJldHVybiBpbnNlcnRfcm93cwoKICBkZWYgX2dldF9jb3VudGVycyhzZWxmLCBjb3VudGVycywgbWV0cmljX2lkKToKICAgIHN1Ym1pdF90aW1lc3RhbXAgPSB0aW1lLnRpbWUoKQogICAgcmV0dXJuIFsKICAgICAgICBDb3VudGVyTWV0cmljKGNvdW50ZXIsIHN1Ym1pdF90aW1lc3RhbXAsIG1ldHJpY19pZCkuYXNfZGljdCgpCiAgICAgICAgZm9yIGNvdW50ZXIgaW4gY291bnRlcnMKICAgIF0KCiAgZGVmIF9nZXRfZGlzdHJpYnV0aW9ucyhzZWxmLCBkaXN0cmlidXRpb25zLCBtZXRyaWNfaWQpOgogICAgcm93cyA9IFtdCiAgICBtYXRjaGluZ19uYW1zZXNwYWNlLCBub3RfbWF0Y2hpbmdfbmFtZXNwYWNlID0gXAogICAgICBzcGxpdF9tZXRyaWNzX2J5X25hbWVzcGFjZV9hbmRfbmFtZShkaXN0cmlidXRpb25zLCBzZWxmLl9uYW1lc3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJVTlRJTUVfTUVUUklDKQogICAgaWYgbGVuKG1hdGNoaW5nX25hbXNlc3BhY2UpID4gMDoKICAgICAgcnVudGltZV9tZXRyaWMgPSBSdW50aW1lTWV0cmljKG1hdGNoaW5nX25hbXNlc3BhY2UsIG1ldHJpY19pZCkKICAgICAgcm93cy5hcHBlbmQocnVudGltZV9tZXRyaWMuYXNfZGljdCgpKQogICAgaWYgbGVuKG5vdF9tYXRjaGluZ19uYW1lc3BhY2UpID4gMDoKICAgICAgcm93cyArPSBnZXRfZ2VuZXJpY19kaXN0cmlidXRpb25zKG5vdF9tYXRjaGluZ19uYW1lc3BhY2UsIG1ldHJpY19pZCkKICAgIHJldHVybiByb3dzCgoKY2xhc3MgTWV0cmljKG9iamVjdCk6CiAgIiIiTWV0cmljIGJhc2UgY2xhc3MgaW4gcmVhZHktdG8tc2F2ZSBmb3JtYXQuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLCBzdWJtaXRfdGltZXN0YW1wLCBtZXRyaWNfaWQsIHZhbHVlLCBtZXRyaWM9Tm9uZSwgbGFiZWw9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YE1ldHJpY2AKCiAgICBBcmdzOgogICAgICBtZXRyaWMgKG9iamVjdCk6IG9iamVjdCBvZiBtZXRyaWMgcmVzdWx0CiAgICAgIHN1Ym1pdF90aW1lc3RhbXAgKGZsb2F0KTogZGF0ZS10aW1lIG9mIHNhdmluZyBtZXRyaWMgdG8gZGF0YWJhc2UKICAgICAgbWV0cmljX2lkICh1dWlkKTogdW5pcXVlIGlkIHRvIGlkZW50aWZ5IHRlc3QgcnVuCiAgICAgIHZhbHVlOiB2YWx1ZSBvZiBtZXRyaWMKICAgICAgbGFiZWw6IGN1c3RvbSBtZXRyaWMgbmFtZSB0byBiZSBzYXZlZCBpbiBkYXRhYmFzZQogICAgIiIiCiAgICBzZWxmLnN1Ym1pdF90aW1lc3RhbXAgPSBzdWJtaXRfdGltZXN0YW1wCiAgICBzZWxmLm1ldHJpY19pZCA9IG1ldHJpY19pZAogICAgc2VsZi5sYWJlbCA9IGxhYmVsIG9yIG1ldHJpYy5rZXkubWV0cmljLm5hbWVzcGFjZSArIFwKICAgICAgICAgICAgJ18nICsgcGFyc2Vfc3RlcChtZXRyaWMua2V5LnN0ZXApICsgXAogICAgICAgICAgICAnXycgKyBtZXRyaWMua2V5Lm1ldHJpYy5uYW1lCiAgICBzZWxmLnZhbHVlID0gdmFsdWUKCiAgZGVmIGFzX2RpY3Qoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgIFNVQk1JVF9USU1FU1RBTVBfTEFCRUw6IHNlbGYuc3VibWl0X3RpbWVzdGFtcCwKICAgICAgICBJRF9MQUJFTDogc2VsZi5tZXRyaWNfaWQsCiAgICAgICAgVkFMVUVfTEFCRUw6IHNlbGYudmFsdWUsCiAgICAgICAgTUVUUklDU19UWVBFX0xBQkVMOiBzZWxmLmxhYmVsCiAgICB9CgoKY2xhc3MgQ291bnRlck1ldHJpYyhNZXRyaWMpOgogICIiIlRoZSBDb3VudGVyIE1ldHJpYyBpbiByZWFkeS10by1wdWJsaXNoIGZvcm1hdC4KCiAgQXJnczoKICAgIGNvdW50ZXJfbWV0cmljIChvYmplY3QpOiBjb3VudGVyIG1ldHJpYyBvYmplY3QgZnJvbSBNZXRyaWNSZXN1bHQKICAgIHN1Ym1pdF90aW1lc3RhbXAgKGZsb2F0KTogZGF0ZS10aW1lIG9mIHNhdmluZyBtZXRyaWMgdG8gZGF0YWJhc2UKICAgIG1ldHJpY19pZCAodXVpZCk6IHVuaXF1ZSBpZCB0byBpZGVudGlmeSB0ZXN0IHJ1bgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb3VudGVyX21ldHJpYywgc3VibWl0X3RpbWVzdGFtcCwgbWV0cmljX2lkKToKICAgIHZhbHVlID0gY291bnRlcl9tZXRyaWMuY29tbWl0dGVkCiAgICBzdXBlcihDb3VudGVyTWV0cmljLAogICAgICAgICAgc2VsZikuX19pbml0X18oc3VibWl0X3RpbWVzdGFtcCwgbWV0cmljX2lkLCB2YWx1ZSwgY291bnRlcl9tZXRyaWMpCgoKY2xhc3MgRGlzdHJpYnV0aW9uTWV0cmljKE1ldHJpYyk6CiAgIiIiVGhlIERpc3RyaWJ1dGlvbiBNZXRyaWMgaW4gcmVhZHktdG8tcHVibGlzaCBmb3JtYXQuCgogIEFyZ3M6CiAgICBkaXN0X21ldHJpYyAob2JqZWN0KTogZGlzdHJpYnV0aW9uIG1ldHJpYyBvYmplY3QgZnJvbSBNZXRyaWNSZXN1bHQKICAgIHN1Ym1pdF90aW1lc3RhbXAgKGZsb2F0KTogZGF0ZS10aW1lIG9mIHNhdmluZyBtZXRyaWMgdG8gZGF0YWJhc2UKICAgIG1ldHJpY19pZCAodXVpZCk6IHVuaXF1ZSBpZCB0byBpZGVudGlmeSB0ZXN0IHJ1bgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkaXN0X21ldHJpYywgc3VibWl0X3RpbWVzdGFtcCwgbWV0cmljX2lkLCBtZXRyaWNfdHlwZSk6CiAgICBjdXN0b21fbGFiZWwgPSBkaXN0X21ldHJpYy5rZXkubWV0cmljLm5hbWVzcGFjZSArIFwKICAgICAgICAgICAgICAgICAgICdfJyArIHBhcnNlX3N0ZXAoZGlzdF9tZXRyaWMua2V5LnN0ZXApICsgXAogICAgICAgICAgICAgICAgICAgJ18nICsgbWV0cmljX3R5cGUgKyBcCiAgICAgICAgICAgICAgICAgICAnXycgKyBkaXN0X21ldHJpYy5rZXkubWV0cmljLm5hbWUKICAgIHZhbHVlID0gZ2V0YXR0cihkaXN0X21ldHJpYy5jb21taXR0ZWQsIG1ldHJpY190eXBlKQogICAgc3VwZXIoRGlzdHJpYnV0aW9uTWV0cmljLCBzZWxmKSBcCiAgICAgIC5fX2luaXRfXyhzdWJtaXRfdGltZXN0YW1wLCBtZXRyaWNfaWQsIHZhbHVlLCBkaXN0X21ldHJpYywgY3VzdG9tX2xhYmVsKQoKCmNsYXNzIFJ1bnRpbWVNZXRyaWMoTWV0cmljKToKICAiIiJUaGUgRGlzdHJpYnV0aW9uIE1ldHJpYyBpbiByZWFkeS10by1wdWJsaXNoIGZvcm1hdC4KCiAgQXJnczoKICAgIHJ1bnRpbWVfbGlzdDogbGlzdCBvZiBkaXN0cmlidXRpb25zIG1ldHJpY3MgZnJvbSBNZXRyaWNSZXN1bHQKICAgICAgd2l0aCBydW50aW1lIG5hbWUKICAgIG1ldHJpY19pZCh1dWlkKTogdW5pcXVlIGlkIHRvIGlkZW50aWZ5IHRlc3QgcnVuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bnRpbWVfbGlzdCwgbWV0cmljX2lkKToKICAgIHZhbHVlID0gc2VsZi5fcHJlcGFyZV9ydW50aW1lX21ldHJpY3MocnVudGltZV9saXN0KQogICAgc3VibWl0X3RpbWVzdGFtcCA9IHRpbWUudGltZSgpCiAgICAjIExhYmVsIGRvZXMgbm90IGluY2x1ZGUgc3RlcCBuYW1lLCBiZWNhdXNlIGl0IGlzIG9uZSB2YWx1ZSBjYWxjdWxhdGVkCiAgICAjIG91dCBvZiBtYW55IHN0ZXBzCiAgICBsYWJlbCA9IHJ1bnRpbWVfbGlzdFswXS5rZXkubWV0cmljLm5hbWVzcGFjZSArIFwKICAgICAgICAgICAgJ18nICsgUlVOVElNRV9NRVRSSUMKICAgIHN1cGVyKFJ1bnRpbWVNZXRyaWMsCiAgICAgICAgICBzZWxmKS5fX2luaXRfXyhzdWJtaXRfdGltZXN0YW1wLCBtZXRyaWNfaWQsIHZhbHVlLCBOb25lLCBsYWJlbCkKCiAgZGVmIF9wcmVwYXJlX3J1bnRpbWVfbWV0cmljcyhzZWxmLCBkaXN0cmlidXRpb25zKToKICAgIG1pbl92YWx1ZXMgPSBbXQogICAgbWF4X3ZhbHVlcyA9IFtdCiAgICBmb3IgZGlzdCBpbiBkaXN0cmlidXRpb25zOgogICAgICBtaW5fdmFsdWVzLmFwcGVuZChkaXN0LnJlc3VsdC5taW4pCiAgICAgIG1heF92YWx1ZXMuYXBwZW5kKGRpc3QucmVzdWx0Lm1heCkKICAgICMgZmluZGluZyByZWFsIHN0YXJ0CiAgICBtaW5fdmFsdWUgPSBtaW4obWluX3ZhbHVlcykKICAgICMgZmluZGluZyByZWFsIGVuZAogICAgbWF4X3ZhbHVlID0gbWF4KG1heF92YWx1ZXMpCgogICAgcnVudGltZV9pbl9zID0gZmxvYXQobWF4X3ZhbHVlIC0gbWluX3ZhbHVlKQogICAgcmV0dXJuIHJ1bnRpbWVfaW5fcwoKCmNsYXNzIENvbnNvbGVNZXRyaWNzUHVibGlzaGVyKG9iamVjdCk6CiAgIiIiQSA6Y2xhc3M6YENvbnNvbGVNZXRyaWNzUHVibGlzaGVyYCBwdWJsaXNoZXMgY29sbGVjdGVkIG1ldHJpY3MKICB0byBjb25zb2xlIG91dHB1dC4iIiIKICBkZWYgcHVibGlzaChzZWxmLCByZXN1bHRzKToKICAgIGlmIGxlbihyZXN1bHRzKSA+IDA6CiAgICAgIGxvZyA9ICJMb2FkIHRlc3QgcmVzdWx0cyBmb3IgdGVzdDogJXMgYW5kIHRpbWVzdGFtcDogJXM6IiBcCiAgICAgICAgICAgICUgKHJlc3VsdHNbMF1bSURfTEFCRUxdLCByZXN1bHRzWzBdW1NVQk1JVF9USU1FU1RBTVBfTEFCRUxdKQogICAgICBfTE9HR0VSLmluZm8obG9nKQogICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdHM6CiAgICAgICAgbG9nID0gIk1ldHJpYzogJXMgVmFsdWU6ICVkIiBcCiAgICAgICAgICAgICAgJSAocmVzdWx0W01FVFJJQ1NfVFlQRV9MQUJFTF0sIHJlc3VsdFtWQUxVRV9MQUJFTF0pCiAgICAgICAgX0xPR0dFUi5pbmZvKGxvZykKICAgIGVsc2U6CiAgICAgIF9MT0dHRVIuaW5mbygiTm8gdGVzdCByZXN1bHRzIHdlcmUgY29sbGVjdGVkLiIpCgoKY2xhc3MgQmlnUXVlcnlNZXRyaWNzUHVibGlzaGVyKG9iamVjdCk6CiAgIiIiQSA6Y2xhc3M6YEJpZ1F1ZXJ5TWV0cmljc1B1Ymxpc2hlcmAgcHVibGlzaGVzIGNvbGxlY3RlZCBtZXRyaWNzCiAgdG8gQmlnUXVlcnkgb3V0cHV0LiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0X25hbWUsIHRhYmxlLCBkYXRhc2V0KToKICAgIHNlbGYuYnEgPSBCaWdRdWVyeUNsaWVudChwcm9qZWN0X25hbWUsIHRhYmxlLCBkYXRhc2V0KQoKICBkZWYgcHVibGlzaChzZWxmLCByZXN1bHRzKToKICAgIG91dHB1dHMgPSBzZWxmLmJxLnNhdmUocmVzdWx0cykKICAgIGlmIGxlbihvdXRwdXRzKSA+IDA6CiAgICAgIGZvciBvdXRwdXQgaW4gb3V0cHV0czoKICAgICAgICBlcnJvcnMgPSBvdXRwdXRbJ2Vycm9ycyddCiAgICAgICAgZm9yIGVyciBpbiBlcnJvcnM6CiAgICAgICAgICBfTE9HR0VSLmVycm9yKGVyclsnbWVzc2FnZSddKQogICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAnVW5hYmxlIHNhdmUgcm93cyBpbiBCaWdRdWVyeToge30nLmZvcm1hdChlcnJbJ21lc3NhZ2UnXSkpCgoKY2xhc3MgQmlnUXVlcnlDbGllbnQob2JqZWN0KToKICAiIiJBIDpjbGFzczpgQmlnUXVlcnlDbGllbnRgIHB1Ymxpc2hlcyBjb2xsZWN0ZWQgbWV0cmljcyB0bwogIEJpZ1F1ZXJ5IG91dHB1dC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9uYW1lLCB0YWJsZSwgZGF0YXNldCk6CiAgICBzZWxmLl9uYW1lc3BhY2UgPSB0YWJsZQogICAgc2VsZi5fY2xpZW50ID0gYmlncXVlcnkuQ2xpZW50KHByb2plY3Q9cHJvamVjdF9uYW1lKQogICAgc2VsZi5fc2NoZW1hX25hbWVzID0gc2VsZi5fZ2V0X3NjaGVtYV9uYW1lcygpCiAgICBzY2hlbWEgPSBzZWxmLl9wcmVwYXJlX3NjaGVtYSgpCiAgICBzZWxmLl9nZXRfb3JfY3JlYXRlX3RhYmxlKHNjaGVtYSwgZGF0YXNldCkKCiAgZGVmIF9nZXRfc2NoZW1hX25hbWVzKHNlbGYpOgogICAgcmV0dXJuIFtzY2hlbWFbJ25hbWUnXSBmb3Igc2NoZW1hIGluIFNDSEVNQV0KCiAgZGVmIF9wcmVwYXJlX3NjaGVtYShzZWxmKToKICAgIHJldHVybiBbU2NoZW1hRmllbGQoKipyb3cpIGZvciByb3cgaW4gU0NIRU1BXQoKICBkZWYgX2dldF9vcl9jcmVhdGVfdGFibGUoc2VsZiwgYnFfc2NoZW1hcywgZGF0YXNldCk6CiAgICBpZiBzZWxmLl9uYW1lc3BhY2UgPT0gJyc6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05hbWVzcGFjZSBjYW5ub3QgYmUgZW1wdHkuJykKCiAgICBkYXRhc2V0ID0gc2VsZi5fZ2V0X2RhdGFzZXQoZGF0YXNldCkKICAgIHRhYmxlX3JlZiA9IGRhdGFzZXQudGFibGUoc2VsZi5fbmFtZXNwYWNlKQoKICAgIHRyeToKICAgICAgc2VsZi5fYnFfdGFibGUgPSBzZWxmLl9jbGllbnQuZ2V0X3RhYmxlKHRhYmxlX3JlZikKICAgIGV4Y2VwdCBOb3RGb3VuZDoKICAgICAgdGFibGUgPSBiaWdxdWVyeS5UYWJsZSh0YWJsZV9yZWYsIHNjaGVtYT1icV9zY2hlbWFzKQogICAgICBzZWxmLl9icV90YWJsZSA9IHNlbGYuX2NsaWVudC5jcmVhdGVfdGFibGUodGFibGUpCgogIGRlZiBfZ2V0X2RhdGFzZXQoc2VsZiwgZGF0YXNldF9uYW1lKToKICAgIGJxX2RhdGFzZXRfcmVmID0gc2VsZi5fY2xpZW50LmRhdGFzZXQoZGF0YXNldF9uYW1lKQogICAgdHJ5OgogICAgICBicV9kYXRhc2V0ID0gc2VsZi5fY2xpZW50LmdldF9kYXRhc2V0KGJxX2RhdGFzZXRfcmVmKQogICAgZXhjZXB0IE5vdEZvdW5kOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0RhdGFzZXQge30gZG9lcyBub3QgZXhpc3QgaW4geW91ciBwcm9qZWN0LiAnCiAgICAgICAgICAnWW91IGhhdmUgdG8gY3JlYXRlIHRhYmxlIGZpcnN0LicuZm9ybWF0KGRhdGFzZXRfbmFtZSkpCiAgICByZXR1cm4gYnFfZGF0YXNldAoKICBkZWYgc2F2ZShzZWxmLCByZXN1bHRzKToKICAgIHJldHVybiBzZWxmLl9jbGllbnQuaW5zZXJ0X3Jvd3Moc2VsZi5fYnFfdGFibGUsIHJlc3VsdHMpCgoKY2xhc3MgTWVhc3VyZVRpbWUoYmVhbS5Eb0ZuKToKICAiIiJBIGRpc3RyaWJ1dGlvbiBtZXRyaWMgcHJlcGFyZWQgdG8gYmUgYWRkZWQgdG8gcGlwZWxpbmUgYXMgUGFyRG8KICAgdG8gbWVhc3VyZSBydW50aW1lLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lc3BhY2UpOgogICAgIiIiSW5pdGlhbGl6ZXMgOmNsYXNzOmBNZWFzdXJlVGltZWAuCgogICAgICBuYW1lc3BhY2Uoc3RyKTogbmFtZXNwYWNlIG9mICBtZXRyaWMKICAgICIiIgogICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKICAgIHNlbGYucnVudGltZSA9IE1ldHJpY3MuZGlzdHJpYnV0aW9uKHNlbGYubmFtZXNwYWNlLCBSVU5USU1FX01FVFJJQykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYucnVudGltZS51cGRhdGUodGltZS50aW1lKCkpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5ydW50aW1lLnVwZGF0ZSh0aW1lLnRpbWUoKSkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICB5aWVsZCBlbGVtZW50CgoKY2xhc3MgTWVhc3VyZUJ5dGVzKGJlYW0uRG9Gbik6CiAgIiIiTWV0cmljIHRvIG1lYXN1cmUgaG93IG1hbnkgYnl0ZXMgd2FzIG9ic2VydmVkIGluIHBpcGVsaW5lLiIiIgogIExBQkVMID0gJ3RvdGFsX2J5dGVzJwoKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZXNwYWNlLCBleHRyYWN0b3I9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplcyA6Y2xhc3M6YE1lYXN1cmVCeXRlc2AuCgogICAgQXJnczoKICAgICAgbmFtZXNwYWNlKHN0cik6IG1ldHJpYyBuYW1lc3BhY2UKICAgICAgZXh0cmFjdG9yOiBmdW5jdGlvbiB0byBleHRyYWN0IGVsZW1lbnRzIHRvIGJlIGNvdW50CiAgICAiIiIKICAgIHNlbGYubmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICBzZWxmLmNvdW50ZXIgPSBNZXRyaWNzLmNvdW50ZXIoc2VsZi5uYW1lc3BhY2UsIHNlbGYuTEFCRUwpCiAgICBzZWxmLmV4dHJhY3RvciA9IGV4dHJhY3RvciBpZiBleHRyYWN0b3IgZWxzZSBsYW1iZGEgeDogKHlpZWxkIHgpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzKToKICAgIGZvciB2YWx1ZSBpbiBzZWxmLmV4dHJhY3RvcihlbGVtZW50LCAqYXJncyk6CiAgICAgIHNlbGYuY291bnRlci5pbmMobGVuKHZhbHVlKSkKICAgIHlpZWxkIGVsZW1lbnQKCgpjbGFzcyBDb3VudE1lc3NhZ2VzKGJlYW0uRG9Gbik6CiAgTEFCRUwgPSAndG90YWxfbWVzc2FnZXMnCgogIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lc3BhY2UpOgogICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKICAgIHNlbGYuY291bnRlciA9IE1ldHJpY3MuY291bnRlcihzZWxmLm5hbWVzcGFjZSwgc2VsZi5MQUJFTCkKCiAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudCk6CiAgICBzZWxmLmNvdW50ZXIuaW5jKDEpCiAgICB5aWVsZCBlbGVtZW50CpR9lCiMCnBhcnNlX3N0ZXCUalYxAQBLTktXh5SMI3NwbGl0X21ldHJpY3NfYnlfbmFtZXNwYWNlX2FuZF9uYW1llGpWMQEAS1pLboeUjBlnZXRfZ2VuZXJpY19kaXN0cmlidXRpb25zlGpWMQEAS3FLf4eUjB1nZXRfYWxsX2Rpc3RyaWJ1dGlvbnNfYnlfdHlwZZRqVjEBAEuCS5GHlIwVZ2V0X2Rpc3RyaWJ1dGlvbl9kaWN0lGpWMQEAS5RLooeUjBZNZXRyaWNzUmVhZGVyLl9faW5pdF9flGpWMQEAS6xLw4eUjB1NZXRyaWNzUmVhZGVyLnB1Ymxpc2hfbWV0cmljc5RqVjEBAEvFS9CHlIwiTWV0cmljc1JlYWRlci5fcHJlcGFyZV9hbGxfbWV0cmljc5RqVjEBAEvSS9eHlIwbTWV0cmljc1JlYWRlci5fZ2V0X2NvdW50ZXJzlGpWMQEAS9lL3oeUjCBNZXRyaWNzUmVhZGVyLl9nZXRfZGlzdHJpYnV0aW9uc5RqVjEBAEvgS+qHlIwNTWV0cmljc1JlYWRlcpRqXTEBAEulS+qHlIwPTWV0cmljLl9faW5pdF9flGpWMQEAS+9L/4eUjA5NZXRyaWMuYXNfZGljdJRqVjEBAE0BAU0HAYeUjAZNZXRyaWOUal0xAQBL7U0HAYeUjBZDb3VudGVyTWV0cmljLl9faW5pdF9flGpWMQEATRIBTRUBh5SMDUNvdW50ZXJNZXRyaWOUal0xAQBNCgFNFQGHlIwbRGlzdHJpYnV0aW9uTWV0cmljLl9faW5pdF9flGpWMQEATSABTScBh5SMEkRpc3RyaWJ1dGlvbk1ldHJpY5RqXTEBAE0YAU0nAYeUjBZSdW50aW1lTWV0cmljLl9faW5pdF9flGpWMQEATTIBTToBh5SMJlJ1bnRpbWVNZXRyaWMuX3ByZXBhcmVfcnVudGltZV9tZXRyaWNzlGpWMQEATTwBTUgBh5SMDVJ1bnRpbWVNZXRyaWOUal0xAQBNKgFNSAGHlIwfQ29uc29sZU1ldHJpY3NQdWJsaXNoZXIucHVibGlzaJRqVjEBAE1OAU1YAYeUjBdDb25zb2xlTWV0cmljc1B1Ymxpc2hlcpRqXTEBAE1LAU1YAYeUjCFCaWdRdWVyeU1ldHJpY3NQdWJsaXNoZXIuX19pbml0X1+UalYxAQBNXgFNXwGHlIwgQmlnUXVlcnlNZXRyaWNzUHVibGlzaGVyLnB1Ymxpc2iUalYxAQBNYQFNaQGHlIwYQmlnUXVlcnlNZXRyaWNzUHVibGlzaGVylGpdMQEATVsBTWkBh5SMF0JpZ1F1ZXJ5Q2xpZW50Ll9faW5pdF9flGpWMQEATW8BTXQBh5SMIEJpZ1F1ZXJ5Q2xpZW50Ll9nZXRfc2NoZW1hX25hbWVzlGpWMQEATXYBTXcBh5SMHkJpZ1F1ZXJ5Q2xpZW50Ll9wcmVwYXJlX3NjaGVtYZRqVjEBAE15AU16AYeUjCNCaWdRdWVyeUNsaWVudC5fZ2V0X29yX2NyZWF0ZV90YWJsZZRqVjEBAE18AU2HAYeUjBtCaWdRdWVyeUNsaWVudC5fZ2V0X2RhdGFzZXSUalYxAQBNiQFNkQGHlIwTQmlnUXVlcnlDbGllbnQuc2F2ZZRqVjEBAE2TAU2UAYeUjA5CaWdRdWVyeUNsaWVudJRqXTEBAE1sAU2UAYeUjBRNZWFzdXJlVGltZS5fX2luaXRfX5RqVjEBAE2aAU2gAYeUjBhNZWFzdXJlVGltZS5zdGFydF9idW5kbGWUalYxAQBNogFNowGHlIwZTWVhc3VyZVRpbWUuZmluaXNoX2J1bmRsZZRqVjEBAE2lAU2mAYeUjBNNZWFzdXJlVGltZS5wcm9jZXNzlGpWMQEATagBTakBh5SMC01lYXN1cmVUaW1llGpdMQEATZcBTakBh5SMFU1lYXN1cmVCeXRlcy5fX2luaXRfX5RqVjEBAE2wAU25AYeUjBRNZWFzdXJlQnl0ZXMucHJvY2Vzc5RqVjEBAE27AU2+AYeUjAxNZWFzdXJlQnl0ZXOUal0xAQBNrAFNvgGHlIwWQ291bnRNZXNzYWdlcy5fX2luaXRfX5RqVjEBAE3EAU3GAYeUjBVDb3VudE1lc3NhZ2VzLnByb2Nlc3OUalYxAQBNyAFNygGHlIwNQ291bnRNZXNzYWdlc5RqXTEBAE3BAU3KAYeUdX2UKIwKcGFyc2Vfc3RlcJRqkQMAAIwjc3BsaXRfbWV0cmljc19ieV9uYW1lc3BhY2VfYW5kX25hbWWUapEDAACMGWdldF9nZW5lcmljX2Rpc3RyaWJ1dGlvbnOUapEDAACMHWdldF9hbGxfZGlzdHJpYnV0aW9uc19ieV90eXBllGqRAwAAjBVnZXRfZGlzdHJpYnV0aW9uX2RpY3SUapEDAACMDU1ldHJpY3NSZWFkZXKUapEDAACMHU1ldHJpY3NSZWFkZXIucHVibGlzaF9tZXRyaWNzlGqRAwAAjAZNZXRyaWOUapEDAACMDk1ldHJpYy5hc19kaWN0lGqRAwAAjA1Db3VudGVyTWV0cmljlGqRAwAAjBJEaXN0cmlidXRpb25NZXRyaWOUapEDAACMDVJ1bnRpbWVNZXRyaWOUapEDAACMF0NvbnNvbGVNZXRyaWNzUHVibGlzaGVylGqRAwAAjB9Db25zb2xlTWV0cmljc1B1Ymxpc2hlci5wdWJsaXNolGqRAwAAjBhCaWdRdWVyeU1ldHJpY3NQdWJsaXNoZXKUapEDAACMIEJpZ1F1ZXJ5TWV0cmljc1B1Ymxpc2hlci5wdWJsaXNolGqRAwAAjA5CaWdRdWVyeUNsaWVudJRqkQMAAIwTQmlnUXVlcnlDbGllbnQuc2F2ZZRqkQMAAIwLTWVhc3VyZVRpbWWUapEDAACMGE1lYXN1cmVUaW1lLnN0YXJ0X2J1bmRsZZRqkQMAAIwZTWVhc3VyZVRpbWUuZmluaXNoX2J1bmRsZZRqkQMAAIwTTWVhc3VyZVRpbWUucHJvY2Vzc5RqkQMAAIwMTWVhc3VyZUJ5dGVzlGqRAwAAjBRNZWFzdXJlQnl0ZXMucHJvY2Vzc5RqkQMAAIwNQ291bnRNZXNzYWdlc5RqkQMAAIwVQ291bnRNZXNzYWdlcy5wcm9jZXNzlGqRAwAAdYw2YXBhY2hlX2JlYW0udGVzdGluZy5sb2FkX3Rlc3RzLmxvYWRfdGVzdF9tZXRyaWNzX3V0aWxzlHSUjEhhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMuc3RyZWFtaW5nLmdyb3VwX2J5X2tleV9zdHJlYW1pbmdfcGlwZWxpbmWUKFhVDwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiIKU3RyZWFtaW5nIHBpcGVsaW5lIHdoaWNoIHJlYWRzLCBHQksgYW5kIHVuZ3JvdXAgZGF0YSBmcm9tIFB1YlN1Yi4KUGlwZWxpbmUgaXMgY2FuY2VsbGVkIHdoZW4gbWF0Y2hlciBhY2hpZXZlcyBleHBlY3RlZCBlbGVtZW50cwphbW91bnQgb3IgcmVhY2hlcyB0aW1lb3V0LiBUbyBjYW5jZWwgcGlwZWxpbmUgYnkgbWF0Y2hlciBpdCBpcwpyZXF1aXJlZCB0byB1c2UgVGVzdFJ1bm5lciAoVGVzdERhdGFmbG93UnVubmVyIG9yIFRlc3REaXJlY3RSdW5uZXIpLgpEYXRhIGZyb20gcHVic3ViIGlzIHBhcnNlZCBpbnRvIHBhaXIgb2Ygc3RyaW5ncyBzbyBpdAp3b3VsZCBiZSBwb3NzaWJsZSBncm91cCBpdCBieSBrZXkuCgpWYWx1ZXMgaGF2ZSB0byBiZSByZXBhcnNlZCBhZ2FpbiB0byBieXRlcwoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0uaW8uZ2NwLnB1YnN1YiBpbXBvcnQgUmVhZEZyb21QdWJTdWIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU2V0dXBPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBTdGFuZGFyZE9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMgaW1wb3J0IENvdW50TWVzc2FnZXMKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMubG9hZF90ZXN0X21ldHJpY3NfdXRpbHMgaW1wb3J0IE1lYXN1cmVUaW1lCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CgoKZGVmIHJ1bihhcmd2PU5vbmUpOgogIGNsYXNzIE1lc3NhZ2VQYXJzZXIoYmVhbS5Eb0ZuKToKICAgICMgSXQgaXMgcmVxdWlyZWQgdG8gcGFyc2UgbWVzc2FnZXMgZm9yIEdCSyBvcGVyYXRpb24uCiAgICAjIE90aGVyd2lzZSB0aGVyZSBhcmUgZW5jb2RpbmcgcHJvYmxlbXMuCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBpdGVtKToKICAgICAgaWYgaXRlbS5hdHRyaWJ1dGVzOgogICAgICAgIGssIHYgPSBpdGVtLmF0dHJpYnV0ZXMucG9waXRlbSgpCiAgICAgICAgeWllbGQgKHN0cihrKSwgc3RyKHYpKQoKICBjbGFzcyBQYXJzZXJUb0J5dGVzKGJlYW0uRG9Gbik6CiAgICAjIFBhcnNpbmcgdG8gYnl0ZXMgaXMgcmVxdWlyZWQgZm9yIHNhdmluZyBpbiBQdWJTdWIuCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBpdGVtKToKICAgICAgXywgdiA9IGl0ZW0KICAgICAgeWllbGQgYnl0ZXModiwgZW5jb2Rpbmc9J3V0ZjgnKQoKICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tb3V0cHV0X3RvcGljJywKICAgICAgcmVxdWlyZWQ9VHJ1ZSwKICAgICAgaGVscD0oCiAgICAgICAgICAnT3V0cHV0IFB1YlN1YiB0b3BpYyBvZiB0aGUgZm9ybSAnCiAgICAgICAgICAnInByb2plY3RzLzxQUk9KRUNUPi90b3BpYy88VE9QSUM+Ii4nKSkKICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAnLS1pbnB1dF9zdWJzY3JpcHRpb24nLAogICAgICBoZWxwPSgKICAgICAgICAgICdJbnB1dCBQdWJTdWIgc3Vic2NyaXB0aW9uIG9mIHRoZSBmb3JtICcKICAgICAgICAgICcicHJvamVjdHMvPFBST0pFQ1Q+L3N1YnNjcmlwdGlvbnMvPFNVQlNDUklQVElPTj4uIicpKQogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLW1ldHJpY3NfbmFtZXNwYWNlJywgaGVscD0oJ05hbWVzcGFjZSBvZiBtZXRyaWNzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnInN0cmluZyIuJykpCiAga25vd25fYXJncywgcGlwZWxpbmVfYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3YpCgogIHBpcGVsaW5lX29wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMocGlwZWxpbmVfYXJncykKICBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU2V0dXBPcHRpb25zKS5zYXZlX21haW5fc2Vzc2lvbiA9IFRydWUKICBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU3RhbmRhcmRPcHRpb25zKS5zdHJlYW1pbmcgPSBUcnVlCiAgcCA9IGJlYW0uUGlwZWxpbmUob3B0aW9ucz1waXBlbGluZV9vcHRpb25zKQoKICAjIHB5bGludDogZGlzYWJsZT1leHByZXNzaW9uLW5vdC1hc3NpZ25lZAogICgKICAgICAgcAogICAgICB8IFJlYWRGcm9tUHViU3ViKAogICAgICAgICAgc3Vic2NyaXB0aW9uPWtub3duX2FyZ3MuaW5wdXRfc3Vic2NyaXB0aW9uLCB3aXRoX2F0dHJpYnV0ZXM9VHJ1ZSkKICAgICAgfCAnV2luZG93JyA+PiBiZWFtLldpbmRvd0ludG8od2luZG93LkZpeGVkV2luZG93cygxMDAwLCAwKSkKICAgICAgfCAnTWVhc3VyZSB0aW1lOiBTdGFydCcgPj4gYmVhbS5QYXJEbygKICAgICAgICAgIE1lYXN1cmVUaW1lKGtub3duX2FyZ3MubWV0cmljc19uYW1lc3BhY2UpKQogICAgICB8ICdDb3VudCBtZXNzYWdlcycgPj4gYmVhbS5QYXJEbygKICAgICAgICAgIENvdW50TWVzc2FnZXMoa25vd25fYXJncy5tZXRyaWNzX25hbWVzcGFjZSkpCiAgICAgIHwgJ1BhcnNlJyA+PiBiZWFtLlBhckRvKE1lc3NhZ2VQYXJzZXIoKSkKICAgICAgfCAnR3JvdXBCeUtleScgPj4gYmVhbS5Hcm91cEJ5S2V5KCkKICAgICAgfCAnVW5ncm91cCcgPj4gYmVhbS5GbGF0TWFwKGxhbWJkYSBlbG06IFsoZWxtWzBdLCB2KSBmb3IgdiBpbiBlbG1bMV1dKQogICAgICB8ICdNZWFzdXJlIHRpbWU6IEVuZCcgPj4gYmVhbS5QYXJEbygKICAgICAgICAgIE1lYXN1cmVUaW1lKGtub3duX2FyZ3MubWV0cmljc19uYW1lc3BhY2UpKQogICAgICB8ICdQYXJzZSB0byBieXRlcycgPj4gYmVhbS5QYXJEbyhQYXJzZXJUb0J5dGVzKCkpCiAgICAgIHwgJ1dyaXRlJyA+PiBiZWFtLmlvLldyaXRlVG9QdWJTdWIodG9waWM9a25vd25fYXJncy5vdXRwdXRfdG9waWMpKQoKICByZXN1bHQgPSBwLnJ1bigpCiAgcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKICBsb2dnaW5nLmVycm9yKHJlc3VsdCkKICByZXR1cm4gcmVzdWx0CpR9lCiMGXJ1bi5NZXNzYWdlUGFyc2VyLnByb2Nlc3OUalYxAQBLMks1h5SMEXJ1bi5NZXNzYWdlUGFyc2VylGpdMQEASy9LNYeUjBlydW4uUGFyc2VyVG9CeXRlcy5wcm9jZXNzlGpWMQEASzlLO4eUjBFydW4uUGFyc2VyVG9CeXRlc5RqXTEBAEs3SzuHlIwDcnVulGpWMQEASy5LaIeUdX2UjANydW6UalwDAABzjEhhcGFjaGVfYmVhbS50ZXN0aW5nLmxvYWRfdGVzdHMuc3RyZWFtaW5nLmdyb3VwX2J5X2tleV9zdHJlYW1pbmdfcGlwZWxpbmWUdJSMKmFwYWNoZV9iZWFtLnRlc3RpbmcubWV0cmljX3Jlc3VsdF9tYXRjaGVyc5QoWEwbAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIk1ldHJpY1Jlc3VsdCBtYXRjaGVycyBmb3IgdmFsaWRhdGluZyBtZXRyaWNzIGluIFBpcGVsaW5lUmVzdWx0cy4KCmV4YW1wbGUgdXNhZ2U6Cjo6CgogICAgcmVzdWx0ID0gbXlfcGlwZWxpbmUucnVuKCkKICAgIGFsbF9tZXRyaWNzID0gcmVzdWx0Lm1ldHJpY3MoKS5hbGxfbWV0cmljcygpCgogICAgbWF0Y2hlcnMgPSBbCiAgICAgIE1ldHJpY1Jlc3VsdE1hdGNoZXIoCiAgICAgICAgICBuYW1lc3BhY2U9J215TmFtZXNwYWNlJywKICAgICAgICAgIG5hbWU9J215TmFtZScsCiAgICAgICAgICBzdGVwPSdteVN0ZXAnLAogICAgICAgICAgbGFiZWxzPXsKICAgICAgICAgICAgICAncGNvbGxlY3Rpb24nOiAnbXlDb2xsZWN0aW9uJywKICAgICAgICAgICAgICAnbXlDdXN0b21LZXknOiAnbXlDdXN0b21WYWx1ZScKICAgICAgICAgIH0sCiAgICAgICAgICBhdHRlbXB0ZWQ9NDIsCiAgICAgICAgICBjb21taXR0ZWQ9NDIKICAgICAgKQogICAgXQogICAgZXJyb3JzID0gbWV0cmljX3Jlc3VsdF9tYXRjaGVycy52ZXJpZnlfYWxsKGFsbF9tZXRyaWNzLCBtYXRjaGVycykKICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyb3JzLCBlcnJvcnMpCgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGhhbWNyZXN0IGltcG9ydCBlcXVhbF90bwpmcm9tIGhhbWNyZXN0LmNvcmUgaW1wb3J0IHN0cmluZ19kZXNjcmlwdGlvbgpmcm9tIGhhbWNyZXN0LmNvcmUuYmFzZV9tYXRjaGVyIGltcG9ydCBCYXNlTWF0Y2hlcgpmcm9tIGhhbWNyZXN0LmNvcmUubWF0Y2hlciBpbXBvcnQgTWF0Y2hlcgoKZnJvbSBhcGFjaGVfYmVhbS5tZXRyaWNzLmNlbGxzIGltcG9ydCBEaXN0cmlidXRpb25SZXN1bHQKCgpkZWYgX21hdGNoZXJfb3JfZXF1YWxfdG8odmFsdWVfb3JfbWF0Y2hlcik6CiAgIiIiUGFzcy10aHJ1IGZvciBtYXRjaGVycywgYW5kIHdyYXBzIHZhbHVlIGlucHV0cyBpbiBhbiBlcXVhbF90byBtYXRjaGVyLiIiIgogIGlmIHZhbHVlX29yX21hdGNoZXIgaXMgTm9uZToKICAgIHJldHVybiBOb25lCiAgaWYgaXNpbnN0YW5jZSh2YWx1ZV9vcl9tYXRjaGVyLCBNYXRjaGVyKToKICAgIHJldHVybiB2YWx1ZV9vcl9tYXRjaGVyCiAgcmV0dXJuIGVxdWFsX3RvKHZhbHVlX29yX21hdGNoZXIpCgoKY2xhc3MgTWV0cmljUmVzdWx0TWF0Y2hlcihCYXNlTWF0Y2hlcik6CiAgIiIiQSBQeUhhbWNyZXN0IG1hdGNoZXIgdGhhdCB2YWxpZGF0ZXMgY291bnRlciBNZXRyaWNSZXN1bHRzLiIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgbmFtZXNwYWNlPU5vbmUsCiAgICAgIG5hbWU9Tm9uZSwKICAgICAgc3RlcD1Ob25lLAogICAgICBsYWJlbHM9Tm9uZSwKICAgICAgYXR0ZW1wdGVkPU5vbmUsCiAgICAgIGNvbW1pdHRlZD1Ob25lLAogICAgICBzdW1fdmFsdWU9Tm9uZSwKICAgICAgY291bnRfdmFsdWU9Tm9uZSwKICAgICAgbWluX3ZhbHVlPU5vbmUsCiAgICAgIG1heF92YWx1ZT1Ob25lLAogICk6CiAgICBzZWxmLm5hbWVzcGFjZSA9IF9tYXRjaGVyX29yX2VxdWFsX3RvKG5hbWVzcGFjZSkKICAgIHNlbGYubmFtZSA9IF9tYXRjaGVyX29yX2VxdWFsX3RvKG5hbWUpCiAgICBzZWxmLnN0ZXAgPSBfbWF0Y2hlcl9vcl9lcXVhbF90byhzdGVwKQogICAgc2VsZi5hdHRlbXB0ZWQgPSBfbWF0Y2hlcl9vcl9lcXVhbF90byhhdHRlbXB0ZWQpCiAgICBzZWxmLmNvbW1pdHRlZCA9IF9tYXRjaGVyX29yX2VxdWFsX3RvKGNvbW1pdHRlZCkKICAgIGxhYmVscyA9IGxhYmVscyBvciBkaWN0KCkKICAgIHNlbGYubGFiZWxfbWF0Y2hlcnMgPSBkaWN0KCkKICAgIGZvciAoaywgdikgaW4gbGFiZWxzLml0ZW1zKCk6CiAgICAgIHNlbGYubGFiZWxfbWF0Y2hlcnNbX21hdGNoZXJfb3JfZXF1YWxfdG8oayldID0gX21hdGNoZXJfb3JfZXF1YWxfdG8odikKCiAgZGVmIF9tYXRjaGVzKHNlbGYsIG1ldHJpY19yZXN1bHQpOgogICAgaWYgc2VsZi5uYW1lc3BhY2UgaXMgbm90IE5vbmUgYW5kIG5vdCBzZWxmLm5hbWVzcGFjZS5tYXRjaGVzKAogICAgICAgIG1ldHJpY19yZXN1bHQua2V5Lm1ldHJpYy5uYW1lc3BhY2UpOgogICAgICByZXR1cm4gRmFsc2UKICAgIGlmIHNlbGYubmFtZSBhbmQgbm90IHNlbGYubmFtZS5tYXRjaGVzKG1ldHJpY19yZXN1bHQua2V5Lm1ldHJpYy5uYW1lKToKICAgICAgcmV0dXJuIEZhbHNlCiAgICBpZiBzZWxmLnN0ZXAgYW5kIG5vdCBzZWxmLnN0ZXAubWF0Y2hlcyhtZXRyaWNfcmVzdWx0LmtleS5zdGVwKToKICAgICAgcmV0dXJuIEZhbHNlCiAgICBpZiAoc2VsZi5hdHRlbXB0ZWQgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgbm90IHNlbGYuYXR0ZW1wdGVkLm1hdGNoZXMobWV0cmljX3Jlc3VsdC5hdHRlbXB0ZWQpKToKICAgICAgcmV0dXJuIEZhbHNlCiAgICBpZiAoc2VsZi5jb21taXR0ZWQgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgbm90IHNlbGYuY29tbWl0dGVkLm1hdGNoZXMobWV0cmljX3Jlc3VsdC5jb21taXR0ZWQpKToKICAgICAgcmV0dXJuIEZhbHNlCiAgICBmb3IgKGtfbWF0Y2hlciwgdl9tYXRjaGVyKSBpbiBzZWxmLmxhYmVsX21hdGNoZXJzLml0ZW1zKCk6CiAgICAgIG1hdGNoZWRfa2V5cyA9IFsKICAgICAgICAgIGtleSBmb3Iga2V5IGluIG1ldHJpY19yZXN1bHQua2V5LmxhYmVscy5rZXlzKCkKICAgICAgICAgIGlmIGtfbWF0Y2hlci5tYXRjaGVzKGtleSkKICAgICAgXQogICAgICBtYXRjaGVkX2tleSA9IG1hdGNoZWRfa2V5c1swXSBpZiBtYXRjaGVkX2tleXMgZWxzZSBOb25lCiAgICAgIGlmIG5vdCBtYXRjaGVkX2tleToKICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgbGFiZWxfdmFsdWUgPSBtZXRyaWNfcmVzdWx0LmtleS5sYWJlbHNbbWF0Y2hlZF9rZXldCiAgICAgIGlmIG5vdCB2X21hdGNoZXIubWF0Y2hlcyhsYWJlbF92YWx1ZSk6CiAgICAgICAgcmV0dXJuIEZhbHNlCiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgZGVzY3JpYmVfdG8oc2VsZiwgZGVzY3JpcHRpb24pOgogICAgaWYgc2VsZi5uYW1lc3BhY2U6CiAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZF90ZXh0KCcgbmFtZXNwYWNlOiAnKQogICAgICBzZWxmLm5hbWVzcGFjZS5kZXNjcmliZV90byhkZXNjcmlwdGlvbikKICAgIGlmIHNlbGYubmFtZToKICAgICAgZGVzY3JpcHRpb24uYXBwZW5kX3RleHQoJyBuYW1lOiAnKQogICAgICBzZWxmLm5hbWUuZGVzY3JpYmVfdG8oZGVzY3JpcHRpb24pCiAgICBpZiBzZWxmLnN0ZXA6CiAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZF90ZXh0KCcgc3RlcDogJykKICAgICAgc2VsZi5zdGVwLmRlc2NyaWJlX3RvKGRlc2NyaXB0aW9uKQogICAgZm9yIChrX21hdGNoZXIsIHZfbWF0Y2hlcikgaW4gc2VsZi5sYWJlbF9tYXRjaGVycy5pdGVtcygpOgogICAgICBkZXNjcmlwdGlvbi5hcHBlbmRfdGV4dCgnIChsYWJlbF9rZXk6ICcpCiAgICAgIGtfbWF0Y2hlci5kZXNjcmliZV90byhkZXNjcmlwdGlvbikKICAgICAgZGVzY3JpcHRpb24uYXBwZW5kX3RleHQoJyBsYWJlbF92YWx1ZTogJykKICAgICAgdl9tYXRjaGVyLmRlc2NyaWJlX3RvKGRlc2NyaXB0aW9uKQogICAgICBkZXNjcmlwdGlvbi5hcHBlbmRfdGV4dCgnKS4gJykKICAgIGlmIHNlbGYuYXR0ZW1wdGVkIGlzIG5vdCBOb25lOgogICAgICBkZXNjcmlwdGlvbi5hcHBlbmRfdGV4dCgnIGF0dGVtcHRlZDogJykKICAgICAgc2VsZi5hdHRlbXB0ZWQuZGVzY3JpYmVfdG8oZGVzY3JpcHRpb24pCiAgICBpZiBzZWxmLmNvbW1pdHRlZCBpcyBub3QgTm9uZToKICAgICAgZGVzY3JpcHRpb24uYXBwZW5kX3RleHQoJyBjb21taXR0ZWQ6ICcpCiAgICAgIHNlbGYuY29tbWl0dGVkLmRlc2NyaWJlX3RvKGRlc2NyaXB0aW9uKQoKICBkZWYgZGVzY3JpYmVfbWlzbWF0Y2goc2VsZiwgbWV0cmljX3Jlc3VsdCwgbWlzbWF0Y2hfZGVzY3JpcHRpb24pOgogICAgbWlzbWF0Y2hfZGVzY3JpcHRpb24uYXBwZW5kX3RleHQoIndhcyIpLmFwcGVuZF92YWx1ZShtZXRyaWNfcmVzdWx0KQoKCmNsYXNzIERpc3RyaWJ1dGlvbk1hdGNoZXIoQmFzZU1hdGNoZXIpOgogICIiIkEgUHlIYW1jcmVzdCBtYXRjaGVyIHRoYXQgdmFsaWRhdGVzIGNvdW50ZXIgZGlzdHJpYnV0aW9ucy4iIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIHN1bV92YWx1ZT1Ob25lLCBjb3VudF92YWx1ZT1Ob25lLCBtaW5fdmFsdWU9Tm9uZSwgbWF4X3ZhbHVlPU5vbmUpOgogICAgc2VsZi5zdW1fdmFsdWUgPSBfbWF0Y2hlcl9vcl9lcXVhbF90byhzdW1fdmFsdWUpCiAgICBzZWxmLmNvdW50X3ZhbHVlID0gX21hdGNoZXJfb3JfZXF1YWxfdG8oY291bnRfdmFsdWUpCiAgICBzZWxmLm1pbl92YWx1ZSA9IF9tYXRjaGVyX29yX2VxdWFsX3RvKG1pbl92YWx1ZSkKICAgIHNlbGYubWF4X3ZhbHVlID0gX21hdGNoZXJfb3JfZXF1YWxfdG8obWF4X3ZhbHVlKQoKICBkZWYgX21hdGNoZXMoc2VsZiwgZGlzdHJpYnV0aW9uX3Jlc3VsdCk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShkaXN0cmlidXRpb25fcmVzdWx0LCBEaXN0cmlidXRpb25SZXN1bHQpOgogICAgICByZXR1cm4gRmFsc2UKICAgIGlmIHNlbGYuc3VtX3ZhbHVlIGFuZCBub3Qgc2VsZi5zdW1fdmFsdWUubWF0Y2hlcyhkaXN0cmlidXRpb25fcmVzdWx0LnN1bSk6CiAgICAgIHJldHVybiBGYWxzZQogICAgaWYgc2VsZi5jb3VudF92YWx1ZSBhbmQgbm90IHNlbGYuY291bnRfdmFsdWUubWF0Y2hlcygKICAgICAgICBkaXN0cmlidXRpb25fcmVzdWx0LmNvdW50KToKICAgICAgcmV0dXJuIEZhbHNlCiAgICBpZiBzZWxmLm1pbl92YWx1ZSBhbmQgbm90IHNlbGYubWluX3ZhbHVlLm1hdGNoZXMoZGlzdHJpYnV0aW9uX3Jlc3VsdC5taW4pOgogICAgICByZXR1cm4gRmFsc2UKICAgIGlmIHNlbGYubWF4X3ZhbHVlIGFuZCBub3Qgc2VsZi5tYXhfdmFsdWUubWF0Y2hlcyhkaXN0cmlidXRpb25fcmVzdWx0Lm1heCk6CiAgICAgIHJldHVybiBGYWxzZQogICAgcmV0dXJuIFRydWUKCiAgZGVmIGRlc2NyaWJlX3RvKHNlbGYsIGRlc2NyaXB0aW9uKToKICAgIGlmIHNlbGYuc3VtX3ZhbHVlOgogICAgICBkZXNjcmlwdGlvbi5hcHBlbmRfdGV4dCgnIHN1bV92YWx1ZTogJykKICAgICAgc2VsZi5zdW1fdmFsdWUuZGVzY3JpYmVfdG8oZGVzY3JpcHRpb24pCiAgICBpZiBzZWxmLmNvdW50X3ZhbHVlOgogICAgICBkZXNjcmlwdGlvbi5hcHBlbmRfdGV4dCgnIGNvdW50X3ZhbHVlOiAnKQogICAgICBzZWxmLmNvdW50X3ZhbHVlLmRlc2NyaWJlX3RvKGRlc2NyaXB0aW9uKQogICAgaWYgc2VsZi5taW5fdmFsdWU6CiAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZF90ZXh0KCcgbWluX3ZhbHVlOiAnKQogICAgICBzZWxmLm1pbl92YWx1ZS5kZXNjcmliZV90byhkZXNjcmlwdGlvbikKICAgIGlmIHNlbGYubWF4X3ZhbHVlOgogICAgICBkZXNjcmlwdGlvbi5hcHBlbmRfdGV4dCgnIG1heF92YWx1ZTogJykKICAgICAgc2VsZi5tYXhfdmFsdWUuZGVzY3JpYmVfdG8oZGVzY3JpcHRpb24pCgogIGRlZiBkZXNjcmliZV9taXNtYXRjaChzZWxmLCBkaXN0cmlidXRpb25fcmVzdWx0LCBtaXNtYXRjaF9kZXNjcmlwdGlvbik6CiAgICBtaXNtYXRjaF9kZXNjcmlwdGlvbi5hcHBlbmRfdGV4dCgnd2FzJykuYXBwZW5kX3ZhbHVlKGRpc3RyaWJ1dGlvbl9yZXN1bHQpCgoKZGVmIHZlcmlmeV9hbGwoYWxsX21ldHJpY3MsIG1hdGNoZXJzKToKICAiIiJWZXJpZmllZCB0aGF0IGV2ZXJ5IG1hdGNoZXIgbWF0Y2hlcyBhIG1ldHJpYyByZXN1bHQgaW4gYWxsX21ldHJpY3MuIiIiCiAgZXJyb3JzID0gW10KICBtYXRjaGVkX21ldHJpY3MgPSBbXQogIGZvciBtYXRjaGVyIGluIG1hdGNoZXJzOgogICAgbWF0Y2hlZF9tZXRyaWNzID0gW21yIGZvciBtciBpbiBhbGxfbWV0cmljcyBpZiBtYXRjaGVyLm1hdGNoZXMobXIpXQogICAgaWYgbm90IG1hdGNoZWRfbWV0cmljczoKICAgICAgZXJyb3JzLmFwcGVuZCgKICAgICAgICAgICdVbmFibGUgdG8gbWF0Y2ggbWV0cmljcyBmb3IgbWF0Y2hlciAlcycgJQogICAgICAgICAgKHN0cmluZ19kZXNjcmlwdGlvbi50b3N0cmluZyhtYXRjaGVyKSkpCiAgaWYgZXJyb3JzOgogICAgZXJyb3JzLmFwcGVuZCgKICAgICAgICAnXG5BY3R1YWwgTWV0cmljUmVzdWx0czpcbicgKyAnXG4nLmpvaW4oW3N0cihtcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBtciBpbiBhbGxfbWV0cmljc10pKQogIHJldHVybiAnJy5qb2luKGVycm9ycykKlH2UKIwUX21hdGNoZXJfb3JfZXF1YWxfdG+UalYxAQBLOEs+h5SMHE1ldHJpY1Jlc3VsdE1hdGNoZXIuX19pbml0X1+UalYxAQBLQ0tYh5SMHE1ldHJpY1Jlc3VsdE1hdGNoZXIuX21hdGNoZXOUalYxAQBLWktzh5SMH01ldHJpY1Jlc3VsdE1hdGNoZXIuZGVzY3JpYmVfdG+UalYxAQBLdUuKh5SMJU1ldHJpY1Jlc3VsdE1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUalYxAQBLjEuNh5SME01ldHJpY1Jlc3VsdE1hdGNoZXKUal0xAQBLQUuNh5SMHERpc3RyaWJ1dGlvbk1hdGNoZXIuX19pbml0X1+UalYxAQBLkkuXh5SMHERpc3RyaWJ1dGlvbk1hdGNoZXIuX21hdGNoZXOUalYxAQBLmUulh5SMH0Rpc3RyaWJ1dGlvbk1hdGNoZXIuZGVzY3JpYmVfdG+UalYxAQBLp0uzh5SMJURpc3RyaWJ1dGlvbk1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUalYxAQBLtUu2h5SME0Rpc3RyaWJ1dGlvbk1hdGNoZXKUal0xAQBLkEu2h5SMCnZlcmlmeV9hbGyUalYxAQBLuUvHh5R1fZQojBNNZXRyaWNSZXN1bHRNYXRjaGVylGq/AwAAjB9NZXRyaWNSZXN1bHRNYXRjaGVyLmRlc2NyaWJlX3RvlGq/AwAAjCVNZXRyaWNSZXN1bHRNYXRjaGVyLmRlc2NyaWJlX21pc21hdGNolGq/AwAAjBNEaXN0cmlidXRpb25NYXRjaGVylGq/AwAAjB9EaXN0cmlidXRpb25NYXRjaGVyLmRlc2NyaWJlX3RvlGq/AwAAjCVEaXN0cmlidXRpb25NYXRjaGVyLmRlc2NyaWJlX21pc21hdGNolGq/AwAAjAp2ZXJpZnlfYWxslGq/AwAAdYwqYXBhY2hlX2JlYW0udGVzdGluZy5tZXRyaWNfcmVzdWx0X21hdGNoZXJzlHSUjCZhcGFjaGVfYmVhbS50ZXN0aW5nLnBpcGVsaW5lX3ZlcmlmaWVyc5QoWPgUAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkVuZC10by1lbmQgdGVzdCByZXN1bHQgdmVyaWZpZXJzCgpBIHNldCBvZiB2ZXJpZmllcnMgdGhhdCBhcmUgdXNlZCBpbiBlbmQtdG8tZW5kIHRlc3RzIHRvIHZlcmlmeSBzdGF0ZS9vdXRwdXQKb2YgdGVzdCBwaXBlbGluZSBqb2IuIEN1c3RvbWl6ZWQgdmVyaWZpZXIgc2hvdWxkIGV4dGVuZApgaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIuQmFzZU1hdGNoZXJgIGFuZCBvdmVycmlkZSBfbWF0Y2hlcy4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHRpbWUKCmZyb20gaGFtY3Jlc3QuY29yZS5iYXNlX21hdGNoZXIgaW1wb3J0IEJhc2VNYXRjaGVyCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW1zIGltcG9ydCBGaWxlU3lzdGVtcwpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVN0YXRlCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZyBpbXBvcnQgdGVzdF91dGlscyBhcyB1dGlscwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCByZXRyeQoKX19hbGxfXyA9IFsKICAgICdQaXBlbGluZVN0YXRlTWF0Y2hlcicsCiAgICAnRmlsZUNoZWNrc3VtTWF0Y2hlcicsCiAgICAncmV0cnlfb25faW9fZXJyb3JfYW5kX3NlcnZlcl9lcnJvcicsCl0KCnRyeToKICBmcm9tIGFwaXRvb2xzLmJhc2UucHkuZXhjZXB0aW9ucyBpbXBvcnQgSHR0cEVycm9yCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBIdHRwRXJyb3IgPSBOb25lCgpNQVhfUkVUUklFUyA9IDQKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBQaXBlbGluZVN0YXRlTWF0Y2hlcihCYXNlTWF0Y2hlcik6CiAgIiIiTWF0Y2hlciB0aGF0IHZlcmlmeSBwaXBlbGluZSBqb2IgdGVybWluYXRlZCBpbiBleHBlY3RlZCBzdGF0ZQoKICBNYXRjaGVyIGNvbXBhcmVzIHRoZSBhY3R1YWwgcGlwZWxpbmUgdGVybWluYXRlIHN0YXRlIHdpdGggZXhwZWN0ZWQuCiAgQnkgZGVmYXVsdCwgYFBpcGVsaW5lU3RhdGUuRE9ORWAgaXMgdXNlZCBhcyBleHBlY3RlZCBzdGF0ZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZXhwZWN0ZWRfc3RhdGU9UGlwZWxpbmVTdGF0ZS5ET05FKToKICAgIHNlbGYuZXhwZWN0ZWRfc3RhdGUgPSBleHBlY3RlZF9zdGF0ZQoKICBkZWYgX21hdGNoZXMoc2VsZiwgcGlwZWxpbmVfcmVzdWx0KToKICAgIHJldHVybiBwaXBlbGluZV9yZXN1bHQuc3RhdGUgPT0gc2VsZi5leHBlY3RlZF9zdGF0ZQoKICBkZWYgZGVzY3JpYmVfdG8oc2VsZiwgZGVzY3JpcHRpb24pOgogICAgZGVzY3JpcHRpb24gXAogICAgICAuYXBwZW5kX3RleHQoIlRlc3QgcGlwZWxpbmUgZXhwZWN0ZWQgdGVybWluYXRlZCBpbiBzdGF0ZTogIikgXAogICAgICAuYXBwZW5kX3RleHQoc2VsZi5leHBlY3RlZF9zdGF0ZSkKCiAgZGVmIGRlc2NyaWJlX21pc21hdGNoKHNlbGYsIHBpcGVsaW5lX3Jlc3VsdCwgbWlzbWF0Y2hfZGVzY3JpcHRpb24pOgogICAgbWlzbWF0Y2hfZGVzY3JpcHRpb24gXAogICAgICAuYXBwZW5kX3RleHQoIlRlc3QgcGlwZWxpbmUgam9iIHRlcm1pbmF0ZWQgaW4gc3RhdGU6ICIpIFwKICAgICAgLmFwcGVuZF90ZXh0KHBpcGVsaW5lX3Jlc3VsdC5zdGF0ZSkKCgpkZWYgcmV0cnlfb25faW9fZXJyb3JfYW5kX3NlcnZlcl9lcnJvcihleGNlcHRpb24pOgogICIiIkZpbHRlciBhbGxvd2luZyByZXRyaWVzIG9uIGZpbGUgSS9PIGVycm9ycyBhbmQgc2VydmljZSBlcnJvci4iIiIKICByZXR1cm4gaXNpbnN0YW5jZShleGNlcHRpb24sIElPRXJyb3IpIG9yIFwKICAgICAgICAgIChIdHRwRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpKQoKCmNsYXNzIEZpbGVDaGVja3N1bU1hdGNoZXIoQmFzZU1hdGNoZXIpOgogICIiIk1hdGNoZXIgdGhhdCB2ZXJpZmllcyBmaWxlKHMpIGNvbnRlbnQgYnkgY29tcGFyaW5nIGZpbGUgY2hlY2tzdW0uCgogIFVzZSBhcGFjaGVfYmVhbS5pby5maWxlYmFzZWRzaW5rIHRvIGZldGNoIGZpbGUocykgZnJvbSBnaXZlbiBwYXRoLgogIEZpbGUgY2hlY2tzdW0gaXMgYSBoYXNoIHN0cmluZyBjb21wdXRlZCBmcm9tIGNvbnRlbnQgb2YgZmlsZShzKS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9wYXRoLCBleHBlY3RlZF9jaGVja3N1bSwgc2xlZXBfc2Vjcz1Ob25lKToKICAgICIiIkluaXRpYWxpemUgYSBGaWxlQ2hlY2tzdW1NYXRjaGVyIG9iamVjdAoKICAgIEFyZ3M6CiAgICAgIGZpbGVfcGF0aCA6IEEgc3RyaW5nIHRoYXQgaXMgdGhlIGZ1bGwgcGF0aCBvZiBvdXRwdXQgZmlsZS4gVGhpcyBwYXRoCiAgICAgICAgY2FuIGNvbnRhaW4gZ2xvYnMuCiAgICAgIGV4cGVjdGVkX2NoZWNrc3VtIDogQSBoYXNoIHN0cmluZyB0aGF0IGlzIGNvbXB1dGVkIGZyb20gZXhwZWN0ZWQKICAgICAgICByZXN1bHQuCiAgICAgIHNsZWVwX3NlY3MgOiBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB2ZXJpZmljYXRpb24gc3RhcnQuCiAgICAgICAgRXh0cmEgdGltZSBhcmUgZ2l2ZW4gdG8gbWFrZSBzdXJlIG91dHB1dCBmaWxlcyBhcmUgcmVhZHkgb24gRlMuCiAgICAiIiIKICAgIGlmIHNsZWVwX3NlY3MgaXMgbm90IE5vbmU6CiAgICAgIGlmIGlzaW5zdGFuY2Uoc2xlZXBfc2VjcywgaW50KToKICAgICAgICBzZWxmLnNsZWVwX3NlY3MgPSBzbGVlcF9zZWNzCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1NsZWVwIHNlY29uZHMsIGlmIHJlY2VpdmVkLCBtdXN0IGJlIGludC4gJwogICAgICAgICAgICAnQnV0IHJlY2VpdmVkOiAlciwgJXMnICUgKHNsZWVwX3NlY3MsIHR5cGUoc2xlZXBfc2VjcykpKQogICAgZWxzZToKICAgICAgc2VsZi5zbGVlcF9zZWNzID0gTm9uZQoKICAgIHNlbGYuZmlsZV9wYXRoID0gZmlsZV9wYXRoCiAgICBzZWxmLmV4cGVjdGVkX2NoZWNrc3VtID0gZXhwZWN0ZWRfY2hlY2tzdW0KCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigKICAgICAgbnVtX3JldHJpZXM9TUFYX1JFVFJJRVMsIHJldHJ5X2ZpbHRlcj1yZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9yKQogIGRlZiBfcmVhZF93aXRoX3JldHJ5KHNlbGYpOgogICAgIiIiUmVhZCBwYXRoIHdpdGggcmV0cnkgaWYgSS9PIGZhaWxlZCIiIgogICAgcmVhZF9saW5lcyA9IFtdCiAgICBtYXRjaF9yZXN1bHQgPSBGaWxlU3lzdGVtcy5tYXRjaChbc2VsZi5maWxlX3BhdGhdKVswXQogICAgbWF0Y2hlZF9wYXRoID0gW2YucGF0aCBmb3IgZiBpbiBtYXRjaF9yZXN1bHQubWV0YWRhdGFfbGlzdF0KICAgIGlmIG5vdCBtYXRjaGVkX3BhdGg6CiAgICAgIHJhaXNlIElPRXJyb3IoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICVzJyAlIHNlbGYuZmlsZV9wYXRoKQoKICAgIF9MT0dHRVIuaW5mbygKICAgICAgICAnRmluZCAlZCBmaWxlcyBpbiAlczogXG4lcycsCiAgICAgICAgbGVuKG1hdGNoZWRfcGF0aCksCiAgICAgICAgc2VsZi5maWxlX3BhdGgsCiAgICAgICAgJ1xuJy5qb2luKG1hdGNoZWRfcGF0aCkpCiAgICBmb3IgcGF0aCBpbiBtYXRjaGVkX3BhdGg6CiAgICAgIHdpdGggRmlsZVN5c3RlbXMub3BlbihwYXRoLCAncicpIGFzIGY6CiAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgIHJlYWRfbGluZXMuYXBwZW5kKGxpbmUpCiAgICByZXR1cm4gcmVhZF9saW5lcwoKICBkZWYgX21hdGNoZXMoc2VsZiwgXyk6CiAgICBpZiBzZWxmLnNsZWVwX3NlY3M6CiAgICAgICMgV2FpdCB0byBoYXZlIG91dHB1dCBmaWxlIHJlYWR5IG9uIEZTCiAgICAgIF9MT0dHRVIuaW5mbygnV2FpdCAlZCBzZWNvbmRzLi4uJywgc2VsZi5zbGVlcF9zZWNzKQogICAgICB0aW1lLnNsZWVwKHNlbGYuc2xlZXBfc2VjcykKCiAgICAjIFJlYWQgZnJvbSBnaXZlbiBmaWxlKHMpIHBhdGgKICAgIHJlYWRfbGluZXMgPSBzZWxmLl9yZWFkX3dpdGhfcmV0cnkoKQoKICAgICMgQ29tcHV0ZSBjaGVja3N1bQogICAgc2VsZi5jaGVja3N1bSA9IHV0aWxzLmNvbXB1dGVfaGFzaChyZWFkX2xpbmVzKQogICAgX0xPR0dFUi5pbmZvKAogICAgICAgICdSZWFkIGZyb20gZ2l2ZW4gcGF0aCAlcywgJWQgbGluZXMsIGNoZWNrc3VtOiAlcy4nLAogICAgICAgIHNlbGYuZmlsZV9wYXRoLAogICAgICAgIGxlbihyZWFkX2xpbmVzKSwKICAgICAgICBzZWxmLmNoZWNrc3VtKQogICAgcmV0dXJuIHNlbGYuY2hlY2tzdW0gPT0gc2VsZi5leHBlY3RlZF9jaGVja3N1bQoKICBkZWYgZGVzY3JpYmVfdG8oc2VsZiwgZGVzY3JpcHRpb24pOgogICAgZGVzY3JpcHRpb24gXAogICAgICAuYXBwZW5kX3RleHQoIkV4cGVjdGVkIGNoZWNrc3VtIGlzICIpIFwKICAgICAgLmFwcGVuZF90ZXh0KHNlbGYuZXhwZWN0ZWRfY2hlY2tzdW0pCgogIGRlZiBkZXNjcmliZV9taXNtYXRjaChzZWxmLCBwaXBlbGluZV9yZXN1bHQsIG1pc21hdGNoX2Rlc2NyaXB0aW9uKToKICAgIG1pc21hdGNoX2Rlc2NyaXB0aW9uIFwKICAgICAgLmFwcGVuZF90ZXh0KCJBY3R1YWwgY2hlY2tzdW0gaXMgIikgXAogICAgICAuYXBwZW5kX3RleHQoc2VsZi5jaGVja3N1bSkKlH2UKIwdUGlwZWxpbmVTdGF0ZU1hdGNoZXIuX19pbml0X1+UalYxAQBLPUs+h5SMHVBpcGVsaW5lU3RhdGVNYXRjaGVyLl9tYXRjaGVzlGpWMQEAS0BLQYeUjCBQaXBlbGluZVN0YXRlTWF0Y2hlci5kZXNjcmliZV90b5RqVjEBAEtDS0aHlIwmUGlwZWxpbmVTdGF0ZU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUalYxAQBLSEtLh5SMFFBpcGVsaW5lU3RhdGVNYXRjaGVylGpdMQEASzdLS4eUjCJyZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9ylGpWMQEAS05LUYeUjBxGaWxlQ2hlY2tzdW1NYXRjaGVyLl9faW5pdF9flGpWMQEAS1pLcIeUjCRGaWxlQ2hlY2tzdW1NYXRjaGVyLl9yZWFkX3dpdGhfcmV0cnmUalYxAQBLckuFh5SMHEZpbGVDaGVja3N1bU1hdGNoZXIuX21hdGNoZXOUalYxAQBLh0uXh5SMH0ZpbGVDaGVja3N1bU1hdGNoZXIuZGVzY3JpYmVfdG+UalYxAQBLmUuch5SMJUZpbGVDaGVja3N1bU1hdGNoZXIuZGVzY3JpYmVfbWlzbWF0Y2iUalYxAQBLnkuhh5SME0ZpbGVDaGVja3N1bU1hdGNoZXKUal0xAQBLVEuhh5R1fZQojBRQaXBlbGluZVN0YXRlTWF0Y2hlcpRqXwMAAIwgUGlwZWxpbmVTdGF0ZU1hdGNoZXIuZGVzY3JpYmVfdG+Ual8DAACMJlBpcGVsaW5lU3RhdGVNYXRjaGVyLmRlc2NyaWJlX21pc21hdGNolGpfAwAAjCJyZXRyeV9vbl9pb19lcnJvcl9hbmRfc2VydmVyX2Vycm9ylGpfAwAAjBNGaWxlQ2hlY2tzdW1NYXRjaGVylGpfAwAAjB9GaWxlQ2hlY2tzdW1NYXRjaGVyLmRlc2NyaWJlX3RvlGpfAwAAjCVGaWxlQ2hlY2tzdW1NYXRjaGVyLmRlc2NyaWJlX21pc21hdGNolGpfAwAAdYwmYXBhY2hlX2JlYW0udGVzdGluZy5waXBlbGluZV92ZXJpZmllcnOUdJSMJmFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5llChY8HgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBzZXQgb2YgdXRpbGl0aWVzIHRvIHdyaXRlIHBpcGVsaW5lcyBmb3IgcGVyZm9ybWFuY2UgdGVzdHMuCgpUaGlzIG1vZHVsZSBvZmZlcnMgYSB3YXkgdG8gY3JlYXRlIHBpcGVsaW5lcyB1c2luZyBzeW50aGV0aWMgc291cmNlcyBhbmQgc3RlcHMuCkV4YWN0IHNoYXBlIG9mIHRoZSBwaXBlbGluZSBhbmQgdGhlIGJlaGF2aW91ciBvZiBzb3VyY2VzIGFuZCBzdGVwcyBjYW4gYmUKY29udHJvbGxlZCB0aHJvdWdoIGFyZ3VtZW50cy4gUGxlYXNlIHNlZSBmdW5jdGlvbiAncGFyc2VfYXJncygpJyBmb3IgbW9yZQpkZXRhaWxzIGFib3V0IHRoZSBhcmd1bWVudHMuCgpTaGFwZSBvZiB0aGUgcGlwZWxpbmUgaXMgcHJpbWFyaXkgY29udHJvbGxlZCB0aHJvdWdoIHR3byBhcmd1bWVudHMuIEFyZ3VtZW50CidzdGVwcycgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGEgbGlzdCBvZiBzdGVwcyBhcyBhIEpTT04gc3RyaW5nLiBBcmd1bWVudAonYmFycmllcicgZGVzY3JpYmVzIGhvdyB0aGVzZSBzdGVwcyBhcmUgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlci4gQXJndW1lbnQKJ2JhcnJpZXInIGNhbiBiZSB1c2UgdG8gYnVpbGQgYSBwaXBlbGluZSBhcyBhIGEgc2VyaWVzIG9mIHN0ZXBzIG9yIGEgdHJlZSBvZgpzdGVwcyB3aXRoIGEgZmFuaW4gb3IgYSBmYW5vdXQgb2Ygc2l6ZSAyLgoKT3RoZXIgYXJndW1lbnRzIGRlc2NyaWJlIHdoYXQgZ2V0cyBnZW5lcmF0ZWQgYnkgc3ludGhldGljIHNvdXJjZXMgdGhhdCBwcm9kdWNlCmRhdGEgZm9yIHRoZSBwaXBlbGluZS4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGpzb24KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG1hdGgKaW1wb3J0IHRpbWUKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IFdyaXRlVG9UZXh0CmZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCByYW5nZV90cmFja2Vycwpmcm9tIGFwYWNoZV9iZWFtLmlvIGltcG9ydCByZXN0cmljdGlvbl90cmFja2Vycwpmcm9tIGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzIGltcG9ydCBPZmZzZXRSYW5nZQpmcm9tIGFwYWNoZV9iZWFtLmlvLnJlc3RyaWN0aW9uX3RyYWNrZXJzIGltcG9ydCBPZmZzZXRSZXN0cmljdGlvblRyYWNrZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgU2V0dXBPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lIGltcG9ydCBUZXN0UGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFJlc3RyaWN0aW9uUHJvdmlkZXIKCnRyeToKICBpbXBvcnQgbnVtcHkgYXMgbnAKZXhjZXB0IEltcG9ydEVycm9yOgogIG5wID0gTm9uZQoKCmRlZiBwYXJzZV9ieXRlX3NpemUocyk6CiAgc3VmZml4ZXMgPSAnQktNR1RQJwogIGlmIHNbLTFdIGluIHN1ZmZpeGVzOgogICAgcmV0dXJuIGludChmbG9hdChzWzotMV0pICogMTAyNCoqc3VmZml4ZXMuaW5kZXgoc1stMV0pKQoKICByZXR1cm4gaW50KHMpCgoKZGVmIGRpdl9yb3VuZF91cChhLCBiKToKICAiIiJSZXR1cm4gY2VpbChhL2IpLiIiIgogIHJldHVybiBpbnQobWF0aC5jZWlsKGZsb2F0KGEpIC8gYikpCgoKZGVmIHJvdGF0ZV9rZXkoZWxlbWVudCk6CiAgIiIiUmV0dXJucyBhIG5ldyBrZXktdmFsdWUgcGFpciBvZiB0aGUgc2FtZSBzaXplIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGtleS4iIiIKICAoa2V5LCB2YWx1ZSkgPSBlbGVtZW50CiAgcmV0dXJuIGtleVstMTpdICsga2V5WzotMV0sIHZhbHVlCgoKZGVmIGluaXRpYWxfc3BsaXR0aW5nX3ppcGYoCiAgICBzdGFydF9wb3NpdGlvbiwKICAgIHN0b3BfcG9zaXRpb24sCiAgICBkZXNpcmVkX251bV9idW5kbGVzLAogICAgZGlzdHJpYnV0aW9uX3BhcmFtZXRlciwKICAgIG51bV90b3RhbF9yZWNvcmRzPU5vbmUpOgogICIiIlNwbGl0IHRoZSBnaXZlbiByYW5nZSAoZGVmaW5lZCBieSBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbikgaW50bwogICAgIGRlc2lyZWRfbnVtX2J1bmRsZXMgdXNpbmcgemlwZiB3aXRoIHRoZSBnaXZlbiBkaXN0cmlidXRpb25fcGFyYW1ldGVyLgogICIiIgogIGlmIG5vdCBudW1fdG90YWxfcmVjb3JkczoKICAgIG51bV90b3RhbF9yZWNvcmRzID0gc3RvcF9wb3NpdGlvbiAtIHN0YXJ0X3Bvc2l0aW9uCiAgc2FtcGxlcyA9IG5wLnJhbmRvbS56aXBmKGRpc3RyaWJ1dGlvbl9wYXJhbWV0ZXIsIGRlc2lyZWRfbnVtX2J1bmRsZXMpCiAgdG90YWwgPSBzdW0oc2FtcGxlcykKICByZWxhdGl2ZV9idW5kbGVfc2l6ZXMgPSBbKGZsb2F0KHNhbXBsZSkgLyB0b3RhbCkgZm9yIHNhbXBsZSBpbiBzYW1wbGVzXQogIGJ1bmRsZV9yYW5nZXMgPSBbXQogIHN0YXJ0ID0gc3RhcnRfcG9zaXRpb24KICBpbmRleCA9IDAKICB3aGlsZSBzdGFydCA8IHN0b3BfcG9zaXRpb246CiAgICBpZiBpbmRleCA9PSBkZXNpcmVkX251bV9idW5kbGVzIC0gMToKICAgICAgYnVuZGxlX3Jhbmdlcy5hcHBlbmQoKHN0YXJ0LCBzdG9wX3Bvc2l0aW9uKSkKICAgICAgYnJlYWsKICAgIHN0b3AgPSBzdGFydCArIGludChudW1fdG90YWxfcmVjb3JkcyAqIHJlbGF0aXZlX2J1bmRsZV9zaXplc1tpbmRleF0pCiAgICBidW5kbGVfcmFuZ2VzLmFwcGVuZCgoc3RhcnQsIHN0b3ApKQogICAgc3RhcnQgPSBzdG9wCiAgICBpbmRleCArPSAxCiAgcmV0dXJuIGJ1bmRsZV9yYW5nZXMKCgpjbGFzcyBTeW50aGV0aWNTdGVwKGJlYW0uRG9Gbik6CiAgIiIiQSBEb0ZuIG9mIHdoaWNoIGJlaGF2aW9yIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggcHJlc3BlY2lmaWVkIHBhcmFtZXRlcnMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBwZXJfZWxlbWVudF9kZWxheV9zZWM9MCwKICAgICAgcGVyX2J1bmRsZV9kZWxheV9zZWM9MCwKICAgICAgb3V0cHV0X3JlY29yZHNfcGVyX2lucHV0X3JlY29yZD0xLAogICAgICBvdXRwdXRfZmlsdGVyX3JhdGlvPTApOgogICAgaWYgcGVyX2VsZW1lbnRfZGVsYXlfc2VjIGFuZCBwZXJfZWxlbWVudF9kZWxheV9zZWMgPCAxZS0zOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ1BlciBlbGVtZW50IHNsZWVwIHRpbWUgbXVzdCBiZSBhdCBsZWFzdCAxZS0zLiAnCiAgICAgICAgICAnUmVjZWl2ZWQ6ICVyJywKICAgICAgICAgIHBlcl9lbGVtZW50X2RlbGF5X3NlYykKICAgIHNlbGYuX3Blcl9lbGVtZW50X2RlbGF5X3NlYyA9IHBlcl9lbGVtZW50X2RlbGF5X3NlYwogICAgc2VsZi5fcGVyX2J1bmRsZV9kZWxheV9zZWMgPSBwZXJfYnVuZGxlX2RlbGF5X3NlYwogICAgc2VsZi5fb3V0cHV0X3JlY29yZHNfcGVyX2lucHV0X3JlY29yZCA9IG91dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQKICAgIHNlbGYuX291dHB1dF9maWx0ZXJfcmF0aW8gPSBvdXRwdXRfZmlsdGVyX3JhdGlvCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICBzZWxmLl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICAjIFRoZSB0YXJnZXQgaXMgZm9yIHRoZSBlbmNsb3Npbmcgc3RhZ2UgdG8gdGFrZSBhcyBjbG9zZSB0byBhcyBwb3NzaWJsZQogICAgIyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMsIHNvIHdlIG9ubHkgc2xlZXAgZW5vdWdoIHRvIG1ha2UgdXAgZm9yCiAgICAjIG92ZXJoZWFkcyBub3QgaW5jdXJyZWQgZWxzZXdoZXJlLgogICAgdG9fc2xlZXAgPSBzZWxmLl9wZXJfYnVuZGxlX2RlbGF5X3NlYyAtICh0aW1lLnRpbWUoKSAtIHNlbGYuX3N0YXJ0X3RpbWUpCgogICAgIyBJZ25vcmluZyBzdWItbWlsbGlzZWNvbmQgc2xlZXAgdGltZXMuCiAgICBpZiB0b19zbGVlcCA+PSAxZS0zOgogICAgICB0aW1lLnNsZWVwKHRvX3NsZWVwKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIGlmIHNlbGYuX3Blcl9lbGVtZW50X2RlbGF5X3NlYyA+PSAxZS0zOgogICAgICB0aW1lLnNsZWVwKHNlbGYuX3Blcl9lbGVtZW50X2RlbGF5X3NlYykKICAgIGZpbHRlcl9lbGVtZW50ID0gRmFsc2UKICAgIGlmIHNlbGYuX291dHB1dF9maWx0ZXJfcmF0aW8gPiAwOgogICAgICBpZiBucC5yYW5kb20ucmFuZG9tKCkgPCBzZWxmLl9vdXRwdXRfZmlsdGVyX3JhdGlvOgogICAgICAgIGZpbHRlcl9lbGVtZW50ID0gVHJ1ZQoKICAgIGlmIG5vdCBmaWx0ZXJfZWxlbWVudDoKICAgICAgZm9yIF8gaW4gcmFuZ2Uoc2VsZi5fb3V0cHV0X3JlY29yZHNfcGVyX2lucHV0X3JlY29yZCk6CiAgICAgICAgeWllbGQgZWxlbWVudAoKCmNsYXNzIE5vbkxpcXVpZFNoYXJkaW5nT2Zmc2V0UmFuZ2VUcmFja2VyKE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlcik6CiAgIiIiQW4gT2Zmc2V0UmFuZ2VUcmFja2VyIHRoYXQgZG9lc24ndCBhbGxvdyBzcGxpdHRpbmcuICIiIgogIGRlZiB0cnlfc3BsaXQoc2VsZiwgc3BsaXRfb2Zmc2V0KToKICAgIHBhc3MgICMgRG9uJ3Qgc3BsaXQuCgogIGRlZiBjaGVja3BvaW50KHNlbGYpOgogICAgcGFzcyAgIyBEb24ndCBzcGxpdC4KCgpjbGFzcyBTeW50aGV0aWNTREZTdGVwUmVzdHJpY3Rpb25Qcm92aWRlcihSZXN0cmljdGlvblByb3ZpZGVyKToKICAiIiJBIGBSZXN0cmljdGlvblByb3ZpZGVyYCBmb3IgU3ludGhldGljU0RGU3RlcC4KCiAgQW4gaW5pdGlhbF9yZXN0cmljdGlvbiBhbmQgc3BsaXQgdGhhdCBvcGVyYXRlIG9uIG51bV9yZWNvcmRzIGFuZCBpZ25vcmVzCiAgc291cmNlIGRlc2NyaXB0aW9uIChlbGVtZW50KS4gU3BsaXRzIGludG8gaW5pdGlhbF9zcGxpdHRpbmdfbnVtX2J1bmRsZXMuCiAgUmV0dXJucyBzaXplX2VzdGltYXRlX292ZXJyaWRlIGFzIHJlc3RyaWN0aW9uIHNpemUsIGlmIHNldC4gT3RoZXJ3aXNlIHVzZXMKICBlbGVtZW50IHNpemUuCgogIElmIGluaXRpYWxfc3BsaXR0aW5nX3VuZXZlbl9jaHVua3MsIHByb2R1Y2VzIHVuZXZlbiBjaHVua3MuCgogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgbnVtX3JlY29yZHMsCiAgICAgIGluaXRpYWxfc3BsaXR0aW5nX251bV9idW5kbGVzLAogICAgICBpbml0aWFsX3NwbGl0dGluZ191bmV2ZW5fY2h1bmtzLAogICAgICBkaXNhYmxlX2xpcXVpZF9zaGFyZGluZywKICAgICAgc2l6ZV9lc3RpbWF0ZV9vdmVycmlkZSk6CiAgICBzZWxmLl9udW1fcmVjb3JkcyA9IG51bV9yZWNvcmRzCiAgICBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcyA9IGluaXRpYWxfc3BsaXR0aW5nX251bV9idW5kbGVzCiAgICBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ191bmV2ZW5fY2h1bmtzID0gaW5pdGlhbF9zcGxpdHRpbmdfdW5ldmVuX2NodW5rcwogICAgc2VsZi5fZGlzYWJsZV9saXF1aWRfc2hhcmRpbmcgPSBkaXNhYmxlX2xpcXVpZF9zaGFyZGluZwogICAgc2VsZi5fc2l6ZV9lc3RpbWF0ZV9vdmVycmlkZSA9IHNpemVfZXN0aW1hdGVfb3ZlcnJpZGUKCiAgZGVmIGluaXRpYWxfcmVzdHJpY3Rpb24oc2VsZiwgZWxlbWVudCk6CiAgICByZXR1cm4gT2Zmc2V0UmFuZ2UoMCwgc2VsZi5fbnVtX3JlY29yZHMpCgogIGRlZiBjcmVhdGVfdHJhY2tlcihzZWxmLCByZXN0cmljdGlvbik6CiAgICBpZiBzZWxmLl9kaXNhYmxlX2xpcXVpZF9zaGFyZGluZzoKICAgICAgcmV0dXJuIE5vbkxpcXVpZFNoYXJkaW5nT2Zmc2V0UmFuZ2VUcmFja2VyKHJlc3RyaWN0aW9uKQogICAgZWxzZToKICAgICAgcmV0dXJuIE9mZnNldFJlc3RyaWN0aW9uVHJhY2tlcihyZXN0cmljdGlvbikKCiAgZGVmIHNwbGl0KHNlbGYsIGVsZW1lbnQsIHJlc3RyaWN0aW9uKToKICAgIGVsZW1zID0gcmVzdHJpY3Rpb24uc2l6ZSgpCiAgICBpZiAoc2VsZi5faW5pdGlhbF9zcGxpdHRpbmdfdW5ldmVuX2NodW5rcyBhbmQKICAgICAgICBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcyA+IDEgYW5kIGVsZW1zID4gMSk6CiAgICAgIGJ1bmRsZV9yYW5nZXMgPSBpbml0aWFsX3NwbGl0dGluZ196aXBmKAogICAgICAgICAgcmVzdHJpY3Rpb24uc3RhcnQsCiAgICAgICAgICByZXN0cmljdGlvbi5zdG9wLAogICAgICAgICAgc2VsZi5faW5pdGlhbF9zcGxpdHRpbmdfbnVtX2J1bmRsZXMsCiAgICAgICAgICAzLjApCiAgICAgIGZvciBzdGFydCwgc3RvcCBpbiBidW5kbGVfcmFuZ2VzOgogICAgICAgIHlpZWxkIE9mZnNldFJhbmdlKHN0YXJ0LCBzdG9wKQoKICAgIGVsc2U6CiAgICAgIG9mZnNldHNfcGVyX3NwbGl0ID0gbWF4KDEsIChlbGVtcyAvLyBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcykpCiAgICAgIGZvciBzcGxpdCBpbiByZXN0cmljdGlvbi5zcGxpdChvZmZzZXRzX3Blcl9zcGxpdCwgb2Zmc2V0c19wZXJfc3BsaXQgLy8gMik6CiAgICAgICAgeWllbGQgc3BsaXQKCiAgZGVmIHJlc3RyaWN0aW9uX3NpemUoc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgaWYgc2VsZi5fc2l6ZV9lc3RpbWF0ZV9vdmVycmlkZSBpcyBub3QgTm9uZToKICAgICAgcmV0dXJuIHNlbGYuX3NpemVfZXN0aW1hdGVfb3ZlcnJpZGUKICAgIGVsZW1lbnRfc2l6ZSA9IGxlbihlbGVtZW50KSBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIHN0cikgZWxzZSAxCiAgICByZXR1cm4gcmVzdHJpY3Rpb24uc2l6ZSgpICogZWxlbWVudF9zaXplCgoKZGVmIGdldF9zeW50aGV0aWNfc2RmX3N0ZXAoCiAgICBwZXJfZWxlbWVudF9kZWxheV9zZWM9MCwKICAgIHBlcl9idW5kbGVfZGVsYXlfc2VjPTAsCiAgICBvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkPTEsCiAgICBvdXRwdXRfZmlsdGVyX3JhdGlvPTAsCiAgICBpbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcz04LAogICAgaW5pdGlhbF9zcGxpdHRpbmdfdW5ldmVuX2NodW5rcz1GYWxzZSwKICAgIGRpc2FibGVfbGlxdWlkX3NoYXJkaW5nPUZhbHNlLAogICAgc2l6ZV9lc3RpbWF0ZV9vdmVycmlkZT1Ob25lLAopOgogICIiIkEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIFN5bnRoZXRpY1NERlN0ZXAgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLiAiIiIKICBjbGFzcyBTeW50aGV0aWNTREZTdGVwKGJlYW0uRG9Gbik6CiAgICAiIiJBIFNwbGl0dGFibGVEb0ZuIG9mIHdoaWNoIGJlaGF2aW9yIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggcHJlc3BlY2lmaWVkCiAgICAgICBwYXJhbWV0ZXJzLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICBwZXJfZWxlbWVudF9kZWxheV9zZWNfYXJnLAogICAgICAgIHBlcl9idW5kbGVfZGVsYXlfc2VjX2FyZywKICAgICAgICBvdXRwdXRfZmlsdGVyX3JhdGlvX2FyZywKICAgICAgICBvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkX2FyZyk6CiAgICAgIGlmIHBlcl9lbGVtZW50X2RlbGF5X3NlY19hcmc6CiAgICAgICAgcGVyX2VsZW1lbnRfZGVsYXlfc2VjX2FyZyA9ICgKICAgICAgICAgICAgcGVyX2VsZW1lbnRfZGVsYXlfc2VjX2FyZyAvLyBvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkX2FyZykKICAgICAgICBpZiBwZXJfZWxlbWVudF9kZWxheV9zZWNfYXJnIDwgMWUtMzoKICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAgJ1BlciBlbGVtZW50IHNsZWVwIHRpbWUgbXVzdCBiZSBhdCBsZWFzdCAxZS0zIGFmdGVyIGJlaW5nICcKICAgICAgICAgICAgICAnZGl2aWRlZCBhbW9uZyBvdXRwdXQgZWxlbWVudHMuJykKICAgICAgc2VsZi5fcGVyX2VsZW1lbnRfZGVsYXlfc2VjID0gcGVyX2VsZW1lbnRfZGVsYXlfc2VjX2FyZwogICAgICBzZWxmLl9wZXJfYnVuZGxlX2RlbGF5X3NlYyA9IHBlcl9idW5kbGVfZGVsYXlfc2VjX2FyZwogICAgICBzZWxmLl9vdXRwdXRfZmlsdGVyX3JhdGlvID0gb3V0cHV0X2ZpbHRlcl9yYXRpb19hcmcKCiAgICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgICBzZWxmLl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKCiAgICBkZWYgZmluaXNoX2J1bmRsZShzZWxmKToKICAgICAgIyBUaGUgdGFyZ2V0IGlzIGZvciB0aGUgZW5jbG9zaW5nIHN0YWdlIHRvIHRha2UgYXMgY2xvc2UgdG8gYXMgcG9zc2libGUKICAgICAgIyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMsIHNvIHdlIG9ubHkgc2xlZXAgZW5vdWdoIHRvIG1ha2UgdXAgZm9yCiAgICAgICMgb3ZlcmhlYWRzIG5vdCBpbmN1cnJlZCBlbHNld2hlcmUuCiAgICAgIHRvX3NsZWVwID0gc2VsZi5fcGVyX2J1bmRsZV9kZWxheV9zZWMgLSAodGltZS50aW1lKCkgLSBzZWxmLl9zdGFydF90aW1lKQoKICAgICAgIyBJZ25vcmluZyBzdWItbWlsbGlzZWNvbmQgc2xlZXAgdGltZXMuCiAgICAgIGlmIHRvX3NsZWVwID49IDFlLTM6CiAgICAgICAgdGltZS5zbGVlcCh0b19zbGVlcCkKCiAgICBkZWYgcHJvY2VzcygKICAgICAgICBzZWxmLAogICAgICAgIGVsZW1lbnQsCiAgICAgICAgcmVzdHJpY3Rpb25fdHJhY2tlcj1iZWFtLkRvRm4uUmVzdHJpY3Rpb25QYXJhbSgKICAgICAgICAgICAgU3ludGhldGljU0RGU3RlcFJlc3RyaWN0aW9uUHJvdmlkZXIoCiAgICAgICAgICAgICAgICBvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkLAogICAgICAgICAgICAgICAgaW5pdGlhbF9zcGxpdHRpbmdfbnVtX2J1bmRsZXMsCiAgICAgICAgICAgICAgICBpbml0aWFsX3NwbGl0dGluZ191bmV2ZW5fY2h1bmtzLAogICAgICAgICAgICAgICAgZGlzYWJsZV9saXF1aWRfc2hhcmRpbmcsCiAgICAgICAgICAgICAgICBzaXplX2VzdGltYXRlX292ZXJyaWRlKSkpOgogICAgICBmaWx0ZXJfZWxlbWVudCA9IEZhbHNlCiAgICAgIGlmIHNlbGYuX291dHB1dF9maWx0ZXJfcmF0aW8gPiAwOgogICAgICAgIGlmIG5wLnJhbmRvbS5yYW5kb20oKSA8IHNlbGYuX291dHB1dF9maWx0ZXJfcmF0aW86CiAgICAgICAgICBmaWx0ZXJfZWxlbWVudCA9IFRydWUKCiAgICAgIGN1cnJlbnRfcmVzdHJpY3Rpb24gPSByZXN0cmljdGlvbl90cmFja2VyLmN1cnJlbnRfcmVzdHJpY3Rpb24oKQogICAgICBmb3IgY3VyIGluIHJhbmdlKGN1cnJlbnRfcmVzdHJpY3Rpb24uc3RhcnQsIGN1cnJlbnRfcmVzdHJpY3Rpb24uc3RvcCk6CiAgICAgICAgaWYgbm90IHJlc3RyaWN0aW9uX3RyYWNrZXIudHJ5X2NsYWltKGN1cik6CiAgICAgICAgICByZXR1cm4KCiAgICAgICAgaWYgc2VsZi5fcGVyX2VsZW1lbnRfZGVsYXlfc2VjOgogICAgICAgICAgdGltZS5zbGVlcChzZWxmLl9wZXJfZWxlbWVudF9kZWxheV9zZWMpCgogICAgICAgIGlmIG5vdCBmaWx0ZXJfZWxlbWVudDoKICAgICAgICAgIHlpZWxkIGVsZW1lbnQKICAgICAgICBjdXIgKz0gMQoKICByZXR1cm4gU3ludGhldGljU0RGU3RlcCgKICAgICAgcGVyX2VsZW1lbnRfZGVsYXlfc2VjLAogICAgICBwZXJfYnVuZGxlX2RlbGF5X3NlYywKICAgICAgb3V0cHV0X2ZpbHRlcl9yYXRpbywKICAgICAgb3V0cHV0X3JlY29yZHNfcGVyX2lucHV0X3JlY29yZCkKCgpjbGFzcyBTeW50aGV0aWNTb3VyY2UoaW9iYXNlLkJvdW5kZWRTb3VyY2UpOgogICIiIkEgY3VzdG9tIHNvdXJjZSBvZiBhIHNwZWNpZmllZCBzaXplLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dF9zcGVjKToKICAgICIiIkluaXRpYXRlcyBhIHN5bnRoZXRpYyBzb3VyY2UuCgogICAgQXJnczoKICAgICAgaW5wdXRfc3BlYzogSW5wdXQgc3BlY2lmaWNhdGlvbiBvZiB0aGUgc291cmNlLiBTZWUgY29ycmVzcG9uZGluZyBvcHRpb24gaW4KICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gJ3BhcnNlX2FyZ3MoKScgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KICAgICIiIgogICAgZGVmIG1heWJlX3BhcnNlX2J5dGVfc2l6ZShzKToKICAgICAgcmV0dXJuIHBhcnNlX2J5dGVfc2l6ZShzKSBpZiBpc2luc3RhbmNlKHMsIHN0cikgZWxzZSBpbnQocykKCiAgICBzZWxmLl9udW1fcmVjb3JkcyA9IGlucHV0X3NwZWNbJ251bVJlY29yZHMnXQogICAgc2VsZi5fa2V5X3NpemUgPSBtYXliZV9wYXJzZV9ieXRlX3NpemUoaW5wdXRfc3BlYy5nZXQoJ2tleVNpemVCeXRlcycsIDEpKQogICAgc2VsZi5faG90X2tleV9mcmFjdGlvbiA9IGlucHV0X3NwZWMuZ2V0KCdob3RLZXlGcmFjdGlvbicsIDApCiAgICBzZWxmLl9udW1faG90X2tleXMgPSBpbnB1dF9zcGVjLmdldCgnbnVtSG90S2V5cycsIDApCgogICAgc2VsZi5fdmFsdWVfc2l6ZSA9IG1heWJlX3BhcnNlX2J5dGVfc2l6ZSgKICAgICAgICBpbnB1dF9zcGVjLmdldCgndmFsdWVTaXplQnl0ZXMnLCAxKSkKICAgIHNlbGYuX3RvdGFsX3NpemUgPSBzZWxmLmVsZW1lbnRfc2l6ZSAqIHNlbGYuX251bV9yZWNvcmRzCiAgICBzZWxmLl9pbml0aWFsX3NwbGl0dGluZyA9ICgKICAgICAgICBpbnB1dF9zcGVjWydidW5kbGVTaXplRGlzdHJpYnV0aW9uJ11bJ3R5cGUnXQogICAgICAgIGlmICdidW5kbGVTaXplRGlzdHJpYnV0aW9uJyBpbiBpbnB1dF9zcGVjIGVsc2UgJ2NvbnN0JykKICAgIGlmIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nICE9ICdjb25zdCcgYW5kIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nICE9ICd6aXBmJzoKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdPbmx5IGNvbnN0IGFuZCB6aXBmIGRpc3RyaWJ1dGlvbnMgYXJlIHN1cHBvcnRlZCBmb3IgZGV0ZXJtaW5pbmcgJwogICAgICAgICAgJ3NpemVzIG9mIGJ1bmRsZXMgcHJvZHVjZWQgYnkgaW5pdGlhbCBzcGxpdHRpbmcuIFJlY2VpdmVkOiAlcycsCiAgICAgICAgICBzZWxmLl9pbml0aWFsX3NwbGl0dGluZykKICAgIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nX251bV9idW5kbGVzID0gKAogICAgICAgIGlucHV0X3NwZWNbJ2ZvcmNlTnVtSW5pdGlhbEJ1bmRsZXMnXQogICAgICAgIGlmICdmb3JjZU51bUluaXRpYWxCdW5kbGVzJyBpbiBpbnB1dF9zcGVjIGVsc2UgMCkKICAgIGlmIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nID09ICd6aXBmJzoKICAgICAgc2VsZi5faW5pdGlhbF9zcGxpdHRpbmdfZGlzdHJpYnV0aW9uX3BhcmFtZXRlciA9ICgKICAgICAgICAgIGlucHV0X3NwZWNbJ2J1bmRsZVNpemVEaXN0cmlidXRpb24nXVsncGFyYW0nXSkKICAgICAgaWYgc2VsZi5faW5pdGlhbF9zcGxpdHRpbmdfZGlzdHJpYnV0aW9uX3BhcmFtZXRlciA8IDE6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1BhcmFtZXRlciBmb3IgYSBaaXBmIGRpc3RyaWJ1dGlvbiBtdXN0IGJlIGxhcmdlciB0aGFuIDEuICcKICAgICAgICAgICAgJ1JlY2VpdmVkICVyLicsCiAgICAgICAgICAgIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nX2Rpc3RyaWJ1dGlvbl9wYXJhbWV0ZXIpCiAgICBlbHNlOgogICAgICBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ19kaXN0cmlidXRpb25fcGFyYW1ldGVyID0gMAogICAgc2VsZi5fZHluYW1pY19zcGxpdHRpbmcgPSAoCiAgICAgICAgJ25vbmUnIGlmICgKICAgICAgICAgICAgJ3NwbGl0UG9pbnRGcmVxdWVuY3lSZWNvcmRzJyBpbiBpbnB1dF9zcGVjIGFuZAogICAgICAgICAgICBpbnB1dF9zcGVjWydzcGxpdFBvaW50RnJlcXVlbmN5UmVjb3JkcyddID09IDApIGVsc2UgJ3BlcmZlY3QnKQogICAgaWYgJ2RlbGF5RGlzdHJpYnV0aW9uJyBpbiBpbnB1dF9zcGVjOgogICAgICBpZiBpbnB1dF9zcGVjWydkZWxheURpc3RyaWJ1dGlvbiddWyd0eXBlJ10gIT0gJ2NvbnN0JzoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnU3ludGhldGljU291cmNlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGRlbGF5ICcKICAgICAgICAgICAgJ2Rpc3RyaWJ1dGlvbnMgb2YgdHlwZSBcJ2NvbnN0XCcuIFJlY2VpdmVkICVzLicsCiAgICAgICAgICAgIGlucHV0X3NwZWNbJ2RlbGF5RGlzdHJpYnV0aW9uJ11bJ3R5cGUnXSkKICAgICAgc2VsZi5fc2xlZXBfcGVyX2lucHV0X3JlY29yZF9zZWMgPSAoCiAgICAgICAgICBmbG9hdChpbnB1dF9zcGVjWydkZWxheURpc3RyaWJ1dGlvbiddWydjb25zdCddKSAvIDEwMDApCiAgICAgIGlmIChzZWxmLl9zbGVlcF9wZXJfaW5wdXRfcmVjb3JkX3NlYyBhbmQKICAgICAgICAgIHNlbGYuX3NsZWVwX3Blcl9pbnB1dF9yZWNvcmRfc2VjIDwgMWUtMyk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1NsZWVwIHRpbWUgcGVyIGlucHV0IHJlY29yZCBtdXN0IGJlIGF0IGxlYXN0IDFlLTMuJwogICAgICAgICAgICAnIFJlY2VpdmVkOiAlcicsCiAgICAgICAgICAgIHNlbGYuX3NsZWVwX3Blcl9pbnB1dF9yZWNvcmRfc2VjKQogICAgZWxzZToKICAgICAgc2VsZi5fc2xlZXBfcGVyX2lucHV0X3JlY29yZF9zZWMgPSAwCgogIEBwcm9wZXJ0eQogIGRlZiBlbGVtZW50X3NpemUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fa2V5X3NpemUgKyBzZWxmLl92YWx1ZV9zaXplCgogIGRlZiBlc3RpbWF0ZV9zaXplKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX3RvdGFsX3NpemUKCiAgZGVmIHNwbGl0KHNlbGYsIGRlc2lyZWRfYnVuZGxlX3NpemUsIHN0YXJ0X3Bvc2l0aW9uPTAsIHN0b3BfcG9zaXRpb249Tm9uZSk6CiAgICAjIFBlcmZvcm1zIGluaXRpYWwgc3BsaXR0aW5nIG9mIFN5bnRoZXRpY1NvdXJjZS4KICAgICMKICAgICMgRXhhY3Qgc2l6ZXMgYW5kIGRpc3RyaWJ1dGlvbiBvZiBpbml0aWFsIHNwbGl0cyBnZW5lcmF0ZWQgaGVyZSBkZXBlbmRzIG9uCiAgICAjIHRoZSBpbnB1dCBzcGVjaWZpY2F0aW9uIG9mIHRoZSBTeW50aGV0aWNTb3VyY2UuCgogICAgaWYgc3RvcF9wb3NpdGlvbiBpcyBOb25lOgogICAgICBzdG9wX3Bvc2l0aW9uID0gc2VsZi5fbnVtX3JlY29yZHMKICAgIGlmIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nID09ICd6aXBmJzoKICAgICAgZGVzaXJlZF9udW1fYnVuZGxlcyA9IHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nX251bV9idW5kbGVzIG9yIG1hdGguY2VpbCgKICAgICAgICAgIGZsb2F0KHNlbGYuZXN0aW1hdGVfc2l6ZSgpKSAvIGRlc2lyZWRfYnVuZGxlX3NpemUpCiAgICAgIGJ1bmRsZV9yYW5nZXMgPSBpbml0aWFsX3NwbGl0dGluZ196aXBmKAogICAgICAgICAgc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICBzdG9wX3Bvc2l0aW9uLAogICAgICAgICAgZGVzaXJlZF9udW1fYnVuZGxlcywKICAgICAgICAgIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nX2Rpc3RyaWJ1dGlvbl9wYXJhbWV0ZXIsCiAgICAgICAgICBzZWxmLl9udW1fcmVjb3JkcykKICAgIGVsc2U6CiAgICAgIGlmIHNlbGYuX2luaXRpYWxfc3BsaXR0aW5nX251bV9idW5kbGVzOgogICAgICAgIGJ1bmRsZV9zaXplX2luX2VsZW1lbnRzID0gbWF4KAogICAgICAgICAgICAxLCBpbnQoc2VsZi5fbnVtX3JlY29yZHMgLyBzZWxmLl9pbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcykpCiAgICAgIGVsc2U6CiAgICAgICAgYnVuZGxlX3NpemVfaW5fZWxlbWVudHMgPSAoCiAgICAgICAgICAgIG1heCgKICAgICAgICAgICAgICAgIGRpdl9yb3VuZF91cChkZXNpcmVkX2J1bmRsZV9zaXplLCBzZWxmLmVsZW1lbnRfc2l6ZSksCiAgICAgICAgICAgICAgICBpbnQobWF0aC5mbG9vcihtYXRoLnNxcnQoc2VsZi5fbnVtX3JlY29yZHMpKSkpKQogICAgICBidW5kbGVfcmFuZ2VzID0gW10KICAgICAgZm9yIHN0YXJ0IGluIHJhbmdlKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlX3NpemVfaW5fZWxlbWVudHMpOgogICAgICAgIHN0b3AgPSBtaW4oc3RhcnQgKyBidW5kbGVfc2l6ZV9pbl9lbGVtZW50cywgc3RvcF9wb3NpdGlvbikKICAgICAgICBidW5kbGVfcmFuZ2VzLmFwcGVuZCgoc3RhcnQsIHN0b3ApKQoKICAgIGZvciBzdGFydCwgc3RvcCBpbiBidW5kbGVfcmFuZ2VzOgogICAgICB5aWVsZCBpb2Jhc2UuU291cmNlQnVuZGxlKHN0b3AgLSBzdGFydCwgc2VsZiwgc3RhcnQsIHN0b3ApCgogIGRlZiBnZXRfcmFuZ2VfdHJhY2tlcihzZWxmLCBzdGFydF9wb3NpdGlvbiwgc3RvcF9wb3NpdGlvbik6CiAgICBpZiBzdGFydF9wb3NpdGlvbiBpcyBOb25lOgogICAgICBzdGFydF9wb3NpdGlvbiA9IDAKICAgIGlmIHN0b3BfcG9zaXRpb24gaXMgTm9uZToKICAgICAgc3RvcF9wb3NpdGlvbiA9IHNlbGYuX251bV9yZWNvcmRzCiAgICB0cmFja2VyID0gcmFuZ2VfdHJhY2tlcnMuT2Zmc2V0UmFuZ2VUcmFja2VyKHN0YXJ0X3Bvc2l0aW9uLCBzdG9wX3Bvc2l0aW9uKQogICAgaWYgc2VsZi5fZHluYW1pY19zcGxpdHRpbmcgPT0gJ25vbmUnOgogICAgICB0cmFja2VyID0gcmFuZ2VfdHJhY2tlcnMuVW5zcGxpdHRhYmxlUmFuZ2VUcmFja2VyKHRyYWNrZXIpCiAgICByZXR1cm4gdHJhY2tlcgoKICBkZWYgX2dlbl9rdl9wYWlyKHNlbGYsIGluZGV4KToKICAgIHIgPSBucC5yYW5kb20uUmFuZG9tU3RhdGUoaW5kZXgpCiAgICByYW5kID0gci5yYW5kb21fc2FtcGxlKCkKCiAgICAjIERldGVybWluZXMgd2hldGhlciB0byBnZW5lcmF0ZSBob3Qga2V5IG9yIG5vdC4KICAgIGlmIHJhbmQgPCBzZWxmLl9ob3Rfa2V5X2ZyYWN0aW9uOgogICAgICAjIEdlbmVyYXRlIGhvdCBrZXkuCiAgICAgICMgQW4gaW50ZWdlciBpcyByYW5kb21seSBzZWxlY3RlZCBmcm9tIHRoZSByYW5nZSBbMCwgbnVtSG90S2V5cy0xXQogICAgICAjIHdpdGggZXF1YWwgcHJvYmFiaWxpdHkuCiAgICAgIHJfaG90ID0gbnAucmFuZG9tLlJhbmRvbVN0YXRlKGluZGV4ICUgc2VsZi5fbnVtX2hvdF9rZXlzKQogICAgICByZXR1cm4gcl9ob3QuYnl0ZXMoc2VsZi5fa2V5X3NpemUpLCByLmJ5dGVzKHNlbGYuX3ZhbHVlX3NpemUpCiAgICBlbHNlOgogICAgICByZXR1cm4gci5ieXRlcyhzZWxmLl9rZXlfc2l6ZSksIHIuYnl0ZXMoc2VsZi5fdmFsdWVfc2l6ZSkKCiAgZGVmIHJlYWQoc2VsZiwgcmFuZ2VfdHJhY2tlcik6CiAgICBpbmRleCA9IHJhbmdlX3RyYWNrZXIuc3RhcnRfcG9zaXRpb24oKQogICAgd2hpbGUgcmFuZ2VfdHJhY2tlci50cnlfY2xhaW0oaW5kZXgpOgogICAgICB0aW1lLnNsZWVwKHNlbGYuX3NsZWVwX3Blcl9pbnB1dF9yZWNvcmRfc2VjKQogICAgICB5aWVsZCBzZWxmLl9nZW5fa3ZfcGFpcihpbmRleCkKICAgICAgaW5kZXggKz0gMQoKICBkZWYgZGVmYXVsdF9vdXRwdXRfY29kZXIoc2VsZik6CiAgICByZXR1cm4gYmVhbS5jb2RlcnMuVHVwbGVDb2RlcigKICAgICAgICBbYmVhbS5jb2RlcnMuQnl0ZXNDb2RlcigpLCBiZWFtLmNvZGVycy5CeXRlc0NvZGVyKCldKQoKCmNsYXNzIFN5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIoUmVzdHJpY3Rpb25Qcm92aWRlcik6CiAgIiIiQSBgUmVzdHJpY3Rpb25Qcm92aWRlcmAgZm9yIFN5bnRoZXRpY1NERkFzU291cmNlLgoKICBJbiBpbml0aWFsX3Jlc3RyaWN0aW9uKGVsZW1lbnQpIGFuZCBzcGxpdChlbGVtZW50KSwgZWxlbWVudCBtZWFucyBzb3VyY2UKICBkZXNjcmlwdGlvbi4KICBBIHR5cGljYWwgZWxlbWVudCBpcyBsaWtlOgoKICAgIHsKICAgICAgJ2tleV9zaXplJzogMSwKICAgICAgJ3ZhbHVlX3NpemUnOiAxLAogICAgICAnaW5pdGlhbF9zcGxpdHRpbmdfbnVtX2J1bmRsZXMnOiA4LAogICAgICAnaW5pdGlhbF9zcGxpdHRpbmdfZGVzaXJlZF9idW5kbGVfc2l6ZSc6IDIsCiAgICAgICdzbGVlcF9wZXJfaW5wdXRfcmVjb3JkX3NlYyc6IDAsCiAgICAgICdpbml0aWFsX3NwbGl0dGluZycgOiAnY29uc3QnCgogICAgfQoKICAiIiIKICBkZWYgaW5pdGlhbF9yZXN0cmljdGlvbihzZWxmLCBlbGVtZW50KToKICAgIHJldHVybiBPZmZzZXRSYW5nZSgwLCBlbGVtZW50WydudW1fcmVjb3JkcyddKQoKICBkZWYgY3JlYXRlX3RyYWNrZXIoc2VsZiwgcmVzdHJpY3Rpb24pOgogICAgcmV0dXJuIHJlc3RyaWN0aW9uX3RyYWNrZXJzLk9mZnNldFJlc3RyaWN0aW9uVHJhY2tlcihyZXN0cmljdGlvbikKCiAgZGVmIHNwbGl0KHNlbGYsIGVsZW1lbnQsIHJlc3RyaWN0aW9uKToKICAgIGJ1bmRsZV9yYW5nZXMgPSBbXQogICAgc3RhcnRfcG9zaXRpb24gPSByZXN0cmljdGlvbi5zdGFydAogICAgc3RvcF9wb3NpdGlvbiA9IHJlc3RyaWN0aW9uLnN0b3AKICAgIGVsZW1lbnRfc2l6ZSA9IGVsZW1lbnRbJ2tleV9zaXplJ10gKyBlbGVtZW50Wyd2YWx1ZV9zaXplJ10KICAgIGVzdGltYXRlX3NpemUgPSBlbGVtZW50X3NpemUgKiBlbGVtZW50WydudW1fcmVjb3JkcyddCiAgICBpZiBlbGVtZW50Wydpbml0aWFsX3NwbGl0dGluZyddID09ICd6aXBmJzoKICAgICAgZGVzaXJlZF9udW1fYnVuZGxlcyA9ICgKICAgICAgICAgIGVsZW1lbnRbJ2luaXRpYWxfc3BsaXR0aW5nX251bV9idW5kbGVzJ10gb3IgZGl2X3JvdW5kX3VwKAogICAgICAgICAgICAgIGVzdGltYXRlX3NpemUsIGVsZW1lbnRbJ2luaXRpYWxfc3BsaXR0aW5nX2Rlc2lyZWRfYnVuZGxlX3NpemUnXSkpCiAgICAgIHNhbXBsZXMgPSBucC5yYW5kb20uemlwZigKICAgICAgICAgIGVsZW1lbnRbJ2luaXRpYWxfc3BsaXR0aW5nX2Rpc3RyaWJ1dGlvbl9wYXJhbWV0ZXInXSwKICAgICAgICAgIGRlc2lyZWRfbnVtX2J1bmRsZXMpCiAgICAgIHRvdGFsID0gc3VtKHNhbXBsZXMpCiAgICAgIHJlbGF0aXZlX2J1bmRsZV9zaXplcyA9IFsoZmxvYXQoc2FtcGxlKSAvIHRvdGFsKSBmb3Igc2FtcGxlIGluIHNhbXBsZXNdCiAgICAgIHN0YXJ0ID0gc3RhcnRfcG9zaXRpb24KICAgICAgaW5kZXggPSAwCiAgICAgIHdoaWxlIHN0YXJ0IDwgc3RvcF9wb3NpdGlvbjoKICAgICAgICBpZiBpbmRleCA9PSBkZXNpcmVkX251bV9idW5kbGVzIC0gMToKICAgICAgICAgIGJ1bmRsZV9yYW5nZXMuYXBwZW5kKE9mZnNldFJhbmdlKHN0YXJ0LCBzdG9wX3Bvc2l0aW9uKSkKICAgICAgICAgIGJyZWFrCiAgICAgICAgc3RvcCA9IHN0YXJ0ICsgaW50KAogICAgICAgICAgICBlbGVtZW50WydudW1fcmVjb3JkcyddICogcmVsYXRpdmVfYnVuZGxlX3NpemVzW2luZGV4XSkKICAgICAgICBidW5kbGVfcmFuZ2VzLmFwcGVuZChPZmZzZXRSYW5nZShzdGFydCwgc3RvcCkpCiAgICAgICAgc3RhcnQgPSBzdG9wCiAgICAgICAgaW5kZXggKz0gMQogICAgZWxzZToKICAgICAgaWYgZWxlbWVudFsnaW5pdGlhbF9zcGxpdHRpbmdfbnVtX2J1bmRsZXMnXToKICAgICAgICBidW5kbGVfc2l6ZV9pbl9lbGVtZW50cyA9IG1heCgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgaW50KAogICAgICAgICAgICAgICAgZWxlbWVudFsnbnVtX3JlY29yZHMnXSAvCiAgICAgICAgICAgICAgICBlbGVtZW50Wydpbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcyddKSkKICAgICAgZWxzZToKICAgICAgICBidW5kbGVfc2l6ZV9pbl9lbGVtZW50cyA9ICgKICAgICAgICAgICAgbWF4KAogICAgICAgICAgICAgICAgZGl2X3JvdW5kX3VwKAogICAgICAgICAgICAgICAgICAgIGVsZW1lbnRbJ2luaXRpYWxfc3BsaXR0aW5nX2Rlc2lyZWRfYnVuZGxlX3NpemUnXSwKICAgICAgICAgICAgICAgICAgICBlbGVtZW50X3NpemUpLAogICAgICAgICAgICAgICAgaW50KG1hdGguZmxvb3IobWF0aC5zcXJ0KGVsZW1lbnRbJ251bV9yZWNvcmRzJ10pKSkpKQogICAgICBmb3Igc3RhcnQgaW4gcmFuZ2Uoc3RhcnRfcG9zaXRpb24sIHN0b3BfcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVfc2l6ZV9pbl9lbGVtZW50cyk6CiAgICAgICAgc3RvcCA9IG1pbihzdGFydCArIGJ1bmRsZV9zaXplX2luX2VsZW1lbnRzLCBzdG9wX3Bvc2l0aW9uKQogICAgICAgIGJ1bmRsZV9yYW5nZXMuYXBwZW5kKE9mZnNldFJhbmdlKHN0YXJ0LCBzdG9wKSkKICAgIHJldHVybiBidW5kbGVfcmFuZ2VzCgogIGRlZiByZXN0cmljdGlvbl9zaXplKHNlbGYsIGVsZW1lbnQsIHJlc3RyaWN0aW9uKToKICAgIHJldHVybiAoZWxlbWVudFsna2V5X3NpemUnXSArIGVsZW1lbnRbJ3ZhbHVlX3NpemUnXSkgKiByZXN0cmljdGlvbi5zaXplKCkKCgpjbGFzcyBTeW50aGV0aWNTREZBc1NvdXJjZShiZWFtLkRvRm4pOgogICIiIkEgU0RGIHRoYXQgZ2VuZXJhdGVzIHJlY29yZHMgbGlrZSBhIHNvdXJjZS4KCiAgVGhpcyBTREYgYWNjZXB0cyBhIFBDb2xsZWN0aW9uIG9mIHJlY29yZC1iYXNlZCBzb3VyY2UgZGVzY3JpcHRpb24uCiAgQSB0eXBpY2FsIGRlc2NyaXB0aW9uIGlzIGxpa2U6CgogICAgewogICAgICAna2V5X3NpemUnOiAxLAogICAgICAndmFsdWVfc2l6ZSc6IDEsCiAgICAgICdpbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcyc6IDgsCiAgICAgICdpbml0aWFsX3NwbGl0dGluZ19kZXNpcmVkX2J1bmRsZV9zaXplJzogMiwKICAgICAgJ3NsZWVwX3Blcl9pbnB1dF9yZWNvcmRfc2VjJzogMCwKICAgICAgJ2luaXRpYWxfc3BsaXR0aW5nJyA6ICdjb25zdCcKCiAgICB9CgogIEEgc2ltcGxlIHBpcGVsaW5lIHRha2luZyB0aGlzIFNERiBhcyBhIHNvdXJjZSBpcyBsaWtlOgogICAgcAogICAgfCBiZWFtLkNyZWF0ZShbZGVzY3JpcHRpb24xLCBkZXNjcmlwdGlvbjIsLi4uXSkKICAgIHwgYmVhbS5QYXJEbyhTeW50aGV0aWNTREZBc1NvdXJjZSgpKQoKICBOT1RFOgogICAgVGhlIFNERi5wcm9jZXNzKCkgd2lsbCBoYXZlIGRpZmZlcmVudCBwYXJhbSBjb250ZW50IGJldHdlZW4gZGVmaW5pbmcgYSBEb0ZuCiAgICBhbmQgcnVudGltZS4KICAgIFdoZW4gZGVmaW5pbmcgYW4gU0RGLnByb2Nlc3MsIHRoZSByZXN0cmljdGlvbl90cmFja2VyIHNob3VsZCBiZSBhCiAgICBgUmVzdHJpY3Rpb25Qcm92aWRlcmAuCiAgICBEdXJpbmcgcnVudGltZSwgdGhlIERvRm5SdW5uZXIucHJvY2Vzc193aXRoX3NpemVkX3Jlc3RyaWN0aW9uKCkgd2lsbCBmZWVkCiAgICBhICdSZXN0cmljdGlvblRyYWNrZXInIGJhc2VkIG9uIGEgcmVzdHJpY3Rpb24gdG8gU0RGLnByb2Nlc3MoKS4KICAiIiIKICBkZWYgcHJvY2VzcygKICAgICAgc2VsZiwKICAgICAgZWxlbWVudCwKICAgICAgcmVzdHJpY3Rpb25fdHJhY2tlcj1iZWFtLkRvRm4uUmVzdHJpY3Rpb25QYXJhbSgKICAgICAgICAgIFN5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIoKSkpOgogICAgY3VyID0gcmVzdHJpY3Rpb25fdHJhY2tlci5jdXJyZW50X3Jlc3RyaWN0aW9uKCkuc3RhcnQKICAgIHdoaWxlIHJlc3RyaWN0aW9uX3RyYWNrZXIudHJ5X2NsYWltKGN1cik6CiAgICAgIHIgPSBucC5yYW5kb20uUmFuZG9tU3RhdGUoY3VyKQogICAgICB0aW1lLnNsZWVwKGVsZW1lbnRbJ3NsZWVwX3Blcl9pbnB1dF9yZWNvcmRfc2VjJ10pCiAgICAgIHlpZWxkIHIuYnl0ZXMoZWxlbWVudFsna2V5X3NpemUnXSksIHIuYnl0ZXMoZWxlbWVudFsndmFsdWVfc2l6ZSddKQogICAgICBjdXIgKz0gMQoKCmNsYXNzIFNodWZmbGVCYXJyaWVyKGJlYW0uUFRyYW5zZm9ybSk6CiAgZGVmIGV4cGFuZChzZWxmLCBwYyk6CiAgICByZXR1cm4gKAogICAgICAgIHBjCiAgICAgICAgfCBiZWFtLk1hcChyb3RhdGVfa2V5KQogICAgICAgIHwgYmVhbS5Hcm91cEJ5S2V5KCkKICAgICAgICB8ICdVbmdyb3VwJyA+PiBiZWFtLkZsYXRNYXAobGFtYmRhIGVsbTogWyhlbG1bMF0sIHYpIGZvciB2IGluIGVsbVsxXV0pKQoKCmNsYXNzIFNpZGVJbnB1dEJhcnJpZXIoYmVhbS5QVHJhbnNmb3JtKToKICBkZWYgZXhwYW5kKHNlbGYsIHBjKToKICAgIHJldHVybiAoCiAgICAgICAgcGMKICAgICAgICB8IGJlYW0uTWFwKHJvdGF0ZV9rZXkpCiAgICAgICAgfCBiZWFtLk1hcCgKICAgICAgICAgICAgbGFtYmRhIGVsZW0sCiAgICAgICAgICAgIGlnbm9yZWQ6IGVsZW0sCiAgICAgICAgICAgIGJlYW0ucHZhbHVlLkFzSXRlcihwYyB8IGJlYW0uRmxhdE1hcChsYW1iZGEgZWxlbTogTm9uZSkpKSkKCgpkZWYgbWVyZ2VfdXNpbmdfZ2JrKG5hbWUsIHBjMSwgcGMyKToKICAiIiJNZXJnZXMgdHdvIGdpdmVuIFBDb2xsZWN0aW9ucyB1c2luZyBhIENvR3JvdXBCeUtleS4iIiIKCiAgcGMxX3dpdGhfa2V5ID0gcGMxIHwgKG5hbWUgKyAnQXR0YWNoS2V5MScpID4+IGJlYW0uTWFwKGxhbWJkYSB4OiAoeCwgeCkpCiAgcGMyX3dpdGhfa2V5ID0gcGMyIHwgKG5hbWUgKyAnQXR0YWNoS2V5MicpID4+IGJlYW0uTWFwKGxhbWJkYSB4OiAoeCwgeCkpCgogIGdyb3VwZWQgPSAoewogICAgICAncGMxJzogcGMxX3dpdGhfa2V5LCAncGMyJzogcGMyX3dpdGhfa2V5CiAgfSB8IChuYW1lICsgJ0dyb3VwJykgPj4gYmVhbS5Db0dyb3VwQnlLZXkoKSkKICByZXR1cm4gKAogICAgICBncm91cGVkIHwgKG5hbWUgKyAnRGVEdXAnKSA+PiBiZWFtLk1hcChsYW1iZGEgZWxtOiBlbG1bMF0pCiAgKSAgIyBJZ25vcmluZyB2YWx1ZXMKCgpkZWYgbWVyZ2VfdXNpbmdfc2lkZV9pbnB1dChuYW1lLCBwYzEsIHBjMik6CiAgIiIiTWVyZ2VzIHR3byBnaXZlbiBQQ29sbGVjdGlvbnMgdXNpbmcgc2lkZSBpbnB1dHMuIiIiCiAgZGVmIGpvaW5fZm4odmFsLCBfKTogICMgSWdub3Jpbmcgc2lkZSBpbnB1dAogICAgcmV0dXJuIHZhbAoKICByZXR1cm4gcGMxIHwgbmFtZSA+PiBiZWFtLmNvcmUuTWFwKGpvaW5fZm4sIGJlYW0ucHZhbHVlLkFzSXRlcihwYzIpKQoKCmRlZiBleHBhbmRfdXNpbmdfZ2JrKG5hbWUsIHBjKToKICAiIiJFeHBhbmRzIGEgZ2l2ZW4gUENvbGxlY3Rpb24gaW50byB0d28gY29waWVzIHVzaW5nIEdyb3VwQnlLZXkuIiIiCgogIHJldCA9IFtdCiAgcmV0LmFwcGVuZCgocGMgfCAoJyVzLmEnICUgbmFtZSkgPj4gU2h1ZmZsZUJhcnJpZXIoKSkpCiAgcmV0LmFwcGVuZCgocGMgfCAoJyVzLmInICUgbmFtZSkgPj4gU2h1ZmZsZUJhcnJpZXIoKSkpCiAgcmV0dXJuIHJldAoKCmRlZiBleHBhbmRfdXNpbmdfc2Vjb25kX291dHB1dChuYW1lLCBwYyk6CiAgIiIiRXhwYW5kcyBhIGdpdmVuIFBDb2xsZWN0aW9uIGludG8gdHdvIGNvcGllcyB1c2luZyBzaWRlIG91dHB1dHMuIiIiCiAgY2xhc3MgRXhwYW5kRm4oYmVhbS5Eb0ZuKToKICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgICB5aWVsZCBiZWFtLnB2YWx1ZS5UYWdnZWRPdXRwdXQoJ3NlY29uZF9vdXQnLCBlbGVtZW50KQogICAgICB5aWVsZCBlbGVtZW50CgogIHBjMSwgcGMyID0gKHBjIHwgbmFtZSA+PiBiZWFtLlBhckRvKAogICAgICBFeHBhbmRGbigpKS53aXRoX291dHB1dHMoJ3NlY29uZF9vdXQnLCBtYWluPSdtYWluX291dCcpKQogIHJldHVybiBbcGMxLCBwYzJdCgoKZGVmIF9wYXJzZV9zdGVwcyhqc29uX3N0cik6CiAgIiIiQ29udmVydHMgdGhlIEpTT04gc3RlcCBkZXNjcmlwdGlvbiBpbnRvIFB5dGhvbiBvYmplY3RzLgoKICBTZWUgcHJvcGVydHkgJ3N0ZXBzJyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBKU09OIHN0ZXAgZGVzY3JpcHRpb24uCgogIEFyZ3M6CiAgICBqc29uX3N0cjogYSBKU09OIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgc3RlcHMuCgogIFJldHVybnM6CiAgICBJbmZvcm1hdGlvbiBhYm91dCBzdGVwcyBhcyBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzLiBFYWNoIGRpY3Rpb25hcnkgbWF5IGhhdmUKICAgIGZvbGxvd2luZyBwcm9wZXJ0aWVzLgogICAgKDEpIHBlcl9lbGVtZW50X2RlbGF5IC0gYW1vdW50IG9mIGRlbGF5IGZvciBlYWNoIGVsZW1lbnQgaW4gc2Vjb25kcy4KICAgICgyKSBwZXJfYnVuZGxlX2RlbGF5IC0gbWluaW11bSBhbW91bnQgb2YgZGVsYXkgZm9yIGEgZ2l2ZW4gc3RlcCBpbiBzZWNvbmRzLgogICAgKDMpIG91dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQgLSBudW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzIGdlbmVyYXRlZAogICAgICAgIGZvciBlYWNoIGlucHV0IGVsZW1lbnQgdG8gYSBzdGVwLgogICAgKDQpIG91dHB1dF9maWx0ZXJfcmF0aW8gLSB0aGUgcHJvYmFiaWxpdHkgYXQgd2hpY2ggYSBzdGVwIG1heSBmaWx0ZXIgb3V0IGEKICAgICAgICBnaXZlbiBlbGVtZW50IGJ5IG5vdCBwcm9kdWNpbmcgYW55IG91dHB1dCBmb3IgdGhhdCBlbGVtZW50LgogICAgKDUpIHNwbGl0dGFibGUgLSBpZiB0aGUgc3RlcCBzaG91bGQgYmUgc3BsaXR0YWJsZS4KICAgICg2KSBpbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcyAtIG51bWJlciBvZiBidW5kbGVzIGluaXRpYWwgc3BsaXQgaWYgc3RlcAogICAgICAgIGlzIHNwbGl0dGFibGUuCiAgICAoNykgaW5pdGlhbF9zcGxpdHRpbmdfdW5ldmVuX2NodW5rcyAtIGlmIHRoZSBidW5kbGVzIHNob3VsZCBiZQogICAgICAgIHVuZXZlbmx5LXNpemVkCiAgICAoOCkgZGlzYWJsZV9saXF1aWRfc2hhcmRpbmcgLSBpZiBsaXF1aWQgc2hhcmRpbmcgc2hvdWxkIGJlIGRpc2FibGVkCiAgICAoOSkgc2l6ZV9lc3RpbWF0ZV9vdmVycmlkZSAtIHRoZSBzaXplIGVzdGltYXRlIG9yIE5vbmUgdG8gdXNlIGRlZmF1bHQKICAiIiIKICBhbGxfc3RlcHMgPSBbXQogIGpzb25fZGF0YSA9IGpzb24ubG9hZHMoanNvbl9zdHIpCiAgZm9yIHZhbCBpbiBqc29uX2RhdGE6CiAgICBzdGVwcyA9IHt9CiAgICBzdGVwc1sncGVyX2VsZW1lbnRfZGVsYXknXSA9ICgoZmxvYXQodmFsWydwZXJfZWxlbWVudF9kZWxheV9tc2VjJ10pIC8gMTAwMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICdwZXJfZWxlbWVudF9kZWxheV9tc2VjJyBpbiB2YWwgZWxzZSAwKQogICAgc3RlcHNbJ3Blcl9idW5kbGVfZGVsYXknXSA9ICgKICAgICAgICBmbG9hdCh2YWxbJ3Blcl9idW5kbGVfZGVsYXlfc2VjJ10pCiAgICAgICAgaWYgJ3Blcl9idW5kbGVfZGVsYXlfc2VjJyBpbiB2YWwgZWxzZSAwKQogICAgc3RlcHNbJ291dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQnXSA9ICgKICAgICAgICBpbnQodmFsWydvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkJ10pCiAgICAgICAgaWYgJ291dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQnIGluIHZhbCBlbHNlIDEpCiAgICBzdGVwc1snb3V0cHV0X2ZpbHRlcl9yYXRpbyddID0gKAogICAgICAgIGZsb2F0KHZhbFsnb3V0cHV0X2ZpbHRlcl9yYXRpbyddKQogICAgICAgIGlmICdvdXRwdXRfZmlsdGVyX3JhdGlvJyBpbiB2YWwgZWxzZSAwKQogICAgc3RlcHNbJ3NwbGl0dGFibGUnXSA9ICgKICAgICAgICBib29sKHZhbFsnc3BsaXR0YWJsZSddKSBpZiAnc3BsaXR0YWJsZScgaW4gdmFsIGVsc2UgRmFsc2UpCiAgICBzdGVwc1snaW5pdGlhbF9zcGxpdHRpbmdfbnVtX2J1bmRsZXMnXSA9ICgKICAgICAgICBpbnQodmFsWydpbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcyddKQogICAgICAgIGlmICdpbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcycgaW4gdmFsIGVsc2UgOCkKICAgIHN0ZXBzWydpbml0aWFsX3NwbGl0dGluZ191bmV2ZW5fY2h1bmtzJ10gPSAoCiAgICAgICAgYm9vbCh2YWxbJ2luaXRpYWxfc3BsaXR0aW5nX3VuZXZlbl9jaHVua3MnXSkKICAgICAgICBpZiAnaW5pdGlhbF9zcGxpdHRpbmdfdW5ldmVuX2NodW5rcycgaW4gdmFsIGVsc2UgRmFsc2UpCiAgICBzdGVwc1snZGlzYWJsZV9saXF1aWRfc2hhcmRpbmcnXSA9ICgKICAgICAgICBib29sKHZhbFsnZGlzYWJsZV9saXF1aWRfc2hhcmRpbmcnXSkKICAgICAgICBpZiAnZGlzYWJsZV9saXF1aWRfc2hhcmRpbmcnIGluIHZhbCBlbHNlIEZhbHNlKQogICAgc3RlcHNbJ3NpemVfZXN0aW1hdGVfb3ZlcnJpZGUnXSA9ICgKICAgICAgICBpbnQodmFsWydzaXplX2VzdGltYXRlX292ZXJyaWRlJ10pCiAgICAgICAgaWYgJ3NpemVfZXN0aW1hdGVfb3ZlcnJpZGUnIGluIHZhbCBlbHNlIE5vbmUpCiAgICBhbGxfc3RlcHMuYXBwZW5kKHN0ZXBzKQoKICByZXR1cm4gYWxsX3N0ZXBzCgoKZGVmIHBhcnNlX2FyZ3MoYXJncyk6CiAgIiIiUGFyc2VzIGEgZ2l2ZW4gc2V0IG9mIGFyZ3VtZW50cy4KCiAgQXJnczoKICAgIGFyZ3M6IHNldCBvZiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkLgoKICBSZXR1cm5zOgogICAgYSB0dXBsZSB3aGVyZSBmaXJzdCBpdGVtIGdpdmVzIHRoZSBzZXQgb2YgYXJndW1lbnRzIGRlZmluZWQgYW5kIHBhcnNlZAogICAgd2l0aGluIHRoaXMgbWV0aG9kIGFuZCBzZWNvbmQgaXRlbSBnaXZlcyB0aGUgc2V0IG9mIHVua25vd24gYXJndW1lbnRzLgogICIiIgoKICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tc3RlcHMnLAogICAgICBkZXN0PSdzdGVwcycsCiAgICAgIHR5cGU9X3BhcnNlX3N0ZXBzLAogICAgICBoZWxwPSdBIEpTT04gc3RyaW5nIHRoYXQgZ2l2ZXMgYSBsaXN0IHdoZXJlIGVhY2ggZW50cnkgb2YgdGhlIGxpc3QgaXMgJwogICAgICAnY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBzdGVwLiBDb25maWd1cmF0aW9uIGZvciBlYWNoIHN0ZXAgJwogICAgICAnY29uc2lzdHMgb2YgJwogICAgICAnKDEpIEEgZmxvYXQgInBlcl9idW5kbGVfZGVsYXlfc2VjIiAoaW4gc2Vjb25kcykuIERlZmF1bHRzIHRvIDAuJwogICAgICAnKDIpIEEgZmxvYXQgInBlcl9lbGVtZW50X2RlbGF5X21zZWMiIChpbiBtaWxsaSBzZWNvbmRzKS4gJwogICAgICAnICAgIERlZmF1bHRzIHRvIDAuJwogICAgICAnKDMpIEFuIGludGVnZXIgIm91dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQiLiBEZWZhdWx0cyB0byAxLicKICAgICAgJyg0KSBBIGZsb2F0ICJvdXRwdXRfZmlsdGVyX3JhdGlvIiBpbiB0aGUgcmFuZ2UgWzAsIDFdIC4gJwogICAgICAnICAgIERlZmF1bHRzIHRvIDAuJwogICAgICAnKDUpIEEgYm9vbCAic3BsaXR0YWJsZSIgdGhhdCBkZWZhdWx0cyB0byBmYWxzZS4nCiAgICAgICcoNikgQW4gaW50ZWdlciAiaW5pdGlhbF9zcGxpdHRpbmdfbnVtX2J1bmRsZXMiLiBEZWZhdWx0cyB0byA4LicpCgogIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICctLWlucHV0JywKICAgICAgZGVzdD0naW5wdXQnLAogICAgICB0eXBlPWpzb24ubG9hZHMsCiAgICAgIGhlbHA9J0EgSlNPTiBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIFN5bnRoZXRpY1NvdXJjZSAnCiAgICAgICd1c2VkIGJ5IHRoZSBwaXBlbGluZS4gQ29uZmlndXJhdGlvbiBpcyBzaW1pbGFyIHRvIEphdmEgJwogICAgICAnU3ludGhldGljQm91bmRlZElucHV0LicKICAgICAgJ0N1cnJlbnRseSBzdXBwb3J0cyBmb2xsb3dpbmcgcHJvcGVydGllcy4gJwogICAgICAnKDEpIEFuIGludGVnZXIgIm51bVJlY29yZHMiLiAnCiAgICAgICcoMikgQW4gaW50ZWdlciAia2V5U2l6ZSIuICcKICAgICAgJygzKSBBbiBpbnRlZ2VyICJ2YWx1ZVNpemUiLiAnCiAgICAgICcoNCkgQSB0dXBsZSAiYnVuZGxlU2l6ZURpc3RyaWJ1dGlvbiIgd2l0aCBmb2xsb3dpbmcgdmFsdWVzLiAnCiAgICAgICcgICAgQSBzdHJpbmcgInR5cGUiLiBBbGxvd2VkIHZhbHVlcyBhcmUgImNvbnN0IiBhbmQgInppcGYiLiAnCiAgICAgICcgICAgQW4gZmxvYXQgInBhcmFtIi4gT25seSB1c2VkIGlmICJ0eXBlIj09InppcGYiLiBNdXN0IGJlICcKICAgICAgJyAgICBsYXJnZXIgdGhhbiAxLiAnCiAgICAgICcoNSkgQW4gaW50ZWdlciAiZm9yY2VOdW1Jbml0aWFsQnVuZGxlcyIuICcKICAgICAgJyg2KSBBbiBpbnRlZ2VyICJzcGxpdFBvaW50RnJlcXVlbmN5UmVjb3JkcyIuICcKICAgICAgJyg3KSBBIHR1cGxlICJkZWxheURpc3RyaWJ1dGlvbiIgd2l0aCBmb2xsb3dpbmcgdmFsdWVzLiAnCiAgICAgICcgICAgQSBzdHJpbmcgInR5cGUiLiBPbmx5IGFsbG93ZWQgdmFsdWUgaXMgImNvbnN0Ii4gJwogICAgICAnICAgIEFuIGludGVnZXIgImNvbnN0Ii4gJykKCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgICAgJy0tYmFycmllcicsCiAgICAgIGRlc3Q9J2JhcnJpZXInLAogICAgICBkZWZhdWx0PSdzaHVmZmxlJywKICAgICAgY2hvaWNlcz1bCiAgICAgICAgICAnc2h1ZmZsZScsCiAgICAgICAgICAnc2lkZS1pbnB1dCcsCiAgICAgICAgICAnZXhwYW5kLWdiaycsCiAgICAgICAgICAnZXhwYW5kLXNlY29uZC1vdXRwdXQnLAogICAgICAgICAgJ21lcmdlLWdiaycsCiAgICAgICAgICAnbWVyZ2Utc2lkZS1pbnB1dCcKICAgICAgXSwKICAgICAgaGVscD0nV2hldGhlciB0byB1c2Ugc2h1ZmZsZSBhcyB0aGUgYmFycmllciAnCiAgICAgICcoYXMgb3Bwb3NlZCB0byBzaWRlIGlucHV0cykuJykKICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAnLS1vdXRwdXQnLAogICAgICBkZXN0PSdvdXRwdXQnLAogICAgICBkZWZhdWx0PScnLAogICAgICBoZWxwPSdEZXN0aW5hdGlvbiB0byB3cml0ZSBvdXRwdXQuJykKCiAgcmV0dXJuIHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3MpCgoKZGVmIHJ1bihhcmd2PU5vbmUsIHNhdmVfbWFpbl9zZXNzaW9uPVRydWUpOgogICIiIlJ1bnMgdGhlIHdvcmtmbG93LiIiIgogIGtub3duX2FyZ3MsIHBpcGVsaW5lX2FyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCgogIHBpcGVsaW5lX29wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMocGlwZWxpbmVfYXJncykKICBwaXBlbGluZV9vcHRpb25zLnZpZXdfYXMoU2V0dXBPcHRpb25zKS5zYXZlX21haW5fc2Vzc2lvbiA9IHNhdmVfbWFpbl9zZXNzaW9uCgogIGlucHV0X2luZm8gPSBrbm93bl9hcmdzLmlucHV0CgogIHdpdGggVGVzdFBpcGVsaW5lKG9wdGlvbnM9cGlwZWxpbmVfb3B0aW9ucykgYXMgcDoKICAgIHNvdXJjZSA9IFN5bnRoZXRpY1NvdXJjZShpbnB1dF9pbmZvKQoKICAgICMgcHlsaW50OiBkaXNhYmxlPWV4cHJlc3Npb24tbm90LWFzc2lnbmVkCiAgICBiYXJyaWVyID0ga25vd25fYXJncy5iYXJyaWVyCgogICAgcGNfbGlzdCA9IFtdCiAgICBudW1fcm9vdHMgPSAyKioobGVuKGtub3duX2FyZ3Muc3RlcHMpIC0gMSkgaWYgKAogICAgICAgIGJhcnJpZXIgPT0gJ21lcmdlLWdiaycgb3IgYmFycmllciA9PSAnbWVyZ2Utc2lkZS1pbnB1dCcpIGVsc2UgMQogICAgZm9yIHJlYWRfbm8gaW4gcmFuZ2UobnVtX3Jvb3RzKToKICAgICAgcGNfbGlzdC5hcHBlbmQoKHAgfCAoJ1JlYWQgJWQnICUgcmVhZF9ubykgPj4gYmVhbS5pby5SZWFkKHNvdXJjZSkpKQoKICAgIGZvciBzdGVwX25vLCBzdGVwcyBpbiBlbnVtZXJhdGUoa25vd25fYXJncy5zdGVwcyk6CiAgICAgIGlmIHN0ZXBfbm8gIT0gMDoKICAgICAgICBuZXdfcGNfbGlzdCA9IFtdCiAgICAgICAgZm9yIHBjX25vLCBwYyBpbiBlbnVtZXJhdGUocGNfbGlzdCk6CiAgICAgICAgICBpZiBiYXJyaWVyID09ICdzaHVmZmxlJzoKICAgICAgICAgICAgbmV3X3BjX2xpc3QuYXBwZW5kKAogICAgICAgICAgICAgICAgKHBjIHwgKCdzaHVmZmxlICVkLiVkJyAlIChzdGVwX25vLCBwY19ubykpID4+IFNodWZmbGVCYXJyaWVyKCkpKQogICAgICAgICAgZWxpZiBiYXJyaWVyID09ICdzaWRlLWlucHV0JzoKICAgICAgICAgICAgbmV3X3BjX2xpc3QuYXBwZW5kKCgKICAgICAgICAgICAgICAgIHBjIHwgKCdzaWRlLWlucHV0ICVkLiVkJyAlCiAgICAgICAgICAgICAgICAgICAgICAoc3RlcF9ubywgcGNfbm8pKSA+PiBTaWRlSW5wdXRCYXJyaWVyKCkpKQogICAgICAgICAgZWxpZiBiYXJyaWVyID09ICdleHBhbmQtZ2JrJzoKICAgICAgICAgICAgbmV3X3BjX2xpc3QuZXh0ZW5kKAogICAgICAgICAgICAgICAgZXhwYW5kX3VzaW5nX2diaygoJ2V4cGFuZC1nYmsgJWQuJWQnICUgKHN0ZXBfbm8sIHBjX25vKSksIHBjKSkKICAgICAgICAgIGVsaWYgYmFycmllciA9PSAnZXhwYW5kLXNlY29uZC1vdXRwdXQnOgogICAgICAgICAgICBuZXdfcGNfbGlzdC5leHRlbmQoCiAgICAgICAgICAgICAgICBleHBhbmRfdXNpbmdfc2Vjb25kX291dHB1dCgKICAgICAgICAgICAgICAgICAgICAoJ2V4cGFuZC1zZWNvbmQtb3V0cHV0ICVkLiVkJyAlIChzdGVwX25vLCBwY19ubykpLCBwYykpCiAgICAgICAgICBlbGlmIGJhcnJpZXIgPT0gJ21lcmdlLWdiayc6CiAgICAgICAgICAgIGlmIHBjX25vICUgMiA9PSAwOgogICAgICAgICAgICAgIG5ld19wY19saXN0LmFwcGVuZCgKICAgICAgICAgICAgICAgICAgbWVyZ2VfdXNpbmdfZ2JrKCgnbWVyZ2UtZ2JrICVkLiVkJyAlIChzdGVwX25vLCBwY19ubykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY19saXN0W3BjX25vICsgMV0pKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICBlbGlmIGJhcnJpZXIgPT0gJ21lcmdlLXNpZGUtaW5wdXQnOgogICAgICAgICAgICBpZiBwY19ubyAlIDIgPT0gMDoKICAgICAgICAgICAgICBuZXdfcGNfbGlzdC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgIG1lcmdlX3VzaW5nX3NpZGVfaW5wdXQoCiAgICAgICAgICAgICAgICAgICAgICAoJ21lcmdlLXNpZGUtaW5wdXQgJWQuJWQnICUgKHN0ZXBfbm8sIHBjX25vKSksCiAgICAgICAgICAgICAgICAgICAgICBwYywKICAgICAgICAgICAgICAgICAgICAgIHBjX2xpc3RbcGNfbm8gKyAxXSkpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgcGNfbGlzdCA9IG5ld19wY19saXN0CgogICAgICBuZXdfcGNfbGlzdCA9IFtdCiAgICAgIGZvciBwY19ubywgcGMgaW4gZW51bWVyYXRlKHBjX2xpc3QpOgogICAgICAgIGlmIHN0ZXBzWydzcGxpdHRhYmxlJ106CiAgICAgICAgICBzdGVwID0gZ2V0X3N5bnRoZXRpY19zZGZfc3RlcCgKICAgICAgICAgICAgICBwZXJfZWxlbWVudF9kZWxheV9zZWM9c3RlcHNbJ3Blcl9lbGVtZW50X2RlbGF5J10sCiAgICAgICAgICAgICAgcGVyX2J1bmRsZV9kZWxheV9zZWM9c3RlcHNbJ3Blcl9idW5kbGVfZGVsYXknXSwKICAgICAgICAgICAgICBvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkPXN0ZXBzWwogICAgICAgICAgICAgICAgICAnb3V0cHV0X3JlY29yZHNfcGVyX2lucHV0X3JlY29yZCddLAogICAgICAgICAgICAgIG91dHB1dF9maWx0ZXJfcmF0aW89c3RlcHNbJ291dHB1dF9maWx0ZXJfcmF0aW8nXSwKICAgICAgICAgICAgICBpbml0aWFsX3NwbGl0dGluZ19udW1fYnVuZGxlcz1zdGVwc1sKICAgICAgICAgICAgICAgICAgJ2luaXRpYWxfc3BsaXR0aW5nX251bV9idW5kbGVzJ10sCiAgICAgICAgICAgICAgaW5pdGlhbF9zcGxpdHRpbmdfdW5ldmVuX2NodW5rcz1zdGVwc1sKICAgICAgICAgICAgICAgICAgJ2luaXRpYWxfc3BsaXR0aW5nX3VuZXZlbl9jaHVua3MnXSwKICAgICAgICAgICAgICBkaXNhYmxlX2xpcXVpZF9zaGFyZGluZz1zdGVwc1snZGlzYWJsZV9saXF1aWRfc2hhcmRpbmcnXSwKICAgICAgICAgICAgICBzaXplX2VzdGltYXRlX292ZXJyaWRlPXN0ZXBzWydzaXplX2VzdGltYXRlX292ZXJyaWRlJ10pCiAgICAgICAgZWxzZToKICAgICAgICAgIHN0ZXAgPSBTeW50aGV0aWNTdGVwKAogICAgICAgICAgICAgIHBlcl9lbGVtZW50X2RlbGF5X3NlYz1zdGVwc1sncGVyX2VsZW1lbnRfZGVsYXknXSwKICAgICAgICAgICAgICBwZXJfYnVuZGxlX2RlbGF5X3NlYz1zdGVwc1sncGVyX2J1bmRsZV9kZWxheSddLAogICAgICAgICAgICAgIG91dHB1dF9yZWNvcmRzX3Blcl9pbnB1dF9yZWNvcmQ9c3RlcHNbCiAgICAgICAgICAgICAgICAgICdvdXRwdXRfcmVjb3Jkc19wZXJfaW5wdXRfcmVjb3JkJ10sCiAgICAgICAgICAgICAgb3V0cHV0X2ZpbHRlcl9yYXRpbz1zdGVwc1snb3V0cHV0X2ZpbHRlcl9yYXRpbyddKQogICAgICAgIG5ld19wYyA9IHBjIHwgJ1N5bnRoZXRpY1N0ZXAgJWQuJWQnICUgKHN0ZXBfbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNfbm8pID4+IGJlYW0uUGFyRG8oc3RlcCkKICAgICAgICBuZXdfcGNfbGlzdC5hcHBlbmQobmV3X3BjKQogICAgICBwY19saXN0ID0gbmV3X3BjX2xpc3QKCiAgICBpZiBrbm93bl9hcmdzLm91dHB1dDoKICAgICAgIyBJZiBhbiBvdXRwdXQgbG9jYXRpb24gaXMgcHJvdmlkZWQgd2UgZm9ybWF0IGFuZCB3cml0ZSBvdXRwdXQuCiAgICAgIGlmIGxlbihwY19saXN0KSA9PSAxOgogICAgICAgICgKICAgICAgICAgICAgcGNfbGlzdFswXQogICAgICAgICAgICB8ICdGb3JtYXRPdXRwdXQnID4+IGJlYW0uTWFwKGxhbWJkYSBlbG06IChlbG1bMF0gKyBlbG1bMV0pKQogICAgICAgICAgICB8ICdXcml0ZU91dHB1dCcgPj4gV3JpdGVUb1RleHQoa25vd25fYXJncy5vdXRwdXQpKQoKICBsb2dnaW5nLmluZm8oJ1BpcGVsaW5lIHJ1biBjb21wbGV0ZWQuJykKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQogIHJ1bigpCpSVJQEBAAAAAAB9lCiMD3BhcnNlX2J5dGVfc2l6ZZRqVjEBAEtAS0WHlIwMZGl2X3JvdW5kX3VwlGpWMQEAS0hLSoeUjApyb3RhdGVfa2V5lGpWMQEAS01LUIeUjBZpbml0aWFsX3NwbGl0dGluZ196aXBmlGpWMQEAS1NLbIeUjBZTeW50aGV0aWNTdGVwLl9faW5pdF9flGpWMQEAS3JLgIeUjBpTeW50aGV0aWNTdGVwLnN0YXJ0X2J1bmRsZZRqVjEBAEuCS4OHlIwbU3ludGhldGljU3RlcC5maW5pc2hfYnVuZGxllGpWMQEAS4VLjYeUjBVTeW50aGV0aWNTdGVwLnByb2Nlc3OUalYxAQBLj0uZh5SMDVN5bnRoZXRpY1N0ZXCUal0xAQBLb0uZh5SMLU5vbkxpcXVpZFNoYXJkaW5nT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9zcGxpdJRqVjEBAEueS5+HlIwuTm9uTGlxdWlkU2hhcmRpbmdPZmZzZXRSYW5nZVRyYWNrZXIuY2hlY2twb2ludJRqVjEBAEuhS6KHlIwjTm9uTGlxdWlkU2hhcmRpbmdPZmZzZXRSYW5nZVRyYWNrZXKUal0xAQBLnEuih5SMLFN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyLl9faW5pdF9flGpWMQEAS7BLu4eUjDdTeW50aGV0aWNTREZTdGVwUmVzdHJpY3Rpb25Qcm92aWRlci5pbml0aWFsX3Jlc3RyaWN0aW9ulGpWMQEAS71LvoeUjDJTeW50aGV0aWNTREZTdGVwUmVzdHJpY3Rpb25Qcm92aWRlci5jcmVhdGVfdHJhY2tlcpRqVjEBAEvAS8SHlIwpU3ludGhldGljU0RGU3RlcFJlc3RyaWN0aW9uUHJvdmlkZXIuc3BsaXSUalYxAQBLxkvVh5SMNFN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyLnJlc3RyaWN0aW9uX3NpemWUalYxAQBL10vbh5SMI1N5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVylGpdMQEAS6VL24eUjDBnZXRfc3ludGhldGljX3NkZl9zdGVwLlN5bnRoZXRpY1NERlN0ZXAuX19pbml0X1+UalYxAQBL7Uv8h5SMNGdldF9zeW50aGV0aWNfc2RmX3N0ZXAuU3ludGhldGljU0RGU3RlcC5zdGFydF9idW5kbGWUalYxAQBL/kv/h5SMNWdldF9zeW50aGV0aWNfc2RmX3N0ZXAuU3ludGhldGljU0RGU3RlcC5maW5pc2hfYnVuZGxllGpWMQEATQEBTQkBh5SML2dldF9zeW50aGV0aWNfc2RmX3N0ZXAuU3ludGhldGljU0RGU3RlcC5wcm9jZXNzlGpWMQEATQsBTSQBh5SMJ2dldF9zeW50aGV0aWNfc2RmX3N0ZXAuU3ludGhldGljU0RGU3RlcJRqXTEBAEvpTSQBh5SMFmdldF9zeW50aGV0aWNfc2RmX3N0ZXCUalYxAQBL3k0qAYeUjBhTeW50aGV0aWNTb3VyY2UuX19pbml0X1+UalYxAQBNMAFNbAGHlIwcU3ludGhldGljU291cmNlLmVsZW1lbnRfc2l6ZZRqVjEBAE1uAU1wAYeUjB1TeW50aGV0aWNTb3VyY2UuZXN0aW1hdGVfc2l6ZZRqVjEBAE1yAU1zAYeUjBVTeW50aGV0aWNTb3VyY2Uuc3BsaXSUalYxAQBNdQFNlgGHlIwhU3ludGhldGljU291cmNlLmdldF9yYW5nZV90cmFja2VylGpWMQEATZgBTaABh5SMHFN5bnRoZXRpY1NvdXJjZS5fZ2VuX2t2X3BhaXKUalYxAQBNogFNrgGHlIwUU3ludGhldGljU291cmNlLnJlYWSUalYxAQBNsAFNtQGHlIwkU3ludGhldGljU291cmNlLmRlZmF1bHRfb3V0cHV0X2NvZGVylGpWMQEATbcBTbkBh5SMD1N5bnRoZXRpY1NvdXJjZZRqXTEBAE0tAU25AYeUjDlTeW50aGV0aWNTREZTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVyLmluaXRpYWxfcmVzdHJpY3Rpb26UalYxAQBNzgFNzwGHlIw0U3ludGhldGljU0RGU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlci5jcmVhdGVfdHJhY2tlcpRqVjEBAE3RAU3SAYeUjCtTeW50aGV0aWNTREZTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVyLnNwbGl0lGpWMQEATdQBTQACh5SMNlN5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIucmVzdHJpY3Rpb25fc2l6ZZRqVjEBAE0CAk0DAoeUjCVTeW50aGV0aWNTREZTb3VyY2VSZXN0cmljdGlvblByb3ZpZGVylGpdMQEATbwBTQMCh5SMHFN5bnRoZXRpY1NERkFzU291cmNlLnByb2Nlc3OUalYxAQBNIwJNLQKHlIwUU3ludGhldGljU0RGQXNTb3VyY2WUal0xAQBNBgJNLQKHlIwVU2h1ZmZsZUJhcnJpZXIuZXhwYW5klGpWMQEATTECTTYCh5SMDlNodWZmbGVCYXJyaWVylGpdMQEATTACTTYCh5SMF1NpZGVJbnB1dEJhcnJpZXIuZXhwYW5klGpWMQEATToCTUECh5SMEFNpZGVJbnB1dEJhcnJpZXKUal0xAQBNOQJNQQKHlIwPbWVyZ2VfdXNpbmdfZ2JrlGpWMQEATUQCTU8Ch5SMFm1lcmdlX3VzaW5nX3NpZGVfaW5wdXSUalYxAQBNUgJNVwKHlIwQZXhwYW5kX3VzaW5nX2dia5RqVjEBAE1aAk1gAoeUjCtleHBhbmRfdXNpbmdfc2Vjb25kX291dHB1dC5FeHBhbmRGbi5wcm9jZXNzlGpWMQEATWYCTWgCh5SMI2V4cGFuZF91c2luZ19zZWNvbmRfb3V0cHV0LkV4cGFuZEZulGpdMQEATWUCTWgCh5SMGmV4cGFuZF91c2luZ19zZWNvbmRfb3V0cHV0lGpWMQEATWMCTWwCh5SMDF9wYXJzZV9zdGVwc5RqVjEBAE1vAk2nAoeUjApwYXJzZV9hcmdzlGpWMQEATaoCTe8Ch5SMA3J1bpRqVjEBAE3yAk1QA4eUdX2UKIwPcGFyc2VfYnl0ZV9zaXpllGrNAwAAjAxkaXZfcm91bmRfdXCUas0DAACMCnJvdGF0ZV9rZXmUas0DAACMFmluaXRpYWxfc3BsaXR0aW5nX3ppcGaUas0DAACMDVN5bnRoZXRpY1N0ZXCUas0DAACMGlN5bnRoZXRpY1N0ZXAuc3RhcnRfYnVuZGxllGrNAwAAjBtTeW50aGV0aWNTdGVwLmZpbmlzaF9idW5kbGWUas0DAACMFVN5bnRoZXRpY1N0ZXAucHJvY2Vzc5RqzQMAAIwjTm9uTGlxdWlkU2hhcmRpbmdPZmZzZXRSYW5nZVRyYWNrZXKUas0DAACMLU5vbkxpcXVpZFNoYXJkaW5nT2Zmc2V0UmFuZ2VUcmFja2VyLnRyeV9zcGxpdJRqzQMAAIwuTm9uTGlxdWlkU2hhcmRpbmdPZmZzZXRSYW5nZVRyYWNrZXIuY2hlY2twb2ludJRqzQMAAIwjU3ludGhldGljU0RGU3RlcFJlc3RyaWN0aW9uUHJvdmlkZXKUas0DAACMN1N5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyLmluaXRpYWxfcmVzdHJpY3Rpb26Uas0DAACMMlN5bnRoZXRpY1NERlN0ZXBSZXN0cmljdGlvblByb3ZpZGVyLmNyZWF0ZV90cmFja2VylGrNAwAAjClTeW50aGV0aWNTREZTdGVwUmVzdHJpY3Rpb25Qcm92aWRlci5zcGxpdJRqzQMAAIw0U3ludGhldGljU0RGU3RlcFJlc3RyaWN0aW9uUHJvdmlkZXIucmVzdHJpY3Rpb25fc2l6ZZRqzQMAAIwWZ2V0X3N5bnRoZXRpY19zZGZfc3RlcJRqzQMAAIwPU3ludGhldGljU291cmNllGrNAwAAjB1TeW50aGV0aWNTb3VyY2UuZXN0aW1hdGVfc2l6ZZRqzQMAAIwVU3ludGhldGljU291cmNlLnNwbGl0lGrNAwAAjCFTeW50aGV0aWNTb3VyY2UuZ2V0X3JhbmdlX3RyYWNrZXKUas0DAACMFFN5bnRoZXRpY1NvdXJjZS5yZWFklGrNAwAAjCRTeW50aGV0aWNTb3VyY2UuZGVmYXVsdF9vdXRwdXRfY29kZXKUas0DAACMJVN5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXKUas0DAACMOVN5bnRoZXRpY1NERlNvdXJjZVJlc3RyaWN0aW9uUHJvdmlkZXIuaW5pdGlhbF9yZXN0cmljdGlvbpRqzQMAAIw0U3ludGhldGljU0RGU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlci5jcmVhdGVfdHJhY2tlcpRqzQMAAIwrU3ludGhldGljU0RGU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlci5zcGxpdJRqzQMAAIw2U3ludGhldGljU0RGU291cmNlUmVzdHJpY3Rpb25Qcm92aWRlci5yZXN0cmljdGlvbl9zaXpllGrNAwAAjBRTeW50aGV0aWNTREZBc1NvdXJjZZRqzQMAAIwcU3ludGhldGljU0RGQXNTb3VyY2UucHJvY2Vzc5RqzQMAAIwOU2h1ZmZsZUJhcnJpZXKUas0DAACMFVNodWZmbGVCYXJyaWVyLmV4cGFuZJRqzQMAAIwQU2lkZUlucHV0QmFycmllcpRqzQMAAIwXU2lkZUlucHV0QmFycmllci5leHBhbmSUas0DAACMD21lcmdlX3VzaW5nX2dia5RqzQMAAIwWbWVyZ2VfdXNpbmdfc2lkZV9pbnB1dJRqzQMAAIwQZXhwYW5kX3VzaW5nX2dia5RqzQMAAIwaZXhwYW5kX3VzaW5nX3NlY29uZF9vdXRwdXSUas0DAACMCnBhcnNlX2FyZ3OUas0DAACMA3J1bpRqzQMAAHWMJmFwYWNoZV9iZWFtLnRlc3Rpbmcuc3ludGhldGljX3BpcGVsaW5llHSUjCFhcGFjaGVfYmVhbS50ZXN0aW5nLnRlc3RfcGlwZWxpbmWUKFjpHAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJUZXN0IFBpcGVsaW5lLCBhIHdyYXBwZXIgb2YgUGlwZWxpbmUgZm9yIHRlc3QgcHVycG9zZSIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhcmdwYXJzZQppbXBvcnQgc2hsZXgKZnJvbSB1bml0dGVzdCBpbXBvcnQgU2tpcFRlc3QKCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwpmcm9tIGFwYWNoZV9iZWFtLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZQpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyIGltcG9ydCBQaXBlbGluZVN0YXRlCgpfX2FsbF9fID0gWwogICAgJ1Rlc3RQaXBlbGluZScsCl0KCgpjbGFzcyBUZXN0UGlwZWxpbmUoUGlwZWxpbmUpOgogICIiIjpjbGFzczpgVGVzdFBpcGVsaW5lYCBjbGFzcyBpcyB1c2VkIGluc2lkZSBvZiBCZWFtIHRlc3RzIHRoYXQgY2FuIGJlCiAgY29uZmlndXJlZCB0byBydW4gYWdhaW5zdCBwaXBlbGluZSBydW5uZXIuCgogIEl0IGhhcyBhIGZ1bmN0aW9uYWxpdHkgdG8gcGFyc2UgYXJndW1lbnRzIGZyb20gY29tbWFuZCBsaW5lIGFuZCBidWlsZCBwaXBlbGluZQogIG9wdGlvbnMgZm9yIHRlc3RzIHdobyBydW5zIGFnYWluc3QgYSBwaXBlbGluZSBydW5uZXIgYW5kIHV0aWxpemVzIHJlc291cmNlcwogIG9mIHRoZSBwaXBlbGluZSBydW5uZXIuIFRob3NlIHRlc3QgZnVuY3Rpb25zIGFyZSByZWNvbW1lbmRlZCB0byBiZSB0YWdnZWQgYnkKICBgYEBhdHRyKCJWYWxpZGF0ZXNSdW5uZXIiKWBgIGFubm90YXRpb24uCgogIEluIG9yZGVyIHRvIGNvbmZpZ3VyZSB0aGUgdGVzdCB3aXRoIGN1c3RvbWl6ZWQgcGlwZWxpbmUgb3B0aW9ucyBmcm9tIGNvbW1hbmQKICBsaW5lLCBzeXN0ZW0gYXJndW1lbnQgYGAtLXRlc3QtcGlwZWxpbmUtb3B0aW9uc2BgIGNhbiBiZSB1c2VkIHRvIG9idGFpbnMgYQogIGxpc3Qgb2YgcGlwZWxpbmUgb3B0aW9ucy4gSWYgbm8gb3B0aW9ucyBzcGVjaWZpZWQsIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLgoKICBGb3IgZXhhbXBsZSwgdXNlIGZvbGxvd2luZyBjb21tYW5kIGxpbmUgdG8gZXhlY3V0ZSBhbGwgVmFsaWRhdGVzUnVubmVyIHRlc3RzOjoKCiAgICBweXRob24gc2V0dXAucHkgbm9zZXRlc3RzIC1hIFZhbGlkYXRlc1J1bm5lciBcXAogICAgICAgIC0tdGVzdC1waXBlbGluZS1vcHRpb25zPSItLXJ1bm5lcj1EaXJlY3RSdW5uZXIgXFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1qb2JfbmFtZT1teUpvYk5hbWUgXFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1udW1fd29ya2Vycz0xIgoKICBGb3IgZXhhbXBsZSwgdXNlIGFzc2VydF90aGF0IGZvciB0ZXN0IHZhbGlkYXRpb246OgoKICAgIHdpdGggVGVzdFBpcGVsaW5lKCkgYXMgcGlwZWxpbmU6CiAgICAgIHBjb2xsID0gLi4uCiAgICAgIGFzc2VydF90aGF0KHBjb2xsLCBlcXVhbF90byguLi4pKQogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgcnVubmVyPU5vbmUsCiAgICAgIG9wdGlvbnM9Tm9uZSwKICAgICAgYXJndj1Ob25lLAogICAgICBpc19pbnRlZ3JhdGlvbl90ZXN0PUZhbHNlLAogICAgICBibG9ja2luZz1UcnVlLAogICAgICBhZGRpdGlvbmFsX3BpcGVsaW5lX2FyZ3M9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIGEgcGlwZWxpbmUgb2JqZWN0IGZvciB0ZXN0LgoKICAgIEFyZ3M6CiAgICAgIHJ1bm5lciAofmFwYWNoZV9iZWFtLnJ1bm5lcnMucnVubmVyLlBpcGVsaW5lUnVubmVyKTogQW4gb2JqZWN0IG9mIHR5cGUKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5ydW5uZXJzLnJ1bm5lci5QaXBlbGluZVJ1bm5lcmAgdGhhdCB3aWxsIGJlIHVzZWQKICAgICAgICB0byBleGVjdXRlIHRoZSBwaXBlbGluZS4gRm9yIHJlZ2lzdGVyZWQgcnVubmVycywgdGhlIHJ1bm5lciBuYW1lIGNhbiBiZQogICAgICAgIHNwZWNpZmllZCwgb3RoZXJ3aXNlIGEgcnVubmVyIG9iamVjdCBtdXN0IGJlIHN1cHBsaWVkLgogICAgICBvcHRpb25zICh+YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9ucyk6CiAgICAgICAgQSBjb25maWd1cmVkCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9uc2AKICAgICAgICBvYmplY3QgY29udGFpbmluZyBhcmd1bWVudHMgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgcnVubmluZyB0aGUKICAgICAgICBwaXBlbGluZSBqb2IuCiAgICAgIGFyZ3YgKExpc3Rbc3RyXSk6IEEgbGlzdCBvZiBhcmd1bWVudHMgKHN1Y2ggYXMgOmRhdGE6YHN5cy5hcmd2YCkgdG8gYmUKICAgICAgICB1c2VkIGZvciBidWlsZGluZyBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zLlBpcGVsaW5lT3B0aW9uc2Agb2JqZWN0LgogICAgICAgIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYXJndW1lbnQgKipvcHRpb25zKiogaXMgOmRhdGE6YE5vbmVgLgogICAgICBpc19pbnRlZ3JhdGlvbl90ZXN0IChib29sKTogOmRhdGE6YFRydWVgIGlmIHRoZSB0ZXN0IGlzIGFuIGludGVncmF0aW9uCiAgICAgICAgdGVzdCwgOmRhdGE6YEZhbHNlYCBvdGhlcndpc2UuCiAgICAgIGJsb2NraW5nIChib29sKTogUnVuIG1ldGhvZCB3aWxsIHdhaXQgdW50aWwgcGlwZWxpbmUgZXhlY3V0aW9uIGlzCiAgICAgICAgY29tcGxldGVkLgogICAgICBhZGRpdGlvbmFsX3BpcGVsaW5lX2FyZ3MgKExpc3Rbc3RyXSk6IGFkZGl0aW9uYWwgcGlwZWxpbmUgYXJndW1lbnRzIHRvIGJlCiAgICAgICAgaW5jbHVkZWQgd2hlbiBjb25zdHJ1Y3Rpb24gdGhlIHBpcGVsaW5lIG9wdGlvbnMgb2JqZWN0LgoKICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogaWYgZWl0aGVyIHRoZSBydW5uZXIgb3Igb3B0aW9ucyBhcmd1bWVudCBpcyBub3QKICAgICAgICBvZiB0aGUgZXhwZWN0ZWQgdHlwZS4KICAgICIiIgogICAgc2VsZi5pc19pbnRlZ3JhdGlvbl90ZXN0ID0gaXNfaW50ZWdyYXRpb25fdGVzdAogICAgc2VsZi5ub3RfdXNlX3Rlc3RfcnVubmVyX2FwaSA9IEZhbHNlCiAgICBhZGRpdGlvbmFsX3BpcGVsaW5lX2FyZ3MgPSBhZGRpdGlvbmFsX3BpcGVsaW5lX2FyZ3Mgb3IgW10KICAgIHNlbGYub3B0aW9uc19saXN0ID0gKAogICAgICAgIHNlbGYuX3BhcnNlX3Rlc3Rfb3B0aW9uX2FyZ3MoYXJndikgKyBhZGRpdGlvbmFsX3BpcGVsaW5lX2FyZ3MpCiAgICBzZWxmLmJsb2NraW5nID0gYmxvY2tpbmcKICAgIGlmIG9wdGlvbnMgaXMgTm9uZToKICAgICAgb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhzZWxmLm9wdGlvbnNfbGlzdCkKICAgIHN1cGVyKFRlc3RQaXBlbGluZSwgc2VsZikuX19pbml0X18ocnVubmVyLCBvcHRpb25zKQoKICBkZWYgcnVuKHNlbGYsIHRlc3RfcnVubmVyX2FwaT1UcnVlKToKICAgIHJlc3VsdCA9IHN1cGVyKFRlc3RQaXBlbGluZSwgc2VsZikucnVuKAogICAgICAgIHRlc3RfcnVubmVyX2FwaT0oCiAgICAgICAgICAgIEZhbHNlIGlmIHNlbGYubm90X3VzZV90ZXN0X3J1bm5lcl9hcGkgZWxzZSB0ZXN0X3J1bm5lcl9hcGkpKQogICAgaWYgc2VsZi5ibG9ja2luZzoKICAgICAgc3RhdGUgPSByZXN1bHQud2FpdF91bnRpbF9maW5pc2goKQogICAgICBhc3NlcnQgc3RhdGUgaW4gKFBpcGVsaW5lU3RhdGUuRE9ORSwgUGlwZWxpbmVTdGF0ZS5DQU5DRUxMRUQpLCBcCiAgICAgICAgICAiUGlwZWxpbmUgZXhlY3V0aW9uIGZhaWxlZC4iCgogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgZ2V0X3BpcGVsaW5lX29wdGlvbnMoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fb3B0aW9ucwoKICBkZWYgX3BhcnNlX3Rlc3Rfb3B0aW9uX2FyZ3Moc2VsZiwgYXJndik6CiAgICAiIiJQYXJzZSB2YWx1ZSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnQ6IC0tdGVzdC1waXBlbGluZS1vcHRpb25zIHRvIGdldAogICAgcGlwZWxpbmUgb3B0aW9ucy4KCiAgICBBcmdzOgogICAgICBhcmd2OiBBbiBpdGVyYWJsZSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGJlIHVzZWQuIElmIG5vdCBzcGVjaWZpZWQKICAgICAgICB0aGVuIHN5cy5hcmd2IHdpbGwgYmUgdXNlZCBhcyBpbnB1dCBmb3IgcGFyc2luZyBhcmd1bWVudHMuCgogICAgUmV0dXJuczoKICAgICAgQW4gYXJndW1lbnQgbGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHBhcnNlZCBieSBhcmdwYXJzZXIgb3IgZGlyZWN0bHkKICAgICAgYnVpbGQgYSBwaXBlbGluZSBvcHRpb24uCiAgICAiIiIKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tdGVzdC1waXBlbGluZS1vcHRpb25zJywKICAgICAgICB0eXBlPXN0ciwKICAgICAgICBhY3Rpb249J3N0b3JlJywKICAgICAgICBoZWxwPSdvbmx5IHJ1biB0ZXN0cyBwcm92aWRpbmcgc2VydmljZSBvcHRpb25zJykKICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAgJy0tbm90LXVzZS10ZXN0LXJ1bm5lci1hcGknLAogICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgZGVmYXVsdD1GYWxzZSwKICAgICAgICBoZWxwPSd3aGV0aGVyIG5vdCB0byB1c2UgdGVzdC1ydW5uZXItYXBpJykKICAgIGtub3duLCB1bnVzZWRfYXJndiA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3YpCgogICAgaWYgc2VsZi5pc19pbnRlZ3JhdGlvbl90ZXN0IGFuZCBub3Qga25vd24udGVzdF9waXBlbGluZV9vcHRpb25zOgogICAgICAjIFNraXAgaW50ZWdyYXRpb24gdGVzdCB3aGVuIGFyZ3VtZW50ICctLXRlc3QtcGlwZWxpbmUtb3B0aW9ucycgaXMgbm90CiAgICAgICMgc3BlY2lmaWVkIHNpbmNlIG5vc2UgY2FsbHMgaW50ZWdyYXRpb24gdGVzdHMgd2hlbiBydW5zIHVuaXQgdGVzdCBieQogICAgICAjICdzZXR1cC5weSB0ZXN0Jy4KICAgICAgcmFpc2UgU2tpcFRlc3QoCiAgICAgICAgICAnSVQgaXMgc2tpcHBlZCBiZWNhdXNlIC0tdGVzdC1waXBlbGluZS1vcHRpb25zICcKICAgICAgICAgICdpcyBub3Qgc3BlY2lmaWVkJykKCiAgICBzZWxmLm5vdF91c2VfdGVzdF9ydW5uZXJfYXBpID0ga25vd24ubm90X3VzZV90ZXN0X3J1bm5lcl9hcGkKICAgIHJldHVybiBzaGxleC5zcGxpdChrbm93bi50ZXN0X3BpcGVsaW5lX29wdGlvbnMpIFwKICAgICAgaWYga25vd24udGVzdF9waXBlbGluZV9vcHRpb25zIGVsc2UgW10KCiAgZGVmIGdldF9mdWxsX29wdGlvbnNfYXNfYXJncyhzZWxmLCAqKmV4dHJhX29wdHMpOgogICAgIiIiR2V0IGZ1bGwgcGlwZWxpbmUgb3B0aW9ucyBhcyBhbiBhcmd1bWVudCBsaXN0LgoKICAgIEFwcGVuZCBleHRyYSBwaXBlbGluZSBvcHRpb25zIHRvIGV4aXN0aW5nIG9wdGlvbiBsaXN0IGlmIHByb3ZpZGVkLgogICAgVGVzdCB2ZXJpZmllciAoaWYgY29udGFpbnMgaW4gZXh0cmEgb3B0aW9ucykgc2hvdWxkIGJlIHBpY2tsZWQgYmVmb3JlCiAgICBhcHBlbmRpbmcsIGFuZCB3aWxsIGJlIHVucGlja2xlZCBsYXRlciBpbiB0aGUgVGVzdFJ1bm5lci4KICAgICIiIgogICAgb3B0aW9ucyA9IGxpc3Qoc2VsZi5vcHRpb25zX2xpc3QpCiAgICBmb3IgaywgdiBpbiBleHRyYV9vcHRzLml0ZW1zKCk6CiAgICAgIGlmIG5vdCB2OgogICAgICAgIGNvbnRpbnVlCiAgICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBib29sKSBhbmQgdjoKICAgICAgICBvcHRpb25zLmFwcGVuZCgnLS0lcycgJSBrKQogICAgICBlbGlmICdtYXRjaGVyJyBpbiBrOgogICAgICAgIG9wdGlvbnMuYXBwZW5kKCctLSVzPSVzJyAlIChrLCBwaWNrbGVyLmR1bXBzKHYpLmRlY29kZSgpKSkKICAgICAgZWxzZToKICAgICAgICBvcHRpb25zLmFwcGVuZCgnLS0lcz0lcycgJSAoaywgdikpCiAgICByZXR1cm4gb3B0aW9ucwoKICBkZWYgZ2V0X29wdGlvbihzZWxmLCBvcHRfbmFtZSk6CiAgICAiIiJHZXQgYSBwaXBlbGluZSBvcHRpb24gdmFsdWUgYnkgbmFtZQoKICAgIEFyZ3M6CiAgICAgIG9wdF9uYW1lOiBUaGUgbmFtZSBvZiB0aGUgcGlwZWxpbmUgb3B0aW9uLgoKICAgIFJldHVybnM6CiAgICAgIE5vbmUgaWYgb3B0aW9uIGlzIG5vdCBmb3VuZCBpbiBleGlzdGluZyBvcHRpb24gbGlzdCB3aGljaCBpcyBnZW5lcmF0ZWQKICAgICAgYnkgcGFyc2luZyB2YWx1ZSBvZiBhcmd1bWVudCBgdGVzdC1waXBlbGluZS1vcHRpb25zYC4KICAgICIiIgogICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgb3B0X25hbWUgPSBvcHRfbmFtZVs6Ml0gaWYgb3B0X25hbWVbOjJdID09ICctLScgZWxzZSBvcHRfbmFtZQogICAgIyBPcHRpb24gbmFtZSBzaG91bGQgc3RhcnQgd2l0aCAnLS0nIHdoZW4gaXQncyB1c2VkIGZvciBwYXJzaW5nLgogICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS0nICsgb3B0X25hbWUsIHR5cGU9c3RyLCBhY3Rpb249J3N0b3JlJykKICAgIGtub3duLCBfID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3Moc2VsZi5vcHRpb25zX2xpc3QpCiAgICByZXR1cm4gZ2V0YXR0cihrbm93biwgb3B0X25hbWUpIGlmIGhhc2F0dHIoa25vd24sIG9wdF9uYW1lKSBlbHNlIE5vbmUKlH2UKIwVVGVzdFBpcGVsaW5lLl9faW5pdF9flGpWMQEAS0BLa4eUjBBUZXN0UGlwZWxpbmUucnVulGpWMQEAS21LdoeUjCFUZXN0UGlwZWxpbmUuZ2V0X3BpcGVsaW5lX29wdGlvbnOUalYxAQBLeEt5h5SMJFRlc3RQaXBlbGluZS5fcGFyc2VfdGVzdF9vcHRpb25fYXJnc5RqVjEBAEt7S56HlIwlVGVzdFBpcGVsaW5lLmdldF9mdWxsX29wdGlvbnNfYXNfYXJnc5RqVjEBAEugS7GHlIwXVGVzdFBpcGVsaW5lLmdldF9vcHRpb26UalYxAQBLs0vCh5SMDFRlc3RQaXBlbGluZZRqXTEBAEsmS8KHlHV9lCiMDFRlc3RQaXBlbGluZZRqaAMAAIwQVGVzdFBpcGVsaW5lLnJ1bpRqaAMAAIwhVGVzdFBpcGVsaW5lLmdldF9waXBlbGluZV9vcHRpb25zlGpoAwAAjCVUZXN0UGlwZWxpbmUuZ2V0X2Z1bGxfb3B0aW9uc19hc19hcmdzlGpoAwAAjBdUZXN0UGlwZWxpbmUuZ2V0X29wdGlvbpRqaAMAAHWMIWFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZZR0lIwfYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3N0cmVhbZQoWBIuAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlByb3ZpZGVzIFRlc3RTdHJlYW0gZm9yIHZlcmlmeWluZyBzdHJlYW1pbmcgcnVubmVyIHNlbWFudGljcy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQpmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gZnVuY3Rvb2xzIGltcG9ydCB0b3RhbF9vcmRlcmluZwoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IHdpdGhfbWV0YWNsYXNzCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IGNvbW1vbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB3aW5kb3cKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB0aW1lc3RhbXAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKX19hbGxfXyA9IFsKICAgICdFdmVudCcsCiAgICAnRWxlbWVudEV2ZW50JywKICAgICdXYXRlcm1hcmtFdmVudCcsCiAgICAnUHJvY2Vzc2luZ1RpbWVFdmVudCcsCiAgICAnVGVzdFN0cmVhbScsCl0KCgpAdG90YWxfb3JkZXJpbmcKY2xhc3MgRXZlbnQod2l0aF9tZXRhY2xhc3MoQUJDTWV0YSwgb2JqZWN0KSk6ICAjIHR5cGU6IGlnbm9yZVttaXNjXQogICIiIlRlc3Qgc3RyZWFtIGV2ZW50IHRvIGJlIGVtaXR0ZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBhIFRlc3RTdHJlYW0uIiIiCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBlbGVtZW50X2NvZGVyKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGVsZW1lbnRfY29kZXIpOgogICAgaWYgcHJvdG8uSGFzRmllbGQoJ2VsZW1lbnRfZXZlbnQnKToKICAgICAgZXZlbnQgPSBwcm90by5lbGVtZW50X2V2ZW50CiAgICAgIHRhZyA9IE5vbmUgaWYgZXZlbnQudGFnID09ICdOb25lJyBlbHNlIGV2ZW50LnRhZwogICAgICByZXR1cm4gRWxlbWVudEV2ZW50KFsKICAgICAgICAgIFRpbWVzdGFtcGVkVmFsdWUoCiAgICAgICAgICAgICAgZWxlbWVudF9jb2Rlci5kZWNvZGUodHYuZW5jb2RlZF9lbGVtZW50KSwKICAgICAgICAgICAgICB0aW1lc3RhbXAuVGltZXN0YW1wKG1pY3Jvcz0xMDAwICogdHYudGltZXN0YW1wKSkKICAgICAgICAgIGZvciB0diBpbiBwcm90by5lbGVtZW50X2V2ZW50LmVsZW1lbnRzCiAgICAgIF0sIHRhZz10YWcpICMgeWFwZjogZGlzYWJsZQogICAgZWxpZiBwcm90by5IYXNGaWVsZCgnd2F0ZXJtYXJrX2V2ZW50Jyk6CiAgICAgIGV2ZW50ID0gcHJvdG8ud2F0ZXJtYXJrX2V2ZW50CiAgICAgIHRhZyA9IE5vbmUgaWYgZXZlbnQudGFnID09ICdOb25lJyBlbHNlIGV2ZW50LnRhZwogICAgICByZXR1cm4gV2F0ZXJtYXJrRXZlbnQoCiAgICAgICAgICB0aW1lc3RhbXAuVGltZXN0YW1wKAogICAgICAgICAgICAgIG1pY3Jvcz0xMDAwICogcHJvdG8ud2F0ZXJtYXJrX2V2ZW50Lm5ld193YXRlcm1hcmspLAogICAgICAgICAgdGFnPXRhZykKICAgIGVsaWYgcHJvdG8uSGFzRmllbGQoJ3Byb2Nlc3NpbmdfdGltZV9ldmVudCcpOgogICAgICByZXR1cm4gUHJvY2Vzc2luZ1RpbWVFdmVudCgKICAgICAgICAgIHRpbWVzdGFtcC5EdXJhdGlvbigKICAgICAgICAgICAgICBtaWNyb3M9MTAwMCAqIHByb3RvLnByb2Nlc3NpbmdfdGltZV9ldmVudC5hZHZhbmNlX2R1cmF0aW9uKSkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnVW5rbm93biBUZXN0U3RyZWFtIEV2ZW50IHR5cGU6ICVzJyAlIHByb3RvLldoaWNoT25lb2YoJ2V2ZW50JykpCgoKY2xhc3MgRWxlbWVudEV2ZW50KEV2ZW50KToKICAiIiJFbGVtZW50LXByb2R1Y2luZyB0ZXN0IHN0cmVhbSBldmVudC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgdGltZXN0YW1wZWRfdmFsdWVzLCB0YWc9Tm9uZSk6CiAgICBzZWxmLnRpbWVzdGFtcGVkX3ZhbHVlcyA9IHRpbWVzdGFtcGVkX3ZhbHVlcwogICAgc2VsZi50YWcgPSB0YWcKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKAogICAgICAgIHNlbGYudGltZXN0YW1wZWRfdmFsdWVzID09IG90aGVyLnRpbWVzdGFtcGVkX3ZhbHVlcyBhbmQKICAgICAgICBzZWxmLnRhZyA9PSBvdGhlci50YWcpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYudGltZXN0YW1wZWRfdmFsdWVzKQoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmLnRpbWVzdGFtcGVkX3ZhbHVlcyA8IG90aGVyLnRpbWVzdGFtcGVkX3ZhbHVlcwoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBlbGVtZW50X2NvZGVyKToKICAgIHRhZyA9ICdOb25lJyBpZiBzZWxmLnRhZyBpcyBOb25lIGVsc2Ugc2VsZi50YWcKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRlc3RTdHJlYW1QYXlsb2FkLkV2ZW50KAogICAgICAgIGVsZW1lbnRfZXZlbnQ9YmVhbV9ydW5uZXJfYXBpX3BiMi5UZXN0U3RyZWFtUGF5bG9hZC5FdmVudC5BZGRFbGVtZW50cygKICAgICAgICAgICAgZWxlbWVudHM9WwogICAgICAgICAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5UZXN0U3RyZWFtUGF5bG9hZC5UaW1lc3RhbXBlZEVsZW1lbnQoCiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZF9lbGVtZW50PWVsZW1lbnRfY29kZXIuZW5jb2RlKHR2LnZhbHVlKSwKICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9dHYudGltZXN0YW1wLm1pY3JvcyAvLyAxMDAwKQogICAgICAgICAgICAgICAgZm9yIHR2IGluIHNlbGYudGltZXN0YW1wZWRfdmFsdWVzCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHRhZz10YWcpKQoKCmNsYXNzIFdhdGVybWFya0V2ZW50KEV2ZW50KToKICAiIiJXYXRlcm1hcmstYWR2YW5jaW5nIHRlc3Qgc3RyZWFtIGV2ZW50LiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBuZXdfd2F0ZXJtYXJrLCB0YWc9Tm9uZSk6CiAgICBzZWxmLm5ld193YXRlcm1hcmsgPSB0aW1lc3RhbXAuVGltZXN0YW1wLm9mKG5ld193YXRlcm1hcmspCiAgICBzZWxmLnRhZyA9IHRhZwoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmLm5ld193YXRlcm1hcmsgPT0gb3RoZXIubmV3X3dhdGVybWFyayBhbmQgc2VsZi50YWcgPT0gb3RoZXIudGFnCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHN0cihzZWxmLm5ld193YXRlcm1hcmspICsgc3RyKHNlbGYudGFnKSkKCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZi5uZXdfd2F0ZXJtYXJrIDwgb3RoZXIubmV3X3dhdGVybWFyawoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCB1bnVzZWRfZWxlbWVudF9jb2Rlcik6CiAgICB0YWcgPSAnTm9uZScgaWYgc2VsZi50YWcgaXMgTm9uZSBlbHNlIHNlbGYudGFnCgogICAgIyBBc3NlcnQgdGhhdCBubyBwcmV2aXNpb24gaXMgbG9zdC4KICAgIGFzc2VydCAxMDAwICogKAogICAgICAgIHNlbGYubmV3X3dhdGVybWFyay5taWNyb3MgLy8gMTAwMCkgPT0gc2VsZi5uZXdfd2F0ZXJtYXJrLm1pY3JvcwogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVGVzdFN0cmVhbVBheWxvYWQuRXZlbnQoCiAgICAgICAgd2F0ZXJtYXJrX2V2ZW50PWJlYW1fcnVubmVyX2FwaV9wYjIuVGVzdFN0cmVhbVBheWxvYWQuRXZlbnQuCiAgICAgICAgQWR2YW5jZVdhdGVybWFyaygKICAgICAgICAgICAgbmV3X3dhdGVybWFyaz1zZWxmLm5ld193YXRlcm1hcmsubWljcm9zIC8vIDEwMDAsIHRhZz10YWcpKQoKCmNsYXNzIFByb2Nlc3NpbmdUaW1lRXZlbnQoRXZlbnQpOgogICIiIlByb2Nlc3NpbmcgdGltZS1hZHZhbmNpbmcgdGVzdCBzdHJlYW0gZXZlbnQuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGFkdmFuY2VfYnkpOgogICAgc2VsZi5hZHZhbmNlX2J5ID0gdGltZXN0YW1wLkR1cmF0aW9uLm9mKGFkdmFuY2VfYnkpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYuYWR2YW5jZV9ieSA9PSBvdGhlci5hZHZhbmNlX2J5CgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuYWR2YW5jZV9ieSkKCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZi5hZHZhbmNlX2J5IDwgb3RoZXIuYWR2YW5jZV9ieQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCB1bnVzZWRfZWxlbWVudF9jb2Rlcik6CiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5UZXN0U3RyZWFtUGF5bG9hZC5FdmVudCgKICAgICAgICBwcm9jZXNzaW5nX3RpbWVfZXZlbnQ9YmVhbV9ydW5uZXJfYXBpX3BiMi5UZXN0U3RyZWFtUGF5bG9hZC5FdmVudC4KICAgICAgICBBZHZhbmNlUHJvY2Vzc2luZ1RpbWUoYWR2YW5jZV9kdXJhdGlvbj1zZWxmLmFkdmFuY2VfYnkubWljcm9zIC8vIDEwMDApKQoKCmNsYXNzIFRlc3RTdHJlYW0oUFRyYW5zZm9ybSk6CiAgIiIiVGVzdCBzdHJlYW0gdGhhdCBnZW5lcmF0ZXMgZXZlbnRzIG9uIGFuIHVuYm91bmRlZCBQQ29sbGVjdGlvbiBvZiBlbGVtZW50cy4KCiAgRWFjaCBldmVudCBlbWl0cyBlbGVtZW50cywgYWR2YW5jZXMgdGhlIHdhdGVybWFyayBvciBhZHZhbmNlcyB0aGUgcHJvY2Vzc2luZwogIHRpbWUuIEFmdGVyIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzIGFyZSBlbWl0dGVkLCBjZWFzZXMgdG8gcHJvZHVjZQogIG91dHB1dC4KCiAgVG8gdXNlIHRoZSBtdWx0aS1vdXRwdXQgZnVuY3Rpb25hbGl0eSBwZWxhc2UgdXNlIHRoZQogICdwYXNzdGhyb3VnaF9wY29sbGVjdGlvbl9vdXRwdXRfaWRzJyBmbGFnLiBTZWUgQkVBTS05MzIyIGZvciBtb3JlIGluZm8uCgogIFRvIGFkZCBmbGFnOjoKCiAgICBmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgRGVidWdPcHRpb25zCiAgICBvcHRpb25zID0gLi4uCiAgICBvcHRpb25zLnZpZXdfYXMoRGVidWdPcHRpb25zKS5hZGRfZXhwZXJpbWVudCgKICAgICAgICAncGFzc3Rocm91Z2hfcGNvbGxlY3Rpb25fb3V0cHV0X2lkcycpCgogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwgY29kZXI9Y29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwgZXZlbnRzPU5vbmUsIG91dHB1dF90YWdzPU5vbmUpOgogICAgc3VwZXIoVGVzdFN0cmVhbSwgc2VsZikuX19pbml0X18oKQogICAgYXNzZXJ0IGNvZGVyIGlzIG5vdCBOb25lCgogICAgc2VsZi5jb2RlciA9IGNvZGVyCiAgICBzZWxmLndhdGVybWFya3MgPSB7Tm9uZTogdGltZXN0YW1wLk1JTl9USU1FU1RBTVB9CiAgICBzZWxmLl9ldmVudHMgPSBbXSBpZiBldmVudHMgaXMgTm9uZSBlbHNlIGxpc3QoZXZlbnRzKQogICAgc2VsZi5vdXRwdXRfdGFncyA9IHNldChvdXRwdXRfdGFncykgaWYgb3V0cHV0X3RhZ3MgZWxzZSBzZXQoKQoKICAgIGV2ZW50X3RhZ3MgPSBzZXQoCiAgICAgICAgZS50YWcgZm9yIGUgaW4gc2VsZi5fZXZlbnRzCiAgICAgICAgaWYgaXNpbnN0YW5jZShlLCAoV2F0ZXJtYXJrRXZlbnQsIEVsZW1lbnRFdmVudCkpKQogICAgYXNzZXJ0IGV2ZW50X3RhZ3MuaXNzdWJzZXQoc2VsZi5vdXRwdXRfdGFncyksIFwKICAgICAgICAne30gaXMgbm90IGEgc3Vic2V0IG9mIHt9Jy5mb3JtYXQoZXZlbnRfdGFncywgb3V0cHV0X3RhZ3MpCgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIHVudXNlZF9pbnB1dHMpOgogICAgcmV0dXJuIGNvcmUuV2luZG93aW5nKHdpbmRvdy5HbG9iYWxXaW5kb3dzKCkpCgogIGRlZiBfaW5mZXJfb3V0cHV0X2NvZGVyKHNlbGYsIGlucHV0X3R5cGU9Tm9uZSwgaW5wdXRfY29kZXI9Tm9uZSk6CiAgICByZXR1cm4gc2VsZi5jb2RlcgoKICBkZWYgZXhwYW5kKHNlbGYsIHBiZWdpbik6CiAgICBhc3NlcnQgaXNpbnN0YW5jZShwYmVnaW4sIHB2YWx1ZS5QQmVnaW4pCiAgICBzZWxmLnBpcGVsaW5lID0gcGJlZ2luLnBpcGVsaW5lCiAgICBpZiBub3Qgc2VsZi5vdXRwdXRfdGFnczoKICAgICAgc2VsZi5vdXRwdXRfdGFncyA9IHNldChbTm9uZV0pCgogICAgIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmV0dXJuIGEgc2luZ2xlIFBDb2xsZWN0aW9uLgogICAgaWYgbGVuKHNlbGYub3V0cHV0X3RhZ3MpID09IDE6CiAgICAgIHJldHVybiBwdmFsdWUuUENvbGxlY3Rpb24oCiAgICAgICAgICBzZWxmLnBpcGVsaW5lLCBpc19ib3VuZGVkPUZhbHNlLCB0YWc9bGlzdChzZWxmLm91dHB1dF90YWdzKVswXSkKICAgIHJldHVybiB7CiAgICAgICAgdGFnOiBwdmFsdWUuUENvbGxlY3Rpb24oc2VsZi5waXBlbGluZSwgaXNfYm91bmRlZD1GYWxzZSwgdGFnPXRhZykKICAgICAgICBmb3IgdGFnIGluIHNlbGYub3V0cHV0X3RhZ3MKICAgIH0KCiAgZGVmIF9hZGQoc2VsZiwgZXZlbnQpOgogICAgaWYgaXNpbnN0YW5jZShldmVudCwgRWxlbWVudEV2ZW50KToKICAgICAgZm9yIHR2IGluIGV2ZW50LnRpbWVzdGFtcGVkX3ZhbHVlczoKICAgICAgICBhc3NlcnQgdHYudGltZXN0YW1wIDwgdGltZXN0YW1wLk1BWF9USU1FU1RBTVAsICgKICAgICAgICAgICAgJ0VsZW1lbnQgdGltZXN0YW1wIG11c3QgYmUgYmVmb3JlIHRpbWVzdGFtcC5NQVhfVElNRVNUQU1QLicpCiAgICBlbGlmIGlzaW5zdGFuY2UoZXZlbnQsIFdhdGVybWFya0V2ZW50KToKICAgICAgaWYgZXZlbnQudGFnIG5vdCBpbiBzZWxmLndhdGVybWFya3M6CiAgICAgICAgc2VsZi53YXRlcm1hcmtzW2V2ZW50LnRhZ10gPSB0aW1lc3RhbXAuTUlOX1RJTUVTVEFNUAogICAgICBhc3NlcnQgZXZlbnQubmV3X3dhdGVybWFyayA+IHNlbGYud2F0ZXJtYXJrc1tldmVudC50YWddLCAoCiAgICAgICAgICAnV2F0ZXJtYXJrIG11c3Qgc3RyaWN0bHktbW9ub3RvbmljYWxseSBhZHZhbmNlLicpCiAgICAgIHNlbGYud2F0ZXJtYXJrc1tldmVudC50YWddID0gZXZlbnQubmV3X3dhdGVybWFyawogICAgZWxpZiBpc2luc3RhbmNlKGV2ZW50LCBQcm9jZXNzaW5nVGltZUV2ZW50KToKICAgICAgYXNzZXJ0IGV2ZW50LmFkdmFuY2VfYnkgPiAwLCAoCiAgICAgICAgICAnTXVzdCBhZHZhbmNlIHByb2Nlc3NpbmcgdGltZSBieSBwb3NpdGl2ZSBhbW91bnQuJykKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Vua25vd24gZXZlbnQ6ICVzJyAlIGV2ZW50KQogICAgc2VsZi5fZXZlbnRzLmFwcGVuZChldmVudCkKCiAgZGVmIGFkZF9lbGVtZW50cyhzZWxmLCBlbGVtZW50cywgdGFnPU5vbmUsIGV2ZW50X3RpbWVzdGFtcD1Ob25lKToKICAgICIiIkFkZCBlbGVtZW50cyB0byB0aGUgVGVzdFN0cmVhbS4KCiAgICBFbGVtZW50cyBhZGRlZCB0byB0aGUgVGVzdFN0cmVhbSB3aWxsIGJlIHByb2R1Y2VkIGR1cmluZyBwaXBlbGluZSBleGVjdXRpb24uCiAgICBUaGVzZSBlbGVtZW50cyBjYW4gYmUgVGltZXN0YW1wZWRWYWx1ZSwgV2luZG93ZWRWYWx1ZSBvciByYXcgdW53cmFwcGVkCiAgICBlbGVtZW50cyB0aGF0IGFyZSBzZXJpYWxpemFibGUgdXNpbmcgdGhlIFRlc3RTdHJlYW0ncyBzcGVjaWZpZWQgQ29kZXIuICBXaGVuCiAgICBhIFRpbWVzdGFtcGVkVmFsdWUgb3IgYSBXaW5kb3dlZFZhbHVlIGVsZW1lbnQgaXMgdXNlZCwgdGhlIHRpbWVzdGFtcCBvZiB0aGUKICAgIFRpbWVzdGFtcGVkVmFsdWUgb3IgV2luZG93ZWRWYWx1ZSB3aWxsIGJlIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHByb2R1Y2VkCiAgICBlbGVtZW50OyBvdGhlcndpc2UsIHRoZSBjdXJyZW50IHdhdGVybWFyayB0aW1lc3RhbXAgd2lsbCBiZSB1c2VkIGZvciB0aGF0CiAgICBlbGVtZW50LiAgVGhlIHdpbmRvd3Mgb2YgYSBnaXZlbiBXaW5kb3dlZFZhbHVlIGFyZSBpZ25vcmVkIGJ5IHRoZQogICAgVGVzdFN0cmVhbS4KICAgICIiIgogICAgc2VsZi5vdXRwdXRfdGFncy5hZGQodGFnKQogICAgdGltZXN0YW1wZWRfdmFsdWVzID0gW10KICAgIGlmIHRhZyBub3QgaW4gc2VsZi53YXRlcm1hcmtzOgogICAgICBzZWxmLndhdGVybWFya3NbdGFnXSA9IHRpbWVzdGFtcC5NSU5fVElNRVNUQU1QCgogICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgVGltZXN0YW1wZWRWYWx1ZSk6CiAgICAgICAgdGltZXN0YW1wZWRfdmFsdWVzLmFwcGVuZChlbGVtZW50KQogICAgICBlbGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgV2luZG93ZWRWYWx1ZSk6CiAgICAgICAgIyBEcm9wIHdpbmRvd3MgZm9yIGVsZW1lbnRzIGluIHRlc3Qgc3RyZWFtLgogICAgICAgIHRpbWVzdGFtcGVkX3ZhbHVlcy5hcHBlbmQoCiAgICAgICAgICAgIFRpbWVzdGFtcGVkVmFsdWUoZWxlbWVudC52YWx1ZSwgZWxlbWVudC50aW1lc3RhbXApKQogICAgICBlbHNlOgogICAgICAgICMgQWRkIGVsZW1lbnRzIHdpdGggdGltZXN0YW1wIGVxdWFsIHRvIGN1cnJlbnQgd2F0ZXJtYXJrLgogICAgICAgIGlmIGV2ZW50X3RpbWVzdGFtcCBpcyBOb25lOgogICAgICAgICAgZXZlbnRfdGltZXN0YW1wID0gc2VsZi53YXRlcm1hcmtzW3RhZ10KICAgICAgICB0aW1lc3RhbXBlZF92YWx1ZXMuYXBwZW5kKFRpbWVzdGFtcGVkVmFsdWUoZWxlbWVudCwgZXZlbnRfdGltZXN0YW1wKSkKICAgIHNlbGYuX2FkZChFbGVtZW50RXZlbnQodGltZXN0YW1wZWRfdmFsdWVzLCB0YWcpKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIGFkdmFuY2Vfd2F0ZXJtYXJrX3RvKHNlbGYsIG5ld193YXRlcm1hcmssIHRhZz1Ob25lKToKICAgICIiIkFkdmFuY2UgdGhlIHdhdGVybWFyayB0byBhIGdpdmVuIFVuaXggdGltZXN0YW1wLgoKICAgIFRoZSBVbml4IHRpbWVzdGFtcCB2YWx1ZSB1c2VkIG11c3QgYmUgbGF0ZXIgdGhhbiB0aGUgcHJldmlvdXMgd2F0ZXJtYXJrCiAgICB2YWx1ZSBhbmQgc2hvdWxkIGJlIGdpdmVuIGFzIGFuIGludCwgZmxvYXQgb3IgdXRpbHMudGltZXN0YW1wLlRpbWVzdGFtcAogICAgb2JqZWN0LgogICAgIiIiCiAgICBzZWxmLm91dHB1dF90YWdzLmFkZCh0YWcpCiAgICBzZWxmLl9hZGQoV2F0ZXJtYXJrRXZlbnQobmV3X3dhdGVybWFyaywgdGFnKSkKICAgIHJldHVybiBzZWxmCgogIGRlZiBhZHZhbmNlX3dhdGVybWFya190b19pbmZpbml0eShzZWxmLCB0YWc9Tm9uZSk6CiAgICAiIiJBZHZhbmNlIHRoZSB3YXRlcm1hcmsgdG8gdGhlIGVuZCBvZiB0aW1lLCBjb21wbGV0aW5nIHRoaXMgVGVzdFN0cmVhbS4iIiIKICAgIHNlbGYuYWR2YW5jZV93YXRlcm1hcmtfdG8odGltZXN0YW1wLk1BWF9USU1FU1RBTVAsIHRhZykKICAgIHJldHVybiBzZWxmCgogIGRlZiBhZHZhbmNlX3Byb2Nlc3NpbmdfdGltZShzZWxmLCBhZHZhbmNlX2J5KToKICAgICIiIkFkdmFuY2UgdGhlIGN1cnJlbnQgcHJvY2Vzc2luZyB0aW1lIGJ5IGEgZ2l2ZW4gZHVyYXRpb24gaW4gc2Vjb25kcy4KCiAgICBUaGUgZHVyYXRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIHNlY29uZCBkdXJhdGlvbiBhbmQgc2hvdWxkIGJlIGdpdmVuIGFzIGFuCiAgICBpbnQsIGZsb2F0IG9yIHV0aWxzLnRpbWVzdGFtcC5EdXJhdGlvbiBvYmplY3QuCiAgICAiIiIKICAgIHNlbGYuX2FkZChQcm9jZXNzaW5nVGltZUV2ZW50KGFkdmFuY2VfYnkpKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuICgKICAgICAgICBjb21tb25fdXJucy5wcmltaXRpdmVzLlRFU1RfU1RSRUFNLnVybiwKICAgICAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLlRlc3RTdHJlYW1QYXlsb2FkKAogICAgICAgICAgICBjb2Rlcl9pZD1jb250ZXh0LmNvZGVycy5nZXRfaWQoc2VsZi5jb2RlciksCiAgICAgICAgICAgIGV2ZW50cz1bZS50b19ydW5uZXJfYXBpKHNlbGYuY29kZXIpIGZvciBlIGluIHNlbGYuX2V2ZW50c10pKQoKICBAc3RhdGljbWV0aG9kCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgICBjb21tb25fdXJucy5wcmltaXRpdmVzLlRFU1RfU1RSRUFNLnVybiwKICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5UZXN0U3RyZWFtUGF5bG9hZCkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwdHJhbnNmb3JtLCBwYXlsb2FkLCBjb250ZXh0KToKICAgIGNvZGVyID0gY29udGV4dC5jb2RlcnMuZ2V0X2J5X2lkKHBheWxvYWQuY29kZXJfaWQpCiAgICBvdXRwdXRfdGFncyA9IHNldCgKICAgICAgICBOb25lIGlmIGsgPT0gJ05vbmUnIGVsc2UgayBmb3IgayBpbiBwdHJhbnNmb3JtLm91dHB1dHMua2V5cygpKQogICAgcmV0dXJuIFRlc3RTdHJlYW0oCiAgICAgICAgY29kZXI9Y29kZXIsCiAgICAgICAgZXZlbnRzPVtFdmVudC5mcm9tX3J1bm5lcl9hcGkoZSwgY29kZXIpIGZvciBlIGluIHBheWxvYWQuZXZlbnRzXSwKICAgICAgICBvdXRwdXRfdGFncz1vdXRwdXRfdGFncykKlH2UKIwMRXZlbnQuX19lcV9flGpWMQEASzhLOoeUjA5FdmVudC5fX2hhc2hfX5RqVjEBAEs8Sz6HlIwMRXZlbnQuX19sdF9flGpWMQEAS0BLQoeUjAxFdmVudC5fX25lX1+UalYxAQBLREtGh5SME0V2ZW50LnRvX3J1bm5lcl9hcGmUalYxAQBLSEtKh5SMFUV2ZW50LmZyb21fcnVubmVyX2FwaZRqVjEBAEtMS2SHlIwFRXZlbnSUal0xAQBLNUtkh5SMFUVsZW1lbnRFdmVudC5fX2luaXRfX5RqVjEBAEtpS2uHlIwTRWxlbWVudEV2ZW50Ll9fZXFfX5RqVjEBAEttS3CHlIwVRWxlbWVudEV2ZW50Ll9faGFzaF9flGpWMQEAS3JLc4eUjBNFbGVtZW50RXZlbnQuX19sdF9flGpWMQEAS3VLdoeUjBpFbGVtZW50RXZlbnQudG9fcnVubmVyX2FwaZRqVjEBAEt4S4KHlIwMRWxlbWVudEV2ZW50lGpdMQEAS2dLgoeUjBdXYXRlcm1hcmtFdmVudC5fX2luaXRfX5RqVjEBAEuHS4mHlIwVV2F0ZXJtYXJrRXZlbnQuX19lcV9flGpWMQEAS4tLjIeUjBdXYXRlcm1hcmtFdmVudC5fX2hhc2hfX5RqVjEBAEuOS4+HlIwVV2F0ZXJtYXJrRXZlbnQuX19sdF9flGpWMQEAS5FLkoeUjBxXYXRlcm1hcmtFdmVudC50b19ydW5uZXJfYXBplGpWMQEAS5RLnYeUjA5XYXRlcm1hcmtFdmVudJRqXTEBAEuFS52HlIwcUHJvY2Vzc2luZ1RpbWVFdmVudC5fX2luaXRfX5RqVjEBAEuiS6OHlIwaUHJvY2Vzc2luZ1RpbWVFdmVudC5fX2VxX1+UalYxAQBLpUumh5SMHFByb2Nlc3NpbmdUaW1lRXZlbnQuX19oYXNoX1+UalYxAQBLqEuph5SMGlByb2Nlc3NpbmdUaW1lRXZlbnQuX19sdF9flGpWMQEAS6tLrIeUjCFQcm9jZXNzaW5nVGltZUV2ZW50LnRvX3J1bm5lcl9hcGmUalYxAQBLrkuxh5SME1Byb2Nlc3NpbmdUaW1lRXZlbnSUal0xAQBLoEuxh5SME1Rlc3RTdHJlYW0uX19pbml0X1+UalYxAQBLxkvUh5SMGFRlc3RTdHJlYW0uZ2V0X3dpbmRvd2luZ5RqVjEBAEvWS9eHlIweVGVzdFN0cmVhbS5faW5mZXJfb3V0cHV0X2NvZGVylGpWMQEAS9lL2oeUjBFUZXN0U3RyZWFtLmV4cGFuZJRqVjEBAEvcS+mHlIwPVGVzdFN0cmVhbS5fYWRklGpWMQEAS+tL+4eUjBdUZXN0U3RyZWFtLmFkZF9lbGVtZW50c5RqVjEBAEv9TRsBh5SMH1Rlc3RTdHJlYW0uYWR2YW5jZV93YXRlcm1hcmtfdG+UalYxAQBNHQFNJgGHlIwoVGVzdFN0cmVhbS5hZHZhbmNlX3dhdGVybWFya190b19pbmZpbml0eZRqVjEBAE0oAU0rAYeUjCJUZXN0U3RyZWFtLmFkdmFuY2VfcHJvY2Vzc2luZ190aW1llGpWMQEATS0BTTQBh5SMIlRlc3RTdHJlYW0udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNNgFNOwGHlIwkVGVzdFN0cmVhbS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATT0BTUgBh5SMClRlc3RTdHJlYW2Ual0xAQBLtE1IAYeUdX2UKIwFRXZlbnSUarADAACME0V2ZW50LnRvX3J1bm5lcl9hcGmUarADAACMFUV2ZW50LmZyb21fcnVubmVyX2FwaZRqsAMAAIwMRWxlbWVudEV2ZW50lGqwAwAAjBpFbGVtZW50RXZlbnQudG9fcnVubmVyX2FwaZRqsAMAAIwOV2F0ZXJtYXJrRXZlbnSUarADAACMHFdhdGVybWFya0V2ZW50LnRvX3J1bm5lcl9hcGmUarADAACME1Byb2Nlc3NpbmdUaW1lRXZlbnSUarADAACMIVByb2Nlc3NpbmdUaW1lRXZlbnQudG9fcnVubmVyX2FwaZRqsAMAAIwKVGVzdFN0cmVhbZRqsAMAAIwYVGVzdFN0cmVhbS5nZXRfd2luZG93aW5nlGqwAwAAjBFUZXN0U3RyZWFtLmV4cGFuZJRqsAMAAIwXVGVzdFN0cmVhbS5hZGRfZWxlbWVudHOUarADAACMH1Rlc3RTdHJlYW0uYWR2YW5jZV93YXRlcm1hcmtfdG+UarADAACMKFRlc3RTdHJlYW0uYWR2YW5jZV93YXRlcm1hcmtfdG9faW5maW5pdHmUarADAACMIlRlc3RTdHJlYW0uYWR2YW5jZV9wcm9jZXNzaW5nX3RpbWWUarADAACMIlRlc3RTdHJlYW0udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUarADAACMJFRlc3RTdHJlYW0uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqsAMAAHWMH2FwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW2UdJSMJ2FwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1fc2VydmljZZQoWD4HAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgVGhyZWFkUG9vbEV4ZWN1dG9yCgppbXBvcnQgZ3JwYwoKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwYwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5iZWFtX3J1bm5lcl9hcGlfcGIyX2dycGMgaW1wb3J0IFRlc3RTdHJlYW1TZXJ2aWNlU2VydmljZXIKCgpjbGFzcyBUZXN0U3RyZWFtU2VydmljZUNvbnRyb2xsZXIoVGVzdFN0cmVhbVNlcnZpY2VTZXJ2aWNlcik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50cywgZW5kcG9pbnQ9Tm9uZSk6CiAgICBzZWxmLl9zZXJ2ZXIgPSBncnBjLnNlcnZlcihUaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9MTApKQoKICAgIGlmIGVuZHBvaW50OgogICAgICBzZWxmLmVuZHBvaW50ID0gZW5kcG9pbnQKICAgICAgc2VsZi5fc2VydmVyLmFkZF9pbnNlY3VyZV9wb3J0KHNlbGYuZW5kcG9pbnQpCiAgICBlbHNlOgogICAgICBwb3J0ID0gc2VsZi5fc2VydmVyLmFkZF9pbnNlY3VyZV9wb3J0KCdbOjpdOjAnKQogICAgICBzZWxmLmVuZHBvaW50ID0gJ1s6Ol06e30nLmZvcm1hdChwb3J0KQoKICAgIGJlYW1fcnVubmVyX2FwaV9wYjJfZ3JwYy5hZGRfVGVzdFN0cmVhbVNlcnZpY2VTZXJ2aWNlcl90b19zZXJ2ZXIoCiAgICAgICAgc2VsZiwgc2VsZi5fc2VydmVyKQogICAgc2VsZi5fZXZlbnRzID0gZXZlbnRzCgogIGRlZiBzdGFydChzZWxmKToKICAgIHNlbGYuX3NlcnZlci5zdGFydCgpCgogIGRlZiBzdG9wKHNlbGYpOgogICAgc2VsZi5fc2VydmVyLnN0b3AoMCkKICAgIHNlbGYuX3NlcnZlci53YWl0X2Zvcl90ZXJtaW5hdGlvbigpCgogIGRlZiBFdmVudHMoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAiIiJTdHJlYW1zIGJhY2sgYWxsIG9mIHRoZSBldmVudHMgZnJvbSB0aGUgc3RyZWFtaW5nIGNhY2hlLiIiIgoKICAgIGZvciBlIGluIHNlbGYuX2V2ZW50czoKICAgICAgeWllbGQgZQqUfZQojCRUZXN0U3RyZWFtU2VydmljZUNvbnRyb2xsZXIuX19pbml0X1+UalYxAQBLH0srh5SMIVRlc3RTdHJlYW1TZXJ2aWNlQ29udHJvbGxlci5zdGFydJRqVjEBAEstSy6HlIwgVGVzdFN0cmVhbVNlcnZpY2VDb250cm9sbGVyLnN0b3CUalYxAQBLMEsyh5SMIlRlc3RTdHJlYW1TZXJ2aWNlQ29udHJvbGxlci5FdmVudHOUalYxAQBLNEs4h5SMG1Rlc3RTdHJlYW1TZXJ2aWNlQ29udHJvbGxlcpRqXTEBAEseSziHlHV9lCiMG1Rlc3RTdHJlYW1TZXJ2aWNlQ29udHJvbGxlcpRqLgMAAIwhVGVzdFN0cmVhbVNlcnZpY2VDb250cm9sbGVyLnN0YXJ0lGouAwAAjCBUZXN0U3RyZWFtU2VydmljZUNvbnRyb2xsZXIuc3RvcJRqLgMAAIwiVGVzdFN0cmVhbVNlcnZpY2VDb250cm9sbGVyLkV2ZW50c5RqLgMAAHWMJ2FwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9zdHJlYW1fc2VydmljZZR0lIweYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzlChYoRcAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXRpbGl0eSBtZXRob2RzIGZvciB0ZXN0aW5nCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBoYXNobGliCmltcG9ydCBpbXAKaW1wb3J0IG9zCmltcG9ydCBzaHV0aWwKaW1wb3J0IHRlbXBmaWxlCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBtb2NrIGltcG9ydCBNb2NrCmZyb20gbW9jayBpbXBvcnQgcGF0Y2gKCmZyb20gYXBhY2hlX2JlYW0uaW8uZmlsZXN5c3RlbXMgaW1wb3J0IEZpbGVTeXN0ZW1zCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHJldHJ5CgpERUZBVUxUX0hBU0hJTkdfQUxHID0gJ3NoYTEnCgoKY2xhc3MgVGVtcERpcihvYmplY3QpOgogICIiIkNvbnRleHQgTWFuYWdlciB0byBjcmVhdGUgYW5kIGNsZWFuLXVwIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4iIiIKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLl90ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCgogIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICByZXR1cm4gc2VsZgoKICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgogICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fdGVtcGRpcik6CiAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5fdGVtcGRpcikKCiAgZGVmIGdldF9wYXRoKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4iIiIKICAgIHJldHVybiBzZWxmLl90ZW1wZGlyCgogIGRlZiBjcmVhdGVfdGVtcF9maWxlKHNlbGYsIHN1ZmZpeD0nJywgbGluZXM9Tm9uZSk6CiAgICAiIiJDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuCgogICAgQXJnczoKICAgICAgc3VmZml4IChzdHIpOiBUaGUgZmlsZW5hbWUgc3VmZml4IG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSAoZS5nLiAnLnR4dCcpCiAgICAgIGxpbmVzIChMaXN0W3N0cl0pOiBBIGxpc3Qgb2YgbGluZXMgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHRlbXBvcmFyeQogICAgICAgIGZpbGUuCiAgICBSZXR1cm5zOgogICAgICBUaGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZC4KICAgICIiIgogICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyPXNlbGYuX3RlbXBkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9c3VmZml4KSBhcyBmOgogICAgICBpZiBsaW5lczoKICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAgIGYud3JpdGUobGluZSkKCiAgICAgIHJldHVybiBmLm5hbWUKCgpkZWYgY29tcHV0ZV9oYXNoKGNvbnRlbnQsIGhhc2hpbmdfYWxnPURFRkFVTFRfSEFTSElOR19BTEcpOgogICIiIkNvbXB1dGUgYSBoYXNoIHZhbHVlIG9mIGEgbGlzdCBvZiBvYmplY3RzIGJ5IGhhc2hpbmcgdGhlaXIgc3RyaW5nCiAgcmVwcmVzZW50YXRpb25zLiIiIgogIGNvbnRlbnQgPSBbCiAgICAgIHN0cih4KS5lbmNvZGUoJ3V0Zi04JykgaWYgbm90IGlzaW5zdGFuY2UoeCwgYnl0ZXMpIGVsc2UgeCBmb3IgeCBpbiBjb250ZW50CiAgXQogIGNvbnRlbnQuc29ydCgpCiAgbSA9IGhhc2hsaWIubmV3KGhhc2hpbmdfYWxnKQogIGZvciBlbGVtIGluIGNvbnRlbnQ6CiAgICBtLnVwZGF0ZShlbGVtKQogIHJldHVybiBtLmhleGRpZ2VzdCgpCgoKZGVmIHBhdGNoX3JldHJ5KHRlc3RjYXNlLCBtb2R1bGUpOgogICIiIkEgZnVuY3Rpb24gdG8gcGF0Y2ggcmV0cnkgbW9kdWxlIHRvIHVzZSBtb2NrIGNsb2NrIGFuZCBsb2dnZXIuCgogIENsb2NrIGFuZCBsb2dnZXIgdGhhdCBkZWZpbmVkIGluIHJldHJ5IGRlY29yYXRvciB3aWxsIGJlIHJlcGxhY2VkIGluIHRlc3QKICBpbiBvcmRlciB0byBza2lwIHNsZWVwIHBoYXNlIHdoZW4gcmV0cnkgaGFwcGVucy4KCiAgQXJnczoKICAgIHRlc3RjYXNlOiBBbiBpbnN0YW5jZSBvZiB1bml0dGVzdC5UZXN0Q2FzZSB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8KICAgICAgcGF0Y2ggcmV0cnkgbW9kdWxlLgogICAgbW9kdWxlOiBUaGUgbW9kdWxlIHRoYXQgdXNlcyByZXRyeSBhbmQgbmVlZCB0byBiZSByZXBsYWNlZCB3aXRoIG1vY2sKICAgICAgY2xvY2sgYW5kIGxvZ2dlciBpbiB0ZXN0LgogICIiIgogIHJlYWxfcmV0cnlfd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmID0gcmV0cnkud2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmCgogIGRlZiBwYXRjaGVkX3JldHJ5X3dpdGhfZXhwb25lbnRpYWxfYmFja29mZihudW1fcmV0cmllcywgcmV0cnlfZmlsdGVyKToKICAgICIiIkEgcGF0Y2ggZm9yIHJldHJ5IGRlY29yYXRvciB0byB1c2UgYSBtb2NrIGR1bW15IGNsb2NrIGFuZCBsb2dnZXIuIiIiCiAgICByZXR1cm4gcmVhbF9yZXRyeV93aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICAgICAgbnVtX3JldHJpZXM9bnVtX3JldHJpZXMsCiAgICAgICAgcmV0cnlfZmlsdGVyPXJldHJ5X2ZpbHRlciwKICAgICAgICBsb2dnZXI9TW9jaygpLAogICAgICAgIGNsb2NrPU1vY2soKSkKCiAgcGF0Y2gub2JqZWN0KAogICAgICByZXRyeSwKICAgICAgJ3dpdGhfZXhwb25lbnRpYWxfYmFja29mZicsCiAgICAgIHNpZGVfZWZmZWN0PXBhdGNoZWRfcmV0cnlfd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmKS5zdGFydCgpCgogICMgUmVsb2FkIG1vZHVsZSBhZnRlciBwYXRjaGluZy4KICBpbXAucmVsb2FkKG1vZHVsZSkKCiAgZGVmIHJlbW92ZV9wYXRjaGVzKCk6CiAgICBwYXRjaC5zdG9wYWxsKCkKICAgICMgUmVsb2FkIG1vZHVsZSBhZ2FpbiBhZnRlciByZW1vdmluZyBwYXRjaC4KICAgIGltcC5yZWxvYWQobW9kdWxlKQoKICB0ZXN0Y2FzZS5hZGRDbGVhbnVwKHJlbW92ZV9wYXRjaGVzKQoKCkByZXRyeS53aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICBudW1fcmV0cmllcz0zLCByZXRyeV9maWx0ZXI9cmV0cnkucmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXIpCmRlZiBkZWxldGVfZmlsZXMoZmlsZV9wYXRocyk6CiAgIiIiQSBmdW5jdGlvbiB0byBjbGVhbiB1cCBmaWxlcyBvciBkaXJlY3RvcmllcyB1c2luZyBgYEZpbGVTeXN0ZW1zYGAuCgogIEdsb2IgaXMgc3VwcG9ydGVkIGluIGZpbGUgcGF0aCBhbmQgZGlyZWN0b3JpZXMgd2lsbCBiZSBkZWxldGVkIHJlY3Vyc2l2ZWx5LgoKICBBcmdzOgogICAgZmlsZV9wYXRoczogQSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbnMgZmlsZSBwYXRocyBvciBkaXJlY3Rvcmllcy4KICAiIiIKICBpZiBsZW4oZmlsZV9wYXRocykgPT0gMDoKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2xlYW4gdXAgZmFpbGVkLiBJbnZhbGlkIGZpbGUgcGF0aDogJXMuJyAlIGZpbGVfcGF0aHMpCiAgRmlsZVN5c3RlbXMuZGVsZXRlKGZpbGVfcGF0aHMpCgoKZGVmIGNsZWFudXBfc3Vic2NyaXB0aW9ucyhzdWJfY2xpZW50LCBzdWJzKToKICAiIiJDbGVhbnVwIFB1YlN1YiBzdWJzY3JpcHRpb25zIGlmIGV4aXN0LiIiIgogIGZvciBzdWIgaW4gc3ViczoKICAgIHN1Yl9jbGllbnQuZGVsZXRlX3N1YnNjcmlwdGlvbihzdWIubmFtZSkKCgpkZWYgY2xlYW51cF90b3BpY3MocHViX2NsaWVudCwgdG9waWNzKToKICAiIiJDbGVhbnVwIFB1YlN1YiB0b3BpY3MgaWYgZXhpc3QuIiIiCiAgZm9yIHRvcGljIGluIHRvcGljczoKICAgIHB1Yl9jbGllbnQuZGVsZXRlX3RvcGljKHRvcGljLm5hbWUpCgoKY2xhc3MgUHVsbFJlc3BvbnNlTWVzc2FnZShvYmplY3QpOgogICIiIkRhdGEgcmVwcmVzZW50aW5nIGEgcHVsbCByZXF1ZXN0IHJlc3BvbnNlLgoKICBVdGlsaXR5IGNsYXNzIGZvciBgYGNyZWF0ZV9wdWxsX3Jlc3BvbnNlYGAuCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBkYXRhLAogICAgICBhdHRyaWJ1dGVzPU5vbmUsCiAgICAgIHB1Ymxpc2hfdGltZV9zZWNzPU5vbmUsCiAgICAgIHB1Ymxpc2hfdGltZV9uYW5vcz1Ob25lLAogICAgICBhY2tfaWQ9Tm9uZSk6CiAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICBzZWxmLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzCiAgICBzZWxmLnB1Ymxpc2hfdGltZV9zZWNzID0gcHVibGlzaF90aW1lX3NlY3MKICAgIHNlbGYucHVibGlzaF90aW1lX25hbm9zID0gcHVibGlzaF90aW1lX25hbm9zCiAgICBzZWxmLmFja19pZCA9IGFja19pZAoKCmRlZiBjcmVhdGVfcHVsbF9yZXNwb25zZShyZXNwb25zZXMpOgogICIiIkNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBgYGdvb2dsZS5jbG91ZC5wdWJzdWIudHlwZXMuUmVjZWl2ZWRNZXNzYWdlYGAuCgogIFVzZWQgdG8gc2ltdWxhdGUgdGhlIHJlc3BvbnNlIGZyb20gcHVic3ViLlN1YnNjcmliZXJDbGllbnQoKS5wdWxsKCkuCgogIEFyZ3M6CiAgICByZXNwb25zZXM6IGxpc3Qgb2YgYGBQdWxsUmVzcG9uc2VNZXNzYWdlYGAKCiAgUmV0dXJuczoKICAgIEFuIGluc3RhbmNlIG9mIGBgZ29vZ2xlLmNsb3VkLnB1YnN1Yi50eXBlcy5QdWxsUmVzcG9uc2VgYCBwb3B1bGF0ZWQgd2l0aAogICAgcmVzcG9uc2VzLgogICIiIgogIGZyb20gZ29vZ2xlLmNsb3VkIGltcG9ydCBwdWJzdWIKCiAgcmVzID0gcHVic3ViLnR5cGVzLlB1bGxSZXNwb25zZSgpCiAgZm9yIHJlc3BvbnNlIGluIHJlc3BvbnNlczoKICAgIHJlY2VpdmVkX21lc3NhZ2UgPSByZXMucmVjZWl2ZWRfbWVzc2FnZXMuYWRkKCkKCiAgICBtZXNzYWdlID0gcmVjZWl2ZWRfbWVzc2FnZS5tZXNzYWdlCiAgICBtZXNzYWdlLmRhdGEgPSByZXNwb25zZS5kYXRhCiAgICBpZiByZXNwb25zZS5hdHRyaWJ1dGVzIGlzIG5vdCBOb25lOgogICAgICBmb3IgaywgdiBpbiByZXNwb25zZS5hdHRyaWJ1dGVzLml0ZW1zKCk6CiAgICAgICAgbWVzc2FnZS5hdHRyaWJ1dGVzW2tdID0gdgogICAgaWYgcmVzcG9uc2UucHVibGlzaF90aW1lX3NlY3MgaXMgbm90IE5vbmU6CiAgICAgIG1lc3NhZ2UucHVibGlzaF90aW1lLnNlY29uZHMgPSByZXNwb25zZS5wdWJsaXNoX3RpbWVfc2VjcwogICAgaWYgcmVzcG9uc2UucHVibGlzaF90aW1lX25hbm9zIGlzIG5vdCBOb25lOgogICAgICBtZXNzYWdlLnB1Ymxpc2hfdGltZS5uYW5vcyA9IHJlc3BvbnNlLnB1Ymxpc2hfdGltZV9uYW5vcwoKICAgIGlmIHJlc3BvbnNlLmFja19pZCBpcyBub3QgTm9uZToKICAgICAgcmVjZWl2ZWRfbWVzc2FnZS5hY2tfaWQgPSByZXNwb25zZS5hY2tfaWQKCiAgcmV0dXJuIHJlcwqUfZQojBBUZW1wRGlyLl9faW5pdF9flGpWMQEASy1LLoeUjBFUZW1wRGlyLl9fZW50ZXJfX5RqVjEBAEswSzGHlIwQVGVtcERpci5fX2V4aXRfX5RqVjEBAEszSzWHlIwQVGVtcERpci5nZXRfcGF0aJRqVjEBAEs3SzmHlIwYVGVtcERpci5jcmVhdGVfdGVtcF9maWxllGpWMQEASztLTIeUjAdUZW1wRGlylGpdMQEASytLTIeUjAxjb21wdXRlX2hhc2iUalYxAQBLT0tZh5SMC3BhdGNoX3JldHJ5lGpWMQEAS1xLf4eUjAxkZWxldGVfZmlsZXOUalYxAQBLgkuOh5SMFWNsZWFudXBfc3Vic2NyaXB0aW9uc5RqVjEBAEuRS5SHlIwOY2xlYW51cF90b3BpY3OUalYxAQBLl0uah5SMHFB1bGxSZXNwb25zZU1lc3NhZ2UuX19pbml0X1+UalYxAQBLokuth5SME1B1bGxSZXNwb25zZU1lc3NhZ2WUal0xAQBLnUuth5SMFGNyZWF0ZV9wdWxsX3Jlc3BvbnNllGpWMQEAS7BLz4eUdX2UKIwHVGVtcERpcpRqWAMAAIwQVGVtcERpci5nZXRfcGF0aJRqWAMAAIwYVGVtcERpci5jcmVhdGVfdGVtcF9maWxllGpYAwAAjAxjb21wdXRlX2hhc2iUalgDAACMC3BhdGNoX3JldHJ5lGpYAwAAjAxkZWxldGVfZmlsZXOUalgDAACMFWNsZWFudXBfc3Vic2NyaXB0aW9uc5RqWAMAAIwOY2xlYW51cF90b3BpY3OUalgDAACME1B1bGxSZXNwb25zZU1lc3NhZ2WUalgDAACMFGNyZWF0ZV9wdWxsX3Jlc3BvbnNllGpYAwAAdYweYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3V0aWxzlHSUjBhhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWyUKFjiMAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVdGlsaXRpZXMgZm9yIHRlc3RpbmcgQmVhbSBwaXBlbGluZXMuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBnbG9iCmltcG9ydCBpbwppbXBvcnQgc3lzCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQgdGhyZWFkaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdAoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IHJhaXNlXwoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgcHZhbHVlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBDcmVhdGUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFdpbmRvd0ludG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm0gaW1wb3J0IFBUcmFuc2Zvcm0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwgaW1wb3J0IENvR3JvdXBCeUtleQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIGltcG9ydCBleHBlcmltZW50YWwKCl9fYWxsX18gPSBbCiAgICAnYXNzZXJ0X3RoYXQnLAogICAgJ2VxdWFsX3RvJywKICAgICdlcXVhbF90b19wZXJfd2luZG93JywKICAgICdpc19lbXB0eScsCiAgICAnaXNfbm90X2VtcHR5JywKICAgICdtYXRjaGVzX2FsbCcsCiAgICAjIG9wZW5fc2hhcmRzIGlzIGludGVybmFsIGFuZCBoYXMgbm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAgICdvcGVuX3NoYXJkcycsCiAgICAnVGVzdFdpbmRvd2VkVmFsdWUnLApdCgoKY2xhc3MgQmVhbUFzc2VydEV4Y2VwdGlvbihFeGNlcHRpb24pOgogICIiIkV4Y2VwdGlvbiByYWlzZWQgYnkgbWF0Y2hlciBjbGFzc2VzIHVzZWQgYnkgYXNzZXJ0X3RoYXQgdHJhbnNmb3JtLiIiIgoKICBwYXNzCgoKIyBVc2VkIGZvciByZWlmeWluZyB0aW1lc3RhbXBzIGFuZCB3aW5kb3dzIGZvciBhc3NlcnRfdGhhdCBtYXRjaGVycy4KVGVzdFdpbmRvd2VkVmFsdWUgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKAogICAgJ1Rlc3RXaW5kb3dlZFZhbHVlJywgJ3ZhbHVlIHRpbWVzdGFtcCB3aW5kb3dzJykKCgpkZWYgY29udGFpbnNfaW5fYW55X29yZGVyKGl0ZXJhYmxlKToKICAiIiJDcmVhdGVzIGFuIG9iamVjdCB0aGF0IG1hdGNoZXMgYW5vdGhlciBpdGVyYWJsZSBpZiB0aGV5IGJvdGggaGF2ZSB0aGUKICBzYW1lIGNvdW50IG9mIGl0ZW1zLgoKICBBcmd1bWVudHM6CiAgICBpdGVyYWJsZTogQW4gaXRlcmFibGUgb2YgaGFzaGFibGUgb2JqZWN0cy4KICAiIiIKICBjbGFzcyBJbkFueU9yZGVyKG9iamVjdCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUpOgogICAgICBzZWxmLl9jb3VudGVyID0gY29sbGVjdGlvbnMuQ291bnRlcihpdGVyYWJsZSkKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgcmV0dXJuIHNlbGYuX2NvdW50ZXIgPT0gY29sbGVjdGlvbnMuQ291bnRlcihvdGhlcikKCiAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICByZXR1cm4gaGFzaChzZWxmLl9jb3VudGVyKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICJJbkFueU9yZGVyKCVzKSIgJSBzZWxmLl9jb3VudGVyCgogIHJldHVybiBJbkFueU9yZGVyKGl0ZXJhYmxlKQoKCmNsYXNzIF9FcXVhbFRvUGVyV2luZG93TWF0Y2hlcihvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZF93aW5kb3dfdG9fZWxlbWVudHMpOgogICAgc2VsZi5fZXhwZWN0ZWRfd2luZG93X3RvX2VsZW1lbnRzID0gZXhwZWN0ZWRfd2luZG93X3RvX2VsZW1lbnRzCgogIGRlZiBfX2NhbGxfXyhzZWxmLCB2YWx1ZSk6CiAgICAjIFNob3J0LWhhbmQuCiAgICBfZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RlZF93aW5kb3dfdG9fZWxlbWVudHMKCiAgICAjIE1hdGNoIHRoZSBnaXZlbiB3aW5kb3dlZCB2YWx1ZSB0byBhbiBleHBlY3RlZCB3aW5kb3cuIEZhaWxzIGlmIHRoZSB3aW5kb3cKICAgICMgZG9lc24ndCBleGlzdCBvciB0aGUgZWxlbWVudCB3YXNuJ3QgZm91bmQgaW4gdGhlIHdpbmRvdy4KICAgIGRlZiBtYXRjaCh3aW5kb3dlZF92YWx1ZSk6CiAgICAgIGFjdHVhbCA9IHdpbmRvd2VkX3ZhbHVlLnZhbHVlCiAgICAgIHdpbmRvd19rZXkgPSB3aW5kb3dlZF92YWx1ZS53aW5kb3dzWzBdCiAgICAgIHRyeToKICAgICAgICBleHBlY3RlZCA9IF9leHBlY3RlZFt3aW5kb3dfa2V5XQogICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbigKICAgICAgICAgICAgJ0ZhaWxlZCBhc3NlcnQ6IHdpbmRvdyB7fSBub3QgZm91bmQgaW4gYW55IGV4cGVjdGVkICcgXAogICAgICAgICAgICAnd2luZG93cyB7fScuZm9ybWF0KHdpbmRvd19rZXksIGxpc3QoX2V4cGVjdGVkLmtleXMoKSkpKQoKICAgICAgIyBSZW1vdmUgYW55IG1hdGNoZWQgZWxlbWVudHMgZnJvbSB0aGUgd2luZG93LiBUaGlzIGlzIHVzZWQgbGF0ZXIgb24gdG8KICAgICAgIyBhc3NlcnQgdGhhdCBhbGwgZWxlbWVudHMgaW4gdGhlIHdpbmRvdyB3ZXJlIG1hdGNoZWQgd2l0aCBhY3R1YWwKICAgICAgIyBlbGVtZW50cy4KICAgICAgdHJ5OgogICAgICAgIF9leHBlY3RlZFt3aW5kb3dfa2V5XS5yZW1vdmUoYWN0dWFsKQogICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICByYWlzZSBCZWFtQXNzZXJ0RXhjZXB0aW9uKAogICAgICAgICAgICAnRmFpbGVkIGFzc2VydDogZWxlbWVudCB7fSBub3QgZm91bmQgaW4gd2luZG93ICcgXAogICAgICAgICAgICAne306e30nLmZvcm1hdChhY3R1YWwsIHdpbmRvd19rZXksIF9leHBlY3RlZFt3aW5kb3dfa2V5XSkpCgogICAgIyBSdW4gdGhlIG1hdGNoZXIgZm9yIGVhY2ggd2luZG93IGFuZCB2YWx1ZSBwYWlyLiBGYWlscyBpZiB0aGUKICAgICMgd2luZG93ZWRfdmFsdWUgaXMgbm90IGEgVGVzdFdpbmRvd2VkVmFsdWUuCiAgICBmb3Igd2luZG93ZWRfdmFsdWUgaW4gdmFsdWU6CiAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHdpbmRvd2VkX3ZhbHVlLCBUZXN0V2luZG93ZWRWYWx1ZSk6CiAgICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbigKICAgICAgICAgICAgJ0ZhaWxlZCBhc3NlcnQ6IFJlY2VpdmVkIGVsZW1lbnQge30gaXMgbm90IG9mIHR5cGUgJyBcCiAgICAgICAgICAgICdUZXN0V2luZG93ZWRWYWx1ZS4gRGlkIHlvdSBmb3JnZXQgdG8gc2V0IHJlaWZ5X3dpbmRvd3M9VHJ1ZSAnIFwKICAgICAgICAgICAgJ29uIHRoZSBhc3NlcnRpb24/Jy5mb3JtYXQod2luZG93ZWRfdmFsdWUpKQogICAgICBtYXRjaCh3aW5kb3dlZF92YWx1ZSkKCiAgICAjIEZpbmFsbHksIHNvbWUgZWxlbWVudHMgbWF5IG5vdCBoYXZlIGJlZW4gbWF0Y2hlZC4gQXNzZXJ0IHRoYXQgd2UgcmVtb3ZlZAogICAgIyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgd2UgcmVjZWl2ZWQgZnJvbSB0aGUgZXhwZWN0ZWQgbGlzdC4gSWYgdGhlIGxpc3QgaXMKICAgICMgbm9uLWVtcHR5LCB0aGVuIHRoZXJlIGFyZSB1bm1hdGNoZWQgZWxlbWVudHMuCiAgICBmb3Igd2luIGluIF9leHBlY3RlZDoKICAgICAgaWYgX2V4cGVjdGVkW3dpbl06CiAgICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbigKICAgICAgICAgICAgJ0ZhaWxlZCBhc3NlcnQ6IHVubWF0Y2hlZCBlbGVtZW50cyB7fSBpbiB3aW5kb3cge30nLmZvcm1hdCgKICAgICAgICAgICAgICAgIF9leHBlY3RlZFt3aW5dLCB3aW4pKQoKCmRlZiBlcXVhbF90b19wZXJfd2luZG93KGV4cGVjdGVkX3dpbmRvd190b19lbGVtZW50cyk6CiAgIiIiTWF0Y2hlciB1c2VkIGJ5IGFzc2VydF90aGF0IHRvIGNoZWNrIHRvIGFzc2VydCBleHBlY3RlZCB3aW5kb3dzLgoKICBUaGUgJ2Fzc2VydF90aGF0JyBzdGF0ZW1lbnQgbXVzdCBoYXZlIHJlaWZ5X3dpbmRvd3M9VHJ1ZS4gVGhpcyBhc3NlcnRpb24gd29ya3MKICB3aGVuIGVsZW1lbnRzIGFyZSBlbWl0dGVkIGFuZCBhcmUgZmluYWxseSBjaGVja2VkIGF0IHRoZSBlbmQgb2YgdGhlIHdpbmRvdy4KCiAgQXJndW1lbnRzOgogICAgZXhwZWN0ZWRfd2luZG93X3RvX2VsZW1lbnRzOiBBIGRpY3Rpb25hcnkgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSB3aW5kb3dzCiAgICAgIHRvIGNoZWNrIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgZWxlbWVudHMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggd2luZG93LgogICIiIgoKICByZXR1cm4gX0VxdWFsVG9QZXJXaW5kb3dNYXRjaGVyKGV4cGVjdGVkX3dpbmRvd190b19lbGVtZW50cykKCgojIE5vdGUgdGhhdCBlcXVhbF90byBjaGVja3MgaWYgZXhwZWN0ZWQgYW5kIGFjdHVhbCBhcmUgcGVybXV0YXRpb25zIG9mIGVhY2gKIyBvdGhlci4gSG93ZXZlciwgb25seSBwZXJtdXRhdGlvbnMgb2YgdGhlIHRvcCBsZXZlbCBhcmUgY2hlY2tlZC4gVGhlcmVmb3JlCiMgWzEsMl0gYW5kIFsyLDFdIGFyZSBjb25zaWRlcmVkIGVxdWFsIGFuZCBbWzEsMl1dIGFuZCBbWzIsMV1dIGFyZSBub3QuCmRlZiBlcXVhbF90byhleHBlY3RlZCwgZXF1YWxzX2ZuPU5vbmUpOgogIGRlZiBfZXF1YWwoYWN0dWFsLCBlcXVhbHNfZm49ZXF1YWxzX2ZuKToKICAgIGV4cGVjdGVkX2xpc3QgPSBsaXN0KGV4cGVjdGVkKQoKICAgICMgVHJ5IHRvIGNvbXBhcmUgYWN0dWFsIGFuZCBleHBlY3RlZCBieSBzb3J0aW5nLiBUaGlzIGZhaWxzIHdpdGggYQogICAgIyBUeXBlRXJyb3IgaW4gUHl0aG9uIDMgaWYgZGlmZmVyZW50IHR5cGVzIGFyZSBwcmVzZW50IGluIHRoZSBzYW1lCiAgICAjIGNvbGxlY3Rpb24uIEl0IGNhbiBhbHNvIHJhaXNlIGZhbHNlIG5lZ2F0aXZlcyBmb3IgdHlwZXMgdGhhdCBkb24ndCBoYXZlCiAgICAjIGEgZGV0ZXJtaW5pc3RpYyBzb3J0IG9yZGVyLCBsaWtlIHB5YXJyb3cgVGFibGVzIGFzIG9mIDAuMTQuMQogICAgaWYgbm90IGVxdWFsc19mbjoKICAgICAgZXF1YWxzX2ZuID0gbGFtYmRhIGUsIGE6IGUgPT0gYQogICAgICB0cnk6CiAgICAgICAgc29ydGVkX2V4cGVjdGVkID0gc29ydGVkKGV4cGVjdGVkKQogICAgICAgIHNvcnRlZF9hY3R1YWwgPSBzb3J0ZWQoYWN0dWFsKQogICAgICAgIGlmIHNvcnRlZF9leHBlY3RlZCA9PSBzb3J0ZWRfYWN0dWFsOgogICAgICAgICAgcmV0dXJuCiAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgcGFzcwogICAgIyBTbG93ZXIgbWV0aG9kLCB1c2VkIGluIHR3byBjYXNlczoKICAgICMgMSkgSWYgc29ydGVkIGV4cGVjdGVkICE9IGFjdHVhbCwgdXNlIHRoaXMgbWV0aG9kIHRvIHZlcmlmeSB0aGUgaW5lcXVhbGl0eS4KICAgICMgICAgVGhpcyBlbnN1cmVzIHdlIGRvbid0IHJhaXNlIGFueSBmYWxzZSBuZWdhdGl2ZXMgZm9yIHR5cGVzIHRoYXQgZG9uJ3QKICAgICMgICAgaGF2ZSBhIGRldGVybWluaXN0aWMgc29ydCBvcmRlci4KICAgICMgMikgQXMgYSBmYWxsYmFjayBpZiB3ZSBlbmNvdW50ZXIgYSBUeXBlRXJyb3IgaW4gcHl0aG9uIDMuIHRoaXMgbWV0aG9kCiAgICAjICAgIHdvcmtzIG9uIGNvbGxlY3Rpb25zIHRoYXQgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuCiAgICB1bmV4cGVjdGVkID0gW10KICAgIGZvciBlbGVtZW50IGluIGFjdHVhbDoKICAgICAgZm91bmQgPSBGYWxzZQogICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUoZXhwZWN0ZWRfbGlzdCk6CiAgICAgICAgaWYgZXF1YWxzX2ZuKHYsIGVsZW1lbnQpOgogICAgICAgICAgZm91bmQgPSBUcnVlCiAgICAgICAgICBleHBlY3RlZF9saXN0LnBvcChpKQogICAgICAgICAgYnJlYWsKICAgICAgaWYgbm90IGZvdW5kOgogICAgICAgIHVuZXhwZWN0ZWQuYXBwZW5kKGVsZW1lbnQpCiAgICBpZiB1bmV4cGVjdGVkIG9yIGV4cGVjdGVkX2xpc3Q6CiAgICAgIG1zZyA9ICdGYWlsZWQgYXNzZXJ0OiAlciA9PSAlcicgJSAoZXhwZWN0ZWQsIGFjdHVhbCkKICAgICAgaWYgdW5leHBlY3RlZDoKICAgICAgICBtc2cgPSBtc2cgKyAnLCB1bmV4cGVjdGVkIGVsZW1lbnRzICVyJyAlIHVuZXhwZWN0ZWQKICAgICAgaWYgZXhwZWN0ZWRfbGlzdDoKICAgICAgICBtc2cgPSBtc2cgKyAnLCBtaXNzaW5nIGVsZW1lbnRzICVyJyAlIGV4cGVjdGVkX2xpc3QKICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbihtc2cpCgogIHJldHVybiBfZXF1YWwKCgpkZWYgbWF0Y2hlc19hbGwoZXhwZWN0ZWQpOgogICIiIk1hdGNoZXIgdXNlZCBieSBhc3NlcnRfdGhhdCB0byBjaGVjayBhIHNldCBvZiBtYXRjaGVycy4KCiAgQXJnczoKICAgIGV4cGVjdGVkOiBBIGxpc3Qgb2YgZWxlbWVudHMgb3IgaGFtY3Jlc3QgbWF0Y2hlcnMgdG8gYmUgdXNlZCB0byBtYXRjaAogICAgICB0aGUgZWxlbWVudHMgb2YgYSBzaW5nbGUgUENvbGxlY3Rpb24uCiAgIiIiCiAgZGVmIF9tYXRjaGVzKGFjdHVhbCk6CiAgICBmcm9tIGhhbWNyZXN0LmNvcmUgaW1wb3J0IGFzc2VydF90aGF0IGFzIGhhbWNyZXN0X2Fzc2VydAogICAgZnJvbSBoYW1jcmVzdC5saWJyYXJ5LmNvbGxlY3Rpb24gaW1wb3J0IGNvbnRhaW5zX2luYW55b3JkZXIKICAgIGV4cGVjdGVkX2xpc3QgPSBsaXN0KGV4cGVjdGVkKQoKICAgIGhhbWNyZXN0X2Fzc2VydChhY3R1YWwsIGNvbnRhaW5zX2luYW55b3JkZXIoKmV4cGVjdGVkX2xpc3QpKQoKICByZXR1cm4gX21hdGNoZXMKCgpkZWYgaXNfZW1wdHkoKToKICBkZWYgX2VtcHR5KGFjdHVhbCk6CiAgICBhY3R1YWwgPSBsaXN0KGFjdHVhbCkKICAgIGlmIGFjdHVhbDoKICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbignRmFpbGVkIGFzc2VydDogW10gPT0gJXInICUgYWN0dWFsKQoKICByZXR1cm4gX2VtcHR5CgoKZGVmIGlzX25vdF9lbXB0eSgpOgogICIiIgogIFRoaXMgaXMgdGVzdCBtZXRob2Qgd2hpY2ggbWFrZXMgc3VyZSB0aGF0IHRoZSBwY29sIGlzIG5vdCBlbXB0eSBhbmQgaXQgaGFzCiAgc29tZSBkYXRhIGluIGl0LgogIDpyZXR1cm46CiAgIiIiCiAgZGVmIF9ub3RfZW1wdHkoYWN0dWFsKToKICAgIGFjdHVhbCA9IGxpc3QoYWN0dWFsKQogICAgaWYgbm90IGFjdHVhbDoKICAgICAgcmFpc2UgQmVhbUFzc2VydEV4Y2VwdGlvbignRmFpbGVkIGFzc2VydDogcGNvbCBpcyBlbXB0eScpCgogIHJldHVybiBfbm90X2VtcHR5CgoKZGVmIGFzc2VydF90aGF0KAogICAgYWN0dWFsLAogICAgbWF0Y2hlciwKICAgIGxhYmVsPSdhc3NlcnRfdGhhdCcsCiAgICByZWlmeV93aW5kb3dzPUZhbHNlLAogICAgdXNlX2dsb2JhbF93aW5kb3c9VHJ1ZSk6CiAgIiIiQSBQVHJhbnNmb3JtIHRoYXQgY2hlY2tzIGEgUENvbGxlY3Rpb24gaGFzIGFuIGV4cGVjdGVkIHZhbHVlLgoKICBOb3RlIHRoYXQgYXNzZXJ0X3RoYXQgc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgdGVzdGluZyBwaXBlbGluZXMgc2luY2UgdGhlCiAgY2hlY2sgcmVsaWVzIG9uIG1hdGVyaWFsaXppbmcgdGhlIGVudGlyZSBQQ29sbGVjdGlvbiBiZWluZyBjaGVja2VkLgoKICBBcmdzOgogICAgYWN0dWFsOiBBIFBDb2xsZWN0aW9uLgogICAgbWF0Y2hlcjogQSBtYXRjaGVyIGZ1bmN0aW9uIHRha2luZyBhcyBhcmd1bWVudCB0aGUgYWN0dWFsIHZhbHVlIG9mIGEKICAgICAgbWF0ZXJpYWxpemVkIFBDb2xsZWN0aW9uLiBUaGUgbWF0Y2hlciB2YWxpZGF0ZXMgdGhpcyBhY3R1YWwgdmFsdWUgYWdhaW5zdAogICAgICBleHBlY3RhdGlvbnMgYW5kIHJhaXNlcyBCZWFtQXNzZXJ0RXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBtZXQuCiAgICBsYWJlbDogT3B0aW9uYWwgc3RyaW5nIGxhYmVsLiBUaGlzIGlzIG5lZWRlZCBpbiBjYXNlIHNldmVyYWwgYXNzZXJ0X3RoYXQKICAgICAgdHJhbnNmb3JtcyBhcmUgaW50cm9kdWNlZCBpbiB0aGUgc2FtZSBwaXBlbGluZS4KICAgIHJlaWZ5X3dpbmRvd3M6IElmIFRydWUsIG1hdGNoZXIgaXMgcGFzc2VkIGEgbGlzdCBvZiBUZXN0V2luZG93ZWRWYWx1ZS4KICAgIHVzZV9nbG9iYWxfd2luZG93OiBJZiBGYWxzZSwgbWF0Y2hlciBpcyBwYXNzZWQgYSBkaWN0aW9uYXJ5IG9mCiAgICAgIChrLCB2KSA9ICh3aW5kb3csIGVsZW1lbnRzIGluIHRoZSB3aW5kb3cpLgoKICBSZXR1cm5zOgogICAgSWdub3JlZC4KICAiIiIKICBhc3NlcnQgaXNpbnN0YW5jZShhY3R1YWwsIHB2YWx1ZS5QQ29sbGVjdGlvbiksICgKICAgICAgJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB0eXBlIGZvciBCZWFtIGFzc2VydCcgJSB0eXBlKGFjdHVhbCkpCgogIGlmIGlzaW5zdGFuY2UobWF0Y2hlciwgX0VxdWFsVG9QZXJXaW5kb3dNYXRjaGVyKToKICAgIHJlaWZ5X3dpbmRvd3MgPSBUcnVlCiAgICB1c2VfZ2xvYmFsX3dpbmRvdyA9IFRydWUKCiAgY2xhc3MgUmVpZnlUaW1lc3RhbXBXaW5kb3coRG9Gbik6CiAgICBkZWYgcHJvY2VzcygKICAgICAgICBzZWxmLCBlbGVtZW50LCB0aW1lc3RhbXA9RG9Gbi5UaW1lc3RhbXBQYXJhbSwgd2luZG93PURvRm4uV2luZG93UGFyYW0pOgogICAgICAjIFRoaXMgcmV0dXJucyBUZXN0V2luZG93ZWRWYWx1ZSBpbnN0ZWFkIG9mCiAgICAgICMgYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZS5XaW5kb3dlZFZhbHVlIGJlY2F1c2UgUGFyRG8gd2lsbCBleHRyYWN0CiAgICAgICMgdGhlIHRpbWVzdGFtcCBhbmQgd2luZG93IG91dCBvZiB0aGUgbGF0dGVyLgogICAgICByZXR1cm4gW1Rlc3RXaW5kb3dlZFZhbHVlKGVsZW1lbnQsIHRpbWVzdGFtcCwgW3dpbmRvd10pXQoKICBjbGFzcyBBZGRXaW5kb3coRG9Gbik6CiAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB3aW5kb3c9RG9Gbi5XaW5kb3dQYXJhbSk6CiAgICAgIHlpZWxkIGVsZW1lbnQsIHdpbmRvdwoKICBjbGFzcyBBc3NlcnRUaGF0KFBUcmFuc2Zvcm0pOgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIGlmIHJlaWZ5X3dpbmRvd3M6CiAgICAgICAgcGNvbGwgPSBwY29sbCB8IFBhckRvKFJlaWZ5VGltZXN0YW1wV2luZG93KCkpCgogICAgICBrZXllZF9zaW5nbGV0b24gPSBwY29sbC5waXBlbGluZSB8IENyZWF0ZShbKE5vbmUsIE5vbmUpXSkKCiAgICAgIGlmIHVzZV9nbG9iYWxfd2luZG93OgogICAgICAgIHBjb2xsID0gcGNvbGwgfCBXaW5kb3dJbnRvKHdpbmRvdy5HbG9iYWxXaW5kb3dzKCkpCgogICAgICBrZXllZF9hY3R1YWwgPSBwY29sbCB8ICJUb1ZvaWRLZXkiID4+IE1hcChsYW1iZGEgdjogKE5vbmUsIHYpKQoKICAgICAgIyBUaGlzIGlzIGEgQ29Hcm91cEJ5S2V5IHNvIHRoYXQgdGhlIG1hdGNoZXIgYWx3YXlzIHJ1bnMsIGV2ZW4gaWYgdGhlCiAgICAgICMgUENvbGxlY3Rpb24gaXMgZW1wdHkuCiAgICAgIHBsYWluX2FjdHVhbCA9ICgoa2V5ZWRfc2luZ2xldG9uLCBrZXllZF9hY3R1YWwpCiAgICAgICAgICAgICAgICAgICAgICB8ICJHcm91cCIgPj4gQ29Hcm91cEJ5S2V5KCkKICAgICAgICAgICAgICAgICAgICAgIHwgIlVua2V5IiA+PiBNYXAobGFtYmRhIGtfdmFsdWVzOiBrX3ZhbHVlc1sxXVsxXSkpCgogICAgICBpZiBub3QgdXNlX2dsb2JhbF93aW5kb3c6CiAgICAgICAgcGxhaW5fYWN0dWFsID0gcGxhaW5fYWN0dWFsIHwgIkFkZFdpbmRvdyIgPj4gUGFyRG8oQWRkV2luZG93KCkpCgogICAgICBwbGFpbl9hY3R1YWwgPSBwbGFpbl9hY3R1YWwgfCAiTWF0Y2giID4+IE1hcChtYXRjaGVyKQoKICAgIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgICByZXR1cm4gbGFiZWwKCiAgYWN0dWFsIHwgQXNzZXJ0VGhhdCgpICAjIHB5bGludDogZGlzYWJsZT1leHByZXNzaW9uLW5vdC1hc3NpZ25lZAoKCkBleHBlcmltZW50YWwoKQpkZWYgb3Blbl9zaGFyZHMoZ2xvYl9wYXR0ZXJuLCBtb2RlPSdydCcsIGVuY29kaW5nPSd1dGYtOCcpOgogICIiIlJldHVybnMgYSBjb21wb3NpdGUgZmlsZSBvZiBhbGwgc2hhcmRzIG1hdGNoaW5nIHRoZSBnaXZlbiBnbG9iIHBhdHRlcm4uCgogIEFyZ3M6CiAgICBnbG9iX3BhdHRlcm4gKHN0cik6IFBhdHRlcm4gdXNlZCB0byBtYXRjaCBmaWxlcyB3aGljaCBzaG91bGQgYmUgb3BlbmVkLgogICAgbW9kZSAoc3RyKTogU3BlY2lmeSB0aGUgbW9kZSBpbiB3aGljaCB0aGUgZmlsZSBzaG91bGQgYmUgb3BlbmVkLiBGb3IKICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBtb2RlcywgY2hlY2sgaW8ub3BlbigpIGRvY3VtZW50YXRpb24uCiAgICBlbmNvZGluZyAoc3RyKTogTmFtZSBvZiB0aGUgZW5jb2RpbmcgdXNlZCB0byBkZWNvZGUgb3IgZW5jb2RlIHRoZSBmaWxlLgogICAgICAgICAgICAgICAgICAgIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IG1vZGUuCgogIFJldHVybnM6CiAgICBBIHN0cmVhbSB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgb3BlbmVkIGZpbGVzLgogICIiIgogIGlmICdiJyBpbiBtb2RlOgogICAgZW5jb2RpbmcgPSBOb25lCgogIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgb3V0X2ZpbGU6CiAgICBmb3Igc2hhcmQgaW4gZ2xvYi5nbG9iKGdsb2JfcGF0dGVybik6CiAgICAgIHdpdGggb3BlbihzaGFyZCwgJ3JiJykgYXMgaW5fZmlsZToKICAgICAgICBvdXRfZmlsZS53cml0ZShpbl9maWxlLnJlYWQoKSkKICAgIGNvbmNhdGVuYXRlZF9maWxlX25hbWUgPSBvdXRfZmlsZS5uYW1lCiAgcmV0dXJuIGlvLm9wZW4oY29uY2F0ZW5hdGVkX2ZpbGVfbmFtZSwgbW9kZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpCgoKZGVmIHRpbWVvdXQodGltZW91dF9zZWNzKToKICAiIiJUZXN0IHRpbWVvdXQgbWV0aG9kIGRlY29yYXRvci4KCiAgQW5ub3RhdGUgdGVzdCBtZXRob2Qgc28gdGhhdCB0ZXN0IHdpbGwgZmFpbCBpbW1lZGlhdGVseSBhZnRlcgogIHRlc3QgcnVuIHRvb2sgbG9uZ2VyIHRpbWUgdGhhbiB0aGUgc3BlY2lmaWVkIHRpbWVvdXQuCgogIEV4YW1wbGVzOgoKICAgIEB0aW1lb3V0KDUpCiAgICBkZWYgdGVzdF9zb21lX2Z1bmN0aW9uKHNlbGYpOgogICAgICAuLi4KCiAgIiIiCiAgZGVmIGRlY29yYXRlKGZuKToKICAgIGV4Y19pbmZvID0gW10KCiAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgogICAgICBkZWYgY2FsbF9mbigpOgogICAgICAgIHRyeToKICAgICAgICAgIGZuKCphcmdzLCAqKmt3YXJncykKICAgICAgICBleGNlcHQ6ICAjIHB5bGludDogZGlzYWJsZT1iYXJlLWV4Y2VwdAogICAgICAgICAgZXhjX2luZm9bOl0gPSBzeXMuZXhjX2luZm8oKQoKICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y2FsbF9mbikKICAgICAgdGhyZWFkLmRhZW1vbiA9IFRydWUKICAgICAgdGhyZWFkLnN0YXJ0KCkKICAgICAgdGhyZWFkLmpvaW4odGltZW91dF9zZWNzKQogICAgICBpZiBleGNfaW5mbzoKICAgICAgICB0LCB2LCB0YiA9IGV4Y19pbmZvICAjIHB5bGludDogZGlzYWJsZT11bmJhbGFuY2VkLXR1cGxlLXVucGFja2luZwogICAgICAgIHJhaXNlXyh0LCB2LCB0YikKICAgICAgYXNzZXJ0IG5vdCB0aHJlYWQuaXNfYWxpdmUoKSwgJ3RpbWVkIG91dCBhZnRlciAlcyBzZWNvbmRzJyAlIHRpbWVvdXRfc2VjcwoKICAgIHdyYXBwZXIuX19uYW1lX18gPSBmbi5fX25hbWVfXwogICAgcmV0dXJuIHdyYXBwZXIKCiAgcmV0dXJuIGRlY29yYXRlCpR9lCiME0JlYW1Bc3NlcnRFeGNlcHRpb26Ual0xAQBLOks9h5SMKWNvbnRhaW5zX2luX2FueV9vcmRlci5JbkFueU9yZGVyLl9faW5pdF9flGpWMQEAS01LToeUjCdjb250YWluc19pbl9hbnlfb3JkZXIuSW5BbnlPcmRlci5fX2VxX1+UalYxAQBLUEtRh5SMJ2NvbnRhaW5zX2luX2FueV9vcmRlci5JbkFueU9yZGVyLl9fbmVfX5RqVjEBAEtTS1WHlIwpY29udGFpbnNfaW5fYW55X29yZGVyLkluQW55T3JkZXIuX19oYXNoX1+UalYxAQBLV0tYh5SMKWNvbnRhaW5zX2luX2FueV9vcmRlci5JbkFueU9yZGVyLl9fcmVwcl9flGpWMQEAS1pLW4eUjCBjb250YWluc19pbl9hbnlfb3JkZXIuSW5BbnlPcmRlcpRqXTEBAEtMS1uHlIwVY29udGFpbnNfaW5fYW55X29yZGVylGpWMQEAS0VLXYeUjCFfRXF1YWxUb1BlcldpbmRvd01hdGNoZXIuX19pbml0X1+UalYxAQBLYUtih5SMIV9FcXVhbFRvUGVyV2luZG93TWF0Y2hlci5fX2NhbGxfX5RqVjEBAEtkS4+HlIwYX0VxdWFsVG9QZXJXaW5kb3dNYXRjaGVylGpdMQEAS2BLj4eUjBNlcXVhbF90b19wZXJfd2luZG93lGpWMQEAS5JLnYeUjAhlcXVhbF90b5RqVjEBAEujS8yHlIwLbWF0Y2hlc19hbGyUalYxAQBLz0vdh5SMCGlzX2VtcHR5lGpWMQEAS+BL5oeUjAxpc19ub3RfZW1wdHmUalYxAQBL6Uv0h5SMKGFzc2VydF90aGF0LlJlaWZ5VGltZXN0YW1wV2luZG93LnByb2Nlc3OUalYxAQBNGAFNHQGHlIwgYXNzZXJ0X3RoYXQuUmVpZnlUaW1lc3RhbXBXaW5kb3eUal0xAQBNFwFNHQGHlIwdYXNzZXJ0X3RoYXQuQWRkV2luZG93LnByb2Nlc3OUalYxAQBNIAFNIQGHlIwVYXNzZXJ0X3RoYXQuQWRkV2luZG93lGpdMQEATR8BTSEBh5SMHWFzc2VydF90aGF0LkFzc2VydFRoYXQuZXhwYW5klGpWMQEATSQBTTgBh5SMJGFzc2VydF90aGF0LkFzc2VydFRoYXQuZGVmYXVsdF9sYWJlbJRqVjEBAE06AU07AYeUjBZhc3NlcnRfdGhhdC5Bc3NlcnRUaGF0lGpdMQEATSMBTTsBh5SMC2Fzc2VydF90aGF0lGpWMQEAS/dNPQGHlIwLb3Blbl9zaGFyZHOUalYxAQBNQAFNVgGHlIwHdGltZW91dJRqVjEBAE1ZAU18AYeUdX2UKIwTZXF1YWxfdG9fcGVyX3dpbmRvd5RquwMAAIwIZXF1YWxfdG+UarsDAACMC21hdGNoZXNfYWxslGq7AwAAjAhpc19lbXB0eZRquwMAAIwMaXNfbm90X2VtcHR5lGq7AwAAjAthc3NlcnRfdGhhdJRquwMAAIwLb3Blbl9zaGFyZHOUarsDAAB1jBhhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWyUdJSMJ2FwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFya5QoWIUeAAAjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIG1pY3JvYmVuY2htYXJrIGZvciBtZWFzdXJpbmcgcGVyZm9ybWFuY2Ugb2YgY29kZXJzLgoKVGhpcyBydW5zIGEgc2VxdWVuY2Ugb2YgZW5jb2RlLWRlY29kZSBvcGVyYXRpb25zIG9uIHJhbmRvbSBpbnB1dHMKdG8gY29sbGVjdCBwZXJmb3JtYW5jZSBvZiB2YXJpb3VzIGNvZGVycy4KClRvIGV2YWx1YXRlIGNvZGVycyBwZXJmb3JtYW5jZSB3ZSBhcHByb3hpbWF0ZSB0aGUgYmVoYXZpb3IKaG93IHRoZSBjb2RlcnMgYXJlIHVzZWQgaW4gUENvbGxlY3Rpb25zOiB3ZSBlbmNvZGUgYW5kIGRlY29kZQphIGxpc3Qgb2YgZWxlbWVudHMuIEFuIGVsZW1lbnQgY2FuIGJlIGEgc3RyaW5nLCBhIGxpc3Qgb2YgaW50ZWdlcnMsCmEgd2luZG93ZWQgdmFsdWUsIG9yIGFueSBvdGhlciBvYmplY3Qgd2Ugd2FudCBhIGNvZGVyIHRvIHByb2Nlc3MuCgpSdW4gYXM6CiAgcHl0aG9uIC1tIGFwYWNoZV9iZWFtLnRvb2xzLmNvZGVyc19taWNyb2JlbmNobWFyawoKIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgYXJncGFyc2UKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgcmUKaW1wb3J0IHN0cmluZwppbXBvcnQgc3lzCgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBwcm90bzJfY29kZXJfdGVzdF9tZXNzYWdlc19wYjIgYXMgdGVzdF9tZXNzYWdlCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS50b29scyBpbXBvcnQgdXRpbHMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB3aW5kb3cKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgd2luZG93ZWRfdmFsdWUKCgpkZWYgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoY29kZXIsIGdlbmVyYXRlX2ZuKToKICAiIiJDcmVhdGVzIGEgYmVuY2htYXJrIHRoYXQgZW5jb2RlcyBhbmQgZGVjb2RlcyBhIGxpc3Qgb2YgZWxlbWVudHMuCgogIEFyZ3M6CiAgICBjb2RlcjogY29kZXIgdG8gdXNlIHRvIGVuY29kZSBhbiBlbGVtZW50LgogICAgZ2VuZXJhdGVfZm46IGEgY2FsbGFibGUgdGhhdCBnZW5lcmF0ZXMgYW4gZWxlbWVudC4KICAiIiIKICBjbGFzcyBDb2RlckJlbmNobWFyayhvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bV9lbGVtZW50c19wZXJfYmVuY2htYXJrKToKICAgICAgc2VsZi5fY29kZXIgPSBjb2RlcnMuSXRlcmFibGVDb2Rlcihjb2RlcikKICAgICAgc2VsZi5fbGlzdCA9IFtnZW5lcmF0ZV9mbigpIGZvciBfIGluIHJhbmdlKG51bV9lbGVtZW50c19wZXJfYmVuY2htYXJrKV0KCiAgICBkZWYgX19jYWxsX18oc2VsZik6CiAgICAgICMgQ2FsbGluZyBjb2RlciBvcGVyYXRpb25zIG9uIGEgc2luZ2xlIGVsZW1lbnQgYXQgYSB0aW1lIG1heSBpbmN1cgogICAgICAjIHVucmVsZXZhbnQgb3ZlcmhlYWQuIFRvIGNvbXBlbnNhdGUsIHdlIHVzZSBhIGxpc3QgZWxlbWVudHMuCiAgICAgIF8gPSBzZWxmLl9jb2Rlci5kZWNvZGUoc2VsZi5fY29kZXIuZW5jb2RlKHNlbGYuX2xpc3QpKQoKICBDb2RlckJlbmNobWFyay5fX25hbWVfXyA9ICIlcywgJXMiICUgKGdlbmVyYXRlX2ZuLl9fbmFtZV9fLCBzdHIoY29kZXIpKQoKICByZXR1cm4gQ29kZXJCZW5jaG1hcmsKCgpkZWYgc21hbGxfaW50KCk6CiAgcmV0dXJuIHJhbmRvbS5yYW5kaW50KDAsIDEyNykKCgpkZWYgbGFyZ2VfaW50KCk6CiAgcmV0dXJuIHJhbmRvbS5yYW5kaW50KHN5cy5tYXhzaXplID4+IDIsIHN5cy5tYXhzaXplKQoKCmRlZiByYW5kb21fc3RyaW5nKGxlbmd0aCk6CiAgcmV0dXJuIHVuaWNvZGUoCiAgICAgICcnLmpvaW4oCiAgICAgICAgICByYW5kb20uY2hvaWNlKHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cykKICAgICAgICAgIGZvciBfIGluIHJhbmdlKGxlbmd0aCkpKQoKCmRlZiBzbWFsbF9zdHJpbmcoKToKICByZXR1cm4gcmFuZG9tX3N0cmluZyg0KQoKCmRlZiBsYXJnZV9zdHJpbmcoKToKICByZXR1cm4gcmFuZG9tX3N0cmluZygxMDApCgoKZGVmIGxpc3RfaW50KHNpemUpOgogIHJldHVybiBbc21hbGxfaW50KCkgZm9yIF8gaW4gcmFuZ2Uoc2l6ZSldCgoKZGVmIGRpY3RfaW50X2ludChzaXplKToKICByZXR1cm4ge2k6IGkgZm9yIGkgaW4gbGlzdF9pbnQoc2l6ZSl9CgoKZGVmIHNtYWxsX2xpc3QoKToKICByZXR1cm4gbGlzdF9pbnQoMTApCgoKZGVmIGxhcmdlX2xpc3QoKToKICAjIEJvb2wgaXMgdGhlIGxhc3QgaXRlbSBpbiBGYXN0UHJpbWl0aXZlQ29kZXJzIGJlZm9yZSBwaWNrbGUuCiAgcmV0dXJuIFtib29sKGspIGZvciBrIGluIGxpc3RfaW50KDEwMDApXQoKCmRlZiBzbWFsbF90dXBsZSgpOgogICMgQmVuY2htYXJrIGEgY29tbW9uIGNhc2Ugb2YgMi1lbGVtZW50IHR1cGxlcy4KICByZXR1cm4gdHVwbGUobGlzdF9pbnQoMikpCgoKZGVmIGxhcmdlX3R1cGxlKCk6CiAgcmV0dXJuIHR1cGxlKGxhcmdlX2xpc3QoKSkKCgpkZWYgc21hbGxfZGljdCgpOgogIHJldHVybiB7aTogaSBmb3IgaSBpbiBzbWFsbF9saXN0KCl9CgoKZGVmIGxhcmdlX2RpY3QoKToKICByZXR1cm4ge2k6IGkgZm9yIGkgaW4gbGFyZ2VfbGlzdCgpfQoKCmRlZiBsYXJnZV9pdGVyYWJsZSgpOgogIHlpZWxkICdhJyAqIGNvZGVycy5jb2Rlcl9pbXBsLlNlcXVlbmNlQ29kZXJJbXBsLl9ERUZBVUxUX0JVRkZFUl9TSVpFCiAgZm9yIGsgaW4gcmFuZ2UoMTAwMCk6CiAgICB5aWVsZCBrCgoKZGVmIHJhbmRvbV9tZXNzYWdlX3dpdGhfbWFwKHNpemUpOgogIG1lc3NhZ2UgPSB0ZXN0X21lc3NhZ2UuTWVzc2FnZVdpdGhNYXAoKQogIGtleXMgPSBsaXN0X2ludChzaXplKQogIHJhbmRvbS5zaHVmZmxlKGtleXMpCiAgZm9yIGtleSBpbiBrZXlzOgogICAgbWVzc2FnZS5maWVsZDFbc3RyKGtleSldLmZpZWxkMSA9IHNtYWxsX3N0cmluZygpCiAgcmV0dXJuIG1lc3NhZ2UKCgpkZWYgc21hbGxfbWVzc2FnZV93aXRoX21hcCgpOgogIHJldHVybiByYW5kb21fbWVzc2FnZV93aXRoX21hcCg1KQoKCmRlZiBsYXJnZV9tZXNzYWdlX3dpdGhfbWFwKCk6CiAgcmV0dXJuIHJhbmRvbV9tZXNzYWdlX3dpdGhfbWFwKDIwKQoKCmRlZiBnbG9iYWxseV93aW5kb3dlZF92YWx1ZSgpOgogIHJldHVybiB3aW5kb3dlZF92YWx1ZS5XaW5kb3dlZFZhbHVlKAogICAgICB2YWx1ZT1zbWFsbF9pbnQoKSwgdGltZXN0YW1wPTEyMzQ1Njc4LCB3aW5kb3dzPSh3aW5kb3cuR2xvYmFsV2luZG93KCksICkpCgoKZGVmIHJhbmRvbV93aW5kb3dlZF92YWx1ZShudW1fd2luZG93cyk6CiAgcmV0dXJuIHdpbmRvd2VkX3ZhbHVlLldpbmRvd2VkVmFsdWUoCiAgICAgIHZhbHVlPXNtYWxsX2ludCgpLAogICAgICB0aW1lc3RhbXA9MTIzNDU2NzgsCiAgICAgIHdpbmRvd3M9dHVwbGUoCiAgICAgICAgICB3aW5kb3cuSW50ZXJ2YWxXaW5kb3coaSAqIDEwLCBpICogMTAgKyBzbWFsbF9pbnQoKSkKICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV93aW5kb3dzKSkpCgoKZGVmIHd2X3dpdGhfb25lX3dpbmRvdygpOgogIHJldHVybiByYW5kb21fd2luZG93ZWRfdmFsdWUobnVtX3dpbmRvd3M9MSkKCgpkZWYgd3Zfd2l0aF9tdWx0aXBsZV93aW5kb3dzKCk6CiAgcmV0dXJuIHJhbmRvbV93aW5kb3dlZF92YWx1ZShudW1fd2luZG93cz0zMikKCgpkZWYgcnVuX2NvZGVyX2JlbmNobWFya3MoCiAgICBudW1fcnVucywgaW5wdXRfc2l6ZSwgc2VlZCwgdmVyYm9zZSwgZmlsdGVyX3JlZ2V4PScuKicpOgogIHJhbmRvbS5zZWVkKHNlZWQpCgogICMgVE9ETyhCRUFNLTQ0NDEpOiBQaWNrIGNvZGVycyB1c2luZyB0eXBlIGhpbnRzLCBmb3IgZXhhbXBsZToKICAjIHR1cGxlX2NvZGVyID0gdHlwZWNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIodHlwaW5nLlR1cGxlW2ludCwgLi4uXSkKICBiZW5jaG1hcmtzID0gWwogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeShjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLCBzbWFsbF9pbnQpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeShjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLCBsYXJnZV9pbnQpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeShjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLCBzbWFsbF9zdHJpbmcpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeShjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLCBsYXJnZV9zdHJpbmcpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeShjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLCBzbWFsbF9saXN0KSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuSXRlcmFibGVDb2Rlcihjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpKSwgc21hbGxfbGlzdCksCiAgICAgIGNvZGVyX2JlbmNobWFya19mYWN0b3J5KGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCksIGxhcmdlX2xpc3QpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5JdGVyYWJsZUNvZGVyKGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCkpLCBsYXJnZV9saXN0KSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuSXRlcmFibGVDb2Rlcihjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpKSwgbGFyZ2VfaXRlcmFibGUpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeShjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpLCBzbWFsbF90dXBsZSksCiAgICAgIGNvZGVyX2JlbmNobWFya19mYWN0b3J5KGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCksIGxhcmdlX3R1cGxlKSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwgc21hbGxfZGljdCksCiAgICAgIGNvZGVyX2JlbmNobWFya19mYWN0b3J5KGNvZGVycy5GYXN0UHJpbWl0aXZlc0NvZGVyKCksIGxhcmdlX2RpY3QpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5Qcm90b0NvZGVyKHRlc3RfbWVzc2FnZS5NZXNzYWdlV2l0aE1hcCksCiAgICAgICAgICBzbWFsbF9tZXNzYWdlX3dpdGhfbWFwKSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuUHJvdG9Db2Rlcih0ZXN0X21lc3NhZ2UuTWVzc2FnZVdpdGhNYXApLAogICAgICAgICAgbGFyZ2VfbWVzc2FnZV93aXRoX21hcCksCiAgICAgIGNvZGVyX2JlbmNobWFya19mYWN0b3J5KAogICAgICAgICAgY29kZXJzLkRldGVybWluaXN0aWNQcm90b0NvZGVyKHRlc3RfbWVzc2FnZS5NZXNzYWdlV2l0aE1hcCksCiAgICAgICAgICBzbWFsbF9tZXNzYWdlX3dpdGhfbWFwKSwKICAgICAgY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkoCiAgICAgICAgICBjb2RlcnMuRGV0ZXJtaW5pc3RpY1Byb3RvQ29kZXIodGVzdF9tZXNzYWdlLk1lc3NhZ2VXaXRoTWFwKSwKICAgICAgICAgIGxhcmdlX21lc3NhZ2Vfd2l0aF9tYXApLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIoY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSksCiAgICAgICAgICB3dl93aXRoX29uZV93aW5kb3cpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIoCiAgICAgICAgICAgICAgY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwgY29kZXJzLkludGVydmFsV2luZG93Q29kZXIoKSksCiAgICAgICAgICB3dl93aXRoX211bHRpcGxlX3dpbmRvd3MpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5XaW5kb3dlZFZhbHVlQ29kZXIoCiAgICAgICAgICAgICAgY29kZXJzLkZhc3RQcmltaXRpdmVzQ29kZXIoKSwgY29kZXJzLkdsb2JhbFdpbmRvd0NvZGVyKCkpLAogICAgICAgICAgZ2xvYmFsbHlfd2luZG93ZWRfdmFsdWUpLAogICAgICBjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeSgKICAgICAgICAgIGNvZGVycy5MZW5ndGhQcmVmaXhDb2Rlcihjb2RlcnMuRmFzdFByaW1pdGl2ZXNDb2RlcigpKSwgc21hbGxfaW50KQogIF0KCiAgc3VpdGUgPSBbCiAgICAgIHV0aWxzLkJlbmNobWFya0NvbmZpZyhiLCBpbnB1dF9zaXplLCBudW1fcnVucykgZm9yIGIgaW4gYmVuY2htYXJrcwogICAgICBpZiByZS5zZWFyY2goZmlsdGVyX3JlZ2V4LCBiLl9fbmFtZV9fLCBmbGFncz1yZS5JKQogIF0KICB1dGlscy5ydW5fYmVuY2htYXJrcyhzdWl0ZSwgdmVyYm9zZT12ZXJib3NlKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgbG9nZ2luZy5iYXNpY0NvbmZpZygpCgogIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZpbHRlcicsIGRlZmF1bHQ9Jy4qJykKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW51bV9ydW5zJywgZGVmYXVsdD0yMCwgdHlwZT1pbnQpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1udW1fZWxlbWVudHNfcGVyX2JlbmNobWFyaycsIGRlZmF1bHQ9MTAwMCwgdHlwZT1pbnQpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zZWVkJywgZGVmYXVsdD00MiwgdHlwZT1pbnQpCiAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKCiAgdXRpbHMuY2hlY2tfY29tcGlsZWQoImFwYWNoZV9iZWFtLmNvZGVycy5jb2Rlcl9pbXBsIikKCiAgbnVtX3J1bnMgPSAyMAogIG51bV9lbGVtZW50c19wZXJfYmVuY2htYXJrID0gMTAwMAogIHNlZWQgPSA0MiAgIyBGaXggdGhlIHNlZWQgZm9yIGJldHRlciBjb25zaXN0ZW5jeQoKICBydW5fY29kZXJfYmVuY2htYXJrcygKICAgICAgb3B0aW9ucy5udW1fcnVucywKICAgICAgb3B0aW9ucy5udW1fZWxlbWVudHNfcGVyX2JlbmNobWFyaywKICAgICAgb3B0aW9ucy5zZWVkLAogICAgICB2ZXJib3NlPVRydWUsCiAgICAgIGZpbHRlcl9yZWdleD1vcHRpb25zLmZpbHRlcikKlH2UKIwvY29kZXJfYmVuY2htYXJrX2ZhY3RvcnkuQ29kZXJCZW5jaG1hcmsuX19pbml0X1+UalYxAQBLPUs/h5SML2NvZGVyX2JlbmNobWFya19mYWN0b3J5LkNvZGVyQmVuY2htYXJrLl9fY2FsbF9flGpWMQEAS0FLRIeUjCZjb2Rlcl9iZW5jaG1hcmtfZmFjdG9yeS5Db2RlckJlbmNobWFya5RqXTEBAEs8S0SHlIwXY29kZXJfYmVuY2htYXJrX2ZhY3RvcnmUalYxAQBLNUtIh5SMCXNtYWxsX2ludJRqVjEBAEtLS0yHlIwJbGFyZ2VfaW50lGpWMQEAS09LUIeUjA1yYW5kb21fc3RyaW5nlGpWMQEAS1NLV4eUjAxzbWFsbF9zdHJpbmeUalYxAQBLWktbh5SMDGxhcmdlX3N0cmluZ5RqVjEBAEteS1+HlIwIbGlzdF9pbnSUalYxAQBLYktjh5SMDGRpY3RfaW50X2ludJRqVjEBAEtmS2eHlIwKc21hbGxfbGlzdJRqVjEBAEtqS2uHlIwKbGFyZ2VfbGlzdJRqVjEBAEtuS3CHlIwLc21hbGxfdHVwbGWUalYxAQBLc0t1h5SMC2xhcmdlX3R1cGxllGpWMQEAS3hLeYeUjApzbWFsbF9kaWN0lGpWMQEAS3xLfYeUjApsYXJnZV9kaWN0lGpWMQEAS4BLgYeUjA5sYXJnZV9pdGVyYWJsZZRqVjEBAEuES4eHlIwXcmFuZG9tX21lc3NhZ2Vfd2l0aF9tYXCUalYxAQBLikuQh5SMFnNtYWxsX21lc3NhZ2Vfd2l0aF9tYXCUalYxAQBLk0uUh5SMFmxhcmdlX21lc3NhZ2Vfd2l0aF9tYXCUalYxAQBLl0uYh5SMF2dsb2JhbGx5X3dpbmRvd2VkX3ZhbHVllGpWMQEAS5tLnYeUjBVyYW5kb21fd2luZG93ZWRfdmFsdWWUalYxAQBLoEumh5SMEnd2X3dpdGhfb25lX3dpbmRvd5RqVjEBAEupS6qHlIwYd3Zfd2l0aF9tdWx0aXBsZV93aW5kb3dzlGpWMQEAS61LroeUjBRydW5fY29kZXJfYmVuY2htYXJrc5RqVjEBAEuxS+eHlHV9lCiMF2NvZGVyX2JlbmNobWFya19mYWN0b3J5lGqxAwAAjAlzbWFsbF9pbnSUarEDAACMCWxhcmdlX2ludJRqsQMAAIwNcmFuZG9tX3N0cmluZ5RqsQMAAIwMc21hbGxfc3RyaW5nlGqxAwAAjAxsYXJnZV9zdHJpbmeUarEDAACMCGxpc3RfaW50lGqxAwAAjAxkaWN0X2ludF9pbnSUarEDAACMCnNtYWxsX2xpc3SUarEDAACMCmxhcmdlX2xpc3SUarEDAACMC3NtYWxsX3R1cGxllGqxAwAAjAtsYXJnZV90dXBsZZRqsQMAAIwKc21hbGxfZGljdJRqsQMAAIwKbGFyZ2VfZGljdJRqsQMAAIwObGFyZ2VfaXRlcmFibGWUarEDAACMF3JhbmRvbV9tZXNzYWdlX3dpdGhfbWFwlGqxAwAAjBZzbWFsbF9tZXNzYWdlX3dpdGhfbWFwlGqxAwAAjBZsYXJnZV9tZXNzYWdlX3dpdGhfbWFwlGqxAwAAjBdnbG9iYWxseV93aW5kb3dlZF92YWx1ZZRqsQMAAIwVcmFuZG9tX3dpbmRvd2VkX3ZhbHVllGqxAwAAjBJ3dl93aXRoX29uZV93aW5kb3eUarEDAACMGHd2X3dpdGhfbXVsdGlwbGVfd2luZG93c5RqsQMAAIwUcnVuX2NvZGVyX2JlbmNobWFya3OUarEDAAB1jCdhcGFjaGVfYmVhbS50b29scy5jb2RlcnNfbWljcm9iZW5jaG1hcmuUdJSMNWFwYWNoZV9iZWFtLnRvb2xzLmRpc3RyaWJ1dGlvbl9jb3VudGVyX21pY3JvYmVuY2htYXJrlChY4wkAACMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkEgbWljcm9iZW5jaG1hcmsgZm9yIG1lYXN1cmluZyBEaXN0cmlidXRpb25BY2N1bXVsYXRvciBwZXJmb3JtYW5jZQoKVGhpcyBydW5zIGEgc2VxdWVuY2Ugb2YgZGlzdHJpYnV0aW9uLnVwZGF0ZSBmb3IgcmFuZG9tIGlucHV0IHZhbHVlIHRvIGNhbGN1bGF0ZQphdmVyYWdlIHVwZGF0ZSB0aW1lIHBlciBpbnB1dC4KQSB0eXBpY2FsIHVwZGF0ZSBvcGVyYXRpb24gc2hvdWxkIHJ1biBpbnRvIDAuNiBtaWNyb3NlY29uZHMKClJ1biBhcwogIHB5dGhvbiAtbSBhcGFjaGVfYmVhbS50b29scy5kaXN0cmlidXRpb25fY291bnRlcl9taWNyb2JlbmNobWFyawoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgc3lzCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCgpmcm9tIGFwYWNoZV9iZWFtLnRvb2xzIGltcG9ydCB1dGlscwoKCmRlZiBnZW5lcmF0ZV9pbnB1dF92YWx1ZXMobnVtX2lucHV0LCBsb3dlcl9ib3VuZCwgdXBwZXJfYm91bmQpOgogIHZhbHVlcyA9IFtdCiAgIyBweWxpbnQ6IGRpc2FibGU9dW51c2VkLXZhcmlhYmxlCiAgZm9yIGkgaW4gcmFuZ2UobnVtX2lucHV0KToKICAgIHZhbHVlcy5hcHBlbmQocmFuZG9tLnJhbmRpbnQobG93ZXJfYm91bmQsIHVwcGVyX2JvdW5kKSkKICByZXR1cm4gdmFsdWVzCgoKZGVmIHJ1bl9iZW5jaG1hcmsobnVtX3J1bnM9MTAwLCBudW1faW5wdXQ9MTAwMDAsIHNlZWQ9dGltZS50aW1lKCkpOgogIHRvdGFsX3RpbWUgPSAwCiAgcmFuZG9tLnNlZWQoc2VlZCkKICBsb3dlcl9ib3VuZCA9IDAKICB1cHBlcl9ib3VuZCA9IHN5cy5tYXhzaXplCiAgaW5wdXRzID0gZ2VuZXJhdGVfaW5wdXRfdmFsdWVzKG51bV9pbnB1dCwgbG93ZXJfYm91bmQsIHVwcGVyX2JvdW5kKQogIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgRGF0YWZsb3dEaXN0cmlidXRpb25Db3VudGVyCiAgcHJpbnQoIk51bWJlciBvZiBydW5zOiIsIG51bV9ydW5zKQogIHByaW50KCJJbnB1dCBzaXplOiIsIG51bV9pbnB1dCkKICBwcmludCgiSW5wdXQgc2VxdWVuY2UgZnJvbSAlZCB0byAlZCIgJSAobG93ZXJfYm91bmQsIHVwcGVyX2JvdW5kKSkKICBwcmludCgiUmFuZG9tIHNlZWQ6Iiwgc2VlZCkKICBmb3IgaSBpbiByYW5nZShudW1fcnVucyk6CiAgICBjb3VudGVyID0gRGF0YWZsb3dEaXN0cmlidXRpb25Db3VudGVyKCkKICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgIGNvdW50ZXIuYWRkX2lucHV0c19mb3JfdGVzdChpbnB1dHMpCiAgICB0aW1lX2Nvc3QgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0CiAgICBwcmludCgiUnVuICVkOiBUb3RhbCB0aW1lIGNvc3QgJWcgc2VjIiAlIChpICsgMSwgdGltZV9jb3N0KSkKICAgIHRvdGFsX3RpbWUgKz0gdGltZV9jb3N0IC8gbnVtX2lucHV0CiAgcHJpbnQoIlBlciBlbGVtZW50IHVwZGF0ZSB0aW1lIGNvc3Q6IiwgdG90YWxfdGltZSAvIG51bV9ydW5zKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbG9nZ2luZy5iYXNpY0NvbmZpZygpCiAgdXRpbHMuY2hlY2tfY29tcGlsZWQoCiAgICAgICdhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmN5X2RhdGFmbG93X2Rpc3RyaWJ1dGlvbl9jb3VudGVyJykKICBydW5fYmVuY2htYXJrKCkKlH2UKIwVZ2VuZXJhdGVfaW5wdXRfdmFsdWVzlGpWMQEASypLL4eUjA1ydW5fYmVuY2htYXJrlGpWMQEASzJLRIeUdX2UKIwVZ2VuZXJhdGVfaW5wdXRfdmFsdWVzlGrwAwAAjA1ydW5fYmVuY2htYXJrlGrwAwAAdYw1YXBhY2hlX2JlYW0udG9vbHMuZGlzdHJpYnV0aW9uX2NvdW50ZXJfbWljcm9iZW5jaG1hcmuUdJSMLmFwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmuUKFgmFAAAIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBtaWNyb2JlbmNobWFyayBmb3IgbWVhc3VyaW5nIGNoYW5nZXMgaW4gdGhlIGNyaXRpY2FsIHBhdGggb2YgRm5BcGlSdW5uZXIuClRoaXMgbWljcm9iZW5jaG1hcmsgYXR0ZW1wdHMgdG8gbWVhc3VyZSB0aGUgb3ZlcmhlYWQgb2YgdGhlIG1haW4gZGF0YSBwYXRocwpmb3IgdGhlIEZuQXBpUnVubmVyLiBTcGVjaWZpY2FsbHkgc3RhdGUsIHRpbWVycywgYW5kIHNodWZmbGluZyBvZiBkYXRhLgoKVGhpcyBydW5zIGEgc2VyaWVzIG9mIE4gcGFyYWxsZWwgcGlwZWxpbmVzIHdpdGggTSBwYXJhbGxlbCBzdGFnZXMgZWFjaC4gRWFjaApzdGFnZSBkb2VzIHRoZSBmb2xsb3dpbmc6CgoxKSBQdXQgYWxsIHRoZSBQQ29sbGVjdGlvbiBlbGVtZW50cyBpbiBzdGF0ZQoyKSBTZXQgYSB0aW1lciBmb3IgdGhlIGZ1dHVyZQozKSBXaGVuIHRoZSB0aW1lciBmaXJlcywgY2hhbmdlIHRoZSBrZXkgYW5kIG91dHB1dCBhbGwgdGhlIGVsZW1lbnRzIGRvd25zdHJlYW0KClRoaXMgZXhlY3V0ZXMgdGhlIHNhbWUgY29kZXBhdGhzIHRoYXQgYXJlIHJ1biBvbiB0aGUgRm4gQVBJIChhbmQgRGF0YWZsb3cpCndvcmtlcnMsIGJ1dCBpcyBnZW5lcmFsbHkgZWFzaWVyIHRvIHJ1biAobG9jYWxseSkgYW5kIG1vcmUgc3RhYmxlLi4KClJ1biBhcwoKICAgcHl0aG9uIC1tIGFwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmsKClRoZSBtYWluIG1ldHJpYyB0byB3b3JrIHdpdGggZm9yIHRoaXMgYmVuY2htYXJrIGlzIEZpeGVkIENvc3QuIFRoaXMgcmVwcmVzZW50cwp0aGUgZml4ZWQgY29zdCBvZiBvdmVoZWFkIGZvciB0aGUgZGF0YSBwYXRoIG9mIHRoZSBGbkFwaVJ1bm5lci4KCkluaXRpYWwgcmVzdWx0cyB3ZXJlOgoKcnVuIDEgb2YgMTAsIHBlciBlbGVtZW50IHRpbWUgY29zdDogMy42Nzc4IHNlYwpydW4gMiBvZiAxMCwgcGVyIGVsZW1lbnQgdGltZSBjb3N0OiAwLjA1MzQ5OCBzZWMKcnVuIDMgb2YgMTAsIHBlciBlbGVtZW50IHRpbWUgY29zdDogMC4wMjk5NDM0IHNlYwpydW4gNCBvZiAxMCwgcGVyIGVsZW1lbnQgdGltZSBjb3N0OiAwLjAyMTExNTQgc2VjCnJ1biA1IG9mIDEwLCBwZXIgZWxlbWVudCB0aW1lIGNvc3Q6IDAuMDE3MDAzMSBzZWMKcnVuIDYgb2YgMTAsIHBlciBlbGVtZW50IHRpbWUgY29zdDogMC4wMTUwODA5IHNlYwpydW4gNyBvZiAxMCwgcGVyIGVsZW1lbnQgdGltZSBjb3N0OiAwLjAxMzIxOCBzZWMKcnVuIDggb2YgMTAsIHBlciBlbGVtZW50IHRpbWUgY29zdDogMC4wMTE5Njg1IHNlYwpydW4gOSBvZiAxMCwgcGVyIGVsZW1lbnQgdGltZSBjb3N0OiAwLjAxMDczODIgc2VjCnJ1biAxMCBvZiAxMCwgcGVyIGVsZW1lbnQgdGltZSBjb3N0OiAwLjAxMDMyMDggc2VjCgoKRml4ZWQgY29zdCAgIDQuNTM3MTY0OTM5MDg1NjQyClBlci1lbGVtZW50ICAwLjAwNTQ3NDkyMzMyMTY5NTAzOQpSXjIgICAgICAgICAgMC45NTE4OQoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBsb2dnaW5nCmltcG9ydCByYW5kb20KZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmltcG9ydCBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGFzIHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgVmFySW50Q29kZXIKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnBvcnRhYmlsaXR5LmZuX2FwaV9ydW5uZXIgaW1wb3J0IEZuQXBpUnVubmVyCmZyb20gYXBhY2hlX2JlYW0udG9vbHMgaW1wb3J0IHV0aWxzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbCBpbXBvcnQgVGltZURvbWFpbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlIGltcG9ydCBTZXRTdGF0ZVNwZWMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSBpbXBvcnQgVGltZXJTcGVjCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUgaW1wb3J0IG9uX3RpbWVyCgpOVU1fUEFSQUxMRUxfU1RBR0VTID0gNwoKTlVNX1NFUklBTF9TVEFHRVMgPSA1CgoKY2xhc3MgQmFnSW5TdGF0ZU91dHB1dEFmdGVyVGltZXIoYmVhbS5Eb0ZuKToKCiAgU0VUX1NUQVRFID0gU2V0U3RhdGVTcGVjKCdidWZmZXInLCBWYXJJbnRDb2RlcigpKQogIEVNSVRfVElNRVIgPSBUaW1lclNwZWMoJ2VtaXRfdGltZXInLCBUaW1lRG9tYWluLldBVEVSTUFSSykKCiAgZGVmIHByb2Nlc3MoCiAgICAgIHNlbGYsCiAgICAgIGVsZW1lbnQsCiAgICAgIHNldF9zdGF0ZT1iZWFtLkRvRm4uU3RhdGVQYXJhbShTRVRfU1RBVEUpLAogICAgICBlbWl0X3RpbWVyPWJlYW0uRG9Gbi5UaW1lclBhcmFtKEVNSVRfVElNRVIpKToKICAgIF8sIHZhbHVlcyA9IGVsZW1lbnQKICAgIGZvciB2IGluIHZhbHVlczoKICAgICAgc2V0X3N0YXRlLmFkZCh2KQogICAgZW1pdF90aW1lci5zZXQoMSkKCiAgQG9uX3RpbWVyKEVNSVRfVElNRVIpCiAgZGVmIGVtaXRfdmFsdWVzKHNlbGYsIHNldF9zdGF0ZT1iZWFtLkRvRm4uU3RhdGVQYXJhbShTRVRfU1RBVEUpKToKICAgIHZhbHVlcyA9IHNldF9zdGF0ZS5yZWFkKCkKICAgIHJldHVybiBbKHJhbmRvbS5yYW5kaW50KDAsIDEwMDApLCB2KSBmb3IgdiBpbiB2YWx1ZXNdCgoKZGVmIF9idWlsZF9zZXJpYWxfc3RhZ2VzKAogICAgcGlwZWxpbmUsIG51bV9zZXJpYWxfc3RhZ2VzLCBudW1fZWxlbWVudHMsIHN0YWdlX2NvdW50KToKICBwYyA9ICgKICAgICAgcGlwZWxpbmUgfCAoJ3N0YXJ0X3N0YWdlJXMnICUgc3RhZ2VfY291bnQpID4+IGJlYW0uQ3JlYXRlKAogICAgICAgICAgWyhyYW5kb20ucmFuZGludCgwLCAxMDAwKSwgaSkgZm9yIGkgaW4gcmFuZ2UobnVtX2VsZW1lbnRzKV0pCiAgICAgIHwgKCdnYmtfc3RhcnRfc3RhZ2UlcycgJSBzdGFnZV9jb3VudCkgPj4gYmVhbS5Hcm91cEJ5S2V5KCkpCgogIGZvciBpIGluIHJhbmdlKG51bV9zZXJpYWxfc3RhZ2VzKToKICAgIHBjID0gKAogICAgICAgIHBjCiAgICAgICAgfCAoJ3N0YWdlJXNfbWFwJXMnICUgKHN0YWdlX2NvdW50LCBpKSkgPj4gYmVhbS5QYXJEbygKICAgICAgICAgICAgQmFnSW5TdGF0ZU91dHB1dEFmdGVyVGltZXIoKSkud2l0aF9vdXRwdXRfdHlwZXMoCiAgICAgICAgICAgICAgICB0eXBlaGludHMuS1ZbaW50LCBpbnRdKQogICAgICAgIHwgKCdzdGFnZSVzX2diayVzJyAlIChzdGFnZV9jb3VudCwgaSkpID4+IGJlYW0uR3JvdXBCeUtleSgpKQoKICByZXR1cm4gcGMKCgpkZWYgcnVuX3NpbmdsZV9waXBlbGluZShzaXplKToKICBkZWYgX3BpcGVsaW5lX3J1bm5lcigpOgogICAgd2l0aCBiZWFtLlBpcGVsaW5lKHJ1bm5lcj1GbkFwaVJ1bm5lcigpKSBhcyBwOgogICAgICBmb3IgaSBpbiByYW5nZShOVU1fUEFSQUxMRUxfU1RBR0VTKToKICAgICAgICBfYnVpbGRfc2VyaWFsX3N0YWdlcyhwLCBOVU1fU0VSSUFMX1NUQUdFUywgc2l6ZSwgaSkKCiAgcmV0dXJuIF9waXBlbGluZV9ydW5uZXIKCgpkZWYgcnVuX2JlbmNobWFyayhzdGFydGluZ19wb2ludCwgbnVtX3J1bnMsIG51bV9lbGVtZW50c19zdGVwLCB2ZXJib3NlKToKICBzdWl0ZSA9IFsKICAgICAgdXRpbHMuTGluZWFyUmVncmVzc2lvbkJlbmNobWFya0NvbmZpZygKICAgICAgICAgIHJ1bl9zaW5nbGVfcGlwZWxpbmUsIHN0YXJ0aW5nX3BvaW50LCBudW1fZWxlbWVudHNfc3RlcCwgbnVtX3J1bnMpCiAgXQogIHV0aWxzLnJ1bl9iZW5jaG1hcmtzKHN1aXRlLCB2ZXJib3NlPXZlcmJvc2UpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkKICB1dGlscy5jaGVja19jb21waWxlZCgnYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24nKQoKICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1udW1fcnVucycsIGRlZmF1bHQ9MTAsIHR5cGU9aW50KQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3RhcnRpbmdfcG9pbnQnLCBkZWZhdWx0PTEsIHR5cGU9aW50KQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW5jcmVtZW50JywgZGVmYXVsdD0xMDAsIHR5cGU9aW50KQogIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyYm9zZScsIGRlZmF1bHQ9VHJ1ZSwgdHlwZT1ib29sKQogIG9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncygpCgogIHJ1bl9iZW5jaG1hcmsoCiAgICAgIG9wdGlvbnMuc3RhcnRpbmdfcG9pbnQsCiAgICAgIG9wdGlvbnMubnVtX3J1bnMsCiAgICAgIG9wdGlvbnMuaW5jcmVtZW50LAogICAgICBvcHRpb25zLnZlcmJvc2UpCpSV++8AAAAAAAB9lCiMIkJhZ0luU3RhdGVPdXRwdXRBZnRlclRpbWVyLnByb2Nlc3OUalYxAQBLWEtgh5SMJkJhZ0luU3RhdGVPdXRwdXRBZnRlclRpbWVyLmVtaXRfdmFsdWVzlGpWMQEAS2JLZYeUjBpCYWdJblN0YXRlT3V0cHV0QWZ0ZXJUaW1lcpRqXTEBAEtTS2WHlIwUX2J1aWxkX3NlcmlhbF9zdGFnZXOUalYxAQBLaEt3h5SME3J1bl9zaW5nbGVfcGlwZWxpbmWUalYxAQBLekuAh5SMDXJ1bl9iZW5jaG1hcmuUalYxAQBLg0uIh5R1fZQojBpCYWdJblN0YXRlT3V0cHV0QWZ0ZXJUaW1lcpRqewMAAIwiQmFnSW5TdGF0ZU91dHB1dEFmdGVyVGltZXIucHJvY2Vzc5RqewMAAIwmQmFnSW5TdGF0ZU91dHB1dEFmdGVyVGltZXIuZW1pdF92YWx1ZXOUansDAACME3J1bl9zaW5nbGVfcGlwZWxpbmWUansDAACMDXJ1bl9iZW5jaG1hcmuUansDAAB1jC5hcGFjaGVfYmVhbS50b29scy5mbl9hcGlfcnVubmVyX21pY3JvYmVuY2htYXJrlHSUjCBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZZQoWI0qAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlVzZXItZmFjaW5nIGludGVyZmFjZXMgZm9yIHRoZSBCZWFtIFN0YXRlIGFuZCBUaW1lciBBUElzLgoKRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgdHlwZXMKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYWJsZQpmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKZnJvbSB0eXBpbmcgaW1wb3J0IFNldApmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGVWYXIKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBDb2Rlcgpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbCBpbXBvcnQgVGltZURvbWFpbgoKaWYgVFlQRV9DSEVDS0lORzoKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dCBpbXBvcnQgUGlwZWxpbmVDb250ZXh0CiAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IENvbWJpbmVGbgoKQ2FsbGFibGVUID0gVHlwZVZhcignQ2FsbGFibGVUJywgYm91bmQ9Q2FsbGFibGUpCgoKY2xhc3MgU3RhdGVTcGVjKG9iamVjdCk6CiAgIiIiU3BlY2lmaWNhdGlvbiBmb3IgYSB1c2VyIERvRm4gc3RhdGUgY2VsbC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY29kZXIpOgogICAgIyB0eXBlOiAoc3RyLCBDb2RlcikgLT4gTm9uZQogICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGlzIG5vdCBhIHN0cmluZyIpCiAgICBpZiBub3QgaXNpbnN0YW5jZShjb2RlciwgQ29kZXIpOgogICAgICByYWlzZSBUeXBlRXJyb3IoImNvZGVyIGlzIG5vdCBvZiB0eXBlIENvZGVyIikKICAgIHNlbGYubmFtZSA9IG5hbWUKICAgIHNlbGYuY29kZXIgPSBjb2RlcgoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYubmFtZSkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgoKY2xhc3MgQmFnU3RhdGVTcGVjKFN0YXRlU3BlYyk6CiAgIiIiU3BlY2lmaWNhdGlvbiBmb3IgYSB1c2VyIERvRm4gYmFnIHN0YXRlIGNlbGwuIiIiCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IGJlYW1fcnVubmVyX2FwaV9wYjIuU3RhdGVTcGVjCiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5TdGF0ZVNwZWMoCiAgICAgICAgYmFnX3NwZWM9YmVhbV9ydW5uZXJfYXBpX3BiMi5CYWdTdGF0ZVNwZWMoCiAgICAgICAgICAgIGVsZW1lbnRfY29kZXJfaWQ9Y29udGV4dC5jb2RlcnMuZ2V0X2lkKHNlbGYuY29kZXIpKSkKCgpjbGFzcyBTZXRTdGF0ZVNwZWMoU3RhdGVTcGVjKToKICAiIiJTcGVjaWZpY2F0aW9uIGZvciBhIHVzZXIgRG9GbiBTZXQgU3RhdGUgY2VsbCIiIgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuU3RhdGVTcGVjKAogICAgICAgIHNldF9zcGVjPWJlYW1fcnVubmVyX2FwaV9wYjIuU2V0U3RhdGVTcGVjKAogICAgICAgICAgICBlbGVtZW50X2NvZGVyX2lkPWNvbnRleHQuY29kZXJzLmdldF9pZChzZWxmLmNvZGVyKSkpCgoKY2xhc3MgQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWMoU3RhdGVTcGVjKToKICAiIiJTcGVjaWZpY2F0aW9uIGZvciBhIHVzZXIgRG9GbiBjb21iaW5pbmcgdmFsdWUgc3RhdGUgY2VsbC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY29kZXI9Tm9uZSwgY29tYmluZV9mbj1Ob25lKToKICAgICMgdHlwZTogKHN0ciwgT3B0aW9uYWxbQ29kZXJdLCBBbnkpIC0+IE5vbmUKCiAgICAiIiJJbml0aWFsaXplIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBDb21iaW5pbmdWYWx1ZSBzdGF0ZS4KCiAgICBDb21iaW5pbmdWYWx1ZVN0YXRlU3BlYyhuYW1lLCBjb21iaW5lX2ZuKSAtPiBDb2Rlci1pbmZlcnJlZCBjb21iaW5pbmcgdmFsdWUKICAgICAgc3RhdGUgc3BlYy4KICAgIENvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjKG5hbWUsIGNvZGVyLCBjb21iaW5lX2ZuKSAtPiBDb21iaW5pbmcgdmFsdWUgc3RhdGUKICAgICAgc3BlYyB3aXRoIGNvZGVyIGFuZCBjb21iaW5lX2ZuIHNwZWNpZmllZC4KCiAgICBBcmdzOgogICAgICBuYW1lIChzdHIpOiBUaGUgbmFtZSBieSB3aGljaCB0aGUgc3RhdGUgaXMgaWRlbnRpZmllZC4KICAgICAgY29kZXIgKENvZGVyKTogQ29kZXIgc3BlY2lmeWluZyBob3cgdG8gZW5jb2RlIHRoZSB2YWx1ZXMgdG8gYmUgY29tYmluZWQuCiAgICAgICAgTWF5IGJlIGluZmVycmVkLgogICAgICBjb21iaW5lX2ZuIChgYENvbWJpbmVGbmBgIG9yIGBgY2FsbGFibGVgYCk6IEZ1bmN0aW9uIHNwZWNpZnlpbmcgaG93IHRvCiAgICAgICAgY29tYmluZSB0aGUgdmFsdWVzIHBhc3NlZCB0byBzdGF0ZS4KICAgICIiIgogICAgIyBBdm9pZCBjaXJjdWxhciBpbXBvcnQuCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgQ29tYmluZUZuCiAgICAjIFdlIHdhbnQgdGhlIGNvZGVyIHRvIGJlIG9wdGlvbmFsLCBidXQgdW5mb3J0dW5hdGVseSBpdCBjb21lcwogICAgIyBiZWZvcmUgdGhlIG5vbi1vcHRpb25hbCBjb21iaW5lX2ZuIHBhcmFtZXRlciwgd2hpY2ggd2UgY2FuJ3QKICAgICMgY2hhbmdlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLgogICAgIwogICAgIyBJbnN0ZWFkLCBhbGxvdyBpdCB0byBiZSBvbWl0dGVkIChieSBlaXRoZXIgcGFzc2luZyB0d28gYXJndW1lbnRzCiAgICAjIG9yIGNvbWJpbmVfZm4gYnkga2V5d29yZC4pCiAgICBpZiBjb21iaW5lX2ZuIGlzIE5vbmU6CiAgICAgIGlmIGNvZGVyIGlzIE5vbmU6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY29tYmluZV9mbiBtdXN0IGJlIHByb3ZpZGVkJykKICAgICAgZWxzZToKICAgICAgICBjb2RlciwgY29tYmluZV9mbiA9IE5vbmUsIGNvZGVyCiAgICBzZWxmLmNvbWJpbmVfZm4gPSBDb21iaW5lRm4ubWF5YmVfZnJvbV9jYWxsYWJsZShjb21iaW5lX2ZuKQogICAgIyBUaGUgY29kZXIgaGVyZSBzaG91bGQgYmUgZm9yIHRoZSBhY2N1bXVsYXRvciB0eXBlIG9mIHRoZSBnaXZlbiBDb21iaW5lRm4uCiAgICBpZiBjb2RlciBpcyBOb25lOgogICAgICBjb2RlciA9IHNlbGYuY29tYmluZV9mbi5nZXRfYWNjdW11bGF0b3JfY29kZXIoKQoKICAgIHN1cGVyKENvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjLCBzZWxmKS5fX2luaXRfXyhuYW1lLCBjb2RlcikKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IGJlYW1fcnVubmVyX2FwaV9wYjIuU3RhdGVTcGVjCiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5TdGF0ZVNwZWMoCiAgICAgICAgY29tYmluaW5nX3NwZWM9YmVhbV9ydW5uZXJfYXBpX3BiMi5Db21iaW5pbmdTdGF0ZVNwZWMoCiAgICAgICAgICAgIGNvbWJpbmVfZm49c2VsZi5jb21iaW5lX2ZuLnRvX3J1bm5lcl9hcGkoY29udGV4dCksCiAgICAgICAgICAgIGFjY3VtdWxhdG9yX2NvZGVyX2lkPWNvbnRleHQuY29kZXJzLmdldF9pZChzZWxmLmNvZGVyKSkpCgoKY2xhc3MgVGltZXJTcGVjKG9iamVjdCk6CiAgIiIiU3BlY2lmaWNhdGlvbiBmb3IgYSB1c2VyIHN0YXRlZnVsIERvRm4gdGltZXIuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHRpbWVfZG9tYWluKToKICAgIHNlbGYubmFtZSA9IG5hbWUKICAgIGlmIHRpbWVfZG9tYWluIG5vdCBpbiAoVGltZURvbWFpbi5XQVRFUk1BUkssIFRpbWVEb21haW4uUkVBTF9USU1FKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5zdXBwb3J0ZWQgVGltZURvbWFpbjogJXIuJyAlICh0aW1lX2RvbWFpbiwgKSkKICAgIHNlbGYudGltZV9kb21haW4gPSB0aW1lX2RvbWFpbgogICAgc2VsZi5fYXR0YWNoZWRfY2FsbGJhY2sgPSBOb25lCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnJXMoJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5uYW1lKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gYmVhbV9ydW5uZXJfYXBpX3BiMi5UaW1lclNwZWMKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRpbWVyU3BlYygKICAgICAgICB0aW1lX2RvbWFpbj1UaW1lRG9tYWluLnRvX3J1bm5lcl9hcGkoc2VsZi50aW1lX2RvbWFpbiksCiAgICAgICAgdGltZXJfY29kZXJfaWQ9Y29udGV4dC5jb2RlcnMuZ2V0X2lkKAogICAgICAgICAgICBjb2RlcnMuX1RpbWVyQ29kZXIoY29kZXJzLlNpbmdsZXRvbkNvZGVyKE5vbmUpKSkpCgoKZGVmIG9uX3RpbWVyKHRpbWVyX3NwZWMpOgogICMgdHlwZTogKFRpbWVyU3BlYykgLT4gQ2FsbGFibGVbW0NhbGxhYmxlVF0sIENhbGxhYmxlVF0KCiAgIiIiRGVjb3JhdG9yIGZvciB0aW1lciBmaXJpbmcgRG9GbiBtZXRob2QuCgogIFRoaXMgZGVjb3JhdG9yIGFsbG93cyBhIHVzZXIgdG8gc3BlY2lmeSBhbiBvbl90aW1lciBwcm9jZXNzaW5nIG1ldGhvZAogIGluIGEgc3RhdGVmdWwgRG9Gbi4gIFNhbXBsZSB1c2FnZTo6CgogICAgY2xhc3MgTXlEb0ZuKERvRm4pOgogICAgICBUSU1FUl9TUEVDID0gVGltZXJTcGVjKCd0aW1lcicsIFRpbWVEb21haW4uV0FURVJNQVJLKQoKICAgICAgQG9uX3RpbWVyKFRJTUVSX1NQRUMpCiAgICAgIGRlZiBteV90aW1lcl9leHBpcnlfY2FsbGJhY2soc2VsZik6CiAgICAgICAgbG9nZ2luZy5pbmZvKCdUaW1lciBleHBpcmVkIScpCiAgIiIiCgogIGlmIG5vdCBpc2luc3RhbmNlKHRpbWVyX3NwZWMsIFRpbWVyU3BlYyk6CiAgICByYWlzZSBWYWx1ZUVycm9yKCdAb25fdGltZXIgZGVjb3JhdG9yIGV4cGVjdGVkIFRpbWVyU3BlYy4nKQoKICBkZWYgX2lubmVyKG1ldGhvZCk6CiAgICBpZiBub3QgY2FsbGFibGUobWV0aG9kKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignQG9uX3RpbWVyIGRlY29yYXRvciBleHBlY3RlZCBjYWxsYWJsZS4nKQogICAgaWYgdGltZXJfc3BlYy5fYXR0YWNoZWRfY2FsbGJhY2s6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnTXVsdGlwbGUgb25fdGltZXIgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgZm9yICVyLicgJSB0aW1lcl9zcGVjKQogICAgdGltZXJfc3BlYy5fYXR0YWNoZWRfY2FsbGJhY2sgPSBtZXRob2QKICAgIHJldHVybiBtZXRob2QKCiAgcmV0dXJuIF9pbm5lcgoKCmRlZiBnZXRfZG9mbl9zcGVjcyhkb2ZuKToKICAjIHR5cGU6ICguLi4pIC0+IFR1cGxlW1NldFtTdGF0ZVNwZWNdLCBTZXRbVGltZXJTcGVjXV0KCiAgIiIiR2V0cyB0aGUgc3RhdGUgYW5kIHRpbWVyIHNwZWNzIGZvciBhIERvRm4sIGlmIGFueS4KCiAgQXJnczoKICAgIGRvZm4gKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuKTogVGhlIERvRm4gaW5zdGFuY2UgdG8gaW50cm9zcGVjdCBmb3IKICAgICAgdGltZXIgYW5kIHN0YXRlIHNwZWNzLgogICIiIgoKICAjIEF2b2lkIGNpcmN1bGFyIGltcG9ydC4KICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuY29tbW9uIGltcG9ydCBNZXRob2RXcmFwcGVyCiAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IF9Eb0ZuUGFyYW0KICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgX1N0YXRlRG9GblBhcmFtCiAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IF9UaW1lckRvRm5QYXJhbQoKICBhbGxfc3RhdGVfc3BlY3MgPSBzZXQoKQogIGFsbF90aW1lcl9zcGVjcyA9IHNldCgpCgogICMgVmFsaWRhdGUgcGFyYW1zIHRvIHByb2Nlc3MoKSwgc3RhcnRfYnVuZGxlKCksIGZpbmlzaF9idW5kbGUoKSBhbmQgdG8KICAjIGFueSBvbl90aW1lciBjYWxsYmFja3MuCiAgZm9yIG1ldGhvZF9uYW1lIGluIGRpcihkb2ZuKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKGdldGF0dHIoZG9mbiwgbWV0aG9kX25hbWUsIE5vbmUpLCB0eXBlcy5NZXRob2RUeXBlKToKICAgICAgY29udGludWUKICAgIG1ldGhvZCA9IE1ldGhvZFdyYXBwZXIoZG9mbiwgbWV0aG9kX25hbWUpCiAgICBwYXJhbV9pZHMgPSBbCiAgICAgICAgZC5wYXJhbV9pZCBmb3IgZCBpbiBtZXRob2QuZGVmYXVsdHMgaWYgaXNpbnN0YW5jZShkLCBfRG9GblBhcmFtKQogICAgXQogICAgaWYgbGVuKHBhcmFtX2lkcykgIT0gbGVuKHNldChwYXJhbV9pZHMpKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdEb0ZuICVyIGhhcyBkdXBsaWNhdGUgJXMgbWV0aG9kIHBhcmFtZXRlcnM6ICVzLicgJQogICAgICAgICAgKGRvZm4sIG1ldGhvZF9uYW1lLCBwYXJhbV9pZHMpKQogICAgZm9yIGQgaW4gbWV0aG9kLmRlZmF1bHRzOgogICAgICBpZiBpc2luc3RhbmNlKGQsIF9TdGF0ZURvRm5QYXJhbSk6CiAgICAgICAgYWxsX3N0YXRlX3NwZWNzLmFkZChkLnN0YXRlX3NwZWMpCiAgICAgIGVsaWYgaXNpbnN0YW5jZShkLCBfVGltZXJEb0ZuUGFyYW0pOgogICAgICAgIGFsbF90aW1lcl9zcGVjcy5hZGQoZC50aW1lcl9zcGVjKQoKICByZXR1cm4gYWxsX3N0YXRlX3NwZWNzLCBhbGxfdGltZXJfc3BlY3MKCgpkZWYgaXNfc3RhdGVmdWxfZG9mbihkb2ZuKToKICAiIiJEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBEb0ZuIGlzIGEgc3RhdGVmdWwgRG9Gbi4iIiIKCiAgIyBBIFN0YXRlZnVsIERvRm4gaXMgYSBEb0ZuIHRoYXQgdXNlcyB1c2VyIHN0YXRlIG9yIHRpbWVycy4KICBhbGxfc3RhdGVfc3BlY3MsIGFsbF90aW1lcl9zcGVjcyA9IGdldF9kb2ZuX3NwZWNzKGRvZm4pCiAgcmV0dXJuIGJvb2woYWxsX3N0YXRlX3NwZWNzIG9yIGFsbF90aW1lcl9zcGVjcykKCgpkZWYgdmFsaWRhdGVfc3RhdGVmdWxfZG9mbihkb2ZuKToKICAiIiJWYWxpZGF0ZXMgdGhlIHByb3BlciBzcGVjaWZpY2F0aW9uIG9mIGEgc3RhdGVmdWwgRG9Gbi4iIiIKCiAgIyBHZXQgc3RhdGUgYW5kIHRpbWVyIHNwZWNzLgogIGFsbF9zdGF0ZV9zcGVjcywgYWxsX3RpbWVyX3NwZWNzID0gZ2V0X2RvZm5fc3BlY3MoZG9mbikKCiAgIyBSZWplY3QgRG9GbnMgdGhhdCBoYXZlIG11bHRpcGxlIHN0YXRlIG9yIHRpbWVyIHNwZWNzIHdpdGggdGhlIHNhbWUgbmFtZS4KICBpZiBsZW4oYWxsX3N0YXRlX3NwZWNzKSAhPSBsZW4oc2V0KHMubmFtZSBmb3IgcyBpbiBhbGxfc3RhdGVfc3BlY3MpKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ0RvRm4gJXIgaGFzIG11bHRpcGxlIFN0YXRlU3BlY3Mgd2l0aCB0aGUgc2FtZSBuYW1lOiAlcy4nICUKICAgICAgICAoZG9mbiwgYWxsX3N0YXRlX3NwZWNzKSkKICBpZiBsZW4oYWxsX3RpbWVyX3NwZWNzKSAhPSBsZW4oc2V0KHMubmFtZSBmb3IgcyBpbiBhbGxfdGltZXJfc3BlY3MpKToKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgJ0RvRm4gJXIgaGFzIG11bHRpcGxlIFRpbWVyU3BlY3Mgd2l0aCB0aGUgc2FtZSBuYW1lOiAlcy4nICUKICAgICAgICAoZG9mbiwgYWxsX3RpbWVyX3NwZWNzKSkKCiAgIyBSZWplY3QgRG9GbnMgdGhhdCB1c2UgdGltZXIgc3BlY3Mgd2l0aG91dCBjb3JyZXNwb25kaW5nIHRpbWVyIGNhbGxiYWNrcy4KICBmb3IgdGltZXJfc3BlYyBpbiBhbGxfdGltZXJfc3BlY3M6CiAgICBpZiBub3QgdGltZXJfc3BlYy5fYXR0YWNoZWRfY2FsbGJhY2s6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKAogICAgICAgICAgJ0RvRm4gJXIgaGFzIGEgVGltZXJTcGVjIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBvbl90aW1lciAnCiAgICAgICAgICAnY2FsbGJhY2s6ICVzLicpICUgKGRvZm4sIHRpbWVyX3NwZWMpKQogICAgbWV0aG9kX25hbWUgPSB0aW1lcl9zcGVjLl9hdHRhY2hlZF9jYWxsYmFjay5fX25hbWVfXwogICAgaWYgKHRpbWVyX3NwZWMuX2F0dGFjaGVkX2NhbGxiYWNrICE9IGdldGF0dHIoZG9mbiwgbWV0aG9kX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKS5fX2Z1bmNfXyk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKAogICAgICAgICAgJ1RoZSBvbl90aW1lciBjYWxsYmFjayBmb3IgJXMgaXMgbm90IHRoZSBzcGVjaWZpZWQgLiVzIG1ldGhvZCAnCiAgICAgICAgICAnZm9yIERvRm4gJXIgKHBlcmhhcHMgaXQgd2FzIG92ZXJ3cml0dGVuPykuJykgJQogICAgICAgICAgICAgICAgICAgICAgICh0aW1lcl9zcGVjLCBtZXRob2RfbmFtZSwgZG9mbikpCgoKY2xhc3MgUnVudGltZVRpbWVyKG9iamVjdCk6CiAgIiIiVGltZXIgaW50ZXJmYWNlIG9iamVjdCBwYXNzZWQgdG8gdXNlciBjb2RlLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lcl9zcGVjKToKICAgIHNlbGYuX2NsZWFyZWQgPSBGYWxzZQogICAgc2VsZi5fbmV3X3RpbWVzdGFtcCA9IE5vbmUKCiAgZGVmIGNsZWFyKHNlbGYpOgogICAgc2VsZi5fY2xlYXJlZCA9IFRydWUKICAgIHNlbGYuX25ld190aW1lc3RhbXAgPSBOb25lCgogIGRlZiBzZXQoc2VsZiwgdGltZXN0YW1wKToKICAgIHNlbGYuX25ld190aW1lc3RhbXAgPSB0aW1lc3RhbXAKCgpjbGFzcyBSdW50aW1lU3RhdGUob2JqZWN0KToKICAiIiJTdGF0ZSBpbnRlcmZhY2Ugb2JqZWN0IHBhc3NlZCB0byB1c2VyIGNvZGUuIiIiCiAgZGVmIHByZWZldGNoKHNlbGYpOgogICAgIyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoZXJlIGRvZXMgbm90aGluZy4KICAgIHBhc3MKCgpjbGFzcyBBY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUoUnVudGltZVN0YXRlKToKICBkZWYgcmVhZChzZWxmKToKICAgICMgdHlwZTogKCkgLT4gSXRlcmFibGVbQW55XQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQoKICBkZWYgYWRkKHNlbGYsIHZhbHVlKToKICAgICMgdHlwZTogKEFueSkgLT4gTm9uZQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQoKICBkZWYgY2xlYXIoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IE5vbmUKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IodHlwZShzZWxmKSkKCiAgZGVmIGNvbW1pdChzZWxmKToKICAgICMgdHlwZTogKCkgLT4gTm9uZQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQoKCmNsYXNzIEJhZ1J1bnRpbWVTdGF0ZShBY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUpOgogICIiIkJhZyBzdGF0ZSBpbnRlcmZhY2Ugb2JqZWN0IHBhc3NlZCB0byB1c2VyIGNvZGUuIiIiCgoKY2xhc3MgU2V0UnVudGltZVN0YXRlKEFjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZSk6CiAgIiIiU2V0IHN0YXRlIGludGVyZmFjZSBvYmplY3QgcGFzc2VkIHRvIHVzZXIgY29kZS4iIiIKCgpjbGFzcyBDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZShBY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUpOgogICIiIkNvbWJpbmluZyB2YWx1ZSBzdGF0ZSBpbnRlcmZhY2Ugb2JqZWN0IHBhc3NlZCB0byB1c2VyIGNvZGUuIiIiCgoKY2xhc3MgVXNlclN0YXRlQ29udGV4dChvYmplY3QpOgogICIiIldyYXBwZXIgYWxsb3dpbmcgdXNlciBzdGF0ZSBhbmQgdGltZXJzIHRvIGJlIGFjY2Vzc2VkIGJ5IGEgRG9Gbkludm9rZXIuIiIiCiAgZGVmIGdldF90aW1lcihzZWxmLCB0aW1lcl9zcGVjLCBrZXksIHdpbmRvdyk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHR5cGUoc2VsZikpCgogIGRlZiBnZXRfc3RhdGUoc2VsZiwgc3RhdGVfc3BlYywga2V5LCB3aW5kb3cpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQoKICBkZWYgY29tbWl0KHNlbGYpOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcih0eXBlKHNlbGYpKQqUfZQojBJTdGF0ZVNwZWMuX19pbml0X1+UalYxAQBLNEs7h5SMElN0YXRlU3BlYy5fX3JlcHJfX5RqVjEBAEs9Sz6HlIwXU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGmUalYxAQBLQEtBh5SMCVN0YXRlU3BlY5RqXTEBAEsyS0GHlIwaQmFnU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGmUalYxAQBLRktKh5SMDEJhZ1N0YXRlU3BlY5RqXTEBAEtES0qHlIwaU2V0U3RhdGVTcGVjLnRvX3J1bm5lcl9hcGmUalYxAQBLT0tSh5SMDFNldFN0YXRlU3BlY5RqXTEBAEtNS1KHlIwgQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWMuX19pbml0X1+UalYxAQBLV0t6h5SMJUNvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGmUalYxAQBLfEuBh5SMF0NvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjlGpdMQEAS1VLgYeUjBJUaW1lclNwZWMuX19pbml0X1+UalYxAQBLhkuLh5SMElRpbWVyU3BlYy5fX3JlcHJfX5RqVjEBAEuNS46HlIwXVGltZXJTcGVjLnRvX3J1bm5lcl9hcGmUalYxAQBLkEuVh5SMCVRpbWVyU3BlY5RqXTEBAEuES5WHlIwIb25fdGltZXKUalYxAQBLmEu0h5SMDmdldF9kb2ZuX3NwZWNzlGpWMQEAS7dL3YeUjBBpc19zdGF0ZWZ1bF9kb2ZulGpWMQEAS+BL5YeUjBZ2YWxpZGF0ZV9zdGF0ZWZ1bF9kb2ZulGpWMQEAS+hNBAGHlIwVUnVudGltZVRpbWVyLl9faW5pdF9flGpWMQEATQkBTQsBh5SMElJ1bnRpbWVUaW1lci5jbGVhcpRqVjEBAE0NAU0PAYeUjBBSdW50aW1lVGltZXIuc2V0lGpWMQEATREBTRIBh5SMDFJ1bnRpbWVUaW1lcpRqXTEBAE0HAU0SAYeUjBVSdW50aW1lU3RhdGUucHJlZmV0Y2iUalYxAQBNFwFNGQGHlIwMUnVudGltZVN0YXRllGpdMQEATRUBTRkBh5SMHUFjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZS5yZWFklGpWMQEATR0BTR8Bh5SMHEFjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZS5hZGSUalYxAQBNIQFNIwGHlIweQWNjdW11bGF0aW5nUnVudGltZVN0YXRlLmNsZWFylGpWMQEATSUBTScBh5SMH0FjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZS5jb21taXSUalYxAQBNKQFNKwGHlIwYQWNjdW11bGF0aW5nUnVudGltZVN0YXRllGpdMQEATRwBTSsBh5SMD0JhZ1J1bnRpbWVTdGF0ZZRqXTEBAE0uAU0vAYeUjA9TZXRSdW50aW1lU3RhdGWUal0xAQBNMgFNMwGHlIwaQ29tYmluaW5nVmFsdWVSdW50aW1lU3RhdGWUal0xAQBNNgFNNwGHlIwaVXNlclN0YXRlQ29udGV4dC5nZXRfdGltZXKUalYxAQBNPAFNPQGHlIwaVXNlclN0YXRlQ29udGV4dC5nZXRfc3RhdGWUalYxAQBNPwFNQAGHlIwXVXNlclN0YXRlQ29udGV4dC5jb21taXSUalYxAQBNQgFNQwGHlIwQVXNlclN0YXRlQ29udGV4dJRqXTEBAE06AU1DAYeUdX2UKIwJU3RhdGVTcGVjlGr4AwAAjBdTdGF0ZVNwZWMudG9fcnVubmVyX2FwaZRq+AMAAIwMQmFnU3RhdGVTcGVjlGr4AwAAjBpCYWdTdGF0ZVNwZWMudG9fcnVubmVyX2FwaZRq+AMAAIwMU2V0U3RhdGVTcGVjlGr4AwAAjBpTZXRTdGF0ZVNwZWMudG9fcnVubmVyX2FwaZRq+AMAAIwXQ29tYmluaW5nVmFsdWVTdGF0ZVNwZWOUavgDAACMJUNvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjLnRvX3J1bm5lcl9hcGmUavgDAACMCVRpbWVyU3BlY5Rq+AMAAIwXVGltZXJTcGVjLnRvX3J1bm5lcl9hcGmUavgDAACMCG9uX3RpbWVylGr4AwAAjA5nZXRfZG9mbl9zcGVjc5Rq+AMAAIwQaXNfc3RhdGVmdWxfZG9mbpRq+AMAAIwWdmFsaWRhdGVfc3RhdGVmdWxfZG9mbpRq+AMAAIwMUnVudGltZVRpbWVylGr4AwAAjBJSdW50aW1lVGltZXIuY2xlYXKUavgDAACMEFJ1bnRpbWVUaW1lci5zZXSUavgDAACMDFJ1bnRpbWVTdGF0ZZRq+AMAAIwVUnVudGltZVN0YXRlLnByZWZldGNolGr4AwAAjBhBY2N1bXVsYXRpbmdSdW50aW1lU3RhdGWUavgDAACMHUFjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZS5yZWFklGr4AwAAjBxBY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUuYWRklGr4AwAAjB5BY2N1bXVsYXRpbmdSdW50aW1lU3RhdGUuY2xlYXKUavgDAACMH0FjY3VtdWxhdGluZ1J1bnRpbWVTdGF0ZS5jb21taXSUavgDAACMD0JhZ1J1bnRpbWVTdGF0ZZRq+AMAAIwPU2V0UnVudGltZVN0YXRllGr4AwAAjBpDb21iaW5pbmdWYWx1ZVJ1bnRpbWVTdGF0ZZRq+AMAAIwQVXNlclN0YXRlQ29udGV4dJRq+AMAAIwaVXNlclN0YXRlQ29udGV4dC5nZXRfdGltZXKUavgDAACMGlVzZXJTdGF0ZUNvbnRleHQuZ2V0X3N0YXRllGr4AwAAjBdVc2VyU3RhdGVDb250ZXh0LmNvbW1pdJRq+AMAAHWMLmFwYWNoZV9iZWFtLnRvb2xzLmZuX2FwaV9ydW5uZXJfbWljcm9iZW5jaG1hcmuUdJSMKmFwYWNoZV9iZWFtLnRvb2xzLnNpZGVpbnB1dF9taWNyb2JlbmNobWFya5QoWGELAAAjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIG1pY3JvYmVuY2htYXJrIGZvciBtZWFzdXJpbmcgcGVyZm9ybWFuY2Ugb2YgU2lkZSBJbnB1dHMgaXRlcmFibGUuCgpSdW5zIHNpZGUgaW5wdXQgaXRlcmFibGUgdGhhdCBmZXRjaGVzIGZyb20gbXVsdGlwbGUgRmFrZVNvdXJjZXMsIGFuZAptZWFzdXJlcyB0aGUgdGltZSB0byBmZXRjaCBhbGwgZWxlbWVudHMgZnJvbSBhbGwgc291cmNlcy4KClJ1biBhcwogIHB5dGhvbiAtbSBhcGFjaGVfYmVhbS50b29scy5zaWRlaW5wdXRfbWljcm9iZW5jaG1hcmsKIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBsb2dnaW5nCmltcG9ydCB0aW1lCmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCgpmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMud29ya2VyIGltcG9ydCBvcGNvdW50ZXJzCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy53b3JrZXIgaW1wb3J0IHNpZGVpbnB1dHMKZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLndvcmtlciBpbXBvcnQgc3RhdGVzYW1wbGVyCmZyb20gYXBhY2hlX2JlYW0ucnVubmVycy53b3JrZXIuc2lkZWlucHV0c190ZXN0IGltcG9ydCBGYWtlU291cmNlCmZyb20gYXBhY2hlX2JlYW0udG9vbHMgaW1wb3J0IHV0aWxzCmZyb20gYXBhY2hlX2JlYW0udXRpbHMuY291bnRlcnMgaW1wb3J0IENvdW50ZXJGYWN0b3J5CgoKZGVmIGxvbmdfZ2VuZXJhdG9yKHZhbHVlLCBlbGVtZW50cyk6CiAgZm9yIF8gaW4gcmFuZ2UoZWxlbWVudHMpOgogICAgeWllbGQgdmFsdWUKCgpkZWYgcnVuX2JlbmNobWFyayhudW1fcnVucz01MCwgaW5wdXRfcGVyX3NvdXJjZT00MDAwLCBudW1fc291cmNlcz00KToKICBwcmludCgiTnVtYmVyIG9mIHJ1bnM6IiwgbnVtX3J1bnMpCiAgcHJpbnQoIklucHV0IHNpemU6IiwgbnVtX3NvdXJjZXMgKiBpbnB1dF9wZXJfc291cmNlKQogIHByaW50KCJTb3VyY2VzOiIsIG51bV9zb3VyY2VzKQoKICB0aW1lcyA9IFtdCiAgZm9yIF8gaW4gcmFuZ2UobnVtX3J1bnMpOgogICAgY291bnRlcl9mYWN0b3J5ID0gQ291bnRlckZhY3RvcnkoKQogICAgc3RhdGVfc2FtcGxlciA9IHN0YXRlc2FtcGxlci5TdGF0ZVNhbXBsZXIoJ2Jhc2ljJywgY291bnRlcl9mYWN0b3J5KQogICAgc3RhdGVfc2FtcGxlci5zdGFydCgpCiAgICB3aXRoIHN0YXRlX3NhbXBsZXIuc2NvcGVkX3N0YXRlKCdzdGVwMScsICdzdGF0ZScpOgogICAgICBzaV9jb3VudGVyID0gb3Bjb3VudGVycy5TaWRlSW5wdXRSZWFkQ291bnRlcigKICAgICAgICAgIGNvdW50ZXJfZmFjdG9yeSwgc3RhdGVfc2FtcGxlciwgJ3N0ZXAxJywgMSkKICAgICAgc2lfY291bnRlciA9IG9wY291bnRlcnMuTm9PcFRyYW5zZm9ybUlPQ291bnRlcigpCiAgICAgIHNvdXJjZXMgPSBbCiAgICAgICAgICBGYWtlU291cmNlKGxvbmdfZ2VuZXJhdG9yKGksIGlucHV0X3Blcl9zb3VyY2UpKQogICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX3NvdXJjZXMpCiAgICAgIF0KICAgICAgaXRlcmF0b3JfZm4gPSBzaWRlaW5wdXRzLmdldF9pdGVyYXRvcl9mbl9mb3Jfc291cmNlcygKICAgICAgICAgIHNvdXJjZXMsIHJlYWRfY291bnRlcj1zaV9jb3VudGVyKQogICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgIGxpc3QoaXRlcmF0b3JfZm4oKSkKICAgICAgdGltZV9jb3N0ID0gdGltZS50aW1lKCkgLSBzdGFydAogICAgICB0aW1lcy5hcHBlbmQodGltZV9jb3N0KQogICAgc3RhdGVfc2FtcGxlci5zdG9wKCkKCiAgcHJpbnQoIlJ1bnRpbWVzOiIsIHRpbWVzKQoKICBhdmdfcnVudGltZSA9IHN1bSh0aW1lcykgLyBsZW4odGltZXMpCiAgcHJpbnQoIkF2ZXJhZ2UgcnVudGltZToiLCBhdmdfcnVudGltZSkKICBwcmludCgiVGltZSBwZXIgZWxlbWVudDoiLCBhdmdfcnVudGltZSAvIChpbnB1dF9wZXJfc291cmNlICogbnVtX3NvdXJjZXMpKQoKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgbG9nZ2luZy5iYXNpY0NvbmZpZygpCiAgdXRpbHMuY2hlY2tfY29tcGlsZWQoJ2FwYWNoZV9iZWFtLnJ1bm5lcnMud29ya2VyLm9wY291bnRlcnMnKQogIHJ1bl9iZW5jaG1hcmsoKQqUfZQojA5sb25nX2dlbmVyYXRvcpRqVjEBAEssSy6HlIwNcnVuX2JlbmNobWFya5RqVjEBAEsxS0+HlHV9lCiMDmxvbmdfZ2VuZXJhdG9ylGqFAwAAjA1ydW5fYmVuY2htYXJrlGqFAwAAdYwqYXBhY2hlX2JlYW0udG9vbHMuc2lkZWlucHV0X21pY3JvYmVuY2htYXJrlHSUjBdhcGFjaGVfYmVhbS50b29scy51dGlsc5QoWJcZAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFsbCBtaWNyb2JlbmNobWFya3MuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgZ2MKaW1wb3J0IGltcG9ydGxpYgppbXBvcnQgb3MKaW1wb3J0IHRpbWUKCmltcG9ydCBudW1weQoKCmRlZiBjaGVja19jb21waWxlZChtb2R1bGUpOgogICIiIkNoZWNrIHdoZXRoZXIgZ2l2ZW4gbW9kdWxlIGhhcyBiZWVuIGNvbXBpbGVkLgogIEFyZ3M6CiAgICBtb2R1bGU6IHN0cmluZywgbW9kdWxlIG5hbWUKICAiIiIKICBjaGVja19tb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2R1bGUpCiAgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChjaGVja19tb2R1bGUuX19maWxlX18pWy0xXQogIGlmIGV4dCBpbiAoJy5weScsICcucHljJyk6CiAgICByYWlzZSBSdW50aW1lRXJyb3IoCiAgICAgICAgIlByb2ZpbGluZyB1bmNvbXBpbGVkIGNvZGUuXG4iCiAgICAgICAgIlRvIGNvbXBpbGUgYmVhbSwgcnVuICIKICAgICAgICAiJ3BpcCBpbnN0YWxsIEN5dGhvbjsgcHl0aG9uIHNldHVwLnB5IGJ1aWxkX2V4dCAtLWlucGxhY2UnIikKCgpjbGFzcyBCZW5jaG1hcmtDb25maWcoY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiQmVuY2htYXJrQ29uZmlnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiZW5jaG1hcmsiLCAic2l6ZSIsICJudW1fcnVucyJdKQogICAgICAgICAgICAgICAgICAgICAgKToKICAiIiIKICBBdHRyaWJ1dGVzOgogICAgYmVuY2htYXJrOiBhIGNhbGxhYmxlIHRoYXQgdGFrZXMgYW4gaW50IGFyZ3VtZW50IC0gYmVuY2htYXJrIHNpemUsCiAgICAgIGFuZCByZXR1cm5zIGEgY2FsbGFibGUuIEEgcmV0dXJuZWQgY2FsbGFibGUgbXVzdCBydW4gdGhlIGNvZGUgYmVpbmcKICAgICAgYmVuY2htYXJrZWQgb24gYW4gaW5wdXQgb2Ygc3BlY2lmaWVkIHNpemUuCgogICAgICBGb3IgZXhhbXBsZSwgb25lIGNhbiBpbXBsZW1lbnQgYSBiZW5jaG1hcmsgYXM6CgogICAgICBjbGFzcyBNeUJlbmNobWFyayhvYmplY3QpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplKToKICAgICAgICAgIFtkbyBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb25dCiAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgogICAgICAgICAgW3J1biB0aGUgY29kZSBpbiBxdWVzdGlvbl0KCiAgICBzaXplOiBpbnQsIGEgc2l6ZSBvZiB0aGUgaW5wdXQuIEFnZ3JlZ2F0ZWQgcGVyLWVsZW1lbnQgbWV0cmljcwogICAgICBhcmUgY291bnRlZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQuCiAgICBudW1fcnVuczogaW50LCBudW1iZXIgb2YgdGltZXMgdG8gcnVuIGVhY2ggYmVuY2htYXJrLgogICIiIgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuICIlcywgJXMgZWxlbWVudChzKSIgJSAoCiAgICAgICAgZ2V0YXR0cihzZWxmLmJlbmNobWFyaywgJ19fbmFtZV9fJywgc3RyKHNlbGYuYmVuY2htYXJrKSksCiAgICAgICAgc3RyKHNlbGYuc2l6ZSkpCgoKY2xhc3MgTGluZWFyUmVncmVzc2lvbkJlbmNobWFya0NvbmZpZyhjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKAogICAgIkxpbmVhclJlZ3Jlc3Npb25CZW5jaG1hcmtDb25maWciLAogICAgWyJiZW5jaG1hcmsiLCAic3RhcnRpbmdfcG9pbnQiLCAiaW5jcmVtZW50IiwgIm51bV9ydW5zIl0pKToKICAiIiIKICBBdHRyaWJ1dGVzOgogICAgYmVuY2htYXJrOiBhIGNhbGxhYmxlIHRoYXQgdGFrZXMgYW4gaW50IGFyZ3VtZW50IC0gYmVuY2htYXJrIHNpemUsCiAgICAgIGFuZCByZXR1cm5zIGEgY2FsbGFibGUuIEEgcmV0dXJuZWQgY2FsbGFibGUgbXVzdCBydW4gdGhlIGNvZGUgYmVpbmcKICAgICAgYmVuY2htYXJrZWQgb24gYW4gaW5wdXQgb2Ygc3BlY2lmaWVkIHNpemUuCgogICAgICBGb3IgZXhhbXBsZSwgb25lIGNhbiBpbXBsZW1lbnQgYSBiZW5jaG1hcmsgYXM6CgogICAgICBjbGFzcyBNeUJlbmNobWFyayhvYmplY3QpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplKToKICAgICAgICAgIFtkbyBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb25dCiAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgogICAgICAgICAgW3J1biB0aGUgY29kZSBpbiBxdWVzdGlvbl0KCiAgICBzdGFydGluZ19wb2ludDogaW50LCBhbiBpbml0aWFsIHNpemUgb2YgdGhlIGlucHV0LiBSZWdyZXNzaW9uIHJlc3VsdHMgYXJlCiAgICAgIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGlucHV0LgogICAgaW5jcmVtZW50OiBpbnQsIHRoZSByYXRlIG9mIGdyb3d0aCBvZiB0aGUgaW5wdXQgZm9yIGVhY2ggcnVuIG9mIHRoZQogICAgICBiZW5jaG1hcmsuCiAgICBudW1fcnVuczogaW50LCBudW1iZXIgb2YgdGltZXMgdG8gcnVuIGVhY2ggYmVuY2htYXJrLgogICIiIgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuICIlcywgJXMgZWxlbWVudChzKSBhdCBzdGFydCwgJXMgZ3Jvd3RoIHBlciBydW4iICUgKAogICAgICAgIGdldGF0dHIoc2VsZi5iZW5jaG1hcmssICdfX25hbWVfXycsIHN0cihzZWxmLmJlbmNobWFyaykpLAogICAgICAgIHN0cihzZWxmLnN0YXJ0aW5nX3BvaW50KSwKICAgICAgICBzdHIoc2VsZi5pbmNyZW1lbnQpKQoKCmRlZiBydW5fYmVuY2htYXJrcyhiZW5jaG1hcmtfc3VpdGUsIHZlcmJvc2U9VHJ1ZSk6CiAgIiIiUnVucyBiZW5jaG1hcmtzLCBhbmQgY29sbGVjdHMgZXhlY3V0aW9uIHRpbWVzLgoKICBBIHNpbXBsZSBpbnN0cnVtZW50YXRpb24gdG8gcnVuIGEgY2FsbGFibGUgc2V2ZXJhbCB0aW1lcywgY29sbGVjdCBhbmQgcHJpbnQKICBpdHMgZXhlY3V0aW9uIHRpbWVzLgoKICBBcmdzOgogICAgYmVuY2htYXJrX3N1aXRlOiBBIGxpc3Qgb2YgQmVuY2htYXJrQ29uZmlnLgogICAgdmVyYm9zZTogYm9vbCwgd2hldGhlciB0byBwcmludCBiZW5jaG1hcmsgcmVzdWx0cyB0byBzdGRvdXQuCgogIFJldHVybnM6CiAgICBBIGRpY3Rpb25hcnkgb2YgdGhlIGZvcm0gc3RyaW5nIC0+IGxpc3Qgb2YgZmxvYXRzLiBLZXlzIG9mIHRoZSBkaWN0aW9uYXJ5CiAgICBhcmUgYmVuY2htYXJrIG5hbWVzLCB2YWx1ZXMgYXJlIGV4ZWN1dGlvbiB0aW1lcyBpbiBzZWNvbmRzIGZvciBlYWNoIHJ1bi4KICAiIiIKICBkZWYgcnVuKGJlbmNobWFya19mbiwgc2l6ZSk6CiAgICAjIENvbnRhaW4gZWFjaCBydW4gb2YgYSBiZW5jaG1hcmsgaW5zaWRlIGEgZnVuY3Rpb24gc28gdGhhdCBhbnkgdGVtcG9yYXJ5CiAgICAjIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UtY29sbGVjdGVkIGFmdGVyIHRoZSBydW4uCiAgICBiZW5jaG1hcmtfaW5zdGFuY2VfY2FsbGFibGUgPSBiZW5jaG1hcmtfZm4oc2l6ZSkKICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgIF8gPSBiZW5jaG1hcmtfaW5zdGFuY2VfY2FsbGFibGUoKQogICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc3RhcnQKCiAgY29zdF9zZXJpZXMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQogIHNpemVfc2VyaWVzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICBmb3IgYmVuY2htYXJrX2NvbmZpZyBpbiBiZW5jaG1hcmtfc3VpdGU6CiAgICBuYW1lID0gc3RyKGJlbmNobWFya19jb25maWcpCiAgICBudW1fcnVucyA9IGJlbmNobWFya19jb25maWcubnVtX3J1bnMKCiAgICBpZiBpc2luc3RhbmNlKGJlbmNobWFya19jb25maWcsIExpbmVhclJlZ3Jlc3Npb25CZW5jaG1hcmtDb25maWcpOgogICAgICBzaXplID0gYmVuY2htYXJrX2NvbmZpZy5zdGFydGluZ19wb2ludAogICAgICBzdGVwID0gYmVuY2htYXJrX2NvbmZpZy5pbmNyZW1lbnQKICAgIGVsc2U6CiAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJlbmNobWFya19jb25maWcsIEJlbmNobWFya0NvbmZpZykKICAgICAgc2l6ZSA9IGJlbmNobWFya19jb25maWcuc2l6ZQogICAgICBzdGVwID0gMAoKICAgIGZvciBydW5faWQgaW4gcmFuZ2UobnVtX3J1bnMpOgogICAgICAjIERvIGEgcHJvYWN0aXZlIEdDIGJlZm9yZSBlYWNoIHJ1biB0byBtaW5pbWl6ZSBzaWRlLWVmZmVjdHMgb2YgZGlmZmVyZW50CiAgICAgICMgcnVucy4KICAgICAgZ2MuY29sbGVjdCgpCiAgICAgIHRpbWVfY29zdCA9IHJ1bihiZW5jaG1hcmtfY29uZmlnLmJlbmNobWFyaywgc2l6ZSkKICAgICAgIyBBcHBlbmRpbmcgc2l6ZSBhbmQgdGltZSBjb3N0IHRvIHBlcmZvcm0gbGluZWFyIHJlZ3Jlc3Npb24KICAgICAgY29zdF9zZXJpZXNbbmFtZV0uYXBwZW5kKHRpbWVfY29zdCkKICAgICAgc2l6ZV9zZXJpZXNbbmFtZV0uYXBwZW5kKHNpemUpCiAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgcGVyX2VsZW1lbnRfY29zdCA9IHRpbWVfY29zdCAvIHNpemUKICAgICAgICBwcmludCgKICAgICAgICAgICAgIiVzOiBydW4gJWQgb2YgJWQsIHBlciBlbGVtZW50IHRpbWUgY29zdDogJWcgc2VjIiAlCiAgICAgICAgICAgIChuYW1lLCBydW5faWQgKyAxLCBudW1fcnVucywgcGVyX2VsZW1lbnRfY29zdCkpCgogICAgICAjIEluY3JlbWVudGluZyB0aGUgc2l6ZSBvZiB0aGUgYmVuY2htYXJrIHJ1biBieSB0aGUgc3RlcCBzaXplCiAgICAgIHNpemUgKz0gc3RlcAogICAgaWYgdmVyYm9zZToKICAgICAgcHJpbnQoIiIpCgogIGlmIHZlcmJvc2U6CiAgICBwYWRfbGVuZ3RoID0gbWF4KFtsZW4oc3RyKGJjKSkgZm9yIGJjIGluIGJlbmNobWFya19zdWl0ZV0pCgogICAgZm9yIGJlbmNobWFya19jb25maWcgaW4gYmVuY2htYXJrX3N1aXRlOgogICAgICBuYW1lID0gc3RyKGJlbmNobWFya19jb25maWcpCgogICAgICBpZiBpc2luc3RhbmNlKGJlbmNobWFya19jb25maWcsIExpbmVhclJlZ3Jlc3Npb25CZW5jaG1hcmtDb25maWcpOgogICAgICAgIGZyb20gc2NpcHkgaW1wb3J0IHN0YXRzCiAgICAgICAgcHJpbnQoKQogICAgICAgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC12YXJpYWJsZQogICAgICAgIGdyYWRpZW50LCBpbnRlcmNlcHQsIHJfdmFsdWUsIHBfdmFsdWUsIHN0ZF9lcnIgPSBzdGF0cy5saW5yZWdyZXNzKAogICAgICAgICAgICBzaXplX3Nlcmllc1tuYW1lXSwgY29zdF9zZXJpZXNbbmFtZV0pCiAgICAgICAgcHJpbnQoIkZpeGVkIGNvc3QgICIsIGludGVyY2VwdCkKICAgICAgICBwcmludCgiUGVyLWVsZW1lbnQgIiwgZ3JhZGllbnQpCiAgICAgICAgcHJpbnQoIlJeMiAgICAgICAgICIsIHJfdmFsdWUqKjIpCiAgICAgIGVsc2U6CiAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmVuY2htYXJrX2NvbmZpZywgQmVuY2htYXJrQ29uZmlnKQogICAgICAgIHBlcl9lbGVtZW50X21lZGlhbl9jb3N0ID0gKAogICAgICAgICAgICBudW1weS5tZWRpYW4oY29zdF9zZXJpZXNbbmFtZV0pIC8gYmVuY2htYXJrX2NvbmZpZy5zaXplKQogICAgICAgIHN0ZCA9IG51bXB5LnN0ZChjb3N0X3Nlcmllc1tuYW1lXSkgLyBiZW5jaG1hcmtfY29uZmlnLnNpemUKCiAgICAgICAgcHJpbnQoCiAgICAgICAgICAgICIlczogcC4gZWxlbWVudCBtZWRpYW4gdGltZSBjb3N0OiAlZyBzZWMsIHJlbGF0aXZlIHN0ZDogJS4yZiUlIiAlICgKICAgICAgICAgICAgICAgIG5hbWUubGp1c3QocGFkX2xlbmd0aCwgIiAiKSwKICAgICAgICAgICAgICAgIHBlcl9lbGVtZW50X21lZGlhbl9jb3N0LAogICAgICAgICAgICAgICAgc3RkICogMTAwIC8gcGVyX2VsZW1lbnRfbWVkaWFuX2Nvc3QpKQoKICByZXR1cm4gc2l6ZV9zZXJpZXMsIGNvc3Rfc2VyaWVzCpR9lCiMDmNoZWNrX2NvbXBpbGVklGpWMQEASyNLLoeUjBdCZW5jaG1hcmtDb25maWcuX19zdHJfX5RqVjEBAEtGS0mHlIwPQmVuY2htYXJrQ29uZmlnlGpdMQEASzFLSYeUjCdMaW5lYXJSZWdyZXNzaW9uQmVuY2htYXJrQ29uZmlnLl9fc3RyX1+UalYxAQBLY0tnh5SMH0xpbmVhclJlZ3Jlc3Npb25CZW5jaG1hcmtDb25maWeUal0xAQBLTEtnh5SMDnJ1bl9iZW5jaG1hcmtzlGpWMQEAS2pLvIeUdX2UKIwOY2hlY2tfY29tcGlsZWSUavsDAACMD0JlbmNobWFya0NvbmZpZ5Rq+wMAAIwfTGluZWFyUmVncmVzc2lvbkJlbmNobWFya0NvbmZpZ5Rq+wMAAIwOcnVuX2JlbmNobWFya3OUavsDAAB1jBdhcGFjaGVfYmVhbS50b29scy51dGlsc5R0lIwgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnOUKFhbeQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIGxpYnJhcnkgb2YgYmFzaWMgY29tYmluZXIgUFRyYW5zZm9ybSBzdWJjbGFzc2VzLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGhlYXBxCmltcG9ydCBvcGVyYXRvcgppbXBvcnQgcmFuZG9tCmltcG9ydCBzeXMKaW1wb3J0IHdhcm5pbmdzCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCB6aXAKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgRGljdApmcm9tIHR5cGluZyBpbXBvcnQgSXRlcmFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSB0eXBpbmcgaW1wb3J0IFNldApmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGVWYXIKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IGxvbmcKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjeV9jb21iaW5lcnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBwdHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHdpdGhfaW5wdXRfdHlwZXMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHdpdGhfb3V0cHV0X3R5cGVzCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBEdXJhdGlvbgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBpbXBvcnQgVGltZXN0YW1wCgpfX2FsbF9fID0gWwogICAgJ0NvdW50JywgJ01lYW4nLCAnU2FtcGxlJywgJ1RvcCcsICdUb0RpY3QnLCAnVG9MaXN0JywgJ1RvU2V0JywgJ0xhdGVzdCcKXQoKIyBUeXBlIHZhcmlhYmxlcwpUID0gVHlwZVZhcignVCcpCksgPSBUeXBlVmFyKCdLJykKViA9IFR5cGVWYXIoJ1YnKQpUaW1lc3RhbXBUeXBlID0gVW5pb25baW50LCBmbG9hdCwgVGltZXN0YW1wLCBEdXJhdGlvbl0KCgpjbGFzcyBNZWFuKG9iamVjdCk6CiAgIiIiQ29tYmluZXJzIGZvciBjb21wdXRpbmcgYXJpdGhtZXRpYyBtZWFucyBvZiBlbGVtZW50cy4iIiIKICBjbGFzcyBHbG9iYWxseShwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICAgIiIiY29tYmluZXJzLk1lYW4uR2xvYmFsbHkgY29tcHV0ZXMgdGhlIGFyaXRobWV0aWMgbWVhbiBvZiB0aGUgZWxlbWVudHMuIiIiCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lR2xvYmFsbHkoTWVhbkNvbWJpbmVGbigpKQoKICBjbGFzcyBQZXJLZXkocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICIiImNvbWJpbmVycy5NZWFuLlBlcktleSBmaW5kcyB0aGUgbWVhbnMgb2YgdGhlIHZhbHVlcyBmb3IgZWFjaCBrZXkuIiIiCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lUGVyS2V5KE1lYW5Db21iaW5lRm4oKSkKCgojIFRPRE8obGFvbHUpOiBUaGlzIHR5cGUgc2lnbmF0dXJlIGlzIG92ZXJseSByZXN0cmljdGl2ZS4gVGhpcyBzaG91bGQgYmUKIyBtb3JlIGdlbmVyYWwuCkB3aXRoX2lucHV0X3R5cGVzKFVuaW9uW2Zsb2F0LCBpbnQsIGxvbmddKQpAd2l0aF9vdXRwdXRfdHlwZXMoZmxvYXQpCmNsYXNzIE1lYW5Db21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkNvbWJpbmVGbiBmb3IgY29tcHV0aW5nIGFuIGFyaXRobWV0aWMgbWVhbi4iIiIKICBkZWYgY3JlYXRlX2FjY3VtdWxhdG9yKHNlbGYpOgogICAgcmV0dXJuICgwLCAwKQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIHN1bV9jb3VudCwgZWxlbWVudCk6CiAgICAoc3VtXywgY291bnQpID0gc3VtX2NvdW50CiAgICByZXR1cm4gc3VtXyArIGVsZW1lbnQsIGNvdW50ICsgMQoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycyk6CiAgICBzdW1zLCBjb3VudHMgPSB6aXAoKmFjY3VtdWxhdG9ycykKICAgIHJldHVybiBzdW0oc3VtcyksIHN1bShjb3VudHMpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBzdW1fY291bnQpOgogICAgKHN1bV8sIGNvdW50KSA9IHN1bV9jb3VudAogICAgaWYgY291bnQgPT0gMDoKICAgICAgcmV0dXJuIGZsb2F0KCdOYU4nKQogICAgcmV0dXJuIHN1bV8gLyBmbG9hdChjb3VudCkKCiAgZGVmIGZvcl9pbnB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgaWYgaW5wdXRfdHlwZSBpcyBpbnQ6CiAgICAgIHJldHVybiBjeV9jb21iaW5lcnMuTWVhbkludDY0Rm4oKQogICAgZWxpZiBpbnB1dF90eXBlIGlzIGZsb2F0OgogICAgICByZXR1cm4gY3lfY29tYmluZXJzLk1lYW5GbG9hdEZuKCkKICAgIHJldHVybiBzZWxmCgoKY2xhc3MgQ291bnQob2JqZWN0KToKICAiIiJDb21iaW5lcnMgZm9yIGNvdW50aW5nIGVsZW1lbnRzLiIiIgogIGNsYXNzIEdsb2JhbGx5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJjb21iaW5lcnMuQ291bnQuR2xvYmFsbHkgY291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMuIiIiCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgcmV0dXJuIHBjb2xsIHwgY29yZS5Db21iaW5lR2xvYmFsbHkoQ291bnRDb21iaW5lRm4oKSkKCiAgY2xhc3MgUGVyS2V5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJjb21iaW5lcnMuQ291bnQuUGVyS2V5IGNvdW50cyBob3cgbWFueSBlbGVtZW50cyBlYWNoIHVuaXF1ZSBrZXkgaGFzLiIiIgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IGNvcmUuQ29tYmluZVBlcktleShDb3VudENvbWJpbmVGbigpKQoKICBjbGFzcyBQZXJFbGVtZW50KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJjb21iaW5lcnMuQ291bnQuUGVyRWxlbWVudCBjb3VudHMgaG93IG1hbnkgdGltZXMgZWFjaCBlbGVtZW50IG9jY3Vycy4iIiIKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBwYWlyZWRfd2l0aF92b2lkX3R5cGUgPSB0eXBlaGludHMuVHVwbGVbcGNvbGwuZWxlbWVudF90eXBlLCBBbnldCiAgICAgIG91dHB1dF90eXBlID0gdHlwZWhpbnRzLktWW3Bjb2xsLmVsZW1lbnRfdHlwZSwgaW50XQogICAgICByZXR1cm4gKAogICAgICAgICAgcGNvbGwKICAgICAgICAgIHwgKAogICAgICAgICAgICAgICclczpQYWlyV2l0aFZvaWQnICUgc2VsZi5sYWJlbCA+PiBjb3JlLk1hcCgKICAgICAgICAgICAgICAgICAgbGFtYmRhIHg6ICh4LCBOb25lKSkud2l0aF9vdXRwdXRfdHlwZXMocGFpcmVkX3dpdGhfdm9pZF90eXBlKSkKICAgICAgICAgIHwgY29yZS5Db21iaW5lUGVyS2V5KENvdW50Q29tYmluZUZuKCkpLndpdGhfb3V0cHV0X3R5cGVzKG91dHB1dF90eXBlKSkKCgpAd2l0aF9pbnB1dF90eXBlcyhBbnkpCkB3aXRoX291dHB1dF90eXBlcyhpbnQpCmNsYXNzIENvdW50Q29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZm9yIGNvbXB1dGluZyBQQ29sbGVjdGlvbiBzaXplLiIiIgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gMAoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIHJldHVybiBhY2N1bXVsYXRvciArIDEKCiAgZGVmIGFkZF9pbnB1dHMoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnRzKToKICAgIHJldHVybiBhY2N1bXVsYXRvciArIGxlbihsaXN0KGVsZW1lbnRzKSkKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMpOgogICAgcmV0dXJuIHN1bShhY2N1bXVsYXRvcnMpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gYWNjdW11bGF0b3IKCgpjbGFzcyBUb3Aob2JqZWN0KToKICAiIiJDb21iaW5lcnMgZm9yIG9idGFpbmluZyBleHRyZW1hbCBlbGVtZW50cy4iIiIKCiAgIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi1hcmd1bWVudAoKICBjbGFzcyBPZihwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICAgIiIiT2J0YWluIGEgbGlzdCBvZiB0aGUgY29tcGFyZS1tb3N0IE4gZWxlbWVudHMgaW4gYSBQQ29sbGVjdGlvbi4KCiAgICBUaGlzIHRyYW5zZm9ybSB3aWxsIHJldHJpZXZlIHRoZSBuIGdyZWF0ZXN0IGVsZW1lbnRzIGluIHRoZSBQQ29sbGVjdGlvbgogICAgdG8gd2hpY2ggaXQgaXMgYXBwbGllZCwgd2hlcmUgImdyZWF0ZXN0IiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb21wYXJhdG9yCiAgICBmdW5jdGlvbiBzdXBwbGllZCBhcyB0aGUgY29tcGFyZSBhcmd1bWVudC4KICAgICIiIgogICAgZGVmIF9weTJfX2luaXRfXyhzZWxmLCBuLCBjb21wYXJlPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICIiIkluaXRpYWxpemVyLgoKICAgICAgY29tcGFyZSBzaG91bGQgYmUgYW4gaW1wbGVtZW50YXRpb24gb2YgImEgPCBiIiB0YWtpbmcgYXQgbGVhc3QgdHdvCiAgICAgIGFyZ3VtZW50cyAoYSBhbmQgYikuIEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cyBzcGVjaWZpZWQgaW4KICAgICAgdGhlIGFwcGx5IGNhbGwgYmVjb21lIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBjb21wYXJhdG9yLiBEZWZhdWx0cyB0bwogICAgICB0aGUgbmF0dXJhbCBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMuCiAgICAgIFRoZSBhcmd1bWVudHMgJ2tleScgYW5kICdyZXZlcnNlJyBtYXkgaW5zdGVhZCBiZSBwYXNzZWQgYXMga2V5d29yZAogICAgICBhcmd1bWVudHMsIGFuZCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIFB5dGhvbidzIHNvcnQgZnVuY3Rpb25zLgoKICAgICAgQXJnczoKICAgICAgICBwY29sbDogUENvbGxlY3Rpb24gdG8gcHJvY2Vzcy4KICAgICAgICBuOiBudW1iZXIgb2YgZWxlbWVudHMgdG8gZXh0cmFjdCBmcm9tIHBjb2xsLgogICAgICAgIGNvbXBhcmU6IGFzIGRlc2NyaWJlZCBhYm92ZS4KICAgICAgICAqYXJnczogYXMgZGVzY3JpYmVkIGFib3ZlLgogICAgICAgICoqa3dhcmdzOiBhcyBkZXNjcmliZWQgYWJvdmUuCiAgICAgICIiIgogICAgICBpZiBjb21wYXJlOgogICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICdDb21wYXJlIG5vdCBhdmFpbGFibGUgaW4gUHl0aG9uIDMsIHVzZSBrZXkgaW5zdGVhZC4nLAogICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgIHNlbGYuX24gPSBuCiAgICAgIHNlbGYuX2NvbXBhcmUgPSBjb21wYXJlCiAgICAgIHNlbGYuX2tleSA9IGt3YXJncy5wb3AoJ2tleScsIE5vbmUpCiAgICAgIHNlbGYuX3JldmVyc2UgPSBrd2FyZ3MucG9wKCdyZXZlcnNlJywgRmFsc2UpCiAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCiAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncwoKICAgIGRlZiBfcHkzX19pbml0X18oc2VsZiwgbiwgKiprd2FyZ3MpOgogICAgICAiIiJDcmVhdGVzIGEgZ2xvYmFsIFRvcCBvcGVyYXRpb24uCgogICAgICBUaGUgYXJndW1lbnRzICdrZXknIGFuZCAncmV2ZXJzZScgbWF5IGJlIHBhc3NlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cywKICAgICAgYW5kIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgUHl0aG9uJ3Mgc29ydCBmdW5jdGlvbnMuCgogICAgICBBcmdzOgogICAgICAgIHBjb2xsOiBQQ29sbGVjdGlvbiB0byBwcm9jZXNzLgogICAgICAgIG46IG51bWJlciBvZiBlbGVtZW50cyB0byBleHRyYWN0IGZyb20gcGNvbGwuCiAgICAgICAgKiprd2FyZ3M6IG1heSBjb250YWluICdrZXknIGFuZC9vciAncmV2ZXJzZScKICAgICAgIiIiCiAgICAgIHVua25vd25fa3dhcmdzID0gc2V0KGt3YXJncy5rZXlzKCkpIC0gc2V0KFsna2V5JywgJ3JldmVyc2UnXSkKICAgICAgaWYgdW5rbm93bl9rd2FyZ3M6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1Vua25vd24ga2V5d29yZCBhcmd1bWVudHM6ICcgKyAnLCAnLmpvaW4odW5rbm93bl9rd2FyZ3MpKQogICAgICBzZWxmLl9weTJfX2luaXRfXyhuLCBOb25lLCAqKmt3YXJncykKCiAgICAjIFB5dGhvbiAzIHNvcnQgZG9lcyBub3QgYWNjZXB0IGEgY29tcGFyaXNvbiBvcGVyYXRvciwgYW5kIG5vciBkbyB3ZS4KICAgICMgRklYTUU6IG15cHkgd291bGQgaGFuZGxlIHRoaXMgYmV0dGVyIGlmIHdlIHBsYWNlZCB0aGUgX3B5Kl9faW5pdF9fIGZ1bmNzCiAgICAjICBpbnNpZGUgdGhlIGlmL2Vsc2UgYmxvY2sgYmVsb3c6CiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKICAgICAgX19pbml0X18gPSBfcHkyX19pbml0X18KICAgIGVsc2U6CiAgICAgIF9faW5pdF9fID0gX3B5M19faW5pdF9fICAjIHR5cGU6IGlnbm9yZQoKICAgIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgICByZXR1cm4gJ1RvcCglZCknICUgc2VsZi5fbgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBjb21wYXJlID0gc2VsZi5fY29tcGFyZQogICAgICBpZiAobm90IHNlbGYuX2FyZ3MgYW5kIG5vdCBzZWxmLl9rd2FyZ3MgYW5kIHBjb2xsLndpbmRvd2luZy5pc19kZWZhdWx0KCkpOgogICAgICAgIGlmIHNlbGYuX3JldmVyc2U6CiAgICAgICAgICBpZiBjb21wYXJlIGlzIE5vbmUgb3IgY29tcGFyZSBpcyBvcGVyYXRvci5sdDoKICAgICAgICAgICAgY29tcGFyZSA9IG9wZXJhdG9yLmd0CiAgICAgICAgICBlbHNlOgogICAgICAgICAgICBvcmlnaW5hbF9jb21wYXJlID0gY29tcGFyZQogICAgICAgICAgICBjb21wYXJlID0gbGFtYmRhIGEsIGI6IG9yaWdpbmFsX2NvbXBhcmUoYiwgYSkKICAgICAgICAjIFRoaXMgaXMgYSBtb3JlIGVmZmljaWVudCBnbG9iYWwgYWxnb3JpdGhtLgogICAgICAgIHRvcF9wZXJfYnVuZGxlID0gcGNvbGwgfCBjb3JlLlBhckRvKAogICAgICAgICAgICBfVG9wUGVyQnVuZGxlKHNlbGYuX24sIGNvbXBhcmUsIHNlbGYuX2tleSkpCiAgICAgICAgIyBJZiBwY29sbCBpcyBlbXB0eSwgd2UgY2FuJ3QgZ3VlcmVudGVlIHRoYXQgdG9wX3Blcl9idW5kbGUKICAgICAgICAjIHdvbid0IGJlIGVtcHR5LCBzbyBpbmplY3QgYXQgbGVhc3Qgb25lIGVtcHR5IGFjY3VtdWxhdG9yCiAgICAgICAgIyBzbyB0aGF0IGRvd25zdHJlYW0gaXMgZ3VlcmVudGVlZCB0byBwcm9kdWNlIG5vbi1lbXB0eSBvdXRwdXQuCiAgICAgICAgZW1wdHlfYnVuZGxlID0gcGNvbGwucGlwZWxpbmUgfCBjb3JlLkNyZWF0ZShbKE5vbmUsIFtdKV0pCiAgICAgICAgcmV0dXJuICgodG9wX3Blcl9idW5kbGUsIGVtcHR5X2J1bmRsZSkgfCBjb3JlLkZsYXR0ZW4oKQogICAgICAgICAgICAgICAgfCBjb3JlLkdyb3VwQnlLZXkoKQogICAgICAgICAgICAgICAgfCBjb3JlLlBhckRvKF9NZXJnZVRvcFBlckJ1bmRsZShzZWxmLl9uLCBjb21wYXJlLCBzZWxmLl9rZXkpKSkKICAgICAgZWxzZToKICAgICAgICByZXR1cm4gcGNvbGwgfCBjb3JlLkNvbWJpbmVHbG9iYWxseSgKICAgICAgICAgICAgVG9wQ29tYmluZUZuKHNlbGYuX24sIGNvbXBhcmUsIHNlbGYuX2tleSwgc2VsZi5fcmV2ZXJzZSksCiAgICAgICAgICAgICpzZWxmLl9hcmdzLAogICAgICAgICAgICAqKnNlbGYuX2t3YXJncykKCiAgY2xhc3MgUGVyS2V5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJJZGVudGlmaWVzIHRoZSBjb21wYXJlLW1vc3QgTiBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBrZXkuCgogICAgVGhpcyB0cmFuc2Zvcm0gd2lsbCBwcm9kdWNlIGEgUENvbGxlY3Rpb24gbWFwcGluZyB1bmlxdWUga2V5cyBpbiB0aGUgaW5wdXQKICAgIFBDb2xsZWN0aW9uIHRvIHRoZSBuIGdyZWF0ZXN0IGVsZW1lbnRzIHdpdGggd2hpY2ggdGhleSBhcmUgYXNzb2NpYXRlZCwgd2hlcmUKICAgICJncmVhdGVzdCIgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29tcGFyYXRvciBmdW5jdGlvbiBzdXBwbGllZCBhcyB0aGUgY29tcGFyZQogICAgYXJndW1lbnQgaW4gdGhlIGluaXRpYWxpemVyLgogICAgIiIiCiAgICBkZWYgX3B5Ml9faW5pdF9fKHNlbGYsIG4sIGNvbXBhcmU9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgIiIiSW5pdGlhbGl6ZXIuCgogICAgICBjb21wYXJlIHNob3VsZCBiZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiAiYSA8IGIiIHRha2luZyBhdCBsZWFzdCB0d28KICAgICAgYXJndW1lbnRzIChhIGFuZCBiKS4gQWRkaXRpb25hbCBhcmd1bWVudHMgYW5kIHNpZGUgaW5wdXRzIHNwZWNpZmllZCBpbgogICAgICB0aGUgYXBwbHkgY2FsbCBiZWNvbWUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGNvbXBhcmF0b3IuICBEZWZhdWx0cyB0bwogICAgICB0aGUgbmF0dXJhbCBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMuCgogICAgICBUaGUgYXJndW1lbnRzICdrZXknIGFuZCAncmV2ZXJzZScgbWF5IGluc3RlYWQgYmUgcGFzc2VkIGFzIGtleXdvcmQKICAgICAgYXJndW1lbnRzLCBhbmQgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciBQeXRob24ncyBzb3J0IGZ1bmN0aW9ucy4KCiAgICAgIEFyZ3M6CiAgICAgICAgbjogbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGV4dHJhY3QgZnJvbSBpbnB1dC4KICAgICAgICBjb21wYXJlOiBhcyBkZXNjcmliZWQgYWJvdmUuCiAgICAgICAgKmFyZ3M6IGFzIGRlc2NyaWJlZCBhYm92ZS4KICAgICAgICAqKmt3YXJnczogYXMgZGVzY3JpYmVkIGFib3ZlLgogICAgICAiIiIKICAgICAgaWYgY29tcGFyZToKICAgICAgICB3YXJuaW5ncy53YXJuKAogICAgICAgICAgICAnQ29tcGFyZSBub3QgYXZhaWxhYmxlIGluIFB5dGhvbiAzLCB1c2Uga2V5IGluc3RlYWQuJywKICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQogICAgICBzZWxmLl9uID0gbgogICAgICBzZWxmLl9jb21wYXJlID0gY29tcGFyZQogICAgICBzZWxmLl9rZXkgPSBrd2FyZ3MucG9wKCdrZXknLCBOb25lKQogICAgICBzZWxmLl9yZXZlcnNlID0ga3dhcmdzLnBvcCgncmV2ZXJzZScsIEZhbHNlKQogICAgICBzZWxmLl9hcmdzID0gYXJncwogICAgICBzZWxmLl9rd2FyZ3MgPSBrd2FyZ3MKCiAgICBkZWYgX3B5M19faW5pdF9fKHNlbGYsIG4sICoqa3dhcmdzKToKICAgICAgIiIiQ3JlYXRlcyBhIHBlci1rZXkgVG9wIG9wZXJhdGlvbi4KCiAgICAgIFRoZSBhcmd1bWVudHMgJ2tleScgYW5kICdyZXZlcnNlJyBtYXkgYmUgcGFzc2VkIGFzIGtleXdvcmQgYXJndW1lbnRzLAogICAgICBhbmQgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciBQeXRob24ncyBzb3J0IGZ1bmN0aW9ucy4KCiAgICAgIEFyZ3M6CiAgICAgICAgcGNvbGw6IFBDb2xsZWN0aW9uIHRvIHByb2Nlc3MuCiAgICAgICAgbjogbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGV4dHJhY3QgZnJvbSBwY29sbC4KICAgICAgICAqKmt3YXJnczogbWF5IGNvbnRhaW4gJ2tleScgYW5kL29yICdyZXZlcnNlJwogICAgICAiIiIKICAgICAgdW5rbm93bl9rd2FyZ3MgPSBzZXQoa3dhcmdzLmtleXMoKSkgLSBzZXQoWydrZXknLCAncmV2ZXJzZSddKQogICAgICBpZiB1bmtub3duX2t3YXJnczoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAnVW5rbm93biBrZXl3b3JkIGFyZ3VtZW50czogJyArICcsICcuam9pbih1bmtub3duX2t3YXJncykpCiAgICAgIHNlbGYuX3B5Ml9faW5pdF9fKG4sIE5vbmUsICoqa3dhcmdzKQoKICAgICMgUHl0aG9uIDMgc29ydCBkb2VzIG5vdCBhY2NlcHQgYSBjb21wYXJpc29uIG9wZXJhdG9yLCBhbmQgbm9yIGRvIHdlLgogICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6CiAgICAgIF9faW5pdF9fID0gX3B5Ml9faW5pdF9fCiAgICBlbHNlOgogICAgICBfX2luaXRfXyA9IF9weTNfX2luaXRfXyAgIyB0eXBlOiBpZ25vcmUKCiAgICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgICAgcmV0dXJuICdUb3BQZXJLZXkoJWQpJyAlIHNlbGYuX24KCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgIiIiRXhwYW5kcyB0aGUgdHJhbnNmb3JtLgoKICAgICAgUmFpc2VzIFR5cGVDaGVja0Vycm9yOiBJZiB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIGlucHV0IFBDb2xsZWN0aW9uIGlzIG5vdAogICAgICBjb21wYXRpYmxlIHdpdGggVHVwbGVbQSwgQl0uCgogICAgICBBcmdzOgogICAgICAgIHBjb2xsOiBQQ29sbGVjdGlvbiB0byBwcm9jZXNzCgogICAgICBSZXR1cm5zOgogICAgICAgIHRoZSBQQ29sbGVjdGlvbiBjb250YWluaW5nIHRoZSByZXN1bHQuCiAgICAgICIiIgogICAgICByZXR1cm4gcGNvbGwgfCBjb3JlLkNvbWJpbmVQZXJLZXkoCiAgICAgICAgICBUb3BDb21iaW5lRm4oc2VsZi5fbiwgc2VsZi5fY29tcGFyZSwgc2VsZi5fa2V5LCBzZWxmLl9yZXZlcnNlKSwKICAgICAgICAgICpzZWxmLl9hcmdzLAogICAgICAgICAgKipzZWxmLl9rd2FyZ3MpCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIExhcmdlc3QocGNvbGwsIG4pOgogICAgIiIiT2J0YWluIGEgbGlzdCBvZiB0aGUgZ3JlYXRlc3QgTiBlbGVtZW50cyBpbiBhIFBDb2xsZWN0aW9uLiIiIgogICAgcmV0dXJuIHBjb2xsIHwgVG9wLk9mKG4pCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIFNtYWxsZXN0KHBjb2xsLCBuKToKICAgICIiIk9idGFpbiBhIGxpc3Qgb2YgdGhlIGxlYXN0IE4gZWxlbWVudHMgaW4gYSBQQ29sbGVjdGlvbi4iIiIKICAgIHJldHVybiBwY29sbCB8IFRvcC5PZihuLCByZXZlcnNlPVRydWUpCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIExhcmdlc3RQZXJLZXkocGNvbGwsIG4pOgogICAgIiIiSWRlbnRpZmllcyB0aGUgTiBncmVhdGVzdCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBrZXkuIiIiCiAgICByZXR1cm4gcGNvbGwgfCBUb3AuUGVyS2V5KG4pCgogIEBzdGF0aWNtZXRob2QKICBAcHRyYW5zZm9ybS5wdHJhbnNmb3JtX2ZuCiAgZGVmIFNtYWxsZXN0UGVyS2V5KHBjb2xsLCBuLCByZXZlcnNlPVRydWUpOgogICAgIiIiSWRlbnRpZmllcyB0aGUgTiBsZWFzdCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggZWFjaCBrZXkuIiIiCiAgICByZXR1cm4gcGNvbGwgfCBUb3AuUGVyS2V5KG4sIHJldmVyc2U9VHJ1ZSkKCgpAd2l0aF9pbnB1dF90eXBlcyhUKQpAd2l0aF9vdXRwdXRfdHlwZXMoVHVwbGVbTm9uZSwgTGlzdFtUXV0pCmNsYXNzIF9Ub3BQZXJCdW5kbGUoY29yZS5Eb0ZuKToKICBkZWYgX19pbml0X18oc2VsZiwgbiwgbGVzc190aGFuLCBrZXkpOgogICAgc2VsZi5fbiA9IG4KICAgIHNlbGYuX2xlc3NfdGhhbiA9IE5vbmUgaWYgbGVzc190aGFuIGlzIG9wZXJhdG9yLmxlIGVsc2UgbGVzc190aGFuCiAgICBzZWxmLl9rZXkgPSBrZXkKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX2hlYXAgPSBbXQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50KToKICAgIGlmIHNlbGYuX2xlc3NfdGhhbiBvciBzZWxmLl9rZXk6CiAgICAgIGVsZW1lbnQgPSBjeV9jb21iaW5lcnMuQ29tcGFyYWJsZVZhbHVlKAogICAgICAgICAgZWxlbWVudCwgc2VsZi5fbGVzc190aGFuLCBzZWxmLl9rZXkpCiAgICBpZiBsZW4oc2VsZi5faGVhcCkgPCBzZWxmLl9uOgogICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9oZWFwLCBlbGVtZW50KQogICAgZWxzZToKICAgICAgaGVhcHEuaGVhcHB1c2hwb3Aoc2VsZi5faGVhcCwgZWxlbWVudCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICAjIFRob3VnaCBzb3J0aW5nIGhlcmUgcmVzdWx0cyBpbiBtb3JlIHRvdGFsIHdvcmssIHRoaXMgYWxsb3dzIHVzIHRvCiAgICAjIHNraXAgbW9zdCBlbGVtZW50cyBpbiB0aGUgcmVkdWNlci4KICAgICMgRXNzZW50aWFsbHksIGdpdmVuIHMgbWFwIGJ1bmRsZXMsIHdlIGFyZSB0cmFkaW5nIGFib3V0IE8oc24pIGNvbXBhcmVzIGluCiAgICAjIHRoZSAoc2luZ2xlKSByZWR1Y2VyIGZvciBPKHNuIGxvZyBuKSBjb21wYXJlcyBhY3Jvc3MgYWxsIG1hcHBlcnMuCiAgICBzZWxmLl9oZWFwLnNvcnQoKQoKICAgICMgVW53cmFwIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gdmlhIHBpY2tsZS4KICAgIGlmIHNlbGYuX2xlc3NfdGhhbiBvciBzZWxmLl9rZXk6CiAgICAgIHlpZWxkIHdpbmRvdy5HbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKAogICAgICAgICAgKE5vbmUsIFt3cmFwcGVyLnZhbHVlIGZvciB3cmFwcGVyIGluIHNlbGYuX2hlYXBdKSkKICAgIGVsc2U6CiAgICAgIHlpZWxkIHdpbmRvdy5HbG9iYWxXaW5kb3dzLndpbmRvd2VkX3ZhbHVlKChOb25lLCBzZWxmLl9oZWFwKSkKCgpAd2l0aF9pbnB1dF90eXBlcyhUdXBsZVtOb25lLCBJdGVyYWJsZVtMaXN0W1RdXV0pCkB3aXRoX291dHB1dF90eXBlcyhMaXN0W1RdKQpjbGFzcyBfTWVyZ2VUb3BQZXJCdW5kbGUoY29yZS5Eb0ZuKToKICBkZWYgX19pbml0X18oc2VsZiwgbiwgbGVzc190aGFuLCBrZXkpOgogICAgc2VsZi5fbiA9IG4KICAgIHNlbGYuX2xlc3NfdGhhbiA9IE5vbmUgaWYgbGVzc190aGFuIGlzIG9wZXJhdG9yLmx0IGVsc2UgbGVzc190aGFuCiAgICBzZWxmLl9rZXkgPSBrZXkKCiAgZGVmIHByb2Nlc3Moc2VsZiwga2V5X2FuZF9idW5kbGVzKToKICAgIF8sIGJ1bmRsZXMgPSBrZXlfYW5kX2J1bmRsZXMKCiAgICBkZWYgcHVzaChocCwgZSk6CiAgICAgIGlmIGxlbihocCkgPCBzZWxmLl9uOgogICAgICAgIGhlYXBxLmhlYXBwdXNoKGhwLCBlKQogICAgICAgIHJldHVybiBGYWxzZQogICAgICBlbGlmIGUgPCBocFswXToKICAgICAgICAjIEJlY2F1c2UgX1RvcFBlckJ1bmRsZSByZXR1cm5zIHNvcnRlZCBsaXN0cywgYWxsIG90aGVyIGVsZW1lbnRzCiAgICAgICAgIyB3aWxsIGFsc28gYmUgc21hbGxlci4KICAgICAgICByZXR1cm4gVHJ1ZQogICAgICBlbHNlOgogICAgICAgIGhlYXBxLmhlYXBwdXNocG9wKGhwLCBlKQogICAgICAgIHJldHVybiBGYWxzZQoKICAgIGlmIHNlbGYuX2xlc3NfdGhhbiBvciBzZWxmLl9rZXk6CiAgICAgIGhlYXBjID0gW10gICMgdHlwZTogTGlzdFtjeV9jb21iaW5lcnMuQ29tcGFyYWJsZVZhbHVlXQogICAgICBmb3IgYnVuZGxlIGluIGJ1bmRsZXM6CiAgICAgICAgaWYgbm90IGhlYXBjOgogICAgICAgICAgaGVhcGMgPSBbCiAgICAgICAgICAgICAgY3lfY29tYmluZXJzLkNvbXBhcmFibGVWYWx1ZShlbGVtZW50LCBzZWxmLl9sZXNzX3RoYW4sIHNlbGYuX2tleSkKICAgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBidW5kbGUKICAgICAgICAgIF0KICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgZm9yIGVsZW1lbnQgaW4gcmV2ZXJzZWQoYnVuZGxlKToKICAgICAgICAgIGlmIHB1c2goaGVhcGMsCiAgICAgICAgICAgICAgICAgIGN5X2NvbWJpbmVycy5Db21wYXJhYmxlVmFsdWUoZWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sZXNzX3RoYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2V5KSk6CiAgICAgICAgICAgIGJyZWFrCiAgICAgIGhlYXBjLnNvcnQoKQogICAgICB5aWVsZCBbd3JhcHBlci52YWx1ZSBmb3Igd3JhcHBlciBpbiByZXZlcnNlZChoZWFwYyldCgogICAgZWxzZToKICAgICAgaGVhcCA9IFtdICAjIHR5cGU6IExpc3RbVF0KICAgICAgZm9yIGJ1bmRsZSBpbiBidW5kbGVzOgogICAgICAgIGlmIG5vdCBoZWFwOgogICAgICAgICAgaGVhcCA9IGJ1bmRsZQogICAgICAgICAgY29udGludWUKICAgICAgICBmb3IgZWxlbWVudCBpbiByZXZlcnNlZChidW5kbGUpOgogICAgICAgICAgaWYgcHVzaChoZWFwLCBlbGVtZW50KToKICAgICAgICAgICAgYnJlYWsKICAgICAgaGVhcC5zb3J0KCkKICAgICAgeWllbGQgaGVhcFs6Oi0xXQoKCkB3aXRoX2lucHV0X3R5cGVzKFQpCkB3aXRoX291dHB1dF90eXBlcyhMaXN0W1RdKQpjbGFzcyBUb3BDb21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkNvbWJpbmVGbiBkb2luZyB0aGUgY29tYmluaW5nIGZvciBhbGwgb2YgdGhlIFRvcCB0cmFuc2Zvcm1zLgoKICBUaGlzIENvbWJpbmVGbiB1c2VzIGEga2V5IG9yIGNvbXBhcmlzb24gb3BlcmF0b3IgdG8gcmFuayB0aGUgZWxlbWVudHMuCgogIEFyZ3M6CiAgICBjb21wYXJlOiAob3B0aW9uYWwpIGFuIGltcGxlbWVudGF0aW9uIG9mICJhIDwgYiIgdGFraW5nIGF0IGxlYXN0IHR3bwogICAgICAgIGFyZ3VtZW50cyAoYSBhbmQgYikuIEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cyBzcGVjaWZpZWQKICAgICAgICBpbiB0aGUgYXBwbHkgY2FsbCBiZWNvbWUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGNvbXBhcmF0b3IuCiAgICBrZXk6IChvcHRpb25hbCkgYSBtYXBwaW5nIG9mIGVsZW1lbnRzIHRvIGEgY29tcGFyYWJsZSBrZXksIHNpbWlsYXIgdG8KICAgICAgICB0aGUga2V5IGFyZ3VtZW50IG9mIFB5dGhvbidzIHNvcnRpbmcgbWV0aG9kcy4KICAgIHJldmVyc2U6IChvcHRpb25hbCkgd2hldGhlciB0byBvcmRlciB0aGluZ3Mgc21hbGxlc3QgdG8gbGFyZ2VzdCwgcmF0aGVyCiAgICAgICAgdGhhbiBsYXJnZXN0IHRvIHNtYWxsZXN0CiAgIiIiCgogICMgVE9ETyhyb2JlcnR3Yik6IEZvciBQeXRob24gMywgcmVtb3ZlIGNvbXBhcmUgYW5kIG9ubHkga2VlcCBrZXkuCiAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIGNvbXBhcmU9Tm9uZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpOgogICAgc2VsZi5fbiA9IG4KCiAgICBpZiBjb21wYXJlIGlzIG9wZXJhdG9yLmx0OgogICAgICBjb21wYXJlID0gTm9uZQogICAgZWxpZiBjb21wYXJlIGlzIG9wZXJhdG9yLmd0OgogICAgICBjb21wYXJlID0gTm9uZQogICAgICByZXZlcnNlID0gbm90IHJldmVyc2UKCiAgICBpZiBjb21wYXJlOgogICAgICBzZWxmLl9jb21wYXJlID0gKCgKICAgICAgICAgIGxhbWJkYSBhLCBiLCAqYXJncywgKiprd2FyZ3M6IG5vdCBjb21wYXJlKGEsIGIsICphcmdzLCAqKmt3YXJncykpCiAgICAgICAgICAgICAgICAgICAgICAgaWYgcmV2ZXJzZSBlbHNlIGNvbXBhcmUpCiAgICBlbHNlOgogICAgICBzZWxmLl9jb21wYXJlID0gb3BlcmF0b3IuZ3QgaWYgcmV2ZXJzZSBlbHNlIG9wZXJhdG9yLmx0CgogICAgc2VsZi5fbGVzc190aGFuID0gTm9uZQogICAgc2VsZi5fa2V5ID0ga2V5CgogIGRlZiBfaHlkcmF0ZWRfaGVhcChzZWxmLCBoZWFwKToKICAgIGlmIGhlYXA6CiAgICAgIGZpcnN0ID0gaGVhcFswXQogICAgICBpZiBpc2luc3RhbmNlKGZpcnN0LCBjeV9jb21iaW5lcnMuQ29tcGFyYWJsZVZhbHVlKToKICAgICAgICBpZiBmaXJzdC5yZXF1aXJlc19oeWRyYXRpb246CiAgICAgICAgICBhc3NlcnQgc2VsZi5fbGVzc190aGFuIGlzIG5vdCBOb25lCiAgICAgICAgICBmb3IgY29tcGFyYWJsZSBpbiBoZWFwOgogICAgICAgICAgICBhc3NlcnQgY29tcGFyYWJsZS5yZXF1aXJlc19oeWRyYXRpb24KICAgICAgICAgICAgY29tcGFyYWJsZS5oeWRyYXRlKHNlbGYuX2xlc3NfdGhhbiwgc2VsZi5fa2V5KQogICAgICAgICAgICBhc3NlcnQgbm90IGNvbXBhcmFibGUucmVxdWlyZXNfaHlkcmF0aW9uCiAgICAgICAgICByZXR1cm4gaGVhcAogICAgICAgIGVsc2U6CiAgICAgICAgICByZXR1cm4gaGVhcAogICAgICBlbHNlOgogICAgICAgIGFzc2VydCBzZWxmLl9sZXNzX3RoYW4gaXMgbm90IE5vbmUKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBjeV9jb21iaW5lcnMuQ29tcGFyYWJsZVZhbHVlKGVsZW1lbnQsIHNlbGYuX2xlc3NfdGhhbiwgc2VsZi5fa2V5KQogICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBoZWFwCiAgICAgICAgXQogICAgZWxzZToKICAgICAgcmV0dXJuIGhlYXAKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7CiAgICAgICAgJ24nOiBzZWxmLl9uLAogICAgICAgICdjb21wYXJlJzogRGlzcGxheURhdGFJdGVtKAogICAgICAgICAgICBzZWxmLl9jb21wYXJlLl9fbmFtZV9fIGlmIGhhc2F0dHIoc2VsZi5fY29tcGFyZSwgJ19fbmFtZV9fJykgZWxzZQogICAgICAgICAgICBzZWxmLl9jb21wYXJlLl9fY2xhc3NfXy5fX25hbWVfXykuZHJvcF9pZl9ub25lKCkKICAgIH0KCiAgIyBUaGUgYWNjdW11bGF0b3IgdHlwZSBpcyBhIHR1cGxlCiAgIyAoYm9vbCwgVW5pb25bTGlzdFtUXSwgTGlzdFtDb21wYXJhYmxlVmFsdWVbVF1dKQogICMgd2hlcmUgdGhlIGJvb2xlYW4gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNlY29uZCBzbG90IGNvbnRhaW5zIGEgTGlzdCBvZiBUCiAgIyAoRmFsc2UpIG9yIExpc3Qgb2YgQ29tcGFyYWJsZVZhbHVlW1RdIChUcnVlKS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBMaXN0CiAgIyBtYWludGFpbnMgaGVhcCBpbnZhcmlhbmNlLiBXaGVuIHRoZSBjb250ZW50cyBvZiB0aGUgTGlzdCBhcmUKICAjIENvbXBhcmFibGVWYWx1ZVtUXSB0aGV5IGVpdGhlciBhbGwgJ3JlcXVpcmVzX2h5ZHJhdGlvbicgb3Igbm9uZSBkby4KICAjIFRoaXMgYWNjdW11bGF0b3IgcmVwcmVzZW50YXRpb24gYWxsb3dzIHVzIHRvIG1pbmltaXplIHRoZSBkYXRhIGVuY29kaW5nCiAgIyBvdmVyaGVhZHMuIENyZWF0aW9uIG9mIENvbXBhcmFibGVWYWx1ZXMgaXMgZWxpZGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zCiAgIyB3aGVuIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGNvbXBsaWNhdGVkIGNvbXBhcmlzb24gZnVuY3Rpb25zLgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHJldHVybiAoRmFsc2UsIFtdKQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpOgogICAgIyBDYWNoaW5nIHRvIGF2b2lkIHBheWluZyB0aGUgcHJpY2Ugb2YgdmFyaWFkaWMgZXhwYW5zaW9uIG9mIGFyZ3MgLyBrd2FyZ3MKICAgICMgd2hlbiBpdCdzIG5vdCBuZWVkZWQgKGZvciB0aGUgJ2lmJyBjYXNlIGJlbG93KS4KICAgIGlmIHNlbGYuX2xlc3NfdGhhbiBpcyBOb25lOgogICAgICBpZiBhcmdzIG9yIGt3YXJnczoKICAgICAgICBzZWxmLl9sZXNzX3RoYW4gPSBsYW1iZGEgYSwgYjogc2VsZi5fY29tcGFyZShhLCBiLCAqYXJncywgKiprd2FyZ3MpCiAgICAgIGVsc2U6CiAgICAgICAgc2VsZi5fbGVzc190aGFuID0gc2VsZi5fY29tcGFyZQoKICAgIGhvbGRzX2NvbXBhcmFibGVzLCBoZWFwID0gYWNjdW11bGF0b3IKICAgIGlmIHNlbGYuX2xlc3NfdGhhbiBpcyBub3Qgb3BlcmF0b3IubHQgb3Igc2VsZi5fa2V5OgogICAgICBoZWFwID0gc2VsZi5faHlkcmF0ZWRfaGVhcChoZWFwKQogICAgICBob2xkc19jb21wYXJhYmxlcyA9IFRydWUKICAgIGVsc2U6CiAgICAgIGFzc2VydCBub3QgaG9sZHNfY29tcGFyYWJsZXMKCiAgICBjb21wYXJhYmxlID0gKAogICAgICAgIGN5X2NvbWJpbmVycy5Db21wYXJhYmxlVmFsdWUoZWxlbWVudCwgc2VsZi5fbGVzc190aGFuLCBzZWxmLl9rZXkpCiAgICAgICAgaWYgaG9sZHNfY29tcGFyYWJsZXMgZWxzZSBlbGVtZW50KQoKICAgIGlmIGxlbihoZWFwKSA8IHNlbGYuX246CiAgICAgIGhlYXBxLmhlYXBwdXNoKGhlYXAsIGNvbXBhcmFibGUpCiAgICBlbHNlOgogICAgICBoZWFwcS5oZWFwcHVzaHBvcChoZWFwLCBjb21wYXJhYmxlKQogICAgcmV0dXJuIChob2xkc19jb21wYXJhYmxlcywgaGVhcCkKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMsICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBhcmdzIG9yIGt3YXJnczoKICAgICAgc2VsZi5fbGVzc190aGFuID0gbGFtYmRhIGEsIGI6IHNlbGYuX2NvbXBhcmUoYSwgYiwgKmFyZ3MsICoqa3dhcmdzKQogICAgICBhZGRfaW5wdXQgPSBsYW1iZGEgYWNjdW11bGF0b3IsIGVsZW1lbnQ6IHNlbGYuYWRkX2lucHV0KAogICAgICAgICAgYWNjdW11bGF0b3IsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncykKICAgIGVsc2U6CiAgICAgIHNlbGYuX2xlc3NfdGhhbiA9IHNlbGYuX2NvbXBhcmUKICAgICAgYWRkX2lucHV0ID0gc2VsZi5hZGRfaW5wdXQKCiAgICByZXN1bHRfaGVhcCA9IE5vbmUKICAgIGhvbGRzX2NvbXBhcmFibGVzID0gTm9uZQogICAgZm9yIGFjY3VtdWxhdG9yIGluIGFjY3VtdWxhdG9yczoKICAgICAgaG9sZHNfY29tcGFyYWJsZXMsIGhlYXAgPSBhY2N1bXVsYXRvcgogICAgICBpZiBzZWxmLl9sZXNzX3RoYW4gaXMgbm90IG9wZXJhdG9yLmx0IG9yIHNlbGYuX2tleToKICAgICAgICBoZWFwID0gc2VsZi5faHlkcmF0ZWRfaGVhcChoZWFwKQogICAgICAgIGhvbGRzX2NvbXBhcmFibGVzID0gVHJ1ZQogICAgICBlbHNlOgogICAgICAgIGFzc2VydCBub3QgaG9sZHNfY29tcGFyYWJsZXMKCiAgICAgIGlmIHJlc3VsdF9oZWFwIGlzIE5vbmU6CiAgICAgICAgcmVzdWx0X2hlYXAgPSBoZWFwCiAgICAgIGVsc2U6CiAgICAgICAgZm9yIGNvbXBhcmFibGUgaW4gaGVhcDoKICAgICAgICAgIF8sIHJlc3VsdF9oZWFwID0gYWRkX2lucHV0KAogICAgICAgICAgICAgIChob2xkc19jb21wYXJhYmxlcywgcmVzdWx0X2hlYXApLAogICAgICAgICAgICAgIGNvbXBhcmFibGUudmFsdWUgaWYgaG9sZHNfY29tcGFyYWJsZXMgZWxzZSBjb21wYXJhYmxlKQoKICAgIGFzc2VydCByZXN1bHRfaGVhcCBpcyBub3QgTm9uZSBhbmQgaG9sZHNfY29tcGFyYWJsZXMgaXMgbm90IE5vbmUKICAgIHJldHVybiAoaG9sZHNfY29tcGFyYWJsZXMsIHJlc3VsdF9oZWFwKQoKICBkZWYgY29tcGFjdChzZWxmLCBhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGhvbGRzX2NvbXBhcmFibGVzLCBoZWFwID0gYWNjdW11bGF0b3IKICAgICMgVW53cmFwIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gdmlhIHBpY2tsZS4KICAgIGlmIGhvbGRzX2NvbXBhcmFibGVzOgogICAgICByZXR1cm4gKEZhbHNlLCBbY29tcGFyYWJsZS52YWx1ZSBmb3IgY29tcGFyYWJsZSBpbiBoZWFwXSkKICAgIGVsc2U6CiAgICAgIHJldHVybiBhY2N1bXVsYXRvcgoKICBkZWYgZXh0cmFjdF9vdXRwdXQoc2VsZiwgYWNjdW11bGF0b3IsICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBhcmdzIG9yIGt3YXJnczoKICAgICAgc2VsZi5fbGVzc190aGFuID0gbGFtYmRhIGEsIGI6IHNlbGYuX2NvbXBhcmUoYSwgYiwgKmFyZ3MsICoqa3dhcmdzKQogICAgZWxzZToKICAgICAgc2VsZi5fbGVzc190aGFuID0gc2VsZi5fY29tcGFyZQoKICAgIGhvbGRzX2NvbXBhcmFibGVzLCBoZWFwID0gYWNjdW11bGF0b3IKICAgIGlmIHNlbGYuX2xlc3NfdGhhbiBpcyBub3Qgb3BlcmF0b3IubHQgb3Igc2VsZi5fa2V5OgogICAgICBpZiBub3QgaG9sZHNfY29tcGFyYWJsZXM6CiAgICAgICAgaGVhcCA9IHNlbGYuX2h5ZHJhdGVkX2hlYXAoaGVhcCkKICAgICAgICBob2xkc19jb21wYXJhYmxlcyA9IFRydWUKICAgIGVsc2U6CiAgICAgIGFzc2VydCBub3QgaG9sZHNfY29tcGFyYWJsZXMKCiAgICBhc3NlcnQgbGVuKGhlYXApIDw9IHNlbGYuX24KICAgIGhlYXAuc29ydChyZXZlcnNlPVRydWUpCiAgICByZXR1cm4gWwogICAgICAgIGNvbXBhcmFibGUudmFsdWUgaWYgaG9sZHNfY29tcGFyYWJsZXMgZWxzZSBjb21wYXJhYmxlCiAgICAgICAgZm9yIGNvbXBhcmFibGUgaW4gaGVhcAogICAgXQoKCmNsYXNzIExhcmdlc3QoVG9wQ29tYmluZUZuKToKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiAnTGFyZ2VzdCglcyknICUgc2VsZi5fbgoKCmNsYXNzIFNtYWxsZXN0KFRvcENvbWJpbmVGbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgc3VwZXIoU21hbGxlc3QsIHNlbGYpLl9faW5pdF9fKG4sIHJldmVyc2U9VHJ1ZSkKCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICByZXR1cm4gJ1NtYWxsZXN0KCVzKScgJSBzZWxmLl9uCgoKY2xhc3MgU2FtcGxlKG9iamVjdCk6CiAgIiIiQ29tYmluZXJzIGZvciBzYW1wbGluZyBuIGVsZW1lbnRzIHdpdGhvdXQgcmVwbGFjZW1lbnQuIiIiCgogICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtYXJndW1lbnQKCiAgY2xhc3MgRml4ZWRTaXplR2xvYmFsbHkocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICIiIlNhbXBsZSBuIGVsZW1lbnRzIGZyb20gdGhlIGlucHV0IFBDb2xsZWN0aW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgbik6CiAgICAgIHNlbGYuX24gPSBuCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IGNvcmUuQ29tYmluZUdsb2JhbGx5KFNhbXBsZUNvbWJpbmVGbihzZWxmLl9uKSkKCiAgICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgICByZXR1cm4geyduJzogc2VsZi5fbn0KCiAgICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgICAgcmV0dXJuICdGaXhlZFNpemVHbG9iYWxseSglZCknICUgc2VsZi5fbgoKICBjbGFzcyBGaXhlZFNpemVQZXJLZXkocHRyYW5zZm9ybS5QVHJhbnNmb3JtKToKICAgICIiIlNhbXBsZSBuIGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGtleSB3aXRob3V0IHJlcGxhY2VtZW50LiIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgogICAgICBzZWxmLl9uID0gbgoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICByZXR1cm4gcGNvbGwgfCBjb3JlLkNvbWJpbmVQZXJLZXkoU2FtcGxlQ29tYmluZUZuKHNlbGYuX24pKQoKICAgIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICAgIHJldHVybiB7J24nOiBzZWxmLl9ufQoKICAgIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgICByZXR1cm4gJ0ZpeGVkU2l6ZVBlcktleSglZCknICUgc2VsZi5fbgoKCkB3aXRoX2lucHV0X3R5cGVzKFQpCkB3aXRoX291dHB1dF90eXBlcyhMaXN0W1RdKQpjbGFzcyBTYW1wbGVDb21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkNvbWJpbmVGbiBmb3IgYWxsIFNhbXBsZSB0cmFuc2Zvcm1zLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKICAgIHN1cGVyKFNhbXBsZUNvbWJpbmVGbiwgc2VsZikuX19pbml0X18oKQogICAgIyBNb3N0IG9mIHRoaXMgY29tYmluZXIncyB3b3JrIGlzIGRvbmUgYnkgYSBUb3BDb21iaW5lRm4uIFdlIGNvdWxkIGp1c3QKICAgICMgc3ViY2xhc3MgVG9wQ29tYmluZUZuIHRvIG1ha2UgdGhpcyBjbGFzcywgYnV0IHNpbmNlIHNhbXBsaW5nIGlzIG5vdAogICAgIyByZWFsbHkgYSBraW5kIG9mIFRvcCBvcGVyYXRpb24sIHdlIHVzZSBhIFRvcENvbWJpbmVGbiBpbnN0YW5jZSBhcyBhCiAgICAjIGhlbHBlciBpbnN0ZWFkLgogICAgc2VsZi5fdG9wX2NvbWJpbmVyID0gVG9wQ29tYmluZUZuKG4pCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gc2VsZi5fdG9wX2NvbWJpbmVyLmNyZWF0ZV9hY2N1bXVsYXRvcigpCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgaGVhcCwgZWxlbWVudCk6CiAgICAjIEJlZm9yZSBwYXNzaW5nIGVsZW1lbnRzIHRvIHRoZSBUb3AgY29tYmluZXIsIHdlIHBhaXIgdGhlbSB3aXRoIHJhbmRvbQogICAgIyBudW1iZXJzLiBUaGUgZWxlbWVudHMgd2l0aCB0aGUgbiBsYXJnZXN0IHJhbmRvbSBudW1iZXIgImtleXMiIHdpbGwgYmUKICAgICMgc2VsZWN0ZWQgZm9yIHRoZSBvdXRwdXQuCiAgICByZXR1cm4gc2VsZi5fdG9wX2NvbWJpbmVyLmFkZF9pbnB1dChoZWFwLCAocmFuZG9tLnJhbmRvbSgpLCBlbGVtZW50KSkKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBoZWFwcyk6CiAgICByZXR1cm4gc2VsZi5fdG9wX2NvbWJpbmVyLm1lcmdlX2FjY3VtdWxhdG9ycyhoZWFwcykKCiAgZGVmIGNvbXBhY3Qoc2VsZiwgaGVhcCk6CiAgICByZXR1cm4gc2VsZi5fdG9wX2NvbWJpbmVyLmNvbXBhY3QoaGVhcCkKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGhlYXApOgogICAgIyBIZXJlIHdlIHN0cmlwIG9mZiB0aGUgcmFuZG9tIG51bWJlciBrZXlzIHdlIGFkZGVkIGluIGFkZF9pbnB1dC4KICAgIHJldHVybiBbZSBmb3IgXywgZSBpbiBzZWxmLl90b3BfY29tYmluZXIuZXh0cmFjdF9vdXRwdXQoaGVhcCldCgoKY2xhc3MgX1R1cGxlQ29tYmluZUZuQmFzZShjb3JlLkNvbWJpbmVGbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsICpjb21iaW5lcnMpOgogICAgc2VsZi5fY29tYmluZXJzID0gW2NvcmUuQ29tYmluZUZuLm1heWJlX2Zyb21fY2FsbGFibGUoYykgZm9yIGMgaW4gY29tYmluZXJzXQogICAgc2VsZi5fbmFtZWRfY29tYmluZXJzID0gY29tYmluZXJzCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICBjb21iaW5lcnMgPSBbCiAgICAgICAgYy5fX25hbWVfXyBpZiBoYXNhdHRyKGMsICdfX25hbWVfXycpIGVsc2UgYy5fX2NsYXNzX18uX19uYW1lX18KICAgICAgICBmb3IgYyBpbiBzZWxmLl9uYW1lZF9jb21iaW5lcnMKICAgIF0KICAgIHJldHVybiB7J2NvbWJpbmVycyc6IHN0cihjb21iaW5lcnMpfQoKICBkZWYgY3JlYXRlX2FjY3VtdWxhdG9yKHNlbGYpOgogICAgcmV0dXJuIFtjLmNyZWF0ZV9hY2N1bXVsYXRvcigpIGZvciBjIGluIHNlbGYuX2NvbWJpbmVyc10KCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMpOgogICAgcmV0dXJuIFsKICAgICAgICBjLm1lcmdlX2FjY3VtdWxhdG9ycyhhKSBmb3IgYywKICAgICAgICBhIGluIHppcChzZWxmLl9jb21iaW5lcnMsIHppcCgqYWNjdW11bGF0b3JzKSkKICAgIF0KCiAgZGVmIGNvbXBhY3Qoc2VsZiwgYWNjdW11bGF0b3IpOgogICAgcmV0dXJuIFtjLmNvbXBhY3QoYSkgZm9yIGMsIGEgaW4gemlwKHNlbGYuX2NvbWJpbmVycywgYWNjdW11bGF0b3IpXQoKICBkZWYgZXh0cmFjdF9vdXRwdXQoc2VsZiwgYWNjdW11bGF0b3IpOgogICAgcmV0dXJuIHR1cGxlKAogICAgICAgIFtjLmV4dHJhY3Rfb3V0cHV0KGEpIGZvciBjLCBhIGluIHppcChzZWxmLl9jb21iaW5lcnMsIGFjY3VtdWxhdG9yKV0pCgoKY2xhc3MgVHVwbGVDb21iaW5lRm4oX1R1cGxlQ29tYmluZUZuQmFzZSk6CiAgIiIiQSBjb21iaW5lciBmb3IgY29tYmluaW5nIHR1cGxlcyB2aWEgYSB0dXBsZSBvZiBjb21iaW5lcnMuCgogIFRha2VzIGFzIGlucHV0IGEgdHVwbGUgb2YgTiBDb21iaW5lRm5zIGFuZCBjb21iaW5lcyBOLXR1cGxlcyBieQogIGNvbWJpbmluZyB0aGUgay10aCBlbGVtZW50IG9mIGVhY2ggdHVwbGUgd2l0aCB0aGUgay10aCBDb21iaW5lRm4sCiAgb3V0cHV0dGluZyBhIG5ldyBOLXR1cGxlIG9mIGNvbWJpbmVkIHZhbHVlcy4KICAiIiIKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIHJldHVybiBbCiAgICAgICAgYy5hZGRfaW5wdXQoYSwgZSkgZm9yIGMsCiAgICAgICAgYSwKICAgICAgICBlIGluIHppcChzZWxmLl9jb21iaW5lcnMsIGFjY3VtdWxhdG9yLCBlbGVtZW50KQogICAgXQoKICBkZWYgd2l0aF9jb21tb25faW5wdXQoc2VsZik6CiAgICByZXR1cm4gU2luZ2xlSW5wdXRUdXBsZUNvbWJpbmVGbigqc2VsZi5fY29tYmluZXJzKQoKCmNsYXNzIFNpbmdsZUlucHV0VHVwbGVDb21iaW5lRm4oX1R1cGxlQ29tYmluZUZuQmFzZSk6CiAgIiIiQSBjb21iaW5lciBmb3IgY29tYmluaW5nIGEgc2luZ2xlIHZhbHVlIHZpYSBhIHR1cGxlIG9mIGNvbWJpbmVycy4KCiAgVGFrZXMgYXMgaW5wdXQgYSB0dXBsZSBvZiBOIENvbWJpbmVGbnMgYW5kIGNvbWJpbmVzIGVsZW1lbnRzIGJ5CiAgYXBwbHlpbmcgZWFjaCBDb21iaW5lRm4gdG8gZWFjaCBpbnB1dCwgcHJvZHVjaW5nIGFuIE4tdHVwbGUgb2YKICB0aGUgb3V0cHV0cyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggb2YgdGhlIE4gQ29tYmluZUZuJ3Mgb3V0cHV0cy4KICAiIiIKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIHJldHVybiBbCiAgICAgICAgYy5hZGRfaW5wdXQoYSwgZWxlbWVudCkgZm9yIGMsIGEgaW4gemlwKHNlbGYuX2NvbWJpbmVycywgYWNjdW11bGF0b3IpCiAgICBdCgoKY2xhc3MgVG9MaXN0KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgIiIiQSBnbG9iYWwgQ29tYmluZUZuIHRoYXQgY29uZGVuc2VzIGEgUENvbGxlY3Rpb24gaW50byBhIHNpbmdsZSBsaXN0LiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBsYWJlbD0nVG9MaXN0Jyk6ICAjIHB5bGludDogZGlzYWJsZT11c2VsZXNzLXN1cGVyLWRlbGVnYXRpb24KICAgIHN1cGVyKFRvTGlzdCwgc2VsZikuX19pbml0X18obGFiZWwpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgc2VsZi5sYWJlbCA+PiBjb3JlLkNvbWJpbmVHbG9iYWxseShUb0xpc3RDb21iaW5lRm4oKSkKCgpAd2l0aF9pbnB1dF90eXBlcyhUKQpAd2l0aF9vdXRwdXRfdHlwZXMoTGlzdFtUXSkKY2xhc3MgVG9MaXN0Q29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZm9yIHRvX2xpc3QuIiIiCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmKToKICAgIHJldHVybiBbXQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIGFjY3VtdWxhdG9yLmFwcGVuZChlbGVtZW50KQogICAgcmV0dXJuIGFjY3VtdWxhdG9yCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHJldHVybiBzdW0oYWNjdW11bGF0b3JzLCBbXSkKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yKToKICAgIHJldHVybiBhY2N1bXVsYXRvcgoKCmNsYXNzIFRvRGljdChwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICIiIkEgZ2xvYmFsIENvbWJpbmVGbiB0aGF0IGNvbmRlbnNlcyBhIFBDb2xsZWN0aW9uIGludG8gYSBzaW5nbGUgZGljdC4KCiAgUENvbGxlY3Rpb25zIHNob3VsZCBjb25zaXN0IG9mIDItdHVwbGVzLCBub3Rpb25hbGx5IChrZXksIHZhbHVlKSBwYWlycy4KICBJZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBrZXksIG9ubHkgb25lIG9mIHRoZSB2YWx1ZXMKICB3aWxsIGJlIHByZXNlbnQgaW4gdGhlIHJlc3VsdGluZyBkaWN0LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBsYWJlbD0nVG9EaWN0Jyk6ICAjIHB5bGludDogZGlzYWJsZT11c2VsZXNzLXN1cGVyLWRlbGVnYXRpb24KICAgIHN1cGVyKFRvRGljdCwgc2VsZikuX19pbml0X18obGFiZWwpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgc2VsZi5sYWJlbCA+PiBjb3JlLkNvbWJpbmVHbG9iYWxseShUb0RpY3RDb21iaW5lRm4oKSkKCgpAd2l0aF9pbnB1dF90eXBlcyhUdXBsZVtLLCBWXSkKQHdpdGhfb3V0cHV0X3R5cGVzKERpY3RbSywgVl0pCmNsYXNzIFRvRGljdENvbWJpbmVGbihjb3JlLkNvbWJpbmVGbik6CiAgIiIiQ29tYmluZUZuIGZvciB0b19kaWN0LiIiIgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gZGljdCgpCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnQpOgogICAga2V5LCB2YWx1ZSA9IGVsZW1lbnQKICAgIGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZQogICAgcmV0dXJuIGFjY3VtdWxhdG9yCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHJlc3VsdCA9IGRpY3QoKQogICAgZm9yIGEgaW4gYWNjdW11bGF0b3JzOgogICAgICByZXN1bHQudXBkYXRlKGEpCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gYWNjdW11bGF0b3IKCgpjbGFzcyBUb1NldChwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICIiIkEgZ2xvYmFsIENvbWJpbmVGbiB0aGF0IGNvbmRlbnNlcyBhIFBDb2xsZWN0aW9uIGludG8gYSBzZXQuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsPSdUb1NldCcpOiAgIyBweWxpbnQ6IGRpc2FibGU9dXNlbGVzcy1zdXBlci1kZWxlZ2F0aW9uCiAgICBzdXBlcihUb1NldCwgc2VsZikuX19pbml0X18obGFiZWwpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgcmV0dXJuIHBjb2xsIHwgc2VsZi5sYWJlbCA+PiBjb3JlLkNvbWJpbmVHbG9iYWxseShUb1NldENvbWJpbmVGbigpKQoKCkB3aXRoX2lucHV0X3R5cGVzKFQpCkB3aXRoX291dHB1dF90eXBlcyhTZXRbVF0pCmNsYXNzIFRvU2V0Q29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJDb21iaW5lRm4gZm9yIFRvU2V0LiIiIgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gc2V0KCkKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCk6CiAgICBhY2N1bXVsYXRvci5hZGQoZWxlbWVudCkKICAgIHJldHVybiBhY2N1bXVsYXRvcgoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycyk6CiAgICByZXR1cm4gc2V0LnVuaW9uKCphY2N1bXVsYXRvcnMpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gYWNjdW11bGF0b3IKCgpjbGFzcyBfQ3VycmllZEZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJXcmFwcGVkIENvbWJpbmVGbiB3aXRoIGV4dHJhIGFyZ3VtZW50cy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgZm4sIGFyZ3MsIGt3YXJncyk6CiAgICBzZWxmLmZuID0gZm4KICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZik6CiAgICByZXR1cm4gc2VsZi5mbi5jcmVhdGVfYWNjdW11bGF0b3IoKnNlbGYuYXJncywgKipzZWxmLmt3YXJncykKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCk6CiAgICByZXR1cm4gc2VsZi5mbi5hZGRfaW5wdXQoYWNjdW11bGF0b3IsIGVsZW1lbnQsICpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHJldHVybiBzZWxmLmZuLm1lcmdlX2FjY3VtdWxhdG9ycyhhY2N1bXVsYXRvcnMsICpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCgogIGRlZiBjb21wYWN0KHNlbGYsIGFjY3VtdWxhdG9yKToKICAgIHJldHVybiBzZWxmLmZuLmNvbXBhY3QoYWNjdW11bGF0b3IsICpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvcik6CiAgICByZXR1cm4gc2VsZi5mbi5leHRyYWN0X291dHB1dChhY2N1bXVsYXRvciwgKnNlbGYuYXJncywgKipzZWxmLmt3YXJncykKCiAgZGVmIGFwcGx5KHNlbGYsIGVsZW1lbnRzKToKICAgIHJldHVybiBzZWxmLmZuLmFwcGx5KGVsZW1lbnRzLCAqc2VsZi5hcmdzLCAqKnNlbGYua3dhcmdzKQoKCmRlZiBjdXJyeV9jb21iaW5lX2ZuKGZuLCBhcmdzLCBrd2FyZ3MpOgogIGlmIG5vdCBhcmdzIGFuZCBub3Qga3dhcmdzOgogICAgcmV0dXJuIGZuCiAgZWxzZToKICAgIHJldHVybiBfQ3VycmllZEZuKGZuLCBhcmdzLCBrd2FyZ3MpCgoKY2xhc3MgUGhhc2VkQ29tYmluZUZuRXhlY3V0b3Iob2JqZWN0KToKICAiIiJFeGVjdXRvciBmb3IgcGhhc2VzIG9mIGNvbWJpbmUgb3BlcmF0aW9ucy4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgcGhhc2UsIGZuLCBhcmdzLCBrd2FyZ3MpOgoKICAgIHNlbGYuY29tYmluZV9mbiA9IGN1cnJ5X2NvbWJpbmVfZm4oZm4sIGFyZ3MsIGt3YXJncykKCiAgICBpZiBwaGFzZSA9PSAnYWxsJzoKICAgICAgc2VsZi5hcHBseSA9IHNlbGYuZnVsbF9jb21iaW5lCiAgICBlbGlmIHBoYXNlID09ICdhZGQnOgogICAgICBzZWxmLmFwcGx5ID0gc2VsZi5hZGRfb25seQogICAgZWxpZiBwaGFzZSA9PSAnbWVyZ2UnOgogICAgICBzZWxmLmFwcGx5ID0gc2VsZi5tZXJnZV9vbmx5CiAgICBlbGlmIHBoYXNlID09ICdleHRyYWN0JzoKICAgICAgc2VsZi5hcHBseSA9IHNlbGYuZXh0cmFjdF9vbmx5CiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmV4cGVjdGVkIHBoYXNlOiAlcycgJSBwaGFzZSkKCiAgZGVmIGZ1bGxfY29tYmluZShzZWxmLCBlbGVtZW50cyk6CiAgICByZXR1cm4gc2VsZi5jb21iaW5lX2ZuLmFwcGx5KGVsZW1lbnRzKQoKICBkZWYgYWRkX29ubHkoc2VsZiwgZWxlbWVudHMpOgogICAgcmV0dXJuIHNlbGYuY29tYmluZV9mbi5hZGRfaW5wdXRzKAogICAgICAgIHNlbGYuY29tYmluZV9mbi5jcmVhdGVfYWNjdW11bGF0b3IoKSwgZWxlbWVudHMpCgogIGRlZiBtZXJnZV9vbmx5KHNlbGYsIGFjY3VtdWxhdG9ycyk6CiAgICByZXR1cm4gc2VsZi5jb21iaW5lX2ZuLm1lcmdlX2FjY3VtdWxhdG9ycyhhY2N1bXVsYXRvcnMpCgogIGRlZiBleHRyYWN0X29ubHkoc2VsZiwgYWNjdW11bGF0b3IpOgogICAgcmV0dXJuIHNlbGYuY29tYmluZV9mbi5leHRyYWN0X291dHB1dChhY2N1bXVsYXRvcikKCgpjbGFzcyBMYXRlc3Qob2JqZWN0KToKICAiIiJDb21iaW5lcnMgZm9yIGNvbXB1dGluZyB0aGUgbGF0ZXN0IGVsZW1lbnQiIiIKICBAd2l0aF9pbnB1dF90eXBlcyhUKQogIEB3aXRoX291dHB1dF90eXBlcyhUKQogIGNsYXNzIEdsb2JhbGx5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJDb21wdXRlIHRoZSBlbGVtZW50IHdpdGggdGhlIGxhdGVzdCB0aW1lc3RhbXAgZnJvbSBhCiAgICBQQ29sbGVjdGlvbi4iIiIKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBhZGRfdGltZXN0YW1wKGVsZW1lbnQsIHRpbWVzdGFtcD1jb3JlLkRvRm4uVGltZXN0YW1wUGFyYW0pOgogICAgICByZXR1cm4gWyhlbGVtZW50LCB0aW1lc3RhbXApXQoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICByZXR1cm4gKAogICAgICAgICAgcGNvbGwKICAgICAgICAgIHwgY29yZS5QYXJEbyhzZWxmLmFkZF90aW1lc3RhbXApLndpdGhfb3V0cHV0X3R5cGVzKAogICAgICAgICAgICAgIFR1cGxlW1QsIFRpbWVzdGFtcFR5cGVdKSAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAgICAgICAgIHwgY29yZS5Db21iaW5lR2xvYmFsbHkoTGF0ZXN0Q29tYmluZUZuKCkpKQoKICBAd2l0aF9pbnB1dF90eXBlcyhUdXBsZVtLLCBWXSkKICBAd2l0aF9vdXRwdXRfdHlwZXMoVHVwbGVbSywgVl0pCiAgY2xhc3MgUGVyS2V5KHB0cmFuc2Zvcm0uUFRyYW5zZm9ybSk6CiAgICAiIiJDb21wdXRlIGVsZW1lbnRzIHdpdGggdGhlIGxhdGVzdCB0aW1lc3RhbXAgZm9yIGVhY2gga2V5CiAgICBmcm9tIGEga2V5ZWQgUENvbGxlY3Rpb24iIiIKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBhZGRfdGltZXN0YW1wKGVsZW1lbnQsIHRpbWVzdGFtcD1jb3JlLkRvRm4uVGltZXN0YW1wUGFyYW0pOgogICAgICBrZXksIHZhbHVlID0gZWxlbWVudAogICAgICByZXR1cm4gWyhrZXksICh2YWx1ZSwgdGltZXN0YW1wKSldCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiAoCiAgICAgICAgICBwY29sbAogICAgICAgICAgfCBjb3JlLlBhckRvKHNlbGYuYWRkX3RpbWVzdGFtcCkud2l0aF9vdXRwdXRfdHlwZXMoCiAgICAgICAgICAgICAgVHVwbGVbSywgVHVwbGVbVCwgVGltZXN0YW1wVHlwZV1dKSAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAgICAgICAgIHwgY29yZS5Db21iaW5lUGVyS2V5KExhdGVzdENvbWJpbmVGbigpKSkKCgpAd2l0aF9pbnB1dF90eXBlcyhUdXBsZVtULCBUaW1lc3RhbXBUeXBlXSkgICMgdHlwZTogaWdub3JlW21pc2NdCkB3aXRoX291dHB1dF90eXBlcyhUKQpjbGFzcyBMYXRlc3RDb21iaW5lRm4oY29yZS5Db21iaW5lRm4pOgogICIiIkNvbWJpbmVGbiB0byBnZXQgdGhlIGVsZW1lbnQgd2l0aCB0aGUgbGF0ZXN0IHRpbWVzdGFtcAogIGZyb20gYSBQQ29sbGVjdGlvbi4iIiIKICBkZWYgY3JlYXRlX2FjY3VtdWxhdG9yKHNlbGYpOgogICAgcmV0dXJuIChOb25lLCB3aW5kb3cuTUlOX1RJTUVTVEFNUCkKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCk6CiAgICBpZiBhY2N1bXVsYXRvclsxXSA+IGVsZW1lbnRbMV06CiAgICAgIHJldHVybiBhY2N1bXVsYXRvcgogICAgZWxzZToKICAgICAgcmV0dXJuIGVsZW1lbnQKCiAgZGVmIG1lcmdlX2FjY3VtdWxhdG9ycyhzZWxmLCBhY2N1bXVsYXRvcnMpOgogICAgcmVzdWx0ID0gc2VsZi5jcmVhdGVfYWNjdW11bGF0b3IoKQogICAgZm9yIGFjY3VtdWxhdG9yIGluIGFjY3VtdWxhdG9yczoKICAgICAgcmVzdWx0ID0gc2VsZi5hZGRfaW5wdXQocmVzdWx0LCBhY2N1bXVsYXRvcikKICAgIHJldHVybiByZXN1bHQKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yKToKICAgIHJldHVybiBhY2N1bXVsYXRvclswXQqUfZQojBRNZWFuLkdsb2JhbGx5LmV4cGFuZJRqVjEBAEtFS0aHlIwNTWVhbi5HbG9iYWxseZRqXTEBAEtDS0aHlIwSTWVhbi5QZXJLZXkuZXhwYW5klGpWMQEAS0pLS4eUjAtNZWFuLlBlcktleZRqXTEBAEtIS0uHlIwETWVhbpRqXTEBAEtBS0uHlIwgTWVhbkNvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3KUalYxAQBLVEtVh5SMF01lYW5Db21iaW5lRm4uYWRkX2lucHV0lGpWMQEAS1dLWYeUjCBNZWFuQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc5RqVjEBAEtbS12HlIwcTWVhbkNvbWJpbmVGbi5leHRyYWN0X291dHB1dJRqVjEBAEtfS2OHlIwcTWVhbkNvbWJpbmVGbi5mb3JfaW5wdXRfdHlwZZRqVjEBAEtlS2qHlIwNTWVhbkNvbWJpbmVGbpRqXTEBAEtQS2qHlIwVQ291bnQuR2xvYmFsbHkuZXhwYW5klGpWMQEAS3FLcoeUjA5Db3VudC5HbG9iYWxseZRqXTEBAEtvS3KHlIwTQ291bnQuUGVyS2V5LmV4cGFuZJRqVjEBAEt2S3eHlIwMQ291bnQuUGVyS2V5lGpdMQEAS3RLd4eUjBdDb3VudC5QZXJFbGVtZW50LmV4cGFuZJRqVjEBAEt7S4OHlIwQQ291bnQuUGVyRWxlbWVudJRqXTEBAEt5S4OHlIwFQ291bnSUal0xAQBLbUuDh5SMIUNvdW50Q29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcpRqVjEBAEuKS4uHlIwYQ291bnRDb21iaW5lRm4uYWRkX2lucHV0lGpWMQEAS41LjoeUjBlDb3VudENvbWJpbmVGbi5hZGRfaW5wdXRzlGpWMQEAS5BLkYeUjCFDb3VudENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnOUalYxAQBLk0uUh5SMHUNvdW50Q29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0lGpWMQEAS5ZLl4eUjA5Db3VudENvbWJpbmVGbpRqXTEBAEuGS5eHlIwTVG9wLk9mLl9weTJfX2luaXRfX5RqVjEBAEumS8CHlIwTVG9wLk9mLl9weTNfX2luaXRfX5RqVjEBAEvCS9GHlIwUVG9wLk9mLmRlZmF1bHRfbGFiZWyUalYxAQBL20vch5SMDVRvcC5PZi5leHBhbmSUalYxAQBL3kv1h5SMBlRvcC5PZpRqXTEBAEufS/WHlIwXVG9wLlBlcktleS5fcHkyX19pbml0X1+UalYxAQBL/00ZAYeUjBdUb3AuUGVyS2V5Ll9weTNfX2luaXRfX5RqVjEBAE0bAU0qAYeUjBhUb3AuUGVyS2V5LmRlZmF1bHRfbGFiZWyUalYxAQBNMgFNMwGHlIwRVG9wLlBlcktleS5leHBhbmSUalYxAQBNNQFNRAGHlIwKVG9wLlBlcktleZRqXTEBAEv3TUQBh5SMC1RvcC5MYXJnZXN0lGpWMQEATUYBTUoBh5SMDFRvcC5TbWFsbGVzdJRqVjEBAE1MAU1QAYeUjBFUb3AuTGFyZ2VzdFBlcktleZRqVjEBAE1SAU1WAYeUjBJUb3AuU21hbGxlc3RQZXJLZXmUalYxAQBNWAFNXAGHlIwDVG9wlGpdMQEAS5pNXAGHlIwWX1RvcFBlckJ1bmRsZS5fX2luaXRfX5RqVjEBAE1iAU1lAYeUjBpfVG9wUGVyQnVuZGxlLnN0YXJ0X2J1bmRsZZRqVjEBAE1nAU1oAYeUjBVfVG9wUGVyQnVuZGxlLnByb2Nlc3OUalYxAQBNagFNcQGHlIwbX1RvcFBlckJ1bmRsZS5maW5pc2hfYnVuZGxllGpWMQEATXMBTX8Bh5SMDV9Ub3BQZXJCdW5kbGWUal0xAQBNXwFNfwGHlIwbX01lcmdlVG9wUGVyQnVuZGxlLl9faW5pdF9flGpWMQEATYUBTYgBh5SMGl9NZXJnZVRvcFBlckJ1bmRsZS5wcm9jZXNzlGpWMQEATYoBTbUBh5SMEl9NZXJnZVRvcFBlckJ1bmRsZZRqXTEBAE2CAU21AYeUjBVUb3BDb21iaW5lRm4uX19pbml0X1+UalYxAQBNygFN2wGHlIwbVG9wQ29tYmluZUZuLl9oeWRyYXRlZF9oZWFwlGpWMQEATd0BTfEBh5SMGVRvcENvbWJpbmVGbi5kaXNwbGF5X2RhdGGUalYxAQBN8wFN+QGHlIwfVG9wQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcpRqVjEBAE0EAk0FAoeUjBZUb3BDb21iaW5lRm4uYWRkX2lucHV0lGpWMQEATQcCTR8Ch5SMH1RvcENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnOUalYxAQBNIQJNPQKHlIwUVG9wQ29tYmluZUZuLmNvbXBhY3SUalYxAQBNPwJNRQKHlIwbVG9wQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0lGpWMQEATUcCTVoCh5SMDFRvcENvbWJpbmVGbpRqXTEBAE24AU1aAoeUjBVMYXJnZXN0LmRlZmF1bHRfbGFiZWyUalYxAQBNXgJNXwKHlIwHTGFyZ2VzdJRqXTEBAE1dAk1fAoeUjBFTbWFsbGVzdC5fX2luaXRfX5RqVjEBAE1jAk1kAoeUjBZTbWFsbGVzdC5kZWZhdWx0X2xhYmVslGpWMQEATWYCTWcCh5SMCFNtYWxsZXN0lGpdMQEATWICTWcCh5SMIVNhbXBsZS5GaXhlZFNpemVHbG9iYWxseS5fX2luaXRfX5RqVjEBAE1xAk1yAoeUjB9TYW1wbGUuRml4ZWRTaXplR2xvYmFsbHkuZXhwYW5klGpWMQEATXQCTXUCh5SMJVNhbXBsZS5GaXhlZFNpemVHbG9iYWxseS5kaXNwbGF5X2RhdGGUalYxAQBNdwJNeAKHlIwmU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5LmRlZmF1bHRfbGFiZWyUalYxAQBNegJNewKHlIwYU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5lGpdMQEATW8CTXsCh5SMH1NhbXBsZS5GaXhlZFNpemVQZXJLZXkuX19pbml0X1+UalYxAQBNfwJNgAKHlIwdU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5leHBhbmSUalYxAQBNggJNgwKHlIwjU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5kaXNwbGF5X2RhdGGUalYxAQBNhQJNhgKHlIwkU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5kZWZhdWx0X2xhYmVslGpWMQEATYgCTYkCh5SMFlNhbXBsZS5GaXhlZFNpemVQZXJLZXmUal0xAQBNfQJNiQKHlIwGU2FtcGxllGpdMQEATWoCTYkCh5SMGFNhbXBsZUNvbWJpbmVGbi5fX2luaXRfX5RqVjEBAE2QAk2WAoeUjCJTYW1wbGVDb21iaW5lRm4uY3JlYXRlX2FjY3VtdWxhdG9ylGpWMQEATZgCTZkCh5SMGVNhbXBsZUNvbWJpbmVGbi5hZGRfaW5wdXSUalYxAQBNmwJNnwKHlIwiU2FtcGxlQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc5RqVjEBAE2hAk2iAoeUjBdTYW1wbGVDb21iaW5lRm4uY29tcGFjdJRqVjEBAE2kAk2lAoeUjB5TYW1wbGVDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXSUalYxAQBNpwJNqQKHlIwPU2FtcGxlQ29tYmluZUZulGpdMQEATYwCTakCh5SMHF9UdXBsZUNvbWJpbmVGbkJhc2UuX19pbml0X1+UalYxAQBNrQJNrwKHlIwgX1R1cGxlQ29tYmluZUZuQmFzZS5kaXNwbGF5X2RhdGGUalYxAQBNsQJNtgKHlIwmX1R1cGxlQ29tYmluZUZuQmFzZS5jcmVhdGVfYWNjdW11bGF0b3KUalYxAQBNuAJNuQKHlIwmX1R1cGxlQ29tYmluZUZuQmFzZS5tZXJnZV9hY2N1bXVsYXRvcnOUalYxAQBNuwJNvwKHlIwbX1R1cGxlQ29tYmluZUZuQmFzZS5jb21wYWN0lGpWMQEATcECTcICh5SMIl9UdXBsZUNvbWJpbmVGbkJhc2UuZXh0cmFjdF9vdXRwdXSUalYxAQBNxAJNxgKHlIwTX1R1cGxlQ29tYmluZUZuQmFzZZRqXTEBAE2sAk3GAoeUjBhUdXBsZUNvbWJpbmVGbi5hZGRfaW5wdXSUalYxAQBN0AJN1QKHlIwgVHVwbGVDb21iaW5lRm4ud2l0aF9jb21tb25faW5wdXSUalYxAQBN1wJN2AKHlIwOVHVwbGVDb21iaW5lRm6Ual0xAQBNyQJN2AKHlIwjU2luZ2xlSW5wdXRUdXBsZUNvbWJpbmVGbi5hZGRfaW5wdXSUalYxAQBN4gJN5QKHlIwZU2luZ2xlSW5wdXRUdXBsZUNvbWJpbmVGbpRqXTEBAE3bAk3lAoeUjA9Ub0xpc3QuX19pbml0X1+UalYxAQBN6gJN6wKHlIwNVG9MaXN0LmV4cGFuZJRqVjEBAE3tAk3uAoeUjAZUb0xpc3SUal0xAQBN6AJN7gKHlIwiVG9MaXN0Q29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcpRqVjEBAE31Ak32AoeUjBlUb0xpc3RDb21iaW5lRm4uYWRkX2lucHV0lGpWMQEATfgCTfoCh5SMIlRvTGlzdENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnOUalYxAQBN/AJN/QKHlIweVG9MaXN0Q29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0lGpWMQEATf8CTQADh5SMD1RvTGlzdENvbWJpbmVGbpRqXTEBAE3xAk0AA4eUjA9Ub0RpY3QuX19pbml0X1+UalYxAQBNCgNNCwOHlIwNVG9EaWN0LmV4cGFuZJRqVjEBAE0NA00OA4eUjAZUb0RpY3SUal0xAQBNAwNNDgOHlIwiVG9EaWN0Q29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcpRqVjEBAE0VA00WA4eUjBlUb0RpY3RDb21iaW5lRm4uYWRkX2lucHV0lGpWMQEATRgDTRsDh5SMIlRvRGljdENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnOUalYxAQBNHQNNIQOHlIweVG9EaWN0Q29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0lGpWMQEATSMDTSQDh5SMD1RvRGljdENvbWJpbmVGbpRqXTEBAE0RA00kA4eUjA5Ub1NldC5fX2luaXRfX5RqVjEBAE0pA00qA4eUjAxUb1NldC5leHBhbmSUalYxAQBNLANNLQOHlIwFVG9TZXSUal0xAQBNJwNNLQOHlIwhVG9TZXRDb21iaW5lRm4uY3JlYXRlX2FjY3VtdWxhdG9ylGpWMQEATTQDTTUDh5SMGFRvU2V0Q29tYmluZUZuLmFkZF9pbnB1dJRqVjEBAE03A005A4eUjCFUb1NldENvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnOUalYxAQBNOwNNPAOHlIwdVG9TZXRDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXSUalYxAQBNPgNNPwOHlIwOVG9TZXRDb21iaW5lRm6Ual0xAQBNMANNPwOHlIwTX0N1cnJpZWRGbi5fX2luaXRfX5RqVjEBAE1EA01HA4eUjB1fQ3VycmllZEZuLmNyZWF0ZV9hY2N1bXVsYXRvcpRqVjEBAE1JA01KA4eUjBRfQ3VycmllZEZuLmFkZF9pbnB1dJRqVjEBAE1MA01NA4eUjB1fQ3VycmllZEZuLm1lcmdlX2FjY3VtdWxhdG9yc5RqVjEBAE1PA01QA4eUjBJfQ3VycmllZEZuLmNvbXBhY3SUalYxAQBNUgNNUwOHlIwZX0N1cnJpZWRGbi5leHRyYWN0X291dHB1dJRqVjEBAE1VA01WA4eUjBBfQ3VycmllZEZuLmFwcGx5lGpWMQEATVgDTVkDh5SMCl9DdXJyaWVkRm6Ual0xAQBNQgNNWQOHlIwQY3VycnlfY29tYmluZV9mbpRqVjEBAE1cA01gA4eUjCBQaGFzZWRDb21iaW5lRm5FeGVjdXRvci5fX2luaXRfX5RqVjEBAE1lA01yA4eUjCRQaGFzZWRDb21iaW5lRm5FeGVjdXRvci5mdWxsX2NvbWJpbmWUalYxAQBNdANNdQOHlIwgUGhhc2VkQ29tYmluZUZuRXhlY3V0b3IuYWRkX29ubHmUalYxAQBNdwNNeQOHlIwiUGhhc2VkQ29tYmluZUZuRXhlY3V0b3IubWVyZ2Vfb25seZRqVjEBAE17A018A4eUjCRQaGFzZWRDb21iaW5lRm5FeGVjdXRvci5leHRyYWN0X29ubHmUalYxAQBNfgNNfwOHlIwXUGhhc2VkQ29tYmluZUZuRXhlY3V0b3KUal0xAQBNYwNNfwOHlIwdTGF0ZXN0Lkdsb2JhbGx5LmFkZF90aW1lc3RhbXCUalYxAQBNiQNNiwOHlIwWTGF0ZXN0Lkdsb2JhbGx5LmV4cGFuZJRqVjEBAE2NA02SA4eUjA9MYXRlc3QuR2xvYmFsbHmUal0xAQBNhANNkgOHlIwbTGF0ZXN0LlBlcktleS5hZGRfdGltZXN0YW1wlGpWMQEATZkDTZwDh5SMFExhdGVzdC5QZXJLZXkuZXhwYW5klGpWMQEATZ4DTaMDh5SMDUxhdGVzdC5QZXJLZXmUal0xAQBNlANNowOHlIwGTGF0ZXN0lGpdMQEATYIDTaMDh5SMIkxhdGVzdENvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3KUalYxAQBNqwNNrAOHlIwZTGF0ZXN0Q29tYmluZUZuLmFkZF9pbnB1dJRqVjEBAE2uA02yA4eUjCJMYXRlc3RDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzlGpWMQEATbQDTbgDh5SMHkxhdGVzdENvbWJpbmVGbi5leHRyYWN0X291dHB1dJRqVjEBAE26A027A4eUjA9MYXRlc3RDb21iaW5lRm6Ual0xAQBNpgNNuwOHlHV9lCiMBE1lYW6Uas4DAACMDU1lYW4uR2xvYmFsbHmUas4DAACMFE1lYW4uR2xvYmFsbHkuZXhwYW5klGrOAwAAjAtNZWFuLlBlcktleZRqzgMAAIwSTWVhbi5QZXJLZXkuZXhwYW5klGrOAwAAjAVDb3VudJRqzgMAAIwOQ291bnQuR2xvYmFsbHmUas4DAACMFUNvdW50Lkdsb2JhbGx5LmV4cGFuZJRqzgMAAIwMQ291bnQuUGVyS2V5lGrOAwAAjBNDb3VudC5QZXJLZXkuZXhwYW5klGrOAwAAjBBDb3VudC5QZXJFbGVtZW50lGrOAwAAjBdDb3VudC5QZXJFbGVtZW50LmV4cGFuZJRqzgMAAIwDVG9wlGrOAwAAjAZUb3AuT2aUas4DAACMFFRvcC5PZi5kZWZhdWx0X2xhYmVslGrOAwAAjA1Ub3AuT2YuZXhwYW5klGrOAwAAjApUb3AuUGVyS2V5lGrOAwAAjBhUb3AuUGVyS2V5LmRlZmF1bHRfbGFiZWyUas4DAACMEVRvcC5QZXJLZXkuZXhwYW5klGrOAwAAjAtUb3AuTGFyZ2VzdJRqzgMAAIwMVG9wLlNtYWxsZXN0lGrOAwAAjBFUb3AuTGFyZ2VzdFBlcktleZRqzgMAAIwSVG9wLlNtYWxsZXN0UGVyS2V5lGrOAwAAjAZTYW1wbGWUas4DAACMGFNhbXBsZS5GaXhlZFNpemVHbG9iYWxseZRqzgMAAIwfU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5LmV4cGFuZJRqzgMAAIwlU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5LmRpc3BsYXlfZGF0YZRqzgMAAIwmU2FtcGxlLkZpeGVkU2l6ZUdsb2JhbGx5LmRlZmF1bHRfbGFiZWyUas4DAACMFlNhbXBsZS5GaXhlZFNpemVQZXJLZXmUas4DAACMHVNhbXBsZS5GaXhlZFNpemVQZXJLZXkuZXhwYW5klGrOAwAAjCNTYW1wbGUuRml4ZWRTaXplUGVyS2V5LmRpc3BsYXlfZGF0YZRqzgMAAIwkU2FtcGxlLkZpeGVkU2l6ZVBlcktleS5kZWZhdWx0X2xhYmVslGrOAwAAjAZUb0xpc3SUas4DAACMDVRvTGlzdC5leHBhbmSUas4DAACMBlRvRGljdJRqzgMAAIwNVG9EaWN0LmV4cGFuZJRqzgMAAIwFVG9TZXSUas4DAACMDFRvU2V0LmV4cGFuZJRqzgMAAIwGTGF0ZXN0lGrOAwAAjA9MYXRlc3QuR2xvYmFsbHmUas4DAACMHUxhdGVzdC5HbG9iYWxseS5hZGRfdGltZXN0YW1wlGrOAwAAjBZMYXRlc3QuR2xvYmFsbHkuZXhwYW5klGrOAwAAjA1MYXRlc3QuUGVyS2V5lGrOAwAAjBtMYXRlc3QuUGVyS2V5LmFkZF90aW1lc3RhbXCUas4DAACMFExhdGVzdC5QZXJLZXkuZXhwYW5klGrOAwAAdYwgYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnOUdJSMG2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZZQoWFiAAQAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNvcmUgUFRyYW5zZm9ybSBzdWJjbGFzc2VzLCBzdWNoIGFzIEZsYXRNYXAsIEdyb3VwQnlLZXksIGFuZCBNYXAuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvcHkKaW1wb3J0IGluc3BlY3QKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHJhbmRvbQppbXBvcnQgdHlwZXMKaW1wb3J0IHR5cGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBtYXAKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCgpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgdHlwZWhpbnRzCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCB0eXBlY29kZXJzCmZyb20gYXBhY2hlX2JlYW0uaW50ZXJuYWwgaW1wb3J0IHBpY2tsZXIKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgdXRpbApmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgVHlwZU9wdGlvbnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgcHl0aG9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBwdHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgdXNlcnN0YXRlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IEhhc0Rpc3BsYXlEYXRhCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHMgaW1wb3J0IGdldF9zaWRlaW5wdXRfaW5kZXgKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSBpbXBvcnQgU3RhdGVTcGVjCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUgaW1wb3J0IFRpbWVyU3BlYwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBHbG9iYWxXaW5kb3dzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFRpbWVzdGFtcENvbWJpbmVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFRpbWVzdGFtcGVkVmFsdWUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgV2luZG93ZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBXaW5kb3dGbgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgdHJpdmlhbF9pbmZlcmVuY2UKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgVHlwZUNoZWNrRXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgV2l0aFR5cGVIaW50cwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBnZXRfc2lnbmF0dXJlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IGdldF90eXBlX2hpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IHdpdGhfaW5wdXRfdHlwZXMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgd2l0aF9vdXRwdXRfdHlwZXMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UgaW1wb3J0IGVsZW1lbnRfdHlwZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IGlzX2NvbnNpc3RlbnRfd2l0aApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB1cm5zCmZyb20gYXBhY2hlX2JlYW0udXRpbHMudGltZXN0YW1wIGltcG9ydCBEdXJhdGlvbgoKaWYgdHlwaW5nLlRZUEVfQ0hFQ0tJTkc6CiAgZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IG1lc3NhZ2UgICMgcHlsaW50OiBkaXNhYmxlPXVuZ3JvdXBlZC1pbXBvcnRzCiAgZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgaW9iYXNlCiAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dCBpbXBvcnQgUGlwZWxpbmVDb250ZXh0CiAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjcmVhdGVfc291cmNlCiAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IEFjY3VtdWxhdGlvbk1vZGUKICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgRGVmYXVsdFRyaWdnZXIKICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlciBpbXBvcnQgVHJpZ2dlckZuCgp0cnk6CiAgaW1wb3J0IGZ1bmNzaWdzICAjIFB5dGhvbiAyIG9ubHkuCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBmdW5jc2lncyA9IE5vbmUKCl9fYWxsX18gPSBbCiAgICAnRG9GbicsCiAgICAnQ29tYmluZUZuJywKICAgICdQYXJ0aXRpb25GbicsCiAgICAnUGFyRG8nLAogICAgJ0ZsYXRNYXAnLAogICAgJ0ZsYXRNYXBUdXBsZScsCiAgICAnTWFwJywKICAgICdNYXBUdXBsZScsCiAgICAnRmlsdGVyJywKICAgICdDb21iaW5lR2xvYmFsbHknLAogICAgJ0NvbWJpbmVQZXJLZXknLAogICAgJ0NvbWJpbmVWYWx1ZXMnLAogICAgJ0dyb3VwQnlLZXknLAogICAgJ1BhcnRpdGlvbicsCiAgICAnV2luZG93aW5nJywKICAgICdXaW5kb3dJbnRvJywKICAgICdGbGF0dGVuJywKICAgICdDcmVhdGUnLAogICAgJ0ltcHVsc2UnLAogICAgJ1Jlc3RyaWN0aW9uUHJvdmlkZXInLAogICAgJ1dhdGVybWFya0VzdGltYXRvclByb3ZpZGVyJywKXQoKIyBUeXBlIHZhcmlhYmxlcwpUID0gdHlwaW5nLlR5cGVWYXIoJ1QnKQpLID0gdHlwaW5nLlR5cGVWYXIoJ0snKQpWID0gdHlwaW5nLlR5cGVWYXIoJ1YnKQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIERvRm5Db250ZXh0KG9iamVjdCk6CiAgIiIiQSBjb250ZXh0IGF2YWlsYWJsZSB0byBhbGwgbWV0aG9kcyBvZiBEb0ZuIGluc3RhbmNlLiIiIgogIHBhc3MKCgpjbGFzcyBEb0ZuUHJvY2Vzc0NvbnRleHQoRG9GbkNvbnRleHQpOgogICIiIkEgcHJvY2Vzc2luZyBjb250ZXh0IHBhc3NlZCB0byBEb0ZuIHByb2Nlc3MoKSBkdXJpbmcgZXhlY3V0aW9uLgoKICBFeHBlcmltZW50YWw7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIE1vc3QgaW1wb3J0YW50bHksIGEgRG9Gbi5wcm9jZXNzIG1ldGhvZCB3aWxsIGFjY2VzcyBjb250ZXh0LmVsZW1lbnQKICB0byBnZXQgdGhlIGVsZW1lbnQgaXQgaXMgc3VwcG9zZWQgdG8gcHJvY2Vzcy4KCiAgQXR0cmlidXRlczoKICAgIGxhYmVsOiBsYWJlbCBvZiB0aGUgUGFyRG8gd2hvc2UgZWxlbWVudCBpcyBiZWluZyBwcm9jZXNzZWQuCiAgICBlbGVtZW50OiBlbGVtZW50IGJlaW5nIHByb2Nlc3NlZAogICAgICAoaW4gcHJvY2VzcyBtZXRob2Qgb25seTsgYWx3YXlzIE5vbmUgaW4gc3RhcnRfYnVuZGxlIGFuZCBmaW5pc2hfYnVuZGxlKQogICAgdGltZXN0YW1wOiB0aW1lc3RhbXAgb2YgdGhlIGVsZW1lbnQKICAgICAgKGluIHByb2Nlc3MgbWV0aG9kIG9ubHk7IGFsd2F5cyBOb25lIGluIHN0YXJ0X2J1bmRsZSBhbmQgZmluaXNoX2J1bmRsZSkKICAgIHdpbmRvd3M6IHdpbmRvd3Mgb2YgdGhlIGVsZW1lbnQKICAgICAgKGluIHByb2Nlc3MgbWV0aG9kIG9ubHk7IGFsd2F5cyBOb25lIGluIHN0YXJ0X2J1bmRsZSBhbmQgZmluaXNoX2J1bmRsZSkKICAgIHN0YXRlOiBhIERvRm5TdGF0ZSBvYmplY3QsIHdoaWNoIGhvbGRzIHRoZSBydW5uZXIncyBpbnRlcm5hbCBzdGF0ZQogICAgICBmb3IgdGhpcyBlbGVtZW50LgogICAgICBOb3QgdXNlZCBieSB0aGUgcGlwZWxpbmUgY29kZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWwsIGVsZW1lbnQ9Tm9uZSwgc3RhdGU9Tm9uZSk6CiAgICAiIiJJbml0aWFsaXplIGEgcHJvY2Vzc2luZyBjb250ZXh0IG9iamVjdCB3aXRoIGFuIGVsZW1lbnQgYW5kIHN0YXRlLgoKICAgIFRoZSBlbGVtZW50IHJlcHJlc2VudHMgb25lIHZhbHVlIGZyb20gYSBQQ29sbGVjdGlvbiB0aGF0IHdpbGwgYmUgYWNjZXNzZWQKICAgIGJ5IGEgRG9GbiBvYmplY3QgZHVyaW5nIHBpcGVsaW5lIGV4ZWN1dGlvbiwgYW5kIHN0YXRlIGlzIGFuIGFyYml0cmFyeSBvYmplY3QKICAgIHdoZXJlIGNvdW50ZXJzIGFuZCBvdGhlciBwaXBlbGluZSBzdGF0ZSBpbmZvcm1hdGlvbiBjYW4gYmUgcGFzc2VkIGluLgoKICAgIERvRm5Qcm9jZXNzQ29udGV4dCBvYmplY3RzIGFyZSBhbHNvIHVzZWQgYXMgaW5wdXRzIHRvIFBhcnRpdGlvbkZuIGluc3RhbmNlcy4KCiAgICBBcmdzOgogICAgICBsYWJlbDogbGFiZWwgb2YgdGhlIFBDb2xsZWN0aW9uIHdob3NlIGVsZW1lbnQgaXMgYmVpbmcgcHJvY2Vzc2VkLgogICAgICBlbGVtZW50OiBlbGVtZW50IG9mIGEgUENvbGxlY3Rpb24gYmVpbmcgcHJvY2Vzc2VkIHVzaW5nIHRoaXMgY29udGV4dC4KICAgICAgc3RhdGU6IGEgRG9GblN0YXRlIG9iamVjdCB3aXRoIHN0YXRlIHRvIGJlIHBhc3NlZCBpbiB0byB0aGUgRG9GbiBvYmplY3QuCiAgICAiIiIKICAgIHNlbGYubGFiZWwgPSBsYWJlbAogICAgc2VsZi5zdGF0ZSA9IHN0YXRlCiAgICBpZiBlbGVtZW50IGlzIG5vdCBOb25lOgogICAgICBzZWxmLnNldF9lbGVtZW50KGVsZW1lbnQpCgogIGRlZiBzZXRfZWxlbWVudChzZWxmLCB3aW5kb3dlZF92YWx1ZSk6CiAgICBpZiB3aW5kb3dlZF92YWx1ZSBpcyBOb25lOgogICAgICAjIE5vdCBjdXJyZW50bHkgcHJvY2Vzc2luZyBhbiBlbGVtZW50LgogICAgICBpZiBoYXNhdHRyKHNlbGYsICdlbGVtZW50Jyk6CiAgICAgICAgZGVsIHNlbGYuZWxlbWVudAogICAgICAgIGRlbCBzZWxmLnRpbWVzdGFtcAogICAgICAgIGRlbCBzZWxmLndpbmRvd3MKICAgIGVsc2U6CiAgICAgIHNlbGYuZWxlbWVudCA9IHdpbmRvd2VkX3ZhbHVlLnZhbHVlCiAgICAgIHNlbGYudGltZXN0YW1wID0gd2luZG93ZWRfdmFsdWUudGltZXN0YW1wCiAgICAgIHNlbGYud2luZG93cyA9IHdpbmRvd2VkX3ZhbHVlLndpbmRvd3MKCgpjbGFzcyBQcm9jZXNzQ29udGludWF0aW9uKG9iamVjdCk6CiAgIiIiQW4gb2JqZWN0IHRoYXQgbWF5IGJlIHByb2R1Y2VkIGFzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYSBwcm9jZXNzIG1ldGhvZAogICAgaW52b2NhdGlvbi4KCiAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBJZiBwcm9kdWNlZCwgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGJlIGRvbmUgZm9yIHRoZSBjdXJyZW50CiAgaW5wdXQgZWxlbWVudC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcmVzdW1lX2RlbGF5PTApOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBQcm9jZXNzQ29udGludWF0aW9uIG9iamVjdC4KCiAgICBBcmdzOgogICAgICByZXN1bWVfZGVsYXk6IGluZGljYXRlcyB0aGUgbWluaW11bSB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IHNob3VsZCBlbGFwc2UKICAgICAgICBiZWZvcmUgcmUtaW52b2tpbmcgcHJvY2VzcygpIG1ldGhvZCBmb3IgcmVzdW1pbmcgdGhlIGludm9jYXRpb24gb2YgdGhlCiAgICAgICAgY3VycmVudCBlbGVtZW50LgogICAgIiIiCiAgICBzZWxmLnJlc3VtZV9kZWxheSA9IHJlc3VtZV9kZWxheQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHJlc3VtZShyZXN1bWVfZGVsYXk9MCk6CiAgICAiIiJBIGNvbnZlbmllbnQgbWV0aG9kIHRoYXQgcHJvZHVjZXMgYSBgYFByb2Nlc3NDb250aW51YXRpb25gYC4KCiAgICBBcmdzOgogICAgICByZXN1bWVfZGVsYXk6IGRlbGF5IGFmdGVyIHdoaWNoIHByb2Nlc3NpbmcgY3VycmVudCBlbGVtZW50IHNob3VsZCBiZQogICAgICAgIHJlc3VtZWQuCiAgICBSZXR1cm5zOiBhIGBgUHJvY2Vzc0NvbnRpbnVhdGlvbmBgIGZvciBzaWduYWxsaW5nIHRoZSBydW5uZXIgdGhhdCBjdXJyZW50CiAgICAgIGlucHV0IGVsZW1lbnQgaGFzIG5vdCBiZWVuIGZ1bGx5IHByb2Nlc3NlZCBhbmQgc2hvdWxkIGJlIHJlc3VtZWQgbGF0ZXIuCiAgICAiIiIKICAgIHJldHVybiBQcm9jZXNzQ29udGludWF0aW9uKHJlc3VtZV9kZWxheT1yZXN1bWVfZGVsYXkpCgoKY2xhc3MgUmVzdHJpY3Rpb25Qcm92aWRlcihvYmplY3QpOgogICIiIlByb3ZpZGVzIG1ldGhvZHMgZm9yIGdlbmVyYXRpbmcgYW5kIG1hbmlwdWxhdGluZyByZXN0cmljdGlvbnMuCgogIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGltcGxlbWVudGVkIHRvIHN1cHBvcnQgU3BsaXR0YWJsZSBgYERvRm5gYCBpbiBQeXRob24KICBTREsuIFNlZSBodHRwczovL3MuYXBhY2hlLm9yZy9zcGxpdHRhYmxlLWRvLWZuIGZvciBtb3JlIGRldGFpbHMgYWJvdXQKICBTcGxpdHRhYmxlIGBgRG9GbmBgLgoKICBUbyBkZW5vdGUgYSBgYERvRm5gYCBjbGFzcyB0byBiZSBTcGxpdHRhYmxlIGBgRG9GbmBgLCBgYERvRm4ucHJvY2VzcygpYGAKICBtZXRob2Qgb2YgdGhhdCBjbGFzcyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIgd2hvc2UgZGVmYXVsdCB2YWx1ZSBpcwogIGFuIGluc3RhbmNlIG9mIGBgUmVzdHJpY3Rpb25Qcm92aWRlcmBgLgoKICBUaGUgcHJvdmlkZWQgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAgaW5zdGFuY2UgbXVzdCBwcm92aWRlIHN1aXRhYmxlIG92ZXJyaWRlcwogIGZvciB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAgKiBjcmVhdGVfdHJhY2tlcigpCiAgKiBpbml0aWFsX3Jlc3RyaWN0aW9uKCkKCiAgT3B0aW9uYWxseSwgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAgbWF5IG92ZXJyaWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mCiAgZm9sbG93aW5nIG1ldGhvZHM6CiAgKiByZXN0cmljdGlvbl9jb2RlcigpCiAgKiByZXN0cmljdGlvbl9zaXplKCkKICAqIHNwbGl0KCkKICAqIHNwbGl0X2FuZF9zaXplKCkKCiAgKiogUGF1c2luZyBhbmQgcmVzdW1pbmcgcHJvY2Vzc2luZyBvZiBhbiBlbGVtZW50ICoqCgogIEFzIHRoZSBsYXN0IGVsZW1lbnQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yIHJldHVybmVkIGJ5IHRoZQogIGBgRG9Gbi5wcm9jZXNzKClgYCBtZXRob2QsIGEgU3BsaXR0YWJsZSBgYERvRm5gYCBtYXkgcmV0dXJuIGFuIG9iamVjdCBvZiB0eXBlCiAgYGBQcm9jZXNzQ29udGludWF0aW9uYGAuCgogIElmIHByb3ZpZGVkLCBgYFByb2Nlc3NDb250aW51YXRpb25gYCBvYmplY3Qgc3BlY2lmaWVzIHRoYXQgcnVubmVyIHNob3VsZAogIGxhdGVyIHJlLWludm9rZSBgYERvRm4ucHJvY2VzcygpYGAgbWV0aG9kIHRvIHJlc3VtZSBwcm9jZXNzaW5nIHRoZSBjdXJyZW50CiAgZWxlbWVudCBhbmQgdGhlIG1hbm5lciBpbiB3aGljaCB0aGUgcmUtaW52b2NhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkLiBBCiAgYGBQcm9jZXNzQ29udGludWF0aW9uYGAgb2JqZWN0IG11c3Qgb25seSBiZSBzcGVjaWZpZWQgYXMgdGhlIGxhc3QgZWxlbWVudCBvZgogIHRoZSBpdGVyYXRvci4gSWYgYSBgYFByb2Nlc3NDb250aW51YXRpb25gYCBvYmplY3QgaXMgbm90IHByb3ZpZGVkIHRoZSBydW5uZXIKICB3aWxsIGFzc3VtZSB0aGF0IHRoZSBjdXJyZW50IGlucHV0IGVsZW1lbnQgaGFzIGJlZW4gZnVsbHkgcHJvY2Vzc2VkLgoKICAqKiBVcGRhdGluZyBvdXRwdXQgd2F0ZXJtYXJrICoqCgogIGBgRG9Gbi5wcm9jZXNzKClgYCBtZXRob2Qgb2YgU3BsaXR0YWJsZSBgYERvRm5gYHMgY291bGQgY29udGFpbiBhIHBhcmFtZXRlcgogIHdpdGggZGVmYXVsdCB2YWx1ZSBgYERvRm4uV2F0ZXJtYXJrUmVwb3J0ZXJQYXJhbWBgLiBJZiBzcGVjaWZpZWQgdGhpcyBhc2tzIHRoZQogIHJ1bm5lciB0byBwcm92aWRlIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBnaXZlIHRoZSBydW5uZXIgYQogIChiZXN0LWVmZm9ydCkgbG93ZXIgYm91bmQgYWJvdXQgdGhlIHRpbWVzdGFtcHMgb2YgZnV0dXJlIG91dHB1dCBhc3NvY2lhdGVkCiAgd2l0aCB0aGUgY3VycmVudCBlbGVtZW50IHByb2Nlc3NlZCBieSB0aGUgYGBEb0ZuYGAuIElmIHRoZSBgYERvRm5gYCBoYXMKICBtdWx0aXBsZSBvdXRwdXRzLCB0aGUgd2F0ZXJtYXJrIGFwcGxpZXMgdG8gYWxsIG9mIHRoZW0uIFByb3ZpZGVkIGZ1bmN0aW9uIG11c3QKICBiZSBpbnZva2VkIHdpdGggYSBzaW5nbGUgcGFyYW1ldGVyIG9mIHR5cGUgYGBUaW1lc3RhbXBgYCBvciBhcyBhbiBpbnRlZ2VyIHRoYXQKICBnaXZlcyB0aGUgd2F0ZXJtYXJrIGluIG51bWJlciBvZiBzZWNvbmRzLgogICIiIgogIGRlZiBjcmVhdGVfdHJhY2tlcihzZWxmLCByZXN0cmljdGlvbik6CiAgICAjIHR5cGU6ICguLi4pIC0+IGlvYmFzZS5SZXN0cmljdGlvblRyYWNrZXIKCiAgICAiIiJQcm9kdWNlcyBhIG5ldyBgYFJlc3RyaWN0aW9uVHJhY2tlcmBgIGZvciB0aGUgZ2l2ZW4gcmVzdHJpY3Rpb24uCgogICAgVGhpcyBBUEkgaXMgcmVxdWlyZWQgdG8gYmUgaW1wbGVtZW50ZWQuCgogICAgQXJnczoKICAgICAgcmVzdHJpY3Rpb246IGFuIG9iamVjdCB0aGF0IGRlZmluZXMgYSByZXN0cmljdGlvbiBhcyBpZGVudGlmaWVkIGJ5IGEKICAgICAgICBTcGxpdHRhYmxlIGBgRG9GbmBgIHRoYXQgdXRpbGl6ZXMgdGhlIGN1cnJlbnQgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAuCiAgICAgICAgRm9yIGV4YW1wbGUsIGEgdHVwbGUgdGhhdCBnaXZlcyBhIHJhbmdlIG9mIHBvc2l0aW9ucyBmb3IgYSBTcGxpdHRhYmxlCiAgICAgICAgYGBEb0ZuYGAgdGhhdCByZWFkcyBmaWxlcyBiYXNlZCBvbiBieXRlIHBvc2l0aW9ucy4KICAgIFJldHVybnM6IGFuIG9iamVjdCBvZiB0eXBlIGBgUmVzdHJpY3Rpb25UcmFja2VyYGAuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGluaXRpYWxfcmVzdHJpY3Rpb24oc2VsZiwgZWxlbWVudCk6CiAgICAiIiJQcm9kdWNlcyBhbiBpbml0aWFsIHJlc3RyaWN0aW9uIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC4KCiAgICBUaGlzIEFQSSBpcyByZXF1aXJlZCB0byBiZSBpbXBsZW1lbnRlZC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc3BsaXQoc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgIiIiU3BsaXRzIHRoZSBnaXZlbiBlbGVtZW50IGFuZCByZXN0cmljdGlvbi4KCiAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIG9mIHJlc3RyaWN0aW9ucy4gVGhlIHRvdGFsIHNldCBvZiBlbGVtZW50cyBwcm9kdWNlZCBieQogICAgcmVhZGluZyBpbnB1dCBlbGVtZW50IGZvciBlYWNoIG9mIHRoZSByZXR1cm5lZCByZXN0cmljdGlvbnMgc2hvdWxkIGJlIHRoZQogICAgc2FtZSBhcyB0aGUgdG90YWwgc2V0IG9mIGVsZW1lbnRzIHByb2R1Y2VkIGJ5IHJlYWRpbmcgdGhlIGlucHV0IGVsZW1lbnQgZm9yCiAgICB0aGUgaW5wdXQgcmVzdHJpY3Rpb24uCgogICAgVGhpcyBBUEkgaXMgb3B0aW9uYWwgaWYgYGBzcGxpdF9hbmRfc2l6ZWBgIGhhcyBiZWVuIGltcGxlbWVudGVkLgoKICAgICIiIgogICAgeWllbGQgcmVzdHJpY3Rpb24KCiAgZGVmIHJlc3RyaWN0aW9uX2NvZGVyKHNlbGYpOgogICAgIiIiUmV0dXJucyBhIGBgQ29kZXJgYCBmb3IgcmVzdHJpY3Rpb25zLgoKICAgIFJldHVybmVkYGBDb2RlcmBgIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHJlc3RyaWN0aW9ucyBwcm9kdWNlZCBieSB0aGUgY3VycmVudAogICAgYGBSZXN0cmljdGlvblByb3ZpZGVyYGAuCgogICAgUmV0dXJuczoKICAgICAgYW4gb2JqZWN0IG9mIHR5cGUgYGBDb2RlcmBgLgogICAgIiIiCiAgICByZXR1cm4gY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihvYmplY3QpCgogIGRlZiByZXN0cmljdGlvbl9zaXplKHNlbGYsIGVsZW1lbnQsIHJlc3RyaWN0aW9uKToKICAgICIiIlJldHVybnMgdGhlIHNpemUgb2YgYW4gZWxlbWVudCB3aXRoIHJlc3BlY3QgdG8gdGhlIGdpdmVuIGVsZW1lbnQuCgogICAgQnkgZGVmYXVsdCwgYXNrcyBhIG5ld2x5LWNyZWF0ZWQgcmVzdHJpY3Rpb24gdHJhY2tlciBmb3IgdGhlIGRlZmF1bHQgc2l6ZQogICAgb2YgdGhlIHJlc3RyaWN0aW9uLgoKICAgIFRoaXMgQVBJIGlzIHJlcXVpcmVkIHRvIGJlIGltcGxlbWVudGVkLgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBzcGxpdF9hbmRfc2l6ZShzZWxmLCBlbGVtZW50LCByZXN0cmljdGlvbik6CiAgICAiIiJMaWtlIHNwbGl0LCBidXQgYWxzbyBkb2VzIHNpemluZywgcmV0dXJuaW5nIChyZXN0cmljdGlvbiwgc2l6ZSkgcGFpcnMuCgogICAgVGhpcyBBUEkgaXMgb3B0aW9uYWwgaWYgYGBzcGxpdGBgIGFuZCBgYHJlc3RyaWN0aW9uX3NpemVgYCBoYXZlIGJlZW4KICAgIGltcGxlbWVudGVkLgogICAgIiIiCiAgICBmb3IgcGFydCBpbiBzZWxmLnNwbGl0KGVsZW1lbnQsIHJlc3RyaWN0aW9uKToKICAgICAgeWllbGQgcGFydCwgc2VsZi5yZXN0cmljdGlvbl9zaXplKGVsZW1lbnQsIHBhcnQpCgoKZGVmIGdldF9mdW5jdGlvbl9hcmd1bWVudHMob2JqLCBmdW5jKToKICAjIHR5cGU6ICguLi4pIC0+IHR5cGluZy5UdXBsZVt0eXBpbmcuTGlzdFtzdHJdLCB0eXBpbmcuTGlzdFt0eXBpbmcuQW55XV0KCiAgIiIiUmV0dXJuIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMgYmFzZWQgb24gdGhlIG5hbWUgcHJvdmlkZWQuIElmIHRoZXkgaGF2ZQogIGEgX2luc3BlY3RfZnVuY3Rpb24gYXR0YWNoZWQgdG8gdGhlIGNsYXNzIHRoZW4gdXNlIHRoYXQgb3RoZXJ3aXNlIGRlZmF1bHQKICB0byB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiBweXRob24gaW5zcGVjdCBsaWJyYXJ5LgoKICBSZXR1cm5zOgogICAgU2FtZSBhcyBnZXRfZnVuY3Rpb25fYXJnc19kZWZhdWx0cy4KICAiIiIKICBmdW5jX25hbWUgPSAnX2luc3BlY3RfJXMnICUgZnVuYwogIGlmIGhhc2F0dHIob2JqLCBmdW5jX25hbWUpOgogICAgZiA9IGdldGF0dHIob2JqLCBmdW5jX25hbWUpCiAgICByZXR1cm4gZigpCiAgZiA9IGdldGF0dHIob2JqLCBmdW5jKQogIHJldHVybiBnZXRfZnVuY3Rpb25fYXJnc19kZWZhdWx0cyhmKQoKCmRlZiBnZXRfZnVuY3Rpb25fYXJnc19kZWZhdWx0cyhmKToKICAjIHR5cGU6ICguLi4pIC0+IHR5cGluZy5UdXBsZVt0eXBpbmcuTGlzdFtzdHJdLCB0eXBpbmcuTGlzdFt0eXBpbmcuQW55XV0KCiAgIiIiUmV0dXJucyB0aGUgZnVuY3Rpb24gYXJndW1lbnRzIG9mIGEgZ2l2ZW4gZnVuY3Rpb24uCgogIFJldHVybnM6CiAgICAoYXJnczogTGlzdFtzdHJdLCBkZWZhdWx0czogTGlzdFtBbnldKS4gVGhlIGZpcnN0IGxpc3QgbmFtZXMgdGhlCiAgICBhcmd1bWVudHMgb2YgdGhlIG1ldGhvZCBhbmQgdGhlIHNlY29uZCBvbmUgaGFzIHRoZSB2YWx1ZXMgb2YgdGhlIGRlZmF1bHQKICAgIGFyZ3VtZW50cy4gVGhpcyBpcyBzaW1pbGFyIHRvIGBgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYygpYGAncyByZXN1bHRzLCBleGNlcHQKICAgIGl0IGRvZXNuJ3QgaW5jbHVkZSBib3VuZCBhcmd1bWVudHMgYW5kIG1heSBmb2xsb3cgZnVuY3Rpb24gd3JhcHBlcnMuCiAgIiIiCiAgc2lnbmF0dXJlID0gZ2V0X3NpZ25hdHVyZShmKQogICMgRmFsbCBiYWNrIG9uIGZ1bmNzaWdzIGlmIGluc3BlY3QgbW9kdWxlIGRvZXNuJ3QgaGF2ZSAnUGFyYW1ldGVyJzsgcHJlZmVyCiAgIyBpbnNwZWN0LlBhcmFtZXRlciBvdmVyIGZ1bmNzaWdzLlBhcmFtZXRlciBpZiBib3RoIGFyZSBhdmFpbGFibGUuCiAgdHJ5OgogICAgcGFyYW1ldGVyID0gaW5zcGVjdC5QYXJhbWV0ZXIKICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICBwYXJhbWV0ZXIgPSBmdW5jc2lncy5QYXJhbWV0ZXIKICAjIFRPRE8oQkVBTS01ODc4KSBzdXBwb3J0IGt3b25seWFyZ3Mgb24gUHl0aG9uIDMuCiAgX1NVUFBPUlRFRF9BUkdfVFlQRVMgPSBbCiAgICAgIHBhcmFtZXRlci5QT1NJVElPTkFMX09OTFksIHBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQKICBdCiAgYXJncyA9IFsKICAgICAgbmFtZSBmb3IgbmFtZSwKICAgICAgcCBpbiBzaWduYXR1cmUucGFyYW1ldGVycy5pdGVtcygpIGlmIHAua2luZCBpbiBfU1VQUE9SVEVEX0FSR19UWVBFUwogIF0KICBkZWZhdWx0cyA9IFsKICAgICAgcC5kZWZhdWx0IGZvciBwIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLnZhbHVlcygpCiAgICAgIGlmIHAua2luZCBpbiBfU1VQUE9SVEVEX0FSR19UWVBFUyBhbmQgcC5kZWZhdWx0IGlzIG5vdCBwLmVtcHR5CiAgXQoKICByZXR1cm4gYXJncywgZGVmYXVsdHMKCgpjbGFzcyBSdW5uZXJBUElQVHJhbnNmb3JtSG9sZGVyKFBUcmFuc2Zvcm0pOgogICIiIkEgYFBUcmFuc2Zvcm1gIHRoYXQgaG9sZHMgYSBydW5uZXIgQVBJIGBQVHJhbnNmb3JtYCBwcm90by4KCiAgVGhpcyBpcyB1c2VkIGZvciB0cmFuc2Zvcm1zLCBmb3Igd2hpY2ggY29ycmVzcG9uZGluZyBvYmplY3RzCiAgY2Fubm90IGJlIGluaXRpYWxpemVkIGluIFB5dGhvbiBTREsuIEZvciBleGFtcGxlLCBmb3IgYFBhckRvYCB0cmFuc2Zvcm1zIGZvcgogIHJlbW90ZSBTREtzIHRoYXQgbWF5IGJlIGF2YWlsYWJsZSBpbiBQeXRob24gU0RLIHRyYW5zZm9ybSBncmFwaCB3aGVuIGV4cGFuZGluZwogIGEgY3Jvc3MtbGFuZ3VhZ2UgdHJhbnNmb3JtIHNpbmNlIGEgUHl0aG9uIGBQYXJEb2Agb2JqZWN0IGNhbm5vdCBiZSBnZW5lcmF0ZWQKICB3aXRob3V0IGEgc2VyaWFsaXplZCBQeXRob24gYERvRm5gIG9iamVjdC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgcHJvdG8sIGNvbnRleHQpOgogICAgc2VsZi5fcHJvdG8gPSBwcm90bwogICAgc2VsZi5fY29udGV4dCA9IGNvbnRleHQKCiAgZGVmIHByb3RvKHNlbGYpOgogICAgIiIiUnVubmVyIEFQSSBwYXlsb2FkIGZvciBhIGBQVHJhbnNmb3JtYCIiIgogICAgcmV0dXJuIHNlbGYuX3Byb3RvCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQsIGhhc19wYXJ0cz1GYWxzZSk6CiAgICAjIFRPRE8oQkVBTS03ODUwKTogbm8gbmVlZCB0byBjb3B5IGFyb3VuZCBFbnZpcm9ubWVudCBpZiBpdCBpcyBhIGRpcmVjdAogICAgIyAgYXR0cmlidXRlIG9mIFBUcmFuc2Zvcm0uCiAgICBpZF90b19wcm90b19tYXAgPSBzZWxmLl9jb250ZXh0LmVudmlyb25tZW50cy5nZXRfaWRfdG9fcHJvdG9fbWFwKCkKICAgIGZvciBlbnZfaWQgaW4gaWRfdG9fcHJvdG9fbWFwOgogICAgICBpZiBlbnZfaWQgbm90IGluIGNvbnRleHQuZW52aXJvbm1lbnRzOgogICAgICAgIGNvbnRleHQuZW52aXJvbm1lbnRzLnB1dF9wcm90byhlbnZfaWQsIGlkX3RvX3Byb3RvX21hcFtlbnZfaWRdKQogICAgICBlbHNlOgogICAgICAgIGVudjEgPSBpZF90b19wcm90b19tYXBbZW52X2lkXQogICAgICAgIGVudjIgPSBjb250ZXh0LmVudmlyb25tZW50c1tlbnZfaWRdCiAgICAgICAgYXNzZXJ0IGVudjEudXJuID09IGVudjIudG9fcnVubmVyX2FwaShjb250ZXh0KS51cm4sICgKICAgICAgICAgICAgJ0V4cGVjdGVkIGVudmlyb25tZW50cyB3aXRoIHRoZSBzYW1lIElEIHRvIGJlIGVxdWFsIGJ1dCByZWNlaXZlZCAnCiAgICAgICAgICAgICdlbnZpcm9ubWVudHMgd2l0aCBkaWZmZXJlbnQgVVJOcyAnCiAgICAgICAgICAgICclciBhbmQgJXInLAogICAgICAgICAgICBlbnYxLnVybiwgZW52Mi50b19ydW5uZXJfYXBpKGNvbnRleHQpLnVybikKICAgICAgICBhc3NlcnQgZW52MS5wYXlsb2FkID09IGVudjIudG9fcnVubmVyX2FwaShjb250ZXh0KS5wYXlsb2FkLCAoCiAgICAgICAgICAgICdFeHBlY3RlZCBlbnZpcm9ubWVudHMgd2l0aCB0aGUgc2FtZSBJRCB0byBiZSBlcXVhbCBidXQgcmVjZWl2ZWQgJwogICAgICAgICAgICAnZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHBheWxvYWRzICcKICAgICAgICAgICAgJyVyIGFuZCAlcicsCiAgICAgICAgICAgIGVudjEucGF5bG9hZCwgZW52Mi50b19ydW5uZXJfYXBpKGNvbnRleHQpLnBheWxvYWQpCiAgICByZXR1cm4gc2VsZi5fcHJvdG8KCiAgZGVmIGdldF9yZXN0cmljdGlvbl9jb2RlcihzZWxmKToKICAgICMgVE9ETyhCRUFNLTcxNzIpOiBzdXBwb3J0IGV4dGVybmFsIHRyYW5zZm9ybXMgdGhhdCBhcmUgU0RGcy4KICAgIHJldHVybiBOb25lCgoKY2xhc3MgV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIob2JqZWN0KToKICAiIiJQcm92aWRlcyBtZXRob2RzIGZvciBnZW5lcmF0aW5nIFdhdGVybWFya0VzdGltYXRvci4KCiAgVGhpcyBjbGFzcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaWYgd2FudGluZyB0byBwcm92aWRpbmcgb3V0cHV0X3dhdGVybWFyawogIGluZm9ybWF0aW9uIHdpdGhpbiBhbiBTREYuCgogIEluIG9yZGVyIHRvIG1ha2UgYW4gU0RGLnByb2Nlc3MoKSBhY2Nlc3MgdG8gdGhlIHR5cGljYWwgV2F0ZXJtYXJrRXN0aW1hdG9yLAogIHRoZSBTREYgYXV0aG9yIHNob3VsZCBwYXNzIGEgRG9Gbi5XYXRlcm1hcmtFc3RpbWF0b3JQYXJhbSB3aXRoIGEgZGVmYXVsdCB2YWx1ZQogIG9mIG9uZSBXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlciBpbnN0YW5jZS4KICAiIiIKICBkZWYgaW5pdGlhbF9lc3RpbWF0b3Jfc3RhdGUoc2VsZiwgZWxlbWVudCwgcmVzdHJpY3Rpb24pOgogICAgIiIiUmV0dXJucyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgV2F0ZXJtYXJrRXN0aW1hdG9yIHdpdGggZ2l2ZW4gZWxlbWVudAogICAgYW5kIHJlc3RyaWN0aW9uLgogICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHN5c3RlbS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3Ioc2VsZiwgZXN0aW1hdG9yX3N0YXRlKToKICAgICIiIkNyZWF0ZSBhIG5ldyBXYXRlcm1hcmtFc3RpbWF0b3IgYmFzZWQgb24gdGhlIHN0YXRlLiBUaGUgc3RhdGUgaXMKICAgIHR5cGljYWxseSB1c2VmdWwgd2hlbiByZXN1bWluZyBwcm9jZXNzaW5nIGFuIGVsZW1lbnQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGVzdGltYXRvcl9zdGF0ZV9jb2RlcihzZWxmKToKICAgIHJldHVybiBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKG9iamVjdCkKCgpjbGFzcyBfRG9GblBhcmFtKG9iamVjdCk6CiAgIiIiRG9GbiBwYXJhbWV0ZXIuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtX2lkKToKICAgIHNlbGYucGFyYW1faWQgPSBwYXJhbV9pZAoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcik6CiAgICAgIHJldHVybiBzZWxmLnBhcmFtX2lkID09IG90aGVyLnBhcmFtX2lkCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYucGFyYW1faWQpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiBzZWxmLnBhcmFtX2lkCgoKY2xhc3MgX1Jlc3RyaWN0aW9uRG9GblBhcmFtKF9Eb0ZuUGFyYW0pOgogICIiIlJlc3RyaWN0aW9uIFByb3ZpZGVyIERvRm4gcGFyYW1ldGVyLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCByZXN0cmljdGlvbl9wcm92aWRlcik6CiAgICAjIHR5cGU6IChSZXN0cmljdGlvblByb3ZpZGVyKSAtPiBOb25lCiAgICBpZiBub3QgaXNpbnN0YW5jZShyZXN0cmljdGlvbl9wcm92aWRlciwgUmVzdHJpY3Rpb25Qcm92aWRlcik6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnRG9Gbi5SZXN0cmljdGlvblBhcmFtIGV4cGVjdGVkIFJlc3RyaWN0aW9uUHJvdmlkZXIgb2JqZWN0LicpCiAgICBzZWxmLnJlc3RyaWN0aW9uX3Byb3ZpZGVyID0gcmVzdHJpY3Rpb25fcHJvdmlkZXIKICAgIHNlbGYucGFyYW1faWQgPSAoCiAgICAgICAgJ1Jlc3RyaWN0aW9uUGFyYW0oJXMpJyAlIHJlc3RyaWN0aW9uX3Byb3ZpZGVyLl9fY2xhc3NfXy5fX25hbWVfXykKCgpjbGFzcyBfU3RhdGVEb0ZuUGFyYW0oX0RvRm5QYXJhbSk6CiAgIiIiU3RhdGUgRG9GbiBwYXJhbWV0ZXIuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRlX3NwZWMpOgogICAgIyB0eXBlOiAoU3RhdGVTcGVjKSAtPiBOb25lCiAgICBpZiBub3QgaXNpbnN0YW5jZShzdGF0ZV9zcGVjLCBTdGF0ZVNwZWMpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJEb0ZuLlN0YXRlUGFyYW0gZXhwZWN0ZWQgU3RhdGVTcGVjIG9iamVjdC4iKQogICAgc2VsZi5zdGF0ZV9zcGVjID0gc3RhdGVfc3BlYwogICAgc2VsZi5wYXJhbV9pZCA9ICdTdGF0ZVBhcmFtKCVzKScgJSBzdGF0ZV9zcGVjLm5hbWUKCgpjbGFzcyBfVGltZXJEb0ZuUGFyYW0oX0RvRm5QYXJhbSk6CiAgIiIiVGltZXIgRG9GbiBwYXJhbWV0ZXIuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRpbWVyX3NwZWMpOgogICAgIyB0eXBlOiAoVGltZXJTcGVjKSAtPiBOb25lCiAgICBpZiBub3QgaXNpbnN0YW5jZSh0aW1lcl9zcGVjLCBUaW1lclNwZWMpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJEb0ZuLlRpbWVyUGFyYW0gZXhwZWN0ZWQgVGltZXJTcGVjIG9iamVjdC4iKQogICAgc2VsZi50aW1lcl9zcGVjID0gdGltZXJfc3BlYwogICAgc2VsZi5wYXJhbV9pZCA9ICdUaW1lclBhcmFtKCVzKScgJSB0aW1lcl9zcGVjLm5hbWUKCgpjbGFzcyBfQnVuZGxlRmluYWxpemVyUGFyYW0oX0RvRm5QYXJhbSk6CiAgIiIiQnVuZGxlIEZpbmFsaXphdGlvbiBEb0ZuIHBhcmFtZXRlci4iIiIKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLl9jYWxsYmFja3MgPSBbXQogICAgc2VsZi5wYXJhbV9pZCA9ICJGaW5hbGl6ZUJ1bmRsZSIKCiAgZGVmIHJlZ2lzdGVyKHNlbGYsIGNhbGxiYWNrKToKICAgIHNlbGYuX2NhbGxiYWNrcy5hcHBlbmQoY2FsbGJhY2spCgogICMgTG9nIGVycm9ycyB3aGVuIGNhbGxpbmcgY2FsbGJhY2sgdG8gbWFrZSBzdXJlIGFsbCBjYWxsYmFja3MgZ2V0IGNhbGxlZAogICMgdGhvdWdoIHRoZXJlIGFyZSBlcnJvcnMuIEFuZCBlcnJvcnMgc2hvdWxkIG5vdCBmYWlsIHBpcGVsaW5lLgogIGRlZiBmaW5hbGl6ZV9idW5kbGUoc2VsZik6CiAgICBmb3IgY2FsbGJhY2sgaW4gc2VsZi5fY2FsbGJhY2tzOgogICAgICB0cnk6CiAgICAgICAgY2FsbGJhY2soKQogICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgX0xPR0dFUi53YXJuaW5nKCJHb3QgZXhjZXB0aW9uIGZyb20gZmluYWxpemF0aW9uIGNhbGw6ICVzIiwgZSkKCiAgZGVmIGhhc19jYWxsYmFja3Moc2VsZik6CiAgICByZXR1cm4gbGVuKHNlbGYuX2NhbGxiYWNrcykgPiAwCgogIGRlZiByZXNldChzZWxmKToKICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbOl0KCgpjbGFzcyBfV2F0ZXJtYXJrRXN0aW1hdG9yUGFyYW0oX0RvRm5QYXJhbSk6CiAgIiIiV2F0ZXJtYXJrRXN0b21hdG9yIERvRm4gcGFyYW1ldGVyLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB3YXRlcm1hcmtfZXN0aW1hdG9yX3Byb3ZpZGVyKToKICAgICMgdHlwZTogKFdhdGVybWFya0VzdGltYXRvclByb3ZpZGVyKSAtPiBOb25lCiAgICBpZiBub3QgaXNpbnN0YW5jZSh3YXRlcm1hcmtfZXN0aW1hdG9yX3Byb3ZpZGVyLCBXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlcik6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnRG9Gbi5fV2F0ZXJtYXJrRXN0aW1hdG9yUGFyYW0gZXhwZWN0ZWQnCiAgICAgICAgICAnV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIgb2JqZWN0LicpCiAgICBzZWxmLndhdGVybWFya19lc3RpbWF0b3JfcHJvdmlkZXIgPSB3YXRlcm1hcmtfZXN0aW1hdG9yX3Byb3ZpZGVyCiAgICBzZWxmLnBhcmFtX2lkID0gJ1dhdGVybWFya0VzdGltYXRvclByb3ZpZGVyJwoKCmNsYXNzIERvRm4oV2l0aFR5cGVIaW50cywgSGFzRGlzcGxheURhdGEsIHVybnMuUnVubmVyQXBpRm4pOgogICIiIkEgZnVuY3Rpb24gb2JqZWN0IHVzZWQgYnkgYSB0cmFuc2Zvcm0gd2l0aCBjdXN0b20gcHJvY2Vzc2luZy4KCiAgVGhlIFBhckRvIHRyYW5zZm9ybSBpcyBzdWNoIGEgdHJhbnNmb3JtLiBUaGUgUGFyRG8uYXBwbHkKICBtZXRob2Qgd2lsbCB0YWtlIGFuIG9iamVjdCBvZiB0eXBlIERvRm4gYW5kIGFwcGx5IGl0IHRvIGFsbCBlbGVtZW50cyBvZiBhCiAgUENvbGxlY3Rpb24gb2JqZWN0LgoKICBJbiBvcmRlciB0byBoYXZlIGNvbmNyZXRlIERvRm4gb2JqZWN0cyBvbmUgaGFzIHRvIHN1YmNsYXNzIGZyb20gRG9GbiBhbmQKICBkZWZpbmUgdGhlIGRlc2lyZWQgYmVoYXZpb3IgKHN0YXJ0X2J1bmRsZS9maW5pc2hfYnVuZGxlIGFuZCBwcm9jZXNzKSBvciB3cmFwIGEKICBjYWxsYWJsZSBvYmplY3QgdXNpbmcgdGhlIENhbGxhYmxlV3JhcHBlckRvRm4gY2xhc3MuCiAgIiIiCgogICMgUGFyYW1ldGVycyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSAucHJvY2VzcygpIG1ldGhvZC4KICBFbGVtZW50UGFyYW0gPSBfRG9GblBhcmFtKCdFbGVtZW50UGFyYW0nKQogIFNpZGVJbnB1dFBhcmFtID0gX0RvRm5QYXJhbSgnU2lkZUlucHV0UGFyYW0nKQogIFRpbWVzdGFtcFBhcmFtID0gX0RvRm5QYXJhbSgnVGltZXN0YW1wUGFyYW0nKQogIFdpbmRvd1BhcmFtID0gX0RvRm5QYXJhbSgnV2luZG93UGFyYW0nKQogIFBhbmVJbmZvUGFyYW0gPSBfRG9GblBhcmFtKCdQYW5lSW5mb1BhcmFtJykKICBXYXRlcm1hcmtFc3RpbWF0b3JQYXJhbSA9IF9XYXRlcm1hcmtFc3RpbWF0b3JQYXJhbQogIEJ1bmRsZUZpbmFsaXplclBhcmFtID0gX0J1bmRsZUZpbmFsaXplclBhcmFtCiAgS2V5UGFyYW0gPSBfRG9GblBhcmFtKCdLZXlQYXJhbScpCgogICMgUGFyYW1ldGVycyB0byBhY2Nlc3Mgc3RhdGUgYW5kIHRpbWVycy4gIE5vdCByZXN0cmljdGVkIHRvIHVzZSBvbmx5IGluIHRoZQogICMgLnByb2Nlc3MoKSBtZXRob2QuIFVzYWdlOiBEb0ZuLlN0YXRlUGFyYW0oc3RhdGVfc3BlYyksCiAgIyBEb0ZuLlRpbWVyUGFyYW0odGltZXJfc3BlYyksIERvRm4uVGltZXN0YW1wUGFyYW0sIERvRm4uV2luZG93UGFyYW0sCiAgIyBEb0ZuLktleVBhcmFtCiAgU3RhdGVQYXJhbSA9IF9TdGF0ZURvRm5QYXJhbQogIFRpbWVyUGFyYW0gPSBfVGltZXJEb0ZuUGFyYW0KCiAgRG9GblByb2Nlc3NQYXJhbXMgPSBbCiAgICAgIEVsZW1lbnRQYXJhbSwKICAgICAgU2lkZUlucHV0UGFyYW0sCiAgICAgIFRpbWVzdGFtcFBhcmFtLAogICAgICBXaW5kb3dQYXJhbSwKICAgICAgV2F0ZXJtYXJrRXN0aW1hdG9yUGFyYW0sCiAgICAgIFBhbmVJbmZvUGFyYW0sCiAgICAgIEJ1bmRsZUZpbmFsaXplclBhcmFtLAogICAgICBLZXlQYXJhbSwKICAgICAgU3RhdGVQYXJhbSwKICAgICAgVGltZXJQYXJhbQogIF0KCiAgUmVzdHJpY3Rpb25QYXJhbSA9IF9SZXN0cmljdGlvbkRvRm5QYXJhbQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fY2FsbGFibGUoZm4pOgogICAgcmV0dXJuIENhbGxhYmxlV3JhcHBlckRvRm4oZm4pCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICAiIiJNZXRob2QgdG8gdXNlIGZvciBwcm9jZXNzaW5nIGVsZW1lbnRzLgoKICAgIFRoaXMgaXMgaW52b2tlZCBieSBgYERvRm5SdW5uZXJgYCBmb3IgZWFjaCBlbGVtZW50IG9mIGEgaW5wdXQKICAgIGBgUENvbGxlY3Rpb25gYC4KCiAgICBJZiBzcGVjaWZpZWQsIGZvbGxvd2luZyBkZWZhdWx0IGFyZ3VtZW50cyBhcmUgdXNlZCBieSB0aGUgYGBEb0ZuUnVubmVyYGAgdG8KICAgIGJlIGFibGUgdG8gcGFzcyB0aGUgcGFyYW1ldGVycyBjb3JyZWN0bHkuCgogICAgYGBEb0ZuLkVsZW1lbnRQYXJhbWBgOiBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZCwgc2hvdWxkIG5vdCBiZSBtdXRhdGVkLgogICAgYGBEb0ZuLlNpZGVJbnB1dFBhcmFtYGA6IGEgc2lkZSBpbnB1dCB0aGF0IG1heSBiZSB1c2VkIHdoZW4gcHJvY2Vzc2luZy4KICAgIGBgRG9Gbi5UaW1lc3RhbXBQYXJhbWBgOiB0aW1lc3RhbXAgb2YgdGhlIGlucHV0IGVsZW1lbnQuCiAgICBgYERvRm4uV2luZG93UGFyYW1gYDogYGBXaW5kb3dgYCB0aGUgaW5wdXQgZWxlbWVudCBiZWxvbmdzIHRvLgogICAgYGBEb0ZuLlRpbWVyUGFyYW1gYDogYSBgYHVzZXJzdGF0ZS5SdW50aW1lVGltZXJgYCBvYmplY3QgZGVmaW5lZCBieSB0aGUgc3BlYwogICAgb2YgdGhlIHBhcmFtZXRlci4KICAgIGBgRG9Gbi5TdGF0ZVBhcmFtYGA6IGEgYGB1c2Vyc3RhdGUuUnVudGltZVN0YXRlYGAgb2JqZWN0IGRlZmluZWQgYnkgdGhlIHNwZWMKICAgIG9mIHRoZSBwYXJhbWV0ZXIuCiAgICBgYERvRm4uS2V5UGFyYW1gYDoga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudC4KICAgIGBgRG9Gbi5SZXN0cmljdGlvblBhcmFtYGA6IGFuIGBgaW9iYXNlLlJlc3RyaWN0aW9uVHJhY2tlcmBgIHdpbGwgYmUKICAgIHByb3ZpZGVkIGhlcmUgdG8gYWxsb3cgdHJlYXRtZW50IGFzIGEgU3BsaXR0YWJsZSBgYERvRm5gYC4gVGhlIHJlc3RyaWN0aW9uCiAgICB0cmFja2VyIHdpbGwgYmUgZGVyaXZlZCBmcm9tIHRoZSByZXN0cmljdGlvbiBwcm92aWRlciBpbiB0aGUgcGFyYW1ldGVyLgogICAgYGBEb0ZuLldhdGVybWFya0VzdGltYXRvclBhcmFtYGA6IGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byB0cmFjawogICAgb3V0cHV0IHdhdGVybWFyayBvZiBTcGxpdHRhYmxlIGBgRG9GbmBgIGltcGxlbWVudGF0aW9ucy4KCiAgICBBcmdzOgogICAgICBlbGVtZW50OiBUaGUgZWxlbWVudCB0byBiZSBwcm9jZXNzZWQKICAgICAgKmFyZ3M6IHNpZGUgaW5wdXRzCiAgICAgICoqa3dhcmdzOiBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cy4KCiAgICBSZXR1cm5zOgogICAgICBBbiBJdGVyYWJsZSBvZiBvdXRwdXQgZWxlbWVudHMgb3IgTm9uZS4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgc2V0dXAoc2VsZik6CiAgICAiIiJDYWxsZWQgdG8gcHJlcGFyZSBhbiBpbnN0YW5jZSBmb3IgcHJvY2Vzc2luZyBidW5kbGVzIG9mIGVsZW1lbnRzLgoKICAgIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIGluaXRpYWxpemUgdHJhbnNpZW50IGluLW1lbW9yeSByZXNvdXJjZXMsIHN1Y2ggYXMKICAgIG5ldHdvcmsgY29ubmVjdGlvbnMuIFRoZSByZXNvdXJjZXMgY2FuIHRoZW4gYmUgZGlzcG9zZWQgaW4KICAgIGBgRG9Gbi50ZWFyZG93bmBgLgogICAgIiIiCiAgICBwYXNzCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICAiIiJDYWxsZWQgYmVmb3JlIGEgYnVuZGxlIG9mIGVsZW1lbnRzIGlzIHByb2Nlc3NlZCBvbiBhIHdvcmtlci4KCiAgICBFbGVtZW50cyB0byBiZSBwcm9jZXNzZWQgYXJlIHNwbGl0IGludG8gYnVuZGxlcyBhbmQgZGlzdHJpYnV0ZWQKICAgIHRvIHdvcmtlcnMuIEJlZm9yZSBhIHdvcmtlciBjYWxscyBwcm9jZXNzKCkgb24gdGhlIGZpcnN0IGVsZW1lbnQKICAgIG9mIGl0cyBidW5kbGUsIGl0IGNhbGxzIHRoaXMgbWV0aG9kLgogICAgIiIiCiAgICBwYXNzCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYpOgogICAgIiIiQ2FsbGVkIGFmdGVyIGEgYnVuZGxlIG9mIGVsZW1lbnRzIGlzIHByb2Nlc3NlZCBvbiBhIHdvcmtlci4KICAgICIiIgogICAgcGFzcwoKICBkZWYgdGVhcmRvd24oc2VsZik6CiAgICAiIiJDYWxsZWQgdG8gdXNlIHRvIGNsZWFuIHVwIHRoaXMgaW5zdGFuY2UgYmVmb3JlIGl0IGlzIGRpc2NhcmRlZC4KCiAgICBBIHJ1bm5lciB3aWxsIGRvIGl0cyBiZXN0IHRvIGNhbGwgdGhpcyBtZXRob2Qgb24gYW55IGdpdmVuIGluc3RhbmNlIHRvCiAgICBwcmV2ZW50IGxlYWtzIG9mIHRyYW5zaWVudCByZXNvdXJjZXMsIGhvd2V2ZXIsIHRoZXJlIG1heSBiZSBzaXR1YXRpb25zIHdoZXJlCiAgICB0aGlzIGlzIGltcG9zc2libGUgKGUuZy4gcHJvY2VzcyBjcmFzaCwgaGFyZHdhcmUgZmFpbHVyZSwgZXRjLikgb3IKICAgIHVubmVjZXNzYXJ5IChlLmcuIHRoZSBwaXBlbGluZSBpcyBzaHV0dGluZyBkb3duIGFuZCB0aGUgcHJvY2VzcyBpcyBhYm91dCB0bwogICAgYmUga2lsbGVkIGFueXdheSwgc28gYWxsIHRyYW5zaWVudCByZXNvdXJjZXMgd2lsbCBiZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5CiAgICBieSB0aGUgT1MpLiBJbiB0aGVzZSBjYXNlcywgdGhlIGNhbGwgbWF5IG5vdCBoYXBwZW4uIEl0IHdpbGwgYWxzbyBub3QgYmUKICAgIHJldHJpZWQsIGJlY2F1c2UgaW4gc3VjaCBzaXR1YXRpb25zIHRoZSBEb0ZuIGluc3RhbmNlIG5vIGxvbmdlciBleGlzdHMsIHNvCiAgICB0aGVyZSdzIG5vIGluc3RhbmNlIHRvIHJldHJ5IGl0IG9uLgoKICAgIFRodXMsIGFsbCB3b3JrIHRoYXQgZGVwZW5kcyBvbiBpbnB1dCBlbGVtZW50cywgYW5kIGFsbCBleHRlcm5hbGx5IGltcG9ydGFudAogICAgc2lkZSBlZmZlY3RzLCBtdXN0IGJlIHBlcmZvcm1lZCBpbiBgYERvRm4ucHJvY2Vzc2BgIG9yCiAgICBgYERvRm4uZmluaXNoX2J1bmRsZWBgLgogICAgIiIiCiAgICBwYXNzCgogIGRlZiBnZXRfZnVuY3Rpb25fYXJndW1lbnRzKHNlbGYsIGZ1bmMpOgogICAgcmV0dXJuIGdldF9mdW5jdGlvbl9hcmd1bWVudHMoc2VsZiwgZnVuYykKCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIGZuX3R5cGVfaGludHMgPSB0eXBlaGludHMuZGVjb3JhdG9ycy5JT1R5cGVIaW50cy5mcm9tX2NhbGxhYmxlKHNlbGYucHJvY2VzcykKICAgIGlmIGZuX3R5cGVfaGludHMgaXMgbm90IE5vbmU6CiAgICAgIHRyeToKICAgICAgICBmbl90eXBlX2hpbnRzID0gZm5fdHlwZV9oaW50cy5zdHJpcF9pdGVyYWJsZSgpCiAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignUmV0dXJuIHZhbHVlIG5vdCBpdGVyYWJsZTogJXM6ICVzJyAlIChzZWxmLCBlKSkKICAgICMgUHJlZmVyIGNsYXNzIGRlY29yYXRvciB0eXBlIGhpbnRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBnZXRfdHlwZV9oaW50cyhzZWxmLl9fY2xhc3NfXykud2l0aF9kZWZhdWx0cyhmbl90eXBlX2hpbnRzKQoKICAjIFRPRE8oc291cmFiaGJhamFqKTogRG8gd2Ugd2FudCB0byByZW1vdmUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZXNlIGZyb20KICAjIHRoZSBEb0ZuIG9yIG1heWJlIHRoZSBydW5uZXIKICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICAjIFRPRE8oQkVBTS04MjQ3KTogU2lkZSBpbnB1dHMgdHlwZXMuCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBBc3NlcnQgY29tcGF0aWJpbGl0eSB3aXRoIGlucHV0IHR5cGUgaGludD8KICAgIHJldHVybiBzZWxmLl9zdHJpcF9vdXRwdXRfYW5ub3RhdGlvbnMoCiAgICAgICAgdHJpdmlhbF9pbmZlcmVuY2UuaW5mZXJfcmV0dXJuX3R5cGUoc2VsZi5wcm9jZXNzLCBbaW5wdXRfdHlwZV0pKQoKICBkZWYgX3N0cmlwX291dHB1dF9hbm5vdGF0aW9ucyhzZWxmLCB0eXBlX2hpbnQpOgogICAgYW5ub3RhdGlvbnMgPSAoVGltZXN0YW1wZWRWYWx1ZSwgV2luZG93ZWRWYWx1ZSwgcHZhbHVlLlRhZ2dlZE91dHB1dCkKICAgICMgVE9ETyhyb2JlcnR3Yik6IFRoZXNlIHNob3VsZCBiZSBwYXJhbWV0ZXJpemVkIHR5cGVzIHRoYXQgdGhlCiAgICAjIHR5cGUgaW5mZXJlbmNlciB1bmRlcnN0YW5kcy4KICAgIGlmICh0eXBlX2hpbnQgaW4gYW5ub3RhdGlvbnMgb3IKICAgICAgICB0cml2aWFsX2luZmVyZW5jZS5lbGVtZW50X3R5cGUodHlwZV9oaW50KSBpbiBhbm5vdGF0aW9ucyk6CiAgICAgIHJldHVybiB0eXBlaGludHMuQW55CiAgICByZXR1cm4gdHlwZV9oaW50CgogIGRlZiBfcHJvY2Vzc19hcmdzcGVjX2ZuKHNlbGYpOgogICAgIiIiUmV0dXJucyB0aGUgUHl0aG9uIGNhbGxhYmxlIHRoYXQgd2lsbCBldmVudHVhbGx5IGJlIGludm9rZWQuCgogICAgVGhpcyBzaG91bGQgaWRlYWxseSBiZSB0aGUgdXNlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoCiAgICB0aGUgbWFpbiBhbmQgKGlmIGFueSkgc2lkZSBpbnB1dHMsIGFuZCBpcyB1c2VkIHRvIHJlbGF0ZSB0aGUgdHlwZQogICAgaGludCBwYXJhbWV0ZXJzIHdpdGggdGhlIGlucHV0IHBhcmFtZXRlcnMgKGUuZy4sIGJ5IGFyZ3VtZW50IG5hbWUpLgogICAgIiIiCiAgICByZXR1cm4gc2VsZi5wcm9jZXNzCgogIHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfcGlja2xlX3VybihweXRob25fdXJucy5QSUNLTEVEX0RPRk4pCgoKZGVmIF9mbl90YWtlc19zaWRlX2lucHV0cyhmbik6CiAgdHJ5OgogICAgc2lnbmF0dXJlID0gZ2V0X3NpZ25hdHVyZShmbikKICBleGNlcHQgVHlwZUVycm9yOgogICAgIyBXZSBjYW4ndCB0ZWxsOyBtYXliZSBpdCBkb2VzLgogICAgcmV0dXJuIFRydWUKCiAgcmV0dXJuICgKICAgICAgbGVuKHNpZ25hdHVyZS5wYXJhbWV0ZXJzKSA+IDEgb3IgYW55KAogICAgICAgICAgcC5raW5kID09IHAuVkFSX1BPU0lUSU9OQUwgb3IgcC5raW5kID09IHAuVkFSX0tFWVdPUkQKICAgICAgICAgIGZvciBwIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLnZhbHVlcygpKSkKCgpjbGFzcyBDYWxsYWJsZVdyYXBwZXJEb0ZuKERvRm4pOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSBEb0ZuIChmdW5jdGlvbikgb2JqZWN0IHdyYXBwaW5nIGEgY2FsbGFibGUgb2JqZWN0LgoKICBUaGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGlzIHRvIGNvbnZlbmllbnRseSB3cmFwIHNpbXBsZSBmdW5jdGlvbnMgYW5kIHVzZQogIHRoZW0gaW4gdHJhbnNmb3Jtcy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZm4sIGZ1bGxhcmdzcGVjPU5vbmUpOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBDYWxsYWJsZVdyYXBwZXJEb0ZuIG9iamVjdCB3cmFwcGluZyBhIGNhbGxhYmxlLgoKICAgIEFyZ3M6CiAgICAgIGZuOiBBIGNhbGxhYmxlIG9iamVjdC4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogaWYgZm4gcGFyYW1ldGVyIGlzIG5vdCBhIGNhbGxhYmxlIHR5cGUuCiAgICAiIiIKICAgIGlmIG5vdCBjYWxsYWJsZShmbik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgYSBjYWxsYWJsZSBvYmplY3QgaW5zdGVhZCBvZjogJXInICUgZm4pCgogICAgc2VsZi5fZm4gPSBmbgogICAgc2VsZi5fZnVsbGFyZ3NwZWMgPSBmdWxsYXJnc3BlYwogICAgaWYgaXNpbnN0YW5jZSgKICAgICAgICBmbiwgKHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUsIHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSkpOgogICAgICBzZWxmLnByb2Nlc3MgPSBmbgogICAgZWxzZToKICAgICAgIyBGb3IgY2FzZXMgc3VjaCBhcyBzZXQgLyBsaXN0IHdoZXJlIGZuIGlzIGNhbGxhYmxlIGJ1dCBub3QgYSBmdW5jdGlvbgogICAgICBzZWxmLnByb2Nlc3MgPSBsYW1iZGEgZWxlbWVudDogZm4oZWxlbWVudCkKCiAgICBzdXBlcihDYWxsYWJsZVdyYXBwZXJEb0ZuLCBzZWxmKS5fX2luaXRfXygpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICAjIElmIHRoZSBjYWxsYWJsZSBoYXMgYSBuYW1lLCB0aGVuIGl0J3MgbGlrZWx5IGEgZnVuY3Rpb24sIGFuZAogICAgIyB3ZSBzaG93IGl0cyBuYW1lLgogICAgIyBPdGhlcndpc2UsIGl0IG1pZ2h0IGJlIGFuIGluc3RhbmNlIG9mIGEgY2FsbGFibGUgY2xhc3MuIFdlCiAgICAjIHNob3cgaXRzIGNsYXNzLgogICAgZGlzcGxheV9kYXRhX3ZhbHVlID0gKAogICAgICAgIHNlbGYuX2ZuLl9fbmFtZV9fCiAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9mbiwgJ19fbmFtZV9fJykgZWxzZSBzZWxmLl9mbi5fX2NsYXNzX18pCiAgICByZXR1cm4gewogICAgICAgICdmbic6IERpc3BsYXlEYXRhSXRlbShkaXNwbGF5X2RhdGFfdmFsdWUsIGxhYmVsPSdUcmFuc2Zvcm0gRnVuY3Rpb24nKQogICAgfQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0NhbGxhYmxlV3JhcHBlckRvRm4oJXMpJyAlIHNlbGYuX2ZuCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBmbl90eXBlX2hpbnRzID0gdHlwZWhpbnRzLmRlY29yYXRvcnMuSU9UeXBlSGludHMuZnJvbV9jYWxsYWJsZShzZWxmLl9mbikKICAgIHR5cGVfaGludHMgPSBnZXRfdHlwZV9oaW50cyhzZWxmLl9mbikud2l0aF9kZWZhdWx0cyhmbl90eXBlX2hpbnRzKQogICAgIyBUaGUgZm4ncyBvdXRwdXQgdHlwZSBzaG91bGQgYmUgaXRlcmFibGUuIFN0cmlwIG9mZiB0aGUgb3V0ZXIKICAgICMgY29udGFpbmVyIHR5cGUgZHVlIHRvIHRoZSAnZmxhdHRlbicgcG9ydGlvbiBvZiBGbGF0TWFwL1BhckRvLgogICAgdHJ5OgogICAgICB0eXBlX2hpbnRzID0gdHlwZV9oaW50cy5zdHJpcF9pdGVyYWJsZSgpCiAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAjIFRPRE8oQkVBTS04NDY2KTogUmFpc2UgZXhjZXB0aW9uIGhlcmUgaWYgdXNpbmcgc3RyaWN0ZXIgdHlwZSBjaGVja2luZy4KICAgICAgX0xPR0dFUi53YXJuaW5nKCclczogJXMnLCBzZWxmLmRpc3BsYXlfZGF0YSgpWydmbiddLnZhbHVlLCBlKQogICAgcmV0dXJuIHR5cGVfaGludHMKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgcmV0dXJuIHNlbGYuX3N0cmlwX291dHB1dF9hbm5vdGF0aW9ucygKICAgICAgICB0cml2aWFsX2luZmVyZW5jZS5pbmZlcl9yZXR1cm5fdHlwZShzZWxmLl9mbiwgW2lucHV0X3R5cGVdKSkKCiAgZGVmIF9wcm9jZXNzX2FyZ3NwZWNfZm4oc2VsZik6CiAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9mbiwgJ19hcmdzcGVjX2ZuJywgc2VsZi5fZm4pCgogIGRlZiBfaW5zcGVjdF9wcm9jZXNzKHNlbGYpOgogICAgaWYgc2VsZi5fZnVsbGFyZ3NwZWM6CiAgICAgIHJldHVybiBzZWxmLl9mdWxsYXJnc3BlYwogICAgZWxzZToKICAgICAgcmV0dXJuIGdldF9mdW5jdGlvbl9hcmdzX2RlZmF1bHRzKHNlbGYuX3Byb2Nlc3NfYXJnc3BlY19mbigpKQoKCmNsYXNzIENvbWJpbmVGbihXaXRoVHlwZUhpbnRzLCBIYXNEaXNwbGF5RGF0YSwgdXJucy5SdW5uZXJBcGlGbik6CiAgIiIiQSBmdW5jdGlvbiBvYmplY3QgdXNlZCBieSBhIENvbWJpbmUgdHJhbnNmb3JtIHdpdGggY3VzdG9tIHByb2Nlc3NpbmcuCgogIEEgQ29tYmluZUZuIHNwZWNpZmllcyBob3cgbXVsdGlwbGUgdmFsdWVzIGluIGFsbCBvciBwYXJ0IG9mIGEgUENvbGxlY3Rpb24gY2FuCiAgYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgdmFsdWUtLS1lc3NlbnRpYWxseSBwcm92aWRpbmcgdGhlIHNhbWUga2luZCBvZgogIGluZm9ybWF0aW9uIGFzIHRoZSBhcmd1bWVudHMgdG8gdGhlIFB5dGhvbiAicmVkdWNlIiBidWlsdGluIChleGNlcHQgZm9yIHRoZQogIGlucHV0IGFyZ3VtZW50LCB3aGljaCBpcyBhbiBpbnN0YW5jZSBvZiBDb21iaW5lRm5Qcm9jZXNzQ29udGV4dCkuIFRoZQogIGNvbWJpbmluZyBwcm9jZXNzIHByb2NlZWRzIGFzIGZvbGxvd3M6CgogIDEuIElucHV0IHZhbHVlcyBhcmUgcGFydGl0aW9uZWQgaW50byBvbmUgb3IgbW9yZSBiYXRjaGVzLgogIDIuIEZvciBlYWNoIGJhdGNoLCB0aGUgY3JlYXRlX2FjY3VtdWxhdG9yIG1ldGhvZCBpcyBpbnZva2VkIHRvIGNyZWF0ZSBhIGZyZXNoCiAgICAgaW5pdGlhbCAiYWNjdW11bGF0b3IiIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgY29tYmluYXRpb24gb2YgemVybyB2YWx1ZXMuCiAgMy4gRm9yIGVhY2ggaW5wdXQgdmFsdWUgaW4gdGhlIGJhdGNoLCB0aGUgYWRkX2lucHV0IG1ldGhvZCBpcyBpbnZva2VkIHRvCiAgICAgY29tYmluZSBtb3JlIHZhbHVlcyB3aXRoIHRoZSBhY2N1bXVsYXRvciBmb3IgdGhhdCBiYXRjaC4KICA0LiBUaGUgbWVyZ2VfYWNjdW11bGF0b3JzIG1ldGhvZCBpcyBpbnZva2VkIHRvIGNvbWJpbmUgYWNjdW11bGF0b3JzIGZyb20KICAgICBzZXBhcmF0ZSBiYXRjaGVzIGludG8gYSBzaW5nbGUgY29tYmluZWQgb3V0cHV0IGFjY3VtdWxhdG9yIHZhbHVlLCBvbmNlIGFsbAogICAgIG9mIHRoZSBhY2N1bXVsYXRvcnMgaGF2ZSBoYWQgYWxsIHRoZSBpbnB1dCB2YWx1ZSBpbiB0aGVpciBiYXRjaGVzIGFkZGVkIHRvCiAgICAgdGhlbS4gVGhpcyBvcGVyYXRpb24gaXMgaW52b2tlZCByZXBlYXRlZGx5LCB1bnRpbCB0aGVyZSBpcyBvbmx5IG9uZQogICAgIGFjY3VtdWxhdG9yIHZhbHVlIGxlZnQuCiAgNS4gVGhlIGV4dHJhY3Rfb3V0cHV0IG9wZXJhdGlvbiBpcyBpbnZva2VkIG9uIHRoZSBmaW5hbCBhY2N1bXVsYXRvciB0byBnZXQKICAgICB0aGUgb3V0cHV0IHZhbHVlLgoKICBOb3RlOiBJZiB0aGlzICoqQ29tYmluZUZuKiogaXMgdXNlZCB3aXRoIGEgdHJhbnNmb3JtIHRoYXQgaGFzIGRlZmF1bHRzLAogICoqYXBwbHkqKiB3aWxsIGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGxpc3QgYXQgZXhwYW5zaW9uIHRpbWUgdG8gZ2V0IHRoZQogIGRlZmF1bHQgdmFsdWUuCiAgIiIiCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiUmV0dXJuIGEgZnJlc2gsIGVtcHR5IGFjY3VtdWxhdG9yIGZvciB0aGUgY29tYmluZSBvcGVyYXRpb24uCgogICAgQXJnczoKICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBhZGRfaW5wdXQoc2VsZiwgbXV0YWJsZV9hY2N1bXVsYXRvciwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybiByZXN1bHQgb2YgZm9sZGluZyBlbGVtZW50IGludG8gYWNjdW11bGF0b3IuCgogICAgQ29tYmluZUZuIGltcGxlbWVudG9ycyBtdXN0IG92ZXJyaWRlIGFkZF9pbnB1dC4KCiAgICBBcmdzOgogICAgICBtdXRhYmxlX2FjY3VtdWxhdG9yOiB0aGUgY3VycmVudCBhY2N1bXVsYXRvciwKICAgICAgICBtYXkgYmUgbW9kaWZpZWQgYW5kIHJldHVybmVkIGZvciBlZmZpY2llbmN5CiAgICAgIGVsZW1lbnQ6IHRoZSBlbGVtZW50IHRvIGFkZCwgc2hvdWxkIG5vdCBiZSBtdXRhdGVkCiAgICAgICphcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAgICoqa3dhcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Ioc3RyKHNlbGYpKQoKICBkZWYgYWRkX2lucHV0cyhzZWxmLCBtdXRhYmxlX2FjY3VtdWxhdG9yLCBlbGVtZW50cywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgdGhlIHJlc3VsdCBvZiBmb2xkaW5nIGVhY2ggZWxlbWVudCBpbiBlbGVtZW50cyBpbnRvIGFjY3VtdWxhdG9yLgoKICAgIFRoaXMgaXMgcHJvdmlkZWQgaW4gY2FzZSB0aGUgaW1wbGVtZW50YXRpb24gYWZmb3JkcyBtb3JlIGVmZmljaWVudAogICAgYnVsayBhZGRpdGlvbiBvZiBlbGVtZW50cy4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IGxvb3BzCiAgICBvdmVyIHRoZSBpbnB1dHMgaW52b2tpbmcgYWRkX2lucHV0IGZvciBlYWNoIG9uZS4KCiAgICBBcmdzOgogICAgICBtdXRhYmxlX2FjY3VtdWxhdG9yOiB0aGUgY3VycmVudCBhY2N1bXVsYXRvciwKICAgICAgICBtYXkgYmUgbW9kaWZpZWQgYW5kIHJldHVybmVkIGZvciBlZmZpY2llbmN5CiAgICAgIGVsZW1lbnRzOiB0aGUgZWxlbWVudHMgdG8gYWRkLCBzaG91bGQgbm90IGJlIG11dGF0ZWQKICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgIG11dGFibGVfYWNjdW11bGF0b3IgPVwKICAgICAgICBzZWxmLmFkZF9pbnB1dChtdXRhYmxlX2FjY3VtdWxhdG9yLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpCiAgICByZXR1cm4gbXV0YWJsZV9hY2N1bXVsYXRvcgoKICBkZWYgbWVyZ2VfYWNjdW11bGF0b3JzKHNlbGYsIGFjY3VtdWxhdG9ycywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgdGhlIHJlc3VsdCBvZiBtZXJnaW5nIHNldmVyYWwgYWNjdW11bGF0b3JzCiAgICB0byBhIHNpbmdsZSBhY2N1bXVsYXRvciB2YWx1ZS4KCiAgICBBcmdzOgogICAgICBhY2N1bXVsYXRvcnM6IHRoZSBhY2N1bXVsYXRvcnMgdG8gbWVyZ2UuCiAgICAgICAgT25seSB0aGUgZmlyc3QgYWNjdW11bGF0b3IgbWF5IGJlIG1vZGlmaWVkIGFuZCByZXR1cm5lZCBmb3IgZWZmaWNpZW5jeTsKICAgICAgICB0aGUgb3RoZXIgYWNjdW11bGF0b3JzIHNob3VsZCBub3QgYmUgbXV0YXRlZCwgYmVjYXVzZSB0aGV5IG1heSBiZQogICAgICAgIHNoYXJlZCB3aXRoIG90aGVyIGNvZGUgYW5kIG11dGF0aW5nIHRoZW0gY291bGQgbGVhZCB0byBpbmNvcnJlY3QKICAgICAgICByZXN1bHRzIG9yIGRhdGEgY29ycnVwdGlvbi4KICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBjb21wYWN0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiT3B0aW9uYWxseSByZXR1cm5zIGEgbW9yZSBjb21wYWN0IHJlcHJlc2VuYXRpb24gb2YgdGhlIGFjY3VtdWxhdG9yLgoKICAgIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBhbiBhY2N1bXVsYXRvciBpcyBzZW50IGFjcm9zcyB0aGUgd2lyZSwgYW5kIGNhbgogICAgYmUgdXNlZnVsIGluIGNhc2VzIHdoZXJlIHZhbHVlcyBhcmUgYnVmZmVyZWQgb3Igb3RoZXJ3aXNlIGxhemlseQogICAga2VwdCB1bnByb2Nlc3NlZCB3aGVuIGFkZGVkIHRvIHRoZSBhY2N1bXVsYXRvci4gIFNob3VsZCByZXR1cm4gYW4KICAgIGVxdWl2YWxlbnQsIHRob3VnaCBwb3NzaWJseSBtb2RpZmllZCwgYWNjdW11bGF0b3IuCgogICAgQnkgZGVmYXVsdCByZXR1cm5zIHRoZSBhY2N1bXVsYXRvciB1bm1vZGlmaWVkLgoKICAgIEFyZ3M6CiAgICAgIGFjY3VtdWxhdG9yOiB0aGUgY3VycmVudCBhY2N1bXVsYXRvcgogICAgICAqYXJnczogQWRkaXRpb25hbCBhcmd1bWVudHMgYW5kIHNpZGUgaW5wdXRzLgogICAgICAqKmt3YXJnczogQWRkaXRpb25hbCBhcmd1bWVudHMgYW5kIHNpZGUgaW5wdXRzLgogICAgIiIiCiAgICByZXR1cm4gYWNjdW11bGF0b3IKCiAgZGVmIGV4dHJhY3Rfb3V0cHV0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiUmV0dXJuIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGFjY3VtdWxhdG9yIGludG8gdGhlIG91dHB1dCB2YWx1ZS4KCiAgICBBcmdzOgogICAgICBhY2N1bXVsYXRvcjogdGhlIGZpbmFsIGFjY3VtdWxhdG9yIHZhbHVlIGNvbXB1dGVkIGJ5IHRoaXMgQ29tYmluZUZuCiAgICAgICAgZm9yIHRoZSBlbnRpcmUgaW5wdXQga2V5IG9yIFBDb2xsZWN0aW9uLiBDYW4gYmUgbW9kaWZpZWQgZm9yCiAgICAgICAgZWZmaWNpZW5jeS4KICAgICAgKmFyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IEFkZGl0aW9uYWwgYXJndW1lbnRzIGFuZCBzaWRlIGlucHV0cy4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihzdHIoc2VsZikpCgogIGRlZiBhcHBseShzZWxmLCBlbGVtZW50cywgKmFyZ3MsICoqa3dhcmdzKToKICAgICIiIlJldHVybnMgcmVzdWx0IG9mIGFwcGx5aW5nIHRoaXMgQ29tYmluZUZuIHRvIHRoZSBpbnB1dCB2YWx1ZXMuCgogICAgQXJnczoKICAgICAgZWxlbWVudHM6IHRoZSBzZXQgb2YgdmFsdWVzIHRvIGNvbWJpbmUuCiAgICAgICphcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAgICoqa3dhcmdzOiBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCiAgICAiIiIKICAgIHJldHVybiBzZWxmLmV4dHJhY3Rfb3V0cHV0KAogICAgICAgIHNlbGYuYWRkX2lucHV0cygKICAgICAgICAgICAgc2VsZi5jcmVhdGVfYWNjdW11bGF0b3IoKmFyZ3MsICoqa3dhcmdzKSwgZWxlbWVudHMsICphcmdzLAogICAgICAgICAgICAqKmt3YXJncyksCiAgICAgICAgKmFyZ3MsCiAgICAgICAgKiprd2FyZ3MpCgogIGRlZiBmb3JfaW5wdXRfdHlwZShzZWxmLCBpbnB1dF90eXBlKToKICAgICIiIlJldHVybnMgYSBzcGVjaWFsaXplZCBpbXBsZW1lbnRhdGlvbiBvZiBzZWxmLCBpZiBpdCBleGlzdHMuCgogICAgT3RoZXJ3aXNlLCByZXR1cm5zIHNlbGYuCgogICAgQXJnczoKICAgICAgaW5wdXRfdHlwZTogdGhlIHR5cGUgb2YgaW5wdXQgZWxlbWVudHMuCiAgICAiIiIKICAgIHJldHVybiBzZWxmCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9jYWxsYWJsZShmbik6CiAgICByZXR1cm4gQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuKGZuKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIG1heWJlX2Zyb21fY2FsbGFibGUoZm4sIGhhc19zaWRlX2lucHV0cz1UcnVlKToKICAgICMgdHlwZTogKHR5cGluZy5VbmlvbltDb21iaW5lRm4sIHR5cGluZy5DYWxsYWJsZV0sIGJvb2wpIC0+IENvbWJpbmVGbgogICAgaWYgaXNpbnN0YW5jZShmbiwgQ29tYmluZUZuKToKICAgICAgcmV0dXJuIGZuCiAgICBlbGlmIGNhbGxhYmxlKGZuKSBhbmQgbm90IGhhc19zaWRlX2lucHV0czoKICAgICAgcmV0dXJuIE5vU2lkZUlucHV0c0NhbGxhYmxlV3JhcHBlckNvbWJpbmVGbihmbikKICAgIGVsaWYgY2FsbGFibGUoZm4pOgogICAgICByZXR1cm4gQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuKGZuKQogICAgZWxzZToKICAgICAgcmFpc2UgVHlwZUVycm9yKCdFeHBlY3RlZCBhIENvbWJpbmVGbiBvciBjYWxsYWJsZSwgZ290ICVyJyAlIGZuKQoKICBkZWYgZ2V0X2FjY3VtdWxhdG9yX2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIob2JqZWN0KQoKICB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3BpY2tsZV91cm4ocHl0aG9uX3VybnMuUElDS0xFRF9DT01CSU5FX0ZOKQoKCmNsYXNzIF9SZWl0ZXJhYmxlQ2hhaW4ob2JqZWN0KToKICAiIiJMaWtlIGl0ZXJ0b29scy5jaGFpbiwgYnV0IGFsbG93aW5nIHJlLWl0ZXJhdGlvbi4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGVzKToKICAgIHNlbGYuaXRlcmFibGVzID0gaXRlcmFibGVzCgogIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgIGZvciBpdGVyYWJsZSBpbiBzZWxmLml0ZXJhYmxlczoKICAgICAgZm9yIGl0ZW0gaW4gaXRlcmFibGU6CiAgICAgICAgeWllbGQgaXRlbQoKICBkZWYgX19ib29sX18oc2VsZik6CiAgICBmb3IgaXRlcmFibGUgaW4gc2VsZi5pdGVyYWJsZXM6CiAgICAgIGZvciBfIGluIGl0ZXJhYmxlOgogICAgICAgIHJldHVybiBUcnVlCiAgICByZXR1cm4gRmFsc2UKCgpjbGFzcyBDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4oQ29tYmluZUZuKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgQ29tYmluZUZuIChmdW5jdGlvbikgb2JqZWN0IHdyYXBwaW5nIGEgY2FsbGFibGUgb2JqZWN0LgoKICBUaGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGlzIHRvIGNvbnZlbmllbnRseSB3cmFwIHNpbXBsZSBmdW5jdGlvbnMgYW5kIHVzZQogIHRoZW0gaW4gQ29tYmluZSB0cmFuc2Zvcm1zLgogICIiIgogIF9ERUZBVUxUX0JVRkZFUl9TSVpFID0gMTAKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZuLCBidWZmZXJfc2l6ZT1fREVGQVVMVF9CVUZGRVJfU0laRSk6CiAgICAiIiJJbml0aWFsaXplcyBhIENhbGxhYmxlRm4gb2JqZWN0IHdyYXBwaW5nIGEgY2FsbGFibGUuCgogICAgQXJnczoKICAgICAgZm46IEEgY2FsbGFibGUgb2JqZWN0IHRoYXQgcmVkdWNlcyBlbGVtZW50cyBvZiBhbiBpdGVyYWJsZSB0byBhIHNpbmdsZQogICAgICAgIHZhbHVlIChsaWtlIHRoZSBidWlsdGlucyBzdW0gYW5kIG1heCkuIFRoaXMgY2FsbGFibGUgbXVzdCBiZSBjYXBhYmxlIG9mCiAgICAgICAgcmVjZWl2aW5nIHRoZSBraW5kIG9mIHZhbHVlcyBpdCBnZW5lcmF0ZXMgYXMgb3V0cHV0IGluIGl0cyBpbnB1dCwgYW5kCiAgICAgICAgZm9yIGJlc3QgcmVzdWx0cywgaXRzIG9wZXJhdGlvbiBtdXN0IGJlIGNvbW11dGF0aXZlIGFuZCBhc3NvY2lhdGl2ZS4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogaWYgZm4gcGFyYW1ldGVyIGlzIG5vdCBhIGNhbGxhYmxlIHR5cGUuCiAgICAiIiIKICAgIGlmIG5vdCBjYWxsYWJsZShmbik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgYSBjYWxsYWJsZSBvYmplY3QgaW5zdGVhZCBvZjogJXInICUgZm4pCgogICAgc3VwZXIoQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLl9mbiA9IGZuCiAgICBzZWxmLl9idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydmbl9kZCc6IHNlbGYuX2ZufQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gIiVzKCVzKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX2ZuKQoKICBkZWYgY3JlYXRlX2FjY3VtdWxhdG9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gW10KCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGFjY3VtdWxhdG9yLmFwcGVuZChlbGVtZW50KQogICAgaWYgbGVuKGFjY3VtdWxhdG9yKSA+IHNlbGYuX2J1ZmZlcl9zaXplOgogICAgICBhY2N1bXVsYXRvciA9IFtzZWxmLl9mbihhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKV0KICAgIHJldHVybiBhY2N1bXVsYXRvcgoKICBkZWYgYWRkX2lucHV0cyhzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudHMsICphcmdzLCAqKmt3YXJncyk6CiAgICBhY2N1bXVsYXRvci5leHRlbmQoZWxlbWVudHMpCiAgICBpZiBsZW4oYWNjdW11bGF0b3IpID4gc2VsZi5fYnVmZmVyX3NpemU6CiAgICAgIGFjY3VtdWxhdG9yID0gW3NlbGYuX2ZuKGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpXQogICAgcmV0dXJuIGFjY3VtdWxhdG9yCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIFtzZWxmLl9mbihfUmVpdGVyYWJsZUNoYWluKGFjY3VtdWxhdG9ycyksICphcmdzLCAqKmt3YXJncyldCgogIGRlZiBjb21wYWN0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgbGVuKGFjY3VtdWxhdG9yKSA8PSAxOgogICAgICByZXR1cm4gYWNjdW11bGF0b3IKICAgIGVsc2U6CiAgICAgIHJldHVybiBbc2VsZi5fZm4oYWNjdW11bGF0b3IsICphcmdzLCAqKmt3YXJncyldCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHJldHVybiBzZWxmLl9mbihhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKQoKICBkZWYgZGVmYXVsdF90eXBlX2hpbnRzKHNlbGYpOgogICAgZm5faGludHMgPSBnZXRfdHlwZV9oaW50cyhzZWxmLl9mbikKICAgIGlmIGZuX2hpbnRzLmlucHV0X3R5cGVzIGlzIE5vbmU6CiAgICAgIHJldHVybiBmbl9oaW50cwogICAgZWxzZToKICAgICAgIyBmbihJdGVyYWJsZVtWXSkgLT4gViBiZWNvbWVzIENvbWJpbmVGbihWKSAtPiBWCiAgICAgIGlucHV0X2FyZ3MsIGlucHV0X2t3YXJncyA9IGZuX2hpbnRzLmlucHV0X3R5cGVzCiAgICAgIGlmIG5vdCBpbnB1dF9hcmdzOgogICAgICAgIGlmIGxlbihpbnB1dF9rd2FyZ3MpID09IDE6CiAgICAgICAgICBpbnB1dF9hcmdzLCBpbnB1dF9rd2FyZ3MgPSB0dXBsZShpbnB1dF9rd2FyZ3MudmFsdWVzKCkpLCB7fQogICAgICAgIGVsc2U6CiAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0NvbWJpbmVyIGlucHV0IHR5cGUgbXVzdCBiZSBzcGVjaWZpZWQgcG9zaXRpb25hbGx5LicpCiAgICAgIGlmIG5vdCBpc19jb25zaXN0ZW50X3dpdGgoaW5wdXRfYXJnc1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlaGludHMuSXRlcmFibGVbdHlwZWhpbnRzLkFueV0pOgogICAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgICAnQWxsIGZ1bmN0aW9ucyBmb3IgYSBDb21iaW5lIFBUcmFuc2Zvcm0gbXVzdCBhY2NlcHQgYSAnCiAgICAgICAgICAgICdzaW5nbGUgYXJndW1lbnQgY29tcGF0aWJsZSB3aXRoOiBJdGVyYWJsZVtBbnldLiAnCiAgICAgICAgICAgICdJbnN0ZWFkIGEgZnVuY3Rpb24gd2l0aCBpbnB1dCB0eXBlOiAlcyB3YXMgcmVjZWl2ZWQuJyAlCiAgICAgICAgICAgIGlucHV0X2FyZ3NbMF0pCiAgICAgIGlucHV0X2FyZ3MgPSAoZWxlbWVudF90eXBlKGlucHV0X2FyZ3NbMF0pLCApICsgaW5wdXRfYXJnc1sxOl0KICAgICAgIyBUT0RPKHJvYmVydHdiKTogQXNzZXJ0IG91dHB1dCB0eXBlIGlzIGNvbnNpc3RlbnQgd2l0aCBpbnB1dCB0eXBlPwogICAgICByZXR1cm4gZm5faGludHMud2l0aF9pbnB1dF90eXBlcygqaW5wdXRfYXJncywgKippbnB1dF9rd2FyZ3MpCgogIGRlZiBmb3JfaW5wdXRfdHlwZShzZWxmLCBpbnB1dF90eXBlKToKICAgICMgQXZvaWQgY2lyY3VsYXIgaW1wb3J0cy4KICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgY3lfY29tYmluZXJzCiAgICBpZiBzZWxmLl9mbiBpcyBhbnk6CiAgICAgIHJldHVybiBjeV9jb21iaW5lcnMuQW55Q29tYmluZUZuKCkKICAgIGVsaWYgc2VsZi5fZm4gaXMgYWxsOgogICAgICByZXR1cm4gY3lfY29tYmluZXJzLkFsbENvbWJpbmVGbigpCiAgICBlbHNlOgogICAgICBrbm93bl90eXBlcyA9IHsKICAgICAgICAgIChzdW0sIGludCk6IGN5X2NvbWJpbmVycy5TdW1JbnQ2NEZuKCksCiAgICAgICAgICAobWluLCBpbnQpOiBjeV9jb21iaW5lcnMuTWluSW50NjRGbigpLAogICAgICAgICAgKG1heCwgaW50KTogY3lfY29tYmluZXJzLk1heEludDY0Rm4oKSwKICAgICAgICAgIChzdW0sIGZsb2F0KTogY3lfY29tYmluZXJzLlN1bUZsb2F0Rm4oKSwKICAgICAgICAgIChtaW4sIGZsb2F0KTogY3lfY29tYmluZXJzLk1pbkZsb2F0Rm4oKSwKICAgICAgICAgIChtYXgsIGZsb2F0KTogY3lfY29tYmluZXJzLk1heEZsb2F0Rm4oKSwKICAgICAgfQogICAgcmV0dXJuIGtub3duX3R5cGVzLmdldCgoc2VsZi5fZm4sIGlucHV0X3R5cGUpLCBzZWxmKQoKCmNsYXNzIE5vU2lkZUlucHV0c0NhbGxhYmxlV3JhcHBlckNvbWJpbmVGbihDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4pOgogICIiIkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCiAgQSBDb21iaW5lRm4gKGZ1bmN0aW9uKSBvYmplY3Qgd3JhcHBpbmcgYSBjYWxsYWJsZSBvYmplY3Qgd2l0aCBubyBzaWRlIGlucHV0cy4KCiAgVGhpcyBpcyBpZGVudGljYWwgdG8gaXRzIHBhcmVudCwgYnV0IGF2b2lkcyBhY2NlcHRpbmcgYW5kIHBhc3NpbmcgKmFyZ3MKICBhbmQgKiprd2FyZ3MgZm9yIGVmZmljaWVuY3kgYXMgdGhleSBhcmUga25vd24gdG8gYmUgZW1wdHkuCiAgIiIiCiAgZGVmIGNyZWF0ZV9hY2N1bXVsYXRvcihzZWxmKToKICAgIHJldHVybiBbXQoKICBkZWYgYWRkX2lucHV0KHNlbGYsIGFjY3VtdWxhdG9yLCBlbGVtZW50KToKICAgIGFjY3VtdWxhdG9yLmFwcGVuZChlbGVtZW50KQogICAgaWYgbGVuKGFjY3VtdWxhdG9yKSA+IHNlbGYuX2J1ZmZlcl9zaXplOgogICAgICBhY2N1bXVsYXRvciA9IFtzZWxmLl9mbihhY2N1bXVsYXRvcildCiAgICByZXR1cm4gYWNjdW11bGF0b3IKCiAgZGVmIGFkZF9pbnB1dHMoc2VsZiwgYWNjdW11bGF0b3IsIGVsZW1lbnRzKToKICAgIGFjY3VtdWxhdG9yLmV4dGVuZChlbGVtZW50cykKICAgIGlmIGxlbihhY2N1bXVsYXRvcikgPiBzZWxmLl9idWZmZXJfc2l6ZToKICAgICAgYWNjdW11bGF0b3IgPSBbc2VsZi5fZm4oYWNjdW11bGF0b3IpXQogICAgcmV0dXJuIGFjY3VtdWxhdG9yCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgIHJldHVybiBbc2VsZi5fZm4oX1JlaXRlcmFibGVDaGFpbihhY2N1bXVsYXRvcnMpKV0KCiAgZGVmIGNvbXBhY3Qoc2VsZiwgYWNjdW11bGF0b3IpOgogICAgaWYgbGVuKGFjY3VtdWxhdG9yKSA8PSAxOgogICAgICByZXR1cm4gYWNjdW11bGF0b3IKICAgIGVsc2U6CiAgICAgIHJldHVybiBbc2VsZi5fZm4oYWNjdW11bGF0b3IpXQoKICBkZWYgZXh0cmFjdF9vdXRwdXQoc2VsZiwgYWNjdW11bGF0b3IpOgogICAgcmV0dXJuIHNlbGYuX2ZuKGFjY3VtdWxhdG9yKQoKCmNsYXNzIFBhcnRpdGlvbkZuKFdpdGhUeXBlSGludHMpOgogICIiIkEgZnVuY3Rpb24gb2JqZWN0IHVzZWQgYnkgYSBQYXJ0aXRpb24gdHJhbnNmb3JtLgoKICBBIFBhcnRpdGlvbkZuIHNwZWNpZmllcyBob3cgaW5kaXZpZHVhbCB2YWx1ZXMgaW4gYSBQQ29sbGVjdGlvbiB3aWxsIGJlIHBsYWNlZAogIGludG8gc2VwYXJhdGUgcGFydGl0aW9ucywgaW5kZXhlZCBieSBhbiBpbnRlZ2VyLgogICIiIgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiBwYXJ0aXRpb25fZm9yKHNlbGYsIGVsZW1lbnQsIG51bV9wYXJ0aXRpb25zLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyB0eXBlOiAoVCwgaW50LCAqdHlwaW5nLkFueSwgKip0eXBpbmcuQW55KSAtPiBpbnQKCiAgICAiIiJTcGVjaWZ5IHdoaWNoIHBhcnRpdGlvbiB3aWxsIHJlY2VpdmUgdGhpcyBlbGVtZW50LgoKICAgIEFyZ3M6CiAgICAgIGVsZW1lbnQ6IEFuIGVsZW1lbnQgb2YgdGhlIGlucHV0IFBDb2xsZWN0aW9uLgogICAgICBudW1fcGFydGl0aW9uczogTnVtYmVyIG9mIHBhcnRpdGlvbnMsIGkuZS4sIG91dHB1dCBQQ29sbGVjdGlvbnMuCiAgICAgICphcmdzOiBvcHRpb25hbCBwYXJhbWV0ZXJzIGFuZCBzaWRlIGlucHV0cy4KICAgICAgKiprd2FyZ3M6IG9wdGlvbmFsIHBhcmFtZXRlcnMgYW5kIHNpZGUgaW5wdXRzLgoKICAgIFJldHVybnM6CiAgICAgIEFuIGludGVnZXIgaW4gWzAsIG51bV9wYXJ0aXRpb25zKS4KICAgICIiIgogICAgcGFzcwoKCmNsYXNzIENhbGxhYmxlV3JhcHBlclBhcnRpdGlvbkZuKFBhcnRpdGlvbkZuKToKICAiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgogIEEgUGFydGl0aW9uRm4gb2JqZWN0IHdyYXBwaW5nIGEgY2FsbGFibGUgb2JqZWN0LgoKICBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyB3cmFwIHNpbXBsZSBmdW5jdGlvbnMgZm9yIHVzZSBpbiBQYXJ0aXRpb24gb3BlcmF0aW9ucy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZm4pOgogICAgIiIiSW5pdGlhbGl6ZXMgYSBQYXJ0aXRpb25GbiBvYmplY3Qgd3JhcHBpbmcgYSBjYWxsYWJsZS4KCiAgICBBcmdzOgogICAgICBmbjogQSBjYWxsYWJsZSBvYmplY3QsIHdoaWNoIHNob3VsZCBhY2NlcHQgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CiAgICAgICAgICAgIGVsZW1lbnQgLSBlbGVtZW50IHRvIGFzc2lnbiB0byBhIHBhcnRpdGlvbi4KICAgICAgICAgICAgbnVtX3BhcnRpdGlvbnMgLSBudW1iZXIgb2Ygb3V0cHV0IHBhcnRpdGlvbnMuCiAgICAgICAgICBhbmQgbWF5IGFjY2VwdCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMuCgogICAgUmFpc2VzOgogICAgICBUeXBlRXJyb3I6IGlmIGZuIGlzIG5vdCBhIGNhbGxhYmxlIHR5cGUuCiAgICAiIiIKICAgIGlmIG5vdCBjYWxsYWJsZShmbik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgYSBjYWxsYWJsZSBvYmplY3QgaW5zdGVhZCBvZjogJXInICUgZm4pCiAgICBzZWxmLl9mbiA9IGZuCgogIGRlZiBwYXJ0aXRpb25fZm9yKHNlbGYsIGVsZW1lbnQsIG51bV9wYXJ0aXRpb25zLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyB0eXBlOiAoVCwgaW50LCAqdHlwaW5nLkFueSwgKip0eXBpbmcuQW55KSAtPiBpbnQKICAgIHJldHVybiBzZWxmLl9mbihlbGVtZW50LCBudW1fcGFydGl0aW9ucywgKmFyZ3MsICoqa3dhcmdzKQoKCmNsYXNzIFBhckRvKFBUcmFuc2Zvcm1XaXRoU2lkZUlucHV0cyk6CiAgIiIiQSA6Y2xhc3M6YFBhckRvYCB0cmFuc2Zvcm0uCgogIFByb2Nlc3NlcyBhbiBpbnB1dCA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGJ5IGFwcGx5aW5nIGEKICA6Y2xhc3M6YERvRm5gIHRvIGVhY2ggZWxlbWVudCBhbmQgcmV0dXJuaW5nIHRoZSBhY2N1bXVsYXRlZCByZXN1bHRzIGludG8gYW4KICBvdXRwdXQgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYC4gVGhlIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGlzCiAgbm90IGZpeGVkIGFzIGxvbmcgYXMgdGhlIDpjbGFzczpgRG9GbmAgY2FuIGRlYWwgd2l0aCBpdC4gSW4gcmVhbGl0eSB0aGUgdHlwZQogIGlzIHJlc3RyYWluZWQgdG8gc29tZSBleHRlbnQgYmVjYXVzZSB0aGUgZWxlbWVudHMgc29tZXRpbWVzIG11c3QgYmUgcGVyc2lzdGVkCiAgdG8gZXh0ZXJuYWwgc3RvcmFnZS4gU2VlIHRoZSA6bWV0aDpgLmV4cGFuZCgpYCBtZXRob2QgY29tbWVudHMgZm9yIGEKICBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBhbGwgcG9zc2libGUgYXJndW1lbnRzLgoKICBOb3RlIHRoYXQgdGhlIDpjbGFzczpgRG9GbmAgbXVzdCByZXR1cm4gYW4gaXRlcmFibGUgZm9yIGVhY2ggZWxlbWVudCBvZiB0aGUKICBpbnB1dCA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gLiBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHRvCiAgdXNlIHRoZSBgYHlpZWxkYGAga2V5d29yZCBpbiB0aGUgcHJvY2VzcyBtZXRob2QuCgogIEFyZ3M6CiAgICBwY29sbCAofmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbik6CiAgICAgIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCB0byBiZSBwcm9jZXNzZWQuCiAgICBmbiAoYHR5cGluZy5VbmlvbltEb0ZuLCB0eXBpbmcuQ2FsbGFibGVdYCk6IGEgOmNsYXNzOmBEb0ZuYCBvYmplY3QgdG8gYmUKICAgICAgYXBwbGllZCB0byBlYWNoIGVsZW1lbnQgb2YgKipwY29sbCoqIGFyZ3VtZW50LCBvciBhIENhbGxhYmxlLgogICAgKmFyZ3M6IHBvc2l0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBEb0ZuYCBvYmplY3QuCiAgICAqKmt3YXJnczogIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBEb0ZuYCBvYmplY3QuCgogIE5vdGUgdGhhdCB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gb3JkZXIKICB0byBkZXRlY3QgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBzIHRoYXQgd2lsbCBiZSBjb21wdXRlZCBhcwogIHNpZGUgaW5wdXRzIHRvIHRoZSB0cmFuc2Zvcm0uIER1cmluZyBwaXBlbGluZSBleGVjdXRpb24gd2hlbmV2ZXIgdGhlCiAgOmNsYXNzOmBEb0ZuYCBvYmplY3QgZ2V0cyBleGVjdXRlZCAoaXRzIDptZXRoOmBEb0ZuLnByb2Nlc3MoKWAgbWV0aG9kIGdldHMKICBjYWxsZWQpIHRoZSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGFyZ3VtZW50cyB3aWxsIGJlCiAgcmVwbGFjZWQgYnkgdmFsdWVzIGZyb20gdGhlIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgaW4gdGhlCiAgZXhhY3QgcG9zaXRpb25zIHdoZXJlIHRoZXkgYXBwZWFyIGluIHRoZSBhcmd1bWVudCBsaXN0cy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZm4sICphcmdzLCAqKmt3YXJncyk6CiAgICBzdXBlcihQYXJEbywgc2VsZikuX19pbml0X18oZm4sICphcmdzLCAqKmt3YXJncykKICAgICMgVE9ETyhyb2JlcnR3Yik6IENoYW5nZSBhbGwgdXNlcyBvZiB0aGUgZG9mbiBhdHRyaWJ1dGUgdG8gdXNlIGZuIGluc3RlYWQuCiAgICBzZWxmLmRvZm4gPSBzZWxmLmZuCiAgICBzZWxmLm91dHB1dF90YWdzID0gc2V0KCkgICMgdHlwZTogdHlwaW5nLlNldFtzdHJdCgogICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5mbiwgRG9Gbik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignUGFyRG8gbXVzdCBiZSBjYWxsZWQgd2l0aCBhIERvRm4gaW5zdGFuY2UuJykKCiAgICAjIFZhbGlkYXRlIHRoZSBEb0ZuIGJ5IGNyZWF0aW5nIGEgRG9GblNpZ25hdHVyZQogICAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLmNvbW1vbiBpbXBvcnQgRG9GblNpZ25hdHVyZQogICAgc2VsZi5fc2lnbmF0dXJlID0gRG9GblNpZ25hdHVyZShzZWxmLmZuKQoKICBkZWYgZGVmYXVsdF90eXBlX2hpbnRzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZm4uZ2V0X3R5cGVfaGludHMoKQoKICBkZWYgaW5mZXJfb3V0cHV0X3R5cGUoc2VsZiwgaW5wdXRfdHlwZSk6CiAgICByZXR1cm4gdHJpdmlhbF9pbmZlcmVuY2UuZWxlbWVudF90eXBlKHNlbGYuZm4uaW5mZXJfb3V0cHV0X3R5cGUoaW5wdXRfdHlwZSkpCgogIGRlZiBtYWtlX2ZuKHNlbGYsIGZuLCBoYXNfc2lkZV9pbnB1dHMpOgogICAgaWYgaXNpbnN0YW5jZShmbiwgRG9Gbik6CiAgICAgIHJldHVybiBmbgogICAgcmV0dXJuIENhbGxhYmxlV3JhcHBlckRvRm4oZm4pCgogIGRlZiBfcHJvY2Vzc19hcmdzcGVjX2ZuKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZm4uX3Byb2Nlc3NfYXJnc3BlY19mbigpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4gewogICAgICAgICdmbic6IERpc3BsYXlEYXRhSXRlbShzZWxmLmZuLl9fY2xhc3NfXywgbGFiZWw9J1RyYW5zZm9ybSBGdW5jdGlvbicpLAogICAgICAgICdmbl9kZCc6IHNlbGYuZm4KICAgIH0KCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAjIEluIHRoZSBjYXNlIG9mIGEgc3RhdGVmdWwgRG9Gbiwgd2FybiBpZiB0aGUga2V5IGNvZGVyIGlzIG5vdAogICAgIyBkZXRlcm1pbmlzdGljLgogICAgaWYgc2VsZi5fc2lnbmF0dXJlLmlzX3N0YXRlZnVsX2RvZm4oKToKICAgICAga3ZfdHlwZV9oaW50ID0gcGNvbGwuZWxlbWVudF90eXBlCiAgICAgIGlmIGt2X3R5cGVfaGludCBhbmQga3ZfdHlwZV9oaW50ICE9IHR5cGVoaW50cy5Bbnk6CiAgICAgICAgY29kZXIgPSBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKGt2X3R5cGVfaGludCkKICAgICAgICBpZiBub3QgY29kZXIuaXNfa3ZfY29kZXIoKToKICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAgJ0lucHV0IGVsZW1lbnRzIHRvIHRoZSB0cmFuc2Zvcm0gJXMgd2l0aCBzdGF0ZWZ1bCBEb0ZuIG11c3QgYmUgJwogICAgICAgICAgICAgICdrZXktdmFsdWUgcGFpcnMuJyAlIHNlbGYpCiAgICAgICAga2V5X2NvZGVyID0gY29kZXIua2V5X2NvZGVyKCkKICAgICAgZWxzZToKICAgICAgICBrZXlfY29kZXIgPSBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHR5cGVoaW50cy5BbnkpCgogICAgICBpZiBub3Qga2V5X2NvZGVyLmlzX2RldGVybWluaXN0aWMoKToKICAgICAgICBfTE9HR0VSLndhcm5pbmcoCiAgICAgICAgICAgICdLZXkgY29kZXIgJXMgZm9yIHRyYW5zZm9ybSAlcyB3aXRoIHN0YXRlZnVsIERvRm4gbWF5IG5vdCAnCiAgICAgICAgICAgICdiZSBkZXRlcm1pbmlzdGljLiBUaGlzIG1heSBjYXVzZSBpbmNvcnJlY3QgYmVoYXZpb3IgZm9yIGNvbXBsZXggJwogICAgICAgICAgICAna2V5IHR5cGVzLiBDb25zaWRlciBhZGRpbmcgYW4gaW5wdXQgdHlwZSBoaW50IGZvciB0aGlzIHRyYW5zZm9ybS4nLAogICAgICAgICAgICBrZXlfY29kZXIsCiAgICAgICAgICAgIHNlbGYpCgogICAgcmV0dXJuIHB2YWx1ZS5QQ29sbGVjdGlvbi5mcm9tXyhwY29sbCkKCiAgZGVmIHdpdGhfb3V0cHV0cyhzZWxmLCAqdGFncywgKiptYWluX2t3KToKICAgICIiIlJldHVybnMgYSB0YWdnZWQgdHVwbGUgYWxsb3dpbmcgYWNjZXNzIHRvIHRoZSBvdXRwdXRzIG9mIGEKICAgIDpjbGFzczpgUGFyRG9gLgoKICAgIFRoZSByZXN1bHRpbmcgb2JqZWN0IHN1cHBvcnRzIGFjY2VzcyB0byB0aGUKICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgYXNzb2NpYXRlZCB3aXRoIGEgdGFnCiAgICAoZS5nLiBgYG8udGFnYGAsIGBgb1t0YWddYGApIGFuZCBpdGVyYXRpbmcgb3ZlciB0aGUgYXZhaWxhYmxlIHRhZ3MKICAgIChlLmcuIGBgZm9yIHRhZyBpbiBvOiAuLi5gYCkuCgogICAgQXJnczoKICAgICAgKnRhZ3M6IGlmIG5vbi1lbXB0eSwgbGlzdCBvZiB2YWxpZCB0YWdzLiBJZiBhIGxpc3Qgb2YgdmFsaWQgdGFncyBpcyBnaXZlbiwKICAgICAgICBpdCB3aWxsIGJlIGFuIGVycm9yIHRvIHVzZSBhbiB1bmRlY2xhcmVkIHRhZyBsYXRlciBpbiB0aGUgcGlwZWxpbmUuCiAgICAgICoqbWFpbl9rdzogZGljdGlvbmFyeSBlbXB0eSBvciB3aXRoIG9uZSBrZXkgYGAnbWFpbidgYCBkZWZpbmluZyB0aGUgdGFnIHRvCiAgICAgICAgYmUgdXNlZCBmb3IgdGhlIG1haW4gb3V0cHV0ICh3aGljaCB3aWxsIG5vdCBoYXZlIGEgdGFnIGFzc29jaWF0ZWQgd2l0aAogICAgICAgIGl0KS4KCiAgICBSZXR1cm5zOgogICAgICB+YXBhY2hlX2JlYW0ucHZhbHVlLkRvT3V0cHV0c1R1cGxlOiBBbiBvYmplY3Qgb2YgdHlwZQogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuRG9PdXRwdXRzVHVwbGVgIHRoYXQgYnVuZGxlcyB0b2dldGhlciBhbGwKICAgICAgdGhlIG91dHB1dHMgb2YgYSA6Y2xhc3M6YFBhckRvYCB0cmFuc2Zvcm0gYW5kIGFsbG93cyBhY2Nlc3NpbmcgdGhlCiAgICAgIGluZGl2aWR1YWwgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBzIGZvciBlYWNoIG91dHB1dAogICAgICB1c2luZyBhbiBgYG9iamVjdC50YWdgYCBzeW50YXguCgogICAgUmFpc2VzOgogICAgICBUeXBlRXJyb3I6IGlmIHRoZSAqKnNlbGYqKiBvYmplY3QgaXMgbm90IGEKICAgICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhCiAgICAgICAgOmNsYXNzOmBQYXJEb2AgdHJhbnNmb3JtLgogICAgICBWYWx1ZUVycm9yOiBpZiAqKm1haW5fa3cqKiBjb250YWlucyBhbnkga2V5IG90aGVyIHRoYW4KICAgICAgICBgYCdtYWluJ2BgLgogICAgIiIiCiAgICBtYWluX3RhZyA9IG1haW5fa3cucG9wKCdtYWluJywgTm9uZSkKICAgIGlmIG1haW5fa3c6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudHM6ICVzJyAlIGxpc3QobWFpbl9rdykpCiAgICByZXR1cm4gX011bHRpUGFyRG8oc2VsZiwgdGFncywgbWFpbl90YWcpCgogIGRlZiBfcGFyZG9fZm5fZGF0YShzZWxmKToKICAgIHNpX3RhZ3NfYW5kX3R5cGVzID0gTm9uZQogICAgd2luZG93aW5nID0gTm9uZQogICAgcmV0dXJuIHNlbGYuZm4sIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MsIHNpX3RhZ3NfYW5kX3R5cGVzLCB3aW5kb3dpbmcKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiB0eXBpbmcuVHVwbGVbc3RyLCBtZXNzYWdlLk1lc3NhZ2VdCiAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBQYXJEbyksIFwKICAgICAgICAiZXhwZWN0ZWQgaW5zdGFuY2Ugb2YgUGFyRG8sIGJ1dCBnb3QgJXMiICUgc2VsZi5fX2NsYXNzX18KICAgIHBpY2tlZF9wYXJkb19mbl9kYXRhID0gcGlja2xlci5kdW1wcyhzZWxmLl9wYXJkb19mbl9kYXRhKCkpCiAgICBzdGF0ZV9zcGVjcywgdGltZXJfc3BlY3MgPSB1c2Vyc3RhdGUuZ2V0X2RvZm5fc3BlY3Moc2VsZi5mbikKICAgIGlmIHN0YXRlX3NwZWNzIG9yIHRpbWVyX3NwZWNzOgogICAgICBjb250ZXh0LmFkZF9yZXF1aXJlbWVudCgKICAgICAgICAgIGNvbW1vbl91cm5zLnJlcXVpcmVtZW50cy5SRVFVSVJFU19TVEFURUZVTF9QUk9DRVNTSU5HLnVybikKICAgIGZyb20gYXBhY2hlX2JlYW0ucnVubmVycy5jb21tb24gaW1wb3J0IERvRm5TaWduYXR1cmUKICAgIHNpZyA9IERvRm5TaWduYXR1cmUoc2VsZi5mbikKICAgIGlzX3NwbGl0dGFibGUgPSBzaWcuaXNfc3BsaXR0YWJsZV9kb2ZuKCkKICAgIGlmIGlzX3NwbGl0dGFibGU6CiAgICAgIHJlc3RyaWN0aW9uX2NvZGVyID0gc2lnLmdldF9yZXN0cmljdGlvbl9jb2RlcigpCiAgICAgIHJlc3RyaWN0aW9uX2NvZGVyX2lkID0gY29udGV4dC5jb2RlcnMuZ2V0X2lkKAogICAgICAgICAgcmVzdHJpY3Rpb25fY29kZXIpICAjIHR5cGU6IHR5cGluZy5PcHRpb25hbFtzdHJdCiAgICBlbHNlOgogICAgICByZXN0cmljdGlvbl9jb2Rlcl9pZCA9IE5vbmUKICAgIGhhc19idW5kbGVfZmluYWxpemF0aW9uID0gc2lnLmhhc19idW5kbGVfZmluYWxpemF0aW9uKCkKICAgIGlmIGhhc19idW5kbGVfZmluYWxpemF0aW9uOgogICAgICBjb250ZXh0LmFkZF9yZXF1aXJlbWVudCgKICAgICAgICAgIGNvbW1vbl91cm5zLnJlcXVpcmVtZW50cy5SRVFVSVJFU19CVU5ETEVfRklOQUxJWkFUSU9OLnVybikKICAgIHJldHVybiAoCiAgICAgICAgY29tbW9uX3VybnMucHJpbWl0aXZlcy5QQVJfRE8udXJuLAogICAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuUGFyRG9QYXlsb2FkKAogICAgICAgICAgICBkb19mbj1iZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICAgICAgICAgIHVybj1weXRob25fdXJucy5QSUNLTEVEX0RPRk5fSU5GTywKICAgICAgICAgICAgICAgIHBheWxvYWQ9cGlja2VkX3BhcmRvX2ZuX2RhdGEpLAogICAgICAgICAgICBzcGxpdHRhYmxlPWlzX3NwbGl0dGFibGUsCiAgICAgICAgICAgIHJlcXVlc3RzX2ZpbmFsaXphdGlvbj1oYXNfYnVuZGxlX2ZpbmFsaXphdGlvbiwKICAgICAgICAgICAgcmVzdHJpY3Rpb25fY29kZXJfaWQ9cmVzdHJpY3Rpb25fY29kZXJfaWQsCiAgICAgICAgICAgIHN0YXRlX3NwZWNzPXsKICAgICAgICAgICAgICAgIHNwZWMubmFtZTogc3BlYy50b19ydW5uZXJfYXBpKGNvbnRleHQpCiAgICAgICAgICAgICAgICBmb3Igc3BlYyBpbiBzdGF0ZV9zcGVjcwogICAgICAgICAgICB9LAogICAgICAgICAgICB0aW1lcl9zcGVjcz17CiAgICAgICAgICAgICAgICBzcGVjLm5hbWU6IHNwZWMudG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgICAgICAgICAgICAgZm9yIHNwZWMgaW4gdGltZXJfc3BlY3MKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIyBJdCdkIGJlIG5pY2UgdG8gbmFtZSB0aGVzZSBhY2NvcmRpbmcgdG8gdGhlaXIgYWN0dWFsCiAgICAgICAgICAgICMgbmFtZXMvcG9zaXRpb25zIGluIHRoZSBvcmlnbmFsIGFyZ3VtZW50IGxpc3QsIGJ1dCBzdWNoIGEKICAgICAgICAgICAgIyB0cmFuc2Zvcm1hdGlvbiBpcyBjdXJyZW50bHkgaXJyZXZlcnNpYmxlIGdpdmVuIGhvdwogICAgICAgICAgICAjIHJlbW92ZV9vYmplY3RzX2Zyb21fYXJncyBhbmQgaW5zZXJ0X3ZhbHVlc19pbl9hcmdzCiAgICAgICAgICAgICMgYXJlIGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KICAgICAgICAgICAgc2lkZV9pbnB1dHM9ewogICAgICAgICAgICAgICAgInNpZGUlcyIgJSBpeDogc2kudG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgICAgICAgICAgICAgZm9yIGl4LAogICAgICAgICAgICAgICAgc2kgaW4gZW51bWVyYXRlKHNlbGYuc2lkZV9pbnB1dHMpCiAgICAgICAgICAgIH0pKQoKICBAc3RhdGljbWV0aG9kCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgICBjb21tb25fdXJucy5wcmltaXRpdmVzLlBBUl9ETy51cm4sIGJlYW1fcnVubmVyX2FwaV9wYjIuUGFyRG9QYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wdHJhbnNmb3JtLCBwYXJkb19wYXlsb2FkLCBjb250ZXh0KToKICAgIGFzc2VydCBwYXJkb19wYXlsb2FkLmRvX2ZuLnVybiA9PSBweXRob25fdXJucy5QSUNLTEVEX0RPRk5fSU5GTwogICAgZm4sIGFyZ3MsIGt3YXJncywgc2lfdGFnc19hbmRfdHlwZXMsIHdpbmRvd2luZyA9IHBpY2tsZXIubG9hZHMoCiAgICAgICAgcGFyZG9fcGF5bG9hZC5kb19mbi5wYXlsb2FkKQogICAgaWYgc2lfdGFnc19hbmRfdHlwZXM6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2V4cGxpY2l0IHNpZGUgaW5wdXQgZGF0YScpCiAgICBlbGlmIHdpbmRvd2luZzoKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignZXhwbGljaXQgd2luZG93aW5nJykKICAgIHJlc3VsdCA9IFBhckRvKGZuLCAqYXJncywgKiprd2FyZ3MpCiAgICAjIFRoaXMgaXMgYW4gb3JkZXJlZCBsaXN0IHN0b3JlZCBhcyBhIGRpY3QgKHNlZSB0aGUgY29tbWVudHMgaW4KICAgICMgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIgYWJvdmUpLgogICAgaW5kZXhlZF9zaWRlX2lucHV0cyA9IFsoCiAgICAgICAgZ2V0X3NpZGVpbnB1dF9pbmRleCh0YWcpLAogICAgICAgIHB2YWx1ZS5Bc1NpZGVJbnB1dC5mcm9tX3J1bm5lcl9hcGkoc2ksIGNvbnRleHQpKSBmb3IgdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaSBpbiBwYXJkb19wYXlsb2FkLnNpZGVfaW5wdXRzLml0ZW1zKCldCiAgICByZXN1bHQuc2lkZV9pbnB1dHMgPSBbc2kgZm9yIF8sIHNpIGluIHNvcnRlZChpbmRleGVkX3NpZGVfaW5wdXRzKV0KICAgIHJldHVybiByZXN1bHQKCiAgZGVmIHJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXQoc2VsZik6CiAgICByZXR1cm4gdXNlcnN0YXRlLmlzX3N0YXRlZnVsX2RvZm4oc2VsZi5mbikKCiAgZGVmIGdldF9yZXN0cmljdGlvbl9jb2RlcihzZWxmKToKICAgICIiIlJldHVybnMgYHJlc3RyaWN0aW9uIGNvZGVyIGlmIGBEb0ZuYCBvZiB0aGlzIGBQYXJEb2AgaXMgYSBTREYuCgogICAgUmV0dXJucyBgTm9uZWAgb3RoZXJ3aXNlLgogICAgIiIiCiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuY29tbW9uIGltcG9ydCBEb0ZuU2lnbmF0dXJlCiAgICByZXR1cm4gRG9GblNpZ25hdHVyZShzZWxmLmZuKS5nZXRfcmVzdHJpY3Rpb25fY29kZXIoKQoKCmNsYXNzIF9NdWx0aVBhckRvKFBUcmFuc2Zvcm0pOgogIGRlZiBfX2luaXRfXyhzZWxmLCBkb190cmFuc2Zvcm0sIHRhZ3MsIG1haW5fdGFnKToKICAgIHN1cGVyKF9NdWx0aVBhckRvLCBzZWxmKS5fX2luaXRfXyhkb190cmFuc2Zvcm0ubGFiZWwpCiAgICBzZWxmLl9kb190cmFuc2Zvcm0gPSBkb190cmFuc2Zvcm0KICAgIHNlbGYuX3RhZ3MgPSB0YWdzCiAgICBzZWxmLl9tYWluX3RhZyA9IG1haW5fdGFnCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgXyA9IHBjb2xsIHwgc2VsZi5fZG9fdHJhbnNmb3JtCiAgICByZXR1cm4gcHZhbHVlLkRvT3V0cHV0c1R1cGxlKAogICAgICAgIHBjb2xsLnBpcGVsaW5lLCBzZWxmLl9kb190cmFuc2Zvcm0sIHNlbGYuX3RhZ3MsIHNlbGYuX21haW5fdGFnKQoKCmRlZiBGbGF0TWFwKGZuLCAqYXJncywgKiprd2FyZ3MpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgIiIiOmZ1bmM6YEZsYXRNYXBgIGlzIGxpa2UgOmNsYXNzOmBQYXJEb2AgZXhjZXB0IGl0IHRha2VzIGEgY2FsbGFibGUgdG8KICBzcGVjaWZ5IHRoZSB0cmFuc2Zvcm1hdGlvbi4KCiAgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGFuIGl0ZXJhYmxlIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIGlucHV0CiAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYC4gVGhlIGVsZW1lbnRzIG9mIHRoZXNlIGl0ZXJhYmxlcyB3aWxsCiAgYmUgZmxhdHRlbmVkIGludG8gdGhlIG91dHB1dCA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gLgoKICBBcmdzOgogICAgZm4gKGNhbGxhYmxlKTogYSBjYWxsYWJsZSBvYmplY3QuCiAgICAqYXJnczogcG9zaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCiAgICAqKmt3YXJnczoga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCgogIFJldHVybnM6CiAgICB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uOgogICAgQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGNvbnRhaW5pbmcgdGhlCiAgICA6ZnVuYzpgRmxhdE1hcGAgb3V0cHV0cy4KCiAgUmFpc2VzOgogICAgVHlwZUVycm9yOiBJZiB0aGUgKipmbioqIHBhc3NlZCBhcyBhcmd1bWVudCBpcyBub3QgYSBjYWxsYWJsZS4KICAgICAgVHlwaWNhbCBlcnJvciBpcyB0byBwYXNzIGEgOmNsYXNzOmBEb0ZuYCBpbnN0YW5jZSB3aGljaCBpcyBzdXBwb3J0ZWQgb25seQogICAgICBmb3IgOmNsYXNzOmBQYXJEb2AuCiAgIiIiCiAgbGFiZWwgPSAnRmxhdE1hcCglcyknICUgcHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlKGZuKQogIGlmIG5vdCBjYWxsYWJsZShmbik6CiAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgJ0ZsYXRNYXAgY2FuIGJlIHVzZWQgb25seSB3aXRoIGNhbGxhYmxlIG9iamVjdHMuICcKICAgICAgICAnUmVjZWl2ZWQgJXIgaW5zdGVhZC4nICUgKGZuKSkKCiAgcGFyZG8gPSBQYXJEbyhDYWxsYWJsZVdyYXBwZXJEb0ZuKGZuKSwgKmFyZ3MsICoqa3dhcmdzKQogIHBhcmRvLmxhYmVsID0gbGFiZWwKICByZXR1cm4gcGFyZG8KCgpkZWYgTWFwKGZuLCAqYXJncywgKiprd2FyZ3MpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgIiIiOmZ1bmM6YE1hcGAgaXMgbGlrZSA6ZnVuYzpgRmxhdE1hcGAgZXhjZXB0IGl0cyBjYWxsYWJsZSByZXR1cm5zIG9ubHkgYQogIHNpbmdsZSBlbGVtZW50LgoKICBBcmdzOgogICAgZm4gKGNhbGxhYmxlKTogYSBjYWxsYWJsZSBvYmplY3QuCiAgICAqYXJnczogcG9zaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCiAgICAqKmt3YXJnczoga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCgogIFJldHVybnM6CiAgICB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uOgogICAgQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGNvbnRhaW5pbmcgdGhlCiAgICA6ZnVuYzpgTWFwYCBvdXRwdXRzLgoKICBSYWlzZXM6CiAgICBUeXBlRXJyb3I6IElmIHRoZSAqKmZuKiogcGFzc2VkIGFzIGFyZ3VtZW50IGlzIG5vdCBhIGNhbGxhYmxlLgogICAgICBUeXBpY2FsIGVycm9yIGlzIHRvIHBhc3MgYSA6Y2xhc3M6YERvRm5gIGluc3RhbmNlIHdoaWNoIGlzIHN1cHBvcnRlZCBvbmx5CiAgICAgIGZvciA6Y2xhc3M6YFBhckRvYC4KICAiIiIKICBpZiBub3QgY2FsbGFibGUoZm4pOgogICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICdNYXAgY2FuIGJlIHVzZWQgb25seSB3aXRoIGNhbGxhYmxlIG9iamVjdHMuICcKICAgICAgICAnUmVjZWl2ZWQgJXIgaW5zdGVhZC4nICUgKGZuKSkKICBpZiBfZm5fdGFrZXNfc2lkZV9pbnB1dHMoZm4pOgogICAgd3JhcHBlciA9IGxhbWJkYSB4LCAqYXJncywgKiprd2FyZ3M6IFtmbih4LCAqYXJncywgKiprd2FyZ3MpXQogIGVsc2U6CiAgICB3cmFwcGVyID0gbGFtYmRhIHg6IFtmbih4KV0KCiAgbGFiZWwgPSAnTWFwKCVzKScgJSBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoZm4pCgogICMgVE9ETy4gV2hhdCBhYm91dCBjYWxsYWJsZSBjbGFzc2VzPwogIGlmIGhhc2F0dHIoZm4sICdfX25hbWVfXycpOgogICAgd3JhcHBlci5fX25hbWVfXyA9IGZuLl9fbmFtZV9fCgogICMgUHJveHkgdGhlIHR5cGUtaGludCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB0byB0aGlzIG5ldwogICMgd3JhcHBlZCBmdW5jdGlvbi4KICB0eXBlX2hpbnRzID0gZ2V0X3R5cGVfaGludHMoZm4pLndpdGhfZGVmYXVsdHMoCiAgICAgIHR5cGVoaW50cy5kZWNvcmF0b3JzLklPVHlwZUhpbnRzLmZyb21fY2FsbGFibGUoZm4pKQogIGlmIHR5cGVfaGludHMuaW5wdXRfdHlwZXMgaXMgbm90IE5vbmU6CiAgICB3cmFwcGVyID0gd2l0aF9pbnB1dF90eXBlcygKICAgICAgICAqdHlwZV9oaW50cy5pbnB1dF90eXBlc1swXSwgKip0eXBlX2hpbnRzLmlucHV0X3R5cGVzWzFdKSgKICAgICAgICAgICAgd3JhcHBlcikKICBvdXRwdXRfaGludCA9IHR5cGVfaGludHMuc2ltcGxlX291dHB1dF90eXBlKGxhYmVsKQogIGlmIG91dHB1dF9oaW50OgogICAgd3JhcHBlciA9IHdpdGhfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5JdGVyYWJsZVtvdXRwdXRfaGludF0pKHdyYXBwZXIpCiAgIyBweWxpbnQ6IGRpc2FibGU9cHJvdGVjdGVkLWFjY2VzcwogIHdyYXBwZXIuX2FyZ3NwZWNfZm4gPSBmbgogICMgcHlsaW50OiBlbmFibGU9cHJvdGVjdGVkLWFjY2VzcwoKICBwYXJkbyA9IEZsYXRNYXAod3JhcHBlciwgKmFyZ3MsICoqa3dhcmdzKQogIHBhcmRvLmxhYmVsID0gbGFiZWwKICByZXR1cm4gcGFyZG8KCgpkZWYgTWFwVHVwbGUoZm4sICphcmdzLCAqKmt3YXJncyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICByIiIiOmZ1bmM6YE1hcFR1cGxlYCBpcyBsaWtlIDpmdW5jOmBNYXBgIGJ1dCBleHBlY3RzIHR1cGxlIGlucHV0cyBhbmQKICBmbGF0dGVucyB0aGVtIGludG8gbXVsdGlwbGUgaW5wdXQgYXJndW1lbnRzLgoKICAgICAgYmVhbS5NYXBUdXBsZShsYW1iZGEgYSwgYiwgLi4uOiAuLi4pCgogIGlzIGVxdWl2YWxlbnQgdG8gUHl0aG9uIDIKCiAgICAgIGJlYW0uTWFwKGxhbWJkYSAoYSwgYiwgLi4uKSwgLi4uOiAuLi4pCgogIEluIG90aGVyIHdvcmRzCgogICAgICBiZWFtLk1hcFR1cGxlKGZuKQoKICBpcyBlcXVpdmFsZW50IHRvCgogICAgICBiZWFtLk1hcChsYW1iZGEgZWxlbWVudCwgLi4uOiBmbihcKmVsZW1lbnQsIC4uLikpCgogIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHByb2Nlc3NpbmcgYSBQQ29sbGVjdGlvbiBvZiB0dXBsZXMKICAoZS5nLiBrZXktdmFsdWUgcGFpcnMpLgoKICBBcmdzOgogICAgZm4gKGNhbGxhYmxlKTogYSBjYWxsYWJsZSBvYmplY3QuCiAgICAqYXJnczogcG9zaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCiAgICAqKmt3YXJnczoga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCgogIFJldHVybnM6CiAgICB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uOgogICAgQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGNvbnRhaW5pbmcgdGhlCiAgICA6ZnVuYzpgTWFwVHVwbGVgIG91dHB1dHMuCgogIFJhaXNlczoKICAgIFR5cGVFcnJvcjogSWYgdGhlICoqZm4qKiBwYXNzZWQgYXMgYXJndW1lbnQgaXMgbm90IGEgY2FsbGFibGUuCiAgICAgIFR5cGljYWwgZXJyb3IgaXMgdG8gcGFzcyBhIDpjbGFzczpgRG9GbmAgaW5zdGFuY2Ugd2hpY2ggaXMgc3VwcG9ydGVkIG9ubHkKICAgICAgZm9yIDpjbGFzczpgUGFyRG9gLgogICIiIgogIGlmIG5vdCBjYWxsYWJsZShmbik6CiAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgJ01hcFR1cGxlIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBjYWxsYWJsZSBvYmplY3RzLiAnCiAgICAgICAgJ1JlY2VpdmVkICVyIGluc3RlYWQuJyAlIChmbikpCgogIGxhYmVsID0gJ01hcFR1cGxlKCVzKScgJSBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoZm4pCgogIGFyZ19uYW1lcywgZGVmYXVsdHMgPSBnZXRfZnVuY3Rpb25fYXJnc19kZWZhdWx0cyhmbikKICBudW1fZGVmYXVsdHMgPSBsZW4oZGVmYXVsdHMpCiAgaWYgbnVtX2RlZmF1bHRzIDwgbGVuKGFyZ3MpICsgbGVuKGt3YXJncyk6CiAgICByYWlzZSBUeXBlRXJyb3IoJ1NpZGUgaW5wdXRzIG11c3QgaGF2ZSBkZWZhdWx0cyBmb3IgTWFwVHVwbGUuJykKCiAgaWYgZGVmYXVsdHMgb3IgYXJncyBvciBrd2FyZ3M6CiAgICB3cmFwcGVyID0gbGFtYmRhIHgsICphcmdzLCAqKmt3YXJnczogW2ZuKCoodHVwbGUoeCkgKyBhcmdzKSwgKiprd2FyZ3MpXQogIGVsc2U6CiAgICB3cmFwcGVyID0gbGFtYmRhIHg6IFtmbigqeCldCgogICMgUHJveHkgdGhlIHR5cGUtaGludCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB0byB0aGlzIG5ldwogICMgd3JhcHBlZCBmdW5jdGlvbi4KICB0eXBlX2hpbnRzID0gZ2V0X3R5cGVfaGludHMoZm4pCiAgaWYgdHlwZV9oaW50cy5pbnB1dF90eXBlcyBpcyBub3QgTm9uZToKICAgIHdyYXBwZXIgPSB3aXRoX2lucHV0X3R5cGVzKAogICAgICAgICp0eXBlX2hpbnRzLmlucHV0X3R5cGVzWzBdLCAqKnR5cGVfaGludHMuaW5wdXRfdHlwZXNbMV0pKAogICAgICAgICAgICB3cmFwcGVyKQogIG91dHB1dF9oaW50ID0gdHlwZV9oaW50cy5zaW1wbGVfb3V0cHV0X3R5cGUobGFiZWwpCiAgaWYgb3V0cHV0X2hpbnQ6CiAgICB3cmFwcGVyID0gd2l0aF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLkl0ZXJhYmxlW291dHB1dF9oaW50XSkod3JhcHBlcikKCiAgIyBSZXBsYWNlIHRoZSBmaXJzdCAoYXJncykgY29tcG9uZW50LgogIG1vZGlmaWVkX2FyZ19uYW1lcyA9IFsndHVwbGVfZWxlbWVudCddICsgYXJnX25hbWVzWy1udW1fZGVmYXVsdHM6XQogIG1vZGlmaWVkX2FyZ3NwZWMgPSAobW9kaWZpZWRfYXJnX25hbWVzLCBkZWZhdWx0cykKICBwYXJkbyA9IFBhckRvKAogICAgICBDYWxsYWJsZVdyYXBwZXJEb0ZuKHdyYXBwZXIsIGZ1bGxhcmdzcGVjPW1vZGlmaWVkX2FyZ3NwZWMpLAogICAgICAqYXJncywKICAgICAgKiprd2FyZ3MpCiAgcGFyZG8ubGFiZWwgPSBsYWJlbAogIHJldHVybiBwYXJkbwoKCmRlZiBGbGF0TWFwVHVwbGUoZm4sICphcmdzLCAqKmt3YXJncyk6ICAjIHB5bGludDogZGlzYWJsZT1pbnZhbGlkLW5hbWUKICByIiIiOmZ1bmM6YEZsYXRNYXBUdXBsZWAgaXMgbGlrZSA6ZnVuYzpgRmxhdE1hcGAgYnV0IGV4cGVjdHMgdHVwbGUgaW5wdXRzIGFuZAogIGZsYXR0ZW5zIHRoZW0gaW50byBtdWx0aXBsZSBpbnB1dCBhcmd1bWVudHMuCgogICAgICBiZWFtLkZsYXRNYXBUdXBsZShsYW1iZGEgYSwgYiwgLi4uOiAuLi4pCgogIGlzIGVxdWl2YWxlbnQgdG8gUHl0aG9uIDIKCiAgICAgIGJlYW0uRmxhdE1hcChsYW1iZGEgKGEsIGIsIC4uLiksIC4uLjogLi4uKQoKICBJbiBvdGhlciB3b3JkcwoKICAgICAgYmVhbS5GbGF0TWFwVHVwbGUoZm4pCgogIGlzIGVxdWl2YWxlbnQgdG8KCiAgICAgIGJlYW0uRmxhdE1hcChsYW1iZGEgZWxlbWVudCwgLi4uOiBmbihcKmVsZW1lbnQsIC4uLikpCgogIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHByb2Nlc3NpbmcgYSBQQ29sbGVjdGlvbiBvZiB0dXBsZXMKICAoZS5nLiBrZXktdmFsdWUgcGFpcnMpLgoKICBBcmdzOgogICAgZm4gKGNhbGxhYmxlKTogYSBjYWxsYWJsZSBvYmplY3QuCiAgICAqYXJnczogcG9zaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCiAgICAqKmt3YXJnczoga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmFuc2Zvcm0gY2FsbGFibGUuCgogIFJldHVybnM6CiAgICB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uOgogICAgQSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGNvbnRhaW5pbmcgdGhlCiAgICA6ZnVuYzpgRmxhdE1hcFR1cGxlYCBvdXRwdXRzLgoKICBSYWlzZXM6CiAgICBUeXBlRXJyb3I6IElmIHRoZSAqKmZuKiogcGFzc2VkIGFzIGFyZ3VtZW50IGlzIG5vdCBhIGNhbGxhYmxlLgogICAgICBUeXBpY2FsIGVycm9yIGlzIHRvIHBhc3MgYSA6Y2xhc3M6YERvRm5gIGluc3RhbmNlIHdoaWNoIGlzIHN1cHBvcnRlZCBvbmx5CiAgICAgIGZvciA6Y2xhc3M6YFBhckRvYC4KICAiIiIKICBpZiBub3QgY2FsbGFibGUoZm4pOgogICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICdGbGF0TWFwVHVwbGUgY2FuIGJlIHVzZWQgb25seSB3aXRoIGNhbGxhYmxlIG9iamVjdHMuICcKICAgICAgICAnUmVjZWl2ZWQgJXIgaW5zdGVhZC4nICUgKGZuKSkKCiAgbGFiZWwgPSAnRmxhdE1hcFR1cGxlKCVzKScgJSBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoZm4pCgogIGFyZ19uYW1lcywgZGVmYXVsdHMgPSBnZXRfZnVuY3Rpb25fYXJnc19kZWZhdWx0cyhmbikKICBudW1fZGVmYXVsdHMgPSBsZW4oZGVmYXVsdHMpCiAgaWYgbnVtX2RlZmF1bHRzIDwgbGVuKGFyZ3MpICsgbGVuKGt3YXJncyk6CiAgICByYWlzZSBUeXBlRXJyb3IoJ1NpZGUgaW5wdXRzIG11c3QgaGF2ZSBkZWZhdWx0cyBmb3IgRmxhdE1hcFR1cGxlLicpCgogIGlmIGRlZmF1bHRzIG9yIGFyZ3Mgb3Iga3dhcmdzOgogICAgd3JhcHBlciA9IGxhbWJkYSB4LCAqYXJncywgKiprd2FyZ3M6IGZuKCoodHVwbGUoeCkgKyBhcmdzKSwgKiprd2FyZ3MpCiAgZWxzZToKICAgIHdyYXBwZXIgPSBsYW1iZGEgeDogZm4oKngpCgogICMgUHJveHkgdGhlIHR5cGUtaGludCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB0byB0aGlzIG5ldwogICMgd3JhcHBlZCBmdW5jdGlvbi4KICB0eXBlX2hpbnRzID0gZ2V0X3R5cGVfaGludHMoZm4pCiAgaWYgdHlwZV9oaW50cy5pbnB1dF90eXBlcyBpcyBub3QgTm9uZToKICAgIHdyYXBwZXIgPSB3aXRoX2lucHV0X3R5cGVzKAogICAgICAgICp0eXBlX2hpbnRzLmlucHV0X3R5cGVzWzBdLCAqKnR5cGVfaGludHMuaW5wdXRfdHlwZXNbMV0pKAogICAgICAgICAgICB3cmFwcGVyKQogIG91dHB1dF9oaW50ID0gdHlwZV9oaW50cy5zaW1wbGVfb3V0cHV0X3R5cGUobGFiZWwpCiAgaWYgb3V0cHV0X2hpbnQ6CiAgICB3cmFwcGVyID0gd2l0aF9vdXRwdXRfdHlwZXMob3V0cHV0X2hpbnQpKHdyYXBwZXIpCgogICMgUmVwbGFjZSB0aGUgZmlyc3QgKGFyZ3MpIGNvbXBvbmVudC4KICBtb2RpZmllZF9hcmdfbmFtZXMgPSBbJ3R1cGxlX2VsZW1lbnQnXSArIGFyZ19uYW1lc1stbnVtX2RlZmF1bHRzOl0KICBtb2RpZmllZF9hcmdzcGVjID0gKG1vZGlmaWVkX2FyZ19uYW1lcywgZGVmYXVsdHMpCiAgcGFyZG8gPSBQYXJEbygKICAgICAgQ2FsbGFibGVXcmFwcGVyRG9Gbih3cmFwcGVyLCBmdWxsYXJnc3BlYz1tb2RpZmllZF9hcmdzcGVjKSwKICAgICAgKmFyZ3MsCiAgICAgICoqa3dhcmdzKQogIHBhcmRvLmxhYmVsID0gbGFiZWwKICByZXR1cm4gcGFyZG8KCgpkZWYgRmlsdGVyKGZuLCAqYXJncywgKiprd2FyZ3MpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgIiIiOmZ1bmM6YEZpbHRlcmAgaXMgYSA6ZnVuYzpgRmxhdE1hcGAgd2l0aCBpdHMgY2FsbGFibGUgZmlsdGVyaW5nIG91dAogIGVsZW1lbnRzLgoKICBBcmdzOgogICAgZm4gKGBgQ2FsbGFibGVbLi4uLCBib29sXWBgKTogYSBjYWxsYWJsZSBvYmplY3QuIEZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYW4KICAgICAgZWxlbWVudC4KICAgICphcmdzOiBwb3NpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybSBjYWxsYWJsZS4KICAgICoqa3dhcmdzOiBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYW5zZm9ybSBjYWxsYWJsZS4KCiAgUmV0dXJuczoKICAgIH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb246CiAgICBBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgY29udGFpbmluZyB0aGUKICAgIDpmdW5jOmBGaWx0ZXJgIG91dHB1dHMuCgogIFJhaXNlczoKICAgIFR5cGVFcnJvcjogSWYgdGhlICoqZm4qKiBwYXNzZWQgYXMgYXJndW1lbnQgaXMgbm90IGEgY2FsbGFibGUuCiAgICAgIFR5cGljYWwgZXJyb3IgaXMgdG8gcGFzcyBhIDpjbGFzczpgRG9GbmAgaW5zdGFuY2Ugd2hpY2ggaXMgc3VwcG9ydGVkIG9ubHkKICAgICAgZm9yIDpjbGFzczpgUGFyRG9gLgogICIiIgogIGlmIG5vdCBjYWxsYWJsZShmbik6CiAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgJ0ZpbHRlciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggY2FsbGFibGUgb2JqZWN0cy4gJwogICAgICAgICdSZWNlaXZlZCAlciBpbnN0ZWFkLicgJSAoZm4pKQogIHdyYXBwZXIgPSBsYW1iZGEgeCwgKmFyZ3MsICoqa3dhcmdzOiBbeF0gaWYgZm4oeCwgKmFyZ3MsICoqa3dhcmdzKSBlbHNlIFtdCgogIGxhYmVsID0gJ0ZpbHRlciglcyknICUgcHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlKGZuKQoKICAjIFRPRE86IFdoYXQgYWJvdXQgY2FsbGFibGUgY2xhc3Nlcz8KICBpZiBoYXNhdHRyKGZuLCAnX19uYW1lX18nKToKICAgIHdyYXBwZXIuX19uYW1lX18gPSBmbi5fX25hbWVfXwoKICAjIEdldCB0eXBlIGhpbnRzIGZyb20gdGhpcyBpbnN0YW5jZSBvciB0aGUgY2FsbGFibGUuIERvIG5vdCB1c2Ugb3V0cHV0IHR5cGUKICAjIGhpbnRzIGZyb20gdGhlIGNhbGxhYmxlICh3aGljaCBzaG91bGQgYmUgYm9vbCBpZiBzZXQpLgogIGZuX3R5cGVfaGludHMgPSB0eXBlaGludHMuZGVjb3JhdG9ycy5JT1R5cGVIaW50cy5mcm9tX2NhbGxhYmxlKGZuKQogIGlmIGZuX3R5cGVfaGludHMgaXMgbm90IE5vbmU6CiAgICBmbl90eXBlX2hpbnRzID0gZm5fdHlwZV9oaW50cy53aXRoX291dHB1dF90eXBlcygpCiAgdHlwZV9oaW50cyA9IGdldF90eXBlX2hpbnRzKGZuKS53aXRoX2RlZmF1bHRzKGZuX3R5cGVfaGludHMpCgogICMgUHJveHkgdGhlIHR5cGUtaGludCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLCBzZXR0aW5nIHRoZQogICMgb3V0cHV0IHR5cGUgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGlucHV0IHR5cGUuCiAgaWYgdHlwZV9oaW50cy5pbnB1dF90eXBlcyBpcyBub3QgTm9uZToKICAgIHdyYXBwZXIgPSB3aXRoX2lucHV0X3R5cGVzKAogICAgICAgICp0eXBlX2hpbnRzLmlucHV0X3R5cGVzWzBdLCAqKnR5cGVfaGludHMuaW5wdXRfdHlwZXNbMV0pKAogICAgICAgICAgICB3cmFwcGVyKQogIG91dHB1dF9oaW50ID0gdHlwZV9oaW50cy5zaW1wbGVfb3V0cHV0X3R5cGUobGFiZWwpCiAgaWYgKG91dHB1dF9oaW50IGlzIE5vbmUgYW5kIGdldF90eXBlX2hpbnRzKHdyYXBwZXIpLmlucHV0X3R5cGVzIGFuZAogICAgICBnZXRfdHlwZV9oaW50cyh3cmFwcGVyKS5pbnB1dF90eXBlc1swXSk6CiAgICBvdXRwdXRfaGludCA9IGdldF90eXBlX2hpbnRzKHdyYXBwZXIpLmlucHV0X3R5cGVzWzBdWzBdCiAgaWYgb3V0cHV0X2hpbnQ6CiAgICB3cmFwcGVyID0gd2l0aF9vdXRwdXRfdHlwZXModHlwZWhpbnRzLkl0ZXJhYmxlW291dHB1dF9oaW50XSkod3JhcHBlcikKICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgd3JhcHBlci5fYXJnc3BlY19mbiA9IGZuCiAgIyBweWxpbnQ6IGVuYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCgogIHBhcmRvID0gRmxhdE1hcCh3cmFwcGVyLCAqYXJncywgKiprd2FyZ3MpCiAgcGFyZG8ubGFiZWwgPSBsYWJlbAogIHJldHVybiBwYXJkbwoKCmRlZiBfY29tYmluZV9wYXlsb2FkKGNvbWJpbmVfZm4sIGNvbnRleHQpOgogIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLkNvbWJpbmVQYXlsb2FkKAogICAgICBjb21iaW5lX2ZuPWNvbWJpbmVfZm4udG9fcnVubmVyX2FwaShjb250ZXh0KSwKICAgICAgYWNjdW11bGF0b3JfY29kZXJfaWQ9Y29udGV4dC5jb2RlcnMuZ2V0X2lkKAogICAgICAgICAgY29tYmluZV9mbi5nZXRfYWNjdW11bGF0b3JfY29kZXIoKSkpCgoKY2xhc3MgQ29tYmluZUdsb2JhbGx5KFBUcmFuc2Zvcm0pOgogICIiIkEgOmNsYXNzOmBDb21iaW5lR2xvYmFsbHlgIHRyYW5zZm9ybS4KCiAgUmVkdWNlcyBhIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgdG8gYSBzaW5nbGUgdmFsdWUgYnkKICBwcm9ncmVzc2l2ZWx5IGFwcGx5aW5nIGEgOmNsYXNzOmBDb21iaW5lRm5gIHRvIHBvcnRpb25zIG9mIHRoZQogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbmAgKGFuZCB0byBpbnRlcm1lZGlhdGUgdmFsdWVzIGNyZWF0ZWQKICB0aGVyZWJ5KS4gU2VlIGRvY3VtZW50YXRpb24gaW4gOmNsYXNzOmBDb21iaW5lRm5gIGZvciBkZXRhaWxzIG9uIHRoZSBzcGVjaWZpY3MKICBvbiBob3cgOmNsYXNzOmBDb21iaW5lRm5gIHMgYXJlIGFwcGxpZWQuCgogIEFyZ3M6CiAgICBwY29sbCAofmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbik6CiAgICAgIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCB0byBiZSByZWR1Y2VkIGludG8gYSBzaW5nbGUKICAgICAgdmFsdWUuCiAgICBmbiAoY2FsbGFibGUpOiBhIDpjbGFzczpgQ29tYmluZUZuYCBvYmplY3QgdGhhdCB3aWxsIGJlIGNhbGxlZCB0bwogICAgICBwcm9ncmVzc2l2ZWx5IHJlZHVjZSB0aGUgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBpbnRvCiAgICAgIHNpbmdsZSB2YWx1ZXMsIG9yIGEgY2FsbGFibGUgc3VpdGFibGUgZm9yIHdyYXBwaW5nIGJ5CiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5DYWxsYWJsZVdyYXBwZXJDb21iaW5lRm5gLgogICAgKmFyZ3M6IHBvc2l0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBDb21iaW5lRm5gIG9iamVjdC4KICAgICoqa3dhcmdzOiBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDpjbGFzczpgQ29tYmluZUZuYCBvYmplY3QuCgogIFJhaXNlczoKICAgIFR5cGVFcnJvcjogSWYgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBpbnB1dAogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS5wdmFsdWUuUENvbGxlY3Rpb25gIGlzIG5vdCBjb21wYXRpYmxlCiAgICAgIHdpdGggYGBJdGVyYWJsZVtBXWBgLgoKICBSZXR1cm5zOgogICAgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QQ29sbGVjdGlvbjogQSBzaW5nbGUtZWxlbWVudAogICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBDb2xsZWN0aW9uYCBjb250YWluaW5nIHRoZSBtYWluIG91dHB1dCBvZgogICAgdGhlIDpjbGFzczpgQ29tYmluZUdsb2JhbGx5YCB0cmFuc2Zvcm0uCgogIE5vdGUgdGhhdCB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gb3JkZXIKICB0byBkZXRlY3QgOmNsYXNzOmB+YXBhY2hlX2JlYW0ucHZhbHVlLlBWYWx1ZWAgcyB0aGF0IHdpbGwgYmUgY29tcHV0ZWQgYXMgc2lkZQogIGlucHV0cyB0byB0aGUgdHJhbnNmb3JtLgogIER1cmluZyBwaXBlbGluZSBleGVjdXRpb24gd2hlbmV2ZXIgdGhlIDpjbGFzczpgQ29tYmluZUZuYCBvYmplY3QgZ2V0cyBleGVjdXRlZAogIChpLmUuIGFueSBvZiB0aGUgOmNsYXNzOmBDb21iaW5lRm5gIG1ldGhvZHMgZ2V0IGNhbGxlZCksIHRoZQogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnB2YWx1ZS5QVmFsdWVgIGFyZ3VtZW50cyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZWlyCiAgYWN0dWFsIHZhbHVlIGluIHRoZSBleGFjdCBwb3NpdGlvbiB3aGVyZSB0aGV5IGFwcGVhciBpbiB0aGUgYXJndW1lbnQgbGlzdHMuCiAgIiIiCiAgaGFzX2RlZmF1bHRzID0gVHJ1ZQogIGFzX3ZpZXcgPSBGYWxzZQogIGZhbm91dCA9IE5vbmUKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZuLCAqYXJncywgKiprd2FyZ3MpOgogICAgaWYgbm90IChpc2luc3RhbmNlKGZuLCBDb21iaW5lRm4pIG9yIGNhbGxhYmxlKGZuKSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdDb21iaW5lR2xvYmFsbHkgY2FuIGJlIHVzZWQgb25seSB3aXRoIGNvbWJpbmVGbiBvYmplY3RzLiAnCiAgICAgICAgICAnUmVjZWl2ZWQgJXIgaW5zdGVhZC4nICUgKGZuKSkKCiAgICBzdXBlcihDb21iaW5lR2xvYmFsbHksIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuZm4gPSBmbgogICAgc2VsZi5hcmdzID0gYXJncwogICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7CiAgICAgICAgJ2NvbWJpbmVfZm4nOiBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgICAgIHNlbGYuZm4uX19jbGFzc19fLCBsYWJlbD0nQ29tYmluZSBGdW5jdGlvbicpLAogICAgICAgICdjb21iaW5lX2ZuX2RkJzogc2VsZi5mbiwKICAgIH0KCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICBpZiBzZWxmLmZhbm91dCBpcyBOb25lOgogICAgICByZXR1cm4gJyVzKCVzKScgJSAoCiAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgcHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlKHNlbGYuZm4pKQogICAgZWxzZToKICAgICAgcmV0dXJuICclcyglcywgZmFub3V0PSVzKScgJSAoCiAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAgIHB0cmFuc2Zvcm0ubGFiZWxfZnJvbV9jYWxsYWJsZShzZWxmLmZuKSwKICAgICAgICAgIHNlbGYuZmFub3V0KQoKICBkZWYgX2Nsb25lKHNlbGYsICoqZXh0cmFfYXR0cmlidXRlcyk6CiAgICBjbG9uZSA9IGNvcHkuY29weShzZWxmKQogICAgY2xvbmUuX19kaWN0X18udXBkYXRlKGV4dHJhX2F0dHJpYnV0ZXMpCiAgICByZXR1cm4gY2xvbmUKCiAgZGVmIHdpdGhfZmFub3V0KHNlbGYsIGZhbm91dCk6CiAgICByZXR1cm4gc2VsZi5fY2xvbmUoZmFub3V0PWZhbm91dCkKCiAgZGVmIHdpdGhfZGVmYXVsdHMoc2VsZiwgaGFzX2RlZmF1bHRzPVRydWUpOgogICAgcmV0dXJuIHNlbGYuX2Nsb25lKGhhc19kZWZhdWx0cz1oYXNfZGVmYXVsdHMpCgogIGRlZiB3aXRob3V0X2RlZmF1bHRzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYud2l0aF9kZWZhdWx0cyhGYWxzZSkKCiAgZGVmIGFzX3NpbmdsZXRvbl92aWV3KHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2Nsb25lKGFzX3ZpZXc9VHJ1ZSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBkZWYgYWRkX2lucHV0X3R5cGVzKHRyYW5zZm9ybSk6CiAgICAgIHR5cGVfaGludHMgPSBzZWxmLmdldF90eXBlX2hpbnRzKCkKICAgICAgaWYgdHlwZV9oaW50cy5pbnB1dF90eXBlczoKICAgICAgICByZXR1cm4gdHJhbnNmb3JtLndpdGhfaW5wdXRfdHlwZXModHlwZV9oaW50cy5pbnB1dF90eXBlc1swXVswXSkKICAgICAgcmV0dXJuIHRyYW5zZm9ybQoKICAgIGNvbWJpbmVfcGVyX2tleSA9IENvbWJpbmVQZXJLZXkoc2VsZi5mbiwgKnNlbGYuYXJncywgKipzZWxmLmt3YXJncykKICAgIGlmIHNlbGYuZmFub3V0OgogICAgICBjb21iaW5lX3Blcl9rZXkgPSBjb21iaW5lX3Blcl9rZXkud2l0aF9ob3Rfa2V5X2Zhbm91dChzZWxmLmZhbm91dCkKCiAgICBjb21iaW5lZCA9ICgKICAgICAgICBwY29sbAogICAgICAgIHwgJ0tleVdpdGhWb2lkJyA+PiBhZGRfaW5wdXRfdHlwZXMoCiAgICAgICAgICAgIE1hcChsYW1iZGEgdjogKE5vbmUsIHYpKS53aXRoX291dHB1dF90eXBlcygKICAgICAgICAgICAgICAgIHR5cGVoaW50cy5LVltOb25lLCBwY29sbC5lbGVtZW50X3R5cGVdKSkKICAgICAgICB8ICdDb21iaW5lUGVyS2V5JyA+PiBjb21iaW5lX3Blcl9rZXkKICAgICAgICB8ICdVbktleScgPj4gTWFwKGxhbWJkYSBrX3Y6IGtfdlsxXSkpCgogICAgaWYgbm90IHNlbGYuaGFzX2RlZmF1bHRzIGFuZCBub3Qgc2VsZi5hc192aWV3OgogICAgICByZXR1cm4gY29tYmluZWQKCiAgICBpZiBzZWxmLmhhc19kZWZhdWx0czoKICAgICAgY29tYmluZV9mbiA9ICgKICAgICAgICAgIHNlbGYuZm4gaWYgaXNpbnN0YW5jZShzZWxmLmZuLCBDb21iaW5lRm4pIGVsc2UKICAgICAgICAgIENvbWJpbmVGbi5mcm9tX2NhbGxhYmxlKHNlbGYuZm4pKQogICAgICBkZWZhdWx0X3ZhbHVlID0gY29tYmluZV9mbi5hcHBseShbXSwgKnNlbGYuYXJncywgKipzZWxmLmt3YXJncykKICAgIGVsc2U6CiAgICAgIGRlZmF1bHRfdmFsdWUgPSBwdmFsdWUuQXNTaW5nbGV0b24uX05PX0RFRkFVTFQgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIHZpZXcgPSBwdmFsdWUuQXNTaW5nbGV0b24oY29tYmluZWQsIGRlZmF1bHRfdmFsdWU9ZGVmYXVsdF92YWx1ZSkKICAgIGlmIHNlbGYuYXNfdmlldzoKICAgICAgcmV0dXJuIHZpZXcKICAgIGVsc2U6CiAgICAgIGlmIHBjb2xsLndpbmRvd2luZy53aW5kb3dmbiAhPSBHbG9iYWxXaW5kb3dzKCk6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgIkRlZmF1bHQgdmFsdWVzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCBpbiBDb21iaW5lR2xvYmFsbHkoKSBpZiB0aGUgIgogICAgICAgICAgICAib3V0cHV0ICBQQ29sbGVjdGlvbiBpcyBub3Qgd2luZG93ZWQgYnkgR2xvYmFsV2luZG93cy4gIgogICAgICAgICAgICAiSW5zdGVhZCwgdXNlIENvbWJpbmVHbG9iYWxseSgpLndpdGhvdXRfZGVmYXVsdHMoKSB0byBvdXRwdXQgIgogICAgICAgICAgICAiYW4gZW1wdHkgUENvbGxlY3Rpb24gaWYgdGhlIGlucHV0IFBDb2xsZWN0aW9uIGlzIGVtcHR5LCAiCiAgICAgICAgICAgICJvciBDb21iaW5lR2xvYmFsbHkoKS5hc19zaW5nbGV0b25fdmlldygpIHRvIGdldCB0aGUgZGVmYXVsdCAiCiAgICAgICAgICAgICJvdXRwdXQgb2YgdGhlIENvbWJpbmVGbiBpZiB0aGUgaW5wdXQgUENvbGxlY3Rpb24gaXMgZW1wdHkuIikKCiAgICAgIGRlZiB0eXBlZCh0cmFuc2Zvcm0pOgogICAgICAgICMgVE9ETyhyb2JlcnR3Yik6IFdlIHNob3VsZCBpbmZlciB0aGlzLgogICAgICAgIGlmIGNvbWJpbmVkLmVsZW1lbnRfdHlwZToKICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0ud2l0aF9vdXRwdXRfdHlwZXMoY29tYmluZWQuZWxlbWVudF90eXBlKQogICAgICAgIHJldHVybiB0cmFuc2Zvcm0KCiAgICAgIHJldHVybiAoCiAgICAgICAgICBwY29sbC5waXBlbGluZQogICAgICAgICAgfCAnRG9PbmNlJyA+PiBDcmVhdGUoW05vbmVdKQogICAgICAgICAgfCAnSW5qZWN0RGVmYXVsdCcgPj4gdHlwZWQoTWFwKGxhbWJkYSBfLCBzOiBzLCB2aWV3KSkpCgoKY2xhc3MgQ29tYmluZVBlcktleShQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMpOgogICIiIkEgcGVyLWtleSBDb21iaW5lIHRyYW5zZm9ybS4KCiAgSWRlbnRpZmllcyBzZXRzIG9mIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUga2V5IGluIHRoZSBpbnB1dAogIFBDb2xsZWN0aW9uLCB0aGVuIGFwcGxpZXMgYSBDb21iaW5lRm4gdG8gY29uZGVuc2UgdGhvc2Ugc2V0cyB0byBzaW5nbGUKICB2YWx1ZXMuIFNlZSBkb2N1bWVudGF0aW9uIGluIENvbWJpbmVGbiBmb3IgZGV0YWlscyBvbiB0aGUgc3BlY2lmaWNzIG9uIGhvdwogIENvbWJpbmVGbnMgYXJlIGFwcGxpZWQuCgogIEFyZ3M6CiAgICBwY29sbDogaW5wdXQgcGNvbGxlY3Rpb24uCiAgICBmbjogaW5zdGFuY2Ugb2YgQ29tYmluZUZuIHRvIGFwcGx5IHRvIGFsbCB2YWx1ZXMgdW5kZXIgdGhlIHNhbWUga2V5IGluCiAgICAgIHBjb2xsLCBvciBhIGNhbGxhYmxlIHdob3NlIHNpZ25hdHVyZSBpcyBgYGYoaXRlcmFibGUsICphcmdzLCAqKmt3YXJncylgYAogICAgICAoZS5nLiwgc3VtLCBtYXgpLgogICAgKmFyZ3M6IGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMsIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgQ29tYmluZUZuLgogICAgKiprd2FyZ3M6IGFyZ3VtZW50cyBhbmQgc2lkZSBpbnB1dHMsIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgQ29tYmluZUZuLgoKICBSZXR1cm5zOgogICAgQSBQT2JqZWN0IGhvbGRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY29tYmluZSBvcGVyYXRpb24uCiAgIiIiCiAgZGVmIHdpdGhfaG90X2tleV9mYW5vdXQoc2VsZiwgZmFub3V0KToKICAgICIiIkEgcGVyLWtleSBjb21iaW5lIG9wZXJhdGlvbiBsaWtlIHNlbGYgYnV0IHdpdGggdHdvIGxldmVscyBvZiBhZ2dyZWdhdGlvbi4KCiAgICBJZiBhIGdpdmVuIGtleSBpcyBwcm9kdWNlZCBieSB0b28gbWFueSB1cHN0cmVhbSBidW5kbGVzLCB0aGUgZmluYWwKICAgIHJlZHVjdGlvbiBjYW4gYmVjb21lIGEgYm90dGxlbmVjayBkZXNwaXRlIHBhcnRpYWwgY29tYmluaW5nIGJlaW5nIGxpZnRlZAogICAgcHJlLUdyb3VwQnlLZXkuICBJbiB0aGVzZSBjYXNlcyBpdCBjYW4gYmUgaGVscGZ1bCB0byBwZXJmb3JtIGludGVybWVkaWF0ZQogICAgcGFydGlhbCBhZ2dyZWdhdGlvbnMgaW4gcGFyYWxsZWwgYW5kIHRoZW4gcmUtZ3JvdXAgdG8gcGVmb3JtIGEgZmluYWwKICAgIChwZXIta2V5KSBjb21iaW5lLiAgVGhpcyBpcyBhbHNvIHVzZWZ1bCBmb3IgaGlnaC12b2x1bWUga2V5cyBpbiBzdHJlYW1pbmcKICAgIHdoZXJlIGNvbWJpbmVycyBhcmUgbm90IGdlbmVyYWxseSBsaWZ0ZWQgZm9yIGxhdGVuY3kgcmVhc29ucy4KCiAgICBOb3RlIHRoYXQgYSBmYW5vdXQgZ3JlYXRlciB0aGFuIDEgcmVxdWlyZXMgdGhlIGRhdGEgdG8gYmUgc2VudCB0aHJvdWdoCiAgICB0d28gR3JvdXBCeUtleXMsIGFuZCBhIGhpZ2ggZmFub3V0IGNhbiBhbHNvIHJlc3VsdCBpbiBtb3JlIHNodWZmbGUgZGF0YQogICAgZHVlIHRvIGxlc3MgcGVyLWJ1bmRsZSBjb21iaW5pbmcuIFNldHRpbmcgdGhlIGZhbm91dCBmb3IgYSBrZXkgYXQgMSBvciBsZXNzCiAgICBwbGFjZXMgdmFsdWVzIG9uIHRoZSAiY29sZCBrZXkiIHBhdGggdGhhdCBza2lwIHRoZSBpbnRlcm1lZGlhdGUgbGV2ZWwgb2YKICAgIGFnZ3JlZ2F0aW9uLgoKICAgIEFyZ3M6CiAgICAgIGZhbm91dDogZWl0aGVyIE5vbmUsIGZvciBubyBmYW5vdXQsIGFuIGludCwgZm9yIGEgY29uc3RhbnQtZGVncmVlIGZhbm91dCwKICAgICAgICAgIG9yIGEgY2FsbGFibGUgbWFwcGluZyBrZXlzIHRvIGEga2V5LXNwZWNpZmljIGRlZ3JlZSBvZiBmYW5vdXQuCgogICAgUmV0dXJuczoKICAgICAgQSBwZXIta2V5IGNvbWJpbmluZyBQVHJhbnNmb3JtIHdpdGggdGhlIHNwZWNpZmllZCBmYW5vdXQuCiAgICAiIiIKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMgaW1wb3J0IGN1cnJ5X2NvbWJpbmVfZm4KICAgIGlmIGZhbm91dCBpcyBOb25lOgogICAgICByZXR1cm4gc2VsZgogICAgZWxzZToKICAgICAgcmV0dXJuIF9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dCgKICAgICAgICAgIGN1cnJ5X2NvbWJpbmVfZm4oc2VsZi5mbiwgc2VsZi5hcmdzLCBzZWxmLmt3YXJncyksIGZhbm91dCkKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJldHVybiB7CiAgICAgICAgJ2NvbWJpbmVfZm4nOiBEaXNwbGF5RGF0YUl0ZW0oCiAgICAgICAgICAgIHNlbGYuZm4uX19jbGFzc19fLCBsYWJlbD0nQ29tYmluZSBGdW5jdGlvbicpLAogICAgICAgICdjb21iaW5lX2ZuX2RkJzogc2VsZi5mbgogICAgfQoKICBkZWYgbWFrZV9mbihzZWxmLCBmbiwgaGFzX3NpZGVfaW5wdXRzKToKICAgIHNlbGYuX2ZuX2xhYmVsID0gcHRyYW5zZm9ybS5sYWJlbF9mcm9tX2NhbGxhYmxlKGZuKQogICAgcmV0dXJuIENvbWJpbmVGbi5tYXliZV9mcm9tX2NhbGxhYmxlKGZuLCBoYXNfc2lkZV9pbnB1dHMpCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgcmV0dXJuICclcyglcyknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLl9mbl9sYWJlbCkKCiAgZGVmIF9wcm9jZXNzX2FyZ3NwZWNfZm4oc2VsZik6CiAgICByZXR1cm4gbGFtYmRhIGVsZW1lbnQsICphcmdzLCAqKmt3YXJnczogTm9uZQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIGFyZ3MsIGt3YXJncyA9IHV0aWwuaW5zZXJ0X3ZhbHVlc19pbl9hcmdzKAogICAgICAgIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MsIHNlbGYuc2lkZV9pbnB1dHMpCiAgICByZXR1cm4gcGNvbGwgfCBHcm91cEJ5S2V5KCkgfCAnQ29tYmluZScgPj4gQ29tYmluZVZhbHVlcygKICAgICAgICBzZWxmLmZuLCAqYXJncywgKiprd2FyZ3MpCgogIGRlZiBkZWZhdWx0X3R5cGVfaGludHMoc2VsZik6CiAgICBoaW50cyA9IHNlbGYuZm4uZ2V0X3R5cGVfaGludHMoKQogICAgaWYgaGludHMuaW5wdXRfdHlwZXM6CiAgICAgIEsgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdLJykKICAgICAgYXJncywga3dhcmdzID0gaGludHMuaW5wdXRfdHlwZXMKICAgICAgYXJncyA9ICh0eXBlaGludHMuVHVwbGVbSywgYXJnc1swXV0sICkgKyBhcmdzWzE6XQogICAgICBoaW50cyA9IGhpbnRzLndpdGhfaW5wdXRfdHlwZXMoKmFyZ3MsICoqa3dhcmdzKQogICAgZWxzZToKICAgICAgSyA9IHR5cGVoaW50cy5BbnkKICAgIGlmIGhpbnRzLm91dHB1dF90eXBlczoKICAgICAgbWFpbl9vdXRwdXRfdHlwZSA9IGhpbnRzLnNpbXBsZV9vdXRwdXRfdHlwZSgnJykKICAgICAgaGludHMgPSBoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBlaGludHMuVHVwbGVbSywgbWFpbl9vdXRwdXRfdHlwZV0pCiAgICByZXR1cm4gaGludHMKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKAogICAgICBzZWxmLAogICAgICBjb250ZXh0ICAjIHR5cGU6IFBpcGVsaW5lQ29udGV4dAogICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IHR5cGluZy5UdXBsZVtzdHIsIGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tYmluZVBheWxvYWRdCiAgICBpZiBzZWxmLmFyZ3Mgb3Igc2VsZi5rd2FyZ3M6CiAgICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb21iaW5lcnMgaW1wb3J0IGN1cnJ5X2NvbWJpbmVfZm4KICAgICAgY29tYmluZV9mbiA9IGN1cnJ5X2NvbWJpbmVfZm4oc2VsZi5mbiwgc2VsZi5hcmdzLCBzZWxmLmt3YXJncykKICAgIGVsc2U6CiAgICAgIGNvbWJpbmVfZm4gPSBzZWxmLmZuCiAgICByZXR1cm4gKAogICAgICAgIGNvbW1vbl91cm5zLmNvbXBvc2l0ZXMuQ09NQklORV9QRVJfS0VZLnVybiwKICAgICAgICBfY29tYmluZV9wYXlsb2FkKGNvbWJpbmVfZm4sIGNvbnRleHQpKQoKICBAc3RhdGljbWV0aG9kCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgICBjb21tb25fdXJucy5jb21wb3NpdGVzLkNPTUJJTkVfUEVSX0tFWS51cm4sCiAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuQ29tYmluZVBheWxvYWQpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIodW51c2VkX3B0cmFuc2Zvcm0sIGNvbWJpbmVfcGF5bG9hZCwgY29udGV4dCk6CiAgICByZXR1cm4gQ29tYmluZVBlcktleSgKICAgICAgICBDb21iaW5lRm4uZnJvbV9ydW5uZXJfYXBpKGNvbWJpbmVfcGF5bG9hZC5jb21iaW5lX2ZuLCBjb250ZXh0KSkKCiAgZGVmIHJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXQoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKCiMgVE9ETyhyb2JlcnR3Yik6IFJlbmFtZSB0byBDb21iaW5lR3JvdXBlZFZhbHVlcz8KY2xhc3MgQ29tYmluZVZhbHVlcyhQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMpOgogIGRlZiBtYWtlX2ZuKHNlbGYsIGZuLCBoYXNfc2lkZV9pbnB1dHMpOgogICAgcmV0dXJuIENvbWJpbmVGbi5tYXliZV9mcm9tX2NhbGxhYmxlKGZuLCBoYXNfc2lkZV9pbnB1dHMpCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgYXJncywga3dhcmdzID0gdXRpbC5pbnNlcnRfdmFsdWVzX2luX2FyZ3MoCiAgICAgICAgc2VsZi5hcmdzLCBzZWxmLmt3YXJncywgc2VsZi5zaWRlX2lucHV0cykKCiAgICBpbnB1dF90eXBlID0gcGNvbGwuZWxlbWVudF90eXBlCiAgICBrZXlfdHlwZSA9IE5vbmUKICAgIGlmIGlucHV0X3R5cGUgaXMgbm90IE5vbmU6CiAgICAgIGtleV90eXBlLCBfID0gaW5wdXRfdHlwZS50dXBsZV90eXBlcwoKICAgIHJ1bnRpbWVfdHlwZV9jaGVjayA9ICgKICAgICAgICBwY29sbC5waXBlbGluZS5fb3B0aW9ucy52aWV3X2FzKFR5cGVPcHRpb25zKS5ydW50aW1lX3R5cGVfY2hlY2spCiAgICByZXR1cm4gcGNvbGwgfCBQYXJEbygKICAgICAgICBDb21iaW5lVmFsdWVzRG9GbihrZXlfdHlwZSwgc2VsZi5mbiwgcnVudGltZV90eXBlX2NoZWNrKSwKICAgICAgICAqYXJncywKICAgICAgICAqKmt3YXJncykKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgaWYgc2VsZi5hcmdzIG9yIHNlbGYua3dhcmdzOgogICAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29tYmluZXJzIGltcG9ydCBjdXJyeV9jb21iaW5lX2ZuCiAgICAgIGNvbWJpbmVfZm4gPSBjdXJyeV9jb21iaW5lX2ZuKHNlbGYuZm4sIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MpCiAgICBlbHNlOgogICAgICBjb21iaW5lX2ZuID0gc2VsZi5mbgogICAgcmV0dXJuICgKICAgICAgICBjb21tb25fdXJucy5jb21iaW5lX2NvbXBvbmVudHMuQ09NQklORV9HUk9VUEVEX1ZBTFVFUy51cm4sCiAgICAgICAgX2NvbWJpbmVfcGF5bG9hZChjb21iaW5lX2ZuLCBjb250ZXh0KSkKCiAgQHN0YXRpY21ldGhvZAogIEBQVHJhbnNmb3JtLnJlZ2lzdGVyX3VybigKICAgICAgY29tbW9uX3VybnMuY29tYmluZV9jb21wb25lbnRzLkNPTUJJTkVfR1JPVVBFRF9WQUxVRVMudXJuLAogICAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLkNvbWJpbmVQYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9wdHJhbnNmb3JtLCBjb21iaW5lX3BheWxvYWQsIGNvbnRleHQpOgogICAgcmV0dXJuIENvbWJpbmVWYWx1ZXMoCiAgICAgICAgQ29tYmluZUZuLmZyb21fcnVubmVyX2FwaShjb21iaW5lX3BheWxvYWQuY29tYmluZV9mbiwgY29udGV4dCkpCgoKY2xhc3MgQ29tYmluZVZhbHVlc0RvRm4oRG9Gbik6CiAgIiIiRG9GbiBmb3IgcGVyZm9ybWluZyBwZXIta2V5IENvbWJpbmUgdHJhbnNmb3Jtcy4iIiIKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGlucHV0X3Bjb2xsX3R5cGUsCiAgICAgICAgICAgICAgIGNvbWJpbmVmbiwgICMgdHlwZTogQ29tYmluZUZuCiAgICAgICAgICAgICAgIHJ1bnRpbWVfdHlwZV9jaGVjaywgICMgdHlwZTogYm9vbAogICAgICAgICAgICAgICk6CiAgICBzdXBlcihDb21iaW5lVmFsdWVzRG9Gbiwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5jb21iaW5lZm4gPSBjb21iaW5lZm4KICAgIHNlbGYucnVudGltZV90eXBlX2NoZWNrID0gcnVudGltZV90eXBlX2NoZWNrCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICphcmdzLCAqKmt3YXJncyk6CiAgICAjIEV4cGVjdGVkIGVsZW1lbnRzIGlucHV0IHRvIHRoaXMgRG9GbiBhcmUgMi10dXBsZXMgb2YgdGhlIGZvcm0KICAgICMgKGtleSwgaXRlciksIHdpdGggaXRlciBhbiBpdGVyYWJsZSBvZiBhbGwgdGhlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGgga2V5CiAgICAjIGluIHRoZSBpbnB1dCBQQ29sbGVjdGlvbi4KICAgIGlmIHNlbGYucnVudGltZV90eXBlX2NoZWNrOgogICAgICAjIEFwcGx5IHRoZSBjb21iaW5lciBpbiBhIHNpbmdsZSBvcGVyYXRpb24gcmF0aGVyIHRoYW4gYXJ0aWZpY2lhbGx5CiAgICAgICMgYnJlYWtpbmcgaXQgdXAgc28gdGhhdCBvdXRwdXQgdHlwZSB2aW9sYXRpb25zIG1hbmlmZXN0IGFzIFR5cGVDaGVjawogICAgICAjIGVycm9ycyByYXRoZXIgdGhhbiB0eXBlIGVycm9ycy4KICAgICAgcmV0dXJuIFsoZWxlbWVudFswXSwgc2VsZi5jb21iaW5lZm4uYXBwbHkoZWxlbWVudFsxXSwgKmFyZ3MsICoqa3dhcmdzKSldCgogICAgIyBBZGQgdGhlIGVsZW1lbnRzIGludG8gdGhyZWUgYWNjdW11bGF0b3JzIChmb3IgdGVzdGluZyBvZiBtZXJnZSkuCiAgICBlbGVtZW50cyA9IGxpc3QoZWxlbWVudFsxXSkKICAgIGFjY3VtdWxhdG9ycyA9IFtdCiAgICBmb3IgayBpbiByYW5nZSgzKToKICAgICAgaWYgbGVuKGVsZW1lbnRzKSA8PSBrOgogICAgICAgIGJyZWFrCiAgICAgIGFjY3VtdWxhdG9ycy5hcHBlbmQoCiAgICAgICAgICBzZWxmLmNvbWJpbmVmbi5hZGRfaW5wdXRzKAogICAgICAgICAgICAgIHNlbGYuY29tYmluZWZuLmNyZWF0ZV9hY2N1bXVsYXRvcigqYXJncywgKiprd2FyZ3MpLAogICAgICAgICAgICAgIGVsZW1lbnRzW2s6OjNdLAogICAgICAgICAgICAgICphcmdzLAogICAgICAgICAgICAgICoqa3dhcmdzKSkKICAgICMgTWVyZ2UgdGhlIGFjY3VtdWxhdG9ycy4KICAgIGFjY3VtdWxhdG9yID0gc2VsZi5jb21iaW5lZm4ubWVyZ2VfYWNjdW11bGF0b3JzKAogICAgICAgIGFjY3VtdWxhdG9ycywgKmFyZ3MsICoqa3dhcmdzKQogICAgIyBDb252ZXJ0IGFjY3VtdWxhdG9yIHRvIHRoZSBmaW5hbCByZXN1bHQuCiAgICByZXR1cm4gWygKICAgICAgICBlbGVtZW50WzBdLCBzZWxmLmNvbWJpbmVmbi5leHRyYWN0X291dHB1dChhY2N1bXVsYXRvciwgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpKV0KCiAgZGVmIGRlZmF1bHRfdHlwZV9oaW50cyhzZWxmKToKICAgIGhpbnRzID0gc2VsZi5jb21iaW5lZm4uZ2V0X3R5cGVfaGludHMoKQogICAgaWYgaGludHMuaW5wdXRfdHlwZXM6CiAgICAgIEsgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdLJykKICAgICAgYXJncywga3dhcmdzID0gaGludHMuaW5wdXRfdHlwZXMKICAgICAgYXJncyA9ICh0eXBlaGludHMuVHVwbGVbSywgdHlwZWhpbnRzLkl0ZXJhYmxlW2FyZ3NbMF1dXSwgKSArIGFyZ3NbMTpdCiAgICAgIGhpbnRzID0gaGludHMud2l0aF9pbnB1dF90eXBlcygqYXJncywgKiprd2FyZ3MpCiAgICBlbHNlOgogICAgICBLID0gdHlwZWhpbnRzLkFueQogICAgaWYgaGludHMub3V0cHV0X3R5cGVzOgogICAgICBtYWluX291dHB1dF90eXBlID0gaGludHMuc2ltcGxlX291dHB1dF90eXBlKCcnKQogICAgICBoaW50cyA9IGhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5UdXBsZVtLLCBtYWluX291dHB1dF90eXBlXSkKICAgIHJldHVybiBoaW50cwoKCmNsYXNzIF9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dChQVHJhbnNmb3JtKToKCiAgZGVmIF9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgIGNvbWJpbmVfZm4sICAjIHR5cGU6IENvbWJpbmVGbgogICAgICAgICAgICAgICBmYW5vdXQsICAjIHR5cGU6IHR5cGluZy5VbmlvbltpbnQsIHR5cGluZy5DYWxsYWJsZVtbdHlwaW5nLkFueV0sIGludF1dCiAgICAgICAgICAgICAgKToKICAgICMgdHlwZTogKC4uLikgLT4gTm9uZQogICAgc2VsZi5fY29tYmluZV9mbiA9IGNvbWJpbmVfZm4KICAgIHNlbGYuX2Zhbm91dF9mbiA9ICgobGFtYmRhIGtleTogZmFub3V0KQogICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmFub3V0LCBpbnQpIGVsc2UgZmFub3V0KQoKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiAnJXMoJXMsIGZhbm91dD0lcyknICUgKAogICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAogICAgICAgIHB0cmFuc2Zvcm0ubGFiZWxfZnJvbV9jYWxsYWJsZShzZWxmLl9jb21iaW5lX2ZuKSwKICAgICAgICBwdHJhbnNmb3JtLmxhYmVsX2Zyb21fY2FsbGFibGUoc2VsZi5fZmFub3V0X2ZuKSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IEFjY3VtdWxhdGlvbk1vZGUKICAgIGNvbWJpbmVfZm4gPSBzZWxmLl9jb21iaW5lX2ZuCiAgICBmYW5vdXRfZm4gPSBzZWxmLl9mYW5vdXRfZm4KCiAgICBjbGFzcyBTcGxpdEhvdENvbGQoRG9Gbik6CiAgICAgIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICAgICAgIyBTcHJlYWRpbmcgYSBob3Qga2V5IGFjcm9zcyBhbGwgcG9zc2libGUgc3ViLWtleXMgZm9yIGFsbCBidW5kbGVzCiAgICAgICAgIyB3b3VsZCBkZWZlYXQgdGhlIGdvYWwgb2Ygbm90IG92ZXJ3aGVsbWluZyBkb3duc3RyZWFtIHJlZHVjZXJzCiAgICAgICAgIyAoYXMgd2VsbCBhcyBtYWtpbmcgbGVzcyBlZmZpY2llbnQgdXNlIG9mIFBHQksgY29tYmluaW5nIHRhYmxlcykuCiAgICAgICAgIyBJbnN0ZWFkLCBlYWNoIGJ1bmRsZSBpbmRlcGVuZGVudGx5IG1ha2VzIGEgY29uc2lzdGVudCBjaG9pY2UgYWJvdXQKICAgICAgICAjIHdoaWNoICJzaGFyZCIgb2YgYSBrZXkgdG8gc2VuZCBpdHMgaW50ZXJtZWRpYXRlIHJlc3VsdHMuCiAgICAgICAgc2VsZi5fbm9uY2UgPSBpbnQocmFuZG9tLmdldHJhbmRiaXRzKDMxKSkKCiAgICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgICAgIGtleSwgdmFsdWUgPSBlbGVtZW50CiAgICAgICAgZmFub3V0ID0gZmFub3V0X2ZuKGtleSkKICAgICAgICBpZiBmYW5vdXQgPD0gMToKICAgICAgICAgICMgQm9vbGVhbiBpbmRpY2F0ZXMgdGhpcyBpcyBub3QgYW4gYWNjdW11bGF0b3IuCiAgICAgICAgICB5aWVsZCAoa2V5LCAoRmFsc2UsIHZhbHVlKSkgICMgY29sZAogICAgICAgIGVsc2U6CiAgICAgICAgICB5aWVsZCBwdmFsdWUuVGFnZ2VkT3V0cHV0KCdob3QnLCAoKHNlbGYuX25vbmNlICUgZmFub3V0LCBrZXkpLCB2YWx1ZSkpCgogICAgY2xhc3MgUHJlQ29tYmluZUZuKENvbWJpbmVGbik6CiAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgZGVmIGV4dHJhY3Rfb3V0cHV0KGFjY3VtdWxhdG9yKToKICAgICAgICAjIEJvb2xlYW4gaW5kaWNhdGVzIHRoaXMgaXMgYW4gYWNjdW11bGF0b3IuCiAgICAgICAgcmV0dXJuIChUcnVlLCBhY2N1bXVsYXRvcikKCiAgICAgIGNyZWF0ZV9hY2N1bXVsYXRvciA9IGNvbWJpbmVfZm4uY3JlYXRlX2FjY3VtdWxhdG9yCiAgICAgIGFkZF9pbnB1dCA9IGNvbWJpbmVfZm4uYWRkX2lucHV0CiAgICAgIG1lcmdlX2FjY3VtdWxhdG9ycyA9IGNvbWJpbmVfZm4ubWVyZ2VfYWNjdW11bGF0b3JzCiAgICAgIGNvbXBhY3QgPSBjb21iaW5lX2ZuLmNvbXBhY3QKCiAgICBjbGFzcyBQb3N0Q29tYmluZUZuKENvbWJpbmVGbik6CiAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgZGVmIGFkZF9pbnB1dChhY2N1bXVsYXRvciwgZWxlbWVudCk6CiAgICAgICAgaXNfYWNjdW11bGF0b3IsIHZhbHVlID0gZWxlbWVudAogICAgICAgIGlmIGlzX2FjY3VtdWxhdG9yOgogICAgICAgICAgcmV0dXJuIGNvbWJpbmVfZm4ubWVyZ2VfYWNjdW11bGF0b3JzKFthY2N1bXVsYXRvciwgdmFsdWVdKQogICAgICAgIGVsc2U6CiAgICAgICAgICByZXR1cm4gY29tYmluZV9mbi5hZGRfaW5wdXQoYWNjdW11bGF0b3IsIHZhbHVlKQoKICAgICAgY3JlYXRlX2FjY3VtdWxhdG9yID0gY29tYmluZV9mbi5jcmVhdGVfYWNjdW11bGF0b3IKICAgICAgbWVyZ2VfYWNjdW11bGF0b3JzID0gY29tYmluZV9mbi5tZXJnZV9hY2N1bXVsYXRvcnMKICAgICAgY29tcGFjdCA9IGNvbWJpbmVfZm4uY29tcGFjdAogICAgICBleHRyYWN0X291dHB1dCA9IGNvbWJpbmVfZm4uZXh0cmFjdF9vdXRwdXQKCiAgICBkZWYgU3RyaXBOb25jZShub25jZV9rZXlfdmFsdWUpOgogICAgICAoXywga2V5KSwgdmFsdWUgPSBub25jZV9rZXlfdmFsdWUKICAgICAgcmV0dXJuIGtleSwgdmFsdWUKCiAgICBjb2xkLCBob3QgPSBwY29sbCB8IFBhckRvKFNwbGl0SG90Q29sZCgpKS53aXRoX291dHB1dHMoJ2hvdCcsIG1haW49J2NvbGQnKQogICAgY29sZC5lbGVtZW50X3R5cGUgPSB0eXBlaGludHMuQW55ICAjIE5vIG11bHRpLW91dHB1dCB0eXBlIGhpbnRzLgogICAgcHJlY29tYmluZWRfaG90ID0gKAogICAgICAgIGhvdAogICAgICAgICMgQXZvaWQgZG91YmxlIGNvdW50aW5nIHRoYXQgbWF5IGhhcHBlbiB3aXRoIHN0YWNrZWQgYWNjdW11bGF0aW5nIG1vZGUuCiAgICAgICAgfCAnV2luZG93SW50b0Rpc2NhcmRpbmcnID4+IFdpbmRvd0ludG8oCiAgICAgICAgICAgIHBjb2xsLndpbmRvd2luZywgYWNjdW11bGF0aW9uX21vZGU9QWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HKQogICAgICAgIHwgQ29tYmluZVBlcktleShQcmVDb21iaW5lRm4oKSkKICAgICAgICB8IE1hcChTdHJpcE5vbmNlKQogICAgICAgIHwgJ1dpbmRvd0ludG9PcmlnaW5hbCcgPj4gV2luZG93SW50byhwY29sbC53aW5kb3dpbmcpKQogICAgcmV0dXJuICgoY29sZCwgcHJlY29tYmluZWRfaG90KQogICAgICAgICAgICB8IEZsYXR0ZW4oKQogICAgICAgICAgICB8IENvbWJpbmVQZXJLZXkoUG9zdENvbWJpbmVGbigpKSkKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwaW5nLlR1cGxlW0ssIFZdKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGluZy5UdXBsZVtLLCB0eXBpbmcuSXRlcmFibGVbVl1dKQpjbGFzcyBHcm91cEJ5S2V5KFBUcmFuc2Zvcm0pOgogICIiIkEgZ3JvdXAgYnkga2V5IHRyYW5zZm9ybS4KCiAgUHJvY2Vzc2VzIGFuIGlucHV0IFBDb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2Yga2V5L3ZhbHVlIHBhaXJzIHJlcHJlc2VudGVkIGFzIGEKICB0dXBsZSBwYWlyLiBUaGUgcmVzdWx0IGlzIGEgUENvbGxlY3Rpb24gd2hlcmUgdmFsdWVzIGhhdmluZyBhIGNvbW1vbiBrZXkgYXJlCiAgZ3JvdXBlZCB0b2dldGhlci4gIEZvciBleGFtcGxlIChhLCAxKSwgKGIsIDIpLCAoYSwgMykgd2lsbCByZXN1bHQgaW50bwogIChhLCBbMSwgM10pLCAoYiwgWzJdKS4KCiAgVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgaXMgdXNlZCBvbmx5IHdoZW4gcnVuIG9uIHRoZSBsb2NhbCBkaXJlY3QgcnVubmVyLgogICIiIgogIGNsYXNzIFJlaWZ5V2luZG93cyhEb0ZuKToKICAgIGRlZiBwcm9jZXNzKAogICAgICAgIHNlbGYsIGVsZW1lbnQsIHdpbmRvdz1Eb0ZuLldpbmRvd1BhcmFtLCB0aW1lc3RhbXA9RG9Gbi5UaW1lc3RhbXBQYXJhbSk6CiAgICAgIHRyeToKICAgICAgICBrLCB2ID0gZWxlbWVudAogICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgICAnSW5wdXQgdG8gR3JvdXBCeUtleSBtdXN0IGJlIGEgUENvbGxlY3Rpb24gd2l0aCAnCiAgICAgICAgICAgICdlbGVtZW50cyBjb21wYXRpYmxlIHdpdGggS1ZbQSwgQl0nKQoKICAgICAgcmV0dXJuIFsoaywgV2luZG93ZWRWYWx1ZSh2LCB0aW1lc3RhbXAsIFt3aW5kb3ddKSldCgogICAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgICBrZXlfdHlwZSwgdmFsdWVfdHlwZSA9IHRyaXZpYWxfaW5mZXJlbmNlLmtleV92YWx1ZV90eXBlcyhpbnB1dF90eXBlKQogICAgICByZXR1cm4gdHlwZWhpbnRzLkl0ZXJhYmxlW3R5cGVoaW50cy5LVlsKICAgICAgICAgIGtleV90eXBlLCB0eXBlaGludHMuV2luZG93ZWRWYWx1ZVt2YWx1ZV90eXBlXV1dICAjIHR5cGU6IGlnbm9yZVttaXNjXQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICMgVGhpcyBjb2RlIHBhdGggaXMgb25seSB1c2VkIGluIHRoZSBsb2NhbCBkaXJlY3QgcnVubmVyLiAgRm9yIERhdGFmbG93CiAgICAjIHJ1bm5lciBleGVjdXRpb24sIHRoZSBHcm91cEJ5S2V5IHRyYW5zZm9ybSBpcyBleHBhbmRlZCBvbiB0aGUgc2VydmljZS4KICAgIGlucHV0X3R5cGUgPSBwY29sbC5lbGVtZW50X3R5cGUKICAgIGlmIGlucHV0X3R5cGUgaXMgbm90IE5vbmU6CiAgICAgICMgSW5pdGlhbGl6ZSB0eXBlLWhpbnRzIHVzZWQgYmVsb3cgdG8gZW5mb3JjZSB0eXBlLWNoZWNraW5nIGFuZCB0byBwYXNzCiAgICAgICMgZG93bnN0cmVhbSB0byBmdXJ0aGVyIFBUcmFuc2Zvcm1zLgogICAgICBrZXlfdHlwZSwgdmFsdWVfdHlwZSA9IHRyaXZpYWxfaW5mZXJlbmNlLmtleV92YWx1ZV90eXBlcyhpbnB1dF90eXBlKQogICAgICAjIEVuZm9yY2UgdGhlIGlucHV0IHRvIGEgR0JLIGhhcyBhIEtWIGVsZW1lbnQgdHlwZS4KICAgICAgcGNvbGwuZWxlbWVudF90eXBlID0gdHlwZWhpbnRzLktWW2tleV90eXBlLCB2YWx1ZV90eXBlXQogICAgICB0eXBlY29kZXJzLnJlZ2lzdHJ5LnZlcmlmeV9kZXRlcm1pbmlzdGljKAogICAgICAgICAgdHlwZWNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIoa2V5X3R5cGUpLAogICAgICAgICAgJ0dyb3VwQnlLZXkgb3BlcmF0aW9uICIlcyInICUgc2VsZi5sYWJlbCkKCiAgICAgIHJlaWZ5X291dHB1dF90eXBlID0gdHlwZWhpbnRzLktWWwogICAgICAgICAga2V5X3R5cGUsIHR5cGVoaW50cy5XaW5kb3dlZFZhbHVlW3ZhbHVlX3R5cGVdXSAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAgICAgZ2JrX2lucHV0X3R5cGUgPSAoCiAgICAgICAgICB0eXBlaGludHMuS1Zba2V5X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgdHlwZWhpbnRzLkl0ZXJhYmxlW3R5cGVoaW50cy5XaW5kb3dlZFZhbHVlW3ZhbHVlX3R5cGVdXV0KICAgICAgKSAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAgICAgZ2JrX291dHB1dF90eXBlID0gdHlwZWhpbnRzLktWW2tleV90eXBlLCB0eXBlaGludHMuSXRlcmFibGVbdmFsdWVfdHlwZV1dCgogICAgICAjIHB5bGludDogZGlzYWJsZT1iYWQtY29udGludWF0aW9uCiAgICAgIHJldHVybiAoCiAgICAgICAgICBwY29sbAogICAgICAgICAgfCAnUmVpZnlXaW5kb3dzJyA+PgogICAgICAgICAgKFBhckRvKHNlbGYuUmVpZnlXaW5kb3dzKCkpLndpdGhfb3V0cHV0X3R5cGVzKHJlaWZ5X291dHB1dF90eXBlKSkKICAgICAgICAgIHwgJ0dyb3VwQnlLZXknID4+ICgKICAgICAgICAgICAgICBfR3JvdXBCeUtleU9ubHkoKS53aXRoX2lucHV0X3R5cGVzKAogICAgICAgICAgICAgICAgICByZWlmeV9vdXRwdXRfdHlwZSkud2l0aF9vdXRwdXRfdHlwZXMoZ2JrX2lucHV0X3R5cGUpKQogICAgICAgICAgfCAoCiAgICAgICAgICAgICAgJ0dyb3VwQnlXaW5kb3cnID4+CiAgICAgICAgICAgICAgX0dyb3VwQWxzb0J5V2luZG93KHBjb2xsLndpbmRvd2luZykud2l0aF9pbnB1dF90eXBlcygKICAgICAgICAgICAgICAgICAgZ2JrX2lucHV0X3R5cGUpLndpdGhfb3V0cHV0X3R5cGVzKGdia19vdXRwdXRfdHlwZSkpKQogICAgZWxzZToKICAgICAgIyBUaGUgaW5wdXRfdHlwZSBpcyBOb25lLCBydW4gdGhlIGRlZmF1bHQKICAgICAgcmV0dXJuICgKICAgICAgICAgIHBjb2xsCiAgICAgICAgICB8ICdSZWlmeVdpbmRvd3MnID4+IFBhckRvKHNlbGYuUmVpZnlXaW5kb3dzKCkpCiAgICAgICAgICB8ICdHcm91cEJ5S2V5JyA+PiBfR3JvdXBCeUtleU9ubHkoKQogICAgICAgICAgfCAnR3JvdXBCeVdpbmRvdycgPj4gX0dyb3VwQWxzb0J5V2luZG93KHBjb2xsLndpbmRvd2luZykpCgogIGRlZiBpbmZlcl9vdXRwdXRfdHlwZShzZWxmLCBpbnB1dF90eXBlKToKICAgIGtleV90eXBlLCB2YWx1ZV90eXBlID0gdHJpdmlhbF9pbmZlcmVuY2Uua2V5X3ZhbHVlX3R5cGVzKGlucHV0X3R5cGUpCiAgICByZXR1cm4gdHlwZWhpbnRzLktWW2tleV90eXBlLCB0eXBlaGludHMuSXRlcmFibGVbdmFsdWVfdHlwZV1dCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IHR5cGluZy5UdXBsZVtzdHIsIE5vbmVdCiAgICByZXR1cm4gY29tbW9uX3VybnMucHJpbWl0aXZlcy5HUk9VUF9CWV9LRVkudXJuLCBOb25lCgogIEBzdGF0aWNtZXRob2QKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4oY29tbW9uX3VybnMucHJpbWl0aXZlcy5HUk9VUF9CWV9LRVkudXJuLCBOb25lKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKAogICAgICB1bnVzZWRfcHRyYW5zZm9ybSwgdW51c2VkX3BheWxvYWQsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBHcm91cEJ5S2V5KCkKCiAgZGVmIHJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXQoc2VsZik6CiAgICByZXR1cm4gVHJ1ZQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBpbmcuVHVwbGVbSywgVl0pCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwaW5nLlR1cGxlW0ssIHR5cGluZy5JdGVyYWJsZVtWXV0pCmNsYXNzIF9Hcm91cEJ5S2V5T25seShQVHJhbnNmb3JtKToKICAiIiJBIGdyb3VwIGJ5IGtleSB0cmFuc2Zvcm0sIGlnbm9yaW5nIHdpbmRvd3MuIiIiCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAga2V5X3R5cGUsIHZhbHVlX3R5cGUgPSB0cml2aWFsX2luZmVyZW5jZS5rZXlfdmFsdWVfdHlwZXMoaW5wdXRfdHlwZSkKICAgIHJldHVybiB0eXBlaGludHMuS1Zba2V5X3R5cGUsIHR5cGVoaW50cy5JdGVyYWJsZVt2YWx1ZV90eXBlXV0KCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBzZWxmLl9jaGVja19wY29sbGVjdGlvbihwY29sbCkKICAgIHJldHVybiBwdmFsdWUuUENvbGxlY3Rpb24uZnJvbV8ocGNvbGwpCgoKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGluZy5UdXBsZVtLLCB0eXBpbmcuSXRlcmFibGVbVl1dKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGluZy5UdXBsZVtLLCB0eXBpbmcuSXRlcmFibGVbVl1dKQpjbGFzcyBfR3JvdXBBbHNvQnlXaW5kb3coUGFyRG8pOgogICIiIlRoZSBHcm91cEFsc29CeVdpbmRvdyB0cmFuc2Zvcm0uIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2luZyk6CiAgICBzdXBlcihfR3JvdXBBbHNvQnlXaW5kb3csIHNlbGYpLl9faW5pdF9fKF9Hcm91cEFsc29CeVdpbmRvd0RvRm4od2luZG93aW5nKSkKICAgIHNlbGYud2luZG93aW5nID0gd2luZG93aW5nCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgc2VsZi5fY2hlY2tfcGNvbGxlY3Rpb24ocGNvbGwpCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uLmZyb21fKHBjb2xsKQoKCmNsYXNzIF9Hcm91cEFsc29CeVdpbmRvd0RvRm4oRG9Gbik6CiAgIyBUT0RPKHJvYmVydHdiKTogU3VwcG9ydCBjb21iaW5lciBsaWZ0aW5nLgoKICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93aW5nKToKICAgIHN1cGVyKF9Hcm91cEFsc29CeVdpbmRvd0RvRm4sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYud2luZG93aW5nID0gd2luZG93aW5nCgogIGRlZiBpbmZlcl9vdXRwdXRfdHlwZShzZWxmLCBpbnB1dF90eXBlKToKICAgIGtleV90eXBlLCB3aW5kb3dlZF92YWx1ZV9pdGVyX3R5cGUgPSB0cml2aWFsX2luZmVyZW5jZS5rZXlfdmFsdWVfdHlwZXMoCiAgICAgICAgaW5wdXRfdHlwZSkKICAgIHZhbHVlX3R5cGUgPSB3aW5kb3dlZF92YWx1ZV9pdGVyX3R5cGUuaW5uZXJfdHlwZS5pbm5lcl90eXBlCiAgICByZXR1cm4gdHlwZWhpbnRzLkl0ZXJhYmxlW3R5cGVoaW50cy5LVltrZXlfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVoaW50cy5JdGVyYWJsZVt2YWx1ZV90eXBlXV1dCgogIGRlZiBzdGFydF9idW5kbGUoc2VsZik6CiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IGNyZWF0ZV90cmlnZ2VyX2RyaXZlcgogICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgc2VsZi5kcml2ZXIgPSBjcmVhdGVfdHJpZ2dlcl9kcml2ZXIoc2VsZi53aW5kb3dpbmcsIFRydWUpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgaywgdnMgPSBlbGVtZW50CiAgICByZXR1cm4gc2VsZi5kcml2ZXIucHJvY2Vzc19lbnRpcmVfa2V5KGssIHZzKQoKCmNsYXNzIFBhcnRpdGlvbihQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMpOgogICIiIlNwbGl0IGEgUENvbGxlY3Rpb24gaW50byBzZXZlcmFsIHBhcnRpdGlvbnMuCgogIFVzZXMgdGhlIHNwZWNpZmllZCBQYXJ0aXRpb25GbiB0byBzZXBhcmF0ZSBhbiBpbnB1dCBQQ29sbGVjdGlvbiBpbnRvIHRoZQogIHNwZWNpZmllZCBudW1iZXIgb2Ygc3ViLVBDb2xsZWN0aW9ucy4KCiAgV2hlbiBhcHBseSgpZCwgYSBQYXJ0aXRpb24oKSBQVHJhbnNmb3JtIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmc6CgogIEFyZ3M6CiAgICBwYXJ0aXRpb25mbjogYSBQYXJ0aXRpb25Gbiwgb3IgYSBjYWxsYWJsZSB3aXRoIHRoZSBzaWduYXR1cmUgZGVzY3JpYmVkIGluCiAgICAgIENhbGxhYmxlV3JhcHBlclBhcnRpdGlvbkZuLgogICAgbjogbnVtYmVyIG9mIG91dHB1dCBwYXJ0aXRpb25zLgoKICBUaGUgcmVzdWx0IG9mIHRoaXMgUFRyYW5zZm9ybSBpcyBhIHNpbXBsZSBsaXN0IG9mIHRoZSBvdXRwdXQgUENvbGxlY3Rpb25zCiAgcmVwcmVzZW50aW5nIGVhY2ggb2YgbiBwYXJ0aXRpb25zLCBpbiBvcmRlci4KICAiIiIKICBjbGFzcyBBcHBseVBhcnRpdGlvbkZuRm4oRG9Gbik6CiAgICAiIiJBIERvRm4gdGhhdCBhcHBsaWVzIGEgUGFydGl0aW9uRm4uIiIiCiAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCBwYXJ0aXRpb25mbiwgbiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgcGFydGl0aW9uID0gcGFydGl0aW9uZm4ucGFydGl0aW9uX2ZvcihlbGVtZW50LCBuLCAqYXJncywgKiprd2FyZ3MpCiAgICAgIGlmIG5vdCAwIDw9IHBhcnRpdGlvbiA8IG46CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ1BhcnRpdGlvbkZuIHNwZWNpZmllZCBvdXQtb2YtYm91bmRzIHBhcnRpdGlvbiBpbmRleDogJwogICAgICAgICAgICAnJWQgbm90IGluIFswLCAlZCknICUgKHBhcnRpdGlvbiwgbikpCiAgICAgICMgRWFjaCBpbnB1dCBpcyBkaXJlY3RlZCBpbnRvIHRoZSBvdXRwdXQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKICAgICAgIyBzZWxlY3RlZCBwYXJ0aXRpb24uCiAgICAgIHlpZWxkIHB2YWx1ZS5UYWdnZWRPdXRwdXQoc3RyKHBhcnRpdGlvbiksIGVsZW1lbnQpCgogIGRlZiBtYWtlX2ZuKHNlbGYsIGZuLCBoYXNfc2lkZV9pbnB1dHMpOgogICAgcmV0dXJuIGZuIGlmIGlzaW5zdGFuY2UoZm4sIFBhcnRpdGlvbkZuKSBlbHNlIENhbGxhYmxlV3JhcHBlclBhcnRpdGlvbkZuKGZuKQoKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIG4gPSBpbnQoc2VsZi5hcmdzWzBdKQogICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8oCiAgICAgICAgc2VsZi5BcHBseVBhcnRpdGlvbkZuRm4oKSwgc2VsZi5mbiwgKnNlbGYuYXJncywgKioKICAgICAgICBzZWxmLmt3YXJncykud2l0aF9vdXRwdXRzKCpbc3RyKHQpIGZvciB0IGluIHJhbmdlKG4pXSkKCgpjbGFzcyBXaW5kb3dpbmcob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgd2luZG93Zm4sICAjIHR5cGU6IFdpbmRvd0ZuCiAgICAgICAgICAgICAgIHRyaWdnZXJmbj1Ob25lLCAgIyB0eXBlOiB0eXBpbmcuT3B0aW9uYWxbVHJpZ2dlckZuXQogICAgICAgICAgICAgICBhY2N1bXVsYXRpb25fbW9kZT1Ob25lLCAgIyB0eXBlOiB0eXBpbmcuT3B0aW9uYWxbYmVhbV9ydW5uZXJfYXBpX3BiMi5BY2N1bXVsYXRpb25Nb2RlXQogICAgICAgICAgICAgICB0aW1lc3RhbXBfY29tYmluZXI9Tm9uZSwgICMgdHlwZTogdHlwaW5nLk9wdGlvbmFsW2JlYW1fcnVubmVyX2FwaV9wYjIuT3V0cHV0VGltZV0KICAgICAgICAgICAgICAgYWxsb3dlZF9sYXRlbmVzcz0wLCAjIHR5cGU6IHR5cGluZy5VbmlvbltpbnQsIGZsb2F0XQogICAgICAgICAgICAgICApOgogICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSB3aW5kb3cgc3RyYXRlZ3kuCgogICAgQXJnczoKICAgICAgd2luZG93Zm46IFdpbmRvdyBhc3NpZ24gZnVuY3Rpb24uCiAgICAgIHRyaWdnZXJmbjogVHJpZ2dlciBmdW5jdGlvbi4KICAgICAgYWNjdW11bGF0aW9uX21vZGU6IGEgQWNjdW11bGF0aW9uTW9kZSwgY29udHJvbHMgd2hhdCB0byBkbyB3aXRoIGRhdGEKICAgICAgICB3aGVuIGEgdHJpZ2dlciBmaXJlcyBtdWx0aXBsZSB0aW1lcy4KICAgICAgdGltZXN0YW1wX2NvbWJpbmVyOiBhIFRpbWVzdGFtcENvbWJpbmVyLCBkZXRlcm1pbmVzIGhvdyBvdXRwdXQKICAgICAgICB0aW1lc3RhbXBzIG9mIGdyb3VwaW5nIG9wZXJhdGlvbnMgYXJlIGFzc2lnbmVkLgogICAgICBhbGxvd2VkX2xhdGVuZXNzOiBNYXhpbXVtIGRlbGF5IGluIHNlY29uZHMgYWZ0ZXIgZW5kIG9mIHdpbmRvdwogICAgICAgIGFsbG93ZWQgZm9yIGFueSBsYXRlIGRhdGEgdG8gYmUgcHJvY2Vzc2VkIHdpdGhvdXQgYmVpbmcgZGlzY2FyZGVkCiAgICAgICAgZGlyZWN0bHkuCiAgICAiIiIKICAgIGdsb2JhbCBBY2N1bXVsYXRpb25Nb2RlLCBEZWZhdWx0VHJpZ2dlciAgIyBweWxpbnQ6IGRpc2FibGU9Z2xvYmFsLXZhcmlhYmxlLW5vdC1hc3NpZ25lZAogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VyIGltcG9ydCBBY2N1bXVsYXRpb25Nb2RlLCBEZWZhdWx0VHJpZ2dlcgogICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgaWYgdHJpZ2dlcmZuIGlzIE5vbmU6CiAgICAgIHRyaWdnZXJmbiA9IERlZmF1bHRUcmlnZ2VyKCkKICAgIGlmIGFjY3VtdWxhdGlvbl9tb2RlIGlzIE5vbmU6CiAgICAgIGlmIHRyaWdnZXJmbiA9PSBEZWZhdWx0VHJpZ2dlcigpOgogICAgICAgIGFjY3VtdWxhdGlvbl9tb2RlID0gQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgJ2FjY3VtdWxhdGlvbl9tb2RlIG11c3QgYmUgcHJvdmlkZWQgZm9yIG5vbi10cml2aWFsIHRyaWdnZXJzJykKICAgIGlmIG5vdCB3aW5kb3dmbi5nZXRfd2luZG93X2NvZGVyKCkuaXNfZGV0ZXJtaW5pc3RpYygpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ3dpbmRvdyBmbiAoJXMpIGRvZXMgbm90IGhhdmUgYSBkZXRlcm1hbmlzdGljIGNvZGVyICglcyknICUKICAgICAgICAgICh3aW5kb3dmbiwgd2luZG93Zm4uZ2V0X3dpbmRvd19jb2RlcigpKSkKICAgIHNlbGYud2luZG93Zm4gPSB3aW5kb3dmbgogICAgc2VsZi50cmlnZ2VyZm4gPSB0cmlnZ2VyZm4KICAgIHNlbGYuYWNjdW11bGF0aW9uX21vZGUgPSBhY2N1bXVsYXRpb25fbW9kZQogICAgc2VsZi5hbGxvd2VkX2xhdGVuZXNzID0gRHVyYXRpb24ub2YoYWxsb3dlZF9sYXRlbmVzcykKICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyID0gKAogICAgICAgIHRpbWVzdGFtcF9jb21iaW5lciBvciBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRU9XKQogICAgc2VsZi5faXNfZGVmYXVsdCA9ICgKICAgICAgICBzZWxmLndpbmRvd2ZuID09IEdsb2JhbFdpbmRvd3MoKSBhbmQKICAgICAgICBzZWxmLnRyaWdnZXJmbiA9PSBEZWZhdWx0VHJpZ2dlcigpIGFuZAogICAgICAgIHNlbGYuYWNjdW11bGF0aW9uX21vZGUgPT0gQWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HIGFuZAogICAgICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyID09IFRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FT1cgYW5kCiAgICAgICAgc2VsZi5hbGxvd2VkX2xhdGVuZXNzID09IDApCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAiV2luZG93aW5nKCVzLCAlcywgJXMsICVzKSIgJSAoCiAgICAgICAgc2VsZi53aW5kb3dmbiwKICAgICAgICBzZWxmLnRyaWdnZXJmbiwKICAgICAgICBzZWxmLmFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcik6CiAgICAgIGlmIHNlbGYuX2lzX2RlZmF1bHQgYW5kIG90aGVyLl9pc19kZWZhdWx0OgogICAgICAgIHJldHVybiBUcnVlCiAgICAgIHJldHVybiAoCiAgICAgICAgICBzZWxmLndpbmRvd2ZuID09IG90aGVyLndpbmRvd2ZuIGFuZAogICAgICAgICAgc2VsZi50cmlnZ2VyZm4gPT0gb3RoZXIudHJpZ2dlcmZuIGFuZAogICAgICAgICAgc2VsZi5hY2N1bXVsYXRpb25fbW9kZSA9PSBvdGhlci5hY2N1bXVsYXRpb25fbW9kZSBhbmQKICAgICAgICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyID09IG90aGVyLnRpbWVzdGFtcF9jb21iaW5lciBhbmQKICAgICAgICAgIHNlbGYuYWxsb3dlZF9sYXRlbmVzcyA9PSBvdGhlci5hbGxvd2VkX2xhdGVuZXNzKQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgoCiAgICAgICAgc2VsZi53aW5kb3dmbiwKICAgICAgICBzZWxmLnRyaWdnZXJmbiwKICAgICAgICBzZWxmLmFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgIHNlbGYuYWxsb3dlZF9sYXRlbmVzcywKICAgICAgICBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcikpCgogIGRlZiBpc19kZWZhdWx0KHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2lzX2RlZmF1bHQKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IGJlYW1fcnVubmVyX2FwaV9wYjIuV2luZG93aW5nU3RyYXRlZ3kKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLldpbmRvd2luZ1N0cmF0ZWd5KAogICAgICAgIHdpbmRvd19mbj1zZWxmLndpbmRvd2ZuLnRvX3J1bm5lcl9hcGkoY29udGV4dCksCiAgICAgICAgIyBUT0RPKHJvYmVydHdiKTogUHJvaGliaXQgaW1wbGljaXQgbXVsdGktbGV2ZWwgbWVyZ2luZy4KICAgICAgICBtZXJnZV9zdGF0dXM9KAogICAgICAgICAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLk1lcmdlU3RhdHVzLk5FRURTX01FUkdFCiAgICAgICAgICAgIGlmIHNlbGYud2luZG93Zm4uaXNfbWVyZ2luZygpIGVsc2UKICAgICAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5NZXJnZVN0YXR1cy5OT05fTUVSR0lORyksCiAgICAgICAgd2luZG93X2NvZGVyX2lkPWNvbnRleHQuY29kZXJzLmdldF9pZChzZWxmLndpbmRvd2ZuLmdldF93aW5kb3dfY29kZXIoKSksCiAgICAgICAgdHJpZ2dlcj1zZWxmLnRyaWdnZXJmbi50b19ydW5uZXJfYXBpKGNvbnRleHQpLAogICAgICAgIGFjY3VtdWxhdGlvbl9tb2RlPXNlbGYuYWNjdW11bGF0aW9uX21vZGUsCiAgICAgICAgb3V0cHV0X3RpbWU9c2VsZi50aW1lc3RhbXBfY29tYmluZXIsCiAgICAgICAgIyBUT0RPKHJvYmVydHdiKTogU3VwcG9ydCBFTUlUX0lGX05PTkVNUFRZCiAgICAgICAgY2xvc2luZ19iZWhhdmlvcj1iZWFtX3J1bm5lcl9hcGlfcGIyLkNsb3NpbmdCZWhhdmlvci5FTUlUX0FMV0FZUywKICAgICAgICBPblRpbWVCZWhhdmlvcj1iZWFtX3J1bm5lcl9hcGlfcGIyLk9uVGltZUJlaGF2aW9yLkZJUkVfQUxXQVlTLAogICAgICAgIGFsbG93ZWRfbGF0ZW5lc3M9c2VsZi5hbGxvd2VkX2xhdGVuZXNzLm1pY3JvcyAvLyAxMDAwLAogICAgICAgIGVudmlyb25tZW50X2lkPWNvbnRleHQuZGVmYXVsdF9lbnZpcm9ubWVudF9pZCgpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICAjIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IFRyaWdnZXJGbgogICAgcmV0dXJuIFdpbmRvd2luZygKICAgICAgICB3aW5kb3dmbj1XaW5kb3dGbi5mcm9tX3J1bm5lcl9hcGkocHJvdG8ud2luZG93X2ZuLCBjb250ZXh0KSwKICAgICAgICB0cmlnZ2VyZm49VHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaShwcm90by50cmlnZ2VyLCBjb250ZXh0KSwKICAgICAgICBhY2N1bXVsYXRpb25fbW9kZT1wcm90by5hY2N1bXVsYXRpb25fbW9kZSwKICAgICAgICB0aW1lc3RhbXBfY29tYmluZXI9cHJvdG8ub3V0cHV0X3RpbWUsCiAgICAgICAgYWxsb3dlZF9sYXRlbmVzcz1EdXJhdGlvbihtaWNyb3M9cHJvdG8uYWxsb3dlZF9sYXRlbmVzcyAqIDEwMDApKQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhUKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKFQpCmNsYXNzIFdpbmRvd0ludG8oUGFyRG8pOgogICIiIkEgd2luZG93IHRyYW5zZm9ybSBhc3NpZ25pbmcgd2luZG93cyB0byBlYWNoIGVsZW1lbnQgb2YgYSBQQ29sbGVjdGlvbi4KCiAgVHJhbnNmb3JtcyBhbiBpbnB1dCBQQ29sbGVjdGlvbiBieSBhcHBseWluZyBhIHdpbmRvd2luZyBmdW5jdGlvbiB0byBlYWNoCiAgZWxlbWVudC4gIEVhY2ggdHJhbnNmb3JtZWQgZWxlbWVudCBpbiB0aGUgcmVzdWx0IHdpbGwgYmUgYSBXaW5kb3dlZFZhbHVlCiAgZWxlbWVudCB3aXRoIHRoZSBzYW1lIGlucHV0IHZhbHVlIGFuZCB0aW1lc3RhbXAsIHdpdGggaXRzIG5ldyBzZXQgb2Ygd2luZG93cwogIGRldGVybWluZWQgYnkgdGhlIHdpbmRvd2luZyBmdW5jdGlvbi4KICAiIiIKICBjbGFzcyBXaW5kb3dJbnRvRm4oRG9Gbik6CiAgICAiIiJBIERvRm4gdGhhdCBhcHBsaWVzIGEgV2luZG93SW50byBvcGVyYXRpb24uIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgd2luZG93aW5nKToKICAgICAgIyB0eXBlOiAoV2luZG93aW5nKSAtPiBOb25lCiAgICAgIHNlbGYud2luZG93aW5nID0gd2luZG93aW5nCgogICAgZGVmIHByb2Nlc3MoCiAgICAgICAgc2VsZiwgZWxlbWVudCwgdGltZXN0YW1wPURvRm4uVGltZXN0YW1wUGFyYW0sIHdpbmRvdz1Eb0ZuLldpbmRvd1BhcmFtKToKICAgICAgY29udGV4dCA9IFdpbmRvd0ZuLkFzc2lnbkNvbnRleHQoCiAgICAgICAgICB0aW1lc3RhbXAsIGVsZW1lbnQ9ZWxlbWVudCwgd2luZG93PXdpbmRvdykKICAgICAgbmV3X3dpbmRvd3MgPSBzZWxmLndpbmRvd2luZy53aW5kb3dmbi5hc3NpZ24oY29udGV4dCkKICAgICAgeWllbGQgV2luZG93ZWRWYWx1ZShlbGVtZW50LCBjb250ZXh0LnRpbWVzdGFtcCwgbmV3X3dpbmRvd3MpCgogIGRlZiBfX2luaXRfXyhzZWxmLAogICAgICAgICAgICAgICB3aW5kb3dmbiwgICMgdHlwZTogdHlwaW5nLlVuaW9uW1dpbmRvd2luZywgV2luZG93Rm5dCiAgICAgICAgICAgICAgIHRyaWdnZXI9Tm9uZSwgICMgdHlwZTogdHlwaW5nLk9wdGlvbmFsW1RyaWdnZXJGbl0KICAgICAgICAgICAgICAgYWNjdW11bGF0aW9uX21vZGU9Tm9uZSwKICAgICAgICAgICAgICAgdGltZXN0YW1wX2NvbWJpbmVyPU5vbmUsCiAgICAgICAgICAgICAgIGFsbG93ZWRfbGF0ZW5lc3M9MCk6CiAgICAiIiJJbml0aWFsaXplcyBhIFdpbmRvd0ludG8gdHJhbnNmb3JtLgoKICAgIEFyZ3M6CiAgICAgIHdpbmRvd2ZuIChXaW5kb3dpbmcsIFdpbmRvd0ZuKTogRnVuY3Rpb24gdG8gYmUgdXNlZCBmb3Igd2luZG93aW5nLgogICAgICB0cmlnZ2VyOiAob3B0aW9uYWwpIFRyaWdnZXIgdXNlZCBmb3Igd2luZG93aW5nLCBvciBOb25lIGZvciBkZWZhdWx0LgogICAgICBhY2N1bXVsYXRpb25fbW9kZTogKG9wdGlvbmFsKSBBY2N1bXVsYXRpb24gbW9kZSB1c2VkIGZvciB3aW5kb3dpbmcsCiAgICAgICAgICByZXF1aXJlZCBmb3Igbm9uLXRyaXZpYWwgdHJpZ2dlcnMuCiAgICAgIHRpbWVzdGFtcF9jb21iaW5lcjogKG9wdGlvbmFsKSBUaW1lc3RhbXAgY29tYm5pbmVyIHVzZWQgZm9yIHdpbmRvd2luZywKICAgICAgICAgIG9yIE5vbmUgZm9yIGRlZmF1bHQuCiAgICAiIiIKICAgIGlmIGlzaW5zdGFuY2Uod2luZG93Zm4sIFdpbmRvd2luZyk6CiAgICAgICMgT3ZlcmxheSB3aW5kb3dpbmcgd2l0aCBrd2FyZ3MuCiAgICAgIHdpbmRvd2luZyA9IHdpbmRvd2ZuCiAgICAgIHdpbmRvd2ZuID0gd2luZG93aW5nLndpbmRvd2ZuCgogICAgICAjIFVzZSB3aW5kb3dpbmcgdG8gZmlsbCBpbiBkZWZhdWx0cyBmb3IgdGhlIGV4dHJhIGFyZ3VtZW50cy4KICAgICAgdHJpZ2dlciA9IHRyaWdnZXIgb3Igd2luZG93aW5nLnRyaWdnZXJmbgogICAgICBhY2N1bXVsYXRpb25fbW9kZSA9IGFjY3VtdWxhdGlvbl9tb2RlIG9yIHdpbmRvd2luZy5hY2N1bXVsYXRpb25fbW9kZQogICAgICB0aW1lc3RhbXBfY29tYmluZXIgPSB0aW1lc3RhbXBfY29tYmluZXIgb3Igd2luZG93aW5nLnRpbWVzdGFtcF9jb21iaW5lcgoKICAgIHNlbGYud2luZG93aW5nID0gV2luZG93aW5nKAogICAgICAgIHdpbmRvd2ZuLAogICAgICAgIHRyaWdnZXIsCiAgICAgICAgYWNjdW11bGF0aW9uX21vZGUsCiAgICAgICAgdGltZXN0YW1wX2NvbWJpbmVyLAogICAgICAgIGFsbG93ZWRfbGF0ZW5lc3MpCiAgICBzdXBlcihXaW5kb3dJbnRvLCBzZWxmKS5fX2luaXRfXyhzZWxmLldpbmRvd0ludG9GbihzZWxmLndpbmRvd2luZykpCgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIHVudXNlZF9pbnB1dHMpOgogICAgIyB0eXBlOiAodHlwaW5nLkFueSkgLT4gV2luZG93aW5nCiAgICByZXR1cm4gc2VsZi53aW5kb3dpbmcKCiAgZGVmIGluZmVyX291dHB1dF90eXBlKHNlbGYsIGlucHV0X3R5cGUpOgogICAgcmV0dXJuIGlucHV0X3R5cGUKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICBpbnB1dF90eXBlID0gcGNvbGwuZWxlbWVudF90eXBlCgogICAgaWYgaW5wdXRfdHlwZSBpcyBub3QgTm9uZToKICAgICAgb3V0cHV0X3R5cGUgPSBpbnB1dF90eXBlCiAgICAgIHNlbGYud2l0aF9pbnB1dF90eXBlcyhpbnB1dF90eXBlKQogICAgICBzZWxmLndpdGhfb3V0cHV0X3R5cGVzKG91dHB1dF90eXBlKQogICAgcmV0dXJuIHN1cGVyKFdpbmRvd0ludG8sIHNlbGYpLmV4cGFuZChwY29sbCkKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiB0eXBpbmcuVHVwbGVbc3RyLCBtZXNzYWdlLk1lc3NhZ2VdCiAgICByZXR1cm4gKAogICAgICAgIGNvbW1vbl91cm5zLnByaW1pdGl2ZXMuQVNTSUdOX1dJTkRPV1MudXJuLAogICAgICAgIHNlbGYud2luZG93aW5nLnRvX3J1bm5lcl9hcGkoY29udGV4dCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcih1bnVzZWRfcHRyYW5zZm9ybSwgcHJvdG8sIGNvbnRleHQpOgogICAgd2luZG93aW5nID0gV2luZG93aW5nLmZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCkKICAgIHJldHVybiBXaW5kb3dJbnRvKAogICAgICAgIHdpbmRvd2luZy53aW5kb3dmbiwKICAgICAgICB0cmlnZ2VyPXdpbmRvd2luZy50cmlnZ2VyZm4sCiAgICAgICAgYWNjdW11bGF0aW9uX21vZGU9d2luZG93aW5nLmFjY3VtdWxhdGlvbl9tb2RlLAogICAgICAgIHRpbWVzdGFtcF9jb21iaW5lcj13aW5kb3dpbmcudGltZXN0YW1wX2NvbWJpbmVyKQoKClBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKAogICAgY29tbW9uX3VybnMucHJpbWl0aXZlcy5BU1NJR05fV0lORE9XUy51cm4sCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBVcGRhdGUgV2luZG93SW50b1BheWxvYWQgdG8gaW5jbHVkZSB0aGUgZnVsbCBzdHJhdGVneS4KICAgICMgKFJpZ2h0IG5vdyBvbmx5IFdpbmRvd0ZuIGlzIHVzZWQsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gcmVjb25zdGl0dXRlIHRoZQogICAgIyBXaW5kb3dJbnRvIHRyYW5zZm9ybSwgYW5kIGluIHRoZSBmdXR1cmUgd2lsbCBuZWVkIGl0IGF0IHJ1bnRpbWUgdG8KICAgICMgc3VwcG9ydCBtZXRhLWRhdGEgZHJpdmVuIHRyaWdnZXJzLikKICAgICMgVE9ETyhyb2JlcnR3Yik6IFVzZSBhIHJlZmVyZW5jZSByYXRoZXIgdGhhbiBlbWJlZGRpbmc/CiAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLldpbmRvd2luZ1N0cmF0ZWd5LAogICAgV2luZG93SW50by5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKQoKIyBQeXRob24ncyBwaWNrbGluZyBpcyBicm9rZW4gZm9yIG5lc3RlZCBjbGFzc2VzLgpXaW5kb3dJbnRvRm4gPSBXaW5kb3dJbnRvLldpbmRvd0ludG9GbgoKCmNsYXNzIEZsYXR0ZW4oUFRyYW5zZm9ybSk6CiAgIiIiTWVyZ2VzIHNldmVyYWwgUENvbGxlY3Rpb25zIGludG8gYSBzaW5nbGUgUENvbGxlY3Rpb24uCgogIENvcGllcyBhbGwgZWxlbWVudHMgaW4gMCBvciBtb3JlIFBDb2xsZWN0aW9ucyBpbnRvIGEgc2luZ2xlIG91dHB1dAogIFBDb2xsZWN0aW9uLiBJZiB0aGVyZSBhcmUgbm8gaW5wdXQgUENvbGxlY3Rpb25zLCB0aGUgcmVzdWx0aW5nIFBDb2xsZWN0aW9uCiAgd2lsbCBiZSBlbXB0eSAoYnV0IHNlZSBhbHNvIGt3YXJncyBiZWxvdykuCgogIEFyZ3M6CiAgICAqKmt3YXJnczogQWNjZXB0cyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudCAicGlwZWxpbmUiLCB3aGljaCBzcGVjaWZpZXMgdGhlCiAgICAgIHBpcGVsaW5lIHRoYXQgIm93bnMiIHRoaXMgUFRyYW5zZm9ybS4gT3JkaW5hcmlseSBGbGF0dGVuIGNhbiBvYnRhaW4gdGhpcwogICAgICBpbmZvcm1hdGlvbiBmcm9tIG9uZSBvZiB0aGUgaW5wdXQgUENvbGxlY3Rpb25zLCBidXQgaWYgdGhlcmUgYXJlIG5vbmUgKG9yCiAgICAgIGlmIHRoZXJlJ3MgYSBjaGFuY2UgdGhlcmUgbWF5IGJlIG5vbmUpLCB0aGlzIGFyZ3VtZW50IGlzIHRoZSBvbmx5IHdheSB0bwogICAgICBwcm92aWRlIHBpcGVsaW5lIGluZm9ybWF0aW9uIGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCBtYW5kYXRvcnkuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgIHN1cGVyKEZsYXR0ZW4sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYucGlwZWxpbmUgPSBrd2FyZ3MucG9wKAogICAgICAgICdwaXBlbGluZScsIE5vbmUpICAjIHR5cGU6IHR5cGluZy5PcHRpb25hbFtQaXBlbGluZV0KICAgIGlmIGt3YXJnczoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50czogJXMnICUgbGlzdChrd2FyZ3MpKQoKICBkZWYgX2V4dHJhY3RfaW5wdXRfcHZhbHVlcyhzZWxmLCBwdmFsdWVpc2gpOgogICAgdHJ5OgogICAgICBwdmFsdWVpc2ggPSB0dXBsZShwdmFsdWVpc2gpCiAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0lucHV0IHRvIEZsYXR0ZW4gbXVzdCBiZSBhbiBpdGVyYWJsZS4gJwogICAgICAgICAgJ0dvdCBhIHZhbHVlIG9mIHR5cGUgJXMgaW5zdGVhZC4nICUgdHlwZShwdmFsdWVpc2gpKQogICAgcmV0dXJuIHB2YWx1ZWlzaCwgcHZhbHVlaXNoCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGxzKToKICAgIGZvciBwY29sbCBpbiBwY29sbHM6CiAgICAgIHNlbGYuX2NoZWNrX3Bjb2xsZWN0aW9uKHBjb2xsKQogICAgaXNfYm91bmRlZCA9IGFsbChwY29sbC5pc19ib3VuZGVkIGZvciBwY29sbCBpbiBwY29sbHMpCiAgICByZXN1bHQgPSBwdmFsdWUuUENvbGxlY3Rpb24oc2VsZi5waXBlbGluZSwgaXNfYm91bmRlZD1pc19ib3VuZGVkKQogICAgcmVzdWx0LmVsZW1lbnRfdHlwZSA9IHR5cGVoaW50cy5Vbmlvblt0dXBsZSgKICAgICAgICBwY29sbC5lbGVtZW50X3R5cGUgZm9yIHBjb2xsIGluIHBjb2xscyldCiAgICByZXR1cm4gcmVzdWx0CgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIGlucHV0cyk6CiAgICAjIHR5cGU6ICh0eXBpbmcuQW55KSAtPiBXaW5kb3dpbmcKICAgIGlmIG5vdCBpbnB1dHM6CiAgICAgICMgVE9ETyhyb2JlcnR3Yik6IFJldHVybiBzb21ldGhpbmcgY29tcGF0aWJsZSB3aXRoIGV2ZXJ5IHdpbmRvd2luZz8KICAgICAgcmV0dXJuIFdpbmRvd2luZyhHbG9iYWxXaW5kb3dzKCkpCiAgICByZXR1cm4gc3VwZXIoRmxhdHRlbiwgc2VsZikuZ2V0X3dpbmRvd2luZyhpbnB1dHMpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gdHlwaW5nLlR1cGxlW3N0ciwgTm9uZV0KICAgIHJldHVybiBjb21tb25fdXJucy5wcmltaXRpdmVzLkZMQVRURU4udXJuLCBOb25lCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigKICAgICAgdW51c2VkX3B0cmFuc2Zvcm0sIHVudXNlZF9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBGbGF0dGVuKCkKCgpQVHJhbnNmb3JtLnJlZ2lzdGVyX3VybigKICAgIGNvbW1vbl91cm5zLnByaW1pdGl2ZXMuRkxBVFRFTi51cm4sIE5vbmUsIEZsYXR0ZW4uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcikKCgpjbGFzcyBDcmVhdGUoUFRyYW5zZm9ybSk6CiAgIiIiQSB0cmFuc2Zvcm0gdGhhdCBjcmVhdGVzIGEgUENvbGxlY3Rpb24gZnJvbSBhbiBpdGVyYWJsZS4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVzLCByZXNodWZmbGU9VHJ1ZSk6CiAgICAiIiJJbml0aWFsaXplcyBhIENyZWF0ZSB0cmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgdmFsdWVzOiBBbiBvYmplY3Qgb2YgdmFsdWVzIGZvciB0aGUgUENvbGxlY3Rpb24KICAgICIiIgogICAgc3VwZXIoQ3JlYXRlLCBzZWxmKS5fX2luaXRfXygpCiAgICBpZiBpc2luc3RhbmNlKHZhbHVlcywgKHVuaWNvZGUsIHN0ciwgYnl0ZXMpKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ1BUcmFuc2Zvcm0gQ3JlYXRlOiBSZWZ1c2luZyB0byB0cmVhdCBzdHJpbmcgYXMgJwogICAgICAgICAgJ2FuIGl0ZXJhYmxlLiAoc3RyaW5nPSVyKScgJSB2YWx1ZXMpCiAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWVzLCBkaWN0KToKICAgICAgdmFsdWVzID0gdmFsdWVzLml0ZW1zKCkKICAgIHNlbGYudmFsdWVzID0gdHVwbGUodmFsdWVzKQogICAgc2VsZi5yZXNodWZmbGUgPSByZXNodWZmbGUKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiB0eXBpbmcuVHVwbGVbc3RyLCBieXRlc10KICAgICMgUmVxdWlyZWQgYXMgdGhpcyBpcyBpZGVudGlmaWVkIGJ5IHR5cGUgaW4gUFRyYW5zZm9ybU92ZXJyaWRlcy4KICAgICMgVE9ETyhCRUFNLTM4MTIpOiBVc2UgYW4gYWN0dWFsIFVSTiBoZXJlLgogICAgcmV0dXJuIHNlbGYudG9fcnVubmVyX2FwaV9waWNrbGVkKGNvbnRleHQpCgogIGRlZiBpbmZlcl9vdXRwdXRfdHlwZShzZWxmLCB1bnVzZWRfaW5wdXRfdHlwZSk6CiAgICBpZiBub3Qgc2VsZi52YWx1ZXM6CiAgICAgIHJldHVybiB0eXBlaGludHMuQW55CiAgICByZXR1cm4gdHlwZWhpbnRzLlVuaW9uW1sKICAgICAgICB0cml2aWFsX2luZmVyZW5jZS5pbnN0YW5jZV90b190eXBlKHYpIGZvciB2IGluIHNlbGYudmFsdWVzCiAgICBdXQoKICBkZWYgZ2V0X291dHB1dF90eXBlKHNlbGYpOgogICAgcmV0dXJuICgKICAgICAgICBzZWxmLmdldF90eXBlX2hpbnRzKCkuc2ltcGxlX291dHB1dF90eXBlKHNlbGYubGFiZWwpIG9yCiAgICAgICAgc2VsZi5pbmZlcl9vdXRwdXRfdHlwZShOb25lKSkKCiAgZGVmIGV4cGFuZChzZWxmLCBwYmVnaW4pOgogICAgYXNzZXJ0IGlzaW5zdGFuY2UocGJlZ2luLCBwdmFsdWUuUEJlZ2luKQogICAgY29kZXIgPSB0eXBlY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihzZWxmLmdldF9vdXRwdXRfdHlwZSgpKQogICAgc2VyaWFsaXplZF92YWx1ZXMgPSBbY29kZXIuZW5jb2RlKHYpIGZvciB2IGluIHNlbGYudmFsdWVzXQogICAgcmVzaHVmZmxlID0gc2VsZi5yZXNodWZmbGUKCiAgICAjIEF2b2lkIHRoZSAicmVkaXN0cmlidXRpbmciIHJlc2h1ZmZsZSBmb3IgMCBhbmQgMSBlbGVtZW50IENyZWF0ZXMuCiAgICAjIFRoZXNlIHNwZWNpYWwgY2FzZXMgYXJlIG9mdGVuIHVzZWQgaW4gYnVpbGRpbmcgdXAgbW9yZSBjb21wbGV4CiAgICAjIHRyYW5zZm9ybXMgKGUuZy4gV3JpdGUpLgoKICAgIGNsYXNzIE1heWJlUmVzaHVmZmxlKFBUcmFuc2Zvcm0pOgogICAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgICBpZiBsZW4oc2VyaWFsaXplZF92YWx1ZXMpID4gMSBhbmQgcmVzaHVmZmxlOgogICAgICAgICAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnV0aWwgaW1wb3J0IFJlc2h1ZmZsZQogICAgICAgICAgcmV0dXJuIHBjb2xsIHwgUmVzaHVmZmxlKCkKICAgICAgICBlbHNlOgogICAgICAgICAgcmV0dXJuIHBjb2xsCgogICAgcmV0dXJuICgKICAgICAgICBwYmVnaW4KICAgICAgICB8IEltcHVsc2UoKQogICAgICAgIHwgRmxhdE1hcChsYW1iZGEgXzogc2VyaWFsaXplZF92YWx1ZXMpLndpdGhfb3V0cHV0X3R5cGVzKGJ5dGVzKQogICAgICAgIHwgTWF5YmVSZXNodWZmbGUoKS53aXRoX291dHB1dF90eXBlcyhieXRlcykKICAgICAgICB8IE1hcChjb2Rlci5kZWNvZGUpLndpdGhfb3V0cHV0X3R5cGVzKHNlbGYuZ2V0X291dHB1dF90eXBlKCkpKQoKICBkZWYgYXNfcmVhZChzZWxmKToKICAgIGZyb20gYXBhY2hlX2JlYW0uaW8gaW1wb3J0IGlvYmFzZQogICAgY29kZXIgPSB0eXBlY29kZXJzLnJlZ2lzdHJ5LmdldF9jb2RlcihzZWxmLmdldF9vdXRwdXRfdHlwZSgpKQogICAgc291cmNlID0gc2VsZi5fY3JlYXRlX3NvdXJjZV9mcm9tX2l0ZXJhYmxlKHNlbGYudmFsdWVzLCBjb2RlcikKICAgIHJldHVybiBpb2Jhc2UuUmVhZChzb3VyY2UpLndpdGhfb3V0cHV0X3R5cGVzKHNlbGYuZ2V0X291dHB1dF90eXBlKCkpCgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIHVudXNlZF9pbnB1dHMpOgogICAgIyB0eXBlOiAodHlwaW5nLkFueSkgLT4gV2luZG93aW5nCiAgICByZXR1cm4gV2luZG93aW5nKEdsb2JhbFdpbmRvd3MoKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfY3JlYXRlX3NvdXJjZV9mcm9tX2l0ZXJhYmxlKHZhbHVlcywgY29kZXIpOgogICAgcmV0dXJuIENyZWF0ZS5fY3JlYXRlX3NvdXJjZShsaXN0KG1hcChjb2Rlci5lbmNvZGUsIHZhbHVlcykpLCBjb2RlcikKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfY3JlYXRlX3NvdXJjZShzZXJpYWxpemVkX3ZhbHVlcywgY29kZXIpOgogICAgIyB0eXBlOiAodHlwaW5nLkFueSwgdHlwaW5nLkFueSkgLT4gY3JlYXRlX3NvdXJjZS5fQ3JlYXRlU291cmNlCiAgICBmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY3JlYXRlX3NvdXJjZSBpbXBvcnQgX0NyZWF0ZVNvdXJjZQoKICAgIHJldHVybiBfQ3JlYXRlU291cmNlKHNlcmlhbGl6ZWRfdmFsdWVzLCBjb2RlcikKCgpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKGJ5dGVzKQpjbGFzcyBJbXB1bHNlKFBUcmFuc2Zvcm0pOgogICIiIkltcHVsc2UgcHJpbWl0aXZlLiIiIgogIGRlZiBleHBhbmQoc2VsZiwgcGJlZ2luKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHBiZWdpbiwgcHZhbHVlLlBCZWdpbik6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdJbnB1dCB0byBJbXB1bHNlIHRyYW5zZm9ybSBtdXN0IGJlIGEgUEJlZ2luIGJ1dCBmb3VuZCAlcycgJSBwYmVnaW4pCiAgICByZXR1cm4gcHZhbHVlLlBDb2xsZWN0aW9uKHBiZWdpbi5waXBlbGluZSkKCiAgZGVmIGdldF93aW5kb3dpbmcoc2VsZiwgaW5wdXRzKToKICAgICMgdHlwZTogKHR5cGluZy5BbnkpIC0+IFdpbmRvd2luZwogICAgcmV0dXJuIFdpbmRvd2luZyhHbG9iYWxXaW5kb3dzKCkpCgogIGRlZiBpbmZlcl9vdXRwdXRfdHlwZShzZWxmLCB1bnVzZWRfaW5wdXRfdHlwZSk6CiAgICByZXR1cm4gYnl0ZXMKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gdHlwaW5nLlR1cGxlW3N0ciwgTm9uZV0KICAgIHJldHVybiBjb21tb25fdXJucy5wcmltaXRpdmVzLklNUFVMU0UudXJuLCBOb25lCgogIEBzdGF0aWNtZXRob2QKICBAUFRyYW5zZm9ybS5yZWdpc3Rlcl91cm4oY29tbW9uX3VybnMucHJpbWl0aXZlcy5JTVBVTFNFLnVybiwgTm9uZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigKICAgICAgdW51c2VkX3B0cmFuc2Zvcm0sIHVudXNlZF9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBJbXB1bHNlKCkKld0mAQAAAAAAlH2UKIwLRG9GbkNvbnRleHSUal0xAQBLd0t5h5SMG0RvRm5Qcm9jZXNzQ29udGV4dC5fX2luaXRfX5RqVjEBAEuQS6GHlIweRG9GblByb2Nlc3NDb250ZXh0LnNldF9lbGVtZW50lGpWMQEAS6NLrYeUjBJEb0ZuUHJvY2Vzc0NvbnRleHSUal0xAQBLfEuth5SMHFByb2Nlc3NDb250aW51YXRpb24uX19pbml0X1+UalYxAQBLuUvBh5SMGlByb2Nlc3NDb250aW51YXRpb24ucmVzdW1llGpWMQEAS8NLzYeUjBNQcm9jZXNzQ29udGludWF0aW9ulGpdMQEAS7BLzYeUjCJSZXN0cmljdGlvblByb3ZpZGVyLmNyZWF0ZV90cmFja2VylGpWMQEAS/9NDQGHlIwnUmVzdHJpY3Rpb25Qcm92aWRlci5pbml0aWFsX3Jlc3RyaWN0aW9ulGpWMQEATQ8BTRQBh5SMGVJlc3RyaWN0aW9uUHJvdmlkZXIuc3BsaXSUalYxAQBNFgFNIQGHlIwlUmVzdHJpY3Rpb25Qcm92aWRlci5yZXN0cmljdGlvbl9jb2RlcpRqVjEBAE0jAU0sAYeUjCRSZXN0cmljdGlvblByb3ZpZGVyLnJlc3RyaWN0aW9uX3NpemWUalYxAQBNLgFNNgGHlIwiUmVzdHJpY3Rpb25Qcm92aWRlci5zcGxpdF9hbmRfc2l6ZZRqVjEBAE04AU0/AYeUjBNSZXN0cmljdGlvblByb3ZpZGVylGpdMQEAS9BNPwGHlIwWZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50c5RqVjEBAE1CAU1RAYeUjBpnZXRfZnVuY3Rpb25fYXJnc19kZWZhdWx0c5RqVjEBAE1UAU1zAYeUjCJSdW5uZXJBUElQVHJhbnNmb3JtSG9sZGVyLl9faW5pdF9flGpWMQEATX8BTYEBh5SMH1J1bm5lckFQSVBUcmFuc2Zvcm1Ib2xkZXIucHJvdG+UalYxAQBNgwFNhQGHlIwnUnVubmVyQVBJUFRyYW5zZm9ybUhvbGRlci50b19ydW5uZXJfYXBplGpWMQEATYcBTZsBh5SML1J1bm5lckFQSVBUcmFuc2Zvcm1Ib2xkZXIuZ2V0X3Jlc3RyaWN0aW9uX2NvZGVylGpWMQEATZ0BTZ8Bh5SMGVJ1bm5lckFQSVBUcmFuc2Zvcm1Ib2xkZXKUal0xAQBNdgFNnwGHlIwyV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIuaW5pdGlhbF9lc3RpbWF0b3Jfc3RhdGWUalYxAQBNrAFNsQGHlIw1V2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIuY3JlYXRlX3dhdGVybWFya19lc3RpbWF0b3KUalYxAQBNswFNtwGHlIwwV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIuZXN0aW1hdG9yX3N0YXRlX2NvZGVylGpWMQEATbkBTboBh5SMGldhdGVybWFya0VzdGltYXRvclByb3ZpZGVylGpdMQEATaIBTboBh5SME19Eb0ZuUGFyYW0uX19pbml0X1+UalYxAQBNvwFNwAGHlIwRX0RvRm5QYXJhbS5fX2VxX1+UalYxAQBNwgFNxQGHlIwRX0RvRm5QYXJhbS5fX25lX1+UalYxAQBNxwFNyQGHlIwTX0RvRm5QYXJhbS5fX2hhc2hfX5RqVjEBAE3LAU3MAYeUjBNfRG9GblBhcmFtLl9fcmVwcl9flGpWMQEATc4BTc8Bh5SMCl9Eb0ZuUGFyYW2Ual0xAQBNvQFNzwGHlIweX1Jlc3RyaWN0aW9uRG9GblBhcmFtLl9faW5pdF9flGpWMQEATdQBTdsBh5SMFV9SZXN0cmljdGlvbkRvRm5QYXJhbZRqXTEBAE3SAU3bAYeUjBhfU3RhdGVEb0ZuUGFyYW0uX19pbml0X1+UalYxAQBN4AFN5QGHlIwPX1N0YXRlRG9GblBhcmFtlGpdMQEATd4BTeUBh5SMGF9UaW1lckRvRm5QYXJhbS5fX2luaXRfX5RqVjEBAE3qAU3vAYeUjA9fVGltZXJEb0ZuUGFyYW2Ual0xAQBN6AFN7wGHlIweX0J1bmRsZUZpbmFsaXplclBhcmFtLl9faW5pdF9flGpWMQEATfQBTfYBh5SMHl9CdW5kbGVGaW5hbGl6ZXJQYXJhbS5yZWdpc3RlcpRqVjEBAE34AU35AYeUjCVfQnVuZGxlRmluYWxpemVyUGFyYW0uZmluYWxpemVfYnVuZGxllGpWMQEATf0BTQICh5SMI19CdW5kbGVGaW5hbGl6ZXJQYXJhbS5oYXNfY2FsbGJhY2tzlGpWMQEATQQCTQUCh5SMG19CdW5kbGVGaW5hbGl6ZXJQYXJhbS5yZXNldJRqVjEBAE0HAk0IAoeUjBVfQnVuZGxlRmluYWxpemVyUGFyYW2Ual0xAQBN8gFNCAKHlIwhX1dhdGVybWFya0VzdGltYXRvclBhcmFtLl9faW5pdF9flGpWMQEATQ0CTRQCh5SMGF9XYXRlcm1hcmtFc3RpbWF0b3JQYXJhbZRqXTEBAE0LAk0UAoeUjBJEb0ZuLmZyb21fY2FsbGFibGWUalYxAQBNQwJNRQKHlIwSRG9Gbi5kZWZhdWx0X2xhYmVslGpWMQEATUcCTUgCh5SMDERvRm4ucHJvY2Vzc5RqVjEBAE1KAk1qAoeUjApEb0ZuLnNldHVwlGpWMQEATWwCTXMCh5SMEURvRm4uc3RhcnRfYnVuZGxllGpWMQEATXUCTXwCh5SMEkRvRm4uZmluaXNoX2J1bmRsZZRqVjEBAE1+Ak2BAoeUjA1Eb0ZuLnRlYXJkb3dulGpWMQEATYMCTZMCh5SMG0RvRm4uZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50c5RqVjEBAE2VAk2WAoeUjBdEb0ZuLmRlZmF1bHRfdHlwZV9oaW50c5RqVjEBAE2YAk2gAoeUjBZEb0ZuLmluZmVyX291dHB1dF90eXBllGpWMQEATaQCTagCh5SMHkRvRm4uX3N0cmlwX291dHB1dF9hbm5vdGF0aW9uc5RqVjEBAE2qAk2xAoeUjBhEb0ZuLl9wcm9jZXNzX2FyZ3NwZWNfZm6UalYxAQBNswJNugKHlIwERG9GbpRqXTEBAE0XAk28AoeUjBVfZm5fdGFrZXNfc2lkZV9pbnB1dHOUalYxAQBNvwJNyQKHlIwcQ2FsbGFibGVXcmFwcGVyRG9Gbi5fX2luaXRfX5RqVjEBAE3UAk3pAoeUjCBDYWxsYWJsZVdyYXBwZXJEb0ZuLmRpc3BsYXlfZGF0YZRqVjEBAE3rAk31AoeUjBxDYWxsYWJsZVdyYXBwZXJEb0ZuLl9fcmVwcl9flGpWMQEATfcCTfgCh5SMJkNhbGxhYmxlV3JhcHBlckRvRm4uZGVmYXVsdF90eXBlX2hpbnRzlGpWMQEATfoCTQQDh5SMJUNhbGxhYmxlV3JhcHBlckRvRm4uaW5mZXJfb3V0cHV0X3R5cGWUalYxAQBNBgNNCAOHlIwnQ2FsbGFibGVXcmFwcGVyRG9Gbi5fcHJvY2Vzc19hcmdzcGVjX2ZulGpWMQEATQoDTQsDh5SMJENhbGxhYmxlV3JhcHBlckRvRm4uX2luc3BlY3RfcHJvY2Vzc5RqVjEBAE0NA00RA4eUjBNDYWxsYWJsZVdyYXBwZXJEb0ZulGpdMQEATcwCTREDh5SMF0NvbWJpbmVGbi5kZWZhdWx0X2xhYmVslGpWMQEATS4DTS8Dh5SMHENvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3KUalYxAQBNMQNNOAOHlIwTQ29tYmluZUZuLmFkZF9pbnB1dJRqVjEBAE06A01GA4eUjBRDb21iaW5lRm4uYWRkX2lucHV0c5RqVjEBAE1IA01ZA4eUjBxDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzlGpWMQEATVsDTWgDh5SMEUNvbWJpbmVGbi5jb21wYWN0lGpWMQEATWoDTXkDh5SMGENvbWJpbmVGbi5leHRyYWN0X291dHB1dJRqVjEBAE17A02FA4eUjA9Db21iaW5lRm4uYXBwbHmUalYxAQBNhwNNlAOHlIwYQ29tYmluZUZuLmZvcl9pbnB1dF90eXBllGpWMQEATZYDTZ4Dh5SMF0NvbWJpbmVGbi5mcm9tX2NhbGxhYmxllGpWMQEATaADTaIDh5SMHUNvbWJpbmVGbi5tYXliZV9mcm9tX2NhbGxhYmxllGpWMQEATaQDTa4Dh5SMH0NvbWJpbmVGbi5nZXRfYWNjdW11bGF0b3JfY29kZXKUalYxAQBNsANNsQOHlIwJQ29tYmluZUZulGpdMQEATRQDTbMDh5SMGV9SZWl0ZXJhYmxlQ2hhaW4uX19pbml0X1+UalYxAQBNuANNuQOHlIwZX1JlaXRlcmFibGVDaGFpbi5fX2l0ZXJfX5RqVjEBAE27A02+A4eUjBlfUmVpdGVyYWJsZUNoYWluLl9fYm9vbF9flGpWMQEATcADTcQDh5SMEF9SZWl0ZXJhYmxlQ2hhaW6Ual0xAQBNtgNNxAOHlIwhQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLl9faW5pdF9flGpWMQEATdEDTeIDh5SMJUNhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5kaXNwbGF5X2RhdGGUalYxAQBN5ANN5QOHlIwhQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLl9fcmVwcl9flGpWMQEATecDTegDh5SMK0NhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3KUalYxAQBN6gNN6wOHlIwiQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLmFkZF9pbnB1dJRqVjEBAE3tA03xA4eUjCNDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4uYWRkX2lucHV0c5RqVjEBAE3zA033A4eUjCtDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzlGpWMQEATfkDTfoDh5SMIENhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5jb21wYWN0lGpWMQEATfwDTQAEh5SMJ0NhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5leHRyYWN0X291dHB1dJRqVjEBAE0CBE0DBIeUjCtDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4uZGVmYXVsdF90eXBlX2hpbnRzlGpWMQEATQUETRoEh5SMJ0NhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5mb3JfaW5wdXRfdHlwZZRqVjEBAE0cBE0sBIeUjBhDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm6Ual0xAQBNxwNNLASHlIw3Tm9TaWRlSW5wdXRzQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcpRqVjEBAE03BE04BIeUjC5Ob1NpZGVJbnB1dHNDYWxsYWJsZVdyYXBwZXJDb21iaW5lRm4uYWRkX2lucHV0lGpWMQEATToETT4Eh5SML05vU2lkZUlucHV0c0NhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5hZGRfaW5wdXRzlGpWMQEATUAETUQEh5SMN05vU2lkZUlucHV0c0NhbGxhYmxlV3JhcHBlckNvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnOUalYxAQBNRgRNRwSHlIwsTm9TaWRlSW5wdXRzQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLmNvbXBhY3SUalYxAQBNSQRNTQSHlIwzTm9TaWRlSW5wdXRzQ2FsbGFibGVXcmFwcGVyQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0lGpWMQEATU8ETVAEh5SMJE5vU2lkZUlucHV0c0NhbGxhYmxlV3JhcHBlckNvbWJpbmVGbpRqXTEBAE0vBE1QBIeUjBlQYXJ0aXRpb25Gbi5kZWZhdWx0X2xhYmVslGpWMQEATVkETVoEh5SMGVBhcnRpdGlvbkZuLnBhcnRpdGlvbl9mb3KUalYxAQBNXARNagSHlIwLUGFydGl0aW9uRm6Ual0xAQBNUwRNagSHlIwjQ2FsbGFibGVXcmFwcGVyUGFydGl0aW9uRm4uX19pbml0X1+UalYxAQBNdARNggSHlIwoQ2FsbGFibGVXcmFwcGVyUGFydGl0aW9uRm4ucGFydGl0aW9uX2ZvcpRqVjEBAE2EBE2GBIeUjBpDYWxsYWJsZVdyYXBwZXJQYXJ0aXRpb25GbpRqXTEBAE1tBE2GBIeUjA5QYXJEby5fX2luaXRfX5RqVjEBAE2oBE2zBIeUjBhQYXJEby5kZWZhdWx0X3R5cGVfaGludHOUalYxAQBNtQRNtgSHlIwXUGFyRG8uaW5mZXJfb3V0cHV0X3R5cGWUalYxAQBNuARNuQSHlIwNUGFyRG8ubWFrZV9mbpRqVjEBAE27BE2+BIeUjBlQYXJEby5fcHJvY2Vzc19hcmdzcGVjX2ZulGpWMQEATcAETcEEh5SMElBhckRvLmRpc3BsYXlfZGF0YZRqVjEBAE3DBE3HBIeUjAxQYXJEby5leHBhbmSUalYxAQBNyQRN4ASHlIwSUGFyRG8ud2l0aF9vdXRwdXRzlGpWMQEATeIETQMFh5SMFFBhckRvLl9wYXJkb19mbl9kYXRhlGpWMQEATQUFTQgFh5SMHVBhckRvLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATQoFTToFh5SMH1BhckRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNPAVNTwWHlIwlUGFyRG8ucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dJRqVjEBAE1RBU1SBYeUjBtQYXJEby5nZXRfcmVzdHJpY3Rpb25fY29kZXKUalYxAQBNVAVNWgWHlIwFUGFyRG+Ual0xAQBNiQRNWgWHlIwUX011bHRpUGFyRG8uX19pbml0X1+UalYxAQBNXgVNYgWHlIwSX011bHRpUGFyRG8uZXhwYW5klGpWMQEATWQFTWcFh5SMC19NdWx0aVBhckRvlGpdMQEATV0FTWcFh5SMB0ZsYXRNYXCUalYxAQBNagVNiQWHlIwDTWFwlGpWMQEATYwFTb8Fh5SMCE1hcFR1cGxllGpWMQEATcIFTQoGh5SMDEZsYXRNYXBUdXBsZZRqVjEBAE0NBk1VBoeUjAZGaWx0ZXKUalYxAQBNWAZNkQaHlIwQX2NvbWJpbmVfcGF5bG9hZJRqVjEBAE2UBk2YBoeUjBhDb21iaW5lR2xvYmFsbHkuX19pbml0X1+UalYxAQBNxQZNzgaHlIwcQ29tYmluZUdsb2JhbGx5LmRpc3BsYXlfZGF0YZRqVjEBAE3QBk3VBoeUjB1Db21iaW5lR2xvYmFsbHkuZGVmYXVsdF9sYWJlbJRqVjEBAE3XBk3fBoeUjBZDb21iaW5lR2xvYmFsbHkuX2Nsb25llGpWMQEATeEGTeQGh5SMG0NvbWJpbmVHbG9iYWxseS53aXRoX2Zhbm91dJRqVjEBAE3mBk3nBoeUjB1Db21iaW5lR2xvYmFsbHkud2l0aF9kZWZhdWx0c5RqVjEBAE3pBk3qBoeUjCBDb21iaW5lR2xvYmFsbHkud2l0aG91dF9kZWZhdWx0c5RqVjEBAE3sBk3tBoeUjCFDb21iaW5lR2xvYmFsbHkuYXNfc2luZ2xldG9uX3ZpZXeUalYxAQBN7wZN8AaHlIwcQ29tYmluZUdsb2JhbGx5LmV4cGFuZC50eXBlZJRqVjEBAE0cB00gB4eUjBZDb21iaW5lR2xvYmFsbHkuZXhwYW5klGpWMQEATfIGTSUHh5SMD0NvbWJpbmVHbG9iYWxseZRqXTEBAE2bBk0lB4eUjCFDb21iaW5lUGVyS2V5LndpdGhfaG90X2tleV9mYW5vdXSUalYxAQBNOwdNVweHlIwaQ29tYmluZVBlcktleS5kaXNwbGF5X2RhdGGUalYxAQBNWQdNXgeHlIwVQ29tYmluZVBlcktleS5tYWtlX2ZulGpWMQEATWAHTWIHh5SMG0NvbWJpbmVQZXJLZXkuZGVmYXVsdF9sYWJlbJRqVjEBAE1kB01lB4eUjCFDb21iaW5lUGVyS2V5Ll9wcm9jZXNzX2FyZ3NwZWNfZm6UalYxAQBNZwdNaAeHlIwUQ29tYmluZVBlcktleS5leHBhbmSUalYxAQBNagdNbgeHlIwgQ29tYmluZVBlcktleS5kZWZhdWx0X3R5cGVfaGludHOUalYxAQBNcAdNfAeHlIwlQ29tYmluZVBlcktleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE1+B02KB4eUjCdDb21iaW5lUGVyS2V5LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNjAdNkgeHlIwtQ29tYmluZVBlcktleS5ydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0lGpWMQEATZQHTZUHh5SMDUNvbWJpbmVQZXJLZXmUal0xAQBNKAdNlQeHlIwVQ29tYmluZVZhbHVlcy5tYWtlX2ZulGpWMQEATZoHTZsHh5SMFENvbWJpbmVWYWx1ZXMuZXhwYW5klGpWMQEATZ0HTasHh5SMJUNvbWJpbmVWYWx1ZXMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNrQdNtQeHlIwnQ29tYmluZVZhbHVlcy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATbcHTb0Hh5SMDUNvbWJpbmVWYWx1ZXOUal0xAQBNmQdNvQeHlIwaQ29tYmluZVZhbHVlc0RvRm4uX19pbml0X1+UalYxAQBNwwdNygeHlIwZQ29tYmluZVZhbHVlc0RvRm4ucHJvY2Vzc5RqVjEBAE3MB03oB4eUjCRDb21iaW5lVmFsdWVzRG9Gbi5kZWZhdWx0X3R5cGVfaGludHOUalYxAQBN6gdN9geHlIwRQ29tYmluZVZhbHVlc0RvRm6Ual0xAQBNwAdN9geHlIwnX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0Ll9faW5pdF9flGpWMQEATfsHTQIIh5SMLF9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5kZWZhdWx0X2xhYmVslGpWMQEATQQITQgIh5SMP19Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5leHBhbmQuU3BsaXRIb3RDb2xkLnN0YXJ0X2J1bmRsZZRqVjEBAE0RCE0XCIeUjDpfQ29tYmluZVBlcktleVdpdGhIb3RLZXlGYW5vdXQuZXhwYW5kLlNwbGl0SG90Q29sZC5wcm9jZXNzlGpWMQEATRkITSAIh5SMMl9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5leHBhbmQuU3BsaXRIb3RDb2xklGpdMQEATRAITSAIh5SMQV9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5leHBhbmQuUHJlQ29tYmluZUZuLmV4dHJhY3Rfb3V0cHV0lGpWMQEATSMITSYIh5SMMl9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5leHBhbmQuUHJlQ29tYmluZUZulGpdMQEATSIITSsIh5SMPV9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5leHBhbmQuUG9zdENvbWJpbmVGbi5hZGRfaW5wdXSUalYxAQBNLghNNAiHlIwzX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0LmV4cGFuZC5Qb3N0Q29tYmluZUZulGpdMQEATS0ITTkIh5SMJV9Db21iaW5lUGVyS2V5V2l0aEhvdEtleUZhbm91dC5leHBhbmSUalYxAQBNCghNSwiHlIweX0NvbWJpbmVQZXJLZXlXaXRoSG90S2V5RmFub3V0lGpdMQEATfkHTUsIh5SMH0dyb3VwQnlLZXkuUmVpZnlXaW5kb3dzLnByb2Nlc3OUalYxAQBNWwhNZAiHlIwpR3JvdXBCeUtleS5SZWlmeVdpbmRvd3MuaW5mZXJfb3V0cHV0X3R5cGWUalYxAQBNZghNaQiHlIwXR3JvdXBCeUtleS5SZWlmeVdpbmRvd3OUal0xAQBNWghNaQiHlIwRR3JvdXBCeUtleS5leHBhbmSUalYxAQBNawhNkwiHlIwcR3JvdXBCeUtleS5pbmZlcl9vdXRwdXRfdHlwZZRqVjEBAE2VCE2XCIeUjCJHcm91cEJ5S2V5LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATZkITZsIh5SMJEdyb3VwQnlLZXkuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE2dCE2hCIeUjCpHcm91cEJ5S2V5LnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXSUalYxAQBNowhNpAiHlIwKR3JvdXBCeUtleZRqXTEBAE1OCE2kCIeUjCFfR3JvdXBCeUtleU9ubHkuaW5mZXJfb3V0cHV0X3R5cGWUalYxAQBNqwhNrQiHlIwWX0dyb3VwQnlLZXlPbmx5LmV4cGFuZJRqVjEBAE2vCE2xCIeUjA9fR3JvdXBCeUtleU9ubHmUal0xAQBNpwhNsQiHlIwbX0dyb3VwQWxzb0J5V2luZG93Ll9faW5pdF9flGpWMQEATbgITboIh5SMGV9Hcm91cEFsc29CeVdpbmRvdy5leHBhbmSUalYxAQBNvAhNvgiHlIwSX0dyb3VwQWxzb0J5V2luZG93lGpdMQEATbQITb4Ih5SMH19Hcm91cEFsc29CeVdpbmRvd0RvRm4uX19pbml0X1+UalYxAQBNxAhNxgiHlIwoX0dyb3VwQWxzb0J5V2luZG93RG9Gbi5pbmZlcl9vdXRwdXRfdHlwZZRqVjEBAE3ICE3NCIeUjCNfR3JvdXBBbHNvQnlXaW5kb3dEb0ZuLnN0YXJ0X2J1bmRsZZRqVjEBAE3PCE3TCIeUjB5fR3JvdXBBbHNvQnlXaW5kb3dEb0ZuLnByb2Nlc3OUalYxAQBN1QhN1wiHlIwWX0dyb3VwQWxzb0J5V2luZG93RG9GbpRqXTEBAE3BCE3XCIeUjCRQYXJ0aXRpb24uQXBwbHlQYXJ0aXRpb25GbkZuLnByb2Nlc3OUalYxAQBN7AhN9AiHlIwcUGFydGl0aW9uLkFwcGx5UGFydGl0aW9uRm5GbpRqXTEBAE3qCE30CIeUjBFQYXJ0aXRpb24ubWFrZV9mbpRqVjEBAE32CE33CIeUjBBQYXJ0aXRpb24uZXhwYW5klGpWMQEATfkITf0Ih5SMCVBhcnRpdGlvbpRqXTEBAE3aCE39CIeUjBJXaW5kb3dpbmcuX19pbml0X1+UalYxAQBNAQlNMAmHlIwSV2luZG93aW5nLl9fcmVwcl9flGpWMQEATTIJTTcJh5SMEFdpbmRvd2luZy5fX2VxX1+UalYxAQBNOQlNQwmHlIwQV2luZG93aW5nLl9fbmVfX5RqVjEBAE1FCU1HCYeUjBJXaW5kb3dpbmcuX19oYXNoX1+UalYxAQBNSQlNTwmHlIwUV2luZG93aW5nLmlzX2RlZmF1bHSUalYxAQBNUQlNUgmHlIwXV2luZG93aW5nLnRvX3J1bm5lcl9hcGmUalYxAQBNVAlNZQmHlIwZV2luZG93aW5nLmZyb21fcnVubmVyX2FwaZRqVjEBAE1nCU1wCYeUjAlXaW5kb3dpbmeUal0xAQBNAAlNcAmHlIwgV2luZG93SW50by5XaW5kb3dJbnRvRm4uX19pbml0X1+UalYxAQBNfwlNgQmHlIwfV2luZG93SW50by5XaW5kb3dJbnRvRm4ucHJvY2Vzc5RqVjEBAE2DCU2ICYeUjBdXaW5kb3dJbnRvLldpbmRvd0ludG9GbpRqXTEBAE19CU2ICYeUjBNXaW5kb3dJbnRvLl9faW5pdF9flGpWMQEATYoJTaoJh5SMGFdpbmRvd0ludG8uZ2V0X3dpbmRvd2luZ5RqVjEBAE2sCU2uCYeUjBxXaW5kb3dJbnRvLmluZmVyX291dHB1dF90eXBllGpWMQEATbAJTbEJh5SMEVdpbmRvd0ludG8uZXhwYW5klGpWMQEATbMJTboJh5SMIldpbmRvd0ludG8udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNvAlNwAmHlIwkV2luZG93SW50by5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATcIJTckJh5SMCldpbmRvd0ludG+Ual0xAQBNcwlNyQmHlIwQRmxhdHRlbi5fX2luaXRfX5RqVjEBAE3oCU3tCYeUjB5GbGF0dGVuLl9leHRyYWN0X2lucHV0X3B2YWx1ZXOUalYxAQBN7wlN9gmHlIwORmxhdHRlbi5leHBhbmSUalYxAQBN+AlN/wmHlIwVRmxhdHRlbi5nZXRfd2luZG93aW5nlGpWMQEATQEKTQYKh5SMH0ZsYXR0ZW4udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNCApNCgqHlIwhRmxhdHRlbi5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATQwKTQ8Kh5SMB0ZsYXR0ZW6Ual0xAQBN2glNDwqHlIwPQ3JlYXRlLl9faW5pdF9flGpWMQEATRgKTSYKh5SMHkNyZWF0ZS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE0oCk0sCoeUjBhDcmVhdGUuaW5mZXJfb3V0cHV0X3R5cGWUalYxAQBNLgpNMwqHlIwWQ3JlYXRlLmdldF9vdXRwdXRfdHlwZZRqVjEBAE01Ck04CoeUjCNDcmVhdGUuZXhwYW5kLk1heWJlUmVzaHVmZmxlLmV4cGFuZJRqVjEBAE1FCk1KCoeUjBxDcmVhdGUuZXhwYW5kLk1heWJlUmVzaHVmZmxllGpdMQEATUQKTUoKh5SMDUNyZWF0ZS5leHBhbmSUalYxAQBNOgpNUQqHlIwOQ3JlYXRlLmFzX3JlYWSUalYxAQBNUwpNVwqHlIwUQ3JlYXRlLmdldF93aW5kb3dpbmeUalYxAQBNWQpNWwqHlIwjQ3JlYXRlLl9jcmVhdGVfc291cmNlX2Zyb21faXRlcmFibGWUalYxAQBNXQpNXwqHlIwVQ3JlYXRlLl9jcmVhdGVfc291cmNllGpWMQEATWEKTWYKh5SMBkNyZWF0ZZRqXTEBAE0WCk1mCoeUjA5JbXB1bHNlLmV4cGFuZJRqVjEBAE1sCk1wCoeUjBVJbXB1bHNlLmdldF93aW5kb3dpbmeUalYxAQBNcgpNdAqHlIwZSW1wdWxzZS5pbmZlcl9vdXRwdXRfdHlwZZRqVjEBAE12Ck13CoeUjB9JbXB1bHNlLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATXkKTXsKh5SMIUltcHVsc2UuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE19Ck2BCoeUjAdJbXB1bHNllGpdMQEATWkKTYEKh5R1fZQojBNSZXN0cmljdGlvblByb3ZpZGVylGrxAwAAjCJSZXN0cmljdGlvblByb3ZpZGVyLmNyZWF0ZV90cmFja2VylGrxAwAAjCdSZXN0cmljdGlvblByb3ZpZGVyLmluaXRpYWxfcmVzdHJpY3Rpb26UavEDAACMGVJlc3RyaWN0aW9uUHJvdmlkZXIuc3BsaXSUavEDAACMJVJlc3RyaWN0aW9uUHJvdmlkZXIucmVzdHJpY3Rpb25fY29kZXKUavEDAACMJFJlc3RyaWN0aW9uUHJvdmlkZXIucmVzdHJpY3Rpb25fc2l6ZZRq8QMAAIwiUmVzdHJpY3Rpb25Qcm92aWRlci5zcGxpdF9hbmRfc2l6ZZRq8QMAAIwaV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXKUavEDAACMMldhdGVybWFya0VzdGltYXRvclByb3ZpZGVyLmluaXRpYWxfZXN0aW1hdG9yX3N0YXRllGrxAwAAjDVXYXRlcm1hcmtFc3RpbWF0b3JQcm92aWRlci5jcmVhdGVfd2F0ZXJtYXJrX2VzdGltYXRvcpRq8QMAAIwwV2F0ZXJtYXJrRXN0aW1hdG9yUHJvdmlkZXIuZXN0aW1hdG9yX3N0YXRlX2NvZGVylGrxAwAAjAREb0ZulGrxAwAAjBJEb0ZuLmZyb21fY2FsbGFibGWUavEDAACMEkRvRm4uZGVmYXVsdF9sYWJlbJRq8QMAAIwMRG9Gbi5wcm9jZXNzlGrxAwAAjApEb0ZuLnNldHVwlGrxAwAAjBFEb0ZuLnN0YXJ0X2J1bmRsZZRq8QMAAIwSRG9Gbi5maW5pc2hfYnVuZGxllGrxAwAAjA1Eb0ZuLnRlYXJkb3dulGrxAwAAjBtEb0ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHOUavEDAACMF0RvRm4uZGVmYXVsdF90eXBlX2hpbnRzlGrxAwAAjBZEb0ZuLmluZmVyX291dHB1dF90eXBllGrxAwAAjAlDb21iaW5lRm6UavEDAACMF0NvbWJpbmVGbi5kZWZhdWx0X2xhYmVslGrxAwAAjBxDb21iaW5lRm4uY3JlYXRlX2FjY3VtdWxhdG9ylGrxAwAAjBNDb21iaW5lRm4uYWRkX2lucHV0lGrxAwAAjBRDb21iaW5lRm4uYWRkX2lucHV0c5Rq8QMAAIwcQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc5Rq8QMAAIwRQ29tYmluZUZuLmNvbXBhY3SUavEDAACMGENvbWJpbmVGbi5leHRyYWN0X291dHB1dJRq8QMAAIwPQ29tYmluZUZuLmFwcGx5lGrxAwAAjBhDb21iaW5lRm4uZm9yX2lucHV0X3R5cGWUavEDAACMF0NvbWJpbmVGbi5mcm9tX2NhbGxhYmxllGrxAwAAjB1Db21iaW5lRm4ubWF5YmVfZnJvbV9jYWxsYWJsZZRq8QMAAIwfQ29tYmluZUZuLmdldF9hY2N1bXVsYXRvcl9jb2RlcpRq8QMAAIwLUGFydGl0aW9uRm6UavEDAACMGVBhcnRpdGlvbkZuLmRlZmF1bHRfbGFiZWyUavEDAACMGVBhcnRpdGlvbkZuLnBhcnRpdGlvbl9mb3KUavEDAACMBVBhckRvlGrxAwAAjBhQYXJEby5kZWZhdWx0X3R5cGVfaGludHOUavEDAACMF1BhckRvLmluZmVyX291dHB1dF90eXBllGrxAwAAjA1QYXJEby5tYWtlX2ZulGrxAwAAjBJQYXJEby5kaXNwbGF5X2RhdGGUavEDAACMDFBhckRvLmV4cGFuZJRq8QMAAIwSUGFyRG8ud2l0aF9vdXRwdXRzlGrxAwAAjB1QYXJEby50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwfUGFyRG8uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwlUGFyRG8ucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dJRq8QMAAIwbUGFyRG8uZ2V0X3Jlc3RyaWN0aW9uX2NvZGVylGrxAwAAjAdGbGF0TWFwlGrxAwAAjANNYXCUavEDAACMCE1hcFR1cGxllGrxAwAAjAxGbGF0TWFwVHVwbGWUavEDAACMBkZpbHRlcpRq8QMAAIwPQ29tYmluZUdsb2JhbGx5lGrxAwAAjBxDb21iaW5lR2xvYmFsbHkuZGlzcGxheV9kYXRhlGrxAwAAjB1Db21iaW5lR2xvYmFsbHkuZGVmYXVsdF9sYWJlbJRq8QMAAIwbQ29tYmluZUdsb2JhbGx5LndpdGhfZmFub3V0lGrxAwAAjB1Db21iaW5lR2xvYmFsbHkud2l0aF9kZWZhdWx0c5Rq8QMAAIwgQ29tYmluZUdsb2JhbGx5LndpdGhvdXRfZGVmYXVsdHOUavEDAACMIUNvbWJpbmVHbG9iYWxseS5hc19zaW5nbGV0b25fdmlld5Rq8QMAAIwWQ29tYmluZUdsb2JhbGx5LmV4cGFuZJRq8QMAAIwNQ29tYmluZVBlcktleZRq8QMAAIwhQ29tYmluZVBlcktleS53aXRoX2hvdF9rZXlfZmFub3V0lGrxAwAAjBpDb21iaW5lUGVyS2V5LmRpc3BsYXlfZGF0YZRq8QMAAIwVQ29tYmluZVBlcktleS5tYWtlX2ZulGrxAwAAjBtDb21iaW5lUGVyS2V5LmRlZmF1bHRfbGFiZWyUavEDAACMFENvbWJpbmVQZXJLZXkuZXhwYW5klGrxAwAAjCBDb21iaW5lUGVyS2V5LmRlZmF1bHRfdHlwZV9oaW50c5Rq8QMAAIwlQ29tYmluZVBlcktleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwnQ29tYmluZVBlcktleS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGrxAwAAjC1Db21iaW5lUGVyS2V5LnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXSUavEDAACMDUNvbWJpbmVWYWx1ZXOUavEDAACMFUNvbWJpbmVWYWx1ZXMubWFrZV9mbpRq8QMAAIwUQ29tYmluZVZhbHVlcy5leHBhbmSUavEDAACMJUNvbWJpbmVWYWx1ZXMudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMJ0NvbWJpbmVWYWx1ZXMuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwKR3JvdXBCeUtleZRq8QMAAIwXR3JvdXBCeUtleS5SZWlmeVdpbmRvd3OUavEDAACMH0dyb3VwQnlLZXkuUmVpZnlXaW5kb3dzLnByb2Nlc3OUavEDAACMKUdyb3VwQnlLZXkuUmVpZnlXaW5kb3dzLmluZmVyX291dHB1dF90eXBllGrxAwAAjBFHcm91cEJ5S2V5LmV4cGFuZJRq8QMAAIwcR3JvdXBCeUtleS5pbmZlcl9vdXRwdXRfdHlwZZRq8QMAAIwiR3JvdXBCeUtleS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwkR3JvdXBCeUtleS5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGrxAwAAjCpHcm91cEJ5S2V5LnJ1bm5lcl9hcGlfcmVxdWlyZXNfa2V5ZWRfaW5wdXSUavEDAACMCVBhcnRpdGlvbpRq8QMAAIwcUGFydGl0aW9uLkFwcGx5UGFydGl0aW9uRm5GbpRq8QMAAIwkUGFydGl0aW9uLkFwcGx5UGFydGl0aW9uRm5Gbi5wcm9jZXNzlGrxAwAAjBFQYXJ0aXRpb24ubWFrZV9mbpRq8QMAAIwQUGFydGl0aW9uLmV4cGFuZJRq8QMAAIwJV2luZG93aW5nlGrxAwAAjBRXaW5kb3dpbmcuaXNfZGVmYXVsdJRq8QMAAIwXV2luZG93aW5nLnRvX3J1bm5lcl9hcGmUavEDAACMGVdpbmRvd2luZy5mcm9tX3J1bm5lcl9hcGmUavEDAACMCldpbmRvd0ludG+UavEDAACMF1dpbmRvd0ludG8uV2luZG93SW50b0ZulGrxAwAAjB9XaW5kb3dJbnRvLldpbmRvd0ludG9Gbi5wcm9jZXNzlGrxAwAAjBhXaW5kb3dJbnRvLmdldF93aW5kb3dpbmeUavEDAACMHFdpbmRvd0ludG8uaW5mZXJfb3V0cHV0X3R5cGWUavEDAACMEVdpbmRvd0ludG8uZXhwYW5klGrxAwAAjCJXaW5kb3dJbnRvLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGrxAwAAjCRXaW5kb3dJbnRvLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMB0ZsYXR0ZW6UavEDAACMDkZsYXR0ZW4uZXhwYW5klGrxAwAAjBVGbGF0dGVuLmdldF93aW5kb3dpbmeUavEDAACMH0ZsYXR0ZW4udG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMIUZsYXR0ZW4uZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRq8QMAAIwGQ3JlYXRllGrxAwAAjB5DcmVhdGUudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAACMGENyZWF0ZS5pbmZlcl9vdXRwdXRfdHlwZZRq8QMAAIwWQ3JlYXRlLmdldF9vdXRwdXRfdHlwZZRq8QMAAIwNQ3JlYXRlLmV4cGFuZJRq8QMAAIwOQ3JlYXRlLmFzX3JlYWSUavEDAACMFENyZWF0ZS5nZXRfd2luZG93aW5nlGrxAwAAjAdJbXB1bHNllGrxAwAAjA5JbXB1bHNlLmV4cGFuZJRq8QMAAIwVSW1wdWxzZS5nZXRfd2luZG93aW5nlGrxAwAAjBlJbXB1bHNlLmluZmVyX291dHB1dF90eXBllGrxAwAAjB9JbXB1bHNlLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGrxAwAAjCFJbXB1bHNlLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUavEDAAB1jBthcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmWUdJSMFmFwYWNoZV9iZWFtLnV0aWxzLnVybnOUKFhWGAAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKIyBUT0RPKEJFQU0tMjY4NSk6IElzc3VlIHdpdGggZGlsbCArIGxvY2FsIGNsYXNzZXMgKyBhYmMgbWV0YWNsYXNzCiMgaW1wb3J0IGFiYwppbXBvcnQgaW5zcGVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQpmcm9tIHR5cGluZyBpbXBvcnQgVHlwZQpmcm9tIHR5cGluZyBpbXBvcnQgVHlwZVZhcgpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24KZnJvbSB0eXBpbmcgaW1wb3J0IG92ZXJsb2FkCgpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgbWVzc2FnZQpmcm9tIGdvb2dsZS5wcm90b2J1ZiBpbXBvcnQgd3JhcHBlcnNfcGIyCgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCBwaWNrbGVyCmZyb20gYXBhY2hlX2JlYW0udXRpbHMgaW1wb3J0IHByb3RvX3V0aWxzCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQgaW1wb3J0IFBpcGVsaW5lQ29udGV4dAoKVCA9IFR5cGVWYXIoJ1QnKQpDb25zdHJ1Y3RvckZuID0gQ2FsbGFibGVbW1VuaW9uWydtZXNzYWdlLk1lc3NhZ2UnLCBieXRlc10sICdQaXBlbGluZUNvbnRleHQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgIEFueV0KCgpjbGFzcyBSdW5uZXJBcGlGbihvYmplY3QpOgogICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdGhhdCBwcm92aWRlcyB1cm4gcmVnaXN0cmF0aW9uIHV0aWxpdGllcy4KCiAgQSBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBjbGFzcyB3aWxsIGdldCBhIHJlZ2lzdHJhdGlvbi1iYXNlZAogIGZyb21fcnVubmVyX2FwaSBhbmQgdG9fcnVubmVyX2FwaSBtZXRob2QgdGhhdCBjb252ZXJ0IHRvIGFuZCBmcm9tCiAgYmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWMuCgogIEFkZGl0aW9uYWxseSwgcmVnaXN0ZXJfcGlja2xlX3VybiBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIGJvZHkgb2YgYSBjbGFzcwogIHRvIHJlZ2lzdGVyIHNlcmlhbGl6YXRpb24gdmlhIHBpY2tsaW5nLgogICIiIgoKICAjIFRPRE8oQkVBTS0yNjg1KTogSXNzdWUgd2l0aCBkaWxsICsgbG9jYWwgY2xhc3NlcyArIGFiYyBtZXRhY2xhc3MKICAjIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQoKICBfa25vd25fdXJucyA9IHt9ICAjIHR5cGU6IERpY3Rbc3RyLCBUdXBsZVtPcHRpb25hbFt0eXBlXSwgQ29uc3RydWN0b3JGbl1dCgogICMgQGFiYy5hYnN0cmFjdG1ldGhvZCBpcyBkaXNhYmxlZCBoZXJlIHRvIGF2b2lkIGFuIGVycm9yIHdpdGggbXlweS4gbXlweQogICMgcGVyZm9ybXMgYWJjLmFidHJhY3RtZXRob2QvcHJvcGVydHkgY2hlY2tzIGV2ZW4gaWYgYSBjbGFzcyBkb2VzCiAgIyBub3QgdXNlIGFiYy5BQkNNZXRhLCBob3dldmVyLCBmdW5jdGlvbnMgbGlrZSBgcmVnaXN0ZXJfcGlja2xlX3VybmAKICAjIGR5bmFtaWNhbGx5IHBhdGNoIGB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcmAsIHdoaWNoIG15cHkgY2Fubm90IHRyYWNrLCBzbwogICMgbXlweSBpbmNvcnJlY3RseSBpbmZlcnMgdGhhdCB0aGlzIG1ldGhvZCBoYXMgbm90IGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGEKICAjIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uLgogICMgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCB1bnVzZWRfY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IFR1cGxlW3N0ciwgQW55XQoKICAgICIiIlJldHVybnMgdGhlIHVybiBhbmQgcGF5bG9hZCBmb3IgdGhpcyBGbi4KCiAgICBUaGUgcmV0dXJuZWQgdXJuKHMpIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggYHJlZ2lzdGVyX3VybmAuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGNsYXNzbWV0aG9kCiAgQG92ZXJsb2FkCiAgZGVmIHJlZ2lzdGVyX3VybigKICAgICAgY2xzLAogICAgICB1cm4sICAjIHR5cGU6IHN0cgogICAgICBwYXJhbWV0ZXJfdHlwZSwgICMgdHlwZTogVHlwZVtUXQogICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IENhbGxhYmxlW1tDYWxsYWJsZVtbVCwgUGlwZWxpbmVDb250ZXh0XSwgQW55XV0sIENhbGxhYmxlW1tULCBQaXBlbGluZUNvbnRleHRdLCBBbnldXQogICAgcGFzcwoKICBAY2xhc3NtZXRob2QKICBAb3ZlcmxvYWQKICBkZWYgcmVnaXN0ZXJfdXJuKAogICAgICBjbHMsCiAgICAgIHVybiwgICMgdHlwZTogc3RyCiAgICAgIHBhcmFtZXRlcl90eXBlLCAgIyB0eXBlOiBOb25lCiAgKToKICAgICMgdHlwZTogKC4uLikgLT4gQ2FsbGFibGVbW0NhbGxhYmxlW1tieXRlcywgUGlwZWxpbmVDb250ZXh0XSwgQW55XV0sIENhbGxhYmxlW1tieXRlcywgUGlwZWxpbmVDb250ZXh0XSwgQW55XV0KICAgIHBhc3MKCiAgQGNsYXNzbWV0aG9kCiAgQG92ZXJsb2FkCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsCiAgICAgICAgICAgICAgICAgICB1cm4sICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IFR5cGVbVF0KICAgICAgICAgICAgICAgICAgIGZuICAjIHR5cGU6IENhbGxhYmxlW1tULCBQaXBlbGluZUNvbnRleHRdLCBBbnldCiAgICAgICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE5vbmUKICAgIHBhc3MKCiAgQGNsYXNzbWV0aG9kCiAgQG92ZXJsb2FkCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsCiAgICAgICAgICAgICAgICAgICB1cm4sICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IE5vbmUKICAgICAgICAgICAgICAgICAgIGZuICAjIHR5cGU6IENhbGxhYmxlW1tieXRlcywgUGlwZWxpbmVDb250ZXh0XSwgQW55XQogICAgICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBOb25lCiAgICBwYXNzCgogIEBjbGFzc21ldGhvZAogIGRlZiByZWdpc3Rlcl91cm4oY2xzLCB1cm4sIHBhcmFtZXRlcl90eXBlLCBmbj1Ob25lKToKICAgICIiIlJlZ2lzdGVycyBhIHVybiB3aXRoIGEgY29uc3RydWN0b3IuCgogICAgRm9yIGV4YW1wbGUsIGlmICdiZWFtOmZuOmZvbycgaGFkIHBhcmFtZXRlciB0eXBlIEZvb1BheWxvYWQsIG9uZSBjb3VsZAogICAgd3JpdGUgYFJ1bm5lckFwaUZuLnJlZ2lzdGVyX3VybignYmVhbjpmbjpmb28nLCBGb29QYXlsb2FkLCBmb29fZnJvbV9wcm90bylgCiAgICB3aGVyZSBmb29fZnJvbV9wcm90byB0b29rIGFzIGFyZ3VtZW50cyBhIEZvb1BheWxvYWQgYW5kIGEgUGlwZWxpbmVDb250ZXh0LgogICAgVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHJhdGhlciB0aGFuIHBhc3NpbmcgdGhlCiAgICBjYWxsYWJsZSBpbiBhcyB0aGUgZmluYWwgcGFyYW1ldGVyLgoKICAgIEEgY29ycmVzcG9uZGluZyB0b19ydW5uZXJfYXBpX3BhcmFtZXRlciBtZXRob2Qgd291bGQgYmUgZXhwZWN0ZWQgdGhhdAogICAgcmV0dXJucyB0aGUgdHVwbGUgKCdiZWFtOmZuOmZvbycsIEZvb1BheWxvYWQpCiAgICAiIiIKICAgIGRlZiByZWdpc3Rlcihmbik6CiAgICAgIGNscy5fa25vd25fdXJuc1t1cm5dID0gcGFyYW1ldGVyX3R5cGUsIGZuCiAgICAgIHJldHVybiBmbgoKICAgIGlmIGZuOgogICAgICAjIFVzZWQgYXMgYSBzdGF0ZW1lbnQuCiAgICAgIHJlZ2lzdGVyKGZuKQogICAgZWxzZToKICAgICAgIyBVc2VkIGFzIGEgZGVjb3JhdG9yLgogICAgICByZXR1cm4gcmVnaXN0ZXIKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHJlZ2lzdGVyX3BpY2tsZV91cm4oY2xzLCBwaWNrbGVfdXJuKToKICAgICIiIlJlZ2lzdGVycyBhbmQgaW1wbGVtZW50cyB0aGUgZ2l2ZW4gdXJuIHZpYSBwaWNrbGluZy4KICAgICIiIgogICAgaW5zcGVjdC5jdXJyZW50ZnJhbWUoKS5mX2JhY2suZl9sb2NhbHNbJ3RvX3J1bm5lcl9hcGlfcGFyYW1ldGVyJ10gPSAoCiAgICAgICAgbGFtYmRhIHNlbGYsCiAgICAgICAgY29udGV4dDoKICAgICAgICAocGlja2xlX3Vybiwgd3JhcHBlcnNfcGIyLkJ5dGVzVmFsdWUodmFsdWU9cGlja2xlci5kdW1wcyhzZWxmKSkpKQogICAgY2xzLnJlZ2lzdGVyX3VybigKICAgICAgICBwaWNrbGVfdXJuLAogICAgICAgIHdyYXBwZXJzX3BiMi5CeXRlc1ZhbHVlLAogICAgICAgIGxhbWJkYSBwcm90bywKICAgICAgICB1bnVzZWRfY29udGV4dDogcGlja2xlci5sb2Fkcyhwcm90by52YWx1ZSkpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiBiZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYwoKICAgICIiIlJldHVybnMgYW4gRnVuY3Rpb25TcGVjIGVuY29kaW5nIHRoaXMgRm4uCgogICAgUHJlZmVyIG92ZXJyaWRpbmcgc2VsZi50b19ydW5uZXJfYXBpX3BhcmFtZXRlci4KICAgICIiIgogICAgZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKICAgIHVybiwgdHlwZWRfcGFyYW0gPSBzZWxmLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGNvbnRleHQpCiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWMoCiAgICAgICAgdXJuPXVybiwKICAgICAgICBwYXlsb2FkPXR5cGVkX3BhcmFtLlNlcmlhbGl6ZVRvU3RyaW5nKCkgaWYgaXNpbnN0YW5jZSgKICAgICAgICAgICAgdHlwZWRfcGFyYW0sIG1lc3NhZ2UuTWVzc2FnZSkgZWxzZSB0eXBlZF9wYXJhbSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShjbHMsIGZuX3Byb3RvLCBjb250ZXh0KToKICAgICMgdHlwZTogKGJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjLCBQaXBlbGluZUNvbnRleHQpIC0+IEFueQoKICAgICIiIkNvbnZlcnRzIGZyb20gYW4gRnVuY3Rpb25TcGVjIHRvIGEgRm4gb2JqZWN0LgoKICAgIFByZWZlciByZWdpc3RlcmluZyBhIHVybiB3aXRoIGl0cyBwYXJhbWV0ZXIgdHlwZSBhbmQgY29uc3RydWN0b3IuCiAgICAiIiIKICAgIHBhcmFtZXRlcl90eXBlLCBjb25zdHJ1Y3RvciA9IGNscy5fa25vd25fdXJuc1tmbl9wcm90by51cm5dCiAgICByZXR1cm4gY29uc3RydWN0b3IoCiAgICAgICAgcHJvdG9fdXRpbHMucGFyc2VfQnl0ZXMoZm5fcHJvdG8ucGF5bG9hZCwgcGFyYW1ldGVyX3R5cGUpLCBjb250ZXh0KQqUfZQojCNSdW5uZXJBcGlGbi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAEtNS1SHlIwYUnVubmVyQXBpRm4ucmVnaXN0ZXJfdXJulGpWMQEAS35LlIeUjB9SdW5uZXJBcGlGbi5yZWdpc3Rlcl9waWNrbGVfdXJulGpWMQEAS5ZLooeUjBlSdW5uZXJBcGlGbi50b19ydW5uZXJfYXBplGpWMQEAS6RLsIeUjBtSdW5uZXJBcGlGbi5mcm9tX3J1bm5lcl9hcGmUalYxAQBLsku8h5SMC1J1bm5lckFwaUZulGpdMQEASzZLvIeUdX2UKIwLUnVubmVyQXBpRm6Uap0DAACMI1J1bm5lckFwaUZuLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGqdAwAAjBhSdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm6Uap0DAACMH1J1bm5lckFwaUZuLnJlZ2lzdGVyX3BpY2tsZV91cm6Uap0DAACMGVJ1bm5lckFwaUZuLnRvX3J1bm5lcl9hcGmUap0DAACMG1J1bm5lckFwaUZuLmZyb21fcnVubmVyX2FwaZRqnQMAAHWMG2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZZR0lIweYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5lChYry8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiCjpjbGFzczpgRGlzcGxheURhdGFgLCBpdHMgY2xhc3NlcywgaW50ZXJmYWNlcyBhbmQgbWV0aG9kcy4KClRoZSBjbGFzc2VzIGluIHRoaXMgbW9kdWxlIGFsbG93IHVzZXJzIGFuZCB0cmFuc2Zvcm0gZGV2ZWxvcGVycyB0byBkZWZpbmUKc3RhdGljIGRpc3BsYXkgZGF0YSB0byBiZSBkaXNwbGF5ZWQgd2hlbiBhIHBpcGVsaW5lIHJ1bnMuCjpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybS5QVHJhbnNmb3JtYCBzLAo6Y2xhc3M6YH5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUuRG9GbmAgcwphbmQgb3RoZXIgcGlwZWxpbmUgY29tcG9uZW50cyBhcmUgc3ViY2xhc3NlcyBvZiB0aGUgOmNsYXNzOmBIYXNEaXNwbGF5RGF0YWAKbWl4aW4uIFRvIGFkZCBzdGF0aWMgZGlzcGxheSBkYXRhIHRvIGEgY29tcG9uZW50LCB5b3UgY2FuIG92ZXJyaWRlIHRoZQo6bWV0aDpgSGFzRGlzcGxheURhdGEuZGlzcGxheV9kYXRhKClgIG1ldGhvZC4KCkF2YWlsYWJsZSBjbGFzc2VzOgoKKiA6Y2xhc3M6YEhhc0Rpc3BsYXlEYXRhYCAtIENvbXBvbmVudHMgdGhhdCBpbmhlcml0IGZyb20gdGhpcyBjbGFzcyBjYW4gaGF2ZQogIHN0YXRpYyBkaXNwbGF5IGRhdGEgc2hvd24gaW4gdGhlIFVJLgoqIDpjbGFzczpgRGlzcGxheURhdGFJdGVtYCAtIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBzdGF0aWMgZGlzcGxheSBkYXRhCiAgZWxlbWVudHMuCiogOmNsYXNzOmBEaXNwbGF5RGF0YWAgLSBJbnRlcm5hbCBjbGFzcyB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIGRpc3BsYXkgZGF0YQogIGFuZCBjb21tdW5pY2F0ZSBpdCB0byB0aGUgQVBJLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY2FsZW5kYXIKaW1wb3J0IGluc3BlY3QKaW1wb3J0IGpzb24KZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCmZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQpmcm9tIHR5cGluZyBpbXBvcnQgVFlQRV9DSEVDS0lORwpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdAoKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgppZiBUWVBFX0NIRUNLSU5HOgogIGZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKCl9fYWxsX18gPSBbJ0hhc0Rpc3BsYXlEYXRhJywgJ0Rpc3BsYXlEYXRhSXRlbScsICdEaXNwbGF5RGF0YSddCgoKY2xhc3MgSGFzRGlzcGxheURhdGEob2JqZWN0KToKICAiIiIgQmFzaWMgbWl4aW4gZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiBkaXNwbGF5IGRhdGEuCgogIEl0IGltcGxlbWVudHMgb25seSB0aGUgZGlzcGxheV9kYXRhIG1ldGhvZCBhbmQgYSBfbmFtZXNwYWNlIG1ldGhvZC4KICAiIiIKICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBkaWN0CgogICAgIiIiIFJldHVybnMgdGhlIGRpc3BsYXkgZGF0YSBhc3NvY2lhdGVkIHRvIGEgcGlwZWxpbmUgY29tcG9uZW50LgoKICAgIEl0IHNob3VsZCBiZSByZWltcGxlbWVudGVkIGluIHBpcGVsaW5lIGNvbXBvbmVudHMgdGhhdCB3aXNoIHRvIGhhdmUKICAgIHN0YXRpYyBkaXNwbGF5IGRhdGEuCgogICAgUmV0dXJuczoKICAgICAgRGljdFtzdHIsIEFueV06IEEgZGljdGlvbmFyeSBjb250YWluaW5nIGBga2V5OnZhbHVlYGAgcGFpcnMuCiAgICAgIFRoZSB2YWx1ZSBtaWdodCBiZSBhbiBpbnRlZ2VyLCBmbG9hdCBvciBzdHJpbmcgdmFsdWU7IGEKICAgICAgOmNsYXNzOmBEaXNwbGF5RGF0YUl0ZW1gIGZvciB2YWx1ZXMgdGhhdCBoYXZlIG1vcmUgZGF0YQogICAgICAoZS5nLiBzaG9ydCB2YWx1ZSwgbGFiZWwsIHVybCk7IG9yIGEgOmNsYXNzOmBIYXNEaXNwbGF5RGF0YWAgaW5zdGFuY2UKICAgICAgdGhhdCBoYXMgbW9yZSBkaXNwbGF5IGRhdGEgdGhhdCBzaG91bGQgYmUgcGlja2VkIHVwLiBGb3IgZXhhbXBsZTo6CgogICAgICAgIHsKICAgICAgICAgICdrZXkxJzogJ3N0cmluZ192YWx1ZScsCiAgICAgICAgICAna2V5Mic6IDEyMzQsCiAgICAgICAgICAna2V5Myc6IDMuMTQxNTkyNjUsCiAgICAgICAgICAna2V5NCc6IERpc3BsYXlEYXRhSXRlbSgnYXBhY2hlLm9yZycsIHVybD0naHR0cDovL2FwYWNoZS5vcmcnKSwKICAgICAgICAgICdrZXk1Jzogc3ViQ29tcG9uZW50CiAgICAgICAgfQogICAgIiIiCiAgICByZXR1cm4ge30KCiAgZGVmIF9uYW1lc3BhY2Uoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IHN0cgogICAgcmV0dXJuICd7fS57fScuZm9ybWF0KHNlbGYuX19tb2R1bGVfXywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCgoKY2xhc3MgRGlzcGxheURhdGEob2JqZWN0KToKICAiIiIgU3RhdGljIGRpc3BsYXkgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwaXBlbGluZSBjb21wb25lbnQuCiAgIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBuYW1lc3BhY2UsICAjIHR5cGU6IHN0cgogICAgICBkaXNwbGF5X2RhdGFfZGljdCAgIyB0eXBlOiBkaWN0CiAgKToKICAgICMgdHlwZTogKC4uLikgLT4gTm9uZQogICAgc2VsZi5uYW1lc3BhY2UgPSBuYW1lc3BhY2UKICAgIHNlbGYuaXRlbXMgPSBbXSAgIyB0eXBlOiBMaXN0W0Rpc3BsYXlEYXRhSXRlbV0KICAgIHNlbGYuX3BvcHVsYXRlX2l0ZW1zKGRpc3BsYXlfZGF0YV9kaWN0KQoKICBkZWYgX3BvcHVsYXRlX2l0ZW1zKHNlbGYsIGRpc3BsYXlfZGF0YV9kaWN0KToKICAgICIiIiBQb3B1bGF0ZXMgdGhlIGxpc3Qgb2YgZGlzcGxheSBkYXRhIGl0ZW1zLgogICAgIiIiCiAgICBmb3Iga2V5LCBlbGVtZW50IGluIGRpc3BsYXlfZGF0YV9kaWN0Lml0ZW1zKCk6CiAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgSGFzRGlzcGxheURhdGEpOgogICAgICAgIHN1YmNvbXBvbmVudF9kaXNwbGF5X2RhdGEgPSBEaXNwbGF5RGF0YSgKICAgICAgICAgICAgZWxlbWVudC5fbmFtZXNwYWNlKCksIGVsZW1lbnQuZGlzcGxheV9kYXRhKCkpCiAgICAgICAgc2VsZi5pdGVtcyArPSBzdWJjb21wb25lbnRfZGlzcGxheV9kYXRhLml0ZW1zCiAgICAgICAgY29udGludWUKCiAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgRGlzcGxheURhdGFJdGVtKToKICAgICAgICBpZiBlbGVtZW50LnNob3VsZF9kcm9wKCk6CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGVsZW1lbnQua2V5ID0ga2V5CiAgICAgICAgZWxlbWVudC5uYW1lc3BhY2UgPSBzZWxmLm5hbWVzcGFjZQogICAgICAgIHNlbGYuaXRlbXMuYXBwZW5kKGVsZW1lbnQpCiAgICAgICAgY29udGludWUKCiAgICAgICMgSWYgaXQncyBub3QgYSBIYXNEaXNwbGF5RGF0YSBlbGVtZW50LAogICAgICAjIG5vciBhIGRpY3Rpb25hcnksIHRoZW4gaXQncyBhIHNpbXBsZSB2YWx1ZQogICAgICBzZWxmLml0ZW1zLmFwcGVuZCgKICAgICAgICAgIERpc3BsYXlEYXRhSXRlbShlbGVtZW50LCBuYW1lc3BhY2U9c2VsZi5uYW1lc3BhY2UsIGtleT1rZXkpKQoKICBAY2xhc3NtZXRob2QKICBkZWYgY3JlYXRlX2Zyb21fb3B0aW9ucyhjbHMsIHBpcGVsaW5lX29wdGlvbnMpOgogICAgIiIiIENyZWF0ZXMgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhYCBmcm9tIGEKICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucy5QaXBlbGluZU9wdGlvbnNgIGluc3RhbmNlLgoKICAgIFdoZW4gY3JlYXRpbmcgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhYCwgdGhpcwogICAgbWV0aG9kIHdpbGwgY29udmVydCB0aGUgdmFsdWUgb2YgYW55IGl0ZW0gb2YgYSBub24tc3VwcG9ydGVkIHR5cGUgdG8gaXRzCiAgICBzdHJpbmcgcmVwcmVzZW50YXRpb24uCiAgICBUaGUgbm9ybWFsIDptZXRoOmAuY3JlYXRlX2Zyb20oKWAgbWV0aG9kIHJlamVjdHMgdGhvc2UgaXRlbXMuCgogICAgUmV0dXJuczoKICAgICAgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YToKICAgICAgICBBIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YWAgaW5zdGFuY2Ugd2l0aAogICAgICAgIHBvcHVsYXRlZCBpdGVtcy4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IElmIHRoZSAqKmhhc19kaXNwbGF5X2RhdGEqKiBhcmd1bWVudCBpcwogICAgICAgIG5vdCBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YEhhc0Rpc3BsYXlEYXRhYC4KICAgICIiIgogICAgZnJvbSBhcGFjaGVfYmVhbS5vcHRpb25zLnBpcGVsaW5lX29wdGlvbnMgaW1wb3J0IFBpcGVsaW5lT3B0aW9ucwogICAgaWYgbm90IGlzaW5zdGFuY2UocGlwZWxpbmVfb3B0aW9ucywgUGlwZWxpbmVPcHRpb25zKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdFbGVtZW50IG9mIGNsYXNzIHt9Lnt9IGRvZXMgbm90IHN1YmNsYXNzIFBpcGVsaW5lT3B0aW9ucycuZm9ybWF0KAogICAgICAgICAgICAgIHBpcGVsaW5lX29wdGlvbnMuX19tb2R1bGVfXywgcGlwZWxpbmVfb3B0aW9ucy5fX2NsYXNzX18uX19uYW1lX18pKQoKICAgIGl0ZW1zID0gewogICAgICAgIGs6ICh2IGlmIERpc3BsYXlEYXRhSXRlbS5fZ2V0X3ZhbHVlX3R5cGUodikgaXMgbm90IE5vbmUgZWxzZSBzdHIodikpCiAgICAgICAgZm9yIGssCiAgICAgICAgdiBpbiBwaXBlbGluZV9vcHRpb25zLmRpc3BsYXlfZGF0YSgpLml0ZW1zKCkKICAgIH0KICAgIHJldHVybiBjbHMocGlwZWxpbmVfb3B0aW9ucy5fbmFtZXNwYWNlKCksIGl0ZW1zKQoKICBAY2xhc3NtZXRob2QKICBkZWYgY3JlYXRlX2Zyb20oY2xzLCBoYXNfZGlzcGxheV9kYXRhKToKICAgICIiIiBDcmVhdGVzIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheS5EaXNwbGF5RGF0YWAgZnJvbSBhCiAgICA6Y2xhc3M6YEhhc0Rpc3BsYXlEYXRhYCBpbnN0YW5jZS4KCiAgICBSZXR1cm5zOgogICAgICB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhOgogICAgICAgIEEgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5LkRpc3BsYXlEYXRhYCBpbnN0YW5jZSB3aXRoCiAgICAgICAgcG9wdWxhdGVkIGl0ZW1zLgoKICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogSWYgdGhlICoqaGFzX2Rpc3BsYXlfZGF0YSoqIGFyZ3VtZW50IGlzCiAgICAgICAgbm90IGFuIGluc3RhbmNlIG9mIDpjbGFzczpgSGFzRGlzcGxheURhdGFgLgogICAgIiIiCiAgICBpZiBub3QgaXNpbnN0YW5jZShoYXNfZGlzcGxheV9kYXRhLCBIYXNEaXNwbGF5RGF0YSk6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnRWxlbWVudCBvZiBjbGFzcyB7fS57fSBkb2VzIG5vdCBzdWJjbGFzcyBIYXNEaXNwbGF5RGF0YScuZm9ybWF0KAogICAgICAgICAgICAgIGhhc19kaXNwbGF5X2RhdGEuX19tb2R1bGVfXywgaGFzX2Rpc3BsYXlfZGF0YS5fX2NsYXNzX18uX19uYW1lX18pKQogICAgcmV0dXJuIGNscyhoYXNfZGlzcGxheV9kYXRhLl9uYW1lc3BhY2UoKSwgaGFzX2Rpc3BsYXlfZGF0YS5kaXNwbGF5X2RhdGEoKSkKCgpjbGFzcyBEaXNwbGF5RGF0YUl0ZW0ob2JqZWN0KToKICAiIiIgQSBEaXNwbGF5RGF0YUl0ZW0gcmVwcmVzZW50cyBhIHVuaXQgb2Ygc3RhdGljIGRpc3BsYXkgZGF0YS4KCiAgRWFjaCBpdGVtIGlzIGlkZW50aWZpZWQgYnkgYSBrZXkgYW5kIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGNvbXBvbmVudCB0aGUKICBkaXNwbGF5IGl0ZW0gYmVsb25ncyB0by4KICAiIiIKICB0eXBlRGljdCA9IHsKICAgICAgc3RyOiAnU1RSSU5HJywKICAgICAgdW5pY29kZTogJ1NUUklORycsCiAgICAgIGludDogJ0lOVEVHRVInLAogICAgICBmbG9hdDogJ0ZMT0FUJywKICAgICAgYm9vbDogJ0JPT0xFQU4nLAogICAgICB0aW1lZGVsdGE6ICdEVVJBVElPTicsCiAgICAgIGRhdGV0aW1lOiAnVElNRVNUQU1QJwogIH0KCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICB2YWx1ZSwKICAgICAgdXJsPU5vbmUsCiAgICAgIGxhYmVsPU5vbmUsCiAgICAgIG5hbWVzcGFjZT1Ob25lLAogICAgICBrZXk9Tm9uZSwKICAgICAgc2hvcnRWYWx1ZT1Ob25lKToKICAgIHNlbGYubmFtZXNwYWNlID0gbmFtZXNwYWNlCiAgICBzZWxmLmtleSA9IGtleQogICAgc2VsZi50eXBlID0gc2VsZi5fZ2V0X3ZhbHVlX3R5cGUodmFsdWUpCiAgICBzZWxmLnNob3J0VmFsdWUgPSAoCiAgICAgICAgc2hvcnRWYWx1ZSBpZiBzaG9ydFZhbHVlIGlzIG5vdCBOb25lIGVsc2Ugc2VsZi5fZ2V0X3Nob3J0X3ZhbHVlKAogICAgICAgICAgICB2YWx1ZSwgc2VsZi50eXBlKSkKICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgc2VsZi51cmwgPSB1cmwKICAgIHNlbGYubGFiZWwgPSBsYWJlbAogICAgc2VsZi5fZHJvcF9pZl9ub25lID0gRmFsc2UKICAgIHNlbGYuX2Ryb3BfaWZfZGVmYXVsdCA9IEZhbHNlCgogIGRlZiBkcm9wX2lmX25vbmUoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IERpc3BsYXlEYXRhSXRlbQoKICAgICIiIiBUaGUgaXRlbSBzaG91bGQgYmUgZHJvcHBlZCBpZiBpdHMgdmFsdWUgaXMgTm9uZS4KCiAgICBSZXR1cm5zOgogICAgICBSZXR1cm5zIHNlbGYuCiAgICAiIiIKICAgIHNlbGYuX2Ryb3BfaWZfbm9uZSA9IFRydWUKICAgIHJldHVybiBzZWxmCgogIGRlZiBkcm9wX2lmX2RlZmF1bHQoc2VsZiwgZGVmYXVsdCk6CiAgICAjIHR5cGU6ICguLi4pIC0+IERpc3BsYXlEYXRhSXRlbQoKICAgICIiIiBUaGUgaXRlbSBzaG91bGQgYmUgZHJvcHBlZCBpZiBpdHMgdmFsdWUgaXMgZXF1YWwgdG8gaXRzIGRlZmF1bHQuCgogICAgUmV0dXJuczoKICAgICAgUmV0dXJucyBzZWxmLgogICAgIiIiCiAgICBzZWxmLl9kZWZhdWx0ID0gZGVmYXVsdAogICAgc2VsZi5fZHJvcF9pZl9kZWZhdWx0ID0gVHJ1ZQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIHNob3VsZF9kcm9wKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBib29sCgogICAgIiIiIFJldHVybiBUcnVlIGlmIHRoZSBpdGVtIHNob3VsZCBiZSBkcm9wcGVkLCBvciBGYWxzZSBpZiBpdCBzaG91bGQgbm90CiAgICBiZSBkcm9wcGVkLiBUaGlzIGRlcGVuZHMgb24gdGhlIGRyb3BfaWZfbm9uZSwgYW5kIGRyb3BfaWZfZGVmYXVsdCBjYWxscy4KCiAgICBSZXR1cm5zOgogICAgICBUcnVlIG9yIEZhbHNlOyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgaXRlbSBzaG91bGQgYmUgZHJvcHBlZCBvciBrZXB0LgogICAgIiIiCiAgICBpZiBzZWxmLl9kcm9wX2lmX25vbmUgYW5kIHNlbGYudmFsdWUgaXMgTm9uZToKICAgICAgcmV0dXJuIFRydWUKICAgIGlmIHNlbGYuX2Ryb3BfaWZfZGVmYXVsdCBhbmQgc2VsZi52YWx1ZSA9PSBzZWxmLl9kZWZhdWx0OgogICAgICByZXR1cm4gVHJ1ZQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBpc192YWxpZChzZWxmKToKICAgICMgdHlwZTogKCkgLT4gTm9uZQoKICAgICIiIiBDaGVja3MgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBmaWVsZHMgb2YgdGhlIDpjbGFzczpgRGlzcGxheURhdGFJdGVtYAogICAgYXJlIGZpbGxlZCBpbi4gSXQgY2hlY2tzIHRoYXQgbmVpdGhlciBrZXksIG5hbWVzcGFjZSwgdmFsdWUgb3IgdHlwZSBhcmUKICAgIDpkYXRhOmBOb25lYC4KCiAgICBSYWlzZXM6CiAgICAgIFZhbHVlRXJyb3I6IElmIHRoZSBpdGVtIGRvZXMgbm90IGhhdmUgYSBrZXksIG5hbWVzcGFjZSwKICAgICAgICB2YWx1ZSBvciB0eXBlLgogICAgIiIiCiAgICBpZiBzZWxmLmtleSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0ludmFsaWQgRGlzcGxheURhdGFJdGVtICVzLiBLZXkgbXVzdCBub3QgYmUgTm9uZS4nICUgc2VsZikKICAgIGlmIHNlbGYubmFtZXNwYWNlIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnSW52YWxpZCBEaXNwbGF5RGF0YUl0ZW0gJXMuIE5hbWVzcGFjZSBtdXN0IG5vdCBiZSBOb25lJyAlIHNlbGYpCiAgICBpZiBzZWxmLnZhbHVlIGlzIE5vbmU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnSW52YWxpZCBEaXNwbGF5RGF0YUl0ZW0gJXMuIFZhbHVlIG11c3Qgbm90IGJlIE5vbmUnICUgc2VsZikKICAgIGlmIHNlbGYudHlwZSBpcyBOb25lOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ0ludmFsaWQgRGlzcGxheURhdGFJdGVtLiBWYWx1ZSB7fSBpcyBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlLicuZm9ybWF0KAogICAgICAgICAgICAgIHNlbGYudmFsdWUpKQoKICBkZWYgX2dldF9kaWN0KHNlbGYpOgogICAgcmVzID0gewogICAgICAgICdrZXknOiBzZWxmLmtleSwKICAgICAgICAnbmFtZXNwYWNlJzogc2VsZi5uYW1lc3BhY2UsCiAgICAgICAgJ3R5cGUnOiBzZWxmLnR5cGUgaWYgc2VsZi50eXBlICE9ICdDTEFTUycgZWxzZSAnU1RSSU5HJwogICAgfQogICAgIyBUT0RPOiBQeXRob24gQ2xhc3MgdHlwZXMgc2hvdWxkIG5vdCBiZSBzcGVjaWFsLWNhc2VkIG9uY2UKICAgICMgdGhlIEZuIEFQSSBpcyBpbi4KICAgIGlmIHNlbGYudXJsIGlzIG5vdCBOb25lOgogICAgICByZXNbJ3VybCddID0gc2VsZi51cmwKICAgIGlmIHNlbGYuc2hvcnRWYWx1ZSBpcyBub3QgTm9uZToKICAgICAgcmVzWydzaG9ydFZhbHVlJ10gPSBzZWxmLnNob3J0VmFsdWUKICAgIGlmIHNlbGYubGFiZWwgaXMgbm90IE5vbmU6CiAgICAgIHJlc1snbGFiZWwnXSA9IHNlbGYubGFiZWwKICAgIHJlc1sndmFsdWUnXSA9IHNlbGYuX2Zvcm1hdF92YWx1ZShzZWxmLnZhbHVlLCBzZWxmLnR5cGUpCiAgICByZXR1cm4gcmVzCgogIGRlZiBnZXRfZGljdChzZWxmKToKICAgICMgdHlwZTogKCkgLT4gZGljdAoKICAgICIiIiBSZXR1cm5zIHRoZSBpbnRlcm5hbC1BUEkgZGljdGlvbmFyeSByZXByZXNlbnRpbmcgdGhlCiAgICA6Y2xhc3M6YERpc3BsYXlEYXRhSXRlbWAuCgogICAgUmV0dXJuczoKICAgICAgRGljdFtzdHIsIEFueV06IEEgZGljdGlvbmFyeS4gVGhlIGludGVybmFsLUFQSSBkaWN0aW9uYXJ5IHJlcHJlc2VudGluZwogICAgICB0aGUgOmNsYXNzOmBEaXNwbGF5RGF0YUl0ZW1gLgoKICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogaWYgdGhlIGl0ZW0gaXMgbm90IHZhbGlkLgogICAgIiIiCiAgICBzZWxmLmlzX3ZhbGlkKCkKICAgIHJldHVybiBzZWxmLl9nZXRfZGljdCgpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnRGlzcGxheURhdGFJdGVtKHt9KScuZm9ybWF0KGpzb24uZHVtcHMoc2VsZi5fZ2V0X2RpY3QoKSkpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgogICAgICByZXR1cm4gc2VsZi5fZ2V0X2RpY3QoKSA9PSBvdGhlci5fZ2V0X2RpY3QoKQogICAgcmV0dXJuIEZhbHNlCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0dXBsZShzb3J0ZWQoc2VsZi5fZ2V0X2RpY3QoKS5pdGVtcygpKSkpCgogIEBjbGFzc21ldGhvZAogIGRlZiBfZm9ybWF0X3ZhbHVlKGNscywgdmFsdWUsIHR5cGVfKToKICAgICIiIiBSZXR1cm5zIHRoZSBBUEkgcmVwcmVzZW50YXRpb24gb2YgYSB2YWx1ZSBnaXZlbiBpdHMgdHlwZS4KCiAgICBBcmdzOgogICAgICB2YWx1ZTogVGhlIHZhbHVlIG9mIHRoZSBpdGVtIHRoYXQgbmVlZHMgdG8gYmUgc2hvcnRlbmVkLgogICAgICB0eXBlXyhzdHJpbmcpOiBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuCgogICAgUmV0dXJuczoKICAgICAgQSBmb3JtYXR0ZWQgdmFsdWUgaW4gdGhlIGZvcm0gb2YgYSBmbG9hdCwgaW50LCBvciBzdHJpbmcuCiAgICAiIiIKICAgIHJlcyA9IHZhbHVlCiAgICBpZiB0eXBlXyA9PSAnQ0xBU1MnOgogICAgICByZXMgPSAne30ue30nLmZvcm1hdCh2YWx1ZS5fX21vZHVsZV9fLCB2YWx1ZS5fX25hbWVfXykKICAgIGVsaWYgdHlwZV8gPT0gJ0RVUkFUSU9OJzoKICAgICAgcmVzID0gdmFsdWUudG90YWxfc2Vjb25kcygpICogMTAwMAogICAgZWxpZiB0eXBlXyA9PSAnVElNRVNUQU1QJzoKICAgICAgcmVzID0gY2FsZW5kYXIudGltZWdtKAogICAgICAgICAgdmFsdWUudGltZXR1cGxlKCkpICogMTAwMCArIHZhbHVlLm1pY3Jvc2Vjb25kIC8vIDEwMDAKICAgIHJldHVybiByZXMKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9nZXRfc2hvcnRfdmFsdWUoY2xzLCB2YWx1ZSwgdHlwZV8pOgogICAgIiIiIENhbGN1bGF0ZXMgdGhlIHNob3J0IHZhbHVlIGZvciBhbiBpdGVtLgoKICAgIEFyZ3M6CiAgICAgIHZhbHVlOiBUaGUgdmFsdWUgb2YgdGhlIGl0ZW0gdGhhdCBuZWVkcyB0byBiZSBzaG9ydGVuZWQuCiAgICAgIHR5cGVfKHN0cmluZyk6IFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS4KCiAgICBSZXR1cm5zOgogICAgICBUaGUgdW5xdWFsaWZpZWQgbmFtZSBvZiBhIGNsYXNzIGlmIHR5cGVfIGlzICdDTEFTUycuIE5vbmUgb3RoZXJ3aXNlLgogICAgIiIiCiAgICBpZiB0eXBlXyA9PSAnQ0xBU1MnOgogICAgICByZXR1cm4gdmFsdWUuX19uYW1lX18KICAgIHJldHVybiBOb25lCgogIEBjbGFzc21ldGhvZAogIGRlZiBfZ2V0X3ZhbHVlX3R5cGUoY2xzLCB2YWx1ZSk6CiAgICAiIiIgSW5mZXJzIHRoZSB0eXBlIG9mIGEgZ2l2ZW4gdmFsdWUuCgogICAgQXJnczoKICAgICAgdmFsdWU6IFRoZSB2YWx1ZSB3aG9zZSB0eXBlIG5lZWRzIHRvIGJlIGluZmVycmVkLiBGb3IgJ0RVUkFUSU9OJyBhbmQKICAgICAgICAnVElNRVNUQU1QJywgdGhlIGNvcnJlc3BvbmRpbmcgUHl0aG9uIHR5cGUgaXMgZGF0ZXRpbWUudGltZWRlbHRhIGFuZAogICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lIHJlc3BlY3RpdmVseS4gRm9yIFB5dGhvbiBjbGFzc2VzLCB0aGUgQVBJIHR5cGUgaXMKICAgICAgICBqdXN0ICdTVFJJTkcnIGF0IHRoZSBtb21lbnQuCgogICAgUmV0dXJuczoKICAgICAgT25lIG9mICdTVFJJTkcnLCAnSU5URUdFUicsICdGTE9BVCcsICdDTEFTUycsICdEVVJBVElPTicsIG9yCiAgICAgICdUSU1FU1RBTVAnLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIHZhbHVlLgogICAgIiIiCiAgICAjVE9ETzogRml4IEFyZ3M6IGRvY3VtZW50YXRpb24gb25jZSB0aGUgUHl0aG9uIGNsYXNzZXMgaGFuZGxpbmcgaGFzIGNoYW5nZWQKICAgIHR5cGVfID0gY2xzLnR5cGVEaWN0LmdldCh0eXBlKHZhbHVlKSkKICAgIGlmIHR5cGVfIGlzIE5vbmU6CiAgICAgIHR5cGVfID0gJ0NMQVNTJyBpZiBpbnNwZWN0LmlzY2xhc3ModmFsdWUpIGVsc2UgTm9uZQogICAgaWYgdHlwZV8gaXMgTm9uZSBhbmQgdmFsdWUgaXMgTm9uZToKICAgICAgdHlwZV8gPSAnU1RSSU5HJwogICAgcmV0dXJuIHR5cGVfCpR9lCiMG0hhc0Rpc3BsYXlEYXRhLmRpc3BsYXlfZGF0YZRqVjEBAEtBS1iHlIwZSGFzRGlzcGxheURhdGEuX25hbWVzcGFjZZRqVjEBAEtaS1yHlIwOSGFzRGlzcGxheURhdGGUal0xAQBLPEtch5SMFERpc3BsYXlEYXRhLl9faW5pdF9flGpWMQEAS2JLaoeUjBtEaXNwbGF5RGF0YS5fcG9wdWxhdGVfaXRlbXOUalYxAQBLbEuBh5SMH0Rpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tX29wdGlvbnOUalYxAQBLg0uhh5SMF0Rpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tlGpWMQEAS6NLtYeUjAtEaXNwbGF5RGF0YZRqXTEBAEtfS7WHlIwYRGlzcGxheURhdGFJdGVtLl9faW5pdF9flGpWMQEAS8hL2oeUjBxEaXNwbGF5RGF0YUl0ZW0uZHJvcF9pZl9ub25llGpWMQEAS9xL5YeUjB9EaXNwbGF5RGF0YUl0ZW0uZHJvcF9pZl9kZWZhdWx0lGpWMQEAS+dL8YeUjBtEaXNwbGF5RGF0YUl0ZW0uc2hvdWxkX2Ryb3CUalYxAQBL800AAYeUjBhEaXNwbGF5RGF0YUl0ZW0uaXNfdmFsaWSUalYxAQBNAgFNGQGHlIwZRGlzcGxheURhdGFJdGVtLl9nZXRfZGljdJRqVjEBAE0bAU0qAYeUjBhEaXNwbGF5RGF0YUl0ZW0uZ2V0X2RpY3SUalYxAQBNLAFNOgGHlIwYRGlzcGxheURhdGFJdGVtLl9fcmVwcl9flGpWMQEATTwBTT0Bh5SMFkRpc3BsYXlEYXRhSXRlbS5fX2VxX1+UalYxAQBNPwFNQgGHlIwWRGlzcGxheURhdGFJdGVtLl9fbmVfX5RqVjEBAE1EAU1GAYeUjBhEaXNwbGF5RGF0YUl0ZW0uX19oYXNoX1+UalYxAQBNSAFNSQGHlIwdRGlzcGxheURhdGFJdGVtLl9mb3JtYXRfdmFsdWWUalYxAQBNSwFNXgGHlIwgRGlzcGxheURhdGFJdGVtLl9nZXRfc2hvcnRfdmFsdWWUalYxAQBNYAFNbQGHlIwfRGlzcGxheURhdGFJdGVtLl9nZXRfdmFsdWVfdHlwZZRqVjEBAE1vAU2DAYeUjA9EaXNwbGF5RGF0YUl0ZW2Ual0xAQBLuE2DAYeUdX2UKIwOSGFzRGlzcGxheURhdGGUagQEAACMG0hhc0Rpc3BsYXlEYXRhLmRpc3BsYXlfZGF0YZRqBAQAAIwLRGlzcGxheURhdGGUagQEAACMH0Rpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tX29wdGlvbnOUagQEAACMF0Rpc3BsYXlEYXRhLmNyZWF0ZV9mcm9tlGoEBAAAjA9EaXNwbGF5RGF0YUl0ZW2UagQEAACMHERpc3BsYXlEYXRhSXRlbS5kcm9wX2lmX25vbmWUagQEAACMH0Rpc3BsYXlEYXRhSXRlbS5kcm9wX2lmX2RlZmF1bHSUagQEAACMG0Rpc3BsYXlEYXRhSXRlbS5zaG91bGRfZHJvcJRqBAQAAIwYRGlzcGxheURhdGFJdGVtLmlzX3ZhbGlklGoEBAAAjBhEaXNwbGF5RGF0YUl0ZW0uZ2V0X2RpY3SUagQEAAB1jB5hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXmUdJSMI2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzlChYD0cAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRW52aXJvbm1lbnRzIGNvbmNlcHRzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5LiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBqc29uCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKZnJvbSB0eXBpbmcgaW1wb3J0IFRZUEVfQ0hFQ0tJTkcKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKZnJvbSB0eXBpbmcgaW1wb3J0IEl0ZXJhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbApmcm9tIHR5cGluZyBpbXBvcnQgVHVwbGUKZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGUKZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGVWYXIKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCmZyb20gdHlwaW5nIGltcG9ydCBvdmVybG9hZAoKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IG1lc3NhZ2UKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IGNvZGVycwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBjb21tb25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5IGltcG9ydCBweXRob25fdXJucwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgZW5kcG9pbnRzX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCBwcm90b191dGlscwoKaWYgVFlQRV9DSEVDS0lORzoKICBmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCiAgZnJvbSBhcGFjaGVfYmVhbS5ydW5uZXJzLnBpcGVsaW5lX2NvbnRleHQgaW1wb3J0IFBpcGVsaW5lQ29udGV4dAoKX19hbGxfXyA9IFsKICAgICdFbnZpcm9ubWVudCcsCiAgICAnRG9ja2VyRW52aXJvbm1lbnQnLAogICAgJ1Byb2Nlc3NFbnZpcm9ubWVudCcsCiAgICAnRXh0ZXJuYWxFbnZpcm9ubWVudCcsCiAgICAnRW1iZWRkZWRQeXRob25FbnZpcm9ubWVudCcsCiAgICAnRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQnLAogICAgJ1N1YnByb2Nlc3NTREtFbnZpcm9ubWVudCcsCiAgICAnUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXInCl0KClQgPSBUeXBlVmFyKCdUJykKRW52aXJvbm1lbnRUID0gVHlwZVZhcignRW52aXJvbm1lbnRUJywgYm91bmQ9J0Vudmlyb25tZW50JykKQ29uc3RydWN0b3JGbiA9IENhbGxhYmxlW1tPcHRpb25hbFtBbnldLCAnUGlwZWxpbmVDb250ZXh0J10sIEFueV0KCgpkZWYgbG9va3NfbGlrZV9qc29uKHMpOgogIGltcG9ydCByZQogIHJldHVybiByZS5tYXRjaChyJ1xzKlx7LipcfVxzKiQnLCBzKQoKCmNsYXNzIEVudmlyb25tZW50KG9iamVjdCk6CiAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgZW52aXJvbm1lbnRzLgoKICBSZXByZXNlbnRzIGEgdHlwZSBhbmQgY29uZmlndXJhdGlvbiBvZiBlbnZpcm9ubWVudC4KICBFYWNoIHR5cGUgb2YgRW52aXJvbm1lbnQgc2hvdWxkIGhhdmUgYSB1bmlxdWUgdXJuLgoKICBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiAgIiIiCgogIF9rbm93bl91cm5zID0ge30gICMgdHlwZTogRGljdFtzdHIsIFR1cGxlW09wdGlvbmFsW3R5cGVdLCBDb25zdHJ1Y3RvckZuXV0KICBfdXJuX3RvX2Vudl9jbHMgPSB7fSAgIyB0eXBlOiBEaWN0W3N0ciwgdHlwZV0KCiAgZGVmIF9faW5pdF9fKHNlbGYsIGNhcGFiaWxpdGllcyk6CiAgICBzZWxmLl9jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiBUdXBsZVtzdHIsIE9wdGlvbmFsW1VuaW9uW21lc3NhZ2UuTWVzc2FnZSwgYnl0ZXMsIHN0cl1dXQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY2FwYWJpbGl0aWVzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBJdGVyYWJsZVtzdHJdCiAgICByZXR1cm4gc2VsZi5fY2FwYWJpbGl0aWVzCgogIEBjbGFzc21ldGhvZAogIEBvdmVybG9hZAogIGRlZiByZWdpc3Rlcl91cm4oCiAgICAgIGNscywKICAgICAgdXJuLCAgIyB0eXBlOiBzdHIKICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IFR5cGVbVF0KICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBDYWxsYWJsZVtbVW5pb25bdHlwZSwgQ2FsbGFibGVbW1QsIEl0ZXJhYmxlW3N0cl0sIFBpcGVsaW5lQ29udGV4dF0sIEFueV1dXSwgQ2FsbGFibGVbW1QsIEl0ZXJhYmxlW3N0cl0sIFBpcGVsaW5lQ29udGV4dF0sIEFueV1dCiAgICBwYXNzCgogIEBjbGFzc21ldGhvZAogIEBvdmVybG9hZAogIGRlZiByZWdpc3Rlcl91cm4oCiAgICAgIGNscywKICAgICAgdXJuLCAgIyB0eXBlOiBzdHIKICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IE5vbmUKICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBDYWxsYWJsZVtbVW5pb25bdHlwZSwgQ2FsbGFibGVbW2J5dGVzLCBJdGVyYWJsZVtzdHJdLCBQaXBlbGluZUNvbnRleHRdLCBBbnldXV0sIENhbGxhYmxlW1tieXRlcywgSXRlcmFibGVbc3RyXSwgUGlwZWxpbmVDb250ZXh0XSwgQW55XV0KICAgIHBhc3MKCiAgQGNsYXNzbWV0aG9kCiAgQG92ZXJsb2FkCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsCiAgICAgICAgICAgICAgICAgICB1cm4sICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IFR5cGVbVF0KICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICAjIHR5cGU6IENhbGxhYmxlW1tULCBJdGVyYWJsZVtzdHJdLCBQaXBlbGluZUNvbnRleHRdLCBBbnldCiAgICAgICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE5vbmUKICAgIHBhc3MKCiAgQGNsYXNzbWV0aG9kCiAgQG92ZXJsb2FkCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsCiAgICAgICAgICAgICAgICAgICB1cm4sICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IE5vbmUKICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICAjIHR5cGU6IENhbGxhYmxlW1tieXRlcywgSXRlcmFibGVbc3RyXSwgUGlwZWxpbmVDb250ZXh0XSwgQW55XQogICAgICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBOb25lCiAgICBwYXNzCgogIEBjbGFzc21ldGhvZAogIGRlZiByZWdpc3Rlcl91cm4oY2xzLCB1cm4sIHBhcmFtZXRlcl90eXBlLCBjb25zdHJ1Y3Rvcj1Ob25lKToKICAgIGRlZiByZWdpc3Rlcihjb25zdHJ1Y3Rvcik6CiAgICAgIGlmIGlzaW5zdGFuY2UoY29uc3RydWN0b3IsIHR5cGUpOgogICAgICAgIGNvbnN0cnVjdG9yLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIgPSByZWdpc3RlcigKICAgICAgICAgICAgY29uc3RydWN0b3IuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcikKICAgICAgICAjIHJlZ2lzdGVyIGVudmlyb25tZW50IHVybiB0byBlbnZpcm9ubWVudCBjbGFzcwogICAgICAgIGNscy5fdXJuX3RvX2Vudl9jbHNbdXJuXSA9IGNvbnN0cnVjdG9yCiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yCgogICAgICBlbHNlOgogICAgICAgIGNscy5fa25vd25fdXJuc1t1cm5dID0gcGFyYW1ldGVyX3R5cGUsIGNvbnN0cnVjdG9yCiAgICAgICAgcmV0dXJuIHN0YXRpY21ldGhvZChjb25zdHJ1Y3RvcikKCiAgICBpZiBjb25zdHJ1Y3RvcjoKICAgICAgIyBVc2VkIGFzIGEgc3RhdGVtZW50LgogICAgICByZWdpc3Rlcihjb25zdHJ1Y3RvcikKICAgIGVsc2U6CiAgICAgICMgVXNlZCBhcyBhIGRlY29yYXRvci4KICAgICAgcmV0dXJuIHJlZ2lzdGVyCgogIEBjbGFzc21ldGhvZAogIGRlZiBnZXRfZW52X2Nsc19mcm9tX3VybihjbHMsIHVybik6CiAgICByZXR1cm4gY2xzLl91cm5fdG9fZW52X2Nsc1t1cm5dCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiBiZWFtX3J1bm5lcl9hcGlfcGIyLkVudmlyb25tZW50CiAgICB1cm4sIHR5cGVkX3BhcmFtID0gc2VsZi50b19ydW5uZXJfYXBpX3BhcmFtZXRlcihjb250ZXh0KQogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuRW52aXJvbm1lbnQoCiAgICAgICAgdXJuPXVybiwKICAgICAgICBwYXlsb2FkPXR5cGVkX3BhcmFtLlNlcmlhbGl6ZVRvU3RyaW5nKCkgaWYgaXNpbnN0YW5jZSgKICAgICAgICAgICAgdHlwZWRfcGFyYW0sIG1lc3NhZ2UuTWVzc2FnZSkgZWxzZSB0eXBlZF9wYXJhbSBpZgogICAgICAgIChpc2luc3RhbmNlKHR5cGVkX3BhcmFtLCBieXRlcykgb3IKICAgICAgICAgdHlwZWRfcGFyYW0gaXMgTm9uZSkgZWxzZSB0eXBlZF9wYXJhbS5lbmNvZGUoJ3V0Zi04JyksCiAgICAgICAgY2FwYWJpbGl0aWVzPXNlbGYuY2FwYWJpbGl0aWVzKCkpCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkoY2xzLAogICAgICAgICAgICAgICAgICAgICAgcHJvdG8sICAjIHR5cGU6IE9wdGlvbmFsW2JlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjXQogICAgICAgICAgICAgICAgICAgICAgY29udGV4dCAgIyB0eXBlOiBQaXBlbGluZUNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgKToKICAgICMgdHlwZTogKC4uLikgLT4gT3B0aW9uYWxbRW52aXJvbm1lbnRdCiAgICBpZiBwcm90byBpcyBOb25lIG9yIG5vdCBwcm90by51cm46CiAgICAgIHJldHVybiBOb25lCiAgICBwYXJhbWV0ZXJfdHlwZSwgY29uc3RydWN0b3IgPSBjbHMuX2tub3duX3VybnNbcHJvdG8udXJuXQoKICAgIHRyeToKICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yKAogICAgICAgICAgcHJvdG9fdXRpbHMucGFyc2VfQnl0ZXMocHJvdG8ucGF5bG9hZCwgcGFyYW1ldGVyX3R5cGUpLAogICAgICAgICAgcHJvdG8uY2FwYWJpbGl0aWVzLAogICAgICAgICAgY29udGV4dCkKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgIGlmIGNvbnRleHQuYWxsb3dfcHJvdG9faG9sZGVyczoKICAgICAgICByZXR1cm4gUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXIocHJvdG8pCiAgICAgIHJhaXNlCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX29wdGlvbnMoY2xzLCBvcHRpb25zKToKICAgICMgdHlwZTogKFR5cGVbRW52aXJvbm1lbnRUXSwgUGlwZWxpbmVPcHRpb25zKSAtPiBFbnZpcm9ubWVudFQKCiAgICAiIiJDcmVhdGVzIGFuIEVudmlyb25tZW50IG9iamVjdCBmcm9tIFBpcGVsaW5lT3B0aW9ucy4KCiAgICBBcmdzOgogICAgICBvcHRpb25zOiBUaGUgUGlwZWxpbmVPcHRpb25zIG9iamVjdC4KICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKCkBFbnZpcm9ubWVudC5yZWdpc3Rlcl91cm4oCiAgICBjb21tb25fdXJucy5lbnZpcm9ubWVudHMuRE9DS0VSLnVybiwgYmVhbV9ydW5uZXJfYXBpX3BiMi5Eb2NrZXJQYXlsb2FkKQpjbGFzcyBEb2NrZXJFbnZpcm9ubWVudChFbnZpcm9ubWVudCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5lcl9pbWFnZT1Ob25lLCBjYXBhYmlsaXRpZXM9KCkpOgogICAgc3VwZXIoRG9ja2VyRW52aXJvbm1lbnQsIHNlbGYpLl9faW5pdF9fKGNhcGFiaWxpdGllcykKICAgIGlmIGNvbnRhaW5lcl9pbWFnZToKICAgICAgc2VsZi5jb250YWluZXJfaW1hZ2UgPSBjb250YWluZXJfaW1hZ2UKICAgIGVsc2U6CiAgICAgIHNlbGYuY29udGFpbmVyX2ltYWdlID0gc2VsZi5kZWZhdWx0X2RvY2tlcl9pbWFnZSgpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fID09IG90aGVyLl9fY2xhc3NfXyBcCiAgICAgICAgICAgYW5kIHNlbGYuY29udGFpbmVyX2ltYWdlID09IG90aGVyLmNvbnRhaW5lcl9pbWFnZQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYuX19jbGFzc19fLCBzZWxmLmNvbnRhaW5lcl9pbWFnZSkpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnRG9ja2VyRW52aXJvbm1lbnQoY29udGFpbmVyX2ltYWdlPSVzKScgJSBzZWxmLmNvbnRhaW5lcl9pbWFnZQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IFR1cGxlW3N0ciwgYmVhbV9ydW5uZXJfYXBpX3BiMi5Eb2NrZXJQYXlsb2FkXQogICAgcmV0dXJuICgKICAgICAgICBjb21tb25fdXJucy5lbnZpcm9ubWVudHMuRE9DS0VSLnVybiwKICAgICAgICBiZWFtX3J1bm5lcl9hcGlfcGIyLkRvY2tlclBheWxvYWQoY29udGFpbmVyX2ltYWdlPXNlbGYuY29udGFpbmVyX2ltYWdlKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHBheWxvYWQsIGNhcGFiaWxpdGllcywgY29udGV4dCk6CiAgICByZXR1cm4gRG9ja2VyRW52aXJvbm1lbnQoCiAgICAgICAgY29udGFpbmVyX2ltYWdlPXBheWxvYWQuY29udGFpbmVyX2ltYWdlLCBjYXBhYmlsaXRpZXM9Y2FwYWJpbGl0aWVzKQoKICBAY2xhc3NtZXRob2QKICBkZWYgZnJvbV9vcHRpb25zKGNscywgb3B0aW9ucyk6CiAgICAjIHR5cGU6IChQaXBlbGluZU9wdGlvbnMpIC0+IERvY2tlckVudmlyb25tZW50CiAgICByZXR1cm4gY2xzKAogICAgICAgIGNvbnRhaW5lcl9pbWFnZT1vcHRpb25zLmVudmlyb25tZW50X2NvbmZpZywKICAgICAgICBjYXBhYmlsaXRpZXM9cHl0aG9uX3Nka19jYXBhYmlsaXRpZXMoKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBkZWZhdWx0X2RvY2tlcl9pbWFnZSgpOgogICAgZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgdmVyc2lvbiBhcyBiZWFtX3ZlcnNpb24KCiAgICBzZGtfdmVyc2lvbiA9IGJlYW1fdmVyc2lvbi5fX3ZlcnNpb25fXwogICAgdmVyc2lvbl9zdWZmaXggPSAnLicuam9pbihbc3RyKGkpIGZvciBpIGluIHN5cy52ZXJzaW9uX2luZm9bMDoyXV0pCiAgICBsb2dnaW5nLndhcm5pbmcoCiAgICAgICAgJ01ha2Ugc3VyZSB0aGF0IGxvY2FsbHkgYnVpbHQgUHl0aG9uIFNESyBkb2NrZXIgaW1hZ2UgJwogICAgICAgICdoYXMgUHl0aG9uICVkLiVkIGludGVycHJldGVyLicgJQogICAgICAgIChzeXMudmVyc2lvbl9pbmZvWzBdLCBzeXMudmVyc2lvbl9pbmZvWzFdKSkKCiAgICBpbWFnZSA9ICgKICAgICAgICAnYXBhY2hlL2JlYW1fcHl0aG9ue3ZlcnNpb25fc3VmZml4fV9zZGs6e3RhZ30nLmZvcm1hdCgKICAgICAgICAgICAgdmVyc2lvbl9zdWZmaXg9dmVyc2lvbl9zdWZmaXgsIHRhZz1zZGtfdmVyc2lvbikpCiAgICBsb2dnaW5nLmluZm8oCiAgICAgICAgJ1VzaW5nIFB5dGhvbiBTREsgZG9ja2VyIGltYWdlOiAlcy4gSWYgdGhlIGltYWdlIGlzIG5vdCAnCiAgICAgICAgJ2F2YWlsYWJsZSBhdCBsb2NhbCwgd2Ugd2lsbCB0cnkgdG8gcHVsbCBmcm9tIGh1Yi5kb2NrZXIuY29tJyAlIChpbWFnZSkpCiAgICByZXR1cm4gaW1hZ2UKCgpARW52aXJvbm1lbnQucmVnaXN0ZXJfdXJuKAogICAgY29tbW9uX3VybnMuZW52aXJvbm1lbnRzLlBST0NFU1MudXJuLCBiZWFtX3J1bm5lcl9hcGlfcGIyLlByb2Nlc3NQYXlsb2FkKQpjbGFzcyBQcm9jZXNzRW52aXJvbm1lbnQoRW52aXJvbm1lbnQpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kLCBvcz0nJywgYXJjaD0nJywgZW52PU5vbmUsIGNhcGFiaWxpdGllcz0oKSk6CiAgICBzdXBlcihQcm9jZXNzRW52aXJvbm1lbnQsIHNlbGYpLl9faW5pdF9fKGNhcGFiaWxpdGllcykKICAgIHNlbGYuY29tbWFuZCA9IGNvbW1hbmQKICAgIHNlbGYub3MgPSBvcwogICAgc2VsZi5hcmNoID0gYXJjaAogICAgc2VsZi5lbnYgPSBlbnYgb3Ige30KCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFzc19fIFwKICAgICAgYW5kIHNlbGYuY29tbWFuZCA9PSBvdGhlci5jb21tYW5kIGFuZCBzZWxmLm9zID09IG90aGVyLm9zIFwKICAgICAgYW5kIHNlbGYuYXJjaCA9PSBvdGhlci5hcmNoIGFuZCBzZWxmLmVudiA9PSBvdGhlci5lbnYKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKCgKICAgICAgICBzZWxmLl9fY2xhc3NfXywKICAgICAgICBzZWxmLmNvbW1hbmQsCiAgICAgICAgc2VsZi5vcywKICAgICAgICBzZWxmLmFyY2gsCiAgICAgICAgZnJvemVuc2V0KHNlbGYuZW52Lml0ZW1zKCkpKSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmVwcl9wYXJ0cyA9IFsnY29tbWFuZD0lcycgJSBzZWxmLmNvbW1hbmRdCiAgICBpZiBzZWxmLm9zOgogICAgICByZXByX3BhcnRzLmFwcGVuZCgnb3M9JXMnICUgc2VsZi5vcykKICAgIGlmIHNlbGYuYXJjaDoKICAgICAgcmVwcl9wYXJ0cy5hcHBlbmQoJ2FyY2g9JXMnICUgc2VsZi5hcmNoKQogICAgcmVwcl9wYXJ0cy5hcHBlbmQoJ2Vudj0lcycgJSBzZWxmLmVudikKICAgIHJldHVybiAnUHJvY2Vzc0Vudmlyb25tZW50KCVzKScgJSAnLCcuam9pbihyZXByX3BhcnRzKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IFR1cGxlW3N0ciwgYmVhbV9ydW5uZXJfYXBpX3BiMi5Qcm9jZXNzUGF5bG9hZF0KICAgIHJldHVybiAoCiAgICAgICAgY29tbW9uX3VybnMuZW52aXJvbm1lbnRzLlBST0NFU1MudXJuLAogICAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuUHJvY2Vzc1BheWxvYWQoCiAgICAgICAgICAgIG9zPXNlbGYub3MsIGFyY2g9c2VsZi5hcmNoLCBjb21tYW5kPXNlbGYuY29tbWFuZCwgZW52PXNlbGYuZW52KSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHBheWxvYWQsIGNhcGFiaWxpdGllcywgY29udGV4dCk6CiAgICByZXR1cm4gUHJvY2Vzc0Vudmlyb25tZW50KAogICAgICAgIGNvbW1hbmQ9cGF5bG9hZC5jb21tYW5kLAogICAgICAgIG9zPXBheWxvYWQub3MsCiAgICAgICAgYXJjaD1wYXlsb2FkLmFyY2gsCiAgICAgICAgZW52PXBheWxvYWQuZW52LAogICAgICAgIGNhcGFiaWxpdGllcz1jYXBhYmlsaXRpZXMpCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX29wdGlvbnMoY2xzLCBvcHRpb25zKToKICAgIGNvbmZpZyA9IGpzb24ubG9hZHMob3B0aW9ucy5lbnZpcm9ubWVudF9jb25maWcpCiAgICByZXR1cm4gY2xzKAogICAgICAgIGNvbmZpZy5nZXQoJ2NvbW1hbmQnKSwKICAgICAgICBvcz1jb25maWcuZ2V0KCdvcycsICcnKSwKICAgICAgICBhcmNoPWNvbmZpZy5nZXQoJ2FyY2gnLCAnJyksCiAgICAgICAgZW52PWNvbmZpZy5nZXQoJ2VudicsICcnKSwKICAgICAgICBjYXBhYmlsaXRpZXM9cHl0aG9uX3Nka19jYXBhYmlsaXRpZXMoKSkKCgpARW52aXJvbm1lbnQucmVnaXN0ZXJfdXJuKAogICAgY29tbW9uX3VybnMuZW52aXJvbm1lbnRzLkVYVEVSTkFMLnVybiwgYmVhbV9ydW5uZXJfYXBpX3BiMi5FeHRlcm5hbFBheWxvYWQpCmNsYXNzIEV4dGVybmFsRW52aXJvbm1lbnQoRW52aXJvbm1lbnQpOgogIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIHBhcmFtcz1Ob25lLCBjYXBhYmlsaXRpZXM9KCkpOgogICAgc3VwZXIoRXh0ZXJuYWxFbnZpcm9ubWVudCwgc2VsZikuX19pbml0X18oY2FwYWJpbGl0aWVzKQogICAgc2VsZi51cmwgPSB1cmwKICAgIHNlbGYucGFyYW1zID0gcGFyYW1zCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fID09IG90aGVyLl9fY2xhc3NfXyBhbmQgc2VsZi51cmwgPT0gb3RoZXIudXJsIFwKICAgICAgYW5kIHNlbGYucGFyYW1zID09IG90aGVyLnBhcmFtcwoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcGFyYW1zID0gc2VsZi5wYXJhbXMKICAgIGlmIHBhcmFtcyBpcyBub3QgTm9uZToKICAgICAgcGFyYW1zID0gZnJvemVuc2V0KHNlbGYucGFyYW1zLml0ZW1zKCkpCiAgICByZXR1cm4gaGFzaCgoc2VsZi5fX2NsYXNzX18sIHNlbGYudXJsLCBwYXJhbXMpKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0V4dGVybmFsRW52aXJvbm1lbnQodXJsPSVzLHBhcmFtcz0lcyknICUgKHNlbGYudXJsLCBzZWxmLnBhcmFtcykKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiBUdXBsZVtzdHIsIGJlYW1fcnVubmVyX2FwaV9wYjIuRXh0ZXJuYWxQYXlsb2FkXQogICAgcmV0dXJuICgKICAgICAgICBjb21tb25fdXJucy5lbnZpcm9ubWVudHMuRVhURVJOQUwudXJuLAogICAgICAgIGJlYW1fcnVubmVyX2FwaV9wYjIuRXh0ZXJuYWxQYXlsb2FkKAogICAgICAgICAgICBlbmRwb2ludD1lbmRwb2ludHNfcGIyLkFwaVNlcnZpY2VEZXNjcmlwdG9yKHVybD1zZWxmLnVybCksCiAgICAgICAgICAgIHBhcmFtcz1zZWxmLnBhcmFtcykpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcihwYXlsb2FkLCBjYXBhYmlsaXRpZXMsIGNvbnRleHQpOgogICAgcmV0dXJuIEV4dGVybmFsRW52aXJvbm1lbnQoCiAgICAgICAgcGF5bG9hZC5lbmRwb2ludC51cmwsCiAgICAgICAgcGFyYW1zPXBheWxvYWQucGFyYW1zIG9yIE5vbmUsCiAgICAgICAgY2FwYWJpbGl0aWVzPWNhcGFiaWxpdGllcykKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGZyb21fb3B0aW9ucyhjbHMsIG9wdGlvbnMpOgogICAgaWYgbG9va3NfbGlrZV9qc29uKG9wdGlvbnMuZW52aXJvbm1lbnRfY29uZmlnKToKICAgICAgY29uZmlnID0ganNvbi5sb2FkcyhvcHRpb25zLmVudmlyb25tZW50X2NvbmZpZykKICAgICAgdXJsID0gY29uZmlnLmdldCgndXJsJykKICAgICAgaWYgbm90IHVybDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFeHRlcm5hbCBlbnZpcm9ubWVudCBlbmRwb2ludCBtdXN0IGJlIHNldC4nKQogICAgICBwYXJhbXMgPSBjb25maWcuZ2V0KCdwYXJhbXMnKQogICAgZWxzZToKICAgICAgdXJsID0gb3B0aW9ucy5lbnZpcm9ubWVudF9jb25maWcKICAgICAgcGFyYW1zID0gTm9uZQoKICAgIHJldHVybiBjbHModXJsLCBwYXJhbXM9cGFyYW1zLCBjYXBhYmlsaXRpZXM9cHl0aG9uX3Nka19jYXBhYmlsaXRpZXMoKSkKCgpARW52aXJvbm1lbnQucmVnaXN0ZXJfdXJuKHB5dGhvbl91cm5zLkVNQkVEREVEX1BZVEhPTiwgTm9uZSkKY2xhc3MgRW1iZWRkZWRQeXRob25FbnZpcm9ubWVudChFbnZpcm9ubWVudCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNhcGFiaWxpdGllcz1Ob25lKToKICAgIHN1cGVyKEVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQsIHNlbGYpLl9faW5pdF9fKGNhcGFiaWxpdGllcykKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFzc19fCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLl9fY2xhc3NfXykKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiBUdXBsZVtzdHIsIE5vbmVdCiAgICByZXR1cm4gcHl0aG9uX3VybnMuRU1CRURERURfUFlUSE9OLCBOb25lCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcih1bnVzZWRfcGF5bG9hZCwgY2FwYWJpbGl0aWVzLCBjb250ZXh0KToKICAgIHJldHVybiBFbWJlZGRlZFB5dGhvbkVudmlyb25tZW50KGNhcGFiaWxpdGllcykKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGZyb21fb3B0aW9ucyhjbHMsIG9wdGlvbnMpOgogICAgcmV0dXJuIGNscyhjYXBhYmlsaXRpZXM9cHl0aG9uX3Nka19jYXBhYmlsaXRpZXMoKSkKCgpARW52aXJvbm1lbnQucmVnaXN0ZXJfdXJuKHB5dGhvbl91cm5zLkVNQkVEREVEX1BZVEhPTl9HUlBDLCBieXRlcykKY2xhc3MgRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQoRW52aXJvbm1lbnQpOgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgc3RhdGVfY2FjaGVfc2l6ZT1Ob25lLAogICAgICBkYXRhX2J1ZmZlcl90aW1lX2xpbWl0X21zPU5vbmUsCiAgICAgIGNhcGFiaWxpdGllcz0oKSk6CiAgICBzdXBlcihFbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudCwgc2VsZikuX19pbml0X18oY2FwYWJpbGl0aWVzKQogICAgc2VsZi5zdGF0ZV9jYWNoZV9zaXplID0gc3RhdGVfY2FjaGVfc2l6ZQogICAgc2VsZi5kYXRhX2J1ZmZlcl90aW1lX2xpbWl0X21zID0gZGF0YV9idWZmZXJfdGltZV9saW1pdF9tcwoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gXAogICAgICAgICAgIGFuZCBzZWxmLnN0YXRlX2NhY2hlX3NpemUgPT0gb3RoZXIuc3RhdGVfY2FjaGVfc2l6ZSBcCiAgICAgICAgICAgYW5kIHNlbGYuZGF0YV9idWZmZXJfdGltZV9saW1pdF9tcyA9PSBvdGhlci5kYXRhX2J1ZmZlcl90aW1lX2xpbWl0X21zCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgKICAgICAgICAoc2VsZi5fX2NsYXNzX18sIHNlbGYuc3RhdGVfY2FjaGVfc2l6ZSwgc2VsZi5kYXRhX2J1ZmZlcl90aW1lX2xpbWl0X21zKSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmVwcl9wYXJ0cyA9IFtdCiAgICBpZiBub3Qgc2VsZi5zdGF0ZV9jYWNoZV9zaXplIGlzIE5vbmU6CiAgICAgIHJlcHJfcGFydHMuYXBwZW5kKCdzdGF0ZV9jYWNoZV9zaXplPSVkJyAlIHNlbGYuc3RhdGVfY2FjaGVfc2l6ZSkKICAgIGlmIG5vdCBzZWxmLmRhdGFfYnVmZmVyX3RpbWVfbGltaXRfbXMgaXMgTm9uZToKICAgICAgcmVwcl9wYXJ0cy5hcHBlbmQoCiAgICAgICAgICAnZGF0YV9idWZmZXJfdGltZV9saW1pdF9tcz0lZCcgJSBzZWxmLmRhdGFfYnVmZmVyX3RpbWVfbGltaXRfbXMpCiAgICByZXR1cm4gJ0VtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50KCVzKScgJSAnLCcuam9pbihyZXByX3BhcnRzKQoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQpIC0+IFR1cGxlW3N0ciwgYnl0ZXNdCiAgICBwYXJhbXMgPSB7fQogICAgaWYgc2VsZi5zdGF0ZV9jYWNoZV9zaXplIGlzIG5vdCBOb25lOgogICAgICBwYXJhbXNbJ3N0YXRlX2NhY2hlX3NpemUnXSA9IHNlbGYuc3RhdGVfY2FjaGVfc2l6ZQogICAgaWYgc2VsZi5kYXRhX2J1ZmZlcl90aW1lX2xpbWl0X21zIGlzIG5vdCBOb25lOgogICAgICBwYXJhbXNbJ2RhdGFfYnVmZmVyX3RpbWVfbGltaXRfbXMnXSA9IHNlbGYuZGF0YV9idWZmZXJfdGltZV9saW1pdF9tcwogICAgcGF5bG9hZCA9IGpzb24uZHVtcHMocGFyYW1zKS5lbmNvZGUoJ3V0Zi04JykKICAgIHJldHVybiBweXRob25fdXJucy5FTUJFRERFRF9QWVRIT05fR1JQQywgcGF5bG9hZAoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIocGF5bG9hZCwgY2FwYWJpbGl0aWVzLCBjb250ZXh0KToKICAgIGlmIHBheWxvYWQ6CiAgICAgIGNvbmZpZyA9IEVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50LnBhcnNlX2NvbmZpZygKICAgICAgICAgIHBheWxvYWQuZGVjb2RlKCd1dGYtOCcpKQogICAgICByZXR1cm4gRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQoCiAgICAgICAgICBzdGF0ZV9jYWNoZV9zaXplPWNvbmZpZy5nZXQoJ3N0YXRlX2NhY2hlX3NpemUnKSwKICAgICAgICAgIGRhdGFfYnVmZmVyX3RpbWVfbGltaXRfbXM9Y29uZmlnLmdldCgnZGF0YV9idWZmZXJfdGltZV9saW1pdF9tcycpLAogICAgICAgICAgY2FwYWJpbGl0aWVzPWNhcGFiaWxpdGllcykKICAgIGVsc2U6CiAgICAgIHJldHVybiBFbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudCgpCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX29wdGlvbnMoY2xzLCBvcHRpb25zKToKICAgIGlmIG9wdGlvbnMuZW52aXJvbm1lbnRfY29uZmlnOgogICAgICBjb25maWcgPSBFbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudC5wYXJzZV9jb25maWcoCiAgICAgICAgICBvcHRpb25zLmVudmlyb25tZW50X2NvbmZpZykKICAgICAgcmV0dXJuIGNscygKICAgICAgICAgIHN0YXRlX2NhY2hlX3NpemU9Y29uZmlnLmdldCgnc3RhdGVfY2FjaGVfc2l6ZScpLAogICAgICAgICAgZGF0YV9idWZmZXJfdGltZV9saW1pdF9tcz1jb25maWcuZ2V0KCdkYXRhX2J1ZmZlcl90aW1lX2xpbWl0X21zJykpCiAgICBlbHNlOgogICAgICByZXR1cm4gY2xzKGNhcGFiaWxpdGllcz1weXRob25fc2RrX2NhcGFiaWxpdGllcygpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIHBhcnNlX2NvbmZpZyhzKToKICAgIGlmIGxvb2tzX2xpa2VfanNvbihzKToKICAgICAgY29uZmlnX2RpY3QgPSBqc29uLmxvYWRzKHMpCiAgICAgIGlmICdzdGF0ZV9jYWNoZV9zaXplJyBpbiBjb25maWdfZGljdDoKICAgICAgICBjb25maWdfZGljdFsnc3RhdGVfY2FjaGVfc2l6ZSddID0gaW50KGNvbmZpZ19kaWN0WydzdGF0ZV9jYWNoZV9zaXplJ10pCgogICAgICBpZiAnZGF0YV9idWZmZXJfdGltZV9saW1pdF9tcycgaW4gY29uZmlnX2RpY3Q6CiAgICAgICAgY29uZmlnX2RpY3RbJ2RhdGFfYnVmZmVyX3RpbWVfbGltaXRfbXMnXSA9IFwKICAgICAgICAgIGludChjb25maWdfZGljdFsnZGF0YV9idWZmZXJfdGltZV9saW1pdF9tcyddKQogICAgICByZXR1cm4gY29uZmlnX2RpY3QKICAgIGVsc2U6CiAgICAgIHJldHVybiB7J3N0YXRlX2NhY2hlX3NpemUnOiBpbnQocyl9CgoKQEVudmlyb25tZW50LnJlZ2lzdGVyX3VybihweXRob25fdXJucy5TVUJQUk9DRVNTX1NESywgYnl0ZXMpCmNsYXNzIFN1YnByb2Nlc3NTREtFbnZpcm9ubWVudChFbnZpcm9ubWVudCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfc3RyaW5nLCBjYXBhYmlsaXRpZXM9KCkpOgogICAgc3VwZXIoU3VicHJvY2Vzc1NES0Vudmlyb25tZW50LCBzZWxmKS5fX2luaXRfXyhjYXBhYmlsaXRpZXMpCiAgICBzZWxmLmNvbW1hbmRfc3RyaW5nID0gY29tbWFuZF9zdHJpbmcKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFzc19fIFwKICAgICAgICAgICBhbmQgc2VsZi5jb21tYW5kX3N0cmluZyA9PSBvdGhlci5jb21tYW5kX3N0cmluZwoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYuX19jbGFzc19fLCBzZWxmLmNvbW1hbmRfc3RyaW5nKSkKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdTdWJwcm9jZXNzU0RLRW52aXJvbm1lbnQoY29tbWFuZF9zdHJpbmc9JXMpJyAlIHNlbGYuY29tbWFuZF9zdHJpbmcKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIGNvbnRleHQpOgogICAgIyB0eXBlOiAoUGlwZWxpbmVDb250ZXh0KSAtPiBUdXBsZVtzdHIsIGJ5dGVzXQogICAgcmV0dXJuIHB5dGhvbl91cm5zLlNVQlBST0NFU1NfU0RLLCBzZWxmLmNvbW1hbmRfc3RyaW5nLmVuY29kZSgndXRmLTgnKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIocGF5bG9hZCwgY2FwYWJpbGl0aWVzLCBjb250ZXh0KToKICAgIHJldHVybiBTdWJwcm9jZXNzU0RLRW52aXJvbm1lbnQocGF5bG9hZC5kZWNvZGUoJ3V0Zi04JyksIGNhcGFiaWxpdGllcykKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGZyb21fb3B0aW9ucyhjbHMsIG9wdGlvbnMpOgogICAgcmV0dXJuIGNscygKICAgICAgICBvcHRpb25zLmVudmlyb25tZW50X2NvbmZpZywgY2FwYWJpbGl0aWVzPXB5dGhvbl9zZGtfY2FwYWJpbGl0aWVzKCkpCgoKY2xhc3MgUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXIoRW52aXJvbm1lbnQpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90byk6CiAgICBzZWxmLnByb3RvID0gcHJvdG8KCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gc2VsZi5wcm90bwoKICBkZWYgY2FwYWJpbGl0aWVzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYucHJvdG8uY2FwYWJpbGl0aWVzCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fID09IG90aGVyLl9fY2xhc3NfXyBhbmQgc2VsZi5wcm90byA9PSBvdGhlci5wcm90bwoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgICMgVE9ETyhCRUFNLTU5NDkpOiBOZWVkZWQgZm9yIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkuCiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYuX19jbGFzc19fLCBzZWxmLnByb3RvKSkKCgpkZWYgcHl0aG9uX3Nka19jYXBhYmlsaXRpZXMoKToKICByZXR1cm4gbGlzdChfcHl0aG9uX3Nka19jYXBhYmlsaXRpZXNfaXRlcigpKQoKCmRlZiBfcHl0aG9uX3Nka19jYXBhYmlsaXRpZXNfaXRlcigpOgogIGZvciB1cm5fc3BlYyBpbiBjb21tb25fdXJucy5jb2RlcnMuX19kaWN0X18udmFsdWVzKCk6CiAgICBpZiBnZXRhdHRyKHVybl9zcGVjLCAndXJuJywgTm9uZSkgaW4gY29kZXJzLkNvZGVyLl9rbm93bl91cm5zOgogICAgICB5aWVsZCB1cm5fc3BlYy51cm4KICB5aWVsZCBjb21tb25fdXJucy5wcm90b2NvbHMuTEVHQUNZX1BST0dSRVNTX1JFUE9SVElORy51cm4KICB5aWVsZCBjb21tb25fdXJucy5wcm90b2NvbHMuV09SS0VSX1NUQVRVUy51cm4KlH2UKIwPbG9va3NfbGlrZV9qc29ulGpWMQEAS0ZLSIeUjBRFbnZpcm9ubWVudC5fX2luaXRfX5RqVjEBAEtXS1iHlIwjRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBLWktch5SMGEVudmlyb25tZW50LmNhcGFiaWxpdGllc5RqVjEBAEteS2CHlIwYRW52aXJvbm1lbnQucmVnaXN0ZXJfdXJulGpWMQEAS4pLnYeUjCBFbnZpcm9ubWVudC5nZXRfZW52X2Nsc19mcm9tX3VybpRqVjEBAEufS6GHlIwZRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaZRqVjEBAEujS6yHlIwbRW52aXJvbm1lbnQuZnJvbV9ydW5uZXJfYXBplGpWMQEAS65LwIeUjBhFbnZpcm9ubWVudC5mcm9tX29wdGlvbnOUalYxAQBLwkvLh5SMC0Vudmlyb25tZW50lGpdMQEAS0tLy4eUjBpEb2NrZXJFbnZpcm9ubWVudC5fX2luaXRfX5RqVjEBAEvRS9aHlIwYRG9ja2VyRW52aXJvbm1lbnQuX19lcV9flGpWMQEAS9hL2oeUjBhEb2NrZXJFbnZpcm9ubWVudC5fX25lX1+UalYxAQBL3Eveh5SMGkRvY2tlckVudmlyb25tZW50Ll9faGFzaF9flGpWMQEAS+BL4YeUjBpEb2NrZXJFbnZpcm9ubWVudC5fX3JlcHJfX5RqVjEBAEvjS+SHlIwpRG9ja2VyRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBL5kvqh5SMK0RvY2tlckVudmlyb25tZW50LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBL7Evvh5SMHkRvY2tlckVudmlyb25tZW50LmZyb21fb3B0aW9uc5RqVjEBAEvxS/aHlIwmRG9ja2VyRW52aXJvbm1lbnQuZGVmYXVsdF9kb2NrZXJfaW1hZ2WUalYxAQBL+E0JAYeUjBFEb2NrZXJFbnZpcm9ubWVudJRqXTEBAEvOTQkBh5SMG1Byb2Nlc3NFbnZpcm9ubWVudC5fX2luaXRfX5RqVjEBAE0PAU0UAYeUjBlQcm9jZXNzRW52aXJvbm1lbnQuX19lcV9flGpWMQEATRYBTRkBh5SMGVByb2Nlc3NFbnZpcm9ubWVudC5fX25lX1+UalYxAQBNGwFNHQGHlIwbUHJvY2Vzc0Vudmlyb25tZW50Ll9faGFzaF9flGpWMQEATR8BTSUBh5SMG1Byb2Nlc3NFbnZpcm9ubWVudC5fX3JlcHJfX5RqVjEBAE0nAU0uAYeUjCpQcm9jZXNzRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNMAFNNQGHlIwsUHJvY2Vzc0Vudmlyb25tZW50LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNNwFNPgGHlIwfUHJvY2Vzc0Vudmlyb25tZW50LmZyb21fb3B0aW9uc5RqVjEBAE1AAU1IAYeUjBJQcm9jZXNzRW52aXJvbm1lbnSUal0xAQBNDAFNSAGHlIwcRXh0ZXJuYWxFbnZpcm9ubWVudC5fX2luaXRfX5RqVjEBAE1OAU1RAYeUjBpFeHRlcm5hbEVudmlyb25tZW50Ll9fZXFfX5RqVjEBAE1TAU1VAYeUjBpFeHRlcm5hbEVudmlyb25tZW50Ll9fbmVfX5RqVjEBAE1XAU1ZAYeUjBxFeHRlcm5hbEVudmlyb25tZW50Ll9faGFzaF9flGpWMQEATVsBTV8Bh5SMHEV4dGVybmFsRW52aXJvbm1lbnQuX19yZXByX1+UalYxAQBNYQFNYgGHlIwrRXh0ZXJuYWxFbnZpcm9ubWVudC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE1kAU1qAYeUjC1FeHRlcm5hbEVudmlyb25tZW50LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNbAFNcQGHlIwgRXh0ZXJuYWxFbnZpcm9ubWVudC5mcm9tX29wdGlvbnOUalYxAQBNcwFNfwGHlIwTRXh0ZXJuYWxFbnZpcm9ubWVudJRqXTEBAE1LAU1/AYeUjCJFbWJlZGRlZFB5dGhvbkVudmlyb25tZW50Ll9faW5pdF9flGpWMQEATYQBTYUBh5SMIEVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQuX19lcV9flGpWMQEATYcBTYgBh5SMIEVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQuX19uZV9flGpWMQEATYoBTYwBh5SMIkVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQuX19oYXNoX1+UalYxAQBNjgFNjwGHlIwxRW1iZWRkZWRQeXRob25FbnZpcm9ubWVudC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE2RAU2TAYeUjDNFbWJlZGRlZFB5dGhvbkVudmlyb25tZW50LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNlQFNlwGHlIwmRW1iZWRkZWRQeXRob25FbnZpcm9ubWVudC5mcm9tX29wdGlvbnOUalYxAQBNmQFNmwGHlIwZRW1iZWRkZWRQeXRob25FbnZpcm9ubWVudJRqXTEBAE2CAU2bAYeUjCZFbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudC5fX2luaXRfX5RqVjEBAE2gAU2nAYeUjCRFbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudC5fX2VxX1+UalYxAQBNqQFNrAGHlIwkRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQuX19uZV9flGpWMQEATa4BTbABh5SMJkVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50Ll9faGFzaF9flGpWMQEATbIBTbQBh5SMJkVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50Ll9fcmVwcl9flGpWMQEATbYBTb0Bh5SMNUVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATb8BTccBh5SMN0VtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNyQFN0wGHlIwqRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQuZnJvbV9vcHRpb25zlGpWMQEATdUBTd4Bh5SMKkVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50LnBhcnNlX2NvbmZpZ5RqVjEBAE3gAU3sAYeUjB1FbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudJRqXTEBAE2eAU3sAYeUjCFTdWJwcm9jZXNzU0RLRW52aXJvbm1lbnQuX19pbml0X1+UalYxAQBN8QFN8wGHlIwfU3VicHJvY2Vzc1NES0Vudmlyb25tZW50Ll9fZXFfX5RqVjEBAE31AU33AYeUjB9TdWJwcm9jZXNzU0RLRW52aXJvbm1lbnQuX19uZV9flGpWMQEATfkBTfsBh5SMIVN1YnByb2Nlc3NTREtFbnZpcm9ubWVudC5fX2hhc2hfX5RqVjEBAE39AU3+AYeUjCFTdWJwcm9jZXNzU0RLRW52aXJvbm1lbnQuX19yZXByX1+UalYxAQBNAAJNAQKHlIwwU3VicHJvY2Vzc1NES0Vudmlyb25tZW50LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATQMCTQUCh5SMMlN1YnByb2Nlc3NTREtFbnZpcm9ubWVudC5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATQcCTQkCh5SMJVN1YnByb2Nlc3NTREtFbnZpcm9ubWVudC5mcm9tX29wdGlvbnOUalYxAQBNCwJNDgKHlIwYU3VicHJvY2Vzc1NES0Vudmlyb25tZW50lGpdMQEATe8BTQ4Ch5SMI1J1bm5lckFQSUVudmlyb25tZW50SG9sZGVyLl9faW5pdF9flGpWMQEATRICTRMCh5SMKFJ1bm5lckFQSUVudmlyb25tZW50SG9sZGVyLnRvX3J1bm5lcl9hcGmUalYxAQBNFQJNFgKHlIwnUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXIuY2FwYWJpbGl0aWVzlGpWMQEATRgCTRkCh5SMIVJ1bm5lckFQSUVudmlyb25tZW50SG9sZGVyLl9fZXFfX5RqVjEBAE0bAk0cAoeUjCFSdW5uZXJBUElFbnZpcm9ubWVudEhvbGRlci5fX25lX1+UalYxAQBNHgJNIAKHlIwjUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXIuX19oYXNoX1+UalYxAQBNIgJNIwKHlIwaUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXKUal0xAQBNEQJNIwKHlIwXcHl0aG9uX3Nka19jYXBhYmlsaXRpZXOUalYxAQBNJgJNJwKHlIwdX3B5dGhvbl9zZGtfY2FwYWJpbGl0aWVzX2l0ZXKUalYxAQBNKgJNLwKHlHV9lCiMC0Vudmlyb25tZW50lGpNAwAAjCNFbnZpcm9ubWVudC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwYRW52aXJvbm1lbnQuY2FwYWJpbGl0aWVzlGpNAwAAjBhFbnZpcm9ubWVudC5yZWdpc3Rlcl91cm6Uak0DAACMIEVudmlyb25tZW50LmdldF9lbnZfY2xzX2Zyb21fdXJulGpNAwAAjBlFbnZpcm9ubWVudC50b19ydW5uZXJfYXBplGpNAwAAjBtFbnZpcm9ubWVudC5mcm9tX3J1bm5lcl9hcGmUak0DAACMGEVudmlyb25tZW50LmZyb21fb3B0aW9uc5RqTQMAAIwRRG9ja2VyRW52aXJvbm1lbnSUak0DAACMKURvY2tlckVudmlyb25tZW50LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpNAwAAjCtEb2NrZXJFbnZpcm9ubWVudC5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpNAwAAjB5Eb2NrZXJFbnZpcm9ubWVudC5mcm9tX29wdGlvbnOUak0DAACMJkRvY2tlckVudmlyb25tZW50LmRlZmF1bHRfZG9ja2VyX2ltYWdllGpNAwAAjBJQcm9jZXNzRW52aXJvbm1lbnSUak0DAACMKlByb2Nlc3NFbnZpcm9ubWVudC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwsUHJvY2Vzc0Vudmlyb25tZW50LmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUak0DAACMH1Byb2Nlc3NFbnZpcm9ubWVudC5mcm9tX29wdGlvbnOUak0DAACME0V4dGVybmFsRW52aXJvbm1lbnSUak0DAACMK0V4dGVybmFsRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUak0DAACMLUV4dGVybmFsRW52aXJvbm1lbnQuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwgRXh0ZXJuYWxFbnZpcm9ubWVudC5mcm9tX29wdGlvbnOUak0DAACMGUVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnSUak0DAACMMUVtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUak0DAACMM0VtYmVkZGVkUHl0aG9uRW52aXJvbm1lbnQuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwmRW1iZWRkZWRQeXRob25FbnZpcm9ubWVudC5mcm9tX29wdGlvbnOUak0DAACMHUVtYmVkZGVkUHl0aG9uR3JwY0Vudmlyb25tZW50lGpNAwAAjDVFbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudC50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIw3RW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwqRW1iZWRkZWRQeXRob25HcnBjRW52aXJvbm1lbnQuZnJvbV9vcHRpb25zlGpNAwAAjCpFbWJlZGRlZFB5dGhvbkdycGNFbnZpcm9ubWVudC5wYXJzZV9jb25maWeUak0DAACMGFN1YnByb2Nlc3NTREtFbnZpcm9ubWVudJRqTQMAAIwwU3VicHJvY2Vzc1NES0Vudmlyb25tZW50LnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpNAwAAjDJTdWJwcm9jZXNzU0RLRW52aXJvbm1lbnQuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqTQMAAIwlU3VicHJvY2Vzc1NES0Vudmlyb25tZW50LmZyb21fb3B0aW9uc5RqTQMAAIwaUnVubmVyQVBJRW52aXJvbm1lbnRIb2xkZXKUak0DAACMKFJ1bm5lckFQSUVudmlyb25tZW50SG9sZGVyLnRvX3J1bm5lcl9hcGmUak0DAACMJ1J1bm5lckFQSUVudmlyb25tZW50SG9sZGVyLmNhcGFiaWxpdGllc5RqTQMAAHWMI2FwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZW52aXJvbm1lbnRzlHSUjB9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFslChYcEQAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRGVmaW5lcyBUcmFuc2Zvcm0gd2hvc2UgZXhwYW5zaW9uIGlzIGltcGxlbWVudGVkIGVsc2V3aGVyZS4KCk5vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4gRXZlcnl0aGluZyBpbiB0aGlzIG1vZHVsZSBpcyBleHBlcmltZW50YWwuCiIiIgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgY29udGV4dGxpYgppbXBvcnQgY29weQppbXBvcnQgdGhyZWFkaW5nCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5jb2RlcnMgaW1wb3J0IHJlZ2lzdHJ5CmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IGNvbW1vbl91cm5zCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX2V4cGFuc2lvbl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmV4dGVybmFsX3RyYW5zZm9ybXNfcGIyIGltcG9ydCBDb25maWdWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5leHRlcm5hbF90cmFuc2Zvcm1zX3BiMiBpbXBvcnQgRXh0ZXJuYWxDb25maWd1cmF0aW9uUGF5bG9hZApmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMgaW1wb3J0IHBpcGVsaW5lX2NvbnRleHQKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBwdHJhbnNmb3JtCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkgaW1wb3J0IGNvbnZlcnRfdG9fYmVhbV90eXBlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlIGltcG9ydCBpbnN0YW5jZV90b190eXBlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgVW5pb24KZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCBVbmlvbkNvbnN0cmFpbnQKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBncnBjIGlzIG5vdCBhdmFpbGFibGUuCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwp0cnk6CiAgaW1wb3J0IGdycGMKICBmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9leHBhbnNpb25fYXBpX3BiMl9ncnBjCiAgZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgc3VicHJvY2Vzc19zZXJ2ZXIKZXhjZXB0IEltcG9ydEVycm9yOgogIGdycGMgPSBOb25lCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgpERUZBVUxUX0VYUEFOU0lPTl9TRVJWSUNFID0gJ2xvY2FsaG9zdDo4MDk3JwoKCmRlZiBfaXNfb3B0aW9uYWxfb3Jfbm9uZSh0eXBlaGludCk6CiAgcmV0dXJuICgKICAgICAgdHlwZShOb25lKSBpbiB0eXBlaGludC51bmlvbl90eXBlcyBpZiBpc2luc3RhbmNlKAogICAgICAgICAgdHlwZWhpbnQsIFVuaW9uQ29uc3RyYWludCkgZWxzZSB0eXBlaGludCBpcyB0eXBlKE5vbmUpKQoKCmRlZiBfc3RyaXBfb3B0aW9uYWwodHlwZWhpbnQpOgogIGlmIG5vdCBfaXNfb3B0aW9uYWxfb3Jfbm9uZSh0eXBlaGludCk6CiAgICByZXR1cm4gdHlwZWhpbnQKICBuZXdfdHlwZXMgPSB0eXBlaGludC51bmlvbl90eXBlcy5kaWZmZXJlbmNlKHt0eXBlKE5vbmUpfSkKICBpZiBsZW4obmV3X3R5cGVzKSA9PSAxOgogICAgcmV0dXJuIGxpc3QobmV3X3R5cGVzKVswXQogIHJldHVybiBVbmlvbltuZXdfdHlwZXNdCgoKZGVmIGl0ZXJfdXJucyhjb2RlciwgY29udGV4dD1Ob25lKToKICB5aWVsZCBjb2Rlci50b19ydW5uZXJfYXBpX3BhcmFtZXRlcihjb250ZXh0KVswXQogIGZvciBjaGlsZCBpbiBjb2Rlci5fZ2V0X2NvbXBvbmVudF9jb2RlcnMoKToKICAgIGZvciB1cm4gaW4gaXRlcl91cm5zKGNoaWxkLCBjb250ZXh0KToKICAgICAgeWllbGQgdXJuCgoKY2xhc3MgUGF5bG9hZEJ1aWxkZXIob2JqZWN0KToKICAiIiIKICBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBidWlsZGluZyBwYXlsb2FkcyB0byBwYXNzIHRvIEV4dGVybmFsVHJhbnNmb3JtLgogICIiIgogIEBjbGFzc21ldGhvZAogIGRlZiBfY29uZmlnX3ZhbHVlKGNscywgb2JqLCB0eXBlaGludCk6CiAgICAiIiIKICAgIEhlbHBlciB0byBjcmVhdGUgYSBDb25maWdWYWx1ZSB3aXRoIGFuIGVuY29kZWQgdmFsdWUuCiAgICAiIiIKICAgIGNvZGVyID0gcmVnaXN0cnkuZ2V0X2NvZGVyKHR5cGVoaW50KQogICAgdXJucyA9IGxpc3QoaXRlcl91cm5zKGNvZGVyKSkKICAgIGlmICdiZWFtOmNvZGVyOnBpY2tsZWRfcHl0aG9uOnYxJyBpbiB1cm5zOgogICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkZvdW5kIG5vbi1wb3J0YWJsZSBjb2RlciBmb3IgJXMiICUgKHR5cGVoaW50LCApKQogICAgcmV0dXJuIENvbmZpZ1ZhbHVlKAogICAgICAgIGNvZGVyX3Vybj11cm5zLCBwYXlsb2FkPWNvZGVyLmdldF9pbXBsKCkuZW5jb2RlX25lc3RlZChvYmopKQoKICBkZWYgYnVpbGQoc2VsZik6CiAgICAiIiIKICAgIDpyZXR1cm46IEV4dGVybmFsQ29uZmlndXJhdGlvblBheWxvYWQKICAgICIiIgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgcGF5bG9hZChzZWxmKToKICAgICIiIgogICAgVGhlIHNlcmlhbGl6ZWQgRXh0ZXJuYWxDb25maWd1cmF0aW9uUGF5bG9hZAoKICAgIDpyZXR1cm46IGJ5dGVzCiAgICAiIiIKICAgIHJldHVybiBzZWxmLmJ1aWxkKCkuU2VyaWFsaXplVG9TdHJpbmcoKQoKCmNsYXNzIFNjaGVtYUJhc2VkUGF5bG9hZEJ1aWxkZXIoUGF5bG9hZEJ1aWxkZXIpOgogICIiIgogIEJhc2UgY2xhc3MgZm9yIGJ1aWxkaW5nIHBheWxvYWRzIGJhc2VkIG9uIGEgc2NoZW1hIHRoYXQgcHJvdmlkZXMKICB0eXBlIGluZm9ybWF0aW9uIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gdmFsdWUgdG8gZW5jb2RlLgoKICBOb3RlIHRoYXQgaWYgdGhlIHNjaGVtYSBkZWZpbmVzIGEgdHlwZSBhcyBPcHRpb25hbCwgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUKICB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgZW5jb2RlZCBwYXlsb2FkLCBhbmQgdGh1cyB0aGUgbmF0aXZlIHRyYW5zZm9ybQogIHdpbGwgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZXMsIHNjaGVtYSk6CiAgICAiIiIKICAgIDpwYXJhbSB2YWx1ZXM6IG1hcHBpbmcgb2YgY29uZmlnIG5hbWVzIHRvIHZhbHVlcwogICAgOnBhcmFtIHNjaGVtYTogbWFwcGluZyBvZiBjb25maWcgbmFtZXMgdG8gdHlwZXMKICAgICIiIgogICAgc2VsZi5fdmFsdWVzID0gdmFsdWVzCiAgICBzZWxmLl9zY2hlbWEgPSBzY2hlbWEKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9lbmNvZGVfY29uZmlnKGNscywgdmFsdWVzLCBzY2hlbWEpOgogICAgcmVzdWx0ID0ge30KICAgIGZvciBrZXksIHZhbHVlIGluIHZhbHVlcy5pdGVtcygpOgoKICAgICAgdHJ5OgogICAgICAgIHR5cGVoaW50ID0gc2NoZW1hW2tleV0KICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiTm8gdHlwZWhpbnQgcHJvdmlkZWQgZm9yIGtleSAlciIgJSBrZXkpCgogICAgICB0eXBlaGludCA9IGNvbnZlcnRfdG9fYmVhbV90eXBlKHR5cGVoaW50KQoKICAgICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgICBpZiBub3QgX2lzX29wdGlvbmFsX29yX25vbmUodHlwZWhpbnQpOgogICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICJJZiB2YWx1ZSBpcyBOb25lLCB0eXBlaGludCBzaG91bGQgYmUgIgogICAgICAgICAgICAgICJvcHRpb25hbC4gR290ICVyIiAlIHR5cGVoaW50KQogICAgICAgICMgbWFrZSBpdCBlYXN5IGZvciB1c2VyIHRvIGZpbHRlciBOb25lIGJ5IGRlZmF1bHQKICAgICAgICBjb250aW51ZQogICAgICBlbHNlOgogICAgICAgICMgc3RyaXAgT3B0aW9uYWwgZnJvbSB0eXBlaGludCBzbyB0aGF0IHBpY2tsZWRfcHl0aG9uIGNvZGVyIGlzIG5vdCB1c2VkCiAgICAgICAgIyBmb3Iga25vd24gdHlwZXMuCiAgICAgICAgdHlwZWhpbnQgPSBfc3RyaXBfb3B0aW9uYWwodHlwZWhpbnQpCiAgICAgIHJlc3VsdFtrZXldID0gY2xzLl9jb25maWdfdmFsdWUodmFsdWUsIHR5cGVoaW50KQogICAgcmV0dXJuIHJlc3VsdAoKICBkZWYgYnVpbGQoc2VsZik6CiAgICAiIiIKICAgIDpyZXR1cm46IEV4dGVybmFsQ29uZmlndXJhdGlvblBheWxvYWQKICAgICIiIgogICAgYXJncyA9IHNlbGYuX2VuY29kZV9jb25maWcoc2VsZi5fdmFsdWVzLCBzZWxmLl9zY2hlbWEpCiAgICByZXR1cm4gRXh0ZXJuYWxDb25maWd1cmF0aW9uUGF5bG9hZChjb25maWd1cmF0aW9uPWFyZ3MpCgoKY2xhc3MgSW1wbGljaXRTY2hlbWFQYXlsb2FkQnVpbGRlcihTY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVyKToKICAiIiIKICBCdWlsZCBhIHBheWxvYWQgdGhhdCBnZW5lcmF0ZXMgYSBzY2hlbWEgZnJvbSB0aGUgcHJvdmlkZWQgdmFsdWVzLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZXMpOgogICAgc2NoZW1hID0ge2tleTogaW5zdGFuY2VfdG9fdHlwZSh2YWx1ZSkgZm9yIGtleSwgdmFsdWUgaW4gdmFsdWVzLml0ZW1zKCl9CiAgICBzdXBlcihJbXBsaWNpdFNjaGVtYVBheWxvYWRCdWlsZGVyLCBzZWxmKS5fX2luaXRfXyh2YWx1ZXMsIHNjaGVtYSkKCgpjbGFzcyBOYW1lZFR1cGxlQmFzZWRQYXlsb2FkQnVpbGRlcihTY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVyKToKICAiIiIKICBCdWlsZCBhIHBheWxvYWQgYmFzZWQgb24gYSBOYW1lZFR1cGxlIHNjaGVtYS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgdHVwbGVfaW5zdGFuY2UpOgogICAgIiIiCiAgICA6cGFyYW0gdHVwbGVfaW5zdGFuY2U6IGFuIGluc3RhbmNlIG9mIGEgdHlwaW5nLk5hbWVkVHVwbGUKICAgICIiIgogICAgc3VwZXIoTmFtZWRUdXBsZUJhc2VkUGF5bG9hZEJ1aWxkZXIsIHNlbGYpLl9faW5pdF9fKAogICAgICAgIHZhbHVlcz10dXBsZV9pbnN0YW5jZS5fYXNkaWN0KCksIHNjaGVtYT10dXBsZV9pbnN0YW5jZS5fZmllbGRfdHlwZXMpCgoKY2xhc3MgQW5ub3RhdGlvbkJhc2VkUGF5bG9hZEJ1aWxkZXIoU2NoZW1hQmFzZWRQYXlsb2FkQnVpbGRlcik6CiAgIiIiCiAgQnVpbGQgYSBwYXlsb2FkIGJhc2VkIG9uIGFuIGV4dGVybmFsIHRyYW5zZm9ybSdzIHR5cGUgYW5ub3RhdGlvbnMuCgogIFN1cHBvcnRlZCBpbiBweXRob24gMyBvbmx5LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFuc2Zvcm0sICoqdmFsdWVzKToKICAgICIiIgogICAgOnBhcmFtIHRyYW5zZm9ybTogYSBQVHJhbnNmb3JtIGluc3RhbmNlIG9yIGNsYXNzLiB0eXBlIGFubm90YXRpb25zIHdpbGwKICAgICAgICAgICAgICAgICAgICAgIGJlIGdhdGhlcmVkIGZyb20gaXRzIF9faW5pdF9fIG1ldGhvZAogICAgOnBhcmFtIHZhbHVlczogdmFsdWVzIHRvIGVuY29kZQogICAgIiIiCiAgICBzY2hlbWEgPSB7CiAgICAgICAgazogdgogICAgICAgIGZvciBrLAogICAgICAgIHYgaW4gdHJhbnNmb3JtLl9faW5pdF9fLl9fYW5ub3RhdGlvbnNfXy5pdGVtcygpIGlmIGsgaW4gdmFsdWVzCiAgICB9CiAgICBzdXBlcihBbm5vdGF0aW9uQmFzZWRQYXlsb2FkQnVpbGRlciwgc2VsZikuX19pbml0X18odmFsdWVzLCBzY2hlbWEpCgoKY2xhc3MgRGF0YWNsYXNzQmFzZWRQYXlsb2FkQnVpbGRlcihTY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVyKToKICAiIiIKICBCdWlsZCBhIHBheWxvYWQgYmFzZWQgb24gYW4gZXh0ZXJuYWwgdHJhbnNmb3JtIHRoYXQgdXNlcyBkYXRhY2xhc3Nlcy4KCiAgU3VwcG9ydGVkIGluIHB5dGhvbiAzIG9ubHkuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zZm9ybSk6CiAgICAiIiIKICAgIDpwYXJhbSB0cmFuc2Zvcm06IGEgZGF0YWNsYXNzLWRlY29yYXRlZCBQVHJhbnNmb3JtIGluc3RhbmNlIGZyb20gd2hpY2ggdG8KICAgICAgICAgICAgICAgICAgICAgIGdhdGhlciB0eXBlIGFubm90YXRpb25zIGFuZCB2YWx1ZXMKICAgICIiIgogICAgaW1wb3J0IGRhdGFjbGFzc2VzCiAgICBzY2hlbWEgPSB7ZmllbGQubmFtZTogZmllbGQudHlwZSBmb3IgZmllbGQgaW4gZGF0YWNsYXNzZXMuZmllbGRzKHRyYW5zZm9ybSl9CiAgICBzdXBlcihEYXRhY2xhc3NCYXNlZFBheWxvYWRCdWlsZGVyLAogICAgICAgICAgc2VsZikuX19pbml0X18oZGF0YWNsYXNzZXMuYXNkaWN0KHRyYW5zZm9ybSksIHNjaGVtYSkKCgpjbGFzcyBFeHRlcm5hbFRyYW5zZm9ybShwdHJhbnNmb3JtLlBUcmFuc2Zvcm0pOgogICIiIgogICAgRXh0ZXJuYWwgcHJvdmlkZXMgYSBjcm9zcy1sYW5ndWFnZSB0cmFuc2Zvcm0gdmlhIGV4cGFuc2lvbiBzZXJ2aWNlcyBpbgogICAgZm9yZWlnbiBTREtzLgoKICAgIEV4cGVyaW1lbnRhbDsgbm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKICBfbmFtZXNwYWNlX2NvdW50ZXIgPSAwCiAgX25hbWVzcGFjZSA9IHRocmVhZGluZy5sb2NhbCgpCgogIF9JTVBVTFNFX1BSRUZJWCA9ICdpbXB1bHNlJwoKICBkZWYgX19pbml0X18oc2VsZiwgdXJuLCBwYXlsb2FkLCBleHBhbnNpb25fc2VydmljZT1Ob25lKToKICAgICIiIldyYXBwZXIgZm9yIGFuIGV4dGVybmFsIHRyYW5zZm9ybSB3aXRoIHRoZSBnaXZlbiB1cm4gYW5kIHBheWxvYWQuCgogICAgOnBhcmFtIHVybjogdGhlIHVuaXF1ZSBiZWFtIGlkZW50aWZpZXIgZm9yIHRoaXMgdHJhbnNmb3JtCiAgICA6cGFyYW0gcGF5bG9hZDogdGhlIHBheWxvYWQsIGVpdGhlciBhcyBhIGJ5dGUgc3RyaW5nIG9yIGEgUGF5bG9hZEJ1aWxkZXIKICAgIDpwYXJhbSBleHBhbnNpb25fc2VydmljZTogYW4gZXhwYW5zaW9uIHNlcnZpY2UgaW1wbGVtZW50aW5nIHRoZSBiZWFtCiAgICAgICAgRXhwYW5zaW9uU2VydmljZSBwcm90b2NvbCwgZWl0aGVyIGFzIGFuIG9iamVjdCB3aXRoIGFuIEV4cGFuZCBtZXRob2QKICAgICAgICBvciBhbiBhZGRyZXNzIChhcyBhIHN0cikgdG8gYSBncnBjIHNlcnZlciB0aGF0IHByb3ZpZGVzIHRoaXMgbWV0aG9kLgogICAgIiIiCiAgICBleHBhbnNpb25fc2VydmljZSA9IGV4cGFuc2lvbl9zZXJ2aWNlIG9yIERFRkFVTFRfRVhQQU5TSU9OX1NFUlZJQ0UKICAgIGlmIGdycGMgaXMgTm9uZSBhbmQgaXNpbnN0YW5jZShleHBhbnNpb25fc2VydmljZSwgc3RyKToKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignR3JwYyByZXF1aXJlZCBmb3IgZXh0ZXJuYWwgdHJhbnNmb3Jtcy4nKQogICAgc2VsZi5fdXJuID0gdXJuCiAgICBzZWxmLl9wYXlsb2FkID0gKAogICAgICAgIHBheWxvYWQucGF5bG9hZCgpIGlmIGlzaW5zdGFuY2UocGF5bG9hZCwgUGF5bG9hZEJ1aWxkZXIpIGVsc2UgcGF5bG9hZCkKICAgIHNlbGYuX2V4cGFuc2lvbl9zZXJ2aWNlID0gZXhwYW5zaW9uX3NlcnZpY2UKICAgIHNlbGYuX25hbWVzcGFjZSA9IHNlbGYuX2ZyZXNoX25hbWVzcGFjZSgpCiAgICBzZWxmLl9pbnB1dHMgPSB7fSAgIyB0eXBlOiBEaWN0W3N0ciwgcHZhbHVlLlBDb2xsZWN0aW9uXQogICAgc2VsZi5fb3V0cHV0ID0ge30gICMgdHlwZTogRGljdFtzdHIsIHB2YWx1ZS5QQ29sbGVjdGlvbl0KCiAgZGVmIF9fcG9zdF9pbml0X18oc2VsZiwgZXhwYW5zaW9uX3NlcnZpY2UpOgogICAgIiIiCiAgICBUaGlzIHdpbGwgb25seSBiZSBpbnZva2VkIGlmIEV4dGVybmFsVHJhbnNmb3JtIGlzIHVzZWQgYXMgYSBiYXNlIGNsYXNzCiAgICBmb3IgYSBjbGFzcyBkZWNvcmF0ZWQgd2l0aCBkYXRhY2xhc3Nlcy5kYXRhY2xhc3MKICAgICIiIgogICAgRXh0ZXJuYWxUcmFuc2Zvcm0uX19pbml0X18oCiAgICAgICAgc2VsZiwgc2VsZi5VUk4sIERhdGFjbGFzc0Jhc2VkUGF5bG9hZEJ1aWxkZXIoc2VsZiksIGV4cGFuc2lvbl9zZXJ2aWNlKQoKICBkZWYgZGVmYXVsdF9sYWJlbChzZWxmKToKICAgIHJldHVybiAnJXMoJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fdXJuKQoKICBAY2xhc3NtZXRob2QKICBkZWYgZ2V0X2xvY2FsX25hbWVzcGFjZShjbHMpOgogICAgcmV0dXJuIGdldGF0dHIoY2xzLl9uYW1lc3BhY2UsICd2YWx1ZScsICdleHRlcm5hbCcpCgogIEBjbGFzc21ldGhvZAogIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiAgZGVmIG91dGVyX25hbWVzcGFjZShjbHMsIG5hbWVzcGFjZSk6CiAgICBwcmV2ID0gY2xzLmdldF9sb2NhbF9uYW1lc3BhY2UoKQogICAgY2xzLl9uYW1lc3BhY2UudmFsdWUgPSBuYW1lc3BhY2UKICAgIHlpZWxkCiAgICBjbHMuX25hbWVzcGFjZS52YWx1ZSA9IHByZXYKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9mcmVzaF9uYW1lc3BhY2UoY2xzKToKICAgICMgdHlwZTogKCkgLT4gc3RyCiAgICBFeHRlcm5hbFRyYW5zZm9ybS5fbmFtZXNwYWNlX2NvdW50ZXIgKz0gMQogICAgcmV0dXJuICclc18lZCcgJSAoY2xzLmdldF9sb2NhbF9uYW1lc3BhY2UoKSwgY2xzLl9uYW1lc3BhY2VfY291bnRlcikKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWVpc2gpOgogICAgIyB0eXBlOiAocHZhbHVlLlBDb2xsZWN0aW9uKSAtPiBwdmFsdWUuUENvbGxlY3Rpb24KICAgIGlmIGlzaW5zdGFuY2UocHZhbHVlaXNoLCBwdmFsdWUuUEJlZ2luKToKICAgICAgc2VsZi5faW5wdXRzID0ge30KICAgIGVsaWYgaXNpbnN0YW5jZShwdmFsdWVpc2gsIChsaXN0LCB0dXBsZSkpOgogICAgICBzZWxmLl9pbnB1dHMgPSB7c3RyKGl4KTogcHZhbHVlIGZvciBpeCwgcHZhbHVlIGluIGVudW1lcmF0ZShwdmFsdWVpc2gpfQogICAgZWxpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgZGljdCk6CiAgICAgIHNlbGYuX2lucHV0cyA9IHB2YWx1ZWlzaAogICAgZWxzZToKICAgICAgc2VsZi5faW5wdXRzID0geydpbnB1dCc6IHB2YWx1ZWlzaH0KICAgIHBpcGVsaW5lID0gKAogICAgICAgIG5leHQoaXRlcihzZWxmLl9pbnB1dHMudmFsdWVzKCkpKS5waXBlbGluZQogICAgICAgIGlmIHNlbGYuX2lucHV0cyBlbHNlIHB2YWx1ZWlzaC5waXBlbGluZSkKICAgIGNvbnRleHQgPSBwaXBlbGluZV9jb250ZXh0LlBpcGVsaW5lQ29udGV4dCgpCiAgICB0cmFuc2Zvcm1fcHJvdG8gPSBiZWFtX3J1bm5lcl9hcGlfcGIyLlBUcmFuc2Zvcm0oCiAgICAgICAgdW5pcXVlX25hbWU9cGlwZWxpbmUuX2N1cnJlbnRfdHJhbnNmb3JtKCkuZnVsbF9sYWJlbCwKICAgICAgICBzcGVjPWJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjKAogICAgICAgICAgICB1cm49c2VsZi5fdXJuLCBwYXlsb2FkPXNlbGYuX3BheWxvYWQpKQogICAgZm9yIHRhZywgcGNvbGwgaW4gc2VsZi5faW5wdXRzLml0ZW1zKCk6CiAgICAgIHRyYW5zZm9ybV9wcm90by5pbnB1dHNbdGFnXSA9IGNvbnRleHQucGNvbGxlY3Rpb25zLmdldF9pZChwY29sbCkKICAgICAgIyBDb252ZXJzaW9uIHRvL2Zyb20gcHJvdG8gYXNzdW1lcyBwcm9kdWNlcnMuCiAgICAgICMgVE9ETzogUG9zc2libHkgbG9vc2VuIHRoaXMuCiAgICAgIGNvbnRleHQudHJhbnNmb3Jtcy5wdXRfcHJvdG8oCiAgICAgICAgICAnJXNfJXMnICUgKHNlbGYuX0lNUFVMU0VfUFJFRklYLCB0YWcpLAogICAgICAgICAgYmVhbV9ydW5uZXJfYXBpX3BiMi5QVHJhbnNmb3JtKAogICAgICAgICAgICAgIHVuaXF1ZV9uYW1lPSclc18lcycgJSAoc2VsZi5fSU1QVUxTRV9QUkVGSVgsIHRhZyksCiAgICAgICAgICAgICAgc3BlYz1iZWFtX3J1bm5lcl9hcGlfcGIyLkZ1bmN0aW9uU3BlYygKICAgICAgICAgICAgICAgICAgdXJuPWNvbW1vbl91cm5zLnByaW1pdGl2ZXMuSU1QVUxTRS51cm4pLAogICAgICAgICAgICAgIG91dHB1dHM9eydvdXQnOiB0cmFuc2Zvcm1fcHJvdG8uaW5wdXRzW3RhZ119KSkKICAgIGNvbXBvbmVudHMgPSBjb250ZXh0LnRvX3J1bm5lcl9hcGkoKQogICAgcmVxdWVzdCA9IGJlYW1fZXhwYW5zaW9uX2FwaV9wYjIuRXhwYW5zaW9uUmVxdWVzdCgKICAgICAgICBjb21wb25lbnRzPWNvbXBvbmVudHMsCiAgICAgICAgbmFtZXNwYWNlPXNlbGYuX25hbWVzcGFjZSwgICMgdHlwZTogaWdub3JlICAjIG15cHkgdGhpbmtzIHNlbGYuX25hbWVzcGFjZSBpcyB0aHJlYWRpbmcubG9jYWwKICAgICAgICB0cmFuc2Zvcm09dHJhbnNmb3JtX3Byb3RvKQoKICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5fZXhwYW5zaW9uX3NlcnZpY2UsIHN0cik6CiAgICAgICMgU29tZSBlbnZpcm9ubWVudHMgbWF5IG5vdCBzdXBwb3J0IHVuc2VjdXJlIGNoYW5uZWxzLiBIZW5jZSB1c2luZyBhCiAgICAgICMgc2VjdXJlIGNoYW5uZWwgd2l0aCBsb2NhbCBjcmVkZW50aWFscyBoZXJlLgogICAgICAjIFRPRE86IHVwZGF0ZSB0aGlzIHRvIHN1cHBvcnQgc2VjdXJlIG5vbi1sb2NhbCBjaGFubmVscy4KICAgICAgY2hhbm5lbF9jcmVkcyA9IGdycGMubG9jYWxfY2hhbm5lbF9jcmVkZW50aWFscygpCiAgICAgIHdpdGggZ3JwYy5zZWN1cmVfY2hhbm5lbChzZWxmLl9leHBhbnNpb25fc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfY3JlZHMpIGFzIGNoYW5uZWw6CiAgICAgICAgcmVzcG9uc2UgPSBiZWFtX2V4cGFuc2lvbl9hcGlfcGIyX2dycGMuRXhwYW5zaW9uU2VydmljZVN0dWIoCiAgICAgICAgICAgIGNoYW5uZWwpLkV4cGFuZChyZXF1ZXN0KQogICAgZWxzZToKICAgICAgcmVzcG9uc2UgPSBzZWxmLl9leHBhbnNpb25fc2VydmljZS5FeHBhbmQocmVxdWVzdCwgTm9uZSkKCiAgICBpZiByZXNwb25zZS5lcnJvcjoKICAgICAgcmFpc2UgUnVudGltZUVycm9yKHJlc3BvbnNlLmVycm9yKQogICAgc2VsZi5fZXhwYW5kZWRfY29tcG9uZW50cyA9IHJlc3BvbnNlLmNvbXBvbmVudHMKICAgIHNlbGYuX2V4cGFuZGVkX3RyYW5zZm9ybSA9IHJlc3BvbnNlLnRyYW5zZm9ybQogICAgc2VsZi5fZXhwYW5kZWRfcmVxdWlyZW1lbnRzID0gcmVzcG9uc2UucmVxdWlyZW1lbnRzCiAgICByZXN1bHRfY29udGV4dCA9IHBpcGVsaW5lX2NvbnRleHQuUGlwZWxpbmVDb250ZXh0KHJlc3BvbnNlLmNvbXBvbmVudHMpCgogICAgZGVmIGZpeF9vdXRwdXQocGNvbGwsIHRhZyk6CiAgICAgIHBjb2xsLnBpcGVsaW5lID0gcGlwZWxpbmUKICAgICAgcGNvbGwudGFnID0gdGFnCiAgICAgIHJldHVybiBwY29sbAoKICAgIHNlbGYuX291dHB1dHMgPSB7CiAgICAgICAgdGFnOiBmaXhfb3V0cHV0KHJlc3VsdF9jb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfYnlfaWQocGNvbGxfaWQpLCB0YWcpCiAgICAgICAgZm9yIHRhZywKICAgICAgICBwY29sbF9pZCBpbiBzZWxmLl9leHBhbmRlZF90cmFuc2Zvcm0ub3V0cHV0cy5pdGVtcygpCiAgICB9CgogICAgcmV0dXJuIHNlbGYuX291dHB1dF90b19wdmFsdWVpc2goc2VsZi5fb3V0cHV0cykKCiAgZGVmIF9vdXRwdXRfdG9fcHZhbHVlaXNoKHNlbGYsIG91dHB1dF9kaWN0KToKICAgIGlmIGxlbihvdXRwdXRfZGljdCkgPT0gMToKICAgICAgcmV0dXJuIG5leHQoaXRlcihvdXRwdXRfZGljdC52YWx1ZXMoKSkpCiAgICBlbHNlOgogICAgICByZXR1cm4gb3V0cHV0X2RpY3QKCiAgZGVmIHRvX3J1bm5lcl9hcGlfdHJhbnNmb3JtKHNlbGYsIGNvbnRleHQsIGZ1bGxfbGFiZWwpOgogICAgcGNvbGxfcmVuYW1lcyA9IHt9CiAgICByZW5hbWVkX3RhZ19zZWVuID0gRmFsc2UKICAgIGZvciB0YWcsIHBjb2xsIGluIHNlbGYuX2lucHV0cy5pdGVtcygpOgogICAgICBpZiB0YWcgbm90IGluIHNlbGYuX2V4cGFuZGVkX3RyYW5zZm9ybS5pbnB1dHM6CiAgICAgICAgaWYgcmVuYW1lZF90YWdfc2VlbjoKICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgICAnQW1iaWd1aXR5IGR1ZSB0byBub24tcHJlc2VydmVkIHRhZ3M6ICVzIHZzICVzJyAlICgKICAgICAgICAgICAgICAgICAgc29ydGVkKHNlbGYuX2V4cGFuZGVkX3RyYW5zZm9ybS5pbnB1dHMua2V5cygpKSwKICAgICAgICAgICAgICAgICAgc29ydGVkKHNlbGYuX2lucHV0cy5rZXlzKCkpKSkKICAgICAgICBlbHNlOgogICAgICAgICAgcmVuYW1lZF90YWdfc2VlbiA9IFRydWUKICAgICAgICAgIHRhZywgPSBzZWxmLl9leHBhbmRlZF90cmFuc2Zvcm0uaW5wdXRzLmtleXMoKQogICAgICBwY29sbF9yZW5hbWVzW3NlbGYuX2V4cGFuZGVkX3RyYW5zZm9ybS5pbnB1dHNbdGFnXV0gPSAoCiAgICAgICAgICBjb250ZXh0LnBjb2xsZWN0aW9ucy5nZXRfaWQocGNvbGwpKQogICAgZm9yIHRhZywgcGNvbGwgaW4gc2VsZi5fb3V0cHV0cy5pdGVtcygpOgogICAgICBwY29sbF9yZW5hbWVzW3NlbGYuX2V4cGFuZGVkX3RyYW5zZm9ybS5vdXRwdXRzW3RhZ11dID0gKAogICAgICAgICAgY29udGV4dC5wY29sbGVjdGlvbnMuZ2V0X2lkKHBjb2xsKSkKCiAgICBkZWYgX2VxdWl2YWxlbnQoY29kZXIxLCBjb2RlcjIpOgogICAgICByZXR1cm4gY29kZXIxID09IGNvZGVyMiBvciBfbm9ybWFsaXplKGNvZGVyMSkgPT0gX25vcm1hbGl6ZShjb2RlcjIpCgogICAgZGVmIF9ub3JtYWxpemUoY29kZXJfcHJvdG8pOgogICAgICBub3JtYWxpemVkID0gY29weS5jb3B5KGNvZGVyX3Byb3RvKQogICAgICBub3JtYWxpemVkLnNwZWMuZW52aXJvbm1lbnRfaWQgPSAnJwogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBOb3JtYWxpemUgY29tcG9uZW50cyBhcyB3ZWxsLgogICAgICByZXR1cm4gbm9ybWFsaXplZAoKICAgIGZvciBpZCwgcHJvdG8gaW4gc2VsZi5fZXhwYW5kZWRfY29tcG9uZW50cy5jb2RlcnMuaXRlbXMoKToKICAgICAgaWYgaWQuc3RhcnRzd2l0aChzZWxmLl9uYW1lc3BhY2UpOgogICAgICAgIGNvbnRleHQuY29kZXJzLnB1dF9wcm90byhpZCwgcHJvdG8pCiAgICAgIGVsaWYgaWQgaW4gY29udGV4dC5jb2RlcnM6CiAgICAgICAgaWYgbm90IF9lcXVpdmFsZW50KGNvbnRleHQuY29kZXJzLl9pZF90b19wcm90b1tpZF0sIHByb3RvKToKICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgICAnUmUtdXNlZCBjb2RlciBpZDogJXNcbiVzXG4lcycgJQogICAgICAgICAgICAgIChpZCwgY29udGV4dC5jb2RlcnMuX2lkX3RvX3Byb3RvW2lkXSwgcHJvdG8pKQogICAgICBlbHNlOgogICAgICAgIGNvbnRleHQuY29kZXJzLnB1dF9wcm90byhpZCwgcHJvdG8pCiAgICBmb3IgaWQsIHByb3RvIGluIHNlbGYuX2V4cGFuZGVkX2NvbXBvbmVudHMud2luZG93aW5nX3N0cmF0ZWdpZXMuaXRlbXMoKToKICAgICAgaWYgaWQuc3RhcnRzd2l0aChzZWxmLl9uYW1lc3BhY2UpOgogICAgICAgIGNvbnRleHQud2luZG93aW5nX3N0cmF0ZWdpZXMucHV0X3Byb3RvKGlkLCBwcm90bykKICAgIGZvciBpZCwgcHJvdG8gaW4gc2VsZi5fZXhwYW5kZWRfY29tcG9uZW50cy5lbnZpcm9ubWVudHMuaXRlbXMoKToKICAgICAgaWYgaWQuc3RhcnRzd2l0aChzZWxmLl9uYW1lc3BhY2UpOgogICAgICAgIGNvbnRleHQuZW52aXJvbm1lbnRzLnB1dF9wcm90byhpZCwgcHJvdG8pCiAgICBmb3IgaWQsIHByb3RvIGluIHNlbGYuX2V4cGFuZGVkX2NvbXBvbmVudHMucGNvbGxlY3Rpb25zLml0ZW1zKCk6CiAgICAgIGlkID0gcGNvbGxfcmVuYW1lcy5nZXQoaWQsIGlkKQogICAgICBpZiBpZCBub3QgaW4gY29udGV4dC5wY29sbGVjdGlvbnMuX2lkX3RvX29iai5rZXlzKCk6CiAgICAgICAgY29udGV4dC5wY29sbGVjdGlvbnMucHV0X3Byb3RvKGlkLCBwcm90bykKCiAgICBmb3IgaWQsIHByb3RvIGluIHNlbGYuX2V4cGFuZGVkX2NvbXBvbmVudHMudHJhbnNmb3Jtcy5pdGVtcygpOgogICAgICBpZiBpZC5zdGFydHN3aXRoKHNlbGYuX0lNUFVMU0VfUFJFRklYKToKICAgICAgICAjIE91ciBmYWtlIGlucHV0cy4KICAgICAgICBjb250aW51ZQogICAgICBhc3NlcnQgaWQuc3RhcnRzd2l0aChzZWxmLl9uYW1lc3BhY2UpLCAoaWQsIHNlbGYuX25hbWVzcGFjZSkKICAgICAgbmV3X3Byb3RvID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5QVHJhbnNmb3JtKAogICAgICAgICAgdW5pcXVlX25hbWU9cHJvdG8udW5pcXVlX25hbWUsCiAgICAgICAgICBzcGVjPXByb3RvLnNwZWMsCiAgICAgICAgICBzdWJ0cmFuc2Zvcm1zPXByb3RvLnN1YnRyYW5zZm9ybXMsCiAgICAgICAgICBpbnB1dHM9ewogICAgICAgICAgICAgIHRhZzogcGNvbGxfcmVuYW1lcy5nZXQocGNvbGwsIHBjb2xsKQogICAgICAgICAgICAgIGZvciB0YWcsCiAgICAgICAgICAgICAgcGNvbGwgaW4gcHJvdG8uaW5wdXRzLml0ZW1zKCkKICAgICAgICAgIH0sCiAgICAgICAgICBvdXRwdXRzPXsKICAgICAgICAgICAgICB0YWc6IHBjb2xsX3JlbmFtZXMuZ2V0KHBjb2xsLCBwY29sbCkKICAgICAgICAgICAgICBmb3IgdGFnLAogICAgICAgICAgICAgIHBjb2xsIGluIHByb3RvLm91dHB1dHMuaXRlbXMoKQogICAgICAgICAgfSwKICAgICAgICAgIGVudmlyb25tZW50X2lkPXByb3RvLmVudmlyb25tZW50X2lkKQogICAgICBjb250ZXh0LnRyYW5zZm9ybXMucHV0X3Byb3RvKGlkLCBuZXdfcHJvdG8pCgogICAgZm9yIHJlcXVpcmVtZW50IGluIHNlbGYuX2V4cGFuZGVkX3JlcXVpcmVtZW50czoKICAgICAgY29udGV4dC5hZGRfcmVxdWlyZW1lbnQocmVxdWlyZW1lbnQpCgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuUFRyYW5zZm9ybSgKICAgICAgICB1bmlxdWVfbmFtZT1mdWxsX2xhYmVsLAogICAgICAgIHNwZWM9c2VsZi5fZXhwYW5kZWRfdHJhbnNmb3JtLnNwZWMsCiAgICAgICAgc3VidHJhbnNmb3Jtcz1zZWxmLl9leHBhbmRlZF90cmFuc2Zvcm0uc3VidHJhbnNmb3JtcywKICAgICAgICBpbnB1dHM9ewogICAgICAgICAgICB0YWc6IHBjb2xsX3JlbmFtZXMuZ2V0KHBjb2xsLCBwY29sbCkKICAgICAgICAgICAgZm9yIHRhZywKICAgICAgICAgICAgcGNvbGwgaW4gc2VsZi5fZXhwYW5kZWRfdHJhbnNmb3JtLmlucHV0cy5pdGVtcygpCiAgICAgICAgfSwKICAgICAgICBvdXRwdXRzPXsKICAgICAgICAgICAgdGFnOiBwY29sbF9yZW5hbWVzLmdldChwY29sbCwgcGNvbGwpCiAgICAgICAgICAgIGZvciB0YWcsCiAgICAgICAgICAgIHBjb2xsIGluIHNlbGYuX2V4cGFuZGVkX3RyYW5zZm9ybS5vdXRwdXRzLml0ZW1zKCkKICAgICAgICB9LAogICAgICAgIGVudmlyb25tZW50X2lkPXNlbGYuX2V4cGFuZGVkX3RyYW5zZm9ybS5lbnZpcm9ubWVudF9pZCkKCgpjbGFzcyBKYXZhSmFyRXhwYW5zaW9uU2VydmljZShvYmplY3QpOgogICIiIkFuIGV4cGFuc2lvbiBzZXJ2aWNlIGJhc2VkIG9uIGFuIEphdmEgSmFyIGZpbGUuCgogIFRoaXMgY2FuIGJlIHBhc3NlZCBpbnRvIGFuIEV4dGVybmFsVHJhbnNmb3JtIGFzIHRoZSBleHBhbnNpb25fc2VydmljZQogIGFyZ3VtZW50IHdoaWNoIHdpbGwgc3Bhd24gYSBzdWJwcm9jZXNzIHVzaW5nIHRoaXMgamFyIHRvIGV4cGFuZCB0aGUKICB0cmFuc2Zvcm0uCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGhfdG9famFyLCBleHRyYV9hcmdzPU5vbmUpOgogICAgaWYgZXh0cmFfYXJncyBpcyBOb25lOgogICAgICBleHRyYV9hcmdzID0gWyd7e1BPUlR9fSddCiAgICBzZWxmLl9wYXRoX3RvX2phciA9IHBhdGhfdG9famFyCiAgICBzZWxmLl9leHRyYV9hcmdzID0gZXh0cmFfYXJncwoKICBkZWYgRXhwYW5kKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgc2VsZi5fcGF0aF90b19qYXIgPSBzdWJwcm9jZXNzX3NlcnZlci5KYXZhSmFyU2VydmVyLmxvY2FsX2phcigKICAgICAgICBzZWxmLl9wYXRoX3RvX2phcikKICAgICMgQ29uc2lkZXIgbWVtb2l6aW5nIHRoZXNlIHNlcnZlcnMgKHdpdGggc29tZSB0aW1lb3V0KS4KICAgIHdpdGggc3VicHJvY2Vzc19zZXJ2ZXIuSmF2YUphclNlcnZlcigKICAgICAgICBiZWFtX2V4cGFuc2lvbl9hcGlfcGIyX2dycGMuRXhwYW5zaW9uU2VydmljZVN0dWIsCiAgICAgICAgc2VsZi5fcGF0aF90b19qYXIsCiAgICAgICAgc2VsZi5fZXh0cmFfYXJncykgYXMgc2VydmljZToKICAgICAgcmV0dXJuIHNlcnZpY2UuRXhwYW5kKHJlcXVlc3QsIGNvbnRleHQpCgoKY2xhc3MgQmVhbUphckV4cGFuc2lvblNlcnZpY2UoSmF2YUphckV4cGFuc2lvblNlcnZpY2UpOgogICIiIkFuIGV4cGFuc2lvbiBzZXJ2aWNlIGJhc2VkIG9uIGFuIEJlYW0gSmF2YSBKYXIgZmlsZS4KCiAgQXR0ZW1wdHMgdG8gdXNlIGEgbG9jYWxseS1idWlsZCBjb3B5IG9mIHRoZSBqYXIgYmFzZWQgb24gdGhlIGdyYWRsZSB0YXJnZXQsCiAgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYXR0ZW1wdHMgdG8gZG93bmxvYWQgaXQgKHdpdGggY2FjaGluZykgZnJvbSB0aGUKICBhcGFjaGUgbWF2ZW4gcmVwb3NpdG9yeS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZ3JhZGxlX3RhcmdldCwgZXh0cmFfYXJncz1Ob25lLCBncmFkbGVfYXBwZW5kaXg9Tm9uZSk6CiAgICBwYXRoX3RvX2phciA9IHN1YnByb2Nlc3Nfc2VydmVyLkphdmFKYXJTZXJ2ZXIucGF0aF90b19iZWFtX2phcigKICAgICAgICBncmFkbGVfdGFyZ2V0LCBncmFkbGVfYXBwZW5kaXgpCiAgICBzdXBlcihCZWFtSmFyRXhwYW5zaW9uU2VydmljZSwgc2VsZikuX19pbml0X18ocGF0aF90b19qYXIsIGV4dHJhX2FyZ3MpCgoKZGVmIG1lbW9pemUoZnVuYyk6CiAgY2FjaGUgPSB7fQoKICBkZWYgd3JhcHBlcigqYXJncyk6CiAgICBpZiBhcmdzIG5vdCBpbiBjYWNoZToKICAgICAgY2FjaGVbYXJnc10gPSBmdW5jKCphcmdzKQogICAgcmV0dXJuIGNhY2hlW2FyZ3NdCgogIHJldHVybiB3cmFwcGVyCpSVOEwBAAAAAAB9lCiMFF9pc19vcHRpb25hbF9vcl9ub25llGpWMQEASztLPoeUjA9fc3RyaXBfb3B0aW9uYWyUalYxAQBLQUtHh5SMCWl0ZXJfdXJuc5RqVjEBAEtKS06HlIwcUGF5bG9hZEJ1aWxkZXIuX2NvbmZpZ192YWx1ZZRqVjEBAEtVS1+HlIwUUGF5bG9hZEJ1aWxkZXIuYnVpbGSUalYxAQBLYUtlh5SMFlBheWxvYWRCdWlsZGVyLnBheWxvYWSUalYxAQBLZ0tth5SMDlBheWxvYWRCdWlsZGVylGpdMQEAS1FLbYeUjCJTY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVyLl9faW5pdF9flGpWMQEAS3lLf4eUjChTY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVyLl9lbmNvZGVfY29uZmlnlGpWMQEAS4FLmYeUjB9TY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVyLmJ1aWxklGpWMQEAS5tLoIeUjBlTY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVylGpdMQEAS3BLoIeUjCVJbXBsaWNpdFNjaGVtYVBheWxvYWRCdWlsZGVyLl9faW5pdF9flGpWMQEAS6dLqYeUjBxJbXBsaWNpdFNjaGVtYVBheWxvYWRCdWlsZGVylGpdMQEAS6NLqYeUjCZOYW1lZFR1cGxlQmFzZWRQYXlsb2FkQnVpbGRlci5fX2luaXRfX5RqVjEBAEuwS7WHlIwdTmFtZWRUdXBsZUJhc2VkUGF5bG9hZEJ1aWxkZXKUal0xAQBLrEu1h5SMJkFubm90YXRpb25CYXNlZFBheWxvYWRCdWlsZGVyLl9faW5pdF9flGpWMQEAS75LyYeUjB1Bbm5vdGF0aW9uQmFzZWRQYXlsb2FkQnVpbGRlcpRqXTEBAEu4S8mHlIwlRGF0YWNsYXNzQmFzZWRQYXlsb2FkQnVpbGRlci5fX2luaXRfX5RqVjEBAEvSS9qHlIwcRGF0YWNsYXNzQmFzZWRQYXlsb2FkQnVpbGRlcpRqXTEBAEvMS9qHlIwaRXh0ZXJuYWxUcmFuc2Zvcm0uX19pbml0X1+UalYxAQBL6Uv7h5SMH0V4dGVybmFsVHJhbnNmb3JtLl9fcG9zdF9pbml0X1+UalYxAQBL/U0DAYeUjB9FeHRlcm5hbFRyYW5zZm9ybS5kZWZhdWx0X2xhYmVslGpWMQEATQUBTQYBh5SMJUV4dGVybmFsVHJhbnNmb3JtLmdldF9sb2NhbF9uYW1lc3BhY2WUalYxAQBNCAFNCgGHlIwhRXh0ZXJuYWxUcmFuc2Zvcm0ub3V0ZXJfbmFtZXNwYWNllGpWMQEATQwBTRIBh5SMIkV4dGVybmFsVHJhbnNmb3JtLl9mcmVzaF9uYW1lc3BhY2WUalYxAQBNFAFNGAGHlIwYRXh0ZXJuYWxUcmFuc2Zvcm0uZXhwYW5klGpWMQEATRoBTVsBh5SMJkV4dGVybmFsVHJhbnNmb3JtLl9vdXRwdXRfdG9fcHZhbHVlaXNolGpWMQEATV0BTWEBh5SMKUV4dGVybmFsVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlfdHJhbnNmb3JtlGpWMQEATWMBTbsBh5SMEUV4dGVybmFsVHJhbnNmb3JtlGpdMQEAS91NuwGHlIwgSmF2YUphckV4cGFuc2lvblNlcnZpY2UuX19pbml0X1+UalYxAQBNxQFNyQGHlIweSmF2YUphckV4cGFuc2lvblNlcnZpY2UuRXhwYW5klGpWMQEATcsBTdMBh5SMF0phdmFKYXJFeHBhbnNpb25TZXJ2aWNllGpdMQEATb4BTdMBh5SMIEJlYW1KYXJFeHBhbnNpb25TZXJ2aWNlLl9faW5pdF9flGpWMQEATd0BTeABh5SMF0JlYW1KYXJFeHBhbnNpb25TZXJ2aWNllGpdMQEATdYBTeABh5SMB21lbW9pemWUalYxAQBN4wFN6wGHlHV9lCiMCWl0ZXJfdXJuc5RqEAQAAIwOUGF5bG9hZEJ1aWxkZXKUahAEAACMFFBheWxvYWRCdWlsZGVyLmJ1aWxklGoQBAAAjBZQYXlsb2FkQnVpbGRlci5wYXlsb2FklGoQBAAAjBlTY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVylGoQBAAAjB9TY2hlbWFCYXNlZFBheWxvYWRCdWlsZGVyLmJ1aWxklGoQBAAAjBxJbXBsaWNpdFNjaGVtYVBheWxvYWRCdWlsZGVylGoQBAAAjB1OYW1lZFR1cGxlQmFzZWRQYXlsb2FkQnVpbGRlcpRqEAQAAIwdQW5ub3RhdGlvbkJhc2VkUGF5bG9hZEJ1aWxkZXKUahAEAACMHERhdGFjbGFzc0Jhc2VkUGF5bG9hZEJ1aWxkZXKUahAEAACMEUV4dGVybmFsVHJhbnNmb3JtlGoQBAAAjB9FeHRlcm5hbFRyYW5zZm9ybS5kZWZhdWx0X2xhYmVslGoQBAAAjCVFeHRlcm5hbFRyYW5zZm9ybS5nZXRfbG9jYWxfbmFtZXNwYWNllGoQBAAAjCFFeHRlcm5hbFRyYW5zZm9ybS5vdXRlcl9uYW1lc3BhY2WUahAEAACMGEV4dGVybmFsVHJhbnNmb3JtLmV4cGFuZJRqEAQAAIwpRXh0ZXJuYWxUcmFuc2Zvcm0udG9fcnVubmVyX2FwaV90cmFuc2Zvcm2UahAEAACMF0phdmFKYXJFeHBhbnNpb25TZXJ2aWNllGoQBAAAjB5KYXZhSmFyRXhwYW5zaW9uU2VydmljZS5FeHBhbmSUahAEAACMF0JlYW1KYXJFeHBhbnNpb25TZXJ2aWNllGoQBAAAjAdtZW1vaXpllGoQBAAAdYwfYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbJR0lIwkYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF9qYXZhlChYgRkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVGVzdHMgZm9yIHRoZSBKYXZhIGV4dGVybmFsIHRyYW5zZm9ybXMuIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGFyZ3BhcnNlCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBzeXMKCmltcG9ydCBncnBjCmZyb20gbW9jayBpbXBvcnQgcGF0Y2gKZnJvbSBwYXN0LmJ1aWx0aW5zIGltcG9ydCB1bmljb2RlCgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLm9wdGlvbnMucGlwZWxpbmVfb3B0aW9ucyBpbXBvcnQgUGlwZWxpbmVPcHRpb25zCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy50ZXN0X3BpcGVsaW5lIGltcG9ydCBUZXN0UGlwZWxpbmUKZnJvbSBhcGFjaGVfYmVhbS50ZXN0aW5nLnV0aWwgaW1wb3J0IGFzc2VydF90aGF0CmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy51dGlsIGltcG9ydCBlcXVhbF90bwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwgaW1wb3J0IEltcGxpY2l0U2NoZW1hUGF5bG9hZEJ1aWxkZXIKCiMgUHJvdGVjdCBhZ2FpbnN0IGVudmlyb25tZW50cyB3aGVyZSBhcGl0b29scyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUuCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCnRyeToKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuZGF0YWZsb3cuaW50ZXJuYWwgaW1wb3J0IGFwaWNsaWVudApleGNlcHQgSW1wb3J0RXJyb3I6CiAgYXBpY2xpZW50ID0gTm9uZQojIHB5bGludDogZW5hYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCgoKY2xhc3MgSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdChvYmplY3QpOgoKICAjIFRoaXMgd2lsbCBiZSBvdmVyd3JpdHRlbiBpZiBzZXQgdmlhIGEgZmxhZy4KICBleHBhbnNpb25fc2VydmljZV9qYXIgPSBOb25lCiAgZXhwYW5zaW9uX3NlcnZpY2VfcG9ydCA9IE5vbmUKCiAgY2xhc3MgX1J1bldpdGhFeHBhbnNpb24ob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgc2VsZi5fc2VydmVyID0gTm9uZQoKICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgIGlmIG5vdCAoSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5leHBhbnNpb25fc2VydmljZV9qYXIgb3IKICAgICAgICAgICAgICBKYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0LmV4cGFuc2lvbl9zZXJ2aWNlX3BvcnQpOgogICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm8gZXhwYW5zaW9uIHNlcnZpY2UgamFyIG9yIHBvcnQgcHJvdmlkZWQuJykKCiAgICAgIEphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QuZXhwYW5zaW9uX3NlcnZpY2VfcG9ydCA9ICgKICAgICAgICAgIEphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QuZXhwYW5zaW9uX3NlcnZpY2VfcG9ydCBvciA4MDkxKQoKICAgICAgamFyID0gSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5leHBhbnNpb25fc2VydmljZV9qYXIKICAgICAgcG9ydCA9IEphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QuZXhwYW5zaW9uX3NlcnZpY2VfcG9ydAoKICAgICAgIyBTdGFydCB0aGUgamF2YSBzZXJ2ZXIgYW5kIHdhaXQgZm9yIGl0IHRvIGJlIHJlYWR5LgogICAgICBpZiBqYXI6CiAgICAgICAgc2VsZi5fc2VydmVyID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2phdmEnLCAnLWphcicsIGphciwgc3RyKHBvcnQpXSkKCiAgICAgIGFkZHJlc3MgPSAnbG9jYWxob3N0OiVzJyAlIHN0cihwb3J0KQoKICAgICAgd2l0aCBncnBjLmluc2VjdXJlX2NoYW5uZWwoYWRkcmVzcykgYXMgY2hhbm5lbDoKICAgICAgICBncnBjLmNoYW5uZWxfcmVhZHlfZnV0dXJlKGNoYW5uZWwpLnJlc3VsdCgpCgogICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgogICAgICBpZiBzZWxmLl9zZXJ2ZXI6CiAgICAgICAgc2VsZi5fc2VydmVyLmtpbGwoKQogICAgICAgIHNlbGYuX3NlcnZlciA9IE5vbmUKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB0ZXN0X2phdmFfZXhwYW5zaW9uX2RhdGFmbG93KCk6CiAgICBpZiBhcGljbGllbnQgaXMgTm9uZToKICAgICAgcmV0dXJuCgogICAgIyBUaGlzIHRlc3QgZG9lcyBub3QgYWN0dWFsbHkgcnVubmluZyB0aGUgcGlwZWxpbmUgaW4gRGF0YWZsb3cuIEl0IGp1c3QKICAgICMgdGVzdHMgdGhlIHRyYW5zbGF0aW9uIHRvIGEgRGF0YWZsb3cgam9iIHJlcXVlc3QuCgogICAgd2l0aCBwYXRjaC5vYmplY3QoYXBpY2xpZW50LkRhdGFmbG93QXBwbGljYXRpb25DbGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlX2pvYicpIGFzIG1vY2tfY3JlYXRlX2pvYjoKICAgICAgd2l0aCBKYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0Ll9SdW5XaXRoRXhwYW5zaW9uKCk6CiAgICAgICAgcGlwZWxpbmVfb3B0aW9ucyA9IFBpcGVsaW5lT3B0aW9ucyhbCiAgICAgICAgICAgICctLXJ1bm5lcj1EYXRhZmxvd1J1bm5lcicsCiAgICAgICAgICAgICctLXByb2plY3Q9ZHVtbXlwcm9qZWN0JywKICAgICAgICAgICAgJy0tZXhwZXJpbWVudHM9YmVhbV9mbl9hcGknLAogICAgICAgICAgICAnLS10ZW1wX2xvY2F0aW9uPWdzOi8vZHVtbXlidWNrZXQvJwogICAgICAgIF0pCgogICAgICAgICMgUnVuIGEgc2ltcGxlIGNvdW50LWZpbHRlcmVkLWxldHRlcnMgcGlwZWxpbmUuCiAgICAgICAgSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5ydW5fcGlwZWxpbmUoCiAgICAgICAgICAgIHBpcGVsaW5lX29wdGlvbnMsCiAgICAgICAgICAgIEphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QuZXhwYW5zaW9uX3NlcnZpY2VfcG9ydCwKICAgICAgICAgICAgRmFsc2UpCgogICAgICAgIG1vY2tfYXJncyA9IG1vY2tfY3JlYXRlX2pvYi5jYWxsX2FyZ3NfbGlzdAogICAgICAgIGFzc2VydCBtb2NrX2FyZ3MKICAgICAgICBhcmdzLCBrd2FyZ3MgPSBtb2NrX2FyZ3NbMF0KICAgICAgICBqb2IgPSBhcmdzWzBdCiAgICAgICAgam9iX3N0ciA9ICclcycgJSBqb2IKICAgICAgICBhc3NlcnQgJ2JlYW06dHJhbnNmb3Jtczp4bGFuZzpmaWx0ZXJfbGVzc190aGFuX2VxJyBpbiBqb2Jfc3RyCgogIEBzdGF0aWNtZXRob2QKICBkZWYgcnVuX3BpcGVsaW5lX3dpdGhfZXhwYW5zaW9uX3NlcnZpY2UocGlwZWxpbmVfb3B0aW9ucyk6CiAgICB3aXRoIEphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QuX1J1bldpdGhFeHBhbnNpb24oKToKICAgICAgIyBSdW4gYSBzaW1wbGUgY291bnQtZmlsdGVyZWQtbGV0dGVycyBwaXBlbGluZS4KICAgICAgSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5ydW5fcGlwZWxpbmUoCiAgICAgICAgICBwaXBlbGluZV9vcHRpb25zLAogICAgICAgICAgSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5leHBhbnNpb25fc2VydmljZV9wb3J0LAogICAgICAgICAgVHJ1ZSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBydW5fcGlwZWxpbmUocGlwZWxpbmVfb3B0aW9ucywgZXhwYW5zaW9uX3NlcnZpY2UsIHdhaXRfdW50aWxfZmluaXNoPVRydWUpOgogICAgIyBUaGUgYWN0dWFsIGRlZmluaXRpb25zIG9mIHRoZXNlIHRyYW5zZm9ybXMgaXMgaW4KICAgICMgb3JnLmFwYWNoZS5iZWFtLnJ1bm5lcnMuY29yZS5jb25zdHJ1Y3Rpb24uVGVzdEV4cGFuc2lvblNlcnZpY2UuCiAgICBURVNUX0NPVU5UX1VSTiA9ICJiZWFtOnRyYW5zZm9ybXM6eGxhbmc6Y291bnQiCiAgICBURVNUX0ZJTFRFUl9VUk4gPSAiYmVhbTp0cmFuc2Zvcm1zOnhsYW5nOmZpbHRlcl9sZXNzX3RoYW5fZXEiCgogICAgIyBSdW4gYSBzaW1wbGUgY291bnQtZmlsdGVyZWQtbGV0dGVycyBwaXBlbGluZS4KICAgIHAgPSBUZXN0UGlwZWxpbmUob3B0aW9ucz1waXBlbGluZV9vcHRpb25zKQoKICAgIGlmIGlzaW5zdGFuY2UoZXhwYW5zaW9uX3NlcnZpY2UsIGludCk6CiAgICAgICMgT25seSB0aGUgcG9ydCB3YXMgc3BlY2lmaWVkLgogICAgICBleHBhbnNpb25fc2VydmljZSA9ICdsb2NhbGhvc3Q6JXMnICUgc3RyKGV4cGFuc2lvbl9zZXJ2aWNlKQoKICAgIHJlcyA9ICgKICAgICAgICBwCiAgICAgICAgfCBiZWFtLkNyZWF0ZShsaXN0KCdhYWFiY2N4eXl6enonKSkKICAgICAgICB8IGJlYW0uTWFwKHVuaWNvZGUpCiAgICAgICAgfCBiZWFtLkV4dGVybmFsVHJhbnNmb3JtKAogICAgICAgICAgICBURVNUX0ZJTFRFUl9VUk4sCiAgICAgICAgICAgIEltcGxpY2l0U2NoZW1hUGF5bG9hZEJ1aWxkZXIoeydkYXRhJzogdSdtaWRkbGUnfSksCiAgICAgICAgICAgIGV4cGFuc2lvbl9zZXJ2aWNlKQogICAgICAgIHwgYmVhbS5FeHRlcm5hbFRyYW5zZm9ybShURVNUX0NPVU5UX1VSTiwgTm9uZSwgZXhwYW5zaW9uX3NlcnZpY2UpCiAgICAgICAgfCBiZWFtLk1hcChsYW1iZGEga3Y6ICclczogJXMnICUga3YpKQoKICAgIGFzc2VydF90aGF0KHJlcywgZXF1YWxfdG8oWydhOiAzJywgJ2I6IDEnLCAnYzogMiddKSkKCiAgICByZXN1bHQgPSBwLnJ1bigpCiAgICBpZiB3YWl0X3VudGlsX2ZpbmlzaDoKICAgICAgcmVzdWx0LndhaXRfdW50aWxfZmluaXNoKCkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQogIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWV4cGFuc2lvbl9zZXJ2aWNlX2phcicpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1leHBhbnNpb25fc2VydmljZV9wb3J0JykKICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWV4cGFuc2lvbl9zZXJ2aWNlX3RhcmdldCcpCiAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1leHBhbnNpb25fc2VydmljZV90YXJnZXRfYXBwZW5kaXgnKQogIGtub3duX2FyZ3MsIHBpcGVsaW5lX2FyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhzeXMuYXJndikKCiAgaWYga25vd25fYXJncy5leHBhbnNpb25fc2VydmljZV9qYXI6CiAgICBKYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0LmV4cGFuc2lvbl9zZXJ2aWNlX2phciA9ICgKICAgICAgICBrbm93bl9hcmdzLmV4cGFuc2lvbl9zZXJ2aWNlX2phcikKICAgIEphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QuZXhwYW5zaW9uX3NlcnZpY2VfcG9ydCA9IGludCgKICAgICAgICBrbm93bl9hcmdzLmV4cGFuc2lvbl9zZXJ2aWNlX3BvcnQpCiAgICBwaXBlbGluZV9vcHRpb25zID0gUGlwZWxpbmVPcHRpb25zKHBpcGVsaW5lX2FyZ3MpCiAgICBKYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0LnJ1bl9waXBlbGluZV93aXRoX2V4cGFuc2lvbl9zZXJ2aWNlKAogICAgICAgIHBpcGVsaW5lX29wdGlvbnMpCiAgZWxpZiBrbm93bl9hcmdzLmV4cGFuc2lvbl9zZXJ2aWNlX3RhcmdldDoKICAgIHBpcGVsaW5lX29wdGlvbnMgPSBQaXBlbGluZU9wdGlvbnMocGlwZWxpbmVfYXJncykKICAgIEphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QucnVuX3BpcGVsaW5lKAogICAgICAgIHBpcGVsaW5lX29wdGlvbnMsCiAgICAgICAgYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsLkJlYW1KYXJFeHBhbnNpb25TZXJ2aWNlKAogICAgICAgICAgICBrbm93bl9hcmdzLmV4cGFuc2lvbl9zZXJ2aWNlX3RhcmdldCwKICAgICAgICAgICAgZ3JhZGxlX2FwcGVuZGl4PWtub3duX2FyZ3MuZXhwYW5zaW9uX3NlcnZpY2VfdGFyZ2V0X2FwcGVuZGl4KSkKICBlbHNlOgogICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICItLWV4cGFuc2lvbl9zZXJ2aWNlX2phciBvciAtLWV4cGFuc2lvbl9zZXJ2aWNlX3RhcmdldCAiCiAgICAgICAgInNob3VsZCBiZSBwcm92aWRlZC4iKQqUfZQojDRKYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0Ll9SdW5XaXRoRXhwYW5zaW9uLl9faW5pdF9flGpWMQEASzZLN4eUjDVKYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0Ll9SdW5XaXRoRXhwYW5zaW9uLl9fZW50ZXJfX5RqVjEBAEs5S0uHlIw0SmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5fUnVuV2l0aEV4cGFuc2lvbi5fX2V4aXRfX5RqVjEBAEtNS1CHlIwrSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5fUnVuV2l0aEV4cGFuc2lvbpRqXTEBAEs1S1CHlIw2SmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC50ZXN0X2phdmFfZXhwYW5zaW9uX2RhdGFmbG93lGpWMQEAS1JLb4eUjD1KYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0LnJ1bl9waXBlbGluZV93aXRoX2V4cGFuc2lvbl9zZXJ2aWNllGpWMQEAS3FLeIeUjCZKYXZhRXh0ZXJuYWxUcmFuc2Zvcm1UZXN0LnJ1bl9waXBlbGluZZRqVjEBAEt6S5eHlIwZSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdJRqXTEBAEsvS5eHlHV9lCiMGUphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3SUau4DAACMNkphdmFFeHRlcm5hbFRyYW5zZm9ybVRlc3QudGVzdF9qYXZhX2V4cGFuc2lvbl9kYXRhZmxvd5Rq7gMAAIw9SmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5ydW5fcGlwZWxpbmVfd2l0aF9leHBhbnNpb25fc2VydmljZZRq7gMAAIwmSmF2YUV4dGVybmFsVHJhbnNmb3JtVGVzdC5ydW5fcGlwZWxpbmWUau4DAAB1jCRhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmV4dGVybmFsX2phdmGUdJSMKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTOUKFh2DQAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJVbml0IHRlc3RzIGZvciB0aGUgdHJhbnNmb3JtLmV4dGVybmFsIGNsYXNzZXMuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHR5cGluZwppbXBvcnQgdW5pdHRlc3QKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaS5leHRlcm5hbF90cmFuc2Zvcm1zX3BiMiBpbXBvcnQgRXh0ZXJuYWxDb25maWd1cmF0aW9uUGF5bG9hZApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWwgaW1wb3J0IEFubm90YXRpb25CYXNlZFBheWxvYWRCdWlsZGVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0IGltcG9ydCBQYXlsb2FkQmFzZQoKCmRlZiBnZXRfcGF5bG9hZChjbHMpOgogIHBheWxvYWQgPSBFeHRlcm5hbENvbmZpZ3VyYXRpb25QYXlsb2FkKCkKICBwYXlsb2FkLlBhcnNlRnJvbVN0cmluZyhjbHMuX3BheWxvYWQpCiAgcmV0dXJuIHBheWxvYWQKCgpjbGFzcyBFeHRlcm5hbEFubm90YXRpb25QYXlsb2FkVGVzdChQYXlsb2FkQmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgogIGRlZiBnZXRfcGF5bG9hZF9mcm9tX3R5cGluZ19oaW50cyhzZWxmLCB2YWx1ZXMpOgogICAgY2xhc3MgQW5ub3RhdGVkVHJhbnNmb3JtKGJlYW0uRXh0ZXJuYWxUcmFuc2Zvcm0pOgogICAgICBVUk4gPSAnYmVhbTpleHRlcm5hbDpmYWtldXJuOnYxJwoKICAgICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgc2VsZiwKICAgICAgICAgIGludGVnZXJfZXhhbXBsZTogaW50LAogICAgICAgICAgYm9vbGVhbjogYm9vbCwKICAgICAgICAgIHN0cmluZ19leGFtcGxlOiBzdHIsCiAgICAgICAgICBsaXN0X29mX3N0cmluZ3M6IHR5cGluZy5MaXN0W3N0cl0sCiAgICAgICAgICBvcHRpb25hbF9rdjogdHlwaW5nLk9wdGlvbmFsW3R5cGluZy5UdXBsZVtzdHIsIGZsb2F0XV0gPSBOb25lLAogICAgICAgICAgb3B0aW9uYWxfaW50ZWdlcjogdHlwaW5nLk9wdGlvbmFsW2ludF0gPSBOb25lLAogICAgICAgICAgZXhwYW5zaW9uX3NlcnZpY2U9Tm9uZSk6CiAgICAgICAgc3VwZXIoQW5ub3RhdGVkVHJhbnNmb3JtLCBzZWxmKS5fX2luaXRfXygKICAgICAgICAgICAgc2VsZi5VUk4sCiAgICAgICAgICAgIEFubm90YXRpb25CYXNlZFBheWxvYWRCdWlsZGVyKAogICAgICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgICAgIGludGVnZXJfZXhhbXBsZT1pbnRlZ2VyX2V4YW1wbGUsCiAgICAgICAgICAgICAgICBib29sZWFuPWJvb2xlYW4sCiAgICAgICAgICAgICAgICBzdHJpbmdfZXhhbXBsZT1zdHJpbmdfZXhhbXBsZSwKICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3RyaW5ncz1saXN0X29mX3N0cmluZ3MsCiAgICAgICAgICAgICAgICBvcHRpb25hbF9rdj1vcHRpb25hbF9rdiwKICAgICAgICAgICAgICAgIG9wdGlvbmFsX2ludGVnZXI9b3B0aW9uYWxfaW50ZWdlciwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgZXhwYW5zaW9uX3NlcnZpY2UpCgogICAgcmV0dXJuIGdldF9wYXlsb2FkKEFubm90YXRlZFRyYW5zZm9ybSgqKnZhbHVlcykpCgogIGRlZiBnZXRfcGF5bG9hZF9mcm9tX2JlYW1fdHlwZWhpbnRzKHNlbGYsIHZhbHVlcyk6CiAgICBjbGFzcyBBbm5vdGF0ZWRUcmFuc2Zvcm0oYmVhbS5FeHRlcm5hbFRyYW5zZm9ybSk6CiAgICAgIFVSTiA9ICdiZWFtOmV4dGVybmFsOmZha2V1cm46djEnCgogICAgICBkZWYgX19pbml0X18oCiAgICAgICAgICBzZWxmLAogICAgICAgICAgaW50ZWdlcl9leGFtcGxlOiBpbnQsCiAgICAgICAgICBib29sZWFuOiBib29sLAogICAgICAgICAgc3RyaW5nX2V4YW1wbGU6IHN0ciwKICAgICAgICAgIGxpc3Rfb2Zfc3RyaW5nczogdHlwZWhpbnRzLkxpc3Rbc3RyXSwKICAgICAgICAgIG9wdGlvbmFsX2t2OiB0eXBlaGludHMuT3B0aW9uYWxbdHlwZWhpbnRzLktWW3N0ciwgZmxvYXRdXSA9IE5vbmUsCiAgICAgICAgICBvcHRpb25hbF9pbnRlZ2VyOiB0eXBlaGludHMuT3B0aW9uYWxbaW50XSA9IE5vbmUsCiAgICAgICAgICBleHBhbnNpb25fc2VydmljZT1Ob25lKToKICAgICAgICBzdXBlcihBbm5vdGF0ZWRUcmFuc2Zvcm0sIHNlbGYpLl9faW5pdF9fKAogICAgICAgICAgICBzZWxmLlVSTiwKICAgICAgICAgICAgQW5ub3RhdGlvbkJhc2VkUGF5bG9hZEJ1aWxkZXIoCiAgICAgICAgICAgICAgICBzZWxmLAogICAgICAgICAgICAgICAgaW50ZWdlcl9leGFtcGxlPWludGVnZXJfZXhhbXBsZSwKICAgICAgICAgICAgICAgIGJvb2xlYW49Ym9vbGVhbiwKICAgICAgICAgICAgICAgIHN0cmluZ19leGFtcGxlPXN0cmluZ19leGFtcGxlLAogICAgICAgICAgICAgICAgbGlzdF9vZl9zdHJpbmdzPWxpc3Rfb2Zfc3RyaW5ncywKICAgICAgICAgICAgICAgIG9wdGlvbmFsX2t2PW9wdGlvbmFsX2t2LAogICAgICAgICAgICAgICAgb3B0aW9uYWxfaW50ZWdlcj1vcHRpb25hbF9pbnRlZ2VyLAogICAgICAgICAgICApLAogICAgICAgICAgICBleHBhbnNpb25fc2VydmljZSkKCiAgICByZXR1cm4gZ2V0X3BheWxvYWQoQW5ub3RhdGVkVHJhbnNmb3JtKCoqdmFsdWVzKSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIHVuaXR0ZXN0Lm1haW4oKQqUfZQojAtnZXRfcGF5bG9hZJRqVjEBAEsiSyWHlIxXRXh0ZXJuYWxBbm5vdGF0aW9uUGF5bG9hZFRlc3QuZ2V0X3BheWxvYWRfZnJvbV90eXBpbmdfaGludHMuQW5ub3RhdGVkVHJhbnNmb3JtLl9faW5pdF9flGpWMQEASy1LQYeUjE5FeHRlcm5hbEFubm90YXRpb25QYXlsb2FkVGVzdC5nZXRfcGF5bG9hZF9mcm9tX3R5cGluZ19oaW50cy5Bbm5vdGF0ZWRUcmFuc2Zvcm2Ual0xAQBLKktBh5SMO0V4dGVybmFsQW5ub3RhdGlvblBheWxvYWRUZXN0LmdldF9wYXlsb2FkX2Zyb21fdHlwaW5nX2hpbnRzlGpWMQEASylLQ4eUjFlFeHRlcm5hbEFubm90YXRpb25QYXlsb2FkVGVzdC5nZXRfcGF5bG9hZF9mcm9tX2JlYW1fdHlwZWhpbnRzLkFubm90YXRlZFRyYW5zZm9ybS5fX2luaXRfX5RqVjEBAEtJS12HlIxQRXh0ZXJuYWxBbm5vdGF0aW9uUGF5bG9hZFRlc3QuZ2V0X3BheWxvYWRfZnJvbV9iZWFtX3R5cGVoaW50cy5Bbm5vdGF0ZWRUcmFuc2Zvcm2Ual0xAQBLRktdh5SMPUV4dGVybmFsQW5ub3RhdGlvblBheWxvYWRUZXN0LmdldF9wYXlsb2FkX2Zyb21fYmVhbV90eXBlaGludHOUalYxAQBLRUtfh5SMHUV4dGVybmFsQW5ub3RhdGlvblBheWxvYWRUZXN0lGpdMQEASyhLX4eUdX2UKIwLZ2V0X3BheWxvYWSUaugDAACMHUV4dGVybmFsQW5ub3RhdGlvblBheWxvYWRUZXN0lGroAwAAjDtFeHRlcm5hbEFubm90YXRpb25QYXlsb2FkVGVzdC5nZXRfcGF5bG9hZF9mcm9tX3R5cGluZ19oaW50c5Rq6AMAAIw9RXh0ZXJuYWxBbm5vdGF0aW9uUGF5bG9hZFRlc3QuZ2V0X3BheWxvYWRfZnJvbV9iZWFtX3R5cGVoaW50c5Rq6AMAAHWMKGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTOUdJSMKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTM3lChYuQkAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIHRyYW5zZm9ybS5leHRlcm5hbCBjbGFzc2VzLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBkYXRhY2xhc3NlcwppbXBvcnQgdHlwaW5nCmltcG9ydCB1bml0dGVzdAoKaW1wb3J0IGFwYWNoZV9iZWFtIGFzIGJlYW0KZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgdHlwZWhpbnRzCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpLmV4dGVybmFsX3RyYW5zZm9ybXNfcGIyIGltcG9ydCBFeHRlcm5hbENvbmZpZ3VyYXRpb25QYXlsb2FkCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5leHRlcm5hbF90ZXN0IGltcG9ydCBQYXlsb2FkQmFzZQoKCmRlZiBnZXRfcGF5bG9hZChjbHMpOgogIHBheWxvYWQgPSBFeHRlcm5hbENvbmZpZ3VyYXRpb25QYXlsb2FkKCkKICBwYXlsb2FkLlBhcnNlRnJvbVN0cmluZyhjbHMuX3BheWxvYWQpCiAgcmV0dXJuIHBheWxvYWQKCgpjbGFzcyBFeHRlcm5hbERhdGFjbGFzc2VzUGF5bG9hZFRlc3QoUGF5bG9hZEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICBkZWYgZ2V0X3BheWxvYWRfZnJvbV90eXBpbmdfaGludHMoc2VsZiwgdmFsdWVzKToKICAgIEBkYXRhY2xhc3Nlcy5kYXRhY2xhc3MKICAgIGNsYXNzIERhdGFjbGFzc1RyYW5zZm9ybShiZWFtLkV4dGVybmFsVHJhbnNmb3JtKToKICAgICAgVVJOID0gJ2JlYW06ZXh0ZXJuYWw6ZmFrZXVybjp2MScKCiAgICAgIGludGVnZXJfZXhhbXBsZTogaW50CiAgICAgIGJvb2xlYW46IGJvb2wKICAgICAgc3RyaW5nX2V4YW1wbGU6IHN0cgogICAgICBsaXN0X29mX3N0cmluZ3M6IHR5cGluZy5MaXN0W3N0cl0KICAgICAgb3B0aW9uYWxfa3Y6IHR5cGluZy5PcHRpb25hbFt0eXBpbmcuVHVwbGVbc3RyLCBmbG9hdF1dID0gTm9uZQogICAgICBvcHRpb25hbF9pbnRlZ2VyOiB0eXBpbmcuT3B0aW9uYWxbaW50XSA9IE5vbmUKICAgICAgZXhwYW5zaW9uX3NlcnZpY2U6IGRhdGFjbGFzc2VzLkluaXRWYXJbdHlwaW5nLk9wdGlvbmFsW3N0cl1dID0gTm9uZQoKICAgIHJldHVybiBnZXRfcGF5bG9hZChEYXRhY2xhc3NUcmFuc2Zvcm0oKip2YWx1ZXMpKQoKICBkZWYgZ2V0X3BheWxvYWRfZnJvbV9iZWFtX3R5cGVoaW50cyhzZWxmLCB2YWx1ZXMpOgogICAgQGRhdGFjbGFzc2VzLmRhdGFjbGFzcwogICAgY2xhc3MgRGF0YWNsYXNzVHJhbnNmb3JtKGJlYW0uRXh0ZXJuYWxUcmFuc2Zvcm0pOgogICAgICBVUk4gPSAnYmVhbTpleHRlcm5hbDpmYWtldXJuOnYxJwoKICAgICAgaW50ZWdlcl9leGFtcGxlOiBpbnQKICAgICAgYm9vbGVhbjogYm9vbAogICAgICBzdHJpbmdfZXhhbXBsZTogc3RyCiAgICAgIGxpc3Rfb2Zfc3RyaW5nczogdHlwZWhpbnRzLkxpc3Rbc3RyXQogICAgICBvcHRpb25hbF9rdjogdHlwZWhpbnRzLk9wdGlvbmFsW3R5cGVoaW50cy5LVltzdHIsIGZsb2F0XV0gPSBOb25lCiAgICAgIG9wdGlvbmFsX2ludGVnZXI6IHR5cGVoaW50cy5PcHRpb25hbFtpbnRdID0gTm9uZQogICAgICBleHBhbnNpb25fc2VydmljZTogZGF0YWNsYXNzZXMuSW5pdFZhclt0eXBlaGludHMuT3B0aW9uYWxbc3RyXV0gPSBOb25lCgogICAgcmV0dXJuIGdldF9wYXlsb2FkKERhdGFjbGFzc1RyYW5zZm9ybSgqKnZhbHVlcykpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICB1bml0dGVzdC5tYWluKCkKlH2UKIwLZ2V0X3BheWxvYWSUalYxAQBLIkslh5SMT0V4dGVybmFsRGF0YWNsYXNzZXNQYXlsb2FkVGVzdC5nZXRfcGF5bG9hZF9mcm9tX3R5cGluZ19oaW50cy5EYXRhY2xhc3NUcmFuc2Zvcm2Ual0xAQBLKks0h5SMPEV4dGVybmFsRGF0YWNsYXNzZXNQYXlsb2FkVGVzdC5nZXRfcGF5bG9hZF9mcm9tX3R5cGluZ19oaW50c5RqVjEBAEspSzaHlIxRRXh0ZXJuYWxEYXRhY2xhc3Nlc1BheWxvYWRUZXN0LmdldF9wYXlsb2FkX2Zyb21fYmVhbV90eXBlaGludHMuRGF0YWNsYXNzVHJhbnNmb3JtlGpdMQEASzlLQ4eUjD5FeHRlcm5hbERhdGFjbGFzc2VzUGF5bG9hZFRlc3QuZ2V0X3BheWxvYWRfZnJvbV9iZWFtX3R5cGVoaW50c5RqVjEBAEs4S0WHlIweRXh0ZXJuYWxEYXRhY2xhc3Nlc1BheWxvYWRUZXN0lGpdMQEASyhLRYeUdX2UKIwLZ2V0X3BheWxvYWSUar4DAACMHkV4dGVybmFsRGF0YWNsYXNzZXNQYXlsb2FkVGVzdJRqvgMAAIw8RXh0ZXJuYWxEYXRhY2xhc3Nlc1BheWxvYWRUZXN0LmdldF9wYXlsb2FkX2Zyb21fdHlwaW5nX2hpbnRzlGq+AwAAjD5FeHRlcm5hbERhdGFjbGFzc2VzUGF5bG9hZFRlc3QuZ2V0X3BheWxvYWRfZnJvbV9iZWFtX3R5cGVoaW50c5RqvgMAAHWMKWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZXh0ZXJuYWxfdGVzdF9weTM3lHSUjCFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnB0cmFuc2Zvcm2UKFiZigAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJQVHJhbnNmb3JtIGFuZCBkZXNjZW5kYW50cy4KCkEgUFRyYW5zZm9ybSBpcyBhbiBvYmplY3QgZGVzY3JpYmluZyAobm90IGV4ZWN1dGluZykgYSBjb21wdXRhdGlvbi4gVGhlIGFjdHVhbApleGVjdXRpb24gc2VtYW50aWNzIGZvciBhIHRyYW5zZm9ybSBpcyBjYXB0dXJlZCBieSBhIHJ1bm5lciBvYmplY3QuIEEgdHJhbnNmb3JtCm9iamVjdCBhbHdheXMgYmVsb25ncyB0byBhIHBpcGVsaW5lIG9iamVjdC4KCkEgUFRyYW5zZm9ybSBkZXJpdmVkIGNsYXNzIG5lZWRzIHRvIGRlZmluZSB0aGUgZXhwYW5kKCkgbWV0aG9kIHRoYXQgZGVzY3JpYmVzCmhvdyBvbmUgb3IgbW9yZSBQVmFsdWVzIGFyZSBjcmVhdGVkIGJ5IHRoZSB0cmFuc2Zvcm0uCgpUaGUgbW9kdWxlIGRlZmluZXMgYSBmZXcgc3RhbmRhcmQgdHJhbnNmb3JtczogRmxhdE1hcCAocGFyYWxsZWwgZG8pLApHcm91cEJ5S2V5IChncm91cCBieSBrZXkpLCBldGMuIE5vdGUgdGhhdCB0aGUgZXhwYW5kKCkgbWV0aG9kcyBmb3IgdGhlc2UKY2xhc3NlcyBjb250YWluIGNvZGUgdGhhdCB3aWxsIGFkZCBub2RlcyB0byB0aGUgcHJvY2Vzc2luZyBncmFwaCBhc3NvY2lhdGVkCndpdGggYSBwaXBlbGluZS4KCkFzIHN1cHBvcnQgZm9yIHRoZSBGbGF0TWFwIHRyYW5zZm9ybSwgdGhlIG1vZHVsZSBhbHNvIGRlZmluZXMgYSBEb0ZuCmNsYXNzIGFuZCB3cmFwcGVyIGNsYXNzIHRoYXQgYWxsb3dzIGxhbWJkYSBmdW5jdGlvbnMgdG8gYmUgdXNlZCBhcwpGbGF0TWFwIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY29weQppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBvcGVyYXRvcgppbXBvcnQgb3MKaW1wb3J0IHN5cwppbXBvcnQgdGhyZWFkaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IGhleApmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCmZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0CmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbApmcm9tIHR5cGluZyBpbXBvcnQgU2VxdWVuY2UKZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCmZyb20gdHlwaW5nIGltcG9ydCBUeXBlCmZyb20gdHlwaW5nIGltcG9ydCBUeXBlVmFyCmZyb20gdHlwaW5nIGltcG9ydCBVbmlvbgpmcm9tIHR5cGluZyBpbXBvcnQgb3ZlcmxvYWQKCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBtZXNzYWdlCgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBlcnJvcgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS5pbnRlcm5hbCBpbXBvcnQgcGlja2xlcgpmcm9tIGFwYWNoZV9iZWFtLmludGVybmFsIGltcG9ydCB1dGlsCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkgaW1wb3J0IHB5dGhvbl91cm5zCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5kaXNwbGF5IGltcG9ydCBEaXNwbGF5RGF0YUl0ZW0KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmRpc3BsYXkgaW1wb3J0IEhhc0Rpc3BsYXlEYXRhCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBuYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0eXBlaGludHMKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgVHlwZUNoZWNrRXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgV2l0aFR5cGVIaW50cwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBnZXRfc2lnbmF0dXJlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnMgaW1wb3J0IGdldGNhbGxhcmdzX2ZvcmhpbnRzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlIGltcG9ydCBpbnN0YW5jZV90b190eXBlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0KZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcHJvdG9fdXRpbHMKCmlmIFRZUEVfQ0hFQ0tJTkc6CiAgZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCiAgZnJvbSBhcGFjaGVfYmVhbS5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dCBpbXBvcnQgUGlwZWxpbmVDb250ZXh0CiAgZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFdpbmRvd2luZwogIGZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCgpfX2FsbF9fID0gWwogICAgJ1BUcmFuc2Zvcm0nLAogICAgJ3B0cmFuc2Zvcm1fZm4nLAogICAgJ2xhYmVsX2Zyb21fY2FsbGFibGUnLApdCgpUID0gVHlwZVZhcignVCcpClBUcmFuc2Zvcm1UID0gVHlwZVZhcignUFRyYW5zZm9ybVQnLCBib3VuZD0nUFRyYW5zZm9ybScpCkNvbnN0cnVjdG9yRm4gPSBDYWxsYWJsZVtbT3B0aW9uYWxbQW55XSwgJ1BpcGVsaW5lQ29udGV4dCddLCBBbnldCgoKY2xhc3MgX1BWYWx1ZWlzaFRyYW5zZm9ybShvYmplY3QpOgogICIiIlZpc2l0b3IgZm9yIFBWYWx1ZWlzaCBvYmplY3RzLgoKICBBIFBWYWx1ZWlzaCBpcyBhIFBWYWx1ZSwgb3IgbGlzdCwgdHVwbGUsIGRpY3Qgb2YgUFZhbHVlc2lzaCBvYmplY3RzLgoKICBUaGlzIHZpc2l0cyBhIFBWYWx1ZWlzaCwgY29udHN0cnVjdGluZyBhIChwb3NzaWJseSBtdXRhdGVkKSBjb3B5LgogICIiIgogIGRlZiB2aXNpdF9uZXN0ZWQoc2VsZiwgbm9kZSwgKmFyZ3MpOgogICAgaWYgaXNpbnN0YW5jZShub2RlLCAodHVwbGUsIGxpc3QpKToKICAgICAgYXJncyA9IFtzZWxmLnZpc2l0KHgsICphcmdzKSBmb3IgeCBpbiBub2RlXQogICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIHR1cGxlKSBhbmQgaGFzYXR0cihub2RlLl9fY2xhc3NfXywgJ19tYWtlJyk6CiAgICAgICAgIyBuYW1lZHR1cGxlcyByZXF1aXJlIHVucGFja2VkIGFyZ3VtZW50cyBpbiB0aGVpciBjb25zdHJ1Y3RvcgogICAgICAgIHJldHVybiBub2RlLl9fY2xhc3NfXygqYXJncykKICAgICAgZWxzZToKICAgICAgICByZXR1cm4gbm9kZS5fX2NsYXNzX18oYXJncykKICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBkaWN0KToKICAgICAgcmV0dXJuIG5vZGUuX19jbGFzc19fKAogICAgICAgICAge2tleTogc2VsZi52aXNpdCh2YWx1ZSwgKmFyZ3MpCiAgICAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBub2RlLml0ZW1zKCl9KQogICAgZWxzZToKICAgICAgcmV0dXJuIG5vZGUKCgpjbGFzcyBfU2V0SW5wdXRQVmFsdWVzKF9QVmFsdWVpc2hUcmFuc2Zvcm0pOgogIGRlZiB2aXNpdChzZWxmLCBub2RlLCByZXBsYWNlbWVudHMpOgogICAgaWYgaWQobm9kZSkgaW4gcmVwbGFjZW1lbnRzOgogICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW2lkKG5vZGUpXQogICAgZWxzZToKICAgICAgcmV0dXJuIHNlbGYudmlzaXRfbmVzdGVkKG5vZGUsIHJlcGxhY2VtZW50cykKCgojIENhY2hlcyB0byBhbGxvdyBmb3IgbWF0ZXJpYWxpemF0aW9uIG9mIHZhbHVlcyB3aGVuIGV4ZWN1dGluZyBhIHBpcGVsaW5lCiMgaW4tcHJvY2VzcywgaW4gZWFnZXIgbW9kZS4gIFRoaXMgY2FjaGUgYWxsb3dzIHRoZSBzYW1lIF9NYXRlcmlhbGl6ZWRSZXN1bHQKIyBvYmplY3QgdG8gYmUgYWNjZXNzZWQgYW5kIHVzZWQgZGVzcGl0ZSBSdW5uZXIgQVBJIHJvdW5kLXRyaXAgc2VyaWFsaXphdGlvbi4KX3BpcGVsaW5lX21hdGVyaWFsaXphdGlvbl9jYWNoZSA9IHt9Cl9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKCgpkZWYgX2FsbG9jYXRlX21hdGVyaWFsaXplZF9waXBlbGluZShwaXBlbGluZSk6CiAgcGlkID0gb3MuZ2V0cGlkKCkKICB3aXRoIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fbG9jazoKICAgIHBpcGVsaW5lX2lkID0gaWQocGlwZWxpbmUpCiAgICBfcGlwZWxpbmVfbWF0ZXJpYWxpemF0aW9uX2NhY2hlWyhwaWQsIHBpcGVsaW5lX2lkKV0gPSB7fQoKCmRlZiBfYWxsb2NhdGVfbWF0ZXJpYWxpemVkX3Jlc3VsdChwaXBlbGluZSk6CiAgcGlkID0gb3MuZ2V0cGlkKCkKICB3aXRoIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fbG9jazoKICAgIHBpcGVsaW5lX2lkID0gaWQocGlwZWxpbmUpCiAgICBpZiAocGlkLCBwaXBlbGluZV9pZCkgbm90IGluIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fY2FjaGU6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAnTWF0ZXJpYWxpemVkIHBpcGVsaW5lIGlzIG5vdCBhbGxvY2F0ZWQgZm9yIHJlc3VsdCAnCiAgICAgICAgICAnY2FjaGUuJykKICAgIHJlc3VsdF9pZCA9IGxlbihfcGlwZWxpbmVfbWF0ZXJpYWxpemF0aW9uX2NhY2hlWyhwaWQsIHBpcGVsaW5lX2lkKV0pCiAgICByZXN1bHQgPSBfTWF0ZXJpYWxpemVkUmVzdWx0KHBpcGVsaW5lX2lkLCByZXN1bHRfaWQpCiAgICBfcGlwZWxpbmVfbWF0ZXJpYWxpemF0aW9uX2NhY2hlWyhwaWQsIHBpcGVsaW5lX2lkKV1bcmVzdWx0X2lkXSA9IHJlc3VsdAogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBfZ2V0X21hdGVyaWFsaXplZF9yZXN1bHQocGlwZWxpbmVfaWQsIHJlc3VsdF9pZCk6CiAgcGlkID0gb3MuZ2V0cGlkKCkKICB3aXRoIF9waXBlbGluZV9tYXRlcmlhbGl6YXRpb25fbG9jazoKICAgIGlmIChwaWQsIHBpcGVsaW5lX2lkKSBub3QgaW4gX3BpcGVsaW5lX21hdGVyaWFsaXphdGlvbl9jYWNoZToKICAgICAgcmFpc2UgRXhjZXB0aW9uKAogICAgICAgICAgJ01hdGVyaWFsaXphdGlvbiBpbiBvdXQtb2YtcHJvY2VzcyBhbmQgcmVtb3RlIHJ1bm5lcnMgaXMgbm90IHlldCAnCiAgICAgICAgICAnc3VwcG9ydGVkLicpCiAgICByZXR1cm4gX3BpcGVsaW5lX21hdGVyaWFsaXphdGlvbl9jYWNoZVsocGlkLCBwaXBlbGluZV9pZCldW3Jlc3VsdF9pZF0KCgpkZWYgX3JlbGVhc2VfbWF0ZXJpYWxpemVkX3BpcGVsaW5lKHBpcGVsaW5lKToKICBwaWQgPSBvcy5nZXRwaWQoKQogIHdpdGggX3BpcGVsaW5lX21hdGVyaWFsaXphdGlvbl9sb2NrOgogICAgcGlwZWxpbmVfaWQgPSBpZChwaXBlbGluZSkKICAgIGRlbCBfcGlwZWxpbmVfbWF0ZXJpYWxpemF0aW9uX2NhY2hlWyhwaWQsIHBpcGVsaW5lX2lkKV0KCgpjbGFzcyBfTWF0ZXJpYWxpemVkUmVzdWx0KG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHBpcGVsaW5lX2lkLCByZXN1bHRfaWQpOgogICAgc2VsZi5fcGlwZWxpbmVfaWQgPSBwaXBlbGluZV9pZAogICAgc2VsZi5fcmVzdWx0X2lkID0gcmVzdWx0X2lkCiAgICBzZWxmLmVsZW1lbnRzID0gW10KCiAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAjIFdoZW4gdW5waWNrbGVkIChkdXJpbmcgUnVubmVyIEFQSSByb3VuZHRyaXAgc2VyYWlsaXphdGlvbiksIGdldCB0aGUKICAgICMgX01hdGVyaWFsaXplZFJlc3VsdCBvYmplY3QgZnJvbSB0aGUgY2FjaGUgc28gdGhhdCB2YWx1ZXMgYXJlIHdyaXR0ZW4KICAgICMgdG8gdGhlIG9yaWdpbmFsIF9NYXRlcmlhbGl6ZWRSZXN1bHQgd2hlbiBydW4gaW4gZWFnZXIgbW9kZS4KICAgIHJldHVybiAoX2dldF9tYXRlcmlhbGl6ZWRfcmVzdWx0LCAoc2VsZi5fcGlwZWxpbmVfaWQsIHNlbGYuX3Jlc3VsdF9pZCkpCgoKY2xhc3MgX01hdGVyaWFsaXplZERvT3V0cHV0c1R1cGxlKHB2YWx1ZS5Eb091dHB1dHNUdXBsZSk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmVycmVkLCByZXN1bHRzX2J5X3RhZyk6CiAgICBzdXBlcihfTWF0ZXJpYWxpemVkRG9PdXRwdXRzVHVwbGUsCiAgICAgICAgICBzZWxmKS5fX2luaXRfXyhOb25lLCBOb25lLCBkZWZlcnJlZC5fdGFncywgZGVmZXJyZWQuX21haW5fdGFnKQogICAgc2VsZi5fZGVmZXJyZWQgPSBkZWZlcnJlZAogICAgc2VsZi5fcmVzdWx0c19ieV90YWcgPSByZXN1bHRzX2J5X3RhZwoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdGFnKToKICAgIGlmIHRhZyBub3QgaW4gc2VsZi5fcmVzdWx0c19ieV90YWc6CiAgICAgIHJhaXNlIEtleUVycm9yKAogICAgICAgICAgJ1RhZyAlciBpcyBub3QgYSBhIGRlZmluZWQgb3V0cHV0IHRhZyBvZiAlcy4nICUgKHRhZywgc2VsZi5fZGVmZXJyZWQpKQogICAgcmV0dXJuIHNlbGYuX3Jlc3VsdHNfYnlfdGFnW3RhZ10uZWxlbWVudHMKCgpjbGFzcyBfQWRkTWF0ZXJpYWxpemF0aW9uVHJhbnNmb3JtcyhfUFZhbHVlaXNoVHJhbnNmb3JtKToKICBkZWYgX21hdGVyaWFsaXplX3RyYW5zZm9ybShzZWxmLCBwaXBlbGluZSk6CiAgICByZXN1bHQgPSBfYWxsb2NhdGVfbWF0ZXJpYWxpemVkX3Jlc3VsdChwaXBlbGluZSkKCiAgICAjIE5lZWQgdG8gZGVmaW5lIF9NYXRlcmlhbGl6ZVZhbHVlc0RvRm4gaGVyZSB0byBhdm9pZCBjaXJjdWxhcgogICAgIyBkZXBlbmRlbmNpZXMuCiAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBEb0ZuCiAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBQYXJEbwoKICAgIGNsYXNzIF9NYXRlcmlhbGl6ZVZhbHVlc0RvRm4oRG9Gbik6CiAgICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgICAgIHJlc3VsdC5lbGVtZW50cy5hcHBlbmQoZWxlbWVudCkKCiAgICBtYXRlcmlhbGl6YXRpb25fbGFiZWwgPSAnX01hdGVyaWFsaXplVmFsdWVzJWQnICUgcmVzdWx0Ll9yZXN1bHRfaWQKICAgIHJldHVybiAobWF0ZXJpYWxpemF0aW9uX2xhYmVsID4+IFBhckRvKF9NYXRlcmlhbGl6ZVZhbHVlc0RvRm4oKSksIHJlc3VsdCkKCiAgZGVmIHZpc2l0KHNlbGYsIG5vZGUpOgogICAgaWYgaXNpbnN0YW5jZShub2RlLCBwdmFsdWUuUFZhbHVlKToKICAgICAgdHJhbnNmb3JtLCByZXN1bHQgPSBzZWxmLl9tYXRlcmlhbGl6ZV90cmFuc2Zvcm0obm9kZS5waXBlbGluZSkKICAgICAgbm9kZSB8IHRyYW5zZm9ybQogICAgICByZXR1cm4gcmVzdWx0CiAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKToKICAgICAgcmVzdWx0c19ieV90YWcgPSB7fQogICAgICBmb3IgdGFnIGluIGl0ZXJ0b29scy5jaGFpbihbbm9kZS5fbWFpbl90YWddLCBub2RlLl90YWdzKToKICAgICAgICByZXN1bHRzX2J5X3RhZ1t0YWddID0gc2VsZi52aXNpdChub2RlW3RhZ10pCiAgICAgIHJldHVybiBfTWF0ZXJpYWxpemVkRG9PdXRwdXRzVHVwbGUobm9kZSwgcmVzdWx0c19ieV90YWcpCiAgICBlbHNlOgogICAgICByZXR1cm4gc2VsZi52aXNpdF9uZXN0ZWQobm9kZSkKCgpjbGFzcyBfRmluYWxpemVNYXRlcmlhbGl6YXRpb24oX1BWYWx1ZWlzaFRyYW5zZm9ybSk6CiAgZGVmIHZpc2l0KHNlbGYsIG5vZGUpOgogICAgaWYgaXNpbnN0YW5jZShub2RlLCBfTWF0ZXJpYWxpemVkUmVzdWx0KToKICAgICAgcmV0dXJuIG5vZGUuZWxlbWVudHMKICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBfTWF0ZXJpYWxpemVkRG9PdXRwdXRzVHVwbGUpOgogICAgICByZXR1cm4gbm9kZQogICAgZWxzZToKICAgICAgcmV0dXJuIHNlbGYudmlzaXRfbmVzdGVkKG5vZGUpCgoKY2xhc3MgX0dldFBWYWx1ZXMoX1BWYWx1ZWlzaFRyYW5zZm9ybSk6CiAgZGVmIHZpc2l0KHNlbGYsIG5vZGUsIHB2YWx1ZXMpOgogICAgaWYgaXNpbnN0YW5jZShub2RlLCAocHZhbHVlLlBWYWx1ZSwgcHZhbHVlLkRvT3V0cHV0c1R1cGxlKSk6CiAgICAgIHB2YWx1ZXMuYXBwZW5kKG5vZGUpCiAgICBlbHNlOgogICAgICBzZWxmLnZpc2l0X25lc3RlZChub2RlLCBwdmFsdWVzKQoKCmRlZiBnZXRfbmVzdGVkX3B2YWx1ZXMocHZhbHVlaXNoKToKICBwdmFsdWVzID0gW10KICBfR2V0UFZhbHVlcygpLnZpc2l0KHB2YWx1ZWlzaCwgcHZhbHVlcykKICByZXR1cm4gcHZhbHVlcwoKCmRlZiBnZXRfbmVzdGVkX3B2YWx1ZXMwKHB2YWx1ZWlzaCk6CiAgaWYgaXNpbnN0YW5jZShwdmFsdWVpc2gsICh0dXBsZSwgbGlzdCkpOgogICAgdGFnZ2VkX3ZhbHVlcyA9IGVudW1lcmF0ZShwdmFsdWVpc2gpCiAgaWYgaXNpbnN0YW5jZShwdmFsdWVpc2gsIGRpY3QpOgogICAgdGFnZ2VkX3ZhbHVlcyA9IHB2YWx1ZWlzaC5pdGVtcygpCiAgZWxzZToKICAgIHlpZWxkIE5vbmUsIHB2YWx1ZWlzaAogICAgcmV0dXJuCgogIGZvciB0YWcsIHN1YnZhbHVlIGluIHRhZ2dlZF92YWx1ZXM6CiAgICBmb3Igc3VidGFnLCBzdWJzdWJ2YWx1ZSBpbiBnZXRfbmVzdGVkX3B2YWx1ZXMoc3VidmFsdWUpOgogICAgICBpZiBzdWJ0YWcgaXMgTm9uZToKICAgICAgICB5aWVsZCB0YWcsIHN1YnN1YnZhbHVlCiAgICAgIGVsc2U6CiAgICAgICAgeWllbGQgJyVzLiVzJyAlICh0YWcsIHN1YnN1YnZhbHVlKSwgc3Vic3VidmFsdWUKCgpjbGFzcyBfWmlwUFZhbHVlcyhvYmplY3QpOgogICIiIlBhaXJzIGVhY2ggUFZhbHVlIGluIGEgcHZhbHVlaXNoIHdpdGggYSB2YWx1ZSBpbiBhIHBhcmFsbGVsIG91dCBzaWJsaW5nLgoKICBTaWJsaW5nIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5lc3RlZCBzdHJ1Y3R1cmUgYXMgcHZhbHVlaXNoLiAgTGVhdmVzIGluCiAgc2libGluZyBhcmUgZXhwYW5kZWQgYWNyb3NzIG5lc3RlZCBwdmFsdWVpc2ggbGlzdHMsIHR1cGxlcywgYW5kIGRpY3RzLgogIEZvciBleGFtcGxlCgogICAgICBaaXBQVmFsdWVzKCkudmlzaXQoeydhJzogcGMxLCAnYic6IChwYzIsIHBjMyl9LAogICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJ0EnLCAnYicsICdCJ30pCgogIHdpbGwgcmV0dXJuCgogICAgICBbKCdhJywgcGMxLCAnQScpLCAoJ2InLCBwYzIsICdCJyksICgnYicsIHBjMywgJ0InKV0KICAiIiIKICBkZWYgdmlzaXQoc2VsZiwgcHZhbHVlaXNoLCBzaWJsaW5nLCBwYWlycz1Ob25lLCBjb250ZXh0PU5vbmUpOgogICAgaWYgcGFpcnMgaXMgTm9uZToKICAgICAgcGFpcnMgPSBbXQogICAgICBzZWxmLnZpc2l0KHB2YWx1ZWlzaCwgc2libGluZywgcGFpcnMsIGNvbnRleHQpCiAgICAgIHJldHVybiBwYWlycwogICAgZWxpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgKHB2YWx1ZS5QVmFsdWUsIHB2YWx1ZS5Eb091dHB1dHNUdXBsZSkpOgogICAgICBwYWlycy5hcHBlbmQoKGNvbnRleHQsIHB2YWx1ZWlzaCwgc2libGluZykpCiAgICBlbGlmIGlzaW5zdGFuY2UocHZhbHVlaXNoLCAobGlzdCwgdHVwbGUpKToKICAgICAgc2VsZi52aXNpdF9zZXF1ZW5jZShwdmFsdWVpc2gsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KQogICAgZWxpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgZGljdCk6CiAgICAgIHNlbGYudmlzaXRfZGljdChwdmFsdWVpc2gsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KQoKICBkZWYgdmlzaXRfc2VxdWVuY2Uoc2VsZiwgcHZhbHVlaXNoLCBzaWJsaW5nLCBwYWlycywgY29udGV4dCk6CiAgICBpZiBpc2luc3RhbmNlKHNpYmxpbmcsIChsaXN0LCB0dXBsZSkpOgogICAgICBmb3IgaXgsIChwLCBzKSBpbiBlbnVtZXJhdGUoemlwKHB2YWx1ZWlzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHNpYmxpbmcpICsgW05vbmVdICogbGVuKHB2YWx1ZWlzaCkpKToKICAgICAgICBzZWxmLnZpc2l0KHAsIHMsIHBhaXJzLCAncG9zaXRpb24gJXMnICUgaXgpCiAgICBlbHNlOgogICAgICBmb3IgcCBpbiBwdmFsdWVpc2g6CiAgICAgICAgc2VsZi52aXNpdChwLCBzaWJsaW5nLCBwYWlycywgY29udGV4dCkKCiAgZGVmIHZpc2l0X2RpY3Qoc2VsZiwgcHZhbHVlaXNoLCBzaWJsaW5nLCBwYWlycywgY29udGV4dCk6CiAgICBpZiBpc2luc3RhbmNlKHNpYmxpbmcsIGRpY3QpOgogICAgICBmb3Iga2V5LCBwIGluIHB2YWx1ZWlzaC5pdGVtcygpOgogICAgICAgIHNlbGYudmlzaXQocCwgc2libGluZy5nZXQoa2V5KSwgcGFpcnMsIGtleSkKICAgIGVsc2U6CiAgICAgIGZvciBwIGluIHB2YWx1ZWlzaC52YWx1ZXMoKToKICAgICAgICBzZWxmLnZpc2l0KHAsIHNpYmxpbmcsIHBhaXJzLCBjb250ZXh0KQoKCmNsYXNzIFBUcmFuc2Zvcm0oV2l0aFR5cGVIaW50cywgSGFzRGlzcGxheURhdGEpOgogICIiIkEgdHJhbnNmb3JtIG9iamVjdCB1c2VkIHRvIG1vZGlmeSBvbmUgb3IgbW9yZSBQQ29sbGVjdGlvbnMuCgogIFN1YmNsYXNzZXMgbXVzdCBkZWZpbmUgYW4gZXhwYW5kKCkgbWV0aG9kIHRoYXQgd2lsbCBiZSB1c2VkIHdoZW4gdGhlIHRyYW5zZm9ybQogIGlzIGFwcGxpZWQgdG8gc29tZSBhcmd1bWVudHMuIFR5cGljYWwgdXNhZ2UgcGF0dGVybiB3aWxsIGJlOgoKICAgIGlucHV0IHwgQ3VzdG9tVHJhbnNmb3JtKC4uLikKCiAgVGhlIGV4cGFuZCgpIG1ldGhvZCBvZiB0aGUgQ3VzdG9tVHJhbnNmb3JtIG9iamVjdCBwYXNzZWQgaW4gd2lsbCBiZSBjYWxsZWQKICB3aXRoIGlucHV0IGFzIGFuIGFyZ3VtZW50LgogICIiIgogICMgQnkgZGVmYXVsdCwgdHJhbnNmb3JtcyBkb24ndCBoYXZlIGFueSBzaWRlIGlucHV0cy4KICBzaWRlX2lucHV0cyA9ICgpICAjIHR5cGU6IFNlcXVlbmNlW3B2YWx1ZS5Bc1NpZGVJbnB1dF0KCiAgIyBVc2VkIGZvciBudWxsYXJ5IHRyYW5zZm9ybXMuCiAgcGlwZWxpbmUgPSBOb25lICAjIHR5cGU6IE9wdGlvbmFsW1BpcGVsaW5lXQoKICAjIERlZmF1bHQgaXMgdW5zZXQuCiAgX3VzZXJfbGFiZWwgPSBOb25lICAjIHR5cGU6IE9wdGlvbmFsW3N0cl0KCiAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsPU5vbmUpOgogICAgIyB0eXBlOiAoT3B0aW9uYWxbc3RyXSkgLT4gTm9uZQogICAgc3VwZXIoUFRyYW5zZm9ybSwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5sYWJlbCA9IGxhYmVsICAjIHR5cGU6IGlnbm9yZSAjIGh0dHBzOi8vZ2l0aHViLmNvbS9weXRob24vbXlweS9pc3N1ZXMvMzAwNAoKICBAcHJvcGVydHkKICBkZWYgbGFiZWwoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IHN0cgogICAgcmV0dXJuIHNlbGYuX3VzZXJfbGFiZWwgb3Igc2VsZi5kZWZhdWx0X2xhYmVsKCkKCiAgQGxhYmVsLnNldHRlcgogIGRlZiBsYWJlbChzZWxmLCB2YWx1ZSk6CiAgICAjIHR5cGU6IChPcHRpb25hbFtzdHJdKSAtPiBOb25lCiAgICBzZWxmLl91c2VyX2xhYmVsID0gdmFsdWUKCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IHN0cgogICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCgogIGRlZiB3aXRoX2lucHV0X3R5cGVzKHNlbGYsIGlucHV0X3R5cGVfaGludCk6CiAgICAiIiJBbm5vdGF0ZXMgdGhlIGlucHV0IHR5cGUgb2YgYSA6Y2xhc3M6YFBUcmFuc2Zvcm1gIHdpdGggYSB0eXBlLWhpbnQuCgogICAgQXJnczoKICAgICAgaW5wdXRfdHlwZV9oaW50ICh0eXBlKTogQW4gaW5zdGFuY2Ugb2YgYW4gYWxsb3dlZCBidWlsdC1pbiB0eXBlLCBhIGN1c3RvbQogICAgICAgIGNsYXNzLCBvciBhbiBpbnN0YW5jZSBvZiBhCiAgICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlQ29uc3RyYWludGAuCgogICAgUmFpc2VzOgogICAgICBUeXBlRXJyb3I6IElmICoqaW5wdXRfdHlwZV9oaW50KiogaXMgbm90IGEgdmFsaWQgdHlwZS1oaW50LgogICAgICAgIFNlZQogICAgICAgIDpvYmo6YGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMudmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oKWAKICAgICAgICBmb3IgZnVydGhlciBkZXRhaWxzLgoKICAgIFJldHVybnM6CiAgICAgIFBUcmFuc2Zvcm06IEEgcmVmZXJlbmNlIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGlzIHBhcnRpY3VsYXIKICAgICAgOmNsYXNzOmBQVHJhbnNmb3JtYCBvYmplY3QuIFRoaXMgYWxsb3dzIGNoYWluaW5nIHR5cGUtaGludGluZyByZWxhdGVkCiAgICAgIG1ldGhvZHMuCiAgICAiIiIKICAgIGlucHV0X3R5cGVfaGludCA9IG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGUoCiAgICAgICAgaW5wdXRfdHlwZV9oaW50KQogICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oCiAgICAgICAgaW5wdXRfdHlwZV9oaW50LCAnVHlwZSBoaW50cyBmb3IgYSBQVHJhbnNmb3JtJykKICAgIHJldHVybiBzdXBlcihQVHJhbnNmb3JtLCBzZWxmKS53aXRoX2lucHV0X3R5cGVzKGlucHV0X3R5cGVfaGludCkKCiAgZGVmIHdpdGhfb3V0cHV0X3R5cGVzKHNlbGYsIHR5cGVfaGludCk6CiAgICAiIiJBbm5vdGF0ZXMgdGhlIG91dHB1dCB0eXBlIG9mIGEgOmNsYXNzOmBQVHJhbnNmb3JtYCB3aXRoIGEgdHlwZS1oaW50LgoKICAgIEFyZ3M6CiAgICAgIHR5cGVfaGludCAodHlwZSk6IEFuIGluc3RhbmNlIG9mIGFuIGFsbG93ZWQgYnVpbHQtaW4gdHlwZSwgYSBjdXN0b20gY2xhc3MsCiAgICAgICAgb3IgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVDb25zdHJhaW50YC4KCiAgICBSYWlzZXM6CiAgICAgIFR5cGVFcnJvcjogSWYgKip0eXBlX2hpbnQqKiBpcyBub3QgYSB2YWxpZCB0eXBlLWhpbnQuIFNlZQogICAgICAgIDpvYmo6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLnZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKClgCiAgICAgICAgZm9yIGZ1cnRoZXIgZGV0YWlscy4KCiAgICBSZXR1cm5zOgogICAgICBQVHJhbnNmb3JtOiBBIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyCiAgICAgIDpjbGFzczpgUFRyYW5zZm9ybWAgb2JqZWN0LiBUaGlzIGFsbG93cyBjaGFpbmluZyB0eXBlLWhpbnRpbmcgcmVsYXRlZAogICAgICBtZXRob2RzLgogICAgIiIiCiAgICB0eXBlX2hpbnQgPSBuYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmNvbnZlcnRfdG9fYmVhbV90eXBlKHR5cGVfaGludCkKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKHR5cGVfaGludCwgJ1R5cGUgaGludHMgZm9yIGEgUFRyYW5zZm9ybScpCiAgICByZXR1cm4gc3VwZXIoUFRyYW5zZm9ybSwgc2VsZikud2l0aF9vdXRwdXRfdHlwZXModHlwZV9oaW50KQoKICBkZWYgdHlwZV9jaGVja19pbnB1dHMoc2VsZiwgcHZhbHVlaXNoKToKICAgIHNlbGYudHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cyhwdmFsdWVpc2gsICdpbnB1dCcpCgogIGRlZiBpbmZlcl9vdXRwdXRfdHlwZShzZWxmLCB1bnVzZWRfaW5wdXRfdHlwZSk6CiAgICByZXR1cm4gc2VsZi5nZXRfdHlwZV9oaW50cygpLnNpbXBsZV9vdXRwdXRfdHlwZShzZWxmLmxhYmVsKSBvciB0eXBlaGludHMuQW55CgogIGRlZiB0eXBlX2NoZWNrX291dHB1dHMoc2VsZiwgcHZhbHVlaXNoKToKICAgIHNlbGYudHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cyhwdmFsdWVpc2gsICdvdXRwdXQnKQoKICBkZWYgdHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0cyhzZWxmLCBwdmFsdWVpc2gsIGlucHV0X29yX291dHB1dCk6CiAgICB0eXBlX2hpbnRzID0gc2VsZi5nZXRfdHlwZV9oaW50cygpCiAgICBoaW50cyA9IGdldGF0dHIodHlwZV9oaW50cywgaW5wdXRfb3Jfb3V0cHV0ICsgJ190eXBlcycpCiAgICBpZiBoaW50cyBpcyBOb25lIG9yIG5vdCBhbnkoaGludHMpOgogICAgICByZXR1cm4KICAgIGFyZ19oaW50cywga3dhcmdfaGludHMgPSBoaW50cwogICAgaWYgYXJnX2hpbnRzIGFuZCBrd2FyZ19oaW50czoKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoCiAgICAgICAgICAnUFRyYW5zZm9ybSBjYW5ub3QgaGF2ZSBib3RoIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgdHlwZSBoaW50cyAnCiAgICAgICAgICAnd2l0aG91dCBvdmVycmlkaW5nICVzLl90eXBlX2NoZWNrXyVzKCknICUKICAgICAgICAgIChzZWxmLl9fY2xhc3NfXywgaW5wdXRfb3Jfb3V0cHV0KSkKICAgIHJvb3RfaGludCA9ICgKICAgICAgICBhcmdfaGludHNbMF0gaWYgbGVuKGFyZ19oaW50cykgPT0gMSBlbHNlIGFyZ19oaW50cyBvciBrd2FyZ19oaW50cykKICAgIGZvciBjb250ZXh0LCBwdmFsdWVfLCBoaW50IGluIF9aaXBQVmFsdWVzKCkudmlzaXQocHZhbHVlaXNoLCByb290X2hpbnQpOgogICAgICBpZiBwdmFsdWVfLmVsZW1lbnRfdHlwZSBpcyBOb25lOgogICAgICAgICMgVE9ETyhyb2JlcnR3Yik6IEl0J3MgYSBidWcgdGhhdCB3ZSBldmVyIGdldCBoZXJlLiAodHlwZWNoZWNrKQogICAgICAgIGNvbnRpbnVlCiAgICAgIGlmIGhpbnQgYW5kIG5vdCB0eXBlaGludHMuaXNfY29uc2lzdGVudF93aXRoKHB2YWx1ZV8uZWxlbWVudF90eXBlLCBoaW50KToKICAgICAgICBhdF9jb250ZXh0ID0gJyAlcyAlcycgJSAoaW5wdXRfb3Jfb3V0cHV0LCBjb250ZXh0KSBpZiBjb250ZXh0IGVsc2UgJycKICAgICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcigKICAgICAgICAgICAgJ3t0eXBlfSB0eXBlIGhpbnQgdmlvbGF0aW9uIGF0IHtsYWJlbH17Y29udGV4dH06IGV4cGVjdGVkIHtoaW50fSwgJwogICAgICAgICAgICAnZ290IHthY3R1YWxfdHlwZX1cbkZ1bGwgdHlwZSBoaW50Olxue2RlYnVnX3N0cn0nLmZvcm1hdCgKICAgICAgICAgICAgICAgIHR5cGU9aW5wdXRfb3Jfb3V0cHV0LnRpdGxlKCksCiAgICAgICAgICAgICAgICBsYWJlbD1zZWxmLmxhYmVsLAogICAgICAgICAgICAgICAgY29udGV4dD1hdF9jb250ZXh0LAogICAgICAgICAgICAgICAgaGludD1oaW50LAogICAgICAgICAgICAgICAgYWN0dWFsX3R5cGU9cHZhbHVlXy5lbGVtZW50X3R5cGUsCiAgICAgICAgICAgICAgICBkZWJ1Z19zdHI9dHlwZV9oaW50cy5kZWJ1Z19zdHIoKSkpCgogIGRlZiBfaW5mZXJfb3V0cHV0X2NvZGVyKHNlbGYsIGlucHV0X3R5cGU9Tm9uZSwgaW5wdXRfY29kZXI9Tm9uZSk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE9wdGlvbmFsW2NvZGVycy5Db2Rlcl0KCiAgICAiIiJSZXR1cm5zIHRoZSBvdXRwdXQgY29kZXIgdG8gdXNlIGZvciBvdXRwdXQgb2YgdGhpcyB0cmFuc2Zvcm0uCgogICAgTm90ZTogdGhpcyBBUEkgaXMgZXhwZXJpbWVudGFsIGFuZCBpcyBzdWJqZWN0IHRvIGNoYW5nZTsgcGxlYXNlIGRvIG5vdCByZWx5CiAgICBvbiBiZWhhdmlvciBpbmR1Y2VkIGJ5IHRoaXMgbWV0aG9kLgoKICAgIFRoZSBDb2RlciByZXR1cm5lZCBoZXJlIHNob3VsZCBub3QgYmUgd3JhcHBlZCBpbiBhIFdpbmRvd2VkVmFsdWVDb2RlcgogICAgd3JhcHBlci4KCiAgICBBcmdzOgogICAgICBpbnB1dF90eXBlOiBBbiBpbnN0YW5jZSBvZiBhbiBhbGxvd2VkIGJ1aWx0LWluIHR5cGUsIGEgY3VzdG9tIGNsYXNzLCBvciBhCiAgICAgICAgdHlwZWhpbnRzLlR5cGVDb25zdHJhaW50IGZvciB0aGUgaW5wdXQgdHlwZSwgb3IgTm9uZSBpZiBub3QgYXZhaWxhYmxlLgogICAgICBpbnB1dF9jb2RlcjogQ29kZXIgb2JqZWN0IGZvciBlbmNvZGluZyBpbnB1dCB0byB0aGlzIFBUcmFuc2Zvcm0sIG9yIE5vbmUKICAgICAgICBpZiBub3QgYXZhaWxhYmxlLgoKICAgIFJldHVybnM6CiAgICAgIENvZGVyIG9iamVjdCBmb3IgZW5jb2Rpbmcgb3V0cHV0IG9mIHRoaXMgUFRyYW5zZm9ybSBvciBOb25lIGlmIHVua25vd24uCiAgICAiIiIKICAgICMgVE9ETyhjY3kpOiBmdXJ0aGVyIHJlZmluZSB0aGlzIEFQSS4KICAgIHJldHVybiBOb25lCgogIGRlZiBfY2xvbmUoc2VsZiwgbmV3X2xhYmVsKToKICAgICIiIkNsb25lcyB0aGUgY3VycmVudCB0cmFuc2Zvcm0gaW5zdGFuY2UgdW5kZXIgYSBuZXcgbGFiZWwuIiIiCiAgICB0cmFuc2Zvcm0gPSBjb3B5LmNvcHkoc2VsZikKICAgIHRyYW5zZm9ybS5sYWJlbCA9IG5ld19sYWJlbAogICAgcmV0dXJuIHRyYW5zZm9ybQoKICBkZWYgZXhwYW5kKHNlbGYsIGlucHV0X29yX2lucHV0cyk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgcmV0dXJuICc8JXM+JyAlIHNlbGYuX3N0cl9pbnRlcm5hbCgpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnPCVzIGF0ICVzPicgJSAoc2VsZi5fc3RyX2ludGVybmFsKCksIGhleChpZChzZWxmKSkpCgogIGRlZiBfc3RyX2ludGVybmFsKHNlbGYpOgogICAgcmV0dXJuICclcyhQVHJhbnNmb3JtKSVzJXMlcycgJSAoCiAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgJyBsYWJlbD1bJXNdJyAlIHNlbGYubGFiZWwgaWYKICAgICAgICAoaGFzYXR0cihzZWxmLCAnbGFiZWwnKSBhbmQgc2VsZi5sYWJlbCkgZWxzZSAnJywKICAgICAgICAnIGlucHV0cz0lcycgJSBzdHIoc2VsZi5pbnB1dHMpIGlmCiAgICAgICAgKGhhc2F0dHIoc2VsZiwgJ2lucHV0cycpIGFuZCBzZWxmLmlucHV0cykgZWxzZSAnJywKICAgICAgICAnIHNpZGVfaW5wdXRzPSVzJyAlIHN0cihzZWxmLnNpZGVfaW5wdXRzKSBpZiBzZWxmLnNpZGVfaW5wdXRzIGVsc2UgJycpCgogIGRlZiBfY2hlY2tfcGNvbGxlY3Rpb24oc2VsZiwgcGNvbGwpOgogICAgIyB0eXBlOiAocHZhbHVlLlBDb2xsZWN0aW9uKSAtPiBOb25lCiAgICBpZiBub3QgaXNpbnN0YW5jZShwY29sbCwgcHZhbHVlLlBDb2xsZWN0aW9uKToKICAgICAgcmFpc2UgZXJyb3IuVHJhbnNmb3JtRXJyb3IoJ0V4cGVjdGluZyBhIFBDb2xsZWN0aW9uIGFyZ3VtZW50LicpCiAgICBpZiBub3QgcGNvbGwucGlwZWxpbmU6CiAgICAgIHJhaXNlIGVycm9yLlRyYW5zZm9ybUVycm9yKCdQQ29sbGVjdGlvbiBub3QgcGFydCBvZiBhIHBpcGVsaW5lLicpCgogIGRlZiBnZXRfd2luZG93aW5nKHNlbGYsIGlucHV0cyk6CiAgICAjIHR5cGU6IChBbnkpIC0+IFdpbmRvd2luZwoKICAgICIiIlJldHVybnMgdGhlIHdpbmRvdyBmdW5jdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGggdHJhbnNmb3JtJ3Mgb3V0cHV0LgoKICAgIEJ5IGRlZmF1bHQgbW9zdCB0cmFuc2Zvcm1zIGp1c3QgcmV0dXJuIHRoZSB3aW5kb3dpbmcgZnVuY3Rpb24gYXNzb2NpYXRlZAogICAgd2l0aCB0aGUgaW5wdXQgUENvbGxlY3Rpb24gKG9yIHRoZSBmaXJzdCBpbnB1dCBpZiBzZXZlcmFsKS4KICAgICIiIgogICAgIyBUT0RPKHJvYmVydHdiKTogQXNzZXJ0IGFsbCBpbnB1dCBXaW5kb3dGbnMgY29tcGF0aWJsZS4KICAgIHJldHVybiBpbnB1dHNbMF0ud2luZG93aW5nCgogIGRlZiBfX3Jyc2hpZnRfXyhzZWxmLCBsYWJlbCk6CiAgICByZXR1cm4gX05hbWVkUFRyYW5zZm9ybShzZWxmLCBsYWJlbCkKCiAgZGVmIF9fb3JfXyhzZWxmLCByaWdodCk6CiAgICAiIiJVc2VkIHRvIGNvbXBvc2UgUFRyYW5zZm9ybXMsIGUuZy4sIHB0cmFuc2Zvcm0xIHwgcHRyYW5zZm9ybTIuIiIiCiAgICBpZiBpc2luc3RhbmNlKHJpZ2h0LCBQVHJhbnNmb3JtKToKICAgICAgcmV0dXJuIF9DaGFpbmVkUFRyYW5zZm9ybShzZWxmLCByaWdodCkKICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAoKICBkZWYgX19yb3JfXyhzZWxmLCBsZWZ0LCBsYWJlbD1Ob25lKToKICAgICIiIlVzZWQgdG8gYXBwbHkgdGhpcyBQVHJhbnNmb3JtIHRvIG5vbi1QVmFsdWVzLCBlLmcuLCBhIHR1cGxlLiIiIgogICAgcHZhbHVlaXNoLCBwdmFsdWVzID0gc2VsZi5fZXh0cmFjdF9pbnB1dF9wdmFsdWVzKGxlZnQpCiAgICBwaXBlbGluZXMgPSBbdi5waXBlbGluZSBmb3IgdiBpbiBwdmFsdWVzIGlmIGlzaW5zdGFuY2UodiwgcHZhbHVlLlBWYWx1ZSldCiAgICBpZiBwdmFsdWVzIGFuZCBub3QgcGlwZWxpbmVzOgogICAgICBkZWZlcnJlZCA9IEZhbHNlCiAgICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICAgIGZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHBpcGVsaW5lCiAgICAgIGZyb20gYXBhY2hlX2JlYW0ub3B0aW9ucy5waXBlbGluZV9vcHRpb25zIGltcG9ydCBQaXBlbGluZU9wdGlvbnMKICAgICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgogICAgICBwID0gcGlwZWxpbmUuUGlwZWxpbmUoJ0RpcmVjdFJ1bm5lcicsIFBpcGVsaW5lT3B0aW9ucyhzeXMuYXJndikpCiAgICBlbHNlOgogICAgICBpZiBub3QgcGlwZWxpbmVzOgogICAgICAgIGlmIHNlbGYucGlwZWxpbmUgaXMgbm90IE5vbmU6CiAgICAgICAgICBwID0gc2VsZi5waXBlbGluZQogICAgICAgIGVsc2U6CiAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICciJXMiIHJlcXVpcmVzIGEgcGlwZWxpbmUgdG8gYmUgc3BlY2lmaWVkICcKICAgICAgICAgICAgICAnYXMgdGhlcmUgYXJlIG5vIGRlZmVycmVkIGlucHV0cy4nICUgc2VsZi5sYWJlbCkKICAgICAgZWxzZToKICAgICAgICBwID0gc2VsZi5waXBlbGluZSBvciBwaXBlbGluZXNbMF0KICAgICAgICBmb3IgcHAgaW4gcGlwZWxpbmVzOgogICAgICAgICAgaWYgcCAhPSBwcDoKICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICdNaXhpbmcgdmFsdWUgZnJvbSBkaWZmZXJlbnQgcGlwZWxpbmVzIG5vdCBhbGxvd2VkLicpCiAgICAgIGRlZmVycmVkID0gbm90IGdldGF0dHIocC5ydW5uZXIsICdpc19lYWdlcicsIEZhbHNlKQogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBDcmVhdGUKICAgICMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIHJlcGxhY2VtZW50cyA9IHsKICAgICAgICBpZCh2KTogcCB8ICdDcmVhdGVQSW5wdXQlcycgJSBpeCA+PiBDcmVhdGUodiwgcmVzaHVmZmxlPUZhbHNlKQogICAgICAgIGZvciBpeCwKICAgICAgICB2IGluIGVudW1lcmF0ZShwdmFsdWVzKQogICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHYsIHB2YWx1ZS5QVmFsdWUpIGFuZCB2IGlzIG5vdCBOb25lCiAgICB9CiAgICBwdmFsdWVpc2ggPSBfU2V0SW5wdXRQVmFsdWVzKCkudmlzaXQocHZhbHVlaXNoLCByZXBsYWNlbWVudHMpCiAgICBzZWxmLnBpcGVsaW5lID0gcAogICAgcmVzdWx0ID0gcC5hcHBseShzZWxmLCBwdmFsdWVpc2gsIGxhYmVsKQogICAgaWYgZGVmZXJyZWQ6CiAgICAgIHJldHVybiByZXN1bHQKICAgIF9hbGxvY2F0ZV9tYXRlcmlhbGl6ZWRfcGlwZWxpbmUocCkKICAgIG1hdGVyaWFsaXplZF9yZXN1bHQgPSBfQWRkTWF0ZXJpYWxpemF0aW9uVHJhbnNmb3JtcygpLnZpc2l0KHJlc3VsdCkKICAgIHAucnVuKCkud2FpdF91bnRpbF9maW5pc2goKQogICAgX3JlbGVhc2VfbWF0ZXJpYWxpemVkX3BpcGVsaW5lKHApCiAgICByZXR1cm4gX0ZpbmFsaXplTWF0ZXJpYWxpemF0aW9uKCkudmlzaXQobWF0ZXJpYWxpemVkX3Jlc3VsdCkKCiAgZGVmIF9leHRyYWN0X2lucHV0X3B2YWx1ZXMoc2VsZiwgcHZhbHVlaXNoKToKICAgICIiIkV4dHJhY3QgYWxsIHRoZSBwdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUgaW5wdXQgcHZhbHVlaXNoLgoKICAgIFJldHVybnMgcHZhbHVlaXNoIGFzIHdlbGwgYXMgdGhlIGZsYXQgaW5wdXRzIGxpc3QgYXMgdGhlIGlucHV0IG1heSBoYXZlIHRvCiAgICBiZSBjb3BpZWQgYXMgaW5zcGVjdGlvbiBtYXkgYmUgZGVzdHJ1Y3RpdmUuCgogICAgQnkgZGVmYXVsdCwgcmVjdXJzaXZlbHkgZXh0cmFjdHMgdHVwbGUgY29tcG9uZW50cyBhbmQgZGljdCB2YWx1ZXMuCgogICAgR2VuZXJhbGx5IG9ubHkgbmVlZHMgdG8gYmUgb3ZlcnJpZGVuIGZvciBtdWx0aS1pbnB1dCBQVHJhbnNmb3Jtcy4KICAgICIiIgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyCiAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwaXBlbGluZQogICAgIyBweWxpbnQ6IGVuYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIKICAgIGlmIGlzaW5zdGFuY2UocHZhbHVlaXNoLCBwaXBlbGluZS5QaXBlbGluZSk6CiAgICAgIHB2YWx1ZWlzaCA9IHB2YWx1ZS5QQmVnaW4ocHZhbHVlaXNoKQoKICAgIGRlZiBfZGljdF90dXBsZV9sZWF2ZXMocHZhbHVlaXNoKToKICAgICAgaWYgaXNpbnN0YW5jZShwdmFsdWVpc2gsIHR1cGxlKToKICAgICAgICBmb3IgYSBpbiBwdmFsdWVpc2g6CiAgICAgICAgICBmb3IgcCBpbiBfZGljdF90dXBsZV9sZWF2ZXMoYSk6CiAgICAgICAgICAgIHlpZWxkIHAKICAgICAgZWxpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgZGljdCk6CiAgICAgICAgZm9yIGEgaW4gcHZhbHVlaXNoLnZhbHVlcygpOgogICAgICAgICAgZm9yIHAgaW4gX2RpY3RfdHVwbGVfbGVhdmVzKGEpOgogICAgICAgICAgICB5aWVsZCBwCiAgICAgIGVsc2U6CiAgICAgICAgeWllbGQgcHZhbHVlaXNoCgogICAgcmV0dXJuIHB2YWx1ZWlzaCwgdHVwbGUoX2RpY3RfdHVwbGVfbGVhdmVzKHB2YWx1ZWlzaCkpCgogIGRlZiBfcHZhbHVpc2hfZnJvbV9kaWN0KHNlbGYsIGlucHV0X2RpY3QpOgogICAgaWYgbGVuKGlucHV0X2RpY3QpID09IDE6CiAgICAgIHJldHVybiBuZXh0KGl0ZXIoaW5wdXRfZGljdC52YWx1ZXMoKSkpCiAgICBlbHNlOgogICAgICByZXR1cm4gaW5wdXRfZGljdAoKICBfa25vd25fdXJucyA9IHt9ICAjIHR5cGU6IERpY3Rbc3RyLCBUdXBsZVtPcHRpb25hbFt0eXBlXSwgQ29uc3RydWN0b3JGbl1dCgogIEBjbGFzc21ldGhvZAogIEBvdmVybG9hZAogIGRlZiByZWdpc3Rlcl91cm4oCiAgICAgIGNscywKICAgICAgdXJuLCAgIyB0eXBlOiBzdHIKICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IFR5cGVbVF0KICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBDYWxsYWJsZVtbVW5pb25bdHlwZSwgQ2FsbGFibGVbW1QsIFBpcGVsaW5lQ29udGV4dF0sIEFueV1dXSwgQ2FsbGFibGVbW1QsIFBpcGVsaW5lQ29udGV4dF0sIEFueV1dCiAgICBwYXNzCgogIEBjbGFzc21ldGhvZAogIEBvdmVybG9hZAogIGRlZiByZWdpc3Rlcl91cm4oCiAgICAgIGNscywKICAgICAgdXJuLCAgIyB0eXBlOiBzdHIKICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IE5vbmUKICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBDYWxsYWJsZVtbVW5pb25bdHlwZSwgQ2FsbGFibGVbW2J5dGVzLCBQaXBlbGluZUNvbnRleHRdLCBBbnldXV0sIENhbGxhYmxlW1tieXRlcywgUGlwZWxpbmVDb250ZXh0XSwgQW55XV0KICAgIHBhc3MKCiAgQGNsYXNzbWV0aG9kCiAgQG92ZXJsb2FkCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsCiAgICAgICAgICAgICAgICAgICB1cm4sICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IFR5cGVbVF0KICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICAjIHR5cGU6IENhbGxhYmxlW1tULCBQaXBlbGluZUNvbnRleHRdLCBBbnldCiAgICAgICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE5vbmUKICAgIHBhc3MKCiAgQGNsYXNzbWV0aG9kCiAgQG92ZXJsb2FkCiAgZGVmIHJlZ2lzdGVyX3VybihjbHMsCiAgICAgICAgICAgICAgICAgICB1cm4sICAjIHR5cGU6IHN0cgogICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUsICAjIHR5cGU6IE5vbmUKICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICAjIHR5cGU6IENhbGxhYmxlW1tieXRlcywgUGlwZWxpbmVDb250ZXh0XSwgQW55XQogICAgICAgICAgICAgICAgICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBOb25lCiAgICBwYXNzCgogIEBjbGFzc21ldGhvZAogIGRlZiByZWdpc3Rlcl91cm4oY2xzLCB1cm4sIHBhcmFtZXRlcl90eXBlLCBjb25zdHJ1Y3Rvcj1Ob25lKToKICAgIGRlZiByZWdpc3Rlcihjb25zdHJ1Y3Rvcik6CiAgICAgIGlmIGlzaW5zdGFuY2UoY29uc3RydWN0b3IsIHR5cGUpOgogICAgICAgIGNvbnN0cnVjdG9yLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIgPSByZWdpc3RlcigKICAgICAgICAgICAgY29uc3RydWN0b3IuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcikKICAgICAgZWxzZToKICAgICAgICBjbHMuX2tub3duX3VybnNbdXJuXSA9IHBhcmFtZXRlcl90eXBlLCBjb25zdHJ1Y3RvcgogICAgICByZXR1cm4gY29uc3RydWN0b3IKCiAgICBpZiBjb25zdHJ1Y3RvcjoKICAgICAgIyBVc2VkIGFzIGEgc3RhdGVtZW50LgogICAgICByZWdpc3Rlcihjb25zdHJ1Y3RvcikKICAgIGVsc2U6CiAgICAgICMgVXNlZCBhcyBhIGRlY29yYXRvci4KICAgICAgcmV0dXJuIHJlZ2lzdGVyCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQsIGhhc19wYXJ0cz1GYWxzZSk6CiAgICAjIHR5cGU6IChQaXBlbGluZUNvbnRleHQsIGJvb2wpIC0+IGJlYW1fcnVubmVyX2FwaV9wYjIuRnVuY3Rpb25TcGVjCiAgICBmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgogICAgdXJuLCB0eXBlZF9wYXJhbSA9IHNlbGYudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoY29udGV4dCkKICAgIGlmIHVybiA9PSBweXRob25fdXJucy5HRU5FUklDX0NPTVBPU0lURV9UUkFOU0ZPUk0gYW5kIG5vdCBoYXNfcGFydHM6CiAgICAgICMgVE9ETyhCRUFNLTM4MTIpOiBSZW1vdmUgdGhpcyBmYWxsYmFjay4KICAgICAgdXJuLCB0eXBlZF9wYXJhbSA9IHNlbGYudG9fcnVubmVyX2FwaV9waWNrbGVkKGNvbnRleHQpCiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5GdW5jdGlvblNwZWMoCiAgICAgICAgdXJuPXVybiwKICAgICAgICBwYXlsb2FkPXR5cGVkX3BhcmFtLlNlcmlhbGl6ZVRvU3RyaW5nKCkgaWYgaXNpbnN0YW5jZSgKICAgICAgICAgICAgdHlwZWRfcGFyYW0sIG1lc3NhZ2UuTWVzc2FnZSkgZWxzZSB0eXBlZF9wYXJhbS5lbmNvZGUoJ3V0Zi04JykKICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVkX3BhcmFtLCBzdHIpIGVsc2UgdHlwZWRfcGFyYW0pCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkoY2xzLAogICAgICAgICAgICAgICAgICAgICAgcHJvdG8sICAjIHR5cGU6IE9wdGlvbmFsW2JlYW1fcnVubmVyX2FwaV9wYjIuUFRyYW5zZm9ybV0KICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgICMgdHlwZTogUGlwZWxpbmVDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE9wdGlvbmFsW1BUcmFuc2Zvcm1dCiAgICBpZiBwcm90byBpcyBOb25lIG9yIHByb3RvLnNwZWMgaXMgTm9uZSBvciBub3QgcHJvdG8uc3BlYy51cm46CiAgICAgIHJldHVybiBOb25lCiAgICBwYXJhbWV0ZXJfdHlwZSwgY29uc3RydWN0b3IgPSBjbHMuX2tub3duX3VybnNbcHJvdG8uc3BlYy51cm5dCgogICAgdHJ5OgogICAgICByZXR1cm4gY29uc3RydWN0b3IoCiAgICAgICAgICBwcm90bywKICAgICAgICAgIHByb3RvX3V0aWxzLnBhcnNlX0J5dGVzKHByb3RvLnNwZWMucGF5bG9hZCwgcGFyYW1ldGVyX3R5cGUpLAogICAgICAgICAgY29udGV4dCkKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgIGlmIGNvbnRleHQuYWxsb3dfcHJvdG9faG9sZGVyczoKICAgICAgICAjIEZvciBleHRlcm5hbCB0cmFuc2Zvcm1zIHdlIGNhbm5vdCBidWlsZCBhIFB5dGhvbiBQYXJEbyBvYmplY3Qgc28KICAgICAgICAjIHdlIGJ1aWxkIGEgaG9sZGVyIHRyYW5zZm9ybSBpbnN0ZWFkLgogICAgICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBSdW5uZXJBUElQVHJhbnNmb3JtSG9sZGVyCiAgICAgICAgcmV0dXJuIFJ1bm5lckFQSVBUcmFuc2Zvcm1Ib2xkZXIocHJvdG8uc3BlYywgY29udGV4dCkKICAgICAgcmFpc2UKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKAogICAgICBzZWxmLAogICAgICB1bnVzZWRfY29udGV4dCAgIyB0eXBlOiBQaXBlbGluZUNvbnRleHQKICApOgogICAgIyB0eXBlOiAoLi4uKSAtPiBUdXBsZVtzdHIsIE9wdGlvbmFsW1VuaW9uW21lc3NhZ2UuTWVzc2FnZSwgYnl0ZXMsIHN0cl1dXQogICAgIyBUaGUgcGF5bG9hZCBoZXJlIGlzIGp1c3QgdG8gZWFzZSBkZWJ1Z2dpbmcuCiAgICByZXR1cm4gKAogICAgICAgIHB5dGhvbl91cm5zLkdFTkVSSUNfQ09NUE9TSVRFX1RSQU5TRk9STSwKICAgICAgICBnZXRhdHRyKHNlbGYsICdfZm5fYXBpX3BheWxvYWQnLCBzdHIoc2VsZikpKQoKICBkZWYgdG9fcnVubmVyX2FwaV9waWNrbGVkKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gVHVwbGVbc3RyLCBieXRlc10KICAgIHJldHVybiAocHl0aG9uX3VybnMuUElDS0xFRF9UUkFOU0ZPUk0sIHBpY2tsZXIuZHVtcHMoc2VsZikpCgogIGRlZiBydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0KHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgoKQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKHB5dGhvbl91cm5zLkdFTkVSSUNfQ09NUE9TSVRFX1RSQU5TRk9STSwgTm9uZSkKZGVmIF9jcmVhdGVfdHJhbnNmb3JtKHVudXNlZF9wdHJhbnNmb3JtLCBwYXlsb2FkLCB1bnVzZWRfY29udGV4dCk6CiAgZW1wdHlfdHJhbnNmb3JtID0gUFRyYW5zZm9ybSgpCiAgZW1wdHlfdHJhbnNmb3JtLl9mbl9hcGlfcGF5bG9hZCA9IHBheWxvYWQKICByZXR1cm4gZW1wdHlfdHJhbnNmb3JtCgoKQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKHB5dGhvbl91cm5zLlBJQ0tMRURfVFJBTlNGT1JNLCBOb25lKQpkZWYgX3VucGlja2xlX3RyYW5zZm9ybSh1bnVzZWRfcHRyYW5zZm9ybSwgcGlja2xlZF9ieXRlcywgdW51c2VkX2NvbnRleHQpOgogIHJldHVybiBwaWNrbGVyLmxvYWRzKHBpY2tsZWRfYnl0ZXMpCgoKY2xhc3MgX0NoYWluZWRQVHJhbnNmb3JtKFBUcmFuc2Zvcm0pOgogIGRlZiBfX2luaXRfXyhzZWxmLCAqcGFydHMpOgogICAgIyB0eXBlOiAoKlBUcmFuc2Zvcm0pIC0+IE5vbmUKICAgIHN1cGVyKF9DaGFpbmVkUFRyYW5zZm9ybSwgc2VsZikuX19pbml0X18obGFiZWw9c2VsZi5fY2hhaW5fbGFiZWwocGFydHMpKQogICAgc2VsZi5fcGFydHMgPSBwYXJ0cwoKICBkZWYgX2NoYWluX2xhYmVsKHNlbGYsIHBhcnRzKToKICAgIHJldHVybiAnfCcuam9pbihwLmxhYmVsIGZvciBwIGluIHBhcnRzKQoKICBkZWYgX19vcl9fKHNlbGYsIHJpZ2h0KToKICAgIGlmIGlzaW5zdGFuY2UocmlnaHQsIFBUcmFuc2Zvcm0pOgogICAgICAjIENyZWF0ZSBhIGZsYXQgbGlzdCByYXRoZXIgdGhhbiBhIG5lc3RlZCB0cmVlIG9mIGNvbXBvc2l0ZQogICAgICAjIHRyYW5zZm9ybXMgZm9yIGJldHRlciBtb25pdG9yaW5nLCBldGMuCiAgICAgIHJldHVybiBfQ2hhaW5lZFBUcmFuc2Zvcm0oKihzZWxmLl9wYXJ0cyArIChyaWdodCwgKSkpCiAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsKToKICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3Iub3JfLCBzZWxmLl9wYXJ0cywgcHZhbCkKCgpjbGFzcyBQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMoUFRyYW5zZm9ybSk6CiAgIiIiQSBzdXBlcmNsYXNzIGZvciBhbnkgOmNsYXNzOmBQVHJhbnNmb3JtYCAoZS5nLgogIDpmdW5jOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkZsYXRNYXBgIG9yCiAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlLkNvbWJpbmVGbmApCiAgaW52b2tpbmcgdXNlciBjb2RlLgoKICA6Y2xhc3M6YFBUcmFuc2Zvcm1gIHMgbGlrZSA6ZnVuYzpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5GbGF0TWFwYAogIGludm9rZSB1c2VyLXN1cHBsaWVkIGNvZGUgaW4gc29tZSBraW5kIG9mIHBhY2thZ2UgKGUuZy4gYQogIDpjbGFzczpgfmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZS5Eb0ZuYCkgYW5kIG9wdGlvbmFsbHkgcHJvdmlkZSBhcmd1bWVudHMKICBhbmQgc2lkZSBpbnB1dHMgdG8gdGhhdCBjb2RlLiBUaGlzIGludGVybmFsLXVzZS1vbmx5IGNsYXNzIGNvbnRhaW5zIGNvbW1vbgogIGZ1bmN0aW9uYWxpdHkgZm9yIDpjbGFzczpgUFRyYW5zZm9ybWAgcyB0aGF0IGZpdCB0aGlzIG1vZGVsLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBmbiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICMgdHlwZTogKFdpdGhUeXBlSGludHMsICpBbnksICoqQW55KSAtPiBOb25lCiAgICBpZiBpc2luc3RhbmNlKGZuLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyhmbiwgV2l0aFR5cGVIaW50cyk6CiAgICAgICMgRG9uJ3QgdHJlYXQgRm4gY2xhc3Mgb2JqZWN0cyBhcyBjYWxsYWJsZXMuCiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VzZSAlcygpIG5vdCAlcy4nICUgKGZuLl9fbmFtZV9fLCBmbi5fX25hbWVfXykpCiAgICBzZWxmLmZuID0gc2VsZi5tYWtlX2ZuKGZuLCBib29sKGFyZ3Mgb3Iga3dhcmdzKSkKICAgICMgTm93IHRoYXQgd2UgZmlndXJlIG91dCB0aGUgbGFiZWwsIGluaXRpYWxpemUgdGhlIHN1cGVyLWNsYXNzLgogICAgc3VwZXIoUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLCBzZWxmKS5fX2luaXRfXygpCgogICAgaWYgKGFueShbaXNpbnN0YW5jZSh2LCBwdmFsdWUuUENvbGxlY3Rpb24pIGZvciB2IGluIGFyZ3NdKSBvcgogICAgICAgIGFueShbaXNpbnN0YW5jZSh2LCBwdmFsdWUuUENvbGxlY3Rpb24pIGZvciB2IGluIGt3YXJncy52YWx1ZXMoKV0pKToKICAgICAgcmFpc2UgZXJyb3IuU2lkZUlucHV0RXJyb3IoCiAgICAgICAgICAnUENvbGxlY3Rpb24gdXNlZCBkaXJlY3RseSBhcyBzaWRlIGlucHV0IGFyZ3VtZW50LiBTcGVjaWZ5ICcKICAgICAgICAgICdBc0l0ZXIocGNvbGxlY3Rpb24pIG9yIEFzU2luZ2xldG9uKHBjb2xsZWN0aW9uKSB0byBpbmRpY2F0ZSBob3cgdGhlICcKICAgICAgICAgICdQQ29sbGVjdGlvbiBpcyB0byBiZSB1c2VkLicpCiAgICBzZWxmLmFyZ3MsIHNlbGYua3dhcmdzLCBzZWxmLnNpZGVfaW5wdXRzID0gdXRpbC5yZW1vdmVfb2JqZWN0c19mcm9tX2FyZ3MoCiAgICAgICAgYXJncywga3dhcmdzLCBwdmFsdWUuQXNTaWRlSW5wdXQpCiAgICBzZWxmLnJhd19zaWRlX2lucHV0cyA9IGFyZ3MsIGt3YXJncwoKICAgICMgUHJldmVudCBuYW1lIGNvbGxpc2lvbnMgd2l0aCBmbnMgb2YgdGhlIGZvcm0gJzxmdW5jdGlvbiA8bGFtYmRhPiBhdCAuLi4+JwogICAgc2VsZi5fY2FjaGVkX2ZuID0gc2VsZi5mbgoKICAgICMgRW5zdXJlIGZuIGFuZCBzaWRlIGlucHV0cyBhcmUgcGlja2xhYmxlIGZvciByZW1vdGUgZXhlY3V0aW9uLgogICAgdHJ5OgogICAgICBzZWxmLmZuID0gcGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHNlbGYuZm4pKQogICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlOgogICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1VuYWJsZSB0byBwaWNrbGUgZm4gJXM6ICVzJyAlIChzZWxmLmZuLCBlKSkKCiAgICBzZWxmLmFyZ3MgPSBwaWNrbGVyLmxvYWRzKHBpY2tsZXIuZHVtcHMoc2VsZi5hcmdzKSkKICAgIHNlbGYua3dhcmdzID0gcGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHNlbGYua3dhcmdzKSkKCiAgICAjIEZvciB0eXBlIGhpbnRzLCBiZWNhdXNlIGxvYWRzKGR1bXBzKGNsYXNzKSkgIT0gY2xhc3MuCiAgICBzZWxmLmZuID0gc2VsZi5fY2FjaGVkX2ZuCgogIGRlZiB3aXRoX2lucHV0X3R5cGVzKAogICAgICBzZWxmLCBpbnB1dF90eXBlX2hpbnQsICpzaWRlX2lucHV0c19hcmdfaGludHMsICoqc2lkZV9pbnB1dF9rd2FyZ19oaW50cyk6CiAgICAiIiJBbm5vdGF0ZXMgdGhlIHR5cGVzIG9mIG1haW4gaW5wdXRzIGFuZCBzaWRlIGlucHV0cyBmb3IgdGhlIFBUcmFuc2Zvcm0uCgogICAgQXJnczoKICAgICAgaW5wdXRfdHlwZV9oaW50OiBBbiBpbnN0YW5jZSBvZiBhbiBhbGxvd2VkIGJ1aWx0LWluIHR5cGUsIGEgY3VzdG9tIGNsYXNzLAogICAgICAgIG9yIGFuIGluc3RhbmNlIG9mIGEgdHlwZWhpbnRzLlR5cGVDb25zdHJhaW50LgogICAgICAqc2lkZV9pbnB1dHNfYXJnX2hpbnRzOiBBIHZhcmlhYmxlIGxlbmd0aCBhcmd1bWVudCBjb21wb3NlZCBvZgogICAgICAgIG9mIGFuIGFsbG93ZWQgYnVpbHQtaW4gdHlwZSwgYSBjdXN0b20gY2xhc3MsIG9yIGEKICAgICAgICB0eXBlaGludHMuVHlwZUNvbnN0cmFpbnQuCiAgICAgICoqc2lkZV9pbnB1dF9rd2FyZ19oaW50czogQSBkaWN0aW9uYXJ5IGFyZ3VtZW50IGNvbXBvc2VkIG9mCiAgICAgICAgb2YgYW4gYWxsb3dlZCBidWlsdC1pbiB0eXBlLCBhIGN1c3RvbSBjbGFzcywgb3IgYQogICAgICAgIHR5cGVoaW50cy5UeXBlQ29uc3RyYWludC4KCiAgICBFeGFtcGxlIG9mIGFubm90YXRpbmcgdGhlIHR5cGVzIG9mIHNpZGUtaW5wdXRzOjoKCiAgICAgIEZsYXRNYXAoKS53aXRoX2lucHV0X3R5cGVzKGludCwgaW50LCBib29sKQoKICAgIFJhaXNlczoKICAgICAgOmNsYXNzOmBUeXBlRXJyb3JgOiBJZiAqKnR5cGVfaGludCoqIGlzIG5vdCBhIHZhbGlkIHR5cGUtaGludC4KICAgICAgICBTZWUKICAgICAgICA6ZnVuYzpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMudmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW1gCiAgICAgICAgZm9yIGZ1cnRoZXIgZGV0YWlscy4KCiAgICBSZXR1cm5zOgogICAgICA6Y2xhc3M6YFBUcmFuc2Zvcm1gOiBBIHJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2YgdGhpcyBwYXJ0aWN1bGFyCiAgICAgIDpjbGFzczpgUFRyYW5zZm9ybWAgb2JqZWN0LiBUaGlzIGFsbG93cyBjaGFpbmluZyB0eXBlLWhpbnRpbmcgcmVsYXRlZAogICAgICBtZXRob2RzLgogICAgIiIiCiAgICBzdXBlcihQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMsIHNlbGYpLndpdGhfaW5wdXRfdHlwZXMoaW5wdXRfdHlwZV9oaW50KQoKICAgIHNpZGVfaW5wdXRzX2FyZ19oaW50cyA9IG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGVzKAogICAgICAgIHNpZGVfaW5wdXRzX2FyZ19oaW50cykKICAgIHNpZGVfaW5wdXRfa3dhcmdfaGludHMgPSBuYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmNvbnZlcnRfdG9fYmVhbV90eXBlcygKICAgICAgICBzaWRlX2lucHV0X2t3YXJnX2hpbnRzKQoKICAgIGZvciBzaSBpbiBzaWRlX2lucHV0c19hcmdfaGludHM6CiAgICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKHNpLCAnVHlwZSBoaW50cyBmb3IgYSBQVHJhbnNmb3JtJykKICAgIGZvciBzaSBpbiBzaWRlX2lucHV0X2t3YXJnX2hpbnRzLnZhbHVlcygpOgogICAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbShzaSwgJ1R5cGUgaGludHMgZm9yIGEgUFRyYW5zZm9ybScpCgogICAgc2VsZi5zaWRlX2lucHV0c190eXBlcyA9IHNpZGVfaW5wdXRzX2FyZ19oaW50cwogICAgcmV0dXJuIFdpdGhUeXBlSGludHMud2l0aF9pbnB1dF90eXBlcygKICAgICAgICBzZWxmLCBpbnB1dF90eXBlX2hpbnQsICpzaWRlX2lucHV0c19hcmdfaGludHMsICoqc2lkZV9pbnB1dF9rd2FyZ19oaW50cykKCiAgZGVmIHR5cGVfY2hlY2tfaW5wdXRzKHNlbGYsIHB2YWx1ZWlzaCk6CiAgICB0eXBlX2hpbnRzID0gc2VsZi5nZXRfdHlwZV9oaW50cygpCiAgICBpbnB1dF90eXBlcyA9IHR5cGVfaGludHMuaW5wdXRfdHlwZXMKICAgIGlmIGlucHV0X3R5cGVzOgogICAgICBhcmdzLCBrd2FyZ3MgPSBzZWxmLnJhd19zaWRlX2lucHV0cwoKICAgICAgZGVmIGVsZW1lbnRfdHlwZShzaWRlX2lucHV0KToKICAgICAgICBpZiBpc2luc3RhbmNlKHNpZGVfaW5wdXQsIHB2YWx1ZS5Bc1NpZGVJbnB1dCk6CiAgICAgICAgICByZXR1cm4gc2lkZV9pbnB1dC5lbGVtZW50X3R5cGUKICAgICAgICByZXR1cm4gaW5zdGFuY2VfdG9fdHlwZShzaWRlX2lucHV0KQoKICAgICAgYXJnX3R5cGVzID0gW3B2YWx1ZWlzaC5lbGVtZW50X3R5cGVdICsgW2VsZW1lbnRfdHlwZSh2KSBmb3IgdiBpbiBhcmdzXQogICAgICBrd2FyZ3NfdHlwZXMgPSB7azogZWxlbWVudF90eXBlKHYpIGZvciAoaywgdikgaW4ga3dhcmdzLml0ZW1zKCl9CiAgICAgIGFyZ3NwZWNfZm4gPSBzZWxmLl9wcm9jZXNzX2FyZ3NwZWNfZm4oKQogICAgICBiaW5kaW5ncyA9IGdldGNhbGxhcmdzX2ZvcmhpbnRzKGFyZ3NwZWNfZm4sICphcmdfdHlwZXMsICoqa3dhcmdzX3R5cGVzKQogICAgICBoaW50cyA9IGdldGNhbGxhcmdzX2ZvcmhpbnRzKAogICAgICAgICAgYXJnc3BlY19mbiwgKmlucHV0X3R5cGVzWzBdLCAqKmlucHV0X3R5cGVzWzFdKQogICAgICBmb3IgYXJnLCBoaW50IGluIGhpbnRzLml0ZW1zKCk6CiAgICAgICAgaWYgYXJnLnN0YXJ0c3dpdGgoJ19fdW5rbm93bl9fJyk6CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGhpbnQgaXMgTm9uZToKICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgaWYgbm90IHR5cGVoaW50cy5pc19jb25zaXN0ZW50X3dpdGgoYmluZGluZ3MuZ2V0KGFyZywgdHlwZWhpbnRzLkFueSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludCk6CiAgICAgICAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcigKICAgICAgICAgICAgICAnVHlwZSBoaW50IHZpb2xhdGlvbiBmb3IgXCd7bGFiZWx9XCc6IHJlcXVpcmVzIHtoaW50fSBidXQgZ290ICcKICAgICAgICAgICAgICAne2FjdHVhbF90eXBlfSBmb3Ige2FyZ31cbkZ1bGwgdHlwZSBoaW50Olxue2RlYnVnX3N0cn0nLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgbGFiZWw9c2VsZi5sYWJlbCwKICAgICAgICAgICAgICAgICAgaGludD1oaW50LAogICAgICAgICAgICAgICAgICBhY3R1YWxfdHlwZT1iaW5kaW5nc1thcmddLAogICAgICAgICAgICAgICAgICBhcmc9YXJnLAogICAgICAgICAgICAgICAgICBkZWJ1Z19zdHI9dHlwZV9oaW50cy5kZWJ1Z19zdHIoKSkpCgogIGRlZiBfcHJvY2Vzc19hcmdzcGVjX2ZuKHNlbGYpOgogICAgIiIiUmV0dXJucyBhbiBhcmdzcGVjIG9mIHRoZSBmdW5jdGlvbiBhY3R1YWxseSBjb25zdW1pbmcgdGhlIGRhdGEuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIG1ha2VfZm4oc2VsZiwgZm4sIGhhc19zaWRlX2lucHV0cyk6CiAgICAjIFRPRE8oc2lsdml1Yyk6IEFkZCBjb21tZW50IGRlc2NyaWJpbmcgdGhhdCB0aGlzIGlzIG1lYW50IHRvIGJlIG92ZXJyaWRlbgogICAgIyBieSBtZXRob2RzIGRldGVjdGluZyBjYWxsYWJsZXMgYW5kIHdyYXBwaW5nIHRoZW0gaW4gRG9GbnMuCiAgICByZXR1cm4gZm4KCiAgZGVmIGRlZmF1bHRfbGFiZWwoc2VsZik6CiAgICByZXR1cm4gJyVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuZm4uZGVmYXVsdF9sYWJlbCgpKQoKCmNsYXNzIF9QVHJhbnNmb3JtRm5QVHJhbnNmb3JtKFBUcmFuc2Zvcm0pOgogICIiIkEgY2xhc3Mgd3JhcHBlciBmb3IgYSBmdW5jdGlvbi1iYXNlZCB0cmFuc2Zvcm0uIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGZuLCAqYXJncywgKiprd2FyZ3MpOgogICAgc3VwZXIoX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm0sIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX2ZuID0gZm4KICAgIHNlbGYuX2FyZ3MgPSBhcmdzCiAgICBzZWxmLl9rd2FyZ3MgPSBrd2FyZ3MKCiAgZGVmIGRpc3BsYXlfZGF0YShzZWxmKToKICAgIHJlcyA9IHsKICAgICAgICAnZm4nOiAoCiAgICAgICAgICAgIHNlbGYuX2ZuLl9fbmFtZV9fCiAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fZm4sICdfX25hbWVfXycpIGVsc2Ugc2VsZi5fZm4uX19jbGFzc19fKSwKICAgICAgICAnYXJncyc6IERpc3BsYXlEYXRhSXRlbShzdHIoc2VsZi5fYXJncykpLmRyb3BfaWZfZGVmYXVsdCgnKCknKSwKICAgICAgICAna3dhcmdzJzogRGlzcGxheURhdGFJdGVtKHN0cihzZWxmLl9rd2FyZ3MpKS5kcm9wX2lmX2RlZmF1bHQoJ3t9JykKICAgIH0KICAgIHJldHVybiByZXMKCiAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAjIFNpbmNlIHRoZSBQVHJhbnNmb3JtIHdpbGwgYmUgaW1wbGVtZW50ZWQgZW50aXJlbHkgYXMgYSBmdW5jdGlvbgogICAgIyAob25jZSBjYWxsZWQpLCB3ZSBuZWVkIHRvIHBhc3MgdGhyb3VnaCBhbnkgdHlwZS1oaW50aW5nIGluZm9ybWF0aW9uIHRoYXQKICAgICMgbWF5IGhhdmUgYmVlbiBhbm5vdGF0ZWQgdmlhIHRoZSAud2l0aF9pbnB1dF90eXBlcygpIGFuZAogICAgIyAud2l0aF9vdXRwdXRfdHlwZXMoKSBtZXRob2RzLgogICAga3dhcmdzID0gZGljdChzZWxmLl9rd2FyZ3MpCiAgICBhcmdzID0gdHVwbGUoc2VsZi5fYXJncykKCiAgICAjIFRPRE8oQkVBTS01ODc4KSBTdXBwb3J0IGtleXdvcmQtb25seSBhcmd1bWVudHMuCiAgICB0cnk6CiAgICAgIGlmICd0eXBlX2hpbnRzJyBpbiBnZXRfc2lnbmF0dXJlKHNlbGYuX2ZuKS5wYXJhbWV0ZXJzOgogICAgICAgIGFyZ3MgPSAoc2VsZi5nZXRfdHlwZV9oaW50cygpLCApICsgYXJncwogICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgIyBNaWdodCBub3QgYmUgYSBmdW5jdGlvbi4KICAgICAgcGFzcwogICAgcmV0dXJuIHNlbGYuX2ZuKHBjb2xsLCAqYXJncywgKiprd2FyZ3MpCgogIGRlZiBkZWZhdWx0X2xhYmVsKHNlbGYpOgogICAgaWYgc2VsZi5fYXJnczoKICAgICAgcmV0dXJuICclcyglcyknICUgKAogICAgICAgICAgbGFiZWxfZnJvbV9jYWxsYWJsZShzZWxmLl9mbiksIGxhYmVsX2Zyb21fY2FsbGFibGUoc2VsZi5fYXJnc1swXSkpCiAgICByZXR1cm4gbGFiZWxfZnJvbV9jYWxsYWJsZShzZWxmLl9mbikKCgpkZWYgcHRyYW5zZm9ybV9mbihmbik6CiAgIiIiQSBkZWNvcmF0b3IgZm9yIGEgZnVuY3Rpb24tYmFzZWQgUFRyYW5zZm9ybS4KCiAgRXhwZXJpbWVudGFsOyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKICBBcmdzOgogICAgZm46IEEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIGEgY3VzdG9tIFBUcmFuc2Zvcm0uCgogIFJldHVybnM6CiAgICBBIENhbGxhYmxlUFRyYW5zZm9ybSBpbnN0YW5jZSB3cmFwcGluZyB0aGUgZnVuY3Rpb24tYmFzZWQgUFRyYW5zZm9ybS4KCiAgVGhpcyB3cmFwcGVyIHByb3ZpZGVzIGFuIGFsdGVybmF0aXZlLCBzaW1wbGVyIHdheSB0byBkZWZpbmUgYSBQVHJhbnNmb3JtLgogIFRoZSBzdGFuZGFyZCBtZXRob2QgaXMgdG8gc3ViY2xhc3MgZnJvbSBQVHJhbnNmb3JtIGFuZCBvdmVycmlkZSB0aGUgZXhwYW5kKCkKICBtZXRob2QuIEFuIGVxdWl2YWxlbnQgZWZmZWN0IGNhbiBiZSBvYnRhaW5lZCBieSBkZWZpbmluZyBhIGZ1bmN0aW9uIHRoYXQKICBhY2NlcHRzIGFuIGlucHV0IFBDb2xsZWN0aW9uIGFuZCBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhCiAgcmVzdWx0aW5nIFBDb2xsZWN0aW9uLiBGb3IgZXhhbXBsZTo6CgogICAgQHB0cmFuc2Zvcm1fZm4KICAgIGRlZiBDdXN0b21NYXBwZXIocGNvbGwsIG1hcGZuKToKICAgICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8obWFwZm4pCgogIFRoZSBlcXVpdmFsZW50IGFwcHJvYWNoIHVzaW5nIFBUcmFuc2Zvcm0gc3ViY2xhc3Npbmc6OgoKICAgIGNsYXNzIEN1c3RvbU1hcHBlcihQVHJhbnNmb3JtKToKCiAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXBmbik6CiAgICAgICAgc3VwZXIoQ3VzdG9tTWFwcGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICAgICAgc2VsZi5tYXBmbiA9IG1hcGZuCgogICAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgICByZXR1cm4gcGNvbGwgfCBQYXJEbyhzZWxmLm1hcGZuKQoKICBXaXRoIGVpdGhlciBtZXRob2QgdGhlIGN1c3RvbSBQVHJhbnNmb3JtIGNhbiBiZSB1c2VkIGluIHBpcGVsaW5lcyBhcyBpZgogIGl0IHdlcmUgb25lIG9mIHRoZSAibmF0aXZlIiBQVHJhbnNmb3Jtczo6CgogICAgcmVzdWx0X3Bjb2xsID0gaW5wdXRfcGNvbGwgfCAnTGFiZWwnID4+IEN1c3RvbU1hcHBlcihzb21lZm4pCgogIE5vdGUgdGhhdCBmb3IgYm90aCBzb2x1dGlvbnMgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBpcGUKICBvcGVyYXRvciAoaS5lLiwgYHxgKSB3aWxsIGluamVjdCB0aGUgcGNvbGwgYXJndW1lbnQgaW4gaXRzIHByb3BlciBwbGFjZQogIChmaXJzdCBhcmd1bWVudCBpZiBubyBsYWJlbCB3YXMgc3BlY2lmaWVkIGFuZCBzZWNvbmQgYXJndW1lbnQgb3RoZXJ3aXNlKS4KICAiIiIKICAjIFRPRE8ocm9iZXJ0d2IpOiBDb25zaWRlciByZW1vdmluZyBzdGF0aWNtZXRob2QgdG8gYWxsb3cgZm9yIHNlbGYgcGFyYW1ldGVyLgogIEB3cmFwcyhmbikKICBkZWYgY2FsbGFibGVfcHRyYW5zZm9ybV9mYWN0b3J5KCphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm0oZm4sICphcmdzLCAqKmt3YXJncykKCiAgcmV0dXJuIGNhbGxhYmxlX3B0cmFuc2Zvcm1fZmFjdG9yeQoKCmRlZiBsYWJlbF9mcm9tX2NhbGxhYmxlKGZuKToKICBpZiBoYXNhdHRyKGZuLCAnZGVmYXVsdF9sYWJlbCcpOgogICAgcmV0dXJuIGZuLmRlZmF1bHRfbGFiZWwoKQogIGVsaWYgaGFzYXR0cihmbiwgJ19fbmFtZV9fJyk6CiAgICBpZiBmbi5fX25hbWVfXyA9PSAnPGxhbWJkYT4nOgogICAgICByZXR1cm4gJzxsYW1iZGEgYXQgJXM6JXM+JyAlICgKICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoZm4uX19jb2RlX18uY29fZmlsZW5hbWUpLCBmbi5fX2NvZGVfXy5jb19maXJzdGxpbmVubykKICAgIHJldHVybiBmbi5fX25hbWVfXwogIHJldHVybiBzdHIoZm4pCgoKY2xhc3MgX05hbWVkUFRyYW5zZm9ybShQVHJhbnNmb3JtKToKICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnNmb3JtLCBsYWJlbCk6CiAgICBzdXBlcihfTmFtZWRQVHJhbnNmb3JtLCBzZWxmKS5fX2luaXRfXyhsYWJlbCkKICAgIHNlbGYudHJhbnNmb3JtID0gdHJhbnNmb3JtCgogIGRlZiBfX3Jvcl9fKHNlbGYsIHB2YWx1ZWlzaCwgX3VudXNlZD1Ob25lKToKICAgIHJldHVybiBzZWxmLnRyYW5zZm9ybS5fX3Jvcl9fKHB2YWx1ZWlzaCwgc2VsZi5sYWJlbCkKCiAgZGVmIGV4cGFuZChzZWxmLCBwdmFsdWUpOgogICAgcmFpc2UgUnVudGltZUVycm9yKCJTaG91bGQgbmV2ZXIgYmUgZXhwYW5kZWQgZGlyZWN0bHkuIikKlH2UKIwgX1BWYWx1ZWlzaFRyYW5zZm9ybS52aXNpdF9uZXN0ZWSUalYxAQBLbEt5h5SME19QVmFsdWVpc2hUcmFuc2Zvcm2Ual0xAQBLZUt5h5SMFl9TZXRJbnB1dFBWYWx1ZXMudmlzaXSUalYxAQBLfUuBh5SMEF9TZXRJbnB1dFBWYWx1ZXOUal0xAQBLfEuBh5SMH19hbGxvY2F0ZV9tYXRlcmlhbGl6ZWRfcGlwZWxpbmWUalYxAQBLi0uPh5SMHV9hbGxvY2F0ZV9tYXRlcmlhbGl6ZWRfcmVzdWx0lGpWMQEAS5JLnYeUjBhfZ2V0X21hdGVyaWFsaXplZF9yZXN1bHSUalYxAQBLoEunh5SMHl9yZWxlYXNlX21hdGVyaWFsaXplZF9waXBlbGluZZRqVjEBAEuqS66HlIwcX01hdGVyaWFsaXplZFJlc3VsdC5fX2luaXRfX5RqVjEBAEuyS7WHlIweX01hdGVyaWFsaXplZFJlc3VsdC5fX3JlZHVjZV9flGpWMQEAS7dLu4eUjBNfTWF0ZXJpYWxpemVkUmVzdWx0lGpdMQEAS7FLu4eUjCRfTWF0ZXJpYWxpemVkRG9PdXRwdXRzVHVwbGUuX19pbml0X1+UalYxAQBLv0vDh5SMJ19NYXRlcmlhbGl6ZWREb091dHB1dHNUdXBsZS5fX2dldGl0ZW1fX5RqVjEBAEvFS8mHlIwbX01hdGVyaWFsaXplZERvT3V0cHV0c1R1cGxllGpdMQEAS75LyYeUjFNfQWRkTWF0ZXJpYWxpemF0aW9uVHJhbnNmb3Jtcy5fbWF0ZXJpYWxpemVfdHJhbnNmb3JtLl9NYXRlcmlhbGl6ZVZhbHVlc0RvRm4ucHJvY2Vzc5RqVjEBAEvWS9eHlIxLX0FkZE1hdGVyaWFsaXphdGlvblRyYW5zZm9ybXMuX21hdGVyaWFsaXplX3RyYW5zZm9ybS5fTWF0ZXJpYWxpemVWYWx1ZXNEb0ZulGpdMQEAS9VL14eUjDRfQWRkTWF0ZXJpYWxpemF0aW9uVHJhbnNmb3Jtcy5fbWF0ZXJpYWxpemVfdHJhbnNmb3JtlGpWMQEAS81L2oeUjCNfQWRkTWF0ZXJpYWxpemF0aW9uVHJhbnNmb3Jtcy52aXNpdJRqVjEBAEvcS+eHlIwdX0FkZE1hdGVyaWFsaXphdGlvblRyYW5zZm9ybXOUal0xAQBLzEvnh5SMHl9GaW5hbGl6ZU1hdGVyaWFsaXphdGlvbi52aXNpdJRqVjEBAEvrS/GHlIwYX0ZpbmFsaXplTWF0ZXJpYWxpemF0aW9ulGpdMQEAS+pL8YeUjBFfR2V0UFZhbHVlcy52aXNpdJRqVjEBAEv1S/mHlIwLX0dldFBWYWx1ZXOUal0xAQBL9Ev5h5SMEmdldF9uZXN0ZWRfcHZhbHVlc5RqVjEBAEv8S/+HlIwTZ2V0X25lc3RlZF9wdmFsdWVzMJRqVjEBAE0CAU0QAYeUjBFfWmlwUFZhbHVlcy52aXNpdJRqVjEBAE0hAU0rAYeUjBpfWmlwUFZhbHVlcy52aXNpdF9zZXF1ZW5jZZRqVjEBAE0tAU00AYeUjBZfWmlwUFZhbHVlcy52aXNpdF9kaWN0lGpWMQEATTYBTTwBh5SMC19aaXBQVmFsdWVzlGpdMQEATRMBTTwBh5SME1BUcmFuc2Zvcm0uX19pbml0X1+UalYxAQBNUwFNVgGHlIwQUFRyYW5zZm9ybS5sYWJlbJRqVjEBAE1dAU1gAYeUjBhQVHJhbnNmb3JtLmRlZmF1bHRfbGFiZWyUalYxAQBNYgFNZAGHlIwbUFRyYW5zZm9ybS53aXRoX2lucHV0X3R5cGVzlGpWMQEATWYBTX0Bh5SMHFBUcmFuc2Zvcm0ud2l0aF9vdXRwdXRfdHlwZXOUalYxAQBNfwFNkgGHlIwcUFRyYW5zZm9ybS50eXBlX2NoZWNrX2lucHV0c5RqVjEBAE2UAU2VAYeUjBxQVHJhbnNmb3JtLmluZmVyX291dHB1dF90eXBllGpWMQEATZcBTZgBh5SMHVBUcmFuc2Zvcm0udHlwZV9jaGVja19vdXRwdXRzlGpWMQEATZoBTZsBh5SMJ1BUcmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHNfb3Jfb3V0cHV0c5RqVjEBAE2dAU24AYeUjB5QVHJhbnNmb3JtLl9pbmZlcl9vdXRwdXRfY29kZXKUalYxAQBNugFNzwGHlIwRUFRyYW5zZm9ybS5fY2xvbmWUalYxAQBN0QFN1QGHlIwRUFRyYW5zZm9ybS5leHBhbmSUalYxAQBN1wFN2AGHlIwSUFRyYW5zZm9ybS5fX3N0cl9flGpWMQEATdoBTdsBh5SME1BUcmFuc2Zvcm0uX19yZXByX1+UalYxAQBN3QFN3gGHlIwYUFRyYW5zZm9ybS5fc3RyX2ludGVybmFslGpWMQEATeABTecBh5SMHVBUcmFuc2Zvcm0uX2NoZWNrX3Bjb2xsZWN0aW9ulGpWMQEATekBTe4Bh5SMGFBUcmFuc2Zvcm0uZ2V0X3dpbmRvd2luZ5RqVjEBAE3wAU35AYeUjBZQVHJhbnNmb3JtLl9fcnJzaGlmdF9flGpWMQEATfsBTfwBh5SMEVBUcmFuc2Zvcm0uX19vcl9flGpWMQEATf4BTQICh5SMElBUcmFuc2Zvcm0uX19yb3JfX5RqVjEBAE0EAk0wAoeUjCFQVHJhbnNmb3JtLl9leHRyYWN0X2lucHV0X3B2YWx1ZXOUalYxAQBNMgJNTgKHlIweUFRyYW5zZm9ybS5fcHZhbHVpc2hfZnJvbV9kaWN0lGpWMQEATVACTVQCh5SMF1BUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJulGpWMQEATYACTY8Ch5SMGFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaZRqVjEBAE2RAk2cAoeUjBpQVHJhbnNmb3JtLmZyb21fcnVubmVyX2FwaZRqVjEBAE2eAk2zAoeUjCJQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATbUCTb0Ch5SMIFBUcmFuc2Zvcm0udG9fcnVubmVyX2FwaV9waWNrbGVklGpWMQEATb8CTcECh5SMKlBUcmFuc2Zvcm0ucnVubmVyX2FwaV9yZXF1aXJlc19rZXllZF9pbnB1dJRqVjEBAE3DAk3EAoeUjApQVHJhbnNmb3JtlGpdMQEATT8BTcQCh5SMEV9jcmVhdGVfdHJhbnNmb3JtlGpWMQEATccCTcsCh5SME191bnBpY2tsZV90cmFuc2Zvcm2UalYxAQBNzgJN0AKHlIwbX0NoYWluZWRQVHJhbnNmb3JtLl9faW5pdF9flGpWMQEATdQCTdcCh5SMH19DaGFpbmVkUFRyYW5zZm9ybS5fY2hhaW5fbGFiZWyUalYxAQBN2QJN2gKHlIwZX0NoYWluZWRQVHJhbnNmb3JtLl9fb3JfX5RqVjEBAE3cAk3hAoeUjBlfQ2hhaW5lZFBUcmFuc2Zvcm0uZXhwYW5klGpWMQEATeMCTeQCh5SMEl9DaGFpbmVkUFRyYW5zZm9ybZRqXTEBAE3TAk3kAoeUjCFQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMuX19pbml0X1+UalYxAQBN8wJNEwOHlIwpUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLndpdGhfaW5wdXRfdHlwZXOUalYxAQBNFQNNQAOHlIw3UFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLnR5cGVfY2hlY2tfaW5wdXRzLmVsZW1lbnRfdHlwZZRqVjEBAE1IA01LA4eUjCpQVHJhbnNmb3JtV2l0aFNpZGVJbnB1dHMudHlwZV9jaGVja19pbnB1dHOUalYxAQBNQgNNYQOHlIwsUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLl9wcm9jZXNzX2FyZ3NwZWNfZm6UalYxAQBNYwNNZgOHlIwgUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLm1ha2VfZm6UalYxAQBNaANNawOHlIwmUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzLmRlZmF1bHRfbGFiZWyUalYxAQBNbQNNbgOHlIwYUFRyYW5zZm9ybVdpdGhTaWRlSW5wdXRzlGpdMQEATecCTW4Dh5SMIF9QVHJhbnNmb3JtRm5QVHJhbnNmb3JtLl9faW5pdF9flGpWMQEATXMDTXcDh5SMJF9QVHJhbnNmb3JtRm5QVHJhbnNmb3JtLmRpc3BsYXlfZGF0YZRqVjEBAE15A02BA4eUjB5fUFRyYW5zZm9ybUZuUFRyYW5zZm9ybS5leHBhbmSUalYxAQBNgwNNkgOHlIwlX1BUcmFuc2Zvcm1GblBUcmFuc2Zvcm0uZGVmYXVsdF9sYWJlbJRqVjEBAE2UA02YA4eUjBdfUFRyYW5zZm9ybUZuUFRyYW5zZm9ybZRqXTEBAE1xA02YA4eUjA1wdHJhbnNmb3JtX2ZulGpWMQEATZsDTckDh5SME2xhYmVsX2Zyb21fY2FsbGFibGWUalYxAQBNzANN1AOHlIwZX05hbWVkUFRyYW5zZm9ybS5fX2luaXRfX5RqVjEBAE3YA03aA4eUjBhfTmFtZWRQVHJhbnNmb3JtLl9fcm9yX1+UalYxAQBN3ANN3QOHlIwXX05hbWVkUFRyYW5zZm9ybS5leHBhbmSUalYxAQBN3wNN4AOHlIwQX05hbWVkUFRyYW5zZm9ybZRqXTEBAE3XA03gA4eUdX2UKIwKUFRyYW5zZm9ybZRqzwMAAIwYUFRyYW5zZm9ybS5kZWZhdWx0X2xhYmVslGrPAwAAjBtQVHJhbnNmb3JtLndpdGhfaW5wdXRfdHlwZXOUas8DAACMHFBUcmFuc2Zvcm0ud2l0aF9vdXRwdXRfdHlwZXOUas8DAACMHFBUcmFuc2Zvcm0udHlwZV9jaGVja19pbnB1dHOUas8DAACMHFBUcmFuc2Zvcm0uaW5mZXJfb3V0cHV0X3R5cGWUas8DAACMHVBUcmFuc2Zvcm0udHlwZV9jaGVja19vdXRwdXRzlGrPAwAAjCdQVHJhbnNmb3JtLnR5cGVfY2hlY2tfaW5wdXRzX29yX291dHB1dHOUas8DAACMEVBUcmFuc2Zvcm0uZXhwYW5klGrPAwAAjBhQVHJhbnNmb3JtLmdldF93aW5kb3dpbmeUas8DAACMF1BUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJulGrPAwAAjBhQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGmUas8DAACMGlBUcmFuc2Zvcm0uZnJvbV9ydW5uZXJfYXBplGrPAwAAjCJQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGrPAwAAjCBQVHJhbnNmb3JtLnRvX3J1bm5lcl9hcGlfcGlja2xlZJRqzwMAAIwqUFRyYW5zZm9ybS5ydW5uZXJfYXBpX3JlcXVpcmVzX2tleWVkX2lucHV0lGrPAwAAjA1wdHJhbnNmb3JtX2ZulGrPAwAAjBNsYWJlbF9mcm9tX2NhbGxhYmxllGrPAwAAdYwhYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtlHSUjCFhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnNpZGVpbnB1dHOUKFh9DgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJJbnRlcm5hbCBzaWRlIGlucHV0IHRyYW5zZm9ybXMgYW5kIGltcGxlbWVudGF0aW9ucy4KCkZvciBpbnRlcm5hbCB1c2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KCkltcG9ydGFudDogdGhpcyBtb2R1bGUgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQKZGlyZWN0bHkgYnkgcGlwZWxpbmUgd3JpdGVycy4gSW5zdGVhZCwgdXNlcnMgc2hvdWxkIHVzZSB0aGUgaGVscGVyIG1ldGhvZHMKQXNTaW5nbGV0b24sIEFzSXRlciwgQXNMaXN0IGFuZCBBc0RpY3QgaW4gYXBhY2hlX2JlYW0ucHZhbHVlLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgcmUKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBEaWN0Cgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IHdpbmRvdwoKaWYgVFlQRV9DSEVDS0lORzoKICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKCldpbmRvd01hcHBpbmdGbiA9IENhbGxhYmxlW1t3aW5kb3cuQm91bmRlZFdpbmRvd10sIHdpbmRvdy5Cb3VuZGVkV2luZG93XQoKCiMgVG9wLWxldmVsIGZ1bmN0aW9uIHNvIHdlIGNhbiBpZGVudGlmeSBpdCBsYXRlci4KZGVmIF9nbG9iYWxfd2luZG93X21hcHBpbmdfZm4odywgZ2xvYmFsX3dpbmRvdz13aW5kb3cuR2xvYmFsV2luZG93KCkpOgogICMgdHlwZTogKC4uLikgLT4gd2luZG93Lkdsb2JhbFdpbmRvdwogIHJldHVybiBnbG9iYWxfd2luZG93CgoKZGVmIGRlZmF1bHRfd2luZG93X21hcHBpbmdfZm4odGFyZ2V0X3dpbmRvd19mbik6CiAgIyB0eXBlOiAod2luZG93LldpbmRvd0ZuKSAtPiBXaW5kb3dNYXBwaW5nRm4KICBpZiB0YXJnZXRfd2luZG93X2ZuID09IHdpbmRvdy5HbG9iYWxXaW5kb3dzKCk6CiAgICByZXR1cm4gX2dsb2JhbF93aW5kb3dfbWFwcGluZ19mbgoKICBkZWYgbWFwX3ZpYV9lbmQoc291cmNlX3dpbmRvdyk6CiAgICAjIHR5cGU6ICh3aW5kb3cuQm91bmRlZFdpbmRvdykgLT4gd2luZG93LkJvdW5kZWRXaW5kb3cKICAgIHJldHVybiBsaXN0KAogICAgICAgIHRhcmdldF93aW5kb3dfZm4uYXNzaWduKAogICAgICAgICAgICB3aW5kb3cuV2luZG93Rm4uQXNzaWduQ29udGV4dChzb3VyY2Vfd2luZG93Lm1heF90aW1lc3RhbXAoKSkpKVstMV0KCiAgcmV0dXJuIG1hcF92aWFfZW5kCgoKZGVmIGdldF9zaWRlaW5wdXRfaW5kZXgodGFnKToKICAjIHR5cGU6IChzdHIpIC0+IGludAogIG1hdGNoID0gcmUubWF0Y2goJ3NpZGUoWzAtOV0rKSgtLiopPyQnLCB0YWcsIHJlLkRPVEFMTCkKICBpZiBtYXRjaDoKICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoMSkpCiAgZWxzZToKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiSW52YWxpZCB0YWcgJXIiICUgdGFnKQoKCmNsYXNzIFNpZGVJbnB1dE1hcChvYmplY3QpOgogICIiIlJlcHJlc2VudHMgYSBtYXBwaW5nIG9mIHdpbmRvd3MgdG8gc2lkZSBpbnB1dCB2YWx1ZXMuIiIiCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICB2aWV3X2NsYXNzLCAgIyB0eXBlOiBwdmFsdWUuQXNTaWRlSW5wdXQKICAgICAgdmlld19vcHRpb25zLAogICAgICBpdGVyYWJsZSk6CiAgICBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiA9IHZpZXdfb3B0aW9ucy5nZXQoCiAgICAgICAgJ3dpbmRvd19tYXBwaW5nX2ZuJywgX2dsb2JhbF93aW5kb3dfbWFwcGluZ19mbikKICAgIHNlbGYuX3ZpZXdfY2xhc3MgPSB2aWV3X2NsYXNzCiAgICBzZWxmLl92aWV3X29wdGlvbnMgPSB2aWV3X29wdGlvbnMKICAgIHNlbGYuX2l0ZXJhYmxlID0gaXRlcmFibGUKICAgIHNlbGYuX2NhY2hlID0ge30gICMgdHlwZTogRGljdFt3aW5kb3cuQm91bmRlZFdpbmRvdywgQW55XQoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgd2luZG93KToKICAgICMgdHlwZTogKHdpbmRvdy5Cb3VuZGVkV2luZG93KSAtPiBBbnkKICAgIGlmIHdpbmRvdyBub3QgaW4gc2VsZi5fY2FjaGU6CiAgICAgIHRhcmdldF93aW5kb3cgPSBzZWxmLl93aW5kb3dfbWFwcGluZ19mbih3aW5kb3cpCiAgICAgIHNlbGYuX2NhY2hlW3dpbmRvd10gPSBzZWxmLl92aWV3X2NsYXNzLl9mcm9tX3J1bnRpbWVfaXRlcmFibGUoCiAgICAgICAgICBfRmlsdGVyaW5nSXRlcmFibGUoc2VsZi5faXRlcmFibGUsIHRhcmdldF93aW5kb3cpLCBzZWxmLl92aWV3X29wdGlvbnMpCiAgICByZXR1cm4gc2VsZi5fY2FjaGVbd2luZG93XQoKICBkZWYgaXNfZ2xvYmFsbHlfd2luZG93ZWQoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IGJvb2wKICAgIHJldHVybiBzZWxmLl93aW5kb3dfbWFwcGluZ19mbiA9PSBfZ2xvYmFsX3dpbmRvd19tYXBwaW5nX2ZuCgoKY2xhc3MgX0ZpbHRlcmluZ0l0ZXJhYmxlKG9iamVjdCk6CiAgIiIiQW4gaXRlcmFibGUgY29udGFpbmluZyBvbmx5IHRob3NlIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gd2luZG93LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZSwgdGFyZ2V0X3dpbmRvdyk6CiAgICBzZWxmLl9pdGVyYWJsZSA9IGl0ZXJhYmxlCiAgICBzZWxmLl90YXJnZXRfd2luZG93ID0gdGFyZ2V0X3dpbmRvdwoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICBmb3Igd3YgaW4gc2VsZi5faXRlcmFibGU6CiAgICAgIGlmIHNlbGYuX3RhcmdldF93aW5kb3cgaW4gd3Yud2luZG93czoKICAgICAgICB5aWVsZCB3di52YWx1ZQoKICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICMgUGlja2xlIHNlbGYgYXMgYW4gYWxyZWFkeSBmaWx0ZXJlZCBsaXN0LgogICAgcmV0dXJuIGxpc3QsIChsaXN0KHNlbGYpLCApCpR9lCiMGV9nbG9iYWxfd2luZG93X21hcHBpbmdfZm6UalYxAQBLL0sxh5SMGWRlZmF1bHRfd2luZG93X21hcHBpbmdfZm6UalYxAQBLNEs/h5SME2dldF9zaWRlaW5wdXRfaW5kZXiUalYxAQBLQktIh5SMFVNpZGVJbnB1dE1hcC5fX2luaXRfX5RqVjEBAEtNS1eHlIwYU2lkZUlucHV0TWFwLl9fZ2V0aXRlbV9flGpWMQEAS1lLX4eUjCFTaWRlSW5wdXRNYXAuaXNfZ2xvYmFsbHlfd2luZG93ZWSUalYxAQBLYUtjh5SMDFNpZGVJbnB1dE1hcJRqXTEBAEtLS2OHlIwbX0ZpbHRlcmluZ0l0ZXJhYmxlLl9faW5pdF9flGpWMQEAS2lLa4eUjBtfRmlsdGVyaW5nSXRlcmFibGUuX19pdGVyX1+UalYxAQBLbUtwh5SMHV9GaWx0ZXJpbmdJdGVyYWJsZS5fX3JlZHVjZV9flGpWMQEAS3JLdIeUjBJfRmlsdGVyaW5nSXRlcmFibGWUal0xAQBLZkt0h5R1fZQojBlkZWZhdWx0X3dpbmRvd19tYXBwaW5nX2ZulGrrAwAAjBNnZXRfc2lkZWlucHV0X2luZGV4lGrrAwAAjAxTaWRlSW5wdXRNYXCUausDAACMIVNpZGVJbnB1dE1hcC5pc19nbG9iYWxseV93aW5kb3dlZJRq6wMAAHWMIWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuc2lkZWlucHV0c5R0lIwcYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5zdGF0c5QoWPpcAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlRoaXMgbW9kdWxlIGhhcyBhbGwgc3RhdGlzdGljIHJlbGF0ZWQgdHJhbnNmb3Jtcy4iIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KCmltcG9ydCBoZWFwcQppbXBvcnQgaXRlcnRvb2xzCmltcG9ydCBtYXRoCmltcG9ydCBzeXMKaW1wb3J0IHR5cGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCByb3VuZAoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgKgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuZGlzcGxheSBpbXBvcnQgRGlzcGxheURhdGFJdGVtCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5wdHJhbnNmb3JtIGltcG9ydCBQVHJhbnNmb3JtCgpfX2FsbF9fID0gWwogICAgJ0FwcHJveGltYXRlUXVhbnRpbGVzJywKICAgICdBcHByb3hpbWF0ZVVuaXF1ZScsCl0KCiMgVHlwZSB2YXJpYWJsZXMKVCA9IHR5cGluZy5UeXBlVmFyKCdUJykKSyA9IHR5cGluZy5UeXBlVmFyKCdLJykKViA9IHR5cGluZy5UeXBlVmFyKCdWJykKCgpjbGFzcyBBcHByb3hpbWF0ZVVuaXF1ZShvYmplY3QpOgogICIiIgogIEhhc2hlcyBpbnB1dCBlbGVtZW50cyBhbmQgdXNlcyB0aG9zZSB0byBleHRyYXBvbGF0ZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlCiAgc2V0IG9mIGhhc2ggdmFsdWVzIGJ5IGFzc3VtaW5nIHRoZSByZXN0IG9mIHRoZSBoYXNoIHZhbHVlcyBhcmUgYXMgZGVuc2VseQogIGRpc3RyaWJ1dGVkIGFzIHRoZSBzYW1wbGUgc3BhY2UuCiAgIiIiCgogIF9OT19WQUxVRV9FUlJfTVNHID0gJ0VpdGhlciBzaXplIG9yIGVycm9yIHNob3VsZCBiZSBzZXQuIFJlY2VpdmVkIHt9LicKICBfTVVMVElfVkFMVUVfRVJSX01TRyA9ICdFaXRoZXIgc2l6ZSBvciBlcnJvciBzaG91bGQgYmUgc2V0LiAnIFwKICAgICAgICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCB7c2l6ZSA9ICVzLCBlcnJvciA9ICVzfS4nCiAgX0lOUFVUX1NJWkVfRVJSX01TRyA9ICdBcHByb3hpbWF0ZVVuaXF1ZSBuZWVkcyBhIHNpemUgPj0gMTYgZm9yIGFuIGVycm9yICcgXAogICAgICAgICAgICAgICAgICAgICAgICAnPD0gMC41MC4gSW4gZ2VuZXJhbCwgdGhlIGVzdGltYXRpb24gZXJyb3IgaXMgYWJvdXQgJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICcyIC8gc3FydChzYW1wbGVfc2l6ZSkuIFJlY2VpdmVkIHtzaXplID0gJXN9LicKICBfSU5QVVRfRVJST1JfRVJSX01TRyA9ICdBcHByb3hpbWF0ZVVuaXF1ZSBuZWVkcyBhbiBlc3RpbWF0aW9uIGVycm9yICcgXAogICAgICAgICAgICAgICAgICAgICAgICAgJ2JldHdlZW4gMC4wMSBhbmQgMC41MC4gUmVjZWl2ZWQge2Vycm9yID0gJXN9LicKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBwYXJzZV9pbnB1dF9wYXJhbXMoc2l6ZT1Ob25lLCBlcnJvcj1Ob25lKToKICAgICIiIgogICAgQ2hlY2sgaWYgaW5wdXQgcGFyYW1zIGFyZSB2YWxpZCBhbmQgcmV0dXJuIHNhbXBsZSBzaXplLgoKICAgIDpwYXJhbSBzaXplOiBhbiBpbnQgbm90IHNtYWxsZXIgdGhhbiAxNiwgd2hpY2ggd2Ugd291bGQgdXNlIHRvIGVzdGltYXRlCiAgICAgIG51bWJlciBvZiB1bmlxdWUgdmFsdWVzLgogICAgOnBhcmFtIGVycm9yOiBtYXggZXN0aW1hdGlvbiBlcnJvciwgd2hpY2ggaXMgYSBmbG9hdCBiZXR3ZWVuIDAuMDEgYW5kIDAuNTAuCiAgICAgIElmIGVycm9yIGlzIGdpdmVuLCBzYW1wbGUgc2l6ZSB3aWxsIGJlIGNhbGN1bGF0ZWQgZnJvbSBlcnJvciB3aXRoCiAgICAgIF9nZXRfc2FtcGxlX3NpemVfZnJvbV9lc3RfZXJyb3IgZnVuY3Rpb24uCiAgICA6cmV0dXJuOiBzYW1wbGUgc2l6ZQogICAgOnJhaXNlczoKICAgICAgVmFsdWVFcnJvcjogSWYgYm90aCBzaXplIGFuZCBlcnJvciBhcmUgZ2l2ZW4sIG9yIG5laXRoZXIgaXMgZ2l2ZW4sIG9yCiAgICAgIHZhbHVlcyBhcmUgb3V0IG9mIHJhbmdlLgogICAgIiIiCgogICAgaWYgTm9uZSBub3QgaW4gKHNpemUsIGVycm9yKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcihBcHByb3hpbWF0ZVVuaXF1ZS5fTVVMVElfVkFMVUVfRVJSX01TRyAlIChzaXplLCBlcnJvcikpCiAgICBlbGlmIHNpemUgaXMgTm9uZSBhbmQgZXJyb3IgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcihBcHByb3hpbWF0ZVVuaXF1ZS5fTk9fVkFMVUVfRVJSX01TRykKICAgIGVsaWYgc2l6ZSBpcyBub3QgTm9uZToKICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2l6ZSwgaW50KSBvciBzaXplIDwgMTY6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihBcHByb3hpbWF0ZVVuaXF1ZS5fSU5QVVRfU0laRV9FUlJfTVNHICUgKHNpemUpKQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBzaXplCiAgICBlbHNlOgogICAgICBpZiBlcnJvciA8IDAuMDEgb3IgZXJyb3IgPiAwLjU6CiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihBcHByb3hpbWF0ZVVuaXF1ZS5fSU5QVVRfRVJST1JfRVJSX01TRyAlIChlcnJvcikpCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIEFwcHJveGltYXRlVW5pcXVlLl9nZXRfc2FtcGxlX3NpemVfZnJvbV9lc3RfZXJyb3IoZXJyb3IpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2dldF9zYW1wbGVfc2l6ZV9mcm9tX2VzdF9lcnJvcihlc3RfZXJyKToKICAgICIiIgogICAgOnJldHVybjogc2FtcGxlIHNpemUKCiAgICBDYWxjdWxhdGUgc2FtcGxlIHNpemUgZnJvbSBlc3RpbWF0aW9uIGVycm9yCiAgICAiIiIKICAgICNtYXRoLmNlaWwgaW4gcHl0aG9uMi43IHJldHVybnMgYSBmbG9hdCwgd2hpbGUgaXQgcmV0dXJucyBhbiBpbnQgaW4gcHl0aG9uMy4KICAgIHJldHVybiBpbnQobWF0aC5jZWlsKDQuMCAvIG1hdGgucG93KGVzdF9lcnIsIDIuMCkpKQoKICBAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoVCkKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKGludCkKICBjbGFzcyBHbG9iYWxseShQVHJhbnNmb3JtKToKICAgICIiIiBBcHByb3hpbWF0ZS5HbG9iYWxseSBhcHByb3hpbWF0ZSBudW1iZXIgb2YgdW5pcXVlIHZhbHVlcyIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemU9Tm9uZSwgZXJyb3I9Tm9uZSk6CiAgICAgIHNlbGYuX3NhbXBsZV9zaXplID0gQXBwcm94aW1hdGVVbmlxdWUucGFyc2VfaW5wdXRfcGFyYW1zKHNpemUsIGVycm9yKQoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBjb2RlciA9IGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIocGNvbGwpCiAgICAgIHJldHVybiBwY29sbCBcCiAgICAgICAgICAgICB8ICdDb3VudEdsb2JhbFVuaXF1ZVZhbHVlcycgXAogICAgICAgICAgICAgPj4gKENvbWJpbmVHbG9iYWxseShBcHByb3hpbWF0ZVVuaXF1ZUNvbWJpbmVGbihzZWxmLl9zYW1wbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXIpKSkKCiAgQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGluZy5UdXBsZVtLLCBWXSkKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGluZy5UdXBsZVtLLCBpbnRdKQogIGNsYXNzIFBlcktleShQVHJhbnNmb3JtKToKICAgICIiIiBBcHByb3hpbWF0ZS5QZXJLZXkgYXBwcm94aW1hdGUgbnVtYmVyIG9mIHVuaXF1ZSB2YWx1ZXMgcGVyIGtleSIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemU9Tm9uZSwgZXJyb3I9Tm9uZSk6CiAgICAgIHNlbGYuX3NhbXBsZV9zaXplID0gQXBwcm94aW1hdGVVbmlxdWUucGFyc2VfaW5wdXRfcGFyYW1zKHNpemUsIGVycm9yKQoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBjb2RlciA9IGNvZGVycy5yZWdpc3RyeS5nZXRfY29kZXIocGNvbGwpCiAgICAgIHJldHVybiBwY29sbCBcCiAgICAgICAgICAgICB8ICdDb3VudFBlcktleVVuaXF1ZVZhbHVlcycgXAogICAgICAgICAgICAgPj4gKENvbWJpbmVQZXJLZXkoQXBwcm94aW1hdGVVbmlxdWVDb21iaW5lRm4oc2VsZi5fc2FtcGxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlcikpKQoKCmNsYXNzIF9MYXJnZXN0VW5pcXVlKG9iamVjdCk6CiAgIiIiCiAgQW4gb2JqZWN0IHRvIGtlZXAgc2FtcGxlcyBhbmQgY2FsY3VsYXRlIHNhbXBsZSBoYXNoIHNwYWNlLiBJdCBpcyBhbgogIGFjY3VtdWxhdG9yIG9mIGEgY29tYmluZSBmdW5jdGlvbi4KICAiIiIKICBfSEFTSF9TUEFDRV9TSVpFID0gMi4wICogc3lzLm1heHNpemUKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNhbXBsZV9zaXplKToKICAgIHNlbGYuX3NhbXBsZV9zaXplID0gc2FtcGxlX3NpemUKICAgIHNlbGYuX21pbl9oYXNoID0gc3lzLm1heHNpemUKICAgIHNlbGYuX3NhbXBsZV9oZWFwID0gW10KICAgIHNlbGYuX3NhbXBsZV9zZXQgPSBzZXQoKQoKICBkZWYgYWRkKHNlbGYsIGVsZW1lbnQpOgogICAgIiIiCiAgICA6cGFyYW0gYW4gZWxlbWVudCBmcm9tIHBjb2xsLgogICAgOnJldHVybjogYm9vbGVhbiB0eXBlIHdoZXRoZXIgdGhlIHZhbHVlIGlzIGluIHRoZSBoZWFwCgogICAgQWRkcyBhIHZhbHVlIHRvIHRoZSBoZWFwLCByZXR1cm5pbmcgd2hldGhlciB0aGUgdmFsdWUgaXMgKGxhcmdlIGVub3VnaCB0bwogICAgYmUpIGluIHRoZSBoZWFwLgogICAgIiIiCiAgICBpZiBsZW4oc2VsZi5fc2FtcGxlX2hlYXApID49IHNlbGYuX3NhbXBsZV9zaXplIGFuZCBlbGVtZW50IDwgc2VsZi5fbWluX2hhc2g6CiAgICAgIHJldHVybiBGYWxzZQoKICAgIGlmIGVsZW1lbnQgbm90IGluIHNlbGYuX3NhbXBsZV9zZXQ6CiAgICAgIHNlbGYuX3NhbXBsZV9zZXQuYWRkKGVsZW1lbnQpCiAgICAgIGhlYXBxLmhlYXBwdXNoKHNlbGYuX3NhbXBsZV9oZWFwLCBlbGVtZW50KQoKICAgICAgaWYgbGVuKHNlbGYuX3NhbXBsZV9oZWFwKSA+IHNlbGYuX3NhbXBsZV9zaXplOgogICAgICAgIHRlbXAgPSBoZWFwcS5oZWFwcG9wKHNlbGYuX3NhbXBsZV9oZWFwKQogICAgICAgIHNlbGYuX3NhbXBsZV9zZXQucmVtb3ZlKHRlbXApCiAgICAgICAgc2VsZi5fbWluX2hhc2ggPSBzZWxmLl9zYW1wbGVfaGVhcFswXQogICAgICBlbGlmIGVsZW1lbnQgPCBzZWxmLl9taW5faGFzaDoKICAgICAgICBzZWxmLl9taW5faGFzaCA9IGVsZW1lbnQKCiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgZ2V0X2VzdGltYXRlKHNlbGYpOgogICAgIiIiCiAgICA6cmV0dXJuOiBlc3RpbWF0aW9uIGNvdW50IG9mIHVuaXF1ZSB2YWx1ZXMKCiAgICBJZiBoZWFwIHNpemUgaXMgc21hbGxlciB0aGFuIHNhbXBsZSBzaXplLCBqdXN0IHJldHVybiBoZWFwIHNpemUuCiAgICBPdGhlcndpc2UsIHRha2VzIGludG8gYWNjb3VudCB0aGUgcG9zc2liaWxpdHkgb2YgaGFzaCBjb2xsaXNpb25zLAogICAgd2hpY2ggYmVjb21lIG1vcmUgbGlrZWx5IHRoYW4gbm90IGZvciAyXjMyIGRpc3RpbmN0IGVsZW1lbnRzLgogICAgTm90ZSB0aGF0IGxvZygxK3gpIH4geCBmb3Igc21hbGwgeCwgc28gZm9yIHNhbXBsZVNpemUgPDwgbWF4SGFzaAogICAgbG9nKDEgLSBzYW1wbGVfc2l6ZS9zYW1wbGVfc3BhY2UpIC8gbG9nKDEgLSAxL3NhbXBsZV9zcGFjZSkgfiBzYW1wbGVfc2l6ZQogICAgYW5kIGhlbmNlIGVzdGltYXRlIH4gc2FtcGxlX3NpemUgKiBoYXNoX3NwYWNlIC8gc2FtcGxlX3NwYWNlCiAgICBhcyBvbmUgd291bGQgZXhwZWN0LgoKICAgIEdpdmVuIHNhbXBsZV9zaXplIC8gc2FtcGxlX3NwYWNlID0gZXN0IC8gaGFzaF9zcGFjZQogICAgZXN0ID0gc2FtcGxlX3NpemUgKiBoYXNoX3NwYWNlIC8gc2FtcGxlX3NwYWNlCgogICAgR2l2ZW4gYWJvdmUgc2FtcGxlX3NpemUgYXBwcm94aW1hdGUsCiAgICBlc3QgPSBsb2cxcCgtc2FtcGxlX3NpemUvc2FtcGxlX3NwYWNlKSAvIGxvZzFwKC0xL3NhbXBsZV9zcGFjZSkKICAgICAgKiBoYXNoX3NwYWNlIC8gc2FtcGxlX3NwYWNlCiAgICAiIiIKCiAgICBpZiBsZW4oc2VsZi5fc2FtcGxlX2hlYXApIDwgc2VsZi5fc2FtcGxlX3NpemU6CiAgICAgIHJldHVybiBsZW4oc2VsZi5fc2FtcGxlX2hlYXApCiAgICBlbHNlOgogICAgICBzYW1wbGVfc3BhY2Vfc2l6ZSA9IHN5cy5tYXhzaXplIC0gMS4wICogc2VsZi5fbWluX2hhc2gKICAgICAgZXN0ID0gKAogICAgICAgICAgbWF0aC5sb2cxcCgtc2VsZi5fc2FtcGxlX3NpemUgLyBzYW1wbGVfc3BhY2Vfc2l6ZSkgLwogICAgICAgICAgbWF0aC5sb2cxcCgtMSAvIHNhbXBsZV9zcGFjZV9zaXplKSAqIHNlbGYuX0hBU0hfU1BBQ0VfU0laRSAvCiAgICAgICAgICBzYW1wbGVfc3BhY2Vfc2l6ZSkKCiAgICAgIHJldHVybiByb3VuZChlc3QpCgoKY2xhc3MgQXBwcm94aW1hdGVVbmlxdWVDb21iaW5lRm4oQ29tYmluZUZuKToKICAiIiIKICBBcHByb3hpbWF0ZVVuaXF1ZUNvbWJpbmVGbiBjb21wdXRlcyBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mCiAgdW5pcXVlIHZhbHVlcyB0aGF0IHdlcmUgY29tYmluZWQuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHNhbXBsZV9zaXplLCBjb2Rlcik6CiAgICBzZWxmLl9zYW1wbGVfc2l6ZSA9IHNhbXBsZV9zaXplCiAgICBzZWxmLl9jb2RlciA9IGNvZGVyCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHJldHVybiBfTGFyZ2VzdFVuaXF1ZShzZWxmLl9zYW1wbGVfc2l6ZSkKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHRyeToKICAgICAgYWNjdW11bGF0b3IuYWRkKGhhc2goc2VsZi5fY29kZXIuZW5jb2RlKGVsZW1lbnQpKSkKICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUnVudGltZSBleGNlcHRpb246ICVzIiwgZSkKCiAgIyBjcmVhdGVkIGFuIGlzc3VlIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQkVBTS03Mjg1IHRvIHNwZWVkIHVwCiAgIyBtZXJnZSBwcm9jZXNzLgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzLCAqYXJncywgKiprd2FyZ3MpOgogICAgbWVyZ2VkX2FjY3VtdWxhdG9yID0gc2VsZi5jcmVhdGVfYWNjdW11bGF0b3IoKQogICAgZm9yIGFjY3VtdWxhdG9yIGluIGFjY3VtdWxhdG9yczoKICAgICAgZm9yIGkgaW4gYWNjdW11bGF0b3IuX3NhbXBsZV9oZWFwOgogICAgICAgIG1lcmdlZF9hY2N1bXVsYXRvci5hZGQoaSkKCiAgICByZXR1cm4gbWVyZ2VkX2FjY3VtdWxhdG9yCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZXh0cmFjdF9vdXRwdXQoYWNjdW11bGF0b3IpOgogICAgcmV0dXJuIGFjY3VtdWxhdG9yLmdldF9lc3RpbWF0ZSgpCgogIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICByZXR1cm4geydzYW1wbGVfc2l6ZSc6IHNlbGYuX3NhbXBsZV9zaXplfQoKCmNsYXNzIEFwcHJveGltYXRlUXVhbnRpbGVzKG9iamVjdCk6CiAgIiIiCiAgUFRyYW5zZnJvbSBmb3IgZ2V0dGluZyB0aGUgaWRlYSBvZiBkYXRhIGRpc3RyaWJ1dGlvbiB1c2luZyBhcHByb3hpbWF0ZSBOLXRpbGUKICAoZS5nLiBxdWFydGlsZXMsIHBlcmNlbnRpbGVzIGV0Yy4pIGVpdGhlciBnbG9iYWxseSBvciBwZXIta2V5LgogICIiIgogIEBzdGF0aWNtZXRob2QKICBkZWYgX2Rpc3BsYXlfZGF0YShudW1fcXVhbnRpbGVzLCBrZXksIHJldmVyc2UpOgogICAgcmV0dXJuIHsKICAgICAgICAnbnVtX3F1YW50aWxlcyc6IERpc3BsYXlEYXRhSXRlbShudW1fcXVhbnRpbGVzLCBsYWJlbD0iUXVhbnRpbGUgQ291bnQiKSwKICAgICAgICAna2V5JzogRGlzcGxheURhdGFJdGVtKAogICAgICAgICAgICBrZXkuX19uYW1lX18KICAgICAgICAgICAgaWYgaGFzYXR0cihrZXksICdfX25hbWVfXycpIGVsc2Uga2V5Ll9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAgICAgbGFiZWw9J1JlY29yZCBDb21wYXJlciBLZXknKSwKICAgICAgICAncmV2ZXJzZSc6IERpc3BsYXlEYXRhSXRlbShzdHIocmV2ZXJzZSksIGxhYmVsPSdJcyByZXZlcnNlZCcpCiAgICB9CgogIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhUKQogIEB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXModHlwaW5nLkxpc3RbVF0pCiAgY2xhc3MgR2xvYmFsbHkoUFRyYW5zZm9ybSk6CiAgICAiIiIKICAgIFBUcmFuc2Zvcm0gdGFrZXMgUENvbGxlY3Rpb24gYW5kIHJldHVybnMgYSBsaXN0IHdob3NlIHNpbmdsZSB2YWx1ZSBpcwogICAgYXBwcm94aW1hdGUgTi10aWxlcyBvZiB0aGUgaW5wdXQgY29sbGVjdGlvbiBnbG9iYWxseS4KCiAgICBBcmdzOgogICAgICBudW1fcXVhbnRpbGVzOiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJlc3VsdGluZyBxdWFudGlsZXMgdmFsdWVzIGxpc3QuCiAgICAgIGtleTogKG9wdGlvbmFsKSBLZXkgaXMgIGEgbWFwcGluZyBvZiBlbGVtZW50cyB0byBhIGNvbXBhcmFibGUga2V5LCBzaW1pbGFyCiAgICAgICAgdG8gdGhlIGtleSBhcmd1bWVudCBvZiBQeXRob24ncyBzb3J0aW5nIG1ldGhvZHMuCiAgICAgIHJldmVyc2U6IChvcHRpb25hbCkgd2hldGhlciB0byBvcmRlciB0aGluZ3Mgc21hbGxlc3QgdG8gbGFyZ2VzdCwgcmF0aGVyCiAgICAgICAgdGhhbiBsYXJnZXN0IHRvIHNtYWxsZXN0CiAgICAiIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fcXVhbnRpbGVzLCBrZXk9Tm9uZSwgcmV2ZXJzZT1GYWxzZSk6CiAgICAgIHNlbGYuX251bV9xdWFudGlsZXMgPSBudW1fcXVhbnRpbGVzCiAgICAgIHNlbGYuX2tleSA9IGtleQogICAgICBzZWxmLl9yZXZlcnNlID0gcmV2ZXJzZQoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICByZXR1cm4gcGNvbGwgfCBDb21iaW5lR2xvYmFsbHkoCiAgICAgICAgICBBcHByb3hpbWF0ZVF1YW50aWxlc0NvbWJpbmVGbi5jcmVhdGUoCiAgICAgICAgICAgICAgbnVtX3F1YW50aWxlcz1zZWxmLl9udW1fcXVhbnRpbGVzLAogICAgICAgICAgICAgIGtleT1zZWxmLl9rZXksCiAgICAgICAgICAgICAgcmV2ZXJzZT1zZWxmLl9yZXZlcnNlKSkKCiAgICBkZWYgZGlzcGxheV9kYXRhKHNlbGYpOgogICAgICByZXR1cm4gQXBwcm94aW1hdGVRdWFudGlsZXMuX2Rpc3BsYXlfZGF0YSgKICAgICAgICAgIG51bV9xdWFudGlsZXM9c2VsZi5fbnVtX3F1YW50aWxlcywKICAgICAgICAgIGtleT1zZWxmLl9rZXksCiAgICAgICAgICByZXZlcnNlPXNlbGYuX3JldmVyc2UpCgogIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBpbmcuVHVwbGVbSywgVl0pCiAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyh0eXBpbmcuVHVwbGVbSywgdHlwaW5nLkxpc3RbVl1dKQogIGNsYXNzIFBlcktleShQVHJhbnNmb3JtKToKICAgICIiIgogICAgUFRyYW5zZm9ybSB0YWtlcyBQQ29sbGVjdGlvbiBvZiBLViBhbmQgcmV0dXJucyBhIGxpc3QgYmFzZWQgb24gZWFjaCBrZXkKICAgIHdob3NlIHNpbmdsZSB2YWx1ZSBpcyBsaXN0IG9mIGFwcHJveGltYXRlIE4tdGlsZXMgb2YgdGhlIGlucHV0IGVsZW1lbnQgb2YKICAgIHRoZSBrZXkuCgogICAgQXJnczoKICAgICAgbnVtX3F1YW50aWxlczogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByZXN1bHRpbmcgcXVhbnRpbGVzIHZhbHVlcyBsaXN0LgogICAgICBrZXk6IChvcHRpb25hbCkgS2V5IGlzICBhIG1hcHBpbmcgb2YgZWxlbWVudHMgdG8gYSBjb21wYXJhYmxlIGtleSwgc2ltaWxhcgogICAgICAgIHRvIHRoZSBrZXkgYXJndW1lbnQgb2YgUHl0aG9uJ3Mgc29ydGluZyBtZXRob2RzLgogICAgICByZXZlcnNlOiAob3B0aW9uYWwpIHdoZXRoZXIgdG8gb3JkZXIgdGhpbmdzIHNtYWxsZXN0IHRvIGxhcmdlc3QsIHJhdGhlcgogICAgICAgIHRoYW4gbGFyZ2VzdCB0byBzbWFsbGVzdAogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtX3F1YW50aWxlcywga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpOgogICAgICBzZWxmLl9udW1fcXVhbnRpbGVzID0gbnVtX3F1YW50aWxlcwogICAgICBzZWxmLl9rZXkgPSBrZXkKICAgICAgc2VsZi5fcmV2ZXJzZSA9IHJldmVyc2UKCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgcmV0dXJuIHBjb2xsIHwgQ29tYmluZVBlcktleSgKICAgICAgICAgIEFwcHJveGltYXRlUXVhbnRpbGVzQ29tYmluZUZuLmNyZWF0ZSgKICAgICAgICAgICAgICBudW1fcXVhbnRpbGVzPXNlbGYuX251bV9xdWFudGlsZXMsCiAgICAgICAgICAgICAga2V5PXNlbGYuX2tleSwKICAgICAgICAgICAgICByZXZlcnNlPXNlbGYuX3JldmVyc2UpKQoKICAgIGRlZiBkaXNwbGF5X2RhdGEoc2VsZik6CiAgICAgIHJldHVybiBBcHByb3hpbWF0ZVF1YW50aWxlcy5fZGlzcGxheV9kYXRhKAogICAgICAgICAgbnVtX3F1YW50aWxlcz1zZWxmLl9udW1fcXVhbnRpbGVzLAogICAgICAgICAga2V5PXNlbGYuX2tleSwKICAgICAgICAgIHJldmVyc2U9c2VsZi5fcmV2ZXJzZSkKCgpjbGFzcyBfUXVhbnRpbGVCdWZmZXIob2JqZWN0KToKICAiIiJBIHNpbmdsZSBidWZmZXIgaW4gdGhlIHNlbnNlIG9mIHRoZSByZWZlcmVuY2VkIGFsZ29yaXRobS4KICAoc2VlIGh0dHA6Ly9jaXRlc2VlcnguaXN0LnBzdS5lZHUvdmlld2RvYy9kb3dubG9hZD9kb2k9MTAuMS4xLjYuNjUxMyZyZXA9cmVwMQogICZ0eXBlPXBkZiBhbmQgQXBwcm94aW1hdGVRdWFudGlsZXNDb21iaW5lRm4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24pIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnRzLCBsZXZlbD0wLCB3ZWlnaHQ9MSk6CiAgICBzZWxmLmVsZW1lbnRzID0gZWxlbWVudHMKICAgIHNlbGYubGV2ZWwgPSBsZXZlbAogICAgc2VsZi53ZWlnaHQgPSB3ZWlnaHQKCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICBzZWxmLmVsZW1lbnRzIDwgb3RoZXIuZWxlbWVudHMKCiAgZGVmIHNpemVkX2l0ZXJhdG9yKHNlbGYpOgogICAgY2xhc3MgUXVhbnRpbGVCdWZmZXJJdGVyYXRvcihvYmplY3QpOgogICAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbSwgd2VpZ2h0KToKICAgICAgICBzZWxmLl9pdGVyID0gaXRlcihlbGVtKQogICAgICAgIHNlbGYud2VpZ2h0ID0gd2VpZ2h0CgogICAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYKCiAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICB2YWx1ZSA9IG5leHQoc2VsZi5faXRlcikKICAgICAgICByZXR1cm4gKHZhbHVlLCBzZWxmLndlaWdodCkKCiAgICAgIG5leHQgPSBfX25leHRfXyAgIyBGb3IgUHl0aG9uIDIKCiAgICByZXR1cm4gUXVhbnRpbGVCdWZmZXJJdGVyYXRvcihzZWxmLmVsZW1lbnRzLCBzZWxmLndlaWdodCkKCgpjbGFzcyBfUXVhbnRpbGVTdGF0ZShvYmplY3QpOgogICIiIgogIENvbXBhY3Qgc3VtbWFyaXphdGlvbiBvZiBhIGNvbGxlY3Rpb24gb24gd2hpY2ggcXVhbnRpbGVzIGNhbiBiZSBlc3RpbWF0ZWQuCiAgIiIiCiAgbWluX3ZhbCA9IE5vbmUgICMgSG9sZHMgc21hbGxlc3QgaXRlbSBpbiB0aGUgbGlzdAogIG1heF92YWwgPSBOb25lICAjIEhvbGRzIGxhcmdlc3QgaXRlbSBpbiB0aGUgbGlzdAoKICBkZWYgX19pbml0X18oc2VsZiwgYnVmZmVyX3NpemUsIG51bV9idWZmZXJzLCB1bmJ1ZmZlcmVkX2VsZW1lbnRzLCBidWZmZXJzKToKICAgIHNlbGYuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQogICAgc2VsZi5udW1fYnVmZmVycyA9IG51bV9idWZmZXJzCiAgICBzZWxmLmJ1ZmZlcnMgPSBidWZmZXJzCgogICAgIyBUaGUgYWxnb3JpdGhtIHJlcXVpcmVzIHRoYXQgdGhlIG1hbmlwdWxhdGVkIGJ1ZmZlcnMgYWx3YXlzIGJlIGZpbGxlZCB0bwogICAgIyBjYXBhY2l0eSB0byBwZXJmb3JtIHRoZSBjb2xsYXBzZSBvcGVyYXRpb24uIFRoaXMgb3BlcmF0aW9uIGNhbiBiZSBleHRlbmRlZAogICAgIyB0byBidWZmZXJzIG9mIHZhcnlpbmcgc2l6ZXMgYnkgaW50cm9kdWNpbmcgdGhlIG5vdGlvbiBvZiBmcmFjdGlvbmFsCiAgICAjIHdlaWdodHMsIGJ1dCBpdCdzIGVhc2llciB0byBzaW1wbHkgY29tYmluZSB0aGUgcmVtYWluZGVycyBmcm9tIGFsbCBzaGFyZHMKICAgICMgaW50byBuZXcsIGZ1bGwgYnVmZmVycyBhbmQgdGhlbiB0YWtlIHRoZW0gaW50byBhY2NvdW50IHdoZW4gY29tcHV0aW5nIHRoZQogICAgIyBmaW5hbCBvdXRwdXQuCiAgICBzZWxmLnVuYnVmZmVyZWRfZWxlbWVudHMgPSB1bmJ1ZmZlcmVkX2VsZW1lbnRzCgogIGRlZiBpc19lbXB0eShzZWxmKToKICAgICIiIkNoZWNrIGlmIHRoZSBidWZmZXJlZCAmIHVuYnVmZmVyZWQgZWxlbWVudHMgYXJlIGVtcHR5IG9yIG5vdC4iIiIKICAgIHJldHVybiBub3Qgc2VsZi51bmJ1ZmZlcmVkX2VsZW1lbnRzIGFuZCBub3Qgc2VsZi5idWZmZXJzCgoKY2xhc3MgQXBwcm94aW1hdGVRdWFudGlsZXNDb21iaW5lRm4oQ29tYmluZUZuKToKICAiIiIKICBUaGlzIGNvbWJpbmVyIGdpdmVzIGFuIGlkZWEgb2YgdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIGNvbGxlY3Rpb24gb2YgdmFsdWVzCiAgdXNpbmcgYXBwcm94aW1hdGUgTi10aWxlcy4gVGhlIG91dHB1dCBvZiB0aGlzIGNvbWJpbmVyIGlzIHRoZSBsaXN0IG9mIHNpemUgb2YKICB0aGUgbnVtYmVyIG9mIHF1YW50aWxlcyAobnVtX3F1YW50aWxlcyksIGNvbnRhaW5pbmcgdGhlIGlucHV0IHZhbHVlcyBvZiB0aGUKICBtaW5pbXVtIHZhbHVlIGl0ZW0gb2YgdGhlIGxpc3QsIHRoZSBpbnRlcm1lZGlhdGUgdmFsdWVzIChuLXRpbGVzKSBhbmQgdGhlCiAgbWF4aW11bSB2YWx1ZSBpdGVtIG9mIHRoZSBsaXN0LCBpbiB0aGUgc29ydCBvcmRlciBwcm92aWRlZCB2aWEga2V5IChzaW1pbGFyCiAgdG8gdGhlIGtleSBhcmd1bWVudCBvZiBQeXRob24ncyBzb3J0aW5nIG1ldGhvZHMpLgoKICBJZiB0aGVyZSBhcmUgZmV3ZXIgdmFsdWVzIHRvIGNvbWJpbmUgdGhhbiB0aGUgbnVtYmVyIG9mIHF1YW50aWxlCiAgKG51bV9xdWFudGlsZXMpLCB0aGVuIHRoZSByZXN1bHRpbmcgbGlzdCB3aWxsIGNvbnRhaW4gYWxsIHRoZSB2YWx1ZXMgYmVpbmcKICBjb21iaW5lZCwgaW4gc29ydGVkIG9yZGVyLgoKICBJZiBubyBga2V5YCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgcmVzdWx0cyBhcmUgc29ydGVkIGluIHRoZSBuYXR1cmFsIG9yZGVyLgoKICBUbyBldmFsdWF0ZSB0aGUgcXVhbnRpbGVzLCB3ZSB1c2UgdGhlICJOZXcgQWxnb3JpdGhtIiBkZXNjcmliZWQgaGVyZToKCiAgW01STDk4XSBNYW5rdSwgUmFqYWdvcGFsYW4gJiBMaW5kc2F5LCAiQXBwcm94aW1hdGUgTWVkaWFucyBhbmQgb3RoZXIKICBRdWFudGlsZXMgaW4gT25lIFBhc3MgYW5kIHdpdGggTGltaXRlZCBNZW1vcnkiLCBQcm9jLiAxOTk4IEFDTSBTSUdNT0QsCiAgVm9sIDI3LCBObyAyLCBwIDQyNi00MzUsIEp1bmUgMTk5OC4KICBodHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2MvZG93bmxvYWQ/ZG9pPTEwLjEuMS42LjY1MTMmcmVwPXJlcDEKICAmdHlwZT1wZGYKCiAgVGhlIGRlZmF1bHQgZXJyb3IgYm91bmQgaXMgKDEgLyBOKSwgdGhvdWdoIGluIHByYWN0aWNlIHRoZSBhY2N1cmFjeQogIHRlbmRzIHRvIGJlIG11Y2ggYmV0dGVyLgoKICBBcmdzOgogICAgbnVtX3F1YW50aWxlczogTnVtYmVyIG9mIHF1YW50aWxlcyB0byBwcm9kdWNlLiBJdCBpcyB0aGUgc2l6ZSBvZiB0aGUgZmluYWwKICAgICAgb3V0cHV0IGxpc3QsIGluY2x1ZGluZyB0aGUgbWluaW51bSBhbmQgbWF4aW11bSB2YWx1ZSBpdGVtcy4KICAgIGJ1ZmZlcl9zaXplOiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVycywgY29ycmVzcG9uZGluZyB0byBrIGluIHRoZSByZWZlcmVuY2VkCiAgICAgIHBhcGVyLgogICAgbnVtX2J1ZmZlcnM6IFRoZSBudW1iZXIgb2YgYnVmZmVycywgY29ycmVzcG9uZGluZyB0byBiIGluIHRoZSByZWZlcmVuY2VkCiAgICAgIHBhcGVyLgogICAga2V5OiAob3B0aW9uYWwpIEtleSBpcyBhIG1hcHBpbmcgb2YgZWxlbWVudHMgdG8gYSBjb21wYXJhYmxlIGtleSwgc2ltaWxhcgogICAgICB0byB0aGUga2V5IGFyZ3VtZW50IG9mIFB5dGhvbidzIHNvcnRpbmcgbWV0aG9kcy4KICAgIHJldmVyc2U6IChvcHRpb25hbCkgd2hldGhlciB0byBvcmRlciB0aGluZ3Mgc21hbGxlc3QgdG8gbGFyZ2VzdCwgcmF0aGVyCiAgICAgICAgdGhhbiBsYXJnZXN0IHRvIHNtYWxsZXN0CiAgIiIiCgogICMgRm9yIGFsdGVybmF0aW5nIGJldHdlZW4gYmlhc2luZyB1cCBhbmQgZG93biBpbiB0aGUgYWJvdmUgZXZlbiB3ZWlnaHQKICAjIGNvbGxhcHNlIG9wZXJhdGlvbi4KICBfb2Zmc2V0X2ppdHRlciA9IDAKCiAgIyBUaGUgY29zdCAoaW4gdGltZSBhbmQgc3BhY2UpIHRvIGNvbXB1dGUgcXVhbnRpbGVzIHRvIGEgZ2l2ZW4gYWNjdXJhY3kgaXMgYQogICMgZnVuY3Rpb24gb2YgdGhlIHRvdGFsIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGF0YSBzZXQuIElmIGFuIGVzdGltYXRlIGlzCiAgIyBub3Qga25vd24gb3Igc3BlY2lmaWVkLCB3ZSB1c2UgdGhpcyBhcyBhbiB1cHBlciBib3VuZC4gSWYgdGhpcyBpcyB0b28gbG93LAogICMgZXJyb3JzIG1heSBleGNlZWQgdGhlIHJlcXVlc3RlZCB0b2xlcmFuY2U7IGlmIHRvbyBoaWdoLCBlZmZpY2llbmN5IG1heSBiZQogICMgbm9uLW9wdGltYWwuIFRoZSBpbXBhY3QgaXMgbG9nYXJpdGhtaWMgd2l0aCByZXNwZWN0IHRvIHRoaXMgdmFsdWUsIHNvIHRoaXMKICAjIGRlZmF1bHQgc2hvdWxkIGJlIGZpbmUgZm9yIG1vc3QgdXNlcy4KICBfTUFYX05VTV9FTEVNRU5UUyA9IDFlOQogIF9xcyA9IE5vbmUgICMgUmVmZXJzIHRvIHRoZSBfUXVhbnRpbGVTdGF0ZQoKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIG51bV9xdWFudGlsZXMsIGJ1ZmZlcl9zaXplLCBudW1fYnVmZmVycywga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpOgogICAgaWYga2V5OgogICAgICBzZWxmLl9jb21wYXJhdG9yID0gbGFtYmRhIGEsIGI6IChrZXkoYSkgPCBrZXkoYikpIC0gKGtleShhKSA+IGtleShiKSkgXAogICAgICAgIGlmIHJldmVyc2UgZWxzZSAoa2V5KGEpID4ga2V5KGIpKSAtIChrZXkoYSkgPCBrZXkoYikpCiAgICBlbHNlOgogICAgICBzZWxmLl9jb21wYXJhdG9yID0gbGFtYmRhIGEsIGI6IChhIDwgYikgLSAoYSA+IGIpIGlmIHJldmVyc2UgXAogICAgICAgIGVsc2UgKGEgPiBiKSAtIChhIDwgYikKCiAgICBzZWxmLl9udW1fcXVhbnRpbGVzID0gbnVtX3F1YW50aWxlcwogICAgc2VsZi5fYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQogICAgc2VsZi5fbnVtX2J1ZmZlcnMgPSBudW1fYnVmZmVycwogICAgc2VsZi5fa2V5ID0ga2V5CiAgICBzZWxmLl9yZXZlcnNlID0gcmV2ZXJzZQoKICBAY2xhc3NtZXRob2QKICBkZWYgY3JlYXRlKAogICAgICBjbHMsCiAgICAgIG51bV9xdWFudGlsZXMsCiAgICAgIGVwc2lsb249Tm9uZSwKICAgICAgbWF4X251bV9lbGVtZW50cz1Ob25lLAogICAgICBrZXk9Tm9uZSwKICAgICAgcmV2ZXJzZT1GYWxzZSk6CiAgICAiIiIKICAgIENyZWF0ZXMgYW4gYXBwcm94aW1hdGUgcXVhbnRpbGVzIGNvbWJpbmVyIHdpdGggdGhlIGdpdmVuIGtleSBhbmQgZGVzaXJlZAogICAgbnVtYmVyIG9mIHF1YW50aWxlcy4KCiAgICBBcmdzOgogICAgICBudW1fcXVhbnRpbGVzOiBOdW1iZXIgb2YgcXVhbnRpbGVzIHRvIHByb2R1Y2UuIEl0IGlzIHRoZSBzaXplIG9mIHRoZQogICAgICBmaW5hbCBvdXRwdXQgbGlzdCwgaW5jbHVkaW5nIHRoZSBtaW5pbnVtIGFuZCBtYXhpbXVtIHZhbHVlIGl0ZW1zLgogICAgICBlcHNpbG9uOiAob3B0aW9uYWwpIFRoZSBkZWZhdWx0IGVycm9yIGJvdW5kIGlzIGBlcHNpbG9uYCwgd2hpY2ggaG9sZHMgYXMKICAgICAgICBsb25nIGFzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaXMgbGVzcyB0aGFuIGBfTUFYX05VTV9FTEVNRU5UU2AuCiAgICAgICAgU3BlY2lmaWNhbGx5LCBpZiBvbmUgY29uc2lkZXJzIHRoZSBpbnB1dCBhcyBhIHNvcnRlZCBsaXN0IHhfMSwgLi4uLAogICAgICAgIHhfTiwgdGhlbiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBlYWNoIGV4YWN0IHF1YW50aWxlIHhfYyBhbmQgaXRzCiAgICAgICAgYXBwcm94aW1hdGlvbiB4X2MnIGlzIGJvdW5kZWQgYnkgYHxjIC0gYyd8IDwgZXBzaWxvbiAqIE5gLiBOb3RlIHRoYXQKICAgICAgICB0aGVzZSBlcnJvcnMgYXJlIHdvcnN0LWNhc2Ugc2NlbmFyaW9zLiBJbiBwcmFjdGljZSB0aGUgYWNjdXJhY3kgdGVuZHMKICAgICAgICB0byBiZSBtdWNoIGJldHRlci4KICAgICAgbWF4X251bV9lbGVtZW50czogKG9wdGlvbmFsKSBUaGUgY29zdCAoaW4gdGltZSBhbmQgc3BhY2UpIHRvIGNvbXB1dGUKICAgICAgICBxdWFudGlsZXMgdG8gYSBnaXZlbiBhY2N1cmFjeSBpcyBhIGZ1bmN0aW9uIG9mIHRoZSB0b3RhbCBudW1iZXIgb2YKICAgICAgICBlbGVtZW50cyBpbiB0aGUgZGF0YSBzZXQuCiAgICAgIGtleTogKG9wdGlvbmFsKSBLZXkgaXMgYSBtYXBwaW5nIG9mIGVsZW1lbnRzIHRvIGEgY29tcGFyYWJsZSBrZXksIHNpbWlsYXIKICAgICAgICB0byB0aGUga2V5IGFyZ3VtZW50IG9mIFB5dGhvbidzIHNvcnRpbmcgbWV0aG9kcy4KICAgICAgcmV2ZXJzZTogKG9wdGlvbmFsKSB3aGV0aGVyIHRvIG9yZGVyIHRoaW5ncyBzbWFsbGVzdCB0byBsYXJnZXN0LCByYXRoZXIKICAgICAgICAgIHRoYW4gbGFyZ2VzdCB0byBzbWFsbGVzdAogICAgIiIiCiAgICBtYXhfbnVtX2VsZW1lbnRzID0gbWF4X251bV9lbGVtZW50cyBvciBjbHMuX01BWF9OVU1fRUxFTUVOVFMKICAgIGlmIG5vdCBlcHNpbG9uOgogICAgICBlcHNpbG9uID0gMS4wIC8gbnVtX3F1YW50aWxlcwogICAgYiA9IDIKICAgIHdoaWxlIChiIC0gMikgKiAoMSA8PCAoYiAtIDIpKSA8IGVwc2lsb24gKiBtYXhfbnVtX2VsZW1lbnRzOgogICAgICBiID0gYiArIDEKICAgIGIgPSBiIC0gMQogICAgayA9IG1heCgyLCBtYXRoLmNlaWwobWF4X251bV9lbGVtZW50cyAvIGZsb2F0KDEgPDwgKGIgLSAxKSkpKQogICAgcmV0dXJuIGNscygKICAgICAgICBudW1fcXVhbnRpbGVzPW51bV9xdWFudGlsZXMsCiAgICAgICAgYnVmZmVyX3NpemU9aywKICAgICAgICBudW1fYnVmZmVycz1iLAogICAgICAgIGtleT1rZXksCiAgICAgICAgcmV2ZXJzZT1yZXZlcnNlKQoKICBkZWYgX2FkZF91bmJ1ZmZlcmVkKHNlbGYsIHFzLCBlbGVtKToKICAgICIiIgogICAgQWRkIGEgbmV3IGJ1ZmZlciB0byB0aGUgdW5idWZmZXJlZCBsaXN0LCBjcmVhdGluZyBhIG5ldyBidWZmZXIgYW5kCiAgICBjb2xsYXBzaW5nIGlmIG5lZWRlZC4KICAgICIiIgogICAgcXMudW5idWZmZXJlZF9lbGVtZW50cy5hcHBlbmQoZWxlbSkKICAgIGlmIGxlbihxcy51bmJ1ZmZlcmVkX2VsZW1lbnRzKSA9PSBxcy5idWZmZXJfc2l6ZToKICAgICAgcXMudW5idWZmZXJlZF9lbGVtZW50cy5zb3J0KGtleT1zZWxmLl9rZXksIHJldmVyc2U9c2VsZi5fcmV2ZXJzZSkKICAgICAgaGVhcHEuaGVhcHB1c2goCiAgICAgICAgICBxcy5idWZmZXJzLCBfUXVhbnRpbGVCdWZmZXIoZWxlbWVudHM9cXMudW5idWZmZXJlZF9lbGVtZW50cykpCiAgICAgIHFzLnVuYnVmZmVyZWRfZWxlbWVudHMgPSBbXQogICAgICBzZWxmLl9jb2xsYXBzZV9pZl9uZWVkZWQocXMpCgogIGRlZiBfb2Zmc2V0KHNlbGYsIG5ld1dlaWdodCk6CiAgICAiIiIKICAgIElmIHRoZSB3ZWlnaHQgaXMgZXZlbiwgd2UgbXVzdCByb3VuZCB1cCBvciBkb3duLiBBbHRlcm5hdGUgYmV0d2VlbiB0aGVzZQogICAgdHdvIG9wdGlvbnMgdG8gYXZvaWQgYSBiaWFzLgogICAgIiIiCiAgICBpZiBuZXdXZWlnaHQgJSAyID09IDE6CiAgICAgIHJldHVybiAobmV3V2VpZ2h0ICsgMSkgLyAyCiAgICBlbHNlOgogICAgICBzZWxmLl9vZmZzZXRfaml0dGVyID0gMiAtIHNlbGYuX29mZnNldF9qaXR0ZXIKICAgICAgcmV0dXJuIChuZXdXZWlnaHQgKyBzZWxmLl9vZmZzZXRfaml0dGVyKSAvIDIKCiAgZGVmIF9jb2xsYXBzZShzZWxmLCBidWZmZXJzKToKICAgIG5ld19sZXZlbCA9IDAKICAgIG5ld193ZWlnaHQgPSAwCiAgICBmb3IgYnVmZmVyX2VsZW0gaW4gYnVmZmVyczoKICAgICAgIyBBcyBwcmVzZW50ZWQgaW4gdGhlIHBhcGVyLCB0aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IHR3bwogICAgICAjIGJ1ZmZlcnMgb2YgdGhlIHNhbWUgKG1pbmltYWwpIGxldmVsIHRvIGNvbGxhcHNlLCBidXQgaXQgaXMgcG9zc2libGUKICAgICAgIyB0byB2aW9sYXRlIHRoaXMgY29uZGl0aW9uIHdoZW4gY29tYmluaW5nIGJ1ZmZlcnMgZnJvbSBpbmRlcGVuZGVudGx5CiAgICAgICMgY29tcHV0ZWQgc2hhcmRzLiAgSWYgdGhleSBkaWZmZXIgd2UgdGFrZSB0aGUgbWF4LgogICAgICBuZXdfbGV2ZWwgPSBtYXgoW25ld19sZXZlbCwgYnVmZmVyX2VsZW0ubGV2ZWwgKyAxXSkKICAgICAgbmV3X3dlaWdodCA9IG5ld193ZWlnaHQgKyBidWZmZXJfZWxlbS53ZWlnaHQKICAgIG5ld19lbGVtZW50cyA9IHNlbGYuX2ludGVycG9sYXRlKAogICAgICAgIGJ1ZmZlcnMsIHNlbGYuX2J1ZmZlcl9zaXplLCBuZXdfd2VpZ2h0LCBzZWxmLl9vZmZzZXQobmV3X3dlaWdodCkpCiAgICByZXR1cm4gX1F1YW50aWxlQnVmZmVyKG5ld19lbGVtZW50cywgbmV3X2xldmVsLCBuZXdfd2VpZ2h0KQoKICBkZWYgX2NvbGxhcHNlX2lmX25lZWRlZChzZWxmLCBxcyk6CiAgICB3aGlsZSBsZW4ocXMuYnVmZmVycykgPiBzZWxmLl9udW1fYnVmZmVyczoKICAgICAgdG9Db2xsYXBzZSA9IFtdCiAgICAgIHRvQ29sbGFwc2UuYXBwZW5kKGhlYXBxLmhlYXBwb3AocXMuYnVmZmVycykpCiAgICAgIHRvQ29sbGFwc2UuYXBwZW5kKGhlYXBxLmhlYXBwb3AocXMuYnVmZmVycykpCiAgICAgIG1pbkxldmVsID0gdG9Db2xsYXBzZVsxXS5sZXZlbAoKICAgICAgd2hpbGUgbGVuKHFzLmJ1ZmZlcnMpID4gMCBhbmQgcXMuYnVmZmVyc1swXS5sZXZlbCA9PSBtaW5MZXZlbDoKICAgICAgICB0b0NvbGxhcHNlLmFwcGVuZChoZWFwcS5oZWFwcG9wKHFzLmJ1ZmZlcnMpKQoKICAgICAgaGVhcHEuaGVhcHB1c2gocXMuYnVmZmVycywgc2VsZi5fY29sbGFwc2UodG9Db2xsYXBzZSkpCgogIGRlZiBfaW50ZXJwb2xhdGUoc2VsZiwgaV9idWZmZXJzLCBjb3VudCwgc3RlcCwgb2Zmc2V0KToKICAgICIiIgogICAgRW11bGF0ZXMgdGFraW5nIHRoZSBvcmRlcmVkIHVuaW9uIG9mIGFsbCBlbGVtZW50cyBpbiBidWZmZXJzLCByZXBlYXRlZAogICAgYWNjb3JkaW5nIHRvIHRoZWlyIHdlaWdodCwgYW5kIHBpY2tpbmcgb3V0IHRoZSAoayAqIHN0ZXAgKyBvZmZzZXQpLXRoCiAgICBlbGVtZW50cyBvZiB0aGlzIGxpc3QgZm9yIGAwIDw9IGsgPCBjb3VudGAuCiAgICAiIiIKCiAgICBpdGVyYXRvcnMgPSBbXQogICAgbmV3X2VsZW1lbnRzID0gW10KICAgIGNvbXBhcmVfa2V5ID0gTm9uZQogICAgaWYgc2VsZi5fa2V5OgogICAgICBjb21wYXJlX2tleSA9IGxhbWJkYSB4OiBzZWxmLl9rZXkoeFswXSkKICAgIGZvciBidWZmZXJfZWxlbSBpbiBpX2J1ZmZlcnM6CiAgICAgIGl0ZXJhdG9ycy5hcHBlbmQoYnVmZmVyX2VsZW0uc2l6ZWRfaXRlcmF0b3IoKSkKCiAgICAjIFB5dGhvbiAzIGBoZWFwcS5tZXJnZWAgc3VwcG9ydCBrZXkgY29tcGFyaXNvbiBhbmQgcmV0dXJucyBhbiBpdGVyYXRvciBhbmQKICAgICMgZG9lcyBub3QgcHVsbCB0aGUgZGF0YSBpbnRvIG1lbW9yeSBhbGwgYXQgb25jZS4gUHl0aG9uIDIgZG9lcyBub3QKICAgICMgc3VwcG9ydCBjb21wYXJpc29uIG9uIGl0cyBgaGVhcHEubWVyZ2VgIGFwaSwgc28gd2UgdXNlIHRoZSBpdGVydG9vbHMKICAgICMgd2hpY2ggdGFrZXMgdGhlIGBrZXlgIGZ1bmN0aW9uIGZvciBjb21wYXJpc29uIGFuZCBjcmVhdGVzIGFuIGl0ZXJhdG9yCiAgICAjIGZyb20gaXQuCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMzoKICAgICAgc29ydGVkX2VsZW0gPSBpdGVyKAogICAgICAgICAgc29ydGVkKAogICAgICAgICAgICAgIGl0ZXJ0b29scy5jaGFpbi5mcm9tX2l0ZXJhYmxlKGl0ZXJhdG9ycyksCiAgICAgICAgICAgICAga2V5PWNvbXBhcmVfa2V5LAogICAgICAgICAgICAgIHJldmVyc2U9c2VsZi5fcmV2ZXJzZSkpCiAgICBlbHNlOgogICAgICBzb3J0ZWRfZWxlbSA9IGhlYXBxLm1lcmdlKAogICAgICAgICAgKml0ZXJhdG9ycywga2V5PWNvbXBhcmVfa2V5LCByZXZlcnNlPXNlbGYuX3JldmVyc2UpCgogICAgd2VpZ2h0ZWRfZWxlbWVudCA9IG5leHQoc29ydGVkX2VsZW0pCiAgICBjdXJyZW50ID0gd2VpZ2h0ZWRfZWxlbWVudFsxXQogICAgaiA9IDAKICAgIHdoaWxlIGogPCBjb3VudDoKICAgICAgdGFyZ2V0ID0gaiAqIHN0ZXAgKyBvZmZzZXQKICAgICAgaiA9IGogKyAxCiAgICAgIHRyeToKICAgICAgICB3aGlsZSBjdXJyZW50IDw9IHRhcmdldDoKICAgICAgICAgIHdlaWdodGVkX2VsZW1lbnQgPSBuZXh0KHNvcnRlZF9lbGVtKQogICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQgKyB3ZWlnaHRlZF9lbGVtZW50WzFdCiAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgIHBhc3MKICAgICAgbmV3X2VsZW1lbnRzLmFwcGVuZCh3ZWlnaHRlZF9lbGVtZW50WzBdKQogICAgcmV0dXJuIG5ld19lbGVtZW50cwoKICBkZWYgY3JlYXRlX2FjY3VtdWxhdG9yKHNlbGYpOgogICAgc2VsZi5fcXMgPSBfUXVhbnRpbGVTdGF0ZSgKICAgICAgICBidWZmZXJfc2l6ZT1zZWxmLl9idWZmZXJfc2l6ZSwKICAgICAgICBudW1fYnVmZmVycz1zZWxmLl9udW1fYnVmZmVycywKICAgICAgICB1bmJ1ZmZlcmVkX2VsZW1lbnRzPVtdLAogICAgICAgIGJ1ZmZlcnM9W10pCiAgICByZXR1cm4gc2VsZi5fcXMKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBxdWFudGlsZV9zdGF0ZSwgZWxlbWVudCk6CiAgICAiIiIKICAgIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBjb2xsZWN0aW9uIGJlaW5nIHN1bW1hcml6ZWQgYnkgcXVhbnRpbGUgc3RhdGUuCiAgICAiIiIKICAgIGlmIHF1YW50aWxlX3N0YXRlLmlzX2VtcHR5KCk6CiAgICAgIHF1YW50aWxlX3N0YXRlLm1pbl92YWwgPSBxdWFudGlsZV9zdGF0ZS5tYXhfdmFsID0gZWxlbWVudAogICAgZWxpZiBzZWxmLl9jb21wYXJhdG9yKGVsZW1lbnQsIHF1YW50aWxlX3N0YXRlLm1pbl92YWwpIDwgMDoKICAgICAgcXVhbnRpbGVfc3RhdGUubWluX3ZhbCA9IGVsZW1lbnQKICAgIGVsaWYgc2VsZi5fY29tcGFyYXRvcihlbGVtZW50LCBxdWFudGlsZV9zdGF0ZS5tYXhfdmFsKSA+IDA6CiAgICAgIHF1YW50aWxlX3N0YXRlLm1heF92YWwgPSBlbGVtZW50CiAgICBzZWxmLl9hZGRfdW5idWZmZXJlZChxdWFudGlsZV9zdGF0ZSwgZWxlbT1lbGVtZW50KQogICAgcmV0dXJuIHF1YW50aWxlX3N0YXRlCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzKToKICAgICIiIk1lcmdlcyBhbGwgdGhlIGFjY3VtdWxhdG9ycyAocXVhbnRpbGUgc3RhdGUpIGFzIG9uZS4iIiIKICAgIHFzID0gc2VsZi5jcmVhdGVfYWNjdW11bGF0b3IoKQogICAgZm9yIGFjY3VtdWxhdG9yIGluIGFjY3VtdWxhdG9yczoKICAgICAgaWYgYWNjdW11bGF0b3IuaXNfZW1wdHkoKToKICAgICAgICBjb250aW51ZQogICAgICBpZiBub3QgcXMubWluX3ZhbCBvciBzZWxmLl9jb21wYXJhdG9yKGFjY3VtdWxhdG9yLm1pbl92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXMubWluX3ZhbCkgPCAwOgogICAgICAgIHFzLm1pbl92YWwgPSBhY2N1bXVsYXRvci5taW5fdmFsCiAgICAgIGlmIG5vdCBxcy5tYXhfdmFsIG9yIHNlbGYuX2NvbXBhcmF0b3IoYWNjdW11bGF0b3IubWF4X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxcy5tYXhfdmFsKSA+IDA6CiAgICAgICAgcXMubWF4X3ZhbCA9IGFjY3VtdWxhdG9yLm1heF92YWwKCiAgICAgIGZvciB1bmJ1ZmZlcmVkX2VsZW1lbnQgaW4gYWNjdW11bGF0b3IudW5idWZmZXJlZF9lbGVtZW50czoKICAgICAgICBzZWxmLl9hZGRfdW5idWZmZXJlZChxcywgdW5idWZmZXJlZF9lbGVtZW50KQoKICAgICAgcXMuYnVmZmVycy5leHRlbmQoYWNjdW11bGF0b3IuYnVmZmVycykKICAgIHNlbGYuX2NvbGxhcHNlX2lmX25lZWRlZChxcykKICAgIHJldHVybiBxcwoKICBkZWYgZXh0cmFjdF9vdXRwdXQoc2VsZiwgYWNjdW11bGF0b3IpOgogICAgIiIiCiAgICBPdXRwdXRzIG51bV9xdWFudGlsZXMgZWxlbWVudHMgY29uc2lzdGluZyBvZiB0aGUgbWluaW11bSwgbWF4aW11bSBhbmQKICAgIG51bV9xdWFudGlsZXMgLSAyIGV2ZW5seSBzcGFjZWQgaW50ZXJtZWRpYXRlIGVsZW1lbnRzLiBSZXR1cm5zIHRoZSBlbXB0eQogICAgbGlzdCBpZiBubyBlbGVtZW50cyBoYXZlIGJlZW4gYWRkZWQuCiAgICAiIiIKICAgIGlmIGFjY3VtdWxhdG9yLmlzX2VtcHR5KCk6CiAgICAgIHJldHVybiBbXQoKICAgIGFsbF9lbGVtcyA9IGFjY3VtdWxhdG9yLmJ1ZmZlcnMKICAgIHRvdGFsX2NvdW50ID0gbGVuKGFjY3VtdWxhdG9yLnVuYnVmZmVyZWRfZWxlbWVudHMpCiAgICBmb3IgYnVmZmVyX2VsZW0gaW4gYWxsX2VsZW1zOgogICAgICB0b3RhbF9jb3VudCA9IHRvdGFsX2NvdW50ICsgYWNjdW11bGF0b3IuYnVmZmVyX3NpemUgKiBidWZmZXJfZWxlbS53ZWlnaHQKCiAgICBpZiBhY2N1bXVsYXRvci51bmJ1ZmZlcmVkX2VsZW1lbnRzOgogICAgICBhY2N1bXVsYXRvci51bmJ1ZmZlcmVkX2VsZW1lbnRzLnNvcnQoa2V5PXNlbGYuX2tleSwgcmV2ZXJzZT1zZWxmLl9yZXZlcnNlKQogICAgICBhbGxfZWxlbXMuYXBwZW5kKF9RdWFudGlsZUJ1ZmZlcihhY2N1bXVsYXRvci51bmJ1ZmZlcmVkX2VsZW1lbnRzKSkKCiAgICBzdGVwID0gMS4wICogdG90YWxfY291bnQgLyAoc2VsZi5fbnVtX3F1YW50aWxlcyAtIDEpCiAgICBvZmZzZXQgPSAoMS4wICogdG90YWxfY291bnQgLSAxKSAvIChzZWxmLl9udW1fcXVhbnRpbGVzIC0gMSkKICAgIHF1YW50aWxlcyA9IFthY2N1bXVsYXRvci5taW5fdmFsXQogICAgcXVhbnRpbGVzLmV4dGVuZCgKICAgICAgICBzZWxmLl9pbnRlcnBvbGF0ZShhbGxfZWxlbXMsIHNlbGYuX251bV9xdWFudGlsZXMgLSAyLCBzdGVwLCBvZmZzZXQpKQogICAgcXVhbnRpbGVzLmFwcGVuZChhY2N1bXVsYXRvci5tYXhfdmFsKQogICAgcmV0dXJuIHF1YW50aWxlcwqUlQMAAQAAAAAAfZQojCRBcHByb3hpbWF0ZVVuaXF1ZS5wYXJzZV9pbnB1dF9wYXJhbXOUalYxAQBLQUteh5SMMUFwcHJveGltYXRlVW5pcXVlLl9nZXRfc2FtcGxlX3NpemVfZnJvbV9lc3RfZXJyb3KUalYxAQBLYEtoh5SMI0FwcHJveGltYXRlVW5pcXVlLkdsb2JhbGx5Ll9faW5pdF9flGpWMQEAS25Lb4eUjCFBcHByb3hpbWF0ZVVuaXF1ZS5HbG9iYWxseS5leHBhbmSUalYxAQBLcUt2h5SMGkFwcHJveGltYXRlVW5pcXVlLkdsb2JhbGx5lGpdMQEAS2pLdoeUjCFBcHByb3hpbWF0ZVVuaXF1ZS5QZXJLZXkuX19pbml0X1+UalYxAQBLfEt9h5SMH0FwcHJveGltYXRlVW5pcXVlLlBlcktleS5leHBhbmSUalYxAQBLf0uEh5SMGEFwcHJveGltYXRlVW5pcXVlLlBlcktleZRqXTEBAEt4S4SHlIwRQXBwcm94aW1hdGVVbmlxdWWUal0xAQBLMUuEh5SMF19MYXJnZXN0VW5pcXVlLl9faW5pdF9flGpWMQEAS45LkoeUjBJfTGFyZ2VzdFVuaXF1ZS5hZGSUalYxAQBLlEuqh5SMG19MYXJnZXN0VW5pcXVlLmdldF9lc3RpbWF0ZZRqVjEBAEusS8mHlIwOX0xhcmdlc3RVbmlxdWWUal0xAQBLh0vJh5SMI0FwcHJveGltYXRlVW5pcXVlQ29tYmluZUZuLl9faW5pdF9flGpWMQEAS9FL04eUjC1BcHByb3hpbWF0ZVVuaXF1ZUNvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3KUalYxAQBL1UvWh5SMJEFwcHJveGltYXRlVW5pcXVlQ29tYmluZUZuLmFkZF9pbnB1dJRqVjEBAEvYS92HlIwtQXBwcm94aW1hdGVVbmlxdWVDb21iaW5lRm4ubWVyZ2VfYWNjdW11bGF0b3JzlGpWMQEAS+FL54eUjClBcHByb3hpbWF0ZVVuaXF1ZUNvbWJpbmVGbi5leHRyYWN0X291dHB1dJRqVjEBAEvpS+uHlIwnQXBwcm94aW1hdGVVbmlxdWVDb21iaW5lRm4uZGlzcGxheV9kYXRhlGpWMQEAS+1L7oeUjBpBcHByb3hpbWF0ZVVuaXF1ZUNvbWJpbmVGbpRqXTEBAEvMS+6HlIwiQXBwcm94aW1hdGVRdWFudGlsZXMuX2Rpc3BsYXlfZGF0YZRqVjEBAEv2S/+HlIwmQXBwcm94aW1hdGVRdWFudGlsZXMuR2xvYmFsbHkuX19pbml0X1+UalYxAQBNDwFNEgGHlIwkQXBwcm94aW1hdGVRdWFudGlsZXMuR2xvYmFsbHkuZXhwYW5klGpWMQEATRQBTRkBh5SMKkFwcHJveGltYXRlUXVhbnRpbGVzLkdsb2JhbGx5LmRpc3BsYXlfZGF0YZRqVjEBAE0bAU0fAYeUjB1BcHByb3hpbWF0ZVF1YW50aWxlcy5HbG9iYWxseZRqXTEBAE0BAU0fAYeUjCRBcHByb3hpbWF0ZVF1YW50aWxlcy5QZXJLZXkuX19pbml0X1+UalYxAQBNMAFNMwGHlIwiQXBwcm94aW1hdGVRdWFudGlsZXMuUGVyS2V5LmV4cGFuZJRqVjEBAE01AU06AYeUjChBcHByb3hpbWF0ZVF1YW50aWxlcy5QZXJLZXkuZGlzcGxheV9kYXRhlGpWMQEATTwBTUABh5SMG0FwcHJveGltYXRlUXVhbnRpbGVzLlBlcktleZRqXTEBAE0hAU1AAYeUjBRBcHByb3hpbWF0ZVF1YW50aWxlc5RqXTEBAEvxTUABh5SMGF9RdWFudGlsZUJ1ZmZlci5fX2luaXRfX5RqVjEBAE1HAU1KAYeUjBZfUXVhbnRpbGVCdWZmZXIuX19sdF9flGpWMQEATUwBTU0Bh5SMPl9RdWFudGlsZUJ1ZmZlci5zaXplZF9pdGVyYXRvci5RdWFudGlsZUJ1ZmZlckl0ZXJhdG9yLl9faW5pdF9flGpWMQEATVEBTVMBh5SMPl9RdWFudGlsZUJ1ZmZlci5zaXplZF9pdGVyYXRvci5RdWFudGlsZUJ1ZmZlckl0ZXJhdG9yLl9faXRlcl9flGpWMQEATVUBTVYBh5SMPl9RdWFudGlsZUJ1ZmZlci5zaXplZF9pdGVyYXRvci5RdWFudGlsZUJ1ZmZlckl0ZXJhdG9yLl9fbmV4dF9flGpWMQEATVgBTVoBh5SMNV9RdWFudGlsZUJ1ZmZlci5zaXplZF9pdGVyYXRvci5RdWFudGlsZUJ1ZmZlckl0ZXJhdG9ylGpdMQEATVABTVwBh5SMHl9RdWFudGlsZUJ1ZmZlci5zaXplZF9pdGVyYXRvcpRqVjEBAE1PAU1eAYeUjA9fUXVhbnRpbGVCdWZmZXKUal0xAQBNQwFNXgGHlIwXX1F1YW50aWxlU3RhdGUuX19pbml0X1+UalYxAQBNaAFNcwGHlIwXX1F1YW50aWxlU3RhdGUuaXNfZW1wdHmUalYxAQBNdQFNdwGHlIwOX1F1YW50aWxlU3RhdGWUal0xAQBNYQFNdwGHlIwmQXBwcm94aW1hdGVRdWFudGlsZXNDb21iaW5lRm4uX19pbml0X1+UalYxAQBNrgFNuwGHlIwkQXBwcm94aW1hdGVRdWFudGlsZXNDb21iaW5lRm4uY3JlYXRllGpWMQEATb0BTegBh5SMLUFwcHJveGltYXRlUXVhbnRpbGVzQ29tYmluZUZuLl9hZGRfdW5idWZmZXJlZJRqVjEBAE3qAU31AYeUjCVBcHByb3hpbWF0ZVF1YW50aWxlc0NvbWJpbmVGbi5fb2Zmc2V0lGpWMQEATfcBTQACh5SMJ0FwcHJveGltYXRlUXVhbnRpbGVzQ29tYmluZUZuLl9jb2xsYXBzZZRqVjEBAE0CAk0OAoeUjDFBcHByb3hpbWF0ZVF1YW50aWxlc0NvbWJpbmVGbi5fY29sbGFwc2VfaWZfbmVlZGVklGpWMQEATRACTRoCh5SMKkFwcHJveGltYXRlUXVhbnRpbGVzQ29tYmluZUZuLl9pbnRlcnBvbGF0ZZRqVjEBAE0cAk1HAoeUjDBBcHByb3hpbWF0ZVF1YW50aWxlc0NvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3KUalYxAQBNSQJNTwKHlIwnQXBwcm94aW1hdGVRdWFudGlsZXNDb21iaW5lRm4uYWRkX2lucHV0lGpWMQEATVECTVwCh5SMMEFwcHJveGltYXRlUXVhbnRpbGVzQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc5RqVjEBAE1eAk1wAoeUjCxBcHByb3hpbWF0ZVF1YW50aWxlc0NvbWJpbmVGbi5leHRyYWN0X291dHB1dJRqVjEBAE1yAk2KAoeUjB1BcHByb3hpbWF0ZVF1YW50aWxlc0NvbWJpbmVGbpRqXTEBAE16AU2KAoeUdX2UKIwRQXBwcm94aW1hdGVVbmlxdWWUaqsDAACMJEFwcHJveGltYXRlVW5pcXVlLnBhcnNlX2lucHV0X3BhcmFtc5RqqwMAAIwaQXBwcm94aW1hdGVVbmlxdWUuR2xvYmFsbHmUaqsDAACMIUFwcHJveGltYXRlVW5pcXVlLkdsb2JhbGx5LmV4cGFuZJRqqwMAAIwYQXBwcm94aW1hdGVVbmlxdWUuUGVyS2V5lGqrAwAAjB9BcHByb3hpbWF0ZVVuaXF1ZS5QZXJLZXkuZXhwYW5klGqrAwAAjBRBcHByb3hpbWF0ZVF1YW50aWxlc5RqqwMAAIwdQXBwcm94aW1hdGVRdWFudGlsZXMuR2xvYmFsbHmUaqsDAACMJEFwcHJveGltYXRlUXVhbnRpbGVzLkdsb2JhbGx5LmV4cGFuZJRqqwMAAIwqQXBwcm94aW1hdGVRdWFudGlsZXMuR2xvYmFsbHkuZGlzcGxheV9kYXRhlGqrAwAAjBtBcHByb3hpbWF0ZVF1YW50aWxlcy5QZXJLZXmUaqsDAACMIkFwcHJveGltYXRlUXVhbnRpbGVzLlBlcktleS5leHBhbmSUaqsDAACMKEFwcHJveGltYXRlUXVhbnRpbGVzLlBlcktleS5kaXNwbGF5X2RhdGGUaqsDAAB1jBxhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnN0YXRzlHSUjB9hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlslChYpBIAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVGltZXN0YW1wIHV0aWxpdGllcy4iIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Cgpmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQpmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgd2l0aF9tZXRhY2xhc3MKCmZyb20gYXBhY2hlX2JlYW0ucG9ydGFiaWxpdHkuYXBpIGltcG9ydCBiZWFtX3J1bm5lcl9hcGlfcGIyCgpfX2FsbF9fID0gWwogICAgJ1RpbWVEb21haW4nLApdCgoKY2xhc3MgVGltZURvbWFpbihvYmplY3QpOgogICIiIlRpbWUgZG9tYWluIGZvciBzdHJlYW1pbmcgdGltZXJzLiIiIgoKICBXQVRFUk1BUksgPSAnV0FURVJNQVJLJwogIFJFQUxfVElNRSA9ICdSRUFMX1RJTUUnCiAgREVQRU5ERU5UX1JFQUxfVElNRSA9ICdERVBFTkRFTlRfUkVBTF9USU1FJwoKICBfUlVOTkVSX0FQSV9NQVBQSU5HID0gewogICAgICBXQVRFUk1BUks6IGJlYW1fcnVubmVyX2FwaV9wYjIuVGltZURvbWFpbi5FVkVOVF9USU1FLAogICAgICBSRUFMX1RJTUU6IGJlYW1fcnVubmVyX2FwaV9wYjIuVGltZURvbWFpbi5QUk9DRVNTSU5HX1RJTUUsCiAgICAgIERFUEVOREVOVF9SRUFMX1RJTUU6IGJlYW1fcnVubmVyX2FwaV9wYjIuVGltZURvbWFpbi4KICAgICAgU1lOQ0hST05JWkVEX1BST0NFU1NJTkdfVElNRSwKICB9CgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9zdHJpbmcoZG9tYWluKToKICAgIGlmIGRvbWFpbiBpbiAoVGltZURvbWFpbi5XQVRFUk1BUkssCiAgICAgICAgICAgICAgICAgIFRpbWVEb21haW4uUkVBTF9USU1FLAogICAgICAgICAgICAgICAgICBUaW1lRG9tYWluLkRFUEVOREVOVF9SRUFMX1RJTUUpOgogICAgICByZXR1cm4gZG9tYWluCiAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmtub3duIHRpbWUgZG9tYWluOiAlcycgJSBkb21haW4pCgogIEBzdGF0aWNtZXRob2QKICBkZWYgdG9fcnVubmVyX2FwaShkb21haW4pOgogICAgcmV0dXJuIFRpbWVEb21haW4uX1JVTk5FUl9BUElfTUFQUElOR1tkb21haW5dCgoKY2xhc3MgVGltZXN0YW1wQ29tYmluZXJJbXBsKHdpdGhfbWV0YWNsYXNzKEFCQ01ldGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QpKTogICMgdHlwZTogaWdub3JlW21pc2NdCiAgIiIiSW1wbGVtZW50YXRpb24gb2YgVGltZXN0YW1wQ29tYmluZXIuIiIiCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIGFzc2lnbl9vdXRwdXRfdGltZShzZWxmLCB3aW5kb3csIGlucHV0X3RpbWVzdGFtcCk6CiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBjb21iaW5lKHNlbGYsIG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApOgogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBkZWYgY29tYmluZV9hbGwoc2VsZiwgbWVyZ2luZ190aW1lc3RhbXBzKToKICAgICIiIkFwcGx5IGNvbWJpbmUgdG8gbGlzdCBvZiB0aW1lc3RhbXBzLiIiIgogICAgY29tYmluZWRfb3V0cHV0X3RpbWUgPSBOb25lCiAgICBmb3Igb3V0cHV0X3RpbWUgaW4gbWVyZ2luZ190aW1lc3RhbXBzOgogICAgICBpZiBjb21iaW5lZF9vdXRwdXRfdGltZSBpcyBOb25lOgogICAgICAgIGNvbWJpbmVkX291dHB1dF90aW1lID0gb3V0cHV0X3RpbWUKICAgICAgZWxpZiBvdXRwdXRfdGltZSBpcyBub3QgTm9uZToKICAgICAgICBjb21iaW5lZF9vdXRwdXRfdGltZSA9IHNlbGYuY29tYmluZShjb21iaW5lZF9vdXRwdXRfdGltZSwgb3V0cHV0X3RpbWUpCiAgICByZXR1cm4gY29tYmluZWRfb3V0cHV0X3RpbWUKCiAgZGVmIG1lcmdlKHNlbGYsIHVudXNlZF9yZXN1bHRfd2luZG93LCBtZXJnaW5nX3RpbWVzdGFtcHMpOgogICAgIiIiRGVmYXVsdCB0byByZXR1cm5pbmcgdGhlIHJlc3VsdCBvZiBjb21iaW5lX2FsbC4iIiIKICAgIHJldHVybiBzZWxmLmNvbWJpbmVfYWxsKG1lcmdpbmdfdGltZXN0YW1wcykKCgpjbGFzcyBEZXBlbmRzT25seU9uV2luZG93KHdpdGhfbWV0YWNsYXNzKEFCQ01ldGEsIFRpbWVzdGFtcENvbWJpbmVySW1wbCkKICAgICAgICAgICAgICAgICAgICAgICAgICApOiAgIyB0eXBlOiBpZ25vcmVbbWlzY10KICAiIiJUaW1lc3RhbXBDb21iaW5lckltcGwgdGhhdCBvbmx5IGRlcGVuZHMgb24gdGhlIHdpbmRvdy4iIiIKICBkZWYgbWVyZ2Uoc2VsZiwgcmVzdWx0X3dpbmRvdywgdW51c2VkX21lcmdpbmdfdGltZXN0YW1wcyk6CiAgICAjIFNpbmNlIHdlIGtub3cgdGhhdCB0aGUgcmVzdWx0IG9ubHkgZGVwZW5kcyBvbiB0aGUgd2luZG93LCB3ZSBjYW4gaWdub3JlCiAgICAjIHRoZSBnaXZlbiB0aW1lc3RhbXBzLgogICAgcmV0dXJuIHNlbGYuYXNzaWduX291dHB1dF90aW1lKHJlc3VsdF93aW5kb3csIE5vbmUpCgoKY2xhc3MgT3V0cHV0QXRFYXJsaWVzdElucHV0VGltZXN0YW1wSW1wbChUaW1lc3RhbXBDb21iaW5lckltcGwpOgogICIiIlRpbWVzdGFtcENvbWJpbmVySW1wbCBvdXRwdXR0aW5nIGF0IGVhcmxpZXN0IGlucHV0IHRpbWVzdGFtcC4iIiIKICBkZWYgYXNzaWduX291dHB1dF90aW1lKHNlbGYsIHdpbmRvdywgaW5wdXRfdGltZXN0YW1wKToKICAgIHJldHVybiBpbnB1dF90aW1lc3RhbXAKCiAgZGVmIGNvbWJpbmUoc2VsZiwgb3V0cHV0X3RpbWVzdGFtcCwgb3RoZXJfb3V0cHV0X3RpbWVzdGFtcCk6CiAgICAiIiJEZWZhdWx0IHRvIHJldHVybmluZyB0aGUgZWFybGllciBvZiB0d28gdGltZXN0YW1wcy4iIiIKICAgIHJldHVybiBtaW4ob3V0cHV0X3RpbWVzdGFtcCwgb3RoZXJfb3V0cHV0X3RpbWVzdGFtcCkKCgpjbGFzcyBPdXRwdXRBdEVhcmxpZXN0VHJhbnNmb3JtZWRJbnB1dFRpbWVzdGFtcEltcGwoVGltZXN0YW1wQ29tYmluZXJJbXBsKToKICAiIiJUaW1lc3RhbXBDb21iaW5lckltcGwgb3V0cHV0dGluZyBhdCBlYXJsaWVzdCBpbnB1dCB0aW1lc3RhbXAuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd19mbik6CiAgICBzZWxmLndpbmRvd19mbiA9IHdpbmRvd19mbgoKICBkZWYgYXNzaWduX291dHB1dF90aW1lKHNlbGYsIHdpbmRvdywgaW5wdXRfdGltZXN0YW1wKToKICAgIHJldHVybiBzZWxmLndpbmRvd19mbi5nZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWUod2luZG93LCBpbnB1dF90aW1lc3RhbXApCgogIGRlZiBjb21iaW5lKHNlbGYsIG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApOgogICAgcmV0dXJuIG1pbihvdXRwdXRfdGltZXN0YW1wLCBvdGhlcl9vdXRwdXRfdGltZXN0YW1wKQoKCmNsYXNzIE91dHB1dEF0TGF0ZXN0SW5wdXRUaW1lc3RhbXBJbXBsKFRpbWVzdGFtcENvbWJpbmVySW1wbCk6CiAgIiIiVGltZXN0YW1wQ29tYmluZXJJbXBsIG91dHB1dHRpbmcgYXQgbGF0ZXN0IGlucHV0IHRpbWVzdGFtcC4iIiIKICBkZWYgYXNzaWduX291dHB1dF90aW1lKHNlbGYsIHdpbmRvdywgaW5wdXRfdGltZXN0YW1wKToKICAgIHJldHVybiBpbnB1dF90aW1lc3RhbXAKCiAgZGVmIGNvbWJpbmUoc2VsZiwgb3V0cHV0X3RpbWVzdGFtcCwgb3RoZXJfb3V0cHV0X3RpbWVzdGFtcCk6CiAgICByZXR1cm4gbWF4KG91dHB1dF90aW1lc3RhbXAsIG90aGVyX291dHB1dF90aW1lc3RhbXApCgoKY2xhc3MgT3V0cHV0QXRFbmRPZldpbmRvd0ltcGwoRGVwZW5kc09ubHlPbldpbmRvdyk6CiAgIiIiVGltZXN0YW1wQ29tYmluZXJJbXBsIG91dHB1dHRpbmcgYXQgZW5kIG9mIHdpbmRvdy4iIiIKICBkZWYgYXNzaWduX291dHB1dF90aW1lKHNlbGYsIHdpbmRvdywgdW51c2VkX2lucHV0X3RpbWVzdGFtcCk6CiAgICByZXR1cm4gd2luZG93Lm1heF90aW1lc3RhbXAoKQoKICBkZWYgY29tYmluZShzZWxmLCBvdXRwdXRfdGltZXN0YW1wLCBvdGhlcl9vdXRwdXRfdGltZXN0YW1wKToKICAgIHJldHVybiBtYXgob3V0cHV0X3RpbWVzdGFtcCwgb3RoZXJfb3V0cHV0X3RpbWVzdGFtcCkKlH2UKIwWVGltZURvbWFpbi5mcm9tX3N0cmluZ5RqVjEBAEszSzmHlIwYVGltZURvbWFpbi50b19ydW5uZXJfYXBplGpWMQEASztLPYeUjApUaW1lRG9tYWlulGpdMQEASyVLPYeUjChUaW1lc3RhbXBDb21iaW5lckltcGwuYXNzaWduX291dHB1dF90aW1llGpWMQEAS0NLRYeUjB1UaW1lc3RhbXBDb21iaW5lckltcGwuY29tYmluZZRqVjEBAEtHS0mHlIwhVGltZXN0YW1wQ29tYmluZXJJbXBsLmNvbWJpbmVfYWxslGpWMQEAS0tLU4eUjBtUaW1lc3RhbXBDb21iaW5lckltcGwubWVyZ2WUalYxAQBLVUtXh5SMFVRpbWVzdGFtcENvbWJpbmVySW1wbJRqXTEBAEtAS1eHlIwZRGVwZW5kc09ubHlPbldpbmRvdy5tZXJnZZRqVjEBAEtdS2CHlIwTRGVwZW5kc09ubHlPbldpbmRvd5RqXTEBAEtaS2CHlIw1T3V0cHV0QXRFYXJsaWVzdElucHV0VGltZXN0YW1wSW1wbC5hc3NpZ25fb3V0cHV0X3RpbWWUalYxAQBLZUtmh5SMKk91dHB1dEF0RWFybGllc3RJbnB1dFRpbWVzdGFtcEltcGwuY29tYmluZZRqVjEBAEtoS2qHlIwiT3V0cHV0QXRFYXJsaWVzdElucHV0VGltZXN0YW1wSW1wbJRqXTEBAEtjS2qHlIw2T3V0cHV0QXRFYXJsaWVzdFRyYW5zZm9ybWVkSW5wdXRUaW1lc3RhbXBJbXBsLl9faW5pdF9flGpWMQEAS29LcIeUjEBPdXRwdXRBdEVhcmxpZXN0VHJhbnNmb3JtZWRJbnB1dFRpbWVzdGFtcEltcGwuYXNzaWduX291dHB1dF90aW1llGpWMQEAS3JLc4eUjDVPdXRwdXRBdEVhcmxpZXN0VHJhbnNmb3JtZWRJbnB1dFRpbWVzdGFtcEltcGwuY29tYmluZZRqVjEBAEt1S3aHlIwtT3V0cHV0QXRFYXJsaWVzdFRyYW5zZm9ybWVkSW5wdXRUaW1lc3RhbXBJbXBslGpdMQEAS21LdoeUjDNPdXRwdXRBdExhdGVzdElucHV0VGltZXN0YW1wSW1wbC5hc3NpZ25fb3V0cHV0X3RpbWWUalYxAQBLe0t8h5SMKE91dHB1dEF0TGF0ZXN0SW5wdXRUaW1lc3RhbXBJbXBsLmNvbWJpbmWUalYxAQBLfkt/h5SMIE91dHB1dEF0TGF0ZXN0SW5wdXRUaW1lc3RhbXBJbXBslGpdMQEAS3lLf4eUjCpPdXRwdXRBdEVuZE9mV2luZG93SW1wbC5hc3NpZ25fb3V0cHV0X3RpbWWUalYxAQBLhEuFh5SMH091dHB1dEF0RW5kT2ZXaW5kb3dJbXBsLmNvbWJpbmWUalYxAQBLh0uIh5SMF091dHB1dEF0RW5kT2ZXaW5kb3dJbXBslGpdMQEAS4JLiIeUdX2UKIwKVGltZURvbWFpbpRqZQMAAIwWVGltZURvbWFpbi5mcm9tX3N0cmluZ5RqZQMAAIwYVGltZURvbWFpbi50b19ydW5uZXJfYXBplGplAwAAdYwfYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50aW1ldXRpbJR0lIw8YXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmFuc2Zvcm1zX2tleXdvcmRfb25seV9hcmdzX3Rlc3RfcHkzlChYYhYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVW5pdCB0ZXN0cyBmb3Igc2lkZSBpbnB1dHMuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHVuaXR0ZXN0CgppbXBvcnQgYXBhY2hlX2JlYW0gYXMgYmVhbQpmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudGVzdF9waXBlbGluZSBpbXBvcnQgVGVzdFBpcGVsaW5lCmZyb20gYXBhY2hlX2JlYW0udGVzdGluZy51dGlsIGltcG9ydCBhc3NlcnRfdGhhdApmcm9tIGFwYWNoZV9iZWFtLnRlc3RpbmcudXRpbCBpbXBvcnQgZXF1YWxfdG8KCgpjbGFzcyBLZXl3b3JkT25seUFyZ3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CgogICMgRW5hYmxlIG5vc2UgdGVzdHMgcnVubmluZyBpbiBwYXJhbGxlbAogIF9tdWx0aXByb2Nlc3NfY2FuX3NwbGl0XyA9IFRydWUKCiAgZGVmIHRlc3Rfc2lkZV9pbnB1dF9rZXl3b3JkX29ubHlfYXJncyhzZWxmKToKICAgIHdpdGggVGVzdFBpcGVsaW5lKCkgYXMgcGlwZWxpbmU6CgogICAgICBkZWYgc29ydF93aXRoX3NpZGVfaW5wdXRzKHgsICpzLCByZXZlcnNlPUZhbHNlKToKICAgICAgICBmb3IgeSBpbiBzOgogICAgICAgICAgeWllbGQgc29ydGVkKFt4XSArIHksIHJldmVyc2U9cmV2ZXJzZSkKCiAgICAgIGRlZiBzb3J0X3dpdGhfc2lkZV9pbnB1dHNfd2l0aG91dF9kZWZhdWx0X3ZhbHVlcyh4LCAqcywgcmV2ZXJzZSk6CiAgICAgICAgZm9yIHkgaW4gczoKICAgICAgICAgIHlpZWxkIHNvcnRlZChbeF0gKyB5LCByZXZlcnNlPXJldmVyc2UpCgogICAgICBwY29sID0gcGlwZWxpbmUgfCAnc3RhcnQnID4+IGJlYW0uQ3JlYXRlKFsxLCAyXSkKICAgICAgc2lkZSA9IHBpcGVsaW5lIHwgJ3NpZGUnID4+IGJlYW0uQ3JlYXRlKFszLCA0XSkgICMgMiB2YWx1ZXMgaW4gc2lkZSBpbnB1dC4KICAgICAgcmVzdWx0MSA9IHBjb2wgfCAnY29tcHV0ZTEnID4+IGJlYW0uRmxhdE1hcCgKICAgICAgICAgIHNvcnRfd2l0aF9zaWRlX2lucHV0cywgYmVhbS5wdmFsdWUuQXNMaXN0KHNpZGUpLCByZXZlcnNlPVRydWUpCiAgICAgIGFzc2VydF90aGF0KHJlc3VsdDEsIGVxdWFsX3RvKFtbNCwgMywgMV0sIFs0LCAzLCAyXV0pLCBsYWJlbD0nYXNzZXJ0MScpCgogICAgICByZXN1bHQyID0gcGNvbCB8ICdjb21wdXRlMicgPj4gYmVhbS5GbGF0TWFwKAogICAgICAgICAgc29ydF93aXRoX3NpZGVfaW5wdXRzLCBiZWFtLnB2YWx1ZS5Bc0xpc3Qoc2lkZSkpCiAgICAgIGFzc2VydF90aGF0KHJlc3VsdDIsIGVxdWFsX3RvKFtbMSwgMywgNF0sIFsyLCAzLCA0XV0pLCBsYWJlbD0nYXNzZXJ0MicpCgogICAgICByZXN1bHQzID0gcGNvbCB8ICdjb21wdXRlMycgPj4gYmVhbS5GbGF0TWFwKHNvcnRfd2l0aF9zaWRlX2lucHV0cykKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0MywgZXF1YWxfdG8oW10pLCBsYWJlbD0nYXNzZXJ0MycpCgogICAgICByZXN1bHQ0ID0gcGNvbCB8ICdjb21wdXRlNCcgPj4gYmVhbS5GbGF0TWFwKAogICAgICAgICAgc29ydF93aXRoX3NpZGVfaW5wdXRzLCByZXZlcnNlPVRydWUpCiAgICAgIGFzc2VydF90aGF0KHJlc3VsdDQsIGVxdWFsX3RvKFtdKSwgbGFiZWw9J2Fzc2VydDQnKQoKICAgICAgcmVzdWx0NSA9IHBjb2wgfCAnY29tcHV0ZTUnID4+IGJlYW0uRmxhdE1hcCgKICAgICAgICAgIHNvcnRfd2l0aF9zaWRlX2lucHV0c193aXRob3V0X2RlZmF1bHRfdmFsdWVzLAogICAgICAgICAgYmVhbS5wdmFsdWUuQXNMaXN0KHNpZGUpLAogICAgICAgICAgcmV2ZXJzZT1UcnVlKQogICAgICBhc3NlcnRfdGhhdChyZXN1bHQ1LCBlcXVhbF90byhbWzQsIDMsIDFdLCBbNCwgMywgMl1dKSwgbGFiZWw9J2Fzc2VydDUnKQoKICAgICAgcmVzdWx0NiA9IHBjb2wgfCAnY29tcHV0ZTYnID4+IGJlYW0uRmxhdE1hcCgKICAgICAgICAgIHNvcnRfd2l0aF9zaWRlX2lucHV0c193aXRob3V0X2RlZmF1bHRfdmFsdWVzLAogICAgICAgICAgYmVhbS5wdmFsdWUuQXNMaXN0KHNpZGUpLAogICAgICAgICAgcmV2ZXJzZT1GYWxzZSkKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0NiwgZXF1YWxfdG8oW1sxLCAzLCA0XSwgWzIsIDMsIDRdXSksIGxhYmVsPSdhc3NlcnQ2JykKCiAgICAgIHJlc3VsdDcgPSBwY29sIHwgJ2NvbXB1dGU3JyA+PiBiZWFtLkZsYXRNYXAoCiAgICAgICAgICBzb3J0X3dpdGhfc2lkZV9pbnB1dHNfd2l0aG91dF9kZWZhdWx0X3ZhbHVlcywgcmV2ZXJzZT1GYWxzZSkKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0NywgZXF1YWxfdG8oW10pLCBsYWJlbD0nYXNzZXJ0NycpCgogICAgICByZXN1bHQ4ID0gcGNvbCB8ICdjb21wdXRlOCcgPj4gYmVhbS5GbGF0TWFwKAogICAgICAgICAgc29ydF93aXRoX3NpZGVfaW5wdXRzX3dpdGhvdXRfZGVmYXVsdF92YWx1ZXMsIHJldmVyc2U9VHJ1ZSkKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0OCwgZXF1YWxfdG8oW10pLCBsYWJlbD0nYXNzZXJ0OCcpCgogIGRlZiB0ZXN0X2NvbWJpbmVfa2V5d29yZF9vbmx5X2FyZ3Moc2VsZik6CiAgICB3aXRoIFRlc3RQaXBlbGluZSgpIGFzIHBpcGVsaW5lOgoKICAgICAgZGVmIGJvdW5kZWRfc3VtKHZhbHVlcywgKnMsIGJvdW5kPTUwMCk6CiAgICAgICAgcmV0dXJuIG1pbihzdW0odmFsdWVzKSArIHN1bShzKSwgYm91bmQpCgogICAgICBkZWYgYm91bmRlZF9zdW1fd2l0aG91dF9kZWZhdWx0X3ZhbHVlcyh2YWx1ZXMsICpzLCBib3VuZCk6CiAgICAgICAgcmV0dXJuIG1pbihzdW0odmFsdWVzKSArIHN1bShzKSwgYm91bmQpCgogICAgICBwY29sbCA9IHBpcGVsaW5lIHwgJ3N0YXJ0JyA+PiBiZWFtLkNyZWF0ZShbNiwgMywgMV0pCiAgICAgIHJlc3VsdDEgPSBwY29sbCB8ICdzdW0xJyA+PiBiZWFtLkNvbWJpbmVHbG9iYWxseSgKICAgICAgICAgIGJvdW5kZWRfc3VtLCA1LCA4LCBib3VuZD0yMCkKICAgICAgcmVzdWx0MiA9IHBjb2xsIHwgJ3N1bTInID4+IGJlYW0uQ29tYmluZUdsb2JhbGx5KGJvdW5kZWRfc3VtLCAwLCAwKQogICAgICByZXN1bHQzID0gcGNvbGwgfCAnc3VtMycgPj4gYmVhbS5Db21iaW5lR2xvYmFsbHkoYm91bmRlZF9zdW0pCiAgICAgIHJlc3VsdDQgPSBwY29sbCB8ICdzdW00JyA+PiBiZWFtLkNvbWJpbmVHbG9iYWxseShib3VuZGVkX3N1bSwgYm91bmQ9NSkKICAgICAgcmVzdWx0NSA9IHBjb2xsIHwgJ3N1bTUnID4+IGJlYW0uQ29tYmluZUdsb2JhbGx5KAogICAgICAgICAgYm91bmRlZF9zdW1fd2l0aG91dF9kZWZhdWx0X3ZhbHVlcywgNSwgOCwgYm91bmQ9MjApCiAgICAgIHJlc3VsdDYgPSBwY29sbCB8ICdzdW02JyA+PiBiZWFtLkNvbWJpbmVHbG9iYWxseSgKICAgICAgICAgIGJvdW5kZWRfc3VtX3dpdGhvdXRfZGVmYXVsdF92YWx1ZXMsIDAsIDAsIGJvdW5kPTUwMCkKICAgICAgcmVzdWx0NyA9IHBjb2xsIHwgJ3N1bTcnID4+IGJlYW0uQ29tYmluZUdsb2JhbGx5KAogICAgICAgICAgYm91bmRlZF9zdW1fd2l0aG91dF9kZWZhdWx0X3ZhbHVlcywgYm91bmQ9NTAwKQogICAgICByZXN1bHQ4ID0gcGNvbGwgfCAnc3VtOCcgPj4gYmVhbS5Db21iaW5lR2xvYmFsbHkoCiAgICAgICAgICBib3VuZGVkX3N1bV93aXRob3V0X2RlZmF1bHRfdmFsdWVzLCBib3VuZD01KQoKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0MSwgZXF1YWxfdG8oWzIwXSksIGxhYmVsPSdhc3NlcnQxJykKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0MiwgZXF1YWxfdG8oWzEwXSksIGxhYmVsPSdhc3NlcnQyJykKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0MywgZXF1YWxfdG8oWzEwXSksIGxhYmVsPSdhc3NlcnQzJykKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0NCwgZXF1YWxfdG8oWzVdKSwgbGFiZWw9J2Fzc2VydDQnKQogICAgICBhc3NlcnRfdGhhdChyZXN1bHQ1LCBlcXVhbF90byhbMjBdKSwgbGFiZWw9J2Fzc2VydDUnKQogICAgICBhc3NlcnRfdGhhdChyZXN1bHQ2LCBlcXVhbF90byhbMTBdKSwgbGFiZWw9J2Fzc2VydDYnKQogICAgICBhc3NlcnRfdGhhdChyZXN1bHQ3LCBlcXVhbF90byhbMTBdKSwgbGFiZWw9J2Fzc2VydDcnKQogICAgICBhc3NlcnRfdGhhdChyZXN1bHQ4LCBlcXVhbF90byhbNV0pLCBsYWJlbD0nYXNzZXJ0OCcpCgogIGRlZiB0ZXN0X2RvX2ZuX2tleXdvcmRfb25seV9hcmdzKHNlbGYpOgogICAgd2l0aCBUZXN0UGlwZWxpbmUoKSBhcyBwaXBlbGluZToKCiAgICAgIGNsYXNzIE15RG9GbihiZWFtLkRvRm4pOgogICAgICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQsICpzLCBib3VuZD01MDApOgogICAgICAgICAgcmV0dXJuIFttaW4oc3VtKHMpICsgZWxlbWVudCwgYm91bmQpXQoKICAgICAgcGNvbGwgPSBwaXBlbGluZSB8ICdzdGFydCcgPj4gYmVhbS5DcmVhdGUoWzYsIDMsIDFdKQogICAgICByZXN1bHQxID0gcGNvbGwgfCAnc3VtMScgPj4gYmVhbS5QYXJEbyhNeURvRm4oKSwgNSwgOCwgYm91bmQ9MTUpCiAgICAgIHJlc3VsdDIgPSBwY29sbCB8ICdzdW0yJyA+PiBiZWFtLlBhckRvKE15RG9GbigpLCA1LCA4KQogICAgICByZXN1bHQzID0gcGNvbGwgfCAnc3VtMycgPj4gYmVhbS5QYXJEbyhNeURvRm4oKSkKICAgICAgcmVzdWx0NCA9IHBjb2xsIHwgJ3N1bTQnID4+IGJlYW0uUGFyRG8oTXlEb0ZuKCksIGJvdW5kPTUpCgogICAgICBhc3NlcnRfdGhhdChyZXN1bHQxLCBlcXVhbF90byhbMTUsIDE1LCAxNF0pLCBsYWJlbD0nYXNzZXJ0MScpCiAgICAgIGFzc2VydF90aGF0KHJlc3VsdDIsIGVxdWFsX3RvKFsxOSwgMTYsIDE0XSksIGxhYmVsPSdhc3NlcnQyJykKICAgICAgYXNzZXJ0X3RoYXQocmVzdWx0MywgZXF1YWxfdG8oWzYsIDMsIDFdKSwgbGFiZWw9J2Fzc2VydDMnKQogICAgICBhc3NlcnRfdGhhdChyZXN1bHQ0LCBlcXVhbF90byhbNSwgMywgMV0pLCBsYWJlbD0nYXNzZXJ0NCcpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCiAgdW5pdHRlc3QubWFpbigpCpR9lCiMTEtleXdvcmRPbmx5QXJnc1Rlc3RzLnRlc3Rfc2lkZV9pbnB1dF9rZXl3b3JkX29ubHlfYXJncy5zb3J0X3dpdGhfc2lkZV9pbnB1dHOUalYxAQBLKUsrh5SMY0tleXdvcmRPbmx5QXJnc1Rlc3RzLnRlc3Rfc2lkZV9pbnB1dF9rZXl3b3JkX29ubHlfYXJncy5zb3J0X3dpdGhfc2lkZV9pbnB1dHNfd2l0aG91dF9kZWZhdWx0X3ZhbHVlc5RqVjEBAEstSy+HlIw2S2V5d29yZE9ubHlBcmdzVGVzdHMudGVzdF9zaWRlX2lucHV0X2tleXdvcmRfb25seV9hcmdzlGpWMQEASyZLVIeUjD9LZXl3b3JkT25seUFyZ3NUZXN0cy50ZXN0X2NvbWJpbmVfa2V5d29yZF9vbmx5X2FyZ3MuYm91bmRlZF9zdW2UalYxAQBLWUtah5SMVktleXdvcmRPbmx5QXJnc1Rlc3RzLnRlc3RfY29tYmluZV9rZXl3b3JkX29ubHlfYXJncy5ib3VuZGVkX3N1bV93aXRob3V0X2RlZmF1bHRfdmFsdWVzlGpWMQEAS1xLXYeUjDNLZXl3b3JkT25seUFyZ3NUZXN0cy50ZXN0X2NvbWJpbmVfa2V5d29yZF9vbmx5X2FyZ3OUalYxAQBLVkt1h5SMQEtleXdvcmRPbmx5QXJnc1Rlc3RzLnRlc3RfZG9fZm5fa2V5d29yZF9vbmx5X2FyZ3MuTXlEb0ZuLnByb2Nlc3OUalYxAQBLe0t8h5SMOEtleXdvcmRPbmx5QXJnc1Rlc3RzLnRlc3RfZG9fZm5fa2V5d29yZF9vbmx5X2FyZ3MuTXlEb0ZulGpdMQEAS3pLfIeUjDFLZXl3b3JkT25seUFyZ3NUZXN0cy50ZXN0X2RvX2ZuX2tleXdvcmRfb25seV9hcmdzlGpWMQEAS3dLh4eUjBRLZXl3b3JkT25seUFyZ3NUZXN0c5RqXTEBAEshS4eHlHV9lCiMFEtleXdvcmRPbmx5QXJnc1Rlc3RzlGraAwAAjDZLZXl3b3JkT25seUFyZ3NUZXN0cy50ZXN0X3NpZGVfaW5wdXRfa2V5d29yZF9vbmx5X2FyZ3OUatoDAACMM0tleXdvcmRPbmx5QXJnc1Rlc3RzLnRlc3RfY29tYmluZV9rZXl3b3JkX29ubHlfYXJnc5Rq2gMAAIwxS2V5d29yZE9ubHlBcmdzVGVzdHMudGVzdF9kb19mbl9rZXl3b3JkX29ubHlfYXJnc5Rq2gMAAHWMPGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJhbnNmb3Jtc19rZXl3b3JkX29ubHlfYXJnc190ZXN0X3B5M5R0lIweYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy50cmlnZ2VylChYf70AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiU3VwcG9ydCBmb3IgRGF0YWZsb3cgdHJpZ2dlcnMuCgpUcmlnZ2VycyBjb250cm9sIHdoZW4gaW4gcHJvY2Vzc2luZyB0aW1lIHdpbmRvd3MgZ2V0IGVtaXR0ZWQuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgY29weQppbXBvcnQgbG9nZ2luZwppbXBvcnQgbnVtYmVycwpmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQpmcm9tIGFiYyBpbXBvcnQgYWJzdHJhY3RtZXRob2QKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0Cgpmcm9tIGZ1dHVyZS5tb3Zlcy5pdGVydG9vbHMgaW1wb3J0IHppcF9sb25nZXN0CmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVyaXRlbXMKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IHdpdGhfbWV0YWNsYXNzCgpmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgY29kZXJfaW1wbApmcm9tIGFwYWNoZV9iZWFtLmNvZGVycyBpbXBvcnQgb2JzZXJ2YWJsZQpmcm9tIGFwYWNoZV9iZWFtLnBvcnRhYmlsaXR5LmFwaSBpbXBvcnQgYmVhbV9ydW5uZXJfYXBpX3BiMgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvbWJpbmVycwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMgaW1wb3J0IGNvcmUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRpbWV1dGlsIGltcG9ydCBUaW1lRG9tYWluCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IEdsb2JhbFdpbmRvdwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBHbG9iYWxXaW5kb3dzCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFRpbWVzdGFtcENvbWJpbmVyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFdpbmRvd2VkVmFsdWUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgV2luZG93Rm4KZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgd2luZG93ZWRfdmFsdWUKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1BWF9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IE1JTl9USU1FU1RBTVAKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRJTUVfR1JBTlVMQVJJVFkKCiMgQWZ0ZXJDb3VudCBpcyBleHBlcmltZW50YWwuIE5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgpfX2FsbF9fID0gWwogICAgJ0FjY3VtdWxhdGlvbk1vZGUnLAogICAgJ1RyaWdnZXJGbicsCiAgICAnRGVmYXVsdFRyaWdnZXInLAogICAgJ0FmdGVyV2F0ZXJtYXJrJywKICAgICdBZnRlclByb2Nlc3NpbmdUaW1lJywKICAgICdBZnRlckNvdW50JywKICAgICdSZXBlYXRlZGx5JywKICAgICdBZnRlckFueScsCiAgICAnQWZ0ZXJBbGwnLAogICAgJ0FmdGVyRWFjaCcsCiAgICAnT3JGaW5hbGx5JywKXQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIEFjY3VtdWxhdGlvbk1vZGUob2JqZWN0KToKICAiIiJDb250cm9scyB3aGF0IHRvIGRvIHdpdGggZGF0YSB3aGVuIGEgdHJpZ2dlciBmaXJlcyBtdWx0aXBsZSB0aW1lcy4iIiIKICBESVNDQVJESU5HID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5BY2N1bXVsYXRpb25Nb2RlLkRJU0NBUkRJTkcKICBBQ0NVTVVMQVRJTkcgPSBiZWFtX3J1bm5lcl9hcGlfcGIyLkFjY3VtdWxhdGlvbk1vZGUuQUNDVU1VTEFUSU5HCiAgIyBUT0RPKHJvYmVydHdiKTogUHJvdmlkZSByZXRyYWN0aW9ucyBvZiBwcmV2aW91cyBvdXRwdXRzLgogICMgUkVUUkFDVElORyA9IDMKCgpjbGFzcyBfU3RhdGVUYWcod2l0aF9tZXRhY2xhc3MoQUJDTWV0YSwgb2JqZWN0KSk6ICAjIHR5cGU6IGlnbm9yZVttaXNjXQogICIiIkFuIGlkZW50aWZpZXIgdXNlZCB0byBzdG9yZSBhbmQgcmV0cmlldmUgdHlwZWQsIGNvbWJpbmFibGUgc3RhdGUuCgogIFRoZSBnaXZlbiB0YWcgbXVzdCBiZSB1bmlxdWUgZm9yIHRoaXMgc3RlcC4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgdGFnKToKICAgIHNlbGYudGFnID0gdGFnCgoKY2xhc3MgX1ZhbHVlU3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhbiBlbGVtZW50LiIiIgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnVmFsdWVTdGF0ZVRhZyglcyknICUgKHNlbGYudGFnKQoKICBkZWYgd2l0aF9wcmVmaXgoc2VsZiwgcHJlZml4KToKICAgIHJldHVybiBfVmFsdWVTdGF0ZVRhZyhwcmVmaXggKyBzZWxmLnRhZykKCgpjbGFzcyBfU2V0U3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhbiBlbGVtZW50LiIiIgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnU2V0U3RhdGVUYWcoe3RhZ30pJy5mb3JtYXQodGFnPXNlbGYudGFnKQoKICBkZWYgd2l0aF9wcmVmaXgoc2VsZiwgcHJlZml4KToKICAgIHJldHVybiBfU2V0U3RhdGVUYWcocHJlZml4ICsgc2VsZi50YWcpCgoKY2xhc3MgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcoX1N0YXRlVGFnKToKICAiIiJTdGF0ZVRhZyBwb2ludGluZyB0byBhbiBlbGVtZW50LCBhY2N1bXVsYXRlZCB3aXRoIGEgY29tYmluZXIuCgogIFRoZSBnaXZlbiB0YWcgbXVzdCBiZSB1bmlxdWUgZm9yIHRoaXMgc3RlcC4gVGhlIGdpdmVuIENvbWJpbmVGbiB3aWxsIGJlCiAgYXBwbGllZCAocG9zc2libHkgaW5jcmVtZW50YWxseSBhbmQgZWFnZXJseSkgd2hlbiBhZGRpbmcgZWxlbWVudHMuIiIiCgogICMgVE9ETyhyb2JlcnR3Yik6IEFsc28gc3RvcmUgdGhlIGNvZGVyIChwZXJoYXBzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb21iaW5lX2ZuKQogIGRlZiBfX2luaXRfXyhzZWxmLCB0YWcsIGNvbWJpbmVfZm4pOgogICAgc3VwZXIoX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcsIHNlbGYpLl9faW5pdF9fKHRhZykKICAgIGlmIG5vdCBjb21iaW5lX2ZuOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdjb21iaW5lX2ZuIG11c3QgYmUgc3BlY2lmaWVkLicpCiAgICBpZiBub3QgaXNpbnN0YW5jZShjb21iaW5lX2ZuLCBjb3JlLkNvbWJpbmVGbik6CiAgICAgIGNvbWJpbmVfZm4gPSBjb3JlLkNvbWJpbmVGbi5mcm9tX2NhbGxhYmxlKGNvbWJpbmVfZm4pCiAgICBzZWxmLmNvbWJpbmVfZm4gPSBjb21iaW5lX2ZuCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyglcywgJXMpJyAlIChzZWxmLnRhZywgc2VsZi5jb21iaW5lX2ZuKQoKICBkZWYgd2l0aF9wcmVmaXgoc2VsZiwgcHJlZml4KToKICAgIHJldHVybiBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyhwcmVmaXggKyBzZWxmLnRhZywgc2VsZi5jb21iaW5lX2ZuKQoKICBkZWYgd2l0aG91dF9leHRyYWN0aW9uKHNlbGYpOgogICAgY2xhc3MgTm9FeHRyYWN0aW9uQ29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAgICAgY3JlYXRlX2FjY3VtdWxhdG9yID0gc2VsZi5jb21iaW5lX2ZuLmNyZWF0ZV9hY2N1bXVsYXRvcgogICAgICBhZGRfaW5wdXQgPSBzZWxmLmNvbWJpbmVfZm4uYWRkX2lucHV0CiAgICAgIG1lcmdlX2FjY3VtdWxhdG9ycyA9IHNlbGYuY29tYmluZV9mbi5tZXJnZV9hY2N1bXVsYXRvcnMKICAgICAgY29tcGFjdCA9IHNlbGYuY29tYmluZV9mbi5jb21wYWN0CiAgICAgIGV4dHJhY3Rfb3V0cHV0ID0gc3RhdGljbWV0aG9kKGxhbWJkYSB4OiB4KQoKICAgIHJldHVybiBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyhzZWxmLnRhZywgTm9FeHRyYWN0aW9uQ29tYmluZUZuKCkpCgoKY2xhc3MgX0xpc3RTdGF0ZVRhZyhfU3RhdGVUYWcpOgogICIiIlN0YXRlVGFnIHBvaW50aW5nIHRvIGEgbGlzdCBvZiBlbGVtZW50cy4iIiIKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0xpc3RTdGF0ZVRhZyglcyknICUgc2VsZi50YWcKCiAgZGVmIHdpdGhfcHJlZml4KHNlbGYsIHByZWZpeCk6CiAgICByZXR1cm4gX0xpc3RTdGF0ZVRhZyhwcmVmaXggKyBzZWxmLnRhZykKCgpjbGFzcyBfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnKF9TdGF0ZVRhZyk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgdGltZXN0YW1wX2NvbWJpbmVyX2ltcGwpOgogICAgc3VwZXIoX1dhdGVybWFya0hvbGRTdGF0ZVRhZywgc2VsZikuX19pbml0X18odGFnKQogICAgc2VsZi50aW1lc3RhbXBfY29tYmluZXJfaW1wbCA9IHRpbWVzdGFtcF9jb21iaW5lcl9pbXBsCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnV2F0ZXJtYXJrSG9sZFN0YXRlVGFnKCVzLCAlcyknICUgKAogICAgICAgIHNlbGYudGFnLCBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsKQoKICBkZWYgd2l0aF9wcmVmaXgoc2VsZiwgcHJlZml4KToKICAgIHJldHVybiBfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnKAogICAgICAgIHByZWZpeCArIHNlbGYudGFnLCBzZWxmLnRpbWVzdGFtcF9jb21iaW5lcl9pbXBsKQoKCiMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudAojIFRPRE8ocm9iZXJ0d2IpOiBQcm92aXNpb25hbCBBUEksIEphdmEgbGlrZWx5IHRvIGNoYW5nZSBhcyB3ZWxsLgpjbGFzcyBUcmlnZ2VyRm4od2l0aF9tZXRhY2xhc3MoQUJDTWV0YSwgb2JqZWN0KSk6ICAjIHR5cGU6IGlnbm9yZVttaXNjXQogICIiIkEgVHJpZ2dlckZuIGRldGVybWluZXMgd2hlbiB3aW5kb3cgKHBhbmVzKSBhcmUgZW1pdHRlZC4KCiAgU2VlIGh0dHBzOi8vYmVhbS5hcGFjaGUub3JnL2RvY3VtZW50YXRpb24vcHJvZ3JhbW1pbmctZ3VpZGUvI3RyaWdnZXJzCiAgIiIiCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIG9uX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgd2luZG93LCBjb250ZXh0KToKICAgICIiIkNhbGxlZCB3aGVuIGEgbmV3IGVsZW1lbnQgYXJyaXZlcyBpbiBhIHdpbmRvdy4KCiAgICBBcmdzOgogICAgICBlbGVtZW50OiB0aGUgZWxlbWVudCBiZWluZyBhZGRlZAogICAgICB3aW5kb3c6IHRoZSB3aW5kb3cgdG8gd2hpY2ggdGhlIGVsZW1lbnQgaXMgYmVpbmcgYWRkZWQKICAgICAgY29udGV4dDogYSBjb250ZXh0IChlLmcuIGEgVHJpZ2dlckNvbnRleHQgaW5zdGFuY2UpIGZvciBtYW5hZ2luZyBzdGF0ZQogICAgICAgICAgYW5kIHNldHRpbmcgdGltZXJzCiAgICAiIiIKICAgIHBhc3MKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIG9uX21lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBjb250ZXh0KToKICAgICIiIkNhbGxlZCB3aGVuIG11bHRpcGxlIHdpbmRvd3MgYXJlIG1lcmdlZC4KCiAgICBBcmdzOgogICAgICB0b19iZV9tZXJnZWQ6IHRoZSBzZXQgb2Ygd2luZG93cyB0byBiZSBtZXJnZWQKICAgICAgbWVyZ2VfcmVzdWx0OiB0aGUgd2luZG93IGludG8gd2hpY2ggdGhlIHdpbmRvd3MgYXJlIGJlaW5nIG1lcmdlZAogICAgICBjb250ZXh0OiBhIGNvbnRleHQgKGUuZy4gYSBUcmlnZ2VyQ29udGV4dCBpbnN0YW5jZSkgZm9yIG1hbmFnaW5nIHN0YXRlCiAgICAgICAgICBhbmQgc2V0dGluZyB0aW1lcnMKICAgICIiIgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgc2hvdWxkX2ZpcmUoc2VsZiwgdGltZV9kb21haW4sIHRpbWVzdGFtcCwgd2luZG93LCBjb250ZXh0KToKICAgICIiIldoZXRoZXIgdGhpcyB0cmlnZ2VyIHNob3VsZCBjYXVzZSB0aGUgd2luZG93IHRvIGZpcmUuCgogICAgQXJnczoKICAgICAgdGltZV9kb21haW46IFdBVEVSTUFSSyBmb3IgZXZlbnQtdGltZSB0aW1lcnMgYW5kIFJFQUxfVElNRSBmb3IKICAgICAgICAgIHByb2Nlc3NpbmctdGltZSB0aW1lcnMuCiAgICAgIHRpbWVzdGFtcDogZm9yIHRpbWVfZG9tYWluIFdBVEVSTUFSSywgaXQgcmVwcmVzZW50cyB0aGUKICAgICAgICAgIHdhdGVybWFyazogKGEgbG93ZXIgYm91bmQgb24pIHRoZSB3YXRlcm1hcmsgb2YgdGhlIHN5c3RlbQogICAgICAgICAgYW5kIGZvciB0aW1lX2RvbWFpbiBSRUFMX1RJTUUsIGl0IHJlcHJlc2VudHMgdGhlCiAgICAgICAgICB0cmlnZ2VyOiB0aW1lc3RhbXAgb2YgdGhlIHByb2Nlc3NpbmctdGltZSB0aW1lci4KICAgICAgd2luZG93OiB0aGUgd2luZG93IHdob3NlIHRyaWdnZXIgaXMgYmVpbmcgY29uc2lkZXJlZAogICAgICBjb250ZXh0OiBhIGNvbnRleHQgKGUuZy4gYSBUcmlnZ2VyQ29udGV4dCBpbnN0YW5jZSkgZm9yIG1hbmFnaW5nIHN0YXRlCiAgICAgICAgICBhbmQgc2V0dGluZyB0aW1lcnMKCiAgICBSZXR1cm5zOgogICAgICB3aGV0aGVyIHRoaXMgdHJpZ2dlciBzaG91bGQgY2F1c2UgYSBmaXJpbmcKICAgICIiIgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgaGFzX29udGltZV9wYW5lKHNlbGYpOgogICAgIiIiV2hldGhlciB0aGlzIHRyaWdnZXIgY3JlYXRlcyBhbiBlbXB0eSBwYW5lIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGVsZW1lbnRzLgoKICAgIFJldHVybnM6CiAgICAgIFRydWUgaWYgdGhpcyB0cmlnZ2VyIGd1YXJhbnRlZXMgdGhhdCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhbiBPTl9USU1FIHBhbmUKICAgICAgZXZlbiBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgaW4gdGhhdCBwYW5lLgogICAgIiIiCiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgICIiIkNhbGxlZCB3aGVuIGEgdHJpZ2dlciBhY3R1YWxseSBmaXJlcy4KCiAgICBBcmdzOgogICAgICB3YXRlcm1hcms6IChhIGxvd2VyIGJvdW5kIG9uKSB0aGUgd2F0ZXJtYXJrIG9mIHRoZSBzeXN0ZW0KICAgICAgd2luZG93OiB0aGUgd2luZG93IHdob3NlIHRyaWdnZXIgaXMgYmVpbmcgZmlyZWQKICAgICAgY29udGV4dDogYSBjb250ZXh0IChlLmcuIGEgVHJpZ2dlckNvbnRleHQgaW5zdGFuY2UpIGZvciBtYW5hZ2luZyBzdGF0ZQogICAgICAgICAgYW5kIHNldHRpbmcgdGltZXJzCgogICAgUmV0dXJuczoKICAgICAgd2hldGhlciB0aGlzIHRyaWdnZXIgaXMgZmluaXNoZWQKICAgICIiIgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgICIiIkNsZWFyIGFueSBzdGF0ZSBhbmQgdGltZXJzIHVzZWQgYnkgdGhpcyBUcmlnZ2VyRm4uIiIiCiAgICBwYXNzCgoKIyBweWxpbnQ6IGVuYWJsZT11bnVzZWQtYXJndW1lbnQKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIHsKICAgICAgICAnYWZ0ZXJfYWxsJzogQWZ0ZXJBbGwsCiAgICAgICAgJ2FmdGVyX2FueSc6IEFmdGVyQW55LAogICAgICAgICdhZnRlcl9lYWNoJzogQWZ0ZXJFYWNoLAogICAgICAgICdhZnRlcl9lbmRfb2Zfd2luZG93JzogQWZ0ZXJXYXRlcm1hcmssCiAgICAgICAgJ2FmdGVyX3Byb2Nlc3NpbmdfdGltZSc6IEFmdGVyUHJvY2Vzc2luZ1RpbWUsCiAgICAgICAgIyBhZnRlcl9wcm9jZXNzaW5nX3RpbWUsIGFmdGVyX3N5bmNocm9uaXplZF9wcm9jZXNzaW5nX3RpbWUKICAgICAgICAjIGFsd2F5cwogICAgICAgICdkZWZhdWx0JzogRGVmYXVsdFRyaWdnZXIsCiAgICAgICAgJ2VsZW1lbnRfY291bnQnOiBBZnRlckNvdW50LAogICAgICAgICMgbmV2ZXIKICAgICAgICAnb3JfZmluYWxseSc6IE9yRmluYWxseSwKICAgICAgICAncmVwZWF0JzogUmVwZWF0ZWRseSwKICAgIH1bcHJvdG8uV2hpY2hPbmVvZigndHJpZ2dlcicpXS5mcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHBhc3MKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgoKY2xhc3MgRGVmYXVsdFRyaWdnZXIoVHJpZ2dlckZuKToKICAiIiJTZW1hbnRpY2FsbHkgUmVwZWF0ZWRseShBZnRlcldhdGVybWFyaygpKSwgYnV0IG1vcmUgb3B0aW1pemVkLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmKToKICAgIHBhc3MKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdEZWZhdWx0VHJpZ2dlcigpJwoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgY29udGV4dC5zZXRfdGltZXIoJycsIFRpbWVEb21haW4uV0FURVJNQVJLLCB3aW5kb3cuZW5kKQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgIyBOb3RlOiBUaW1lciBjbGVhcmluZyBzb2xlbHkgYW4gb3B0aW1pemF0aW9uLgogICAgZm9yIHdpbmRvdyBpbiB0b19iZV9tZXJnZWQ6CiAgICAgIGlmIHdpbmRvdy5lbmQgIT0gbWVyZ2VfcmVzdWx0LmVuZDoKICAgICAgICBjb250ZXh0LmNsZWFyX3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSykKCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHRpbWVfZG9tYWluLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICBpZiB3YXRlcm1hcmsgPj0gd2luZG93LmVuZDoKICAgICAgIyBFeHBsaWNpdGx5IGNsZWFyIHRoZSB0aW1lciBzbyB0aGF0IGxhdGUgZWxlbWVudHMgYXJlIG5vdCBlbWl0dGVkIGFnYWluCiAgICAgICMgd2hlbiB0aGUgdGltZXIgaXMgZmlyZWQuCiAgICAgIGNvbnRleHQuY2xlYXJfdGltZXIoJycsIFRpbWVEb21haW4uV0FURVJNQVJLKQogICAgcmV0dXJuIHdhdGVybWFyayA+PSB3aW5kb3cuZW5kCgogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIHJldHVybiBGYWxzZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuY2xlYXJfdGltZXIoJycsIFRpbWVEb21haW4uV0FURVJNQVJLKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR5cGUoc2VsZikpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgIHJldHVybiBEZWZhdWx0VHJpZ2dlcigpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgZGVmYXVsdD1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuRGVmYXVsdCgpKQoKICBkZWYgaGFzX29udGltZV9wYW5lKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCgpjbGFzcyBBZnRlclByb2Nlc3NpbmdUaW1lKFRyaWdnZXJGbik6CiAgIiIiRmlyZSBleGFjdGx5IG9uY2UgYWZ0ZXIgYSBzcGVjaWZpZWQgZGVsYXkgZnJvbSBwcm9jZXNzaW5nIHRpbWUuCgogIEFmdGVyUHJvY2Vzc2luZ1RpbWUgaXMgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkZWxheT0wKToKICAgICIiIkluaXRpYWxpemUgYSBwcm9jZXNzaW5nIHRpbWUgdHJpZ2dlciB3aXRoIGEgZGVsYXkgaW4gc2Vjb25kcy4iIiIKICAgIHNlbGYuZGVsYXkgPSBkZWxheQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0FmdGVyUHJvY2Vzc2luZ1RpbWUoZGVsYXk9JWQpJyAlIHNlbGYuZGVsYXkKCiAgZGVmIG9uX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuc2V0X3RpbWVyKAogICAgICAgICcnLCBUaW1lRG9tYWluLlJFQUxfVElNRSwgY29udGV4dC5nZXRfY3VycmVudF90aW1lKCkgKyBzZWxmLmRlbGF5KQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgIyB0aW1lcnMgd2lsbCBiZSBrZXB0IHRocm91Z2ggbWVyZ2luZwogICAgcGFzcwoKICBkZWYgc2hvdWxkX2ZpcmUoc2VsZiwgdGltZV9kb21haW4sIHRpbWVzdGFtcCwgd2luZG93LCBjb250ZXh0KToKICAgIGlmIHRpbWVfZG9tYWluID09IFRpbWVEb21haW4uUkVBTF9USU1FOgogICAgICByZXR1cm4gVHJ1ZQoKICBkZWYgb25fZmlyZShzZWxmLCB0aW1lc3RhbXAsIHdpbmRvdywgY29udGV4dCk6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIHBhc3MKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIEFmdGVyUHJvY2Vzc2luZ1RpbWUoCiAgICAgICAgZGVsYXk9KAogICAgICAgICAgICBwcm90by5hZnRlcl9wcm9jZXNzaW5nX3RpbWUudGltZXN0YW1wX3RyYW5zZm9ybXNbMF0uZGVsYXkuCiAgICAgICAgICAgIGRlbGF5X21pbGxpcykgLy8gMTAwMCkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICBkZWxheV9wcm90byA9IGJlYW1fcnVubmVyX2FwaV9wYjIuVGltZXN0YW1wVHJhbnNmb3JtKAogICAgICAgIGRlbGF5PWJlYW1fcnVubmVyX2FwaV9wYjIuVGltZXN0YW1wVHJhbnNmb3JtLkRlbGF5KAogICAgICAgICAgICBkZWxheV9taWxsaXM9c2VsZi5kZWxheSAqIDEwMDApKQogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICBhZnRlcl9wcm9jZXNzaW5nX3RpbWU9YmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyLkFmdGVyUHJvY2Vzc2luZ1RpbWUoCiAgICAgICAgICAgIHRpbWVzdGFtcF90cmFuc2Zvcm1zPVtkZWxheV9wcm90b10pKQoKICBkZWYgaGFzX29udGltZV9wYW5lKHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgoKY2xhc3MgQWZ0ZXJXYXRlcm1hcmsoVHJpZ2dlckZuKToKICAiIiJGaXJlIGV4YWN0bHkgb25jZSB3aGVuIHRoZSB3YXRlcm1hcmsgcGFzc2VzIHRoZSBlbmQgb2YgdGhlIHdpbmRvdy4KCiAgQXJnczoKICAgICAgZWFybHk6IGlmIG5vdCBOb25lLCBhIHNwZWN1bGF0aXZlIHRyaWdnZXIgdG8gcmVwZWF0ZWRseSBldmFsdWF0ZSBiZWZvcmUKICAgICAgICB0aGUgd2F0ZXJtYXJrIHBhc3NlcyB0aGUgZW5kIG9mIHRoZSB3aW5kb3cKICAgICAgbGF0ZTogaWYgbm90IE5vbmUsIGEgc3BlY3VsYXRpdmUgdHJpZ2dlciB0byByZXBlYXRlZGx5IGV2YWx1YXRlIGFmdGVyCiAgICAgICAgdGhlIHdhdGVybWFyayBwYXNzZXMgdGhlIGVuZCBvZiB0aGUgd2luZG93CiAgIiIiCiAgTEFURV9UQUcgPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygnaXNfbGF0ZScsIGFueSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIGVhcmx5PU5vbmUsIGxhdGU9Tm9uZSk6CiAgICBzZWxmLmVhcmx5ID0gUmVwZWF0ZWRseShlYXJseSkgaWYgZWFybHkgZWxzZSBOb25lCiAgICBzZWxmLmxhdGUgPSBSZXBlYXRlZGx5KGxhdGUpIGlmIGxhdGUgZWxzZSBOb25lCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHF1YWxpZmllcnMgPSBbXQogICAgaWYgc2VsZi5lYXJseToKICAgICAgcXVhbGlmaWVycy5hcHBlbmQoJ2Vhcmx5PSVzJyAlIHNlbGYuZWFybHkudW5kZXJseWluZykKICAgIGlmIHNlbGYubGF0ZToKICAgICAgcXVhbGlmaWVycy5hcHBlbmQoJ2xhdGU9JXMnICUgc2VsZi5sYXRlLnVuZGVybHlpbmcpCiAgICByZXR1cm4gJ0FmdGVyV2F0ZXJtYXJrKCVzKScgJSAnLCAnLmpvaW4ocXVhbGlmaWVycykKCiAgZGVmIGlzX2xhdGUoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gc2VsZi5sYXRlIGFuZCBjb250ZXh0LmdldF9zdGF0ZShzZWxmLkxBVEVfVEFHKQoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgaWYgc2VsZi5pc19sYXRlKGNvbnRleHQpOgogICAgICBzZWxmLmxhdGUub25fZWxlbWVudChlbGVtZW50LCB3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2xhdGUnKSkKICAgIGVsc2U6CiAgICAgIGNvbnRleHQuc2V0X3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSywgd2luZG93LmVuZCkKICAgICAgaWYgc2VsZi5lYXJseToKICAgICAgICBzZWxmLmVhcmx5Lm9uX2VsZW1lbnQoZWxlbWVudCwgd2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdlYXJseScpKQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgIyBUT0RPKHJvYmVydHdiKTogRmlndXJlIG91dCB3aGV0aGVyIHRoZSAncmV3aW5kJyBzZW1hbnRpY3MgY291bGQgYmUgdXNlZAogICAgIyBoZXJlLgogICAgaWYgc2VsZi5pc19sYXRlKGNvbnRleHQpOgogICAgICBzZWxmLmxhdGUub25fbWVyZ2UoCiAgICAgICAgICB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnbGF0ZScpKQogICAgZWxzZToKICAgICAgIyBOb3RlOiBUaW1lciBjbGVhcmluZyBzb2xlbHkgYW4gb3B0aW1pemF0aW9uLgogICAgICBmb3Igd2luZG93IGluIHRvX2JlX21lcmdlZDoKICAgICAgICBpZiB3aW5kb3cuZW5kICE9IG1lcmdlX3Jlc3VsdC5lbmQ6CiAgICAgICAgICBjb250ZXh0LmNsZWFyX3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSykKICAgICAgaWYgc2VsZi5lYXJseToKICAgICAgICBzZWxmLmVhcmx5Lm9uX21lcmdlKAogICAgICAgICAgICB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnZWFybHknKSkKCiAgZGVmIHNob3VsZF9maXJlKHNlbGYsIHRpbWVfZG9tYWluLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICBpZiBzZWxmLmlzX2xhdGUoY29udGV4dCk6CiAgICAgIHJldHVybiBzZWxmLmxhdGUuc2hvdWxkX2ZpcmUoCiAgICAgICAgICB0aW1lX2RvbWFpbiwgd2F0ZXJtYXJrLCB3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2xhdGUnKSkKICAgIGVsaWYgd2F0ZXJtYXJrID49IHdpbmRvdy5lbmQ6CiAgICAgICMgRXhwbGljaXRseSBjbGVhciB0aGUgdGltZXIgc28gdGhhdCBsYXRlIGVsZW1lbnRzIGFyZSBub3QgZW1pdHRlZCBhZ2FpbgogICAgICAjIHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVkLgogICAgICBjb250ZXh0LmNsZWFyX3RpbWVyKCcnLCBUaW1lRG9tYWluLldBVEVSTUFSSykKICAgICAgcmV0dXJuIFRydWUKICAgIGVsaWYgc2VsZi5lYXJseToKICAgICAgcmV0dXJuIHNlbGYuZWFybHkuc2hvdWxkX2ZpcmUoCiAgICAgICAgICB0aW1lX2RvbWFpbiwgd2F0ZXJtYXJrLCB3aW5kb3csIE5lc3RlZENvbnRleHQoY29udGV4dCwgJ2Vhcmx5JykpCiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIG9uX2ZpcmUoc2VsZiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgaWYgc2VsZi5pc19sYXRlKGNvbnRleHQpOgogICAgICByZXR1cm4gc2VsZi5sYXRlLm9uX2ZpcmUoCiAgICAgICAgICB3YXRlcm1hcmssIHdpbmRvdywgTmVzdGVkQ29udGV4dChjb250ZXh0LCAnbGF0ZScpKQogICAgZWxpZiB3YXRlcm1hcmsgPj0gd2luZG93LmVuZDoKICAgICAgY29udGV4dC5hZGRfc3RhdGUoc2VsZi5MQVRFX1RBRywgVHJ1ZSkKICAgICAgcmV0dXJuIG5vdCBzZWxmLmxhdGUKICAgIGVsaWYgc2VsZi5lYXJseToKICAgICAgc2VsZi5lYXJseS5vbl9maXJlKHdhdGVybWFyaywgd2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdlYXJseScpKQogICAgICByZXR1cm4gRmFsc2UKCiAgZGVmIHJlc2V0KHNlbGYsIHdpbmRvdywgY29udGV4dCk6CiAgICBpZiBzZWxmLmxhdGU6CiAgICAgIGNvbnRleHQuY2xlYXJfc3RhdGUoc2VsZi5MQVRFX1RBRykKICAgIGlmIHNlbGYuZWFybHk6CiAgICAgIHNlbGYuZWFybHkucmVzZXQod2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdlYXJseScpKQogICAgaWYgc2VsZi5sYXRlOgogICAgICBzZWxmLmxhdGUucmVzZXQod2luZG93LCBOZXN0ZWRDb250ZXh0KGNvbnRleHQsICdsYXRlJykpCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuICgKICAgICAgICB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLmVhcmx5ID09IG90aGVyLmVhcmx5IGFuZAogICAgICAgIHNlbGYubGF0ZSA9PSBvdGhlci5sYXRlKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5lYXJseSwgc2VsZi5sYXRlKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIEFmdGVyV2F0ZXJtYXJrKAogICAgICAgIGVhcmx5PVRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgICAgIHByb3RvLmFmdGVyX2VuZF9vZl93aW5kb3cuZWFybHlfZmlyaW5ncywgY29udGV4dCkKICAgICAgICBpZiBwcm90by5hZnRlcl9lbmRfb2Zfd2luZG93Lkhhc0ZpZWxkKCdlYXJseV9maXJpbmdzJykgZWxzZSBOb25lLAogICAgICAgIGxhdGU9VHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaSgKICAgICAgICAgICAgcHJvdG8uYWZ0ZXJfZW5kX29mX3dpbmRvdy5sYXRlX2ZpcmluZ3MsIGNvbnRleHQpCiAgICAgICAgaWYgcHJvdG8uYWZ0ZXJfZW5kX29mX3dpbmRvdy5IYXNGaWVsZCgnbGF0ZV9maXJpbmdzJykgZWxzZSBOb25lKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIGVhcmx5X3Byb3RvID0gc2VsZi5lYXJseS51bmRlcmx5aW5nLnRvX3J1bm5lcl9hcGkoCiAgICAgICAgY29udGV4dCkgaWYgc2VsZi5lYXJseSBlbHNlIE5vbmUKICAgIGxhdGVfcHJvdG8gPSBzZWxmLmxhdGUudW5kZXJseWluZy50b19ydW5uZXJfYXBpKAogICAgICAgIGNvbnRleHQpIGlmIHNlbGYubGF0ZSBlbHNlIE5vbmUKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgYWZ0ZXJfZW5kX29mX3dpbmRvdz1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuQWZ0ZXJFbmRPZldpbmRvdygKICAgICAgICAgICAgZWFybHlfZmlyaW5ncz1lYXJseV9wcm90bywgbGF0ZV9maXJpbmdzPWxhdGVfcHJvdG8pKQoKICBkZWYgaGFzX29udGltZV9wYW5lKHNlbGYpOgogICAgcmV0dXJuIFRydWUKCgpjbGFzcyBBZnRlckNvdW50KFRyaWdnZXJGbik6CiAgIiIiRmlyZSB3aGVuIHRoZXJlIGFyZSBhdCBsZWFzdCBjb3VudCBlbGVtZW50cyBpbiB0aGlzIHdpbmRvdyBwYW5lLgoKICBBZnRlckNvdW50IGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKCiAgQ09VTlRfVEFHID0gX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcoJ2NvdW50JywgY29tYmluZXJzLkNvdW50Q29tYmluZUZuKCkpCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb3VudCk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShjb3VudCwgbnVtYmVycy5JbnRlZ3JhbCkgb3IgY291bnQgPCAxOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb3VudCAoJWQpIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIgJSBjb3VudCkKICAgIHNlbGYuY291bnQgPSBjb3VudAoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0FmdGVyQ291bnQoJXMpJyAlIHNlbGYuY291bnQKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5jb3VudCA9PSBvdGhlci5jb3VudAoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLmNvdW50KQoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgY29udGV4dC5hZGRfc3RhdGUoc2VsZi5DT1VOVF9UQUcsIDEpCgogIGRlZiBvbl9tZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgY29udGV4dCk6CiAgICAjIHN0YXRlcyBhdXRvbWF0aWNhbGx5IG1lcmdlZAogICAgcGFzcwoKICBkZWYgc2hvdWxkX2ZpcmUoc2VsZiwgdGltZV9kb21haW4sIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIHJldHVybiBjb250ZXh0LmdldF9zdGF0ZShzZWxmLkNPVU5UX1RBRykgPj0gc2VsZi5jb3VudAoKICBkZWYgb25fZmlyZShzZWxmLCB3YXRlcm1hcmssIHdpbmRvdywgY29udGV4dCk6CiAgICByZXR1cm4gVHJ1ZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuY2xlYXJfc3RhdGUoc2VsZi5DT1VOVF9UQUcpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gQWZ0ZXJDb3VudChwcm90by5lbGVtZW50X2NvdW50LmVsZW1lbnRfY291bnQpCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgZWxlbWVudF9jb3VudD1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuRWxlbWVudENvdW50KAogICAgICAgICAgICBlbGVtZW50X2NvdW50PXNlbGYuY291bnQpKQoKICBkZWYgaGFzX29udGltZV9wYW5lKHNlbGYpOgogICAgcmV0dXJuIEZhbHNlCgoKY2xhc3MgUmVwZWF0ZWRseShUcmlnZ2VyRm4pOgogICIiIlJlcGVhdGVkbHkgaW52b2tlIHRoZSBnaXZlbiB0cmlnZ2VyLCBuZXZlciBmaW5pc2hpbmcuIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIHVuZGVybHlpbmcpOgogICAgc2VsZi51bmRlcmx5aW5nID0gdW5kZXJseWluZwoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1JlcGVhdGVkbHkoJXMpJyAlIHNlbGYudW5kZXJseWluZwoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLnVuZGVybHlpbmcgPT0gb3RoZXIudW5kZXJseWluZwoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnVuZGVybHlpbmcpCgogIGRlZiBvbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIHdpbmRvdywgY29udGV4dCk6CiAgICBzZWxmLnVuZGVybHlpbmcub25fZWxlbWVudChlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpCgogIGRlZiBvbl9tZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgY29udGV4dCk6CiAgICBzZWxmLnVuZGVybHlpbmcub25fbWVyZ2UodG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpCgogIGRlZiBzaG91bGRfZmlyZShzZWxmLCB0aW1lX2RvbWFpbiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgcmV0dXJuIHNlbGYudW5kZXJseWluZy5zaG91bGRfZmlyZSh0aW1lX2RvbWFpbiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpCgogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIGlmIHNlbGYudW5kZXJseWluZy5vbl9maXJlKHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgICAgc2VsZi51bmRlcmx5aW5nLnJlc2V0KHdpbmRvdywgY29udGV4dCkKICAgIHJldHVybiBGYWxzZQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIHNlbGYudW5kZXJseWluZy5yZXNldCh3aW5kb3csIGNvbnRleHQpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZnJvbV9ydW5uZXJfYXBpKHByb3RvLCBjb250ZXh0KToKICAgIHJldHVybiBSZXBlYXRlZGx5KAogICAgICAgIFRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGkocHJvdG8ucmVwZWF0LnN1YnRyaWdnZXIsIGNvbnRleHQpKQoKICBkZWYgdG9fcnVubmVyX2FwaShzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiBiZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIoCiAgICAgICAgcmVwZWF0PWJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlci5SZXBlYXQoCiAgICAgICAgICAgIHN1YnRyaWdnZXI9c2VsZi51bmRlcmx5aW5nLnRvX3J1bm5lcl9hcGkoY29udGV4dCkpKQoKICBkZWYgaGFzX29udGltZV9wYW5lKHNlbGYpOgogICAgcmV0dXJuIHNlbGYudW5kZXJseWluZy5oYXNfb250aW1lX3BhbmUoKQoKCmNsYXNzIF9QYXJhbGxlbFRyaWdnZXJGbih3aXRoX21ldGFjbGFzcyhBQkNNZXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJpZ2dlckZuKSk6ICAjIHR5cGU6IGlnbm9yZVttaXNjXQogIGRlZiBfX2luaXRfXyhzZWxmLCAqdHJpZ2dlcnMpOgogICAgc2VsZi50cmlnZ2VycyA9IHRyaWdnZXJzCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnJXMoJXMpJyAlICgKICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJywgJy5qb2luKHN0cih0KSBmb3IgdCBpbiBzZWxmLnRyaWdnZXJzKSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi50cmlnZ2VycyA9PSBvdGhlci50cmlnZ2VycwoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnRyaWdnZXJzKQoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgY29tYmluZV9vcChzZWxmLCB0cmlnZ2VyX3Jlc3VsdHMpOgogICAgcGFzcwoKICBkZWYgb25fZWxlbWVudChzZWxmLCBlbGVtZW50LCB3aW5kb3csIGNvbnRleHQpOgogICAgZm9yIGl4LCB0cmlnZ2VyIGluIGVudW1lcmF0ZShzZWxmLnRyaWdnZXJzKToKICAgICAgdHJpZ2dlci5vbl9lbGVtZW50KGVsZW1lbnQsIHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBkZWYgb25fbWVyZ2Uoc2VsZiwgdG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQsIGNvbnRleHQpOgogICAgZm9yIGl4LCB0cmlnZ2VyIGluIGVudW1lcmF0ZShzZWxmLnRyaWdnZXJzKToKICAgICAgdHJpZ2dlci5vbl9tZXJnZSgKICAgICAgICAgIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBzZWxmLl9zdWJfY29udGV4dChjb250ZXh0LCBpeCkpCgogIGRlZiBzaG91bGRfZmlyZShzZWxmLCB0aW1lX2RvbWFpbiwgd2F0ZXJtYXJrLCB3aW5kb3csIGNvbnRleHQpOgogICAgc2VsZi5fdGltZV9kb21haW4gPSB0aW1lX2RvbWFpbgogICAgcmV0dXJuIHNlbGYuY29tYmluZV9vcCgKICAgICAgICB0cmlnZ2VyLnNob3VsZF9maXJlKAogICAgICAgICAgICB0aW1lX2RvbWFpbiwgd2F0ZXJtYXJrLCB3aW5kb3csIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSkKICAgICAgICBmb3IgaXgsCiAgICAgICAgdHJpZ2dlciBpbiBlbnVtZXJhdGUoc2VsZi50cmlnZ2VycykpCgogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIGZpbmlzaGVkID0gW10KICAgIGZvciBpeCwgdHJpZ2dlciBpbiBlbnVtZXJhdGUoc2VsZi50cmlnZ2Vycyk6CiAgICAgIG5lc3RlZF9jb250ZXh0ID0gc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpCiAgICAgIGlmIHRyaWdnZXIuc2hvdWxkX2ZpcmUoVGltZURvbWFpbi5XQVRFUk1BUkssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F0ZXJtYXJrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWRfY29udGV4dCk6CiAgICAgICAgZmluaXNoZWQuYXBwZW5kKHRyaWdnZXIub25fZmlyZSh3YXRlcm1hcmssIHdpbmRvdywgbmVzdGVkX2NvbnRleHQpKQogICAgcmV0dXJuIHNlbGYuY29tYmluZV9vcChmaW5pc2hlZCkKCiAgZGVmIHJlc2V0KHNlbGYsIHdpbmRvdywgY29udGV4dCk6CiAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpOgogICAgICB0cmlnZ2VyLnJlc2V0KHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9zdWJfY29udGV4dChjb250ZXh0LCBpbmRleCk6CiAgICByZXR1cm4gTmVzdGVkQ29udGV4dChjb250ZXh0LCAnJWQvJyAlIGluZGV4KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICBzdWJ0cmlnZ2VycyA9IFsKICAgICAgICBUcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpKHN1YnRyaWdnZXIsIGNvbnRleHQpIGZvciBzdWJ0cmlnZ2VyIGluCiAgICAgICAgcHJvdG8uYWZ0ZXJfYWxsLnN1YnRyaWdnZXJzIG9yIHByb3RvLmFmdGVyX2FueS5zdWJ0cmlnZ2VycwogICAgXQogICAgaWYgcHJvdG8uYWZ0ZXJfYWxsLnN1YnRyaWdnZXJzOgogICAgICByZXR1cm4gQWZ0ZXJBbGwoKnN1YnRyaWdnZXJzKQogICAgZWxzZToKICAgICAgcmV0dXJuIEFmdGVyQW55KCpzdWJ0cmlnZ2VycykKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICBzdWJ0cmlnZ2VycyA9IFsKICAgICAgICBzdWJ0cmlnZ2VyLnRvX3J1bm5lcl9hcGkoY29udGV4dCkgZm9yIHN1YnRyaWdnZXIgaW4gc2VsZi50cmlnZ2VycwogICAgXQogICAgaWYgc2VsZi5jb21iaW5lX29wID09IGFsbDoKICAgICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICAgIGFmdGVyX2FsbD1iZWFtX3J1bm5lcl9hcGlfcGIyLlRyaWdnZXIuQWZ0ZXJBbGwoCiAgICAgICAgICAgICAgc3VidHJpZ2dlcnM9c3VidHJpZ2dlcnMpKQogICAgZWxpZiBzZWxmLmNvbWJpbmVfb3AgPT0gYW55OgogICAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyKAogICAgICAgICAgYWZ0ZXJfYW55PWJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlci5BZnRlckFueSgKICAgICAgICAgICAgICBzdWJ0cmlnZ2Vycz1zdWJ0cmlnZ2VycykpCiAgICBlbHNlOgogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKHNlbGYpCgogIGRlZiBoYXNfb250aW1lX3BhbmUoc2VsZik6CiAgICByZXR1cm4gYW55KHQuaGFzX29udGltZV9wYW5lKCkgZm9yIHQgaW4gc2VsZi50cmlnZ2VycykKCgpjbGFzcyBBZnRlckFueShfUGFyYWxsZWxUcmlnZ2VyRm4pOgogICIiIkZpcmVzIHdoZW4gYW55IHN1YnRyaWdnZXIgZmlyZXMuCgogIEFsc28gZmluaXNoZXMgd2hlbiBhbnkgc3VidHJpZ2dlciBmaW5pc2hlcy4KICAiIiIKICBjb21iaW5lX29wID0gYW55CgoKY2xhc3MgQWZ0ZXJBbGwoX1BhcmFsbGVsVHJpZ2dlckZuKToKICAiIiJGaXJlcyB3aGVuIGFsbCBzdWJ0cmlnZ2VycyBoYXZlIGZpcmVkLgoKICBBbHNvIGZpbmlzaGVzIHdoZW4gYWxsIHN1YnRyaWdnZXJzIGhhdmUgZmluaXNoZWQuCiAgIiIiCiAgY29tYmluZV9vcCA9IGFsbAoKCmNsYXNzIEFmdGVyRWFjaChUcmlnZ2VyRm4pOgoKICBJTkRFWF9UQUcgPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygKICAgICAgJ2luZGV4JywgKGxhbWJkYSBpbmRpY2VzOiAwIGlmIG5vdCBpbmRpY2VzIGVsc2UgbWF4KGluZGljZXMpKSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsICp0cmlnZ2Vycyk6CiAgICBzZWxmLnRyaWdnZXJzID0gdHJpZ2dlcnMKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICclcyglcyknICUgKAogICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnLCAnLmpvaW4oc3RyKHQpIGZvciB0IGluIHNlbGYudHJpZ2dlcnMpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLnRyaWdnZXJzID09IG90aGVyLnRyaWdnZXJzCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYudHJpZ2dlcnMpCgogIGRlZiBvbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIHdpbmRvdywgY29udGV4dCk6CiAgICBpeCA9IGNvbnRleHQuZ2V0X3N0YXRlKHNlbGYuSU5ERVhfVEFHKQogICAgaWYgaXggPCBsZW4oc2VsZi50cmlnZ2Vycyk6CiAgICAgIHNlbGYudHJpZ2dlcnNbaXhdLm9uX2VsZW1lbnQoCiAgICAgICAgICBlbGVtZW50LCB3aW5kb3csIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSkKCiAgZGVmIG9uX21lcmdlKHNlbGYsIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBjb250ZXh0KToKICAgICMgVGhpcyB0YWtlcyB0aGUgZnVydGhlc3Qgd2luZG93IG9uIG1lcmdpbmcuCiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBSZXZpc2l0IHRoaXMgd2hlbiBtZXJnaW5nIHdpbmRvd3MgbG9naWMgaXMgc2V0dGxlZCBmb3IKICAgICMgYWxsIHBvc3NpYmxlIG1lcmdpbmcgc2l0dWF0aW9ucy4KICAgIGl4ID0gY29udGV4dC5nZXRfc3RhdGUoc2VsZi5JTkRFWF9UQUcpCiAgICBpZiBpeCA8IGxlbihzZWxmLnRyaWdnZXJzKToKICAgICAgc2VsZi50cmlnZ2Vyc1tpeF0ub25fbWVyZ2UoCiAgICAgICAgICB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCwgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBkZWYgc2hvdWxkX2ZpcmUoc2VsZiwgdGltZV9kb21haW4sIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIGl4ID0gY29udGV4dC5nZXRfc3RhdGUoc2VsZi5JTkRFWF9UQUcpCiAgICBpZiBpeCA8IGxlbihzZWxmLnRyaWdnZXJzKToKICAgICAgcmV0dXJuIHNlbGYudHJpZ2dlcnNbaXhdLnNob3VsZF9maXJlKAogICAgICAgICAgdGltZV9kb21haW4sIHdhdGVybWFyaywgd2luZG93LCBzZWxmLl9zdWJfY29udGV4dChjb250ZXh0LCBpeCkpCgogIGRlZiBvbl9maXJlKHNlbGYsIHdhdGVybWFyaywgd2luZG93LCBjb250ZXh0KToKICAgIGl4ID0gY29udGV4dC5nZXRfc3RhdGUoc2VsZi5JTkRFWF9UQUcpCiAgICBpZiBpeCA8IGxlbihzZWxmLnRyaWdnZXJzKToKICAgICAgaWYgc2VsZi50cmlnZ2Vyc1tpeF0ub25fZmlyZSh3YXRlcm1hcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N1Yl9jb250ZXh0KGNvbnRleHQsIGl4KSk6CiAgICAgICAgaXggKz0gMQogICAgICAgIGNvbnRleHQuYWRkX3N0YXRlKHNlbGYuSU5ERVhfVEFHLCBpeCkKICAgICAgcmV0dXJuIGl4ID09IGxlbihzZWxmLnRyaWdnZXJzKQoKICBkZWYgcmVzZXQoc2VsZiwgd2luZG93LCBjb250ZXh0KToKICAgIGNvbnRleHQuY2xlYXJfc3RhdGUoc2VsZi5JTkRFWF9UQUcpCiAgICBmb3IgaXgsIHRyaWdnZXIgaW4gZW51bWVyYXRlKHNlbGYudHJpZ2dlcnMpOgogICAgICB0cmlnZ2VyLnJlc2V0KHdpbmRvdywgc2VsZi5fc3ViX2NvbnRleHQoY29udGV4dCwgaXgpKQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9zdWJfY29udGV4dChjb250ZXh0LCBpbmRleCk6CiAgICByZXR1cm4gTmVzdGVkQ29udGV4dChjb250ZXh0LCAnJWQvJyAlIGluZGV4KQoKICBAc3RhdGljbWV0aG9kCiAgZGVmIGZyb21fcnVubmVyX2FwaShwcm90bywgY29udGV4dCk6CiAgICByZXR1cm4gQWZ0ZXJFYWNoKAogICAgICAgICpbCiAgICAgICAgICAgIFRyaWdnZXJGbi5mcm9tX3J1bm5lcl9hcGkoc3VidHJpZ2dlciwgY29udGV4dCkKICAgICAgICAgICAgZm9yIHN1YnRyaWdnZXIgaW4gcHJvdG8uYWZ0ZXJfZWFjaC5zdWJ0cmlnZ2VycwogICAgICAgIF0pCgogIGRlZiB0b19ydW5uZXJfYXBpKHNlbGYsIGNvbnRleHQpOgogICAgcmV0dXJuIGJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlcigKICAgICAgICBhZnRlcl9lYWNoPWJlYW1fcnVubmVyX2FwaV9wYjIuVHJpZ2dlci5BZnRlckVhY2goCiAgICAgICAgICAgIHN1YnRyaWdnZXJzPVsKICAgICAgICAgICAgICAgIHN1YnRyaWdnZXIudG9fcnVubmVyX2FwaShjb250ZXh0KQogICAgICAgICAgICAgICAgZm9yIHN1YnRyaWdnZXIgaW4gc2VsZi50cmlnZ2VycwogICAgICAgICAgICBdKSkKCiAgZGVmIGhhc19vbnRpbWVfcGFuZShzZWxmKToKICAgIHJldHVybiBhbnkodC5oYXNfb250aW1lX3BhbmUoKSBmb3IgdCBpbiBzZWxmLnRyaWdnZXJzKQoKCmNsYXNzIE9yRmluYWxseShBZnRlckFueSk6CiAgQHN0YXRpY21ldGhvZAogIGRlZiBmcm9tX3J1bm5lcl9hcGkocHJvdG8sIGNvbnRleHQpOgogICAgcmV0dXJuIE9yRmluYWxseSgKICAgICAgICBUcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBpKHByb3RvLm9yX2ZpbmFsbHkubWFpbiwgY29udGV4dCksCiAgICAgICAgIyBnZXRhdHRyIGlzIHVzZWQgYXMgZmluYWxseSBpcyBhIGtleXdvcmQgaW4gUHl0aG9uCiAgICAgICAgVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaSgKICAgICAgICAgICAgZ2V0YXR0cihwcm90by5vcl9maW5hbGx5LCAnZmluYWxseScpLCBjb250ZXh0KSkKCiAgZGVmIHRvX3J1bm5lcl9hcGkoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gYmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyKAogICAgICAgIG9yX2ZpbmFsbHk9YmVhbV9ydW5uZXJfYXBpX3BiMi5UcmlnZ2VyLk9yRmluYWxseSgKICAgICAgICAgICAgbWFpbj1zZWxmLnRyaWdnZXJzWzBdLnRvX3J1bm5lcl9hcGkoY29udGV4dCksCiAgICAgICAgICAgICMgZGljdCBrZXl3b3JkIGFyZ3VtZW50IGlzIHVzZWQgYXMgZmluYWxseSBpcyBhIGtleXdvcmQgaW4gUHl0aG9uCiAgICAgICAgICAgICoqeydmaW5hbGx5Jzogc2VsZi50cmlnZ2Vyc1sxXS50b19ydW5uZXJfYXBpKGNvbnRleHQpfSkpCgoKY2xhc3MgVHJpZ2dlckNvbnRleHQob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZiwgb3V0ZXIsIHdpbmRvdywgY2xvY2spOgogICAgc2VsZi5fb3V0ZXIgPSBvdXRlcgogICAgc2VsZi5fd2luZG93ID0gd2luZG93CiAgICBzZWxmLl9jbG9jayA9IGNsb2NrCgogIGRlZiBnZXRfY3VycmVudF90aW1lKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuX2Nsb2NrLnRpbWUoKQoKICBkZWYgc2V0X3RpbWVyKHNlbGYsIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApOgogICAgc2VsZi5fb3V0ZXIuc2V0X3RpbWVyKHNlbGYuX3dpbmRvdywgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCkKCiAgZGVmIGNsZWFyX3RpbWVyKHNlbGYsIG5hbWUsIHRpbWVfZG9tYWluKToKICAgIHNlbGYuX291dGVyLmNsZWFyX3RpbWVyKHNlbGYuX3dpbmRvdywgbmFtZSwgdGltZV9kb21haW4pCgogIGRlZiBhZGRfc3RhdGUoc2VsZiwgdGFnLCB2YWx1ZSk6CiAgICBzZWxmLl9vdXRlci5hZGRfc3RhdGUoc2VsZi5fd2luZG93LCB0YWcsIHZhbHVlKQoKICBkZWYgZ2V0X3N0YXRlKHNlbGYsIHRhZyk6CiAgICByZXR1cm4gc2VsZi5fb3V0ZXIuZ2V0X3N0YXRlKHNlbGYuX3dpbmRvdywgdGFnKQoKICBkZWYgY2xlYXJfc3RhdGUoc2VsZiwgdGFnKToKICAgIHJldHVybiBzZWxmLl9vdXRlci5jbGVhcl9zdGF0ZShzZWxmLl93aW5kb3csIHRhZykKCgpjbGFzcyBOZXN0ZWRDb250ZXh0KG9iamVjdCk6CiAgIiIiTmFtZXNwYWNlZCBjb250ZXh0IHVzZWZ1bCBmb3IgZGVmaW5pbmcgY29tcG9zaXRlIHRyaWdnZXJzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRlciwgcHJlZml4KToKICAgIHNlbGYuX291dGVyID0gb3V0ZXIKICAgIHNlbGYuX3ByZWZpeCA9IHByZWZpeAoKICBkZWYgZ2V0X2N1cnJlbnRfdGltZShzZWxmKToKICAgIHJldHVybiBzZWxmLl9vdXRlci5nZXRfY3VycmVudF90aW1lKCkKCiAgZGVmIHNldF90aW1lcihzZWxmLCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKToKICAgIHNlbGYuX291dGVyLnNldF90aW1lcihzZWxmLl9wcmVmaXggKyBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKQoKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgbmFtZSwgdGltZV9kb21haW4pOgogICAgc2VsZi5fb3V0ZXIuY2xlYXJfdGltZXIoc2VsZi5fcHJlZml4ICsgbmFtZSwgdGltZV9kb21haW4pCgogIGRlZiBhZGRfc3RhdGUoc2VsZiwgdGFnLCB2YWx1ZSk6CiAgICBzZWxmLl9vdXRlci5hZGRfc3RhdGUodGFnLndpdGhfcHJlZml4KHNlbGYuX3ByZWZpeCksIHZhbHVlKQoKICBkZWYgZ2V0X3N0YXRlKHNlbGYsIHRhZyk6CiAgICByZXR1cm4gc2VsZi5fb3V0ZXIuZ2V0X3N0YXRlKHRhZy53aXRoX3ByZWZpeChzZWxmLl9wcmVmaXgpKQoKICBkZWYgY2xlYXJfc3RhdGUoc2VsZiwgdGFnKToKICAgIHNlbGYuX291dGVyLmNsZWFyX3N0YXRlKHRhZy53aXRoX3ByZWZpeChzZWxmLl9wcmVmaXgpKQoKCiMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1hcmd1bWVudApjbGFzcyBTaW1wbGVTdGF0ZSh3aXRoX21ldGFjbGFzcyhBQkNNZXRhLCBvYmplY3QpKTogICMgdHlwZTogaWdub3JlW21pc2NdCiAgIiIiQmFzaWMgc3RhdGUgc3RvcmFnZSBpbnRlcmZhY2UgdXNlZCBmb3IgdHJpZ2dlcmluZy4KCiAgT25seSB0aW1lcnMgbXVzdCBob2xkIHRoZSB3YXRlcm1hcmsgKGJ5IHRoZWlyIHRpbWVzdGFtcCkuCiAgIiIiCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIHNldF90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgZ2V0X3dpbmRvdyhzZWxmLCB3aW5kb3dfaWQpOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbik6CiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBhZGRfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcsIHZhbHVlKToKICAgIHBhc3MKCiAgQGFic3RyYWN0bWV0aG9kCiAgZGVmIGdldF9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBjbGVhcl9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICBwYXNzCgogIGRlZiBhdChzZWxmLCB3aW5kb3csIGNsb2NrKToKICAgIHJldHVybiBOZXN0ZWRDb250ZXh0KFRyaWdnZXJDb250ZXh0KHNlbGYsIHdpbmRvdywgY2xvY2spLCAndHJpZ2dlcicpCgoKY2xhc3MgVW5tZXJnZWRTdGF0ZShTaW1wbGVTdGF0ZSk6CiAgIiIiU3RhdGUgc3VpdGFibGUgZm9yIHVzZSBpbiBUcmlnZ2VyRHJpdmVyLgoKICBUaGlzIGNsYXNzIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBiYWNrZW5kLgogICIiIgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBzZXRfZ2xvYmFsX3N0YXRlKHNlbGYsIHRhZywgdmFsdWUpOgogICAgcGFzcwoKICBAYWJzdHJhY3RtZXRob2QKICBkZWYgZ2V0X2dsb2JhbF9zdGF0ZShzZWxmLCB0YWcsIGRlZmF1bHQ9Tm9uZSk6CiAgICBwYXNzCgoKIyBweWxpbnQ6IGVuYWJsZT11bnVzZWQtYXJndW1lbnQKCgpjbGFzcyBNZXJnZWFibGVTdGF0ZUFkYXB0ZXIoU2ltcGxlU3RhdGUpOgogICIiIldyYXBzIGFuIFVubWVyZ2VkU3RhdGUsIHRyYWNraW5nIG1lcmdlZCB3aW5kb3dzLiIiIgogICMgVE9ETyhyb2JlcnR3Yik6IEEgc2ltaWxhciBpbmRpcmVjdGlvbiBjb3VsZCBiZSB1c2VkIGZvciBzbGlkaW5nIHdpbmRvd3MKICAjIG9yIG90aGVyIHdpbmRvd19mbnMgd2hlbiBhIHNpbmdsZSBlbGVtZW50IHR5cGljYWxseSBiZWxvbmdzIHRvIG1hbnkgd2luZG93cy4KCiAgV0lORE9XX0lEUyA9IF9WYWx1ZVN0YXRlVGFnKCd3aW5kb3dfaWRzJykKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd19zdGF0ZSk6CiAgICBzZWxmLnJhd19zdGF0ZSA9IHJhd19zdGF0ZQogICAgc2VsZi53aW5kb3dfaWRzID0gc2VsZi5yYXdfc3RhdGUuZ2V0X2dsb2JhbF9zdGF0ZShzZWxmLldJTkRPV19JRFMsIHt9KQogICAgc2VsZi5jb3VudGVyID0gTm9uZQoKICBkZWYgc2V0X3RpbWVyKHNlbGYsIHdpbmRvdywgbmFtZSwgdGltZV9kb21haW4sIHRpbWVzdGFtcCk6CiAgICBzZWxmLnJhd19zdGF0ZS5zZXRfdGltZXIoc2VsZi5fZ2V0X2lkKHdpbmRvdyksIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApCgogIGRlZiBjbGVhcl90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluKToKICAgIGZvciB3aW5kb3dfaWQgaW4gc2VsZi5fZ2V0X2lkcyh3aW5kb3cpOgogICAgICBzZWxmLnJhd19zdGF0ZS5jbGVhcl90aW1lcih3aW5kb3dfaWQsIG5hbWUsIHRpbWVfZG9tYWluKQoKICBkZWYgYWRkX3N0YXRlKHNlbGYsIHdpbmRvdywgdGFnLCB2YWx1ZSk6CiAgICBpZiBpc2luc3RhbmNlKHRhZywgX1ZhbHVlU3RhdGVUYWcpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ01lcmdpbmcgcmVxdWVzdGVkIGZvciBub24tbWVyZ2VhYmxlIHN0YXRlIHRhZzogJXIuJyAlIHRhZykKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnKToKICAgICAgdGFnID0gdGFnLndpdGhvdXRfZXh0cmFjdGlvbigpCiAgICBzZWxmLnJhd19zdGF0ZS5hZGRfc3RhdGUoc2VsZi5fZ2V0X2lkKHdpbmRvdyksIHRhZywgdmFsdWUpCgogIGRlZiBnZXRfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcpOgogICAgaWYgaXNpbnN0YW5jZSh0YWcsIF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnKToKICAgICAgb3JpZ2luYWxfdGFnLCB0YWcgPSB0YWcsIHRhZy53aXRob3V0X2V4dHJhY3Rpb24oKQogICAgdmFsdWVzID0gWwogICAgICAgIHNlbGYucmF3X3N0YXRlLmdldF9zdGF0ZSh3aW5kb3dfaWQsIHRhZykKICAgICAgICBmb3Igd2luZG93X2lkIGluIHNlbGYuX2dldF9pZHMod2luZG93KQogICAgXQogICAgaWYgaXNpbnN0YW5jZSh0YWcsIF9WYWx1ZVN0YXRlVGFnKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdNZXJnaW5nIHJlcXVlc3RlZCBmb3Igbm9uLW1lcmdlYWJsZSBzdGF0ZSB0YWc6ICVyLicgJSB0YWcpCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyk6CiAgICAgIHJldHVybiBvcmlnaW5hbF90YWcuY29tYmluZV9mbi5leHRyYWN0X291dHB1dCgKICAgICAgICAgIG9yaWdpbmFsX3RhZy5jb21iaW5lX2ZuLm1lcmdlX2FjY3VtdWxhdG9ycyh2YWx1ZXMpKQogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX0xpc3RTdGF0ZVRhZyk6CiAgICAgIHJldHVybiBbdiBmb3IgdnMgaW4gdmFsdWVzIGZvciB2IGluIHZzXQogICAgZWxpZiBpc2luc3RhbmNlKHRhZywgX1NldFN0YXRlVGFnKToKICAgICAgcmV0dXJuIHt2IGZvciB2cyBpbiB2YWx1ZXMgZm9yIHYgaW4gdnN9CiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnKToKICAgICAgcmV0dXJuIHRhZy50aW1lc3RhbXBfY29tYmluZXJfaW1wbC5jb21iaW5lX2FsbCh2YWx1ZXMpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHRhZy4nLCB0YWcpCgogIGRlZiBjbGVhcl9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICBmb3Igd2luZG93X2lkIGluIHNlbGYuX2dldF9pZHMod2luZG93KToKICAgICAgc2VsZi5yYXdfc3RhdGUuY2xlYXJfc3RhdGUod2luZG93X2lkLCB0YWcpCiAgICBpZiB0YWcgaXMgTm9uZToKICAgICAgZGVsIHNlbGYud2luZG93X2lkc1t3aW5kb3ddCiAgICAgIHNlbGYuX3BlcnNpc3Rfd2luZG93X2lkcygpCgogIGRlZiBtZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCk6CiAgICBmb3Igd2luZG93IGluIHRvX2JlX21lcmdlZDoKICAgICAgaWYgd2luZG93ICE9IG1lcmdlX3Jlc3VsdDoKICAgICAgICBpZiB3aW5kb3cgaW4gc2VsZi53aW5kb3dfaWRzOgogICAgICAgICAgaWYgbWVyZ2VfcmVzdWx0IGluIHNlbGYud2luZG93X2lkczoKICAgICAgICAgICAgbWVyZ2Vfd2luZG93X2lkcyA9IHNlbGYud2luZG93X2lkc1ttZXJnZV9yZXN1bHRdCiAgICAgICAgICBlbHNlOgogICAgICAgICAgICBtZXJnZV93aW5kb3dfaWRzID0gc2VsZi53aW5kb3dfaWRzW21lcmdlX3Jlc3VsdF0gPSBbXQogICAgICAgICAgbWVyZ2Vfd2luZG93X2lkcy5leHRlbmQoc2VsZi53aW5kb3dfaWRzLnBvcCh3aW5kb3cpKQogICAgICAgICAgc2VsZi5fcGVyc2lzdF93aW5kb3dfaWRzKCkKCiAgZGVmIGtub3duX3dpbmRvd3Moc2VsZik6CiAgICByZXR1cm4gbGlzdChzZWxmLndpbmRvd19pZHMpCgogIGRlZiBnZXRfd2luZG93KHNlbGYsIHdpbmRvd19pZCk6CiAgICBmb3Igd2luZG93LCBpZHMgaW4gc2VsZi53aW5kb3dfaWRzLml0ZW1zKCk6CiAgICAgIGlmIHdpbmRvd19pZCBpbiBpZHM6CiAgICAgICAgcmV0dXJuIHdpbmRvdwogICAgcmFpc2UgVmFsdWVFcnJvcignTm8gd2luZG93IGZvciAlcycgJSB3aW5kb3dfaWQpCgogIGRlZiBfZ2V0X2lkKHNlbGYsIHdpbmRvdyk6CiAgICBpZiB3aW5kb3cgaW4gc2VsZi53aW5kb3dfaWRzOgogICAgICByZXR1cm4gc2VsZi53aW5kb3dfaWRzW3dpbmRvd11bMF0KCiAgICB3aW5kb3dfaWQgPSBzZWxmLl9nZXRfbmV4dF9jb3VudGVyKCkKICAgIHNlbGYud2luZG93X2lkc1t3aW5kb3ddID0gW3dpbmRvd19pZF0KICAgIHNlbGYuX3BlcnNpc3Rfd2luZG93X2lkcygpCiAgICByZXR1cm4gd2luZG93X2lkCgogIGRlZiBfZ2V0X2lkcyhzZWxmLCB3aW5kb3cpOgogICAgcmV0dXJuIHNlbGYud2luZG93X2lkcy5nZXQod2luZG93LCBbXSkKCiAgZGVmIF9nZXRfbmV4dF9jb3VudGVyKHNlbGYpOgogICAgaWYgbm90IHNlbGYud2luZG93X2lkczoKICAgICAgc2VsZi5jb3VudGVyID0gMAogICAgZWxpZiBzZWxmLmNvdW50ZXIgaXMgTm9uZToKICAgICAgc2VsZi5jb3VudGVyID0gbWF4KGsgZm9yIGlkcyBpbiBzZWxmLndpbmRvd19pZHMudmFsdWVzKCkgZm9yIGsgaW4gaWRzKQogICAgc2VsZi5jb3VudGVyICs9IDEKICAgIHJldHVybiBzZWxmLmNvdW50ZXIKCiAgZGVmIF9wZXJzaXN0X3dpbmRvd19pZHMoc2VsZik6CiAgICBzZWxmLnJhd19zdGF0ZS5zZXRfZ2xvYmFsX3N0YXRlKHNlbGYuV0lORE9XX0lEUywgc2VsZi53aW5kb3dfaWRzKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1xuXHQnLmpvaW4oW3JlcHIoc2VsZi53aW5kb3dfaWRzKV0gKwogICAgICAgICAgICAgICAgICAgICAgIHJlcHIoc2VsZi5yYXdfc3RhdGUpLnNwbGl0KCdcbicpKQoKCmRlZiBjcmVhdGVfdHJpZ2dlcl9kcml2ZXIoCiAgICB3aW5kb3dpbmcsIGlzX2JhdGNoPUZhbHNlLCBwaGFzZWRfY29tYmluZV9mbj1Ob25lLCBjbG9jaz1Ob25lKToKICAiIiJDcmVhdGUgdGhlIFRyaWdnZXJEcml2ZXIgZm9yIHRoZSBnaXZlbiB3aW5kb3dpbmcgYW5kIG9wdGlvbnMuIiIiCgogICMgVE9ETyhyb2JlcnR3Yik6IFdlIGNhbiBkbyBtb3JlIGlmIHdlIGtub3cgZWxlbWVudHMgYXJlIGluIHRpbWVzdGFtcAogICMgc29ydGVkIG9yZGVyLgogIGlmIHdpbmRvd2luZy5pc19kZWZhdWx0KCkgYW5kIGlzX2JhdGNoOgogICAgZHJpdmVyID0gQmF0Y2hHbG9iYWxUcmlnZ2VyRHJpdmVyKCkKICBlbGlmICh3aW5kb3dpbmcud2luZG93Zm4gPT0gR2xvYmFsV2luZG93cygpIGFuZAogICAgICAgIHdpbmRvd2luZy50cmlnZ2VyZm4gPT0gQWZ0ZXJDb3VudCgxKSBhbmQgaXNfYmF0Y2gpOgogICAgIyBIZXJlIHdlIGFsc28ganVzdCBwYXNzIHRocm91Z2ggYWxsIHRoZSB2YWx1ZXMgZXhhY3RseSBvbmNlLgogICAgZHJpdmVyID0gQmF0Y2hHbG9iYWxUcmlnZ2VyRHJpdmVyKCkKICBlbHNlOgogICAgZHJpdmVyID0gR2VuZXJhbFRyaWdnZXJEcml2ZXIod2luZG93aW5nLCBjbG9jaykKCiAgaWYgcGhhc2VkX2NvbWJpbmVfZm46CiAgICAjIFRPRE8oY2N5KTogUmVmYWN0b3IgR2VuZXJhbFRyaWdnZXJEcml2ZXIgdG8gY29tYmluZSB2YWx1ZXMgZWFnZXJseSB1c2luZwogICAgIyB0aGUga25vd24gcGhhc2VkX2NvbWJpbmVfZm4gaGVyZS4KICAgIGRyaXZlciA9IENvbWJpbmluZ1RyaWdnZXJEcml2ZXIocGhhc2VkX2NvbWJpbmVfZm4sIGRyaXZlcikKICByZXR1cm4gZHJpdmVyCgoKY2xhc3MgVHJpZ2dlckRyaXZlcih3aXRoX21ldGFjbGFzcyhBQkNNZXRhLCBvYmplY3QpKTogICMgdHlwZTogaWdub3JlW21pc2NdCiAgIiIiQnJlYWtzIGEgc2VyaWVzIG9mIGJ1bmRsZSBhbmQgdGltZXIgZmlyaW5ncyBpbnRvIHdpbmRvdyAocGFuZSlzLiIiIgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBwcm9jZXNzX2VsZW1lbnRzKAogICAgICBzZWxmLAogICAgICBzdGF0ZSwKICAgICAgd2luZG93ZWRfdmFsdWVzLAogICAgICBvdXRwdXRfd2F0ZXJtYXJrLAogICAgICBpbnB1dF93YXRlcm1hcms9TUlOX1RJTUVTVEFNUCk6CiAgICBwYXNzCgogIEBhYnN0cmFjdG1ldGhvZAogIGRlZiBwcm9jZXNzX3RpbWVyKAogICAgICBzZWxmLAogICAgICB3aW5kb3dfaWQsCiAgICAgIG5hbWUsCiAgICAgIHRpbWVfZG9tYWluLAogICAgICB0aW1lc3RhbXAsCiAgICAgIHN0YXRlLAogICAgICBpbnB1dF93YXRlcm1hcms9Tm9uZSk6CiAgICBwYXNzCgogIGRlZiBwcm9jZXNzX2VudGlyZV9rZXkoCiAgICAgIHNlbGYsCiAgICAgIGtleSwKICAgICAgd2luZG93ZWRfdmFsdWVzLAogICAgICB1bnVzZWRfb3V0cHV0X3dhdGVybWFyaz1Ob25lLAogICAgICB1bnVzZWRfaW5wdXRfd2F0ZXJtYXJrPU5vbmUpOgogICAgc3RhdGUgPSBJbk1lbW9yeVVubWVyZ2VkU3RhdGUoKQogICAgZm9yIHd2YWx1ZSBpbiBzZWxmLnByb2Nlc3NfZWxlbWVudHMoc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dlZF92YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU5fVElNRVNUQU1QLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlOX1RJTUVTVEFNUCk6CiAgICAgIHlpZWxkIHd2YWx1ZS53aXRoX3ZhbHVlKChrZXksIHd2YWx1ZS52YWx1ZSkpCiAgICB3aGlsZSBzdGF0ZS50aW1lcnM6CiAgICAgIGZpcmVkID0gc3RhdGUuZ2V0X2FuZF9jbGVhcl90aW1lcnMoKQogICAgICBmb3IgdGltZXJfd2luZG93LCAobmFtZSwgdGltZV9kb21haW4sIGZpcmVfdGltZSkgaW4gZmlyZWQ6CiAgICAgICAgZm9yIHd2YWx1ZSBpbiBzZWxmLnByb2Nlc3NfdGltZXIodGltZXJfd2luZG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9kb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyZV90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKToKICAgICAgICAgIHlpZWxkIHd2YWx1ZS53aXRoX3ZhbHVlKChrZXksIHd2YWx1ZS52YWx1ZSkpCgoKY2xhc3MgX1Vud2luZG93ZWRWYWx1ZXMob2JzZXJ2YWJsZS5PYnNlcnZhYmxlTWl4aW4pOgogICIiIkV4cG9zZXMgaXRlcmFibGUgb2Ygd2luZG93ZWQgdmFsdWVzIGFzIGl0ZXJhYmxlIG9mIHVud2luZG93ZWQgdmFsdWVzLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dlZF92YWx1ZXMpOgogICAgc3VwZXIoX1Vud2luZG93ZWRWYWx1ZXMsIHNlbGYpLl9faW5pdF9fKCkKICAgIHNlbGYuX3dpbmRvd2VkX3ZhbHVlcyA9IHdpbmRvd2VkX3ZhbHVlcwoKICBkZWYgX19pdGVyX18oc2VsZik6CiAgICBmb3Igd3YgaW4gc2VsZi5fd2luZG93ZWRfdmFsdWVzOgogICAgICB1bndpbmRvd2VkX3ZhbHVlID0gd3YudmFsdWUKICAgICAgc2VsZi5ub3RpZnlfb2JzZXJ2ZXJzKHVud2luZG93ZWRfdmFsdWUpCiAgICAgIHlpZWxkIHVud2luZG93ZWRfdmFsdWUKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICc8X1Vud2luZG93ZWRWYWx1ZXMgb2YgJXM+JyAlIHNlbGYuX3dpbmRvd2VkX3ZhbHVlcwoKICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgIHJldHVybiBsaXN0LCAobGlzdChzZWxmKSwgKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToKICAgICAgcmV0dXJuIGFsbCgKICAgICAgICAgIGEgPT0gYiBmb3IgYSwgYiBpbiB6aXBfbG9uZ2VzdChzZWxmLCBvdGhlciwgZmlsbHZhbHVlPW9iamVjdCgpKSkKICAgIGVsc2U6CiAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0dXBsZShzZWxmKSkKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgoKY29kZXJfaW1wbC5GYXN0UHJpbWl0aXZlc0NvZGVySW1wbC5yZWdpc3Rlcl9pdGVyYWJsZV9saWtlX3R5cGUoCiAgICBfVW53aW5kb3dlZFZhbHVlcykKCgpjbGFzcyBCYXRjaEdsb2JhbFRyaWdnZXJEcml2ZXIoVHJpZ2dlckRyaXZlcik6CiAgIiIiR3JvdXBzIGFsbCByZWNlaXZlZCB2YWx1ZXMgdG9nZXRoZXIuCiAgIiIiCiAgR0xPQkFMX1dJTkRPV19UVVBMRSA9IChHbG9iYWxXaW5kb3coKSwgKQogIE9OTFlfRklSSU5HID0gd2luZG93ZWRfdmFsdWUuUGFuZUluZm8oCiAgICAgIGlzX2ZpcnN0PVRydWUsCiAgICAgIGlzX2xhc3Q9VHJ1ZSwKICAgICAgdGltaW5nPXdpbmRvd2VkX3ZhbHVlLlBhbmVJbmZvVGltaW5nLk9OX1RJTUUsCiAgICAgIGluZGV4PTAsCiAgICAgIG5vbnNwZWN1bGF0aXZlX2luZGV4PTApCgogIGRlZiBwcm9jZXNzX2VsZW1lbnRzKAogICAgICBzZWxmLAogICAgICBzdGF0ZSwKICAgICAgd2luZG93ZWRfdmFsdWVzLAogICAgICB1bnVzZWRfb3V0cHV0X3dhdGVybWFyaywKICAgICAgdW51c2VkX2lucHV0X3dhdGVybWFyaz1NSU5fVElNRVNUQU1QKToKICAgIHlpZWxkIFdpbmRvd2VkVmFsdWUoCiAgICAgICAgX1Vud2luZG93ZWRWYWx1ZXMod2luZG93ZWRfdmFsdWVzKSwKICAgICAgICBNSU5fVElNRVNUQU1QLAogICAgICAgIHNlbGYuR0xPQkFMX1dJTkRPV19UVVBMRSwKICAgICAgICBzZWxmLk9OTFlfRklSSU5HKQoKICBkZWYgcHJvY2Vzc190aW1lcigKICAgICAgc2VsZiwKICAgICAgd2luZG93X2lkLAogICAgICBuYW1lLAogICAgICB0aW1lX2RvbWFpbiwKICAgICAgdGltZXN0YW1wLAogICAgICBzdGF0ZSwKICAgICAgaW5wdXRfd2F0ZXJtYXJrPU5vbmUpOgogICAgcmFpc2UgVHlwZUVycm9yKCdUcmlnZ2VycyBuZXZlciBzZXQgb3IgY2FsbGVkIGZvciBiYXRjaCBkZWZhdWx0IHdpbmRvd2luZy4nKQoKCmNsYXNzIENvbWJpbmluZ1RyaWdnZXJEcml2ZXIoVHJpZ2dlckRyaXZlcik6CiAgIiIiVXNlcyBhIHBoYXNlZF9jb21iaW5lX2ZuIHRvIHByb2Nlc3Mgb3V0cHV0IG9mIHdyYXBwZWQgVHJpZ2dlckRyaXZlci4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgcGhhc2VkX2NvbWJpbmVfZm4sIHVuZGVybHlpbmcpOgogICAgc2VsZi5waGFzZWRfY29tYmluZV9mbiA9IHBoYXNlZF9jb21iaW5lX2ZuCiAgICBzZWxmLnVuZGVybHlpbmcgPSB1bmRlcmx5aW5nCgogIGRlZiBwcm9jZXNzX2VsZW1lbnRzKAogICAgICBzZWxmLAogICAgICBzdGF0ZSwKICAgICAgd2luZG93ZWRfdmFsdWVzLAogICAgICBvdXRwdXRfd2F0ZXJtYXJrLAogICAgICBpbnB1dF93YXRlcm1hcms9TUlOX1RJTUVTVEFNUCk6CiAgICB1bmNvbWJpbmVkID0gc2VsZi51bmRlcmx5aW5nLnByb2Nlc3NfZWxlbWVudHMoCiAgICAgICAgc3RhdGUsIHdpbmRvd2VkX3ZhbHVlcywgb3V0cHV0X3dhdGVybWFyaywgaW5wdXRfd2F0ZXJtYXJrKQogICAgZm9yIG91dHB1dCBpbiB1bmNvbWJpbmVkOgogICAgICB5aWVsZCBvdXRwdXQud2l0aF92YWx1ZShzZWxmLnBoYXNlZF9jb21iaW5lX2ZuLmFwcGx5KG91dHB1dC52YWx1ZSkpCgogIGRlZiBwcm9jZXNzX3RpbWVyKAogICAgICBzZWxmLAogICAgICB3aW5kb3dfaWQsCiAgICAgIG5hbWUsCiAgICAgIHRpbWVfZG9tYWluLAogICAgICB0aW1lc3RhbXAsCiAgICAgIHN0YXRlLAogICAgICBpbnB1dF93YXRlcm1hcms9Tm9uZSk6CiAgICB1bmNvbWJpbmVkID0gc2VsZi51bmRlcmx5aW5nLnByb2Nlc3NfdGltZXIoCiAgICAgICAgd2luZG93X2lkLCBuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wLCBzdGF0ZSwgaW5wdXRfd2F0ZXJtYXJrKQogICAgZm9yIG91dHB1dCBpbiB1bmNvbWJpbmVkOgogICAgICB5aWVsZCBvdXRwdXQud2l0aF92YWx1ZShzZWxmLnBoYXNlZF9jb21iaW5lX2ZuLmFwcGx5KG91dHB1dC52YWx1ZSkpCgoKY2xhc3MgR2VuZXJhbFRyaWdnZXJEcml2ZXIoVHJpZ2dlckRyaXZlcik6CiAgIiIiQnJlYWtzIGEgc2VyaWVzIG9mIGJ1bmRsZSBhbmQgdGltZXIgZmlyaW5ncyBpbnRvIHdpbmRvdyAocGFuZSlzLgoKICBTdWl0YWJsZSBmb3IgYWxsIHZhcmlhbnRzIG9mIFdpbmRvd2luZy4KICAiIiIKICBFTEVNRU5UUyA9IF9MaXN0U3RhdGVUYWcoJ2VsZW1lbnRzJykKICBUT01CU1RPTkUgPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygndG9tYnN0b25lJywgY29tYmluZXJzLkNvdW50Q29tYmluZUZuKCkpCiAgSU5ERVggPSBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZygnaW5kZXgnLCBjb21iaW5lcnMuQ291bnRDb21iaW5lRm4oKSkKICBOT05TUEVDVUxBVElWRV9JTkRFWCA9IF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnKAogICAgICAnbm9uc3BlY3VsYXRpdmVfaW5kZXgnLCBjb21iaW5lcnMuQ291bnRDb21iaW5lRm4oKSkKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHdpbmRvd2luZywgY2xvY2spOgogICAgc2VsZi5jbG9jayA9IGNsb2NrCiAgICBzZWxmLmFsbG93ZWRfbGF0ZW5lc3MgPSB3aW5kb3dpbmcuYWxsb3dlZF9sYXRlbmVzcwogICAgc2VsZi53aW5kb3dfZm4gPSB3aW5kb3dpbmcud2luZG93Zm4KICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyX2ltcGwgPSBUaW1lc3RhbXBDb21iaW5lci5nZXRfaW1wbCgKICAgICAgICB3aW5kb3dpbmcudGltZXN0YW1wX2NvbWJpbmVyLCBzZWxmLndpbmRvd19mbikKICAgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICAgc2VsZi5XQVRFUk1BUktfSE9MRCA9IF9XYXRlcm1hcmtIb2xkU3RhdGVUYWcoCiAgICAgICAgJ3dhdGVybWFyaycsIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyX2ltcGwpCiAgICAjIHB5bGludDogZW5hYmxlPWludmFsaWQtbmFtZQogICAgc2VsZi50cmlnZ2VyX2ZuID0gd2luZG93aW5nLnRyaWdnZXJmbgogICAgc2VsZi5hY2N1bXVsYXRpb25fbW9kZSA9IHdpbmRvd2luZy5hY2N1bXVsYXRpb25fbW9kZQogICAgc2VsZi5pc19tZXJnaW5nID0gVHJ1ZQoKICBkZWYgcHJvY2Vzc19lbGVtZW50cygKICAgICAgc2VsZiwKICAgICAgc3RhdGUsCiAgICAgIHdpbmRvd2VkX3ZhbHVlcywKICAgICAgb3V0cHV0X3dhdGVybWFyaywKICAgICAgaW5wdXRfd2F0ZXJtYXJrPU1JTl9USU1FU1RBTVApOgogICAgaWYgc2VsZi5pc19tZXJnaW5nOgogICAgICBzdGF0ZSA9IE1lcmdlYWJsZVN0YXRlQWRhcHRlcihzdGF0ZSkKCiAgICB3aW5kb3dzX3RvX2VsZW1lbnRzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCkKICAgIGZvciB3diBpbiB3aW5kb3dlZF92YWx1ZXM6CiAgICAgIGZvciB3aW5kb3cgaW4gd3Yud2luZG93czoKICAgICAgICAjIGlnbm9yZSBleHBpcmVkIHdpbmRvd3MKICAgICAgICBpZiBpbnB1dF93YXRlcm1hcmsgPiB3aW5kb3cuZW5kICsgc2VsZi5hbGxvd2VkX2xhdGVuZXNzOgogICAgICAgICAgY29udGludWUKICAgICAgICB3aW5kb3dzX3RvX2VsZW1lbnRzW3dpbmRvd10uYXBwZW5kKCh3di52YWx1ZSwgd3YudGltZXN0YW1wKSkKCiAgICAjIEZpcnN0IGhhbmRsZSBtZXJnaW5nLgogICAgaWYgc2VsZi5pc19tZXJnaW5nOgogICAgICBvbGRfd2luZG93cyA9IHNldChzdGF0ZS5rbm93bl93aW5kb3dzKCkpCiAgICAgIGFsbF93aW5kb3dzID0gb2xkX3dpbmRvd3MudW5pb24obGlzdCh3aW5kb3dzX3RvX2VsZW1lbnRzKSkKCiAgICAgIGlmIGFsbF93aW5kb3dzICE9IG9sZF93aW5kb3dzOgogICAgICAgIG1lcmdlZF9hd2F5ID0ge30KCiAgICAgICAgY2xhc3MgVHJpZ2dlck1lcmdlQ29udGV4dChXaW5kb3dGbi5NZXJnZUNvbnRleHQpOgogICAgICAgICAgZGVmIG1lcmdlKF8sIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0KTogICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtYXJndW1lbnQKICAgICAgICAgICAgZm9yIHdpbmRvdyBpbiB0b19iZV9tZXJnZWQ6CiAgICAgICAgICAgICAgaWYgd2luZG93ICE9IG1lcmdlX3Jlc3VsdDoKICAgICAgICAgICAgICAgIG1lcmdlZF9hd2F5W3dpbmRvd10gPSBtZXJnZV9yZXN1bHQKICAgICAgICAgICAgc3RhdGUubWVyZ2UodG9fYmVfbWVyZ2VkLCBtZXJnZV9yZXN1bHQpCiAgICAgICAgICAgICMgdXNpbmcgdGhlIG91dGVyIHNlbGYgYXJndW1lbnQuCiAgICAgICAgICAgIHNlbGYudHJpZ2dlcl9mbi5vbl9tZXJnZSgKICAgICAgICAgICAgICAgIHRvX2JlX21lcmdlZCwgbWVyZ2VfcmVzdWx0LCBzdGF0ZS5hdChtZXJnZV9yZXN1bHQsIHNlbGYuY2xvY2spKQoKICAgICAgICBzZWxmLndpbmRvd19mbi5tZXJnZShUcmlnZ2VyTWVyZ2VDb250ZXh0KGFsbF93aW5kb3dzKSkKCiAgICAgICAgbWVyZ2VkX3dpbmRvd3NfdG9fZWxlbWVudHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KQogICAgICAgIGZvciB3aW5kb3csIHZhbHVlcyBpbiB3aW5kb3dzX3RvX2VsZW1lbnRzLml0ZW1zKCk6CiAgICAgICAgICB3aGlsZSB3aW5kb3cgaW4gbWVyZ2VkX2F3YXk6CiAgICAgICAgICAgIHdpbmRvdyA9IG1lcmdlZF9hd2F5W3dpbmRvd10KICAgICAgICAgIG1lcmdlZF93aW5kb3dzX3RvX2VsZW1lbnRzW3dpbmRvd10uZXh0ZW5kKHZhbHVlcykKICAgICAgICB3aW5kb3dzX3RvX2VsZW1lbnRzID0gbWVyZ2VkX3dpbmRvd3NfdG9fZWxlbWVudHMKCiAgICAgICAgZm9yIHdpbmRvdyBpbiBtZXJnZWRfYXdheToKICAgICAgICAgIHN0YXRlLmNsZWFyX3N0YXRlKHdpbmRvdywgc2VsZi5XQVRFUk1BUktfSE9MRCkKCiAgICAjIE5leHQgaGFuZGxlIGVsZW1lbnQgYWRkaW5nLgogICAgZm9yIHdpbmRvdywgZWxlbWVudHMgaW4gd2luZG93c190b19lbGVtZW50cy5pdGVtcygpOgogICAgICBpZiBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLlRPTUJTVE9ORSk6CiAgICAgICAgY29udGludWUKICAgICAgIyBBZGQgd2F0ZXJtYXJrIGhvbGQuCiAgICAgICMgVE9ETyhjY3kpOiBBZGQgbGF0ZSBkYXRhIGFuZCBnYXJiYWdlLWNvbGxlY3Rpb24gaG9sZCBzdXBwb3J0LgogICAgICBvdXRwdXRfdGltZSA9IHNlbGYudGltZXN0YW1wX2NvbWJpbmVyX2ltcGwubWVyZ2UoCiAgICAgICAgICB3aW5kb3csCiAgICAgICAgICAoCiAgICAgICAgICAgICAgZWxlbWVudF9vdXRwdXRfdGltZSBmb3IgZWxlbWVudF9vdXRwdXRfdGltZSBpbiAoCiAgICAgICAgICAgICAgICAgIHNlbGYudGltZXN0YW1wX2NvbWJpbmVyX2ltcGwuYXNzaWduX291dHB1dF90aW1lKAogICAgICAgICAgICAgICAgICAgICAgd2luZG93LCB0aW1lc3RhbXApIGZvciB1bnVzZWRfdmFsdWUsCiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCBpbiBlbGVtZW50cykKICAgICAgICAgICAgICBpZiBlbGVtZW50X291dHB1dF90aW1lID49IG91dHB1dF93YXRlcm1hcmspKQogICAgICBpZiBvdXRwdXRfdGltZSBpcyBub3QgTm9uZToKICAgICAgICBzdGF0ZS5hZGRfc3RhdGUod2luZG93LCBzZWxmLldBVEVSTUFSS19IT0xELCBvdXRwdXRfdGltZSkKCiAgICAgIGNvbnRleHQgPSBzdGF0ZS5hdCh3aW5kb3csIHNlbGYuY2xvY2spCiAgICAgIGZvciB2YWx1ZSwgdW51c2VkX3RpbWVzdGFtcCBpbiBlbGVtZW50czoKICAgICAgICBzdGF0ZS5hZGRfc3RhdGUod2luZG93LCBzZWxmLkVMRU1FTlRTLCB2YWx1ZSkKICAgICAgICBzZWxmLnRyaWdnZXJfZm4ub25fZWxlbWVudCh2YWx1ZSwgd2luZG93LCBjb250ZXh0KQoKICAgICAgIyBNYXliZSBmaXJlIHRoaXMgd2luZG93LgogICAgICBpZiBzZWxmLnRyaWdnZXJfZm4uc2hvdWxkX2ZpcmUoVGltZURvbWFpbi5XQVRFUk1BUkssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF93YXRlcm1hcmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KToKICAgICAgICBmaW5pc2hlZCA9IHNlbGYudHJpZ2dlcl9mbi5vbl9maXJlKGlucHV0X3dhdGVybWFyaywgd2luZG93LCBjb250ZXh0KQogICAgICAgIHlpZWxkIHNlbGYuX291dHB1dCgKICAgICAgICAgICAgd2luZG93LCBmaW5pc2hlZCwgc3RhdGUsIGlucHV0X3dhdGVybWFyaywgb3V0cHV0X3dhdGVybWFyaywgRmFsc2UpCgogIGRlZiBwcm9jZXNzX3RpbWVyKAogICAgICBzZWxmLAogICAgICB3aW5kb3dfaWQsCiAgICAgIHVudXNlZF9uYW1lLAogICAgICB0aW1lX2RvbWFpbiwKICAgICAgdGltZXN0YW1wLAogICAgICBzdGF0ZSwKICAgICAgaW5wdXRfd2F0ZXJtYXJrPU5vbmUpOgogICAgaWYgaW5wdXRfd2F0ZXJtYXJrIGlzIE5vbmU6CiAgICAgIGlucHV0X3dhdGVybWFyayA9IHRpbWVzdGFtcAoKICAgIGlmIHNlbGYuaXNfbWVyZ2luZzoKICAgICAgc3RhdGUgPSBNZXJnZWFibGVTdGF0ZUFkYXB0ZXIoc3RhdGUpCiAgICB3aW5kb3cgPSBzdGF0ZS5nZXRfd2luZG93KHdpbmRvd19pZCkKICAgIGlmIHN0YXRlLmdldF9zdGF0ZSh3aW5kb3csIHNlbGYuVE9NQlNUT05FKToKICAgICAgcmV0dXJuCgogICAgaWYgdGltZV9kb21haW4gaW4gKFRpbWVEb21haW4uV0FURVJNQVJLLCBUaW1lRG9tYWluLlJFQUxfVElNRSk6CiAgICAgIGlmIG5vdCBzZWxmLmlzX21lcmdpbmcgb3Igd2luZG93IGluIHN0YXRlLmtub3duX3dpbmRvd3MoKToKICAgICAgICBjb250ZXh0ID0gc3RhdGUuYXQod2luZG93LCBzZWxmLmNsb2NrKQogICAgICAgIGlmIHNlbGYudHJpZ2dlcl9mbi5zaG91bGRfZmlyZSh0aW1lX2RvbWFpbiwgdGltZXN0YW1wLCB3aW5kb3csIGNvbnRleHQpOgogICAgICAgICAgZmluaXNoZWQgPSBzZWxmLnRyaWdnZXJfZm4ub25fZmlyZSh0aW1lc3RhbXAsIHdpbmRvdywgY29udGV4dCkKICAgICAgICAgIHlpZWxkIHNlbGYuX291dHB1dCgKICAgICAgICAgICAgICB3aW5kb3csCiAgICAgICAgICAgICAgZmluaXNoZWQsCiAgICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgICAgaW5wdXRfd2F0ZXJtYXJrLAogICAgICAgICAgICAgIHRpbWVzdGFtcCwKICAgICAgICAgICAgICB0aW1lX2RvbWFpbiA9PSBUaW1lRG9tYWluLldBVEVSTUFSSykKICAgIGVsc2U6CiAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5leHBlY3RlZCB0aW1lIGRvbWFpbjogJXMnICUgdGltZV9kb21haW4pCgogIGRlZiBfb3V0cHV0KAogICAgICBzZWxmLAogICAgICB3aW5kb3csCiAgICAgIGZpbmlzaGVkLAogICAgICBzdGF0ZSwKICAgICAgaW5wdXRfd2F0ZXJtYXJrLAogICAgICBvdXRwdXRfd2F0ZXJtYXJrLAogICAgICBtYXliZV9vbnRpbWUpOgogICAgIiIiT3V0cHV0IHdpbmRvdyBhbmQgY2xlYW4gdXAgaWYgYXBwcm9wcmlhdGUuIiIiCiAgICBpbmRleCA9IHN0YXRlLmdldF9zdGF0ZSh3aW5kb3csIHNlbGYuSU5ERVgpCiAgICBzdGF0ZS5hZGRfc3RhdGUod2luZG93LCBzZWxmLklOREVYLCAxKQogICAgaWYgb3V0cHV0X3dhdGVybWFyayA8PSB3aW5kb3cubWF4X3RpbWVzdGFtcCgpOgogICAgICBub25zcGVjdWxhdGl2ZV9pbmRleCA9IC0xCiAgICAgIHRpbWluZyA9IHdpbmRvd2VkX3ZhbHVlLlBhbmVJbmZvVGltaW5nLkVBUkxZCiAgICAgIGlmIHN0YXRlLmdldF9zdGF0ZSh3aW5kb3csIHNlbGYuTk9OU1BFQ1VMQVRJVkVfSU5ERVgpOgogICAgICAgIG5vbnNwZWN1bGF0aXZlX2luZGV4ID0gc3RhdGUuZ2V0X3N0YXRlKAogICAgICAgICAgICB3aW5kb3csIHNlbGYuTk9OU1BFQ1VMQVRJVkVfSU5ERVgpCiAgICAgICAgc3RhdGUuYWRkX3N0YXRlKHdpbmRvdywgc2VsZi5OT05TUEVDVUxBVElWRV9JTkRFWCwgMSkKICAgICAgICBfTE9HR0VSLndhcm5pbmcoCiAgICAgICAgICAgICdXYXRlcm1hcmsgbW92ZWQgYmFja3dhcmRzIGluIHRpbWUgJwogICAgICAgICAgICAnb3IgbGF0ZSBkYXRhIG1vdmVkIHdpbmRvdyBlbmQgZm9yd2FyZC4nKQogICAgZWxzZToKICAgICAgbm9uc3BlY3VsYXRpdmVfaW5kZXggPSBzdGF0ZS5nZXRfc3RhdGUod2luZG93LCBzZWxmLk5PTlNQRUNVTEFUSVZFX0lOREVYKQogICAgICBzdGF0ZS5hZGRfc3RhdGUod2luZG93LCBzZWxmLk5PTlNQRUNVTEFUSVZFX0lOREVYLCAxKQogICAgICB0aW1pbmcgPSAoCiAgICAgICAgICB3aW5kb3dlZF92YWx1ZS5QYW5lSW5mb1RpbWluZy5PTl9USU1FIGlmIG1heWJlX29udGltZSBhbmQKICAgICAgICAgIG5vbnNwZWN1bGF0aXZlX2luZGV4ID09IDAgZWxzZSB3aW5kb3dlZF92YWx1ZS5QYW5lSW5mb1RpbWluZy5MQVRFKQogICAgcGFuZV9pbmZvID0gd2luZG93ZWRfdmFsdWUuUGFuZUluZm8oCiAgICAgICAgaW5kZXggPT0gMCwgZmluaXNoZWQsIHRpbWluZywgaW5kZXgsIG5vbnNwZWN1bGF0aXZlX2luZGV4KQoKICAgIHZhbHVlcyA9IHN0YXRlLmdldF9zdGF0ZSh3aW5kb3csIHNlbGYuRUxFTUVOVFMpCiAgICBpZiBmaW5pc2hlZDoKICAgICAgIyBUT0RPKHJvYmVydHdiKTogYWxsb3dlZCBsYXRlbmVzcwogICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuRUxFTUVOVFMpCiAgICAgIHN0YXRlLmFkZF9zdGF0ZSh3aW5kb3csIHNlbGYuVE9NQlNUT05FLCAxKQogICAgZWxpZiBzZWxmLmFjY3VtdWxhdGlvbl9tb2RlID09IEFjY3VtdWxhdGlvbk1vZGUuRElTQ0FSRElORzoKICAgICAgc3RhdGUuY2xlYXJfc3RhdGUod2luZG93LCBzZWxmLkVMRU1FTlRTKQoKICAgIHRpbWVzdGFtcCA9IHN0YXRlLmdldF9zdGF0ZSh3aW5kb3csIHNlbGYuV0FURVJNQVJLX0hPTEQpCiAgICBpZiB0aW1lc3RhbXAgaXMgTm9uZToKICAgICAgIyBJZiBubyB3YXRlcm1hcmsgaG9sZCB3YXMgc2V0LCBvdXRwdXQgYXQgZW5kIG9mIHdpbmRvdy4KICAgICAgdGltZXN0YW1wID0gd2luZG93Lm1heF90aW1lc3RhbXAoKQogICAgZWxpZiBpbnB1dF93YXRlcm1hcmsgPCB3aW5kb3cuZW5kIGFuZCBzZWxmLnRyaWdnZXJfZm4uaGFzX29udGltZV9wYW5lKCk6CiAgICAgICMgSG9sZCB0aGUgd2F0ZXJtYXJrIGluIGNhc2UgdGhlcmUgaXMgYW4gZW1wdHkgcGFuZSB0aGF0IG5lZWRzIHRvIGJlIGZpcmVkCiAgICAgICMgYXQgdGhlIGVuZCBvZiB0aGUgd2luZG93LgogICAgICBwYXNzCiAgICBlbHNlOgogICAgICBzdGF0ZS5jbGVhcl9zdGF0ZSh3aW5kb3csIHNlbGYuV0FURVJNQVJLX0hPTEQpCgogICAgcmV0dXJuIFdpbmRvd2VkVmFsdWUodmFsdWVzLCB0aW1lc3RhbXAsICh3aW5kb3csICksIHBhbmVfaW5mbykKCgpjbGFzcyBJbk1lbW9yeVVubWVyZ2VkU3RhdGUoVW5tZXJnZWRTdGF0ZSk6CiAgIiIiSW4tbWVtb3J5IGltcGxlbWVudGF0aW9uIG9mIFVubWVyZ2VkU3RhdGUuCgogIFVzZWQgZm9yIGJhdGNoIGFuZCB0ZXN0aW5nLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZlbnNpdmVfY29weT1UcnVlKToKICAgICMgVE9ETyhyb2JlcnR3Yik6IFNraXAgZGVmZW5zaXZlX2NvcHkgaW4gcHJvZHVjdGlvbiBpZiBpdCdzIHRvbyBleHBlbnNpdmUuCiAgICBzZWxmLnRpbWVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGRpY3QpCiAgICBzZWxmLnN0YXRlID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGFtYmRhOiBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KSkKICAgIHNlbGYuZ2xvYmFsX3N0YXRlID0ge30KICAgIHNlbGYuZGVmZW5zaXZlX2NvcHkgPSBkZWZlbnNpdmVfY29weQoKICBkZWYgY29weShzZWxmKToKICAgIGNsb25lZF9vYmplY3QgPSBJbk1lbW9yeVVubWVyZ2VkU3RhdGUoZGVmZW5zaXZlX2NvcHk9c2VsZi5kZWZlbnNpdmVfY29weSkKICAgIGNsb25lZF9vYmplY3QudGltZXJzID0gY29weS5kZWVwY29weShzZWxmLnRpbWVycykKICAgIGNsb25lZF9vYmplY3QuZ2xvYmFsX3N0YXRlID0gY29weS5kZWVwY29weShzZWxmLmdsb2JhbF9zdGF0ZSkKICAgIGZvciB3aW5kb3cgaW4gc2VsZi5zdGF0ZToKICAgICAgZm9yIHRhZyBpbiBzZWxmLnN0YXRlW3dpbmRvd106CiAgICAgICAgY2xvbmVkX29iamVjdC5zdGF0ZVt3aW5kb3ddW3RhZ10gPSBjb3B5LmNvcHkoc2VsZi5zdGF0ZVt3aW5kb3ddW3RhZ10pCiAgICByZXR1cm4gY2xvbmVkX29iamVjdAoKICBkZWYgc2V0X2dsb2JhbF9zdGF0ZShzZWxmLCB0YWcsIHZhbHVlKToKICAgIGFzc2VydCBpc2luc3RhbmNlKHRhZywgX1ZhbHVlU3RhdGVUYWcpCiAgICBpZiBzZWxmLmRlZmVuc2l2ZV9jb3B5OgogICAgICB2YWx1ZSA9IGNvcHkuZGVlcGNvcHkodmFsdWUpCiAgICBzZWxmLmdsb2JhbF9zdGF0ZVt0YWcudGFnXSA9IHZhbHVlCgogIGRlZiBnZXRfZ2xvYmFsX3N0YXRlKHNlbGYsIHRhZywgZGVmYXVsdD1Ob25lKToKICAgIHJldHVybiBzZWxmLmdsb2JhbF9zdGF0ZS5nZXQodGFnLnRhZywgZGVmYXVsdCkKCiAgZGVmIHNldF90aW1lcihzZWxmLCB3aW5kb3csIG5hbWUsIHRpbWVfZG9tYWluLCB0aW1lc3RhbXApOgogICAgc2VsZi50aW1lcnNbd2luZG93XVsobmFtZSwgdGltZV9kb21haW4pXSA9IHRpbWVzdGFtcAoKICBkZWYgY2xlYXJfdGltZXIoc2VsZiwgd2luZG93LCBuYW1lLCB0aW1lX2RvbWFpbik6CiAgICBzZWxmLnRpbWVyc1t3aW5kb3ddLnBvcCgobmFtZSwgdGltZV9kb21haW4pLCBOb25lKQogICAgaWYgbm90IHNlbGYudGltZXJzW3dpbmRvd106CiAgICAgIGRlbCBzZWxmLnRpbWVyc1t3aW5kb3ddCgogIGRlZiBnZXRfd2luZG93KHNlbGYsIHdpbmRvd19pZCk6CiAgICByZXR1cm4gd2luZG93X2lkCgogIGRlZiBhZGRfc3RhdGUoc2VsZiwgd2luZG93LCB0YWcsIHZhbHVlKToKICAgIGlmIHNlbGYuZGVmZW5zaXZlX2NvcHk6CiAgICAgIHZhbHVlID0gY29weS5kZWVwY29weSh2YWx1ZSkKICAgIGlmIGlzaW5zdGFuY2UodGFnLCBfVmFsdWVTdGF0ZVRhZyk6CiAgICAgIHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXSA9IHZhbHVlCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZyk6CiAgICAgICMgVE9ETyhyb2JlcnR3Yik6IFN0b3JlIG1lcmdlZCBhY2N1bXVsYXRvcnMuCiAgICAgIHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXS5hcHBlbmQodmFsdWUpCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfTGlzdFN0YXRlVGFnKToKICAgICAgc2VsZi5zdGF0ZVt3aW5kb3ddW3RhZy50YWddLmFwcGVuZCh2YWx1ZSkKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9TZXRTdGF0ZVRhZyk6CiAgICAgIHNlbGYuc3RhdGVbd2luZG93XVt0YWcudGFnXS5hcHBlbmQodmFsdWUpCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnKToKICAgICAgc2VsZi5zdGF0ZVt3aW5kb3ddW3RhZy50YWddLmFwcGVuZCh2YWx1ZSkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdGFnLicsIHRhZykKCiAgZGVmIGdldF9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICB2YWx1ZXMgPSBzZWxmLnN0YXRlW3dpbmRvd11bdGFnLnRhZ10KICAgIGlmIGlzaW5zdGFuY2UodGFnLCBfVmFsdWVTdGF0ZVRhZyk6CiAgICAgIHJldHVybiB2YWx1ZXMKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnKToKICAgICAgcmV0dXJuIHRhZy5jb21iaW5lX2ZuLmFwcGx5KHZhbHVlcykKICAgIGVsaWYgaXNpbnN0YW5jZSh0YWcsIF9MaXN0U3RhdGVUYWcpOgogICAgICByZXR1cm4gdmFsdWVzCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfU2V0U3RhdGVUYWcpOgogICAgICByZXR1cm4gdmFsdWVzCiAgICBlbGlmIGlzaW5zdGFuY2UodGFnLCBfV2F0ZXJtYXJrSG9sZFN0YXRlVGFnKToKICAgICAgcmV0dXJuIHRhZy50aW1lc3RhbXBfY29tYmluZXJfaW1wbC5jb21iaW5lX2FsbCh2YWx1ZXMpCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHRhZy4nLCB0YWcpCgogIGRlZiBjbGVhcl9zdGF0ZShzZWxmLCB3aW5kb3csIHRhZyk6CiAgICBzZWxmLnN0YXRlW3dpbmRvd10ucG9wKHRhZy50YWcsIE5vbmUpCiAgICBpZiBub3Qgc2VsZi5zdGF0ZVt3aW5kb3ddOgogICAgICBzZWxmLnN0YXRlLnBvcCh3aW5kb3csIE5vbmUpCgogIGRlZiBnZXRfdGltZXJzKAogICAgICBzZWxmLCBjbGVhcj1GYWxzZSwgd2F0ZXJtYXJrPU1BWF9USU1FU1RBTVAsIHByb2Nlc3NpbmdfdGltZT1Ob25lKToKICAgICIiIkdldHMgZXhwaXJlZCB0aW1lcnMgYW5kIHJlcG9ydHMgaWYgdGhlcmUKICAgIGFyZSBhbnkgcmVhbHRpbWUgdGltZXJzIHNldCBwZXIgc3RhdGUuCgogICAgRXhwaXJhdGlvbiBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSB3YXRlcm1hcmsgZm9yIGV2ZW50LXRpbWUgdGltZXJzLAogICAgYW5kIGFnYWluc3QgYSB3YWxsIGNsb2NrIGZvciBwcm9jZXNzaW5nLXRpbWUgdGltZXJzLgogICAgIiIiCiAgICBleHBpcmVkID0gW10KICAgIGhhc19yZWFsdGltZV90aW1lciA9IEZhbHNlCiAgICBmb3Igd2luZG93LCB0aW1lcnMgaW4gbGlzdChzZWxmLnRpbWVycy5pdGVtcygpKToKICAgICAgZm9yIChuYW1lLCB0aW1lX2RvbWFpbiksIHRpbWVzdGFtcCBpbiBsaXN0KHRpbWVycy5pdGVtcygpKToKICAgICAgICBpZiB0aW1lX2RvbWFpbiA9PSBUaW1lRG9tYWluLlJFQUxfVElNRToKICAgICAgICAgIHRpbWVfbWFya2VyID0gcHJvY2Vzc2luZ190aW1lCiAgICAgICAgICBoYXNfcmVhbHRpbWVfdGltZXIgPSBUcnVlCiAgICAgICAgZWxpZiB0aW1lX2RvbWFpbiA9PSBUaW1lRG9tYWluLldBVEVSTUFSSzoKICAgICAgICAgIHRpbWVfbWFya2VyID0gd2F0ZXJtYXJrCiAgICAgICAgZWxzZToKICAgICAgICAgIF9MT0dHRVIuZXJyb3IoCiAgICAgICAgICAgICAgJ1RpbWVEb21haW4gZXJyb3I6IE5vIHRpbWVycyBkZWZpbmVkIGZvciB0aW1lIGRvbWFpbiAlcy4nLAogICAgICAgICAgICAgIHRpbWVfZG9tYWluKQogICAgICAgIGlmIHRpbWVzdGFtcCA8PSB0aW1lX21hcmtlcjoKICAgICAgICAgIGV4cGlyZWQuYXBwZW5kKCh3aW5kb3csIChuYW1lLCB0aW1lX2RvbWFpbiwgdGltZXN0YW1wKSkpCiAgICAgICAgICBpZiBjbGVhcjoKICAgICAgICAgICAgZGVsIHRpbWVyc1sobmFtZSwgdGltZV9kb21haW4pXQogICAgICBpZiBub3QgdGltZXJzIGFuZCBjbGVhcjoKICAgICAgICBkZWwgc2VsZi50aW1lcnNbd2luZG93XQogICAgcmV0dXJuIGV4cGlyZWQsIGhhc19yZWFsdGltZV90aW1lcgoKICBkZWYgZ2V0X2FuZF9jbGVhcl90aW1lcnMoc2VsZiwgd2F0ZXJtYXJrPU1BWF9USU1FU1RBTVApOgogICAgcmV0dXJuIHNlbGYuZ2V0X3RpbWVycyhjbGVhcj1UcnVlLCB3YXRlcm1hcms9d2F0ZXJtYXJrKVswXQoKICBkZWYgZ2V0X2VhcmxpZXN0X2hvbGQoc2VsZik6CiAgICBlYXJsaWVzdF9ob2xkID0gTUFYX1RJTUVTVEFNUAogICAgZm9yIHVudXNlZF93aW5kb3csIHRhZ2dlZF9zdGF0ZXMgaW4gaXRlcml0ZW1zKHNlbGYuc3RhdGUpOgogICAgICAjIFRPRE8oQkVBTS0yNTE5KTogY3VycmVudGx5LCB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgd2F0ZXJtYXJrIGhvbGQgdGFnIGlzCiAgICAgICMgbmFtZWQgIndhdGVybWFyayIuICBUaGlzIGlzIGN1cnJlbnRseSBvbmx5IHRydWUgYmVjYXVzZSB0aGUgb25seSBwbGFjZQogICAgICAjIHdhdGVybWFyayBob2xkcyBhcmUgc2V0IGlzIGluIHRoZSBHZW5lcmFsVHJpZ2dlckRyaXZlciwgd2hlcmUgd2UgdXNlCiAgICAgICMgdGhpcyBuYW1lLiAgV2Ugc2hvdWxkIGZpeCB0aGlzIGJ5IGFsbG93aW5nIGVudW1lcmF0aW9uIG9mIHRoZSB0YWcgdHlwZXMKICAgICAgIyB1c2VkIGluIGFkZGluZyBzdGF0ZS4KICAgICAgaWYgJ3dhdGVybWFyaycgaW4gdGFnZ2VkX3N0YXRlcyBhbmQgdGFnZ2VkX3N0YXRlc1snd2F0ZXJtYXJrJ106CiAgICAgICAgaG9sZCA9IG1pbih0YWdnZWRfc3RhdGVzWyd3YXRlcm1hcmsnXSkgLSBUSU1FX0dSQU5VTEFSSVRZCiAgICAgICAgZWFybGllc3RfaG9sZCA9IG1pbihlYXJsaWVzdF9ob2xkLCBob2xkKQogICAgcmV0dXJuIGVhcmxpZXN0X2hvbGQKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgc3RhdGVfc3RyID0gJ1xuJy5qb2luKAogICAgICAgICclczogJXMnICUgKGtleSwgZGljdChzdGF0ZSkpIGZvciBrZXksIHN0YXRlIGluIHNlbGYuc3RhdGUuaXRlbXMoKSkKICAgIHJldHVybiAndGltZXJzOiAlc1xuc3RhdGU6ICVzJyAlIChkaWN0KHNlbGYudGltZXJzKSwgc3RhdGVfc3RyKQqUfZQojBBBY2N1bXVsYXRpb25Nb2RllGpdMQEAS0pLTYeUjBJfU3RhdGVUYWcuX19pbml0X1+UalYxAQBLVktXh5SMCV9TdGF0ZVRhZ5RqXTEBAEtSS1eHlIwXX1ZhbHVlU3RhdGVUYWcuX19yZXByX1+UalYxAQBLXEtdh5SMGl9WYWx1ZVN0YXRlVGFnLndpdGhfcHJlZml4lGpWMQEAS19LYIeUjA5fVmFsdWVTdGF0ZVRhZ5RqXTEBAEtaS2CHlIwVX1NldFN0YXRlVGFnLl9fcmVwcl9flGpWMQEAS2VLZoeUjBhfU2V0U3RhdGVUYWcud2l0aF9wcmVmaXiUalYxAQBLaEtph5SMDF9TZXRTdGF0ZVRhZ5RqXTEBAEtjS2mHlIwgX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcuX19pbml0X1+UalYxAQBLc0t5h5SMIF9Db21iaW5pbmdWYWx1ZVN0YXRlVGFnLl9fcmVwcl9flGpWMQEAS3tLfIeUjCNfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZy53aXRoX3ByZWZpeJRqVjEBAEt+S3+HlIxAX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcud2l0aG91dF9leHRyYWN0aW9uLk5vRXh0cmFjdGlvbkNvbWJpbmVGbpRqXTEBAEuCS4eHlIwqX0NvbWJpbmluZ1ZhbHVlU3RhdGVUYWcud2l0aG91dF9leHRyYWN0aW9ulGpWMQEAS4FLiYeUjBdfQ29tYmluaW5nVmFsdWVTdGF0ZVRhZ5RqXTEBAEtsS4mHlIwWX0xpc3RTdGF0ZVRhZy5fX3JlcHJfX5RqVjEBAEuOS4+HlIwZX0xpc3RTdGF0ZVRhZy53aXRoX3ByZWZpeJRqVjEBAEuRS5KHlIwNX0xpc3RTdGF0ZVRhZ5RqXTEBAEuMS5KHlIwfX1dhdGVybWFya0hvbGRTdGF0ZVRhZy5fX2luaXRfX5RqVjEBAEuWS5iHlIwfX1dhdGVybWFya0hvbGRTdGF0ZVRhZy5fX3JlcHJfX5RqVjEBAEuaS5yHlIwiX1dhdGVybWFya0hvbGRTdGF0ZVRhZy53aXRoX3ByZWZpeJRqVjEBAEueS6CHlIwWX1dhdGVybWFya0hvbGRTdGF0ZVRhZ5RqXTEBAEuVS6CHlJU5IwEAAAAAAIwUVHJpZ2dlckZuLm9uX2VsZW1lbnSUalYxAQBLqku0h5SMElRyaWdnZXJGbi5vbl9tZXJnZZRqVjEBAEu2S8CHlIwVVHJpZ2dlckZuLnNob3VsZF9maXJllGpWMQEAS8JL1IeUjBlUcmlnZ2VyRm4uaGFzX29udGltZV9wYW5llGpWMQEAS9ZL3oeUjBFUcmlnZ2VyRm4ub25fZmlyZZRqVjEBAEvgS+2HlIwPVHJpZ2dlckZuLnJlc2V0lGpWMQEAS+9L8oeUjBlUcmlnZ2VyRm4uZnJvbV9ydW5uZXJfYXBplGpWMQEAS/dNBgGHlIwXVHJpZ2dlckZuLnRvX3J1bm5lcl9hcGmUalYxAQBNCAFNCgGHlIwQVHJpZ2dlckZuLl9fbmVfX5RqVjEBAE0MAU0OAYeUjAlUcmlnZ2VyRm6Ual0xAQBLpU0OAYeUjBdEZWZhdWx0VHJpZ2dlci5fX2luaXRfX5RqVjEBAE0TAU0UAYeUjBdEZWZhdWx0VHJpZ2dlci5fX3JlcHJfX5RqVjEBAE0WAU0XAYeUjBlEZWZhdWx0VHJpZ2dlci5vbl9lbGVtZW50lGpWMQEATRkBTRoBh5SMF0RlZmF1bHRUcmlnZ2VyLm9uX21lcmdllGpWMQEATRwBTSABh5SMGkRlZmF1bHRUcmlnZ2VyLnNob3VsZF9maXJllGpWMQEATSIBTScBh5SMFkRlZmF1bHRUcmlnZ2VyLm9uX2ZpcmWUalYxAQBNKQFNKgGHlIwURGVmYXVsdFRyaWdnZXIucmVzZXSUalYxAQBNLAFNLQGHlIwVRGVmYXVsdFRyaWdnZXIuX19lcV9flGpWMQEATS8BTTABh5SMF0RlZmF1bHRUcmlnZ2VyLl9faGFzaF9flGpWMQEATTIBTTMBh5SMHkRlZmF1bHRUcmlnZ2VyLmZyb21fcnVubmVyX2FwaZRqVjEBAE01AU03AYeUjBxEZWZhdWx0VHJpZ2dlci50b19ydW5uZXJfYXBplGpWMQEATTkBTTsBh5SMHkRlZmF1bHRUcmlnZ2VyLmhhc19vbnRpbWVfcGFuZZRqVjEBAE09AU0+AYeUjA5EZWZhdWx0VHJpZ2dlcpRqXTEBAE0RAU0+AYeUjBxBZnRlclByb2Nlc3NpbmdUaW1lLl9faW5pdF9flGpWMQEATUYBTUgBh5SMHEFmdGVyUHJvY2Vzc2luZ1RpbWUuX19yZXByX1+UalYxAQBNSgFNSwGHlIweQWZ0ZXJQcm9jZXNzaW5nVGltZS5vbl9lbGVtZW50lGpWMQEATU0BTU8Bh5SMHEFmdGVyUHJvY2Vzc2luZ1RpbWUub25fbWVyZ2WUalYxAQBNUQFNUwGHlIwfQWZ0ZXJQcm9jZXNzaW5nVGltZS5zaG91bGRfZmlyZZRqVjEBAE1VAU1XAYeUjBtBZnRlclByb2Nlc3NpbmdUaW1lLm9uX2ZpcmWUalYxAQBNWQFNWgGHlIwZQWZ0ZXJQcm9jZXNzaW5nVGltZS5yZXNldJRqVjEBAE1cAU1dAYeUjCNBZnRlclByb2Nlc3NpbmdUaW1lLmZyb21fcnVubmVyX2FwaZRqVjEBAE1fAU1kAYeUjCFBZnRlclByb2Nlc3NpbmdUaW1lLnRvX3J1bm5lcl9hcGmUalYxAQBNZgFNbAGHlIwjQWZ0ZXJQcm9jZXNzaW5nVGltZS5oYXNfb250aW1lX3BhbmWUalYxAQBNbgFNbwGHlIwTQWZ0ZXJQcm9jZXNzaW5nVGltZZRqXTEBAE1BAU1vAYeUjBdBZnRlcldhdGVybWFyay5fX2luaXRfX5RqVjEBAE19AU1/AYeUjBdBZnRlcldhdGVybWFyay5fX3JlcHJfX5RqVjEBAE2BAU2HAYeUjBZBZnRlcldhdGVybWFyay5pc19sYXRllGpWMQEATYkBTYoBh5SMGUFmdGVyV2F0ZXJtYXJrLm9uX2VsZW1lbnSUalYxAQBNjAFNkgGHlIwXQWZ0ZXJXYXRlcm1hcmsub25fbWVyZ2WUalYxAQBNlAFNoQGHlIwaQWZ0ZXJXYXRlcm1hcmsuc2hvdWxkX2ZpcmWUalYxAQBNowFNrwGHlIwWQWZ0ZXJXYXRlcm1hcmsub25fZmlyZZRqVjEBAE2xAU26AYeUjBRBZnRlcldhdGVybWFyay5yZXNldJRqVjEBAE28AU3CAYeUjBVBZnRlcldhdGVybWFyay5fX2VxX1+UalYxAQBNxAFNxwGHlIwXQWZ0ZXJXYXRlcm1hcmsuX19oYXNoX1+UalYxAQBNyQFNygGHlIweQWZ0ZXJXYXRlcm1hcmsuZnJvbV9ydW5uZXJfYXBplGpWMQEATcwBTdQBh5SMHEFmdGVyV2F0ZXJtYXJrLnRvX3J1bm5lcl9hcGmUalYxAQBN1gFN3QGHlIweQWZ0ZXJXYXRlcm1hcmsuaGFzX29udGltZV9wYW5llGpWMQEATd8BTeABh5SMDkFmdGVyV2F0ZXJtYXJrlGpdMQEATXIBTeABh5SME0FmdGVyQ291bnQuX19pbml0X1+UalYxAQBN6wFN7gGHlIwTQWZ0ZXJDb3VudC5fX3JlcHJfX5RqVjEBAE3wAU3xAYeUjBFBZnRlckNvdW50Ll9fZXFfX5RqVjEBAE3zAU30AYeUjBNBZnRlckNvdW50Ll9faGFzaF9flGpWMQEATfYBTfcBh5SMFUFmdGVyQ291bnQub25fZWxlbWVudJRqVjEBAE35AU36AYeUjBNBZnRlckNvdW50Lm9uX21lcmdllGpWMQEATfwBTf4Bh5SMFkFmdGVyQ291bnQuc2hvdWxkX2ZpcmWUalYxAQBNAAJNAQKHlIwSQWZ0ZXJDb3VudC5vbl9maXJllGpWMQEATQMCTQQCh5SMEEFmdGVyQ291bnQucmVzZXSUalYxAQBNBgJNBwKHlIwaQWZ0ZXJDb3VudC5mcm9tX3J1bm5lcl9hcGmUalYxAQBNCQJNCwKHlIwYQWZ0ZXJDb3VudC50b19ydW5uZXJfYXBplGpWMQEATQ0CTRACh5SMGkFmdGVyQ291bnQuaGFzX29udGltZV9wYW5llGpWMQEATRICTRMCh5SMCkFmdGVyQ291bnSUal0xAQBN4wFNEwKHlIwTUmVwZWF0ZWRseS5fX2luaXRfX5RqVjEBAE0YAk0ZAoeUjBNSZXBlYXRlZGx5Ll9fcmVwcl9flGpWMQEATRsCTRwCh5SMEVJlcGVhdGVkbHkuX19lcV9flGpWMQEATR4CTR8Ch5SME1JlcGVhdGVkbHkuX19oYXNoX1+UalYxAQBNIQJNIgKHlIwVUmVwZWF0ZWRseS5vbl9lbGVtZW50lGpWMQEATSQCTSUCh5SME1JlcGVhdGVkbHkub25fbWVyZ2WUalYxAQBNJwJNKAKHlIwWUmVwZWF0ZWRseS5zaG91bGRfZmlyZZRqVjEBAE0qAk0rAoeUjBJSZXBlYXRlZGx5Lm9uX2ZpcmWUalYxAQBNLQJNMAKHlIwQUmVwZWF0ZWRseS5yZXNldJRqVjEBAE0yAk0zAoeUjBpSZXBlYXRlZGx5LmZyb21fcnVubmVyX2FwaZRqVjEBAE01Ak04AoeUjBhSZXBlYXRlZGx5LnRvX3J1bm5lcl9hcGmUalYxAQBNOgJNPQKHlIwaUmVwZWF0ZWRseS5oYXNfb250aW1lX3BhbmWUalYxAQBNPwJNQAKHlIwKUmVwZWF0ZWRseZRqXTEBAE0WAk1AAoeUjBtfUGFyYWxsZWxUcmlnZ2VyRm4uX19pbml0X1+UalYxAQBNRQJNRgKHlIwbX1BhcmFsbGVsVHJpZ2dlckZuLl9fcmVwcl9flGpWMQEATUgCTUoCh5SMGV9QYXJhbGxlbFRyaWdnZXJGbi5fX2VxX1+UalYxAQBNTAJNTQKHlIwbX1BhcmFsbGVsVHJpZ2dlckZuLl9faGFzaF9flGpWMQEATU8CTVACh5SMHV9QYXJhbGxlbFRyaWdnZXJGbi5jb21iaW5lX29wlGpWMQEATVICTVQCh5SMHV9QYXJhbGxlbFRyaWdnZXJGbi5vbl9lbGVtZW50lGpWMQEATVYCTVgCh5SMG19QYXJhbGxlbFRyaWdnZXJGbi5vbl9tZXJnZZRqVjEBAE1aAk1dAoeUjB5fUGFyYWxsZWxUcmlnZ2VyRm4uc2hvdWxkX2ZpcmWUalYxAQBNXwJNZQKHlIwaX1BhcmFsbGVsVHJpZ2dlckZuLm9uX2ZpcmWUalYxAQBNZwJNcAKHlIwYX1BhcmFsbGVsVHJpZ2dlckZuLnJlc2V0lGpWMQEATXICTXQCh5SMH19QYXJhbGxlbFRyaWdnZXJGbi5fc3ViX2NvbnRleHSUalYxAQBNdgJNeAKHlIwiX1BhcmFsbGVsVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaZRqVjEBAE16Ak2DAoeUjCBfUGFyYWxsZWxUcmlnZ2VyRm4udG9fcnVubmVyX2FwaZRqVjEBAE2FAk2SAoeUjCJfUGFyYWxsZWxUcmlnZ2VyRm4uaGFzX29udGltZV9wYW5llGpWMQEATZQCTZUCh5SMEl9QYXJhbGxlbFRyaWdnZXJGbpRqXTEBAE1DAk2VAoeUjAhBZnRlckFueZRqXTEBAE2YAk2dAoeUjAhBZnRlckFsbJRqXTEBAE2gAk2lAoeUjBJBZnRlckVhY2guX19pbml0X1+UalYxAQBNrQJNrgKHlIwSQWZ0ZXJFYWNoLl9fcmVwcl9flGpWMQEATbACTbICh5SMEEFmdGVyRWFjaC5fX2VxX1+UalYxAQBNtAJNtQKHlIwSQWZ0ZXJFYWNoLl9faGFzaF9flGpWMQEATbcCTbgCh5SMFEFmdGVyRWFjaC5vbl9lbGVtZW50lGpWMQEATboCTb4Ch5SMEkFmdGVyRWFjaC5vbl9tZXJnZZRqVjEBAE3AAk3HAoeUjBVBZnRlckVhY2guc2hvdWxkX2ZpcmWUalYxAQBNyQJNzQKHlIwRQWZ0ZXJFYWNoLm9uX2ZpcmWUalYxAQBNzwJN1wKHlIwPQWZ0ZXJFYWNoLnJlc2V0lGpWMQEATdkCTdwCh5SMFkFmdGVyRWFjaC5fc3ViX2NvbnRleHSUalYxAQBN3gJN4AKHlIwZQWZ0ZXJFYWNoLmZyb21fcnVubmVyX2FwaZRqVjEBAE3iAk3oAoeUjBdBZnRlckVhY2gudG9fcnVubmVyX2FwaZRqVjEBAE3qAk3wAoeUjBlBZnRlckVhY2guaGFzX29udGltZV9wYW5llGpWMQEATfICTfMCh5SMCUFmdGVyRWFjaJRqXTEBAE2oAk3zAoeUjBlPckZpbmFsbHkuZnJvbV9ydW5uZXJfYXBplGpWMQEATfcCTf0Ch5SMF09yRmluYWxseS50b19ydW5uZXJfYXBplGpWMQEATf8CTQQDh5SMCU9yRmluYWxseZRqXTEBAE32Ak0EA4eUjBdUcmlnZ2VyQ29udGV4dC5fX2luaXRfX5RqVjEBAE0IA00LA4eUjB9UcmlnZ2VyQ29udGV4dC5nZXRfY3VycmVudF90aW1llGpWMQEATQ0DTQ4Dh5SMGFRyaWdnZXJDb250ZXh0LnNldF90aW1lcpRqVjEBAE0QA00RA4eUjBpUcmlnZ2VyQ29udGV4dC5jbGVhcl90aW1lcpRqVjEBAE0TA00UA4eUjBhUcmlnZ2VyQ29udGV4dC5hZGRfc3RhdGWUalYxAQBNFgNNFwOHlIwYVHJpZ2dlckNvbnRleHQuZ2V0X3N0YXRllGpWMQEATRkDTRoDh5SMGlRyaWdnZXJDb250ZXh0LmNsZWFyX3N0YXRllGpWMQEATRwDTR0Dh5SMDlRyaWdnZXJDb250ZXh0lGpdMQEATQcDTR0Dh5SMFk5lc3RlZENvbnRleHQuX19pbml0X1+UalYxAQBNIgNNJAOHlIweTmVzdGVkQ29udGV4dC5nZXRfY3VycmVudF90aW1llGpWMQEATSYDTScDh5SMF05lc3RlZENvbnRleHQuc2V0X3RpbWVylGpWMQEATSkDTSoDh5SMGU5lc3RlZENvbnRleHQuY2xlYXJfdGltZXKUalYxAQBNLANNLQOHlIwXTmVzdGVkQ29udGV4dC5hZGRfc3RhdGWUalYxAQBNLwNNMAOHlIwXTmVzdGVkQ29udGV4dC5nZXRfc3RhdGWUalYxAQBNMgNNMwOHlIwZTmVzdGVkQ29udGV4dC5jbGVhcl9zdGF0ZZRqVjEBAE01A002A4eUjA1OZXN0ZWRDb250ZXh0lGpdMQEATSADTTYDh5SMFVNpbXBsZVN0YXRlLnNldF90aW1lcpRqVjEBAE0/A01BA4eUjBZTaW1wbGVTdGF0ZS5nZXRfd2luZG93lGpWMQEATUMDTUUDh5SMF1NpbXBsZVN0YXRlLmNsZWFyX3RpbWVylGpWMQEATUcDTUkDh5SMFVNpbXBsZVN0YXRlLmFkZF9zdGF0ZZRqVjEBAE1LA01NA4eUjBVTaW1wbGVTdGF0ZS5nZXRfc3RhdGWUalYxAQBNTwNNUQOHlIwXU2ltcGxlU3RhdGUuY2xlYXJfc3RhdGWUalYxAQBNUwNNVQOHlIwOU2ltcGxlU3RhdGUuYXSUalYxAQBNVwNNWAOHlIwLU2ltcGxlU3RhdGWUal0xAQBNOgNNWAOHlIweVW5tZXJnZWRTdGF0ZS5zZXRfZ2xvYmFsX3N0YXRllGpWMQEATWADTWIDh5SMHlVubWVyZ2VkU3RhdGUuZ2V0X2dsb2JhbF9zdGF0ZZRqVjEBAE1kA01mA4eUjA1Vbm1lcmdlZFN0YXRllGpdMQEATVsDTWYDh5SMHk1lcmdlYWJsZVN0YXRlQWRhcHRlci5fX2luaXRfX5RqVjEBAE1zA012A4eUjB9NZXJnZWFibGVTdGF0ZUFkYXB0ZXIuc2V0X3RpbWVylGpWMQEATXgDTXkDh5SMIU1lcmdlYWJsZVN0YXRlQWRhcHRlci5jbGVhcl90aW1lcpRqVjEBAE17A019A4eUjB9NZXJnZWFibGVTdGF0ZUFkYXB0ZXIuYWRkX3N0YXRllGpWMQEATX8DTYUDh5SMH01lcmdlYWJsZVN0YXRlQWRhcHRlci5nZXRfc3RhdGWUalYxAQBNhwNNmwOHlIwhTWVyZ2VhYmxlU3RhdGVBZGFwdGVyLmNsZWFyX3N0YXRllGpWMQEATZ0DTaIDh5SMG01lcmdlYWJsZVN0YXRlQWRhcHRlci5tZXJnZZRqVjEBAE2kA02tA4eUjCNNZXJnZWFibGVTdGF0ZUFkYXB0ZXIua25vd25fd2luZG93c5RqVjEBAE2vA02wA4eUjCBNZXJnZWFibGVTdGF0ZUFkYXB0ZXIuZ2V0X3dpbmRvd5RqVjEBAE2yA022A4eUjB1NZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX2dldF9pZJRqVjEBAE24A02/A4eUjB5NZXJnZWFibGVTdGF0ZUFkYXB0ZXIuX2dldF9pZHOUalYxAQBNwQNNwgOHlIwnTWVyZ2VhYmxlU3RhdGVBZGFwdGVyLl9nZXRfbmV4dF9jb3VudGVylGpWMQEATcQDTcoDh5SMKU1lcmdlYWJsZVN0YXRlQWRhcHRlci5fcGVyc2lzdF93aW5kb3dfaWRzlGpWMQEATcwDTc0Dh5SMHk1lcmdlYWJsZVN0YXRlQWRhcHRlci5fX3JlcHJfX5RqVjEBAE3PA03RA4eUjBVNZXJnZWFibGVTdGF0ZUFkYXB0ZXKUal0xAQBNbANN0QOHlIwVY3JlYXRlX3RyaWdnZXJfZHJpdmVylGpWMQEATdQDTecDh5SMHlRyaWdnZXJEcml2ZXIucHJvY2Vzc19lbGVtZW50c5RqVjEBAE3sA03zA4eUjBtUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfdGltZXKUalYxAQBN9QNN/gOHlIwgVHJpZ2dlckRyaXZlci5wcm9jZXNzX2VudGlyZV9rZXmUalYxAQBNAARNFASHlIwNVHJpZ2dlckRyaXZlcpRqXTEBAE3qA00UBIeUjBpfVW53aW5kb3dlZFZhbHVlcy5fX2luaXRfX5RqVjEBAE0ZBE0bBIeUjBpfVW53aW5kb3dlZFZhbHVlcy5fX2l0ZXJfX5RqVjEBAE0dBE0hBIeUjBpfVW53aW5kb3dlZFZhbHVlcy5fX3JlcHJfX5RqVjEBAE0jBE0kBIeUjBxfVW53aW5kb3dlZFZhbHVlcy5fX3JlZHVjZV9flGpWMQEATSYETScEh5SMGF9VbndpbmRvd2VkVmFsdWVzLl9fZXFfX5RqVjEBAE0pBE0uBIeUjBpfVW53aW5kb3dlZFZhbHVlcy5fX2hhc2hfX5RqVjEBAE0wBE0xBIeUjBhfVW53aW5kb3dlZFZhbHVlcy5fX25lX1+UalYxAQBNMwRNNQSHlIwRX1Vud2luZG93ZWRWYWx1ZXOUal0xAQBNFwRNNQSHlIwpQmF0Y2hHbG9iYWxUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfZWxlbWVudHOUalYxAQBNRwRNUQSHlIwmQmF0Y2hHbG9iYWxUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfdGltZXKUalYxAQBNUwRNWwSHlIwYQmF0Y2hHbG9iYWxUcmlnZ2VyRHJpdmVylGpdMQEATTwETVsEh5SMH0NvbWJpbmluZ1RyaWdnZXJEcml2ZXIuX19pbml0X1+UalYxAQBNYARNYgSHlIwnQ29tYmluaW5nVHJpZ2dlckRyaXZlci5wcm9jZXNzX2VsZW1lbnRzlGpWMQEATWQETW0Eh5SMJENvbWJpbmluZ1RyaWdnZXJEcml2ZXIucHJvY2Vzc190aW1lcpRqVjEBAE1vBE16BIeUjBZDb21iaW5pbmdUcmlnZ2VyRHJpdmVylGpdMQEATV4ETXoEh5SMHUdlbmVyYWxUcmlnZ2VyRHJpdmVyLl9faW5pdF9flGpWMQEATYgETZQEh5SMP0dlbmVyYWxUcmlnZ2VyRHJpdmVyLnByb2Nlc3NfZWxlbWVudHMuVHJpZ2dlck1lcmdlQ29udGV4dC5tZXJnZZRqVjEBAE2wBE23BIeUjDlHZW5lcmFsVHJpZ2dlckRyaXZlci5wcm9jZXNzX2VsZW1lbnRzLlRyaWdnZXJNZXJnZUNvbnRleHSUal0xAQBNrwRNtwSHlIwlR2VuZXJhbFRyaWdnZXJEcml2ZXIucHJvY2Vzc19lbGVtZW50c5RqVjEBAE2WBE3iBIeUjCJHZW5lcmFsVHJpZ2dlckRyaXZlci5wcm9jZXNzX3RpbWVylGpWMQEATeQETQIFh5SMHEdlbmVyYWxUcmlnZ2VyRHJpdmVyLl9vdXRwdXSUalYxAQBNBAVNNQWHlIwUR2VuZXJhbFRyaWdnZXJEcml2ZXKUal0xAQBNfQRNNQWHlIweSW5NZW1vcnlVbm1lcmdlZFN0YXRlLl9faW5pdF9flGpWMQEATT0FTUIFh5SMGkluTWVtb3J5VW5tZXJnZWRTdGF0ZS5jb3B5lGpWMQEATUQFTUsFh5SMJkluTWVtb3J5VW5tZXJnZWRTdGF0ZS5zZXRfZ2xvYmFsX3N0YXRllGpWMQEATU0FTVEFh5SMJkluTWVtb3J5VW5tZXJnZWRTdGF0ZS5nZXRfZ2xvYmFsX3N0YXRllGpWMQEATVMFTVQFh5SMH0luTWVtb3J5VW5tZXJnZWRTdGF0ZS5zZXRfdGltZXKUalYxAQBNVgVNVwWHlIwhSW5NZW1vcnlVbm1lcmdlZFN0YXRlLmNsZWFyX3RpbWVylGpWMQEATVkFTVwFh5SMIEluTWVtb3J5VW5tZXJnZWRTdGF0ZS5nZXRfd2luZG93lGpWMQEATV4FTV8Fh5SMH0luTWVtb3J5VW5tZXJnZWRTdGF0ZS5hZGRfc3RhdGWUalYxAQBNYQVNcAWHlIwfSW5NZW1vcnlVbm1lcmdlZFN0YXRlLmdldF9zdGF0ZZRqVjEBAE1yBU1/BYeUjCFJbk1lbW9yeVVubWVyZ2VkU3RhdGUuY2xlYXJfc3RhdGWUalYxAQBNgQVNhAWHlIwgSW5NZW1vcnlVbm1lcmdlZFN0YXRlLmdldF90aW1lcnOUalYxAQBNhgVNoQWHlIwqSW5NZW1vcnlVbm1lcmdlZFN0YXRlLmdldF9hbmRfY2xlYXJfdGltZXJzlGpWMQEATaMFTaQFh5SMJ0luTWVtb3J5VW5tZXJnZWRTdGF0ZS5nZXRfZWFybGllc3RfaG9sZJRqVjEBAE2mBU2xBYeUjB5Jbk1lbW9yeVVubWVyZ2VkU3RhdGUuX19yZXByX1+UalYxAQBNswVNtgWHlIwVSW5NZW1vcnlVbm1lcmdlZFN0YXRllGpdMQEATTgFTbYFh5R1fZQojBBBY2N1bXVsYXRpb25Nb2RllGoFBAAAjAlUcmlnZ2VyRm6UagUEAACMFFRyaWdnZXJGbi5vbl9lbGVtZW50lGoFBAAAjBJUcmlnZ2VyRm4ub25fbWVyZ2WUagUEAACMFVRyaWdnZXJGbi5zaG91bGRfZmlyZZRqBQQAAIwZVHJpZ2dlckZuLmhhc19vbnRpbWVfcGFuZZRqBQQAAIwRVHJpZ2dlckZuLm9uX2ZpcmWUagUEAACMD1RyaWdnZXJGbi5yZXNldJRqBQQAAIwZVHJpZ2dlckZuLmZyb21fcnVubmVyX2FwaZRqBQQAAIwXVHJpZ2dlckZuLnRvX3J1bm5lcl9hcGmUagUEAACMDkRlZmF1bHRUcmlnZ2VylGoFBAAAjBlEZWZhdWx0VHJpZ2dlci5vbl9lbGVtZW50lGoFBAAAjBdEZWZhdWx0VHJpZ2dlci5vbl9tZXJnZZRqBQQAAIwaRGVmYXVsdFRyaWdnZXIuc2hvdWxkX2ZpcmWUagUEAACMFkRlZmF1bHRUcmlnZ2VyLm9uX2ZpcmWUagUEAACMFERlZmF1bHRUcmlnZ2VyLnJlc2V0lGoFBAAAjB5EZWZhdWx0VHJpZ2dlci5mcm9tX3J1bm5lcl9hcGmUagUEAACMHERlZmF1bHRUcmlnZ2VyLnRvX3J1bm5lcl9hcGmUagUEAACMHkRlZmF1bHRUcmlnZ2VyLmhhc19vbnRpbWVfcGFuZZRqBQQAAIwTQWZ0ZXJQcm9jZXNzaW5nVGltZZRqBQQAAIweQWZ0ZXJQcm9jZXNzaW5nVGltZS5vbl9lbGVtZW50lGoFBAAAjBxBZnRlclByb2Nlc3NpbmdUaW1lLm9uX21lcmdllGoFBAAAjB9BZnRlclByb2Nlc3NpbmdUaW1lLnNob3VsZF9maXJllGoFBAAAjBtBZnRlclByb2Nlc3NpbmdUaW1lLm9uX2ZpcmWUagUEAACMGUFmdGVyUHJvY2Vzc2luZ1RpbWUucmVzZXSUagUEAACMI0FmdGVyUHJvY2Vzc2luZ1RpbWUuZnJvbV9ydW5uZXJfYXBplGoFBAAAjCFBZnRlclByb2Nlc3NpbmdUaW1lLnRvX3J1bm5lcl9hcGmUagUEAACMI0FmdGVyUHJvY2Vzc2luZ1RpbWUuaGFzX29udGltZV9wYW5llGoFBAAAjA5BZnRlcldhdGVybWFya5RqBQQAAIwWQWZ0ZXJXYXRlcm1hcmsuaXNfbGF0ZZRqBQQAAIwZQWZ0ZXJXYXRlcm1hcmsub25fZWxlbWVudJRqBQQAAIwXQWZ0ZXJXYXRlcm1hcmsub25fbWVyZ2WUagUEAACMGkFmdGVyV2F0ZXJtYXJrLnNob3VsZF9maXJllGoFBAAAjBZBZnRlcldhdGVybWFyay5vbl9maXJllGoFBAAAjBRBZnRlcldhdGVybWFyay5yZXNldJRqBQQAAIweQWZ0ZXJXYXRlcm1hcmsuZnJvbV9ydW5uZXJfYXBplGoFBAAAjBxBZnRlcldhdGVybWFyay50b19ydW5uZXJfYXBplGoFBAAAjB5BZnRlcldhdGVybWFyay5oYXNfb250aW1lX3BhbmWUagUEAACMCkFmdGVyQ291bnSUagUEAACMFUFmdGVyQ291bnQub25fZWxlbWVudJRqBQQAAIwTQWZ0ZXJDb3VudC5vbl9tZXJnZZRqBQQAAIwWQWZ0ZXJDb3VudC5zaG91bGRfZmlyZZRqBQQAAIwSQWZ0ZXJDb3VudC5vbl9maXJllGoFBAAAjBBBZnRlckNvdW50LnJlc2V0lGoFBAAAjBpBZnRlckNvdW50LmZyb21fcnVubmVyX2FwaZRqBQQAAIwYQWZ0ZXJDb3VudC50b19ydW5uZXJfYXBplGoFBAAAjBpBZnRlckNvdW50Lmhhc19vbnRpbWVfcGFuZZRqBQQAAIwKUmVwZWF0ZWRseZRqBQQAAIwVUmVwZWF0ZWRseS5vbl9lbGVtZW50lGoFBAAAjBNSZXBlYXRlZGx5Lm9uX21lcmdllGoFBAAAjBZSZXBlYXRlZGx5LnNob3VsZF9maXJllGoFBAAAjBJSZXBlYXRlZGx5Lm9uX2ZpcmWUagUEAACMEFJlcGVhdGVkbHkucmVzZXSUagUEAACMGlJlcGVhdGVkbHkuZnJvbV9ydW5uZXJfYXBplGoFBAAAjBhSZXBlYXRlZGx5LnRvX3J1bm5lcl9hcGmUagUEAACMGlJlcGVhdGVkbHkuaGFzX29udGltZV9wYW5llGoFBAAAjAhBZnRlckFueZRqBQQAAIwIQWZ0ZXJBbGyUagUEAACMCUFmdGVyRWFjaJRqBQQAAIwUQWZ0ZXJFYWNoLm9uX2VsZW1lbnSUagUEAACMEkFmdGVyRWFjaC5vbl9tZXJnZZRqBQQAAIwVQWZ0ZXJFYWNoLnNob3VsZF9maXJllGoFBAAAjBFBZnRlckVhY2gub25fZmlyZZRqBQQAAIwPQWZ0ZXJFYWNoLnJlc2V0lGoFBAAAjBlBZnRlckVhY2guZnJvbV9ydW5uZXJfYXBplGoFBAAAjBdBZnRlckVhY2gudG9fcnVubmVyX2FwaZRqBQQAAIwZQWZ0ZXJFYWNoLmhhc19vbnRpbWVfcGFuZZRqBQQAAIwJT3JGaW5hbGx5lGoFBAAAjBlPckZpbmFsbHkuZnJvbV9ydW5uZXJfYXBplGoFBAAAjBdPckZpbmFsbHkudG9fcnVubmVyX2FwaZRqBQQAAHWMHmFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudHJpZ2dlcpR0lIwIYnVpbHRpbnOUiYwbYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlslChYFp4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiU2ltcGxlIHV0aWxpdHkgUFRyYW5zZm9ybXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBjb250ZXh0bGliCmltcG9ydCByYW5kb20KaW1wb3J0IHJlCmltcG9ydCBzeXMKaW1wb3J0IHRpbWUKaW1wb3J0IHdhcm5pbmdzCmZyb20gYnVpbHRpbnMgaW1wb3J0IGZpbHRlcgpmcm9tIGJ1aWx0aW5zIGltcG9ydCBvYmplY3QKZnJvbSBidWlsdGlucyBpbXBvcnQgcmFuZ2UKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCmZyb20gdHlwaW5nIGltcG9ydCBUWVBFX0NIRUNLSU5HCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKZnJvbSB0eXBpbmcgaW1wb3J0IEl0ZXJhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBMaXN0CmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQpmcm9tIHR5cGluZyBpbXBvcnQgVHlwZVZhcgpmcm9tIHR5cGluZyBpbXBvcnQgVW5pb24KCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCBpdGVydmFsdWVzCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgbG9uZwoKZnJvbSBhcGFjaGVfYmVhbSBpbXBvcnQgY29kZXJzCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLm1ldHJpY3MgaW1wb3J0IE1ldHJpY3MKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCB3aW5kb3cKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvbWJpbmVycyBpbXBvcnQgQ291bnRDb21iaW5lRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IENvbWJpbmVQZXJLZXkKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IERvRm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IEZsYXRNYXAKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IEZsYXR0ZW4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IEdyb3VwQnlLZXkKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IE1hcApmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgUGFyRG8KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLmNvcmUgaW1wb3J0IFdpbmRvd2luZwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgUFRyYW5zZm9ybQpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMucHRyYW5zZm9ybSBpbXBvcnQgcHRyYW5zZm9ybV9mbgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudGltZXV0aWwgaW1wb3J0IFRpbWVEb21haW4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IEFjY3VtdWxhdGlvbk1vZGUKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IEFmdGVyQ291bnQKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnRyaWdnZXIgaW1wb3J0IFJlcGVhdGVkbHkKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLnVzZXJzdGF0ZSBpbXBvcnQgQmFnU3RhdGVTcGVjCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUgaW1wb3J0IENvbWJpbmluZ1ZhbHVlU3RhdGVTcGVjCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51c2Vyc3RhdGUgaW1wb3J0IFRpbWVyU3BlYwpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMudXNlcnN0YXRlIGltcG9ydCBvbl90aW1lcgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93IGltcG9ydCBOb25NZXJnaW5nV2luZG93Rm4KZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wQ29tYmluZXIKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvdyBpbXBvcnQgVGltZXN0YW1wZWRWYWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB3aW5kb3dlZF92YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zIGltcG9ydCBkZXByZWNhdGVkCmZyb20gYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnMgaW1wb3J0IGV4cGVyaW1lbnRhbAoKaWYgVFlQRV9DSEVDS0lORzoKICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBwdmFsdWUKICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMucGlwZWxpbmVfY29udGV4dCBpbXBvcnQgUGlwZWxpbmVDb250ZXh0CgpfX2FsbF9fID0gWwogICAgJ0JhdGNoRWxlbWVudHMnLAogICAgJ0NvR3JvdXBCeUtleScsCiAgICAnRGlzdGluY3QnLAogICAgJ0tleXMnLAogICAgJ0t2U3dhcCcsCiAgICAnUmVnZXgnLAogICAgJ1JlaWZ5JywKICAgICdSZW1vdmVEdXBsaWNhdGVzJywKICAgICdSZXNodWZmbGUnLAogICAgJ1RvU3RyaW5nJywKICAgICdWYWx1ZXMnLAogICAgJ1dpdGhLZXlzJywKICAgICdHcm91cEludG9CYXRjaGVzJwpdCgpLID0gVHlwZVZhcignSycpClYgPSBUeXBlVmFyKCdWJykKVCA9IFR5cGVWYXIoJ1QnKQoKCmNsYXNzIENvR3JvdXBCeUtleShQVHJhbnNmb3JtKToKICAiIiJHcm91cHMgcmVzdWx0cyBhY3Jvc3Mgc2V2ZXJhbCBQQ29sbGVjdGlvbnMgYnkga2V5LgoKICBHaXZlbiBhbiBpbnB1dCBkaWN0IG9mIHNlcmlhbGl6YWJsZSBrZXlzIChjYWxsZWQgInRhZ3MiKSB0byAwIG9yIG1vcmUKICBQQ29sbGVjdGlvbnMgb2YgKGtleSwgdmFsdWUpIHR1cGxlcywgaXQgY3JlYXRlcyBhIHNpbmdsZSBvdXRwdXQgUENvbGxlY3Rpb24KICBvZiAoa2V5LCB2YWx1ZSkgdHVwbGVzIHdob3NlIGtleXMgYXJlIHRoZSB1bmlxdWUgaW5wdXQga2V5cyBmcm9tIGFsbCBpbnB1dHMsCiAgYW5kIHdob3NlIHZhbHVlcyBhcmUgZGljdHMgbWFwcGluZyBlYWNoIHRhZyB0byBhbiBpdGVyYWJsZSBvZiB3aGF0ZXZlciB2YWx1ZXMKICB3ZXJlIHVuZGVyIHRoZSBrZXkgaW4gdGhlIGNvcnJlc3BvbmRpbmcgUENvbGxlY3Rpb24sIGluIHRoaXMgbWFubmVyOjoKCiAgICAgICgnc29tZSBrZXknLCB7J3RhZzEnOiBbJ3ZhbHVlIDEgdW5kZXIgInNvbWUga2V5IiBpbiBwY29sbDEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSAyIHVuZGVyICJzb21lIGtleSIgaW4gcGNvbGwxJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5dLAogICAgICAgICAgICAgICAgICAgICd0YWcyJzogLi4uICwKICAgICAgICAgICAgICAgICAgICAuLi4gfSkKCiAgRm9yIGV4YW1wbGUsIGdpdmVuOjoKCiAgICAgIHsndGFnMSc6IHBjMSwgJ3RhZzInOiBwYzIsIDMzMzogcGMzfQoKICB3aGVyZTo6CgogICAgICBwYzEgPSBbKGsxLCB2MSldCiAgICAgIHBjMiA9IFtdCiAgICAgIHBjMyA9IFsoazEsIHYzMSksIChrMSwgdjMyKSwgKGsyLCB2MzMpXQoKICBUaGUgb3V0cHV0IFBDb2xsZWN0aW9uIHdvdWxkIGJlOjoKCiAgICAgIFsoazEsIHsndGFnMSc6IFt2MV0sICd0YWcyJzogW10sIDMzMzogW3YzMSwgdjMyXX0pLAogICAgICAgKGsyLCB7J3RhZzEnOiBbXSwgJ3RhZzInOiBbXSwgMzMzOiBbdjMzXX0pXQoKICBDb0dyb3VwQnlLZXkgYWxzbyB3b3JrcyBmb3IgdHVwbGVzLCBsaXN0cywgb3Igb3RoZXIgZmxhdCBpdGVyYWJsZXMgb2YKICBQQ29sbGVjdGlvbnMsIGluIHdoaWNoIGNhc2UgdGhlIHZhbHVlcyBvZiB0aGUgcmVzdWx0aW5nIFBDb2xsZWN0aW9ucwogIHdpbGwgYmUgdHVwbGVzIHdob3NlIG50aCB2YWx1ZSBpcyB0aGUgbGlzdCBvZiB2YWx1ZXMgZnJvbSB0aGUgbnRoCiAgUENvbGxlY3Rpb24tLS1jb25jZXB0dWFsbHksIHRoZSAidGFncyIgYXJlIHRoZSBpbmRpY2VzIGludG8gdGhlIGlucHV0LgogIFRodXMsIGZvciB0aGlzIGlucHV0OjoKCiAgICAgKHBjMSwgcGMyLCBwYzMpCgogIHRoZSBvdXRwdXQgd291bGQgYmU6OgoKICAgICAgWyhrMSwgKFt2MV0sIFtdLCBbdjMxLCB2MzJdKSwKICAgICAgIChrMiwgKFtdLCBbXSwgW3YzM10pKV0KCiAgQXR0cmlidXRlczoKICAgICoqa3dhcmdzOiBBY2NlcHRzIGEgc2luZ2xlIG5hbWVkIGFyZ3VtZW50ICJwaXBlbGluZSIsIHdoaWNoIHNwZWNpZmllcyB0aGUKICAgICAgcGlwZWxpbmUgdGhhdCAib3ducyIgdGhpcyBQVHJhbnNmb3JtLiBPcmRpbmFyaWx5IENvR3JvdXBCeUtleSBjYW4gb2J0YWluCiAgICAgIHRoaXMgaW5mb3JtYXRpb24gZnJvbSBvbmUgb2YgdGhlIGlucHV0IFBDb2xsZWN0aW9ucywgYnV0IGlmIHRoZXJlIGFyZSBub25lCiAgICAgIChvciBpZiB0aGVyZSdzIGEgY2hhbmNlIHRoZXJlIG1heSBiZSBub25lKSwgdGhpcyBhcmd1bWVudCBpcyB0aGUgb25seSB3YXkKICAgICAgdG8gcHJvdmlkZSBwaXBlbGluZSBpbmZvcm1hdGlvbiwgYW5kIHNob3VsZCBiZSBjb25zaWRlcmVkIG1hbmRhdG9yeS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAgc3VwZXIoQ29Hcm91cEJ5S2V5LCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLnBpcGVsaW5lID0ga3dhcmdzLnBvcCgncGlwZWxpbmUnLCBOb25lKQogICAgaWYga3dhcmdzOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnRzOiAlcycgJSBsaXN0KGt3YXJncy5rZXlzKCkpKQoKICBkZWYgX2V4dHJhY3RfaW5wdXRfcHZhbHVlcyhzZWxmLCBwdmFsdWVpc2gpOgogICAgdHJ5OgogICAgICAjIElmIHRoaXMgd29ya3MsIGl0J3MgYSBkaWN0LgogICAgICByZXR1cm4gcHZhbHVlaXNoLCB0dXBsZShpdGVydmFsdWVzKHB2YWx1ZWlzaCkpCiAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIHBjb2xscyA9IHR1cGxlKHB2YWx1ZWlzaCkKICAgICAgcmV0dXJuIHBjb2xscywgcGNvbGxzCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGxzKToKICAgICIiIlBlcmZvcm1zIENvR3JvdXBCeUtleSBvbiBhcmd1bWVudCBwY29sbHM7IHNlZSBjbGFzcyBkb2NzdHJpbmcuIiIiCgogICAgIyBGb3IgYXNzb2NpYXRpbmcgdmFsdWVzIGluIEstViBwYWlycyB3aXRoIHRoZSBQQ29sbGVjdGlvbnMgdGhleSBjYW1lIGZyb20uCiAgICBkZWYgX3BhaXJfdGFnX3dpdGhfdmFsdWUoa2V5X3ZhbHVlLCB0YWcpOgogICAgICAoa2V5LCB2YWx1ZSkgPSBrZXlfdmFsdWUKICAgICAgcmV0dXJuIChrZXksICh0YWcsIHZhbHVlKSkKCiAgICAjIENyZWF0ZXMgdGhlIGtleSwgdmFsdWUgcGFpcnMgZm9yIHRoZSBvdXRwdXQgUENvbGxlY3Rpb24uIFZhbHVlcyBhcmUgZWl0aGVyCiAgICAjIGxpc3RzIG9yIGRpY3RzIChwZXIgdGhlIGNsYXNzIGRvY3N0cmluZyksIGluaXRpYWxpemVkIGJ5IHRoZSByZXN1bHQgb2YKICAgICMgcmVzdWx0X2N0b3IocmVzdWx0X2N0b3JfYXJnKS4KICAgIGRlZiBfbWVyZ2VfdGFnZ2VkX3ZhbHNfdW5kZXJfa2V5KGtleV9ncm91cGVkLCByZXN1bHRfY3RvciwgcmVzdWx0X2N0b3JfYXJnKToKICAgICAgKGtleSwgZ3JvdXBlZCkgPSBrZXlfZ3JvdXBlZAogICAgICByZXN1bHRfdmFsdWUgPSByZXN1bHRfY3RvcihyZXN1bHRfY3Rvcl9hcmcpCiAgICAgIGZvciB0YWcsIHZhbHVlIGluIGdyb3VwZWQ6CiAgICAgICAgcmVzdWx0X3ZhbHVlW3RhZ10uYXBwZW5kKHZhbHVlKQogICAgICByZXR1cm4gKGtleSwgcmVzdWx0X3ZhbHVlKQoKICAgIHRyeToKICAgICAgIyBJZiBwY29sbHMgaXMgYSBkaWN0LCB3ZSB0dXJuIGl0IGludG8gKHRhZywgcGNvbGwpIHBhaXJzIGZvciB1c2UgaW4gdGhlCiAgICAgICMgZ2VuZXJhbC1wdXJwb3NlIGNvZGUgYmVsb3cuIFRoZSByZXN1bHQgdmFsdWUgY29uc3RydWN0b3IgY3JlYXRlcyBkaWN0cwogICAgICAjIHdob3NlIGtleXMgYXJlIHRoZSB0YWdzLgogICAgICByZXN1bHRfY3Rvcl9hcmcgPSBsaXN0KHBjb2xscykKICAgICAgcmVzdWx0X2N0b3IgPSBsYW1iZGEgdGFnczogZGljdCgodGFnLCBbXSkgZm9yIHRhZyBpbiB0YWdzKQogICAgICBwY29sbHMgPSBwY29sbHMuaXRlbXMoKQogICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAjIE90aGVyd2lzZSwgcGNvbGxzIGlzIGEgbGlzdC90dXBsZSwgc28gd2UgdHVybiBpdCBpbnRvIChpbmRleCwgcGNvbGwpCiAgICAgICMgcGFpcnMuIFRoZSByZXN1bHQgdmFsdWUgY29uc3RydWN0b3IgbWFrZXMgdHVwbGVzIHdpdGggbGVuKHBjb2xscykgc2xvdHMuCiAgICAgIHBjb2xscyA9IGxpc3QoZW51bWVyYXRlKHBjb2xscykpCiAgICAgIHJlc3VsdF9jdG9yX2FyZyA9IGxlbihwY29sbHMpCiAgICAgIHJlc3VsdF9jdG9yID0gbGFtYmRhIHNpemU6IHR1cGxlKFtdIGZvciBfIGluIHJhbmdlKHNpemUpKQoKICAgICMgQ2hlY2sgaW5wdXQgUENvbGxlY3Rpb25zIGZvciBQQ29sbGVjdGlvbi1uZXNzLCBhbmQgdGhhdCB0aGV5IGFsbCBiZWxvbmcKICAgICMgdG8gdGhlIHNhbWUgcGlwZWxpbmUuCiAgICBmb3IgXywgcGNvbGwgaW4gcGNvbGxzOgogICAgICBzZWxmLl9jaGVja19wY29sbGVjdGlvbihwY29sbCkKICAgICAgaWYgc2VsZi5waXBlbGluZToKICAgICAgICBhc3NlcnQgcGNvbGwucGlwZWxpbmUgPT0gc2VsZi5waXBlbGluZQoKICAgIHJldHVybiAoWwogICAgICAgIHBjb2xsIHwgJ3BhaXJfd2l0aF8lcycgJSB0YWcgPj4gTWFwKF9wYWlyX3RhZ193aXRoX3ZhbHVlLCB0YWcpIGZvciB0YWcsCiAgICAgICAgcGNvbGwgaW4gcGNvbGxzCiAgICBdCiAgICAgICAgICAgIHwgRmxhdHRlbihwaXBlbGluZT1zZWxmLnBpcGVsaW5lKQogICAgICAgICAgICB8IEdyb3VwQnlLZXkoKQogICAgICAgICAgICB8IE1hcChfbWVyZ2VfdGFnZ2VkX3ZhbHNfdW5kZXJfa2V5LCByZXN1bHRfY3RvciwgcmVzdWx0X2N0b3JfYXJnKSkKCgpkZWYgS2V5cyhsYWJlbD0nS2V5cycpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgIiIiUHJvZHVjZXMgYSBQQ29sbGVjdGlvbiBvZiBmaXJzdCBlbGVtZW50cyBvZiAyLXR1cGxlcyBpbiBhIFBDb2xsZWN0aW9uLiIiIgogIHJldHVybiBsYWJlbCA+PiBNYXAobGFtYmRhIGtfdjoga192WzBdKQoKCmRlZiBWYWx1ZXMobGFiZWw9J1ZhbHVlcycpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgIiIiUHJvZHVjZXMgYSBQQ29sbGVjdGlvbiBvZiBzZWNvbmQgZWxlbWVudHMgb2YgMi10dXBsZXMgaW4gYSBQQ29sbGVjdGlvbi4iIiIKICByZXR1cm4gbGFiZWwgPj4gTWFwKGxhbWJkYSBrX3YxOiBrX3YxWzFdKQoKCmRlZiBLdlN3YXAobGFiZWw9J0t2U3dhcCcpOiAgIyBweWxpbnQ6IGRpc2FibGU9aW52YWxpZC1uYW1lCiAgIiIiUHJvZHVjZXMgYSBQQ29sbGVjdGlvbiByZXZlcnNpbmcgMi10dXBsZXMgaW4gYSBQQ29sbGVjdGlvbi4iIiIKICByZXR1cm4gbGFiZWwgPj4gTWFwKGxhbWJkYSBrX3YyOiAoa192MlsxXSwga192MlswXSkpCgoKQHB0cmFuc2Zvcm1fZm4KZGVmIERpc3RpbmN0KHBjb2xsKTogICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQogICIiIlByb2R1Y2VzIGEgUENvbGxlY3Rpb24gY29udGFpbmluZyBkaXN0aW5jdCBlbGVtZW50cyBvZiBhIFBDb2xsZWN0aW9uLiIiIgogIHJldHVybiAoCiAgICAgIHBjb2xsCiAgICAgIHwgJ1RvUGFpcnMnID4+IE1hcChsYW1iZGEgdjogKHYsIE5vbmUpKQogICAgICB8ICdHcm91cCcgPj4gQ29tYmluZVBlcktleShsYW1iZGEgdnM6IE5vbmUpCiAgICAgIHwgJ0Rpc3RpbmN0JyA+PiBLZXlzKCkpCgoKQGRlcHJlY2F0ZWQoc2luY2U9JzIuMTInLCBjdXJyZW50PSdEaXN0aW5jdCcpCkBwdHJhbnNmb3JtX2ZuCmRlZiBSZW1vdmVEdXBsaWNhdGVzKHBjb2xsKToKICAiIiJQcm9kdWNlcyBhIFBDb2xsZWN0aW9uIGNvbnRhaW5pbmcgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBQQ29sbGVjdGlvbi4iIiIKICByZXR1cm4gcGNvbGwgfCAnUmVtb3ZlRHVwbGljYXRlcycgPj4gRGlzdGluY3QoKQoKCmNsYXNzIF9CYXRjaFNpemVFc3RpbWF0b3Iob2JqZWN0KToKICAiIiJFc3RpbWF0ZXMgdGhlIGJlc3Qgc2l6ZSBmb3IgYmF0Y2hlcyBnaXZlbiBoaXN0b3JpY2FsIHRpbWluZy4KICAiIiIKCiAgX01BWF9EQVRBX1BPSU5UUyA9IDEwMAogIF9NQVhfR1JPV1RIX0ZBQ1RPUiA9IDIKCiAgZGVmIF9faW5pdF9fKAogICAgICBzZWxmLAogICAgICBtaW5fYmF0Y2hfc2l6ZT0xLAogICAgICBtYXhfYmF0Y2hfc2l6ZT0xMDAwMCwKICAgICAgdGFyZ2V0X2JhdGNoX292ZXJoZWFkPS4wNSwKICAgICAgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3M9MSwKICAgICAgdmFyaWFuY2U9MC4yNSwKICAgICAgY2xvY2s9dGltZS50aW1lLAogICAgICBpZ25vcmVfZmlyc3Rfbl9zZWVuX3Blcl9iYXRjaF9zaXplPTApOgogICAgaWYgbWluX2JhdGNoX3NpemUgPiBtYXhfYmF0Y2hfc2l6ZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJNaW5pbXVtICglcykgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuIG1heGltdW0gKCVzKSIgJQogICAgICAgICAgKG1pbl9iYXRjaF9zaXplLCBtYXhfYmF0Y2hfc2l6ZSkpCiAgICBpZiB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQgYW5kIG5vdCAwIDwgdGFyZ2V0X2JhdGNoX292ZXJoZWFkIDw9IDE6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAidGFyZ2V0X2JhdGNoX292ZXJoZWFkICglcykgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEiICUKICAgICAgICAgICh0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQpKQogICAgaWYgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MgYW5kIHRhcmdldF9iYXRjaF9kdXJhdGlvbl9zZWNzIDw9IDA6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAidGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MgKCVzKSBtdXN0IGJlIHBvc2l0aXZlIiAlCiAgICAgICAgICAodGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MpKQogICAgaWYgbm90ICh0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQgb3IgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MpOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgIkF0IGxlYXN0IG9uZSBvZiB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQgb3IgIgogICAgICAgICAgInRhcmdldF9iYXRjaF9kdXJhdGlvbl9zZWNzIG11c3QgYmUgcG9zaXRpdmUuIikKICAgIGlmIGlnbm9yZV9maXJzdF9uX3NlZW5fcGVyX2JhdGNoX3NpemUgPCAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgJ2lnbm9yZV9maXJzdF9uX3NlZW5fcGVyX2JhdGNoX3NpemUgKCVzKSBtdXN0IGJlIG5vbiAnCiAgICAgICAgICAnbmVnYXRpdmUnICUgKGlnbm9yZV9maXJzdF9uX3NlZW5fcGVyX2JhdGNoX3NpemUpKQogICAgc2VsZi5fbWluX2JhdGNoX3NpemUgPSBtaW5fYmF0Y2hfc2l6ZQogICAgc2VsZi5fbWF4X2JhdGNoX3NpemUgPSBtYXhfYmF0Y2hfc2l6ZQogICAgc2VsZi5fdGFyZ2V0X2JhdGNoX292ZXJoZWFkID0gdGFyZ2V0X2JhdGNoX292ZXJoZWFkCiAgICBzZWxmLl90YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyA9IHRhcmdldF9iYXRjaF9kdXJhdGlvbl9zZWNzCiAgICBzZWxmLl92YXJpYW5jZSA9IHZhcmlhbmNlCiAgICBzZWxmLl9jbG9jayA9IGNsb2NrCiAgICBzZWxmLl9kYXRhID0gW10KICAgIHNlbGYuX2lnbm9yZV9uZXh0X3RpbWluZyA9IEZhbHNlCiAgICBzZWxmLl9pZ25vcmVfZmlyc3Rfbl9zZWVuX3Blcl9iYXRjaF9zaXplID0gKAogICAgICAgIGlnbm9yZV9maXJzdF9uX3NlZW5fcGVyX2JhdGNoX3NpemUpCiAgICBzZWxmLl9iYXRjaF9zaXplX251bV9zZWVuID0ge30KICAgIHNlbGYuX3JlcGxheV9sYXN0X2JhdGNoX3NpemUgPSBOb25lCgogICAgc2VsZi5fc2l6ZV9kaXN0cmlidXRpb24gPSBNZXRyaWNzLmRpc3RyaWJ1dGlvbigKICAgICAgICAnQmF0Y2hFbGVtZW50cycsICdiYXRjaF9zaXplJykKICAgIHNlbGYuX3RpbWVfZGlzdHJpYnV0aW9uID0gTWV0cmljcy5kaXN0cmlidXRpb24oCiAgICAgICAgJ0JhdGNoRWxlbWVudHMnLCAnbXNlY19wZXJfYmF0Y2gnKQogICAgIyBCZWFtIGRpc3RyaWJ1dGlvbnMgb25seSBhY2NlcHQgaW50ZWdlciB2YWx1ZXMsIHNvIHdlIHVzZSB0aGlzIHRvCiAgICAjIGFjY3VtdWxhdGUgdW5kZXItcmVwb3J0ZWQgdmFsdWVzIHVudGlsIHRoZXkgYWRkIHVwIHRvIHdob2xlIG1pbGxpc2Vjb25kcy4KICAgICMgKE1pbGxpc2Vjb25kcyBhcmUgY2hvc2VuIGJlY2F1c2UgdGhhdCdzIGNvbnZlbnRpb25hbGx5IHVzZWQgZWxzZXdoZXJlIGluCiAgICAjIHByb2ZpbGluZy1zdHlsZSBjb3VudGVycy4pCiAgICBzZWxmLl9yZW1haW5kZXJfbXNlY3MgPSAwCgogIGRlZiBpZ25vcmVfbmV4dF90aW1pbmcoc2VsZik6CiAgICAiIiJDYWxsIHRvIGluZGljYXRlIHRoZSBuZXh0IHRpbWluZyBzaG91bGQgYmUgaWdub3JlZC4KCiAgICBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGVtaXQgb2YgYSBQYXJEbyBvcGVyYXRpb24gaXMga25vd24gdG8gYmUgYW5vbWFsb3VzCiAgICBkdWUgdG8gc2V0dXAgdGhhdCBtYXkgb2NjdXIuCiAgICAiIiIKICAgIHNlbGYuX2lnbm9yZV9uZXh0X3RpbWluZyA9IFRydWUKCiAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKICBkZWYgcmVjb3JkX3RpbWUoc2VsZiwgYmF0Y2hfc2l6ZSk6CiAgICBzdGFydCA9IHNlbGYuX2Nsb2NrKCkKICAgIHlpZWxkCiAgICBlbGFwc2VkID0gc2VsZi5fY2xvY2soKSAtIHN0YXJ0CiAgICBlbGFwc2VkX21zZWMgPSAxZTMgKiBlbGFwc2VkICsgc2VsZi5fcmVtYWluZGVyX21zZWNzCiAgICBzZWxmLl9zaXplX2Rpc3RyaWJ1dGlvbi51cGRhdGUoYmF0Y2hfc2l6ZSkKICAgIHNlbGYuX3RpbWVfZGlzdHJpYnV0aW9uLnVwZGF0ZShpbnQoZWxhcHNlZF9tc2VjKSkKICAgIHNlbGYuX3JlbWFpbmRlcl9tc2VjcyA9IGVsYXBzZWRfbXNlYyAtIGludChlbGFwc2VkX21zZWMpCiAgICAjIElmIHdlIGlnbm9yZSB0aGUgbmV4dCB0aW1pbmcsIHJlcGxheSB0aGUgYmF0Y2ggc2l6ZSB0byBnZXQgYWNjdXJhdGUKICAgICMgdGltaW5nLgogICAgaWYgc2VsZi5faWdub3JlX25leHRfdGltaW5nOgogICAgICBzZWxmLl9pZ25vcmVfbmV4dF90aW1pbmcgPSBGYWxzZQogICAgICBzZWxmLl9yZXBsYXlfbGFzdF9iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZQogICAgZWxzZToKICAgICAgc2VsZi5fZGF0YS5hcHBlbmQoKGJhdGNoX3NpemUsIGVsYXBzZWQpKQogICAgICBpZiBsZW4oc2VsZi5fZGF0YSkgPj0gc2VsZi5fTUFYX0RBVEFfUE9JTlRTOgogICAgICAgIHNlbGYuX3RoaW5fZGF0YSgpCgogIGRlZiBfdGhpbl9kYXRhKHNlbGYpOgogICAgIyBNYWtlIHN1cmUgd2UgZG9uJ3QgY2hhbmdlIHRoZSBwYXJpdHkgb2YgbGVuKHNlbGYuX2RhdGEpCiAgICAjIEFzIGl0J3MgdXNlZCBiZWxvdyB0byBhbHRlcm5hdGUgaml0dGVyLgogICAgc2VsZi5fZGF0YS5wb3AocmFuZG9tLnJhbmRyYW5nZShsZW4oc2VsZi5fZGF0YSkgLy8gNCkpCiAgICBzZWxmLl9kYXRhLnBvcChyYW5kb20ucmFuZHJhbmdlKGxlbihzZWxmLl9kYXRhKSAvLyAyKSkKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBsaW5lYXJfcmVncmVzc2lvbl9ub19udW1weSh4cywgeXMpOgogICAgIyBMZWFzdCBzcXVhcmVzIGZpdCBmb3IgeSA9IGEgKyBieCBvdmVyIGFsbCBwb2ludHMuCiAgICBuID0gZmxvYXQobGVuKHhzKSkKICAgIHhiYXIgPSBzdW0oeHMpIC8gbgogICAgeWJhciA9IHN1bSh5cykgLyBuCiAgICBpZiB4YmFyID09IDA6CiAgICAgIHJldHVybiB5YmFyLCAwCiAgICBpZiBhbGwoeHNbMF0gPT0geCBmb3IgeCBpbiB4cyk6CiAgICAgICMgU2ltcGx5IHVzZSB0aGUgbWVhbiBpZiBhbGwgdmFsdWVzIGluIHhzIGFyZSBzYW1lLgogICAgICByZXR1cm4gMCwgeWJhciAvIHhiYXIKICAgIGIgPSAoCiAgICAgICAgc3VtKFsoeCAtIHhiYXIpICogKHkgLSB5YmFyKQogICAgICAgICAgICAgZm9yIHgsIHkgaW4gemlwKHhzLCB5cyldKSAvIHN1bShbKHggLSB4YmFyKSoqMiBmb3IgeCBpbiB4c10pKQogICAgYSA9IHliYXIgLSBiICogeGJhcgogICAgcmV0dXJuIGEsIGIKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBsaW5lYXJfcmVncmVzc2lvbl9udW1weSh4cywgeXMpOgogICAgIyBweWxpbnQ6IGRpc2FibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KICAgIGltcG9ydCBudW1weSBhcyBucAogICAgZnJvbSBudW1weSBpbXBvcnQgc3VtCiAgICBuID0gbGVuKHhzKQogICAgaWYgYWxsKHhzWzBdID09IHggZm9yIHggaW4geHMpOgogICAgICAjIElmIGFsbCB2YWx1ZXMgb2YgeHMgYXJlIHNhbWUgdGhlbiBmYWxsYmFjayB0byBsaW5lYXJfcmVncmVzc2lvbl9ub19udW1weQogICAgICByZXR1cm4gX0JhdGNoU2l6ZUVzdGltYXRvci5saW5lYXJfcmVncmVzc2lvbl9ub19udW1weSh4cywgeXMpCiAgICB4cyA9IG5wLmFzYXJyYXkoeHMsIGR0eXBlPWZsb2F0KQogICAgeXMgPSBucC5hc2FycmF5KHlzLCBkdHlwZT1mbG9hdCkKCiAgICAjIEZpcnN0IGRvIGEgc2ltcGxlIGxlYXN0IHNxdWFyZXMgZml0IGZvciB5ID0gYSArIGJ4IG92ZXIgYWxsIHBvaW50cy4KICAgIGIsIGEgPSBucC5wb2x5Zml0KHhzLCB5cywgMSkKCiAgICBpZiBuIDwgMTA6CiAgICAgIHJldHVybiBhLCBiCiAgICBlbHNlOgogICAgICAjIFJlZmluZSB0aGlzIGJ5IHRocm93aW5nIG91dCBvdXRsaWVycywgYWNjb3JkaW5nIHRvIENvb2sncyBkaXN0YW5jZS4KICAgICAgIyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db29rJTI3c19kaXN0YW5jZQogICAgICBzdW1feCA9IHN1bSh4cykKICAgICAgc3VtX3gyID0gc3VtKHhzKioyKQogICAgICBlcnJzID0gYSArIGIgKiB4cyAtIHlzCiAgICAgIHMyID0gc3VtKGVycnMqKjIpIC8gKG4gLSAyKQogICAgICBpZiBzMiA9PSAwOgogICAgICAgICMgSXQncyBhbiBleGFjdCBmaXQhCiAgICAgICAgcmV0dXJuIGEsIGIKICAgICAgaCA9IChzdW1feDIgLSAyICogc3VtX3ggKiB4cyArIG4gKiB4cyoqMikgLyAobiAqIHN1bV94MiAtIHN1bV94KioyKQogICAgICBjb29rX2RzID0gMC41IC8gczIgKiBlcnJzKioyICogKGggLyAoMSAtIGgpKioyKQoKICAgICAgIyBSZS1jb21wdXRlIHRoZSByZWdyZXNzaW9uLCBleGNsdWRpbmcgdGhvc2UgcG9pbnRzIHdpdGggQ29vaydzIGRpc3RhbmNlCiAgICAgICMgZ3JlYXRlciB0aGFuIDAuNSwgYW5kIHdlaWdodGluZyBieSB0aGUgaW52ZXJzZSBvZiB4IHRvIGdpdmUgYSBtb3JlCiAgICAgICMgc3RhYmxlIHktaW50ZXJjZXB0IChhcyBzbWFsbCBiYXRjaGVzIGhhdmUgcmVsYXRpdmVseSBtb3JlIGluZm9ybWF0aW9uCiAgICAgICMgYWJvdXQgdGhlIGZpeGVkIG92ZXJoZWFkKS4KICAgICAgd2VpZ2h0ID0gKGNvb2tfZHMgPD0gMC41KSAvIHhzCiAgICAgIGIsIGEgPSBucC5wb2x5Zml0KHhzLCB5cywgMSwgdz13ZWlnaHQpCiAgICAgIHJldHVybiBhLCBiCgogIHRyeToKICAgICMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uCiAgICBpbXBvcnQgbnVtcHkgYXMgbnAKICAgIGxpbmVhcl9yZWdyZXNzaW9uID0gbGluZWFyX3JlZ3Jlc3Npb25fbnVtcHkKICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBsaW5lYXJfcmVncmVzc2lvbiA9IGxpbmVhcl9yZWdyZXNzaW9uX25vX251bXB5CgogIGRlZiBfY2FsY3VsYXRlX25leHRfYmF0Y2hfc2l6ZShzZWxmKToKICAgIGlmIHNlbGYuX21pbl9iYXRjaF9zaXplID09IHNlbGYuX21heF9iYXRjaF9zaXplOgogICAgICByZXR1cm4gc2VsZi5fbWluX2JhdGNoX3NpemUKICAgIGVsaWYgbGVuKHNlbGYuX2RhdGEpIDwgMToKICAgICAgcmV0dXJuIHNlbGYuX21pbl9iYXRjaF9zaXplCiAgICBlbGlmIGxlbihzZWxmLl9kYXRhKSA8IDI6CiAgICAgICMgRm9yY2Ugc29tZSB2YXJpZXR5IHNvIHdlIGhhdmUgZGlzdGluY3QgYmF0Y2ggc2l6ZXMgb24gd2hpY2ggdG8gZG8KICAgICAgIyBsaW5lYXIgcmVncmVzc2lvbiBiZWxvdy4KICAgICAgcmV0dXJuIGludCgKICAgICAgICAgIG1heCgKICAgICAgICAgICAgICBtaW4oCiAgICAgICAgICAgICAgICAgIHNlbGYuX21heF9iYXRjaF9zaXplLAogICAgICAgICAgICAgICAgICBzZWxmLl9taW5fYmF0Y2hfc2l6ZSAqIHNlbGYuX01BWF9HUk9XVEhfRkFDVE9SKSwKICAgICAgICAgICAgICBzZWxmLl9taW5fYmF0Y2hfc2l6ZSArIDEpKQoKICAgICMgVGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2Ygbm9pc2UgaW4gdGhlIHRvcCBxdWFudGlsZSwgd2hpY2ggYWxzbwogICAgIyBoYXMgb3V0c2lkZWQgaW5mbHVlbmNlIGluIHRoZSByZWdyZXNzaW9uLiAgSWYgd2UgaGF2ZSBlbm91Z2ggZGF0YSwKICAgICMgU2ltcGx5IGRlY2xhcmUgdGhlIHRvcCAyMCUgdG8gYmUgb3V0bGllcnMuCiAgICB0cmltbWVkX2RhdGEgPSBzb3J0ZWQoc2VsZi5fZGF0YSlbOm1heCgyMCwgbGVuKHNlbGYuX2RhdGEpICogNCAvLyA1KV0KCiAgICAjIExpbmVhciByZWdyZXNzaW9uIGZvciB5ID0gYSArIGJ4LCB3aGVyZSB4IGlzIGJhdGNoIHNpemUgYW5kIHkgaXMgdGltZS4KICAgIHhzLCB5cyA9IHppcCgqdHJpbW1lZF9kYXRhKQogICAgYSwgYiA9IHNlbGYubGluZWFyX3JlZ3Jlc3Npb24oeHMsIHlzKQoKICAgICMgQXZvaWQgbm9uc2Vuc2ljYWwgb3IgZGl2aXNpb24tYnktemVybyBlcnJvcnMgYmVsb3cgZHVlIHRvIG5vaXNlLgogICAgYSA9IG1heChhLCAxZS0xMCkKICAgIGIgPSBtYXgoYiwgMWUtMjApCgogICAgbGFzdF9iYXRjaF9zaXplID0gc2VsZi5fZGF0YVstMV1bMF0KICAgIGNhcCA9IG1pbihsYXN0X2JhdGNoX3NpemUgKiBzZWxmLl9NQVhfR1JPV1RIX0ZBQ1RPUiwgc2VsZi5fbWF4X2JhdGNoX3NpemUpCgogICAgdGFyZ2V0ID0gc2VsZi5fbWF4X2JhdGNoX3NpemUKCiAgICBpZiBzZWxmLl90YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjczoKICAgICAgIyBTb2x1dGlvbiB0byBhICsgYip4ID0gc2VsZi5fdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MuCiAgICAgIHRhcmdldCA9IG1pbih0YXJnZXQsIChzZWxmLl90YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2VjcyAtIGEpIC8gYikKCiAgICBpZiBzZWxmLl90YXJnZXRfYmF0Y2hfb3ZlcmhlYWQ6CiAgICAgICMgU29sdXRpb24gdG8gYSAvIChhICsgYip4KSA9IHNlbGYuX3RhcmdldF9iYXRjaF9vdmVyaGVhZC4KICAgICAgdGFyZ2V0ID0gbWluKHRhcmdldCwgKGEgLyBiKSAqICgxIC8gc2VsZi5fdGFyZ2V0X2JhdGNoX292ZXJoZWFkIC0gMSkpCgogICAgIyBBdm9pZCBnZXR0aW5nIHN0dWNrIGF0IGEgc2luZ2xlIGJhdGNoIHNpemUgKGVzcGVjaWFsbHkgdGhlIG1pbmltYWwKICAgICMgYmF0Y2ggc2l6ZSkgd2hpY2ggd291bGQgbm90IGFsbG93IHVzIHRvIGV4dHJhcG9sYXRlIHRvIG90aGVyIGJhdGNoCiAgICAjIHNpemVzLgogICAgIyBKaXR0ZXIgYWx0ZXJuYXRlcyBiZXR3ZWVuIDAgYW5kIDEuCiAgICBqaXR0ZXIgPSBsZW4oc2VsZi5fZGF0YSkgJSAyCiAgICAjIFNtZWFyIG91ciBzYW1wbGVzIGFjcm9zcyBhIHJhbmdlIGNlbnRlcmVkIGF0IHRoZSB0YXJnZXQuCiAgICBpZiBsZW4oc2VsZi5fZGF0YSkgPiAxMDoKICAgICAgdGFyZ2V0ICs9IGludCh0YXJnZXQgKiBzZWxmLl92YXJpYW5jZSAqIDIgKiAocmFuZG9tLnJhbmRvbSgpIC0gLjUpKQoKICAgIHJldHVybiBpbnQobWF4KHNlbGYuX21pbl9iYXRjaF9zaXplICsgaml0dGVyLCBtaW4odGFyZ2V0LCBjYXApKSkKCiAgZGVmIG5leHRfYmF0Y2hfc2l6ZShzZWxmKToKICAgICMgQ2hlY2sgaWYgd2Ugc2hvdWxkIHJlcGxheSBhIHByZXZpb3VzIGJhdGNoIHNpemUgZHVlIHRvIGl0IG5vdCBiZWluZwogICAgIyByZWNvcmRlZC4KICAgIGlmIHNlbGYuX3JlcGxheV9sYXN0X2JhdGNoX3NpemU6CiAgICAgIHJlc3VsdCA9IHNlbGYuX3JlcGxheV9sYXN0X2JhdGNoX3NpemUKICAgICAgc2VsZi5fcmVwbGF5X2xhc3RfYmF0Y2hfc2l6ZSA9IE5vbmUKICAgIGVsc2U6CiAgICAgIHJlc3VsdCA9IHNlbGYuX2NhbGN1bGF0ZV9uZXh0X2JhdGNoX3NpemUoKQoKICAgIHNlZW5fY291bnQgPSBzZWxmLl9iYXRjaF9zaXplX251bV9zZWVuLmdldChyZXN1bHQsIDApICsgMQogICAgaWYgc2Vlbl9jb3VudCA8PSBzZWxmLl9pZ25vcmVfZmlyc3Rfbl9zZWVuX3Blcl9iYXRjaF9zaXplOgogICAgICBzZWxmLmlnbm9yZV9uZXh0X3RpbWluZygpCiAgICBzZWxmLl9iYXRjaF9zaXplX251bV9zZWVuW3Jlc3VsdF0gPSBzZWVuX2NvdW50CiAgICByZXR1cm4gcmVzdWx0CgoKY2xhc3MgX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm4oRG9Gbik6CiAgZGVmIF9faW5pdF9fKHNlbGYsIGJhdGNoX3NpemVfZXN0aW1hdG9yKToKICAgIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yID0gYmF0Y2hfc2l6ZV9lc3RpbWF0b3IKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmKToKICAgIHNlbGYuX2JhdGNoID0gW10KICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQogICAgIyBUaGUgZmlyc3QgZW1pdCBvZnRlbiBpbnZvbHZlcyBub24tdHJpdmlhbCBzZXR1cC4KICAgIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLmlnbm9yZV9uZXh0X3RpbWluZygpCgogIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQpOgogICAgc2VsZi5fYmF0Y2guYXBwZW5kKGVsZW1lbnQpCiAgICBpZiBsZW4oc2VsZi5fYmF0Y2gpID49IHNlbGYuX2JhdGNoX3NpemU6CiAgICAgIHdpdGggc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IucmVjb3JkX3RpbWUoc2VsZi5fYmF0Y2hfc2l6ZSk6CiAgICAgICAgeWllbGQgc2VsZi5fYmF0Y2gKICAgICAgc2VsZi5fYmF0Y2ggPSBbXQogICAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IubmV4dF9iYXRjaF9zaXplKCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBpZiBzZWxmLl9iYXRjaDoKICAgICAgd2l0aCBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5yZWNvcmRfdGltZShzZWxmLl9iYXRjaF9zaXplKToKICAgICAgICB5aWVsZCB3aW5kb3cuR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShzZWxmLl9iYXRjaCkKICAgICAgc2VsZi5fYmF0Y2ggPSBOb25lCiAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQoKCmNsYXNzIF9XaW5kb3dBd2FyZUJhdGNoaW5nRG9GbihEb0ZuKToKCiAgX01BWF9MSVZFX1dJTkRPV1MgPSAxMAoKICBkZWYgX19pbml0X18oc2VsZiwgYmF0Y2hfc2l6ZV9lc3RpbWF0b3IpOgogICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IgPSBiYXRjaF9zaXplX2VzdGltYXRvcgoKICBkZWYgc3RhcnRfYnVuZGxlKHNlbGYpOgogICAgc2VsZi5fYmF0Y2hlcyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IubmV4dF9iYXRjaF9zaXplKCkKICAgICMgVGhlIGZpcnN0IGVtaXQgb2Z0ZW4gaW52b2x2ZXMgbm9uLXRyaXZpYWwgc2V0dXAuCiAgICBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5pZ25vcmVfbmV4dF90aW1pbmcoKQoKICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50LCB3aW5kb3c9RG9Gbi5XaW5kb3dQYXJhbSk6CiAgICBzZWxmLl9iYXRjaGVzW3dpbmRvd10uYXBwZW5kKGVsZW1lbnQpCiAgICBpZiBsZW4oc2VsZi5fYmF0Y2hlc1t3aW5kb3ddKSA+PSBzZWxmLl9iYXRjaF9zaXplOgogICAgICB3aXRoIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLnJlY29yZF90aW1lKHNlbGYuX2JhdGNoX3NpemUpOgogICAgICAgIHlpZWxkIHdpbmRvd2VkX3ZhbHVlLldpbmRvd2VkVmFsdWUoCiAgICAgICAgICAgIHNlbGYuX2JhdGNoZXNbd2luZG93XSwgd2luZG93Lm1heF90aW1lc3RhbXAoKSwgKHdpbmRvdywgKSkKICAgICAgZGVsIHNlbGYuX2JhdGNoZXNbd2luZG93XQogICAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IubmV4dF9iYXRjaF9zaXplKCkKICAgIGVsaWYgbGVuKHNlbGYuX2JhdGNoZXMpID4gc2VsZi5fTUFYX0xJVkVfV0lORE9XUzoKICAgICAgd2luZG93LCBfID0gc29ydGVkKAogICAgICAgICAgc2VsZi5fYmF0Y2hlcy5pdGVtcygpLAogICAgICAgICAga2V5PWxhbWJkYSB3aW5kb3dfYmF0Y2g6IGxlbih3aW5kb3dfYmF0Y2hbMV0pLAogICAgICAgICAgcmV2ZXJzZT1UcnVlKVswXQogICAgICB3aXRoIHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yLnJlY29yZF90aW1lKHNlbGYuX2JhdGNoX3NpemUpOgogICAgICAgIHlpZWxkIHdpbmRvd2VkX3ZhbHVlLldpbmRvd2VkVmFsdWUoCiAgICAgICAgICAgIHNlbGYuX2JhdGNoZXNbd2luZG93XSwgd2luZG93Lm1heF90aW1lc3RhbXAoKSwgKHdpbmRvdywgKSkKICAgICAgZGVsIHNlbGYuX2JhdGNoZXNbd2luZG93XQogICAgICBzZWxmLl9iYXRjaF9zaXplID0gc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IubmV4dF9iYXRjaF9zaXplKCkKCiAgZGVmIGZpbmlzaF9idW5kbGUoc2VsZik6CiAgICBmb3Igd2luZG93LCBiYXRjaCBpbiBzZWxmLl9iYXRjaGVzLml0ZW1zKCk6CiAgICAgIGlmIGJhdGNoOgogICAgICAgIHdpdGggc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IucmVjb3JkX3RpbWUoc2VsZi5fYmF0Y2hfc2l6ZSk6CiAgICAgICAgICB5aWVsZCB3aW5kb3dlZF92YWx1ZS5XaW5kb3dlZFZhbHVlKAogICAgICAgICAgICAgIGJhdGNoLCB3aW5kb3cubWF4X3RpbWVzdGFtcCgpLCAod2luZG93LCApKQogICAgc2VsZi5fYmF0Y2hlcyA9IE5vbmUKICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9iYXRjaF9zaXplX2VzdGltYXRvci5uZXh0X2JhdGNoX3NpemUoKQoKCkB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhUKQpAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKExpc3RbVF0pCmNsYXNzIEJhdGNoRWxlbWVudHMoUFRyYW5zZm9ybSk6CiAgIiIiQSBUcmFuc2Zvcm0gdGhhdCBiYXRjaGVzIGVsZW1lbnRzIGZvciBhbW9ydGl6ZWQgcHJvY2Vzc2luZy4KCiAgVGhpcyB0cmFuc2Zvcm0gaXMgZGVzaWduZWQgdG8gcHJlY2VkZSBvcGVyYXRpb25zIHdob3NlIHByb2Nlc3NpbmcgY29zdAogIGlzIG9mIHRoZSBmb3JtCgogICAgICB0aW1lID0gZml4ZWRfY29zdCArIG51bV9lbGVtZW50cyAqIHBlcl9lbGVtZW50X2Nvc3QKCiAgd2hlcmUgdGhlIHBlciBlbGVtZW50IGNvc3QgaXMgKG9mdGVuIHNpZ25pZmljYW50bHkpIHNtYWxsZXIgdGhhbiB0aGUgZml4ZWQKICBjb3N0IGFuZCBjb3VsZCBiZSBhbW9ydGl6ZWQgb3ZlciBtdWx0aXBsZSBlbGVtZW50cy4gIEl0IGNvbnN1bWVzIGEgUENvbGxlY3Rpb24KICBvZiBlbGVtZW50IHR5cGUgVCBhbmQgcHJvZHVjZXMgYSBQQ29sbGVjdGlvbiBvZiBlbGVtZW50IHR5cGUgTGlzdFtUXS4KCiAgVGhpcyB0cmFuc2Zvcm0gYXR0ZW1wdHMgdG8gZmluZCB0aGUgYmVzdCBiYXRjaCBzaXplIGJldHdlZW4gdGhlIG1pbmltaW0KICBhbmQgbWF4aW11bSBwYXJhbWV0ZXJzIGJ5IHByb2ZpbGluZyB0aGUgdGltZSB0YWtlbiBieSAoZnVzZWQpIGRvd25zdHJlYW0KICBvcGVyYXRpb25zLiBGb3IgYSBmaXhlZCBiYXRjaCBzaXplLCBzZXQgdGhlIG1pbiBhbmQgbWF4IHRvIGJlIGVxdWFsLgoKICBFbGVtZW50cyBhcmUgYmF0Y2hlZCBwZXItd2luZG93IGFuZCBiYXRjaGVzIGVtaXR0ZWQgaW4gdGhlIHdpbmRvdwogIGNvcnJlc3BvbmRpbmcgdG8gaXRzIGNvbnRlbnRzLgoKICBBcmdzOgogICAgbWluX2JhdGNoX3NpemU6IChvcHRpb25hbCkgdGhlIHNtYWxsZXN0IG51bWJlciBvZiBlbGVtZW50cyBwZXIgYmF0Y2gKICAgIG1heF9iYXRjaF9zaXplOiAob3B0aW9uYWwpIHRoZSBsYXJnZXN0IG51bWJlciBvZiBlbGVtZW50cyBwZXIgYmF0Y2gKICAgIHRhcmdldF9iYXRjaF9vdmVyaGVhZDogKG9wdGlvbmFsKSBhIHRhcmdldCBmb3IgZml4ZWRfY29zdCAvIHRpbWUsCiAgICAgICAgYXMgdXNlZCBpbiB0aGUgZm9ybXVsYSBhYm92ZQogICAgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3M6IChvcHRpb25hbCkgYSB0YXJnZXQgZm9yIHRvdGFsIHRpbWUgcGVyIGJ1bmRsZSwKICAgICAgICBpbiBzZWNvbmRzCiAgICB2YXJpYW5jZTogKG9wdGlvbmFsKSB0aGUgcGVybWl0dGVkIChyZWxhdGl2ZSkgYW1vdW50IG9mIGRldmlhdGlvbiBmcm9tIHRoZQogICAgICAgIChlc3RpbWF0ZWQpIGlkZWFsIGJhdGNoIHNpemUgdXNlZCB0byBwcm9kdWNlIGEgd2lkZXIgYmFzZSBmb3IKICAgICAgICBsaW5lYXIgaW50ZXJwb2xhdGlvbgogICAgY2xvY2s6IChvcHRpb25hbCkgYW4gYWx0ZXJuYXRpdmUgdG8gdGltZS50aW1lIGZvciBtZWFzdXJpbmcgdGhlIGNvc3Qgb2YKICAgICAgICBkb253c3RyZWFtIG9wZXJhdGlvbnMgKG1vc3RseSBmb3IgdGVzdGluZykKICAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIG1pbl9iYXRjaF9zaXplPTEsCiAgICAgIG1heF9iYXRjaF9zaXplPTEwMDAwLAogICAgICB0YXJnZXRfYmF0Y2hfb3ZlcmhlYWQ9LjA1LAogICAgICB0YXJnZXRfYmF0Y2hfZHVyYXRpb25fc2Vjcz0xLAogICAgICB2YXJpYW5jZT0wLjI1LAogICAgICBjbG9jaz10aW1lLnRpbWUpOgogICAgc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IgPSBfQmF0Y2hTaXplRXN0aW1hdG9yKAogICAgICAgIG1pbl9iYXRjaF9zaXplPW1pbl9iYXRjaF9zaXplLAogICAgICAgIG1heF9iYXRjaF9zaXplPW1heF9iYXRjaF9zaXplLAogICAgICAgIHRhcmdldF9iYXRjaF9vdmVyaGVhZD10YXJnZXRfYmF0Y2hfb3ZlcmhlYWQsCiAgICAgICAgdGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3M9dGFyZ2V0X2JhdGNoX2R1cmF0aW9uX3NlY3MsCiAgICAgICAgdmFyaWFuY2U9dmFyaWFuY2UsCiAgICAgICAgY2xvY2s9Y2xvY2spCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgaWYgZ2V0YXR0cihwY29sbC5waXBlbGluZS5ydW5uZXIsICdpc19zdHJlYW1pbmcnLCBGYWxzZSk6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlJlcXVpcmVzIHN0YXRlZnVsIHByb2Nlc3NpbmcgKEJFQU0tMjY4NykiKQogICAgZWxpZiBwY29sbC53aW5kb3dpbmcuaXNfZGVmYXVsdCgpOgogICAgICAjIFRoaXMgaXMgdGhlIHNhbWUgbG9naWMgYXMgX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm4sIGJ1dCBvcHRpbWl6ZWQKICAgICAgIyBmb3IgdGhhdCBzaW1wbGVyIGNhc2UuCiAgICAgIHJldHVybiBwY29sbCB8IFBhckRvKAogICAgICAgICAgX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm4oc2VsZi5fYmF0Y2hfc2l6ZV9lc3RpbWF0b3IpKQogICAgZWxzZToKICAgICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8oX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuKHNlbGYuX2JhdGNoX3NpemVfZXN0aW1hdG9yKSkKCgpjbGFzcyBfSWRlbnRpdHlXaW5kb3dGbihOb25NZXJnaW5nV2luZG93Rm4pOgogICIiIldpbmRvd2luZyBmdW5jdGlvbiB0aGF0IHByZXNlcnZlcyBleGlzdGluZyB3aW5kb3dzLgoKICBUbyBiZSB1c2VkIGludGVybmFsbHkgd2l0aCB0aGUgUmVzaHVmZmxlIHRyYW5zZm9ybS4KICBXaWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHVzZWQgYWZ0ZXIgRG9GbnMgdGhhdCByZXR1cm4gVGltZXN0YW1wZWRWYWx1ZQogIGVsZW1lbnRzLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dfY29kZXIpOgogICAgIiIiQ3JlYXRlIGEgbmV3IFdpbmRvd0ZuIHdpdGggY29tcGF0aWJsZSBjb2Rlci4KICAgIFRvIGJlIGFwcGxpZWQgdG8gUENvbGxlY3Rpb25zIHdpdGggd2luZG93cyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhlCiAgICBnaXZlbiBjb2Rlci4KCiAgICBBcmd1bWVudHM6CiAgICAgIHdpbmRvd19jb2RlcjogY29kZXJzLkNvZGVyIG9iamVjdCB0byBiZSB1c2VkIG9uIHdpbmRvd3MuCiAgICAiIiIKICAgIHN1cGVyKF9JZGVudGl0eVdpbmRvd0ZuLCBzZWxmKS5fX2luaXRfXygpCiAgICBpZiB3aW5kb3dfY29kZXIgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignd2luZG93X2NvZGVyIHNob3VsZCBub3QgYmUgTm9uZScpCiAgICBzZWxmLl93aW5kb3dfY29kZXIgPSB3aW5kb3dfY29kZXIKCiAgZGVmIGFzc2lnbihzZWxmLCBhc3NpZ25fY29udGV4dCk6CiAgICBpZiBhc3NpZ25fY29udGV4dC53aW5kb3cgaXMgTm9uZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdhc3NpZ25fY29udGV4dC53aW5kb3cgc2hvdWxkIG5vdCBiZSBOb25lLiAnCiAgICAgICAgICAnVGhpcyBtaWdodCBiZSBkdWUgdG8gYSBEb0ZuIHJldHVybmluZyBhIFRpbWVzdGFtcGVkVmFsdWUuJykKICAgIHJldHVybiBbYXNzaWduX2NvbnRleHQud2luZG93XQoKICBkZWYgZ2V0X3dpbmRvd19jb2RlcihzZWxmKToKICAgIHJldHVybiBzZWxmLl93aW5kb3dfY29kZXIKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoVHVwbGVbSywgVl0pCkB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXMoVHVwbGVbSywgVl0pCmNsYXNzIFJlc2h1ZmZsZVBlcktleShQVHJhbnNmb3JtKToKICAiIiJQVHJhbnNmb3JtIHRoYXQgcmV0dXJucyBhIFBDb2xsZWN0aW9uIGVxdWl2YWxlbnQgdG8gaXRzIGlucHV0LAogIGJ1dCBvcGVyYXRpb25hbGx5IHByb3ZpZGVzIHNvbWUgb2YgdGhlIHNpZGUgZWZmZWN0cyBvZiBhIEdyb3VwQnlLZXksCiAgaW4gcGFydGljdWxhciBwcmV2ZW50aW5nIGZ1c2lvbiBvZiB0aGUgc3Vycm91bmRpbmcgdHJhbnNmb3JtcywKICBjaGVja3BvaW50aW5nLCBhbmQgZGVkdXBsaWNhdGlvbiBieSBpZC4KCiAgUmVzaHVmZmxlUGVyS2V5IGlzIGV4cGVyaW1lbnRhbC4gTm8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KICAiIiIKICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgIHdpbmRvd2luZ19zYXZlZCA9IHBjb2xsLndpbmRvd2luZwogICAgaWYgd2luZG93aW5nX3NhdmVkLmlzX2RlZmF1bHQoKToKICAgICAgIyBJbiB0aGlzIChjb21tb24pIGNhc2Ugd2UgY2FuIHVzZSBhIHRyaXZpYWwgdHJpZ2dlciBkcml2ZXIKICAgICAgIyBhbmQgYXZvaWQgdGhlIChleHBlbnNpdmUpIHdpbmRvdyBwYXJhbS4KICAgICAgZ2xvYmFsbHlfd2luZG93ZWQgPSB3aW5kb3cuR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZShOb25lKQogICAgICBNSU5fVElNRVNUQU1QID0gd2luZG93Lk1JTl9USU1FU1RBTVAKCiAgICAgIGRlZiByZWlmeV90aW1lc3RhbXBzKGVsZW1lbnQsIHRpbWVzdGFtcD1Eb0ZuLlRpbWVzdGFtcFBhcmFtKToKICAgICAgICBrZXksIHZhbHVlID0gZWxlbWVudAogICAgICAgIGlmIHRpbWVzdGFtcCA9PSBNSU5fVElNRVNUQU1QOgogICAgICAgICAgdGltZXN0YW1wID0gTm9uZQogICAgICAgIHJldHVybiBrZXksICh2YWx1ZSwgdGltZXN0YW1wKQoKICAgICAgZGVmIHJlc3RvcmVfdGltZXN0YW1wcyhlbGVtZW50KToKICAgICAgICBrZXksIHZhbHVlcyA9IGVsZW1lbnQKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBnbG9iYWxseV93aW5kb3dlZC53aXRoX3ZhbHVlKChrZXksIHZhbHVlKSkgaWYgdGltZXN0YW1wIGlzIE5vbmUgZWxzZQogICAgICAgICAgICB3aW5kb3cuR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZSgoa2V5LCB2YWx1ZSksIHRpbWVzdGFtcCkKICAgICAgICAgICAgZm9yICh2YWx1ZSwgdGltZXN0YW1wKSBpbiB2YWx1ZXMKICAgICAgICBdCgogICAgZWxzZToKCiAgICAgIGRlZiByZWlmeV90aW1lc3RhbXBzKAogICAgICAgICAgZWxlbWVudCwgdGltZXN0YW1wPURvRm4uVGltZXN0YW1wUGFyYW0sIHdpbmRvdz1Eb0ZuLldpbmRvd1BhcmFtKToKICAgICAgICBrZXksIHZhbHVlID0gZWxlbWVudAogICAgICAgICMgVHJhbnNwb3J0IHRoZSB3aW5kb3cgYXMgcGFydCBvZiB0aGUgdmFsdWUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIuCiAgICAgICAgcmV0dXJuIGtleSwgd2luZG93ZWRfdmFsdWUuV2luZG93ZWRWYWx1ZSh2YWx1ZSwgdGltZXN0YW1wLCBbd2luZG93XSkKCiAgICAgIGRlZiByZXN0b3JlX3RpbWVzdGFtcHMoZWxlbWVudCk6CiAgICAgICAga2V5LCB3aW5kb3dlZF92YWx1ZXMgPSBlbGVtZW50CiAgICAgICAgcmV0dXJuIFt3di53aXRoX3ZhbHVlKChrZXksIHd2LnZhbHVlKSkgZm9yIHd2IGluIHdpbmRvd2VkX3ZhbHVlc10KCiAgICB1bmdyb3VwZWQgPSBwY29sbCB8IE1hcChyZWlmeV90aW1lc3RhbXBzKS53aXRoX291dHB1dF90eXBlcyhBbnkpCgogICAgIyBUT0RPKEJFQU0tODEwNCkgVXNpbmcgZ2xvYmFsIHdpbmRvdyBhcyBvbmUgb2YgdGhlIHN0YW5kYXJkIHdpbmRvdy4KICAgICMgVGhpcyBpcyB0byBtaXRpZ2F0ZSB0aGUgRGF0YWZsb3cgSmF2YSBSdW5uZXIgSGFybmVzcyBsaW1pdGF0aW9uIHRvCiAgICAjIGFjY2VwdCBvbmx5IHN0YW5kYXJkIGNvZGVycy4KICAgIHVuZ3JvdXBlZC5fd2luZG93aW5nID0gV2luZG93aW5nKAogICAgICAgIHdpbmRvdy5HbG9iYWxXaW5kb3dzKCksCiAgICAgICAgdHJpZ2dlcmZuPVJlcGVhdGVkbHkoQWZ0ZXJDb3VudCgxKSksCiAgICAgICAgYWNjdW11bGF0aW9uX21vZGU9QWNjdW11bGF0aW9uTW9kZS5ESVNDQVJESU5HLAogICAgICAgIHRpbWVzdGFtcF9jb21iaW5lcj1UaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRUFSTElFU1QpCiAgICByZXN1bHQgPSAoCiAgICAgICAgdW5ncm91cGVkCiAgICAgICAgfCBHcm91cEJ5S2V5KCkKICAgICAgICB8IEZsYXRNYXAocmVzdG9yZV90aW1lc3RhbXBzKS53aXRoX291dHB1dF90eXBlcyhBbnkpKQogICAgcmVzdWx0Ll93aW5kb3dpbmcgPSB3aW5kb3dpbmdfc2F2ZWQKICAgIHJldHVybiByZXN1bHQKCgpAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoVCkKQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhUKQpjbGFzcyBSZXNodWZmbGUoUFRyYW5zZm9ybSk6CiAgIiIiUFRyYW5zZm9ybSB0aGF0IHJldHVybnMgYSBQQ29sbGVjdGlvbiBlcXVpdmFsZW50IHRvIGl0cyBpbnB1dCwKICBidXQgb3BlcmF0aW9uYWxseSBwcm92aWRlcyBzb21lIG9mIHRoZSBzaWRlIGVmZmVjdHMgb2YgYSBHcm91cEJ5S2V5LAogIGluIHBhcnRpY3VsYXIgcHJldmVudGluZyBmdXNpb24gb2YgdGhlIHN1cnJvdW5kaW5nIHRyYW5zZm9ybXMsCiAgY2hlY2twb2ludGluZywgYW5kIGRlZHVwbGljYXRpb24gYnkgaWQuCgogIFJlc2h1ZmZsZSBhZGRzIGEgdGVtcG9yYXJ5IHJhbmRvbSBrZXkgdG8gZWFjaCBlbGVtZW50LCBwZXJmb3JtcyBhCiAgUmVzaHVmZmxlUGVyS2V5LCBhbmQgZmluYWxseSByZW1vdmVzIHRoZSB0ZW1wb3Jhcnkga2V5LgoKICBSZXNodWZmbGUgaXMgZXhwZXJpbWVudGFsLiBObyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgogICIiIgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgIyB0eXBlOiAocHZhbHVlLlBWYWx1ZSkgLT4gcHZhbHVlLlBDb2xsZWN0aW9uCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCApOgogICAgICBLZXllZFQgPSBUdXBsZVtpbnQsIFRdCiAgICBlbHNlOgogICAgICBLZXllZFQgPSBUdXBsZVtsb25nLCBUXSAgIyBweWxpbnQ6IGRpc2FibGU9bG9uZy1idWlsdGluCiAgICByZXR1cm4gKAogICAgICAgIHBjb2xsCiAgICAgICAgfCAnQWRkUmFuZG9tS2V5cycgPj4gTWFwKGxhbWJkYSB0OiAocmFuZG9tLmdldHJhbmRiaXRzKAogICAgICAgICAgICAzMiksIHQpKS53aXRoX2lucHV0X3R5cGVzKFQpLndpdGhfb3V0cHV0X3R5cGVzKEtleWVkVCkKICAgICAgICB8IFJlc2h1ZmZsZVBlcktleSgpCiAgICAgICAgfCAnUmVtb3ZlUmFuZG9tS2V5cycgPj4KICAgICAgICBNYXAobGFtYmRhIHQ6IHRbMV0pLndpdGhfaW5wdXRfdHlwZXMoS2V5ZWRUKS53aXRoX291dHB1dF90eXBlcyhUKSkKCiAgZGVmIHRvX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHNlbGYsIHVudXNlZF9jb250ZXh0KToKICAgICMgdHlwZTogKFBpcGVsaW5lQ29udGV4dCkgLT4gVHVwbGVbc3RyLCBOb25lXQogICAgcmV0dXJuIGNvbW1vbl91cm5zLmNvbXBvc2l0ZXMuUkVTSFVGRkxFLnVybiwgTm9uZQoKICBAc3RhdGljbWV0aG9kCiAgQFBUcmFuc2Zvcm0ucmVnaXN0ZXJfdXJuKGNvbW1vbl91cm5zLmNvbXBvc2l0ZXMuUkVTSFVGRkxFLnVybiwgTm9uZSkKICBkZWYgZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcigKICAgICAgdW51c2VkX3B0cmFuc2Zvcm0sIHVudXNlZF9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBSZXNodWZmbGUoKQoKCkBwdHJhbnNmb3JtX2ZuCmRlZiBXaXRoS2V5cyhwY29sbCwgayk6CiAgIiIiUFRyYW5zZm9ybSB0aGF0IHRha2VzIGEgUENvbGxlY3Rpb24sIGFuZCBlaXRoZXIgYSBjb25zdGFudCBrZXkgb3IgYQogIGNhbGxhYmxlLCBhbmQgcmV0dXJucyBhIFBDb2xsZWN0aW9uIG9mIChLLCBWKSwgd2hlcmUgZWFjaCBvZiB0aGUgdmFsdWVzIGluCiAgdGhlIGlucHV0IFBDb2xsZWN0aW9uIGhhcyBiZWVuIHBhaXJlZCB3aXRoIGVpdGhlciB0aGUgY29uc3RhbnQga2V5IG9yIGEga2V5CiAgY29tcHV0ZWQgZnJvbSB0aGUgdmFsdWUuCiAgIiIiCiAgaWYgY2FsbGFibGUoayk6CiAgICByZXR1cm4gcGNvbGwgfCBNYXAobGFtYmRhIHY6IChrKHYpLCB2KSkKICByZXR1cm4gcGNvbGwgfCBNYXAobGFtYmRhIHY6IChrLCB2KSkKCgpAZXhwZXJpbWVudGFsKCkKQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKFR1cGxlW0ssIFZdKQpjbGFzcyBHcm91cEludG9CYXRjaGVzKFBUcmFuc2Zvcm0pOgogICIiIlBUcmFuc2Zvcm0gdGhhdCBiYXRjaGVzIHRoZSBpbnB1dCBpbnRvIGRlc2lyZWQgYmF0Y2ggc2l6ZS4gRWxlbWVudHMgYXJlCiAgYnVmZmVyZWQgdW50aWwgdGhleSBhcmUgZXF1YWwgdG8gYmF0Y2ggc2l6ZSBwcm92aWRlZCBpbiB0aGUgYXJndW1lbnQgYXQgd2hpY2gKICBwb2ludCB0aGV5IGFyZSBvdXRwdXQgdG8gdGhlIG91dHB1dCBQY29sbGVjdGlvbi4KCiAgV2luZG93cyBhcmUgcHJlc2VydmVkIChiYXRjaGVzIHdpbGwgY29udGFpbiBlbGVtZW50cyBmcm9tIHRoZSBzYW1lIHdpbmRvdykKCiAgR3JvdXBJbnRvQmF0Y2hlcyBpcyBleHBlcmltZW50YWwuIEl0cyB1c2UgY2FzZSB3aWxsIGRlcGVuZCBvbiB0aGUgcnVubmVyIGlmCiAgaXQgaGFzIHN1cHBvcnQgb2YgU3RhdGVzIGFuZCBUaW1lcnMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGJhdGNoX3NpemUpOgogICAgIiIiQ3JlYXRlIGEgbmV3IEdyb3VwSW50b0JhdGNoZXMgd2l0aCBiYXRjaCBzaXplLgoKICAgIEFyZ3VtZW50czoKICAgICAgYmF0Y2hfc2l6ZTogKHJlcXVpcmVkKSBIb3cgbWFueSBlbGVtZW50cyBzaG91bGQgYmUgaW4gYSBiYXRjaAogICAgIiIiCiAgICB3YXJuaW5ncy53YXJuKAogICAgICAgICdVc2Ugb2YgR3JvdXBJbnRvQmF0Y2hlcyB0cmFuc2Zvcm0gcmVxdWlyZXMgU3RhdGUvVGltZXIgJwogICAgICAgICdzdXBwb3J0IGZyb20gdGhlIHJ1bm5lcicpCiAgICBzZWxmLmJhdGNoX3NpemUgPSBiYXRjaF9zaXplCgogIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgaW5wdXRfY29kZXIgPSBjb2RlcnMucmVnaXN0cnkuZ2V0X2NvZGVyKHBjb2xsKQogICAgcmV0dXJuIHBjb2xsIHwgUGFyRG8oCiAgICAgICAgX3BhcmRvX2dyb3VwX2ludG9fYmF0Y2hlcyhzZWxmLmJhdGNoX3NpemUsIGlucHV0X2NvZGVyKSkKCgpkZWYgX3BhcmRvX2dyb3VwX2ludG9fYmF0Y2hlcyhiYXRjaF9zaXplLCBpbnB1dF9jb2Rlcik6CiAgRUxFTUVOVF9TVEFURSA9IEJhZ1N0YXRlU3BlYygndmFsdWVzJywgaW5wdXRfY29kZXIpCiAgQ09VTlRfU1RBVEUgPSBDb21iaW5pbmdWYWx1ZVN0YXRlU3BlYygnY291bnQnLCBpbnB1dF9jb2RlciwgQ291bnRDb21iaW5lRm4oKSkKICBFWFBJUllfVElNRVIgPSBUaW1lclNwZWMoJ2V4cGlyeScsIFRpbWVEb21haW4uV0FURVJNQVJLKQoKICBjbGFzcyBfR3JvdXBJbnRvQmF0Y2hlc0RvRm4oRG9Gbik6CiAgICBkZWYgcHJvY2VzcygKICAgICAgICBzZWxmLAogICAgICAgIGVsZW1lbnQsCiAgICAgICAgd2luZG93PURvRm4uV2luZG93UGFyYW0sCiAgICAgICAgZWxlbWVudF9zdGF0ZT1Eb0ZuLlN0YXRlUGFyYW0oRUxFTUVOVF9TVEFURSksCiAgICAgICAgY291bnRfc3RhdGU9RG9Gbi5TdGF0ZVBhcmFtKENPVU5UX1NUQVRFKSwKICAgICAgICBleHBpcnlfdGltZXI9RG9Gbi5UaW1lclBhcmFtKEVYUElSWV9USU1FUikpOgogICAgICAjIEFsbG93ZWQgbGF0ZW5lc3Mgbm90IHN1cHBvcnRlZCBpbiBQeXRob24gU0RLCiAgICAgICMgaHR0cHM6Ly9iZWFtLmFwYWNoZS5vcmcvZG9jdW1lbnRhdGlvbi9wcm9ncmFtbWluZy1ndWlkZS8jd2F0ZXJtYXJrcy1hbmQtbGF0ZS1kYXRhCiAgICAgIGV4cGlyeV90aW1lci5zZXQod2luZG93LmVuZCkKICAgICAgZWxlbWVudF9zdGF0ZS5hZGQoZWxlbWVudCkKICAgICAgY291bnRfc3RhdGUuYWRkKDEpCiAgICAgIGNvdW50ID0gY291bnRfc3RhdGUucmVhZCgpCiAgICAgIGlmIGNvdW50ID49IGJhdGNoX3NpemU6CiAgICAgICAgYmF0Y2ggPSBbZWxlbWVudCBmb3IgZWxlbWVudCBpbiBlbGVtZW50X3N0YXRlLnJlYWQoKV0KICAgICAgICB5aWVsZCBiYXRjaAogICAgICAgIGVsZW1lbnRfc3RhdGUuY2xlYXIoKQogICAgICAgIGNvdW50X3N0YXRlLmNsZWFyKCkKCiAgICBAb25fdGltZXIoRVhQSVJZX1RJTUVSKQogICAgZGVmIGV4cGlyeSgKICAgICAgICBzZWxmLAogICAgICAgIGVsZW1lbnRfc3RhdGU9RG9Gbi5TdGF0ZVBhcmFtKEVMRU1FTlRfU1RBVEUpLAogICAgICAgIGNvdW50X3N0YXRlPURvRm4uU3RhdGVQYXJhbShDT1VOVF9TVEFURSkpOgogICAgICBiYXRjaCA9IFtlbGVtZW50IGZvciBlbGVtZW50IGluIGVsZW1lbnRfc3RhdGUucmVhZCgpXQogICAgICBpZiBiYXRjaDoKICAgICAgICB5aWVsZCBiYXRjaAogICAgICAgIGVsZW1lbnRfc3RhdGUuY2xlYXIoKQogICAgICAgIGNvdW50X3N0YXRlLmNsZWFyKCkKCiAgcmV0dXJuIF9Hcm91cEludG9CYXRjaGVzRG9GbigpCgoKY2xhc3MgVG9TdHJpbmcob2JqZWN0KToKICAiIiIKICBQVHJhbnNmb3JtIGZvciBjb252ZXJ0aW5nIGEgUENvbGxlY3Rpb24gZWxlbWVudCwgS1Ygb3IgUENvbGxlY3Rpb24gSXRlcmFibGUKICB0byBzdHJpbmcuCiAgIiIiCiAgY2xhc3MgS3ZzKFBUcmFuc2Zvcm0pOgogICAgIiIiCiAgICBUcmFuc2Zvcm1zIGVhY2ggZWxlbWVudCBvZiB0aGUgUENvbGxlY3Rpb24gdG8gYSBzdHJpbmcgb24gdGhlIGtleSBmb2xsb3dlZAogICAgYnkgdGhlIHNwZWNpZmljIGRlbGltaXRlciBhbmQgdGhlIHZhbHVlLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGVsaW1pdGVyPU5vbmUpOgogICAgICBzZWxmLmRlbGltaXRlciA9IGRlbGltaXRlciBvciAiLCIKCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgaW5wdXRfdHlwZSA9IFR1cGxlW0FueSwgQW55XQogICAgICBvdXRwdXRfdHlwZSA9IHN0cgogICAgICByZXR1cm4gKAogICAgICAgICAgcGNvbGwgfCAoCiAgICAgICAgICAgICAgJyVzOktleVZhdWVUb1N0cmluZycgJSBzZWxmLmxhYmVsID4+CiAgICAgICAgICAgICAgKE1hcChsYW1iZGEgeDogInt9e317fSIuZm9ybWF0KHhbMF0sIHNlbGYuZGVsaW1pdGVyLCB4WzFdKSkKICAgICAgICAgICAgICAgKS53aXRoX2lucHV0X3R5cGVzKGlucHV0X3R5cGUpICAjIHR5cGU6IGlnbm9yZVttaXNjXQogICAgICAgICAgICAgIC53aXRoX291dHB1dF90eXBlcyhvdXRwdXRfdHlwZSkpKQoKICBjbGFzcyBFbGVtZW50KFBUcmFuc2Zvcm0pOgogICAgIiIiCiAgICBUcmFuc2Zvcm1zIGVhY2ggZWxlbWVudCBvZiB0aGUgUENvbGxlY3Rpb24gdG8gYSBzdHJpbmcuCiAgICAiIiIKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICBpbnB1dF90eXBlID0gVAogICAgICBvdXRwdXRfdHlwZSA9IHN0cgogICAgICByZXR1cm4gKAogICAgICAgICAgcGNvbGwgfCAoCiAgICAgICAgICAgICAgJyVzOkVsZW1lbnRUb1N0cmluZycgJSBzZWxmLmxhYmVsID4+CiAgICAgICAgICAgICAgKE1hcChsYW1iZGEgeDogc3RyKHgpKQogICAgICAgICAgICAgICApLndpdGhfaW5wdXRfdHlwZXMoaW5wdXRfdHlwZSkud2l0aF9vdXRwdXRfdHlwZXMob3V0cHV0X3R5cGUpKSkKCiAgY2xhc3MgSXRlcmFibGVzKFBUcmFuc2Zvcm0pOgogICAgIiIiCiAgICBUcmFuc2Zvcm1zIGVhY2ggaXRlbSBpbiB0aGUgaXRlcmFibGUgb2YgdGhlIGlucHV0IG9mIFBDb2xsZWN0aW9uIHRvIGEKICAgIHN0cmluZy4gVGhlcmUgaXMgbm8gdHJhaWxpbmcgZGVsaW1pdGVyLgogICAgIiIiCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGVsaW1pdGVyPU5vbmUpOgogICAgICBzZWxmLmRlbGltaXRlciA9IGRlbGltaXRlciBvciAiLCIKCiAgICBkZWYgZXhwYW5kKHNlbGYsIHBjb2xsKToKICAgICAgaW5wdXRfdHlwZSA9IEl0ZXJhYmxlW0FueV0KICAgICAgb3V0cHV0X3R5cGUgPSBzdHIKICAgICAgcmV0dXJuICgKICAgICAgICAgIHBjb2xsIHwgKAogICAgICAgICAgICAgICclczpJdGVyYWJsZXNUb1N0cmluZycgJSBzZWxmLmxhYmVsID4+CiAgICAgICAgICAgICAgKE1hcChsYW1iZGEgeDogc2VsZi5kZWxpbWl0ZXIuam9pbihzdHIoX3gpIGZvciBfeCBpbiB4KSkKICAgICAgICAgICAgICAgKS53aXRoX2lucHV0X3R5cGVzKGlucHV0X3R5cGUpLndpdGhfb3V0cHV0X3R5cGVzKG91dHB1dF90eXBlKSkpCgoKY2xhc3MgUmVpZnkob2JqZWN0KToKICAiIiJQVHJhbnNmb3JtcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBmb3JtIG9mIHZhcmlvdXMKICBCZWFtIHZhbHVlcy4iIiIKICBAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoVCkKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKFQpCiAgY2xhc3MgVGltZXN0YW1wKFBUcmFuc2Zvcm0pOgogICAgIiIiUFRyYW5zZm9ybSB0byB3cmFwIGEgdmFsdWUgaW4gYSBUaW1lc3RhbXBlZFZhbHVlIHdpdGggaXQncwogICAgYXNzb2NpYXRlZCB0aW1lc3RhbXAuIiIiCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgYWRkX3RpbWVzdGFtcF9pbmZvKGVsZW1lbnQsIHRpbWVzdGFtcD1Eb0ZuLlRpbWVzdGFtcFBhcmFtKToKICAgICAgeWllbGQgVGltZXN0YW1wZWRWYWx1ZShlbGVtZW50LCB0aW1lc3RhbXApCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IFBhckRvKHNlbGYuYWRkX3RpbWVzdGFtcF9pbmZvKQoKICBAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoVCkKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKFQpCiAgY2xhc3MgV2luZG93KFBUcmFuc2Zvcm0pOgogICAgIiIiUFRyYW5zZm9ybSB0byBjb252ZXJ0IGFuIGVsZW1lbnQgaW4gYSBQQ29sbGVjdGlvbiBpbnRvIGEgdHVwbGUgb2YKICAgIChlbGVtZW50LCB0aW1lc3RhbXAsIHdpbmRvdyksIHdyYXBwZWQgaW4gYSBUaW1lc3RhbXBlZFZhbHVlIHdpdGggaXQncwogICAgYXNzb2NpYXRlZCB0aW1lc3RhbXAuIiIiCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgYWRkX3dpbmRvd19pbmZvKAogICAgICAgIGVsZW1lbnQsIHRpbWVzdGFtcD1Eb0ZuLlRpbWVzdGFtcFBhcmFtLCB3aW5kb3c9RG9Gbi5XaW5kb3dQYXJhbSk6CiAgICAgIHlpZWxkIFRpbWVzdGFtcGVkVmFsdWUoKGVsZW1lbnQsIHRpbWVzdGFtcCwgd2luZG93KSwgdGltZXN0YW1wKQoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICByZXR1cm4gcGNvbGwgfCBQYXJEbyhzZWxmLmFkZF93aW5kb3dfaW5mbykKCiAgQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKFR1cGxlW0ssIFZdKQogIEB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXMoVHVwbGVbSywgVl0pCiAgY2xhc3MgVGltZXN0YW1wSW5WYWx1ZShQVHJhbnNmb3JtKToKICAgICIiIlBUcmFuc2Zvcm0gdG8gd3JhcCB0aGUgVmFsdWUgaW4gYSBLViBwYWlyIGluIGEgVGltZXN0YW1wZWRWYWx1ZSB3aXRoCiAgICB0aGUgZWxlbWVudCdzIGFzc29jaWF0ZWQgdGltZXN0YW1wLiIiIgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGFkZF90aW1lc3RhbXBfaW5mbyhlbGVtZW50LCB0aW1lc3RhbXA9RG9Gbi5UaW1lc3RhbXBQYXJhbSk6CiAgICAgIGtleSwgdmFsdWUgPSBlbGVtZW50CiAgICAgIHlpZWxkIChrZXksIFRpbWVzdGFtcGVkVmFsdWUodmFsdWUsIHRpbWVzdGFtcCkpCgogICAgZGVmIGV4cGFuZChzZWxmLCBwY29sbCk6CiAgICAgIHJldHVybiBwY29sbCB8IFBhckRvKHNlbGYuYWRkX3RpbWVzdGFtcF9pbmZvKQoKICBAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoVHVwbGVbSywgVl0pCiAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhUdXBsZVtLLCBWXSkKICBjbGFzcyBXaW5kb3dJblZhbHVlKFBUcmFuc2Zvcm0pOgogICAgIiIiUFRyYW5zZm9ybSB0byBjb252ZXJ0IHRoZSBWYWx1ZSBpbiBhIEtWIHBhaXIgaW50byBhIHR1cGxlIG9mCiAgICAodmFsdWUsIHRpbWVzdGFtcCwgd2luZG93KSwgd2l0aCB0aGUgd2hvbGUgZWxlbWVudCBiZWluZyB3cmFwcGVkIGluc2lkZSBhCiAgICBUaW1lc3RhbXBlZFZhbHVlLiIiIgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGFkZF93aW5kb3dfaW5mbygKICAgICAgICBlbGVtZW50LCB0aW1lc3RhbXA9RG9Gbi5UaW1lc3RhbXBQYXJhbSwgd2luZG93PURvRm4uV2luZG93UGFyYW0pOgogICAgICBrZXksIHZhbHVlID0gZWxlbWVudAogICAgICB5aWVsZCBUaW1lc3RhbXBlZFZhbHVlKChrZXksICh2YWx1ZSwgdGltZXN0YW1wLCB3aW5kb3cpKSwgdGltZXN0YW1wKQoKICAgIGRlZiBleHBhbmQoc2VsZiwgcGNvbGwpOgogICAgICByZXR1cm4gcGNvbGwgfCBQYXJEbyhzZWxmLmFkZF93aW5kb3dfaW5mbykKCgpjbGFzcyBSZWdleChvYmplY3QpOgogICIiIgogIFBUcmFuc2Zvcm0gIHRvIHVzZSBSZWd1bGFyIEV4cHJlc3Npb24gdG8gcHJvY2VzcyB0aGUgZWxlbWVudHMgaW4gYQogIFBDb2xsZWN0aW9uLgogICIiIgoKICBBTEwgPSAiX19yZWdleF9hbGxfZ3JvdXBzIgoKICBAc3RhdGljbWV0aG9kCiAgZGVmIF9yZWdleF9jb21waWxlKHJlZ2V4KToKICAgICIiIlJldHVybiByZS5jb21waWxlIGlmIHRoZSByZWdleCBoYXMgYSBzdHJpbmcgdmFsdWUiIiIKICAgIGlmIGlzaW5zdGFuY2UocmVnZXgsIHN0cik6CiAgICAgIHJlZ2V4ID0gcmUuY29tcGlsZShyZWdleCkKICAgIHJldHVybiByZWdleAoKICBAc3RhdGljbWV0aG9kCiAgQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHN0cikKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHN0cikKICBAcHRyYW5zZm9ybV9mbgogIGRlZiBtYXRjaGVzKHBjb2xsLCByZWdleCwgZ3JvdXA9MCk6CiAgICAiIiIKICAgIFJldHVybnMgdGhlIG1hdGNoZXMgKGdyb3VwIDAgYnkgZGVmYXVsdCkgaWYgemVybyBvciBtb3JlIGNoYXJhY3RlcnMgYXQgdGhlCiAgICBiZWdpbm5pbmcgb2Ygc3RyaW5nIG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIFRvIG1hdGNoIHRoZSBlbnRpcmUKICAgIHN0cmluZywgYWRkICIkIiBzaWduIGF0IHRoZSBlbmQgb2YgcmVnZXggZXhwcmVzc2lvbi4KCiAgICBHcm91cCBjYW4gYmUgaW50ZWdlciB2YWx1ZSBvciBhIHN0cmluZyB2YWx1ZS4KCiAgICBBcmdzOgogICAgICByZWdleDogdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcgb3IgKHJlLmNvbXBpbGUpIHBhdHRlcm4uCiAgICAgIGdyb3VwOiAob3B0aW9uYWwpIG5hbWUvbnVtYmVyIG9mIHRoZSBncm91cCwgaXQgY2FuIGJlIGludGVnZXIgb3IgYSBzdHJpbmcKICAgICAgICB2YWx1ZS4gRGVmYXVsdHMgdG8gMCwgbWVhbmluZyB0aGUgZW50aXJlIG1hdGNoZWQgc3RyaW5nIHdpbGwgYmUKICAgICAgICByZXR1cm5lZC4KICAgICIiIgogICAgcmVnZXggPSBSZWdleC5fcmVnZXhfY29tcGlsZShyZWdleCkKCiAgICBkZWYgX3Byb2Nlc3MoZWxlbWVudCk6CiAgICAgIG0gPSByZWdleC5tYXRjaChlbGVtZW50KQogICAgICBpZiBtOgogICAgICAgIHlpZWxkIG0uZ3JvdXAoZ3JvdXApCgogICAgcmV0dXJuIHBjb2xsIHwgRmxhdE1hcChfcHJvY2VzcykKCiAgQHN0YXRpY21ldGhvZAogIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhzdHIpCiAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhMaXN0W3N0cl0pCiAgQHB0cmFuc2Zvcm1fZm4KICBkZWYgYWxsX21hdGNoZXMocGNvbGwsIHJlZ2V4KToKICAgICIiIgogICAgUmV0dXJucyBhbGwgbWF0Y2hlcyAoZ3JvdXBzKSBpZiB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nCiAgICBvZiBzdHJpbmcgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KCiAgICBBcmdzOgogICAgICByZWdleDogdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcgb3IgKHJlLmNvbXBpbGUpIHBhdHRlcm4uCiAgICAiIiIKICAgIHJlZ2V4ID0gUmVnZXguX3JlZ2V4X2NvbXBpbGUocmVnZXgpCgogICAgZGVmIF9wcm9jZXNzKGVsZW1lbnQpOgogICAgICBtID0gcmVnZXgubWF0Y2goZWxlbWVudCkKICAgICAgaWYgbToKICAgICAgICB5aWVsZCBbbS5ncm91cChpeCkgZm9yIGl4IGluIHJhbmdlKG0ubGFzdGluZGV4ICsgMSldCgogICAgcmV0dXJuIHBjb2xsIHwgRmxhdE1hcChfcHJvY2VzcykKCiAgQHN0YXRpY21ldGhvZAogIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhzdHIpCiAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhUdXBsZVtzdHIsIHN0cl0pCiAgQHB0cmFuc2Zvcm1fZm4KICBkZWYgbWF0Y2hlc19rdihwY29sbCwgcmVnZXgsIGtleUdyb3VwLCB2YWx1ZUdyb3VwPTApOgogICAgIiIiCiAgICBSZXR1cm5zIHRoZSBLViBwYWlycyBpZiB0aGUgc3RyaW5nIG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiwgZGVyaXZpbmcKICAgIHRoZSBrZXkgJiB2YWx1ZSBmcm9tIHRoZSBzcGVjaWZpZWQgZ3JvdXAgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KCiAgICBBcmdzOgogICAgICByZWdleDogdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcgb3IgKHJlLmNvbXBpbGUpIHBhdHRlcm4uCiAgICAgIGtleUdyb3VwOiBUaGUgUmVnZXggZ3JvdXAgdG8gdXNlIGFzIHRoZSBrZXkuIENhbiBiZSBpbnQgb3Igc3RyLgogICAgICB2YWx1ZUdyb3VwOiAob3B0aW9uYWwpIFJlZ2V4IGdyb3VwIHRvIHVzZSB0aGUgdmFsdWUuIENhbiBiZSBpbnQgb3Igc3RyLgogICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlICIwIiByZXR1cm5zIGVudGlyZSBtYXRjaGVkIHN0cmluZy4KICAgICIiIgogICAgcmVnZXggPSBSZWdleC5fcmVnZXhfY29tcGlsZShyZWdleCkKCiAgICBkZWYgX3Byb2Nlc3MoZWxlbWVudCk6CiAgICAgIG1hdGNoID0gcmVnZXgubWF0Y2goZWxlbWVudCkKICAgICAgaWYgbWF0Y2g6CiAgICAgICAgeWllbGQgKG1hdGNoLmdyb3VwKGtleUdyb3VwKSwgbWF0Y2guZ3JvdXAodmFsdWVHcm91cCkpCgogICAgcmV0dXJuIHBjb2xsIHwgRmxhdE1hcChfcHJvY2VzcykKCiAgQHN0YXRpY21ldGhvZAogIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhzdHIpCiAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhzdHIpCiAgQHB0cmFuc2Zvcm1fZm4KICBkZWYgZmluZChwY29sbCwgcmVnZXgsIGdyb3VwPTApOgogICAgIiIiCiAgICBSZXR1cm5zIHRoZSBtYXRjaGVzIGlmIGEgcG9ydGlvbiBvZiB0aGUgbGluZSBtYXRjaGVzIHRoZSBSZWdleC4gUmV0dXJucwogICAgdGhlIGVudGlyZSBncm91cCAoZ3JvdXAgMCBieSBkZWZhdWx0KS4gR3JvdXAgY2FuIGJlIGludGVnZXIgdmFsdWUgb3IgYQogICAgc3RyaW5nIHZhbHVlLgoKICAgIEFyZ3M6CiAgICAgIHJlZ2V4OiB0aGUgcmVndWxhciBleHByZXNzaW9uIHN0cmluZyBvciAocmUuY29tcGlsZSkgcGF0dGVybi4KICAgICAgZ3JvdXA6IChvcHRpb25hbCkgbmFtZSBvZiB0aGUgZ3JvdXAsIGl0IGNhbiBiZSBpbnRlZ2VyIG9yIGEgc3RyaW5nIHZhbHVlLgogICAgIiIiCiAgICByZWdleCA9IFJlZ2V4Ll9yZWdleF9jb21waWxlKHJlZ2V4KQoKICAgIGRlZiBfcHJvY2VzcyhlbGVtZW50KToKICAgICAgciA9IHJlZ2V4LnNlYXJjaChlbGVtZW50KQogICAgICBpZiByOgogICAgICAgIHlpZWxkIHIuZ3JvdXAoZ3JvdXApCgogICAgcmV0dXJuIHBjb2xsIHwgRmxhdE1hcChfcHJvY2VzcykKCiAgQHN0YXRpY21ldGhvZAogIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyhzdHIpCiAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhVbmlvbltMaXN0W3N0cl0sIFR1cGxlW3N0ciwgc3RyXV0pCiAgQHB0cmFuc2Zvcm1fZm4KICBkZWYgZmluZF9hbGwocGNvbGwsIHJlZ2V4LCBncm91cD0wLCBvdXRwdXRFbXB0eT1UcnVlKToKICAgICIiIgogICAgUmV0dXJucyB0aGUgbWF0Y2hlcyBpZiBhIHBvcnRpb24gb2YgdGhlIGxpbmUgbWF0Y2hlcyB0aGUgUmVnZXguIEJ5IGRlZmF1bHQsCiAgICBsaXN0IG9mIGdyb3VwIDAgd2lsbCByZXR1cm4gd2l0aCBlbXB0eSBpdGVtcy4gVG8gZ2V0IGFsbCBncm91cHMsIHBhc3MgdGhlCiAgICBgUmVnZXguQUxMYCBmbGFnIGluIHRoZSBgZ3JvdXBgIHBhcmFtZXRlciB3aGljaCByZXR1cm5zIGFsbCB0aGUgZ3JvdXBzIGluCiAgICB0aGUgdHVwbGUgZm9ybWF0LgoKICAgIEFyZ3M6CiAgICAgIHJlZ2V4OiB0aGUgcmVndWxhciBleHByZXNzaW9uIHN0cmluZyBvciAocmUuY29tcGlsZSkgcGF0dGVybi4KICAgICAgZ3JvdXA6IChvcHRpb25hbCkgbmFtZSBvZiB0aGUgZ3JvdXAsIGl0IGNhbiBiZSBpbnRlZ2VyIG9yIGEgc3RyaW5nIHZhbHVlLgogICAgICBvdXRwdXRFbXB0eTogKG9wdGlvbmFsKSBTaG91bGQgZW1wdHkgYmUgb3V0cHV0LiBUcnVlIHRvIG91dHB1dCBlbXB0aWVzCiAgICAgICAgYW5kIGZhbHNlIGlmIG5vdC4KICAgICIiIgogICAgcmVnZXggPSBSZWdleC5fcmVnZXhfY29tcGlsZShyZWdleCkKCiAgICBkZWYgX3Byb2Nlc3MoZWxlbWVudCk6CiAgICAgIG1hdGNoZXMgPSByZWdleC5maW5kaXRlcihlbGVtZW50KQogICAgICBpZiBncm91cCA9PSBSZWdleC5BTEw6CiAgICAgICAgeWllbGQgWyhtLmdyb3VwKCksIG0uZ3JvdXBzKClbMF0pIGZvciBtIGluIG1hdGNoZXMKICAgICAgICAgICAgICAgaWYgb3V0cHV0RW1wdHkgb3IgbS5ncm91cHMoKVswXV0KICAgICAgZWxzZToKICAgICAgICB5aWVsZCBbbS5ncm91cChncm91cCkgZm9yIG0gaW4gbWF0Y2hlcyBpZiBvdXRwdXRFbXB0eSBvciBtLmdyb3VwKGdyb3VwKV0KCiAgICByZXR1cm4gcGNvbGwgfCBGbGF0TWFwKF9wcm9jZXNzKQoKICBAc3RhdGljbWV0aG9kCiAgQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHN0cikKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKFR1cGxlW3N0ciwgc3RyXSkKICBAcHRyYW5zZm9ybV9mbgogIGRlZiBmaW5kX2t2KHBjb2xsLCByZWdleCwga2V5R3JvdXAsIHZhbHVlR3JvdXA9MCk6CiAgICAiIiIKICAgIFJldHVybnMgdGhlIG1hdGNoZXMgaWYgYSBwb3J0aW9uIG9mIHRoZSBsaW5lIG1hdGNoZXMgdGhlIFJlZ2V4LiBSZXR1cm5zIHRoZQogICAgc3BlY2lmaWVkIGdyb3VwcyBhcyB0aGUga2V5IGFuZCB2YWx1ZSBwYWlyLgoKICAgIEFyZ3M6CiAgICAgIHJlZ2V4OiB0aGUgcmVndWxhciBleHByZXNzaW9uIHN0cmluZyBvciAocmUuY29tcGlsZSkgcGF0dGVybi4KICAgICAga2V5R3JvdXA6IFRoZSBSZWdleCBncm91cCB0byB1c2UgYXMgdGhlIGtleS4gQ2FuIGJlIGludCBvciBzdHIuCiAgICAgIHZhbHVlR3JvdXA6IChvcHRpb25hbCkgUmVnZXggZ3JvdXAgdG8gdXNlIHRoZSB2YWx1ZS4gQ2FuIGJlIGludCBvciBzdHIuCiAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgIjAiIHJldHVybnMgZW50aXJlIG1hdGNoZWQgc3RyaW5nLgogICAgIiIiCiAgICByZWdleCA9IFJlZ2V4Ll9yZWdleF9jb21waWxlKHJlZ2V4KQoKICAgIGRlZiBfcHJvY2VzcyhlbGVtZW50KToKICAgICAgbWF0Y2hlcyA9IHJlZ2V4LmZpbmRpdGVyKGVsZW1lbnQpCiAgICAgIGlmIG1hdGNoZXM6CiAgICAgICAgZm9yIG1hdGNoIGluIG1hdGNoZXM6CiAgICAgICAgICB5aWVsZCAobWF0Y2guZ3JvdXAoa2V5R3JvdXApLCBtYXRjaC5ncm91cCh2YWx1ZUdyb3VwKSkKCiAgICByZXR1cm4gcGNvbGwgfCBGbGF0TWFwKF9wcm9jZXNzKQoKICBAc3RhdGljbWV0aG9kCiAgQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHN0cikKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHN0cikKICBAcHRyYW5zZm9ybV9mbgogIGRlZiByZXBsYWNlX2FsbChwY29sbCwgcmVnZXgsIHJlcGxhY2VtZW50KToKICAgICIiIgogICAgUmV0dXJucyB0aGUgbWF0Y2hlcyBpZiBhIHBvcnRpb24gb2YgdGhlIGxpbmUgIG1hdGNoZXMgdGhlIHJlZ2V4IGFuZAogICAgcmVwbGFjZXMgYWxsIG1hdGNoZXMgd2l0aCB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLgoKICAgIEFyZ3M6CiAgICAgIHJlZ2V4OiB0aGUgcmVndWxhciBleHByZXNzaW9uIHN0cmluZyBvciAocmUuY29tcGlsZSkgcGF0dGVybi4KICAgICAgcmVwbGFjZW1lbnQ6IHRoZSBzdHJpbmcgdG8gYmUgc3Vic3RpdHV0ZWQgZm9yIGVhY2ggbWF0Y2guCiAgICAiIiIKICAgIHJlZ2V4ID0gUmVnZXguX3JlZ2V4X2NvbXBpbGUocmVnZXgpCiAgICByZXR1cm4gcGNvbGwgfCBNYXAobGFtYmRhIGVsZW06IHJlZ2V4LnN1YihyZXBsYWNlbWVudCwgZWxlbSkpCgogIEBzdGF0aWNtZXRob2QKICBAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXMoc3RyKQogIEB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXMoc3RyKQogIEBwdHJhbnNmb3JtX2ZuCiAgZGVmIHJlcGxhY2VfZmlyc3QocGNvbGwsIHJlZ2V4LCByZXBsYWNlbWVudCk6CiAgICAiIiIKICAgIFJldHVybnMgdGhlIG1hdGNoZXMgaWYgYSBwb3J0aW9uIG9mIHRoZSBsaW5lIG1hdGNoZXMgdGhlIHJlZ2V4IGFuZCByZXBsYWNlcwogICAgdGhlIGZpcnN0IG1hdGNoIHdpdGggdGhlIHJlcGxhY2VtZW50IHN0cmluZy4KCiAgICBBcmdzOgogICAgICByZWdleDogdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcgb3IgKHJlLmNvbXBpbGUpIHBhdHRlcm4uCiAgICAgIHJlcGxhY2VtZW50OiB0aGUgc3RyaW5nIHRvIGJlIHN1YnN0aXR1dGVkIGZvciBlYWNoIG1hdGNoLgogICAgIiIiCiAgICByZWdleCA9IFJlZ2V4Ll9yZWdleF9jb21waWxlKHJlZ2V4KQogICAgcmV0dXJuIHBjb2xsIHwgTWFwKGxhbWJkYSBlbGVtOiByZWdleC5zdWIocmVwbGFjZW1lbnQsIGVsZW0sIDEpKQoKICBAc3RhdGljbWV0aG9kCiAgQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHN0cikKICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKExpc3Rbc3RyXSkKICBAcHRyYW5zZm9ybV9mbgogIGRlZiBzcGxpdChwY29sbCwgcmVnZXgsIG91dHB1dEVtcHR5PUZhbHNlKToKICAgICIiIgogICAgUmV0dXJucyB0aGUgbGlzdCBzdHJpbmcgd2hpY2ggd2FzIHNwbGl0dGVkIG9uIHRoZSBiYXNpcyBvZiByZWd1bGFyCiAgICBleHByZXNzaW9uLiBJdCB3aWxsIG5vdCBvdXRwdXQgZW1wdHkgaXRlbXMgKGJ5IGRlZmF1bHRzKS4KCiAgICBBcmdzOgogICAgICByZWdleDogdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcgb3IgKHJlLmNvbXBpbGUpIHBhdHRlcm4uCiAgICAgIG91dHB1dEVtcHR5OiAob3B0aW9uYWwpIFNob3VsZCBlbXB0eSBiZSBvdXRwdXQuIFRydWUgdG8gb3V0cHV0IGVtcHRpZXMKICAgICAgICAgIGFuZCBmYWxzZSBpZiBub3QuCiAgICAiIiIKICAgIHJlZ2V4ID0gUmVnZXguX3JlZ2V4X2NvbXBpbGUocmVnZXgpCiAgICBvdXRwdXRFbXB0eSA9IGJvb2wob3V0cHV0RW1wdHkpCgogICAgZGVmIF9wcm9jZXNzKGVsZW1lbnQpOgogICAgICByID0gcmVnZXguc3BsaXQoZWxlbWVudCkKICAgICAgaWYgciBhbmQgbm90IG91dHB1dEVtcHR5OgogICAgICAgIHIgPSBsaXN0KGZpbHRlcihOb25lLCByKSkKICAgICAgeWllbGQgcgoKICAgIHJldHVybiBwY29sbCB8IEZsYXRNYXAoX3Byb2Nlc3MpCpR9lCiMFUNvR3JvdXBCeUtleS5fX2luaXRfX5RqVjEBAEuaS56HlIwjQ29Hcm91cEJ5S2V5Ll9leHRyYWN0X2lucHV0X3B2YWx1ZXOUalYxAQBLoEumh5SME0NvR3JvdXBCeUtleS5leHBhbmSUalYxAQBLqEvVh5SMDENvR3JvdXBCeUtleZRqXTEBAEtoS9WHlIwES2V5c5RqVjEBAEvYS9qHlIwGVmFsdWVzlGpWMQEAS91L34eUjAZLdlN3YXCUalYxAQBL4kvkh5SMCERpc3RpbmN0lGpWMQEAS+dL7oeUjBBSZW1vdmVEdXBsaWNhdGVzlGpWMQEAS/FL9YeUjBxfQmF0Y2hTaXplRXN0aW1hdG9yLl9faW5pdF9flGpWMQEAS/9NMQGHlIwmX0JhdGNoU2l6ZUVzdGltYXRvci5pZ25vcmVfbmV4dF90aW1pbmeUalYxAQBNMwFNOQGHlIwfX0JhdGNoU2l6ZUVzdGltYXRvci5yZWNvcmRfdGltZZRqVjEBAE07AU1MAYeUjB5fQmF0Y2hTaXplRXN0aW1hdG9yLl90aGluX2RhdGGUalYxAQBNTgFNUgGHlIwuX0JhdGNoU2l6ZUVzdGltYXRvci5saW5lYXJfcmVncmVzc2lvbl9ub19udW1weZRqVjEBAE1UAU1jAYeUjCtfQmF0Y2hTaXplRXN0aW1hdG9yLmxpbmVhcl9yZWdyZXNzaW9uX251bXB5lGpWMQEATWUBTYkBh5SMLl9CYXRjaFNpemVFc3RpbWF0b3IuX2NhbGN1bGF0ZV9uZXh0X2JhdGNoX3NpemWUalYxAQBNkgFNxAGHlIwjX0JhdGNoU2l6ZUVzdGltYXRvci5uZXh0X2JhdGNoX3NpemWUalYxAQBNxgFN0wGHlIwTX0JhdGNoU2l6ZUVzdGltYXRvcpRqXTEBAEv4TdMBh5SMI19HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuLl9faW5pdF9flGpWMQEATdcBTdgBh5SMJ19HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuLnN0YXJ0X2J1bmRsZZRqVjEBAE3aAU3eAYeUjCJfR2xvYmFsV2luZG93c0JhdGNoaW5nRG9Gbi5wcm9jZXNzlGpWMQEATeABTeYBh5SMKF9HbG9iYWxXaW5kb3dzQmF0Y2hpbmdEb0ZuLmZpbmlzaF9idW5kbGWUalYxAQBN6AFN7QGHlIwaX0dsb2JhbFdpbmRvd3NCYXRjaGluZ0RvRm6Ual0xAQBN1gFN7QGHlIwhX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuLl9faW5pdF9flGpWMQEATfQBTfUBh5SMJV9XaW5kb3dBd2FyZUJhdGNoaW5nRG9Gbi5zdGFydF9idW5kbGWUalYxAQBN9wFN+wGHlIwgX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuLnByb2Nlc3OUalYxAQBN/QFNDgKHlIwmX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZuLmZpbmlzaF9idW5kbGWUalYxAQBNEAJNFwKHlIwYX1dpbmRvd0F3YXJlQmF0Y2hpbmdEb0ZulGpdMQEATfABTRcCh5SMFkJhdGNoRWxlbWVudHMuX19pbml0X1+UalYxAQBNPAJNSgKHlIwUQmF0Y2hFbGVtZW50cy5leHBhbmSUalYxAQBNTAJNVQKHlIwNQmF0Y2hFbGVtZW50c5RqXTEBAE0aAk1VAoeUjBpfSWRlbnRpdHlXaW5kb3dGbi5fX2luaXRfX5RqVjEBAE1fAk1qAoeUjBhfSWRlbnRpdHlXaW5kb3dGbi5hc3NpZ26UalYxAQBNbAJNcQKHlIwiX0lkZW50aXR5V2luZG93Rm4uZ2V0X3dpbmRvd19jb2RlcpRqVjEBAE1zAk10AoeUjBFfSWRlbnRpdHlXaW5kb3dGbpRqXTEBAE1YAk10AoeUjCdSZXNodWZmbGVQZXJLZXkuZXhwYW5kLnJlaWZ5X3RpbWVzdGFtcHOUalYxAQBNmQJNnQKHlIwpUmVzaHVmZmxlUGVyS2V5LmV4cGFuZC5yZXN0b3JlX3RpbWVzdGFtcHOUalYxAQBNnwJNoQKHlIwWUmVzaHVmZmxlUGVyS2V5LmV4cGFuZJRqVjEBAE2BAk2yAoeUjA9SZXNodWZmbGVQZXJLZXmUal0xAQBNdwJNsgKHlIwQUmVzaHVmZmxlLmV4cGFuZJRqVjEBAE3CAk3OAoeUjCFSZXNodWZmbGUudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBN0AJN0gKHlIwjUmVzaHVmZmxlLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBN1AJN2AKHlIwJUmVzaHVmZmxllGpdMQEATbUCTdgCh5SMCFdpdGhLZXlzlGpWMQEATdsCTeQCh5SMGUdyb3VwSW50b0JhdGNoZXMuX19pbml0X1+UalYxAQBN8wJN/AKHlIwXR3JvdXBJbnRvQmF0Y2hlcy5leHBhbmSUalYxAQBN/gJNAQOHlIwQR3JvdXBJbnRvQmF0Y2hlc5RqXTEBAE3nAk0BA4eUjDdfcGFyZG9fZ3JvdXBfaW50b19iYXRjaGVzLl9Hcm91cEludG9CYXRjaGVzRG9Gbi5wcm9jZXNzlGpWMQEATQoDTRsDh5SMNl9wYXJkb19ncm91cF9pbnRvX2JhdGNoZXMuX0dyb3VwSW50b0JhdGNoZXNEb0ZuLmV4cGlyeZRqVjEBAE0dA00mA4eUjC9fcGFyZG9fZ3JvdXBfaW50b19iYXRjaGVzLl9Hcm91cEludG9CYXRjaGVzRG9GbpRqXTEBAE0JA00mA4eUjBlfcGFyZG9fZ3JvdXBfaW50b19iYXRjaGVzlGpWMQEATQQDTSgDh5SMFVRvU3RyaW5nLkt2cy5fX2luaXRfX5RqVjEBAE01A002A4eUjBNUb1N0cmluZy5LdnMuZXhwYW5klGpWMQEATTgDTUADh5SMDFRvU3RyaW5nLkt2c5RqXTEBAE0wA01AA4eUjBdUb1N0cmluZy5FbGVtZW50LmV4cGFuZJRqVjEBAE1GA01NA4eUjBBUb1N0cmluZy5FbGVtZW50lGpdMQEATUIDTU0Dh5SMG1RvU3RyaW5nLkl0ZXJhYmxlcy5fX2luaXRfX5RqVjEBAE1UA01VA4eUjBlUb1N0cmluZy5JdGVyYWJsZXMuZXhwYW5klGpWMQEATVcDTV4Dh5SMElRvU3RyaW5nLkl0ZXJhYmxlc5RqXTEBAE1PA01eA4eUjAhUb1N0cmluZ5RqXTEBAE0rA01eA4eUjCJSZWlmeS5UaW1lc3RhbXAuYWRkX3RpbWVzdGFtcF9pbmZvlGpWMQEATWkDTWsDh5SMFlJlaWZ5LlRpbWVzdGFtcC5leHBhbmSUalYxAQBNbQNNbgOHlIwPUmVpZnkuVGltZXN0YW1wlGpdMQEATWQDTW4Dh5SMHFJlaWZ5LldpbmRvdy5hZGRfd2luZG93X2luZm+UalYxAQBNdgNNeQOHlIwTUmVpZnkuV2luZG93LmV4cGFuZJRqVjEBAE17A018A4eUjAxSZWlmeS5XaW5kb3eUal0xAQBNcANNfAOHlIwpUmVpZnkuVGltZXN0YW1wSW5WYWx1ZS5hZGRfdGltZXN0YW1wX2luZm+UalYxAQBNgwNNhgOHlIwdUmVpZnkuVGltZXN0YW1wSW5WYWx1ZS5leHBhbmSUalYxAQBNiANNiQOHlIwWUmVpZnkuVGltZXN0YW1wSW5WYWx1ZZRqXTEBAE1+A02JA4eUjCNSZWlmeS5XaW5kb3dJblZhbHVlLmFkZF93aW5kb3dfaW5mb5RqVjEBAE2RA02VA4eUjBpSZWlmeS5XaW5kb3dJblZhbHVlLmV4cGFuZJRqVjEBAE2XA02YA4eUjBNSZWlmeS5XaW5kb3dJblZhbHVllGpdMQEATYsDTZgDh5SMBVJlaWZ5lGpdMQEATWEDTZgDh5SMFFJlZ2V4Ll9yZWdleF9jb21waWxllGpWMQEATaMDTagDh5SMDVJlZ2V4Lm1hdGNoZXOUalYxAQBNqgNNwwOHlIwRUmVnZXguYWxsX21hdGNoZXOUalYxAQBNxQNN2AOHlIwQUmVnZXgubWF0Y2hlc19rdpRqVjEBAE3aA03wA4eUjApSZWdleC5maW5klGpWMQEATfIDTQcEh5SMDlJlZ2V4LmZpbmRfYWxslGpWMQEATQkETSQEh5SMDVJlZ2V4LmZpbmRfa3aUalYxAQBNJgRNPQSHlIwRUmVnZXgucmVwbGFjZV9hbGyUalYxAQBNPwRNTQSHlIwTUmVnZXgucmVwbGFjZV9maXJzdJRqVjEBAE1PBE1dBIeUjAtSZWdleC5zcGxpdJRqVjEBAE1fBE12BIeUjAVSZWdleJRqXTEBAE2bA012BIeUdX2UKIwMQ29Hcm91cEJ5S2V5lGo5AwAAjBNDb0dyb3VwQnlLZXkuZXhwYW5klGo5AwAAjARLZXlzlGo5AwAAjAZWYWx1ZXOUajkDAACMBkt2U3dhcJRqOQMAAIwIRGlzdGluY3SUajkDAACMEFJlbW92ZUR1cGxpY2F0ZXOUajkDAACMDUJhdGNoRWxlbWVudHOUajkDAACMFEJhdGNoRWxlbWVudHMuZXhwYW5klGo5AwAAjAlSZXNodWZmbGWUajkDAACMEFJlc2h1ZmZsZS5leHBhbmSUajkDAACMIVJlc2h1ZmZsZS50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqOQMAAIwjUmVzaHVmZmxlLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUajkDAACMCFdpdGhLZXlzlGo5AwAAjBBHcm91cEludG9CYXRjaGVzlGo5AwAAjBdHcm91cEludG9CYXRjaGVzLmV4cGFuZJRqOQMAAIwIVG9TdHJpbmeUajkDAACMDFRvU3RyaW5nLkt2c5RqOQMAAIwTVG9TdHJpbmcuS3ZzLmV4cGFuZJRqOQMAAIwQVG9TdHJpbmcuRWxlbWVudJRqOQMAAIwXVG9TdHJpbmcuRWxlbWVudC5leHBhbmSUajkDAACMElRvU3RyaW5nLkl0ZXJhYmxlc5RqOQMAAIwZVG9TdHJpbmcuSXRlcmFibGVzLmV4cGFuZJRqOQMAAIwFUmVpZnmUajkDAACMD1JlaWZ5LlRpbWVzdGFtcJRqOQMAAIwiUmVpZnkuVGltZXN0YW1wLmFkZF90aW1lc3RhbXBfaW5mb5RqOQMAAIwWUmVpZnkuVGltZXN0YW1wLmV4cGFuZJRqOQMAAIwMUmVpZnkuV2luZG93lGo5AwAAjBxSZWlmeS5XaW5kb3cuYWRkX3dpbmRvd19pbmZvlGo5AwAAjBNSZWlmeS5XaW5kb3cuZXhwYW5klGo5AwAAjBZSZWlmeS5UaW1lc3RhbXBJblZhbHVllGo5AwAAjClSZWlmeS5UaW1lc3RhbXBJblZhbHVlLmFkZF90aW1lc3RhbXBfaW5mb5RqOQMAAIwdUmVpZnkuVGltZXN0YW1wSW5WYWx1ZS5leHBhbmSUajkDAACME1JlaWZ5LldpbmRvd0luVmFsdWWUajkDAACMI1JlaWZ5LldpbmRvd0luVmFsdWUuYWRkX3dpbmRvd19pbmZvlGo5AwAAjBpSZWlmeS5XaW5kb3dJblZhbHVlLmV4cGFuZJRqOQMAAIwFUmVnZXiUajkDAACMDVJlZ2V4Lm1hdGNoZXOUajkDAACMEVJlZ2V4LmFsbF9tYXRjaGVzlGo5AwAAjBBSZWdleC5tYXRjaGVzX2t2lGo5AwAAjApSZWdleC5maW5klGo5AwAAjA5SZWdleC5maW5kX2FsbJRqOQMAAIwNUmVnZXguZmluZF9rdpRqOQMAAIwRUmVnZXgucmVwbGFjZV9hbGyUajkDAACME1JlZ2V4LnJlcGxhY2VfZmlyc3SUajkDAACMC1JlZ2V4LnNwbGl0lGo5AwAAdYwbYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy51dGlslHSUjB1hcGFjaGVfYmVhbS50cmFuc2Zvcm1zLndpbmRvd5QoWPdLAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIldpbmRvd2luZyBjb25jZXB0cy4KCkEgV2luZG93SW50byB0cmFuc2Zvcm0gbG9naWNhbGx5IGRpdmlkZXMgdXAgb3IgZ3JvdXBzIHRoZSBlbGVtZW50cyBvZiBhClBDb2xsZWN0aW9uIGludG8gZmluaXRlIHdpbmRvd3MgYWNjb3JkaW5nIHRvIGEgd2luZG93aW5nIGZ1bmN0aW9uIChkZXJpdmVkIGZyb20KV2luZG93Rm4pLgoKVGhlIG91dHB1dCBvZiBXaW5kb3dJbnRvIGNvbnRhaW5zIHRoZSBzYW1lIGVsZW1lbnRzIGFzIGlucHV0LCBidXQgdGhleSBoYXZlIGJlZW4KbG9naWNhbGx5IGFzc2lnbmVkIHRvIHdpbmRvd3MuIFRoZSBuZXh0IEdyb3VwQnlLZXkocykgdHJhbnNmb3JtcywgaW5jbHVkaW5nIG9uZQp3aXRoaW4gYSBjb21wb3NpdGUgdHJhbnNmb3JtLCB3aWxsIGdyb3VwIGJ5IHRoZSBjb21iaW5hdGlvbiBvZiBrZXlzIGFuZCB3aW5kb3dzLgoKV2luZG93aW5nIGEgUENvbGxlY3Rpb24gYWxsb3dzIGNodW5rcyBvZiBpdCB0byBiZSBwcm9jZXNzZWQgaW5kaXZpZHVhbGx5LCBiZWZvcmUKdGhlIGVudGlyZSBQQ29sbGVjdGlvbiBpcyBhdmFpbGFibGUuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvcgpQQ29sbGVjdGlvbihzKSB3aXRoIHVuYm91bmRlZCBzaXplLCBzaW5jZSB0aGUgZnVsbCBQQ29sbGVjdGlvbiBpcyBuZXZlcgphdmFpbGFibGUgYXQgb25jZSwgc2luY2UgbW9yZSBkYXRhIGlzIGNvbnRpbnVhbGx5IGFycml2aW5nLiBGb3IgUENvbGxlY3Rpb24ocykKd2l0aCBhIGJvdW5kZWQgc2l6ZSAoYWthLiBjb252ZW50aW9uYWwgYmF0Y2ggbW9kZSksIGJ5IGRlZmF1bHQsIGFsbCBkYXRhIGlzCmltcGxpY2l0bHkgaW4gYSBzaW5nbGUgd2luZG93IChzZWUgR2xvYmFsV2luZG93cyksIHVubGVzcyBXaW5kb3dJbnRvIGlzCmFwcGxpZWQuCgpGb3IgZXhhbXBsZSwgYSBzaW1wbGUgZm9ybSBvZiB3aW5kb3dpbmcgZGl2aWRlcyB1cCB0aGUgZGF0YSBpbnRvIGZpeGVkLXdpZHRoCnRpbWUgaW50ZXJ2YWxzLCB1c2luZyBGaXhlZFdpbmRvd3MuCgpTZWNvbmRzIGFyZSB1c2VkIGFzIHRoZSB0aW1lIHVuaXQgZm9yIHRoZSBidWlsdC1pbiB3aW5kb3dpbmcgcHJpbWl0aXZlcyBoZXJlLgpJbnRlZ2VyIG9yIGZsb2F0aW5nIHBvaW50IHNlY29uZHMgY2FuIGJlIHBhc3NlZCB0byB0aGVzZSBwcmltaXRpdmVzLgoKSW50ZXJuYWxseSwgc2Vjb25kcywgd2l0aCBtaWNyb3NlY29uZCBncmFudWxhcml0eSwgYXJlIHN0b3JlZCBhcwp0aW1ldXRpbC5UaW1lc3RhbXAgYW5kIHRpbWV1dGlsLkR1cmF0aW9uIG9iamVjdHMuIFRoaXMgaXMgZG9uZSB0byBhdm9pZApwcmVjaXNpb24gZXJyb3JzIHRoYXQgd291bGQgb2NjdXIgd2l0aCBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbnMuCgpDdXN0b20gd2luZG93aW5nIGZ1bmN0aW9uIGNsYXNzZXMgY2FuIGJlIGNyZWF0ZWQsIGJ5IHN1YmNsYXNzaW5nIGZyb20KV2luZG93Rm4uCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBhYmMKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHJhbmdlCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB0b3RhbF9vcmRlcmluZwpmcm9tIHR5cGluZyBpbXBvcnQgQW55CmZyb20gdHlwaW5nIGltcG9ydCBJdGVyYWJsZQpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdAoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IHdpdGhfbWV0YWNsYXNzCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBkdXJhdGlvbl9wYjIKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHRpbWVzdGFtcF9wYjIKCmZyb20gYXBhY2hlX2JlYW0uY29kZXJzIGltcG9ydCBjb2RlcnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgY29tbW9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eSBpbXBvcnQgcHl0aG9uX3VybnMKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IGJlYW1fcnVubmVyX2FwaV9wYjIKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgdGltZXV0aWwKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgcHJvdG9fdXRpbHMKZnJvbSBhcGFjaGVfYmVhbS51dGlscyBpbXBvcnQgdXJucwpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCB3aW5kb3dlZF92YWx1ZQpmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBpbXBvcnQgTUlOX1RJTUVTVEFNUApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBpbXBvcnQgRHVyYXRpb24KZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IER1cmF0aW9uVHlwZXMgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKZnJvbSBhcGFjaGVfYmVhbS51dGlscy50aW1lc3RhbXAgaW1wb3J0IFRpbWVzdGFtcApmcm9tIGFwYWNoZV9iZWFtLnV0aWxzLnRpbWVzdGFtcCBpbXBvcnQgVGltZXN0YW1wVHlwZXMgICMgcHlsaW50OiBkaXNhYmxlPXVudXNlZC1pbXBvcnQKZnJvbSBhcGFjaGVfYmVhbS51dGlscy53aW5kb3dlZF92YWx1ZSBpbXBvcnQgV2luZG93ZWRWYWx1ZQoKX19hbGxfXyA9IFsKICAgICdUaW1lc3RhbXBDb21iaW5lcicsCiAgICAnV2luZG93Rm4nLAogICAgJ0JvdW5kZWRXaW5kb3cnLAogICAgJ0ludGVydmFsV2luZG93JywKICAgICdUaW1lc3RhbXBlZFZhbHVlJywKICAgICdHbG9iYWxXaW5kb3cnLAogICAgJ05vbk1lcmdpbmdXaW5kb3dGbicsCiAgICAnR2xvYmFsV2luZG93cycsCiAgICAnRml4ZWRXaW5kb3dzJywKICAgICdTbGlkaW5nV2luZG93cycsCiAgICAnU2Vzc2lvbnMnLApdCgoKIyBUT0RPKGNjeSk6IHJldmlzaXQgbmFtaW5nIGFuZCBzZW1hbnRpY3Mgb25jZSBKYXZhIEFwYWNoZSBCZWFtIGZpbmFsaXplcyB0aGVpcgojIGJlaGF2aW9yLgpjbGFzcyBUaW1lc3RhbXBDb21iaW5lcihvYmplY3QpOgogICIiIkRldGVybWluZXMgaG93IG91dHB1dCB0aW1lc3RhbXBzIG9mIGdyb3VwaW5nIG9wZXJhdGlvbnMgYXJlIGFzc2lnbmVkLiIiIgoKICBPVVRQVVRfQVRfRU9XID0gYmVhbV9ydW5uZXJfYXBpX3BiMi5PdXRwdXRUaW1lLkVORF9PRl9XSU5ET1cKICBPVVRQVVRfQVRfRUFSTElFU1QgPSBiZWFtX3J1bm5lcl9hcGlfcGIyLk91dHB1dFRpbWUuRUFSTElFU1RfSU5fUEFORQogIE9VVFBVVF9BVF9MQVRFU1QgPSBiZWFtX3J1bm5lcl9hcGlfcGIyLk91dHB1dFRpbWUuTEFURVNUX0lOX1BBTkUKICAjIFRPRE8ocm9iZXJ0d2IpOiBBZGQgdGhpcyB0byB0aGUgcnVubmVyIEFQSSBvciByZW1vdmUgaXQuCiAgT1VUUFVUX0FUX0VBUkxJRVNUX1RSQU5TRk9STUVEID0gJ09VVFBVVF9BVF9FQVJMSUVTVF9UUkFOU0ZPUk1FRCcKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBnZXRfaW1wbCh0aW1lc3RhbXBfY29tYmluZXIsIHdpbmRvd19mbik6CiAgICBpZiB0aW1lc3RhbXBfY29tYmluZXIgPT0gVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0VPVzoKICAgICAgcmV0dXJuIHRpbWV1dGlsLk91dHB1dEF0RW5kT2ZXaW5kb3dJbXBsKCkKICAgIGVsaWYgdGltZXN0YW1wX2NvbWJpbmVyID09IFRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FQVJMSUVTVDoKICAgICAgcmV0dXJuIHRpbWV1dGlsLk91dHB1dEF0RWFybGllc3RJbnB1dFRpbWVzdGFtcEltcGwoKQogICAgZWxpZiB0aW1lc3RhbXBfY29tYmluZXIgPT0gVGltZXN0YW1wQ29tYmluZXIuT1VUUFVUX0FUX0xBVEVTVDoKICAgICAgcmV0dXJuIHRpbWV1dGlsLk91dHB1dEF0TGF0ZXN0SW5wdXRUaW1lc3RhbXBJbXBsKCkKICAgIGVsaWYgdGltZXN0YW1wX2NvbWJpbmVyID09IFRpbWVzdGFtcENvbWJpbmVyLk9VVFBVVF9BVF9FQVJMSUVTVF9UUkFOU0ZPUk1FRDoKICAgICAgcmV0dXJuIHRpbWV1dGlsLk91dHB1dEF0RWFybGllc3RUcmFuc2Zvcm1lZElucHV0VGltZXN0YW1wSW1wbCh3aW5kb3dfZm4pCiAgICBlbHNlOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIFRpbWVzdGFtcENvbWJpbmVyOiAlcy4nICUgdGltZXN0YW1wX2NvbWJpbmVyKQoKCmNsYXNzIFdpbmRvd0ZuKHdpdGhfbWV0YWNsYXNzKGFiYy5BQkNNZXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cm5zLlJ1bm5lckFwaUZuKSk6ICAjIHR5cGU6IGlnbm9yZVttaXNjXQogICIiIkFuIGFic3RyYWN0IHdpbmRvd2luZyBmdW5jdGlvbiBkZWZpbmluZyBhIGJhc2ljIGFzc2lnbiBhbmQgbWVyZ2UuIiIiCiAgY2xhc3MgQXNzaWduQ29udGV4dChvYmplY3QpOgogICAgIiIiQ29udGV4dCBwYXNzZWQgdG8gV2luZG93Rm4uYXNzaWduKCkuIiIiCiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwKICAgICAgICB0aW1lc3RhbXAsICAjIHR5cGU6IFRpbWVzdGFtcFR5cGVzCiAgICAgICAgZWxlbWVudD1Ob25lLAogICAgICAgIHdpbmRvdz1Ob25lKToKICAgICAgc2VsZi50aW1lc3RhbXAgPSBUaW1lc3RhbXAub2YodGltZXN0YW1wKQogICAgICBzZWxmLmVsZW1lbnQgPSBlbGVtZW50CiAgICAgIHNlbGYud2luZG93ID0gd2luZG93CgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgYXNzaWduKHNlbGYsIGFzc2lnbl9jb250ZXh0KToKICAgICMgdHlwZTogKEFzc2lnbkNvbnRleHQpIC0+IEl0ZXJhYmxlW0JvdW5kZWRXaW5kb3ddCgogICAgIiIiQXNzb2NpYXRlcyB3aW5kb3dzIHRvIGFuIGVsZW1lbnQuCgogICAgQXJndW1lbnRzOgogICAgICBhc3NpZ25fY29udGV4dDogSW5zdGFuY2Ugb2YgQXNzaWduQ29udGV4dC4KCiAgICBSZXR1cm5zOgogICAgICBBbiBpdGVyYWJsZSBvZiBCb3VuZGVkV2luZG93LgogICAgIiIiCiAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCgogIGNsYXNzIE1lcmdlQ29udGV4dChvYmplY3QpOgogICAgIiIiQ29udGV4dCBwYXNzZWQgdG8gV2luZG93Rm4ubWVyZ2UoKSB0byBwZXJmb3JtIG1lcmdpbmcsIGlmIGFueS4iIiIKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3dzKToKICAgICAgIyB0eXBlOiAoSXRlcmFibGVbQm91bmRlZFdpbmRvd10pIC0+IE5vbmUKICAgICAgc2VsZi53aW5kb3dzID0gbGlzdCh3aW5kb3dzKQoKICAgIGRlZiBtZXJnZShzZWxmLCB0b19iZV9tZXJnZWQsIG1lcmdlX3Jlc3VsdCk6CiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgQGFiYy5hYnN0cmFjdG1ldGhvZAogIGRlZiBtZXJnZShzZWxmLCBtZXJnZV9jb250ZXh0KToKICAgICMgdHlwZTogKFdpbmRvd0ZuLk1lcmdlQ29udGV4dCkgLT4gTm9uZQoKICAgICIiIlJldHVybnMgYSB3aW5kb3cgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIG1lcmdpbmcgYSBzZXQgb2Ygd2luZG93cy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGlzX21lcmdpbmcoc2VsZik6CiAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhpcyBXaW5kb3dGbiBtZXJnZXMgd2luZG93cy4iIiIKICAgIHJldHVybiBUcnVlCgogIEBhYmMuYWJzdHJhY3RtZXRob2QKICBkZWYgZ2V0X3dpbmRvd19jb2RlcihzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIGdldF90cmFuc2Zvcm1lZF9vdXRwdXRfdGltZShzZWxmLCB3aW5kb3csIGlucHV0X3RpbWVzdGFtcCk6ICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtYXJndW1lbnQKICAgICIiIkdpdmVuIGlucHV0IHRpbWUgYW5kIG91dHB1dCB3aW5kb3csIHJldHVybnMgb3V0cHV0IHRpbWUgZm9yIHdpbmRvdy4KCiAgICBJZiBUaW1lc3RhbXBDb21iaW5lci5PVVRQVVRfQVRfRUFSTElFU1RfVFJBTlNGT1JNRUQgaXMgdXNlZCBpbiB0aGUKICAgIFdpbmRvd2luZywgdGhlIG91dHB1dCB0aW1lc3RhbXAgZm9yIHRoZSBnaXZlbiB3aW5kb3cgd2lsbCBiZSB0aGUgZWFybGllc3QKICAgIG9mIHRoZSB0aW1lc3RhbXBzIHJldHVybmVkIGJ5IGdldF90cmFuc2Zvcm1lZF9vdXRwdXRfdGltZSgpIGZvciBlbGVtZW50cwogICAgb2YgdGhlIHdpbmRvdy4KCiAgICBBcmd1bWVudHM6CiAgICAgIHdpbmRvdzogT3V0cHV0IHdpbmRvdyBvZiBlbGVtZW50LgogICAgICBpbnB1dF90aW1lc3RhbXA6IElucHV0IHRpbWVzdGFtcCBvZiBlbGVtZW50IGFzIGEgdGltZXV0aWwuVGltZXN0YW1wCiAgICAgICAgb2JqZWN0LgoKICAgIFJldHVybnM6CiAgICAgIFRyYW5zZm9ybWVkIHRpbWVzdGFtcC4KICAgICIiIgogICAgIyBCeSBkZWZhdWx0LCBqdXN0IHJldHVybiB0aGUgaW5wdXQgdGltZXN0YW1wLgogICAgcmV0dXJuIGlucHV0X3RpbWVzdGFtcAoKICB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3BpY2tsZV91cm4ocHl0aG9uX3VybnMuUElDS0xFRF9XSU5ET1dGTikKCgpjbGFzcyBCb3VuZGVkV2luZG93KG9iamVjdCk6CiAgIiIiQSB3aW5kb3cgZm9yIHRpbWVzdGFtcHMgaW4gcmFuZ2UgKC1pbmZpbml0eSwgZW5kKS4KCiAgQXR0cmlidXRlczoKICAgIGVuZDogRW5kIG9mIHdpbmRvdy4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZW5kKToKICAgICMgdHlwZTogKFRpbWVzdGFtcFR5cGVzKSAtPiBOb25lCiAgICBzZWxmLl9lbmQgPSBUaW1lc3RhbXAub2YoZW5kKQoKICBAcHJvcGVydHkKICBkZWYgc3RhcnQoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IFRpbWVzdGFtcAogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgoKICBAcHJvcGVydHkKICBkZWYgZW5kKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBUaW1lc3RhbXAKICAgIHJldHVybiBzZWxmLl9lbmQKCiAgZGVmIG1heF90aW1lc3RhbXAoc2VsZik6CiAgICByZXR1cm4gc2VsZi5lbmQucHJlZGVjZXNzb3IoKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjICBPcmRlciBmaXJzdCBieSBlbmRwb2ludCwgdGhlbiBhcmJpdHJhcmlseQogICAgcmV0dXJuIHNlbGYuZW5kICE9IG90aGVyLmVuZCBvciBoYXNoKHNlbGYpICE9IGhhc2gob3RoZXIpCgogIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgaWYgc2VsZi5lbmQgIT0gb3RoZXIuZW5kOgogICAgICByZXR1cm4gc2VsZi5lbmQgPCBvdGhlci5lbmQKICAgIHJldHVybiBoYXNoKHNlbGYpIDwgaGFzaChvdGhlcikKCiAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBzZWxmLmVuZCAhPSBvdGhlci5lbmQ6CiAgICAgIHJldHVybiBzZWxmLmVuZCA8PSBvdGhlci5lbmQKICAgIHJldHVybiBoYXNoKHNlbGYpIDw9IGhhc2gob3RoZXIpCgogIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgogICAgaWYgc2VsZi5lbmQgIT0gb3RoZXIuZW5kOgogICAgICByZXR1cm4gc2VsZi5lbmQgPiBvdGhlci5lbmQKICAgIHJldHVybiBoYXNoKHNlbGYpID4gaGFzaChvdGhlcikKCiAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBzZWxmLmVuZCAhPSBvdGhlci5lbmQ6CiAgICAgIHJldHVybiBzZWxmLmVuZCA+PSBvdGhlci5lbmQKICAgIHJldHVybiBoYXNoKHNlbGYpID49IGhhc2gob3RoZXIpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdbPywgJXMpJyAlIGZsb2F0KHNlbGYuZW5kKQoKCkB0b3RhbF9vcmRlcmluZwpjbGFzcyBJbnRlcnZhbFdpbmRvdyh3aW5kb3dlZF92YWx1ZS5fSW50ZXJ2YWxXaW5kb3dCYXNlLCBCb3VuZGVkV2luZG93KToKICAiIiJBIHdpbmRvdyBmb3IgdGltZXN0YW1wcyBpbiByYW5nZSBbc3RhcnQsIGVuZCkuCgogIEF0dHJpYnV0ZXM6CiAgICBzdGFydDogU3RhcnQgb2Ygd2luZG93IGFzIHNlY29uZHMgc2luY2UgVW5peCBlcG9jaC4KICAgIGVuZDogRW5kIG9mIHdpbmRvdyBhcyBzZWNvbmRzIHNpbmNlIFVuaXggZXBvY2guCiAgIiIiCiAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CiAgICBpZiBzZWxmLmVuZCAhPSBvdGhlci5lbmQ6CiAgICAgIHJldHVybiBzZWxmLmVuZCA8IG90aGVyLmVuZAogICAgcmV0dXJuIGhhc2goc2VsZikgPCBoYXNoKG90aGVyKQoKICBkZWYgaW50ZXJzZWN0cyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gb3RoZXIuc3RhcnQgPCBzZWxmLmVuZCBvciBzZWxmLnN0YXJ0IDwgb3RoZXIuZW5kCgogIGRlZiB1bmlvbihzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gSW50ZXJ2YWxXaW5kb3coCiAgICAgICAgbWluKHNlbGYuc3RhcnQsIG90aGVyLnN0YXJ0KSwgbWF4KHNlbGYuZW5kLCBvdGhlci5lbmQpKQoKCkB0b3RhbF9vcmRlcmluZwpjbGFzcyBUaW1lc3RhbXBlZFZhbHVlKG9iamVjdCk6CiAgIiIiQSB0aW1lc3RhbXBlZCB2YWx1ZSBoYXZpbmcgYSB2YWx1ZSBhbmQgYSB0aW1lc3RhbXAuCgogIEF0dHJpYnV0ZXM6CiAgICB2YWx1ZTogVGhlIHVuZGVybHlpbmcgdmFsdWUuCiAgICB0aW1lc3RhbXA6IFRpbWVzdGFtcCBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIGFzIHNlY29uZHMgc2luY2UgVW5peCBlcG9jaC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIHRpbWVzdGFtcCk6CiAgICAjIHR5cGU6IChBbnksIFRpbWVzdGFtcFR5cGVzKSAtPiBOb25lCiAgICBzZWxmLnZhbHVlID0gdmFsdWUKICAgIHNlbGYudGltZXN0YW1wID0gVGltZXN0YW1wLm9mKHRpbWVzdGFtcCkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gKAogICAgICAgIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUgYW5kCiAgICAgICAgc2VsZi50aW1lc3RhbXAgPT0gb3RoZXIudGltZXN0YW1wKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCgoc2VsZi52YWx1ZSwgc2VsZi50aW1lc3RhbXApKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgIT0gdHlwZShvdGhlcik6CiAgICAgIHJldHVybiB0eXBlKHNlbGYpLl9fbmFtZV9fIDwgdHlwZShvdGhlcikuX19uYW1lX18KICAgIGlmIHNlbGYudmFsdWUgIT0gb3RoZXIudmFsdWU6CiAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIudmFsdWUKICAgIHJldHVybiBzZWxmLnRpbWVzdGFtcCA8IG90aGVyLnRpbWVzdGFtcAoKCmNsYXNzIEdsb2JhbFdpbmRvdyhCb3VuZGVkV2luZG93KToKICAiIiJUaGUgZGVmYXVsdCB3aW5kb3cgaW50byB3aGljaCBhbGwgZGF0YSBpcyBwbGFjZWQgKHZpYSBHbG9iYWxXaW5kb3dzKS4iIiIKICBfaW5zdGFuY2UgPSBOb25lCgogIGRlZiBfX25ld19fKGNscyk6CiAgICBpZiBjbHMuX2luc3RhbmNlIGlzIE5vbmU6CiAgICAgIGNscy5faW5zdGFuY2UgPSBzdXBlcihHbG9iYWxXaW5kb3csIGNscykuX19uZXdfXyhjbHMpCiAgICByZXR1cm4gY2xzLl9pbnN0YW5jZQoKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzdXBlcihHbG9iYWxXaW5kb3csIHNlbGYpLl9faW5pdF9fKEdsb2JhbFdpbmRvdy5fZ2V0VGltZXN0YW1wRnJvbVByb3RvKCkpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnR2xvYmFsV2luZG93JwoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICMgR2xvYmFsIHdpbmRvd3MgYXJlIGFsd2F5cyBhbmQgb25seSBlcXVhbCB0byBlYWNoIG90aGVyLgogICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIgb3IgdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBAcHJvcGVydHkKICBkZWYgc3RhcnQoc2VsZik6CiAgICAjIHR5cGU6ICgpIC0+IFRpbWVzdGFtcAogICAgcmV0dXJuIE1JTl9USU1FU1RBTVAKCiAgQHN0YXRpY21ldGhvZAogIGRlZiBfZ2V0VGltZXN0YW1wRnJvbVByb3RvKCk6CiAgICB0c19taWxsaXMgPSBpbnQoCiAgICAgICAgY29tbW9uX3VybnMuY29uc3RhbnRzLkdMT0JBTF9XSU5ET1dfTUFYX1RJTUVTVEFNUF9NSUxMSVMuY29uc3RhbnQpCiAgICByZXR1cm4gVGltZXN0YW1wKG1pY3Jvcz10c19taWxsaXMgKiAxMDAwKQoKCmNsYXNzIE5vbk1lcmdpbmdXaW5kb3dGbihXaW5kb3dGbik6CiAgZGVmIGlzX21lcmdpbmcoc2VsZik6CiAgICByZXR1cm4gRmFsc2UKCiAgZGVmIG1lcmdlKHNlbGYsIG1lcmdlX2NvbnRleHQpOgogICAgIyB0eXBlOiAoV2luZG93Rm4uTWVyZ2VDb250ZXh0KSAtPiBOb25lCiAgICBwYXNzICAjIE5vIG1lcmdpbmcuCgoKY2xhc3MgR2xvYmFsV2luZG93cyhOb25NZXJnaW5nV2luZG93Rm4pOgogICIiIkEgd2luZG93aW5nIGZ1bmN0aW9uIHRoYXQgYXNzaWducyBldmVyeXRoaW5nIHRvIG9uZSBnbG9iYWwgd2luZG93LiIiIgogIEBjbGFzc21ldGhvZAogIGRlZiB3aW5kb3dlZF92YWx1ZSgKICAgICAgY2xzLAogICAgICB2YWx1ZSwKICAgICAgdGltZXN0YW1wPU1JTl9USU1FU1RBTVAsCiAgICAgIHBhbmVfaW5mbz13aW5kb3dlZF92YWx1ZS5QQU5FX0lORk9fVU5LTk9XTik6CiAgICByZXR1cm4gV2luZG93ZWRWYWx1ZSh2YWx1ZSwgdGltZXN0YW1wLCAoR2xvYmFsV2luZG93KCksICksIHBhbmVfaW5mbykKCiAgZGVmIGFzc2lnbihzZWxmLCBhc3NpZ25fY29udGV4dCk6CiAgICByZXR1cm4gW0dsb2JhbFdpbmRvdygpXQoKICBkZWYgZ2V0X3dpbmRvd19jb2RlcihzZWxmKToKICAgIHJldHVybiBjb2RlcnMuR2xvYmFsV2luZG93Q29kZXIoKQoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaCh0eXBlKHNlbGYpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICMgR2xvYmFsIHdpbmRvd2ZuIGlzIGFsd2F5cyBhbmQgb25seSBlcXVhbCB0byBlYWNoIG90aGVyLgogICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIgb3IgdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gY29tbW9uX3VybnMuZ2xvYmFsX3dpbmRvd3MudXJuLCBOb25lCgogIEBzdGF0aWNtZXRob2QKICBAdXJucy5SdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm4oY29tbW9uX3VybnMuZ2xvYmFsX3dpbmRvd3MudXJuLCBOb25lKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKHVudXNlZF9mbl9wYXJhbWV0ZXIsIHVudXNlZF9jb250ZXh0KToKICAgIHJldHVybiBHbG9iYWxXaW5kb3dzKCkKCgpjbGFzcyBGaXhlZFdpbmRvd3MoTm9uTWVyZ2luZ1dpbmRvd0ZuKToKICAiIiJBIHdpbmRvd2luZyBmdW5jdGlvbiB0aGF0IGFzc2lnbnMgZWFjaCBlbGVtZW50IHRvIG9uZSB0aW1lIGludGVydmFsLgoKICBUaGUgYXR0cmlidXRlcyBzaXplIGFuZCBvZmZzZXQgZGV0ZXJtaW5lIGluIHdoYXQgdGltZSBpbnRlcnZhbCBhIHRpbWVzdGFtcAogIHdpbGwgYmUgc2xvdHRlZC4gVGhlIHRpbWUgaW50ZXJ2YWxzIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtdWxhOgogIFtOICogc2l6ZSArIG9mZnNldCwgKE4gKyAxKSAqIHNpemUgKyBvZmZzZXQpCgogIEF0dHJpYnV0ZXM6CiAgICBzaXplOiBTaXplIG9mIHRoZSB3aW5kb3cgYXMgc2Vjb25kcy4KICAgIG9mZnNldDogT2Zmc2V0IG9mIHRoaXMgd2luZG93IGFzIHNlY29uZHMuIFdpbmRvd3Mgc3RhcnQgYXQKICAgICAgdD1OICogc2l6ZSArIG9mZnNldCB3aGVyZSB0PTAgaXMgdGhlIFVOSVggZXBvY2guIFRoZSBvZmZzZXQgbXVzdCBiZSBhCiAgICAgIHZhbHVlIGluIHJhbmdlIFswLCBzaXplKS4gSWYgaXQgaXMgbm90IGl0IHdpbGwgYmUgbm9ybWFsaXplZCB0byB0aGlzCiAgICAgIHJhbmdlLgogICIiIgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgc2l6ZSwgICMgdHlwZTogRHVyYXRpb25UeXBlcwogICAgICBvZmZzZXQ9MCAgIyB0eXBlOiBUaW1lc3RhbXBUeXBlcwogICk6CiAgICAiIiJJbml0aWFsaXplIGEgYGBGaXhlZFdpbmRvd3NgYCBmdW5jdGlvbiBmb3IgYSBnaXZlbiBzaXplIGFuZCBvZmZzZXQuCgogICAgQXJnczoKICAgICAgc2l6ZSAoaW50KTogU2l6ZSBvZiB0aGUgd2luZG93IGluIHNlY29uZHMuCiAgICAgIG9mZnNldChpbnQpOiBPZmZzZXQgb2YgdGhpcyB3aW5kb3cgYXMgc2Vjb25kcy4gV2luZG93cyBzdGFydCBhdAogICAgICAgIHQ9TiAqIHNpemUgKyBvZmZzZXQgd2hlcmUgdD0wIGlzIHRoZSBVTklYIGVwb2NoLiBUaGUgb2Zmc2V0IG11c3QgYmUgYQogICAgICAgIHZhbHVlIGluIHJhbmdlIFswLCBzaXplKS4gSWYgaXQgaXMgbm90IGl0IHdpbGwgYmUgbm9ybWFsaXplZCB0byB0aGlzCiAgICAgICAgcmFuZ2UuCiAgICAiIiIKICAgIGlmIHNpemUgPD0gMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHNpemUgcGFyYW1ldGVyIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJykKICAgIHNlbGYuc2l6ZSA9IER1cmF0aW9uLm9mKHNpemUpCiAgICBzZWxmLm9mZnNldCA9IFRpbWVzdGFtcC5vZihvZmZzZXQpICUgc2VsZi5zaXplCgogIGRlZiBhc3NpZ24oc2VsZiwgY29udGV4dCk6CiAgICB0aW1lc3RhbXAgPSBjb250ZXh0LnRpbWVzdGFtcAogICAgc3RhcnQgPSB0aW1lc3RhbXAgLSAodGltZXN0YW1wIC0gc2VsZi5vZmZzZXQpICUgc2VsZi5zaXplCiAgICByZXR1cm4gW0ludGVydmFsV2luZG93KHN0YXJ0LCBzdGFydCArIHNlbGYuc2l6ZSldCgogIGRlZiBnZXRfd2luZG93X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIGNvZGVycy5JbnRlcnZhbFdpbmRvd0NvZGVyKCkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICBpZiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpID09IEZpeGVkV2luZG93czoKICAgICAgcmV0dXJuIHNlbGYuc2l6ZSA9PSBvdGhlci5zaXplIGFuZCBzZWxmLm9mZnNldCA9PSBvdGhlci5vZmZzZXQKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYuc2l6ZSwgc2VsZi5vZmZzZXQpKQoKICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgdG9fcnVubmVyX2FwaV9wYXJhbWV0ZXIoc2VsZiwgY29udGV4dCk6CiAgICByZXR1cm4gKAogICAgICAgIGNvbW1vbl91cm5zLmZpeGVkX3dpbmRvd3MudXJuLAogICAgICAgIHN0YW5kYXJkX3dpbmRvd19mbnNfcGIyLkZpeGVkV2luZG93c1BheWxvYWQoCiAgICAgICAgICAgIHNpemU9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICBkdXJhdGlvbl9wYjIuRHVyYXRpb24sIHNlbGYuc2l6ZS5taWNyb3MpLAogICAgICAgICAgICBvZmZzZXQ9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICB0aW1lc3RhbXBfcGIyLlRpbWVzdGFtcCwgc2VsZi5vZmZzZXQubWljcm9zKSkpCgogIEBzdGF0aWNtZXRob2QKICBAdXJucy5SdW5uZXJBcGlGbi5yZWdpc3Rlcl91cm4oCiAgICAgIGNvbW1vbl91cm5zLmZpeGVkX3dpbmRvd3MudXJuLAogICAgICBzdGFuZGFyZF93aW5kb3dfZm5zX3BiMi5GaXhlZFdpbmRvd3NQYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGZuX3BhcmFtZXRlciwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIEZpeGVkV2luZG93cygKICAgICAgICBzaXplPUR1cmF0aW9uKG1pY3Jvcz1mbl9wYXJhbWV0ZXIuc2l6ZS5Ub01pY3Jvc2Vjb25kcygpKSwKICAgICAgICBvZmZzZXQ9VGltZXN0YW1wKG1pY3Jvcz1mbl9wYXJhbWV0ZXIub2Zmc2V0LlRvTWljcm9zZWNvbmRzKCkpKQoKCmNsYXNzIFNsaWRpbmdXaW5kb3dzKE5vbk1lcmdpbmdXaW5kb3dGbik6CiAgIiIiQSB3aW5kb3dpbmcgZnVuY3Rpb24gdGhhdCBhc3NpZ25zIGVhY2ggZWxlbWVudCB0byBhIHNldCBvZiBzbGlkaW5nIHdpbmRvd3MuCgogIFRoZSBhdHRyaWJ1dGVzIHNpemUgYW5kIG9mZnNldCBkZXRlcm1pbmUgaW4gd2hhdCB0aW1lIGludGVydmFsIGEgdGltZXN0YW1wCiAgd2lsbCBiZSBzbG90dGVkLiBUaGUgdGltZSBpbnRlcnZhbHMgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm11bGE6CiAgW04gKiBwZXJpb2QgKyBvZmZzZXQsIE4gKiBwZXJpb2QgKyBvZmZzZXQgKyBzaXplKQoKICBBdHRyaWJ1dGVzOgogICAgc2l6ZTogU2l6ZSBvZiB0aGUgd2luZG93IGFzIHNlY29uZHMuCiAgICBwZXJpb2Q6IFBlcmlvZCBvZiB0aGUgd2luZG93cyBhcyBzZWNvbmRzLgogICAgb2Zmc2V0OiBPZmZzZXQgb2YgdGhpcyB3aW5kb3cgYXMgc2Vjb25kcyBzaW5jZSBVbml4IGVwb2NoLiBXaW5kb3dzIHN0YXJ0IGF0CiAgICAgIHQ9TiAqIHBlcmlvZCArIG9mZnNldCB3aGVyZSB0PTAgaXMgdGhlIGVwb2NoLiBUaGUgb2Zmc2V0IG11c3QgYmUgYSB2YWx1ZQogICAgICBpbiByYW5nZSBbMCwgcGVyaW9kKS4gSWYgaXQgaXMgbm90IGl0IHdpbGwgYmUgbm9ybWFsaXplZCB0byB0aGlzIHJhbmdlLgogICIiIgoKICBkZWYgX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgc2l6ZSwgICMgdHlwZTogRHVyYXRpb25UeXBlcwogICAgICAgICAgICAgICBwZXJpb2QsICAjIHR5cGU6IER1cmF0aW9uVHlwZXMKICAgICAgICAgICAgICAgb2Zmc2V0PTAsICAjIHR5cGU6IFRpbWVzdGFtcFR5cGVzCiAgICAgICAgICAgICAgKToKICAgIGlmIHNpemUgPD0gMDoKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHNpemUgcGFyYW1ldGVyIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJykKICAgIHNlbGYuc2l6ZSA9IER1cmF0aW9uLm9mKHNpemUpCiAgICBzZWxmLnBlcmlvZCA9IER1cmF0aW9uLm9mKHBlcmlvZCkKICAgIHNlbGYub2Zmc2V0ID0gVGltZXN0YW1wLm9mKG9mZnNldCkgJSBwZXJpb2QKCiAgZGVmIGFzc2lnbihzZWxmLCBjb250ZXh0KToKICAgIHRpbWVzdGFtcCA9IGNvbnRleHQudGltZXN0YW1wCiAgICBzdGFydCA9IHRpbWVzdGFtcCAtICgodGltZXN0YW1wIC0gc2VsZi5vZmZzZXQpICUgc2VsZi5wZXJpb2QpCiAgICByZXR1cm4gWwogICAgICAgIEludGVydmFsV2luZG93KFRpbWVzdGFtcChtaWNyb3M9cyksIFRpbWVzdGFtcChtaWNyb3M9cykgKyBzZWxmLnNpemUpCiAgICAgICAgZm9yIHMgaW4gcmFuZ2UoCiAgICAgICAgICAgIHN0YXJ0Lm1pY3JvcywKICAgICAgICAgICAgdGltZXN0YW1wLm1pY3JvcyAtIHNlbGYuc2l6ZS5taWNyb3MsCiAgICAgICAgICAgIC1zZWxmLnBlcmlvZC5taWNyb3MpCiAgICBdCgogIGRlZiBnZXRfd2luZG93X2NvZGVyKHNlbGYpOgogICAgcmV0dXJuIGNvZGVycy5JbnRlcnZhbFdpbmRvd0NvZGVyKCkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICBpZiB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpID09IFNsaWRpbmdXaW5kb3dzOgogICAgICByZXR1cm4gKAogICAgICAgICAgc2VsZi5zaXplID09IG90aGVyLnNpemUgYW5kIHNlbGYub2Zmc2V0ID09IG90aGVyLm9mZnNldCBhbmQKICAgICAgICAgIHNlbGYucGVyaW9kID09IG90aGVyLnBlcmlvZCkKCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKCiAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgcmV0dXJuIGhhc2goKHNlbGYub2Zmc2V0LCBzZWxmLnBlcmlvZCkpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiAoCiAgICAgICAgY29tbW9uX3VybnMuc2xpZGluZ193aW5kb3dzLnVybiwKICAgICAgICBzdGFuZGFyZF93aW5kb3dfZm5zX3BiMi5TbGlkaW5nV2luZG93c1BheWxvYWQoCiAgICAgICAgICAgIHNpemU9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICBkdXJhdGlvbl9wYjIuRHVyYXRpb24sIHNlbGYuc2l6ZS5taWNyb3MpLAogICAgICAgICAgICBvZmZzZXQ9cHJvdG9fdXRpbHMuZnJvbV9taWNyb3MoCiAgICAgICAgICAgICAgICB0aW1lc3RhbXBfcGIyLlRpbWVzdGFtcCwgc2VsZi5vZmZzZXQubWljcm9zKSwKICAgICAgICAgICAgcGVyaW9kPXByb3RvX3V0aWxzLmZyb21fbWljcm9zKAogICAgICAgICAgICAgICAgZHVyYXRpb25fcGIyLkR1cmF0aW9uLCBzZWxmLnBlcmlvZC5taWNyb3MpKSkKCiAgQHN0YXRpY21ldGhvZAogIEB1cm5zLlJ1bm5lckFwaUZuLnJlZ2lzdGVyX3VybigKICAgICAgY29tbW9uX3VybnMuc2xpZGluZ193aW5kb3dzLnVybiwKICAgICAgc3RhbmRhcmRfd2luZG93X2Zuc19wYjIuU2xpZGluZ1dpbmRvd3NQYXlsb2FkKQogIGRlZiBmcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVyKGZuX3BhcmFtZXRlciwgdW51c2VkX2NvbnRleHQpOgogICAgcmV0dXJuIFNsaWRpbmdXaW5kb3dzKAogICAgICAgIHNpemU9RHVyYXRpb24obWljcm9zPWZuX3BhcmFtZXRlci5zaXplLlRvTWljcm9zZWNvbmRzKCkpLAogICAgICAgIG9mZnNldD1UaW1lc3RhbXAobWljcm9zPWZuX3BhcmFtZXRlci5vZmZzZXQuVG9NaWNyb3NlY29uZHMoKSksCiAgICAgICAgcGVyaW9kPUR1cmF0aW9uKG1pY3Jvcz1mbl9wYXJhbWV0ZXIucGVyaW9kLlRvTWljcm9zZWNvbmRzKCkpKQoKCmNsYXNzIFNlc3Npb25zKFdpbmRvd0ZuKToKICAiIiJBIHdpbmRvd2luZyBmdW5jdGlvbiB0aGF0IGdyb3VwcyBlbGVtZW50cyBpbnRvIHNlc3Npb25zLgoKICBBIHNlc3Npb24gaXMgZGVmaW5lZCBhcyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZSBldmVudHMKICBzZXBhcmF0ZWQgYnkgYSBzcGVjaWZpZWQgZ2FwIHNpemUuCgogIEF0dHJpYnV0ZXM6CiAgICBnYXBfc2l6ZTogU2l6ZSBvZiB0aGUgZ2FwIGJldHdlZW4gd2luZG93cyBhcyBmbG9hdGluZy1wb2ludCBzZWNvbmRzLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBnYXBfc2l6ZSk6CiAgICAjIHR5cGU6IChEdXJhdGlvblR5cGVzKSAtPiBOb25lCiAgICBpZiBnYXBfc2l6ZSA8PSAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdUaGUgc2l6ZSBwYXJhbWV0ZXIgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nKQogICAgc2VsZi5nYXBfc2l6ZSA9IER1cmF0aW9uLm9mKGdhcF9zaXplKQoKICBkZWYgYXNzaWduKHNlbGYsIGNvbnRleHQpOgogICAgdGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAKICAgIHJldHVybiBbSW50ZXJ2YWxXaW5kb3codGltZXN0YW1wLCB0aW1lc3RhbXAgKyBzZWxmLmdhcF9zaXplKV0KCiAgZGVmIGdldF93aW5kb3dfY29kZXIoc2VsZik6CiAgICByZXR1cm4gY29kZXJzLkludGVydmFsV2luZG93Q29kZXIoKQoKICBkZWYgbWVyZ2Uoc2VsZiwgbWVyZ2VfY29udGV4dCk6CiAgICAjIHR5cGU6IChXaW5kb3dGbi5NZXJnZUNvbnRleHQpIC0+IE5vbmUKICAgIHRvX21lcmdlID0gW10gICMgdHlwZTogTGlzdFtCb3VuZGVkV2luZG93XQogICAgZW5kID0gTUlOX1RJTUVTVEFNUAogICAgZm9yIHcgaW4gc29ydGVkKG1lcmdlX2NvbnRleHQud2luZG93cywga2V5PWxhbWJkYSB3OiB3LnN0YXJ0KToKICAgICAgaWYgdG9fbWVyZ2U6CiAgICAgICAgaWYgZW5kID4gdy5zdGFydDoKICAgICAgICAgIHRvX21lcmdlLmFwcGVuZCh3KQogICAgICAgICAgaWYgdy5lbmQgPiBlbmQ6CiAgICAgICAgICAgIGVuZCA9IHcuZW5kCiAgICAgICAgZWxzZToKICAgICAgICAgIGlmIGxlbih0b19tZXJnZSkgPiAxOgogICAgICAgICAgICBtZXJnZV9jb250ZXh0Lm1lcmdlKAogICAgICAgICAgICAgICAgdG9fbWVyZ2UsIEludGVydmFsV2luZG93KHRvX21lcmdlWzBdLnN0YXJ0LCBlbmQpKQogICAgICAgICAgdG9fbWVyZ2UgPSBbd10KICAgICAgICAgIGVuZCA9IHcuZW5kCiAgICAgIGVsc2U6CiAgICAgICAgdG9fbWVyZ2UgPSBbd10KICAgICAgICBlbmQgPSB3LmVuZAogICAgaWYgbGVuKHRvX21lcmdlKSA+IDE6CiAgICAgIG1lcmdlX2NvbnRleHQubWVyZ2UodG9fbWVyZ2UsIEludGVydmFsV2luZG93KHRvX21lcmdlWzBdLnN0YXJ0LCBlbmQpKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIGlmIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgPT0gU2Vzc2lvbnM6CiAgICAgIHJldHVybiBzZWxmLmdhcF9zaXplID09IG90aGVyLmdhcF9zaXplCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuZ2FwX3NpemUpCgogIGRlZiB0b19ydW5uZXJfYXBpX3BhcmFtZXRlcihzZWxmLCBjb250ZXh0KToKICAgIHJldHVybiAoCiAgICAgICAgY29tbW9uX3VybnMuc2Vzc2lvbl93aW5kb3dzLnVybiwKICAgICAgICBzdGFuZGFyZF93aW5kb3dfZm5zX3BiMi5TZXNzaW9uV2luZG93c1BheWxvYWQoCiAgICAgICAgICAgIGdhcF9zaXplPXByb3RvX3V0aWxzLmZyb21fbWljcm9zKAogICAgICAgICAgICAgICAgZHVyYXRpb25fcGIyLkR1cmF0aW9uLCBzZWxmLmdhcF9zaXplLm1pY3JvcykpKQoKICBAc3RhdGljbWV0aG9kCiAgQHVybnMuUnVubmVyQXBpRm4ucmVnaXN0ZXJfdXJuKAogICAgICBjb21tb25fdXJucy5zZXNzaW9uX3dpbmRvd3MudXJuLAogICAgICBzdGFuZGFyZF93aW5kb3dfZm5zX3BiMi5TZXNzaW9uV2luZG93c1BheWxvYWQpCiAgZGVmIGZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXIoZm5fcGFyYW1ldGVyLCB1bnVzZWRfY29udGV4dCk6CiAgICByZXR1cm4gU2Vzc2lvbnMoCiAgICAgICAgZ2FwX3NpemU9RHVyYXRpb24obWljcm9zPWZuX3BhcmFtZXRlci5nYXBfc2l6ZS5Ub01pY3Jvc2Vjb25kcygpKSkKlJV6JQEAAAAAAH2UKIwaVGltZXN0YW1wQ29tYmluZXIuZ2V0X2ltcGyUalYxAQBLbEt3h5SMEVRpbWVzdGFtcENvbWJpbmVylGpdMQEAS2NLd4eUjB9XaW5kb3dGbi5Bc3NpZ25Db250ZXh0Ll9faW5pdF9flGpWMQEAS39LhoeUjBZXaW5kb3dGbi5Bc3NpZ25Db250ZXh0lGpdMQEAS31LhoeUjA9XaW5kb3dGbi5hc3NpZ26UalYxAQBLiEuUh5SMHldpbmRvd0ZuLk1lcmdlQ29udGV4dC5fX2luaXRfX5RqVjEBAEuYS5qHlIwbV2luZG93Rm4uTWVyZ2VDb250ZXh0Lm1lcmdllGpWMQEAS5xLnYeUjBVXaW5kb3dGbi5NZXJnZUNvbnRleHSUal0xAQBLlkudh5SMDldpbmRvd0ZuLm1lcmdllGpWMQEAS59LpIeUjBNXaW5kb3dGbi5pc19tZXJnaW5nlGpWMQEAS6ZLqIeUjBlXaW5kb3dGbi5nZXRfd2luZG93X2NvZGVylGpWMQEAS6pLrIeUjCRXaW5kb3dGbi5nZXRfdHJhbnNmb3JtZWRfb3V0cHV0X3RpbWWUalYxAQBLrku/h5SMCFdpbmRvd0ZulGpdMQEAS3pLwYeUjBZCb3VuZGVkV2luZG93Ll9faW5pdF9flGpWMQEAS8pLzIeUjBNCb3VuZGVkV2luZG93LnN0YXJ0lGpWMQEAS85L0YeUjBFCb3VuZGVkV2luZG93LmVuZJRqVjEBAEvTS9aHlIwbQm91bmRlZFdpbmRvdy5tYXhfdGltZXN0YW1wlGpWMQEAS9hL2YeUjBRCb3VuZGVkV2luZG93Ll9fZXFfX5RqVjEBAEvbS9yHlIwUQm91bmRlZFdpbmRvdy5fX25lX1+UalYxAQBL3kvgh5SMFEJvdW5kZWRXaW5kb3cuX19sdF9flGpWMQEAS+JL5YeUjBRCb3VuZGVkV2luZG93Ll9fbGVfX5RqVjEBAEvnS+qHlIwUQm91bmRlZFdpbmRvdy5fX2d0X1+UalYxAQBL7Evvh5SMFEJvdW5kZWRXaW5kb3cuX19nZV9flGpWMQEAS/FL9IeUjBZCb3VuZGVkV2luZG93Ll9faGFzaF9flGpWMQEAS/ZL94eUjBZCb3VuZGVkV2luZG93Ll9fcmVwcl9flGpWMQEAS/lL+oeUjA1Cb3VuZGVkV2luZG93lGpdMQEAS8RL+oeUjBVJbnRlcnZhbFdpbmRvdy5fX2x0X1+UalYxAQBNBQFNCAGHlIwZSW50ZXJ2YWxXaW5kb3cuaW50ZXJzZWN0c5RqVjEBAE0KAU0LAYeUjBRJbnRlcnZhbFdpbmRvdy51bmlvbpRqVjEBAE0NAU0PAYeUjA5JbnRlcnZhbFdpbmRvd5RqXTEBAEv9TQ8Bh5SMGVRpbWVzdGFtcGVkVmFsdWUuX19pbml0X1+UalYxAQBNGgFNHQGHlIwXVGltZXN0YW1wZWRWYWx1ZS5fX2VxX1+UalYxAQBNHwFNIgGHlIwZVGltZXN0YW1wZWRWYWx1ZS5fX2hhc2hfX5RqVjEBAE0kAU0lAYeUjBdUaW1lc3RhbXBlZFZhbHVlLl9fbmVfX5RqVjEBAE0nAU0oAYeUjBdUaW1lc3RhbXBlZFZhbHVlLl9fbHRfX5RqVjEBAE0qAU0vAYeUjBBUaW1lc3RhbXBlZFZhbHVllGpdMQEATRIBTS8Bh5SMFEdsb2JhbFdpbmRvdy5fX25ld19flGpWMQEATTYBTTkBh5SMFUdsb2JhbFdpbmRvdy5fX2luaXRfX5RqVjEBAE07AU08AYeUjBVHbG9iYWxXaW5kb3cuX19yZXByX1+UalYxAQBNPgFNPwGHlIwVR2xvYmFsV2luZG93Ll9faGFzaF9flGpWMQEATUEBTUIBh5SME0dsb2JhbFdpbmRvdy5fX2VxX1+UalYxAQBNRAFNRgGHlIwTR2xvYmFsV2luZG93Ll9fbmVfX5RqVjEBAE1IAU1JAYeUjBJHbG9iYWxXaW5kb3cuc3RhcnSUalYxAQBNSwFNTgGHlIwjR2xvYmFsV2luZG93Ll9nZXRUaW1lc3RhbXBGcm9tUHJvdG+UalYxAQBNUAFNVAGHlIwMR2xvYmFsV2luZG93lGpdMQEATTIBTVQBh5SMHU5vbk1lcmdpbmdXaW5kb3dGbi5pc19tZXJnaW5nlGpWMQEATVgBTVkBh5SMGE5vbk1lcmdpbmdXaW5kb3dGbi5tZXJnZZRqVjEBAE1bAU1dAYeUjBJOb25NZXJnaW5nV2luZG93Rm6Ual0xAQBNVwFNXQGHlIwcR2xvYmFsV2luZG93cy53aW5kb3dlZF92YWx1ZZRqVjEBAE1iAU1oAYeUjBRHbG9iYWxXaW5kb3dzLmFzc2lnbpRqVjEBAE1qAU1rAYeUjB5HbG9iYWxXaW5kb3dzLmdldF93aW5kb3dfY29kZXKUalYxAQBNbQFNbgGHlIwWR2xvYmFsV2luZG93cy5fX2hhc2hfX5RqVjEBAE1wAU1xAYeUjBRHbG9iYWxXaW5kb3dzLl9fZXFfX5RqVjEBAE1zAU11AYeUjBRHbG9iYWxXaW5kb3dzLl9fbmVfX5RqVjEBAE13AU14AYeUjCVHbG9iYWxXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATXoBTXsBh5SMJ0dsb2JhbFdpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE19AU2AAYeUjA1HbG9iYWxXaW5kb3dzlGpdMQEATWABTYABh5SMFUZpeGVkV2luZG93cy5fX2luaXRfX5RqVjEBAE2RAU2iAYeUjBNGaXhlZFdpbmRvd3MuYXNzaWdulGpWMQEATaQBTacBh5SMHUZpeGVkV2luZG93cy5nZXRfd2luZG93X2NvZGVylGpWMQEATakBTaoBh5SME0ZpeGVkV2luZG93cy5fX2VxX1+UalYxAQBNrAFNrgGHlIwVRml4ZWRXaW5kb3dzLl9faGFzaF9flGpWMQEATbABTbEBh5SME0ZpeGVkV2luZG93cy5fX25lX1+UalYxAQBNswFNtAGHlIwkRml4ZWRXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATbYBTb0Bh5SMJkZpeGVkV2luZG93cy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATb8BTcYBh5SMDEZpeGVkV2luZG93c5RqXTEBAE2DAU3GAYeUjBdTbGlkaW5nV2luZG93cy5fX2luaXRfX5RqVjEBAE3YAU3hAYeUjBVTbGlkaW5nV2luZG93cy5hc3NpZ26UalYxAQBN4wFN7AGHlIwfU2xpZGluZ1dpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcpRqVjEBAE3uAU3vAYeUjBVTbGlkaW5nV2luZG93cy5fX2VxX1+UalYxAQBN8QFN9QGHlIwVU2xpZGluZ1dpbmRvd3MuX19uZV9flGpWMQEATfcBTfgBh5SMF1NsaWRpbmdXaW5kb3dzLl9faGFzaF9flGpWMQEATfoBTfsBh5SMJlNsaWRpbmdXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATf0BTQYCh5SMKFNsaWRpbmdXaW5kb3dzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUalYxAQBNCAJNEAKHlIwOU2xpZGluZ1dpbmRvd3OUal0xAQBNyQFNEAKHlIwRU2Vzc2lvbnMuX19pbml0X1+UalYxAQBNHAJNIAKHlIwPU2Vzc2lvbnMuYXNzaWdulGpWMQEATSICTSQCh5SMGVNlc3Npb25zLmdldF93aW5kb3dfY29kZXKUalYxAQBNJgJNJwKHlIwOU2Vzc2lvbnMubWVyZ2WUalYxAQBNKQJNPQKHlIwPU2Vzc2lvbnMuX19lcV9flGpWMQEATT8CTUECh5SMD1Nlc3Npb25zLl9fbmVfX5RqVjEBAE1DAk1EAoeUjBFTZXNzaW9ucy5fX2hhc2hfX5RqVjEBAE1GAk1HAoeUjCBTZXNzaW9ucy50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqVjEBAE1JAk1OAoeUjCJTZXNzaW9ucy5mcm9tX3J1bm5lcl9hcGlfcGFyYW1ldGVylGpWMQEATVACTVYCh5SMCFNlc3Npb25zlGpdMQEATRMCTVYCh5R1fZQojBFUaW1lc3RhbXBDb21iaW5lcpRqYQMAAIwaVGltZXN0YW1wQ29tYmluZXIuZ2V0X2ltcGyUamEDAACMCFdpbmRvd0ZulGphAwAAjBZXaW5kb3dGbi5Bc3NpZ25Db250ZXh0lGphAwAAjA9XaW5kb3dGbi5hc3NpZ26UamEDAACMFVdpbmRvd0ZuLk1lcmdlQ29udGV4dJRqYQMAAIwbV2luZG93Rm4uTWVyZ2VDb250ZXh0Lm1lcmdllGphAwAAjA5XaW5kb3dGbi5tZXJnZZRqYQMAAIwTV2luZG93Rm4uaXNfbWVyZ2luZ5RqYQMAAIwZV2luZG93Rm4uZ2V0X3dpbmRvd19jb2RlcpRqYQMAAIwkV2luZG93Rm4uZ2V0X3RyYW5zZm9ybWVkX291dHB1dF90aW1llGphAwAAjA1Cb3VuZGVkV2luZG93lGphAwAAjBtCb3VuZGVkV2luZG93Lm1heF90aW1lc3RhbXCUamEDAACMDkludGVydmFsV2luZG93lGphAwAAjBlJbnRlcnZhbFdpbmRvdy5pbnRlcnNlY3RzlGphAwAAjBRJbnRlcnZhbFdpbmRvdy51bmlvbpRqYQMAAIwQVGltZXN0YW1wZWRWYWx1ZZRqYQMAAIwMR2xvYmFsV2luZG93lGphAwAAjBJOb25NZXJnaW5nV2luZG93Rm6UamEDAACMHU5vbk1lcmdpbmdXaW5kb3dGbi5pc19tZXJnaW5nlGphAwAAjBhOb25NZXJnaW5nV2luZG93Rm4ubWVyZ2WUamEDAACMDUdsb2JhbFdpbmRvd3OUamEDAACMHEdsb2JhbFdpbmRvd3Mud2luZG93ZWRfdmFsdWWUamEDAACMFEdsb2JhbFdpbmRvd3MuYXNzaWdulGphAwAAjB5HbG9iYWxXaW5kb3dzLmdldF93aW5kb3dfY29kZXKUamEDAACMJUdsb2JhbFdpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUamEDAACMJ0dsb2JhbFdpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqYQMAAIwMRml4ZWRXaW5kb3dzlGphAwAAjBNGaXhlZFdpbmRvd3MuYXNzaWdulGphAwAAjB1GaXhlZFdpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcpRqYQMAAIwkRml4ZWRXaW5kb3dzLnRvX3J1bm5lcl9hcGlfcGFyYW1ldGVylGphAwAAjCZGaXhlZFdpbmRvd3MuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqYQMAAIwOU2xpZGluZ1dpbmRvd3OUamEDAACMFVNsaWRpbmdXaW5kb3dzLmFzc2lnbpRqYQMAAIwfU2xpZGluZ1dpbmRvd3MuZ2V0X3dpbmRvd19jb2RlcpRqYQMAAIwmU2xpZGluZ1dpbmRvd3MudG9fcnVubmVyX2FwaV9wYXJhbWV0ZXKUamEDAACMKFNsaWRpbmdXaW5kb3dzLmZyb21fcnVubmVyX2FwaV9wYXJhbWV0ZXKUamEDAACMCFNlc3Npb25zlGphAwAAjA9TZXNzaW9ucy5hc3NpZ26UamEDAACMGVNlc3Npb25zLmdldF93aW5kb3dfY29kZXKUamEDAACMDlNlc3Npb25zLm1lcmdllGphAwAAjCBTZXNzaW9ucy50b19ydW5uZXJfYXBpX3BhcmFtZXRlcpRqYQMAAIwiU2Vzc2lvbnMuZnJvbV9ydW5uZXJfYXBpX3BhcmFtZXRlcpRqYQMAAHWMHWFwYWNoZV9iZWFtLnRyYW5zZm9ybXMud2luZG93lHSUjCBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc5QoWHGJAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlR5cGUgaGludGluZyBkZWNvcmF0b3JzIGFsbG93aW5nIHN0YXRpYyBvciBydW50aW1lIHR5cGUtY2hlY2tpbmcgZm9yIHRoZSBTREsuCgpUaGlzIG1vZHVsZSBkZWZpbmVzIGRlY29yYXRvcnMgd2hpY2ggdXRpbGl6ZSB0aGUgdHlwZS1oaW50cyBkZWZpbmVkIGluCid0eXBlX2hpbnRzLnB5JyB0byBhbGxvdyBhbm5vdGF0aW9uIG9mIHRoZSB0eXBlcyBvZiBmdW5jdGlvbiBhcmd1bWVudHMgYW5kCnJldHVybiB2YWx1ZXMuCgpUeXBlLWhpbnRzIGZvciBmdW5jdGlvbnMgYXJlIGFubm90YXRlZCB1c2luZyB0d28gc2VwYXJhdGUgZGVjb3JhdG9ycy4gT25lIGlzIGZvcgp0eXBlLWhpbnRpbmcgdGhlIHR5cGVzIG9mIGZ1bmN0aW9uIGFyZ3VtZW50cywgdGhlIG90aGVyIGZvciB0eXBlLWhpbnRpbmcgdGhlCmZ1bmN0aW9uIHJldHVybiB2YWx1ZS4gVHlwZS1oaW50cyBjYW4gZWl0aGVyIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9ybSBvZgpwb3NpdGlvbmFsIGFyZ3VtZW50czo6CgogIEB3aXRoX2lucHV0X3R5cGVzKGludCwgaW50KQogIGRlZiBhZGQoYSwgYik6CiAgICByZXR1cm4gYSArIGIKCktleXdvcmQgYXJndW1lbnRzOjoKCiAgQHdpdGhfaW5wdXRfdHlwZXMoYT1pbnQsIGI9aW50KQogIGRlZiBhZGQoYSwgYik6CiAgICByZXR1cm4gYSArIGIKCk9yIGV2ZW4gYSBtaXggb2YgYm90aDo6CgogIEB3aXRoX2lucHV0X3R5cGVzKGludCwgYj1pbnQpCiAgZGVmIGFkZChhLCBiKToKICAgIHJldHVybiBhICsgYgoKRXhhbXBsZSB1c2FnZSBmb3IgdHlwZS1oaW50aW5nIGFyZ3VtZW50cyBvbmx5OjoKCiAgQHdpdGhfaW5wdXRfdHlwZXMocz1zdHIpCiAgZGVmIHRvX2xvd2VyKGEpOgogICAgcmV0dXJuIGEubG93ZXIoKQoKRXhhbXBsZSB1c2FnZSBmb3IgdHlwZS1oaW50aW5nIHJldHVybiB2YWx1ZXMgb25seTo6CgogIEB3aXRoX291dHB1dF90eXBlcyhUdXBsZVtpbnQsIGJvb2xdKQogIGRlZiBjb21wcmVzc19wb2ludChlY19wb2ludCk6CiAgICByZXR1cm4gZWNfcG9pbnQueCwgZWNfcG9pbnQueSA8IDAKCkV4YW1wbGUgdXNhZ2UgZm9yIHR5cGUtaGludGluZyBib3RoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlczo6CgogIEB3aXRoX2lucHV0X3R5cGVzKGE9aW50KQogIEB3aXRoX291dHB1dF90eXBlcyhzdHIpCiAgZGVmIGludF90b19zdHIoYSk6CiAgICByZXR1cm4gc3RyKGEpCgpUeXBlLWhpbnRpbmcgYSBmdW5jdGlvbiB3aXRoIGFyZ3VtZW50cyB0aGF0IHVucGFjayB0dXBsZXMgYXJlIGFsc28gc3VwcG9ydGVkCihpbiBQeXRob24gMiBvbmx5KS4gQXMgYW4gZXhhbXBsZSwgc3VjaCBhIGZ1bmN0aW9uIHdvdWxkIGJlIGRlZmluZWQgYXM6OgoKICBkZWYgZm9vKChhLCBiKSk6CiAgICAuLi4KClRoZSB2YWxpZCB0eXBlLWhpbnQgZm9yIHN1Y2ggYXMgZnVuY3Rpb24gbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOjoKCiAgQHdpdGhfaW5wdXRfdHlwZXMoYT1pbnQsIGI9aW50KQogIGRlZiBmb28oKGEsIGIpKToKICAgIC4uLgoKTm90aWNlIHRoYXQgd2UgaGludCB0aGUgdHlwZSBvZiBlYWNoIHVucGFja2VkIGFyZ3VtZW50IGluZGVwZW5kZW50bHksIHJhdGhlcgp0aGFuIGhpbnRpbmcgdGhlIHR5cGUgb2YgdGhlIHR1cGxlIGFzIGEgd2hvbGUgKFR1cGxlW2ludCwgaW50XSkuCgpPcHRpb25hbGx5LCB0eXBlLWhpbnRzIGNhbiBiZSB0eXBlLWNoZWNrZWQgYXQgcnVudGltZS4gVG8gdG9nZ2xlIHRoaXMgYmVoYXZpb3IKdGhpcyBtb2R1bGUgZGVmaW5lcyB0d28gZnVuY3Rpb25zOiAnZW5hYmxlX3J1bl90aW1lX3R5cGVfY2hlY2tpbmcnIGFuZAonZGlzYWJsZV9ydW5fdGltZV90eXBlX2NoZWNraW5nJy4gTk9URTogZm9yIHRoaXMgdG9nZ2xlIGJlaGF2aW9yIHRvIHdvcmsKcHJvcGVybHkgaXQgbXVzdCBhcHBlYXIgYXQgdGhlIHRvcCBvZiB0aGUgbW9kdWxlIHdoZXJlIGFsbCBmdW5jdGlvbnMgYXJlCmRlZmluZWQsIG9yIGJlZm9yZSBpbXBvcnRpbmcgYSBtb2R1bGUgY29udGFpbmluZyB0eXBlLWhpbnRlZCBmdW5jdGlvbnMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpbnNwZWN0CmltcG9ydCBpdGVydG9vbHMKaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IHN5cwppbXBvcnQgdHJhY2ViYWNrCmltcG9ydCB0eXBlcwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBuZXh0CmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCB6aXAKZnJvbSB0eXBpbmcgaW1wb3J0IEFueQpmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKZnJvbSB0eXBpbmcgaW1wb3J0IERpY3QKZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKZnJvbSB0eXBpbmcgaW1wb3J0IE5hbWVkVHVwbGUKZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCmZyb20gdHlwaW5nIGltcG9ydCBUdXBsZQpmcm9tIHR5cGluZyBpbXBvcnQgVHlwZVZhcgoKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5IGltcG9ydCBjb252ZXJ0X3RvX2JlYW1fdHlwZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCBTaW1wbGVUeXBlSGludEVycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgY2hlY2tfY29uc3RyYWludApmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtCgp0cnk6CiAgaW1wb3J0IGZ1bmNzaWdzICAjIFB5dGhvbiAyIG9ubHkuCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICBmdW5jc2lncyA9IE5vbmUKCl9fYWxsX18gPSBbCiAgICAnbm9fYW5ub3RhdGlvbnMnLAogICAgJ3dpdGhfaW5wdXRfdHlwZXMnLAogICAgJ3dpdGhfb3V0cHV0X3R5cGVzJywKICAgICdXaXRoVHlwZUhpbnRzJywKICAgICdUeXBlQ2hlY2tFcnJvcicsCl0KClQgPSBUeXBlVmFyKCdUJykKV2l0aFR5cGVIaW50c1QgPSBUeXBlVmFyKCdXaXRoVHlwZUhpbnRzVCcsIGJvdW5kPSdXaXRoVHlwZUhpbnRzJykgICMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQoKIyBUaGlzIGlzIG1pc3NpbmcgaW4gdGhlIGJ1aWx0aW4gdHlwZXMgbW9kdWxlLiAgc3RyLnVwcGVyIGlzIGFyYml0cmFyeSwgYW55CiMgbWV0aG9kIG9uIGEgQy1pbXBsZW1lbnRlZCB0eXBlIHdpbGwgZG8uCiMgcHlsaW50OiBkaXNhYmxlPWludmFsaWQtbmFtZQpfTWV0aG9kRGVzY3JpcHRvclR5cGUgPSB0eXBlKHN0ci51cHBlcikKIyBweWxpbnQ6IGVuYWJsZT1pbnZhbGlkLW5hbWUKCl9BTllfVkFSX1BPU0lUSU9OQUwgPSB0eXBlaGludHMuVHVwbGVbdHlwZWhpbnRzLkFueSwgLi4uXQpfQU5ZX1ZBUl9LRVlXT1JEID0gdHlwZWhpbnRzLkRpY3RbdHlwZWhpbnRzLkFueSwgdHlwZWhpbnRzLkFueV0KIyBUT0RPKEJFQU0tODI4MCk6IFJlbW92ZSB0aGlzIHdoZW4gZnJvbV9jYWxsYWJsZSBpcyByZWFkeSB0byBiZSBlbmFibGVkLgpfZW5hYmxlX2Zyb21fY2FsbGFibGUgPSBGYWxzZQoKdHJ5OgogIF9vcmlnaW5hbF9nZXRmdWxsYXJnc3BlYyA9IGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMKICBfdXNlX2Z1bGxfYXJnc3BlYyA9IFRydWUKZXhjZXB0IEF0dHJpYnV0ZUVycm9yOiAgIyBQeXRob24gMgogIF9vcmlnaW5hbF9nZXRmdWxsYXJnc3BlYyA9IGluc3BlY3QuZ2V0YXJnc3BlYyAgIyB0eXBlOiBpZ25vcmUKICBfdXNlX2Z1bGxfYXJnc3BlYyA9IEZhbHNlCgoKZGVmIGdldGZ1bGxhcmdzcGVjKGZ1bmMpOgogICMgUHl0aG9uIDM6IFVzZSBnZXRfc2lnbmF0dXJlIGluc3RlYWQuCiAgYXNzZXJ0IHN5cy52ZXJzaW9uX2luZm8gPCAoMywgKSwgJ1RoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBQeXRob24gMycKICB0cnk6CiAgICByZXR1cm4gX29yaWdpbmFsX2dldGZ1bGxhcmdzcGVjKGZ1bmMpCiAgZXhjZXB0IFR5cGVFcnJvcjoKICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZSk6CiAgICAgIGFyZ3NwZWMgPSBnZXRmdWxsYXJnc3BlYyhmdW5jLl9faW5pdF9fKQogICAgICBkZWwgYXJnc3BlYy5hcmdzWzBdCiAgICAgIHJldHVybiBhcmdzcGVjCiAgICBlbGlmIGNhbGxhYmxlKGZ1bmMpOgogICAgICB0cnk6CiAgICAgICAgcmV0dXJuIF9vcmlnaW5hbF9nZXRmdWxsYXJnc3BlYyhmdW5jLl9fY2FsbF9fKQogICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICMgUmV0dXJuIGFuIEFyZ1NwZWMgd2l0aCBhdCBsZWFzdCBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCwKICAgICAgICAjIGFuZCBhbnkgbnVtYmVyIG9mIG90aGVyIChwb3NpdGlvbmFsIG9yIGtleXdvcmQpIGFyZ3VtZW50cwogICAgICAgICMgd2hvc2UgbmFtZSB3b24ndCBtYXRjaCBhbnkgcmVhbCBhcmd1bWVudC4KICAgICAgICAjIEFyZ3VtZW50cyB3aXRoIHRoZSAldW5rbm93biUgcHJlZml4IHdpbGwgYmUgaWdub3JlZCBpbiB0aGUgdHlwZQogICAgICAgICMgY2hlY2tpbmcgY29kZS4KICAgICAgICBpZiBfdXNlX2Z1bGxfYXJnc3BlYzoKICAgICAgICAgIHJldHVybiBpbnNwZWN0LkZ1bGxBcmdTcGVjKFsnXyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fdW5rbm93bl9fdmFyYXJncycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX191bmtub3duX19rZXl3b3JkcycsICgpLCBbXSwge30sIHt9KQogICAgICAgIGVsc2U6ICAjIFB5dGhvbiAyCiAgICAgICAgICByZXR1cm4gaW5zcGVjdC5BcmdTcGVjKFsnXyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX191bmtub3duX192YXJhcmdzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fdW5rbm93bl9fa2V5d29yZHMnLCAoKSkKICAgIGVsc2U6CiAgICAgIHJhaXNlCgoKZGVmIGdldF9zaWduYXR1cmUoZnVuYyk6CiAgIiIiTGlrZSBpbnNwZWN0LnNpZ25hdHVyZSgpLCBidXQgc3VwcG9ydHMgUHkyIGFzIHdlbGwuCgogIFRoaXMgbW9kdWxlIHVzZXMgaW5zcGVjdC5zaWduYXR1cmUgaW5zdGVhZCBvZiBnZXRmdWxsYXJnc3BlYyBzaW5jZSBpbiB0aGUKICBsYXR0ZXI6ICd0aGUgInNlbGYiIHBhcmFtZXRlciBpcyBhbHdheXMgcmVwb3J0ZWQsIGV2ZW4gZm9yIGJvdW5kIG1ldGhvZHMnCiAgaHR0cHM6Ly9naXRodWIuY29tL3B5dGhvbi9jcHl0aG9uL2Jsb2IvNDRmOTFjMzg4YTZmNGRhOWVkMzMwMGRmMzJjYTI5MGI4YWExMDRlYS9MaWIvaW5zcGVjdC5weSNMMTEwMwogICIiIgogICMgRmFsbCBiYWNrIG9uIGZ1bmNzaWdzIGlmIGluc3BlY3QgbW9kdWxlIGRvZXNuJ3QgaGF2ZSAnc2lnbmF0dXJlJzsgcHJlZmVyCiAgIyBpbnNwZWN0LnNpZ25hdHVyZSBvdmVyIGZ1bmNzaWdzLnNpZ25hdHVyZSBpZiBib3RoIGFyZSBhdmFpbGFibGUuCiAgaWYgaGFzYXR0cihpbnNwZWN0LCAnc2lnbmF0dXJlJyk6CiAgICBpbnNwZWN0XyA9IGluc3BlY3QKICBlbHNlOgogICAgaW5zcGVjdF8gPSBmdW5jc2lncwoKICB0cnk6CiAgICBzaWduYXR1cmUgPSBpbnNwZWN0Xy5zaWduYXR1cmUoZnVuYykKICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICMgRmFsbCBiYWNrIG9uIGEgY2F0Y2gtYWxsIHNpZ25hdHVyZS4KICAgIHBhcmFtcyA9IFsKICAgICAgICBpbnNwZWN0Xy5QYXJhbWV0ZXIoJ18nLCBpbnNwZWN0Xy5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JEKSwKICAgICAgICBpbnNwZWN0Xy5QYXJhbWV0ZXIoCiAgICAgICAgICAgICdfX3Vua25vd25fX3ZhcmFyZ3MnLCBpbnNwZWN0Xy5QYXJhbWV0ZXIuVkFSX1BPU0lUSU9OQUwpLAogICAgICAgIGluc3BlY3RfLlBhcmFtZXRlcigKICAgICAgICAgICAgJ19fdW5rbm93bl9fa2V5d29yZHMnLCBpbnNwZWN0Xy5QYXJhbWV0ZXIuVkFSX0tFWVdPUkQpCiAgICBdCgogICAgc2lnbmF0dXJlID0gaW5zcGVjdF8uU2lnbmF0dXJlKHBhcmFtcykKCiAgIyBUaGlzIGlzIGEgc3BlY2lhbGl6YXRpb24gdG8gaGludCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgY2VydGFpbiBidWlsdGlucywKICAjIHN1Y2ggYXMgc3RyLnN0cmlwLgogIGlmIGlzaW5zdGFuY2UoZnVuYywgX01ldGhvZERlc2NyaXB0b3JUeXBlKToKICAgIHBhcmFtcyA9IGxpc3Qoc2lnbmF0dXJlLnBhcmFtZXRlcnMudmFsdWVzKCkpCiAgICBpZiBwYXJhbXNbMF0uYW5ub3RhdGlvbiA9PSBwYXJhbXNbMF0uZW1wdHk6CiAgICAgIHBhcmFtc1swXSA9IHBhcmFtc1swXS5yZXBsYWNlKGFubm90YXRpb249ZnVuYy5fX29iamNsYXNzX18pCiAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZS5yZXBsYWNlKHBhcmFtZXRlcnM9cGFyYW1zKQoKICAjIFRoaXMgaXMgYSBzcGVjaWFsaXphdGlvbiB0byBoaW50IHRoZSByZXR1cm4gdmFsdWUgb2YgdHlwZSBjYWxsYWJsZXMuCiAgaWYgKHNpZ25hdHVyZS5yZXR1cm5fYW5ub3RhdGlvbiA9PSBzaWduYXR1cmUuZW1wdHkgYW5kCiAgICAgIGlzaW5zdGFuY2UoZnVuYywgdHlwZSkpOgogICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlLnJlcGxhY2UocmV0dXJuX2Fubm90YXRpb249dHlwZWhpbnRzLm5vcm1hbGl6ZShmdW5jKSkKCiAgcmV0dXJuIHNpZ25hdHVyZQoKCmRlZiBub19hbm5vdGF0aW9ucyhmbik6CiAgIiIiRGVjb3JhdG9yIHRoYXQgcHJldmVudHMgQmVhbSBmcm9tIHVzaW5nIHR5cGUgaGludCBhbm5vdGF0aW9ucyBvbiBhCiAgY2FsbGFibGUuIiIiCiAgc2V0YXR0cihmbiwgJ19iZWFtX25vX2Fubm90YXRpb25zJywgVHJ1ZSkKICByZXR1cm4gZm4KCgpjbGFzcyBJT1R5cGVIaW50cyhOYW1lZFR1cGxlKAogICAgJ0lPVHlwZUhpbnRzJywKICAgIFsoJ2lucHV0X3R5cGVzJywgT3B0aW9uYWxbVHVwbGVbVHVwbGVbQW55LCAuLi5dLCBEaWN0W3N0ciwgQW55XV1dKSwKICAgICAoJ291dHB1dF90eXBlcycsIE9wdGlvbmFsW1R1cGxlW1R1cGxlW0FueSwgLi4uXSwgRGljdFtzdHIsIEFueV1dXSksCiAgICAgKCdvcmlnaW4nLCBMaXN0W3N0cl0pXSkpOgogICIiIkVuY2Fwc3VsYXRlcyBhbGwgdHlwZSBoaW50IGluZm9ybWF0aW9uIGFib3V0IGEgRGF0YWZsb3cgY29uc3RydWN0LgoKICBUaGlzIHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCB2aWEgdGhlIFdpdGhUeXBlSGludHMgbWl4aW4gY2xhc3MsIHRob3VnaAogIG1heSBhbHNvIGJlIGF0dGFjaGVkIHRvIG90aGVyIG9iamVjdHMgKHN1Y2ggYXMgUHl0aG9uIGZ1bmN0aW9ucykuCgogIEF0dHJpYnV0ZXM6CiAgICBpbnB1dF90eXBlczogKHR1cGxlLCBkaWN0KSBMaXN0IG9mIHR5cGluZyB0eXBlcywgYW5kIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnkuCiAgICAgIE1heSBiZSBOb25lLiBUaGUgbGlzdCBhbmQgZGljdCBjb3JyZXNwb25kIHRvIGFyZ3MgYW5kIGt3YXJncy4KICAgIG91dHB1dF90eXBlczogKHR1cGxlLCBkaWN0KSBMaXN0IG9mIHR5cGluZyB0eXBlcywgYW5kIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnkKICAgICAgKHVudXNlZCkuIE9ubHkgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgaXMgdXNlZC4gTWF5IGJlIE5vbmUuCiAgICBvcmlnaW46IChMaXN0W3N0cl0pIFN0YWNrIG9mIHRyYWNlYmFja3Mgb2YgbWV0aG9kIGNhbGxzIHVzZWQgdG8gY3JlYXRlIHRoaXMKICAgICAgaW5zdGFuY2UuCiAgIiIiCgogIHRyYWNlYmFja19saW1pdCA9IDUKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIF9tYWtlX29yaWdpbihjbHMsIGJhc2VzLCB0Yj1UcnVlLCBtc2c9KCkpOgogICAgIyB0eXBlOiAoTGlzdFtJT1R5cGVIaW50c10sIGJvb2wsIExpc3Rbc3RyXSkgLT4gTGlzdFtzdHJdCiAgICBpZiBtc2c6CiAgICAgIHJlcyA9IG1zZwogICAgZWxzZToKICAgICAgcmVzID0gW10KICAgIGlmIHRiOgogICAgICAjIE9taXQgdGhpcyBtZXRob2QgYW5kIHRoZSBJT1R5cGVIaW50cyBtZXRob2QgdGhhdCBjYWxsZWQgaXQuCiAgICAgIG51bV9mcmFtZXNfc2tpcCA9IDIKICAgICAgdGIgPSB0cmFjZWJhY2suZm9ybWF0X3N0YWNrKGxpbWl0PWNscy50cmFjZWJhY2tfbGltaXQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2ZyYW1lc19za2lwKVs6LW51bV9mcmFtZXNfc2tpcF0KICAgICAgIyB0YiBpcyBhIGxpc3Qgb2Ygc3RyaW5ncyBpbiB0aGUgZm9ybSBvZiAnRmlsZSAuLi5cbltjb2RlXVxuJy4gU3BsaXQgaW50bwogICAgICAjIHNpbmdsZSBsaW5lcyBhbmQgZmxhdHRlbi4KICAgICAgcmVzICs9IGxpc3QoCiAgICAgICAgICBpdGVydG9vbHMuY2hhaW4uZnJvbV9pdGVyYWJsZShzLnN0cmlwKCkuc3BsaXQoJ1xuJykgZm9yIHMgaW4gdGIpKQoKICAgIGJhc2VzID0gW2Jhc2UgZm9yIGJhc2UgaW4gYmFzZXMgaWYgYmFzZS5vcmlnaW5dCiAgICBpZiBiYXNlczoKICAgICAgcmVzICs9IFsnJywgJ2Jhc2VkIG9uOiddCiAgICAgIGZvciBpLCBiYXNlIGluIGVudW1lcmF0ZShiYXNlcyk6CiAgICAgICAgaWYgaSA+IDA6CiAgICAgICAgICByZXMgKz0gWycnLCAnYW5kOiddCiAgICAgICAgcmVzICs9IFsnICAnICsgc3RyKGJhc2UpXQogICAgICAgIHJlcyArPSBbJyAgJyArIHMgZm9yIHMgaW4gYmFzZS5vcmlnaW5dCiAgICByZXR1cm4gcmVzCgogIEBjbGFzc21ldGhvZAogIGRlZiBlbXB0eShjbHMpOgogICAgIyB0eXBlOiAoKSAtPiBJT1R5cGVIaW50cwoKICAgICIiIkNvbnN0cnVjdCBhIGJhc2UgSU9UeXBlSGludHMgb2JqZWN0IHdpdGggbm8gaGludHMuIiIiCiAgICByZXR1cm4gSU9UeXBlSGludHMoTm9uZSwgTm9uZSwgW10pCgogIEBjbGFzc21ldGhvZAogIGRlZiBmcm9tX2NhbGxhYmxlKGNscywgZm4pOgogICAgIyB0eXBlOiAoQ2FsbGFibGUpIC0+IE9wdGlvbmFsW0lPVHlwZUhpbnRzXQoKICAgICIiIkNvbnN0cnVjdCBhbiBJT1R5cGVIaW50cyBvYmplY3QgZnJvbSBhIGNhbGxhYmxlJ3Mgc2lnbmF0dXJlLgoKICAgIFN1cHBvcnRzIFB5dGhvbiAzIGFubm90YXRpb25zLiBGb3IgcGFydGlhbCBhbm5vdGF0aW9ucywgc2V0cyB1bmtub3duIHR5cGVzCiAgICB0byBBbnksIF9BTllfVkFSX1BPU0lUSU9OQUwsIG9yIF9BTllfVkFSX0tFWVdPUkQuCgogICAgUmV0dXJuczoKICAgICAgQSBuZXcgSU9UeXBlSGludHMgb3IgTm9uZSBpZiBubyBhbm5vdGF0aW9ucyBmb3VuZC4KICAgICIiIgogICAgaWYgbm90IF9lbmFibGVfZnJvbV9jYWxsYWJsZSBvciBnZXRhdHRyKGZuLCAnX2JlYW1fbm9fYW5ub3RhdGlvbnMnLCBGYWxzZSk6CiAgICAgIHJldHVybiBOb25lCiAgICBzaWduYXR1cmUgPSBnZXRfc2lnbmF0dXJlKGZuKQogICAgaWYgKGFsbChwYXJhbS5hbm5vdGF0aW9uID09IHBhcmFtLmVtcHR5CiAgICAgICAgICAgIGZvciBwYXJhbSBpbiBzaWduYXR1cmUucGFyYW1ldGVycy52YWx1ZXMoKSkgYW5kCiAgICAgICAgc2lnbmF0dXJlLnJldHVybl9hbm5vdGF0aW9uID09IHNpZ25hdHVyZS5lbXB0eSk6CiAgICAgIHJldHVybiBOb25lCiAgICBpbnB1dF9hcmdzID0gW10KICAgIGlucHV0X2t3YXJncyA9IHt9CiAgICBmb3IgcGFyYW0gaW4gc2lnbmF0dXJlLnBhcmFtZXRlcnMudmFsdWVzKCk6CiAgICAgIGlmIHBhcmFtLmFubm90YXRpb24gPT0gcGFyYW0uZW1wdHk6CiAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBwYXJhbS5WQVJfUE9TSVRJT05BTDoKICAgICAgICAgIGlucHV0X2FyZ3MuYXBwZW5kKF9BTllfVkFSX1BPU0lUSU9OQUwpCiAgICAgICAgZWxpZiBwYXJhbS5raW5kID09IHBhcmFtLlZBUl9LRVlXT1JEOgogICAgICAgICAgaW5wdXRfa3dhcmdzW3BhcmFtLm5hbWVdID0gX0FOWV9WQVJfS0VZV09SRAogICAgICAgIGVsaWYgcGFyYW0ua2luZCA9PSBwYXJhbS5LRVlXT1JEX09OTFk6CiAgICAgICAgICBpbnB1dF9rd2FyZ3NbcGFyYW0ubmFtZV0gPSB0eXBlaGludHMuQW55CiAgICAgICAgZWxzZToKICAgICAgICAgIGlucHV0X2FyZ3MuYXBwZW5kKHR5cGVoaW50cy5BbnkpCiAgICAgIGVsc2U6CiAgICAgICAgaWYgcGFyYW0ua2luZCBpbiBbcGFyYW0uS0VZV09SRF9PTkxZLCBwYXJhbS5WQVJfS0VZV09SRF06CiAgICAgICAgICBpbnB1dF9rd2FyZ3NbcGFyYW0ubmFtZV0gPSBjb252ZXJ0X3RvX2JlYW1fdHlwZShwYXJhbS5hbm5vdGF0aW9uKQogICAgICAgIGVsc2U6CiAgICAgICAgICBhc3NlcnQgcGFyYW0ua2luZCBpbiBbcGFyYW0uUE9TSVRJT05BTF9PTkxZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLlBPU0lUSU9OQUxfT1JfS0VZV09SRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5WQVJfUE9TSVRJT05BTF0sIFwKICAgICAgICAgICAgICAnVW5zdXBwb3J0ZWQgUGFyYW1ldGVyIGtpbmQ6ICVzJyAlIHBhcmFtLmtpbmQKICAgICAgICAgIGlucHV0X2FyZ3MuYXBwZW5kKGNvbnZlcnRfdG9fYmVhbV90eXBlKHBhcmFtLmFubm90YXRpb24pKQogICAgb3V0cHV0X2FyZ3MgPSBbXQogICAgaWYgc2lnbmF0dXJlLnJldHVybl9hbm5vdGF0aW9uICE9IHNpZ25hdHVyZS5lbXB0eToKICAgICAgb3V0cHV0X2FyZ3MuYXBwZW5kKGNvbnZlcnRfdG9fYmVhbV90eXBlKHNpZ25hdHVyZS5yZXR1cm5fYW5ub3RhdGlvbikpCiAgICBlbHNlOgogICAgICBvdXRwdXRfYXJncy5hcHBlbmQodHlwZWhpbnRzLkFueSkKCiAgICBuYW1lID0gZ2V0YXR0cihmbiwgJ19fbmFtZV9fJywgJzx1bmtub3duPicpCiAgICBtc2cgPSBbJ2Zyb21fY2FsbGFibGUoJXMpJyAlIG5hbWUsICcgIHNpZ25hdHVyZTogJXMnICUgc2lnbmF0dXJlXQogICAgaWYgaGFzYXR0cihmbiwgJ19fY29kZV9fJyk6CiAgICAgIG1zZy5hcHBlbmQoCiAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQnICUKICAgICAgICAgIChmbi5fX2NvZGVfXy5jb19maWxlbmFtZSwgZm4uX19jb2RlX18uY29fZmlyc3RsaW5lbm8pKQogICAgcmV0dXJuIElPVHlwZUhpbnRzKAogICAgICAgIGlucHV0X3R5cGVzPSh0dXBsZShpbnB1dF9hcmdzKSwgaW5wdXRfa3dhcmdzKSwKICAgICAgICBvdXRwdXRfdHlwZXM9KHR1cGxlKG91dHB1dF9hcmdzKSwge30pLAogICAgICAgIG9yaWdpbj1jbHMuX21ha2Vfb3JpZ2luKFtdLCB0Yj1GYWxzZSwgbXNnPW1zZykpCgogIGRlZiB3aXRoX2lucHV0X3R5cGVzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAjIHR5cGU6ICguLi4pIC0+IElPVHlwZUhpbnRzCiAgICByZXR1cm4gc2VsZi5fcmVwbGFjZSgKICAgICAgICBpbnB1dF90eXBlcz0oYXJncywga3dhcmdzKSwgb3JpZ2luPXNlbGYuX21ha2Vfb3JpZ2luKFtzZWxmXSkpCgogIGRlZiB3aXRoX291dHB1dF90eXBlcyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyB0eXBlOiAoLi4uKSAtPiBJT1R5cGVIaW50cwogICAgcmV0dXJuIHNlbGYuX3JlcGxhY2UoCiAgICAgICAgb3V0cHV0X3R5cGVzPShhcmdzLCBrd2FyZ3MpLCBvcmlnaW49c2VsZi5fbWFrZV9vcmlnaW4oW3NlbGZdKSkKCiAgZGVmIHNpbXBsZV9vdXRwdXRfdHlwZShzZWxmLCBjb250ZXh0KToKICAgIGlmIHNlbGYuX2hhc19vdXRwdXRfdHlwZXMoKToKICAgICAgYXJncywga3dhcmdzID0gc2VsZi5vdXRwdXRfdHlwZXMKICAgICAgaWYgbGVuKGFyZ3MpICE9IDEgb3Iga3dhcmdzOgogICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgJ0V4cGVjdGVkIHNpbmdsZSBvdXRwdXQgdHlwZSBoaW50IGZvciAlcyBidXQgZ290OiAlcycgJQogICAgICAgICAgICAoY29udGV4dCwgc2VsZi5vdXRwdXRfdHlwZXMpKQogICAgICByZXR1cm4gYXJnc1swXQoKICBkZWYgaGFzX3NpbXBsZV9vdXRwdXRfdHlwZShzZWxmKToKICAgICIiIldoZXRoZXIgdGhlcmUncyBhIHNpbmdsZSBwb3NpdGlvbmFsIG91dHB1dCB0eXBlLiIiIgogICAgcmV0dXJuICgKICAgICAgICBzZWxmLm91dHB1dF90eXBlcyBhbmQgbGVuKHNlbGYub3V0cHV0X3R5cGVzWzBdKSA9PSAxIGFuZAogICAgICAgIG5vdCBzZWxmLm91dHB1dF90eXBlc1sxXSkKCiAgZGVmIHN0cmlwX2l0ZXJhYmxlKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBJT1R5cGVIaW50cwoKICAgICIiIlJlbW92ZXMgb3V0ZXIgSXRlcmFibGUgKG9yIGVxdWl2YWxlbnQpIGZyb20gb3V0cHV0IHR5cGUuCgogICAgT25seSBhZmZlY3RzIGluc3RhbmNlcyB3aXRoIHNpbXBsZSBvdXRwdXQgdHlwZXMsIG90aGVyd2lzZSBpcyBhIG5vLW9wLgogICAgRG9lcyBub3QgbW9kaWZ5IHNlbGYuCgogICAgRGVzaWduZWQgdG8gYmUgdXNlZCB3aXRoIHR5cGUgaGludHMgZnJvbSBjYWxsYWJsZXMgb2YgUGFyRG8sIEZsYXRNYXAsIERvRm4uCiAgICBPdXRwdXQgdHlwZSBtYXkgYmUgT3B0aW9uYWxbVF0sIGluIHdoaWNoIGNhc2UgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgVCBpcwogICAgdXNlZCBhcyB0aGUgb3V0cHV0IHR5cGUuCiAgICBPdXRwdXQgdHlwZSBtYXkgYmUgTm9uZS9Ob25lVHlwZSwgaW4gd2hpY2ggY2FzZSBub3RoaW5nIGlzIGRvbmUuCgogICAgRXhhbXBsZTogR2VuZXJhdG9yW1R1cGxlKGludCwgaW50KV0gYmVjb21lcyBUdXBsZShpbnQsIGludCkKCiAgICBSZXR1cm5zOgogICAgICBBIGNvcHkgb2YgdGhpcyBpbnN0YW5jZSB3aXRoIGEgcG9zc2libHkgZGlmZmVyZW50IG91dHB1dCB0eXBlLgoKICAgIFJhaXNlczoKICAgICAgVmFsdWVFcnJvciBpZiBvdXRwdXQgdHlwZSBpcyBzaW1wbGUgYW5kIG5vdCBpdGVyYWJsZS4KICAgICIiIgogICAgaWYgc2VsZi5vdXRwdXRfdHlwZXMgaXMgTm9uZSBvciBub3Qgc2VsZi5oYXNfc2ltcGxlX291dHB1dF90eXBlKCk6CiAgICAgIHJldHVybiBzZWxmCiAgICBvdXRwdXRfdHlwZSA9IHNlbGYub3V0cHV0X3R5cGVzWzBdWzBdCiAgICBpZiBvdXRwdXRfdHlwZSBpcyBOb25lIG9yIGlzaW5zdGFuY2Uob3V0cHV0X3R5cGUsIHR5cGUoTm9uZSkpOgogICAgICByZXR1cm4gc2VsZgogICAgIyBJZiBvdXRwdXRfdHlwZSA9PSBPcHRpb25hbFtUXTogb3V0cHV0X3R5cGUgPSBULgogICAgaWYgaXNpbnN0YW5jZShvdXRwdXRfdHlwZSwgdHlwZWhpbnRzLlVuaW9uQ29uc3RyYWludCk6CiAgICAgIHR5cGVzID0gbGlzdChvdXRwdXRfdHlwZS51bmlvbl90eXBlcykKICAgICAgaWYgbGVuKHR5cGVzKSA9PSAyOgogICAgICAgIHRyeToKICAgICAgICAgIHR5cGVzLnJlbW92ZSh0eXBlKE5vbmUpKQogICAgICAgICAgb3V0cHV0X3R5cGUgPSB0eXBlc1swXQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgcGFzcwoKICAgIHlpZWxkZWRfdHlwZSA9IHR5cGVoaW50cy5nZXRfeWllbGRlZF90eXBlKG91dHB1dF90eXBlKQogICAgcmV0dXJuIHNlbGYuX3JlcGxhY2UoCiAgICAgICAgb3V0cHV0X3R5cGVzPSgoeWllbGRlZF90eXBlLCApLCB7fSksCiAgICAgICAgb3JpZ2luPXNlbGYuX21ha2Vfb3JpZ2luKFtzZWxmXSwgdGI9RmFsc2UsIG1zZz1bJ3N0cmlwX2l0ZXJhYmxlKCknXSkpCgogIGRlZiB3aXRoX2RlZmF1bHRzKHNlbGYsIGhpbnRzKToKICAgICMgdHlwZTogKE9wdGlvbmFsW0lPVHlwZUhpbnRzXSkgLT4gSU9UeXBlSGludHMKICAgIGlmIG5vdCBoaW50czoKICAgICAgcmV0dXJuIHNlbGYKICAgIGlmIG5vdCBzZWxmOgogICAgICByZXR1cm4gaGludHMKICAgIGlmIHNlbGYuX2hhc19pbnB1dF90eXBlcygpOgogICAgICBpbnB1dF90eXBlcyA9IHNlbGYuaW5wdXRfdHlwZXMKICAgIGVsc2U6CiAgICAgIGlucHV0X3R5cGVzID0gaGludHMuaW5wdXRfdHlwZXMKICAgIGlmIHNlbGYuX2hhc19vdXRwdXRfdHlwZXMoKToKICAgICAgb3V0cHV0X3R5cGVzID0gc2VsZi5vdXRwdXRfdHlwZXMKICAgIGVsc2U6CiAgICAgIG91dHB1dF90eXBlcyA9IGhpbnRzLm91dHB1dF90eXBlcwogICAgcmVzID0gSU9UeXBlSGludHMoCiAgICAgICAgaW5wdXRfdHlwZXMsCiAgICAgICAgb3V0cHV0X3R5cGVzLAogICAgICAgIHNlbGYuX21ha2Vfb3JpZ2luKFtzZWxmLCBoaW50c10sIHRiPUZhbHNlLCBtc2c9Wyd3aXRoX2RlZmF1bHRzKCknXSkpCiAgICBpZiByZXMgPT0gc2VsZjoKICAgICAgcmV0dXJuIHNlbGYgICMgRG9uJ3QgbmVlZGxlc3NseSBpbmNyZWFzZSBvcmlnaW4gdHJhY2ViYWNrIGxlbmd0aC4KICAgIGVsc2U6CiAgICAgIHJldHVybiByZXMKCiAgZGVmIF9oYXNfaW5wdXRfdHlwZXMoc2VsZik6CiAgICByZXR1cm4gc2VsZi5pbnB1dF90eXBlcyBpcyBub3QgTm9uZSBhbmQgYW55KHNlbGYuaW5wdXRfdHlwZXMpCgogIGRlZiBfaGFzX291dHB1dF90eXBlcyhzZWxmKToKICAgIHJldHVybiBzZWxmLm91dHB1dF90eXBlcyBpcyBub3QgTm9uZSBhbmQgYW55KHNlbGYub3V0cHV0X3R5cGVzKQoKICBkZWYgX19ib29sX18oc2VsZik6CiAgICByZXR1cm4gc2VsZi5faGFzX2lucHV0X3R5cGVzKCkgb3Igc2VsZi5faGFzX291dHB1dF90eXBlcygpCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnSU9UeXBlSGludHNbaW5wdXRzPSVzLCBvdXRwdXRzPSVzXScgJSAoCiAgICAgICAgc2VsZi5pbnB1dF90eXBlcywgc2VsZi5vdXRwdXRfdHlwZXMpCgogIGRlZiBkZWJ1Z19zdHIoc2VsZik6CiAgICByZXR1cm4gJ1xuJy5qb2luKFtzZWxmLl9fcmVwcl9fKCldICsgc2VsZi5vcmlnaW4pCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgZGVmIHNhbWUoYSwgYik6CiAgICAgIGlmIGEgaXMgTm9uZSBvciBub3QgYW55KGEpOgogICAgICAgIHJldHVybiBiIGlzIE5vbmUgb3Igbm90IGFueShiKQogICAgICBlbHNlOgogICAgICAgIHJldHVybiBhID09IGIKCiAgICByZXR1cm4gKAogICAgICAgIHNhbWUoc2VsZi5pbnB1dF90eXBlcywgb3RoZXIuaW5wdXRfdHlwZXMpIGFuZAogICAgICAgIHNhbWUoc2VsZi5vdXRwdXRfdHlwZXMsIG90aGVyLm91dHB1dF90eXBlcykpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHN0cihzZWxmKSkKCiAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAjIERvbid0IGluY2x1ZGUgIm9yaWdpbiIgZGVidWcgaW5mb3JtYXRpb24gaW4gcGlja2xlZCBmb3JtLgogICAgcmV0dXJuIChJT1R5cGVIaW50cywgKHNlbGYuaW5wdXRfdHlwZXMsIHNlbGYub3V0cHV0X3R5cGVzLCBbXSkpCgoKY2xhc3MgV2l0aFR5cGVIaW50cyhvYmplY3QpOgogICIiIkEgbWl4aW4gY2xhc3MgdGhhdCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzZXQgYW5kIHJldHJpZXZlIHR5cGUgaGludHMuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsICp1bnVzZWRfYXJncywgKip1bnVzZWRfa3dhcmdzKToKICAgIHNlbGYuX3R5cGVfaGludHMgPSBJT1R5cGVIaW50cy5lbXB0eSgpCgogIGRlZiBfZ2V0X29yX2NyZWF0ZV90eXBlX2hpbnRzKHNlbGYpOgogICAgIyB0eXBlOiAoKSAtPiBJT1R5cGVIaW50cwogICAgIyBfX2luaXRfXyBtYXkgaGF2ZSBub3QgYmVlbiBjYWxsZWQKICAgIHRyeToKICAgICAgIyBPbmx5IHJldHVybiBhbiBpbnN0YW5jZSBib3VuZCB0byBzZWxmIChzZWUgQkVBTS04NjI5KS4KICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X19bJ190eXBlX2hpbnRzJ10KICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgc2VsZi5fdHlwZV9oaW50cyA9IElPVHlwZUhpbnRzLmVtcHR5KCkKICAgICAgcmV0dXJuIHNlbGYuX3R5cGVfaGludHMKCiAgZGVmIGdldF90eXBlX2hpbnRzKHNlbGYpOgogICAgIiIiR2V0cyBhbmQvb3IgaW5pdGlhbGl6ZXMgdHlwZSBoaW50cyBmb3IgdGhpcyBvYmplY3QuCgogICAgSWYgdHlwZSBoaW50cyBoYXZlIG5vdCBiZWVuIHNldCwgYXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSB0eXBlIGhpbnRzIGluIHRoaXMKICAgIG9yZGVyOgogICAgLSBVc2luZyBzZWxmLmRlZmF1bHRfdHlwZV9oaW50cygpLgogICAgLSBVc2luZyBzZWxmLl9fY2xhc3NfXyB0eXBlIGhpbnRzLgogICAgIiIiCiAgICByZXR1cm4gKAogICAgICAgIHNlbGYuX2dldF9vcl9jcmVhdGVfdHlwZV9oaW50cygpLndpdGhfZGVmYXVsdHMoCiAgICAgICAgICAgIHNlbGYuZGVmYXVsdF90eXBlX2hpbnRzKCkpLndpdGhfZGVmYXVsdHMoCiAgICAgICAgICAgICAgICBnZXRfdHlwZV9oaW50cyhzZWxmLl9fY2xhc3NfXykpKQoKICBkZWYgZGVmYXVsdF90eXBlX2hpbnRzKHNlbGYpOgogICAgcmV0dXJuIE5vbmUKCiAgZGVmIHdpdGhfaW5wdXRfdHlwZXMoc2VsZiwgKmFyZ19oaW50cywgKiprd2FyZ19oaW50cyk6CiAgICAjIHR5cGU6IChXaXRoVHlwZUhpbnRzVCwgKkFueSwgKipBbnkpIC0+IFdpdGhUeXBlSGludHNUCiAgICBhcmdfaGludHMgPSBuYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmNvbnZlcnRfdG9fYmVhbV90eXBlcyhhcmdfaGludHMpCiAgICBrd2FyZ19oaW50cyA9IG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGVzKGt3YXJnX2hpbnRzKQogICAgc2VsZi5fdHlwZV9oaW50cyA9IHNlbGYuX2dldF9vcl9jcmVhdGVfdHlwZV9oaW50cygpLndpdGhfaW5wdXRfdHlwZXMoCiAgICAgICAgKmFyZ19oaW50cywgKiprd2FyZ19oaW50cykKICAgIHJldHVybiBzZWxmCgogIGRlZiB3aXRoX291dHB1dF90eXBlcyhzZWxmLCAqYXJnX2hpbnRzLCAqKmt3YXJnX2hpbnRzKToKICAgICMgdHlwZTogKFdpdGhUeXBlSGludHNULCAqQW55LCAqKkFueSkgLT4gV2l0aFR5cGVIaW50c1QKICAgIGFyZ19oaW50cyA9IG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGVzKGFyZ19oaW50cykKICAgIGt3YXJnX2hpbnRzID0gbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZXMoa3dhcmdfaGludHMpCiAgICBzZWxmLl90eXBlX2hpbnRzID0gc2VsZi5fZ2V0X29yX2NyZWF0ZV90eXBlX2hpbnRzKCkud2l0aF9vdXRwdXRfdHlwZXMoCiAgICAgICAgKmFyZ19oaW50cywgKiprd2FyZ19oaW50cykKICAgIHJldHVybiBzZWxmCgoKY2xhc3MgVHlwZUNoZWNrRXJyb3IoRXhjZXB0aW9uKToKICBwYXNzCgoKZGVmIF9wb3NpdGlvbmFsX2FyZ19oaW50cyhhcmcsIGhpbnRzKToKICAiIiJSZXR1cm5zIHRoZSB0eXBlIG9mIGEgKHBvc3NpYmx5IHR1cGxlLXBhY2tlZCkgcG9zaXRpb25hbCBhcmd1bWVudC4KCiAgRS5nLiBmb3IgbGFtYmRhICgoYSwgYiksIGMpOiBOb25lIHRoZSBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyAoYXMKICByZXR1cm5lZCBieSBpbnNwZWN0KSBbW2EsIGJdLCBjXSB3aGljaCBzaG91bGQgaGF2ZSB0eXBlCiAgVHVwbGVbVHVwbGVbSW50LCBBbnldLCBmbG9hdF0gd2hlbiBhcHBsaWVkIHRvIHRoZSB0eXBlIGhpbnRzCiAge2E6IGludCwgYjogQW55LCBjOiBmbG9hdH0uCiAgIiIiCiAgaWYgaXNpbnN0YW5jZShhcmcsIGxpc3QpOgogICAgcmV0dXJuIHR5cGVoaW50cy5UdXBsZVtbX3Bvc2l0aW9uYWxfYXJnX2hpbnRzKGEsIGhpbnRzKSBmb3IgYSBpbiBhcmddXQogIHJldHVybiBoaW50cy5nZXQoYXJnLCB0eXBlaGludHMuQW55KQoKCmRlZiBfdW5wYWNrX3Bvc2l0aW9uYWxfYXJnX2hpbnRzKGFyZywgaGludCk6CiAgIiIiVW5wYWNrcyB0aGUgZ2l2ZW4gaGludCBhY2NvcmRpbmcgdG8gdGhlIG5lc3RlZCBzdHJ1Y3R1cmUgb2YgYXJnLgoKICBGb3IgZXhhbXBsZSwgaWYgYXJnIGlzIFtbYSwgYl0sIGNdIGFuZCBoaW50IGlzIFR1cGxlW0FueSwgaW50XSwgdGhlbgogIHRoaXMgZnVuY3Rpb24gd291bGQgcmV0dXJuICgoQW55LCBBbnkpLCBpbnQpIHNvIGl0IGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uCiAgd2l0aCBpbnNwZWN0LmdldGNhbGxhcmdzLgogICIiIgogIGlmIGlzaW5zdGFuY2UoYXJnLCBsaXN0KToKICAgIHR1cGxlX2NvbnN0cmFpbnQgPSB0eXBlaGludHMuVHVwbGVbW3R5cGVoaW50cy5BbnldICogbGVuKGFyZyldCiAgICBpZiBub3QgdHlwZWhpbnRzLmlzX2NvbnNpc3RlbnRfd2l0aChoaW50LCB0dXBsZV9jb25zdHJhaW50KToKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoCiAgICAgICAgICAnQmFkIHR1cGxlIGFyZ3VtZW50cyBmb3IgJXM6IGV4cGVjdGVkICVzLCBnb3QgJXMnICUKICAgICAgICAgIChhcmcsIHR1cGxlX2NvbnN0cmFpbnQsIGhpbnQpKQogICAgaWYgaXNpbnN0YW5jZShoaW50LCB0eXBlaGludHMuVHVwbGVDb25zdHJhaW50KToKICAgICAgcmV0dXJuIHR1cGxlKAogICAgICAgICAgX3VucGFja19wb3NpdGlvbmFsX2FyZ19oaW50cyhhLCB0KSBmb3IgYSwKICAgICAgICAgIHQgaW4gemlwKGFyZywgaGludC50dXBsZV90eXBlcykpCiAgICByZXR1cm4gKHR5cGVoaW50cy5BbnksICkgKiBsZW4oYXJnKQogIHJldHVybiBoaW50CgoKZGVmIGdldGNhbGxhcmdzX2ZvcmhpbnRzKGZ1bmMsICp0eXBlYXJncywgKip0eXBla3dhcmdzKToKICAiIiJMaWtlIGluc3BlY3QuZ2V0Y2FsbGFyZ3MsIHdpdGggc3VwcG9ydCBmb3IgZGVjbGFyaW5nIGRlZmF1bHQgYXJncyBhcyBBbnkuCgogIEluIFB5dGhvbiAyLCB1bmRlcnN0YW5kcyB0aGF0IFR1cGxlW10gYW5kIGFuIEFueSB1bnBhY2suCgogIFJldHVybnM6CiAgICAoRGljdFtzdHIsIEFueV0pIEEgZGljdGlvbmFyeSBmcm9tIGFyZ3VtZW50cyBuYW1lcyB0byB2YWx1ZXMuCiAgIiIiCiAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCApOgogICAgcmV0dXJuIGdldGNhbGxhcmdzX2ZvcmhpbnRzX2ltcGxfcHkyKGZ1bmMsIHR5cGVhcmdzLCB0eXBla3dhcmdzKQogIGVsc2U6CiAgICByZXR1cm4gZ2V0Y2FsbGFyZ3NfZm9yaGludHNfaW1wbF9weTMoZnVuYywgdHlwZWFyZ3MsIHR5cGVrd2FyZ3MpCgoKZGVmIGdldGNhbGxhcmdzX2ZvcmhpbnRzX2ltcGxfcHkyKGZ1bmMsIHR5cGVhcmdzLCB0eXBla3dhcmdzKToKICBhcmdzcGVjID0gZ2V0ZnVsbGFyZ3NwZWMoZnVuYykKICAjIFR1cm4gVHVwbGVbeCwgeV0gaW50byAoeCwgeSkgc28gZ2V0Y2FsbGFyZ3MgY2FuIGRvIHRoZSBwcm9wZXIgdW5wYWNraW5nLgogIHBhY2tlZF90eXBlYXJncyA9IFsKICAgICAgX3VucGFja19wb3NpdGlvbmFsX2FyZ19oaW50cyhhcmcsIGhpbnQpCiAgICAgIGZvciAoYXJnLCBoaW50KSBpbiB6aXAoYXJnc3BlYy5hcmdzLCB0eXBlYXJncykKICBdCiAgcGFja2VkX3R5cGVhcmdzICs9IGxpc3QodHlwZWFyZ3NbbGVuKHBhY2tlZF90eXBlYXJncyk6XSkKCiAgIyBNb25rZXlwYXRjaCBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjIHRvIGFsbG93IHBhc3Npbmcgbm9uLWZ1bmN0aW9uIG9iamVjdHMuCiAgIyBnZXRmdWxsYXJnc3BlYyAoZ2V0YXJnc3BlYyBvbiBQeXRob24gMikgYXJlIHVzZWQgYnkgaW5zcGVjdC5nZXRjYWxsYXJncy4KICAjIFRPRE8oQkVBTS01NDkwKTogUmVpbXBsZW1lbnQgZ2V0Y2FsbGFyZ3MgYW5kIHN0b3AgcmVseWluZyBvbiBtb25rZXlwYXRjaC4KICBpbnNwZWN0LmdldGFyZ3NwZWMgPSBnZXRmdWxsYXJnc3BlYwogIHRyeToKICAgIGNhbGxhcmdzID0gaW5zcGVjdC5nZXRjYWxsYXJncyhmdW5jLCAqcGFja2VkX3R5cGVhcmdzLCAqKnR5cGVrd2FyZ3MpICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLW1ldGhvZAogIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKGUpCiAgZmluYWxseToKICAgICMgUmV2ZXJ0IG1vbmtleS1wYXRjaC4KICAgIGluc3BlY3QuZ2V0YXJnc3BlYyA9IF9vcmlnaW5hbF9nZXRmdWxsYXJnc3BlYwoKICBpZiBhcmdzcGVjLmRlZmF1bHRzOgogICAgIyBEZWNsYXJlIGFueSBkZWZhdWx0IGFyZ3VtZW50cyB0byBiZSBBbnkuCiAgICBmb3IgaywgdmFyIGluIGVudW1lcmF0ZShyZXZlcnNlZChhcmdzcGVjLmFyZ3MpKToKICAgICAgaWYgayA+PSBsZW4oYXJnc3BlYy5kZWZhdWx0cyk6CiAgICAgICAgYnJlYWsKICAgICAgaWYgY2FsbGFyZ3MuZ2V0KHZhciwgTm9uZSkgaXMgYXJnc3BlYy5kZWZhdWx0c1stayAtIDFdOgogICAgICAgIGNhbGxhcmdzW3Zhcl0gPSB0eXBlaGludHMuQW55CiAgIyBQYXRjaCB1cCB2YXJhcmdzIGFuZCBrZXl3b3JkcwogIGlmIGFyZ3NwZWMudmFyYXJnczoKICAgICMgVE9ETyhCRUFNLTgxMjIpOiBUaGlzIHdpbGwgYWx3YXlzIGFzc2lnbiBfQU5ZX1ZBUl9QT1NJVElPTkFMLiBTaG91bGQgYmUKICAgICMgICAiY2FsbGFyZ3MuZ2V0KC4uLikgb3IgX0FOWV9WQVJfUE9TSVRJT05BTCIuCiAgICBjYWxsYXJnc1thcmdzcGVjLnZhcmFyZ3NdID0gdHlwZWt3YXJncy5nZXQoCiAgICAgICAgYXJnc3BlYy52YXJhcmdzLCBfQU5ZX1ZBUl9QT1NJVElPTkFMKQoKICB2YXJrdyA9IGFyZ3NwZWMua2V5d29yZHMKICBpZiB2YXJrdzoKICAgICMgVE9ETyhyb2JlcnR3Yik6IENvbnNpZGVyIHRha2luZyB0aGUgdW5pb24gb2Yga2V5IGFuZCB2YWx1ZSB0eXBlcy4KICAgIGNhbGxhcmdzW3Zhcmt3XSA9IHR5cGVrd2FyZ3MuZ2V0KHZhcmt3LCBfQU5ZX1ZBUl9LRVlXT1JEKQoKICAjIFRPRE8oQkVBTS01ODc4KSBTdXBwb3J0IGt3b25seWFyZ3MuCgogIHJldHVybiBjYWxsYXJncwoKCmRlZiBfbm9ybWFsaXplX3Zhcl9wb3NpdGlvbmFsX2hpbnQoaGludCk6CiAgIiIiQ29udmVydHMgYSB2YXJfcG9zaXRpb25hbCBoaW50IGludG8gVHVwbGVbVW5pb25bPHR5cGVzPl0sIC4uLl0gZm9ybS4KCiAgQXJnczoKICAgIGhpbnQ6ICh0dXBsZSkgU2hvdWxkIGJlIGVpdGhlciBhIHR1cGxlIG9mIG9uZSBvciBtb3JlIHR5cGVzLCBvciBhIHNpbmdsZQogICAgICBUdXBsZVs8dHlwZT4sIC4uLl0uCgogIFJhaXNlczoKICAgIFR5cGVDaGVja0Vycm9yIGlmIGhpbnQgZG9lcyBub3QgaGF2ZSB0aGUgcmlnaHQgZm9ybS4KICAiIiIKICBpZiBub3QgaGludCBvciB0eXBlKGhpbnQpICE9IHR1cGxlOgogICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoJ1VuZXhwZWN0ZWQgVkFSX1BPU0lUSU9OQUwgdmFsdWU6ICVzJyAlIGhpbnQpCgogIGlmIGxlbihoaW50KSA9PSAxIGFuZCBpc2luc3RhbmNlKGhpbnRbMF0sIHR5cGVoaW50cy5UdXBsZVNlcXVlbmNlQ29uc3RyYWludCk6CiAgICAjIEV4YW1wbGU6IHR1cGxlKFR1cGxlW0FueSwgLi4uXSkgLT4gVHVwbGVbQW55LCAuLi5dCiAgICByZXR1cm4gaGludFswXQogIGVsc2U6CiAgICAjIEV4YW1wbGU6IHR1cGxlKGludCwgc3RyKSAtPiBUdXBsZVtVbmlvbltpbnQsIHN0cl0sIC4uLl0KICAgIHJldHVybiB0eXBlaGludHMuVHVwbGVbdHlwZWhpbnRzLlVuaW9uW2hpbnRdLCAuLi5dCgoKZGVmIF9ub3JtYWxpemVfdmFyX2tleXdvcmRfaGludChoaW50LCBhcmdfbmFtZSk6CiAgIiIiQ29udmVydHMgYSB2YXJfa2V5d29yZCBoaW50IGludG8gRGljdFs8a2V5IHR5cGU+LCA8dmFsdWUgdHlwZT5dIGZvcm0uCgogIEFyZ3M6CiAgICBoaW50OiAoZGljdCkgU2hvdWxkIGVpdGhlciBjb250YWluIGEgcGFpciAoYXJnX25hbWUsCiAgICAgIERpY3RbPGtleSB0eXBlPiwgPHZhbHVlIHR5cGU+XSksIG9yIG9uZSBvciBtb3JlIHBvc3NpYmxlIHR5cGVzIGZvciB0aGUKICAgICAgdmFsdWUuCiAgICBhcmdfbmFtZTogKHN0cikgVGhlIGtleXdvcmQgcmVjZWl2aW5nIHRoaXMgaGludC4KCiAgUmFpc2VzOgogICAgVHlwZUNoZWNrRXJyb3IgaWYgaGludCBkb2VzIG5vdCBoYXZlIHRoZSByaWdodCBmb3JtLgogICIiIgogIGlmIG5vdCBoaW50IG9yIHR5cGUoaGludCkgIT0gZGljdDoKICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKCdVbmV4cGVjdGVkIFZBUl9LRVlXT1JEIHZhbHVlOiAlcycgJSBoaW50KQogIGtleXMgPSBsaXN0KGhpbnQua2V5cygpKQogIHZhbHVlcyA9IGxpc3QoaGludC52YWx1ZXMoKSkKICBpZiAobGVuKHZhbHVlcykgPT0gMSBhbmQga2V5c1swXSA9PSBhcmdfbmFtZSBhbmQKICAgICAgaXNpbnN0YW5jZSh2YWx1ZXNbMF0sIHR5cGVoaW50cy5EaWN0Q29uc3RyYWludCkpOgogICAgIyBFeGFtcGxlOiBkaWN0KGt3YXJncz1EaWN0W3N0ciwgQW55XSkgLT4gRGljdFtzdHIsIEFueV0KICAgIHJldHVybiB2YWx1ZXNbMF0KICBlbHNlOgogICAgIyBFeGFtcGxlOiBkaWN0KGsxPXN0ciwgazI9aW50KSAtPiBEaWN0W3N0ciwgVW5pb25bc3RyLGludF1dCiAgICByZXR1cm4gdHlwZWhpbnRzLkRpY3Rbc3RyLCB0eXBlaGludHMuVW5pb25bdmFsdWVzXV0KCgpkZWYgZ2V0Y2FsbGFyZ3NfZm9yaGludHNfaW1wbF9weTMoZnVuYywgdHlwZV9hcmdzLCB0eXBlX2t3YXJncyk6CiAgIiIiQmluZCB0eXBlX2FyZ3MgYW5kIHR5cGVfa3dhcmdzIHRvIGZ1bmMuCgogIFdvcmtzIGxpa2UgaW5zcGVjdC5nZXRjYWxsYXJncywgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgdG8gc3VwcG9ydCB0eXBlIGhpbnQKICBjaGVja3MuCiAgRm9yIHVuYm91bmQgYXJncywgd2lsbCB1c2UgYW5ub3RhdGlvbnMgYW5kIGZhbGwgYmFjayB0byBBbnkgKG9yIHZhcmlhbnRzIG9mCiAgQW55KS4KCiAgUmV0dXJuczoKICAgIEEgbWFwcGluZyBmcm9tIHBhcmFtZXRlciBuYW1lIHRvIGFyZ3VtZW50LgogICIiIgogIHRyeToKICAgIHNpZ25hdHVyZSA9IGdldF9zaWduYXR1cmUoZnVuYykKICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgbG9nZ2luZy53YXJuaW5nKCdDb3VsZCBub3QgZ2V0IHNpZ25hdHVyZSBmb3IgZnVuY3Rpb246ICVzOiAlcycsIGZ1bmMsIGUpCiAgICByZXR1cm4ge30KICB0cnk6CiAgICBiaW5kaW5ncyA9IHNpZ25hdHVyZS5iaW5kKCp0eXBlX2FyZ3MsICoqdHlwZV9rd2FyZ3MpCiAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgogICAgIyBNaWdodCBiZSByYWlzZWQgZHVlIHRvIHRvbyBmZXcgb3IgdG9vIG1hbnkgYXJndW1lbnRzLgogICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoZSkKICBib3VuZF9hcmdzID0gYmluZGluZ3MuYXJndW1lbnRzCiAgZm9yIHBhcmFtIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLnZhbHVlcygpOgogICAgaWYgcGFyYW0ubmFtZSBpbiBib3VuZF9hcmdzOgogICAgICAjIEJvdW5kOiB1bnBhY2svY29udmVydCB2YXJpYWRpYyBhcmd1bWVudHMuCiAgICAgIGlmIHBhcmFtLmtpbmQgPT0gcGFyYW0uVkFSX1BPU0lUSU9OQUw6CiAgICAgICAgYm91bmRfYXJnc1twYXJhbS5uYW1lXSA9IF9ub3JtYWxpemVfdmFyX3Bvc2l0aW9uYWxfaGludCgKICAgICAgICAgICAgYm91bmRfYXJnc1twYXJhbS5uYW1lXSkKICAgICAgZWxpZiBwYXJhbS5raW5kID09IHBhcmFtLlZBUl9LRVlXT1JEOgogICAgICAgIGJvdW5kX2FyZ3NbcGFyYW0ubmFtZV0gPSBfbm9ybWFsaXplX3Zhcl9rZXl3b3JkX2hpbnQoCiAgICAgICAgICAgIGJvdW5kX2FyZ3NbcGFyYW0ubmFtZV0sIHBhcmFtLm5hbWUpCiAgICBlbHNlOgogICAgICAjIFVuYm91bmQ6IG11c3QgaGF2ZSBhIGRlZmF1bHQgb3IgYmUgdmFyaWFkaWMuCiAgICAgIGlmIHBhcmFtLmFubm90YXRpb24gIT0gcGFyYW0uZW1wdHk6CiAgICAgICAgYm91bmRfYXJnc1twYXJhbS5uYW1lXSA9IHBhcmFtLmFubm90YXRpb24KICAgICAgZWxpZiBwYXJhbS5raW5kID09IHBhcmFtLlZBUl9QT1NJVElPTkFMOgogICAgICAgIGJvdW5kX2FyZ3NbcGFyYW0ubmFtZV0gPSBfQU5ZX1ZBUl9QT1NJVElPTkFMCiAgICAgIGVsaWYgcGFyYW0ua2luZCA9PSBwYXJhbS5WQVJfS0VZV09SRDoKICAgICAgICBib3VuZF9hcmdzW3BhcmFtLm5hbWVdID0gX0FOWV9WQVJfS0VZV09SRAogICAgICBlbGlmIHBhcmFtLmRlZmF1bHQgaXMgbm90IHBhcmFtLmVtcHR5OgogICAgICAgICMgRGVjbGFyZSB1bmJvdW5kIHBhcmFtZXRlcnMgd2l0aCBkZWZhdWx0cyB0byBiZSBBbnkuCiAgICAgICAgYm91bmRfYXJnc1twYXJhbS5uYW1lXSA9IHR5cGVoaW50cy5BbnkKICAgICAgZWxzZToKICAgICAgICAjIFRoaXMgY2FzZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IHNpZ25hdHVyZS5iaW5kKCkgYWJvdmUuCiAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5leHBlY3RlZCB1bmJvdW5kIHBhcmFtZXRlcjogJXMnICUgcGFyYW0ubmFtZSkKCiAgcmV0dXJuIGRpY3QoYm91bmRfYXJncykKCgpkZWYgZ2V0X3R5cGVfaGludHMoZm4pOgogICMgdHlwZTogKEFueSkgLT4gSU9UeXBlSGludHMKCiAgIiIiR2V0cyB0aGUgdHlwZSBoaW50IGFzc29jaWF0ZWQgd2l0aCBhbiBhcmJpdHJhcnkgb2JqZWN0IGZuLgoKICBBbHdheXMgcmV0dXJucyBhIHZhbGlkIElPVHlwZUhpbnRzIG9iamVjdCwgY3JlYXRpbmcgb25lIGlmIG5lY2Vzc2FyeS4KICAiIiIKICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgaWYgbm90IGhhc2F0dHIoZm4sICdfdHlwZV9oaW50cycpOgogICAgdHJ5OgogICAgICBmbi5fdHlwZV9oaW50cyA9IElPVHlwZUhpbnRzLmVtcHR5KCkKICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICMgQ2FuJ3QgYWRkIGFyYml0cmFyeSBhdHRyaWJ1dGVzIHRvIHRoaXMgb2JqZWN0LAogICAgICAjIGJ1dCBtaWdodCBoYXZlIHNvbWUgcmVzdHJpY3Rpb25zIGFueXdheXMuLi4KICAgICAgaGludHMgPSBJT1R5cGVIaW50cy5lbXB0eSgpCiAgICAgICMgUHl0aG9uIDMuNyBpbnRyb2R1Y2VzIGFubm90YXRpb25zIGZvciBfTWV0aG9kRGVzY3JpcHRvclR5cGVzLgogICAgICBpZiBpc2luc3RhbmNlKGZuLCBfTWV0aG9kRGVzY3JpcHRvclR5cGUpIGFuZCBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDcpOgogICAgICAgIGhpbnRzID0gaGludHMud2l0aF9pbnB1dF90eXBlcyhmbi5fX29iamNsYXNzX18pICAjIHR5cGU6IGlnbm9yZQogICAgICByZXR1cm4gaGludHMKICByZXR1cm4gZm4uX3R5cGVfaGludHMKICAjIHB5bGludDogZW5hYmxlPXByb3RlY3RlZC1hY2Nlc3MKCgpkZWYgd2l0aF9pbnB1dF90eXBlcygqcG9zaXRpb25hbF9oaW50cywgKiprZXl3b3JkX2hpbnRzKToKICAjIHR5cGU6ICgqQW55LCAqKkFueSkgLT4gQ2FsbGFibGVbW1RdLCBUXQoKICAiIiJBIGRlY29yYXRvciB0aGF0IHR5cGUtY2hlY2tzIGRlZmluZWQgdHlwZS1oaW50cyB3aXRoIHBhc3NlZCBmdW5jIGFyZ3VtZW50cy4KCiAgQWxsIHR5cGUtaGludGVkIGFyZ3VtZW50cyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzLAogIGtleXdvcmQgYXJndW1lbnRzLCBvciBhIG1peCBvZiBib3RoLiBBZGRpdGlvbmFseSwgYWxsIGZ1bmN0aW9uIGFyZ3VtZW50cyBtdXN0CiAgYmUgdHlwZS1oaW50ZWQgaW4gdG90YWxpdHkgaWYgZXZlbiBvbmUgcGFyYW1ldGVyIGlzIHR5cGUtaGludGVkLgoKICBPbmNlIGZ1bGx5IGRlY29yYXRlZCwgaWYgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHJlc3VsdGluZyBmdW5jdGlvbgogIHZpb2xhdGUgdGhlIHR5cGUtaGludCBjb25zdHJhaW50cyBkZWZpbmVkLCBhIDpjbGFzczpgVHlwZUNoZWNrRXJyb3JgCiAgZGV0YWlsaW5nIHRoZSBlcnJvciB3aWxsIGJlIHJhaXNlZC4KCiAgVG8gYmUgdXNlZCBhczoKCiAgLi4gdGVzdGNvZGU6OgoKICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB3aXRoX2lucHV0X3R5cGVzCgogICAgQHdpdGhfaW5wdXRfdHlwZXMoc3RyKQogICAgZGVmIHVwcGVyKHMpOgogICAgICByZXR1cm4gcy51cHBlcigpCgogIE9yOgoKICAuLiB0ZXN0Y29kZTo6CgogICAgZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHdpdGhfaW5wdXRfdHlwZXMKICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBMaXN0CiAgICBmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgVHVwbGUKCiAgICBAd2l0aF9pbnB1dF90eXBlcyhscz1MaXN0W1R1cGxlW2ludCwgaW50XV0pCiAgICBkZWYgaW5jcmVtZW50KGxzKToKICAgICAgWyhpICsgMSwgaiArIDEpIGZvciAoaSxqKSBpbiBsc10KCiAgQXJnczoKICAgICpwb3NpdGlvbmFsX2hpbnRzOiBQb3NpdGlvbmFsIHR5cGUtaGludHMgaGF2aW5nIGlkZW50aWNhbCBvcmRlciBhcyB0aGUKICAgICAgZnVuY3Rpb24ncyBmb3JtYWwgYXJndW1lbnRzLiBWYWx1ZXMgZm9yIHRoaXMgYXJndW1lbnQgbXVzdCBlaXRoZXIgYmUgYQogICAgICBidWlsdC1pbiBQeXRob24gdHlwZSBvciBhbiBpbnN0YW5jZSBvZiBhCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuVHlwZUNvbnN0cmFpbnRgIGNyZWF0ZWQgYnkKICAgICAgJ2luZGV4aW5nJyBhCiAgICAgIDpjbGFzczpgfmFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMuQ29tcG9zaXRlVHlwZUhpbnRgIGluc3RhbmNlCiAgICAgIHdpdGggYSB0eXBlIHBhcmFtZXRlci4KICAgICoqa2V5d29yZF9oaW50czogS2V5d29yZCBhcmd1bWVudHMgbWlycm9yaW5nIHRoZSBuYW1lcyBvZiB0aGUgcGFyYW1ldGVycyB0bwogICAgICB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9ucy4gVGhlIHZhbHVlIG9mIGVhY2gga2V5d29yZCBhcmd1bWVudCBtdXN0IGVpdGhlcgogICAgICBiZSBvbmUgb2YgdGhlIGFsbG93ZWQgYnVpbHQtaW4gUHl0aG9uIHR5cGVzLCBhIGN1c3RvbSBjbGFzcywgb3IgYW4KICAgICAgaW5zdGFuY2Ugb2YgYSA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLlR5cGVDb25zdHJhaW50YAogICAgICBjcmVhdGVkIGJ5ICdpbmRleGluZycgYQogICAgICA6Y2xhc3M6YH5hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzLkNvbXBvc2l0ZVR5cGVIaW50YCBpbnN0YW5jZQogICAgICB3aXRoIGEgdHlwZSBwYXJhbWV0ZXIuCgogIFJhaXNlczoKICAgIDpjbGFzczpgVmFsdWVFcnJvcmA6IElmIG5vdCBhbGwgZnVuY3Rpb24gYXJndW1lbnRzIGhhdmUKICAgICAgY29ycmVzcG9uZGluZyB0eXBlLWhpbnRzIHNwZWNpZmllZC4gT3IgaWYgdGhlIGlubmVyIHdyYXBwZXIgZnVuY3Rpb24gaXNuJ3QKICAgICAgcGFzc2VkIGEgZnVuY3Rpb24gb2JqZWN0LgogICAgOmNsYXNzOmBUeXBlQ2hlY2tFcnJvcmA6IElmIHRoZSBhbnkgb2YgdGhlIHBhc3NlZCB0eXBlLWhpbnQKICAgICAgY29uc3RyYWludHMgYXJlIG5vdCBhIHR5cGUgb3IKICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlQ29uc3RyYWludGAgaW5zdGFuY2UuCgogIFJldHVybnM6CiAgICBUaGUgb3JpZ2luYWwgZnVuY3Rpb24gZGVjb3JhdGVkIHN1Y2ggdGhhdCBpdCBlbmZvcmNlcyB0eXBlLWhpbnQgY29uc3RyYWludHMKICAgIGZvciBhbGwgcmVjZWl2ZWQgZnVuY3Rpb24gYXJndW1lbnRzLgogICIiIgoKICBjb252ZXJ0ZWRfcG9zaXRpb25hbF9oaW50cyA9ICgKICAgICAgbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZXMocG9zaXRpb25hbF9oaW50cykpCiAgY29udmVydGVkX2tleXdvcmRfaGludHMgPSAoCiAgICAgIG5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkuY29udmVydF90b19iZWFtX3R5cGVzKGtleXdvcmRfaGludHMpKQogIGRlbCBwb3NpdGlvbmFsX2hpbnRzCiAgZGVsIGtleXdvcmRfaGludHMKCiAgZGVmIGFubm90YXRlX2lucHV0X3R5cGVzKGYpOgogICAgaWYgaXNpbnN0YW5jZShmLCB0eXBlcy5GdW5jdGlvblR5cGUpOgogICAgICBmb3IgdCBpbiAobGlzdChjb252ZXJ0ZWRfcG9zaXRpb25hbF9oaW50cykgKwogICAgICAgICAgICAgICAgbGlzdChjb252ZXJ0ZWRfa2V5d29yZF9oaW50cy52YWx1ZXMoKSkpOgogICAgICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgICAgICB0LCBlcnJvcl9tc2dfcHJlZml4PSdBbGwgdHlwZSBoaW50IGFyZ3VtZW50cycpCgogICAgdGggPSBnZXRhdHRyKGYsICdfdHlwZV9oaW50cycsIElPVHlwZUhpbnRzLmVtcHR5KCkpLndpdGhfaW5wdXRfdHlwZXMoCiAgICAgICAgKmNvbnZlcnRlZF9wb3NpdGlvbmFsX2hpbnRzLCAqKmNvbnZlcnRlZF9rZXl3b3JkX2hpbnRzKQogICAgZi5fdHlwZV9oaW50cyA9IHRoICAjIHB5bGludDogZGlzYWJsZT1wcm90ZWN0ZWQtYWNjZXNzCiAgICByZXR1cm4gZgoKICByZXR1cm4gYW5ub3RhdGVfaW5wdXRfdHlwZXMKCgpkZWYgd2l0aF9vdXRwdXRfdHlwZXMoKnJldHVybl90eXBlX2hpbnQsICoqa3dhcmdzKToKICAjIHR5cGU6ICgqQW55LCAqKkFueSkgLT4gQ2FsbGFibGVbW1RdLCBUXQoKICAiIiJBIGRlY29yYXRvciB0aGF0IHR5cGUtY2hlY2tzIGRlZmluZWQgdHlwZS1oaW50cyBmb3IgcmV0dXJuIHZhbHVlcyhzKS4KCiAgVGhpcyBkZWNvcmF0b3Igd2lsbCB0eXBlLWNoZWNrIHRoZSByZXR1cm4gdmFsdWUocykgb2YgdGhlIGRlY29yYXRlZCBmdW5jdGlvbi4KCiAgT25seSBhIHNpbmdsZSB0eXBlLWhpbnQgaXMgYWNjZXB0ZWQgdG8gc3BlY2lmeSB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIHJldHVybgogIHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gdG8gYmUgZGVjb3JhdGVkIGhhcyBtdWx0aXBsZSByZXR1cm4gdmFsdWVzLCB0aGVuIG9uZQogIHNob3VsZCB1c2U6IGBgVHVwbGVbdHlwZV8xLCB0eXBlXzJdYGAgdG8gYW5ub3RhdGUgdGhlIHR5cGVzIG9mIHRoZSByZXR1cm4KICB2YWx1ZXMuCgogIElmIHRoZSB1bHRpbWF0ZSByZXR1cm4gdmFsdWUgZm9yIHRoZSBmdW5jdGlvbiB2aW9sYXRlcyB0aGUgc3BlY2lmaWVkIHR5cGUtaGludAogIGEgOmNsYXNzOmBUeXBlQ2hlY2tFcnJvcmAgd2lsbCBiZSByYWlzZWQgZGV0YWlsaW5nIHRoZSB0eXBlLWNvbnN0cmFpbnQKICB2aW9sYXRpb24uCgogIFRoaXMgZGVjb3JhdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgbGlrZToKCiAgLi4gdGVzdGNvZGU6OgoKICAgIGZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB3aXRoX291dHB1dF90eXBlcwogICAgZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IFNldAoKICAgIGNsYXNzIENvb3JkaW5hdGUob2JqZWN0KToKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOgogICAgICAgIHNlbGYueCA9IHgKICAgICAgICBzZWxmLnkgPSB5CgogICAgQHdpdGhfb3V0cHV0X3R5cGVzKFNldFtDb29yZGluYXRlXSkKICAgIGRlZiBwYXJzZV9pbnRzKGludHMpOgogICAgICByZXR1cm4ge0Nvb3JkaW5hdGUoaSwgaSkgZm9yIGkgaW4gaW50c30KCiAgT3Igd2l0aCBhIHNpbXBsZSB0eXBlLWhpbnQ6CgogIC4uIHRlc3Rjb2RlOjoKCiAgICBmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgd2l0aF9vdXRwdXRfdHlwZXMKCiAgICBAd2l0aF9vdXRwdXRfdHlwZXMoYm9vbCkKICAgIGRlZiBuZWdhdGUocCk6CiAgICAgIHJldHVybiBub3QgcCBpZiBwIGVsc2UgcAoKICBBcmdzOgogICAgKnJldHVybl90eXBlX2hpbnQ6IEEgdHlwZS1oaW50IHNwZWNpZnlpbmcgdGhlIHByb3BlciByZXR1cm4gdHlwZSBvZiB0aGUKICAgICAgZnVuY3Rpb24uIFRoaXMgYXJndW1lbnQgc2hvdWxkIGVpdGhlciBiZSBhIGJ1aWx0LWluIFB5dGhvbiB0eXBlIG9yIGFuCiAgICAgIGluc3RhbmNlIG9mIGEgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5UeXBlQ29uc3RyYWludGAKICAgICAgY3JlYXRlZCBieSAnaW5kZXhpbmcnIGEKICAgICAgOmNsYXNzOmB+YXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cy5Db21wb3NpdGVUeXBlSGludGAuCiAgICAqKmt3YXJnczogTm90IHVzZWQuCgogIFJhaXNlczoKICAgIDpjbGFzczpgVmFsdWVFcnJvcmA6IElmIGFueSBrd2FyZyBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgaW4sCiAgICAgIG9yIHRoZSBsZW5ndGggb2YgKipyZXR1cm5fdHlwZV9oaW50KiogaXMgZ3JlYXRlciB0aGFuIGBgMWBgLiBPciBpZiB0aGUKICAgICAgaW5uZXIgd3JhcHBlciBmdW5jdGlvbiBpc24ndCBwYXNzZWQgYSBmdW5jdGlvbiBvYmplY3QuCiAgICA6Y2xhc3M6YFR5cGVDaGVja0Vycm9yYDogSWYgdGhlICoqcmV0dXJuX3R5cGVfaGludCoqIG9iamVjdCBpcwogICAgICBpbiBpbnZhbGlkIHR5cGUtaGludC4KCiAgUmV0dXJuczoKICAgIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkZWNvcmF0ZWQgc3VjaCB0aGF0IGl0IGVuZm9yY2VzIHR5cGUtaGludCBjb25zdHJhaW50cwogICAgZm9yIGFsbCByZXR1cm4gdmFsdWVzLgogICIiIgogIGlmIGt3YXJnczoKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgIkFsbCBhcmd1bWVudHMgZm9yIHRoZSAncmV0dXJucycgZGVjb3JhdG9yIG11c3QgYmUgIgogICAgICAgICJwb3NpdGlvbmFsIGFyZ3VtZW50cy4iKQoKICBpZiBsZW4ocmV0dXJuX3R5cGVfaGludCkgIT0gMToKICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgIidyZXR1cm5zJyBhY2NlcHRzIG9ubHkgYSBzaW5nbGUgcG9zaXRpb25hbCBhcmd1bWVudC4gSW4gIgogICAgICAgICJvcmRlciB0byBzcGVjaWZ5IG11bHRpcGxlIHJldHVybiB0eXBlcywgdXNlIHRoZSAnVHVwbGUnICIKICAgICAgICAidHlwZS1oaW50LiIpCgogIHJldHVybl90eXBlX2hpbnQgPSBuYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5LmNvbnZlcnRfdG9fYmVhbV90eXBlKAogICAgICByZXR1cm5fdHlwZV9oaW50WzBdKQoKICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgcmV0dXJuX3R5cGVfaGludCwgZXJyb3JfbXNnX3ByZWZpeD0nQWxsIHR5cGUgaGludCBhcmd1bWVudHMnKQoKICBkZWYgYW5ub3RhdGVfb3V0cHV0X3R5cGVzKGYpOgogICAgdGggPSBnZXRhdHRyKGYsICdfdHlwZV9oaW50cycsIElPVHlwZUhpbnRzLmVtcHR5KCkpCiAgICBmLl90eXBlX2hpbnRzID0gdGgud2l0aF9vdXRwdXRfdHlwZXMocmV0dXJuX3R5cGVfaGludCkgICMgcHlsaW50OiBkaXNhYmxlPXByb3RlY3RlZC1hY2Nlc3MKICAgIHJldHVybiBmCgogIHJldHVybiBhbm5vdGF0ZV9vdXRwdXRfdHlwZXMKCgpkZWYgX2NoZWNrX2luc3RhbmNlX3R5cGUoCiAgICB0eXBlX2NvbnN0cmFpbnQsIGluc3RhbmNlLCB2YXJfbmFtZT1Ob25lLCB2ZXJib3NlPUZhbHNlKToKICAiIiJBIGhlbHBlciBmdW5jdGlvbiB0byByZXBvcnQgdHlwZS1oaW50IGNvbnN0cmFpbnQgdmlvbGF0aW9ucy4KCiAgQXJnczoKICAgIHR5cGVfY29uc3RyYWludDogQW4gaW5zdGFuY2Ugb2YgYSAnVHlwZUNvbnN0cmFpbnQnIG9yIGEgYnVpbHQtaW4gUHl0aG9uCiAgICAgIHR5cGUuCiAgICBpbnN0YW5jZTogVGhlIGNhbmRpZGF0ZSBvYmplY3Qgd2hpY2ggd2lsbCBiZSBjaGVja2VkIGJ5IHRvIHNhdGlzZnkKICAgICAgJ3R5cGVfY29uc3RyYWludCcuCiAgICB2YXJfbmFtZTogSWYgJ2luc3RhbmNlJyBpcyBhbiBhcmd1bWVudCwgdGhlbiB0aGUgYWN0dWFsIG5hbWUgZm9yIHRoZQogICAgICBwYXJhbWV0ZXIgaW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlZmluaXRpb24uCgogIFJhaXNlczoKICAgIFR5cGVDaGVja0Vycm9yOiBJZiAnaW5zdGFuY2UnIGZhaWxzIHRvIG1lZXQgdGhlIHR5cGUtY29uc3RyYWludCBvZgogICAgICAndHlwZV9jb25zdHJhaW50Jy4KICAiIiIKICBoaW50X3R5cGUgPSAoCiAgICAgICJhcmd1bWVudDogJyVzJyIgJSB2YXJfbmFtZSBpZiB2YXJfbmFtZSBpcyBub3QgTm9uZSBlbHNlICdyZXR1cm4gdHlwZScpCgogIHRyeToKICAgIGNoZWNrX2NvbnN0cmFpbnQodHlwZV9jb25zdHJhaW50LCBpbnN0YW5jZSkKICBleGNlcHQgU2ltcGxlVHlwZUhpbnRFcnJvcjoKICAgIGlmIHZlcmJvc2U6CiAgICAgIHZlcmJvc2VfaW5zdGFuY2UgPSAnJXMsICcgJSBpbnN0YW5jZQogICAgZWxzZToKICAgICAgdmVyYm9zZV9pbnN0YW5jZSA9ICcnCiAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcigKICAgICAgICAnVHlwZS1oaW50IGZvciAlcyB2aW9sYXRlZC4gRXhwZWN0ZWQgYW4gJwogICAgICAgICdpbnN0YW5jZSBvZiAlcywgaW5zdGVhZCBmb3VuZCAlc2FuIGluc3RhbmNlIG9mICVzLicgJQogICAgICAgIChoaW50X3R5cGUsIHR5cGVfY29uc3RyYWludCwgdmVyYm9zZV9pbnN0YW5jZSwgdHlwZShpbnN0YW5jZSkpKQogIGV4Y2VwdCBDb21wb3NpdGVUeXBlSGludEVycm9yIGFzIGU6CiAgICByYWlzZSBUeXBlQ2hlY2tFcnJvcignVHlwZS1oaW50IGZvciAlcyB2aW9sYXRlZDogJXMnICUgKGhpbnRfdHlwZSwgZSkpCgoKZGVmIF9pbnRlcmxlYXZlX3R5cGVfY2hlY2sodHlwZV9jb25zdHJhaW50LCB2YXJfbmFtZT1Ob25lKToKICAiIiJMYXppbHkgdHlwZS1jaGVjayB0aGUgdHlwZS1oaW50IGZvciBhIGxhemlseSBnZW5lcmF0ZWQgc2VxdWVuY2UgdHlwZS4KCiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgYXBwbGllZCBhcyBhIGRlY29yYXRvciBvciBjYWxsZWQgbWFudWFsbHkgaW4gYSBjdXJyaWVkCiAgbWFubmVyOgogICAgKiBAX2ludGVybGVhdmVfdHlwZV9jaGVjayhMaXN0W2ludF0pCiAgICAgIGRlZiBnZW4oKToKICAgICAgICB5aWVsZCA1CgogICAgb3IKCiAgICAgKiBnZW4gPSBfaW50ZXJsZWF2ZV90eXBlX2NoZWNrKFR1cGxlW2ludCwgaW50XSwgJ2Nvb3JkX2dlbicpKGdlbikKCiAgQXMgYSByZXN1bHQsIGFsbCB0eXBlLWNoZWNraW5nIGZvciB0aGUgcGFzc2VkIGdlbmVyYXRvciB3aWxsIG9jY3VyIGF0ICd5aWVsZCcKICB0aW1lLiBUaGlzIHdheSwgd2UgYXZvaWQgaGF2aW5nIHRvIGRlcGxlYXQgdGhlIGdlbmVyYXRvciBpbiBvcmRlciB0bwogIHR5cGUtY2hlY2sgaXQuCgogIEFyZ3M6CiAgICB0eXBlX2NvbnN0cmFpbnQ6IEFuIGluc3RhbmNlIG9mIGEgVHlwZUNvbnN0cmFpbnQuIFRoZSBvdXRwdXQgeWllbGRlZCBvZgogICAgICAnZ2VuJyB3aWxsIGJlIHR5cGUtY2hlY2tlZCBhY2NvcmRpbmcgdG8gdGhpcyB0eXBlIGNvbnN0cmFpbnQuCiAgICB2YXJfbmFtZTogVGhlIHZhcmlhYmxlIG5hbWUgYmluZGVkIHRvICdnZW4nIGlmIHR5cGUtY2hlY2tpbmcgYSBmdW5jdGlvbgogICAgICBhcmd1bWVudC4gVXNlZCBzb2xlbHkgZm9yIHRlbXBsYXRpbmcgaW4gZXJyb3IgbWVzc2FnZSBnZW5lcmF0aW9uLgoKICBSZXR1cm5zOgogICAgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhIGdlbmVyYXRvciBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHdyYXBwZWQKICAgIHZlcnNpb24gb2YgdGhlIGdlbmVyYXRvciB0aGF0IGludGVybGVhdmVzIHR5cGUtY2hlY2tpbmcgYXQgJ3lpZWxkJwogICAgaXRlcmF0aW9uLiBJZiB0aGUgZ2VuZXJhdG9yIHJlY2VpdmVkIGlzIGFscmVhZHkgd3JhcHBlZCwgdGhlbiBpdCBpcyBzaW1wbHkKICAgIHJldHVybmVkIHRvIGF2b2lkIG5lc3RlZCB3cmFwcGluZy4KICAiIiIKICBkZWYgd3JhcHBlcihnZW4pOgogICAgaWYgaXNpbnN0YW5jZShnZW4sIEdlbmVyYXRvcldyYXBwZXIpOgogICAgICByZXR1cm4gZ2VuCiAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcigKICAgICAgICBnZW4sIGxhbWJkYSB4OiBfY2hlY2tfaW5zdGFuY2VfdHlwZSh0eXBlX2NvbnN0cmFpbnQsIHgsIHZhcl9uYW1lKSkKCiAgcmV0dXJuIHdyYXBwZXIKCgpjbGFzcyBHZW5lcmF0b3JXcmFwcGVyKG9iamVjdCk6CiAgIiIiQSB3cmFwcGVyIGFyb3VuZCBhIGdlbmVyYXRvciwgYWxsb3dzIGV4ZWN1dGlvbiBvZiBhIGNhbGxiYWNrIHBlciB5aWVsZC4KCiAgQWRkaXRpb25hbGx5LCB3cmFwcGluZyBhIGdlbmVyYXRvciB3aXRoIHRoaXMgY2xhc3MgYWxsb3dzIG9uZSB0byBhc3NpZ24KICBhcmJpdGFyeSBhdHRyaWJ1dGVzIHRvIGEgZ2VuZXJhdG9yIG9iamVjdCBqdXN0IGFzIHdpdGggYSBmdW5jdGlvbiBvYmplY3QuCgogIEF0dHJpYnV0ZXM6CiAgICBpbnRlcm5hbF9nZW46IEEgaW5zdGFuY2Ugb2YgYSBnZW5lcmF0b3Igb2JqZWN0LiBBcyBwYXJ0IG9mICdzdGVwJyBvZiB0aGUKICAgICAgZ2VuZXJhdG9yLCB0aGUgeWllbGRlZCBvYmplY3Qgd2lsbCBiZSBwYXNzZWQgdG8gJ2ludGVybGVhdmVfZnVuYycuCiAgICBpbnRlcmxlYXZlX2Z1bmM6IEEgY2FsbGJhY2sgYWNjZXB0aW5nIGEgc2luZ2xlIGFyZ3VtZW50LiBUaGlzIGZ1bmN0aW9uIHdpbGwKICAgICAgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdCBvZiBlYWNoIHlpZWxkZWQgJ3N0ZXAnIGluIHRoZSBpbnRlcm5hbAogICAgICBnZW5lcmF0b3IuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbiwgaW50ZXJsZWF2ZV9mdW5jKToKICAgIHNlbGYuaW50ZXJuYWxfZ2VuID0gZ2VuCiAgICBzZWxmLmludGVybGVhdmVfZnVuYyA9IGludGVybGVhdmVfZnVuYwoKICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CiAgICAjIFRPRE8obGFvbHUpOiBNYXkgYWxzbyB3YW50IHRvIGludGVyY2VwdCAnc2VuZCcgaW4gdGhlIGZ1dHVyZSBpZiB3ZSBtb3ZlIHRvCiAgICAjIGEgR2VuZXJhdG9ySGludCB3aXRoIDMgdHlwZS1wYXJhbXM6CiAgICAjICAgKiBHZW5lcmF0b3Jbc2VuZF90eXBlLCByZXR1cm5fdHlwZSwgeWllbGRfdHlwZV0KICAgIGlmIGF0dHIgPT0gJ19fbmV4dF9fJzoKICAgICAgcmV0dXJuIHNlbGYuX19uZXh0X18oKQogICAgZWxpZiBhdHRyID09ICdfX2l0ZXJfXyc6CiAgICAgIHJldHVybiBzZWxmLl9faXRlcl9fKCkKICAgIHJldHVybiBnZXRhdHRyKHNlbGYuaW50ZXJuYWxfZ2VuLCBhdHRyKQoKICBkZWYgX19uZXh0X18oc2VsZik6CiAgICBuZXh0X3ZhbCA9IG5leHQoc2VsZi5pbnRlcm5hbF9nZW4pCiAgICBzZWxmLmludGVybGVhdmVfZnVuYyhuZXh0X3ZhbCkKICAgIHJldHVybiBuZXh0X3ZhbAoKICBuZXh0ID0gX19uZXh0X18KCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgZm9yIHggaW4gc2VsZi5pbnRlcm5hbF9nZW46CiAgICAgIHNlbGYuaW50ZXJsZWF2ZV9mdW5jKHgpCiAgICAgIHlpZWxkIHgKlH2UKIwOZ2V0ZnVsbGFyZ3NwZWOUalYxAQBLl0uzh5SMDWdldF9zaWduYXR1cmWUalYxAQBLtkvfh5SMDm5vX2Fubm90YXRpb25zlGpWMQEAS+JL5oeUjBhJT1R5cGVIaW50cy5fbWFrZV9vcmlnaW6UalYxAQBL/k0XAYeUjBFJT1R5cGVIaW50cy5lbXB0eZRqVjEBAE0ZAU0eAYeUjBlJT1R5cGVIaW50cy5mcm9tX2NhbGxhYmxllGpWMQEATSABTVcBh5SMHElPVHlwZUhpbnRzLndpdGhfaW5wdXRfdHlwZXOUalYxAQBNWQFNXAGHlIwdSU9UeXBlSGludHMud2l0aF9vdXRwdXRfdHlwZXOUalYxAQBNXgFNYQGHlIweSU9UeXBlSGludHMuc2ltcGxlX291dHB1dF90eXBllGpWMQEATWMBTWoBh5SMIklPVHlwZUhpbnRzLmhhc19zaW1wbGVfb3V0cHV0X3R5cGWUalYxAQBNbAFNcAGHlIwaSU9UeXBlSGludHMuc3RyaXBfaXRlcmFibGWUalYxAQBNcgFNmQGHlIwZSU9UeXBlSGludHMud2l0aF9kZWZhdWx0c5RqVjEBAE2bAU2wAYeUjBxJT1R5cGVIaW50cy5faGFzX2lucHV0X3R5cGVzlGpWMQEATbIBTbMBh5SMHUlPVHlwZUhpbnRzLl9oYXNfb3V0cHV0X3R5cGVzlGpWMQEATbUBTbYBh5SMFElPVHlwZUhpbnRzLl9fYm9vbF9flGpWMQEATbgBTbkBh5SMFElPVHlwZUhpbnRzLl9fcmVwcl9flGpWMQEATbsBTb0Bh5SMFUlPVHlwZUhpbnRzLmRlYnVnX3N0cpRqVjEBAE2/AU3AAYeUjBJJT1R5cGVIaW50cy5fX2VxX1+UalYxAQBNwgFNywGHlIwSSU9UeXBlSGludHMuX19uZV9flGpWMQEATc0BTc4Bh5SMFElPVHlwZUhpbnRzLl9faGFzaF9flGpWMQEATdABTdEBh5SMFklPVHlwZUhpbnRzLl9fcmVkdWNlX1+UalYxAQBN0wFN1QGHlIwLSU9UeXBlSGludHOUal0xAQBL6U3VAYeUjBZXaXRoVHlwZUhpbnRzLl9faW5pdF9flGpWMQEATdsBTdwBh5SMJ1dpdGhUeXBlSGludHMuX2dldF9vcl9jcmVhdGVfdHlwZV9oaW50c5RqVjEBAE3eAU3mAYeUjBxXaXRoVHlwZUhpbnRzLmdldF90eXBlX2hpbnRzlGpWMQEATegBTfMBh5SMIFdpdGhUeXBlSGludHMuZGVmYXVsdF90eXBlX2hpbnRzlGpWMQEATfUBTfYBh5SMHldpdGhUeXBlSGludHMud2l0aF9pbnB1dF90eXBlc5RqVjEBAE34AU3+AYeUjB9XaXRoVHlwZUhpbnRzLndpdGhfb3V0cHV0X3R5cGVzlGpWMQEATQACTQYCh5SMDVdpdGhUeXBlSGludHOUal0xAQBN2AFNBgKHlIwOVHlwZUNoZWNrRXJyb3KUal0xAQBNCQJNCgKHlIwVX3Bvc2l0aW9uYWxfYXJnX2hpbnRzlGpWMQEATQ0CTRcCh5SMHF91bnBhY2tfcG9zaXRpb25hbF9hcmdfaGludHOUalYxAQBNGgJNLAKHlIwUZ2V0Y2FsbGFyZ3NfZm9yaGludHOUalYxAQBNLwJNOgKHlIwdZ2V0Y2FsbGFyZ3NfZm9yaGludHNfaW1wbF9weTKUalYxAQBNPQJNZwKHlIweX25vcm1hbGl6ZV92YXJfcG9zaXRpb25hbF9oaW50lGpWMQEATWoCTXwCh5SMG19ub3JtYWxpemVfdmFyX2tleXdvcmRfaGludJRqVjEBAE1/Ak2VAoeUjB1nZXRjYWxsYXJnc19mb3JoaW50c19pbXBsX3B5M5RqVjEBAE2YAk3GAoeUjA5nZXRfdHlwZV9oaW50c5RqVjEBAE3JAk3cAoeUjBB3aXRoX2lucHV0X3R5cGVzlGpWMQEATeACTTMDh5SMEXdpdGhfb3V0cHV0X3R5cGVzlGpWMQEATTYDTYkDh5SMFF9jaGVja19pbnN0YW5jZV90eXBllGpWMQEATYwDTasDh5SMFl9pbnRlcmxlYXZlX3R5cGVfY2hlY2uUalYxAQBNrgNN0QOHlIwZR2VuZXJhdG9yV3JhcHBlci5fX2luaXRfX5RqVjEBAE3hA03jA4eUjBxHZW5lcmF0b3JXcmFwcGVyLl9fZ2V0YXR0cl9flGpWMQEATeUDTe0Dh5SMGUdlbmVyYXRvcldyYXBwZXIuX19uZXh0X1+UalYxAQBN7wNN8gOHlIwZR2VuZXJhdG9yV3JhcHBlci5fX2l0ZXJfX5RqVjEBAE32A035A4eUjBBHZW5lcmF0b3JXcmFwcGVylGpdMQEATdQDTfkDh5R1fZQojA5ub19hbm5vdGF0aW9uc5Rq2wMAAIwNV2l0aFR5cGVIaW50c5Rq2wMAAIwcV2l0aFR5cGVIaW50cy5nZXRfdHlwZV9oaW50c5Rq2wMAAIwgV2l0aFR5cGVIaW50cy5kZWZhdWx0X3R5cGVfaGludHOUatsDAACMHldpdGhUeXBlSGludHMud2l0aF9pbnB1dF90eXBlc5Rq2wMAAIwfV2l0aFR5cGVIaW50cy53aXRoX291dHB1dF90eXBlc5Rq2wMAAGpqjAAAatsDAACMEHdpdGhfaW5wdXRfdHlwZXOUatsDAACMEXdpdGhfb3V0cHV0X3R5cGVzlGrbAwAAdYwgYXBhY2hlX2JlYW0udHlwZWhpbnRzLmRlY29yYXRvcnOUdJSMKWFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzX3Rlc3RfcHkzlChYrBgAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVGVzdHMgZm9yIGRlY29yYXRvcnMgbW9kdWxlIHdpdGggUHl0aG9uIDMgc3ludGF4IG5vdCBzdXBwb3J0ZWQgYnkgMi43LiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBmdW5jdG9vbHMKaW1wb3J0IHR5cGluZwppbXBvcnQgdW5pdHRlc3QKCiMgcGF0Y2hlcyB1bml0dGVzdC5UZXN0Q2FzZSB0byBiZSBweXRob24zIGNvbXBhdGlibGUKaW1wb3J0IGZ1dHVyZS50ZXN0cy5iYXNlICAjIHB5bGludDogZGlzYWJsZT11bnVzZWQtaW1wb3J0Cgpmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBNYXAKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IEFueQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgRGljdApmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgTGlzdApmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgVHVwbGUKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IFR5cGVDaGVja0Vycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBUeXBlVmFyaWFibGUKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IGRlY29yYXRvcnMKCmRlY29yYXRvcnMuX2VuYWJsZV9mcm9tX2NhbGxhYmxlID0gVHJ1ZQpUID0gVHlwZVZhcmlhYmxlKCdUJykKIyBOYW1lIGlzICdUJyBzbyBpdCBjb252ZXJ0cyB0byBhIGJlYW0gdHlwZSB3aXRoIHRoZSBzYW1lIG5hbWUuClRfdHlwaW5nID0gdHlwaW5nLlR5cGVWYXIoJ1QnKQoKCmNsYXNzIElPVHlwZUhpbnRzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgZGVmIHRlc3RfZnJvbV9jYWxsYWJsZShzZWxmKToKICAgIGRlZiBmbigKICAgICAgICBhOiBpbnQsCiAgICAgICAgYjogc3RyID0gJycsCiAgICAgICAgKmFyZ3M6IFR1cGxlW1RdLAogICAgICAgIGZvbzogTGlzdFtpbnRdLAogICAgICAgICoqa3dhcmdzOiBEaWN0W3N0ciwgc3RyXSkgLT4gVHVwbGVbQW55LCAuLi5dOgogICAgICByZXR1cm4gYSwgYiwgYXJncywgZm9vLCBrd2FyZ3MKCiAgICB0aCA9IGRlY29yYXRvcnMuSU9UeXBlSGludHMuZnJvbV9jYWxsYWJsZShmbikKICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgdGguaW5wdXRfdHlwZXMsICgoaW50LCBzdHIsIFR1cGxlW1RdKSwgewogICAgICAgICAgICAnZm9vJzogTGlzdFtpbnRdLCAna3dhcmdzJzogRGljdFtzdHIsIHN0cl0KICAgICAgICB9KSkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGgub3V0cHV0X3R5cGVzLCAoKFR1cGxlW0FueSwgLi4uXSwgKSwge30pKQoKICBkZWYgdGVzdF9mcm9tX2NhbGxhYmxlX3BhcnRpYWxfYW5ub3RhdGlvbnMoc2VsZik6CiAgICBkZWYgZm4oYTogaW50LCBiPU5vbmUsICphcmdzLCBmb286IExpc3RbaW50XSwgKiprd2FyZ3MpOgogICAgICByZXR1cm4gYSwgYiwgYXJncywgZm9vLCBrd2FyZ3MKCiAgICB0aCA9IGRlY29yYXRvcnMuSU9UeXBlSGludHMuZnJvbV9jYWxsYWJsZShmbikKICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgdGguaW5wdXRfdHlwZXMsCiAgICAgICAgKChpbnQsIEFueSwgVHVwbGVbQW55LCAuLi5dKSwgewogICAgICAgICAgICAnZm9vJzogTGlzdFtpbnRdLCAna3dhcmdzJzogRGljdFtBbnksIEFueV0KICAgICAgICB9KSkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGgub3V0cHV0X3R5cGVzLCAoKEFueSwgKSwge30pKQoKICBkZWYgdGVzdF9mcm9tX2NhbGxhYmxlX2NsYXNzKHNlbGYpOgogICAgY2xhc3MgQ2xhc3Mob2JqZWN0KToKICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVudXNlZF9hcmc6IGludCk6CiAgICAgICAgcGFzcwoKICAgIHRoID0gZGVjb3JhdG9ycy5JT1R5cGVIaW50cy5mcm9tX2NhbGxhYmxlKENsYXNzKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5pbnB1dF90eXBlcywgKChpbnQsICksIHt9KSkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGgub3V0cHV0X3R5cGVzLCAoKENsYXNzLCApLCB7fSkpCgogIGRlZiB0ZXN0X2Zyb21fY2FsbGFibGVfbWV0aG9kKHNlbGYpOgogICAgY2xhc3MgQ2xhc3Mob2JqZWN0KToKICAgICAgZGVmIG1ldGhvZChzZWxmLCBhcmc6IFQgPSBOb25lKSAtPiBOb25lOgogICAgICAgIHBhc3MKCiAgICB0aCA9IGRlY29yYXRvcnMuSU9UeXBlSGludHMuZnJvbV9jYWxsYWJsZShDbGFzcy5tZXRob2QpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLmlucHV0X3R5cGVzLCAoKEFueSwgVCksIHt9KSkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGgub3V0cHV0X3R5cGVzLCAoKE5vbmUsICksIHt9KSkKCiAgICB0aCA9IGRlY29yYXRvcnMuSU9UeXBlSGludHMuZnJvbV9jYWxsYWJsZShDbGFzcygpLm1ldGhvZCkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGguaW5wdXRfdHlwZXMsICgoVCwgKSwge30pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgoTm9uZSwgKSwge30pKQoKICBkZWYgdGVzdF9mcm9tX2NhbGxhYmxlX2NvbnZlcnRfdG9fYmVhbV90eXBlcyhzZWxmKToKICAgIGRlZiBmbigKICAgICAgICBhOiB0eXBpbmcuTGlzdFtpbnRdLAogICAgICAgIGI6IHN0ciA9IE5vbmUsCiAgICAgICAgKmFyZ3M6IHR5cGluZy5UdXBsZVtUX3R5cGluZ10sCiAgICAgICAgZm9vOiB0eXBpbmcuTGlzdFtpbnRdLAogICAgICAgICoqa3dhcmdzOiB0eXBpbmcuRGljdFtzdHIsIHN0cl0pIC0+IHR5cGluZy5UdXBsZVt0eXBpbmcuQW55LCAuLi5dOgogICAgICByZXR1cm4gYSwgYiwgYXJncywgZm9vLCBrd2FyZ3MKCiAgICB0aCA9IGRlY29yYXRvcnMuSU9UeXBlSGludHMuZnJvbV9jYWxsYWJsZShmbikKICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgdGguaW5wdXRfdHlwZXMsCiAgICAgICAgKChMaXN0W2ludF0sIHN0ciwgVHVwbGVbVF0pLCB7CiAgICAgICAgICAgICdmb28nOiBMaXN0W2ludF0sICdrd2FyZ3MnOiBEaWN0W3N0ciwgc3RyXQogICAgICAgIH0pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgoVHVwbGVbQW55LCAuLi5dLCApLCB7fSkpCgogIGRlZiB0ZXN0X2Zyb21fY2FsbGFibGVfcGFydGlhbChzZWxmKToKICAgIGRlZiBmbihhOiBpbnQpIC0+IGludDoKICAgICAgcmV0dXJuIGEKCiAgICAjIGZ1bmN0b29scy5wYXJ0aWFsIG9iamVjdHMgZG9uJ3QgaGF2ZSBfX25hbWVfXyBhdHRyaWJ1dGVzIGJ5IGRlZmF1bHQuCiAgICBmbiA9IGZ1bmN0b29scy5wYXJ0aWFsKGZuLCAxKQogICAgdGggPSBkZWNvcmF0b3JzLklPVHlwZUhpbnRzLmZyb21fY2FsbGFibGUoZm4pCiAgICBzZWxmLmFzc2VydFJlZ2V4KHRoLmRlYnVnX3N0cigpLCByJ3Vua25vd24nKQoKICBkZWYgdGVzdF9nZXRjYWxsYXJnc19mb3JoaW50cyhzZWxmKToKICAgIGRlZiBmbigKICAgICAgICBhOiBpbnQsCiAgICAgICAgYjogc3RyID0gJycsCiAgICAgICAgKmFyZ3M6IFR1cGxlW1RdLAogICAgICAgIGZvbzogTGlzdFtpbnRdLAogICAgICAgICoqa3dhcmdzOiBEaWN0W3N0ciwgc3RyXSkgLT4gVHVwbGVbQW55LCAuLi5dOgogICAgICByZXR1cm4gYSwgYiwgYXJncywgZm9vLCBrd2FyZ3MKCiAgICBjYWxsYXJncyA9IGRlY29yYXRvcnMuZ2V0Y2FsbGFyZ3NfZm9yaGludHMoZm4sIGZsb2F0LCBmb289TGlzdFtzdHJdKQogICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoCiAgICAgICAgY2FsbGFyZ3MsCiAgICAgICAgewogICAgICAgICAgICAnYSc6IGZsb2F0LAogICAgICAgICAgICAnYic6IHN0ciwKICAgICAgICAgICAgJ2FyZ3MnOiBUdXBsZVtUXSwKICAgICAgICAgICAgJ2Zvbyc6IExpc3Rbc3RyXSwKICAgICAgICAgICAgJ2t3YXJncyc6IERpY3Rbc3RyLCBzdHJdCiAgICAgICAgfSkKCiAgZGVmIHRlc3RfZ2V0Y2FsbGFyZ3NfZm9yaGludHNfZGVmYXVsdF9hcmcoc2VsZik6CiAgICAjIERlZmF1bHQgYXJncyBhcmUgbm90IG5lY2Vzc2FyaWx5IHR5cGVzLCBzbyB0aGV5IHNob3VsZCBiZSBpZ25vcmVkLgogICAgZGVmIGZuKGE9TGlzdFtpbnRdLCBiPU5vbmUsICphcmdzLCBmb289KCksICoqa3dhcmdzKSAtPiBUdXBsZVtBbnksIC4uLl06CiAgICAgIHJldHVybiBhLCBiLCBhcmdzLCBmb28sIGt3YXJncwoKICAgIGNhbGxhcmdzID0gZGVjb3JhdG9ycy5nZXRjYWxsYXJnc19mb3JoaW50cyhmbikKICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKAogICAgICAgIGNhbGxhcmdzLAogICAgICAgIHsKICAgICAgICAgICAgJ2EnOiBBbnksCiAgICAgICAgICAgICdiJzogQW55LAogICAgICAgICAgICAnYXJncyc6IFR1cGxlW0FueSwgLi4uXSwKICAgICAgICAgICAgJ2Zvbyc6IEFueSwKICAgICAgICAgICAgJ2t3YXJncyc6IERpY3RbQW55LCBBbnldCiAgICAgICAgfSkKCiAgZGVmIHRlc3RfZ2V0Y2FsbGFyZ3NfZm9yaGludHNfbWlzc2luZ19hcmcoc2VsZik6CiAgICBkZWYgZm4oYSwgYj1Ob25lLCAqYXJncywgZm9vLCAqKmt3YXJncyk6CiAgICAgIHJldHVybiBhLCBiLCBhcmdzLCBmb28sIGt3YXJncwoKICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChkZWNvcmF0b3JzLlR5cGVDaGVja0Vycm9yLCAibWlzc2luZy4qJ2EnIik6CiAgICAgIGRlY29yYXRvcnMuZ2V0Y2FsbGFyZ3NfZm9yaGludHMoZm4sIGZvbz1MaXN0W2ludF0pCiAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoZGVjb3JhdG9ycy5UeXBlQ2hlY2tFcnJvciwgIm1pc3NpbmcuKidmb28nIik6CiAgICAgIGRlY29yYXRvcnMuZ2V0Y2FsbGFyZ3NfZm9yaGludHMoZm4sIDUpCgogIGRlZiB0ZXN0X29yaWdpbihzZWxmKToKICAgIGRlZiBhbm5vdGF0ZWQoZTogc3RyKSAtPiBzdHI6CiAgICAgIHJldHVybiBlCgogICAgdCA9IE1hcChhbm5vdGF0ZWQpCiAgICB0aCA9IHQuZ2V0X3R5cGVfaGludHMoKQogICAgdGggPSB0aC53aXRoX2lucHV0X3R5cGVzKHN0cikKICAgIHNlbGYuYXNzZXJ0UmVnZXgodGguZGVidWdfc3RyKCksIHInd2l0aF9pbnB1dF90eXBlcycpCiAgICB0aCA9IHRoLndpdGhfb3V0cHV0X3R5cGVzKHN0cikKICAgIHNlbGYuYXNzZXJ0UmVnZXgoCiAgICAgICAgdGguZGVidWdfc3RyKCksCiAgICAgICAgcicoP3Mpd2l0aF9vdXRwdXRfdHlwZXMuKndpdGhfaW5wdXRfdHlwZXMuKk1hcC5hbm5vdGF0ZWQnKQoKCmNsYXNzIERlY29yYXRvcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICBkZWYgdGVzdF9ub19hbm5vdGF0aW9ucyhzZWxmKToKICAgIGRlZiBmbihhOiBpbnQpIC0+IGludDoKICAgICAgcmV0dXJuIGEKCiAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUNoZWNrRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidyZXF1aXJlcyAuKmludC4qIGJ1dCBnb3QgLipzdHInKToKICAgICAgXyA9IFsnYScsICdiJywgJ2MnXSB8IE1hcChmbikKCiAgICAjIFNhbWUgcGlwZWxpbmUgZG9lc24ndCByYWlzZSB3aXRob3V0IGFubm90YXRpb25zIG9uIGZuLgogICAgZm4gPSBkZWNvcmF0b3JzLm5vX2Fubm90YXRpb25zKGZuKQogICAgXyA9IFsnYScsICdiJywgJ2MnXSB8IE1hcChmbikKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIHVuaXR0ZXN0Lm1haW4oKQqUfZQojCJJT1R5cGVIaW50c1Rlc3QudGVzdF9mcm9tX2NhbGxhYmxllGpWMQEASy9LPYeUjDZJT1R5cGVIaW50c1Rlc3QudGVzdF9mcm9tX2NhbGxhYmxlX3BhcnRpYWxfYW5ub3RhdGlvbnOUalYxAQBLP0tJh5SMN0lPVHlwZUhpbnRzVGVzdC50ZXN0X2Zyb21fY2FsbGFibGVfY2xhc3MuQ2xhc3MuX19pbml0X1+UalYxAQBLTUtOh5SMLklPVHlwZUhpbnRzVGVzdC50ZXN0X2Zyb21fY2FsbGFibGVfY2xhc3MuQ2xhc3OUal0xAQBLTEtOh5SMKElPVHlwZUhpbnRzVGVzdC50ZXN0X2Zyb21fY2FsbGFibGVfY2xhc3OUalYxAQBLS0tSh5SMNklPVHlwZUhpbnRzVGVzdC50ZXN0X2Zyb21fY2FsbGFibGVfbWV0aG9kLkNsYXNzLm1ldGhvZJRqVjEBAEtWS1eHlIwvSU9UeXBlSGludHNUZXN0LnRlc3RfZnJvbV9jYWxsYWJsZV9tZXRob2QuQ2xhc3OUal0xAQBLVUtXh5SMKUlPVHlwZUhpbnRzVGVzdC50ZXN0X2Zyb21fY2FsbGFibGVfbWV0aG9klGpWMQEAS1RLX4eUjDhJT1R5cGVIaW50c1Rlc3QudGVzdF9mcm9tX2NhbGxhYmxlX2NvbnZlcnRfdG9fYmVhbV90eXBlc5RqVjEBAEthS3CHlIwqSU9UeXBlSGludHNUZXN0LnRlc3RfZnJvbV9jYWxsYWJsZV9wYXJ0aWFslGpWMQEAS3JLeYeUjClJT1R5cGVIaW50c1Rlc3QudGVzdF9nZXRjYWxsYXJnc19mb3JoaW50c5RqVjEBAEt7S42HlIw1SU9UeXBlSGludHNUZXN0LnRlc3RfZ2V0Y2FsbGFyZ3NfZm9yaGludHNfZGVmYXVsdF9hcmeUalYxAQBLj0udh5SMNUlPVHlwZUhpbnRzVGVzdC50ZXN0X2dldGNhbGxhcmdzX2ZvcmhpbnRzX21pc3NpbmdfYXJnlGpWMQEAS59LpoeUjBtJT1R5cGVIaW50c1Rlc3QudGVzdF9vcmlnaW6UalYxAQBLqEuzh5SMD0lPVHlwZUhpbnRzVGVzdJRqXTEBAEsuS7OHlIwiRGVjb3JhdG9yc1Rlc3QudGVzdF9ub19hbm5vdGF0aW9uc5RqVjEBAEu3S8GHlIwORGVjb3JhdG9yc1Rlc3SUal0xAQBLtkvBh5R1fZQojA9JT1R5cGVIaW50c1Rlc3SUapQDAACMIklPVHlwZUhpbnRzVGVzdC50ZXN0X2Zyb21fY2FsbGFibGWUapQDAACMNklPVHlwZUhpbnRzVGVzdC50ZXN0X2Zyb21fY2FsbGFibGVfcGFydGlhbF9hbm5vdGF0aW9uc5RqlAMAAIwoSU9UeXBlSGludHNUZXN0LnRlc3RfZnJvbV9jYWxsYWJsZV9jbGFzc5RqlAMAAIwpSU9UeXBlSGludHNUZXN0LnRlc3RfZnJvbV9jYWxsYWJsZV9tZXRob2SUapQDAACMOElPVHlwZUhpbnRzVGVzdC50ZXN0X2Zyb21fY2FsbGFibGVfY29udmVydF90b19iZWFtX3R5cGVzlGqUAwAAjCpJT1R5cGVIaW50c1Rlc3QudGVzdF9mcm9tX2NhbGxhYmxlX3BhcnRpYWyUapQDAACMKUlPVHlwZUhpbnRzVGVzdC50ZXN0X2dldGNhbGxhcmdzX2ZvcmhpbnRzlGqUAwAAjDVJT1R5cGVIaW50c1Rlc3QudGVzdF9nZXRjYWxsYXJnc19mb3JoaW50c19kZWZhdWx0X2FyZ5RqlAMAAIw1SU9UeXBlSGludHNUZXN0LnRlc3RfZ2V0Y2FsbGFyZ3NfZm9yaGludHNfbWlzc2luZ19hcmeUapQDAACMG0lPVHlwZUhpbnRzVGVzdC50ZXN0X29yaWdpbpRqlAMAAIwORGVjb3JhdG9yc1Rlc3SUapQDAACMIkRlY29yYXRvcnNUZXN0LnRlc3Rfbm9fYW5ub3RhdGlvbnOUapQDAAB1jClhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9yc190ZXN0X3B5M5R0lIwvYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHmUKFg8MgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJNb2R1bGUgdG8gY29udmVydCBQeXRob24ncyBuYXRpdmUgdHlwaW5nIHR5cGVzIHRvIEJlYW0gdHlwZXMuIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGNvbGxlY3Rpb25zCmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKaW1wb3J0IHR5cGluZwpmcm9tIGJ1aWx0aW5zIGltcG9ydCBuZXh0Cgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgdHlwZWhpbnRzCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgojIERlc2NyaWJlcyBhbiBlbnRyeSBpbiB0aGUgdHlwZSBtYXAgaW4gY29udmVydF90b19iZWFtX3R5cGUuCiMgbWF0Y2ggaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdXNlciB0eXBlIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIGNvbnZlcnNpb24KIyBzaG91bGQgdHJpZ2dlci4KIyBhcml0eSBpcyB0aGUgZXhwZWN0ZWQgYXJpdHkgb2YgdGhlIHVzZXIgdHlwZS4gLTEgbWVhbnMgaXQncyB2YXJpYWRpYy4KIyBiZWFtX3R5cGUgaXMgdGhlIEJlYW0gdHlwZSB0aGUgdXNlciB0eXBlIHNob3VsZCBtYXAgdG8uCl9UeXBlTWFwRW50cnkgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKAogICAgJ19UeXBlTWFwRW50cnknLCBbJ21hdGNoJywgJ2FyaXR5JywgJ2JlYW1fdHlwZSddKQoKCmRlZiBfZ2V0X2FyZ3ModHlwKToKICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBhcmd1bWVudHMgdG8gdGhlIGdpdmVuIHR5cGUuCgogIEFyZ3M6CiAgICB0eXA6IEEgdHlwaW5nIG1vZHVsZSB0eXBpbmcgdHlwZS4KCiAgUmV0dXJuczoKICAgIEEgdHVwbGUgb2YgYXJncy4KICAiIiIKICB0cnk6CiAgICBpZiB0eXAuX19hcmdzX18gaXMgTm9uZToKICAgICAgcmV0dXJuICgpCiAgICByZXR1cm4gdHlwLl9fYXJnc19fCiAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgaWYgaXNpbnN0YW5jZSh0eXAsIHR5cGluZy5UeXBlVmFyKToKICAgICAgcmV0dXJuICh0eXAuX19uYW1lX18sICkKICAgICMgT24gUHl0aG9uIHZlcnNpb25zIDwgMy41LjMsIHRoZSBUdXBsZSBhbmQgVW5pb24gdHlwZSBmcm9tIHR5cGluZyBkbwogICAgIyBub3QgaGF2ZSBhbiBfX2FyZ3NfXyBhdHRyaWJ1dGUsIGJ1dCBhIF9fdHVwbGVfcGFyYW1zX18sIGFuZCBhCiAgICAjIF9fdW5pb25fcGFyYW1zX18gYXJndW1lbnQgcmVzcGVjdGl2ZWx5LgogICAgaWYgKDMsIDAsIDApIDw9IHN5cy52ZXJzaW9uX2luZm9bMDozXSA8ICgzLCA1LCAzKToKICAgICAgaWYgZ2V0YXR0cih0eXAsICdfX3R1cGxlX3BhcmFtc19fJywgTm9uZSkgaXMgbm90IE5vbmU6CiAgICAgICAgaWYgdHlwLl9fdHVwbGVfdXNlX2VsbGlwc2lzX186CiAgICAgICAgICByZXR1cm4gdHlwLl9fdHVwbGVfcGFyYW1zX18gKyAoRWxsaXBzaXMsICkKICAgICAgICBlbHNlOgogICAgICAgICAgcmV0dXJuIHR5cC5fX3R1cGxlX3BhcmFtc19fCiAgICAgIGVsaWYgZ2V0YXR0cih0eXAsICdfX3VuaW9uX3BhcmFtc19fJywgTm9uZSkgaXMgbm90IE5vbmU6CiAgICAgICAgcmV0dXJuIHR5cC5fX3VuaW9uX3BhcmFtc19fCiAgICByZXR1cm4gKCkKCgpkZWYgX3NhZmVfaXNzdWJjbGFzcyhkZXJpdmVkLCBwYXJlbnQpOgogICIiIkxpa2UgaXNzdWJjbGFzcywgYnV0IHN3YWxsb3dzIFR5cGVFcnJvcnMuCgogIFRoaXMgaXMgdXNlZnVsIGZvciB3aGVuIGVpdGhlciBwYXJhbWV0ZXIgbWlnaHQgbm90IGFjdHVhbGx5IGJlIGEgY2xhc3MsCiAgZS5nLiB0eXBpbmcuVW5pb24gaXNuJ3QgYWN0dWFsbHkgYSBjbGFzcy4KCiAgQXJnczoKICAgIGRlcml2ZWQ6IEFzIGluIGlzc3ViY2xhc3MuCiAgICBwYXJlbnQ6IEFzIGluIGlzc3ViY2xhc3MuCgogIFJldHVybnM6CiAgICBpc3N1YmNsYXNzKGRlcml2ZWQsIHBhcmVudCksIG9yIEZhbHNlIGlmIGEgVHlwZUVycm9yIHdhcyByYWlzZWQuCiAgIiIiCiAgdHJ5OgogICAgcmV0dXJuIGlzc3ViY2xhc3MoZGVyaXZlZCwgcGFyZW50KQogIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICBpZiBoYXNhdHRyKGRlcml2ZWQsICdfX29yaWdpbl9fJyk6CiAgICAgIHRyeToKICAgICAgICByZXR1cm4gaXNzdWJjbGFzcyhkZXJpdmVkLl9fb3JpZ2luX18sIHBhcmVudCkKICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICBwYXNzCiAgICByZXR1cm4gRmFsc2UKCgpkZWYgX21hdGNoX2lzc3ViY2xhc3MobWF0Y2hfYWdhaW5zdCk6CiAgcmV0dXJuIGxhbWJkYSB1c2VyX3R5cGU6IF9zYWZlX2lzc3ViY2xhc3ModXNlcl90eXBlLCBtYXRjaF9hZ2FpbnN0KQoKCmRlZiBfbWF0Y2hfaXNfZXhhY3RseV9tYXBwaW5nKHVzZXJfdHlwZSk6CiAgIyBBdm9pZCB1bmludGVudGlvbmFsbHkgY2F0Y2hpbmcgYWxsIHN1YnR5cGVzIChlLmcuIHN0cmluZ3MgYW5kIG1hcHBpbmdzKS4KICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDcpOgogICAgZXhwZWN0ZWRfb3JpZ2luID0gdHlwaW5nLk1hcHBpbmcKICBlbHNlOgogICAgZXhwZWN0ZWRfb3JpZ2luID0gY29sbGVjdGlvbnMuYWJjLk1hcHBpbmcKICByZXR1cm4gZ2V0YXR0cih1c2VyX3R5cGUsICdfX29yaWdpbl9fJywgTm9uZSkgaXMgZXhwZWN0ZWRfb3JpZ2luCgoKZGVmIF9tYXRjaF9pc19leGFjdGx5X2l0ZXJhYmxlKHVzZXJfdHlwZSk6CiAgaWYgdXNlcl90eXBlIGlzIHR5cGluZy5JdGVyYWJsZToKICAgIHJldHVybiBUcnVlCiAgIyBBdm9pZCB1bmludGVudGlvbmFsbHkgY2F0Y2hpbmcgYWxsIHN1YnR5cGVzIChlLmcuIHN0cmluZ3MgYW5kIG1hcHBpbmdzKS4KICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDcpOgogICAgZXhwZWN0ZWRfb3JpZ2luID0gdHlwaW5nLkl0ZXJhYmxlCiAgZWxzZToKICAgIGV4cGVjdGVkX29yaWdpbiA9IGNvbGxlY3Rpb25zLmFiYy5JdGVyYWJsZQogIHJldHVybiBnZXRhdHRyKHVzZXJfdHlwZSwgJ19fb3JpZ2luX18nLCBOb25lKSBpcyBleHBlY3RlZF9vcmlnaW4KCgpkZWYgX21hdGNoX2lzX25hbWVkX3R1cGxlKHVzZXJfdHlwZSk6CiAgcmV0dXJuICgKICAgICAgX3NhZmVfaXNzdWJjbGFzcyh1c2VyX3R5cGUsIHR5cGluZy5UdXBsZSkgYW5kCiAgICAgIGhhc2F0dHIodXNlcl90eXBlLCAnX2ZpZWxkX3R5cGVzJykpCgoKZGVmIF9tYXRjaF9pc19vcHRpb25hbCh1c2VyX3R5cGUpOgogIHJldHVybiBfbWF0Y2hfaXNfdW5pb24odXNlcl90eXBlKSBhbmQgc3VtKAogICAgICB0cCBpcyB0eXBlKE5vbmUpIGZvciB0cCBpbiBfZ2V0X2FyZ3ModXNlcl90eXBlKSkgPT0gMQoKCmRlZiBleHRyYWN0X29wdGlvbmFsX3R5cGUodXNlcl90eXBlKToKICAiIiJFeHRyYWN0cyB0aGUgbm9uLU5vbmUgdHlwZSBmcm9tIE9wdGlvbmFsIHR5cGUgdXNlcl90eXBlLgoKICBJZiB1c2VyX3R5cGUgaXMgbm90IE9wdGlvbmFsLCByZXR1cm5zIE5vbmUKICAiIiIKICBpZiBub3QgX21hdGNoX2lzX29wdGlvbmFsKHVzZXJfdHlwZSk6CiAgICByZXR1cm4gTm9uZQogIGVsc2U6CiAgICByZXR1cm4gbmV4dCh0cCBmb3IgdHAgaW4gX2dldF9hcmdzKHVzZXJfdHlwZSkgaWYgdHAgaXMgbm90IHR5cGUoTm9uZSkpCgoKZGVmIF9tYXRjaF9pc191bmlvbih1c2VyX3R5cGUpOgogICMgRm9yIG5vbi1zdWJzY3JpcHRlZCB1bmlvbnMgKFB5dGhvbiAyLjcuMTQrIHdpdGggdHlwaW5nIDMuNjQpCiAgaWYgdXNlcl90eXBlIGlzIHR5cGluZy5VbmlvbjoKICAgIHJldHVybiBUcnVlCgogIHRyeTogICMgUHl0aG9uIDMuNS4yCiAgICBpZiBpc2luc3RhbmNlKHVzZXJfdHlwZSwgdHlwaW5nLlVuaW9uTWV0YSk6CiAgICAgIHJldHVybiBUcnVlCiAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgcGFzcwoKICB0cnk6ICAjIFB5dGhvbiAzLjUuNCssIG9yIFB5dGhvbiAyLjcuMTQrIHdpdGggdHlwaW5nIDMuNjQKICAgIHJldHVybiB1c2VyX3R5cGUuX19vcmlnaW5fXyBpcyB0eXBpbmcuVW5pb24KICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICBwYXNzCgogIHJldHVybiBGYWxzZQoKCmRlZiBpc19BbnkodHlwKToKICByZXR1cm4gdHlwIGlzIHR5cGluZy5BbnkKCgpkZWYgaXNfbmV3X3R5cGUodHlwKToKICByZXR1cm4gaGFzYXR0cih0eXAsICdfX3N1cGVydHlwZV9fJykKCgojIE1hcHBpbmcgZnJvbSB0eXBpbmcuVHlwZVZhci90eXBlaGludHMuVHlwZVZhcmlhYmxlIGlkcyB0byBhbiBvYmplY3Qgb2YgdGhlCiMgb3RoZXIgdHlwZS4gQmlkaXJlY3Rpb25hbCBtYXBwaW5nIHByZXNlcnZlcyB0eXBpbmcuVHlwZVZhciBpbnN0YW5jZXMuCl90eXBlX3Zhcl9jYWNoZSA9IHt9ICAjIHR5cGU6IHR5cGluZy5EaWN0W2ludCwgdHlwZWhpbnRzLlR5cGVWYXJpYWJsZV0KCgpkZWYgY29udmVydF90b19iZWFtX3R5cGUodHlwKToKICAiIiJDb252ZXJ0IGEgZ2l2ZW4gdHlwaW5nIHR5cGUgdG8gYSBCZWFtIHR5cGUuCgogIEFyZ3M6CiAgICB0eXAgKGB0eXBpbmcuVW5pb25bdHlwZSwgc3RyXWApOiB0eXBpbmcgdHlwZSBvciBzdHJpbmcgbGl0ZXJhbCByZXByZXNlbnRpbmcKICAgICAgYSB0eXBlLgoKICBSZXR1cm5zOgogICAgdHlwZTogVGhlIGdpdmVuIHR5cGUgY29udmVydGVkIHRvIGEgQmVhbSB0eXBlIGFzIGZhciBhcyB3ZSBjYW4gZG8gdGhlCiAgICBjb252ZXJzaW9uLgoKICBSYWlzZXM6CiAgICBWYWx1ZUVycm9yOiBUaGUgdHlwZSB3YXMgbWFsZm9ybWVkLgogICIiIgogIGlmIGlzaW5zdGFuY2UodHlwLCB0eXBpbmcuVHlwZVZhcik6CiAgICAjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UsIGFzIGl0J3Mgbm90IHBhcmFtZXRlcml6ZWQgYnkgdHlwZXMuCiAgICAjIEFsc28sIGlkZW50aXR5IG11c3QgYmUgcHJlc2VydmVkIHRocm91Z2ggY29udmVyc2lvbiAoaS5lLiB0aGUgc2FtZQogICAgIyBUeXBlVmFyIGluc3RhbmNlIG11c3QgZ2V0IGNvbnZlcnRlZCBpbnRvIHRoZSBzYW1lIFR5cGVWYXJpYWJsZSBpbnN0YW5jZSkuCiAgICAjIEEgZ2xvYmFsIGNhY2hlIHNob3VsZCBiZSBPSyBhcyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHR5cGUgdmFyaWFibGVzCiAgICAjIGlzIGdlbmVyYWxseSBzbWFsbC4KICAgIGlmIGlkKHR5cCkgbm90IGluIF90eXBlX3Zhcl9jYWNoZToKICAgICAgbmV3X3R5cGVfdmFyaWFibGUgPSB0eXBlaGludHMuVHlwZVZhcmlhYmxlKHR5cC5fX25hbWVfXykKICAgICAgX3R5cGVfdmFyX2NhY2hlW2lkKHR5cCldID0gbmV3X3R5cGVfdmFyaWFibGUKICAgICAgX3R5cGVfdmFyX2NhY2hlW2lkKG5ld190eXBlX3ZhcmlhYmxlKV0gPSB0eXAKICAgIHJldHVybiBfdHlwZV92YXJfY2FjaGVbaWQodHlwKV0KICBlbGlmIGlzaW5zdGFuY2UodHlwLCBzdHIpOgogICAgIyBTcGVjaWFsIGNhc2UgZm9yIGZvcndhcmQgcmVmZXJlbmNlcy4KICAgICMgVE9ETyhCRUFNLTg0ODcpOiBDdXJyZW50bHkgdW5oYW5kbGVkLgogICAgX0xPR0dFUi5pbmZvKCdDb252ZXJ0aW5nIHN0cmluZyBsaXRlcmFsIHR5cGUgaGludCB0byBBbnk6ICIlcyInLCB0eXApCiAgICByZXR1cm4gdHlwZWhpbnRzLkFueQogIGVsaWYgZ2V0YXR0cih0eXAsICdfX21vZHVsZV9fJywgTm9uZSkgIT0gJ3R5cGluZyc6CiAgICAjIE9ubHkgdHJhbnNsYXRlIHR5cGVzIGZyb20gdGhlIHR5cGluZyBtb2R1bGUuCiAgICByZXR1cm4gdHlwCgogIHR5cGVfbWFwID0gWwogICAgICAjIFRPRE8oQkVBTS05MzU1KTogQ3VycmVudGx5IHVuc3VwcG9ydGVkLgogICAgICBfVHlwZU1hcEVudHJ5KG1hdGNoPWlzX25ld190eXBlLCBhcml0eT0wLCBiZWFtX3R5cGU9dHlwZWhpbnRzLkFueSksCiAgICAgIF9UeXBlTWFwRW50cnkobWF0Y2g9aXNfQW55LCBhcml0eT0wLCBiZWFtX3R5cGU9dHlwZWhpbnRzLkFueSksCiAgICAgIF9UeXBlTWFwRW50cnkoCiAgICAgICAgICBtYXRjaD1fbWF0Y2hfaXNzdWJjbGFzcyh0eXBpbmcuRGljdCksCiAgICAgICAgICBhcml0eT0yLAogICAgICAgICAgYmVhbV90eXBlPXR5cGVoaW50cy5EaWN0KSwKICAgICAgX1R5cGVNYXBFbnRyeSgKICAgICAgICAgIG1hdGNoPV9tYXRjaF9pc19leGFjdGx5X2l0ZXJhYmxlLAogICAgICAgICAgYXJpdHk9MSwKICAgICAgICAgIGJlYW1fdHlwZT10eXBlaGludHMuSXRlcmFibGUpLAogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX2lzc3ViY2xhc3ModHlwaW5nLkxpc3QpLAogICAgICAgICAgYXJpdHk9MSwKICAgICAgICAgIGJlYW1fdHlwZT10eXBlaGludHMuTGlzdCksCiAgICAgIF9UeXBlTWFwRW50cnkoCiAgICAgICAgICBtYXRjaD1fbWF0Y2hfaXNzdWJjbGFzcyh0eXBpbmcuU2V0KSwgYXJpdHk9MSwKICAgICAgICAgIGJlYW1fdHlwZT10eXBlaGludHMuU2V0KSwKICAgICAgIyBOYW1lZFR1cGxlIGlzIGEgc3ViY2xhc3Mgb2YgVHVwbGUsIGJ1dCBpdCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLgogICAgICAjIFdlIGp1c3QgY29udmVydCBpdCB0byBBbnkgZm9yIG5vdy4KICAgICAgIyBUaGlzIE1VU1QgYXBwZWFyIGJlZm9yZSB0aGUgZW50cnkgZm9yIHRoZSBub3JtYWwgVHVwbGUuCiAgICAgIF9UeXBlTWFwRW50cnkoCiAgICAgICAgICBtYXRjaD1fbWF0Y2hfaXNfbmFtZWRfdHVwbGUsIGFyaXR5PTAsIGJlYW1fdHlwZT10eXBlaGludHMuQW55KSwKICAgICAgX1R5cGVNYXBFbnRyeSgKICAgICAgICAgIG1hdGNoPV9tYXRjaF9pc3N1YmNsYXNzKHR5cGluZy5UdXBsZSksCiAgICAgICAgICBhcml0eT0tMSwKICAgICAgICAgIGJlYW1fdHlwZT10eXBlaGludHMuVHVwbGUpLAogICAgICBfVHlwZU1hcEVudHJ5KG1hdGNoPV9tYXRjaF9pc191bmlvbiwgYXJpdHk9LTEsIGJlYW1fdHlwZT10eXBlaGludHMuVW5pb24pLAogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX2lzc3ViY2xhc3ModHlwaW5nLkdlbmVyYXRvciksCiAgICAgICAgICBhcml0eT0zLAogICAgICAgICAgYmVhbV90eXBlPXR5cGVoaW50cy5HZW5lcmF0b3IpLAogICAgICBfVHlwZU1hcEVudHJ5KAogICAgICAgICAgbWF0Y2g9X21hdGNoX2lzc3ViY2xhc3ModHlwaW5nLkl0ZXJhdG9yKSwKICAgICAgICAgIGFyaXR5PTEsCiAgICAgICAgICBiZWFtX3R5cGU9dHlwZWhpbnRzLkl0ZXJhdG9yKSwKICBdCgogICMgRmluZCB0aGUgZmlyc3QgbWF0Y2hpbmcgZW50cnkuCiAgbWF0Y2hlZF9lbnRyeSA9IG5leHQoKGVudHJ5IGZvciBlbnRyeSBpbiB0eXBlX21hcCBpZiBlbnRyeS5tYXRjaCh0eXApKSwgTm9uZSkKICBpZiBub3QgbWF0Y2hlZF9lbnRyeToKICAgICMgUGxlYXNlIGFkZCBtaXNzaW5nIHR5cGUgc3VwcG9ydCBpZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZS4KICAgIF9MT0dHRVIuaW5mbygnVXNpbmcgQW55IGZvciB1bnN1cHBvcnRlZCB0eXBlOiAlcycsIHR5cCkKICAgIHJldHVybiB0eXBlaGludHMuQW55CgogIGFyZ3MgPSBfZ2V0X2FyZ3ModHlwKQogIGxlbl9hcmdzID0gbGVuKGFyZ3MpCiAgaWYgbGVuX2FyZ3MgPT0gMCBhbmQgbGVuX2FyZ3MgIT0gbWF0Y2hlZF9lbnRyeS5hcml0eToKICAgIGFyaXR5ID0gbWF0Y2hlZF9lbnRyeS5hcml0eQogICAgIyBIYW5kbGUgdW5zdWJzY3JpcHRlZCB0eXBlcy4KICAgIGlmIF9tYXRjaF9pc3N1YmNsYXNzKHR5cGluZy5UdXBsZSkodHlwKToKICAgICAgYXJncyA9ICh0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdUJyksIEVsbGlwc2lzKQogICAgZWxpZiBfbWF0Y2hfaXNfdW5pb24odHlwKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5zdXBwb3J0ZWQgVW5pb24gd2l0aCBubyBhcmd1bWVudHMuJykKICAgIGVsaWYgX21hdGNoX2lzc3ViY2xhc3ModHlwaW5nLkdlbmVyYXRvcikodHlwKToKICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5zdXBwb3J0ZWQgR2VuZXJhdG9yIHdpdGggbm8gYXJndW1lbnRzLicpCiAgICBlbGlmIF9tYXRjaF9pc3N1YmNsYXNzKHR5cGluZy5EaWN0KSh0eXApOgogICAgICBhcmdzID0gKHR5cGVoaW50cy5UeXBlVmFyaWFibGUoJ0tUJyksIHR5cGVoaW50cy5UeXBlVmFyaWFibGUoJ1ZUJykpCiAgICBlbGlmIChfbWF0Y2hfaXNzdWJjbGFzcyh0eXBpbmcuSXRlcmF0b3IpKHR5cCkgb3IKICAgICAgICAgIF9tYXRjaF9pc3N1YmNsYXNzKHR5cGluZy5HZW5lcmF0b3IpKHR5cCkgb3IKICAgICAgICAgIF9tYXRjaF9pc19leGFjdGx5X2l0ZXJhYmxlKHR5cCkpOgogICAgICBhcmdzID0gKHR5cGVoaW50cy5UeXBlVmFyaWFibGUoJ1RfY28nKSwgKQogICAgZWxzZToKICAgICAgYXJncyA9ICh0eXBlaGludHMuVHlwZVZhcmlhYmxlKCdUJyksICkgKiBhcml0eQogIGVsaWYgbWF0Y2hlZF9lbnRyeS5hcml0eSA9PSAtMToKICAgIGFyaXR5ID0gbGVuX2FyZ3MKICBlbHNlOgogICAgYXJpdHkgPSBtYXRjaGVkX2VudHJ5LmFyaXR5CiAgICBpZiBsZW5fYXJncyAhPSBhcml0eToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICdleHBlY3RpbmcgdHlwZSAlcyB0byBoYXZlIGFyaXR5ICVkLCBoYWQgYXJpdHkgJWQgJwogICAgICAgICAgJ2luc3RlYWQnICUgKHN0cih0eXApLCBhcml0eSwgbGVuX2FyZ3MpKQogIHR5cHMgPSBjb252ZXJ0X3RvX2JlYW1fdHlwZXMoYXJncykKICBpZiBhcml0eSA9PSAwOgogICAgIyBOdWxsYXJ5IHR5cGVzIChlLmcuIEFueSkgZG9uJ3QgYWNjZXB0IGVtcHR5IHR1cGxlcyBhcyBhcmd1bWVudHMuCiAgICByZXR1cm4gbWF0Y2hlZF9lbnRyeS5iZWFtX3R5cGUKICBlbGlmIGFyaXR5ID09IDE6CiAgICAjIFVuYXJ5IHR5cGVzIChlLmcuIFNldCkgZG9uJ3QgYWNjZXB0IDEtdHVwbGVzIGFzIGFyZ3VtZW50cwogICAgcmV0dXJuIG1hdGNoZWRfZW50cnkuYmVhbV90eXBlW3R5cHNbMF1dCiAgZWxzZToKICAgIHJldHVybiBtYXRjaGVkX2VudHJ5LmJlYW1fdHlwZVt0dXBsZSh0eXBzKV0KCgpkZWYgY29udmVydF90b19iZWFtX3R5cGVzKGFyZ3MpOgogICIiIkNvbnZlcnQgdGhlIGdpdmVuIGxpc3Qgb3IgZGljdGlvbmFyeSBvZiBhcmdzIHRvIEJlYW0gdHlwZXMuCgogIEFyZ3M6CiAgICBhcmdzOiBFaXRoZXIgYW4gaXRlcmFibGUgb2YgdHlwZXMsIG9yIGEgZGljdGlvbmFyeSB3aGVyZSB0aGUgdmFsdWVzIGFyZQogICAgdHlwZXMuCgogIFJldHVybnM6CiAgICBJZiBnaXZlbiBhbiBpdGVyYWJsZSwgYSBsaXN0IG9mIGNvbnZlcnRlZCB0eXBlcy4gSWYgZ2l2ZW4gYSBkaWN0aW9uYXJ5LAogICAgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIHNhbWUga2V5cywgYW5kIHZhbHVlcyB3aGljaCBoYXZlIGJlZW4gY29udmVydGVkLgogICIiIgogIGlmIGlzaW5zdGFuY2UoYXJncywgZGljdCk6CiAgICByZXR1cm4ge2s6IGNvbnZlcnRfdG9fYmVhbV90eXBlKHYpIGZvciBrLCB2IGluIGFyZ3MuaXRlbXMoKX0KICBlbHNlOgogICAgcmV0dXJuIFtjb252ZXJ0X3RvX2JlYW1fdHlwZSh2KSBmb3IgdiBpbiBhcmdzXQoKCmRlZiBjb252ZXJ0X3RvX3R5cGluZ190eXBlKHR5cCk6CiAgIiIiQ29udmVydHMgYSBnaXZlbiBCZWFtIHR5cGUgdG8gYSB0eXBpbmcgdHlwZS4KCiAgVGhpcyBpcyB0aGUgcmV2ZXJzZSBvZiBjb252ZXJ0X3RvX2JlYW1fdHlwZS4KCiAgQXJnczoKICAgIHR5cDogSWYgYSB0eXBlaGludHMuVHlwZUNvbnN0cmFpbnQsIHRoZSB0eXBlIHRvIGNvbnZlcnQuIE90aGVyd2lzZSwgdHlwCiAgICAgIHdpbGwgYmUgdW5jaGFuZ2VkLgoKICBSZXR1cm5zOgogICAgQ29udmVydGVkIHZlcnNpb24gb2YgdHlwLCBvciB1bmNoYW5nZWQuCgogIFJhaXNlczoKICAgIFZhbHVlRXJyb3I6IFRoZSB0eXBlIHdhcyBtYWxmb3JtZWQgb3IgY291bGQgbm90IGJlIGNvbnZlcnRlZC4KICAiIiIKICBpZiBpc2luc3RhbmNlKHR5cCwgdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSk6CiAgICAjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UsIGFzIGl0J3Mgbm90IHBhcmFtZXRlcml6ZWQgYnkgdHlwZXMuCiAgICAjIEFsc28sIGlkZW50aXR5IG11c3QgYmUgcHJlc2VydmVkIHRocm91Z2ggY29udmVyc2lvbiAoaS5lLiB0aGUgc2FtZQogICAgIyBUeXBlVmFyaWFibGUgaW5zdGFuY2UgbXVzdCBnZXQgY29udmVydGVkIGludG8gdGhlIHNhbWUgVHlwZVZhciBpbnN0YW5jZSkuCiAgICAjIEEgZ2xvYmFsIGNhY2hlIHNob3VsZCBiZSBPSyBhcyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHR5cGUgdmFyaWFibGVzCiAgICAjIGlzIGdlbmVyYWxseSBzbWFsbC4KICAgIGlmIGlkKHR5cCkgbm90IGluIF90eXBlX3Zhcl9jYWNoZToKICAgICAgbmV3X3R5cGVfdmFyaWFibGUgPSB0eXBpbmcuVHlwZVZhcih0eXAubmFtZSkKICAgICAgX3R5cGVfdmFyX2NhY2hlW2lkKHR5cCldID0gbmV3X3R5cGVfdmFyaWFibGUKICAgICAgX3R5cGVfdmFyX2NhY2hlW2lkKG5ld190eXBlX3ZhcmlhYmxlKV0gPSB0eXAKICAgIHJldHVybiBfdHlwZV92YXJfY2FjaGVbaWQodHlwKV0KICBlbGlmIG5vdCBnZXRhdHRyKHR5cCwgJ19fbW9kdWxlX18nLCBOb25lKS5lbmRzd2l0aCgndHlwZWhpbnRzJyk6CiAgICAjIE9ubHkgdHJhbnNsYXRlIHR5cGVzIGZyb20gdGhlIHR5cGVoaW50cyBtb2R1bGUuCiAgICByZXR1cm4gdHlwCgogIGlmIGlzaW5zdGFuY2UodHlwLCB0eXBlaGludHMuQW55VHlwZUNvbnN0cmFpbnQpOgogICAgcmV0dXJuIHR5cGluZy5BbnkKICBpZiBpc2luc3RhbmNlKHR5cCwgdHlwZWhpbnRzLkRpY3RDb25zdHJhaW50KToKICAgIHJldHVybiB0eXBpbmcuRGljdFtjb252ZXJ0X3RvX3R5cGluZ190eXBlKHR5cC5rZXlfdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydF90b190eXBpbmdfdHlwZSh0eXAudmFsdWVfdHlwZSldCiAgaWYgaXNpbnN0YW5jZSh0eXAsIHR5cGVoaW50cy5MaXN0Q29uc3RyYWludCk6CiAgICByZXR1cm4gdHlwaW5nLkxpc3RbY29udmVydF90b190eXBpbmdfdHlwZSh0eXAuaW5uZXJfdHlwZSldCiAgaWYgaXNpbnN0YW5jZSh0eXAsIHR5cGVoaW50cy5JdGVyYWJsZVR5cGVDb25zdHJhaW50KToKICAgIHJldHVybiB0eXBpbmcuSXRlcmFibGVbY29udmVydF90b190eXBpbmdfdHlwZSh0eXAuaW5uZXJfdHlwZSldCiAgaWYgaXNpbnN0YW5jZSh0eXAsIHR5cGVoaW50cy5VbmlvbkNvbnN0cmFpbnQpOgogICAgcmV0dXJuIHR5cGluZy5Vbmlvblt0dXBsZShjb252ZXJ0X3RvX3R5cGluZ190eXBlcyh0eXAudW5pb25fdHlwZXMpKV0KICBpZiBpc2luc3RhbmNlKHR5cCwgdHlwZWhpbnRzLlNldFR5cGVDb25zdHJhaW50KToKICAgIHJldHVybiB0eXBpbmcuU2V0W2NvbnZlcnRfdG9fdHlwaW5nX3R5cGUodHlwLmlubmVyX3R5cGUpXQogIGlmIGlzaW5zdGFuY2UodHlwLCB0eXBlaGludHMuVHVwbGVDb25zdHJhaW50KToKICAgIHJldHVybiB0eXBpbmcuVHVwbGVbdHVwbGUoY29udmVydF90b190eXBpbmdfdHlwZXModHlwLnR1cGxlX3R5cGVzKSldCiAgaWYgaXNpbnN0YW5jZSh0eXAsIHR5cGVoaW50cy5UdXBsZVNlcXVlbmNlQ29uc3RyYWludCk6CiAgICByZXR1cm4gdHlwaW5nLlR1cGxlW2NvbnZlcnRfdG9fdHlwaW5nX3R5cGUodHlwLmlubmVyX3R5cGUpLCAuLi5dCiAgaWYgaXNpbnN0YW5jZSh0eXAsIHR5cGVoaW50cy5JdGVyYXRvclR5cGVDb25zdHJhaW50KToKICAgIHJldHVybiB0eXBpbmcuSXRlcmF0b3JbY29udmVydF90b190eXBpbmdfdHlwZSh0eXAueWllbGRlZF90eXBlKV0KCiAgcmFpc2UgVmFsdWVFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgQmVhbSB0eXBlOiAlcycgJSB0eXApCgoKZGVmIGNvbnZlcnRfdG9fdHlwaW5nX3R5cGVzKGFyZ3MpOgogICIiIkNvbnZlcnQgdGhlIGdpdmVuIGxpc3Qgb3IgZGljdGlvbmFyeSBvZiBhcmdzIHRvIHR5cGluZyB0eXBlcy4KCiAgQXJnczoKICAgIGFyZ3M6IEVpdGhlciBhbiBpdGVyYWJsZSBvZiB0eXBlcywgb3IgYSBkaWN0aW9uYXJ5IHdoZXJlIHRoZSB2YWx1ZXMgYXJlCiAgICB0eXBlcy4KCiAgUmV0dXJuczoKICAgIElmIGdpdmVuIGFuIGl0ZXJhYmxlLCBhIGxpc3Qgb2YgY29udmVydGVkIHR5cGVzLiBJZiBnaXZlbiBhIGRpY3Rpb25hcnksCiAgICBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgc2FtZSBrZXlzLCBhbmQgdmFsdWVzIHdoaWNoIGhhdmUgYmVlbiBjb252ZXJ0ZWQuCiAgIiIiCiAgaWYgaXNpbnN0YW5jZShhcmdzLCBkaWN0KToKICAgIHJldHVybiB7azogY29udmVydF90b190eXBpbmdfdHlwZSh2KSBmb3IgaywgdiBpbiBhcmdzLml0ZW1zKCl9CiAgZWxzZToKICAgIHJldHVybiBbY29udmVydF90b190eXBpbmdfdHlwZSh2KSBmb3IgdiBpbiBhcmdzXQqUfZQojAlfZ2V0X2FyZ3OUalYxAQBLK0tGh5SMEF9zYWZlX2lzc3ViY2xhc3OUalYxAQBLSUteh5SMEV9tYXRjaF9pc3N1YmNsYXNzlGpWMQEAS2FLYoeUjBlfbWF0Y2hfaXNfZXhhY3RseV9tYXBwaW5nlGpWMQEAS2VLa4eUjBpfbWF0Y2hfaXNfZXhhY3RseV9pdGVyYWJsZZRqVjEBAEtuS3aHlIwVX21hdGNoX2lzX25hbWVkX3R1cGxllGpWMQEAS3lLfIeUjBJfbWF0Y2hfaXNfb3B0aW9uYWyUalYxAQBLf0uBh5SMFWV4dHJhY3Rfb3B0aW9uYWxfdHlwZZRqVjEBAEuES4yHlIwPX21hdGNoX2lzX3VuaW9ulGpWMQEAS49Ln4eUjAZpc19BbnmUalYxAQBLokujh5SMC2lzX25ld190eXBllGpWMQEAS6ZLp4eUjBRjb252ZXJ0X3RvX2JlYW1fdHlwZZRqVjEBAEuvTSIBh5SMFWNvbnZlcnRfdG9fYmVhbV90eXBlc5RqVjEBAE0lAU0zAYeUjBZjb252ZXJ0X3RvX3R5cGluZ190eXBllGpWMQEATTYBTWgBh5SMF2NvbnZlcnRfdG9fdHlwaW5nX3R5cGVzlGpWMQEATWsBTXkBh5R1fZQojBVleHRyYWN0X29wdGlvbmFsX3R5cGWUao0DAACMBmlzX0FueZRqjQMAAIwLaXNfbmV3X3R5cGWUao0DAACMFGNvbnZlcnRfdG9fYmVhbV90eXBllGqNAwAAjBVjb252ZXJ0X3RvX2JlYW1fdHlwZXOUao0DAACMFmNvbnZlcnRfdG9fdHlwaW5nX3R5cGWUao0DAACMF2NvbnZlcnRfdG9fdHlwaW5nX3R5cGVzlGqNAwAAdYwvYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHmUdJSMHWFwYWNoZV9iZWFtLnR5cGVoaW50cy5vcGNvZGVzlChYCS0AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRGVmaW5lcyB0aGUgYWN0aW9ucyB2YXJpb3VzIGJ5dGVjb2RlcyBoYXZlIG9uIHRoZSBmcmFtZS4KCkVhY2ggZnVuY3Rpb24gaGVyZSBjb3JyZXNwb25kcyB0byBhIGJ5dGVjb2RlIGRvY3VtZW50ZWQgaW4KaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2Rpcy5odG1sIG9yCmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9kaXMuaHRtbC4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgKG11dGFibGUpCkZyYW1lU3RhdGUgb2JqZWN0LCB0aGUgc2Vjb25kIHRoZSBpbnRlZ2VyIG9wY29kZSBhcmd1bWVudC4KCkJ5dGVjb2RlcyB3aXRoIG1vcmUgY29tcGxpY2F0ZWQgYmVoYXZpb3IgKGUuZy4gbW9kaWZ5aW5nIHRoZSBwcm9ncmFtIGNvdW50ZXIpCmFyZSBoYW5kbGVkIGlubGluZSByYXRoZXIgdGhhbiBoZXJlLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBpbnNwZWN0CmltcG9ydCBsb2dnaW5nCmltcG9ydCBzeXMKaW1wb3J0IHR5cGVzCmZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSBpbXBvcnQgQm91bmRNZXRob2QKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UgaW1wb3J0IENvbnN0CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlIGltcG9ydCBlbGVtZW50X3R5cGUKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHJpdmlhbF9pbmZlcmVuY2UgaW1wb3J0IHVuaW9uCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgQW55CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgRGljdApmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IEl0ZXJhYmxlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgTGlzdApmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IFR1cGxlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgVW5pb24KCgpkZWYgcG9wX29uZShzdGF0ZSwgdW51c2VkX2FyZyk6CiAgZGVsIHN0YXRlLnN0YWNrWy0xOl0KCgpkZWYgcG9wX3R3byhzdGF0ZSwgdW51c2VkX2FyZyk6CiAgZGVsIHN0YXRlLnN0YWNrWy0yOl0KCgpkZWYgcG9wX3RocmVlKHN0YXRlLCB1bnVzZWRfYXJnKToKICBkZWwgc3RhdGUuc3RhY2tbLTM6XQoKCmRlZiBwdXNoX3ZhbHVlKHYpOgogIGRlZiBwdXNoZXIoc3RhdGUsIHVudXNlZF9hcmcpOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKHYpCgogIHJldHVybiBwdXNoZXIKCgpkZWYgbm9wKHVudXNlZF9zdGF0ZSwgdW51c2VkX2FyZyk6CiAgcGFzcwoKCmRlZiBwb3BfdG9wKHN0YXRlLCB1bnVzZWRfYXJnKToKICBzdGF0ZS5zdGFjay5wb3AoKQoKCmRlZiByb3RfbihzdGF0ZSwgbik6CiAgc3RhdGUuc3RhY2tbLW46XSA9IFtzdGF0ZS5zdGFja1stMV1dICsgc3RhdGUuc3RhY2tbLW46LTFdCgoKZGVmIHJvdF90d28oc3RhdGUsIHVudXNlZF9hcmcpOgogIHJvdF9uKHN0YXRlLCAyKQoKCmRlZiByb3RfdGhyZWUoc3RhdGUsIHVudXNlZF9hcmcpOgogIHJvdF9uKHN0YXRlLCAzKQoKCmRlZiByb3RfZm91cihzdGF0ZSwgdW51c2VkX2FyZyk6CiAgcm90X24oc3RhdGUsIDQpCgoKZGVmIGR1cF90b3Aoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrLmFwcGVuZChzdGF0ZS5zdGFja1stMV0pCgoKZGVmIHVuYXJ5KHN0YXRlLCB1bnVzZWRfYXJnKToKICBzdGF0ZS5zdGFja1stMV0gPSBDb25zdC51bndyYXAoc3RhdGUuc3RhY2tbLTFdKQoKCnVuYXJ5X3Bvc2l0aXZlID0gdW5hcnlfbmVnYXRpdmUgPSB1bmFyeV9pbnZlcnQgPSB1bmFyeQoKCmRlZiB1bmFyeV9ub3Qoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrWy0xXSA9IGJvb2wKCgpkZWYgdW5hcnlfY29udmVydChzdGF0ZSwgdW51c2VkX2FyZyk6CiAgc3RhdGUuc3RhY2tbLTFdID0gc3RyCgoKZGVmIGdldF9pdGVyKHN0YXRlLCB1bnVzZWRfYXJnKToKICBzdGF0ZS5zdGFjay5hcHBlbmQoSXRlcmFibGVbZWxlbWVudF90eXBlKHN0YXRlLnN0YWNrLnBvcCgpKV0pCgoKZGVmIHN5bW1ldHJpY19iaW5hcnlfb3Aoc3RhdGUsIHVudXNlZF9hcmcpOgogICMgVE9ETyhyb2JlcnR3Yik6IFRoaXMgbWF5IG5vdCBiZSBlbnRpcmVseSBjb3JyZWN0Li4uCiAgYiwgYSA9IHN0YXRlLnN0YWNrLnBvcCgpLCBzdGF0ZS5zdGFjay5wb3AoKQogIGlmIGEgPT0gYjoKICAgIHN0YXRlLnN0YWNrLmFwcGVuZChhKQogIGVsaWYgdHlwZShhKSA9PSB0eXBlKGIpIGFuZCBpc2luc3RhbmNlKGEsIHR5cGVoaW50cy5TZXF1ZW5jZVR5cGVDb25zdHJhaW50KToKICAgIHN0YXRlLnN0YWNrLmFwcGVuZCh0eXBlKGEpKHVuaW9uKGVsZW1lbnRfdHlwZShhKSwgZWxlbWVudF90eXBlKGIpKSkpCiAgZWxzZToKICAgIHN0YXRlLnN0YWNrLmFwcGVuZChBbnkpCgoKIyBFeGNlcHQgZm9yIGludCAqKiAtaW50CmJpbmFyeV9wb3dlciA9IGlucGxhY2VfcG93ZXIgPSBzeW1tZXRyaWNfYmluYXJ5X29wCmJpbmFyeV9tdWx0aXBseSA9IGlucGxhY2VfbXVsdGlwbHkgPSBzeW1tZXRyaWNfYmluYXJ5X29wCmJpbmFyeV9kaXZpZGUgPSBpbnBsYWNlX2RpdmlkZSA9IHN5bW1ldHJpY19iaW5hcnlfb3AKYmluYXJ5X2Zsb29yX2RpdmlkZSA9IGlucGxhY2VfZmxvb3JfZGl2aWRlID0gc3ltbWV0cmljX2JpbmFyeV9vcAoKCmRlZiBiaW5hcnlfdHJ1ZV9kaXZpZGUoc3RhdGUsIHVudXNlZF9hcmcpOgogIHUgPSB1bmlvbihzdGF0ZS5zdGFjay5wb3AoKSwgc3RhdGUuc3RhY2sucG9wKQogIGlmIHUgPT0gaW50OgogICAgc3RhdGUuc3RhY2suYXBwZW5kKGZsb2F0KQogIGVsc2U6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQodSkKCgppbnBsYWNlX3RydWVfZGl2aWRlID0gYmluYXJ5X3RydWVfZGl2aWRlCgpiaW5hcnlfbW9kdWxvID0gaW5wbGFjZV9tb2R1bG8gPSBzeW1tZXRyaWNfYmluYXJ5X29wCiMgVE9ETyhyb2JlcnR3Yik6IFR1cGxlIGFkZC4KYmluYXJ5X2FkZCA9IGlucGxhY2VfYWRkID0gc3ltbWV0cmljX2JpbmFyeV9vcApiaW5hcnlfc3VidHJhY3QgPSBpbnBsYWNlX3N1YnRyYWN0ID0gc3ltbWV0cmljX2JpbmFyeV9vcAoKCmRlZiBiaW5hcnlfc3Vic2NyKHN0YXRlLCB1bnVzZWRfYXJnKToKICBpbmRleCA9IHN0YXRlLnN0YWNrLnBvcCgpCiAgYmFzZSA9IENvbnN0LnVud3JhcChzdGF0ZS5zdGFjay5wb3AoKSkKICBpZiBiYXNlIGluIChzdHIsIHVuaWNvZGUpOgogICAgb3V0ID0gYmFzZQogIGVsaWYgKGlzaW5zdGFuY2UoaW5kZXgsIENvbnN0KSBhbmQgaXNpbnN0YW5jZShpbmRleC52YWx1ZSwgaW50KSBhbmQKICAgICAgICBpc2luc3RhbmNlKGJhc2UsIHR5cGVoaW50cy5JbmRleGFibGVUeXBlQ29uc3RyYWludCkpOgogICAgdHJ5OgogICAgICBvdXQgPSBiYXNlLl9jb25zdHJhaW50X2Zvcl9pbmRleChpbmRleC52YWx1ZSkKICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICBvdXQgPSBlbGVtZW50X3R5cGUoYmFzZSkKICBlbGlmIGluZGV4ID09IHNsaWNlIGFuZCBpc2luc3RhbmNlKGJhc2UsIHR5cGVoaW50cy5JbmRleGFibGVUeXBlQ29uc3RyYWludCk6CiAgICBvdXQgPSBiYXNlCiAgZWxzZToKICAgIG91dCA9IGVsZW1lbnRfdHlwZShiYXNlKQogIHN0YXRlLnN0YWNrLmFwcGVuZChvdXQpCgoKIyBBcyBmYXIgYXMgdHlwZXMgYXJlIGNvbmNlcm5lZC4KYmluYXJ5X2xzaGlmdCA9IGlucGxhY2VfbHNoaWZ0ID0gYmluYXJ5X3JzaGlmdCA9IGlucGxhY2VfcnNoaWZ0ID0gcG9wX3RvcAoKYmluYXJ5X2FuZCA9IGlucGxhY2VfYW5kID0gc3ltbWV0cmljX2JpbmFyeV9vcApiaW5hcnlfeG9yID0gaW5wbGFjZV94b3IgPSBzeW1tZXRyaWNfYmluYXJ5X29wCmJpbmFyeV9vciA9IGlucGFsY2Vfb3IgPSBzeW1tZXRyaWNfYmluYXJ5X29wCgoKZGVmIHN0b3JlX3N1YnNjcih1bnVzZWRfc3RhdGUsIHVudXNlZF9hcmdzKToKICAjIFRPRE8ocm9iZXJ0d2IpOiBVcGRhdGUgZWxlbWVudC92YWx1ZSB0eXBlIG9mIGl0ZXJhYmxlL2RpY3QuCiAgcGFzcwoKCnByaW50X2l0ZW0gPSBwb3BfdG9wCnByaW50X25ld2xpbmUgPSBub3AKCgpkZWYgbGlzdF9hcHBlbmQoc3RhdGUsIGFyZyk6CiAgbmV3X2VsZW1lbnRfdHlwZSA9IENvbnN0LnVud3JhcChzdGF0ZS5zdGFjay5wb3AoKSkKICBzdGF0ZS5zdGFja1stYXJnXSA9IExpc3RbVW5pb25bZWxlbWVudF90eXBlKHN0YXRlLnN0YWNrWy1hcmddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2VsZW1lbnRfdHlwZV1dCgoKZGVmIG1hcF9hZGQoc3RhdGUsIGFyZyk6CiAgbmV3X2tleV90eXBlID0gQ29uc3QudW53cmFwKHN0YXRlLnN0YWNrLnBvcCgpKQogIG5ld192YWx1ZV90eXBlID0gQ29uc3QudW53cmFwKHN0YXRlLnN0YWNrLnBvcCgpKQogIHN0YXRlLnN0YWNrWy1hcmddID0gRGljdFtVbmlvbltzdGF0ZS5zdGFja1stYXJnXS5rZXlfdHlwZSwgbmV3X2tleV90eXBlXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pb25bc3RhdGUuc3RhY2tbLWFyZ10udmFsdWVfdHlwZSwgbmV3X3ZhbHVlX3R5cGVdXQoKCmxvYWRfbG9jYWxzID0gcHVzaF92YWx1ZShEaWN0W3N0ciwgQW55XSkKZXhlY19zdG10ID0gcG9wX3RocmVlCmJ1aWxkX2NsYXNzID0gcG9wX3RocmVlCgoKZGVmIHVucGFja19zZXF1ZW5jZShzdGF0ZSwgYXJnKToKICB0ID0gc3RhdGUuc3RhY2sucG9wKCkKICBpZiBpc2luc3RhbmNlKHQsIENvbnN0KToKICAgIHRyeToKICAgICAgdW5wYWNrZWQgPSBbQ29uc3QodGkpIGZvciB0aSBpbiB0LnZhbHVlXQogICAgICBpZiBsZW4odW5wYWNrZWQpICE9IGFyZzoKICAgICAgICB1bnBhY2tlZCA9IFtBbnldICogYXJnCiAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICB1bnBhY2tlZCA9IFtBbnldICogYXJnCiAgZWxpZiAoaXNpbnN0YW5jZSh0LCB0eXBlaGludHMuVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludCkgYW5kCiAgICAgICAgbGVuKHQudHVwbGVfdHlwZXMpID09IGFyZyk6CiAgICB1bnBhY2tlZCA9IGxpc3QodC50dXBsZV90eXBlcykKICBlbHNlOgogICAgdW5wYWNrZWQgPSBbZWxlbWVudF90eXBlKHQpXSAqIGFyZwogIHN0YXRlLnN0YWNrICs9IHJldmVyc2VkKHVucGFja2VkKQoKCmRlZiBkdXBfdG9weChzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFjayArPSBzdGF0ZVstYXJnOl0KCgpzdG9yZV9hdHRyID0gcG9wX3RvcApkZWxldGVfYXR0ciA9IG5vcApzdG9yZV9nbG9iYWwgPSBwb3BfdG9wCmRlbGV0ZV9nbG9iYWwgPSBub3AKCgpkZWYgbG9hZF9jb25zdChzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFjay5hcHBlbmQoc3RhdGUuY29uc3RfdHlwZShhcmcpKQoKCmxvYWRfbmFtZSA9IHB1c2hfdmFsdWUoQW55KQoKCmRlZiBidWlsZF90dXBsZShzdGF0ZSwgYXJnKToKICBpZiBhcmcgPT0gMDoKICAgIHN0YXRlLnN0YWNrLmFwcGVuZChUdXBsZVsoKV0pCiAgZWxzZToKICAgIHN0YXRlLnN0YWNrWy1hcmc6XSA9IFtUdXBsZVtbQ29uc3QudW53cmFwKHQpIGZvciB0IGluIHN0YXRlLnN0YWNrWy1hcmc6XV1dXQoKCmRlZiBidWlsZF9saXN0KHN0YXRlLCBhcmcpOgogIGlmIGFyZyA9PSAwOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKExpc3RbVW5pb25bKCldXSkKICBlbHNlOgogICAgc3RhdGUuc3RhY2tbLWFyZzpdID0gW0xpc3RbcmVkdWNlKHVuaW9uLCBzdGF0ZS5zdGFja1stYXJnOl0sIFVuaW9uWygpXSldXQoKCiMgQSBEaWN0W1VuaW9uW10sIFVuaW9uW11dIGlzIHRoZSB0eXBlIG9mIGFuIGVtcHR5IGRpY3QuCmRlZiBidWlsZF9tYXAoc3RhdGUsIHVudXNlZF9hcmcpOgogIHN0YXRlLnN0YWNrLmFwcGVuZChEaWN0W1VuaW9uWygpXSwgVW5pb25bKCldXSkKCgpkZWYgbG9hZF9hdHRyKHN0YXRlLCBhcmcpOgogICIiIlJlcGxhY2VzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBUT1MsIHdpdGgKICBnZXRhdHRyKFRPUywgY29fbmFtZXNbYXJnXSkKICAiIiIKICBvID0gc3RhdGUuc3RhY2sucG9wKCkKICBuYW1lID0gc3RhdGUuZ2V0X25hbWUoYXJnKQogIGlmIGlzaW5zdGFuY2UobywgQ29uc3QpIGFuZCBoYXNhdHRyKG8udmFsdWUsIG5hbWUpOgogICAgc3RhdGUuc3RhY2suYXBwZW5kKENvbnN0KGdldGF0dHIoby52YWx1ZSwgbmFtZSkpKQogIGVsaWYgKGluc3BlY3QuaXNjbGFzcyhvKSBhbmQKICAgICAgICBpc2luc3RhbmNlKGdldGF0dHIobywgbmFtZSwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAodHlwZXMuTWV0aG9kVHlwZSwgdHlwZXMuRnVuY3Rpb25UeXBlKSkpOgogICAgIyBUT0RPKGx1a2Utemh1KTogU3VwcG9ydCBvdGhlciBjYWxsYWJsZSBvYmplY3RzCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDI6CiAgICAgIGZ1bmMgPSBnZXRhdHRyKG8sIG5hbWUpLl9fZnVuY19fCiAgICBlbHNlOgogICAgICBmdW5jID0gZ2V0YXR0cihvLCBuYW1lKSAgIyBQeXRob24gMyBoYXMgbm8gdW5ib3VuZCBtZXRob2RzCiAgICBzdGF0ZS5zdGFjay5hcHBlbmQoQ29uc3QoQm91bmRNZXRob2QoZnVuYywgbykpKQogIGVsc2U6CiAgICBzdGF0ZS5zdGFjay5hcHBlbmQoQW55KQoKCmRlZiBsb2FkX21ldGhvZChzdGF0ZSwgYXJnKToKICAiIiJMaWtlIGxvYWRfYXR0ci4gUmVwbGFjZXMgVE9TIG9iamVjdCB3aXRoIG1ldGhvZCBhbmQgVE9TLiIiIgogIG8gPSBzdGF0ZS5zdGFjay5wb3AoKQogIG5hbWUgPSBzdGF0ZS5nZXRfbmFtZShhcmcpCiAgaWYgaXNpbnN0YW5jZShvLCBDb25zdCk6CiAgICBtZXRob2QgPSBDb25zdChnZXRhdHRyKG8udmFsdWUsIG5hbWUpKQogIGVsaWYgaXNpbnN0YW5jZShvLCB0eXBlaGludHMuQW55VHlwZUNvbnN0cmFpbnQpOgogICAgbWV0aG9kID0gdHlwZWhpbnRzLkFueQogIGVsc2U6CiAgICBtZXRob2QgPSBDb25zdChCb3VuZE1ldGhvZChnZXRhdHRyKG8sIG5hbWUpLCBvKSkKCiAgc3RhdGUuc3RhY2suYXBwZW5kKG1ldGhvZCkKCgpkZWYgY29tcGFyZV9vcChzdGF0ZSwgdW51c2VkX2FyZyk6CiAgIyBDb3VsZCByZWFsbHkgYmUgYW55dGhpbmcuLi4KICBzdGF0ZS5zdGFja1stMjpdID0gW2Jvb2xdCgoKZGVmIGltcG9ydF9uYW1lKHN0YXRlLCB1bnVzZWRfYXJnKToKICBzdGF0ZS5zdGFja1stMjpdID0gW0FueV0KCgppbXBvcnRfZnJvbSA9IHB1c2hfdmFsdWUoQW55KQoKCmRlZiBsb2FkX2dsb2JhbChzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFjay5hcHBlbmQoc3RhdGUuZ2V0X2dsb2JhbChhcmcpKQoKCnN0b3JlX21hcCA9IHBvcF90d28KCgpkZWYgbG9hZF9mYXN0KHN0YXRlLCBhcmcpOgogIHN0YXRlLnN0YWNrLmFwcGVuZChzdGF0ZS52YXJzW2FyZ10pCgoKZGVmIHN0b3JlX2Zhc3Qoc3RhdGUsIGFyZyk6CiAgc3RhdGUudmFyc1thcmddID0gc3RhdGUuc3RhY2sucG9wKCkKCgpkZWYgZGVsZXRlX2Zhc3Qoc3RhdGUsIGFyZyk6CiAgc3RhdGUudmFyc1thcmddID0gQW55ICAjIHJlYWxseSBhbiBlcnJvcgoKCmRlZiBsb2FkX2Nsb3N1cmUoc3RhdGUsIGFyZyk6CiAgc3RhdGUuc3RhY2suYXBwZW5kKHN0YXRlLmdldF9jbG9zdXJlKGFyZykpCgoKZGVmIGxvYWRfZGVyZWYoc3RhdGUsIGFyZyk6CiAgc3RhdGUuc3RhY2suYXBwZW5kKHN0YXRlLmNsb3N1cmVfdHlwZShhcmcpKQoKCmRlZiBtYWtlX2Z1bmN0aW9uKHN0YXRlLCBhcmcpOgogICIiIkNyZWF0ZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBhcmd1bWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCiAgIiIiCiAgIyBUT0RPKGx1a2Utemh1KTogSGFuZGxlIGRlZmF1bHQgYXJndW1lbnQgdHlwZXMKICBnbG9iYWxzID0gc3RhdGUuZi5fX2dsb2JhbHNfXyAgIyBJbmhlcml0cyBnbG9iYWxzIGZyb20gdGhlIGN1cnJlbnQgZnJhbWUKICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDI6CiAgICBmdW5jX2NvZGUgPSBzdGF0ZS5zdGFja1stMV0udmFsdWUKICAgIGZ1bmMgPSB0eXBlcy5GdW5jdGlvblR5cGUoZnVuY19jb2RlLCBnbG9iYWxzKQogICAgIyBhcmdjIGlzIHRoZSBudW1iZXIgb2YgZGVmYXVsdCBwYXJhbWV0ZXJzLiBJZ25vcmVkIGhlcmUuCiAgICBwb3BfY291bnQgPSAxICsgYXJnCiAgZWxzZTogICMgUHl0aG9uIDMueAogICAgZnVuY19uYW1lID0gc3RhdGUuc3RhY2tbLTFdLnZhbHVlCiAgICBmdW5jX2NvZGUgPSBzdGF0ZS5zdGFja1stMl0udmFsdWUKICAgIHBvcF9jb3VudCA9IDIKICAgIGNsb3N1cmUgPSBOb25lCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzoyXSA9PSAoMywgNSk6CiAgICAgICMgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy41L2xpYnJhcnkvZGlzLmh0bWwjb3Bjb2RlLU1BS0VfRlVOQ1RJT04KICAgICAgbnVtX2RlZmF1bHRfcG9zX2FyZ3MgPSAoYXJnICYgMHhmZikKICAgICAgbnVtX2RlZmF1bHRfa3dvbmx5X2FyZ3MgPSAoKGFyZyA+PiA4KSAmIDB4ZmYpCiAgICAgIG51bV9hbm5vdGF0aW9ucyA9ICgoYXJnID4+IDE2KSAmIDB4N2ZmZikKICAgICAgcG9wX2NvdW50ICs9ICgKICAgICAgICAgIG51bV9kZWZhdWx0X3Bvc19hcmdzICsgMiAqIG51bV9kZWZhdWx0X2t3b25seV9hcmdzICsgbnVtX2Fubm90YXRpb25zICsKICAgICAgICAgIG51bV9hbm5vdGF0aW9ucyA+IDApCiAgICBlbGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDYpOgogICAgICAjIGFyZyBjb250YWlucyBmbGFncywgd2l0aCBjb3JyZXNwb25kaW5nIHN0YWNrIHZhbHVlcyBpZiBwb3NpdGl2ZS4KICAgICAgIyBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjYvbGlicmFyeS9kaXMuaHRtbCNvcGNvZGUtTUFLRV9GVU5DVElPTgogICAgICBwb3BfY291bnQgKz0gYmluKGFyZykuY291bnQoJzEnKQogICAgICBpZiBhcmcgJiAweDA4OgogICAgICAgICMgQ29udmVydCB0eXBlcyBpbiBUdXBsZSBjb25zdHJhaW50IHRvIGEgdHVwbGUgb2YgQ1B5dGhvbiBjZWxscy4KICAgICAgICAjIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NDY3MDI5NQogICAgICAgIGNsb3N1cmUgPSB0dXBsZSgobGFtYmRhIF86IGxhbWJkYTogXykodCkuX19jbG9zdXJlX19bMF0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gc3RhdGUuc3RhY2tbLTNdLnR1cGxlX3R5cGVzKQoKICAgIGZ1bmMgPSB0eXBlcy5GdW5jdGlvblR5cGUoCiAgICAgICAgZnVuY19jb2RlLCBnbG9iYWxzLCBuYW1lPWZ1bmNfbmFtZSwgY2xvc3VyZT1jbG9zdXJlKQoKICBhc3NlcnQgcG9wX2NvdW50IDw9IGxlbihzdGF0ZS5zdGFjaykKICBzdGF0ZS5zdGFja1stcG9wX2NvdW50Ol0gPSBbQ29uc3QoZnVuYyldCgoKZGVmIG1ha2VfY2xvc3VyZShzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFja1stYXJnIC0gMjpdID0gW0FueV0gICMgYSBjYWxsYWJsZQoKCmRlZiBidWlsZF9zbGljZShzdGF0ZSwgYXJnKToKICBzdGF0ZS5zdGFja1stYXJnOl0gPSBbc2xpY2VdICAjIGEgc2xpY2Ugb2JqZWN0CgoKZGVmIF91bnBhY2tfbGlzdHMoc3RhdGUsIGFyZyk6CiAgIiIiRXh0cmFjdCBpbm5lciB0eXBlcyBvZiBMaXN0cyBhbmQgVHVwbGVzLgoKICBQb3BzIGFyZyBjb3VudCBpdGVtcyBmcm9tIHRoZSBzdGFjaywgY29uY2F0ZW5hdGVzIHRoZWlyIGlubmVyIHR5cGVzIGludG8gMQogIGxpc3QsIGFuZCByZXR1cm5zIHRoYXQgbGlzdC4KICBFeGFtcGxlOiBpZiBzdGFja1stYXJnOl0gPT0gW1tpMSwgaTJdLCBbaTNdXSwgdGhlIG91dHB1dCBpcyBbaTEsIGkyLCBpM10KICAiIiIKICB0eXBlcyA9IFtdCiAgZm9yIGkgaW4gcmFuZ2UoYXJnLCAwLCAtMSk6CiAgICB0eXBlX2NvbnN0cmFpbnQgPSBzdGF0ZS5zdGFja1staV0KICAgIGlmIGlzaW5zdGFuY2UodHlwZV9jb25zdHJhaW50LCB0eXBlaGludHMuSW5kZXhhYmxlVHlwZUNvbnN0cmFpbnQpOgogICAgICB0eXBlcy5leHRlbmQodHlwZV9jb25zdHJhaW50Ll9pbm5lcl90eXBlcygpKQogICAgZWxzZToKICAgICAgbG9nZ2luZy5kZWJ1ZygnVW5oYW5kbGVkIHR5cGVfY29uc3RyYWludDogJXInLCB0eXBlX2NvbnN0cmFpbnQpCiAgICAgIHR5cGVzLmFwcGVuZCh0eXBlaGludHMuQW55KQogIHN0YXRlLnN0YWNrWy1hcmc6XSA9IFtdCiAgcmV0dXJuIHR5cGVzCgoKZGVmIGJ1aWxkX2xpc3RfdW5wYWNrKHN0YXRlLCBhcmcpOgogICIiIkpvaW5zIGFyZyBjb3VudCBpdGVyYWJsZXMgZnJvbSB0aGUgc3RhY2sgaW50byBhIHNpbmdsZSBsaXN0LiIiIgogIHN0YXRlLnN0YWNrLmFwcGVuZChMaXN0W1VuaW9uW191bnBhY2tfbGlzdHMoc3RhdGUsIGFyZyldXSkKCgpkZWYgYnVpbGRfdHVwbGVfdW5wYWNrKHN0YXRlLCBhcmcpOgogICIiIkpvaW5zIGFyZyBjb3VudCBpdGVyYWJsZXMgZnJvbSB0aGUgc3RhY2sgaW50byBhIHNpbmdsZSB0dXBsZS4iIiIKICBzdGF0ZS5zdGFjay5hcHBlbmQoVHVwbGVbX3VucGFja19saXN0cyhzdGF0ZSwgYXJnKV0pCgoKZGVmIGJ1aWxkX3R1cGxlX3VucGFja193aXRoX2NhbGwoc3RhdGUsIGFyZyk6CiAgIiIiU2FtZSBhcyBidWlsZF90dXBsZV91bnBhY2ssIHdpdGggYW4gZXh0cmEgZm4gYXJndW1lbnQgYXQgdGhlIGJvdHRvbSBvZiB0aGUKICBzdGFjaywgd2hpY2ggcmVtYWlucyB1bnRvdWNoZWQuIiIiCiAgYnVpbGRfdHVwbGVfdW5wYWNrKHN0YXRlLCBhcmcpCpSV1ZYBAAAAAAB9lCiMB3BvcF9vbmWUalYxAQBLN0s4h5SMB3BvcF90d2+UalYxAQBLO0s8h5SMCXBvcF90aHJlZZRqVjEBAEs/S0CHlIwKcHVzaF92YWx1ZZRqVjEBAEtDS0eHlIwDbm9wlGpWMQEAS0pLS4eUjAdwb3BfdG9wlGpWMQEAS05LT4eUjAVyb3RfbpRqVjEBAEtSS1OHlIwHcm90X3R3b5RqVjEBAEtWS1eHlIwJcm90X3RocmVllGpWMQEAS1pLW4eUjAhyb3RfZm91cpRqVjEBAEteS1+HlIwHZHVwX3RvcJRqVjEBAEtiS2OHlIwFdW5hcnmUalYxAQBLZktnh5SMCXVuYXJ5X25vdJRqVjEBAEttS26HlIwNdW5hcnlfY29udmVydJRqVjEBAEtxS3KHlIwIZ2V0X2l0ZXKUalYxAQBLdUt2h5SME3N5bW1ldHJpY19iaW5hcnlfb3CUalYxAQBLeUuBh5SMEmJpbmFyeV90cnVlX2RpdmlkZZRqVjEBAEuLS5CHlIwNYmluYXJ5X3N1YnNjcpRqVjEBAEubS6qHlIwMc3RvcmVfc3Vic2NylGpWMQEAS7VLt4eUjAtsaXN0X2FwcGVuZJRqVjEBAEu+S8GHlIwHbWFwX2FkZJRqVjEBAEvES8iHlIwPdW5wYWNrX3NlcXVlbmNllGpWMQEAS9BL3oeUjAhkdXBfdG9weJRqVjEBAEvhS+KHlIwKbG9hZF9jb25zdJRqVjEBAEvrS+yHlIwLYnVpbGRfdHVwbGWUalYxAQBL8kv2h5SMCmJ1aWxkX2xpc3SUalYxAQBL+Uv9h5SMCWJ1aWxkX21hcJRqVjEBAE0BAU0CAYeUjAlsb2FkX2F0dHKUalYxAQBNBQFNFwGHlIwLbG9hZF9tZXRob2SUalYxAQBNGgFNJQGHlIwKY29tcGFyZV9vcJRqVjEBAE0oAU0qAYeUjAtpbXBvcnRfbmFtZZRqVjEBAE0tAU0uAYeUjAtsb2FkX2dsb2JhbJRqVjEBAE00AU01AYeUjAlsb2FkX2Zhc3SUalYxAQBNOwFNPAGHlIwKc3RvcmVfZmFzdJRqVjEBAE0/AU1AAYeUjAtkZWxldGVfZmFzdJRqVjEBAE1DAU1EAYeUjAxsb2FkX2Nsb3N1cmWUalYxAQBNRwFNSAGHlIwKbG9hZF9kZXJlZpRqVjEBAE1LAU1MAYeUjA1tYWtlX2Z1bmN0aW9ulGpWMQEATU8BTXQBh5SMDG1ha2VfY2xvc3VyZZRqVjEBAE13AU14AYeUjAtidWlsZF9zbGljZZRqVjEBAE17AU18AYeUjA1fdW5wYWNrX2xpc3RzlGpWMQEATX8BTY8Bh5SMEWJ1aWxkX2xpc3RfdW5wYWNrlGpWMQEATZIBTZQBh5SMEmJ1aWxkX3R1cGxlX3VucGFja5RqVjEBAE2XAU2ZAYeUjBxidWlsZF90dXBsZV91bnBhY2tfd2l0aF9jYWxslGpWMQEATZwBTZ8Bh5R1fZQojAdwb3Bfb25llGrnAwAAjAdwb3BfdHdvlGrnAwAAjAlwb3BfdGhyZWWUaucDAACMCnB1c2hfdmFsdWWUaucDAACMA25vcJRq5wMAAIwHcG9wX3RvcJRq5wMAAIwFcm90X26UaucDAACMB3JvdF90d2+UaucDAACMCXJvdF90aHJlZZRq5wMAAIwIcm90X2ZvdXKUaucDAACMB2R1cF90b3CUaucDAACMBXVuYXJ5lGrnAwAAjAl1bmFyeV9ub3SUaucDAACMDXVuYXJ5X2NvbnZlcnSUaucDAACMCGdldF9pdGVylGrnAwAAjBNzeW1tZXRyaWNfYmluYXJ5X29wlGrnAwAAjBJiaW5hcnlfdHJ1ZV9kaXZpZGWUaucDAACMDWJpbmFyeV9zdWJzY3KUaucDAACMDHN0b3JlX3N1YnNjcpRq5wMAAIwLbGlzdF9hcHBlbmSUaucDAACMB21hcF9hZGSUaucDAACMD3VucGFja19zZXF1ZW5jZZRq5wMAAIwIZHVwX3RvcHiUaucDAACMCmxvYWRfY29uc3SUaucDAACMC2J1aWxkX3R1cGxllGrnAwAAjApidWlsZF9saXN0lGrnAwAAjAlidWlsZF9tYXCUaucDAACMCWxvYWRfYXR0cpRq5wMAAIwLbG9hZF9tZXRob2SUaucDAACMCmNvbXBhcmVfb3CUaucDAACMC2ltcG9ydF9uYW1llGrnAwAAjAtsb2FkX2dsb2JhbJRq5wMAAIwJbG9hZF9mYXN0lGrnAwAAjApzdG9yZV9mYXN0lGrnAwAAjAtkZWxldGVfZmFzdJRq5wMAAIwMbG9hZF9jbG9zdXJllGrnAwAAjApsb2FkX2RlcmVmlGrnAwAAjA1tYWtlX2Z1bmN0aW9ulGrnAwAAjAxtYWtlX2Nsb3N1cmWUaucDAACMC2J1aWxkX3NsaWNllGrnAwAAjBFidWlsZF9saXN0X3VucGFja5Rq5wMAAIwSYnVpbGRfdHVwbGVfdW5wYWNrlGrnAwAAjBxidWlsZF90dXBsZV91bnBhY2tfd2l0aF9jYWxslGrnAwAAdYwdYXBhY2hlX2JlYW0udHlwZWhpbnRzLm9wY29kZXOUdJSMHWFwYWNoZV9iZWFtLnR5cGVoaW50cy5zY2hlbWFzlChY6B0AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiIFN1cHBvcnQgZm9yIG1hcHBpbmcgcHl0aG9uIHR5cGVzIHRvIHByb3RvIFNjaGVtYXMgYW5kIGJhY2sgYWdhaW4uCgpQeXRob24gICAgICAgICAgICAgIFNjaGVtYQpucC5pbnQ4ICAgICA8LS0tLS0+IEJZVEUKbnAuaW50MTYgICAgPC0tLS0tPiBJTlQxNgpucC5pbnQzMiAgICA8LS0tLS0+IElOVDMyCm5wLmludDY0ICAgIDwtLS0tLT4gSU5UNjQKaW50ICAgICAgICAgLS0tLwpucC5mbG9hdDMyICA8LS0tLS0+IEZMT0FUCm5wLmZsb2F0NjQgIDwtLS0tLT4gRE9VQkxFCmZsb2F0ICAgICAgIC0tLS8KYm9vbCAgICAgICAgPC0tLS0tPiBCT09MRUFOCgpUaGUgbWFwcGluZ3MgZm9yIFNUUklORyBhbmQgQllURVMgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHB5dGhvbiAyIGFuZCBweXRob24gMywKYmVjYXVzZSBvZiB0aGUgY2hhbmdlcyB0byBzdHI6CnB5MzoKc3RyL3VuaWNvZGUgPC0tLS0tPiBTVFJJTkcKYnl0ZXMgICAgICAgPC0tLS0tPiBCWVRFUwpCeXRlU3RyaW5nICAtLS0vCgpweTI6CnN0ciB3aWxsIGJlIHJlamVjdGVkIHNpbmNlIGl0IGlzIGFtYmlndW91cy4KdW5pY29kZSAgICAgPC0tLS0tPiBTVFJJTkcKQnl0ZVN0cmluZyAgPC0tLS0tPiBCWVRFUwoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgc3lzCmZyb20gdHlwaW5nIGltcG9ydCBCeXRlU3RyaW5nCmZyb20gdHlwaW5nIGltcG9ydCBNYXBwaW5nCmZyb20gdHlwaW5nIGltcG9ydCBOYW1lZFR1cGxlCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbApmcm9tIHR5cGluZyBpbXBvcnQgU2VxdWVuY2UKZnJvbSB1dWlkIGltcG9ydCB1dWlkNAoKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gcGFzdC5idWlsdGlucyBpbXBvcnQgdW5pY29kZQoKZnJvbSBhcGFjaGVfYmVhbS5wb3J0YWJpbGl0eS5hcGkgaW1wb3J0IHNjaGVtYV9wYjIKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eSBpbXBvcnQgX2dldF9hcmdzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkgaW1wb3J0IF9tYXRjaF9pc19leGFjdGx5X21hcHBpbmcKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMubmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eSBpbXBvcnQgX21hdGNoX2lzX25hbWVkX3R1cGxlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkgaW1wb3J0IF9tYXRjaF9pc19vcHRpb25hbApmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5uYXRpdmVfdHlwZV9jb21wYXRpYmlsaXR5IGltcG9ydCBfc2FmZV9pc3N1YmNsYXNzCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLm5hdGl2ZV90eXBlX2NvbXBhdGliaWxpdHkgaW1wb3J0IGV4dHJhY3Rfb3B0aW9uYWxfdHlwZQoKCiMgUmVnaXN0cnkgb2YgdHlwaW5ncyBmb3IgYSBzY2hlbWEgYnkgVVVJRApjbGFzcyBTY2hlbWFUeXBlUmVnaXN0cnkob2JqZWN0KToKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLmJ5X2lkID0ge30KICAgIHNlbGYuYnlfdHlwaW5nID0ge30KCiAgZGVmIGFkZChzZWxmLCB0eXBpbmcsIHNjaGVtYSk6CiAgICBzZWxmLmJ5X2lkW3NjaGVtYS5pZF0gPSAodHlwaW5nLCBzY2hlbWEpCgogIGRlZiBnZXRfdHlwaW5nX2J5X2lkKHNlbGYsIHVuaXF1ZV9pZCk6CiAgICByZXN1bHQgPSBzZWxmLmJ5X2lkLmdldCh1bmlxdWVfaWQsIE5vbmUpCiAgICByZXR1cm4gcmVzdWx0WzBdIGlmIHJlc3VsdCBpcyBub3QgTm9uZSBlbHNlIE5vbmUKCiAgZGVmIGdldF9zY2hlbWFfYnlfaWQoc2VsZiwgdW5pcXVlX2lkKToKICAgIHJlc3VsdCA9IHNlbGYuYnlfaWQuZ2V0KHVuaXF1ZV9pZCwgTm9uZSkKICAgIHJldHVybiByZXN1bHRbMV0gaWYgcmVzdWx0IGlzIG5vdCBOb25lIGVsc2UgTm9uZQoKClNDSEVNQV9SRUdJU1RSWSA9IFNjaGVtYVR5cGVSZWdpc3RyeSgpCgojIEJpLWRpcmVjdGlvbmFsIG1hcHBpbmdzCl9QUklNSVRJVkVTID0gKAogICAgKG5wLmludDgsIHNjaGVtYV9wYjIuQllURSksCiAgICAobnAuaW50MTYsIHNjaGVtYV9wYjIuSU5UMTYpLAogICAgKG5wLmludDMyLCBzY2hlbWFfcGIyLklOVDMyKSwKICAgIChucC5pbnQ2NCwgc2NoZW1hX3BiMi5JTlQ2NCksCiAgICAobnAuZmxvYXQzMiwgc2NoZW1hX3BiMi5GTE9BVCksCiAgICAobnAuZmxvYXQ2NCwgc2NoZW1hX3BiMi5ET1VCTEUpLAogICAgKHVuaWNvZGUsIHNjaGVtYV9wYjIuU1RSSU5HKSwKICAgIChib29sLCBzY2hlbWFfcGIyLkJPT0xFQU4pLAogICAgKGJ5dGVzIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPj0gMyBlbHNlIEJ5dGVTdHJpbmcsIHNjaGVtYV9wYjIuQllURVMpLAopCgpQUklNSVRJVkVfVE9fQVRPTUlDX1RZUEUgPSBkaWN0KCh0eXAsIGF0b21pYykgZm9yIHR5cCwgYXRvbWljIGluIF9QUklNSVRJVkVTKQpBVE9NSUNfVFlQRV9UT19QUklNSVRJVkUgPSBkaWN0KChhdG9taWMsIHR5cCkgZm9yIHR5cCwgYXRvbWljIGluIF9QUklNSVRJVkVTKQoKIyBPbmUtd2F5IG1hcHBpbmdzClBSSU1JVElWRV9UT19BVE9NSUNfVFlQRS51cGRhdGUoewogICAgIyBJbiBweXRob24gMiwgdGhpcyBpcyBhIG5vLW9wIGJlY2F1c2Ugd2UgZGVmaW5lIGl0IGFzIHRoZSBiaS1kaXJlY3Rpb25hbAogICAgIyBtYXBwaW5nIGFib3ZlLiBUaGlzIGp1c3QgZW5zdXJlcyB0aGUgb25lLXdheSBtYXBwaW5nIGlzIGRlZmluZWQgaW4gcHl0aG9uCiAgICAjIDMuCiAgICBCeXRlU3RyaW5nOiBzY2hlbWFfcGIyLkJZVEVTLAogICAgIyBBbGxvdyB1c2VycyB0byBzcGVjaWZ5IGEgbmF0aXZlIGludCwgYW5kIHVzZSBJTlQ2NCBhcyB0aGUgY3Jvc3MtbGFuZ3VhZ2UKICAgICMgcmVwcmVzZW50YXRpb24uIFRlY2huaWNhbGx5IGludHMgaGF2ZSB1bmxpbWl0ZWQgcHJlY2lzaW9uLCBidXQgUm93Q29kZXIKICAgICMgc2hvdWxkIHRocm93IGFuIGVycm9yIGlmIGl0IHNlZXMgb25lIHdpdGggYSBiaXQgd2lkdGggPiA2NCB3aGVuIGVuY29kaW5nLgogICAgaW50OiBzY2hlbWFfcGIyLklOVDY0LAogICAgZmxvYXQ6IHNjaGVtYV9wYjIuRE9VQkxFLAp9KQoKCmRlZiB0eXBpbmdfdG9fcnVubmVyX2FwaSh0eXBlXyk6CiAgaWYgX21hdGNoX2lzX25hbWVkX3R1cGxlKHR5cGVfKToKICAgIHNjaGVtYSA9IE5vbmUKICAgIGlmIGhhc2F0dHIodHlwZV8sICdpZCcpOgogICAgICBzY2hlbWEgPSBTQ0hFTUFfUkVHSVNUUlkuZ2V0X3NjaGVtYV9ieV9pZCh0eXBlXy5pZCkKICAgIGlmIHNjaGVtYSBpcyBOb25lOgogICAgICBmaWVsZHMgPSBbCiAgICAgICAgICBzY2hlbWFfcGIyLkZpZWxkKAogICAgICAgICAgICAgIG5hbWU9bmFtZSwgdHlwZT10eXBpbmdfdG9fcnVubmVyX2FwaSh0eXBlXy5fZmllbGRfdHlwZXNbbmFtZV0pKQogICAgICAgICAgZm9yIG5hbWUgaW4gdHlwZV8uX2ZpZWxkcwogICAgICBdCiAgICAgIHR5cGVfaWQgPSBzdHIodXVpZDQoKSkKICAgICAgc2NoZW1hID0gc2NoZW1hX3BiMi5TY2hlbWEoZmllbGRzPWZpZWxkcywgaWQ9dHlwZV9pZCkKICAgICAgU0NIRU1BX1JFR0lTVFJZLmFkZCh0eXBlXywgc2NoZW1hKQoKICAgIHJldHVybiBzY2hlbWFfcGIyLkZpZWxkVHlwZShyb3dfdHlwZT1zY2hlbWFfcGIyLlJvd1R5cGUoc2NoZW1hPXNjaGVtYSkpCgogICMgQWxsIGNvbmNyZXRlIHR5cGVzIChvdGhlciB0aGFuIE5hbWVkVHVwbGUgc3ViLWNsYXNzZXMpIHNob3VsZCBtYXAgdG8KICAjIGEgc3VwcG9ydGVkIHByaW1pdGl2ZSB0eXBlLgogIGVsaWYgdHlwZV8gaW4gUFJJTUlUSVZFX1RPX0FUT01JQ19UWVBFOgogICAgcmV0dXJuIHNjaGVtYV9wYjIuRmllbGRUeXBlKGF0b21pY190eXBlPVBSSU1JVElWRV9UT19BVE9NSUNfVFlQRVt0eXBlX10pCgogIGVsaWYgc3lzLnZlcnNpb25faW5mby5tYWpvciA9PSAyIGFuZCB0eXBlXyA9PSBzdHI6CiAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICJ0eXBlICdzdHInIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHl0aG9uIDIuIFBsZWFzZSB1c2UgJ3VuaWNvZGUnIG9yICIKICAgICAgICAiJ3R5cGluZy5CeXRlU3RyaW5nJyBpbnN0ZWFkIHRvIHVuYW1iaWd1b3VzbHkgaW5kaWNhdGUgaWYgdGhpcyBpcyBhICIKICAgICAgICAiVVRGLTggc3RyaW5nIG9yIGEgYnl0ZSBhcnJheS4iKQoKICBlbGlmIF9tYXRjaF9pc19leGFjdGx5X21hcHBpbmcodHlwZV8pOgogICAga2V5X3R5cGUsIHZhbHVlX3R5cGUgPSBtYXAodHlwaW5nX3RvX3J1bm5lcl9hcGksIF9nZXRfYXJncyh0eXBlXykpCiAgICByZXR1cm4gc2NoZW1hX3BiMi5GaWVsZFR5cGUoCiAgICAgICAgbWFwX3R5cGU9c2NoZW1hX3BiMi5NYXBUeXBlKGtleV90eXBlPWtleV90eXBlLCB2YWx1ZV90eXBlPXZhbHVlX3R5cGUpKQoKICBlbGlmIF9tYXRjaF9pc19vcHRpb25hbCh0eXBlXyk6CiAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBhIHVzZXIgcGFzc2VzIHVzIE9wdGlvbmFsW09wdGlvbmFsW1RdXSwgYnV0IGluIHB5dGhvbgogICAgIyB0eXBpbmcgdGhpcyBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIE9wdGlvbmFsW1RdIC0gYm90aCByZXNvbHZlIHRvCiAgICAjIFVuaW9uW1QsIE5vbmVdIC0gc28gdGhlcmUncyBubyBuZWVkIHRvIGNoZWNrIGZvciB0aGF0IGNhc2UgaGVyZS4KICAgIHJlc3VsdCA9IHR5cGluZ190b19ydW5uZXJfYXBpKGV4dHJhY3Rfb3B0aW9uYWxfdHlwZSh0eXBlXykpCiAgICByZXN1bHQubnVsbGFibGUgPSBUcnVlCiAgICByZXR1cm4gcmVzdWx0CgogIGVsaWYgX3NhZmVfaXNzdWJjbGFzcyh0eXBlXywgU2VxdWVuY2UpOgogICAgZWxlbWVudF90eXBlID0gdHlwaW5nX3RvX3J1bm5lcl9hcGkoX2dldF9hcmdzKHR5cGVfKVswXSkKICAgIHJldHVybiBzY2hlbWFfcGIyLkZpZWxkVHlwZSgKICAgICAgICBhcnJheV90eXBlPXNjaGVtYV9wYjIuQXJyYXlUeXBlKGVsZW1lbnRfdHlwZT1lbGVtZW50X3R5cGUpKQoKICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCB0eXBlOiAlcyIgJSB0eXBlXykKCgpkZWYgdHlwaW5nX2Zyb21fcnVubmVyX2FwaShmaWVsZHR5cGVfcHJvdG8pOgogIGlmIGZpZWxkdHlwZV9wcm90by5udWxsYWJsZToKICAgICMgSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBpbm5lciB0eXBlLCBjcmVhdGUgYSBjb3B5IG9mIGZpZWxkdHlwZV9wcm90bwogICAgIyB3aXRoIG51bGxhYmxlPUZhbHNlIGFuZCBwYXNzIGJhY2sgdG8gdHlwaW5nX2Zyb21fcnVubmVyX2FwaQogICAgYmFzZV90eXBlID0gc2NoZW1hX3BiMi5GaWVsZFR5cGUoKQogICAgYmFzZV90eXBlLkNvcHlGcm9tKGZpZWxkdHlwZV9wcm90bykKICAgIGJhc2VfdHlwZS5udWxsYWJsZSA9IEZhbHNlCiAgICByZXR1cm4gT3B0aW9uYWxbdHlwaW5nX2Zyb21fcnVubmVyX2FwaShiYXNlX3R5cGUpXQoKICB0eXBlX2luZm8gPSBmaWVsZHR5cGVfcHJvdG8uV2hpY2hPbmVvZigidHlwZV9pbmZvIikKICBpZiB0eXBlX2luZm8gPT0gImF0b21pY190eXBlIjoKICAgIHRyeToKICAgICAgcmV0dXJuIEFUT01JQ19UWVBFX1RPX1BSSU1JVElWRVtmaWVsZHR5cGVfcHJvdG8uYXRvbWljX3R5cGVdCiAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAiVW5zdXBwb3J0ZWQgYXRvbWljIHR5cGU6IHswfSIuZm9ybWF0KGZpZWxkdHlwZV9wcm90by5hdG9taWNfdHlwZSkpCiAgZWxpZiB0eXBlX2luZm8gPT0gImFycmF5X3R5cGUiOgogICAgcmV0dXJuIFNlcXVlbmNlW3R5cGluZ19mcm9tX3J1bm5lcl9hcGkoCiAgICAgICAgZmllbGR0eXBlX3Byb3RvLmFycmF5X3R5cGUuZWxlbWVudF90eXBlKV0KICBlbGlmIHR5cGVfaW5mbyA9PSAibWFwX3R5cGUiOgogICAgcmV0dXJuIE1hcHBpbmdbdHlwaW5nX2Zyb21fcnVubmVyX2FwaShmaWVsZHR5cGVfcHJvdG8ubWFwX3R5cGUua2V5X3R5cGUpLAogICAgICAgICAgICAgICAgICAgdHlwaW5nX2Zyb21fcnVubmVyX2FwaShmaWVsZHR5cGVfcHJvdG8ubWFwX3R5cGUudmFsdWVfdHlwZSldCiAgZWxpZiB0eXBlX2luZm8gPT0gInJvd190eXBlIjoKICAgIHNjaGVtYSA9IGZpZWxkdHlwZV9wcm90by5yb3dfdHlwZS5zY2hlbWEKICAgIHVzZXJfdHlwZSA9IFNDSEVNQV9SRUdJU1RSWS5nZXRfdHlwaW5nX2J5X2lkKHNjaGVtYS5pZCkKICAgIGlmIHVzZXJfdHlwZSBpcyBOb25lOgogICAgICBmcm9tIGFwYWNoZV9iZWFtIGltcG9ydCBjb2RlcnMKICAgICAgdHlwZV9uYW1lID0gJ0JlYW1TY2hlbWFfe30nLmZvcm1hdChzY2hlbWEuaWQucmVwbGFjZSgnLScsICdfJykpCiAgICAgIHVzZXJfdHlwZSA9IE5hbWVkVHVwbGUoCiAgICAgICAgICB0eXBlX25hbWUsCiAgICAgICAgICBbKGZpZWxkLm5hbWUsIHR5cGluZ19mcm9tX3J1bm5lcl9hcGkoZmllbGQudHlwZSkpCiAgICAgICAgICAgZm9yIGZpZWxkIGluIHNjaGVtYS5maWVsZHNdKQogICAgICB1c2VyX3R5cGUuaWQgPSBzY2hlbWEuaWQKICAgICAgU0NIRU1BX1JFR0lTVFJZLmFkZCh1c2VyX3R5cGUsIHNjaGVtYSkKICAgICAgY29kZXJzLnJlZ2lzdHJ5LnJlZ2lzdGVyX2NvZGVyKHVzZXJfdHlwZSwgY29kZXJzLlJvd0NvZGVyKQogICAgcmV0dXJuIHVzZXJfdHlwZQoKICBlbGlmIHR5cGVfaW5mbyA9PSAibG9naWNhbF90eXBlIjoKICAgIHBhc3MgICMgVE9ETwoKCmRlZiBuYW1lZF90dXBsZV9mcm9tX3NjaGVtYShzY2hlbWEpOgogIHJldHVybiB0eXBpbmdfZnJvbV9ydW5uZXJfYXBpKAogICAgICBzY2hlbWFfcGIyLkZpZWxkVHlwZShyb3dfdHlwZT1zY2hlbWFfcGIyLlJvd1R5cGUoc2NoZW1hPXNjaGVtYSkpKQoKCmRlZiBuYW1lZF90dXBsZV90b19zY2hlbWEobmFtZWRfdHVwbGUpOgogIHJldHVybiB0eXBpbmdfdG9fcnVubmVyX2FwaShuYW1lZF90dXBsZSkucm93X3R5cGUuc2NoZW1hCpR9lCiMG1NjaGVtYVR5cGVSZWdpc3RyeS5fX2luaXRfX5RqVjEBAEtGS0iHlIwWU2NoZW1hVHlwZVJlZ2lzdHJ5LmFkZJRqVjEBAEtKS0uHlIwjU2NoZW1hVHlwZVJlZ2lzdHJ5LmdldF90eXBpbmdfYnlfaWSUalYxAQBLTUtPh5SMI1NjaGVtYVR5cGVSZWdpc3RyeS5nZXRfc2NoZW1hX2J5X2lklGpWMQEAS1FLU4eUjBJTY2hlbWFUeXBlUmVnaXN0cnmUal0xAQBLRUtTh5SMFHR5cGluZ190b19ydW5uZXJfYXBplGpWMQEAS3ZLpIeUjBZ0eXBpbmdfZnJvbV9ydW5uZXJfYXBplGpWMQEAS6dLzYeUjBduYW1lZF90dXBsZV9mcm9tX3NjaGVtYZRqVjEBAEvQS9KHlIwVbmFtZWRfdHVwbGVfdG9fc2NoZW1hlGpWMQEAS9VL1oeUdX2UKIwSU2NoZW1hVHlwZVJlZ2lzdHJ5lGpvAwAAjBZTY2hlbWFUeXBlUmVnaXN0cnkuYWRklGpvAwAAjCNTY2hlbWFUeXBlUmVnaXN0cnkuZ2V0X3R5cGluZ19ieV9pZJRqbwMAAIwjU2NoZW1hVHlwZVJlZ2lzdHJ5LmdldF9zY2hlbWFfYnlfaWSUam8DAACMFHR5cGluZ190b19ydW5uZXJfYXBplGpvAwAAjBZ0eXBpbmdfZnJvbV9ydW5uZXJfYXBplGpvAwAAjBduYW1lZF90dXBsZV9mcm9tX3NjaGVtYZRqbwMAAIwVbmFtZWRfdHVwbGVfdG9fc2NoZW1hlGpvAwAAdYwdYXBhY2hlX2JlYW0udHlwZWhpbnRzLnNjaGVtYXOUdJSMJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZZQoWG5CAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlRyaXZpYWwgdHlwZSBpbmZlcmVuY2UgZm9yIHNpbXBsZSBmdW5jdGlvbnMuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydApmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgY29sbGVjdGlvbnMKaW1wb3J0IGRpcwppbXBvcnQgaW5zcGVjdAppbXBvcnQgcHByaW50CmltcG9ydCBzeXMKaW1wb3J0IHRyYWNlYmFjawppbXBvcnQgdHlwZXMKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CmZyb20gYnVpbHRpbnMgaW1wb3J0IHppcApmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgQW55CmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0eXBlaGludHMKCiMgcHlsaW50OiBkaXNhYmxlPXdyb25nLWltcG9ydC1vcmRlciwgd3JvbmctaW1wb3J0LXBvc2l0aW9uLCB1bmdyb3VwZWQtaW1wb3J0cwp0cnk6ICAjIFB5dGhvbiAyCiAgaW1wb3J0IF9fYnVpbHRpbl9fIGFzIGJ1aWx0aW5zCmV4Y2VwdCBJbXBvcnRFcnJvcjogICMgUHl0aG9uIDMKICBpbXBvcnQgYnVpbHRpbnMgICMgdHlwZTogaWdub3JlCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24sIHVuZ3JvdXBlZC1pbXBvcnRzCgoKY2xhc3MgVHlwZUluZmVyZW5jZUVycm9yKFZhbHVlRXJyb3IpOgogICIiIkVycm9yIHRvIHJhaXNlIHdoZW4gdHlwZSBpbmZlcmVuY2UgZmFpbGVkLiIiIgogIHBhc3MKCgpkZWYgaW5zdGFuY2VfdG9fdHlwZShvKToKICAiIiJHaXZlbiBhIFB5dGhvbiBvYmplY3QgbywgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgaGludC4KICAiIiIKICB0ID0gdHlwZShvKQogIGlmIG8gaXMgTm9uZToKICAgIHJldHVybiB0eXBlKE5vbmUpCiAgZWxpZiB0IG5vdCBpbiB0eXBlaGludHMuRElTQUxMT1dFRF9QUklNSVRJVkVfVFlQRVM6CiAgICAjIHB5bGludDogZGlzYWJsZT1kZXByZWNhdGVkLXR5cGVzLWZpZWxkCiAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID09IDIgYW5kIHQgPT0gdHlwZXMuSW5zdGFuY2VUeXBlOgogICAgICByZXR1cm4gby5fX2NsYXNzX18KICAgIGlmIHQgPT0gQm91bmRNZXRob2Q6CiAgICAgIHJldHVybiB0eXBlcy5NZXRob2RUeXBlCiAgICByZXR1cm4gdAogIGVsaWYgdCA9PSB0dXBsZToKICAgIHJldHVybiB0eXBlaGludHMuVHVwbGVbW2luc3RhbmNlX3RvX3R5cGUoaXRlbSkgZm9yIGl0ZW0gaW4gb11dCiAgZWxpZiB0ID09IGxpc3Q6CiAgICBpZiBsZW4obykgPiAwOgogICAgICByZXR1cm4gdHlwZWhpbnRzLkxpc3RbdHlwZWhpbnRzLlVuaW9uW1sKICAgICAgICAgIGluc3RhbmNlX3RvX3R5cGUoaXRlbSkgZm9yIGl0ZW0gaW4gbwogICAgICBdXV0KICAgIGVsc2U6CiAgICAgIHJldHVybiB0eXBlaGludHMuTGlzdFt0eXBlaGludHMuQW55XQogIGVsaWYgdCA9PSBzZXQ6CiAgICBpZiBsZW4obykgPiAwOgogICAgICByZXR1cm4gdHlwZWhpbnRzLlNldFt0eXBlaGludHMuVW5pb25bWwogICAgICAgICAgaW5zdGFuY2VfdG9fdHlwZShpdGVtKSBmb3IgaXRlbSBpbiBvCiAgICAgIF1dXQogICAgZWxzZToKICAgICAgcmV0dXJuIHR5cGVoaW50cy5TZXRbdHlwZWhpbnRzLkFueV0KICBlbGlmIHQgPT0gZGljdDoKICAgIGlmIGxlbihvKSA+IDA6CiAgICAgIHJldHVybiB0eXBlaGludHMuRGljdFsKICAgICAgICAgIHR5cGVoaW50cy5VbmlvbltbaW5zdGFuY2VfdG9fdHlwZShrKSBmb3IgaywgdiBpbiBvLml0ZW1zKCldXSwKICAgICAgICAgIHR5cGVoaW50cy5VbmlvbltbaW5zdGFuY2VfdG9fdHlwZSh2KSBmb3IgaywgdiBpbiBvLml0ZW1zKCldXSwKICAgICAgXQogICAgZWxzZToKICAgICAgcmV0dXJuIHR5cGVoaW50cy5EaWN0W3R5cGVoaW50cy5BbnksIHR5cGVoaW50cy5BbnldCiAgZWxzZToKICAgIHJhaXNlIFR5cGVJbmZlcmVuY2VFcnJvcignVW5rbm93biBmb3JiaWRkZW4gdHlwZTogJXMnICUgdCkKCgpkZWYgdW5pb25fbGlzdCh4cywgeXMpOgogIGFzc2VydCBsZW4oeHMpID09IGxlbih5cykKICByZXR1cm4gW3VuaW9uKHgsIHkpIGZvciB4LCB5IGluIHppcCh4cywgeXMpXQoKCmNsYXNzIENvbnN0KG9iamVjdCk6CiAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgc2VsZi50eXBlID0gaW5zdGFuY2VfdG9fdHlwZSh2YWx1ZSkKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgQ29uc3QpIGFuZCBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKICBkZWYgX19oYXNoX18oc2VsZik6CiAgICByZXR1cm4gaGFzaChzZWxmLnZhbHVlKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ0NvbnN0WyVzXScgJSBzdHIoc2VsZi52YWx1ZSlbOjEwMF0KCiAgQHN0YXRpY21ldGhvZAogIGRlZiB1bndyYXAoeCk6CiAgICBpZiBpc2luc3RhbmNlKHgsIENvbnN0KToKICAgICAgcmV0dXJuIHgudHlwZQogICAgcmV0dXJuIHgKCiAgQHN0YXRpY21ldGhvZAogIGRlZiB1bndyYXBfYWxsKHhzKToKICAgIHJldHVybiBbQ29uc3QudW53cmFwKHgpIGZvciB4IGluIHhzXQoKCmNsYXNzIEZyYW1lU3RhdGUob2JqZWN0KToKICAiIiJTdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBmcmFtZSBhdCBhIHBhcnRpY3VsYXIgcG9pbnQgb2YgZXhlY3V0aW9uLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBmLCBsb2NhbF92YXJzPU5vbmUsIHN0YWNrPSgpKToKICAgIHNlbGYuZiA9IGYKICAgIHNlbGYuY28gPSBmLl9fY29kZV9fCiAgICBzZWxmLnZhcnMgPSBsaXN0KGxvY2FsX3ZhcnMpCiAgICBzZWxmLnN0YWNrID0gbGlzdChzdGFjaykKCiAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgRnJhbWVTdGF0ZSkgYW5kIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KCiAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAjIFRPRE8oQkVBTS01OTQ5KTogTmVlZGVkIGZvciBQeXRob24gMiBjb21wYXRpYmlsaXR5LgogICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHR1cGxlKHNvcnRlZChzZWxmLl9fZGljdF9fLml0ZW1zKCkpKSkKCiAgZGVmIGNvcHkoc2VsZik6CiAgICByZXR1cm4gRnJhbWVTdGF0ZShzZWxmLmYsIHNlbGYudmFycywgc2VsZi5zdGFjaykKCiAgZGVmIGNvbnN0X3R5cGUoc2VsZiwgaSk6CiAgICByZXR1cm4gQ29uc3Qoc2VsZi5jby5jb19jb25zdHNbaV0pCgogIGRlZiBnZXRfY2xvc3VyZShzZWxmLCBpKToKICAgIG51bV9jZWxsdmFycyA9IGxlbihzZWxmLmNvLmNvX2NlbGx2YXJzKQogICAgaWYgaSA8IG51bV9jZWxsdmFyczoKICAgICAgcmV0dXJuIHNlbGYudmFyc1tpXQogICAgZWxzZToKICAgICAgcmV0dXJuIHNlbGYuZi5fX2Nsb3N1cmVfX1tpIC0gbnVtX2NlbGx2YXJzXS5jZWxsX2NvbnRlbnRzCgogIGRlZiBjbG9zdXJlX3R5cGUoc2VsZiwgaSk6CiAgICAiIiJSZXR1cm5zIGEgVHlwZUNvbnN0cmFpbnQgb3IgQ29uc3QuIiIiCiAgICB2YWwgPSBzZWxmLmdldF9jbG9zdXJlKGkpCiAgICBpZiBpc2luc3RhbmNlKHZhbCwgdHlwZWhpbnRzLlR5cGVDb25zdHJhaW50KToKICAgICAgcmV0dXJuIHZhbAogICAgZWxzZToKICAgICAgcmV0dXJuIENvbnN0KHZhbCkKCiAgZGVmIGdldF9nbG9iYWwoc2VsZiwgaSk6CiAgICBuYW1lID0gc2VsZi5nZXRfbmFtZShpKQogICAgaWYgbmFtZSBpbiBzZWxmLmYuX19nbG9iYWxzX186CiAgICAgIHJldHVybiBDb25zdChzZWxmLmYuX19nbG9iYWxzX19bbmFtZV0pCiAgICBpZiBuYW1lIGluIGJ1aWx0aW5zLl9fZGljdF9fOgogICAgICByZXR1cm4gQ29uc3QoYnVpbHRpbnMuX19kaWN0X19bbmFtZV0pCiAgICByZXR1cm4gQW55CgogIGRlZiBnZXRfbmFtZShzZWxmLCBpKToKICAgIHJldHVybiBzZWxmLmNvLmNvX25hbWVzW2ldCgogIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgIHJldHVybiAnU3RhY2s6ICVzIFZhcnM6ICVzJyAlIChzZWxmLnN0YWNrLCBzZWxmLnZhcnMpCgogIGRlZiBfX29yX18oc2VsZiwgb3RoZXIpOgogICAgaWYgc2VsZiBpcyBOb25lOgogICAgICByZXR1cm4gb3RoZXIuY29weSgpCiAgICBlbGlmIG90aGVyIGlzIE5vbmU6CiAgICAgIHJldHVybiBzZWxmLmNvcHkoKQogICAgcmV0dXJuIEZyYW1lU3RhdGUoCiAgICAgICAgc2VsZi5mLAogICAgICAgIHVuaW9uX2xpc3Qoc2VsZi52YXJzLCBvdGhlci52YXJzKSwKICAgICAgICB1bmlvbl9saXN0KHNlbGYuc3RhY2ssIG90aGVyLnN0YWNrKSkKCiAgZGVmIF9fcm9yX18oc2VsZiwgbGVmdCk6CiAgICByZXR1cm4gc2VsZiB8IGxlZnQKCgpkZWYgdW5pb24oYSwgYik6CiAgIiIiUmV0dXJucyB0aGUgdW5pb24gb2YgdHdvIHR5cGVzIG9yIENvbnN0IHZhbHVlcy4KICAiIiIKICBpZiBhID09IGI6CiAgICByZXR1cm4gYQogIGVsaWYgbm90IGE6CiAgICByZXR1cm4gYgogIGVsaWYgbm90IGI6CiAgICByZXR1cm4gYQogIGEgPSBDb25zdC51bndyYXAoYSkKICBiID0gQ29uc3QudW53cmFwKGIpCiAgIyBUT0RPKHJvYmVydHdiKTogV29yayB0aGlzIGludG8gdGhlIFVuaW9uIGNvZGUgaW4gYSBtb3JlIGdlbmVyaWMgd2F5LgogIGlmIHR5cGUoYSkgPT0gdHlwZShiKSBhbmQgZWxlbWVudF90eXBlKGEpID09IHR5cGVoaW50cy5VbmlvblsoKV06CiAgICByZXR1cm4gYgogIGVsaWYgdHlwZShhKSA9PSB0eXBlKGIpIGFuZCBlbGVtZW50X3R5cGUoYikgPT0gdHlwZWhpbnRzLlVuaW9uWygpXToKICAgIHJldHVybiBhCiAgcmV0dXJuIHR5cGVoaW50cy5VbmlvblthLCBiXQoKCmRlZiBmaW5hbGl6ZV9oaW50cyh0eXBlX2hpbnQpOgogICIiIlNldHMgdHlwZSBoaW50IGZvciBlbXB0eSBkYXRhIHN0cnVjdHVyZXMgdG8gQW55LiIiIgogIGRlZiB2aXNpdG9yKHRjLCB1bnVzZWRfYXJnKToKICAgIGlmIGlzaW5zdGFuY2UodGMsIHR5cGVoaW50cy5EaWN0Q29uc3RyYWludCk6CiAgICAgIGVtcHR5X3VuaW9uID0gdHlwZWhpbnRzLlVuaW9uWygpXQogICAgICBpZiB0Yy5rZXlfdHlwZSA9PSBlbXB0eV91bmlvbjoKICAgICAgICB0Yy5rZXlfdHlwZSA9IEFueQogICAgICBpZiB0Yy52YWx1ZV90eXBlID09IGVtcHR5X3VuaW9uOgogICAgICAgIHRjLnZhbHVlX3R5cGUgPSBBbnkKCiAgaWYgaXNpbnN0YW5jZSh0eXBlX2hpbnQsIHR5cGVoaW50cy5UeXBlQ29uc3RyYWludCk6CiAgICB0eXBlX2hpbnQudmlzaXQodmlzaXRvciwgTm9uZSkKCgpkZWYgZWxlbWVudF90eXBlKGhpbnQpOgogICIiIlJldHVybnMgdGhlIGVsZW1lbnQgdHlwZSBvZiBhIGNvbXBvc2l0ZSB0eXBlLgogICIiIgogIGhpbnQgPSBDb25zdC51bndyYXAoaGludCkKICBpZiBpc2luc3RhbmNlKGhpbnQsIHR5cGVoaW50cy5TZXF1ZW5jZVR5cGVDb25zdHJhaW50KToKICAgIHJldHVybiBoaW50LmlubmVyX3R5cGUKICBlbGlmIGlzaW5zdGFuY2UoaGludCwgdHlwZWhpbnRzLlR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQpOgogICAgcmV0dXJuIHR5cGVoaW50cy5VbmlvbltoaW50LnR1cGxlX3R5cGVzXQogIHJldHVybiBBbnkKCgpkZWYga2V5X3ZhbHVlX3R5cGVzKGt2X3R5cGUpOgogICIiIlJldHVybnMgdGhlIGtleSBhbmQgdmFsdWUgdHlwZSBvZiBhIEtWIHR5cGUuCiAgIiIiCiAgIyBUT0RPKHJvYmVydHdiKTogVW5pb25zIG9mIHR1cGxlcywgZXRjLgogICMgVE9ETyhyb2JlcnR3Yik6IEFzc2VydD8KICBpZiAoaXNpbnN0YW5jZShrdl90eXBlLCB0eXBlaGludHMuVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludCkgYW5kCiAgICAgIGxlbihrdl90eXBlLnR1cGxlX3R5cGVzKSA9PSAyKToKICAgIHJldHVybiBrdl90eXBlLnR1cGxlX3R5cGVzCiAgcmV0dXJuIEFueSwgQW55CgoKa25vd25fcmV0dXJuX3R5cGVzID0gewogICAgbGVuOiBpbnQsCiAgICBoYXNoOiBpbnQsCn0KCgpjbGFzcyBCb3VuZE1ldGhvZChvYmplY3QpOgogICIiIlVzZWQgdG8gY3JlYXRlIGEgYm91bmQgbWV0aG9kIHdoZW4gd2Ugb25seSBrbm93IHRoZSB0eXBlIG9mIHRoZSBpbnN0YW5jZS4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgdHlwZSk6CiAgICAiIiJJbnN0YW50aWF0ZXMgYSBib3VuZCBtZXRob2Qgb2JqZWN0LgoKICAgIEFyZ3M6CiAgICAgIGZ1bmMgKHR5cGVzLkZ1bmN0aW9uVHlwZSk6IFRoZSBtZXRob2QncyB1bmRlcmx5aW5nIGZ1bmN0aW9uCiAgICAgIHR5cGUgKHR5cGUpOiBUaGUgY2xhc3Mgb2YgdGhlIG1ldGhvZC4KICAgICIiIgogICAgc2VsZi5mdW5jID0gZnVuYwogICAgc2VsZi50eXBlID0gdHlwZQoKCmRlZiBoYXNoYWJsZShjKToKICB0cnk6CiAgICBoYXNoKGMpCiAgICByZXR1cm4gVHJ1ZQogIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICByZXR1cm4gRmFsc2UKCgpkZWYgaW5mZXJfcmV0dXJuX3R5cGUoYywgaW5wdXRfdHlwZXMsIGRlYnVnPUZhbHNlLCBkZXB0aD01KToKICAiIiJBbmFseXNlcyBhIGNhbGxhYmxlIHRvIGRlZHVjZSBpdHMgcmV0dXJuIHR5cGUuCgogIEFyZ3M6CiAgICBjOiBBIFB5dGhvbiBjYWxsYWJsZSB0byBpbmZlciB0aGUgcmV0dXJuIHR5cGUgb2YuCiAgICBpbnB1dF90eXBlczogQSBzZXF1ZW5jZSBvZiBpbnB1dHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW5wdXQgdHlwZXMuCiAgICBkZWJ1ZzogV2hldGhlciB0byBwcmludCB2ZXJib3NlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KICAgIGRlcHRoOiBNYXhpbXVtIGluc3BlY3Rpb24gZGVwdGggZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgoKICBSZXR1cm5zOgogICAgQSBUeXBlQ29uc3RyYWludCB0aGF0IHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgKGxpa2VseSkKICAgIHNhdGlzZnkgZ2l2ZW4gdGhlIHNwZWNpZmllZCBpbnB1dHMuCiAgIiIiCiAgdHJ5OgogICAgaWYgaGFzaGFibGUoYykgYW5kIGMgaW4ga25vd25fcmV0dXJuX3R5cGVzOgogICAgICByZXR1cm4ga25vd25fcmV0dXJuX3R5cGVzW2NdCiAgICBlbGlmIGlzaW5zdGFuY2UoYywgdHlwZXMuRnVuY3Rpb25UeXBlKToKICAgICAgcmV0dXJuIGluZmVyX3JldHVybl90eXBlX2Z1bmMoYywgaW5wdXRfdHlwZXMsIGRlYnVnLCBkZXB0aCkKICAgIGVsaWYgaXNpbnN0YW5jZShjLCB0eXBlcy5NZXRob2RUeXBlKToKICAgICAgaWYgYy5fX3NlbGZfXyBpcyBub3QgTm9uZToKICAgICAgICBpbnB1dF90eXBlcyA9IFtDb25zdChjLl9fc2VsZl9fKV0gKyBpbnB1dF90eXBlcwogICAgICByZXR1cm4gaW5mZXJfcmV0dXJuX3R5cGVfZnVuYyhjLl9fZnVuY19fLCBpbnB1dF90eXBlcywgZGVidWcsIGRlcHRoKQogICAgZWxpZiBpc2luc3RhbmNlKGMsIEJvdW5kTWV0aG9kKToKICAgICAgaW5wdXRfdHlwZXMgPSBbYy50eXBlXSArIGlucHV0X3R5cGVzCiAgICAgIHJldHVybiBpbmZlcl9yZXR1cm5fdHlwZV9mdW5jKGMuZnVuYywgaW5wdXRfdHlwZXMsIGRlYnVnLCBkZXB0aCkKICAgIGVsaWYgaW5zcGVjdC5pc2NsYXNzKGMpOgogICAgICBpZiBjIGluIHR5cGVoaW50cy5ESVNBTExPV0VEX1BSSU1JVElWRV9UWVBFUzoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBsaXN0OiB0eXBlaGludHMuTGlzdFtBbnldLAogICAgICAgICAgICBzZXQ6IHR5cGVoaW50cy5TZXRbQW55XSwKICAgICAgICAgICAgdHVwbGU6IHR5cGVoaW50cy5UdXBsZVtBbnksIC4uLl0sCiAgICAgICAgICAgIGRpY3Q6IHR5cGVoaW50cy5EaWN0W0FueSwgQW55XQogICAgICAgIH1bY10KICAgICAgcmV0dXJuIGMKICAgIGVsc2U6CiAgICAgIHJldHVybiBBbnkKICBleGNlcHQgVHlwZUluZmVyZW5jZUVycm9yOgogICAgaWYgZGVidWc6CiAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgcmV0dXJuIEFueQogIGV4Y2VwdCBFeGNlcHRpb246CiAgICBpZiBkZWJ1ZzoKICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgIHJhaXNlCiAgICBlbHNlOgogICAgICByZXR1cm4gQW55CgoKZGVmIGluZmVyX3JldHVybl90eXBlX2Z1bmMoZiwgaW5wdXRfdHlwZXMsIGRlYnVnPUZhbHNlLCBkZXB0aD0wKToKICAiIiJBbmFseXNlcyBhIGZ1bmN0aW9uIHRvIGRlZHVjZSBpdHMgcmV0dXJuIHR5cGUuCgogIEFyZ3M6CiAgICBmOiBBIFB5dGhvbiBmdW5jdGlvbiBvYmplY3QgdG8gaW5mZXIgdGhlIHJldHVybiB0eXBlIG9mLgogICAgaW5wdXRfdHlwZXM6IEEgc2VxdWVuY2Ugb2YgaW5wdXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHR5cGVzLgogICAgZGVidWc6IFdoZXRoZXIgdG8gcHJpbnQgdmVyYm9zZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCiAgICBkZXB0aDogTWF4aW11bSBpbnNwZWN0aW9uIGRlcHRoIGR1cmluZyB0eXBlIGluZmVyZW5jZS4KCiAgUmV0dXJuczoKICAgIEEgVHlwZUNvbnN0cmFpbnQgdGhhdCB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIChsaWtlbHkpCiAgICBzYXRpc2Z5IGdpdmVuIHRoZSBzcGVjaWZpZWQgaW5wdXRzLgoKICBSYWlzZXM6CiAgICBUeXBlSW5mZXJlbmNlRXJyb3I6IGlmIG5vIHR5cGUgY2FuIGJlIGluZmVycmVkLgogICIiIgogIGlmIGRlYnVnOgogICAgcHJpbnQoKQogICAgcHJpbnQoZiwgaWQoZiksIGlucHV0X3R5cGVzKQogICAgZGlzLmRpcyhmKQogIGZyb20gLiBpbXBvcnQgb3Bjb2RlcwogIHNpbXBsZV9vcHMgPSBkaWN0KChrLnVwcGVyKCksIHYpIGZvciBrLCB2IGluIG9wY29kZXMuX19kaWN0X18uaXRlbXMoKSkKCiAgY28gPSBmLl9fY29kZV9fCiAgY29kZSA9IGNvLmNvX2NvZGUKICBlbmQgPSBsZW4oY29kZSkKICBwYyA9IDAKICBleHRlbmRlZF9hcmcgPSAwICAjIFB5dGhvbiAyIG9ubHkuCiAgZnJlZSA9IE5vbmUKCiAgeWllbGRzID0gc2V0KCkKICByZXR1cm5zID0gc2V0KCkKICAjIFRPRE8ocm9iZXJ0d2IpOiBEZWZhdWx0IGFyZ3MgdmlhIGluc3BlY3QgbW9kdWxlLgogIGxvY2FsX3ZhcnMgPSBsaXN0KGlucHV0X3R5cGVzKSArIFt0eXBlaGludHMuVW5pb25bKCldXSAqICgKICAgICAgbGVuKGNvLmNvX3Zhcm5hbWVzKSAtIGxlbihpbnB1dF90eXBlcykpCiAgc3RhdGUgPSBGcmFtZVN0YXRlKGYsIGxvY2FsX3ZhcnMpCiAgc3RhdGVzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGFtYmRhOiBOb25lKQogIGp1bXBzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQoKICAjIEluIFB5dGhvbiAzLCB1c2UgZGlzIGxpYnJhcnkgZnVuY3Rpb25zIHRvIGRpc2Fzc2VtYmxlIGJ5dGVjb2RlIGFuZCBoYW5kbGUKICAjIEVYVEVOREVEX0FSR3MuCiAgaXNfcHkzID0gc3lzLnZlcnNpb25faW5mb1swXSA9PSAzCiAgaWYgaXNfcHkzOgogICAgb2ZzX3RhYmxlID0ge30gICMgb2Zmc2V0IC0+IGluc3RydWN0aW9uCiAgICBmb3IgaW5zdHJ1Y3Rpb24gaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZik6CiAgICAgIG9mc190YWJsZVtpbnN0cnVjdGlvbi5vZmZzZXRdID0gaW5zdHJ1Y3Rpb24KCiAgIyBQeXRob24gMiAtIDMuNTogMSBieXRlIG9wY29kZSArIG9wdGlvbmFsIDIgYnl0ZSBhcmcgKDEgb3IgMyBieXRlcykuCiAgIyBQeXRob24gMy42KzogMSBieXRlIG9wY29kZSArIDEgYnl0ZSBhcmcgKDIgYnl0ZXMsIGFyZyBtYXkgYmUgaWdub3JlZCkuCiAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNik6CiAgICBpbnN0X3NpemUgPSAyCiAgICBvcHRfYXJnX3NpemUgPSAwCiAgZWxzZToKICAgIGluc3Rfc2l6ZSA9IDEKICAgIG9wdF9hcmdfc2l6ZSA9IDIKCiAgbGFzdF9wYyA9IC0xCiAgd2hpbGUgcGMgPCBlbmQ6ICAjIHB5bGludDogZGlzYWJsZT10b28tbWFueS1uZXN0ZWQtYmxvY2tzCiAgICBzdGFydCA9IHBjCiAgICBpZiBpc19weTM6CiAgICAgIGluc3RydWN0aW9uID0gb2ZzX3RhYmxlW3BjXQogICAgICBvcCA9IGluc3RydWN0aW9uLm9wY29kZQogICAgZWxzZToKICAgICAgb3AgPSBvcmQoY29kZVtwY10pCiAgICBpZiBkZWJ1ZzoKICAgICAgcHJpbnQoJy0tPicgaWYgcGMgPT0gbGFzdF9wYyBlbHNlICcgICAgJywgZW5kPScgJykKICAgICAgcHJpbnQocmVwcihwYykucmp1c3QoNCksIGVuZD0nICcpCiAgICAgIHByaW50KGRpcy5vcG5hbWVbb3BdLmxqdXN0KDIwKSwgZW5kPScgJykKCiAgICBwYyArPSBpbnN0X3NpemUKICAgIGlmIG9wID49IGRpcy5IQVZFX0FSR1VNRU5UOgogICAgICBpZiBpc19weTM6CiAgICAgICAgYXJnID0gaW5zdHJ1Y3Rpb24uYXJnCiAgICAgIGVsc2U6CiAgICAgICAgYXJnID0gb3JkKGNvZGVbcGNdKSArIG9yZChjb2RlW3BjICsgMV0pICogMjU2ICsgZXh0ZW5kZWRfYXJnCiAgICAgIGV4dGVuZGVkX2FyZyA9IDAKICAgICAgcGMgKz0gb3B0X2FyZ19zaXplCiAgICAgIGlmIG9wID09IGRpcy5FWFRFTkRFRF9BUkc6CiAgICAgICAgZXh0ZW5kZWRfYXJnID0gYXJnICogNjU1MzYKICAgICAgaWYgZGVidWc6CiAgICAgICAgcHJpbnQoc3RyKGFyZykucmp1c3QoNSksIGVuZD0nICcpCiAgICAgICAgaWYgb3AgaW4gZGlzLmhhc2NvbnN0OgogICAgICAgICAgcHJpbnQoJygnICsgcmVwcihjby5jb19jb25zdHNbYXJnXSkgKyAnKScsIGVuZD0nICcpCiAgICAgICAgZWxpZiBvcCBpbiBkaXMuaGFzbmFtZToKICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX25hbWVzW2FyZ10gKyAnKScsIGVuZD0nICcpCiAgICAgICAgZWxpZiBvcCBpbiBkaXMuaGFzanJlbDoKICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIocGMgKyBhcmcpICsgJyknLCBlbmQ9JyAnKQogICAgICAgIGVsaWYgb3AgaW4gZGlzLmhhc2xvY2FsOgogICAgICAgICAgcHJpbnQoJygnICsgY28uY29fdmFybmFtZXNbYXJnXSArICcpJywgZW5kPScgJykKICAgICAgICBlbGlmIG9wIGluIGRpcy5oYXNjb21wYXJlOgogICAgICAgICAgcHJpbnQoJygnICsgZGlzLmNtcF9vcFthcmddICsgJyknLCBlbmQ9JyAnKQogICAgICAgIGVsaWYgb3AgaW4gZGlzLmhhc2ZyZWU6CiAgICAgICAgICBpZiBmcmVlIGlzIE5vbmU6CiAgICAgICAgICAgIGZyZWUgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCiAgICAgICAgICBwcmludCgnKCcgKyBmcmVlW2FyZ10gKyAnKScsIGVuZD0nICcpCgogICAgIyBBY3R1YWxseSBlbXVsYXRlIHRoZSBvcC4KICAgIGlmIHN0YXRlIGlzIE5vbmUgYW5kIHN0YXRlc1tzdGFydF0gaXMgTm9uZToKICAgICAgIyBObyBjb250cm9sIHJlYWNoZXMgaGVyZSAoeWV0KS4KICAgICAgaWYgZGVidWc6CiAgICAgICAgcHJpbnQoKQogICAgICBjb250aW51ZQogICAgc3RhdGUgfD0gc3RhdGVzW3N0YXJ0XQoKICAgIG9wbmFtZSA9IGRpcy5vcG5hbWVbb3BdCiAgICBqbXAgPSBqbXBfc3RhdGUgPSBOb25lCiAgICBpZiBvcG5hbWUuc3RhcnRzd2l0aCgnQ0FMTF9GVU5DVElPTicpOgogICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsIDYpOgogICAgICAgICMgRWFjaCBrZXl3b3JkIHRha2VzIHVwIHR3byBhcmd1bWVudHMgb24gdGhlIHN0YWNrIChuYW1lIGFuZCB2YWx1ZSkuCiAgICAgICAgc3RhbmRhcmRfYXJncyA9IChhcmcgJiAweEZGKSArIDIgKiAoYXJnID4+IDgpCiAgICAgICAgdmFyX2FyZ3MgPSAnVkFSJyBpbiBvcG5hbWUKICAgICAgICBrd19hcmdzID0gJ0tXJyBpbiBvcG5hbWUKICAgICAgICBwb3BfY291bnQgPSBzdGFuZGFyZF9hcmdzICsgdmFyX2FyZ3MgKyBrd19hcmdzICsgMQogICAgICAgIGlmIGRlcHRoIDw9IDA6CiAgICAgICAgICByZXR1cm5fdHlwZSA9IEFueQogICAgICAgIGVsaWYgYXJnID4+IDg6CiAgICAgICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBIYW5kbGUgdGhpcyBjYXNlLgogICAgICAgICAgcmV0dXJuX3R5cGUgPSBBbnkKICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RhdGUuc3RhY2tbLXBvcF9jb3VudF0sIENvbnN0KToKICAgICAgICAgICMgVE9ETyhyb2JlcnR3Yik6IEhhbmRsZSB0aGlzIGJldHRlci4KICAgICAgICAgIGlmIHZhcl9hcmdzIG9yIGt3X2FyZ3M6CiAgICAgICAgICAgIHN0YXRlLnN0YWNrWy0xXSA9IEFueQogICAgICAgICAgICBzdGF0ZS5zdGFja1stdmFyX2FyZ3MgLSBrd19hcmdzXSA9IEFueQogICAgICAgICAgcmV0dXJuX3R5cGUgPSBpbmZlcl9yZXR1cm5fdHlwZSgKICAgICAgICAgICAgICBzdGF0ZS5zdGFja1stcG9wX2NvdW50XS52YWx1ZSwKICAgICAgICAgICAgICBzdGF0ZS5zdGFja1sxIC0gcG9wX2NvdW50Ol0sCiAgICAgICAgICAgICAgZGVidWc9ZGVidWcsCiAgICAgICAgICAgICAgZGVwdGg9ZGVwdGggLSAxKQogICAgICAgIGVsc2U6CiAgICAgICAgICByZXR1cm5fdHlwZSA9IEFueQogICAgICAgIHN0YXRlLnN0YWNrWy1wb3BfY291bnQ6XSA9IFtyZXR1cm5fdHlwZV0KICAgICAgZWxzZTogICMgUHl0aG9uIDMuNisKICAgICAgICBpZiBvcG5hbWUgPT0gJ0NBTExfRlVOQ1RJT04nOgogICAgICAgICAgcG9wX2NvdW50ID0gYXJnICsgMQogICAgICAgICAgaWYgZGVwdGggPD0gMDoKICAgICAgICAgICAgcmV0dXJuX3R5cGUgPSBBbnkKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybl90eXBlID0gaW5mZXJfcmV0dXJuX3R5cGUoCiAgICAgICAgICAgICAgICBzdGF0ZS5zdGFja1stcG9wX2NvdW50XS52YWx1ZSwKICAgICAgICAgICAgICAgIHN0YXRlLnN0YWNrWzEgLSBwb3BfY291bnQ6XSwKICAgICAgICAgICAgICAgIGRlYnVnPWRlYnVnLAogICAgICAgICAgICAgICAgZGVwdGg9ZGVwdGggLSAxKQogICAgICAgIGVsaWYgb3BuYW1lID09ICdDQUxMX0ZVTkNUSU9OX0tXJzoKICAgICAgICAgICMgVE9ETyh1ZGltKTogSGFuZGxlIGtleXdvcmQgYXJndW1lbnRzLiBSZXF1aXJlcyBwYXNzaW5nIHRoZW0gYnkgbmFtZQogICAgICAgICAgIyAgIHRvIGluZmVyX3JldHVybl90eXBlLgogICAgICAgICAgcG9wX2NvdW50ID0gYXJnICsgMgogICAgICAgICAgcmV0dXJuX3R5cGUgPSBBbnkKICAgICAgICBlbGlmIG9wbmFtZSA9PSAnQ0FMTF9GVU5DVElPTl9FWCc6CiAgICAgICAgICAjIHN0YWNrWy1oYXNfa3dhcmdzXTogTWFwIG9mIGtleXdvcmQgYXJncy4KICAgICAgICAgICMgc3RhY2tbLTEgLSBoYXNfa3dhcmdzXTogSXRlcmFibGUgb2YgcG9zaXRpb25hbCBhcmdzLgogICAgICAgICAgIyBzdGFja1stMiAtIGhhc19rd2FyZ3NdOiBGdW5jdGlvbiB0byBjYWxsLgogICAgICAgICAgaGFzX2t3YXJncyA9IGFyZyAmIDEgICMgdHlwZTogaW50CiAgICAgICAgICBwb3BfY291bnQgPSBoYXNfa3dhcmdzICsgMgogICAgICAgICAgaWYgaGFzX2t3YXJnczoKICAgICAgICAgICAgIyBUT0RPKHVkaW0pOiBVbmltcGxlbWVudGVkLiBSZXF1aXJlcyBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgYQogICAgICAgICAgICAjICAgQ0FMTF9GVU5DVElPTl9LVyBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgICAgcmV0dXJuX3R5cGUgPSBBbnkKICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgIGFyZ3MgPSBzdGF0ZS5zdGFja1stMV0KICAgICAgICAgICAgX2NhbGxhYmxlID0gc3RhdGUuc3RhY2tbLTJdCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJncywgdHlwZWhpbnRzLkxpc3RDb25zdHJhaW50KToKICAgICAgICAgICAgICAjIENhc2Ugd2hlcmUgdGhlcmUncyBhIHNpbmdsZSB2YXJfYXJnIGFyZ3VtZW50LgogICAgICAgICAgICAgIGFyZ3MgPSBbYXJnc10KICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGFyZ3MsIHR5cGVoaW50cy5UdXBsZUNvbnN0cmFpbnQpOgogICAgICAgICAgICAgIGFyZ3MgPSBsaXN0KGFyZ3MuX2lubmVyX3R5cGVzKCkpCiAgICAgICAgICAgIHJldHVybl90eXBlID0gaW5mZXJfcmV0dXJuX3R5cGUoCiAgICAgICAgICAgICAgICBfY2FsbGFibGUudmFsdWUsIGFyZ3MsIGRlYnVnPWRlYnVnLCBkZXB0aD1kZXB0aCAtIDEpCiAgICAgICAgZWxzZToKICAgICAgICAgIHJhaXNlIFR5cGVJbmZlcmVuY2VFcnJvcigndW5hYmxlIHRvIGhhbmRsZSAlcycgJSBvcG5hbWUpCiAgICAgICAgc3RhdGUuc3RhY2tbLXBvcF9jb3VudDpdID0gW3JldHVybl90eXBlXQogICAgZWxpZiBvcG5hbWUgPT0gJ0NBTExfTUVUSE9EJzoKICAgICAgcG9wX2NvdW50ID0gMSArIGFyZwogICAgICAjIExPQURfTUVUSE9EIHdpbGwgcmV0dXJuIGEgbm9uLUNvbnN0IChBbnkpIGlmIGxvYWRpbmcgZnJvbSBhbiBBbnkuCiAgICAgIGlmIGlzaW5zdGFuY2Uoc3RhdGUuc3RhY2tbLXBvcF9jb3VudF0sIENvbnN0KSBhbmQgZGVwdGggPiAwOgogICAgICAgIHJldHVybl90eXBlID0gaW5mZXJfcmV0dXJuX3R5cGUoCiAgICAgICAgICAgIHN0YXRlLnN0YWNrWy1wb3BfY291bnRdLnZhbHVlLAogICAgICAgICAgICBzdGF0ZS5zdGFja1sxIC0gcG9wX2NvdW50Ol0sCiAgICAgICAgICAgIGRlYnVnPWRlYnVnLAogICAgICAgICAgICBkZXB0aD1kZXB0aCAtIDEpCiAgICAgIGVsc2U6CiAgICAgICAgcmV0dXJuX3R5cGUgPSB0eXBlaGludHMuQW55CiAgICAgIHN0YXRlLnN0YWNrWy1wb3BfY291bnQ6XSA9IFtyZXR1cm5fdHlwZV0KICAgIGVsaWYgb3BuYW1lIGluIHNpbXBsZV9vcHM6CiAgICAgIGlmIGRlYnVnOgogICAgICAgIHByaW50KCJFeGVjdXRpbmcgc2ltcGxlIG9wICIgKyBvcG5hbWUpCiAgICAgIHNpbXBsZV9vcHNbb3BuYW1lXShzdGF0ZSwgYXJnKQogICAgZWxpZiBvcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSc6CiAgICAgIHJldHVybnMuYWRkKHN0YXRlLnN0YWNrWy0xXSkKICAgICAgc3RhdGUgPSBOb25lCiAgICBlbGlmIG9wbmFtZSA9PSAnWUlFTERfVkFMVUUnOgogICAgICB5aWVsZHMuYWRkKHN0YXRlLnN0YWNrWy0xXSkKICAgIGVsaWYgb3BuYW1lID09ICdKVU1QX0ZPUldBUkQnOgogICAgICBqbXAgPSBwYyArIGFyZwogICAgICBqbXBfc3RhdGUgPSBzdGF0ZQogICAgICBzdGF0ZSA9IE5vbmUKICAgIGVsaWYgb3BuYW1lID09ICdKVU1QX0FCU09MVVRFJzoKICAgICAgam1wID0gYXJnCiAgICAgIGptcF9zdGF0ZSA9IHN0YXRlCiAgICAgIHN0YXRlID0gTm9uZQogICAgZWxpZiBvcG5hbWUgaW4gKCdQT1BfSlVNUF9JRl9UUlVFJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6CiAgICAgIHN0YXRlLnN0YWNrLnBvcCgpCiAgICAgIGptcCA9IGFyZwogICAgICBqbXBfc3RhdGUgPSBzdGF0ZS5jb3B5KCkKICAgIGVsaWYgb3BuYW1lIGluICgnSlVNUF9JRl9UUlVFX09SX1BPUCcsICdKVU1QX0lGX0ZBTFNFX09SX1BPUCcpOgogICAgICBqbXAgPSBhcmcKICAgICAgam1wX3N0YXRlID0gc3RhdGUuY29weSgpCiAgICAgIHN0YXRlLnN0YWNrLnBvcCgpCiAgICBlbGlmIG9wbmFtZSA9PSAnRk9SX0lURVInOgogICAgICBqbXAgPSBwYyArIGFyZwogICAgICBqbXBfc3RhdGUgPSBzdGF0ZS5jb3B5KCkKICAgICAgam1wX3N0YXRlLnN0YWNrLnBvcCgpCiAgICAgIHN0YXRlLnN0YWNrLmFwcGVuZChlbGVtZW50X3R5cGUoc3RhdGUuc3RhY2tbLTFdKSkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFR5cGVJbmZlcmVuY2VFcnJvcigndW5hYmxlIHRvIGhhbmRsZSAlcycgJSBvcG5hbWUpCgogICAgaWYgam1wIGlzIG5vdCBOb25lOgogICAgICAjIFRPRE8ocm9iZXJ0d2IpOiBJcyB0aGlzIGd1YXJhbnRlZWQgdG8gY29udmVyZ2U/CiAgICAgIG5ld19zdGF0ZSA9IHN0YXRlc1tqbXBdIHwgam1wX3N0YXRlCiAgICAgIGlmIGptcCA8IHBjIGFuZCBuZXdfc3RhdGUgIT0gc3RhdGVzW2ptcF0gYW5kIGp1bXBzW3BjXSA8IDU6CiAgICAgICAganVtcHNbcGNdICs9IDEKICAgICAgICBwYyA9IGptcAogICAgICBzdGF0ZXNbam1wXSA9IG5ld19zdGF0ZQoKICAgIGlmIGRlYnVnOgogICAgICBwcmludCgpCiAgICAgIHByaW50KHN0YXRlKQogICAgICBwcHJpbnQucHByaW50KGRpY3QoaXRlbSBmb3IgaXRlbSBpbiBzdGF0ZXMuaXRlbXMoKSBpZiBpdGVtWzFdKSkKCiAgaWYgeWllbGRzOgogICAgcmVzdWx0ID0gdHlwZWhpbnRzLkl0ZXJhYmxlW3JlZHVjZSh1bmlvbiwgQ29uc3QudW53cmFwX2FsbCh5aWVsZHMpKV0KICBlbHNlOgogICAgcmVzdWx0ID0gcmVkdWNlKHVuaW9uLCBDb25zdC51bndyYXBfYWxsKHJldHVybnMpKQogIGZpbmFsaXplX2hpbnRzKHJlc3VsdCkKCiAgaWYgZGVidWc6CiAgICBwcmludChmLCBpZChmKSwgaW5wdXRfdHlwZXMsICctPicsIHJlc3VsdCkKICByZXR1cm4gcmVzdWx0CpR9lCiMElR5cGVJbmZlcmVuY2VFcnJvcpRqXTEBAEsxSzOHlIwQaW5zdGFuY2VfdG9fdHlwZZRqVjEBAEs2S1yHlIwKdW5pb25fbGlzdJRqVjEBAEtfS2GHlIwOQ29uc3QuX19pbml0X1+UalYxAQBLZUtnh5SMDENvbnN0Ll9fZXFfX5RqVjEBAEtpS2qHlIwMQ29uc3QuX19uZV9flGpWMQEAS2xLboeUjA5Db25zdC5fX2hhc2hfX5RqVjEBAEtwS3GHlIwOQ29uc3QuX19yZXByX1+UalYxAQBLc0t0h5SMDENvbnN0LnVud3JhcJRqVjEBAEt2S3qHlIwQQ29uc3QudW53cmFwX2FsbJRqVjEBAEt8S36HlIwFQ29uc3SUal0xAQBLZEt+h5SME0ZyYW1lU3RhdGUuX19pbml0X1+UalYxAQBLhEuIh5SMEUZyYW1lU3RhdGUuX19lcV9flGpWMQEAS4pLi4eUjBFGcmFtZVN0YXRlLl9fbmVfX5RqVjEBAEuNS4+HlIwTRnJhbWVTdGF0ZS5fX2hhc2hfX5RqVjEBAEuRS5KHlIwPRnJhbWVTdGF0ZS5jb3B5lGpWMQEAS5RLlYeUjBVGcmFtZVN0YXRlLmNvbnN0X3R5cGWUalYxAQBLl0uYh5SMFkZyYW1lU3RhdGUuZ2V0X2Nsb3N1cmWUalYxAQBLmkufh5SMF0ZyYW1lU3RhdGUuY2xvc3VyZV90eXBllGpWMQEAS6FLp4eUjBVGcmFtZVN0YXRlLmdldF9nbG9iYWyUalYxAQBLqUuvh5SME0ZyYW1lU3RhdGUuZ2V0X25hbWWUalYxAQBLsUuyh5SME0ZyYW1lU3RhdGUuX19yZXByX1+UalYxAQBLtEu1h5SMEUZyYW1lU3RhdGUuX19vcl9flGpWMQEAS7dLv4eUjBJGcmFtZVN0YXRlLl9fcm9yX1+UalYxAQBLwUvCh5SMCkZyYW1lU3RhdGWUal0xAQBLgUvCh5SMBXVuaW9ulGpWMQEAS8VL1YeUjA5maW5hbGl6ZV9oaW50c5RqVjEBAEvYS+OHlIwMZWxlbWVudF90eXBllGpWMQEAS+ZL7oeUjA9rZXlfdmFsdWVfdHlwZXOUalYxAQBL8Uv5h5SMFEJvdW5kTWV0aG9kLl9faW5pdF9flGpWMQEATQUBTQ0Bh5SMC0JvdW5kTWV0aG9klGpdMQEATQIBTQ0Bh5SMCGhhc2hhYmxllGpWMQEATRABTRUBh5SMEWluZmVyX3JldHVybl90eXBllGpWMQEATRgBTUUBh5SMFmluZmVyX3JldHVybl90eXBlX2Z1bmOUalYxAQBNSAFNNAKHlHV9lChqYo0AAGqtAwAAjBBpbnN0YW5jZV90b190eXBllGqtAwAAjAp1bmlvbl9saXN0lGqtAwAAjAVDb25zdJRqrQMAAIwMQ29uc3QudW53cmFwlGqtAwAAjBBDb25zdC51bndyYXBfYWxslGqtAwAAjApGcmFtZVN0YXRllGqtAwAAjA9GcmFtZVN0YXRlLmNvcHmUaq0DAACMFUZyYW1lU3RhdGUuY29uc3RfdHlwZZRqrQMAAIwWRnJhbWVTdGF0ZS5nZXRfY2xvc3VyZZRqrQMAAIwXRnJhbWVTdGF0ZS5jbG9zdXJlX3R5cGWUaq0DAACMFUZyYW1lU3RhdGUuZ2V0X2dsb2JhbJRqrQMAAIwTRnJhbWVTdGF0ZS5nZXRfbmFtZZRqrQMAAIwFdW5pb26Uaq0DAACMDmZpbmFsaXplX2hpbnRzlGqtAwAAjAxlbGVtZW50X3R5cGWUaq0DAACMD2tleV92YWx1ZV90eXBlc5RqrQMAAIwLQm91bmRNZXRob2SUaq0DAACMCGhhc2hhYmxllGqtAwAAjBFpbmZlcl9yZXR1cm5fdHlwZZRqrQMAAIwWaW5mZXJfcmV0dXJuX3R5cGVfZnVuY5RqrQMAAHWMJ2FwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZZR0lIwwYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlX3Rlc3RfcHkzlChYOgcAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVGVzdHMgZm9yIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50cml2aWFsX2luZmVyZW5jZSB0aGF0IHVzZSBQeXRob24gMyBzeW50YXguCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCB1bml0dGVzdAoKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IHRyaXZpYWxfaW5mZXJlbmNlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCB0eXBlaGludHMKCgpjbGFzcyBUcml2aWFsSW5mZXJlbmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgZGVmIGFzc2VydFJldHVyblR5cGUoc2VsZiwgZXhwZWN0ZWQsIGYsIGlucHV0cz0oKSwgZGVwdGg9NSk6CiAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgIGV4cGVjdGVkLAogICAgICAgIHRyaXZpYWxfaW5mZXJlbmNlLmluZmVyX3JldHVybl90eXBlKGYsIGlucHV0cywgZGVidWc9VHJ1ZSwgZGVwdGg9ZGVwdGgpKQoKICBkZWYgdGVzdEJ1aWxkTGlzdFVucGFjayhzZWxmKToKICAgICMgTGFtYmRhIHVzZXMgQlVJTERfTElTVF9VTlBBQ0sgb3Bjb2RlIGluIFB5dGhvbiAzLgogICAgc2VsZi5hc3NlcnRSZXR1cm5UeXBlKAogICAgICAgIHR5cGVoaW50cy5MaXN0W2ludF0sCiAgICAgICAgbGFtYmRhIF9saXN0OiBbKl9saXN0LCAqX2xpc3QsICpfbGlzdF0sIFt0eXBlaGludHMuTGlzdFtpbnRdXSkKCiAgZGVmIHRlc3RCdWlsZFR1cGxlVW5wYWNrKHNlbGYpOgogICAgIyBMYW1iZGEgdXNlcyBCVUlMRF9UVVBMRV9VTlBBQ0sgb3Bjb2RlIGluIFB5dGhvbiAzLgogICAgIyB5YXBmOiBkaXNhYmxlCiAgICBzZWxmLmFzc2VydFJldHVyblR5cGUoCiAgICAgICAgdHlwZWhpbnRzLlR1cGxlW2ludCwgc3RyLCBzdHJdLAogICAgICAgIGxhbWJkYSBfbGlzdDEsIF9saXN0MjogKCpfbGlzdDEsICpfbGlzdDIsICpfbGlzdDIpLAogICAgICAgIFt0eXBlaGludHMuTGlzdFtpbnRdLCB0eXBlaGludHMuTGlzdFtzdHJdXSkKICAgICMgeWFwZjogZW5hYmxlCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICB1bml0dGVzdC5tYWluKCkKlH2UKIwlVHJpdmlhbEluZmVyZW5jZVRlc3QuYXNzZXJ0UmV0dXJuVHlwZZRqVjEBAEsgSyOHlIwoVHJpdmlhbEluZmVyZW5jZVRlc3QudGVzdEJ1aWxkTGlzdFVucGFja5RqVjEBAEslSymHlIwpVHJpdmlhbEluZmVyZW5jZVRlc3QudGVzdEJ1aWxkVHVwbGVVbnBhY2uUalYxAQBLK0sxh5SMFFRyaXZpYWxJbmZlcmVuY2VUZXN0lGpdMQEASx9LMYeUdX2UKIwUVHJpdmlhbEluZmVyZW5jZVRlc3SUatYDAACMJVRyaXZpYWxJbmZlcmVuY2VUZXN0LmFzc2VydFJldHVyblR5cGWUatYDAACMKFRyaXZpYWxJbmZlcmVuY2VUZXN0LnRlc3RCdWlsZExpc3RVbnBhY2uUatYDAACMKVRyaXZpYWxJbmZlcmVuY2VUZXN0LnRlc3RCdWlsZFR1cGxlVW5wYWNrlGrWAwAAdYwwYXBhY2hlX2JlYW0udHlwZWhpbnRzLnRyaXZpYWxfaW5mZXJlbmNlX3Rlc3RfcHkzlHSUjB9hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWNoZWNrlChYeCYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiUnVudGltZSB0eXBlIGNoZWNraW5nIHN1cHBvcnQuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgaW5zcGVjdAppbXBvcnQgdHlwZXMKCmZyb20gZnV0dXJlLnV0aWxzIGltcG9ydCByYWlzZV93aXRoX3RyYWNlYmFjawpmcm9tIHBhc3QuYnVpbHRpbnMgaW1wb3J0IHVuaWNvZGUKCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHBpcGVsaW5lCmZyb20gYXBhY2hlX2JlYW0ucHZhbHVlIGltcG9ydCBUYWdnZWRPdXRwdXQKZnJvbSBhcGFjaGVfYmVhbS50cmFuc2Zvcm1zIGltcG9ydCBjb3JlCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy5jb3JlIGltcG9ydCBEb0ZuCmZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3Jtcy53aW5kb3cgaW1wb3J0IFdpbmRvd2VkVmFsdWUKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMuZGVjb3JhdG9ycyBpbXBvcnQgR2VuZXJhdG9yV3JhcHBlcgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBUeXBlQ2hlY2tFcnJvcgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBfY2hlY2tfaW5zdGFuY2VfdHlwZQpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy5kZWNvcmF0b3JzIGltcG9ydCBnZXRjYWxsYXJnc19mb3JoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHMgaW1wb3J0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzIGltcG9ydCBTaW1wbGVUeXBlSGludEVycm9yCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50cyBpbXBvcnQgY2hlY2tfY29uc3RyYWludAoKCmNsYXNzIEFic3RyYWN0RG9GbldyYXBwZXIoRG9Gbik6CiAgIiIiQW4gYWJzdHJhY3QgY2xhc3MgdG8gY3JlYXRlIHdyYXBwZXIgYXJvdW5kIERvRm4iIiIKICBkZWYgX19pbml0X18oc2VsZiwgZG9mbik6CiAgICBzdXBlcihBYnN0cmFjdERvRm5XcmFwcGVyLCBzZWxmKS5fX2luaXRfXygpCiAgICBzZWxmLmRvZm4gPSBkb2ZuCgogIGRlZiBfaW5zcGVjdF9zdGFydF9idW5kbGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kb2ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHMoJ3N0YXJ0X2J1bmRsZScpCgogIGRlZiBfaW5zcGVjdF9wcm9jZXNzKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuZG9mbi5nZXRfZnVuY3Rpb25fYXJndW1lbnRzKCdwcm9jZXNzJykKCiAgZGVmIF9pbnNwZWN0X2ZpbmlzaF9idW5kbGUoc2VsZik6CiAgICByZXR1cm4gc2VsZi5kb2ZuLmdldF9mdW5jdGlvbl9hcmd1bWVudHMoJ2ZpbmlzaF9idW5kbGUnKQoKICBkZWYgd3JhcHBlcihzZWxmLCBtZXRob2QsIGFyZ3MsIGt3YXJncyk6CiAgICByZXR1cm4gbWV0aG9kKCphcmdzLCAqKmt3YXJncykKCiAgZGVmIHN0YXJ0X2J1bmRsZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIHNlbGYud3JhcHBlcihzZWxmLmRvZm4uc3RhcnRfYnVuZGxlLCBhcmdzLCBrd2FyZ3MpCgogIGRlZiBwcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi53cmFwcGVyKHNlbGYuZG9mbi5wcm9jZXNzLCBhcmdzLCBrd2FyZ3MpCgogIGRlZiBmaW5pc2hfYnVuZGxlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICByZXR1cm4gc2VsZi53cmFwcGVyKHNlbGYuZG9mbi5maW5pc2hfYnVuZGxlLCBhcmdzLCBrd2FyZ3MpCgoKY2xhc3MgT3V0cHV0Q2hlY2tXcmFwcGVyRG9GbihBYnN0cmFjdERvRm5XcmFwcGVyKToKICAiIiJBIERvRm4gdGhhdCB2ZXJpZmllcyBhZ2FpbnN0IGNvbW1vbiBlcnJvcnMgaW4gdGhlIG91dHB1dCB0eXBlLiIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBkb2ZuLCBmdWxsX2xhYmVsKToKICAgIHN1cGVyKE91dHB1dENoZWNrV3JhcHBlckRvRm4sIHNlbGYpLl9faW5pdF9fKGRvZm4pCiAgICBzZWxmLmZ1bGxfbGFiZWwgPSBmdWxsX2xhYmVsCgogIGRlZiB3cmFwcGVyKHNlbGYsIG1ldGhvZCwgYXJncywga3dhcmdzKToKICAgIHRyeToKICAgICAgcmVzdWx0ID0gbWV0aG9kKCphcmdzLCAqKmt3YXJncykKICAgIGV4Y2VwdCBUeXBlQ2hlY2tFcnJvciBhcyBlOgogICAgICBlcnJvcl9tc2cgPSAoCiAgICAgICAgICAnUnVudGltZSB0eXBlIHZpb2xhdGlvbiBkZXRlY3RlZCB3aXRoaW4gUGFyRG8oJXMpOiAnCiAgICAgICAgICAnJXMnICUgKHNlbGYuZnVsbF9sYWJlbCwgZSkpCiAgICAgIHJhaXNlX3dpdGhfdHJhY2ViYWNrKFR5cGVDaGVja0Vycm9yKGVycm9yX21zZykpCiAgICBlbHNlOgogICAgICByZXR1cm4gc2VsZi5fY2hlY2tfdHlwZShyZXN1bHQpCgogIGRlZiBfY2hlY2tfdHlwZShzZWxmLCBvdXRwdXQpOgogICAgaWYgb3V0cHV0IGlzIE5vbmU6CiAgICAgIHJldHVybiBvdXRwdXQKICAgIGVsaWYgaXNpbnN0YW5jZShvdXRwdXQsIChkaWN0LCBieXRlcywgc3RyLCB1bmljb2RlKSk6CiAgICAgIG9iamVjdF90eXBlID0gdHlwZShvdXRwdXQpLl9fbmFtZV9fCiAgICAgIHJhaXNlIFR5cGVDaGVja0Vycm9yKAogICAgICAgICAgJ1JldHVybmluZyBhICVzIGZyb20gYSBQYXJEbyBvciBGbGF0TWFwIGlzICcKICAgICAgICAgICdkaXNjb3VyYWdlZC4gUGxlYXNlIHVzZSBsaXN0KCIlcyIpIGlmIHlvdSByZWFsbHkgJwogICAgICAgICAgJ3dhbnQgdGhpcyBiZWhhdmlvci4nICUgKG9iamVjdF90eXBlLCBvdXRwdXQpKQogICAgZWxpZiBub3QgaXNpbnN0YW5jZShvdXRwdXQsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToKICAgICAgcmFpc2UgVHlwZUNoZWNrRXJyb3IoCiAgICAgICAgICAnRmxhdE1hcCBhbmQgUGFyRG8gbXVzdCByZXR1cm4gYW4gJwogICAgICAgICAgJ2l0ZXJhYmxlLiAlcyB3YXMgcmV0dXJuZWQgaW5zdGVhZC4nICUgdHlwZShvdXRwdXQpKQogICAgcmV0dXJuIG91dHB1dAoKCmNsYXNzIFR5cGVDaGVja1dyYXBwZXJEb0ZuKEFic3RyYWN0RG9GbldyYXBwZXIpOgogICIiIkEgd3JhcHBlciBhcm91bmQgYSBEb0ZuIHdoaWNoIHBlcmZvcm1zIHR5cGUtY2hlY2tpbmcgb2YgaW5wdXQgYW5kIG91dHB1dC4KICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgZG9mbiwgdHlwZV9oaW50cywgbGFiZWw9Tm9uZSk6CiAgICBzdXBlcihUeXBlQ2hlY2tXcmFwcGVyRG9Gbiwgc2VsZikuX19pbml0X18oZG9mbikKICAgIHNlbGYuX3Byb2Nlc3NfZm4gPSBzZWxmLmRvZm4uX3Byb2Nlc3NfYXJnc3BlY19mbigpCiAgICBpZiB0eXBlX2hpbnRzLmlucHV0X3R5cGVzOgogICAgICBpbnB1dF9hcmdzLCBpbnB1dF9rd2FyZ3MgPSB0eXBlX2hpbnRzLmlucHV0X3R5cGVzCiAgICAgIHNlbGYuX2lucHV0X2hpbnRzID0gZ2V0Y2FsbGFyZ3NfZm9yaGludHMoCiAgICAgICAgICBzZWxmLl9wcm9jZXNzX2ZuLCAqaW5wdXRfYXJncywgKippbnB1dF9rd2FyZ3MpCiAgICBlbHNlOgogICAgICBzZWxmLl9pbnB1dF9oaW50cyA9IE5vbmUKICAgICMgVE9ETyhyb2JlcnR3Yik6IE11bHRpLW91dHB1dC4KICAgIHNlbGYuX291dHB1dF90eXBlX2hpbnQgPSB0eXBlX2hpbnRzLnNpbXBsZV9vdXRwdXRfdHlwZShsYWJlbCkKCiAgZGVmIHdyYXBwZXIoc2VsZiwgbWV0aG9kLCBhcmdzLCBrd2FyZ3MpOgogICAgcmVzdWx0ID0gbWV0aG9kKCphcmdzLCAqKmt3YXJncykKICAgIHJldHVybiBzZWxmLl90eXBlX2NoZWNrX3Jlc3VsdChyZXN1bHQpCgogIGRlZiBwcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICBpZiBzZWxmLl9pbnB1dF9oaW50czoKICAgICAgYWN0dWFsX2lucHV0cyA9IGluc3BlY3QuZ2V0Y2FsbGFyZ3Moc2VsZi5fcHJvY2Vzc19mbiwgKmFyZ3MsICoqa3dhcmdzKSAgIyBweWxpbnQ6IGRpc2FibGU9ZGVwcmVjYXRlZC1tZXRob2QKICAgICAgZm9yIHZhciwgaGludCBpbiBzZWxmLl9pbnB1dF9oaW50cy5pdGVtcygpOgogICAgICAgIGlmIGhpbnQgaXMgYWN0dWFsX2lucHV0c1t2YXJdOgogICAgICAgICAgIyBzZWxmIHBhcmFtZXRlcgogICAgICAgICAgY29udGludWUKICAgICAgICBfY2hlY2tfaW5zdGFuY2VfdHlwZShoaW50LCBhY3R1YWxfaW5wdXRzW3Zhcl0sIHZhciwgVHJ1ZSkKICAgIHJldHVybiBzZWxmLl90eXBlX2NoZWNrX3Jlc3VsdChzZWxmLmRvZm4ucHJvY2VzcygqYXJncywgKiprd2FyZ3MpKQoKICBkZWYgX3R5cGVfY2hlY2tfcmVzdWx0KHNlbGYsIHRyYW5zZm9ybV9yZXN1bHRzKToKICAgIGlmIHNlbGYuX291dHB1dF90eXBlX2hpbnQgaXMgTm9uZSBvciB0cmFuc2Zvcm1fcmVzdWx0cyBpcyBOb25lOgogICAgICByZXR1cm4gdHJhbnNmb3JtX3Jlc3VsdHMKCiAgICBkZWYgdHlwZV9jaGVja19vdXRwdXQobyk6CiAgICAgICMgVE9ETyhyb2JlcnR3Yik6IE11bHRpLW91dHB1dC4KICAgICAgeCA9IG8udmFsdWUgaWYgaXNpbnN0YW5jZShvLCAoVGFnZ2VkT3V0cHV0LCBXaW5kb3dlZFZhbHVlKSkgZWxzZSBvCiAgICAgIHNlbGYuX3R5cGVfY2hlY2soc2VsZi5fb3V0cHV0X3R5cGVfaGludCwgeCwgaXNfaW5wdXQ9RmFsc2UpCgogICAgIyBJZiB0aGUgcmV0dXJuIHR5cGUgaXMgYSBnZW5lcmF0b3IsIHRoZW4gd2Ugd2lsbCBuZWVkIHRvIGludGVybGVhdmUgb3VyCiAgICAjIHR5cGUtY2hlY2tpbmcgd2l0aCBpdHMgbm9ybWFsIGl0ZXJhdGlvbiBzbyB3ZSBkb24ndCBkZXBsZXRlIHRoZQogICAgIyBnZW5lcmF0b3IgaW5pdGlhbGx5IGp1c3QgYnkgdHlwZS1jaGVja2luZyBpdHMgeWllbGRlZCBjb250ZW50cy4KICAgIGlmIGlzaW5zdGFuY2UodHJhbnNmb3JtX3Jlc3VsdHMsIHR5cGVzLkdlbmVyYXRvclR5cGUpOgogICAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcih0cmFuc2Zvcm1fcmVzdWx0cywgdHlwZV9jaGVja19vdXRwdXQpCiAgICBmb3IgbyBpbiB0cmFuc2Zvcm1fcmVzdWx0czoKICAgICAgdHlwZV9jaGVja19vdXRwdXQobykKICAgIHJldHVybiB0cmFuc2Zvcm1fcmVzdWx0cwoKICBkZWYgX3R5cGVfY2hlY2soc2VsZiwgdHlwZV9jb25zdHJhaW50LCBkYXR1bSwgaXNfaW5wdXQpOgogICAgIiIiVHlwZWNoZWNrIGEgUFRyYW5zZm9ybSByZWxhdGVkIGRhdHVtIGFjY29yZGluZyB0byBhIHR5cGUgY29uc3RyYWludC4KCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gb3B0aW9uYWxseSB0eXBlLWNoZWNrIGVpdGhlciBhbiBpbnB1dCBvciBhbiBvdXRwdXQKICAgIHRvIGEgUFRyYW5zZm9ybS4KCiAgICBBcmdzOgogICAgICAgIHR5cGVfY29uc3RyYWludDogQW4gaW5zdGFuY2Ugb2YgYSB0eXBlaGludHMuVHlwZUNvbnRyYWludCwgb25lIG9mIHRoZQogICAgICAgICAgd2hpdGUtbGlzdGVkIGJ1aWx0aW4gUHl0aG9uIHR5cGVzLCBvciBhIGN1c3RvbSB1c2VyIGNsYXNzLgogICAgICAgIGRhdHVtOiBBbiBpbnN0YW5jZSBvZiBhIFB5dGhvbiBvYmplY3QuCiAgICAgICAgaXNfaW5wdXQ6IFRydWUgaWYgJ2RhdHVtJyBpcyBhbiBpbnB1dCB0byBhIFBUcmFuc2Zvcm0ncyBEb0ZuLiBGYWxzZQogICAgICAgICAgb3RoZXJ3aXNlLgoKICAgIFJhaXNlczoKICAgICAgVHlwZUVycm9yOiBJZiAnZGF0dW0nIGZhaWxzIHRvIHR5cGUtY2hlY2sgYWNjb3JkaW5nIHRvICd0eXBlX2NvbnN0cmFpbnQnLgogICAgIiIiCiAgICBkYXR1bV90eXBlID0gJ2lucHV0JyBpZiBpc19pbnB1dCBlbHNlICdvdXRwdXQnCgogICAgdHJ5OgogICAgICBjaGVja19jb25zdHJhaW50KHR5cGVfY29uc3RyYWludCwgZGF0dW0pCiAgICBleGNlcHQgQ29tcG9zaXRlVHlwZUhpbnRFcnJvciBhcyBlOgogICAgICByYWlzZV93aXRoX3RyYWNlYmFjayhUeXBlQ2hlY2tFcnJvcihlLmFyZ3NbMF0pKQogICAgZXhjZXB0IFNpbXBsZVR5cGVIaW50RXJyb3I6CiAgICAgIGVycm9yX21zZyA9ICgKICAgICAgICAgICJBY2NvcmRpbmcgdG8gdHlwZS1oaW50IGV4cGVjdGVkICVzIHNob3VsZCBiZSBvZiB0eXBlICVzLiAiCiAgICAgICAgICAiSW5zdGVhZCwgcmVjZWl2ZWQgJyVzJywgYW4gaW5zdGFuY2Ugb2YgdHlwZSAlcy4iICUKICAgICAgICAgIChkYXR1bV90eXBlLCB0eXBlX2NvbnN0cmFpbnQsIGRhdHVtLCB0eXBlKGRhdHVtKSkpCiAgICAgIHJhaXNlX3dpdGhfdHJhY2ViYWNrKFR5cGVDaGVja0Vycm9yKGVycm9yX21zZykpCgoKY2xhc3MgVHlwZUNoZWNrQ29tYmluZUZuKGNvcmUuQ29tYmluZUZuKToKICAiIiJBIHdyYXBwZXIgYXJvdW5kIGEgQ29tYmluZUZuIHBlcmZvcm1pbmcgdHlwZS1jaGVja2luZyBvZiBpbnB1dCBhbmQgb3V0cHV0LgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBjb21iaW5lZm4sIHR5cGVfaGludHMsIGxhYmVsPU5vbmUpOgogICAgc2VsZi5fY29tYmluZWZuID0gY29tYmluZWZuCiAgICBzZWxmLl9pbnB1dF90eXBlX2hpbnQgPSB0eXBlX2hpbnRzLmlucHV0X3R5cGVzCiAgICBzZWxmLl9vdXRwdXRfdHlwZV9oaW50ID0gdHlwZV9oaW50cy5zaW1wbGVfb3V0cHV0X3R5cGUobGFiZWwpCiAgICBzZWxmLl9sYWJlbCA9IGxhYmVsCgogIGRlZiBjcmVhdGVfYWNjdW11bGF0b3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHJldHVybiBzZWxmLl9jb21iaW5lZm4uY3JlYXRlX2FjY3VtdWxhdG9yKCphcmdzLCAqKmt3YXJncykKCiAgZGVmIGFkZF9pbnB1dChzZWxmLCBhY2N1bXVsYXRvciwgZWxlbWVudCwgKmFyZ3MsICoqa3dhcmdzKToKICAgIGlmIHNlbGYuX2lucHV0X3R5cGVfaGludDoKICAgICAgdHJ5OgogICAgICAgIF9jaGVja19pbnN0YW5jZV90eXBlKAogICAgICAgICAgICBzZWxmLl9pbnB1dF90eXBlX2hpbnRbMF1bMF0udHVwbGVfdHlwZXNbMV0sCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICdlbGVtZW50JywKICAgICAgICAgICAgVHJ1ZSkKICAgICAgZXhjZXB0IFR5cGVDaGVja0Vycm9yIGFzIGU6CiAgICAgICAgZXJyb3JfbXNnID0gKAogICAgICAgICAgICAnUnVudGltZSB0eXBlIHZpb2xhdGlvbiBkZXRlY3RlZCB3aXRoaW4gJXM6ICcKICAgICAgICAgICAgJyVzJyAlIChzZWxmLl9sYWJlbCwgZSkpCiAgICAgICAgcmFpc2Vfd2l0aF90cmFjZWJhY2soVHlwZUNoZWNrRXJyb3IoZXJyb3JfbXNnKSkKICAgIHJldHVybiBzZWxmLl9jb21iaW5lZm4uYWRkX2lucHV0KGFjY3VtdWxhdG9yLCBlbGVtZW50LCAqYXJncywgKiprd2FyZ3MpCgogIGRlZiBtZXJnZV9hY2N1bXVsYXRvcnMoc2VsZiwgYWNjdW11bGF0b3JzLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIHNlbGYuX2NvbWJpbmVmbi5tZXJnZV9hY2N1bXVsYXRvcnMoYWNjdW11bGF0b3JzLCAqYXJncywgKiprd2FyZ3MpCgogIGRlZiBjb21wYWN0KHNlbGYsIGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpOgogICAgcmV0dXJuIHNlbGYuX2NvbWJpbmVmbi5jb21wYWN0KGFjY3VtdWxhdG9yLCAqYXJncywgKiprd2FyZ3MpCgogIGRlZiBleHRyYWN0X291dHB1dChzZWxmLCBhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKToKICAgIHJlc3VsdCA9IHNlbGYuX2NvbWJpbmVmbi5leHRyYWN0X291dHB1dChhY2N1bXVsYXRvciwgKmFyZ3MsICoqa3dhcmdzKQogICAgaWYgc2VsZi5fb3V0cHV0X3R5cGVfaGludDoKICAgICAgdHJ5OgogICAgICAgIF9jaGVja19pbnN0YW5jZV90eXBlKAogICAgICAgICAgICBzZWxmLl9vdXRwdXRfdHlwZV9oaW50LnR1cGxlX3R5cGVzWzFdLCByZXN1bHQsIE5vbmUsIFRydWUpCiAgICAgIGV4Y2VwdCBUeXBlQ2hlY2tFcnJvciBhcyBlOgogICAgICAgIGVycm9yX21zZyA9ICgKICAgICAgICAgICAgJ1J1bnRpbWUgdHlwZSB2aW9sYXRpb24gZGV0ZWN0ZWQgd2l0aGluICVzOiAnCiAgICAgICAgICAgICclcycgJSAoc2VsZi5fbGFiZWwsIGUpKQogICAgICAgIHJhaXNlX3dpdGhfdHJhY2ViYWNrKFR5cGVDaGVja0Vycm9yKGVycm9yX21zZykpCiAgICByZXR1cm4gcmVzdWx0CgoKY2xhc3MgVHlwZUNoZWNrVmlzaXRvcihwaXBlbGluZS5QaXBlbGluZVZpc2l0b3IpOgoKICBfaW5fY29tYmluZSA9IEZhbHNlCgogIGRlZiBlbnRlcl9jb21wb3NpdGVfdHJhbnNmb3JtKHNlbGYsIGFwcGxpZWRfdHJhbnNmb3JtKToKICAgIGlmIGlzaW5zdGFuY2UoYXBwbGllZF90cmFuc2Zvcm0udHJhbnNmb3JtLCBjb3JlLkNvbWJpbmVQZXJLZXkpOgogICAgICBzZWxmLl9pbl9jb21iaW5lID0gVHJ1ZQogICAgICBzZWxmLl93cmFwcGVkX2ZuID0gYXBwbGllZF90cmFuc2Zvcm0udHJhbnNmb3JtLmZuID0gVHlwZUNoZWNrQ29tYmluZUZuKAogICAgICAgICAgYXBwbGllZF90cmFuc2Zvcm0udHJhbnNmb3JtLmZuLAogICAgICAgICAgYXBwbGllZF90cmFuc2Zvcm0udHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCksCiAgICAgICAgICBhcHBsaWVkX3RyYW5zZm9ybS5mdWxsX2xhYmVsKQoKICBkZWYgbGVhdmVfY29tcG9zaXRlX3RyYW5zZm9ybShzZWxmLCBhcHBsaWVkX3RyYW5zZm9ybSk6CiAgICBpZiBpc2luc3RhbmNlKGFwcGxpZWRfdHJhbnNmb3JtLnRyYW5zZm9ybSwgY29yZS5Db21iaW5lUGVyS2V5KToKICAgICAgc2VsZi5faW5fY29tYmluZSA9IEZhbHNlCgogIGRlZiB2aXNpdF90cmFuc2Zvcm0oc2VsZiwgYXBwbGllZF90cmFuc2Zvcm0pOgogICAgdHJhbnNmb3JtID0gYXBwbGllZF90cmFuc2Zvcm0udHJhbnNmb3JtCiAgICBpZiBpc2luc3RhbmNlKHRyYW5zZm9ybSwgY29yZS5QYXJEbyk6CiAgICAgIGlmIHNlbGYuX2luX2NvbWJpbmU6CiAgICAgICAgaWYgaXNpbnN0YW5jZSh0cmFuc2Zvcm0uZm4sIGNvcmUuQ29tYmluZVZhbHVlc0RvRm4pOgogICAgICAgICAgdHJhbnNmb3JtLmZuLmNvbWJpbmVmbiA9IHNlbGYuX3dyYXBwZWRfZm4KICAgICAgZWxzZToKICAgICAgICB0cmFuc2Zvcm0uZm4gPSB0cmFuc2Zvcm0uZG9mbiA9IE91dHB1dENoZWNrV3JhcHBlckRvRm4oCiAgICAgICAgICAgIFR5cGVDaGVja1dyYXBwZXJEb0ZuKAogICAgICAgICAgICAgICAgdHJhbnNmb3JtLmZuLAogICAgICAgICAgICAgICAgdHJhbnNmb3JtLmdldF90eXBlX2hpbnRzKCksCiAgICAgICAgICAgICAgICBhcHBsaWVkX3RyYW5zZm9ybS5mdWxsX2xhYmVsKSwKICAgICAgICAgICAgYXBwbGllZF90cmFuc2Zvcm0uZnVsbF9sYWJlbCkKlH2UKIwcQWJzdHJhY3REb0ZuV3JhcHBlci5fX2luaXRfX5RqVjEBAEsySzSHlIwpQWJzdHJhY3REb0ZuV3JhcHBlci5faW5zcGVjdF9zdGFydF9idW5kbGWUalYxAQBLNks3h5SMJEFic3RyYWN0RG9GbldyYXBwZXIuX2luc3BlY3RfcHJvY2Vzc5RqVjEBAEs5SzqHlIwqQWJzdHJhY3REb0ZuV3JhcHBlci5faW5zcGVjdF9maW5pc2hfYnVuZGxllGpWMQEASzxLPYeUjBtBYnN0cmFjdERvRm5XcmFwcGVyLndyYXBwZXKUalYxAQBLP0tAh5SMIEFic3RyYWN0RG9GbldyYXBwZXIuc3RhcnRfYnVuZGxllGpWMQEAS0JLQ4eUjBtBYnN0cmFjdERvRm5XcmFwcGVyLnByb2Nlc3OUalYxAQBLRUtGh5SMIUFic3RyYWN0RG9GbldyYXBwZXIuZmluaXNoX2J1bmRsZZRqVjEBAEtIS0mHlIwTQWJzdHJhY3REb0ZuV3JhcHBlcpRqXTEBAEswS0mHlIwfT3V0cHV0Q2hlY2tXcmFwcGVyRG9Gbi5fX2luaXRfX5RqVjEBAEtOS1CHlIweT3V0cHV0Q2hlY2tXcmFwcGVyRG9Gbi53cmFwcGVylGpWMQEAS1JLW4eUjCJPdXRwdXRDaGVja1dyYXBwZXJEb0ZuLl9jaGVja190eXBllGpWMQEAS11LaoeUjBZPdXRwdXRDaGVja1dyYXBwZXJEb0ZulGpdMQEAS0xLaoeUjB1UeXBlQ2hlY2tXcmFwcGVyRG9Gbi5fX2luaXRfX5RqVjEBAEtwS3qHlIwcVHlwZUNoZWNrV3JhcHBlckRvRm4ud3JhcHBlcpRqVjEBAEt8S36HlIwcVHlwZUNoZWNrV3JhcHBlckRvRm4ucHJvY2Vzc5RqVjEBAEuAS4iHlIwnVHlwZUNoZWNrV3JhcHBlckRvRm4uX3R5cGVfY2hlY2tfcmVzdWx0lGpWMQEAS4pLmoeUjCBUeXBlQ2hlY2tXcmFwcGVyRG9Gbi5fdHlwZV9jaGVja5RqVjEBAEucS7eHlIwUVHlwZUNoZWNrV3JhcHBlckRvRm6Ual0xAQBLbUu3h5SMG1R5cGVDaGVja0NvbWJpbmVGbi5fX2luaXRfX5RqVjEBAEu9S8GHlIwlVHlwZUNoZWNrQ29tYmluZUZuLmNyZWF0ZV9hY2N1bXVsYXRvcpRqVjEBAEvDS8SHlIwcVHlwZUNoZWNrQ29tYmluZUZuLmFkZF9pbnB1dJRqVjEBAEvGS9OHlIwlVHlwZUNoZWNrQ29tYmluZUZuLm1lcmdlX2FjY3VtdWxhdG9yc5RqVjEBAEvVS9aHlIwaVHlwZUNoZWNrQ29tYmluZUZuLmNvbXBhY3SUalYxAQBL2EvZh5SMIVR5cGVDaGVja0NvbWJpbmVGbi5leHRyYWN0X291dHB1dJRqVjEBAEvbS+aHlIwSVHlwZUNoZWNrQ29tYmluZUZulGpdMQEAS7pL5oeUjCpUeXBlQ2hlY2tWaXNpdG9yLmVudGVyX2NvbXBvc2l0ZV90cmFuc2Zvcm2UalYxAQBL7Uvzh5SMKlR5cGVDaGVja1Zpc2l0b3IubGVhdmVfY29tcG9zaXRlX3RyYW5zZm9ybZRqVjEBAEv1S/eHlIwgVHlwZUNoZWNrVmlzaXRvci52aXNpdF90cmFuc2Zvcm2UalYxAQBL+U0FAYeUjBBUeXBlQ2hlY2tWaXNpdG9ylGpdMQEAS+lNBQGHlHV9lCiME0Fic3RyYWN0RG9GbldyYXBwZXKUakEDAACMG0Fic3RyYWN0RG9GbldyYXBwZXIud3JhcHBlcpRqQQMAAIwgQWJzdHJhY3REb0ZuV3JhcHBlci5zdGFydF9idW5kbGWUakEDAACMG0Fic3RyYWN0RG9GbldyYXBwZXIucHJvY2Vzc5RqQQMAAIwhQWJzdHJhY3REb0ZuV3JhcHBlci5maW5pc2hfYnVuZGxllGpBAwAAjBZPdXRwdXRDaGVja1dyYXBwZXJEb0ZulGpBAwAAjB5PdXRwdXRDaGVja1dyYXBwZXJEb0ZuLndyYXBwZXKUakEDAACMFFR5cGVDaGVja1dyYXBwZXJEb0ZulGpBAwAAjBxUeXBlQ2hlY2tXcmFwcGVyRG9Gbi53cmFwcGVylGpBAwAAjBxUeXBlQ2hlY2tXcmFwcGVyRG9Gbi5wcm9jZXNzlGpBAwAAjBJUeXBlQ2hlY2tDb21iaW5lRm6UakEDAACMJVR5cGVDaGVja0NvbWJpbmVGbi5jcmVhdGVfYWNjdW11bGF0b3KUakEDAACMHFR5cGVDaGVja0NvbWJpbmVGbi5hZGRfaW5wdXSUakEDAACMJVR5cGVDaGVja0NvbWJpbmVGbi5tZXJnZV9hY2N1bXVsYXRvcnOUakEDAACMGlR5cGVDaGVja0NvbWJpbmVGbi5jb21wYWN0lGpBAwAAjCFUeXBlQ2hlY2tDb21iaW5lRm4uZXh0cmFjdF9vdXRwdXSUakEDAACMEFR5cGVDaGVja1Zpc2l0b3KUakEDAACMKlR5cGVDaGVja1Zpc2l0b3IuZW50ZXJfY29tcG9zaXRlX3RyYW5zZm9ybZRqQQMAAIwqVHlwZUNoZWNrVmlzaXRvci5sZWF2ZV9jb21wb3NpdGVfdHJhbnNmb3JtlGpBAwAAjCBUeXBlQ2hlY2tWaXNpdG9yLnZpc2l0X3RyYW5zZm9ybZRqQQMAAHWMH2FwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlY2hlY2uUdJSMLWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5M5QoWPU0AAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlVuaXQgdGVzdHMgZm9yIHR5cGUtaGludCBvYmplY3RzIGFuZCBkZWNvcmF0b3JzIC0gUHl0aG9uIDMgc3ludGF4IHNwZWNpZmljLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgdW5pdHRlc3QKCmltcG9ydCBhcGFjaGVfYmVhbSBhcyBiZWFtCmZyb20gYXBhY2hlX2JlYW0gaW1wb3J0IHR5cGVoaW50cwpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgZGVjb3JhdG9ycwoKZGVjb3JhdG9ycy5fZW5hYmxlX2Zyb21fY2FsbGFibGUgPSBUcnVlCgoKY2xhc3MgTWFpbklucHV0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgZGVmIHRlc3RfdHlwZWRfZG9mbl9tZXRob2Qoc2VsZik6CiAgICBjbGFzcyBNeURvRm4oYmVhbS5Eb0ZuKToKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudDogaW50KSAtPiB0eXBlaGludHMuVHVwbGVbc3RyXToKICAgICAgICByZXR1cm4gdHVwbGUoc3RyKGVsZW1lbnQpKQoKICAgIHJlc3VsdCA9IFsxLCAyLCAzXSB8IGJlYW0uUGFyRG8oTXlEb0ZuKCkpCiAgICBzZWxmLmFzc2VydEVxdWFsKFsnMScsICcyJywgJzMnXSwgc29ydGVkKHJlc3VsdCkpCgogICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHR5cGVoaW50cy5UeXBlQ2hlY2tFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ3JlcXVpcmVzLippbnQuKmdvdC4qc3RyJyk6CiAgICAgIF8gPSBbJ2EnLCAnYicsICdjJ10gfCBiZWFtLlBhckRvKE15RG9GbigpKQoKICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0eXBlaGludHMuVHlwZUNoZWNrRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidyZXF1aXJlcy4qaW50Lipnb3QuKnN0cicpOgogICAgICBfID0gWzEsIDIsIDNdIHwgKGJlYW0uUGFyRG8oTXlEb0ZuKCkpIHwgJ2FnYWluJyA+PiBiZWFtLlBhckRvKE15RG9GbigpKSkKCiAgZGVmIHRlc3RfdHlwZWRfZG9mbl9tZXRob2Rfd2l0aF9jbGFzc19kZWNvcmF0b3JzKHNlbGYpOgogICAgIyBDbGFzcyBkZWNvcmF0b3JzIHRha2UgcHJlY2VkZW5jZSBvdmVyIFBFUCA0ODQgaGludHMuCiAgICBAdHlwZWhpbnRzLndpdGhfaW5wdXRfdHlwZXModHlwZWhpbnRzLlR1cGxlW2ludCwgaW50XSkKICAgIEB0eXBlaGludHMud2l0aF9vdXRwdXRfdHlwZXMoaW50KQogICAgY2xhc3MgTXlEb0ZuKGJlYW0uRG9Gbik6CiAgICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQ6IGludCkgLT4gdHlwZWhpbnRzLlR1cGxlW3N0cl06CiAgICAgICAgeWllbGQgZWxlbWVudFswXQoKICAgIHJlc3VsdCA9IFsoMSwgMildIHwgYmVhbS5QYXJEbyhNeURvRm4oKSkKICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCBzb3J0ZWQocmVzdWx0KSkKCiAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgodHlwZWhpbnRzLlR5cGVDaGVja0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIncmVxdWlyZXMuKlR1cGxlXFtpbnQsIGludFxdLipnb3QuKnN0cicpOgogICAgICBfID0gWydhJywgJ2InLCAnYyddIHwgYmVhbS5QYXJEbyhNeURvRm4oKSkKCiAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgodHlwZWhpbnRzLlR5cGVDaGVja0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIncmVxdWlyZXMuKlR1cGxlXFtpbnQsIGludFxdLipnb3QuKmludCcpOgogICAgICBfID0gWzEsIDIsIDNdIHwgKGJlYW0uUGFyRG8oTXlEb0ZuKCkpIHwgJ2FnYWluJyA+PiBiZWFtLlBhckRvKE15RG9GbigpKSkKCiAgZGVmIHRlc3RfdHlwZWRfZG9mbl9pbnN0YW5jZShzZWxmKToKICAgICMgVHlwZSBoaW50cyBhcHBsaWVkIHRvIERvRm4gaW5zdGFuY2UgdGFrZSBwcmVjZWRlbmNlIG92ZXIgZGVjb3JhdG9ycyBhbmQKICAgICMgcHJvY2VzcyBhbm5vdGF0aW9ucy4KICAgIEB0eXBlaGludHMud2l0aF9pbnB1dF90eXBlcyh0eXBlaGludHMuVHVwbGVbaW50LCBpbnRdKQogICAgQHR5cGVoaW50cy53aXRoX291dHB1dF90eXBlcyhpbnQpCiAgICBjbGFzcyBNeURvRm4oYmVhbS5Eb0ZuKToKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudDogdHlwZWhpbnRzLlR1cGxlW2ludCwgaW50XSkgLT4gXAogICAgICAgICAgdHlwZWhpbnRzLkxpc3RbaW50XToKICAgICAgICByZXR1cm4gW3N0cihlbGVtZW50KV0KCiAgICBteV9kb19mbiA9IE15RG9GbigpLndpdGhfaW5wdXRfdHlwZXMoaW50KS53aXRoX291dHB1dF90eXBlcyhzdHIpCgogICAgcmVzdWx0ID0gWzEsIDIsIDNdIHwgYmVhbS5QYXJEbyhteV9kb19mbikKICAgIHNlbGYuYXNzZXJ0RXF1YWwoWycxJywgJzInLCAnMyddLCBzb3J0ZWQocmVzdWx0KSkKCiAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgodHlwZWhpbnRzLlR5cGVDaGVja0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIncmVxdWlyZXMuKmludC4qZ290LipzdHInKToKICAgICAgXyA9IFsnYScsICdiJywgJ2MnXSB8IGJlYW0uUGFyRG8obXlfZG9fZm4pCgogICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHR5cGVoaW50cy5UeXBlQ2hlY2tFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ3JlcXVpcmVzLippbnQuKmdvdC4qc3RyJyk6CiAgICAgIF8gPSBbMSwgMiwgM10gfCAoYmVhbS5QYXJEbyhteV9kb19mbikgfCAnYWdhaW4nID4+IGJlYW0uUGFyRG8obXlfZG9fZm4pKQoKICBkZWYgdGVzdF90eXBlZF9jYWxsYWJsZV9pbnN0YW5jZShzZWxmKToKICAgICMgVHlwZSBoaW50cyBhcHBsaWVkIHRvIFBhckRvIGluc3RhbmNlIHRha2UgcHJlY2VkZW5jZSBvdmVyIGNhbGxhYmxlCiAgICAjIGRlY29yYXRvcnMgYW5kIGFubm90YXRpb25zLgogICAgQHR5cGVoaW50cy53aXRoX2lucHV0X3R5cGVzKHR5cGVoaW50cy5UdXBsZVtpbnQsIGludF0pCiAgICBAdHlwZWhpbnRzLndpdGhfb3V0cHV0X3R5cGVzKHR5cGVoaW50cy5HZW5lcmF0b3JbaW50XSkKICAgIGRlZiBkb19mbihlbGVtZW50OiB0eXBlaGludHMuVHVwbGVbaW50LCBpbnRdKSAtPiB0eXBlaGludHMuR2VuZXJhdG9yW3N0cl06CiAgICAgIHlpZWxkIHN0cihlbGVtZW50KQoKICAgIHBhcmRvID0gYmVhbS5QYXJEbyhkb19mbikud2l0aF9pbnB1dF90eXBlcyhpbnQpLndpdGhfb3V0cHV0X3R5cGVzKHN0cikKCiAgICByZXN1bHQgPSBbMSwgMiwgM10gfCBwYXJkbwogICAgc2VsZi5hc3NlcnRFcXVhbChbJzEnLCAnMicsICczJ10sIHNvcnRlZChyZXN1bHQpKQoKICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0eXBlaGludHMuVHlwZUNoZWNrRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidyZXF1aXJlcy4qaW50Lipnb3QuKnN0cicpOgogICAgICBfID0gWydhJywgJ2InLCAnYyddIHwgcGFyZG8KCiAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgodHlwZWhpbnRzLlR5cGVDaGVja0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIncmVxdWlyZXMuKmludC4qZ290LipzdHInKToKICAgICAgXyA9IFsxLCAyLCAzXSB8IChwYXJkbyB8ICdhZ2FpbicgPj4gcGFyZG8pCgogIGRlZiB0ZXN0X3R5cGVkX2NhbGxhYmxlX2l0ZXJhYmxlX291dHB1dChzZWxmKToKICAgICMgT25seSB0aGUgb3V0ZXIgSXRlcmFibGUgc2hvdWxkIGJlIHN0cmlwcGVkLgogICAgZGVmIGRvX2ZuKGVsZW1lbnQ6IGludCkgLT4gdHlwZWhpbnRzLkl0ZXJhYmxlW3R5cGVoaW50cy5JdGVyYWJsZVtzdHJdXToKICAgICAgcmV0dXJuIFtbc3RyKGVsZW1lbnQpXSAqIDJdCgogICAgcmVzdWx0ID0gWzEsIDJdIHwgYmVhbS5QYXJEbyhkb19mbikKICAgIHNlbGYuYXNzZXJ0RXF1YWwoW1snMScsICcxJ10sIFsnMicsICcyJ11dLCBzb3J0ZWQocmVzdWx0KSkKCiAgZGVmIHRlc3RfdHlwZWRfZG9mbl9tZXRob2Rfbm90X2l0ZXJhYmxlKHNlbGYpOgogICAgY2xhc3MgTXlEb0ZuKGJlYW0uRG9Gbik6CiAgICAgIGRlZiBwcm9jZXNzKHNlbGYsIGVsZW1lbnQ6IGludCkgLT4gc3RyOgogICAgICAgIHJldHVybiBzdHIoZWxlbWVudCkKCiAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgcidzdHIuKmlzIG5vdCBpdGVyYWJsZScpOgogICAgICBfID0gWzEsIDIsIDNdIHwgYmVhbS5QYXJEbyhNeURvRm4oKSkKCiAgZGVmIHRlc3RfdHlwZWRfZG9mbl9tZXRob2RfcmV0dXJuX25vbmUoc2VsZik6CiAgICBjbGFzcyBNeURvRm4oYmVhbS5Eb0ZuKToKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgdW51c2VkX2VsZW1lbnQ6IGludCkgLT4gTm9uZToKICAgICAgICBwYXNzCgogICAgcmVzdWx0ID0gWzEsIDIsIDNdIHwgYmVhbS5QYXJEbyhNeURvRm4oKSkKICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFtdLCByZXN1bHQpCgogIGRlZiB0ZXN0X3R5cGVkX2RvZm5fbWV0aG9kX3JldHVybl9vcHRpb25hbChzZWxmKToKICAgIGNsYXNzIE15RG9GbihiZWFtLkRvRm4pOgogICAgICBkZWYgcHJvY2VzcygKICAgICAgICAgIHNlbGYsCiAgICAgICAgICB1bnVzZWRfZWxlbWVudDogaW50KSAtPiB0eXBlaGludHMuT3B0aW9uYWxbdHlwZWhpbnRzLkl0ZXJhYmxlW2ludF1dOgogICAgICAgIHBhc3MKCiAgICByZXN1bHQgPSBbMSwgMiwgM10gfCBiZWFtLlBhckRvKE15RG9GbigpKQogICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoW10sIHJlc3VsdCkKCiAgZGVmIHRlc3RfdHlwZWRfZG9mbl9tZXRob2RfcmV0dXJuX29wdGlvbmFsX25vdF9pdGVyYWJsZShzZWxmKToKICAgIGNsYXNzIE15RG9GbihiZWFtLkRvRm4pOgogICAgICBkZWYgcHJvY2VzcyhzZWxmLCB1bnVzZWRfZWxlbWVudDogaW50KSAtPiB0eXBlaGludHMuT3B0aW9uYWxbaW50XToKICAgICAgICBwYXNzCgogICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsIHInaW50LippcyBub3QgaXRlcmFibGUnKToKICAgICAgXyA9IFsxLCAyLCAzXSB8IGJlYW0uUGFyRG8oTXlEb0ZuKCkpCgogIGRlZiB0ZXN0X3R5cGVkX2NhbGxhYmxlX25vdF9pdGVyYWJsZShzZWxmKToKICAgIGRlZiBkb19mbihlbGVtZW50OiBpbnQpIC0+IGludDoKICAgICAgcmV0dXJuIFtlbGVtZW50XSAgIyBSZXR1cm4gYSBsaXN0IHRvIG5vdCBmYWlsIHRoZSBwaXBlbGluZS4KCiAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygpIGFzIGNtOgogICAgICBfID0gWzEsIDIsIDNdIHwgYmVhbS5QYXJEbyhkb19mbikKICAgIHNlbGYuYXNzZXJ0UmVnZXgoJycuam9pbihjbS5vdXRwdXQpLCByJ2ludC4qaXMgbm90IGl0ZXJhYmxlJykKCiAgZGVmIHRlc3RfdHlwZWRfZG9mbl9rd29ubHkoc2VsZik6CiAgICBjbGFzcyBNeURvRm4oYmVhbS5Eb0ZuKToKICAgICAgIyBUT0RPKEJFQU0tNTg3OCk6IEEga3dvbmx5IGFyZ3VtZW50IGxpa2UKICAgICAgIyAgIHRpbWVzdGFtcD1iZWFtLkRvRm4uVGltZXN0YW1wUGFyYW0gd291bGQgbm90IHdvcmsgaGVyZS4KICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudDogaW50LCAqLCBzaWRlX2lucHV0OiBzdHIpIC0+IFwKICAgICAgICAgIHR5cGVoaW50cy5HZW5lcmF0b3JbdHlwZWhpbnRzLk9wdGlvbmFsW2ludF1dOgogICAgICAgIHlpZWxkIHN0cihlbGVtZW50KSBpZiBzaWRlX2lucHV0IGVsc2UgTm9uZQoKICAgIG15X2RvX2ZuID0gTXlEb0ZuKCkKCiAgICByZXN1bHQgPSBbMSwgMiwgM10gfCBiZWFtLlBhckRvKG15X2RvX2ZuLCBzaWRlX2lucHV0PSdhYmMnKQogICAgc2VsZi5hc3NlcnRFcXVhbChbJzEnLCAnMicsICczJ10sIHNvcnRlZChyZXN1bHQpKQoKICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0eXBlaGludHMuVHlwZUNoZWNrRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidyZXF1aXJlcy4qc3RyLipnb3QuKmludC4qc2lkZV9pbnB1dCcpOgogICAgICBfID0gWzEsIDIsIDNdIHwgYmVhbS5QYXJEbyhteV9kb19mbiwgc2lkZV9pbnB1dD0xKQoKICBkZWYgdGVzdF90eXBlZF9kb2ZuX3Zhcl9rd2FyZ3Moc2VsZik6CiAgICBjbGFzcyBNeURvRm4oYmVhbS5Eb0ZuKToKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudDogaW50LCAqKnNpZGVfaW5wdXRzOiB0eXBlaGludHMuRGljdFtzdHIsIHN0cl0pIFwKICAgICAgICAgIC0+IHR5cGVoaW50cy5HZW5lcmF0b3JbdHlwZWhpbnRzLk9wdGlvbmFsW2ludF1dOgogICAgICAgIHlpZWxkIHN0cihlbGVtZW50KSBpZiBzaWRlX2lucHV0cyBlbHNlIE5vbmUKCiAgICBteV9kb19mbiA9IE15RG9GbigpCgogICAgcmVzdWx0ID0gWzEsIDIsIDNdIHwgYmVhbS5QYXJEbyhteV9kb19mbiwgZm9vPSdhYmMnLCBiYXI9J2RlZicpCiAgICBzZWxmLmFzc2VydEVxdWFsKFsnMScsICcyJywgJzMnXSwgc29ydGVkKHJlc3VsdCkpCgogICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHR5cGVoaW50cy5UeXBlQ2hlY2tFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ3JlcXVpcmVzLipzdHIuKmdvdC4qaW50LipzaWRlX2lucHV0cycpOgogICAgICBfID0gWzEsIDIsIDNdIHwgYmVhbS5QYXJEbyhteV9kb19mbiwgYT0xKQoKICBkZWYgdGVzdF90eXBlZF9jYWxsYWJsZV9zdHJpbmdfbGl0ZXJhbHMoc2VsZik6CiAgICBkZWYgZG9fZm4oZWxlbWVudDogJ2ludCcpIC0+ICd0eXBlaGludHMuTGlzdFtzdHJdJzoKICAgICAgcmV0dXJuIFtbc3RyKGVsZW1lbnQpXSAqIDJdCgogICAgcmVzdWx0ID0gWzEsIDJdIHwgYmVhbS5QYXJEbyhkb19mbikKICAgIHNlbGYuYXNzZXJ0RXF1YWwoW1snMScsICcxJ10sIFsnMicsICcyJ11dLCBzb3J0ZWQocmVzdWx0KSkKCiAgZGVmIHRlc3RfdHlwZWRfZG9mbl9zdHJpbmdfbGl0ZXJhbHMoc2VsZik6CiAgICBjbGFzcyBNeURvRm4oYmVhbS5Eb0ZuKToKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudDogJ2ludCcpIC0+ICd0eXBlaGludHMuTGlzdFtzdHJdJzoKICAgICAgICByZXR1cm4gW1tzdHIoZWxlbWVudCldICogMl0KCiAgICByZXN1bHQgPSBbMSwgMl0gfCBiZWFtLlBhckRvKE15RG9GbigpKQogICAgc2VsZi5hc3NlcnRFcXVhbChbWycxJywgJzEnXSwgWycyJywgJzInXV0sIHNvcnRlZChyZXN1bHQpKQoKICBkZWYgdGVzdF90eXBlZF9tYXAoc2VsZik6CiAgICBkZWYgZm4oZWxlbWVudDogaW50KSAtPiBpbnQ6CiAgICAgIHJldHVybiBlbGVtZW50ICogMgoKICAgIHJlc3VsdCA9IFsxLCAyLCAzXSB8IGJlYW0uTWFwKGZuKQogICAgc2VsZi5hc3NlcnRFcXVhbChbMiwgNCwgNl0sIHNvcnRlZChyZXN1bHQpKQoKICBkZWYgdGVzdF90eXBlZF9tYXBfcmV0dXJuX29wdGlvbmFsKHNlbGYpOgogICAgIyBOb25lIGlzIGEgdmFsaWQgZWxlbWVudCB2YWx1ZSBmb3IgTWFwLgogICAgZGVmIGZuKGVsZW1lbnQ6IGludCkgLT4gdHlwZWhpbnRzLk9wdGlvbmFsW2ludF06CiAgICAgIGlmIGVsZW1lbnQgPiAxOgogICAgICAgIHJldHVybiBlbGVtZW50CgogICAgcmVzdWx0ID0gWzEsIDIsIDNdIHwgYmVhbS5NYXAoZm4pCiAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoW05vbmUsIDIsIDNdLCByZXN1bHQpCgogIGRlZiB0ZXN0X3R5cGVkX2ZsYXRtYXAoc2VsZik6CiAgICBkZWYgZm4oZWxlbWVudDogaW50KSAtPiB0eXBlaGludHMuSXRlcmFibGVbaW50XToKICAgICAgeWllbGQgZWxlbWVudCAqIDIKCiAgICByZXN1bHQgPSBbMSwgMiwgM10gfCBiZWFtLkZsYXRNYXAoZm4pCiAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWzIsIDQsIDZdLCByZXN1bHQpCgogIGRlZiB0ZXN0X3R5cGVkX2ZsYXRtYXBfb3V0cHV0X2hpbnRfbm90X2l0ZXJhYmxlKHNlbGYpOgogICAgZGVmIGZuKGVsZW1lbnQ6IGludCkgLT4gaW50OgogICAgICByZXR1cm4gZWxlbWVudCAqIDIKCiAgICAjIFRPRE8oQkVBTS04NDY2KTogVGhpcyBjYXNlIGN1cnJlbnRseSBvbmx5IGdlbmVyYXRlcyBhIHdhcm5pbmcgaW5zdGVhZCBvZiBhCiAgICAjICAgdHlwZWhpbnRzLlR5cGVDaGVja0Vycm9yLgogICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgcidpbnQuKmlzIG5vdCBpdGVyYWJsZScpOgogICAgICBfID0gWzEsIDIsIDNdIHwgYmVhbS5GbGF0TWFwKGZuKQoKICBkZWYgdGVzdF90eXBlZF9mbGF0bWFwX291dHB1dF92YWx1ZV9ub3RfaXRlcmFibGUoc2VsZik6CiAgICBkZWYgZm4oZWxlbWVudDogaW50KSAtPiB0eXBlaGludHMuSXRlcmFibGVbaW50XToKICAgICAgcmV0dXJuIGVsZW1lbnQgKiAyCgogICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgcidpbnQuKmlzIG5vdCBpdGVyYWJsZScpOgogICAgICBfID0gWzEsIDIsIDNdIHwgYmVhbS5GbGF0TWFwKGZuKQoKICBkZWYgdGVzdF90eXBlZF9mbGF0bWFwX29wdGlvbmFsKHNlbGYpOgogICAgZGVmIGZuKGVsZW1lbnQ6IGludCkgLT4gdHlwZWhpbnRzLk9wdGlvbmFsW3R5cGVoaW50cy5JdGVyYWJsZVtpbnRdXToKICAgICAgaWYgZWxlbWVudCA+IDE6CiAgICAgICAgeWllbGQgZWxlbWVudCAqIDIKCiAgICAjIFZlcmlmeSB0aGF0IHRoZSBvdXRwdXQgdHlwZSBvZiBmbiBpcyBpbnQgYW5kIG5vdCBPcHRpb25hbFtpbnRdLgogICAgZGVmIGZuMihlbGVtZW50OiBpbnQpIC0+IGludDoKICAgICAgcmV0dXJuIGVsZW1lbnQKCiAgICByZXN1bHQgPSBbMSwgMiwgM10gfCBiZWFtLkZsYXRNYXAoZm4pIHwgYmVhbS5NYXAoZm4yKQogICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKFs0LCA2XSwgcmVzdWx0KQoKCmNsYXNzIEFubm90YXRpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgZGVmIHRlc3RfcGFyZG9fZG9mbihzZWxmKToKICAgIGNsYXNzIE15RG9GbihiZWFtLkRvRm4pOgogICAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50OiBpbnQpIC0+IHR5cGVoaW50cy5HZW5lcmF0b3Jbc3RyXToKICAgICAgICB5aWVsZCBzdHIoZWxlbWVudCkKCiAgICB0aCA9IGJlYW0uUGFyRG8oTXlEb0ZuKCkpLmdldF90eXBlX2hpbnRzKCkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGguaW5wdXRfdHlwZXMsICgoaW50LCApLCB7fSkpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLm91dHB1dF90eXBlcywgKChzdHIsICksIHt9KSkKCiAgZGVmIHRlc3RfcGFyZG9fZG9mbl9ub3RfaXRlcmFibGUoc2VsZik6CiAgICBjbGFzcyBNeURvRm4oYmVhbS5Eb0ZuKToKICAgICAgZGVmIHByb2Nlc3Moc2VsZiwgZWxlbWVudDogaW50KSAtPiBzdHI6CiAgICAgICAgcmV0dXJuIHN0cihlbGVtZW50KQoKICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCByJ3N0ci4qaXMgbm90IGl0ZXJhYmxlJyk6CiAgICAgIF8gPSBiZWFtLlBhckRvKE15RG9GbigpKS5nZXRfdHlwZV9oaW50cygpCgogIGRlZiB0ZXN0X3BhcmRvX3dyYXBwZXIoc2VsZik6CiAgICBkZWYgZG9fZm4oZWxlbWVudDogaW50KSAtPiB0eXBlaGludHMuSXRlcmFibGVbc3RyXToKICAgICAgcmV0dXJuIFtzdHIoZWxlbWVudCldCgogICAgdGggPSBiZWFtLlBhckRvKGRvX2ZuKS5nZXRfdHlwZV9oaW50cygpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLmlucHV0X3R5cGVzLCAoKGludCwgKSwge30pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgoc3RyLCApLCB7fSkpCgogIGRlZiB0ZXN0X3BhcmRvX3dyYXBwZXJfdHVwbGUoc2VsZik6CiAgICAjIFRlc3QgY2FzZSBmb3IgY2FsbGFibGVzIHRoYXQgcmV0dXJuIGtleS12YWx1ZSBwYWlycyBmb3IgR0JLLiBUaGUgb3V0ZXIKICAgICMgSXRlcmFibGUgc2hvdWxkIGJlIHN0cmlwcGVkIGJ1dCB0aGUgaW5uZXIgVHVwbGUgbGVmdCBpbnRhY3QuCiAgICBkZWYgZG9fZm4oZWxlbWVudDogaW50KSAtPiB0eXBlaGludHMuSXRlcmFibGVbdHlwZWhpbnRzLlR1cGxlW3N0ciwgaW50XV06CiAgICAgIHJldHVybiBbKHN0cihlbGVtZW50KSwgZWxlbWVudCldCgogICAgdGggPSBiZWFtLlBhckRvKGRvX2ZuKS5nZXRfdHlwZV9oaW50cygpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLmlucHV0X3R5cGVzLCAoKGludCwgKSwge30pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgodHlwZWhpbnRzLlR1cGxlW3N0ciwgaW50XSwgKSwge30pKQoKICBkZWYgdGVzdF9wYXJkb193cmFwcGVyX25vdF9pdGVyYWJsZShzZWxmKToKICAgIGRlZiBkb19mbihlbGVtZW50OiBpbnQpIC0+IHN0cjoKICAgICAgcmV0dXJuIHN0cihlbGVtZW50KQoKICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCkgYXMgY206CiAgICAgIF8gPSBiZWFtLlBhckRvKGRvX2ZuKS5nZXRfdHlwZV9oaW50cygpCiAgICBzZWxmLmFzc2VydFJlZ2V4KCcnLmpvaW4oY20ub3V0cHV0KSwgcidkb19mbi4qIG5vdCBpdGVyYWJsZScpCgogIGRlZiB0ZXN0X2ZsYXRfbWFwX3dyYXBwZXIoc2VsZik6CiAgICBkZWYgbWFwX2ZuKGVsZW1lbnQ6IGludCkgLT4gdHlwZWhpbnRzLkl0ZXJhYmxlW2ludF06CiAgICAgIHJldHVybiBbZWxlbWVudCwgZWxlbWVudCArIDFdCgogICAgdGggPSBiZWFtLkZsYXRNYXAobWFwX2ZuKS5nZXRfdHlwZV9oaW50cygpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLmlucHV0X3R5cGVzLCAoKGludCwgKSwge30pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgoaW50LCApLCB7fSkpCgogIGRlZiB0ZXN0X2ZsYXRfbWFwX3dyYXBwZXJfb3B0aW9uYWxfb3V0cHV0KHNlbGYpOgogICAgIyBPcHRpb25hbCBzaG91bGQgbm90IGFmZmVjdCBvdXRwdXQgdHlwZSAoTm9uZXMgYXJlIGlnbm9yZWQpLgogICAgZGVmIG1hcF9mbihlbGVtZW50OiBpbnQpIC0+IHR5cGVoaW50cy5PcHRpb25hbFt0eXBlaGludHMuSXRlcmFibGVbaW50XV06CiAgICAgIHJldHVybiBbZWxlbWVudCwgZWxlbWVudCArIDFdCgogICAgdGggPSBiZWFtLkZsYXRNYXAobWFwX2ZuKS5nZXRfdHlwZV9oaW50cygpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLmlucHV0X3R5cGVzLCAoKGludCwgKSwge30pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgoaW50LCApLCB7fSkpCgogIEB1bml0dGVzdC5za2lwKCdCRUFNLTg2NjI6IFB5MyBhbm5vdGF0aW9ucyBub3QgeWV0IHN1cHBvcnRlZCBmb3IgTWFwVHVwbGUnKQogIGRlZiB0ZXN0X2ZsYXRfbWFwX3R1cGxlX3dyYXBwZXIoc2VsZik6CiAgICAjIFRPRE8oQkVBTS04NjYyKTogQWxzbyB0ZXN0IHdpdGggYSBmbiB0aGF0IGFjY2VwdHMgZGVmYXVsdCBhcmd1bWVudHMuCiAgICBkZWYgdHVwbGVfbWFwX2ZuKGE6IHN0ciwgYjogc3RyLCBjOiBzdHIpIC0+IHR5cGVoaW50cy5JdGVyYWJsZVtzdHJdOgogICAgICByZXR1cm4gW2EsIGIsIGNdCgogICAgdGggPSBiZWFtLkZsYXRNYXBUdXBsZSh0dXBsZV9tYXBfZm4pLmdldF90eXBlX2hpbnRzKCkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGguaW5wdXRfdHlwZXMsICgoc3RyLCBzdHIsIHN0ciksIHt9KSkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGgub3V0cHV0X3R5cGVzLCAoKHN0ciwgKSwge30pKQoKICBkZWYgdGVzdF9tYXBfd3JhcHBlcihzZWxmKToKICAgIGRlZiBtYXBfZm4odW51c2VkX2VsZW1lbnQ6IGludCkgLT4gaW50OgogICAgICByZXR1cm4gMQoKICAgIHRoID0gYmVhbS5NYXAobWFwX2ZuKS5nZXRfdHlwZV9oaW50cygpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLmlucHV0X3R5cGVzLCAoKGludCwgKSwge30pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgoaW50LCApLCB7fSkpCgogIGRlZiB0ZXN0X21hcF93cmFwcGVyX29wdGlvbmFsX291dHB1dChzZWxmKToKICAgICMgT3B0aW9uYWwgZG9lcyBhZmZlY3Qgb3V0cHV0IHR5cGUgKE5vbmVzIGFyZSBOT1QgaWdub3JlZCkuCiAgICBkZWYgbWFwX2ZuKHVudXNlZF9lbGVtZW50OiBpbnQpIC0+IHR5cGVoaW50cy5PcHRpb25hbFtpbnRdOgogICAgICByZXR1cm4gMQoKICAgIHRoID0gYmVhbS5NYXAobWFwX2ZuKS5nZXRfdHlwZV9oaW50cygpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLmlucHV0X3R5cGVzLCAoKGludCwgKSwge30pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgodHlwZWhpbnRzLk9wdGlvbmFsW2ludF0sICksIHt9KSkKCiAgQHVuaXR0ZXN0LnNraXAoJ0JFQU0tODY2MjogUHkzIGFubm90YXRpb25zIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciBNYXBUdXBsZScpCiAgZGVmIHRlc3RfbWFwX3R1cGxlKHNlbGYpOgogICAgIyBUT0RPKEJFQU0tODY2Mik6IEFsc28gdGVzdCB3aXRoIGEgZm4gdGhhdCBhY2NlcHRzIGRlZmF1bHQgYXJndW1lbnRzLgogICAgZGVmIHR1cGxlX21hcF9mbihhOiBzdHIsIGI6IHN0ciwgYzogc3RyKSAtPiBzdHI6CiAgICAgIHJldHVybiBhICsgYiArIGMKCiAgICB0aCA9IGJlYW0uTWFwVHVwbGUodHVwbGVfbWFwX2ZuKS5nZXRfdHlwZV9oaW50cygpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLmlucHV0X3R5cGVzLCAoKHN0ciwgc3RyLCBzdHIpLCB7fSkpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLm91dHB1dF90eXBlcywgKChzdHIsICksIHt9KSkKCiAgZGVmIHRlc3RfZmlsdGVyX3dyYXBwZXIoc2VsZik6CiAgICBkZWYgZmlsdGVyX2ZuKGVsZW1lbnQ6IGludCkgLT4gYm9vbDoKICAgICAgcmV0dXJuIGJvb2woZWxlbWVudCAlIDIpCgogICAgdGggPSBiZWFtLkZpbHRlcihmaWx0ZXJfZm4pLmdldF90eXBlX2hpbnRzKCkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGguaW5wdXRfdHlwZXMsICgoaW50LCApLCB7fSkpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLm91dHB1dF90eXBlcywgKChpbnQsICksIHt9KSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIHVuaXR0ZXN0Lm1haW4oKQqUfZQojDNNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9tZXRob2QuTXlEb0ZuLnByb2Nlc3OUalYxAQBLJUsmh5SMK01haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZC5NeURvRm6Ual0xAQBLJEsmh5SMJE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZJRqVjEBAEsjSzGHlIxJTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fbWV0aG9kX3dpdGhfY2xhc3NfZGVjb3JhdG9ycy5NeURvRm4ucHJvY2Vzc5RqVjEBAEs4SzmHlIxBTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fbWV0aG9kX3dpdGhfY2xhc3NfZGVjb3JhdG9ycy5NeURvRm6Ual0xAQBLNUs5h5SMOk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF93aXRoX2NsYXNzX2RlY29yYXRvcnOUalYxAQBLM0tEh5SMNU1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX2luc3RhbmNlLk15RG9Gbi5wcm9jZXNzlGpWMQEAS0xLToeUjC1NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9pbnN0YW5jZS5NeURvRm6Ual0xAQBLSUtOh5SMJk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX2luc3RhbmNllGpWMQEAS0ZLW4eUjCpNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfY2FsbGFibGVfaW5zdGFuY2WUalYxAQBLXUtwh5SMMU1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9jYWxsYWJsZV9pdGVyYWJsZV9vdXRwdXSUalYxAQBLckt4h5SMQE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9ub3RfaXRlcmFibGUuTXlEb0ZuLnByb2Nlc3OUalYxAQBLfEt9h5SMOE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9ub3RfaXRlcmFibGUuTXlEb0ZulGpdMQEAS3tLfYeUjDFNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9tZXRob2Rfbm90X2l0ZXJhYmxllGpWMQEAS3pLgIeUjD9NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9tZXRob2RfcmV0dXJuX25vbmUuTXlEb0ZuLnByb2Nlc3OUalYxAQBLhEuFh5SMN01haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fbm9uZS5NeURvRm6Ual0xAQBLg0uFh5SMME1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fbm9uZZRqVjEBAEuCS4iHlIxDTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fbWV0aG9kX3JldHVybl9vcHRpb25hbC5NeURvRm4ucHJvY2Vzc5RqVjEBAEuMS4+HlIw7TWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fbWV0aG9kX3JldHVybl9vcHRpb25hbC5NeURvRm6Ual0xAQBLi0uPh5SMNE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fb3B0aW9uYWyUalYxAQBLikuSh5SMUE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fb3B0aW9uYWxfbm90X2l0ZXJhYmxlLk15RG9Gbi5wcm9jZXNzlGpWMQEAS5ZLl4eUjEhNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9tZXRob2RfcmV0dXJuX29wdGlvbmFsX25vdF9pdGVyYWJsZS5NeURvRm6Ual0xAQBLlUuXh5SMQU1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fb3B0aW9uYWxfbm90X2l0ZXJhYmxllGpWMQEAS5RLmoeUjC5NYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfY2FsbGFibGVfbm90X2l0ZXJhYmxllGpWMQEAS5xLooeUjDNNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9rd29ubHkuTXlEb0ZuLnByb2Nlc3OUalYxAQBLqEuqh5SMK01haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX2t3b25seS5NeURvRm6Ual0xAQBLpUuqh5SMJE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX2t3b25seZRqVjEBAEukS7OHlIw3TWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fdmFyX2t3YXJncy5NeURvRm4ucHJvY2Vzc5RqVjEBAEu3S7mHlIwvTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fdmFyX2t3YXJncy5NeURvRm6Ual0xAQBLtku5h5SMKE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX3Zhcl9rd2FyZ3OUalYxAQBLtUvCh5SMMU1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9jYWxsYWJsZV9zdHJpbmdfbGl0ZXJhbHOUalYxAQBLxEvJh5SMPE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX3N0cmluZ19saXRlcmFscy5NeURvRm4ucHJvY2Vzc5RqVjEBAEvNS86HlIw0TWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fc3RyaW5nX2xpdGVyYWxzLk15RG9GbpRqXTEBAEvMS86HlIwtTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fc3RyaW5nX2xpdGVyYWxzlGpWMQEAS8tL0YeUjBxNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfbWFwlGpWMQEAS9NL2IeUjCxNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfbWFwX3JldHVybl9vcHRpb25hbJRqVjEBAEvaS+GHlIwgTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2ZsYXRtYXCUalYxAQBL40voh5SMOU1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9mbGF0bWFwX291dHB1dF9oaW50X25vdF9pdGVyYWJsZZRqVjEBAEvqS/GHlIw6TWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2ZsYXRtYXBfb3V0cHV0X3ZhbHVlX25vdF9pdGVyYWJsZZRqVjEBAEvzS/iHlIwpTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2ZsYXRtYXBfb3B0aW9uYWyUalYxAQBL+k0EAYeUjA1NYWluSW5wdXRUZXN0lGpdMQEASyJNBAGHlIwuQW5ub3RhdGlvbnNUZXN0LnRlc3RfcGFyZG9fZG9mbi5NeURvRm4ucHJvY2Vzc5RqVjEBAE0KAU0LAYeUjCZBbm5vdGF0aW9uc1Rlc3QudGVzdF9wYXJkb19kb2ZuLk15RG9GbpRqXTEBAE0JAU0LAYeUjB9Bbm5vdGF0aW9uc1Rlc3QudGVzdF9wYXJkb19kb2ZulGpWMQEATQgBTQ8Bh5SMO0Fubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX2RvZm5fbm90X2l0ZXJhYmxlLk15RG9Gbi5wcm9jZXNzlGpWMQEATRMBTRQBh5SMM0Fubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX2RvZm5fbm90X2l0ZXJhYmxlLk15RG9GbpRqXTEBAE0SAU0UAYeUjCxBbm5vdGF0aW9uc1Rlc3QudGVzdF9wYXJkb19kb2ZuX25vdF9pdGVyYWJsZZRqVjEBAE0RAU0XAYeUjCJBbm5vdGF0aW9uc1Rlc3QudGVzdF9wYXJkb193cmFwcGVylGpWMQEATRkBTR8Bh5SMKEFubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX3dyYXBwZXJfdHVwbGWUalYxAQBNIQFNKQGHlIwvQW5ub3RhdGlvbnNUZXN0LnRlc3RfcGFyZG9fd3JhcHBlcl9ub3RfaXRlcmFibGWUalYxAQBNKwFNMQGHlIwlQW5ub3RhdGlvbnNUZXN0LnRlc3RfZmxhdF9tYXBfd3JhcHBlcpRqVjEBAE0zAU05AYeUjDVBbm5vdGF0aW9uc1Rlc3QudGVzdF9mbGF0X21hcF93cmFwcGVyX29wdGlvbmFsX291dHB1dJRqVjEBAE07AU1CAYeUjCtBbm5vdGF0aW9uc1Rlc3QudGVzdF9mbGF0X21hcF90dXBsZV93cmFwcGVylGpWMQEATUQBTUwBh5SMIEFubm90YXRpb25zVGVzdC50ZXN0X21hcF93cmFwcGVylGpWMQEATU4BTVQBh5SMMEFubm90YXRpb25zVGVzdC50ZXN0X21hcF93cmFwcGVyX29wdGlvbmFsX291dHB1dJRqVjEBAE1WAU1dAYeUjB5Bbm5vdGF0aW9uc1Rlc3QudGVzdF9tYXBfdHVwbGWUalYxAQBNXwFNZwGHlIwjQW5ub3RhdGlvbnNUZXN0LnRlc3RfZmlsdGVyX3dyYXBwZXKUalYxAQBNaQFNbwGHlIwPQW5ub3RhdGlvbnNUZXN0lGpdMQEATQcBTW8Bh5R1fZQojA1NYWluSW5wdXRUZXN0lGpuAwAAjCRNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfZG9mbl9tZXRob2SUam4DAACMOk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF93aXRoX2NsYXNzX2RlY29yYXRvcnOUam4DAACMJk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX2luc3RhbmNllGpuAwAAjCpNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfY2FsbGFibGVfaW5zdGFuY2WUam4DAACMMU1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9jYWxsYWJsZV9pdGVyYWJsZV9vdXRwdXSUam4DAACMMU1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9ub3RfaXRlcmFibGWUam4DAACMME1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX21ldGhvZF9yZXR1cm5fbm9uZZRqbgMAAIw0TWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fbWV0aG9kX3JldHVybl9vcHRpb25hbJRqbgMAAIxBTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fbWV0aG9kX3JldHVybl9vcHRpb25hbF9ub3RfaXRlcmFibGWUam4DAACMLk1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9jYWxsYWJsZV9ub3RfaXRlcmFibGWUam4DAACMJE1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9kb2ZuX2t3b25seZRqbgMAAIwoTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fdmFyX2t3YXJnc5RqbgMAAIwxTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2NhbGxhYmxlX3N0cmluZ19saXRlcmFsc5RqbgMAAIwtTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2RvZm5fc3RyaW5nX2xpdGVyYWxzlGpuAwAAjBxNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfbWFwlGpuAwAAjCxNYWluSW5wdXRUZXN0LnRlc3RfdHlwZWRfbWFwX3JldHVybl9vcHRpb25hbJRqbgMAAIwgTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2ZsYXRtYXCUam4DAACMOU1haW5JbnB1dFRlc3QudGVzdF90eXBlZF9mbGF0bWFwX291dHB1dF9oaW50X25vdF9pdGVyYWJsZZRqbgMAAIw6TWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2ZsYXRtYXBfb3V0cHV0X3ZhbHVlX25vdF9pdGVyYWJsZZRqbgMAAIwpTWFpbklucHV0VGVzdC50ZXN0X3R5cGVkX2ZsYXRtYXBfb3B0aW9uYWyUam4DAACMD0Fubm90YXRpb25zVGVzdJRqbgMAAIwfQW5ub3RhdGlvbnNUZXN0LnRlc3RfcGFyZG9fZG9mbpRqbgMAAIwsQW5ub3RhdGlvbnNUZXN0LnRlc3RfcGFyZG9fZG9mbl9ub3RfaXRlcmFibGWUam4DAACMIkFubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX3dyYXBwZXKUam4DAACMKEFubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX3dyYXBwZXJfdHVwbGWUam4DAACML0Fubm90YXRpb25zVGVzdC50ZXN0X3BhcmRvX3dyYXBwZXJfbm90X2l0ZXJhYmxllGpuAwAAjCVBbm5vdGF0aW9uc1Rlc3QudGVzdF9mbGF0X21hcF93cmFwcGVylGpuAwAAjDVBbm5vdGF0aW9uc1Rlc3QudGVzdF9mbGF0X21hcF93cmFwcGVyX29wdGlvbmFsX291dHB1dJRqbgMAAIwrQW5ub3RhdGlvbnNUZXN0LnRlc3RfZmxhdF9tYXBfdHVwbGVfd3JhcHBlcpRqbgMAAIwgQW5ub3RhdGlvbnNUZXN0LnRlc3RfbWFwX3dyYXBwZXKUam4DAACMMEFubm90YXRpb25zVGVzdC50ZXN0X21hcF93cmFwcGVyX29wdGlvbmFsX291dHB1dJRqbgMAAIweQW5ub3RhdGlvbnNUZXN0LnRlc3RfbWFwX3R1cGxllGpuAwAAjCNBbm5vdGF0aW9uc1Rlc3QudGVzdF9maWx0ZXJfd3JhcHBlcpRqbgMAAHWMLWFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlZF9waXBlbGluZV90ZXN0X3B5M5R0lIwfYXBhY2hlX2JlYW0udHlwZWhpbnRzLnR5cGVoaW50c5QoWK2jAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIlN5bnRheCAmIHNlbWFudGljcyBmb3IgdHlwZS1oaW50aW5nIGN1c3RvbS1mdW5jdGlvbnMvUFRyYW5zZm9ybXMgaW4gdGhlIFNESy4KClRoaXMgbW9kdWxlIGRlZmluZXMgdHlwZS1oaW50aW5nIG9iamVjdHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHN5bnRheCBmb3IKdHlwZS1oaW50aW5nIGZ1bmN0aW9uIGFyZ3VtZW50cywgZnVuY3Rpb24gcmV0dXJuIHR5cGVzLCBvciBQVHJhbnNmb3JtIG9iamVjdAp0aGVtc2VsdmVzLiBUeXBlSGludCdzIGRlZmluZWQgaW4gdGhlIG1vZHVsZSBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgZWl0aGVyCnN0YXRpYyBvciBydW4tdGltZSB0eXBlLWNoZWNraW5nIGluIHJlZ3VsYXIgUHl0aG9uIGNvZGUuCgpUeXBlLWhpbnRzIGFyZSBkZWZpbmVkIGJ5ICdpbmRleGluZycgYSB0eXBlLXBhcmFtZXRlciBpbnRvIGEgZGVmaW5lZApDb21wb3NpdGVUeXBlSGludCBpbnN0YW5jZToKCiAgKiAnTGlzdFtpbnRdJy4KClZhbGlkIHR5cGUtaGludHMgYXJlIHBhcnRpdGlvbmVkIGludG8gdHdvIGNhdGVnb3JpZXM6IHNpbXBsZSwgYW5kIGNvbXBvc2l0ZS4KClNpbXBsZSB0eXBlIGhpbnRzIGFyZSB0eXBlIGhpbnRzIGJhc2VkIG9uIGEgc3Vic2V0IG9mIFB5dGhvbiBwcmltaXRpdmUgdHlwZXM6CmludCwgYm9vbCwgZmxvYXQsIHN0ciwgb2JqZWN0LCBOb25lLCBhbmQgYnl0ZXMuIE5vIG90aGVyIHByaW1pdGl2ZSB0eXBlcyBhcmUKYWxsb3dlZC4KCkNvbXBvc2l0ZSB0eXBlLWhpbnRzIGFyZSByZXNlcnZlZCBmb3IgaGludGluZyB0aGUgdHlwZXMgb2YgY29udGFpbmVyLWxpa2UKUHl0aG9uIG9iamVjdHMgc3VjaCBhcyAnbGlzdCcuIENvbXBvc2l0ZSB0eXBlLWhpbnRzIGNhbiBiZSBwYXJhbWV0ZXJpemVkIGJ5IGFuCmlubmVyIHNpbXBsZSBvciBjb21wb3NpdGUgdHlwZS1oaW50LCB1c2luZyB0aGUgJ2luZGV4aW5nJyBzeW50YXguIEluIG9yZGVyIHRvCmF2b2lkIGNvbmZsaWN0aW5nIHdpdGggdGhlIG5hbWVzcGFjZSBvZiB0aGUgYnVpbHQtaW4gY29udGFpbmVyIHR5cGVzLCB3aGVuCnNwZWNpZnlpbmcgdGhpcyBjYXRlZ29yeSBvZiB0eXBlLWhpbnRzLCB0aGUgZmlyc3QgbGV0dGVyIHNob3VsZCBjYXBpdGFsaXplZC4KVGhlIGZvbGxvd2luZyBjb21wb3NpdGUgdHlwZS1oaW50cyBhcmUgcGVybWl0dGVkLiBOT1RFOiAnVCcgY2FuIGJlIGFueSBvZiB0aGUKdHlwZS1oaW50cyBsaXN0ZWQgb3IgYSBzaW1wbGUgUHl0aG9uIHR5cGU6CgogICogQW55CiAgKiBVbmlvbltULCBULCBUXQogICogT3B0aW9uYWxbVF0KICAqIFR1cGxlW1QsIFRdCiAgKiBUdXBsZVtULCAuLi5dCiAgKiBMaXN0W1RdCiAgKiBLVltULCBUXQogICogRGljdFtULCBUXQogICogU2V0W1RdCiAgKiBJdGVyYWJsZVtUXQogICogSXRlcmF0b3JbVF0KICAqIEdlbmVyYXRvcltUXQoKVHlwZS1oaW50cyBjYW4gYmUgbmVzdGVkLCBhbGxvd2luZyBvbmUgdG8gZGVmaW5lIHR5cGUtaGludHMgZm9yIGNvbXBsZXggdHlwZXM6CgogICogJ0xpc3RbVHVwbGVbaW50LCBpbnQsIHN0cl1dCgpJbiBhZGRpdGlvbiwgdHlwZS1oaW50cyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgcnVuLXRpbWUgdHlwZS1jaGVja2luZyB2aWEgdGhlCid0eXBlX2NoZWNrJyBtZXRob2Qgb24gZWFjaCBUeXBlQ29uc3RyYWludC4KCiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBjb2xsZWN0aW9ucwppbXBvcnQgY29weQppbXBvcnQgbG9nZ2luZwppbXBvcnQgc3lzCmltcG9ydCB0eXBlcwppbXBvcnQgdHlwaW5nCmZyb20gYnVpbHRpbnMgaW1wb3J0IG5leHQKZnJvbSBidWlsdGlucyBpbXBvcnQgemlwCgpmcm9tIGZ1dHVyZS51dGlscyBpbXBvcnQgd2l0aF9tZXRhY2xhc3MKCl9fYWxsX18gPSBbCiAgICAnQW55JywKICAgICdVbmlvbicsCiAgICAnT3B0aW9uYWwnLAogICAgJ1R1cGxlJywKICAgICdMaXN0JywKICAgICdLVicsCiAgICAnRGljdCcsCiAgICAnU2V0JywKICAgICdJdGVyYWJsZScsCiAgICAnSXRlcmF0b3InLAogICAgJ0dlbmVyYXRvcicsCiAgICAnV2luZG93ZWRWYWx1ZScsCiAgICAnVHlwZVZhcmlhYmxlJywKXQoKIyBBIHNldCBvZiB0aGUgYnVpbHQtaW4gUHl0aG9uIHR5cGVzIHdlIGRvbid0IHN1cHBvcnQsIGd1aWRpbmcgdGhlIHVzZXJzCiMgdG8gdGVtcGxhdGVkICh1cHBlci1jYXNlKSB2ZXJzaW9ucyBpbnN0ZWFkLgpESVNBTExPV0VEX1BSSU1JVElWRV9UWVBFUyA9IChsaXN0LCBzZXQsIHR1cGxlLCBkaWN0KQoKX0xPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQoKCmNsYXNzIFNpbXBsZVR5cGVIaW50RXJyb3IoVHlwZUVycm9yKToKICBwYXNzCgoKY2xhc3MgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcihUeXBlRXJyb3IpOgogIHBhc3MKCgpjbGFzcyBHZXRpdGVtQ29uc3RydWN0b3IodHlwZSk6CiAgIiIiQSBtZXRhY2xhc3MgdGhhdCBtYWtlcyBDbHNbYXJnXSBhbiBhbGlhcyBmb3IgQ2xzKGFyZykuIiIiCiAgZGVmIF9fZ2V0aXRlbV9fKGNscywgYXJnKToKICAgIHJldHVybiBjbHMoYXJnKQoKCmNsYXNzIFR5cGVDb25zdHJhaW50KG9iamVjdCk6CiAgIiIiVGhlIGJhc2UtY2xhc3MgZm9yIGFsbCBjcmVhdGVkIHR5cGUtY29uc3RyYWludHMgZGVmaW5lZCBiZWxvdy4KCiAgQSA6Y2xhc3M6YFR5cGVDb25zdHJhaW50YCBpcyB0aGUgcmVzdWx0IG9mIHBhcmFtZXRlcml6aW5nIGEKICA6Y2xhc3M6YENvbXBvc2l0ZVR5cGVIaW50YCB3aXRoIHdpdGggb25lIG9mIHRoZSBhbGxvd2VkIFB5dGhvbiB0eXBlcyBvcgogIGFub3RoZXIgOmNsYXNzOmBDb21wb3NpdGVUeXBlSGludGAuIEl0IGJpbmRzIGFuZCBlbmZvcmNlcyBhIHNwZWNpZmljCiAgdmVyc2lvbiBvZiBhIGdlbmVyYWxpemVkIFR5cGVIaW50LgogICIiIgogIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgIiIiUmV0dXJucyB3aGV0aGVyIHN1YiBpcyBjb25zaXN0ZW50IHdpdGggc2VsZi4KCiAgICBIYXMgdGhlIHNhbWUgcmVsYXRpb25zaGlwIHRvIGlzX2NvbnNpc3RlbnRfd2l0aCgpIGFzCiAgICBfX3N1YmNsYXNzY2hlY2tfXyBkb2VzIGZvciBpc3N1YmNsYXNzKCkuCgogICAgTm90IG1lYW50IHRvIGJlIGNhbGxlZCBkaXJlY3RseTsgY2FsbCBpc19jb25zaXN0ZW50X3dpdGgoc3ViLCBzZWxmKQogICAgaW5zdGVhZC4KCiAgICBJbXBsZW1lbnRhdGlvbiBtYXkgYXNzdW1lIHRoYXQgbWF5YmVfc3ViX3R5cGUgaXMgbm90IEFueQogICAgYW5kIGhhcyBiZWVuIG5vcm1hbGl6ZWQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIHR5cGVfY2hlY2soc2VsZiwgaW5zdGFuY2UpOgogICAgIiIiRGV0ZXJtaW5lcyBpZiB0aGUgdHlwZSBvZiAnaW5zdGFuY2UnIHNhdGlzZmllcyB0aGlzIHR5cGUgY29uc3RyYWludC4KCiAgICBBcmdzOgogICAgICBpbnN0YW5jZTogQW4gaW5zdGFuY2Ugb2YgYSBQeXRob24gb2JqZWN0LgoKICAgIFJhaXNlczoKICAgICAgOmNsYXNzOmBUeXBlRXJyb3JgOiBUaGUgcGFzc2VkICoqaW5zdGFuY2UqKiBkb2Vzbid0IHNhdGlzZnkKICAgICAgICB0aGlzIDpjbGFzczpgVHlwZUNvbnN0cmFpbnRgLiBTdWJjbGFzc2VzIG9mCiAgICAgICAgOmNsYXNzOmBUeXBlQ29uc3RyYWludGAgYXJlIGZyZWUgdG8gcmFpc2UgYW55IG9mIHRoZSBzdWJjbGFzc2VzIG9mCiAgICAgICAgOmNsYXNzOmBUeXBlRXJyb3JgIGRlZmluZWQgYWJvdmUsIGRlcGVuZGluZyBvbgogICAgICAgIHRoZSBtYW5uZXIgb2YgdGhlIHR5cGUgaGludCBlcnJvci4KCiAgICBBbGwgOmNsYXNzOmBUeXBlQ29uc3RyYWludGAgc3ViLWNsYXNzZXMgbXVzdCBkZWZpbmUgdGhpcyBtZXRob2QgaW4gb3RoZXIKICAgIGZvciB0aGUgY2xhc3Mgb2JqZWN0IHRvIGJlIGNyZWF0ZWQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCiAgZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYsIHVudXNlZF9jb25jcmV0ZV90eXBlKToKICAgIHJldHVybiB7fQoKICBkZWYgYmluZF90eXBlX3ZhcmlhYmxlcyhzZWxmLCB1bnVzZWRfYmluZGluZ3MpOgogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICIiIkl0ZXJhdGVzIG92ZXIgdGhlIGlubmVyIHR5cGVzIG9mIHRoZSBjb21wb3NpdGUgdHlwZS4iIiIKICAgIHJldHVybiBbXQoKICBkZWYgdmlzaXQoc2VsZiwgdmlzaXRvciwgdmlzaXRvcl9hcmcpOgogICAgIiIiVmlzaXRvciBtZXRob2QgdG8gdmlzaXQgYWxsIGlubmVyIHR5cGVzIG9mIGEgY29tcG9zaXRlIHR5cGUuCgogICAgQXJnczoKICAgICAgdmlzaXRvcjogQSBjYWxsYWJsZSBpbnZva2VkIGZvciBhbGwgbm9kZXMgaW4gdGhlIHR5cGUgdHJlZSBjb21wcmlzaW5nCiAgICAgICAgYSBjb21wb3NpdGUgdHlwZS4gVGhlIHZpc2l0b3Igd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbm9kZSB2aXNpdGVkCiAgICAgICAgYW5kIHRoZSB2aXNpdG9yIGFyZ3VtZW50IHNwZWNpZmllZCBoZXJlLgogICAgICB2aXNpdG9yX2FyZzogVmlzaXRvciBjYWxsYmFjayBzZWNvbmQgYXJndW1lbnQuCiAgICAiIiIKICAgIHZpc2l0b3Ioc2VsZiwgdmlzaXRvcl9hcmcpCiAgICBmb3IgdCBpbiBzZWxmLl9pbm5lcl90eXBlcygpOgogICAgICBpZiBpc2luc3RhbmNlKHQsIFR5cGVDb25zdHJhaW50KToKICAgICAgICB0LnZpc2l0KHZpc2l0b3IsIHZpc2l0b3JfYXJnKQogICAgICBlbHNlOgogICAgICAgIHZpc2l0b3IodCwgdmlzaXRvcl9hcmcpCgogIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgIyBUT0RPKEJFQU0tNTk0OSk6IE5lZWRlZCBmb3IgUHl0aG9uIDIgY29tcGF0aWJpbGl0eS4KICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgoKCmRlZiBtYXRjaF90eXBlX3ZhcmlhYmxlcyh0eXBlX2NvbnN0cmFpbnQsIGNvbmNyZXRlX3R5cGUpOgogIGlmIGlzaW5zdGFuY2UodHlwZV9jb25zdHJhaW50LCBUeXBlQ29uc3RyYWludCk6CiAgICByZXR1cm4gdHlwZV9jb25zdHJhaW50Lm1hdGNoX3R5cGVfdmFyaWFibGVzKGNvbmNyZXRlX3R5cGUpCiAgcmV0dXJuIHt9CgoKZGVmIGJpbmRfdHlwZV92YXJpYWJsZXModHlwZV9jb25zdHJhaW50LCBiaW5kaW5ncyk6CiAgaWYgaXNpbnN0YW5jZSh0eXBlX2NvbnN0cmFpbnQsIFR5cGVDb25zdHJhaW50KToKICAgIHJldHVybiB0eXBlX2NvbnN0cmFpbnQuYmluZF90eXBlX3ZhcmlhYmxlcyhiaW5kaW5ncykKICByZXR1cm4gdHlwZV9jb25zdHJhaW50CgoKY2xhc3MgSW5kZXhhYmxlVHlwZUNvbnN0cmFpbnQoVHlwZUNvbnN0cmFpbnQpOgogICIiIkFuIGludGVybmFsIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgdHlwZSBjb25zdHJhaW50cyB3aXRoIGluZGV4aW5nLgogIEUuRy4gU2VxdWVuY2VUeXBlQ29uc3RyYWludCArIFR1cGxlJ3Mgb2YgZml4ZWQgc2l6ZS4KICAiIiIKICBkZWYgX2NvbnN0cmFpbnRfZm9yX2luZGV4KHNlbGYsIGlkeCk6CiAgICAiIiJSZXR1cm5zIHRoZSB0eXBlIGF0IHRoZSBnaXZlbiBpbmRleC4gVGhpcyBpcyB1c2VkIHRvIGFsbG93IHR5cGUgaW5mZXJlbmNlCiAgICB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdHlwZSBmb3IgYSBzcGVjaWZpYyBpbmRleC4gT24gbGlzdHMgdGhpcyB3aWxsIGFsc28KICAgIGJlIHRoZSBzYW1lLCBob3dldmVyIGZvciB0dXBsZXMgdGhlIHZhbHVlIHdpbGwgZGVwZW5kIG9uIHRoZSBwb3NpdGlvbi4gVGhpcwogICAgd2FzIGFkZGVkIGFzIHBhcnQgb2YgdGhlIGZ1dHVyaXplIGNoYW5nZXMgc2luY2UgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMgbm93CiAgICBpbmRleCBpbnRvIHR1cGxlcy4iIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpjbGFzcyBTZXF1ZW5jZVR5cGVDb25zdHJhaW50KEluZGV4YWJsZVR5cGVDb25zdHJhaW50KToKICAiIiJBIGNvbW1vbiBiYXNlLWNsYXNzIGZvciBhbGwgc2VxdWVuY2UgcmVsYXRlZCB0eXBlLWNvbnN0cmFpbnQgY2xhc3Nlcy4KCiAgQSBzZXF1ZW5jZSBpcyBkZWZpbmVkIGFzIGFuIGFyYml0cmFyeSBsZW5ndGggaG9tb2dlbmVvdXMgY29udGFpbmVyIHR5cGUuIFR5cGUKICBoaW50cyB3aGljaCBmYWxsIHVuZGVyIHRoaXMgY2F0ZWdvcnkgaW5jbHVkZTogTGlzdFtUXSwgU2V0W1RdLCBJdGVyYWJsZVtUXSwKICBhbmQgVHVwbGVbVCwgLi4uXS4KCiAgU3ViLWNsYXNzZXMgbWF5IG5lZWQgdG8gb3ZlcnJpZGUgJ19jb25zaXN0ZW50X3dpdGhfY2hlY2tfJyBpZiBhIHBhcnRpY3VsYXIKICBzZXF1ZW5jZSByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIHdpdGggcmVzcGVjdCB0byB0eXBlIGNvbXBhdGliaWxpdHkuCgogIEF0dHJpYnV0ZXM6CiAgICBpbm5lcl90eXBlOiBUaGUgdHlwZSB3aGljaCBldmVyeSBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSBzaG91bGQgYmUgYW4KICAgICAgaW5zdGFuY2Ugb2YuCiAgIiIiCiAgZGVmIF9faW5pdF9fKHNlbGYsIGlubmVyX3R5cGUsIHNlcXVlbmNlX3R5cGUpOgogICAgc2VsZi5pbm5lcl90eXBlID0gbm9ybWFsaXplKGlubmVyX3R5cGUpCiAgICBzZWxmLl9zZXF1ZW5jZV90eXBlID0gc2VxdWVuY2VfdHlwZQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoCiAgICAgICAgaXNpbnN0YW5jZShvdGhlciwgU2VxdWVuY2VUeXBlQ29uc3RyYWludCkgYW5kCiAgICAgICAgdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQgc2VsZi5pbm5lcl90eXBlID09IG90aGVyLmlubmVyX3R5cGUpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuaW5uZXJfdHlwZSkgXiAxMyAqIGhhc2godHlwZShzZWxmKSkKCiAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgIHlpZWxkIHNlbGYuaW5uZXJfdHlwZQoKICBkZWYgX2NvbnN0cmFpbnRfZm9yX2luZGV4KHNlbGYsIGlkeCk6CiAgICAiIiJSZXR1cm5zIHRoZSB0eXBlIGF0IHRoZSBnaXZlbiBpbmRleC4iIiIKICAgIHJldHVybiBzZWxmLmlubmVyX3R5cGUKCiAgZGVmIF9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHNlbGYsIHN1Yik6CiAgICByZXR1cm4gKAogICAgICAgIGlzaW5zdGFuY2Uoc3ViLCBzZWxmLl9fY2xhc3NfXykgYW5kCiAgICAgICAgaXNfY29uc2lzdGVudF93aXRoKHN1Yi5pbm5lcl90eXBlLCBzZWxmLmlubmVyX3R5cGUpKQoKICBkZWYgdHlwZV9jaGVjayhzZWxmLCBzZXF1ZW5jZV9pbnN0YW5jZSk6CiAgICBpZiBub3QgaXNpbnN0YW5jZShzZXF1ZW5jZV9pbnN0YW5jZSwgc2VsZi5fc2VxdWVuY2VfdHlwZSk6CiAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAiJXMgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBWYWxpZCBvYmplY3QgaW5zdGFuY2UgIgogICAgICAgICAgIm11c3QgYmUgb2YgdHlwZSAnJXMnLiBJbnN0ZWFkLCBhbiBpbnN0YW5jZSBvZiAnJXMnICIKICAgICAgICAgICJ3YXMgcmVjZWl2ZWQuIiAlICgKICAgICAgICAgICAgICBzZWxmLl9zZXF1ZW5jZV90eXBlLl9fbmFtZV9fLnRpdGxlKCksCiAgICAgICAgICAgICAgc2VsZi5fc2VxdWVuY2VfdHlwZS5fX25hbWVfXy5sb3dlcigpLAogICAgICAgICAgICAgIHNlcXVlbmNlX2luc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykpCgogICAgZm9yIGluZGV4LCBlbGVtIGluIGVudW1lcmF0ZShzZXF1ZW5jZV9pbnN0YW5jZSk6CiAgICAgIHRyeToKICAgICAgICBjaGVja19jb25zdHJhaW50KHNlbGYuaW5uZXJfdHlwZSwgZWxlbSkKICAgICAgZXhjZXB0IFNpbXBsZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFRoZSB0eXBlIG9mIGVsZW1lbnQgIyVzIGluICcKICAgICAgICAgICAgJ3RoZSBwYXNzZWQgJXMgaXMgaW5jb3JyZWN0LiBFeHBlY3RlZCBhbiBpbnN0YW5jZSBvZiB0eXBlICVzLCAnCiAgICAgICAgICAgICdpbnN0ZWFkIHJlY2VpdmVkIGFuIGluc3RhbmNlIG9mIHR5cGUgJXMuJyAlICgKICAgICAgICAgICAgICAgIHJlcHIoc2VsZiksCiAgICAgICAgICAgICAgICBpbmRleCwKICAgICAgICAgICAgICAgIF91bmlmaWVkX3JlcHIoc2VsZi5fc2VxdWVuY2VfdHlwZSksCiAgICAgICAgICAgICAgICBfdW5pZmllZF9yZXByKHNlbGYuaW5uZXJfdHlwZSksCiAgICAgICAgICAgICAgICBlbGVtLl9fY2xhc3NfXy5fX25hbWVfXykpCiAgICAgIGV4Y2VwdCBDb21wb3NpdGVUeXBlSGludEVycm9yIGFzIGU6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBUaGUgdHlwZSBvZiBlbGVtZW50ICMlcyBpbiAnCiAgICAgICAgICAgICd0aGUgcGFzc2VkICVzIGlzIGluY29ycmVjdDogJXMnICUKICAgICAgICAgICAgKHJlcHIoc2VsZiksIGluZGV4LCBzZWxmLl9zZXF1ZW5jZV90eXBlLl9fbmFtZV9fLCBlKSkKCiAgZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYsIGNvbmNyZXRlX3R5cGUpOgogICAgaWYgaXNpbnN0YW5jZShjb25jcmV0ZV90eXBlLCBTZXF1ZW5jZVR5cGVDb25zdHJhaW50KToKICAgICAgcmV0dXJuIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYuaW5uZXJfdHlwZSwgY29uY3JldGVfdHlwZS5pbm5lcl90eXBlKQogICAgcmV0dXJuIHt9CgogIGRlZiBiaW5kX3R5cGVfdmFyaWFibGVzKHNlbGYsIGJpbmRpbmdzKToKICAgIGJvdW5kX2lubmVyX3R5cGUgPSBiaW5kX3R5cGVfdmFyaWFibGVzKHNlbGYuaW5uZXJfdHlwZSwgYmluZGluZ3MpCiAgICBpZiBib3VuZF9pbm5lcl90eXBlID09IHNlbGYuaW5uZXJfdHlwZToKICAgICAgcmV0dXJuIHNlbGYKICAgIGJvdW5kX3NlbGYgPSBjb3B5LmNvcHkoc2VsZikKICAgIGJvdW5kX3NlbGYuaW5uZXJfdHlwZSA9IGJvdW5kX2lubmVyX3R5cGUKICAgIHJldHVybiBib3VuZF9zZWxmCgoKY2xhc3MgQ29tcG9zaXRlVHlwZUhpbnQob2JqZWN0KToKICAiIiJUaGUgYmFzZS1jbGFzcyBmb3IgYWxsIGNyZWF0ZWQgdHlwZS1oaW50IGNsYXNzZXMgZGVmaW5lZCBiZWxvdy4KCiAgQ29tcG9zaXRlVHlwZUhpbnQncyBzZXJ2ZSBwcmltYXJpbHkgYXMgVHlwZUNvbnN0cmFpbnQgZmFjdG9yaWVzLiBUaGV5IGFyZQogIG9ubHkgcmVxdWlyZWQgdG8gZGVmaW5lIGEgc2luZ2xlIG1ldGhvZDogJ19fZ2V0aXRlbV9fJyB3aGljaCBzaG91bGQgcmV0dXJuIGEKICBwYXJhbWV0ZXJpemVkIFR5cGVDb25zdHJhaW50LCB0aGF0IGNhbiBiZSB1c2VkIHRvIGVuZm9yY2Ugc3RhdGljIG9yIHJ1bi10aW1lCiAgdHlwZS1jaGVja2luZy4KCiAgJ19fZ2V0aXRlbV9fJyBpcyB1c2VkIGFzIGEgZmFjdG9yeSBmdW5jdGlvbiBpbiBvcmRlciB0byBwcm92aWRlIGEgZmFtaWxpYXIKICBBUEkgZm9yIGRlZmluaW5nIHR5cGUtaGludHMuIFRoZSB1bHRpbWF0ZSByZXN1bHQgaXMgdGhhdCBvbmUgd2lsbCBiZSBhYmxlIHRvCiAgdXNlOiBDb21wb3NpdGVUeXBlSGludFt0eXBlX3BhcmFtZXRlcl0gdG8gY3JlYXRlIGEgdHlwZS1oaW50IG9iamVjdCB0aGF0CiAgYmVoYXZlcyBsaWtlIGFueSBvdGhlciBQeXRob24gb2JqZWN0LiBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlCiAgJ3R5cGUtYWxpYXNlcycgYnkgYXNzaWduaW5nIHRoZSByZXR1cm5lZCB0eXBlLWhpbnRzIHRvIGEgdmFyaWFibGUuCgogICAgKiBFeGFtcGxlOiAnQ29vcmRpbmF0ZXMgPSBMaXN0W1R1cGxlW2ludCwgaW50XV0nCiAgIiIiCiAgZGVmIF9fZ2V0aXRlbV9fXyhzZWxmLCBweV90eXBlKToKICAgICIiIkdpdmVuIGEgdHlwZSBjcmVhdGVzIGEgVHlwZUNvbnN0cmFpbnQgaW5zdGFuY2UgcGFyYW1ldGVyaXplZCBieSB0aGUgdHlwZS4KCiAgICBUaGlzIGZ1bmN0aW9uIHNlcnZlcyBhcyBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBUeXBlQ29uc3RyYWludAogICAgaW5zdGFuY2VzLiBBZGRpdGlvbmFsbHksIGltcGxlbWVudGF0aW9ucyBieSBzdWItY2xhc3NlcyBzaG91bGQgcGVyZm9ybSBhbnkKICAgIHNhbml0eSBjaGVja2luZyBvZiB0aGUgcGFzc2VkIHR5cGVzIGluIHRoaXMgbWV0aG9kIGluIG9yZGVyIHRvIHJ1bGUtb3V0CiAgICBkaXNhbGxvd2VkIGJlaGF2aW9yLiBTdWNoIGFzLCBhdHRlbXB0aW5nIHRvIGNyZWF0ZSBhIFR5cGVDb25zdHJhaW50IHdob3NlCiAgICBwYXJhbWV0ZXJpemVkIHR5cGUgaXMgYWN0dWFsbHkgYW4gb2JqZWN0IGluc3RhbmNlLgoKICAgIEFyZ3M6CiAgICAgIHB5X3R5cGU6IEFuIGluc3RhbmNlIG9mIGEgUHl0aG9uIHR5cGUgb3IgVHlwZUNvbnN0cmFpbnQuCgogICAgUmV0dXJuczogQW4gaW5zdGFuY2Ugb2YgYSBjdXN0b20gVHlwZUNvbnN0cmFpbnQgZm9yIHRoaXMgQ29tcG9zaXRlVHlwZUhpbnQuCgogICAgUmFpc2VzOgogICAgICBUeXBlRXJyb3I6IElmIHRoZSBwYXNzZWQgdHlwZSB2aW9sYXRlcyBhbnkgY29udHJhaW50cyBmb3IgdGhpcyBwYXJ0aWN1bGFyCiAgICAgICAgVHlwZUhpbnQuCiAgICAiIiIKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKCgpkZWYgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0odHlwZV9wYXJhbSwgZXJyb3JfbXNnX3ByZWZpeCk6CiAgIiIiRGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCB0eXBlIHBhcmFtZXRlciB0byBhCiAgOmNsYXNzOmBDb21wb3NpdGVUeXBlSGludGAuCgogIEltcGxlbWVudHMgc2FuaXR5IGNoZWNraW5nIHRvIGRpc2FsbG93IHRoaW5ncyBsaWtlOjoKCiAgICBMaXN0WzEsIDIsIDNdIG9yIERpY3RbNV0uCgogIEFyZ3M6CiAgICB0eXBlX3BhcmFtOiBBbiBvYmplY3QgaW5zdGFuY2UuCiAgICBlcnJvcl9tc2dfcHJlZml4ICg6Y2xhc3M6YHN0cmApOiBBIHN0cmluZyBwcmVmaXggdXNlZCB0byBmb3JtYXQgYW4gZXJyb3IKICAgICAgbWVzc2FnZSBpbiB0aGUgY2FzZSBvZiBhbiBleGNlcHRpb24uCgogIFJhaXNlczoKICAgIFR5cGVFcnJvcjogSWYgdGhlIHBhc3NlZCAqKnR5cGVfcGFyYW0qKiBpcyBub3QgYSB2YWxpZCB0eXBlCiAgICAgIHBhcmFtZXRlciBmb3IgYSA6Y2xhc3M6YENvbXBvc2l0ZVR5cGVIaW50YC4KICAiIiIKICAjIE11c3QgZWl0aGVyIGJlIGEgVHlwZUNvbnN0cmFpbnQgaW5zdGFuY2Ugb3IgYSBiYXNpYyBQeXRob24gdHlwZS4KICBwb3NzaWJsZV9jbGFzc2VzID0gW3R5cGUsIFR5cGVDb25zdHJhaW50XQogIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0gMjoKICAgICMgQWNjZXNzIGZyb20gX19kaWN0X18gdG8gYXZvaWQgcHkyNy1saW50MyBjb21wYXRpYmlsaXR5IGNoZWNrZXIgY29tcGxhaW50LgogICAgcG9zc2libGVfY2xhc3Nlcy5hcHBlbmQodHlwZXMuX19kaWN0X19bIkNsYXNzVHlwZSJdKQogIGlzX25vdF90eXBlX2NvbnN0cmFpbnQgPSAoCiAgICAgIG5vdCBpc2luc3RhbmNlKHR5cGVfcGFyYW0sIHR1cGxlKHBvc3NpYmxlX2NsYXNzZXMpKSBhbmQKICAgICAgdHlwZV9wYXJhbSBpcyBub3QgTm9uZSBhbmQKICAgICAgZ2V0YXR0cih0eXBlX3BhcmFtLCAnX19tb2R1bGVfXycsIE5vbmUpICE9ICd0eXBpbmcnKQogIGlzX2ZvcmJpZGRlbl90eXBlID0gKAogICAgICBpc2luc3RhbmNlKHR5cGVfcGFyYW0sIHR5cGUpIGFuZCB0eXBlX3BhcmFtIGluIERJU0FMTE9XRURfUFJJTUlUSVZFX1RZUEVTKQoKICBpZiBpc19ub3RfdHlwZV9jb25zdHJhaW50IG9yIGlzX2ZvcmJpZGRlbl90eXBlOgogICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICclcyBtdXN0IGJlIGEgbm9uLXNlcXVlbmNlLCBhIHR5cGUsIG9yIGEgVHlwZUNvbnN0cmFpbnQuICVzJwogICAgICAgICcgaXMgYW4gaW5zdGFuY2Ugb2YgJXMuJyAlCiAgICAgICAgKGVycm9yX21zZ19wcmVmaXgsIHR5cGVfcGFyYW0sIHR5cGVfcGFyYW0uX19jbGFzc19fLl9fbmFtZV9fKSkKCgpkZWYgX3VuaWZpZWRfcmVwcihvKToKICAiIiJHaXZlbiBhbiBvYmplY3QgcmV0dXJuIGEgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBvYmplY3QuCgogIFRoaXMgZnVuY3Rpb24gY2xvc2VseSBtaXJyb3JzICdfX3F1YWxuYW1lX18nIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluCiAgUHl0aG9uIDMuMy4gSXQgaXMgdXNlZCBwcmltYXJpbHkgdG8gZm9ybWF0IHR5cGVzIG9yIG9iamVjdCBpbnN0YW5jZXMgZm9yCiAgZXJyb3IgbWVzc2FnZXMuCgogIEFyZ3M6CiAgICBvOiBBbiBpbnN0YW5jZSBvZiBhIFR5cGVDb25zdHJhaW50IG9yIGEgdHlwZS4KCiAgUmV0dXJuczoKICAgIEEgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBwYXNzZWQgUHl0aG9uIG9iamVjdCBmaXQgZm9yIHN0cmluZyBmb3JtYXR0aW5nLgogICIiIgogIHJldHVybiByZXByKG8pIGlmIGlzaW5zdGFuY2UobywgKFR5cGVDb25zdHJhaW50LCB0eXBlKE5vbmUpKSkgZWxzZSBvLl9fbmFtZV9fCgoKZGVmIGNoZWNrX2NvbnN0cmFpbnQodHlwZV9jb25zdHJhaW50LCBvYmplY3RfaW5zdGFuY2UpOgogICIiIkRldGVybWluZSBpZiB0aGUgcGFzc2VkIHR5cGUgaW5zdGFuY2Ugc2F0aXNmaWVzIHRoZSBUeXBlQ29uc3RyYWludC4KCiAgV2hlbiBleGFtaW5pbmcgYSBjYW5kaWRhdGUgdHlwZSBmb3IgY29uc3RyYWludCBzYXRpc2ZhY3Rpb24gaW4KICAndHlwZV9jaGVjaycsIGFsbCBDb21wb3NpdGVUeXBlSGludCdzIGV2ZW50dWFsbHkgY2FsbCB0aGlzIGZ1bmN0aW9uLiBUaGlzCiAgZnVuY3Rpb24gbWF5IGVuZCB1cCBiZWluZyBjYWxsZWQgcmVjdXJzaXZlbHkgaWYgdGhlIGhpbnRlZCB0eXBlIG9mIGEKICBDb21wb3NpdGVUeXBlSGludCBpcyBhbm90aGVyIENvbXBvc2l0ZVR5cGVIaW50LgoKICBBcmdzOgogICAgdHlwZV9jb25zdHJhaW50OiBBbiBpbnN0YW5jZSBvZiBhIFR5cGVDb25zdHJhaW50IG9yIGEgYnVpbHQtaW4gUHl0aG9uIHR5cGUuCiAgICBvYmplY3RfaW5zdGFuY2U6IEFuIG9iamVjdCBpbnN0YW5jZS4KCiAgUmFpc2VzOgogICAgU2ltcGxlVHlwZUhpbnRFcnJvcjogSWYgJ3R5cGVfY29uc3RyYWludCcgaXMgYSBvbmUgb2YgdGhlIGFsbG93ZWQgcHJpbWl0aXZlCiAgICAgIFB5dGhvbiB0eXBlcyBhbmQgJ29iamVjdF9pbnN0YW5jZScgaXNuJ3QgYW4gaW5zdGFuY2Ugb2YgdGhpcyB0eXBlLgogICAgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcjogSWYgJ3R5cGVfY29uc3RyYWludCcgaXMgYSBUeXBlQ29uc3RyYWludCBvYmplY3QgYW5kCiAgICAgICdvYmplY3RfaW5zdGFuY2UnIGRvZXMgbm90IHNhdGlzZnkgaXRzIGNvbnN0cmFpbnQuCiAgIiIiCiAgaWYgdHlwZV9jb25zdHJhaW50IGlzIE5vbmUgYW5kIG9iamVjdF9pbnN0YW5jZSBpcyBOb25lOgogICAgcmV0dXJuCiAgZWxpZiBpc2luc3RhbmNlKHR5cGVfY29uc3RyYWludCwgVHlwZUNvbnN0cmFpbnQpOgogICAgdHlwZV9jb25zdHJhaW50LnR5cGVfY2hlY2sob2JqZWN0X2luc3RhbmNlKQogIGVsaWYgdHlwZV9jb25zdHJhaW50IGlzIE5vbmU6CiAgICAjIFRPRE8ocm9iZXJ0d2IpOiBGaXggdXNlcyBvZiBOb25lIGZvciBBbnkuCiAgICBwYXNzCiAgZWxpZiBub3QgaXNpbnN0YW5jZSh0eXBlX2NvbnN0cmFpbnQsIHR5cGUpOgogICAgcmFpc2UgUnVudGltZUVycm9yKCJiYWQgdHlwZTogJXMiICUgKHR5cGVfY29uc3RyYWludCwgKSkKICBlbGlmIG5vdCBpc2luc3RhbmNlKG9iamVjdF9pbnN0YW5jZSwgdHlwZV9jb25zdHJhaW50KToKICAgIHJhaXNlIFNpbXBsZVR5cGVIaW50RXJyb3IKCgpjbGFzcyBBbnlUeXBlQ29uc3RyYWludChUeXBlQ29uc3RyYWludCk6CiAgIiIiQW4gQW55IHR5cGUtaGludC4KCiAgQW55IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSAiZG9uJ3QgY2FyZSIgd2hlbiBoaW50aW5nIHRoZSB0eXBlcyBvZgogIGZ1bmN0aW9uIGFyZ3VtZW50cyBvciByZXR1cm4gdHlwZXMuIEFsbCBvdGhlciBUeXBlQ29uc3RyYWludCdzIGFyZSBlcXVpdmFsZW50CiAgdG8gJ0FueScsIGFuZCBpdHMgJ3R5cGVfY2hlY2snIG1ldGhvZCBpcyBhIG5vLW9wLgogICIiIgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikKCiAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgcmV0dXJuICdBbnknCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICMgVE9ETyhCRUFNLTM3MzApOiBGaXggdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSBpc3N1ZXMgd2l0aCBfX2hhc2hfXy4KICAgIHJldHVybiBoYXNoKGlkKHNlbGYpKQoKICBkZWYgdHlwZV9jaGVjayhzZWxmLCBpbnN0YW5jZSk6CiAgICBwYXNzCgoKY2xhc3MgVHlwZVZhcmlhYmxlKEFueVR5cGVDb25zdHJhaW50KToKICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICBzZWxmLm5hbWUgPSBuYW1lCgogIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgcmV0dXJuIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICMgVE9ETyhCRUFNLTM3MzApOiBGaXggdHlwZWhpbnRzLlR5cGVWYXJpYWJsZSBpc3N1ZXMgd2l0aCBfX2hhc2hfXy4KICAgIHJldHVybiBoYXNoKGlkKHNlbGYpKQoKICBkZWYgX19yZXByX18oc2VsZik6CiAgICByZXR1cm4gJ1R5cGVWYXJpYWJsZVslc10nICUgc2VsZi5uYW1lCgogIGRlZiBtYXRjaF90eXBlX3ZhcmlhYmxlcyhzZWxmLCBjb25jcmV0ZV90eXBlKToKICAgIHJldHVybiB7c2VsZjogY29uY3JldGVfdHlwZX0KCiAgZGVmIGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZiwgYmluZGluZ3MpOgogICAgcmV0dXJuIGJpbmRpbmdzLmdldChzZWxmLCBzZWxmKQoKCmNsYXNzIFVuaW9uSGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQSBVbmlvbiB0eXBlLWhpbnQuIFVuaW9uW1gsIFldIGFjY2VwdHMgaW5zdGFuY2VzIG9mIHR5cGUgWCBPUiB0eXBlIFkuCgogIER1cGxpY2F0ZSB0eXBlIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQuIEFkZGl0b25hbGx5LCBOZXN0ZWQgVW5pb24gaGludHMgd2lsbAogIGJlIGZsYXR0ZW5lZCBvdXQuIEZvciBleGFtcGxlOgoKICAgICogVW5pb25bVW5pb25bc3RyLCBpbnRdLCBib29sXSAtPiBVbmlvbltzdHIsIGludCwgYm9vbF0KCiAgQSBjYW5kaWRhdGUgdHlwZSBpbnN0YW5jZSBzYXRpc2ZpZXMgYSBVbmlvbkNvbnN0cmFpbnQgaWYgaXQgaXMgYW4KICBpbnN0YW5jZSBvZiBhbnkgb2YgdGhlIHBhcmFtZXRlcml6ZWQgJ3VuaW9uX3R5cGVzJyBmb3IgYSBVbmlvbi4KCiAgVW5pb25bWF0gaXMgZGlzYWxsb3dlZCwgYW5kIGFsbCB0eXBlIHBhcmFtZXRlcnMgd2lsbCBiZSBzYW5pdHkgY2hlY2tlZCB0bwogIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggbmVzdGVkIHR5cGUtaGludHMuCgogIFdoZW4gY29tcGFyaW5nIHR3byBVbmlvbiBoaW50cywgb3JkZXJpbmcgaXMgZW5mb3JjZWQgYmVmb3JlIGNvbXBhcmlzb24uCgogICAgKiBVbmlvbltpbnQsIHN0cl0gPT0gVW5pb25bc3RyLCBpbnRdCiAgIiIiCiAgY2xhc3MgVW5pb25Db25zdHJhaW50KFR5cGVDb25zdHJhaW50KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1bmlvbl90eXBlcyk6CiAgICAgIHNlbGYudW5pb25fdHlwZXMgPSBzZXQobm9ybWFsaXplKHQpIGZvciB0IGluIHVuaW9uX3R5cGVzKQoKICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICByZXR1cm4gKAogICAgICAgICAgaXNpbnN0YW5jZShvdGhlciwgVW5pb25IaW50LlVuaW9uQ29uc3RyYWludCkgYW5kCiAgICAgICAgICBzZWxmLnVuaW9uX3R5cGVzID09IG90aGVyLnVuaW9uX3R5cGVzKQoKICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgcmV0dXJuIDEgKyBzdW0oaGFzaCh0KSBmb3IgdCBpbiBzZWxmLnVuaW9uX3R5cGVzKQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgIyBTb3J0aW5nIHRoZSB0eXBlIG5hbWUgc3RyaW5ncyBzaW1wbGlmaWVzIHVuaXQgdGVzdHMuCiAgICAgIHJldHVybiAnVW5pb25bJXNdJyAlICgKICAgICAgICAgICcsICcuam9pbihzb3J0ZWQoX3VuaWZpZWRfcmVwcih0KSBmb3IgdCBpbiBzZWxmLnVuaW9uX3R5cGVzKSkpCgogICAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgICAgZm9yIHQgaW4gc2VsZi51bmlvbl90eXBlczoKICAgICAgICB5aWVsZCB0CgogICAgZGVmIF9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHNlbGYsIHN1Yik6CiAgICAgIGlmIGlzaW5zdGFuY2Uoc3ViLCBVbmlvbkNvbnN0cmFpbnQpOgogICAgICAgICMgQSB1bmlvbiB0eXBlIGlzIGNvbXBhdGlibGUgaWYgZXZlcnkgcG9zc2libGUgdHlwZSBpcyBjb21wYXRpYmxlLgogICAgICAgICMgRS5nLiBVbmlvbltBLCBCLCBDXSA+IFVuaW9uW0EsIEJdLgogICAgICAgIHJldHVybiBhbGwoaXNfY29uc2lzdGVudF93aXRoKGVsZW0sIHNlbGYpIGZvciBlbGVtIGluIHN1Yi51bmlvbl90eXBlcykKICAgICAgIyBPdGhlciBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBhdCBsZWFzdCBvbmUgb2YgdGhpcyB1bmlvbidzIHN1YnR5cGVzLgogICAgICAjIEUuZy4gVW5pb25bQSwgQiwgQ10gPiBUIGlmIFQgPiBBIG9yIFQgPiBCIG9yIFQgPiBDLgogICAgICByZXR1cm4gYW55KGlzX2NvbnNpc3RlbnRfd2l0aChzdWIsIGVsZW0pIGZvciBlbGVtIGluIHNlbGYudW5pb25fdHlwZXMpCgogICAgZGVmIHR5cGVfY2hlY2soc2VsZiwgaW5zdGFuY2UpOgogICAgICBlcnJvcl9tc2cgPSAnJwogICAgICBmb3IgdCBpbiBzZWxmLnVuaW9uX3R5cGVzOgogICAgICAgIHRyeToKICAgICAgICAgIGNoZWNrX2NvbnN0cmFpbnQodCwgaW5zdGFuY2UpCiAgICAgICAgICByZXR1cm4KICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CiAgICAgICAgICBlcnJvcl9tc2cgPSBzdHIoZSkKICAgICAgICAgIGNvbnRpbnVlCgogICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgJyVzIHR5cGUtY29uc3RyYWludCB2aW9sYXRlZC4gRXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2Ygb25lIG9mOiAlcywgJwogICAgICAgICAgJ3JlY2VpdmVkICVzIGluc3RlYWQuJXMnICUgKAogICAgICAgICAgICAgIHJlcHIoc2VsZiksCiAgICAgICAgICAgICAgdHVwbGUoc29ydGVkKF91bmlmaWVkX3JlcHIodCkgZm9yIHQgaW4gc2VsZi51bmlvbl90eXBlcykpLAogICAgICAgICAgICAgIGluc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAgICAgICBlcnJvcl9tc2cpKQoKICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdHlwZV9wYXJhbXMpOgogICAgaWYgbm90IGlzaW5zdGFuY2UodHlwZV9wYXJhbXMsIChjb2xsZWN0aW9ucy5TZXF1ZW5jZSwgc2V0KSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGNyZWF0ZSBVbmlvbiB3aXRob3V0IGEgc2VxdWVuY2Ugb2YgdHlwZXMuJykKCiAgICAjIEZsYXR0ZW4gbmVzdGVkIFVuaW9uJ3MgYW5kIGR1cGxpY2F0ZWQgcmVwZWF0ZWQgdHlwZSBoaW50cy4KICAgIHBhcmFtcyA9IHNldCgpCiAgICBkaWN0X3VuaW9uID0gTm9uZQogICAgZm9yIHQgaW4gdHlwZV9wYXJhbXM6CiAgICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgICAgdCwgZXJyb3JfbXNnX3ByZWZpeD0nQWxsIHBhcmFtZXRlcnMgdG8gYSBVbmlvbiBoaW50JykKCiAgICAgIGlmIGlzaW5zdGFuY2UodCwgc2VsZi5VbmlvbkNvbnN0cmFpbnQpOgogICAgICAgIHBhcmFtcyB8PSB0LnVuaW9uX3R5cGVzCiAgICAgIGVsaWYgaXNpbnN0YW5jZSh0LCBEaWN0Q29uc3RyYWludCk6CiAgICAgICAgaWYgZGljdF91bmlvbiBpcyBOb25lOgogICAgICAgICAgZGljdF91bmlvbiA9IHQKICAgICAgICBlbHNlOgogICAgICAgICAgZGljdF91bmlvbi5rZXlfdHlwZSA9IFVuaW9uW2RpY3RfdW5pb24ua2V5X3R5cGUsIHQua2V5X3R5cGVdCiAgICAgICAgICBkaWN0X3VuaW9uLnZhbHVlX3R5cGUgPSBVbmlvbltkaWN0X3VuaW9uLnZhbHVlX3R5cGUsIHQudmFsdWVfdHlwZV0KICAgICAgZWxzZToKICAgICAgICBwYXJhbXMuYWRkKHQpCgogICAgaWYgZGljdF91bmlvbiBpcyBub3QgTm9uZToKICAgICAgcGFyYW1zLmFkZChkaWN0X3VuaW9uKQoKICAgIGlmIEFueSBpbiBwYXJhbXM6CiAgICAgIHJldHVybiBBbnkKICAgIGVsaWYgbGVuKHBhcmFtcykgPT0gMToKICAgICAgcmV0dXJuIG5leHQoaXRlcihwYXJhbXMpKQogICAgcmV0dXJuIHNlbGYuVW5pb25Db25zdHJhaW50KHBhcmFtcykKCgpVbmlvbkNvbnN0cmFpbnQgPSBVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50CgoKY2xhc3MgT3B0aW9uYWxIaW50KFVuaW9uSGludCk6CiAgIiIiQW4gT3B0aW9uIHR5cGUtaGludC4gT3B0aW9uYWxbWF0gYWNjZXB0cyBpbnN0YW5jZXMgb2YgWCBvciBOb25lLgoKICBUaGUgT3B0aW9uYWxbWF0gZmFjdG9yeSBmdW5jdGlvbiBwcm94aWVzIHRvIFVuaW9uW1gsIHR5cGUoTm9uZSldCiAgIiIiCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHB5X3R5cGUpOgogICAgIyBBIHNpbmdsZSB0eXBlIG11c3QgaGF2ZSBiZWVuIHBhc3NlZC4KICAgIGlmIGlzaW5zdGFuY2UocHlfdHlwZSwgY29sbGVjdGlvbnMuU2VxdWVuY2UpOgogICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAnQW4gT3B0aW9uIHR5cGUtaGludCBvbmx5IGFjY2VwdHMgYSBzaW5nbGUgdHlwZSAnCiAgICAgICAgICAncGFyYW1ldGVyLicpCgogICAgcmV0dXJuIFVuaW9uW3B5X3R5cGUsIHR5cGUoTm9uZSldCgoKY2xhc3MgVHVwbGVIaW50KENvbXBvc2l0ZVR5cGVIaW50KToKICAiIiJBIFR1cGxlIHR5cGUtaGludC4KCiAgVHVwbGUgY2FuIGFjY2VwdCAxIG9yIG1vcmUgdHlwZS1oaW50IHBhcmFtZXRlcnMuCgogIFR1cGxlW1gsIFldIHJlcHJlc2VudHMgYSB0dXBsZSBvZiAqZXhhY3RseSogdHdvIGVsZW1lbnRzLCB3aXRoIHRoZSBmaXJzdAogIGJlaW5nIG9mIHR5cGUgJ1gnIGFuZCB0aGUgc2Vjb25kIGFuIGluc3RhbmNlIG9mIHR5cGUgJ1knLgoKICAgICogKDEsIDIpIHNhdGlzZmllcyBUdXBsZVtpbnQsIGludF0KCiAgQWRkaXRpb25hbGx5LCBvbmUgaXMgYWJsZSB0byB0eXBlLWhpbnQgYW4gYXJiaXRhcnkgbGVuZ3RoLCBob21vZ2VuZW91cyB0dXBsZQogIGJ5IHBhc3NpbmcgdGhlIEVsbGlwc2lzICguLi4pIG9iamVjdCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KCiAgQXMgYW4gZXhhbXBsZSwgVHVwbGVbc3RyLCAuLi5dIGluZGljYXRlcyBhIHR1cGxlIG9mIGFueSBsZW5ndGggd2l0aCBlYWNoCiAgZWxlbWVudCBiZWluZyBhbiBpbnN0YW5jZSBvZiAnc3RyJy4KICAiIiIKICBjbGFzcyBUdXBsZVNlcXVlbmNlQ29uc3RyYWludChTZXF1ZW5jZVR5cGVDb25zdHJhaW50KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX3BhcmFtKToKICAgICAgc3VwZXIoVHVwbGVIaW50LlR1cGxlU2VxdWVuY2VDb25zdHJhaW50LCBzZWxmKS5fX2luaXRfXyh0eXBlX3BhcmFtLCB0dXBsZSkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnVHVwbGVbJXMsIC4uLl0nICUgX3VuaWZpZWRfcmVwcihzZWxmLmlubmVyX3R5cGUpCgogICAgZGVmIF9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHNlbGYsIHN1Yik6CiAgICAgIGlmIGlzaW5zdGFuY2Uoc3ViLCBUdXBsZUNvbnN0cmFpbnQpOgogICAgICAgICMgRS5nLiBUdXBsZVtBLCBCXSA8IFR1cGxlW0MsIC4uLl0gaWZmIEEgPCBDIGFuZCBCIDwgQy4KICAgICAgICByZXR1cm4gYWxsKAogICAgICAgICAgICBpc19jb25zaXN0ZW50X3dpdGgoZWxlbSwgc2VsZi5pbm5lcl90eXBlKQogICAgICAgICAgICBmb3IgZWxlbSBpbiBzdWIudHVwbGVfdHlwZXMpCiAgICAgIHJldHVybiBzdXBlcihUdXBsZVNlcXVlbmNlQ29uc3RyYWludCwgc2VsZikuX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc3ViKQoKICBjbGFzcyBUdXBsZUNvbnN0cmFpbnQoSW5kZXhhYmxlVHlwZUNvbnN0cmFpbnQpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfcGFyYW1zKToKICAgICAgc2VsZi50dXBsZV90eXBlcyA9IHR1cGxlKG5vcm1hbGl6ZSh0KSBmb3IgdCBpbiB0eXBlX3BhcmFtcykKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgcmV0dXJuICgKICAgICAgICAgIGlzaW5zdGFuY2Uob3RoZXIsIFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQpIGFuZAogICAgICAgICAgc2VsZi50dXBsZV90eXBlcyA9PSBvdGhlci50dXBsZV90eXBlcykKCiAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgIHJldHVybiBoYXNoKHNlbGYudHVwbGVfdHlwZXMpCgogICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICByZXR1cm4gJ1R1cGxlWyVzXScgJSAoCiAgICAgICAgICAnLCAnLmpvaW4oX3VuaWZpZWRfcmVwcih0KSBmb3IgdCBpbiBzZWxmLnR1cGxlX3R5cGVzKSkKCiAgICBkZWYgX2lubmVyX3R5cGVzKHNlbGYpOgogICAgICBmb3IgdCBpbiBzZWxmLnR1cGxlX3R5cGVzOgogICAgICAgIHlpZWxkIHQKCiAgICBkZWYgX2NvbnN0cmFpbnRfZm9yX2luZGV4KHNlbGYsIGlkeCk6CiAgICAgICIiIlJldHVybnMgdGhlIHR5cGUgYXQgdGhlIGdpdmVuIGluZGV4LiIiIgogICAgICByZXR1cm4gc2VsZi50dXBsZV90eXBlc1tpZHhdCgogICAgZGVmIF9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHNlbGYsIHN1Yik6CiAgICAgIHJldHVybiAoCiAgICAgICAgICBpc2luc3RhbmNlKHN1Yiwgc2VsZi5fX2NsYXNzX18pIGFuZAogICAgICAgICAgbGVuKHN1Yi50dXBsZV90eXBlcykgPT0gbGVuKHNlbGYudHVwbGVfdHlwZXMpIGFuZCBhbGwoCiAgICAgICAgICAgICAgaXNfY29uc2lzdGVudF93aXRoKHN1Yl9lbGVtLCBlbGVtKSBmb3Igc3ViX2VsZW0sCiAgICAgICAgICAgICAgZWxlbSBpbiB6aXAoc3ViLnR1cGxlX3R5cGVzLCBzZWxmLnR1cGxlX3R5cGVzKSkpCgogICAgZGVmIHR5cGVfY2hlY2soc2VsZiwgdHVwbGVfaW5zdGFuY2UpOgogICAgICBpZiBub3QgaXNpbnN0YW5jZSh0dXBsZV9pbnN0YW5jZSwgdHVwbGUpOgogICAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAgICJUdXBsZSB0eXBlIGNvbnN0cmFpbnQgdmlvbGF0ZWQuIFZhbGlkIG9iamVjdCBpbnN0YW5jZSBtdXN0IGJlIG9mICIKICAgICAgICAgICAgInR5cGUgJ3R1cGxlJy4gSW5zdGVhZCwgYW4gaW5zdGFuY2Ugb2YgJyVzJyB3YXMgcmVjZWl2ZWQuIiAlCiAgICAgICAgICAgIHR1cGxlX2luc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykKCiAgICAgIGlmIGxlbih0dXBsZV9pbnN0YW5jZSkgIT0gbGVuKHNlbGYudHVwbGVfdHlwZXMpOgogICAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAgICdQYXNzZWQgb2JqZWN0IGluc3RhbmNlIGlzIG9mIHRoZSBwcm9wZXIgdHlwZSwgYnV0IGRpZmZlcnMgaW4gJwogICAgICAgICAgICAnbGVuZ3RoIGZyb20gdGhlIGhpbnRlZCB0eXBlLiBFeHBlY3RlZCBhIHR1cGxlIG9mIGxlbmd0aCAlcywgJwogICAgICAgICAgICAncmVjZWl2ZWQgYSB0dXBsZSBvZiBsZW5ndGggJXMuJyAlCiAgICAgICAgICAgIChsZW4oc2VsZi50dXBsZV90eXBlcyksIGxlbih0dXBsZV9pbnN0YW5jZSkpKQoKICAgICAgZm9yIHR5cGVfcG9zLCAoZXhwZWN0ZWQsIGFjdHVhbCkgaW4gZW51bWVyYXRlKHppcChzZWxmLnR1cGxlX3R5cGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlX2luc3RhbmNlKSk6CiAgICAgICAgdHJ5OgogICAgICAgICAgY2hlY2tfY29uc3RyYWludChleHBlY3RlZCwgYWN0dWFsKQogICAgICAgICAgY29udGludWUKICAgICAgICBleGNlcHQgU2ltcGxlVHlwZUhpbnRFcnJvcjoKICAgICAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAgICAgJyVzIGhpbnQgdHlwZS1jb25zdHJhaW50IHZpb2xhdGVkLiBUaGUgdHlwZSBvZiBlbGVtZW50ICMlcyBpbiAnCiAgICAgICAgICAgICAgJ3RoZSBwYXNzZWQgdHVwbGUgaXMgaW5jb3JyZWN0LiBFeHBlY3RlZCBhbiBpbnN0YW5jZSBvZiAnCiAgICAgICAgICAgICAgJ3R5cGUgJXMsIGluc3RlYWQgcmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgdHlwZSAlcy4nICUgKAogICAgICAgICAgICAgICAgICByZXByKHNlbGYpLAogICAgICAgICAgICAgICAgICB0eXBlX3BvcywKICAgICAgICAgICAgICAgICAgX3VuaWZpZWRfcmVwcihleHBlY3RlZCksCiAgICAgICAgICAgICAgICAgIGFjdHVhbC5fX2NsYXNzX18uX19uYW1lX18pKQogICAgICAgIGV4Y2VwdCBDb21wb3NpdGVUeXBlSGludEVycm9yIGFzIGU6CiAgICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAgICclcyBoaW50IHR5cGUtY29uc3RyYWludCB2aW9sYXRlZC4gVGhlIHR5cGUgb2YgZWxlbWVudCAjJXMgaW4gJwogICAgICAgICAgICAgICd0aGUgcGFzc2VkIHR1cGxlIGlzIGluY29ycmVjdC4gJXMnICUgKHJlcHIoc2VsZiksIHR5cGVfcG9zLCBlKSkKCiAgICBkZWYgbWF0Y2hfdHlwZV92YXJpYWJsZXMoc2VsZiwgY29uY3JldGVfdHlwZSk6CiAgICAgIGJpbmRpbmdzID0ge30KICAgICAgaWYgaXNpbnN0YW5jZShjb25jcmV0ZV90eXBlLCBUdXBsZUNvbnN0cmFpbnQpOgogICAgICAgIGZvciBhLCBiIGluIHppcChzZWxmLnR1cGxlX3R5cGVzLCBjb25jcmV0ZV90eXBlLnR1cGxlX3R5cGVzKToKICAgICAgICAgIGJpbmRpbmdzLnVwZGF0ZShtYXRjaF90eXBlX3ZhcmlhYmxlcyhhLCBiKSkKICAgICAgcmV0dXJuIGJpbmRpbmdzCgogICAgZGVmIGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZiwgYmluZGluZ3MpOgogICAgICBib3VuZF90dXBsZV90eXBlcyA9IHR1cGxlKAogICAgICAgICAgYmluZF90eXBlX3ZhcmlhYmxlcyh0LCBiaW5kaW5ncykgZm9yIHQgaW4gc2VsZi50dXBsZV90eXBlcykKICAgICAgaWYgYm91bmRfdHVwbGVfdHlwZXMgPT0gc2VsZi50dXBsZV90eXBlczoKICAgICAgICByZXR1cm4gc2VsZgogICAgICByZXR1cm4gVHVwbGVbYm91bmRfdHVwbGVfdHlwZXNdCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtcyk6CiAgICBlbGxpcHNpcyA9IEZhbHNlCgogICAgaWYgbm90IGlzaW5zdGFuY2UodHlwZV9wYXJhbXMsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToKICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIGhpbnRpbmcgdHVwbGVzIHdpdGggYXJpdHktMS4KICAgICAgdHlwZV9wYXJhbXMgPSAodHlwZV9wYXJhbXMsICkKCiAgICBpZiB0eXBlX3BhcmFtcyBhbmQgdHlwZV9wYXJhbXNbLTFdID09IEVsbGlwc2lzOgogICAgICBpZiBsZW4odHlwZV9wYXJhbXMpICE9IDI6CiAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAnRWxsaXBzaXMgY2FuIG9ubHkgYmUgdXNlZCB0byB0eXBlLWhpbnQgYW4gYXJiaXRyYXJ5ICcKICAgICAgICAgICAgJ2xlbmd0aCB0dXBsZSBvZiBjb250YWluaW5nIGEgc2luZ2xlIHR5cGU6ICcKICAgICAgICAgICAgJ1R1cGxlW0EsIC4uLl0uJykKICAgICAgIyBUdXBsZVtBLCAuLi5dIGluZGljYXRlcyBhbiBhcmJpdGFyeSBsZW5ndGggaG9tb2dlbmVvdXMgdHVwbGUuCiAgICAgIHR5cGVfcGFyYW1zID0gdHlwZV9wYXJhbXNbOjFdCiAgICAgIGVsbGlwc2lzID0gVHJ1ZQoKICAgIGZvciB0IGluIHR5cGVfcGFyYW1zOgogICAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgICAgIHQsIGVycm9yX21zZ19wcmVmaXg9J0FsbCBwYXJhbWV0ZXJzIHRvIGEgVHVwbGUgaGludCcpCgogICAgaWYgZWxsaXBzaXM6CiAgICAgIHJldHVybiBzZWxmLlR1cGxlU2VxdWVuY2VDb25zdHJhaW50KHR5cGVfcGFyYW1zWzBdKQogICAgcmV0dXJuIHNlbGYuVHVwbGVDb25zdHJhaW50KHR5cGVfcGFyYW1zKQoKClR1cGxlQ29uc3RyYWludCA9IFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQKVHVwbGVTZXF1ZW5jZUNvbnN0cmFpbnQgPSBUdXBsZUhpbnQuVHVwbGVTZXF1ZW5jZUNvbnN0cmFpbnQKCgpjbGFzcyBMaXN0SGludChDb21wb3NpdGVUeXBlSGludCk6CiAgIiIiQSBMaXN0IHR5cGUtaGludC4KCiAgTGlzdFtYXSByZXByZXNlbnRzIGFuIGluc3RhbmNlIG9mIGEgbGlzdCBwb3B1bGF0ZWQgYnkgYSBzaW5nbGUgaG9tb2dlbmVvdXMKICB0eXBlLiBUaGUgcGFyYW1ldGVyaXplZCB0eXBlICdYJyBjYW4gZWl0aGVyIGJlIGEgYnVpbHQtaW4gUHl0aG9uIHR5cGUgb3IgYW4KICBpbnN0YW5jZSBvZiBhbm90aGVyIFR5cGVDb25zdHJhaW50LgoKICAgICogWycxJywgJzInLCAnMyddIHNhdGlzZmllcyBMaXN0W3N0cl0KICAiIiIKICBjbGFzcyBMaXN0Q29uc3RyYWludChTZXF1ZW5jZVR5cGVDb25zdHJhaW50KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaXN0X3R5cGUpOgogICAgICBzdXBlcihMaXN0SGludC5MaXN0Q29uc3RyYWludCwgc2VsZikuX19pbml0X18obGlzdF90eXBlLCBsaXN0KQoKICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgcmV0dXJuICdMaXN0WyVzXScgJSBfdW5pZmllZF9yZXByKHNlbGYuaW5uZXJfdHlwZSkKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHQpOgogICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0odCwgZXJyb3JfbXNnX3ByZWZpeD0nUGFyYW1ldGVyIHRvIExpc3QgaGludCcpCgogICAgcmV0dXJuIHNlbGYuTGlzdENvbnN0cmFpbnQodCkKCgpMaXN0Q29uc3RyYWludCA9IExpc3RIaW50Lkxpc3RDb25zdHJhaW50CgoKY2xhc3MgS1ZIaW50KENvbXBvc2l0ZVR5cGVIaW50KToKICAiIiJBIEtWIHR5cGUtaGludCwgcmVwcmVzZW50cyBhIEtleS1WYWx1ZSBwYWlyIG9mIGEgcGFydGljdWxhciB0eXBlLgoKICBJbnRlcm5hbGx5LCBLVltYLCBZXSBwcm94aWVzIHRvIFR1cGxlW1gsIFldLiBBIEtWIHR5cGUtaGludCBhY2NlcHRzIG9ubHkKICBhY2NlcHRzIGV4YWN0bHkgdHdvIHR5cGUtcGFyYW1ldGVycy4gVGhlIGZpcnN0IHJlcHJlc2VudHMgdGhlIHJlcXVpcmVkCiAga2V5LXR5cGUgYW5kIHRoZSBzZWNvbmQgdGhlIHJlcXVpcmVkIHZhbHVlLXR5cGUuCiAgIiIiCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHR5cGVfcGFyYW1zKToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHR5cGVfcGFyYW1zLCB0dXBsZSk6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdQYXJhbWV0ZXIgdG8gS1YgdHlwZS1oaW50IG11c3QgYmUgYSB0dXBsZSBvZiB0eXBlczogJwogICAgICAgICAgJ0tWWy4uLCAuLl0uJykKCiAgICBpZiBsZW4odHlwZV9wYXJhbXMpICE9IDI6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdMZW5ndGggb2YgcGFyYW1ldGVycyB0byBhIEtWIHR5cGUtaGludCBtdXN0IGJlIGV4YWN0bHkgMi4gUGFzc2VkICcKICAgICAgICAgICdwYXJhbWV0ZXJzOiAlcywgaGF2ZSBhIGxlbmd0aCBvZiAlcy4nICUKICAgICAgICAgICh0eXBlX3BhcmFtcywgbGVuKHR5cGVfcGFyYW1zKSkpCgogICAgcmV0dXJuIFR1cGxlW3R5cGVfcGFyYW1zXQoKCmRlZiBrZXlfdmFsdWVfdHlwZXMoa3YpOgogICIiIlJldHVybnMgdGhlIGtleSBhbmQgdmFsdWUgdHlwZSBvZiBhIEtWIHR5cGUtaGludC4KCiAgQXJnczoKICAgIGt2OiBBbiBpbnN0YW5jZSBvZiBhIFR5cGVDb25zdHJhaW50IHN1Yi1jbGFzcy4KICBSZXR1cm5zOgogICAgQSB0dXBsZTogKGtleV90eXBlLCB2YWx1ZV90eXBlKSBpZiB0aGUgcGFzc2VkIHR5cGUtaGludCBpcyBhbiBpbnN0YW5jZSBvZiBhCiAgICBLViB0eXBlLWhpbnQsIGFuZCAoQW55LCBBbnkpIG90aGVyd2lzZS4KICAiIiIKICBpZiBpc2luc3RhbmNlKGt2LCBUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50KToKICAgIHJldHVybiBrdi50dXBsZV90eXBlcwogIHJldHVybiBBbnksIEFueQoKCmNsYXNzIERpY3RIaW50KENvbXBvc2l0ZVR5cGVIaW50KToKICAiIiJBIERpY3QgdHlwZS1oaW50LgoKICBEaWN0W0ssIFZdIFJlcHJlc2VudHMgYSBkaWN0aW9uYXJ5IHdoZXJlIGFsbCBrZXlzIGFyZSBvZiBhIHBhcnRpY3VsYXIgdHlwZQogIGFuZCBhbGwgdmFsdWVzIGFyZSBvZiBhbm90aGVyIChwb3NzaWJsZSB0aGUgc2FtZSkgdHlwZS4KICAiIiIKICBjbGFzcyBEaWN0Q29uc3RyYWludChUeXBlQ29uc3RyYWludCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwga2V5X3R5cGUsIHZhbHVlX3R5cGUpOgogICAgICBzZWxmLmtleV90eXBlID0gbm9ybWFsaXplKGtleV90eXBlKQogICAgICBzZWxmLnZhbHVlX3R5cGUgPSBub3JtYWxpemUodmFsdWVfdHlwZSkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnRGljdFslcywgJXNdJyAlICgKICAgICAgICAgIF91bmlmaWVkX3JlcHIoc2VsZi5rZXlfdHlwZSksIF91bmlmaWVkX3JlcHIoc2VsZi52YWx1ZV90eXBlKSkKCiAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgcmV0dXJuICgKICAgICAgICAgIHR5cGUoc2VsZikgPT0gdHlwZShvdGhlcikgYW5kIHNlbGYua2V5X3R5cGUgPT0gb3RoZXIua2V5X3R5cGUgYW5kCiAgICAgICAgICBzZWxmLnZhbHVlX3R5cGUgPT0gb3RoZXIudmFsdWVfdHlwZSkKCiAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLmtleV90eXBlLCBzZWxmLnZhbHVlX3R5cGUpKQoKICAgIGRlZiBfaW5uZXJfdHlwZXMoc2VsZik6CiAgICAgIHlpZWxkIHNlbGYua2V5X3R5cGUKICAgICAgeWllbGQgc2VsZi52YWx1ZV90eXBlCgogICAgZGVmIF9jb25zaXN0ZW50X3dpdGhfY2hlY2tfKHNlbGYsIHN1Yik6CiAgICAgIHJldHVybiAoCiAgICAgICAgICBpc2luc3RhbmNlKHN1Yiwgc2VsZi5fX2NsYXNzX18pIGFuZAogICAgICAgICAgaXNfY29uc2lzdGVudF93aXRoKHN1Yi5rZXlfdHlwZSwgc2VsZi5rZXlfdHlwZSkgYW5kCiAgICAgICAgICBpc19jb25zaXN0ZW50X3dpdGgoc3ViLnZhbHVlX3R5cGUsIHNlbGYudmFsdWVfdHlwZSkpCgogICAgZGVmIF9yYWlzZV9oaW50X2V4Y2VwdGlvbl9vcl9pbm5lcl9leGNlcHRpb24oCiAgICAgICAgc2VsZiwgaXNfa2V5LCBpbmNvcnJlY3RfaW5zdGFuY2UsIGlubmVyX2Vycm9yX21lc3NhZ2U9JycpOgogICAgICBpbmNvcnJlY3RfdHlwZSA9ICd2YWx1ZXMnIGlmIG5vdCBpc19rZXkgZWxzZSAna2V5cycKICAgICAgaGludGVkX3R5cGUgPSBzZWxmLnZhbHVlX3R5cGUgaWYgbm90IGlzX2tleSBlbHNlIHNlbGYua2V5X3R5cGUKICAgICAgaWYgaW5uZXJfZXJyb3JfbWVzc2FnZToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCAlcy10eXBlIGNvbnN0cmFpbnQgdmlvbGF0ZWQuIEFsbCAlcyBzaG91bGQgYmUgb2YgdHlwZSAnCiAgICAgICAgICAgICclcy4gSW5zdGVhZDogJXMnICUgKAogICAgICAgICAgICAgICAgcmVwcihzZWxmKSwKICAgICAgICAgICAgICAgIGluY29ycmVjdF90eXBlWzotMV0sCiAgICAgICAgICAgICAgICBpbmNvcnJlY3RfdHlwZSwKICAgICAgICAgICAgICAgIF91bmlmaWVkX3JlcHIoaGludGVkX3R5cGUpLAogICAgICAgICAgICAgICAgaW5uZXJfZXJyb3JfbWVzc2FnZSkpCiAgICAgIGVsc2U6CiAgICAgICAgcmFpc2UgQ29tcG9zaXRlVHlwZUhpbnRFcnJvcigKICAgICAgICAgICAgJyVzIGhpbnQgJXMtdHlwZSBjb25zdHJhaW50IHZpb2xhdGVkLiBBbGwgJXMgc2hvdWxkIGJlIG9mICcKICAgICAgICAgICAgJ3R5cGUgJXMuIEluc3RlYWQsICVzIGlzIG9mIHR5cGUgJXMuJyAlICgKICAgICAgICAgICAgICAgIHJlcHIoc2VsZiksCiAgICAgICAgICAgICAgICBpbmNvcnJlY3RfdHlwZVs6LTFdLAogICAgICAgICAgICAgICAgaW5jb3JyZWN0X3R5cGUsCiAgICAgICAgICAgICAgICBfdW5pZmllZF9yZXByKGhpbnRlZF90eXBlKSwKICAgICAgICAgICAgICAgIGluY29ycmVjdF9pbnN0YW5jZSwKICAgICAgICAgICAgICAgIGluY29ycmVjdF9pbnN0YW5jZS5fX2NsYXNzX18uX19uYW1lX18pKQoKICAgIGRlZiB0eXBlX2NoZWNrKHNlbGYsIGRpY3RfaW5zdGFuY2UpOgogICAgICBpZiBub3QgaXNpbnN0YW5jZShkaWN0X2luc3RhbmNlLCBkaWN0KToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnRGljdCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIEFsbCBwYXNzZWQgaW5zdGFuY2VzIG11c3QgYmUgb2YgJwogICAgICAgICAgICAndHlwZSBkaWN0LiAlcyBpcyBvZiB0eXBlICVzLicgJQogICAgICAgICAgICAoZGljdF9pbnN0YW5jZSwgZGljdF9pbnN0YW5jZS5fX2NsYXNzX18uX19uYW1lX18pKQoKICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGljdF9pbnN0YW5jZS5pdGVtcygpOgogICAgICAgIHRyeToKICAgICAgICAgIGNoZWNrX2NvbnN0cmFpbnQoc2VsZi5rZXlfdHlwZSwga2V5KQogICAgICAgIGV4Y2VwdCBDb21wb3NpdGVUeXBlSGludEVycm9yIGFzIGU6CiAgICAgICAgICBzZWxmLl9yYWlzZV9oaW50X2V4Y2VwdGlvbl9vcl9pbm5lcl9leGNlcHRpb24oVHJ1ZSwga2V5LCBzdHIoZSkpCiAgICAgICAgZXhjZXB0IFNpbXBsZVR5cGVIaW50RXJyb3I6CiAgICAgICAgICBzZWxmLl9yYWlzZV9oaW50X2V4Y2VwdGlvbl9vcl9pbm5lcl9leGNlcHRpb24oVHJ1ZSwga2V5KQoKICAgICAgICB0cnk6CiAgICAgICAgICBjaGVja19jb25zdHJhaW50KHNlbGYudmFsdWVfdHlwZSwgdmFsdWUpCiAgICAgICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICAgIHNlbGYuX3JhaXNlX2hpbnRfZXhjZXB0aW9uX29yX2lubmVyX2V4Y2VwdGlvbihGYWxzZSwgdmFsdWUsIHN0cihlKSkKICAgICAgICBleGNlcHQgU2ltcGxlVHlwZUhpbnRFcnJvcjoKICAgICAgICAgIHNlbGYuX3JhaXNlX2hpbnRfZXhjZXB0aW9uX29yX2lubmVyX2V4Y2VwdGlvbihGYWxzZSwgdmFsdWUpCgogICAgZGVmIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYsIGNvbmNyZXRlX3R5cGUpOgogICAgICBpZiBpc2luc3RhbmNlKGNvbmNyZXRlX3R5cGUsIERpY3RDb25zdHJhaW50KToKICAgICAgICBiaW5kaW5ncyA9IHt9CiAgICAgICAgYmluZGluZ3MudXBkYXRlKAogICAgICAgICAgICBtYXRjaF90eXBlX3ZhcmlhYmxlcyhzZWxmLmtleV90eXBlLCBjb25jcmV0ZV90eXBlLmtleV90eXBlKSkKICAgICAgICBiaW5kaW5ncy51cGRhdGUoCiAgICAgICAgICAgIG1hdGNoX3R5cGVfdmFyaWFibGVzKHNlbGYudmFsdWVfdHlwZSwgY29uY3JldGVfdHlwZS52YWx1ZV90eXBlKSkKICAgICAgICByZXR1cm4gYmluZGluZ3MKICAgICAgcmV0dXJuIHt9CgogICAgZGVmIGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZiwgYmluZGluZ3MpOgogICAgICBib3VuZF9rZXlfdHlwZSA9IGJpbmRfdHlwZV92YXJpYWJsZXMoc2VsZi5rZXlfdHlwZSwgYmluZGluZ3MpCiAgICAgIGJvdW5kX3ZhbHVlX3R5cGUgPSBiaW5kX3R5cGVfdmFyaWFibGVzKHNlbGYudmFsdWVfdHlwZSwgYmluZGluZ3MpCiAgICAgIGlmIChib3VuZF9rZXlfdHlwZSwgc2VsZi5rZXlfdHlwZSkgPT0gKGJvdW5kX3ZhbHVlX3R5cGUsIHNlbGYudmFsdWVfdHlwZSk6CiAgICAgICAgcmV0dXJuIHNlbGYKICAgICAgcmV0dXJuIERpY3RbYm91bmRfa2V5X3R5cGUsIGJvdW5kX3ZhbHVlX3R5cGVdCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtcyk6CiAgICAjIFR5cGUgcGFyYW0gbXVzdCBiZSBhIChrLCB2KSBwYWlyLgogICAgaWYgbm90IGlzaW5zdGFuY2UodHlwZV9wYXJhbXMsIHR1cGxlKToKICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgJ1BhcmFtZXRlciB0byBEaWN0IHR5cGUtaGludCBtdXN0IGJlIGEgdHVwbGUgb2YgdHlwZXM6ICcKICAgICAgICAgICdEaWN0Wy4uLCAuLl0uJykKCiAgICBpZiBsZW4odHlwZV9wYXJhbXMpICE9IDI6CiAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICdMZW5ndGggb2YgcGFyYW1ldGVycyB0byBhIERpY3QgdHlwZS1oaW50IG11c3QgYmUgZXhhY3RseSAyLiBQYXNzZWQgJwogICAgICAgICAgJ3BhcmFtZXRlcnM6ICVzLCBoYXZlIGEgbGVuZ3RoIG9mICVzLicgJQogICAgICAgICAgKHR5cGVfcGFyYW1zLCBsZW4odHlwZV9wYXJhbXMpKSkKCiAgICBrZXlfdHlwZSwgdmFsdWVfdHlwZSA9IHR5cGVfcGFyYW1zCgogICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oCiAgICAgICAga2V5X3R5cGUsIGVycm9yX21zZ19wcmVmaXg9J0tleS10eXBlIHBhcmFtZXRlciB0byBhIERpY3QgaGludCcpCiAgICB2YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbSgKICAgICAgICB2YWx1ZV90eXBlLCBlcnJvcl9tc2dfcHJlZml4PSdWYWx1ZS10eXBlIHBhcmFtZXRlciB0byBhIERpY3QgaGludCcpCgogICAgcmV0dXJuIHNlbGYuRGljdENvbnN0cmFpbnQoa2V5X3R5cGUsIHZhbHVlX3R5cGUpCgoKRGljdENvbnN0cmFpbnQgPSBEaWN0SGludC5EaWN0Q29uc3RyYWludAoKCmNsYXNzIFNldEhpbnQoQ29tcG9zaXRlVHlwZUhpbnQpOgogICIiIkEgU2V0IHR5cGUtaGludC4KCgogIFNldFtYXSBkZWZpbmVzIGEgdHlwZS1oaW50IGZvciBhIHNldCBvZiBob21vZ2VuZW91cyB0eXBlcy4gJ1gnIG1heSBiZSBlaXRoZXIgYQogIGJ1aWx0LWluIFB5dGhvbiB0eXBlIG9yIGEgYW5vdGhlciBuZXN0ZWQgVHlwZUNvbnN0cmFpbnQuCiAgIiIiCiAgY2xhc3MgU2V0VHlwZUNvbnN0cmFpbnQoU2VxdWVuY2VUeXBlQ29uc3RyYWludCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9wYXJhbSk6CiAgICAgIHN1cGVyKFNldEhpbnQuU2V0VHlwZUNvbnN0cmFpbnQsIHNlbGYpLl9faW5pdF9fKHR5cGVfcGFyYW0sIHNldCkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnU2V0WyVzXScgJSBfdW5pZmllZF9yZXByKHNlbGYuaW5uZXJfdHlwZSkKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHR5cGVfcGFyYW0pOgogICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oCiAgICAgICAgdHlwZV9wYXJhbSwgZXJyb3JfbXNnX3ByZWZpeD0nUGFyYW1ldGVyIHRvIGEgU2V0IGhpbnQnKQoKICAgIHJldHVybiBzZWxmLlNldFR5cGVDb25zdHJhaW50KHR5cGVfcGFyYW0pCgoKU2V0VHlwZUNvbnN0cmFpbnQgPSBTZXRIaW50LlNldFR5cGVDb25zdHJhaW50CgoKY2xhc3MgSXRlcmFibGVIaW50KENvbXBvc2l0ZVR5cGVIaW50KToKICAiIiJBbiBJdGVyYWJsZSB0eXBlLWhpbnQuCgogIEl0ZXJhYmxlW1hdIGRlZmluZXMgYSB0eXBlLWhpbnQgZm9yIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgYW4gJ19faXRlcl9fJwogIG1ldGhvZCB3aGljaCB5aWVsZHMgb2JqZWN0cyB3aGljaCBhcmUgYWxsIG9mIHRoZSBzYW1lIHR5cGUuCiAgIiIiCiAgY2xhc3MgSXRlcmFibGVUeXBlQ29uc3RyYWludChTZXF1ZW5jZVR5cGVDb25zdHJhaW50KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyX3R5cGUpOgogICAgICBzdXBlcihJdGVyYWJsZUhpbnQuSXRlcmFibGVUeXBlQ29uc3RyYWludCwKICAgICAgICAgICAgc2VsZikuX19pbml0X18oaXRlcl90eXBlLCBjb2xsZWN0aW9ucy5JdGVyYWJsZSkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnSXRlcmFibGVbJXNdJyAlIF91bmlmaWVkX3JlcHIoc2VsZi5pbm5lcl90eXBlKQoKICAgIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgICBpZiBpc2luc3RhbmNlKHN1YiwgU2VxdWVuY2VUeXBlQ29uc3RyYWludCk6CiAgICAgICAgcmV0dXJuIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIuaW5uZXJfdHlwZSwgc2VsZi5pbm5lcl90eXBlKQogICAgICBlbGlmIGlzaW5zdGFuY2Uoc3ViLCBUdXBsZUNvbnN0cmFpbnQpOgogICAgICAgIGlmIG5vdCBzdWIudHVwbGVfdHlwZXM6CiAgICAgICAgICAjIFRoZSBlbXB0eSB0dXBsZSBpcyBjb25zaXN0ZW50IHdpdGggSXRlcmF0b3JbVF0gZm9yIGFueSBULgogICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAjIEVhY2ggZWxlbWVudCBpbiB0aGUgaGV0cm9nZW5pb3VzIHR1cGxlIG11c3QgYmUgY29uc2lzdGVudCB3aXRoCiAgICAgICAgIyB0aGUgaXRlcmF0b3IgdHlwZS4KICAgICAgICAjIEUuZy4gVHVwbGVbQSwgQl0gPCBJdGVyYWJsZVtDXSBpZiBBIDwgQyBhbmQgQiA8IEMuCiAgICAgICAgcmV0dXJuIGFsbCgKICAgICAgICAgICAgaXNfY29uc2lzdGVudF93aXRoKGVsZW0sIHNlbGYuaW5uZXJfdHlwZSkKICAgICAgICAgICAgZm9yIGVsZW0gaW4gc3ViLnR1cGxlX3R5cGVzKQogICAgICByZXR1cm4gRmFsc2UKCiAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHR5cGVfcGFyYW0pOgogICAgdmFsaWRhdGVfY29tcG9zaXRlX3R5cGVfcGFyYW0oCiAgICAgICAgdHlwZV9wYXJhbSwgZXJyb3JfbXNnX3ByZWZpeD0nUGFyYW1ldGVyIHRvIGFuIEl0ZXJhYmxlIGhpbnQnKQoKICAgIHJldHVybiBzZWxmLkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQodHlwZV9wYXJhbSkKCgpJdGVyYWJsZVR5cGVDb25zdHJhaW50ID0gSXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQKCgpjbGFzcyBJdGVyYXRvckhpbnQoQ29tcG9zaXRlVHlwZUhpbnQpOgogICIiIkFuIEl0ZXJhdG9yIHR5cGUtaGludC4KCiAgSXRlcmF0b3JbWF0gZGVmaW5lcyBhIHR5cGUtaGludCBmb3IgYW4gb2JqZWN0IGltcGxlbWVudGluZyBib3RoICdfX2l0ZXJfXycKICBhbmQgYSAnbmV4dCcgbWV0aG9kIHdoaWNoIHlpZWxkcyBvYmplY3RzIHdoaWNoIGFyZSBhbGwgb2YgdGhlIHNhbWUgdHlwZS4gVHlwZQogIGNoZWNraW5nIGEgdHlwZS1oaW50IG9mIHRoaXMgdHlwZSBpcyBkZWZlcnJlZCBpbiBvcmRlciB0byBhdm9pZCBkZXBsZXRpbmcgdGhlCiAgdW5kZXJseWluZyBsYXppbHkgZ2VuZXJhdGVkIHNlcXVlbmNlLiBTZWUgZGVjb3JhdG9ycy5pbnRlcmxlYXZlX3R5cGVfY2hlY2sgZm9yCiAgZnVydGhlciBpbmZvcm1hdGlvbi4KICAiIiIKICBjbGFzcyBJdGVyYXRvclR5cGVDb25zdHJhaW50KFR5cGVDb25zdHJhaW50KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0KToKICAgICAgc2VsZi55aWVsZGVkX3R5cGUgPSBub3JtYWxpemUodCkKCiAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgIHJldHVybiAnSXRlcmF0b3JbJXNdJyAlIF91bmlmaWVkX3JlcHIoc2VsZi55aWVsZGVkX3R5cGUpCgogICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgIHJldHVybiAoCiAgICAgICAgICB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpIGFuZCBzZWxmLnlpZWxkZWRfdHlwZSA9PSBvdGhlci55aWVsZGVkX3R5cGUpCgogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICByZXR1cm4gaGFzaChzZWxmLnlpZWxkZWRfdHlwZSkKCiAgICBkZWYgX2lubmVyX3R5cGVzKHNlbGYpOgogICAgICB5aWVsZCBzZWxmLnlpZWxkZWRfdHlwZQoKICAgIGRlZiBfY29uc2lzdGVudF93aXRoX2NoZWNrXyhzZWxmLCBzdWIpOgogICAgICByZXR1cm4gKAogICAgICAgICAgaXNpbnN0YW5jZShzdWIsIHNlbGYuX19jbGFzc19fKSBhbmQKICAgICAgICAgIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIueWllbGRlZF90eXBlLCBzZWxmLnlpZWxkZWRfdHlwZSkpCgogICAgZGVmIHR5cGVfY2hlY2soc2VsZiwgaW5zdGFuY2UpOgogICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgbGF6eSB0eXBlcywgd2Ugb25seSBuZWVkIHRvIGVuZm9yY2UgdGhlIHVuZGVybHlpbmcKICAgICAgIyB0eXBlLiBUaGlzIGF2b2lkIGhhdmluZyB0byBjb21wdXRlIHRoZSBlbnRpcmV0eSBvZiB0aGUgZ2VuZXJhdG9yL2l0ZXIuCiAgICAgIHRyeToKICAgICAgICBjaGVja19jb25zdHJhaW50KHNlbGYueWllbGRlZF90eXBlLCBpbnN0YW5jZSkKICAgICAgICByZXR1cm4KICAgICAgZXhjZXB0IENvbXBvc2l0ZVR5cGVIaW50RXJyb3IgYXMgZToKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQ6ICVzJyAlIChyZXByKHNlbGYpLCBzdHIoZSkpKQogICAgICBleGNlcHQgU2ltcGxlVHlwZUhpbnRFcnJvcjoKICAgICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIEV4cGVjdGVkIGEgaXRlcmF0b3Igb2YgdHlwZSAlcy4gJwogICAgICAgICAgICAnSW5zdGVhZCByZWNlaXZlZCBhIGl0ZXJhdG9yIG9mIHR5cGUgJXMuJyAlICgKICAgICAgICAgICAgICAgIHJlcHIoc2VsZiksCiAgICAgICAgICAgICAgICBfdW5pZmllZF9yZXByKHNlbGYueWllbGRlZF90eXBlKSwKICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fY2xhc3NfXy5fX25hbWVfXykpCgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtKToKICAgIHZhbGlkYXRlX2NvbXBvc2l0ZV90eXBlX3BhcmFtKAogICAgICAgIHR5cGVfcGFyYW0sIGVycm9yX21zZ19wcmVmaXg9J1BhcmFtZXRlciB0byBhbiBJdGVyYXRvciBoaW50JykKCiAgICByZXR1cm4gc2VsZi5JdGVyYXRvclR5cGVDb25zdHJhaW50KHR5cGVfcGFyYW0pCgoKSXRlcmF0b3JUeXBlQ29uc3RyYWludCA9IEl0ZXJhdG9ySGludC5JdGVyYXRvclR5cGVDb25zdHJhaW50CgoKY2xhc3MgV2luZG93ZWRUeXBlQ29uc3RyYWludCh3aXRoX21ldGFjbGFzcygKICAgIEdldGl0ZW1Db25zdHJ1Y3RvciwgICMgdHlwZTogaWdub3JlW21pc2NdCiAgICBUeXBlQ29uc3RyYWludCkpOgogICIiIkEgdHlwZSBjb25zdHJhaW50IGZvciBXaW5kb3dlZFZhbHVlIG9iamVjdHMuCgogIE1vc3RseSBmb3IgaW50ZXJuYWwgdXNlLgoKICBBdHRyaWJ1dGVzOgogICAgaW5uZXJfdHlwZTogVGhlIHR5cGUgd2hpY2ggdGhlIGVsZW1lbnQgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mLgogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBpbm5lcl90eXBlKToKICAgIHNlbGYuaW5uZXJfdHlwZSA9IG5vcm1hbGl6ZShpbm5lcl90eXBlKQoKICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgIHJldHVybiAoCiAgICAgICAgaXNpbnN0YW5jZShvdGhlciwgV2luZG93ZWRUeXBlQ29uc3RyYWludCkgYW5kCiAgICAgICAgc2VsZi5pbm5lcl90eXBlID09IG90aGVyLmlubmVyX3R5cGUpCgogIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgIHJldHVybiBoYXNoKHNlbGYuaW5uZXJfdHlwZSkgXiAxMyAqIGhhc2godHlwZShzZWxmKSkKCiAgZGVmIF9pbm5lcl90eXBlcyhzZWxmKToKICAgIHlpZWxkIHNlbGYuaW5uZXJfdHlwZQoKICBkZWYgX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc2VsZiwgc3ViKToKICAgIHJldHVybiAoCiAgICAgICAgaXNpbnN0YW5jZShzdWIsIHNlbGYuX19jbGFzc19fKSBhbmQKICAgICAgICBpc19jb25zaXN0ZW50X3dpdGgoc3ViLmlubmVyX3R5cGUsIHNlbGYuaW5uZXJfdHlwZSkpCgogIGRlZiB0eXBlX2NoZWNrKHNlbGYsIGluc3RhbmNlKToKICAgIGZyb20gYXBhY2hlX2JlYW0udHJhbnNmb3JtcyBpbXBvcnQgd2luZG93CiAgICBpZiBub3QgaXNpbnN0YW5jZShpbnN0YW5jZSwgd2luZG93LldpbmRvd2VkVmFsdWUpOgogICAgICByYWlzZSBDb21wb3NpdGVUeXBlSGludEVycm9yKAogICAgICAgICAgIldpbmRvdyB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFZhbGlkIG9iamVjdCBpbnN0YW5jZSAiCiAgICAgICAgICAibXVzdCBiZSBvZiB0eXBlICdXaW5kb3dlZFZhbHVlJy4gSW5zdGVhZCwgYW4gaW5zdGFuY2Ugb2YgJyVzJyAiCiAgICAgICAgICAid2FzIHJlY2VpdmVkLiIgJSAoaW5zdGFuY2UuX19jbGFzc19fLl9fbmFtZV9fKSkKCiAgICB0cnk6CiAgICAgIGNoZWNrX2NvbnN0cmFpbnQoc2VsZi5pbm5lcl90eXBlLCBpbnN0YW5jZS52YWx1ZSkKICAgIGV4Y2VwdCAoQ29tcG9zaXRlVHlwZUhpbnRFcnJvciwgU2ltcGxlVHlwZUhpbnRFcnJvcik6CiAgICAgIHJhaXNlIENvbXBvc2l0ZVR5cGVIaW50RXJyb3IoCiAgICAgICAgICAnJXMgaGludCB0eXBlLWNvbnN0cmFpbnQgdmlvbGF0ZWQuIFRoZSB0eXBlIG9mIGVsZW1lbnQgaW4gJwogICAgICAgICAgJ2lzIGluY29ycmVjdC4gRXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgdHlwZSAlcywgJwogICAgICAgICAgJ2luc3RlYWQgcmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgdHlwZSAlcy4nICUgKAogICAgICAgICAgICAgIHJlcHIoc2VsZiksCiAgICAgICAgICAgICAgX3VuaWZpZWRfcmVwcihzZWxmLmlubmVyX3R5cGUpLAogICAgICAgICAgICAgIGluc3RhbmNlLnZhbHVlLl9fY2xhc3NfXy5fX25hbWVfXykpCgoKY2xhc3MgR2VuZXJhdG9ySGludChJdGVyYXRvckhpbnQpOgogICIiIkEgR2VuZXJhdG9yIHR5cGUgaGludC4KCiAgU3Vic2NyaXB0b3IgaXMgaW4gdGhlIGZvcm0gW3lpZWxkX3R5cGUsIHNlbmRfdHlwZSwgcmV0dXJuX3R5cGVdLCBob3dldmVyCiAgb25seSB5aWVsZF90eXBlIGlzIHN1cHBvcnRlZC4gVGhlIDIgb3RoZXJzIGFyZSBleHBlY3RlZCB0byBiZSBOb25lLgogICIiIgogIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB0eXBlX3BhcmFtcyk6CiAgICBpZiBpc2luc3RhbmNlKHR5cGVfcGFyYW1zLCB0dXBsZSkgYW5kIGxlbih0eXBlX3BhcmFtcykgPT0gMzoKICAgICAgeWllbGRfdHlwZSwgc2VuZF90eXBlLCByZXR1cm5fdHlwZSA9IHR5cGVfcGFyYW1zCiAgICAgIGlmIHNlbmRfdHlwZSBpcyBub3QgTm9uZToKICAgICAgICBfTE9HR0VSLndhcm5pbmcoJ0lnbm9yaW5nIHNlbmRfdHlwZSBoaW50OiAlcycgJSBzZW5kX3R5cGUpCiAgICAgIGlmIHNlbmRfdHlwZSBpcyBub3QgTm9uZToKICAgICAgICBfTE9HR0VSLndhcm5pbmcoJ0lnbm9yaW5nIHJldHVybl90eXBlIGhpbnQ6ICVzJyAlIHJldHVybl90eXBlKQogICAgZWxzZToKICAgICAgeWllbGRfdHlwZSA9IHR5cGVfcGFyYW1zCiAgICByZXR1cm4gc2VsZi5JdGVyYXRvclR5cGVDb25zdHJhaW50KHlpZWxkX3R5cGUpCgoKIyBDcmVhdGUgdGhlIGFjdHVhbCBpbnN0YW5jZXMgZm9yIGFsbCBkZWZpbmVkIHR5cGUtaGludHMgYWJvdmUuCkFueSA9IEFueVR5cGVDb25zdHJhaW50KCkKVW5pb24gPSBVbmlvbkhpbnQoKQpPcHRpb25hbCA9IE9wdGlvbmFsSGludCgpClR1cGxlID0gVHVwbGVIaW50KCkKTGlzdCA9IExpc3RIaW50KCkKS1YgPSBLVkhpbnQoKQpEaWN0ID0gRGljdEhpbnQoKQpTZXQgPSBTZXRIaW50KCkKSXRlcmFibGUgPSBJdGVyYWJsZUhpbnQoKQpJdGVyYXRvciA9IEl0ZXJhdG9ySGludCgpCkdlbmVyYXRvciA9IEdlbmVyYXRvckhpbnQoKQpXaW5kb3dlZFZhbHVlID0gV2luZG93ZWRUeXBlQ29uc3RyYWludAoKIyBUaGVyZSBpcyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBkZWZpbmluZyB0aGlzIG1hcHBpbmcKIyBhbmQgdXNpbmcgaXQgaW4gbm9ybWFsaXplKCkuICBJbml0aWFsaXplIGl0IGhlcmUgYW5kIHBvcHVsYXRlCiMgaXQgYmVsb3cuCl9LTk9XTl9QUklNSVRJVkVfVFlQRVMgPSB7fSAgIyB0eXBlOiB0eXBpbmcuRGljdFt0eXBlLCB0eXBpbmcuQW55XQoKCmRlZiBub3JtYWxpemUoeCwgbm9uZV9hc190eXBlPUZhbHNlKToKICAjIE5vbmUgaXMgaW5jb25zaXN0YW50bHkgdXNlZCBmb3IgQW55LCB1bmtub3duLCBvciBOb25lVHlwZS4KICBpZiBub25lX2FzX3R5cGUgYW5kIHggaXMgTm9uZToKICAgIHJldHVybiB0eXBlKE5vbmUpCiAgZWxpZiB4IGluIF9LTk9XTl9QUklNSVRJVkVfVFlQRVM6CiAgICByZXR1cm4gX0tOT1dOX1BSSU1JVElWRV9UWVBFU1t4XQogIGVsaWYgZ2V0YXR0cih4LCAnX19tb2R1bGVfXycsIE5vbmUpID09ICd0eXBpbmcnOgogICAgIyBBdm9pZCBjaXJjdWxhciBpbXBvcnRzCiAgICBmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eQogICAgYmVhbV90eXBlID0gbmF0aXZlX3R5cGVfY29tcGF0aWJpbGl0eS5jb252ZXJ0X3RvX2JlYW1fdHlwZSh4KQogICAgaWYgYmVhbV90eXBlICE9IHg6CiAgICAgICMgV2Ugd2VyZSBhYmxlIHRvIGRvIHRoZSBjb252ZXJzaW9uLgogICAgICByZXR1cm4gYmVhbV90eXBlCiAgICBlbHNlOgogICAgICAjIEl0IG1pZ2h0IGJlIGEgY29tcGF0aWJsZSB0eXBlIHdlIGRvbid0IHVuZGVyc3RhbmQuCiAgICAgIHJldHVybiBBbnkKICByZXR1cm4geAoKCl9LTk9XTl9QUklNSVRJVkVfVFlQRVMudXBkYXRlKHsKICAgIGRpY3Q6IERpY3RbQW55LCBBbnldLAogICAgbGlzdDogTGlzdFtBbnldLAogICAgdHVwbGU6IFR1cGxlW0FueSwgLi4uXSwKICAgIHNldDogU2V0W0FueV0sCn0pCgoKZGVmIGlzX2NvbnNpc3RlbnRfd2l0aChzdWIsIGJhc2UpOgogICIiIkNoZWNrcyB3aGV0aGVyIHN1YiBhIGlzIGNvbnNpc3RlbnQgd2l0aCBiYXNlLgoKICBUaGlzIGlzIGFjY29yZGluZyB0byB0aGUgdGVybWlub2xvZ3kgb2YgUEVQIDQ4My80ODQuICBUaGlzIHJlbGF0aW9uc2hpcCBpcwogIG5laXRoZXIgc3ltbWV0cmljIG5vciB0cmFuc2l0aXZlLCBidXQgYSBnb29kIG1uZW1vbmljIHRvIGtlZXAgaW4gbWluZCBpcyB0aGF0CiAgaXNfY29uc2lzdGVudF93aXRoKGEsIGIpIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byB0aGUgaXNzdWJjbGFzcyhhLCBiKQogIHJlbGF0aW9uLCBidXQgYWxzbyBoYW5kbGVzIHRoZSBzcGVjaWFsIEFueSB0eXBlIGFzIHdlbGwgYXMgdHlwZQogIHBhcmFtZXRlcml6YXRpb24uCiAgIiIiCiAgaWYgc3ViID09IGJhc2U6CiAgICAjIENvbW1vbiBzcGVjaWFsIGNhc2UuCiAgICByZXR1cm4gVHJ1ZQogIGlmIGlzaW5zdGFuY2Uoc3ViLCBBbnlUeXBlQ29uc3RyYWludCkgb3IgaXNpbnN0YW5jZShiYXNlLCBBbnlUeXBlQ29uc3RyYWludCk6CiAgICByZXR1cm4gVHJ1ZQogIHN1YiA9IG5vcm1hbGl6ZShzdWIsIG5vbmVfYXNfdHlwZT1UcnVlKQogIGJhc2UgPSBub3JtYWxpemUoYmFzZSwgbm9uZV9hc190eXBlPVRydWUpCiAgaWYgaXNpbnN0YW5jZShiYXNlLCBUeXBlQ29uc3RyYWludCk6CiAgICBpZiBpc2luc3RhbmNlKHN1YiwgVW5pb25Db25zdHJhaW50KToKICAgICAgcmV0dXJuIGFsbChpc19jb25zaXN0ZW50X3dpdGgoYywgYmFzZSkgZm9yIGMgaW4gc3ViLnVuaW9uX3R5cGVzKQogICAgcmV0dXJuIGJhc2UuX2NvbnNpc3RlbnRfd2l0aF9jaGVja18oc3ViKQogIGVsaWYgaXNpbnN0YW5jZShzdWIsIFR5cGVDb25zdHJhaW50KToKICAgICMgTm90aGluZyBidXQgb2JqZWN0IGxpdmVzIGFib3ZlIGFueSB0eXBlIGNvbnN0cmFpbnRzLgogICAgcmV0dXJuIGJhc2UgPT0gb2JqZWN0CiAgcmV0dXJuIGlzc3ViY2xhc3Moc3ViLCBiYXNlKQoKCmRlZiBnZXRfeWllbGRlZF90eXBlKHR5cGVfaGludCk6CiAgIiIiT2J0YWlucyB0aGUgdHlwZSBvZiBlbGVtZW50cyB5aWVsZGVkIGJ5IGFuIGl0ZXJhYmxlLgoKICBOb3RlIHRoYXQgIml0ZXJhYmxlIiBoZXJlIG1lYW5zOiBjYW4gYmUgaXRlcmF0ZWQgb3ZlciBpbiBhIGZvciBsb29wLCBleGNsdWRpbmcKICBzdHJpbmdzIGFuZCBkaWN0cy4KCiAgQXJnczoKICAgIHR5cGVfaGludDogKFR5cGVDb25zdHJhaW50KSBUaGUgaXRlcmFibGUgaW4gcXVlc3Rpb24uIE11c3QgYmUgbm9ybWFsaXplKCktZC4KCiAgUmV0dXJuczoKICAgIFlpZWxkZWQgdHlwZSBvZiB0aGUgaXRlcmFibGUuCgogIFJhaXNlczoKICAgIFZhbHVlRXJyb3IgaWYgbm90IGl0ZXJhYmxlLgogICIiIgogIGlmIGlzaW5zdGFuY2UodHlwZV9oaW50LCBBbnlUeXBlQ29uc3RyYWludCk6CiAgICByZXR1cm4gdHlwZV9oaW50CiAgaWYgaXNfY29uc2lzdGVudF93aXRoKHR5cGVfaGludCwgSXRlcmF0b3JbQW55XSk6CiAgICByZXR1cm4gdHlwZV9oaW50LnlpZWxkZWRfdHlwZQogIGlmIGlzX2NvbnNpc3RlbnRfd2l0aCh0eXBlX2hpbnQsIFR1cGxlW0FueSwgLi4uXSk6CiAgICBpZiBpc2luc3RhbmNlKHR5cGVfaGludCwgVHVwbGVDb25zdHJhaW50KToKICAgICAgcmV0dXJuIFVuaW9uW3R5cGVfaGludC50dXBsZV90eXBlc10KICAgIGVsc2U6ICAjIFR1cGxlU2VxdWVuY2VDb25zdHJhaW50CiAgICAgIHJldHVybiB0eXBlX2hpbnQuaW5uZXJfdHlwZQogIGlmIGlzX2NvbnNpc3RlbnRfd2l0aCh0eXBlX2hpbnQsIEl0ZXJhYmxlW0FueV0pOgogICAgcmV0dXJuIHR5cGVfaGludC5pbm5lcl90eXBlCiAgcmFpc2UgVmFsdWVFcnJvcignJXMgaXMgbm90IGl0ZXJhYmxlJyAlIHR5cGVfaGludCkKCgpkZWYgY29lcmNlX3RvX2t2X3R5cGUoZWxlbWVudF90eXBlLCBsYWJlbD1Ob25lLCBzaWRlX2lucHV0X3Byb2R1Y2VyPU5vbmUpOgogICIiIkF0dGVtcHRzIHRvIGNvZXJjZSBlbGVtZW50X3R5cGUgdG8gYSBjb21wYXRpYmxlIGt2IHR5cGUuCgogIFJhaXNlcyBhbiBlcnJvciBvbiBmYWlsdXJlLgogICIiIgogIGlmIHNpZGVfaW5wdXRfcHJvZHVjZXI6CiAgICBjb25zdW1lciA9ICdzaWRlLWlucHV0IG9mICVyIChwcm9kdWNlcjogJXIpJyAlIChsYWJlbCwgc2lkZV9pbnB1dF9wcm9kdWNlcikKICBlbHNlOgogICAgY29uc3VtZXIgPSAnJXInICUgbGFiZWwKCiAgIyBJZiBlbGVtZW50X3R5cGUgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0cmVhdCBpdCBhcyBgQW55YC4KICBpZiBub3QgZWxlbWVudF90eXBlOgogICAgcmV0dXJuIEtWW0FueSwgQW55XQogIGVsaWYgaXNpbnN0YW5jZShlbGVtZW50X3R5cGUsIFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQpOgogICAgaWYgbGVuKGVsZW1lbnRfdHlwZS50dXBsZV90eXBlcykgPT0gMjoKICAgICAgcmV0dXJuIGVsZW1lbnRfdHlwZQogICAgZWxzZToKICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICJUdXBsZSBpbnB1dCB0byAlcyBtdXN0IGhhdmUgdHdvIGNvbXBvbmVudHMuICIKICAgICAgICAgICJGb3VuZCAlcy4iICUgKGNvbnN1bWVyLCBlbGVtZW50X3R5cGUpKQogIGVsaWYgaXNpbnN0YW5jZShlbGVtZW50X3R5cGUsIEFueVR5cGVDb25zdHJhaW50KToKICAgICMgYEFueWAgdHlwZSBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIGEgS1ZbQW55LCBBbnldIHRvCiAgICAjIHNhdGlzZnkgdGhlIEtWIGZvcm0uCiAgICByZXR1cm4gS1ZbQW55LCBBbnldCiAgZWxpZiBpc2luc3RhbmNlKGVsZW1lbnRfdHlwZSwgVW5pb25Db25zdHJhaW50KToKICAgIHVuaW9uX3R5cGVzID0gW2NvZXJjZV90b19rdl90eXBlKHQpIGZvciB0IGluIGVsZW1lbnRfdHlwZS51bmlvbl90eXBlc10KICAgIHJldHVybiBLVltVbmlvblt0dXBsZSh0LnR1cGxlX3R5cGVzWzBdIGZvciB0IGluIHVuaW9uX3R5cGVzKV0sCiAgICAgICAgICAgICAgVW5pb25bdHVwbGUodC50dXBsZV90eXBlc1sxXSBmb3IgdCBpbiB1bmlvbl90eXBlcyldXQogIGVsc2U6CiAgICAjIFRPRE86IFBvc3NpYmx5IGhhbmRsZSBvdGhlciB2YWxpZCB0eXBlcy4KICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgIklucHV0IHRvICVzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIEtWW0FueSwgQW55XS4gIgogICAgICAgICJGb3VuZCAlcy4iICUgKGNvbnN1bWVyLCBlbGVtZW50X3R5cGUpKQqUlaPuAAAAAAAAfZQojBNTaW1wbGVUeXBlSGludEVycm9ylGpdMQEAS2hLaYeUjBZDb21wb3NpdGVUeXBlSGludEVycm9ylGpdMQEAS2xLbYeUjB5HZXRpdGVtQ29uc3RydWN0b3IuX19nZXRpdGVtX1+UalYxAQBLcktzh5SMEkdldGl0ZW1Db25zdHJ1Y3RvcpRqXTEBAEtwS3OHlIwmVHlwZUNvbnN0cmFpbnQuX2NvbnNpc3RlbnRfd2l0aF9jaGVja1+UalYxAQBLfkuKh5SMGVR5cGVDb25zdHJhaW50LnR5cGVfY2hlY2uUalYxAQBLjEuch5SMI1R5cGVDb25zdHJhaW50Lm1hdGNoX3R5cGVfdmFyaWFibGVzlGpWMQEAS55Ln4eUjCJUeXBlQ29uc3RyYWludC5iaW5kX3R5cGVfdmFyaWFibGVzlGpWMQEAS6FLooeUjBtUeXBlQ29uc3RyYWludC5faW5uZXJfdHlwZXOUalYxAQBLpEumh5SMFFR5cGVDb25zdHJhaW50LnZpc2l0lGpWMQEAS6hLtoeUjBVUeXBlQ29uc3RyYWludC5fX25lX1+UalYxAQBLuEu6h5SMDlR5cGVDb25zdHJhaW50lGpdMQEAS3ZLuoeUjBRtYXRjaF90eXBlX3ZhcmlhYmxlc5RqVjEBAEu9S8CHlIwTYmluZF90eXBlX3ZhcmlhYmxlc5RqVjEBAEvDS8aHlIwtSW5kZXhhYmxlVHlwZUNvbnN0cmFpbnQuX2NvbnN0cmFpbnRfZm9yX2luZGV4lGpWMQEAS81L04eUjBdJbmRleGFibGVUeXBlQ29uc3RyYWludJRqXTEBAEvJS9OHlIwfU2VxdWVuY2VUeXBlQ29uc3RyYWludC5fX2luaXRfX5RqVjEBAEvkS+aHlIwdU2VxdWVuY2VUeXBlQ29uc3RyYWludC5fX2VxX1+UalYxAQBL6Evrh5SMH1NlcXVlbmNlVHlwZUNvbnN0cmFpbnQuX19oYXNoX1+UalYxAQBL7Uvuh5SMI1NlcXVlbmNlVHlwZUNvbnN0cmFpbnQuX2lubmVyX3R5cGVzlGpWMQEAS/BL8YeUjCxTZXF1ZW5jZVR5cGVDb25zdHJhaW50Ll9jb25zdHJhaW50X2Zvcl9pbmRleJRqVjEBAEvzS/WHlIwuU2VxdWVuY2VUeXBlQ29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX5RqVjEBAEv3S/qHlIwhU2VxdWVuY2VUeXBlQ29uc3RyYWludC50eXBlX2NoZWNrlGpWMQEAS/xNFwGHlIwrU2VxdWVuY2VUeXBlQ29uc3RyYWludC5tYXRjaF90eXBlX3ZhcmlhYmxlc5RqVjEBAE0ZAU0cAYeUjCpTZXF1ZW5jZVR5cGVDb25zdHJhaW50LmJpbmRfdHlwZV92YXJpYWJsZXOUalYxAQBNHgFNJAGHlIwWU2VxdWVuY2VUeXBlQ29uc3RyYWludJRqXTEBAEvWTSQBh5SMHkNvbXBvc2l0ZVR5cGVIaW50Ll9fZ2V0aXRlbV9fX5RqVjEBAE03AU1JAYeUjBFDb21wb3NpdGVUeXBlSGludJRqXTEBAE0nAU1JAYeUjB12YWxpZGF0ZV9jb21wb3NpdGVfdHlwZV9wYXJhbZRqVjEBAE1MAU1tAYeUjA1fdW5pZmllZF9yZXBylGpWMQEATXABTX0Bh5SMEGNoZWNrX2NvbnN0cmFpbnSUalYxAQBNgAFNnAGHlIwYQW55VHlwZUNvbnN0cmFpbnQuX19lcV9flGpWMQEATaYBTacBh5SMGkFueVR5cGVDb25zdHJhaW50Ll9fcmVwcl9flGpWMQEATakBTaoBh5SMGkFueVR5cGVDb25zdHJhaW50Ll9faGFzaF9flGpWMQEATawBTa4Bh5SMHEFueVR5cGVDb25zdHJhaW50LnR5cGVfY2hlY2uUalYxAQBNsAFNsQGHlIwRQW55VHlwZUNvbnN0cmFpbnSUal0xAQBNnwFNsQGHlIwVVHlwZVZhcmlhYmxlLl9faW5pdF9flGpWMQEATbUBTbYBh5SME1R5cGVWYXJpYWJsZS5fX2VxX1+UalYxAQBNuAFNuQGHlIwVVHlwZVZhcmlhYmxlLl9faGFzaF9flGpWMQEATbsBTb0Bh5SMFVR5cGVWYXJpYWJsZS5fX3JlcHJfX5RqVjEBAE2/AU3AAYeUjCFUeXBlVmFyaWFibGUubWF0Y2hfdHlwZV92YXJpYWJsZXOUalYxAQBNwgFNwwGHlIwgVHlwZVZhcmlhYmxlLmJpbmRfdHlwZV92YXJpYWJsZXOUalYxAQBNxQFNxgGHlIwMVHlwZVZhcmlhYmxllGpdMQEATbQBTcYBh5SMIlVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnQuX19pbml0X1+UalYxAQBN3AFN3QGHlIwgVW5pb25IaW50LlVuaW9uQ29uc3RyYWludC5fX2VxX1+UalYxAQBN3wFN4gGHlIwiVW5pb25IaW50LlVuaW9uQ29uc3RyYWludC5fX2hhc2hfX5RqVjEBAE3kAU3lAYeUjCJVbmlvbkhpbnQuVW5pb25Db25zdHJhaW50Ll9fcmVwcl9flGpWMQEATecBTeoBh5SMJlVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnQuX2lubmVyX3R5cGVzlGpWMQEATewBTe4Bh5SMMVVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnQuX2NvbnNpc3RlbnRfd2l0aF9jaGVja1+UalYxAQBN8AFN9wGHlIwkVW5pb25IaW50LlVuaW9uQ29uc3RyYWludC50eXBlX2NoZWNrlGpWMQEATfkBTQkCh5SMGVVuaW9uSGludC5VbmlvbkNvbnN0cmFpbnSUal0xAQBN2wFNCQKHlIwVVW5pb25IaW50Ll9fZ2V0aXRlbV9flGpWMQEATQsCTSgCh5SMCVVuaW9uSGludJRqXTEBAE3JAU0oAoeUjBhPcHRpb25hbEhpbnQuX19nZXRpdGVtX1+UalYxAQBNMwJNOgKHlIwMT3B0aW9uYWxIaW50lGpdMQEATS4CTToCh5SMKlR1cGxlSGludC5UdXBsZVNlcXVlbmNlQ29uc3RyYWludC5fX2luaXRfX5RqVjEBAE1OAk1PAoeUjCpUdXBsZUhpbnQuVHVwbGVTZXF1ZW5jZUNvbnN0cmFpbnQuX19yZXByX1+UalYxAQBNUQJNUgKHlIw5VHVwbGVIaW50LlR1cGxlU2VxdWVuY2VDb25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tflGpWMQEATVQCTVoCh5SMIVR1cGxlSGludC5UdXBsZVNlcXVlbmNlQ29uc3RyYWludJRqXTEBAE1NAk1aAoeUjCJUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9faW5pdF9flGpWMQEATV0CTV4Ch5SMIFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQuX19lcV9flGpWMQEATWACTWMCh5SMIlR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQuX19oYXNoX1+UalYxAQBNZQJNZgKHlIwiVHVwbGVIaW50LlR1cGxlQ29uc3RyYWludC5fX3JlcHJfX5RqVjEBAE1oAk1qAoeUjCZUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9pbm5lcl90eXBlc5RqVjEBAE1sAk1uAoeUjC9UdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9jb25zdHJhaW50X2Zvcl9pbmRleJRqVjEBAE1wAk1yAoeUjDFUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tflGpWMQEATXQCTXkCh5SMJFR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQudHlwZV9jaGVja5RqVjEBAE17Ak2aAoeUjC5UdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50Lm1hdGNoX3R5cGVfdmFyaWFibGVzlGpWMQEATZwCTaECh5SMLVR1cGxlSGludC5UdXBsZUNvbnN0cmFpbnQuYmluZF90eXBlX3ZhcmlhYmxlc5RqVjEBAE2jAk2oAoeUjBlUdXBsZUhpbnQuVHVwbGVDb25zdHJhaW50lGpdMQEATVwCTagCh5SMFVR1cGxlSGludC5fX2dldGl0ZW1fX5RqVjEBAE2qAk3BAoeUjAlUdXBsZUhpbnSUal0xAQBNPQJNwQKHlIwgTGlzdEhpbnQuTGlzdENvbnN0cmFpbnQuX19pbml0X1+UalYxAQBN0gJN0wKHlIwgTGlzdEhpbnQuTGlzdENvbnN0cmFpbnQuX19yZXByX1+UalYxAQBN1QJN1gKHlIwXTGlzdEhpbnQuTGlzdENvbnN0cmFpbnSUal0xAQBN0QJN1gKHlIwUTGlzdEhpbnQuX19nZXRpdGVtX1+UalYxAQBN2AJN2wKHlIwITGlzdEhpbnSUal0xAQBNyAJN2wKHlIwSS1ZIaW50Ll9fZ2V0aXRlbV9flGpWMQEATegCTfQCh5SMBktWSGludJRqXTEBAE3hAk30AoeUjA9rZXlfdmFsdWVfdHlwZXOUalYxAQBN9wJNAgOHlIwgRGljdEhpbnQuRGljdENvbnN0cmFpbnQuX19pbml0X1+UalYxAQBNDANNDgOHlIwgRGljdEhpbnQuRGljdENvbnN0cmFpbnQuX19yZXByX1+UalYxAQBNEANNEgOHlIweRGljdEhpbnQuRGljdENvbnN0cmFpbnQuX19lcV9flGpWMQEATRQDTRcDh5SMIERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9faGFzaF9flGpWMQEATRkDTRoDh5SMJERpY3RIaW50LkRpY3RDb25zdHJhaW50Ll9pbm5lcl90eXBlc5RqVjEBAE0cA00eA4eUjC9EaWN0SGludC5EaWN0Q29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX5RqVjEBAE0gA00kA4eUjEBEaWN0SGludC5EaWN0Q29uc3RyYWludC5fcmFpc2VfaGludF9leGNlcHRpb25fb3JfaW5uZXJfZXhjZXB0aW9ulGpWMQEATSYDTTwDh5SMIkRpY3RIaW50LkRpY3RDb25zdHJhaW50LnR5cGVfY2hlY2uUalYxAQBNPgNNUgOHlIwsRGljdEhpbnQuRGljdENvbnN0cmFpbnQubWF0Y2hfdHlwZV92YXJpYWJsZXOUalYxAQBNVANNXAOHlIwrRGljdEhpbnQuRGljdENvbnN0cmFpbnQuYmluZF90eXBlX3ZhcmlhYmxlc5RqVjEBAE1eA01jA4eUjBdEaWN0SGludC5EaWN0Q29uc3RyYWludJRqXTEBAE0LA01jA4eUjBREaWN0SGludC5fX2dldGl0ZW1fX5RqVjEBAE1lA015A4eUjAhEaWN0SGludJRqXTEBAE0FA015A4eUjCJTZXRIaW50LlNldFR5cGVDb25zdHJhaW50Ll9faW5pdF9flGpWMQEATYcDTYgDh5SMIlNldEhpbnQuU2V0VHlwZUNvbnN0cmFpbnQuX19yZXByX1+UalYxAQBNigNNiwOHlIwZU2V0SGludC5TZXRUeXBlQ29uc3RyYWludJRqXTEBAE2GA02LA4eUjBNTZXRIaW50Ll9fZ2V0aXRlbV9flGpWMQEATY0DTZEDh5SMB1NldEhpbnSUal0xAQBNfwNNkQOHlIwsSXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQuX19pbml0X1+UalYxAQBNngNNoAOHlIwsSXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQuX19yZXByX1+UalYxAQBNogNNowOHlIw7SXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnQuX2NvbnNpc3RlbnRfd2l0aF9jaGVja1+UalYxAQBNpQNNsgOHlIwjSXRlcmFibGVIaW50Lkl0ZXJhYmxlVHlwZUNvbnN0cmFpbnSUal0xAQBNnQNNsgOHlIwYSXRlcmFibGVIaW50Ll9fZ2V0aXRlbV9flGpWMQEATbQDTbgDh5SMDEl0ZXJhYmxlSGludJRqXTEBAE2XA024A4eUjCxJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC5fX2luaXRfX5RqVjEBAE3IA03JA4eUjCxJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC5fX3JlcHJfX5RqVjEBAE3LA03MA4eUjCpJdGVyYXRvckhpbnQuSXRlcmF0b3JUeXBlQ29uc3RyYWludC5fX2VxX1+UalYxAQBNzgNN0AOHlIwsSXRlcmF0b3JIaW50Lkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnQuX19oYXNoX1+UalYxAQBN0gNN0wOHlIwwSXRlcmF0b3JIaW50Lkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnQuX2lubmVyX3R5cGVzlGpWMQEATdUDTdYDh5SMO0l0ZXJhdG9ySGludC5JdGVyYXRvclR5cGVDb25zdHJhaW50Ll9jb25zaXN0ZW50X3dpdGhfY2hlY2tflGpWMQEATdgDTdsDh5SMLkl0ZXJhdG9ySGludC5JdGVyYXRvclR5cGVDb25zdHJhaW50LnR5cGVfY2hlY2uUalYxAQBN3QNN7AOHlIwjSXRlcmF0b3JIaW50Lkl0ZXJhdG9yVHlwZUNvbnN0cmFpbnSUal0xAQBNxwNN7AOHlIwYSXRlcmF0b3JIaW50Ll9fZ2V0aXRlbV9flGpWMQEATe4DTfIDh5SMDEl0ZXJhdG9ySGludJRqXTEBAE2+A03yA4eUjB9XaW5kb3dlZFR5cGVDb25zdHJhaW50Ll9faW5pdF9flGpWMQEATQIETQMEh5SMHVdpbmRvd2VkVHlwZUNvbnN0cmFpbnQuX19lcV9flGpWMQEATQUETQgEh5SMH1dpbmRvd2VkVHlwZUNvbnN0cmFpbnQuX19oYXNoX1+UalYxAQBNCgRNCwSHlIwjV2luZG93ZWRUeXBlQ29uc3RyYWludC5faW5uZXJfdHlwZXOUalYxAQBNDQRNDgSHlIwuV2luZG93ZWRUeXBlQ29uc3RyYWludC5fY29uc2lzdGVudF93aXRoX2NoZWNrX5RqVjEBAE0QBE0TBIeUjCFXaW5kb3dlZFR5cGVDb25zdHJhaW50LnR5cGVfY2hlY2uUalYxAQBNFQRNJgSHlIwWV2luZG93ZWRUeXBlQ29uc3RyYWludJRqXTEBAE34A00mBIeUjBlHZW5lcmF0b3JIaW50Ll9fZ2V0aXRlbV9flGpWMQEATS8ETTgEh5SMDUdlbmVyYXRvckhpbnSUal0xAQBNKQRNOASHlIwJbm9ybWFsaXpllGpWMQEATU8ETV8Eh5SMEmlzX2NvbnNpc3RlbnRfd2l0aJRqVjEBAE1qBE2BBIeUjBBnZXRfeWllbGRlZF90eXBllGpWMQEATYQETZ4Eh5SMEWNvZXJjZV90b19rdl90eXBllGpWMQEATaEETcEEh5R1fZQojAxUeXBlVmFyaWFibGWUassDAACMIVR5cGVWYXJpYWJsZS5tYXRjaF90eXBlX3ZhcmlhYmxlc5RqywMAAIwgVHlwZVZhcmlhYmxlLmJpbmRfdHlwZV92YXJpYWJsZXOUassDAAB1jB9hcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzlHSUjChhcGFjaGVfYmVhbS50eXBlaGludHMudHlwZWhpbnRzX3Rlc3RfcHkzlChYmQcAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIHR5cGUtaGludCBvYmplY3RzIGFuZCBkZWNvcmF0b3JzIHdpdGggUHl0aG9uIDMgc3ludGF4IG5vdApzdXBwb3J0ZWQgYnkgMi43LiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IHVuaXR0ZXN0Cgpmcm9tIGFwYWNoZV9iZWFtLnRyYW5zZm9ybXMuY29yZSBpbXBvcnQgRG9Gbgpmcm9tIGFwYWNoZV9iZWFtLnR5cGVoaW50cyBpbXBvcnQgS1YKZnJvbSBhcGFjaGVfYmVhbS50eXBlaGludHMgaW1wb3J0IEl0ZXJhYmxlCmZyb20gYXBhY2hlX2JlYW0udHlwZWhpbnRzIGltcG9ydCBkZWNvcmF0b3JzCgpkZWNvcmF0b3JzLl9lbmFibGVfZnJvbV9jYWxsYWJsZSA9IFRydWUKCgpjbGFzcyBUZXN0UGFyRG9Bbm5vdGF0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgZGVmIHRlc3Rfd2l0aF9zaWRlX2lucHV0KHNlbGYpOgogICAgY2xhc3MgTXlEb0ZuKERvRm4pOgogICAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50OiBmbG9hdCwgc2lkZV9pbnB1dDogc3RyKSAtPiBcCiAgICAgICAgICBJdGVyYWJsZVtLVltzdHIsIGZsb2F0XV06CiAgICAgICAgcGFzcwoKICAgIHRoID0gTXlEb0ZuKCkuZ2V0X3R5cGVfaGludHMoKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5pbnB1dF90eXBlcywgKChmbG9hdCwgc3RyKSwge30pKQogICAgc2VsZi5hc3NlcnRFcXVhbCh0aC5vdXRwdXRfdHlwZXMsICgoS1Zbc3RyLCBmbG9hdF0sICksIHt9KSkKCiAgZGVmIHRlc3RfcGVwNDg0X2Fubm90YXRpb25zKHNlbGYpOgogICAgY2xhc3MgTXlEb0ZuKERvRm4pOgogICAgICBkZWYgcHJvY2VzcyhzZWxmLCBlbGVtZW50OiBpbnQpIC0+IEl0ZXJhYmxlW3N0cl06CiAgICAgICAgcGFzcwoKICAgIHByaW50KE15RG9GbigpLmdldF90eXBlX2hpbnRzKCkpCiAgICB0aCA9IE15RG9GbigpLmdldF90eXBlX2hpbnRzKCkKICAgIHNlbGYuYXNzZXJ0RXF1YWwodGguaW5wdXRfdHlwZXMsICgoaW50LCApLCB7fSkpCiAgICBzZWxmLmFzc2VydEVxdWFsKHRoLm91dHB1dF90eXBlcywgKChzdHIsICksIHt9KSkKCgppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogIHVuaXR0ZXN0Lm1haW4oKQqUfZQojDhUZXN0UGFyRG9Bbm5vdGF0aW9ucy50ZXN0X3dpdGhfc2lkZV9pbnB1dC5NeURvRm4ucHJvY2Vzc5RqVjEBAEsnSymHlIwwVGVzdFBhckRvQW5ub3RhdGlvbnMudGVzdF93aXRoX3NpZGVfaW5wdXQuTXlEb0ZulGpdMQEASyZLKYeUjClUZXN0UGFyRG9Bbm5vdGF0aW9ucy50ZXN0X3dpdGhfc2lkZV9pbnB1dJRqVjEBAEslSy2HlIw7VGVzdFBhckRvQW5ub3RhdGlvbnMudGVzdF9wZXA0ODRfYW5ub3RhdGlvbnMuTXlEb0ZuLnByb2Nlc3OUalYxAQBLMUsyh5SMM1Rlc3RQYXJEb0Fubm90YXRpb25zLnRlc3RfcGVwNDg0X2Fubm90YXRpb25zLk15RG9GbpRqXTEBAEswSzKHlIwsVGVzdFBhckRvQW5ub3RhdGlvbnMudGVzdF9wZXA0ODRfYW5ub3RhdGlvbnOUalYxAQBLL0s3h5SMFFRlc3RQYXJEb0Fubm90YXRpb25zlGpdMQEASyRLN4eUdX2UKIwUVGVzdFBhckRvQW5ub3RhdGlvbnOUaoIDAACMKVRlc3RQYXJEb0Fubm90YXRpb25zLnRlc3Rfd2l0aF9zaWRlX2lucHV0lGqCAwAAjCxUZXN0UGFyRG9Bbm5vdGF0aW9ucy50ZXN0X3BlcDQ4NF9hbm5vdGF0aW9uc5RqggMAAHWMKGFwYWNoZV9iZWFtLnR5cGVoaW50cy50eXBlaGludHNfdGVzdF9weTOUdJSMHWFwYWNoZV9iZWFtLnV0aWxzLmFubm90YXRpb25zlChYpBYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRGVwcmVjYXRlZCBhbmQgZXhwZXJpbWVudGFsIGFubm90YXRpb25zLgoKRXhwZXJpbWVudGFsOiBTaWduaWZpZXMgdGhhdCBhIHB1YmxpYyBBUEkgKHB1YmxpYyBjbGFzcywgbWV0aG9kIG9yIGZpZWxkKSBpcwpzdWJqZWN0IHRvIGluY29tcGF0aWJsZSBjaGFuZ2VzLCBvciBldmVuIHJlbW92YWwsIGluIGEgZnV0dXJlIHJlbGVhc2UuIE5vdGUgdGhhdAp0aGUgcHJlc2VuY2Ugb2YgdGhpcyBhbm5vdGF0aW9uIGltcGxpZXMgbm90aGluZyBhYm91dCB0aGUgcXVhbGl0eSBvciBwZXJmb3JtYW5jZQpvZiB0aGUgQVBJIGluIHF1ZXN0aW9uLCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIEFQSSBvciBiZWhhdmlvciBtYXkgY2hhbmdlIGluIGFueQp3YXkuCgpEZXByZWNhdGVkOiBTaWduaWZpZXMgdGhhdCB1c2VycyBhcmUgZGlzY291cmFnZWQgZnJvbSB1c2luZyBhIHB1YmxpYyBBUEkKdHlwaWNhbGx5IGJlY2F1c2UgYSBiZXR0ZXIgYWx0ZXJuYXRpdmUgZXhpc3RzLCBhbmQgdGhlIGN1cnJlbnQgZm9ybSBtaWdodCBiZQpyZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uCgpVc2FnZToKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoKQW5ub3RhdGlvbnMgY29tZSBpbiB0d28gZmxhdm9yczogZGVwcmVjYXRlZCBhbmQgZXhwZXJpbWVudGFsCgpUaGUgJ2RlcHJlY2F0ZWQnIGFubm90YXRpb24gcmVxdWlyZXMgYSAnc2luY2UiIHBhcmFtZXRlciB0byBzcGVjaWZ5CndoYXQgdmVyc2lvbiBkZXByZWNhdGVkIGl0LgpCb3RoICdkZXByZWNhdGVkJyBhbmQgJ2V4cGVyaW1lbnRhbCcgYW5ub3RhdGlvbnMgY2FuIHNwZWNpZnkgdGhlCmN1cnJlbnQgcmVjb21tZW5kZWQgdmVyc2lvbiB0byB1c2UgYnkgbWVhbnMgb2YgYSAnY3VycmVudCcgcGFyYW1ldGVyLgoKVGhlIGZvbGxvd2luZyBleGFtcGxlIGlsbHVzdHJhdGVzIGhvdyB0byBhbm5vdGF0ZSBjb2V4aXN0aW5nIHZlcnNpb25zIG9mIHRoZQpzYW1lIGZ1bmN0aW9uICdtdWx0aXBseScuOjoKCiAgZGVmIG11bHRpcGx5KGFyZzEsIGFyZzIpOgogICAgcHJpbnQoYXJnMSwgJyonLCBhcmcyLCAnPScsIGVuZD0nICcpCiAgICByZXR1cm4gYXJnMSphcmcyCgojIFRoaXMgYW5ub3RhdGlvbiBtYXJrcyAnb2xkX211bHRpcGx5JyBhcyBkZXByZWNhdGVkIHNpbmNlICd2LjEnIGFuZCBzdWdnZXN0cwojIHVzaW5nICdtdWx0aXBseScgaW5zdGVhZC46OgoKICBAZGVwcmVjYXRlZChzaW5jZT0ndi4xJywgY3VycmVudD0nbXVsdGlwbHknKQogIGRlZiBvbGRfbXVsdGlwbHkoYXJnMSwgYXJnMik6CiAgICByZXN1bHQgPSAwCiAgICBmb3IgaSBpbiB4cmFuZ2UoYXJnMSk6CiAgICAgICAgcmVzdWx0ICs9IGFyZzIKICAgIHByaW50KGFyZzEsICcqJywgYXJnMiwgJyh0aGUgb2xkIHdheSk9JywgZW5kPScgJykKICAgIHJldHVybiByZXN1bHQKCiMgVGhpcyBhbm5vdGF0aW9uIG1hcmtzICdleHBfbXVsdGlwbHknIGFzIGV4cGVyaW1lbnRhbCBhbmQgc3VnZ2VzdHMKIyB1c2luZyAnbXVsdGlwbHknIGluc3RlYWQuOjoKCiAgQGV4cGVyaW1lbnRhbChzaW5jZT0ndi4xJywgY3VycmVudD0nbXVsdGlwbHknKQogIGRlZiBleHBfbXVsdGlwbHkoYXJnMSwgYXJnMik6CiAgICBwcmludChhcmcxLCAnKicsIGFyZzIsICcodGhlIGV4cGVyaW1lbnRhbCB3YXkpPScsIGVuZD0nICcpCiAgICByZXR1cm4gKGFyZzEqYXJnMikqKGFyZzEvYXJnMikqKGFyZzIvYXJnMSkKCiMgSWYgYSBjdXN0b20gbWVzc2FnZSBpcyBuZWVkZWQsIG9uIGJvdGggYW5ub3RhdGlvbnMgdHlwZXMgdGhlCiMgYXJnIGN1c3RvbV9tZXNzYWdlIGNhbiBiZSB1c2VkLjo6CgogIEBleHBlcmltZW50YWwoc2luY2U9J3YuMScsIGN1cnJlbnQ9J211bHRpcGx5JwogICAgICAgICAgICAgICAgY3VzdG9tX21lc3NhZ2U9J0V4cGVyaW1lbnRhbCBzaW5jZSAlc2luY2UlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHVzZSAlY3VycmVudCUgaW5zdGVkLicpCiAgZGVmIGV4cF9tdWx0aXBseShhcmcxLCBhcmcyKToKICAgIHByaW50KGFyZzEsICcqJywgYXJnMiwgJyh0aGUgZXhwZXJpbWVudGFsIHdheSk9JywgZW5kPScgJykKICAgIHJldHVybiAoYXJnMSphcmcyKSooYXJnMS9hcmcyKSooYXJnMi9hcmcxKQoKIyBTZXQgYSB3YXJuaW5nIGZpbHRlciB0byBjb250cm9sIGhvdyBvZnRlbiB3YXJuaW5ncyBhcmUgcHJvZHVjZWQuOjoKCiAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQogIHByaW50KG11bHRpcGx5KDUsIDYpKQogIHByaW50KG9sZF9tdWx0aXBseSg1LDYpKQogIHByaW50KGV4cF9tdWx0aXBseSg1LDYpKQoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgd2FybmluZ3MKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCgoKY2xhc3MgQmVhbURlcHJlY2F0aW9uV2FybmluZyhEZXByZWNhdGlvbldhcm5pbmcpOgogICIiIkJlYW0tc3BlY2lmaWMgZGVwcmVjYXRpb24gd2FybmluZ3MuIiIiCgoKIyBEb24ndCBpZ25vcmUgQmVhbURlcHJlY2F0aW9uV2FybmluZ3MuCndhcm5pbmdzLnNpbXBsZWZpbHRlcignb25jZScsIEJlYW1EZXByZWNhdGlvbldhcm5pbmcpCgoKZGVmIGFubm90YXRlKGxhYmVsLCBzaW5jZSwgY3VycmVudCwgZXh0cmFfbWVzc2FnZSwgY3VzdG9tX21lc3NhZ2U9Tm9uZSk6CiAgIiIiRGVjb3JhdGVzIGFuIEFQSSB3aXRoIGEgZGVwcmVjYXRlZCBvciBleHBlcmltZW50YWwgYW5ub3RhdGlvbi4KCiAgQXJnczoKICAgIGxhYmVsOiB0aGUga2luZCBvZiBhbm5vdGF0aW9uICgnZGVwcmVjYXRlZCcgb3IgJ2V4cGVyaW1lbnRhbCcpLgogICAgc2luY2U6IHRoZSB2ZXJzaW9uIHRoYXQgY2F1c2VzIHRoZSBhbm5vdGF0aW9uLgogICAgY3VycmVudDogdGhlIHN1Z2dlc3RlZCByZXBsYWNlbWVudCBmdW5jdGlvbi4KICAgIGV4dHJhX21lc3NhZ2U6IGFuIG9wdGlvbmFsIGFkZGl0aW9uYWwgbWVzc2FnZS4KICAgIGN1c3RvbV9tZXNzYWdlOiBpZiB0aGUgZGVmYXVsdCBtZXNzYWdlIGRvZXMgbm90IHN1ZmZpY2UsIHRoZSBtZXNzYWdlCiAgICAgIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoaXMgYXJndW1lbnQuIEEgc3RyaW5nCiAgICAgIHdoaXQgcmVwbGFjZW1lbnQgdG9rZW5zLgogICAgICBBIHJlcGxlY2VtZW50IHN0cmluZyBpcyB3ZXJlIHRoZSBwcmV2aXVzIGFyZ3Mgd2lsbAogICAgICBiZSBsb2NhdGVkIG9uIHRoZSBjdXN0b20gbWVzc2FnZS4KICAgICAgVGhlIGZvbGxvd2luZyByZXBsYWNlbWVudCBzdHJpbmdzIGNhbiBiZSB1c2VkOgogICAgICAlbmFtZSUgLT4gQVBJLl9fbmFtZV9fCiAgICAgICVzaW5jZSUgLT4gc2luY2UgKE1hbmRhdG9yeSBmb3IgdGhlIGRlY2FwcmV0ZWQgYW5ub3RhdGlvbikKICAgICAgJWN1cnJlbnQlIC0+IGN1cnJlbnQKICAgICAgJWV4dHJhJSAtPiBleHRyYV9tZXNzYWdlCgogIFJldHVybnM6CiAgICBUaGUgZGVjb3JhdG9yIGZvciB0aGUgQVBJLgogICIiIgogIGRlZiBfYW5ub3RhdGUoZm5jKToKICAgIEB3cmFwcyhmbmMpCiAgICBkZWYgaW5uZXIoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgaWYgbGFiZWwgPT0gJ2RlcHJlY2F0ZWQnOgogICAgICAgIHdhcm5pbmdfdHlwZSA9IEJlYW1EZXByZWNhdGlvbldhcm5pbmcKICAgICAgZWxzZToKICAgICAgICB3YXJuaW5nX3R5cGUgPSBGdXR1cmVXYXJuaW5nCiAgICAgIGlmIGN1c3RvbV9tZXNzYWdlIGlzIE5vbmU6CiAgICAgICAgbWVzc2FnZSA9ICclcyBpcyAlcycgJSAoZm5jLl9fbmFtZV9fLCBsYWJlbCkKICAgICAgICBpZiBsYWJlbCA9PSAnZGVwcmVjYXRlZCc6CiAgICAgICAgICBtZXNzYWdlICs9ICcgc2luY2UgJXMnICUgc2luY2UKICAgICAgICBtZXNzYWdlICs9ICcuIFVzZSAlcyBpbnN0ZWFkLicgJSBjdXJyZW50IGlmIGN1cnJlbnQgZWxzZSAnLicKICAgICAgICBpZiBleHRyYV9tZXNzYWdlOgogICAgICAgICAgbWVzc2FnZSArPSAnICcgKyBleHRyYV9tZXNzYWdlCiAgICAgIGVsc2U6CiAgICAgICAgaWYgbGFiZWwgPT0gJ2RlcHJlY2F0ZWQnIGFuZCAnJXNpbmNlJScgbm90IGluIGN1c3RvbV9tZXNzYWdlOgogICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAgICJSZXBsYWNlbWVudCBzdHJpbmcgJXNpbmNlJSBub3QgZm91bmQgb24gXAogICAgICAgICAgY3VzdG9tIG1lc3NhZ2UiKQogICAgICAgIGVtcHR5QXJnID0gbGFtYmRhIHg6ICcnIGlmIHggaXMgTm9uZSBlbHNlIHgKICAgICAgICBtZXNzYWdlID0gY3VzdG9tX21lc3NhZ2VcCiAgICAgICAgLnJlcGxhY2UoJyVuYW1lJScsIGZuYy5fX25hbWVfXylcCiAgICAgICAgLnJlcGxhY2UoJyVzaW5jZSUnLCBlbXB0eUFyZyhzaW5jZSkpXAogICAgICAgIC5yZXBsYWNlKCclY3VycmVudCUnLCBlbXB0eUFyZyhjdXJyZW50KSlcCiAgICAgICAgLnJlcGxhY2UoJyVleHRyYSUnLCBlbXB0eUFyZyhleHRyYV9tZXNzYWdlKSkKICAgICAgd2FybmluZ3Mud2FybihtZXNzYWdlLCB3YXJuaW5nX3R5cGUsIHN0YWNrbGV2ZWw9MikKICAgICAgcmV0dXJuIGZuYygqYXJncywgKiprd2FyZ3MpCgogICAgcmV0dXJuIGlubmVyCgogIHJldHVybiBfYW5ub3RhdGUKCgojIFVzZSBwYXJ0aWFsIGFwcGxpY2F0aW9uIHRvIGN1c3RvbWl6ZSBlYWNoIGFubm90YXRpb24uCiMgJ2N1cnJlbnQnIHdpbGwgYmUgb3B0aW9uYWwgaW4gYm90aCBkZXByZWNhdGVkIGFuZCBleHBlcmltZW50YWwKIyB3aGlsZSAnc2luY2UnIHdpbGwgYmUgbWFuZGF0b3J5IGZvciBkZXByZWNhdGVkLgpkZXByZWNhdGVkID0gcGFydGlhbCgKICAgIGFubm90YXRlLCBsYWJlbD0nZGVwcmVjYXRlZCcsIGN1cnJlbnQ9Tm9uZSwgZXh0cmFfbWVzc2FnZT1Ob25lKQpleHBlcmltZW50YWwgPSBwYXJ0aWFsKAogICAgYW5ub3RhdGUsCiAgICBsYWJlbD0nZXhwZXJpbWVudGFsJywKICAgIGN1cnJlbnQ9Tm9uZSwKICAgIHNpbmNlPU5vbmUsCiAgICBleHRyYV9tZXNzYWdlPU5vbmUpCpR9lCiMFkJlYW1EZXByZWNhdGlvbldhcm5pbmeUal0xAQBLXUteh5SMCGFubm90YXRllGpWMQEAS2VLmYeUdX2UKGoqjgAAascDAACMCGFubm90YXRllGrHAwAAdYwdYXBhY2hlX2JlYW0udXRpbHMuYW5ub3RhdGlvbnOUdJSMI2FwYWNoZV9iZWFtLnV0aWxzLmludGVyYWN0aXZlX3V0aWxzlChYew8AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQ29tbW9uIGludGVyYWN0aXZlIHV0aWxpdHkgbW9kdWxlLgoKRm9yIGV4cGVyaW1lbnRhbCB1c2FnZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCgpfTE9HR0VSID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCgoKZGVmIGlzX2luX2lweXRob24oKToKICAiIiJEZXRlcm1pbmVzIGlmIGN1cnJlbnQgY29kZSBpcyBleGVjdXRlZCB3aXRoaW4gYW4gaXB5dGhvbiBzZXNzaW9uLiIiIgogIGlzX2luX2lweXRob24gPSBGYWxzZQogICMgQ2hlY2sgaWYgdGhlIHJ1bnRpbWUgaXMgd2l0aGluIGFuIGludGVyYWN0aXZlIGVudmlyb25tZW50LCBpLmUuLCBpcHl0aG9uLgogIHRyeToKICAgIGZyb20gSVB5dGhvbiBpbXBvcnQgZ2V0X2lweXRob24gICMgcHlsaW50OiBkaXNhYmxlPWltcG9ydC1lcnJvcgogICAgaWYgZ2V0X2lweXRob24oKToKICAgICAgaXNfaW5faXB5dGhvbiA9IFRydWUKICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBwYXNzICAjIElmIGRlcGVuZGVuY2llcyBhcmUgbm90IGF2YWlsYWJsZSwgdGhlbiBub3QgaW50ZXJhY3RpdmUgZm9yIHN1cmUuCiAgcmV0dXJuIGlzX2luX2lweXRob24KCgpkZWYgaXNfaW5fbm90ZWJvb2soKToKICAiIiJEZXRlcm1pbmVzIGlmIGN1cnJlbnQgY29kZSBpcyBleGVjdXRlZCBmcm9tIGFuIGlweXRob24gbm90ZWJvb2suCgogIElmIGlzX2luX25vdGVib29rKCkgaXMgVHJ1ZSwgdGhlbiBpc19pbl9pcHl0aG9uKCkgbXVzdCBhbHNvIGJlIFRydWUuCiAgIiIiCiAgaXNfaW5fbm90ZWJvb2sgPSBGYWxzZQogIGlmIGlzX2luX2lweXRob24oKToKICAgICMgVGhlIGltcG9ydCBhbmQgdXNhZ2UgbXVzdCBiZSB2YWxpZCB1bmRlciB0aGUgZXhlY3V0aW9uIHBhdGguCiAgICBmcm9tIElQeXRob24gaW1wb3J0IGdldF9pcHl0aG9uCiAgICBpZiAnSVBLZXJuZWxBcHAnIGluIGdldF9pcHl0aG9uKCkuY29uZmlnOgogICAgICBpc19pbl9ub3RlYm9vayA9IFRydWUKICByZXR1cm4gaXNfaW5fbm90ZWJvb2sKCgpkZWYgYWx0ZXJfbGFiZWxfaWZfaXB5dGhvbih0cmFuc2Zvcm0sIHB2YWx1ZWlzaCk6CiAgIiIiQWx0ZXJzIHRoZSBsYWJlbCB0byBhbiBpbnRlcmFjdGl2ZSBsYWJlbCB3aXRoIGlweXRob24gcHJvbXB0IG1ldGFkYXRhCiAgcHJlZml4ZWQgZm9yIHRoZSBnaXZlbiB0cmFuc2Zvcm0gaWYgdGhlIGdpdmVuIHB2YWx1ZWlzaCBiZWxvbmdzIHRvIGEKICB1c2VyLWRlZmluZWQgcGlwZWxpbmUgYW5kIGN1cnJlbnQgY29kZSBleGVjdXRpb24gaXMgd2l0aGluIGFuIGlweXRob24ga2VybmVsLgogIE90aGVyd2lzZSwgbm9vcC4KCiAgQSBsYWJlbCBpcyBlaXRoZXIgYSB1c2VyLWRlZmluZWQgb3IgYXV0by1nZW5lcmF0ZWQgc3RyIG5hbWUgb2YgYSBQVHJhbnNmb3JtCiAgdGhhdCBpcyB1bmlxdWUgd2l0aGluIGEgcGlwZWxpbmUuIElmIGN1cnJlbnQgZW52aXJvbm1lbnQgaXNfaW5faXB5dGhvbigpLCBCZWFtCiAgY2FuIGltcGxpY2l0bHkgY3JlYXRlIGludGVyYWN0aXZlIGxhYmVscyB0byByZXBsYWNlIGxhYmVscyBvZiB0b3AtbGV2ZWwKICBQVHJhbnNmb3JtcyB0byBiZSBhcHBsaWVkLiBUaGUgbGFiZWwgaXMgZm9ybWF0dGVkIGFzOgogIGBDZWxsIHtwcm9tcHR9OiB7b3JpZ2luYWxfbGFiZWx9YC4KICAiIiIKICBpZiBpc19pbl9pcHl0aG9uKCk6CiAgICBmcm9tIGFwYWNoZV9iZWFtLnJ1bm5lcnMuaW50ZXJhY3RpdmUgaW1wb3J0IGludGVyYWN0aXZlX2Vudmlyb25tZW50IGFzIGllCiAgICAjIFRyYWNrcyB1c2VyIGRlZmluZWQgcGlwZWxpbmUgaW5zdGFuY2VzIGluIHdhdGNoZWQgc2NvcGVzIHNvIHRoYXQgd2Ugb25seQogICAgIyBhbHRlciBsYWJlbHMgZm9yIGFueSB0cmFuc2Zvcm0gdG8gcHZhbHVlaXNoIGJlbG9uZ2luZyB0byB0aG9zZSBwaXBlbGluZQogICAgIyBpbnN0YW5jZXMsIGV4Y2x1ZGluZyBhbnkgdHJhbnNmb3JtIHRvIGJlIGFwcGxpZWQgaW4gb3RoZXIgcGlwZWxpbmUKICAgICMgaW5zdGFuY2VzIHRoZSBCZWFtIFNESyBjcmVhdGVzIGltcGxpY2l0bHkuCiAgICBpZS5jdXJyZW50X2VudigpLnRyYWNrX3VzZXJfcGlwZWxpbmVzKCkKICAgIGZyb20gSVB5dGhvbiBpbXBvcnQgZ2V0X2lweXRob24KICAgIHByb21wdCA9IGdldF9pcHl0aG9uKCkuZXhlY3V0aW9uX2NvdW50CiAgICBwaXBlbGluZSA9IF9leHRyYWN0X3BpcGVsaW5lX29mX3B2YWx1ZWlzaChwdmFsdWVpc2gpCiAgICBpZiBub3QgcGlwZWxpbmU6CiAgICAgIF9MT0dHRVIud2FybmluZygKICAgICAgICAgICdGYWlsZWQgdG8gYWx0ZXIgdGhlIGxhYmVsIG9mIGEgdHJhbnNmb3JtIHdpdGggdGhlICcKICAgICAgICAgICdpcHl0aG9uIHByb21wdCBtZXRhZGF0YS4gQ2Fubm90IGZpZ3VyZSBvdXQgdGhlIHBpcGVsaW5lICcKICAgICAgICAgICd0aGF0IHRoZSBnaXZlbiBwdmFsdWVpc2ggJXMgYmVsb25ncyB0by4gVGh1cyBub29wLicsCiAgICAgICAgICBwdmFsdWVpc2gpCiAgICBpZiAocGlwZWxpbmUKICAgICAgICAjIFdlIG9ubHkgYWx0ZXIgZm9yIHRyYW5zZm9ybXMgdG8gYmUgYXBwbGllZCB0byB1c2VyLWRlZmluZWQgcGlwZWxpbmVzCiAgICAgICAgIyBhdCBwaXBlbGluZSBjb25zdHJ1Y3Rpb24gdGltZS4KICAgICAgICBhbmQgcGlwZWxpbmUgaW4gaWUuY3VycmVudF9lbnYoKS50cmFja2VkX3VzZXJfcGlwZWxpbmVzKToKICAgICAgdHJhbnNmb3JtLmxhYmVsID0gJ0NlbGwge306IHt9Jy5mb3JtYXQocHJvbXB0LCB0cmFuc2Zvcm0ubGFiZWwpCgoKZGVmIF9leHRyYWN0X3BpcGVsaW5lX29mX3B2YWx1ZWlzaChwdmFsdWVpc2gpOgogICIiIkV4dHJhY3RzIHRoZSBwaXBlbGluZSB0aGF0IHRoZSBnaXZlbiBwdmFsdWVpc2ggYmVsb25ncyB0by4iIiIKICBpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgdHVwbGUpOgogICAgcHZhbHVlID0gcHZhbHVlaXNoWzBdCiAgZWxpZiBpc2luc3RhbmNlKHB2YWx1ZWlzaCwgZGljdCk6CiAgICBwdmFsdWUgPSBuZXh0KGl0ZXIocHZhbHVlaXNoLnZhbHVlcygpKSkKICBlbHNlOgogICAgcHZhbHVlID0gcHZhbHVlaXNoCiAgaWYgaGFzYXR0cihwdmFsdWUsICdwaXBlbGluZScpOgogICAgcmV0dXJuIHB2YWx1ZS5waXBlbGluZQogIHJldHVybiBOb25lCpR9lCiMDWlzX2luX2lweXRob26UalYxAQBLH0sph5SMDmlzX2luX25vdGVib29rlGpWMQEASyxLN4eUjBZhbHRlcl9sYWJlbF9pZl9pcHl0aG9ulGpWMQEASzpLWoeUjB5fZXh0cmFjdF9waXBlbGluZV9vZl9wdmFsdWVpc2iUalYxAQBLXUtnh5R1fZQojA1pc19pbl9pcHl0aG9ulGrdAwAAjA5pc19pbl9ub3RlYm9va5Rq3QMAAIwWYWx0ZXJfbGFiZWxfaWZfaXB5dGhvbpRq3QMAAHWMI2FwYWNoZV9iZWFtLnV0aWxzLmludGVyYWN0aXZlX3V0aWxzlHSUjBhhcGFjaGVfYmVhbS51dGlscy5wbHVnaW6UKFiRBgAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJBIEJlYW1QbHVnaW4gYmFzZSBjbGFzcy4KCkZvciBleHBlcmltZW50YWwgdXNhZ2Ugb25seTsgbm8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKZnJvbSBidWlsdGlucyBpbXBvcnQgb2JqZWN0CgoKY2xhc3MgQmVhbVBsdWdpbihvYmplY3QpOgogICIiIlBsdWdpbiBiYXNlIGNsYXNzIHRvIGJlIGV4dGVuZGVkIGJ5IGRlcGVuZGVudCB1c2VycyBzdWNoIGFzIEZpbGVTeXN0ZW0uCiAgQW55IGluc3RhbnRpYXRlZCBzdWJjbGFzcyB3aWxsIGJlIGltcG9ydGVkIGF0IHdvcmtlciBzdGFydHVwIHRpbWUuIiIiCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGdldF9hbGxfc3ViY2xhc3NlcyhjbHMpOgogICAgIiIiR2V0IGFsbCB0aGUgc3ViY2xhc3NlcyBvZiB0aGUgQmVhbVBsdWdpbiBjbGFzcy4iIiIKICAgIGFsbF9zdWJjbGFzc2VzID0gW10KICAgIGZvciBzdWJjbGFzcyBpbiBjbHMuX19zdWJjbGFzc2VzX18oKToKICAgICAgYWxsX3N1YmNsYXNzZXMuYXBwZW5kKHN1YmNsYXNzKQogICAgICBhbGxfc3ViY2xhc3Nlcy5leHRlbmQoc3ViY2xhc3MuZ2V0X2FsbF9zdWJjbGFzc2VzKCkpCiAgICByZXR1cm4gYWxsX3N1YmNsYXNzZXMKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGdldF9hbGxfcGx1Z2luX3BhdGhzKGNscyk6CiAgICAiIiJHZXQgZnVsbCBpbXBvcnQgcGF0aHMgb2YgdGhlIEJlYW1QbHVnaW4gc3ViY2xhc3MuIiIiCiAgICBkZWYgZnVsbG5hbWUobyk6CiAgICAgIHJldHVybiBvLl9fbW9kdWxlX18gKyAiLiIgKyBvLl9fbmFtZV9fCgogICAgcmV0dXJuIFtmdWxsbmFtZShvKSBmb3IgbyBpbiBjbHMuZ2V0X2FsbF9zdWJjbGFzc2VzKCldCpR9lCiMHUJlYW1QbHVnaW4uZ2V0X2FsbF9zdWJjbGFzc2VzlGpWMQEASyFLKIeUjB9CZWFtUGx1Z2luLmdldF9hbGxfcGx1Z2luX3BhdGhzlGpWMQEASypLMIeUjApCZWFtUGx1Z2lulGpdMQEASx5LMIeUdX2UKIwKQmVhbVBsdWdpbpRqiAMAAIwdQmVhbVBsdWdpbi5nZXRfYWxsX3N1YmNsYXNzZXOUaogDAACMH0JlYW1QbHVnaW4uZ2V0X2FsbF9wbHVnaW5fcGF0aHOUaogDAAB1jBhhcGFjaGVfYmVhbS51dGlscy5wbHVnaW6UdJSMG2FwYWNoZV9iZWFtLnV0aWxzLnByb2Nlc3Nlc5QoWBoOAAAjCiMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgojIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKCiIiIkNyb3NzLXBsYXRmb3JtIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgc3VicHJvY2Vzc2VzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgcGxhdGZvcm0KaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IHRyYWNlYmFjawoKIyBPbiBXaW5kb3dzLCB3ZSBuZWVkIHRvIHVzZSBzaGVsbD1UcnVlIHdoZW4gY3JlYXRpbmcgc3VicHJvY2Vzc2VzIGZvciBiaW5hcnkKIyBwYXRocyB0byBiZSByZXNvbHZlZCBjb3JyZWN0bHkuCmZvcmNlX3NoZWxsID0gcGxhdGZvcm0uc3lzdGVtKCkgPT0gJ1dpbmRvd3MnCgojIFdlIG1pbWljIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBzdWJwcm9jZXNzIG1vZHVsZS4KUElQRSA9IHN1YnByb2Nlc3MuUElQRQpTVERPVVQgPSBzdWJwcm9jZXNzLlNURE9VVApDYWxsZWRQcm9jZXNzRXJyb3IgPSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcgoKCmRlZiBjYWxsKCphcmdzLCAqKmt3YXJncyk6CiAgaWYgZm9yY2Vfc2hlbGw6CiAgICBrd2FyZ3NbJ3NoZWxsJ10gPSBUcnVlCiAgdHJ5OgogICAgb3V0ID0gc3VicHJvY2Vzcy5jYWxsKCphcmdzLCAqKmt3YXJncykKICBleGNlcHQgT1NFcnJvcjoKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiRXhlY3V0YWJsZSB7fSBub3QgZm91bmQiLmZvcm1hdChhcmdzWzBdKSkKICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXJyb3I6CiAgICBpZiBpc2luc3RhbmNlKGFyZ3MsIHR1cGxlKSBhbmQgKGFyZ3NbMF1bMl0gPT0gInBpcCIpOgogICAgICByYWlzZSBSdW50aW1lRXJyb3IoIFwKICAgICAgICAiRnVsbCB0cmFjZWJhY2s6IHt9XG4gUGlwIGluc3RhbGwgZmFpbGVkIGZvciBwYWNrYWdlOiB7fSBcCiAgICAgICAgXG4gT3V0cHV0IGZyb20gZXhlY3V0aW9uIG9mIHN1YnByb2Nlc3M6IHt9IiBcCiAgICAgICAgLmZvcm1hdCh0cmFjZWJhY2suZm9ybWF0X2V4YygpLCBhcmdzWzBdWzZdLCBlcnJvci4gb3V0cHV0KSkKICAgIGVsc2U6CiAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiRnVsbCB0cmFjZToge31cCiAgICAgICAgIFxuIE91dHB1dCBvZiB0aGUgZmFpbGVkIGNoaWxkIHByb2Nlc3M6IHt9ICIgXAogICAgICAgIC5mb3JtYXQodHJhY2ViYWNrLmZvcm1hdF9leGMoKSwgZXJyb3Iub3V0cHV0KSkKICByZXR1cm4gb3V0CgoKZGVmIGNoZWNrX2NhbGwoKmFyZ3MsICoqa3dhcmdzKToKICBpZiBmb3JjZV9zaGVsbDoKICAgIGt3YXJnc1snc2hlbGwnXSA9IFRydWUKICB0cnk6CiAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoKmFyZ3MsICoqa3dhcmdzKQogIGV4Y2VwdCBPU0Vycm9yOgogICAgcmFpc2UgUnVudGltZUVycm9yKCJFeGVjdXRhYmxlIHt9IG5vdCBmb3VuZCIuZm9ybWF0KGFyZ3NbMF0pKQogIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlcnJvcjoKICAgIGlmIGlzaW5zdGFuY2UoYXJncywgdHVwbGUpIGFuZCAoYXJnc1swXVsyXSA9PSAicGlwIik6CiAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciggXAogICAgICAgICJGdWxsIHRyYWNlYmFjazoge30gXG4gUGlwIGluc3RhbGwgZmFpbGVkIGZvciBwYWNrYWdlOiB7fSBcCiAgICAgICAgXG4gT3V0cHV0IGZyb20gZXhlY3V0aW9uIG9mIHN1YnByb2Nlc3M6IHt9IiBcCiAgICAgICAgLmZvcm1hdCh0cmFjZWJhY2suZm9ybWF0X2V4YygpLCBhcmdzWzBdWzZdLCBlcnJvci5vdXRwdXQpKQogICAgZWxzZToKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJGdWxsIHRyYWNlOiB7fSBcCiAgICAgICAgXG4gT3V0cHV0IG9mIHRoZSBmYWlsZWQgY2hpbGQgcHJvY2Vzczoge30iIFwKICAgICAgICAuZm9ybWF0KHRyYWNlYmFjay5mb3JtYXRfZXhjKCksIGVycm9yLm91dHB1dCkpCiAgcmV0dXJuIG91dAoKCmRlZiBjaGVja19vdXRwdXQoKmFyZ3MsICoqa3dhcmdzKToKICBpZiBmb3JjZV9zaGVsbDoKICAgIGt3YXJnc1snc2hlbGwnXSA9IFRydWUKICB0cnk6CiAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgqYXJncywgKiprd2FyZ3MpCiAgZXhjZXB0IE9TRXJyb3I6CiAgICByYWlzZSBSdW50aW1lRXJyb3IoIkV4ZWN1dGFibGUge30gbm90IGZvdW5kIi5mb3JtYXQoYXJnc1swXSkpCiAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGVycm9yOgogICAgaWYgaXNpbnN0YW5jZShhcmdzLCB0dXBsZSkgYW5kIChhcmdzWzBdWzJdID09ICJwaXAiKToKICAgICAgcmFpc2UgUnVudGltZUVycm9yKCBcCiAgICAgICAgIkZ1bGwgdHJhY2ViYWNrOiB7fSBcbiBQaXAgaW5zdGFsbCBmYWlsZWQgZm9yIHBhY2thZ2U6IHt9IFwKICAgICAgICBcbiBPdXRwdXQgZnJvbSBleGVjdXRpb24gb2Ygc3VicHJvY2Vzczoge30iIFwKICAgICAgICAuZm9ybWF0KHRyYWNlYmFjay5mb3JtYXRfZXhjKCksIGFyZ3NbMF1bNl0sIGVycm9yLm91dHB1dCkpCiAgICBlbHNlOgogICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkZ1bGwgdHJhY2U6IHt9LCBcCiAgICAgICAgIG91dHB1dCBvZiB0aGUgZmFpbGVkIGNoaWxkIHByb2Nlc3Mge30gIlwKICAgICAgICAuZm9ybWF0KHRyYWNlYmFjay5mb3JtYXRfZXhjKCksIGVycm9yLm91dHB1dCkpCiAgcmV0dXJuIG91dAoKCmRlZiBQb3BlbigqYXJncywgKiprd2FyZ3MpOgogIGlmIGZvcmNlX3NoZWxsOgogICAga3dhcmdzWydzaGVsbCddID0gVHJ1ZQogIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKCphcmdzLCAqKmt3YXJncykKlH2UKIwEY2FsbJRqVjEBAEspSzqHlIwKY2hlY2tfY2FsbJRqVjEBAEs9S06HlIwMY2hlY2tfb3V0cHV0lGpWMQEAS1FLYoeUjAVQb3BlbpRqVjEBAEtlS2iHlHV9lCiMBGNhbGyUangDAACMCmNoZWNrX2NhbGyUangDAACMDGNoZWNrX291dHB1dJRqeAMAAIwFUG9wZW6UangDAAB1jBthcGFjaGVfYmVhbS51dGlscy5wcm9jZXNzZXOUdJSMGmFwYWNoZV9iZWFtLnV0aWxzLnByb2ZpbGVylChYlRYAACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiQSBwcm9maWxlciBjb250ZXh0IG1hbmFnZXIgYmFzZWQgb24gY1Byb2ZpbGUuUHJvZmlsZSBvYmplY3RzLgoKRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgoiIiIKCiMgcHl0eXBlOiBza2lwLWZpbGUKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CgppbXBvcnQgY1Byb2ZpbGUgICMgcHlsaW50OiBkaXNhYmxlPWJhZC1weXRob24zLWltcG9ydAppbXBvcnQgaW8KaW1wb3J0IGxvZ2dpbmcKaW1wb3J0IG9zCmltcG9ydCBwc3RhdHMKaW1wb3J0IHJhbmRvbQppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHRpbWUKaW1wb3J0IHdhcm5pbmdzCmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIHRocmVhZGluZyBpbXBvcnQgVGltZXIKZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlCmZyb20gdHlwaW5nIGltcG9ydCBPcHRpb25hbAoKZnJvbSBhcGFjaGVfYmVhbS5pbyBpbXBvcnQgZmlsZXN5c3RlbXMKCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBQcm9maWxlKG9iamVjdCk6CiAgIiIiY1Byb2ZpbGUgd3JhcHBlciBjb250ZXh0IGZvciBzYXZpbmcgYW5kIGxvZ2dpbmcgcHJvZmlsZXIgcmVzdWx0cy4iIiIKCiAgU09SVEJZID0gJ2N1bXVsYXRpdmUnCgogIGRlZiBfX2luaXRfXygKICAgICAgc2VsZiwKICAgICAgcHJvZmlsZV9pZCwKICAgICAgcHJvZmlsZV9sb2NhdGlvbj1Ob25lLAogICAgICBsb2dfcmVzdWx0cz1GYWxzZSwKICAgICAgZmlsZV9jb3B5X2ZuPU5vbmUsCiAgICAgIHRpbWVfcHJlZml4PSclWS0lbS0lZF8lSF8lTV8lUy0nKToKICAgIHNlbGYuc3RhdHMgPSBOb25lCiAgICBzZWxmLnByb2ZpbGVfaWQgPSBzdHIocHJvZmlsZV9pZCkKICAgIHNlbGYucHJvZmlsZV9sb2NhdGlvbiA9IHByb2ZpbGVfbG9jYXRpb24KICAgIHNlbGYubG9nX3Jlc3VsdHMgPSBsb2dfcmVzdWx0cwogICAgc2VsZi5maWxlX2NvcHlfZm4gPSBmaWxlX2NvcHlfZm4gb3Igc2VsZi5kZWZhdWx0X2ZpbGVfY29weV9mbgogICAgc2VsZi50aW1lX3ByZWZpeCA9IHRpbWVfcHJlZml4CiAgICBzZWxmLnByb2ZpbGVfb3V0cHV0ID0gTm9uZQoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgX0xPR0dFUi5pbmZvKCdTdGFydCBwcm9maWxpbmc6ICVzJywgc2VsZi5wcm9maWxlX2lkKQogICAgc2VsZi5wcm9maWxlID0gY1Byb2ZpbGUuUHJvZmlsZSgpCiAgICBzZWxmLnByb2ZpbGUuZW5hYmxlKCkKICAgIHJldHVybiBzZWxmCgogIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CiAgICBzZWxmLnByb2ZpbGUuZGlzYWJsZSgpCiAgICBfTE9HR0VSLmluZm8oJ1N0b3AgcHJvZmlsaW5nOiAlcycsIHNlbGYucHJvZmlsZV9pZCkKCiAgICBpZiBzZWxmLnByb2ZpbGVfbG9jYXRpb246CiAgICAgIGR1bXBfbG9jYXRpb24gPSBvcy5wYXRoLmpvaW4oCiAgICAgICAgICBzZWxmLnByb2ZpbGVfbG9jYXRpb24sCiAgICAgICAgICB0aW1lLnN0cmZ0aW1lKHNlbGYudGltZV9wcmVmaXggKyBzZWxmLnByb2ZpbGVfaWQpKQogICAgICBmZCwgZmlsZW5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKICAgICAgdHJ5OgogICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgIHNlbGYucHJvZmlsZS5kdW1wX3N0YXRzKGZpbGVuYW1lKQogICAgICAgIF9MT0dHRVIuaW5mbygnQ29weWluZyBwcm9maWxlciBkYXRhIHRvOiBbJXNdJywgZHVtcF9sb2NhdGlvbikKICAgICAgICBzZWxmLmZpbGVfY29weV9mbihmaWxlbmFtZSwgZHVtcF9sb2NhdGlvbikKICAgICAgZmluYWxseToKICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCiAgICAgIHNlbGYucHJvZmlsZV9vdXRwdXQgPSBkdW1wX2xvY2F0aW9uCgogICAgaWYgc2VsZi5sb2dfcmVzdWx0czoKICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKICAgICAgc2VsZi5zdGF0cyA9IHBzdGF0cy5TdGF0cygKICAgICAgICAgIHNlbGYucHJvZmlsZSwgc3RyZWFtPXMpLnNvcnRfc3RhdHMoUHJvZmlsZS5TT1JUQlkpCiAgICAgIHNlbGYuc3RhdHMucHJpbnRfc3RhdHMoKQogICAgICBfTE9HR0VSLmluZm8oJ1Byb2ZpbGVyIGRhdGE6IFslc10nLCBzLmdldHZhbHVlKCkpCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZGVmYXVsdF9maWxlX2NvcHlfZm4oc3JjLCBkZXN0KToKICAgIGRlc3RfaGFuZGxlID0gZmlsZXN5c3RlbXMuRmlsZVN5c3RlbXMuY3JlYXRlKGRlc3QgKyAnLnRtcCcpCiAgICB0cnk6CiAgICAgIHdpdGggb3BlbihzcmMsICdyYicpIGFzIHNyY19oYW5kbGU6CiAgICAgICAgZGVzdF9oYW5kbGUud3JpdGUoc3JjX2hhbmRsZS5yZWFkKCkpCiAgICBmaW5hbGx5OgogICAgICBkZXN0X2hhbmRsZS5jbG9zZSgpCiAgICBmaWxlc3lzdGVtcy5GaWxlU3lzdGVtcy5yZW5hbWUoW2Rlc3QgKyAnLnRtcCddLCBbZGVzdF0pCgogIEBzdGF0aWNtZXRob2QKICBkZWYgZmFjdG9yeV9mcm9tX29wdGlvbnMob3B0aW9ucyk6CiAgICAjIHR5cGU6ICguLi4pIC0+IE9wdGlvbmFsW0NhbGxhYmxlWy4uLiwgUHJvZmlsZV1dCiAgICBpZiBvcHRpb25zLnByb2ZpbGVfY3B1OgoKICAgICAgZGVmIGNyZWF0ZV9wcm9maWxlcihwcm9maWxlX2lkLCAqKmt3YXJncyk6CiAgICAgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgb3B0aW9ucy5wcm9maWxlX3NhbXBsZV9yYXRlOgogICAgICAgICAgcmV0dXJuIFByb2ZpbGUocHJvZmlsZV9pZCwgb3B0aW9ucy5wcm9maWxlX2xvY2F0aW9uLCAqKmt3YXJncykKCiAgICAgIHJldHVybiBjcmVhdGVfcHJvZmlsZXIKICAgIHJldHVybiBOb25lCgoKY2xhc3MgTWVtb3J5UmVwb3J0ZXIob2JqZWN0KToKICAiIiJBIG1lbW9yeSByZXBvcnRlciB0aGF0IHJlcG9ydHMgdGhlIG1lbW9yeSB1c2FnZSBhbmQgaGVhcCBwcm9maWxlLgogIFVzYWdlOjo6CgogICAgbXIgPSBNZW1vcnlSZXBvcnRlcihpbnRlcnZhbF9zZWNvbmQ9MzAuMCkKICAgIG1yLnN0YXJ0KCkKICAgIHdoaWxlIC4uLgogICAgICA8ZG8gc29tZXRoaW5nPgogICAgICAjIHRoaXMgd2lsbCByZXBvcnQgY29udGludW91c2x5IHdpdGggMzAgc2Vjb25kcyBiZXR3ZWVuIHJlcG9ydHMuCiAgICBtci5zdG9wKCkKCiAgTk9URTogQSByZXBvcnRlciB3aXRoIHN0YXJ0KCkgc2hvdWxkIGFsd2F5cyBzdG9wKCksIG9yIHRoZSBwYXJlbnQgcHJvY2VzcyBjYW4KICBuZXZlciBmaW5pc2guCgogIE9yIHNpbXBseSB0aGUgZm9sbG93aW5nIHdoaWNoIGRvZXMgc3RhcigpIGFuZCBzdG9wKCk6CiAgICB3aXRoIE1lbW9yeVJlcG9ydGVyKGludGVydmFsX3NlY29uZD0xMDApOgogICAgICB3aGlsZSAuLi4KICAgICAgICA8ZG8gc29tZSB0aGluZz4KCiAgQWxzbyBpdCBjb3VsZCByZXBvcnQgb24gZGVtYW5kIHdpdGhvdXQgY29udGludW91cyByZXBvcnRpbmcuOjoKCiAgICBtciA9IE1lbW9yeVJlcG9ydGVyKCkgICMgZGVmYXVsdCBpbnRlcnZhbCA2MHMgYnV0IG5vdCBzdGFydGVkLgogICAgPGRvIHNvbWV0aGluZz4KICAgIG1yLnJlcG9ydF9vbmNlKCkKICAiIiIKICBkZWYgX19pbml0X18oc2VsZiwgaW50ZXJ2YWxfc2Vjb25kPTYwLjApOgogICAgIyBndXBweSBtaWdodCBub3QgaGF2ZSBpbnN0YWxsZWQuIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9ndXBweS8wLjEuMTAKICAgICMgVGhlIHJlcG9ydGVyIGNhbiBiZSBzZXQgdXAgb25seSB3aGVuIGd1cHB5IGlzIGluc3RhbGxlZCAoYW5kIGd1cHB5IGNhbm5vdAogICAgIyBiZSBhZGRlZCB0byB0aGUgcmVxdWlyZWQgcGFja2FnZXMgaW4gc2V0dXAucHksIHNpbmNlIGl0J3Mgbm90IGF2YWlsYWJsZQogICAgIyBpbiBhbGwgcGxhdGZvcm1zKS4KICAgIHRyeToKICAgICAgZnJvbSBndXBweSBpbXBvcnQgaHB5ICAjIHB5bGludDogZGlzYWJsZT1pbXBvcnQtZXJyb3IKICAgICAgc2VsZi5faHB5ID0gaHB5CiAgICAgIHNlbGYuX2ludGVydmFsX3NlY29uZCA9IGludGVydmFsX3NlY29uZAogICAgICBzZWxmLl90aW1lciA9IE5vbmUKICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgd2FybmluZ3Mud2FybignZ3VwcHkgaXMgbm90IGluc3RhbGxlZDsgTWVtb3J5UmVwb3J0ZXIgbm90IGF2YWlsYWJsZS4nKQogICAgICBzZWxmLl9ocHkgPSBOb25lCiAgICBzZWxmLl9lbmFibGVkID0gRmFsc2UKCiAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgIHNlbGYuc3RhcnQoKQogICAgcmV0dXJuIHNlbGYKCiAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKICAgIHNlbGYuc3RvcCgpCgogIGRlZiBzdGFydChzZWxmKToKICAgIGlmIHNlbGYuX2VuYWJsZWQgb3Igbm90IHNlbGYuX2hweToKICAgICAgcmV0dXJuCiAgICBzZWxmLl9lbmFibGVkID0gVHJ1ZQoKICAgIGRlZiByZXBvcnRfd2l0aF9pbnRlcnZhbCgpOgogICAgICBpZiBub3Qgc2VsZi5fZW5hYmxlZDoKICAgICAgICByZXR1cm4KICAgICAgc2VsZi5yZXBvcnRfb25jZSgpCiAgICAgIHNlbGYuX3RpbWVyID0gVGltZXIoc2VsZi5faW50ZXJ2YWxfc2Vjb25kLCByZXBvcnRfd2l0aF9pbnRlcnZhbCkKICAgICAgc2VsZi5fdGltZXIuc3RhcnQoKQoKICAgIHNlbGYuX3RpbWVyID0gVGltZXIoc2VsZi5faW50ZXJ2YWxfc2Vjb25kLCByZXBvcnRfd2l0aF9pbnRlcnZhbCkKICAgIHNlbGYuX3RpbWVyLnN0YXJ0KCkKCiAgZGVmIHN0b3Aoc2VsZik6CiAgICBpZiBub3Qgc2VsZi5fZW5hYmxlZDoKICAgICAgcmV0dXJuCiAgICBzZWxmLl90aW1lci5jYW5jZWwoKQogICAgc2VsZi5fZW5hYmxlZCA9IEZhbHNlCgogIGRlZiByZXBvcnRfb25jZShzZWxmKToKICAgIGlmIG5vdCBzZWxmLl9ocHk6CiAgICAgIHJldHVybgogICAgcmVwb3J0X3N0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgaGVhcF9wcm9maWxlID0gc2VsZi5faHB5KCkuaGVhcCgpCiAgICBfTE9HR0VSLmluZm8oCiAgICAgICAgJyoqKiBNZW1vcnlSZXBvcnQgSGVhcDpcbiAlc1xuIE1lbW9yeVJlcG9ydCB0b29rICUuMWYgc2Vjb25kcycsCiAgICAgICAgaGVhcF9wcm9maWxlLAogICAgICAgIHRpbWUudGltZSgpIC0gcmVwb3J0X3N0YXJ0X3RpbWUpCpR9lCiMEFByb2ZpbGUuX19pbml0X1+UalYxAQBLM0tAh5SMEVByb2ZpbGUuX19lbnRlcl9flGpWMQEAS0JLRoeUjBBQcm9maWxlLl9fZXhpdF9flGpWMQEAS0hLX4eUjBxQcm9maWxlLmRlZmF1bHRfZmlsZV9jb3B5X2ZulGpWMQEAS2FLaYeUjCxQcm9maWxlLmZhY3RvcnlfZnJvbV9vcHRpb25zLmNyZWF0ZV9wcm9maWxlcpRqVjEBAEtwS3KHlIwcUHJvZmlsZS5mYWN0b3J5X2Zyb21fb3B0aW9uc5RqVjEBAEtrS3WHlIwHUHJvZmlsZZRqXTEBAEsuS3WHlIwXTWVtb3J5UmVwb3J0ZXIuX19pbml0X1+UalYxAQBLkUueh5SMGE1lbW9yeVJlcG9ydGVyLl9fZW50ZXJfX5RqVjEBAEugS6KHlIwXTWVtb3J5UmVwb3J0ZXIuX19leGl0X1+UalYxAQBLpEulh5SMFE1lbW9yeVJlcG9ydGVyLnN0YXJ0lGpWMQEAS6dLtIeUjBNNZW1vcnlSZXBvcnRlci5zdG9wlGpWMQEAS7ZLuoeUjBpNZW1vcnlSZXBvcnRlci5yZXBvcnRfb25jZZRqVjEBAEu8S8SHlIwOTWVtb3J5UmVwb3J0ZXKUal0xAQBLeEvEh5R1fZQojAdQcm9maWxllGpqAwAAjBxQcm9maWxlLmRlZmF1bHRfZmlsZV9jb3B5X2ZulGpqAwAAjBxQcm9maWxlLmZhY3RvcnlfZnJvbV9vcHRpb25zlGpqAwAAjA5NZW1vcnlSZXBvcnRlcpRqagMAAIwUTWVtb3J5UmVwb3J0ZXIuc3RhcnSUamoDAACME01lbW9yeVJlcG9ydGVyLnN0b3CUamoDAACMGk1lbW9yeVJlcG9ydGVyLnJlcG9ydF9vbmNllGpqAwAAdYwaYXBhY2hlX2JlYW0udXRpbHMucHJvZmlsZXKUdJSMHWFwYWNoZV9iZWFtLnV0aWxzLnByb3RvX3V0aWxzlChYFw0AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIiIiRm9yIGludGVybmFsIHVzZSBvbmx5OyBubyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiIiIgoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGUKZnJvbSB0eXBpbmcgaW1wb3J0IFR5cGVWYXIKZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uCmZyb20gdHlwaW5nIGltcG9ydCBvdmVybG9hZAoKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IGFueV9wYjIKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IG1lc3NhZ2UKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHN0cnVjdF9wYjIKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHRpbWVzdGFtcF9wYjIKCk1lc3NhZ2VUID0gVHlwZVZhcignTWVzc2FnZVQnLCBib3VuZD1tZXNzYWdlLk1lc3NhZ2UpCgoKQG92ZXJsb2FkCmRlZiBwYWNrX0FueShtc2cpOgogICMgdHlwZTogKG1lc3NhZ2UuTWVzc2FnZSkgLT4gYW55X3BiMi5BbnkKICBwYXNzCgoKQG92ZXJsb2FkCmRlZiBwYWNrX0FueShtc2cpOgogICMgdHlwZTogKE5vbmUpIC0+IE5vbmUKICBwYXNzCgoKZGVmIHBhY2tfQW55KG1zZyk6CiAgIiIiQ3JlYXRlcyBhIHByb3RvYnVmIEFueSB3aXRoIG1zZyBhcyBpdHMgY29udGVudC4KCiAgUmV0dXJucyBOb25lIGlmIG1zZyBpcyBOb25lLgogICIiIgogIGlmIG1zZyBpcyBOb25lOgogICAgcmV0dXJuIE5vbmUKCiAgcmVzdWx0ID0gYW55X3BiMi5BbnkoKQogIHJlc3VsdC5QYWNrKG1zZykKICByZXR1cm4gcmVzdWx0CgoKQG92ZXJsb2FkCmRlZiB1bnBhY2tfQW55KGFueV9tc2csIG1zZ19jbGFzcyk6CiAgIyB0eXBlOiAoYW55X3BiMi5BbnksIFR5cGVbTWVzc2FnZVRdKSAtPiBNZXNzYWdlVAogIHBhc3MKCgpAb3ZlcmxvYWQKZGVmIHVucGFja19BbnkoYW55X21zZywgbXNnX2NsYXNzKToKICAjIHR5cGU6IChhbnlfcGIyLkFueSwgTm9uZSkgLT4gTm9uZQogIHBhc3MKCgpkZWYgdW5wYWNrX0FueShhbnlfbXNnLCBtc2dfY2xhc3MpOgogICIiIlVucGFja3MgYW55X21zZyBpbnRvIG1zZ19jbGFzcy4KCiAgUmV0dXJucyBOb25lIGlmIG1zZ19jbGFzcyBpcyBOb25lLgogICIiIgogIGlmIG1zZ19jbGFzcyBpcyBOb25lOgogICAgcmV0dXJuIE5vbmUKICBtc2cgPSBtc2dfY2xhc3MoKQogIGFueV9tc2cuVW5wYWNrKG1zZykKICByZXR1cm4gbXNnCgoKQG92ZXJsb2FkCmRlZiBwYXJzZV9CeXRlcyhzZXJpYWxpemVkX2J5dGVzLCBtc2dfY2xhc3MpOgogICMgdHlwZTogKGJ5dGVzLCBUeXBlW01lc3NhZ2VUXSkgLT4gTWVzc2FnZVQKICBwYXNzCgoKQG92ZXJsb2FkCmRlZiBwYXJzZV9CeXRlcyhzZXJpYWxpemVkX2J5dGVzLCBtc2dfY2xhc3MpOgogICMgdHlwZTogKGJ5dGVzLCBVbmlvbltUeXBlW2J5dGVzXSwgTm9uZV0pIC0+IGJ5dGVzCiAgcGFzcwoKCmRlZiBwYXJzZV9CeXRlcyhzZXJpYWxpemVkX2J5dGVzLCBtc2dfY2xhc3MpOgogICIiIlBhcnNlcyB0aGUgU3RyaW5nIG9mIGJ5dGVzIGludG8gbXNnX2NsYXNzLgoKICBSZXR1cm5zIHRoZSBpbnB1dCBieXRlcyBpZiBtc2dfY2xhc3MgaXMgTm9uZS4iIiIKICBpZiBtc2dfY2xhc3MgaXMgTm9uZSBvciBtc2dfY2xhc3MgaXMgYnl0ZXM6CiAgICByZXR1cm4gc2VyaWFsaXplZF9ieXRlcwogIG1zZyA9IG1zZ19jbGFzcygpCiAgbXNnLlBhcnNlRnJvbVN0cmluZyhzZXJpYWxpemVkX2J5dGVzKQogIHJldHVybiBtc2cKCgpkZWYgcGFja19TdHJ1Y3QoKiprd2FyZ3MpOgogICMgdHlwZTogKC4uLikgLT4gc3RydWN0X3BiMi5TdHJ1Y3QKCiAgIiIiUmV0dXJucyBhIHN0cnVjdCBjb250YWluaW5nIHRoZSB2YWx1ZXMgaW5kaWNhdGVkIGJ5IGt3YXJncy4KICAiIiIKICBtc2cgPSBzdHJ1Y3RfcGIyLlN0cnVjdCgpCiAgZm9yIGtleSwgdmFsdWUgaW4ga3dhcmdzLml0ZW1zKCk6CiAgICBtc2dba2V5XSA9IHZhbHVlICAjIHB5bGludDogZGlzYWJsZT11bnN1YnNjcmlwdGFibGUtb2JqZWN0LCB1bnN1cHBvcnRlZC1hc3NpZ25tZW50LW9wZXJhdGlvbgogIHJldHVybiBtc2cKCgpkZWYgZnJvbV9taWNyb3MoY2xzLCBtaWNyb3MpOgogIHJlc3VsdCA9IGNscygpCiAgcmVzdWx0LkZyb21NaWNyb3NlY29uZHMobWljcm9zKQogIHJldHVybiByZXN1bHQKCgpkZWYgdG9fVGltZXN0YW1wKHRpbWUpOgogICIiIkNvbnZlcnQgYSBmbG9hdCByZXR1cm5lZCBieSB0aW1lLnRpbWUoKSB0byBhIFRpbWVzdGFtcC4KICAiIiIKICBzZWNvbmRzID0gaW50KHRpbWUpCiAgbmFub3MgPSBpbnQoKHRpbWUgLSBzZWNvbmRzKSAqIDEwKio5KQogIHJldHVybiB0aW1lc3RhbXBfcGIyLlRpbWVzdGFtcChzZWNvbmRzPXNlY29uZHMsIG5hbm9zPW5hbm9zKQoKCmRlZiBmcm9tX1RpbWVzdGFtcCh0aW1lc3RhbXApOgogICIiIkNvbnZlcnQgYSBUaW1lc3RhbXAgdG8gYSBmbG9hdCBleHByZXNzZWQgYXMgc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guCiAgIiIiCiAgcmV0dXJuIHRpbWVzdGFtcC5zZWNvbmRzICsgZmxvYXQodGltZXN0YW1wLm5hbm9zKSAvIDEwKio5CpR9lCiMCHBhY2tfQW55lGpWMQEASzJLPIeUjAp1bnBhY2tfQW55lGpWMQEAS0tLVIeUjAtwYXJzZV9CeXRlc5RqVjEBAEtjS2uHlIwLcGFja19TdHJ1Y3SUalYxAQBLbkt2h5SMC2Zyb21fbWljcm9zlGpWMQEAS3lLfIeUjAx0b19UaW1lc3RhbXCUalYxAQBLf0uEh5SMDmZyb21fVGltZXN0YW1wlGpWMQEAS4dLioeUdX2UKIwIcGFja19BbnmUarwDAACMCnVucGFja19BbnmUarwDAACMC3BhcnNlX0J5dGVzlGq8AwAAjAtwYWNrX1N0cnVjdJRqvAMAAIwLZnJvbV9taWNyb3OUarwDAACMDHRvX1RpbWVzdGFtcJRqvAMAAIwOZnJvbV9UaW1lc3RhbXCUarwDAAB1jB1hcGFjaGVfYmVhbS51dGlscy5wcm90b191dGlsc5R0lIwXYXBhY2hlX2JlYW0udXRpbHMucmV0cnmUKFhFJwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgoiIiJSZXRyeSBkZWNvcmF0b3JzIGZvciBjYWxscyByYWlzaW5nIGV4Y2VwdGlvbnMuCgpGb3IgaW50ZXJuYWwgdXNlIG9ubHk7IG5vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuCgpUaGlzIG1vZHVsZSBpcyB1c2VkIG1vc3RseSB0byBkZWNvcmF0ZSBhbGwgaW50ZWdyYXRpb24gcG9pbnRzIHdoZXJlIHRoZSBjb2RlCm1ha2VzIGNhbGxzIHRvIHJlbW90ZSBzZXJ2aWNlcy4gU2VhcmNoaW5nIHRocm91Z2ggdGhlIGNvZGUgYmFzZSBmb3IgQHJldHJ5CnNob3VsZCBmaW5kIGFsbCBzdWNoIHBsYWNlcy4gRm9yIHRoaXMgcmVhc29uIGV2ZW4gcGxhY2VzIHdoZXJlIHJldHJ5IGlzIG5vdApuZWVkZWQgcmlnaHQgbm93IHVzZSBhIEByZXRyeS5ub19yZXRyaWVzIGRlY29yYXRvci4KIiIiCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IGZ1bmN0b29scwppbXBvcnQgbG9nZ2luZwppbXBvcnQgcmFuZG9tCmltcG9ydCBzeXMKaW1wb3J0IHRpbWUKaW1wb3J0IHRyYWNlYmFjawpmcm9tIGJ1aWx0aW5zIGltcG9ydCBuZXh0CmZyb20gYnVpbHRpbnMgaW1wb3J0IG9iamVjdApmcm9tIGJ1aWx0aW5zIGltcG9ydCByYW5nZQoKZnJvbSBmdXR1cmUudXRpbHMgaW1wb3J0IHJhaXNlX3dpdGhfdHJhY2ViYWNrCgpmcm9tIGFwYWNoZV9iZWFtLmlvLmZpbGVzeXN0ZW0gaW1wb3J0IEJlYW1JT0Vycm9yCgojIFByb3RlY3QgYWdhaW5zdCBlbnZpcm9ubWVudHMgd2hlcmUgYXBpdG9vbHMgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLgojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbgojIFRPRE8oc291cmFiaGJhamFqKTogUmVtb3ZlIHRoZSBHQ1Agc3BlY2lmaWMgZXJyb3IgY29kZSB0byBhIHN1Ym1vZHVsZQp0cnk6CiAgZnJvbSBhcGl0b29scy5iYXNlLnB5LmV4Y2VwdGlvbnMgaW1wb3J0IEh0dHBFcnJvcgpleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKICBIdHRwRXJyb3IgPSBOb25lCgojIFByb3RlY3QgYWdhaW5zdCBlbnZpcm9ubWVudHMgd2hlcmUgYXdzIHRvb2xzIGFyZSBub3QgYXZhaWxhYmxlLgojIHB5bGludDogZGlzYWJsZT13cm9uZy1pbXBvcnQtb3JkZXIsIHdyb25nLWltcG9ydC1wb3NpdGlvbiwgdW5ncm91cGVkLWltcG9ydHMKdHJ5OgogIGZyb20gYXBhY2hlX2JlYW0uaW8uYXdzLmNsaWVudHMuczMubWVzc2FnZXMgaW1wb3J0IFMzQ2xpZW50RXJyb3IKZXhjZXB0IEltcG9ydEVycm9yOgogIFMzQ2xpZW50RXJyb3IgPSBOb25lCiMgcHlsaW50OiBlbmFibGU9d3JvbmctaW1wb3J0LW9yZGVyLCB3cm9uZy1pbXBvcnQtcG9zaXRpb24KCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBQZXJtYW5lbnRFeGNlcHRpb24oRXhjZXB0aW9uKToKICAiIiJCYXNlIGNsYXNzIGZvciBleGNlcHRpb25zIHRoYXQgc2hvdWxkIG5vdCBiZSByZXRyaWVkLiIiIgogIHBhc3MKCgpjbGFzcyBGdXp6ZWRFeHBvbmVudGlhbEludGVydmFscyhvYmplY3QpOgogICIiIkl0ZXJhYmxlIGZvciBpbnRlcnZhbHMgdGhhdCBhcmUgZXhwb25lbnRpYWxseSBzcGFjZWQsIHdpdGggZnV6emluZy4KCiAgT24gaXRlcmF0aW9uLCB5aWVsZHMgcmV0cnkgaW50ZXJ2YWwgbGVuZ3RocywgaW4gc2Vjb25kcy4gRXZlcnkgaXRlcmF0aW9uIG92ZXIKICB0aGlzIGl0ZXJhYmxlIHdpbGwgeWllbGQgZGlmZmVyZW50bHkgZnV6emVkIGludGVydmFsIGxlbmd0aHMsIGFzIGxvbmcgYXMgZnV6egogIGlzIG5vbnplcm8uCgogIEFyZ3M6CiAgICBpbml0aWFsX2RlbGF5X3NlY3M6IFRoZSBkZWxheSBiZWZvcmUgdGhlIGZpcnN0IHJldHJ5LCBpbiBzZWNvbmRzLgogICAgbnVtX3JldHJpZXM6IFRoZSB0b3RhbCBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkuCiAgICBmYWN0b3I6IFRoZSBleHBvbmVudGlhbCBmYWN0b3IgdG8gdXNlIG9uIHN1YnNlcXVlbnQgcmV0cmllcy4KICAgICAgRGVmYXVsdCBpcyAyIChkb3VibGluZykuCiAgICBmdXp6OiBBIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgaW5kaWNhdGluZyB0aGUgZnJhY3Rpb24gb2YgZnV6ei4gRm9yIGEKICAgICAgZ2l2ZW4gZGVsYXkgZCwgdGhlIGZ1enplZCBkZWxheSBpcyByYW5kb21seSBjaG9zZW4gYmV0d2VlbgogICAgICBbKDEgLSBmdXp6KSAqIGQsIGRdLgogICAgbWF4X2RlbGF5X3NlY3M6IE1heGltdW0gZGVsYXkgKGluIHNlY29uZHMpLiBBZnRlciB0aGlzIGxpbWl0IGlzIHJlYWNoZWQsCiAgICAgIGZ1cnRoZXIgdHJpZXMgdXNlIG1heF9kZWxheV9zZWMgaW5zdGVhZCBvZiBleHBvbmVudGlhbGx5IGluY3JlYXNpbmcKICAgICAgdGhlIHRpbWUuIERlZmF1bHRzIHRvIDEgaG91ci4KICAiIiIKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsCiAgICAgIGluaXRpYWxfZGVsYXlfc2VjcywKICAgICAgbnVtX3JldHJpZXMsCiAgICAgIGZhY3Rvcj0yLAogICAgICBmdXp6PTAuNSwKICAgICAgbWF4X2RlbGF5X3NlY3M9NjAgKiA2MCAqIDEpOgogICAgc2VsZi5faW5pdGlhbF9kZWxheV9zZWNzID0gaW5pdGlhbF9kZWxheV9zZWNzCiAgICBpZiBudW1fcmV0cmllcyA+IDEwMDAwOgogICAgICByYWlzZSBWYWx1ZUVycm9yKCdudW1fcmV0cmllcyBwYXJhbWV0ZXIgY2Fubm90IGV4Y2VlZCAxMDAwMC4nKQogICAgc2VsZi5fbnVtX3JldHJpZXMgPSBudW1fcmV0cmllcwogICAgc2VsZi5fZmFjdG9yID0gZmFjdG9yCiAgICBpZiBub3QgMCA8PSBmdXp6IDw9IDE6CiAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Z1enogcGFyYW1ldGVyIGV4cGVjdGVkIHRvIGJlIGluIFswLCAxXSByYW5nZS4nKQogICAgc2VsZi5fZnV6eiA9IGZ1enoKICAgIHNlbGYuX21heF9kZWxheV9zZWNzID0gbWF4X2RlbGF5X3NlY3MKCiAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgY3VycmVudF9kZWxheV9zZWNzID0gbWluKHNlbGYuX21heF9kZWxheV9zZWNzLCBzZWxmLl9pbml0aWFsX2RlbGF5X3NlY3MpCiAgICBmb3IgXyBpbiByYW5nZShzZWxmLl9udW1fcmV0cmllcyk6CiAgICAgIGZ1enpfbXVsdGlwbGllciA9IDEgLSBzZWxmLl9mdXp6ICsgcmFuZG9tLnJhbmRvbSgpICogc2VsZi5fZnV6egogICAgICB5aWVsZCBjdXJyZW50X2RlbGF5X3NlY3MgKiBmdXp6X211bHRpcGxpZXIKICAgICAgY3VycmVudF9kZWxheV9zZWNzID0gbWluKAogICAgICAgICAgc2VsZi5fbWF4X2RlbGF5X3NlY3MsIGN1cnJlbnRfZGVsYXlfc2VjcyAqIHNlbGYuX2ZhY3RvcikKCgpkZWYgcmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXIoZXhjZXB0aW9uKToKICAiIiJGaWx0ZXIgYWxsb3dpbmcgcmV0cmllcyBvbiBzZXJ2ZXIgZXJyb3JzIGFuZCBub24tSHR0cEVycm9ycy4iIiIKICBpZiAoSHR0cEVycm9yIGlzIG5vdCBOb25lKSBhbmQgaXNpbnN0YW5jZShleGNlcHRpb24sIEh0dHBFcnJvcik6CiAgICByZXR1cm4gZXhjZXB0aW9uLnN0YXR1c19jb2RlID49IDUwMAogIGlmIChTM0NsaWVudEVycm9yIGlzIG5vdCBOb25lKSBhbmQgaXNpbnN0YW5jZShleGNlcHRpb24sIFMzQ2xpZW50RXJyb3IpOgogICAgcmV0dXJuIGV4Y2VwdGlvbi5jb2RlID49IDUwMAogIHJldHVybiBub3QgaXNpbnN0YW5jZShleGNlcHRpb24sIFBlcm1hbmVudEV4Y2VwdGlvbikKCgojIFRPRE8oQkVBTS02MjAyKTogRGF0YWZsb3cgcmV0dXJucyA0MDQgZm9yIGpvYiBpZHMgdGhhdCBhY3R1YWxseSBleGlzdC4KIyBSZXRyeSBvbiB0aG9zZSBlcnJvcnMuCmRlZiByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF9ub3Rmb3VuZF9maWx0ZXIoZXhjZXB0aW9uKToKICBpZiBIdHRwRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpOgogICAgaWYgZXhjZXB0aW9uLnN0YXR1c19jb2RlID09IDQwNDogICMgNDA0IE5vdCBGb3VuZAogICAgICByZXR1cm4gVHJ1ZQogIHJldHVybiByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlcihleGNlcHRpb24pCgoKZGVmIHJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKGV4Y2VwdGlvbik6CiAgaWYgSHR0cEVycm9yIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgSHR0cEVycm9yKToKICAgIGlmIGV4Y2VwdGlvbi5zdGF0dXNfY29kZSA9PSA0MDg6ICAjIDQwOCBSZXF1ZXN0IFRpbWVvdXQKICAgICAgcmV0dXJuIFRydWUKICBpZiBTM0NsaWVudEVycm9yIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgUzNDbGllbnRFcnJvcik6CiAgICBpZiBleGNlcHRpb24uY29kZSA9PSA0MDg6ICAjIDQwOCBSZXF1ZXN0IFRpbWVvdXQKICAgICAgcmV0dXJuIFRydWUKICByZXR1cm4gcmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXIoZXhjZXB0aW9uKQoKCmRlZiByZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX3RpbWVvdXRfb3JfcXVvdGFfaXNzdWVzX2ZpbHRlcihleGNlcHRpb24pOgogICIiIlJldHJ5IG9uIHNlcnZlciwgdGltZW91dCBhbmQgNDAzIGVycm9ycy4KCiAgNDAzIGVycm9ycyBjYW4gYmUgYWNjZXNzRGVuaWVkLCBiaWxsaW5nTm90RW5hYmxlZCwgYW5kIGFsc28gcXVvdGFFeGNlZWRlZCwKICByYXRlTGltaXRFeGNlZWRlZC4iIiIKICBpZiBIdHRwRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBIdHRwRXJyb3IpOgogICAgaWYgZXhjZXB0aW9uLnN0YXR1c19jb2RlID09IDQwMzoKICAgICAgcmV0dXJuIFRydWUKICBpZiBTM0NsaWVudEVycm9yIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgUzNDbGllbnRFcnJvcik6CiAgICBpZiBleGNlcHRpb24uY29kZSA9PSA0MDM6CiAgICAgIHJldHVybiBUcnVlCiAgcmV0dXJuIHJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVyKGV4Y2VwdGlvbikKCgpkZWYgcmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXIoZXhjZXB0aW9uKToKICAiIiJGaWx0ZXIgYWxsb3dpbmcgcmV0cmllcyBvbiBCZWFtIElPIGVycm9ycy4iIiIKICByZXR1cm4gaXNpbnN0YW5jZShleGNlcHRpb24sIEJlYW1JT0Vycm9yKQoKClNFUlZFUl9FUlJPUl9PUl9USU1FT1VUX0NPREVTID0gWzQwOCwgNTAwLCA1MDIsIDUwMywgNTA0LCA1OTgsIDU5OV0KCgpjbGFzcyBDbG9jayhvYmplY3QpOgogICIiIkEgc2ltcGxlIGNsb2NrIGltcGxlbWVudGluZyBzbGVlcCgpLiIiIgogIGRlZiBzbGVlcChzZWxmLCB2YWx1ZSk6CiAgICB0aW1lLnNsZWVwKHZhbHVlKQoKCmRlZiBub19yZXRyaWVzKGZ1bik6CiAgIiIiQSByZXRyeSBkZWNvcmF0b3IgZm9yIHBsYWNlcyB3aGVyZSB3ZSBkbyBub3Qgd2FudCByZXRyaWVzLiIiIgogIHJldHVybiB3aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYocmV0cnlfZmlsdGVyPWxhbWJkYSBfOiBGYWxzZSwgY2xvY2s9Tm9uZSkoZnVuKQoKCmRlZiB3aXRoX2V4cG9uZW50aWFsX2JhY2tvZmYoCiAgICBudW1fcmV0cmllcz03LAogICAgaW5pdGlhbF9kZWxheV9zZWNzPTUuMCwKICAgIGxvZ2dlcj1fTE9HR0VSLndhcm5pbmcsCiAgICByZXRyeV9maWx0ZXI9cmV0cnlfb25fc2VydmVyX2Vycm9yc19maWx0ZXIsCiAgICBjbG9jaz1DbG9jaygpLAogICAgZnV6ej1UcnVlLAogICAgZmFjdG9yPTIsCiAgICBtYXhfZGVsYXlfc2Vjcz02MCAqIDYwKToKICAiIiJEZWNvcmF0b3Igd2l0aCBhcmd1bWVudHMgdGhhdCBjb250cm9sIHRoZSByZXRyeSBsb2dpYy4KCiAgQXJnczoKICAgIG51bV9yZXRyaWVzOiBUaGUgdG90YWwgbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5LgogICAgaW5pdGlhbF9kZWxheV9zZWNzOiBUaGUgZGVsYXkgYmVmb3JlIHRoZSBmaXJzdCByZXRyeSwgaW4gc2Vjb25kcy4KICAgIGxvZ2dlcjogQSBjYWxsYWJsZSB1c2VkIHRvIHJlcG9ydCBhbiBleGNlcHRpb24uIE11c3QgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUKICAgICAgYXMgZnVuY3Rpb25zIGluIHRoZSBzdGFuZGFyZCBsb2dnaW5nIG1vZHVsZS4gVGhlIGRlZmF1bHQgaXMKICAgICAgX0xPR0dFUi53YXJuaW5nLgogICAgcmV0cnlfZmlsdGVyOiBBIGNhbGxhYmxlIGdldHRpbmcgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYW5kIHJldHVybmluZyBUcnVlCiAgICAgIGlmIHRoZSByZXRyeSBzaG91bGQgaGFwcGVuLiBGb3IgaW5zdGFuY2Ugd2UgZG8gbm90IHdhbnQgdG8gcmV0cnkgb24KICAgICAgNDA0IEh0dHAgZXJyb3JzIG1vc3Qgb2YgdGhlIHRpbWUuIFRoZSBkZWZhdWx0IHZhbHVlIHdpbGwgcmV0dXJuIHRydWUKICAgICAgZm9yIHNlcnZlciBlcnJvcnMgKEhUVFAgc3RhdHVzIGNvZGUgPj0gNTAwKSBhbmQgbm9uIEh0dHAgZXJyb3JzLgogICAgY2xvY2s6IEEgY2xvY2sgb2JqZWN0IGltcGxlbWVudGluZyBhIHNsZWVwIG1ldGhvZC4gVGhlIGRlZmF1bHQgY2xvY2sgd2lsbAogICAgICB1c2UgdGltZS5zbGVlcCgpLgogICAgZnV6ejogVHJ1ZSBpZiB0aGUgZGVsYXkgc2hvdWxkIGJlIGZ1enplZCAoZGVmYXVsdCkuIER1cmluZyB0ZXN0aW5nIEZhbHNlCiAgICAgIGNhbiBiZSB1c2VkIHNvIHRoYXQgdGhlIGRlbGF5cyBhcmUgbm90IHJhbmRvbWl6ZWQuCiAgICBmYWN0b3I6IFRoZSBleHBvbmVudGlhbCBmYWN0b3IgdG8gdXNlIG9uIHN1YnNlcXVlbnQgcmV0cmllcy4KICAgICAgRGVmYXVsdCBpcyAyIChkb3VibGluZykuCiAgICBtYXhfZGVsYXlfc2VjczogTWF4aW11bSBkZWxheSAoaW4gc2Vjb25kcykuIEFmdGVyIHRoaXMgbGltaXQgaXMgcmVhY2hlZCwKICAgICAgZnVydGhlciB0cmllcyB1c2UgbWF4X2RlbGF5X3NlYyBpbnN0ZWFkIG9mIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZwogICAgICB0aGUgdGltZS4gRGVmYXVsdHMgdG8gMSBob3VyLgoKICBSZXR1cm5zOgogICAgQXMgcGVyIFB5dGhvbiBkZWNvcmF0b3JzIHdpdGggYXJndW1lbnRzIHBhdHRlcm4gcmV0dXJucyBhIGRlY29yYXRvcgogICAgZm9yIHRoZSBmdW5jdGlvbiB3aGljaCBpbiB0dXJuIHdpbGwgcmV0dXJuIHRoZSB3cmFwcGVkIChkZWNvcmF0ZWQpIGZ1bmN0aW9uLgoKICBUaGUgZGVjb3JhdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgb24gY2FsbGFibGVzIHRoYXQgbWFrZSBIVFRQIG9yIFJQQwogIHJlcXVlc3RzIHRoYXQgY2FuIHRlbXBvcmFyaWx5IHRpbWVvdXQgb3IgaGF2ZSB0cmFuc2llbnQgZXJyb3JzLiBGb3IgaW5zdGFuY2UKICB0aGUgbWFrZV9odHRwX3JlcXVlc3QoKSBjYWxsIGJlbG93IHdpbGwgYmUgcmV0cmllZCAxNiB0aW1lcyB3aXRoIGV4cG9uZW50aWFsCiAgYmFja29mZiBhbmQgZnV6emluZyBvZiB0aGUgZGVsYXkgaW50ZXJ2YWwgKGRlZmF1bHQgc2V0dGluZ3MpLgoKICBmcm9tIGFwYWNoZV9iZWFtLnV0aWxzIGltcG9ydCByZXRyeQogICMgLi4uCiAgQHJldHJ5LndpdGhfZXhwb25lbnRpYWxfYmFja29mZigpCiAgbWFrZV9odHRwX3JlcXVlc3QoYXJncykKICAiIiIKICBkZWYgcmVhbF9kZWNvcmF0b3IoZnVuKToKICAgICIiIlRoZSByZWFsIGRlY29yYXRvciB3aG9zZSBwdXJwb3NlIGlzIHRvIHJldHVybiB0aGUgd3JhcHBlZCBmdW5jdGlvbi4iIiIKICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuKQogICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgcmV0cnlfaW50ZXJ2YWxzID0gaXRlcigKICAgICAgICAgIEZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzKAogICAgICAgICAgICAgIGluaXRpYWxfZGVsYXlfc2VjcywKICAgICAgICAgICAgICBudW1fcmV0cmllcywKICAgICAgICAgICAgICBmYWN0b3IsCiAgICAgICAgICAgICAgZnV6ej0wLjUgaWYgZnV6eiBlbHNlIDAsCiAgICAgICAgICAgICAgbWF4X2RlbGF5X3NlY3M9bWF4X2RlbGF5X3NlY3MpKQogICAgICB3aGlsZSBUcnVlOgogICAgICAgIHRyeToKICAgICAgICAgIHJldHVybiBmdW4oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhuOiAgIyBweWxpbnQ6IGRpc2FibGU9YnJvYWQtZXhjZXB0CiAgICAgICAgICBpZiBub3QgcmV0cnlfZmlsdGVyKGV4bik6CiAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAjIEdldCB0aGUgdHJhY2ViYWNrIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiBUaGUKICAgICAgICAgICMgc3lzLmV4Y19pbmZvKCkgZnVuY3Rpb24gcmV0dXJucyBhIHR1cGxlIHdpdGggdGhyZWUgZWxlbWVudHM6CiAgICAgICAgICAjIGV4Y2VwdGlvbiB0eXBlLCBleGNlcHRpb24gdmFsdWUsIGFuZCBleGNlcHRpb24gdHJhY2ViYWNrLgogICAgICAgICAgZXhuX3RyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpWzJdCiAgICAgICAgICB0cnk6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICBzbGVlcF9pbnRlcnZhbCA9IG5leHQocmV0cnlfaW50ZXJ2YWxzKQogICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgICAjIFJlLXJhaXNlIHRoZSBvcmlnaW5hbCBleGNlcHRpb24gc2luY2Ugd2UgZmluaXNoZWQgdGhlIHJldHJpZXMuCiAgICAgICAgICAgICAgcmFpc2Vfd2l0aF90cmFjZWJhY2soZXhuLCBleG5fdHJhY2ViYWNrKQoKICAgICAgICAgICAgbG9nZ2VyKAogICAgICAgICAgICAgICAgJ1JldHJ5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZjogd2FpdGluZyBmb3IgJXMgc2Vjb25kcyBiZWZvcmUgJwogICAgICAgICAgICAgICAgJ3JldHJ5aW5nICVzIGJlY2F1c2Ugd2UgY2F1Z2h0IGV4Y2VwdGlvbjogJXMgJwogICAgICAgICAgICAgICAgJ1RyYWNlYmFjayBmb3IgYWJvdmUgZXhjZXB0aW9uIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJXMnLAogICAgICAgICAgICAgICAgc2xlZXBfaW50ZXJ2YWwsCiAgICAgICAgICAgICAgICBnZXRhdHRyKGZ1biwgJ19fbmFtZV9fJywgc3RyKGZ1bikpLAogICAgICAgICAgICAgICAgJycuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV4bi5fX2NsYXNzX18sIGV4bikpLAogICAgICAgICAgICAgICAgJycuam9pbih0cmFjZWJhY2suZm9ybWF0X3RiKGV4bl90cmFjZWJhY2spKSkKICAgICAgICAgICAgY2xvY2suc2xlZXAoc2xlZXBfaW50ZXJ2YWwpCiAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAjIFRyYWNlYmFjayBvYmplY3RzIGluIGxvY2FscyBjYW4gY2F1c2UgcmVmZXJlbmNlIGN5Y2xlcyB0aGF0IHdpbGwKICAgICAgICAgICAgIyBwcmV2ZW50IGdhcmJhZ2UgY29sbGVjdGlvbi4gQ2xlYXIgaXQgbm93IHNpbmNlIHdlIGRvIG5vdCBuZWVkCiAgICAgICAgICAgICMgaXQgYW55bW9yZS4KICAgICAgICAgICAgZXhuX3RyYWNlYmFjayA9IE5vbmUKCiAgICByZXR1cm4gd3JhcHBlcgoKICByZXR1cm4gcmVhbF9kZWNvcmF0b3IKlH2UKIwSUGVybWFuZW50RXhjZXB0aW9ulGpdMQEAS0FLQ4eUjCNGdXp6ZWRFeHBvbmVudGlhbEludGVydmFscy5fX2luaXRfX5RqVjEBAEtZS2iHlIwjRnV6emVkRXhwb25lbnRpYWxJbnRlcnZhbHMuX19pdGVyX1+UalYxAQBLaktwh5SMGkZ1enplZEV4cG9uZW50aWFsSW50ZXJ2YWxzlGpdMQEAS0ZLcIeUjB1yZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2ZpbHRlcpRqVjEBAEtzS3mHlIwqcmV0cnlfb25fc2VydmVyX2Vycm9yc19hbmRfbm90Zm91bmRfZmlsdGVylGpWMQEAS35LgoeUjClyZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF90aW1lb3V0X2ZpbHRlcpRqVjEBAEuFS4yHlIw1cmV0cnlfb25fc2VydmVyX2Vycm9yc190aW1lb3V0X29yX3F1b3RhX2lzc3Vlc19maWx0ZXKUalYxAQBLj0uah5SMHXJldHJ5X29uX2JlYW1faW9fZXJyb3JfZmlsdGVylGpWMQEAS51Ln4eUjAtDbG9jay5zbGVlcJRqVjEBAEunS6iHlIwFQ2xvY2uUal0xAQBLpUuoh5SMCm5vX3JldHJpZXOUalYxAQBLq0uth5SMGHdpdGhfZXhwb25lbnRpYWxfYmFja29mZpRqVjEBAEuwTQoBh5R1fZQoan6OAABqdAMAAIwaRnV6emVkRXhwb25lbnRpYWxJbnRlcnZhbHOUanQDAACMHXJldHJ5X29uX3NlcnZlcl9lcnJvcnNfZmlsdGVylGp0AwAAjCpyZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX2FuZF9ub3Rmb3VuZF9maWx0ZXKUanQDAACMKXJldHJ5X29uX3NlcnZlcl9lcnJvcnNfYW5kX3RpbWVvdXRfZmlsdGVylGp0AwAAjDVyZXRyeV9vbl9zZXJ2ZXJfZXJyb3JzX3RpbWVvdXRfb3JfcXVvdGFfaXNzdWVzX2ZpbHRlcpRqdAMAAIwdcmV0cnlfb25fYmVhbV9pb19lcnJvcl9maWx0ZXKUanQDAACMBUNsb2NrlGp0AwAAjAtDbG9jay5zbGVlcJRqdAMAAIwKbm9fcmV0cmllc5RqdAMAAIwYd2l0aF9leHBvbmVudGlhbF9iYWNrb2ZmlGp0AwAAdYwXYXBhY2hlX2JlYW0udXRpbHMucmV0cnmUdJSMI2FwYWNoZV9iZWFtLnV0aWxzLnN1YnByb2Nlc3Nfc2VydmVylChYXx4AACMKIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAojIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIwoKIyBweXR5cGU6IHNraXAtZmlsZQoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKCmltcG9ydCBsb2dnaW5nCmltcG9ydCBvcwppbXBvcnQgc2h1dGlsCmltcG9ydCBzaWduYWwKaW1wb3J0IHNvY2tldAppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHRocmVhZGluZwppbXBvcnQgdGltZQoKaW1wb3J0IGdycGMKZnJvbSBmdXR1cmUubW92ZXMudXJsbGliLmVycm9yIGltcG9ydCBVUkxFcnJvcgpmcm9tIGZ1dHVyZS5tb3Zlcy51cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgoKZnJvbSBhcGFjaGVfYmVhbS52ZXJzaW9uIGltcG9ydCBfX3ZlcnNpb25fXyBhcyBiZWFtX3ZlcnNpb24KCl9MT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKCgpjbGFzcyBTdWJwcm9jZXNzU2VydmVyKG9iamVjdCk6CiAgIiIiQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgcnVubmluZyBHUlBDIFNlcnZlcnMgYXMgYW4gZXh0ZXJuYWwgcHJvY2Vzcy4KCiAgVGhpcyBjbGFzcyBhY3RzIGFzIGEgY29udGV4dCB3aGljaCB3aWxsIHN0YXJ0IHVwIGEgc2VydmVyLCBwcm92aWRlcyBhIHN0dWIKICB0byBjb25uZWN0IHRvIGl0LCBhbmQgdGhlbiBzaHV0cyB0aGUgc2VydmVyIGRvd24uICBGb3IgZXhhbXBsZTo6CgogICAgICB3aXRoIFN1YnByb2Nlc3NTZXJ2ZXIoR3JwY1N0dWJDbGFzcywgW2V4ZWN1dGFibGUsIGFyZywgLi4uXSkgYXMgc3R1YjoKICAgICAgICAgIHN0dWIuQ2FsbFNlcnZpY2UoLi4uKQogICIiIgogIGRlZiBfX2luaXRfXyhzZWxmLCBzdHViX2NsYXNzLCBjbWQsIHBvcnQ9Tm9uZSk6CiAgICAiIiJDcmVhdGVzIHRoZSBzZXJ2ZXIgb2JqZWN0LgoKICAgIDpwYXJhbSBzdHViX2NsYXNzOiB0aGUgYXV0by1nZW5lcmF0ZWQgR1JQQyBjbGllbnQgc3R1YiBjbGFzcyB1c2VkIGZvcgogICAgICAgIGNvbm5lY3RpbmcgdG8gdGhlIEdSUEMgc2VydmljZQogICAgOnBhcmFtIGNtZDogY29tbWFuZCAoaW5jbHVkaW5nIGFyZ3VtZW50cykgZm9yIHN0YXJ0aW5nIHVwIHRoZSBzZXJ2ZXIsCiAgICAgICAgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gYHN1YnByb2Nlc3MuUE9wZW5gLgogICAgOnBhcmFtIHBvcnQ6IChvcHRpb25hbCkgdGhlIHBvcnQgYXQgd2hpY2ggdGhlIHN1YnByb2Nlc3Mgd2lsbCBzZXJ2ZSBpdHMKICAgICAgICBzZXJ2aWNlLiAgSWYgbm90IGdpdmVuLCBvbmUgd2lsbCBiZSByYW5kb21seSBjaG9zZW4gYW5kIHRoZSBzcGVjaWFsCiAgICAgICAgc3RyaW5nICJ7e1BPUlR9fSIgd2lsbCBiZSBzdWJzdGl0dXRlZCBpbiB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwogICAgICAgIHdpdGggdGhlIGNob3NlbiBwb3J0LgogICAgIiIiCiAgICBzZWxmLl9wcm9jZXNzX2xvY2sgPSB0aHJlYWRpbmcuUkxvY2soKQogICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKICAgIHNlbGYuX3N0dWJfY2xhc3MgPSBzdHViX2NsYXNzCiAgICBzZWxmLl9jbWQgPSBbc3RyKGFyZykgZm9yIGFyZyBpbiBjbWRdCiAgICBzZWxmLl9wb3J0ID0gcG9ydAoKICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgcmV0dXJuIHNlbGYuc3RhcnQoKQoKICBkZWYgX19leGl0X18oc2VsZiwgKnVudXNlZF9hcmdzKToKICAgIHNlbGYuc3RvcCgpCgogIGRlZiBzdGFydChzZWxmKToKICAgIHdpdGggc2VsZi5fcHJvY2Vzc19sb2NrOgogICAgICBpZiBzZWxmLl9wcm9jZXNzOgogICAgICAgIHNlbGYuc3RvcCgpCiAgICAgIGlmIHNlbGYuX3BvcnQ6CiAgICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKICAgICAgICBjbWQgPSBzZWxmLl9jbWQKICAgICAgZWxzZToKICAgICAgICBwb3J0LCA9IHBpY2tfcG9ydChOb25lKQogICAgICAgIGNtZCA9IFthcmcucmVwbGFjZSgne3tQT1JUfX0nLCBzdHIocG9ydCkpIGZvciBhcmcgaW4gc2VsZi5fY21kXQogICAgICBlbmRwb2ludCA9ICdsb2NhbGhvc3Q6JXMnICUgcG9ydAogICAgICBfTE9HR0VSLndhcm5pbmcoIlN0YXJ0aW5nIHNlcnZpY2Ugd2l0aCAlcyIsIHN0cihjbWQpLnJlcGxhY2UoIicsIiwgIiciKSkKICAgICAgdHJ5OgogICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCkKICAgICAgICB3YWl0X3NlY3MgPSAuMQogICAgICAgIGNoYW5uZWwgPSBncnBjLmluc2VjdXJlX2NoYW5uZWwoZW5kcG9pbnQpCiAgICAgICAgY2hhbm5lbF9yZWFkeSA9IGdycGMuY2hhbm5lbF9yZWFkeV9mdXR1cmUoY2hhbm5lbCkKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5wb2xsKCkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgIF9MT0dHRVIuZXJyb3IoIlN0YXJ0aW5nIGpvYiBzZXJ2aWNlIHdpdGggJXMiLCBjbWQpCiAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKICAgICAgICAgICAgICAgICdTZXJ2aWNlIGZhaWxlZCB0byBzdGFydCB1cCB3aXRoIGVycm9yICVzJyAlCiAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLnBvbGwoKSkKICAgICAgICAgIHRyeToKICAgICAgICAgICAgY2hhbm5lbF9yZWFkeS5yZXN1bHQodGltZW91dD13YWl0X3NlY3MpCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICBleGNlcHQgKGdycGMuRnV0dXJlVGltZW91dEVycm9yLCBncnBjLl9jaGFubmVsLl9SZW5kZXp2b3VzKToKICAgICAgICAgICAgd2FpdF9zZWNzICo9IDEuMgogICAgICAgICAgICBsb2dnaW5nLmxvZygKICAgICAgICAgICAgICAgIGxvZ2dpbmcuV0FSTklORyBpZiB3YWl0X3NlY3MgPiAxIGVsc2UgbG9nZ2luZy5ERUJVRywKICAgICAgICAgICAgICAgICdXYWl0aW5nIGZvciBncnBjIGNoYW5uZWwgdG8gYmUgcmVhZHkgYXQgJXMuJywKICAgICAgICAgICAgICAgIGVuZHBvaW50KQogICAgICAgIHJldHVybiBzZWxmLl9zdHViX2NsYXNzKGNoYW5uZWwpCiAgICAgIGV4Y2VwdDogICMgcHlsaW50OiBkaXNhYmxlPWJhcmUtZXhjZXB0CiAgICAgICAgX0xPR0dFUi5leGNlcHRpb24oIkVycm9yIGJyaW5naW5nIHVwIHNlcnZpY2UiKQogICAgICAgIHNlbGYuc3RvcCgpCiAgICAgICAgcmFpc2UKCiAgZGVmIHN0b3Aoc2VsZik6CiAgICB3aXRoIHNlbGYuX3Byb2Nlc3NfbG9jazoKICAgICAgaWYgbm90IHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgcmV0dXJuCiAgICAgIGZvciBfIGluIHJhbmdlKDUpOgogICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucG9sbCgpIGlzIG5vdCBOb25lOgogICAgICAgICAgYnJlYWsKICAgICAgICBsb2dnaW5nLmRlYnVnKCJTZW5kaW5nIFNJR0lOVCB0byBqb2Jfc2VydmVyIikKICAgICAgICBzZWxmLl9wcm9jZXNzLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdJTlQpCiAgICAgICAgdGltZS5zbGVlcCgxKQogICAgICBpZiBzZWxmLl9wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgogICAgICAgIHNlbGYuX3Byb2Nlc3Mua2lsbCgpCiAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCgogIGRlZiBsb2NhbF90ZW1wX2RpcihzZWxmLCAqKmt3YXJncyk6CiAgICByZXR1cm4gdGVtcGZpbGUubWtkdGVtcChkaXI9c2VsZi5fbG9jYWxfdGVtcF9yb290LCAqKmt3YXJncykKCgpjbGFzcyBKYXZhSmFyU2VydmVyKFN1YnByb2Nlc3NTZXJ2ZXIpOgoKICBBUEFDSEVfUkVQT1NJVE9SWSA9ICdodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjInCiAgQkVBTV9HUk9VUF9JRCA9ICdvcmcuYXBhY2hlLmJlYW0nCiAgSkFSX0NBQ0hFID0gb3MucGF0aC5leHBhbmR1c2VyKCJ+Ly5hcGFjaGVfYmVhbS9jYWNoZS9qYXJzIikKCiAgZGVmIF9faW5pdF9fKHNlbGYsIHN0dWJfY2xhc3MsIHBhdGhfdG9famFyLCBqYXZhX2FyZ3VtZW50cyk6CiAgICBzdXBlcihKYXZhSmFyU2VydmVyLCBzZWxmKS5fX2luaXRfXygKICAgICAgICBzdHViX2NsYXNzLCBbJ2phdmEnLCAnLWphcicsIHBhdGhfdG9famFyXSArIGxpc3QoamF2YV9hcmd1bWVudHMpKQoKICBAY2xhc3NtZXRob2QKICBkZWYgamFyX25hbWUoY2xzLCBhcnRpZmFjdF9pZCwgdmVyc2lvbiwgY2xhc3NpZmllcj1Ob25lLCBhcHBlbmRpeD1Ob25lKToKICAgIHJldHVybiAnLScuam9pbigKICAgICAgICBmaWx0ZXIoTm9uZSwgW2FydGlmYWN0X2lkLCBhcHBlbmRpeCwgdmVyc2lvbiwgY2xhc3NpZmllcl0pKSArICcuamFyJwoKICBAY2xhc3NtZXRob2QKICBkZWYgcGF0aF90b19tYXZlbl9qYXIoCiAgICAgIGNscywKICAgICAgYXJ0aWZhY3RfaWQsCiAgICAgIGdyb3VwX2lkLAogICAgICB2ZXJzaW9uLAogICAgICByZXBvc2l0b3J5PUFQQUNIRV9SRVBPU0lUT1JZLAogICAgICBjbGFzc2lmaWVyPU5vbmUpOgogICAgcmV0dXJuICcvJy5qb2luKFsKICAgICAgICByZXBvc2l0b3J5LAogICAgICAgIGdyb3VwX2lkLnJlcGxhY2UoJy4nLCAnLycpLAogICAgICAgIGFydGlmYWN0X2lkLAogICAgICAgIHZlcnNpb24sCiAgICAgICAgY2xzLmphcl9uYW1lKGFydGlmYWN0X2lkLCB2ZXJzaW9uLCBjbGFzc2lmaWVyKQogICAgXSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIHBhdGhfdG9fYmVhbV9qYXIoY2xzLCBncmFkbGVfdGFyZ2V0LCBhcHBlbmRpeD1Ob25lKToKICAgIGdyYWRsZV9wYWNrYWdlID0gZ3JhZGxlX3RhcmdldC5zdHJpcCgnOicpWzpncmFkbGVfdGFyZ2V0LnJpbmRleCgnOicpXQogICAgYXJ0aWZhY3RfaWQgPSAnYmVhbS0nICsgZ3JhZGxlX3BhY2thZ2UucmVwbGFjZSgnOicsICctJykKICAgIHByb2plY3Rfcm9vdCA9IG9zLnBhdGguc2VwLmpvaW4oCiAgICAgICAgb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKS5zcGxpdChvcy5wYXRoLnNlcClbOi01XSkKICAgIGxvY2FsX3BhdGggPSBvcy5wYXRoLmpvaW4oCiAgICAgICAgcHJvamVjdF9yb290LAogICAgICAgIGdyYWRsZV9wYWNrYWdlLnJlcGxhY2UoJzonLCBvcy5wYXRoLnNlcCksCiAgICAgICAgJ2J1aWxkJywKICAgICAgICAnbGlicycsCiAgICAgICAgY2xzLmphcl9uYW1lKAogICAgICAgICAgICBhcnRpZmFjdF9pZCwKICAgICAgICAgICAgYmVhbV92ZXJzaW9uLnJlcGxhY2UoJy5kZXYnLCAnJyksCiAgICAgICAgICAgIGNsYXNzaWZpZXI9J1NOQVBTSE9UJywKICAgICAgICAgICAgYXBwZW5kaXg9YXBwZW5kaXgpKQogICAgaWYgb3MucGF0aC5leGlzdHMobG9jYWxfcGF0aCk6CiAgICAgIF9MT0dHRVIuaW5mbygnVXNpbmcgcHJlLWJ1aWx0IHNuYXBzaG90IGF0ICVzJywgbG9jYWxfcGF0aCkKICAgICAgcmV0dXJuIGxvY2FsX3BhdGgKICAgIGVsaWYgJy5kZXYnIGluIGJlYW1fdmVyc2lvbjoKICAgICAgIyBUT0RPOiBBdHRlbXB0IHRvIHVzZSBuaWdodGx5IHNuYXBzaG90cz8KICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgKAogICAgICAgICAgICAgICclcyBub3QgZm91bmQuICcKICAgICAgICAgICAgICAnUGxlYXNlIGJ1aWxkIHRoZSBzZXJ2ZXIgd2l0aCBcbiAgY2QgJXM7IC4vZ3JhZGxldyAlcycpICUKICAgICAgICAgIChsb2NhbF9wYXRoLCBvcy5wYXRoLmFic3BhdGgocHJvamVjdF9yb290KSwgZ3JhZGxlX3RhcmdldCkpCiAgICBlbHNlOgogICAgICByZXR1cm4gY2xzLnBhdGhfdG9fbWF2ZW5famFyKAogICAgICAgICAgYXJ0aWZhY3RfaWQsIGNscy5CRUFNX0dST1VQX0lELCBiZWFtX3ZlcnNpb24sIGNscy5BUEFDSEVfUkVQT1NJVE9SWSkKCiAgQGNsYXNzbWV0aG9kCiAgZGVmIGxvY2FsX2phcihjbHMsIHVybCk6CiAgICAjIFRPRE86IFZlcmlmeSBjaGVja3N1bT8KICAgIGlmIG9zLnBhdGguZXhpc3RzKHVybCk6CiAgICAgIHJldHVybiB1cmwKICAgIGVsc2U6CiAgICAgIF9MT0dHRVIud2FybmluZygnRG93bmxvYWRpbmcgam9iIHNlcnZlciBqYXIgZnJvbSAlcycgJSB1cmwpCiAgICAgIGNhY2hlZF9qYXIgPSBvcy5wYXRoLmpvaW4oY2xzLkpBUl9DQUNIRSwgb3MucGF0aC5iYXNlbmFtZSh1cmwpKQogICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX2phcik6CiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNscy5KQVJfQ0FDSEUpOgogICAgICAgICAgb3MubWFrZWRpcnMoY2xzLkpBUl9DQUNIRSkKICAgICAgICAgICMgVE9ETzogQ2xlYW4gdXAgdGhpcyBjYWNoZSBhY2NvcmRpbmcgdG8gc29tZSBwb2xpY3kuCiAgICAgICAgdHJ5OgogICAgICAgICAgdXJsX3JlYWQgPSB1cmxvcGVuKHVybCkKICAgICAgICAgIHdpdGggb3BlbihjYWNoZWRfamFyICsgJy50bXAnLCAnd2InKSBhcyBqYXJfd3JpdGU6CiAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaih1cmxfcmVhZCwgamFyX3dyaXRlLCBsZW5ndGg9MSA8PCAyMCkKICAgICAgICAgIG9zLnJlbmFtZShjYWNoZWRfamFyICsgJy50bXAnLCBjYWNoZWRfamFyKQogICAgICAgIGV4Y2VwdCBVUkxFcnJvciBhcyBlOgogICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICdVbmFibGUgdG8gZmV0Y2ggcmVtb3RlIGpvYiBzZXJ2ZXIgamFyIGF0ICVzOiAlcycgJSAodXJsLCBlKSkKICAgICAgcmV0dXJuIGNhY2hlZF9qYXIKCgpkZWYgcGlja19wb3J0KCpwb3J0cyk6CiAgIiIiCiAgUmV0dXJucyBhIGxpc3Qgb2YgcG9ydHMsIHNhbWUgbGVuZ3RoIGFzIGlucHV0IHBvcnRzIGxpc3QsIGJ1dCByZXBsYWNlcwogIGFsbCBOb25lIG9yIDAgcG9ydHMgd2l0aCBhIHJhbmRvbSBmcmVlIHBvcnQuCiAgIiIiCiAgc29ja2V0cyA9IFtdCgogIGRlZiBmaW5kX2ZyZWVfcG9ydChwb3J0KToKICAgIGlmIHBvcnQ6CiAgICAgIHJldHVybiBwb3J0CiAgICBlbHNlOgogICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICBzb2NrZXRzLmFwcGVuZChzKQogICAgICBzLmJpbmQoKCdsb2NhbGhvc3QnLCAwKSkKICAgICAgXywgZnJlZV9wb3J0ID0gcy5nZXRzb2NrbmFtZSgpCiAgICAgIHJldHVybiBmcmVlX3BvcnQKCiAgcG9ydHMgPSBsaXN0KG1hcChmaW5kX2ZyZWVfcG9ydCwgcG9ydHMpKQogICMgQ2xvc2Ugc29ja2V0cyBvbmx5IG5vdyB0byBhdm9pZCB0aGUgc2FtZSBwb3J0IHRvIGJlIGNob3NlbiB0d2ljZQogIGZvciBzIGluIHNvY2tldHM6CiAgICBzLmNsb3NlKCkKICByZXR1cm4gcG9ydHMKlH2UKIwZU3VicHJvY2Vzc1NlcnZlci5fX2luaXRfX5RqVjEBAEsyS0KHlIwaU3VicHJvY2Vzc1NlcnZlci5fX2VudGVyX1+UalYxAQBLREtFh5SMGVN1YnByb2Nlc3NTZXJ2ZXIuX19leGl0X1+UalYxAQBLR0tIh5SMFlN1YnByb2Nlc3NTZXJ2ZXIuc3RhcnSUalYxAQBLSktuh5SMFVN1YnByb2Nlc3NTZXJ2ZXIuc3RvcJRqVjEBAEtwS3yHlIwfU3VicHJvY2Vzc1NlcnZlci5sb2NhbF90ZW1wX2RpcpRqVjEBAEt+S3+HlIwQU3VicHJvY2Vzc1NlcnZlcpRqXTEBAEspS3+HlIwWSmF2YUphclNlcnZlci5fX2luaXRfX5RqVjEBAEuIS4qHlIwWSmF2YUphclNlcnZlci5qYXJfbmFtZZRqVjEBAEuMS4+HlIwfSmF2YUphclNlcnZlci5wYXRoX3RvX21hdmVuX2phcpRqVjEBAEuRS5+HlIweSmF2YUphclNlcnZlci5wYXRoX3RvX2JlYW1famFylGpWMQEAS6FLvYeUjBdKYXZhSmFyU2VydmVyLmxvY2FsX2phcpRqVjEBAEu/S9OHlIwNSmF2YUphclNlcnZlcpRqXTEBAEuCS9OHlIwJcGlja19wb3J0lGpWMQEAS9ZL64eUdX2UKIwQU3VicHJvY2Vzc1NlcnZlcpRqfwMAAIwWU3VicHJvY2Vzc1NlcnZlci5zdGFydJRqfwMAAIwVU3VicHJvY2Vzc1NlcnZlci5zdG9wlGp/AwAAjB9TdWJwcm9jZXNzU2VydmVyLmxvY2FsX3RlbXBfZGlylGp/AwAAjA1KYXZhSmFyU2VydmVylGp/AwAAjBZKYXZhSmFyU2VydmVyLmphcl9uYW1llGp/AwAAjB9KYXZhSmFyU2VydmVyLnBhdGhfdG9fbWF2ZW5famFylGp/AwAAjB5KYXZhSmFyU2VydmVyLnBhdGhfdG9fYmVhbV9qYXKUan8DAACMF0phdmFKYXJTZXJ2ZXIubG9jYWxfamFylGp/AwAAjAlwaWNrX3BvcnSUan8DAAB1jCNhcGFjaGVfYmVhbS51dGlscy5zdWJwcm9jZXNzX3NlcnZlcpR0lIwmYXBhY2hlX2JlYW0udXRpbHMudGhyZWFkX3Bvb2xfZXhlY3V0b3KUKFgsFwAAIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIHB5dHlwZTogc2tpcC1maWxlCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAoKaW1wb3J0IHN5cwppbXBvcnQgdGhyZWFkaW5nCmltcG9ydCB3ZWFrcmVmCmZyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBfYmFzZQoKdHJ5OiAgIyBQeXRob24zCiAgaW1wb3J0IHF1ZXVlCmV4Y2VwdCBFeGNlcHRpb246ICAjIFB5dGhvbjIKICBpbXBvcnQgUXVldWUgYXMgcXVldWUgICMgdHlwZTogaWdub3JlW25vLXJlZGVmXQoKCmNsYXNzIF9Xb3JrSXRlbShvYmplY3QpOgogIGRlZiBfX2luaXRfXyhzZWxmLCBmdXR1cmUsIGZuLCBhcmdzLCBrd2FyZ3MpOgogICAgc2VsZi5fZnV0dXJlID0gZnV0dXJlCiAgICBzZWxmLl9mbiA9IGZuCiAgICBzZWxmLl9mbl9hcmdzID0gYXJncwogICAgc2VsZi5fZm5fa3dhcmdzID0ga3dhcmdzCgogIGRlZiBydW4oc2VsZik6CiAgICBpZiBzZWxmLl9mdXR1cmUuc2V0X3J1bm5pbmdfb3Jfbm90aWZ5X2NhbmNlbCgpOgogICAgICAjIElmIHRoZSBmdXR1cmUgd2Fzbid0IGNhbmNlbGxlZCwgdGhlbiBhdHRlbXB0IHRvIGV4ZWN1dGUgaXQuCiAgICAgIHRyeToKICAgICAgICBzZWxmLl9mdXR1cmUuc2V0X3Jlc3VsdChzZWxmLl9mbigqc2VsZi5fZm5fYXJncywgKipzZWxmLl9mbl9rd2FyZ3MpKQogICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CiAgICAgICAgIyBFdmVuIHRob3VnaCBQeXRob24gMiBmdXR1cmVzIGxpYnJhcnkgaGFzICNzZXRfZXhlY3Rpb24oKSwKICAgICAgICAjIHRoZSB3YXkgaXQgZ2VuZXJhdGVzIHRoZSB0cmFjZWJhY2sgZG9lc24ndCBhbGlnbiB3aXRoCiAgICAgICAgIyB0aGUgd2F5IGluIHdoaWNoIFB5dGhvbiAzIGRvZXMgaXQgc28gd2UgcHJvdmlkZSBhbHRlcm5hdGl2ZQogICAgICAgICMgaW1wbGVtZW50YXRpb25zIHRoYXQgbWF0Y2ggb3VyIHRlc3QgZXhwZWN0YXRpb25zLgogICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPj0gMzoKICAgICAgICAgIHNlbGYuX2Z1dHVyZS5zZXRfZXhjZXB0aW9uKGV4YykKICAgICAgICBlbHNlOgogICAgICAgICAgZSwgdGIgPSBzeXMuZXhjX2luZm8oKVsxOl0KICAgICAgICAgIHNlbGYuX2Z1dHVyZS5zZXRfZXhjZXB0aW9uX2luZm8oZSwgdGIpCgoKY2xhc3MgX1dvcmtlcih0aHJlYWRpbmcuVGhyZWFkKToKICBkZWYgX19pbml0X18oCiAgICAgIHNlbGYsIGlkbGVfd29ya2VyX3F1ZXVlLCBwZXJtaXR0ZWRfdGhyZWFkX2FnZV9pbl9zZWNvbmRzLCB3b3JrX2l0ZW0pOgogICAgc3VwZXIoX1dvcmtlciwgc2VsZikuX19pbml0X18oKQogICAgc2VsZi5faWRsZV93b3JrZXJfcXVldWUgPSBpZGxlX3dvcmtlcl9xdWV1ZQogICAgc2VsZi5fcGVybWl0dGVkX3RocmVhZF9hZ2VfaW5fc2Vjb25kcyA9IHBlcm1pdHRlZF90aHJlYWRfYWdlX2luX3NlY29uZHMKICAgIHNlbGYuX3dvcmtfaXRlbSA9IHdvcmtfaXRlbQogICAgc2VsZi5fd2FrZV9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCiAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgc2VsZi5fc2h1dGRvd24gPSBGYWxzZQoKICBkZWYgcnVuKHNlbGYpOgogICAgd2hpbGUgVHJ1ZToKICAgICAgc2VsZi5fd29ya19pdGVtLnJ1bigpCiAgICAgIHNlbGYuX3dvcmtfaXRlbSA9IE5vbmUKCiAgICAgICMgSWYgd2UgYXJlIGV4cGxpY2l0bHkgYXdha2UgdGhlbiBkb24ndCBhZGQgb3Vyc2VsdmVzIGJhY2sgdG8gdGhlCiAgICAgICMgaWRsZSBxdWV1ZS4gVGhpcyBvY2N1cnMgaW4gY2FzZSAzIGRlc2NyaWJlZCBiZWxvdy4KICAgICAgaWYgbm90IHNlbGYuX3dha2VfZXZlbnQuaXNfc2V0KCk6CiAgICAgICAgc2VsZi5faWRsZV93b3JrZXJfcXVldWUucHV0KHNlbGYpCgogICAgICBzZWxmLl93YWtlX2V2ZW50LndhaXQoc2VsZi5fcGVybWl0dGVkX3RocmVhZF9hZ2VfaW5fc2Vjb25kcykKICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgICMgV2hlbiB3ZSBhcmUgYXdva2VuLCB3ZSBtYXkgYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczoKICAgICAgICAjICAxKSBfd29ya19pdGVtIGlzIHNldCBhbmQgX3NodXRkb3duIGlzIEZhbHNlLgogICAgICAgICMgICAgIFRoaXMgcmVwcmVzZW50cyB0aGUgY2FzZSB3aGVuIHdlIGhhdmUgYWNjZXB0ZWQgd29yay4KICAgICAgICAjICAyKSBfd29ya19pdGVtIGlzIHVuc2V0IGFuZCBfc2h1dGRvd24gaXMgVHJ1ZS4KICAgICAgICAjICAgICBUaGlzIHJlcHJlc2VudHMgdGhlIGNhc2Ugd2hlcmUgZWl0aGVyIHdlIHRpbWVkIG91dCBiZWZvcmUKICAgICAgICAjICAgICBhY2NlcHRpbmcgd29yayBvciBleHBsaWNpdGx5IHdlcmUgc2h1dGRvd24gd2l0aG91dCBhY2NlcHRpbmcKICAgICAgICAjICAgICBhbnkgd29yay4KICAgICAgICAjICAzKSBfd29ya19pdGVtIGlzIHNldCBhbmQgX3NodXRkb3duIGlzIFRydWUuCiAgICAgICAgIyAgICAgVGhpcyByZXByZXNlbnRzIGEgcmFjZSB3aGVyZSB3ZSBhY2NlcHRlZCB3b3JrIGFuZCBhbHNvCiAgICAgICAgIyAgICAgd2VyZSBzaHV0ZG93biBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgc3RhcnRlZCBwcm9jZXNzaW5nCiAgICAgICAgIyAgICAgdGhhdCB3b3JrLiBJbiB0aGlzIGNhc2Ugd2UgZ3VhcmFudGVlIHRvIHByb2Nlc3MgdGhlIHdvcmsKICAgICAgICAjICAgICBidXQgd2UgZG9uJ3QgY2xlYXIgdGhlIGV2ZW50IGVuc3VyaW5nIHRoYXQgdGhlIG5leHQgbG9vcAogICAgICAgICMgICAgIGFyb3VuZCB0aHJvdWdoIHRvIHRoZSB3YWl0KCkgd29uJ3QgYmxvY2sgYW5kIHdlIHdpbGwgZXhpdAogICAgICAgICMgICAgIHNpbmNlIF93b3JrX2l0ZW0gd2lsbCBiZSB1bnNldC4KCiAgICAgICAgIyBXZSBvbmx5IGV4aXQgd2hlbiBfd29ya19pdGVtIGlzIHVuc2V0IHRvIHByZXZlbnQgZHJvcHBpbmcgb2YKICAgICAgICAjIHN1Ym1pdHRlZCB3b3JrLgogICAgICAgIGlmIHNlbGYuX3dvcmtfaXRlbSBpcyBOb25lOgogICAgICAgICAgc2VsZi5fc2h1dGRvd24gPSBUcnVlCiAgICAgICAgICByZXR1cm4KICAgICAgICBpZiBub3Qgc2VsZi5fc2h1dGRvd246CiAgICAgICAgICBzZWxmLl93YWtlX2V2ZW50LmNsZWFyKCkKCiAgZGVmIGFjY2VwdGVkX3dvcmsoc2VsZiwgd29ya19pdGVtKToKICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0aGUgd29yayB3YXMgYWNjZXB0ZWQuCgogICAgVGhpcyBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgd29ya2VyIGlzIGlkbGUuCiAgICAiIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc2VsZi5fc2h1dGRvd246CiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgICBzZWxmLl93b3JrX2l0ZW0gPSB3b3JrX2l0ZW0KICAgICAgc2VsZi5fd2FrZV9ldmVudC5zZXQoKQogICAgICByZXR1cm4gVHJ1ZQoKICBkZWYgc2h1dGRvd24oc2VsZik6CiAgICAiIiJNYXJrcyB0aGlzIHRocmVhZCBhcyBzaHV0ZG93biBwb3NzaWJseSB3YWtpbmcgaXQgdXAgaWYgaXQgaXMgaWRsZS4iIiIKICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgaWYgc2VsZi5fc2h1dGRvd246CiAgICAgICAgcmV0dXJuCiAgICAgIHNlbGYuX3NodXRkb3duID0gVHJ1ZQogICAgICBzZWxmLl93YWtlX2V2ZW50LnNldCgpCgoKY2xhc3MgVW5ib3VuZGVkVGhyZWFkUG9vbEV4ZWN1dG9yKF9iYXNlLkV4ZWN1dG9yKToKICBkZWYgX19pbml0X18oc2VsZiwgcGVybWl0dGVkX3RocmVhZF9hZ2VfaW5fc2Vjb25kcz0zMCk6CiAgICBzZWxmLl9wZXJtaXR0ZWRfdGhyZWFkX2FnZV9pbl9zZWNvbmRzID0gcGVybWl0dGVkX3RocmVhZF9hZ2VfaW5fc2Vjb25kcwogICAgc2VsZi5faWRsZV93b3JrZXJfcXVldWUgPSBxdWV1ZS5RdWV1ZSgpCiAgICBzZWxmLl93b3JrZXJzID0gd2Vha3JlZi5XZWFrU2V0KCkKICAgIHNlbGYuX3NodXRkb3duID0gRmFsc2UKICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpICAjIEd1YXJkcyBhY2Nlc3MgdG8gX3dvcmtlcnMgYW5kIF9zaHV0ZG93bgoKICBkZWYgc3VibWl0KHNlbGYsIGZuLCAqYXJncywgKiprd2FyZ3MpOgogICAgIiIiQXR0ZW1wdHMgdG8gc3VibWl0IHRoZSB3b3JrIGl0ZW0uCgogICAgQSBydW50aW1lIGVycm9yIGlzIHJhaXNlZCBpZiB0aGUgcG9vbCBoYXMgYmVlbiBzaHV0ZG93bi4KICAgICIiIgogICAgZnV0dXJlID0gX2Jhc2UuRnV0dXJlKCkKICAgIHdvcmtfaXRlbSA9IF9Xb3JrSXRlbShmdXR1cmUsIGZuLCBhcmdzLCBrd2FyZ3MpCiAgICB0cnk6CiAgICAgICMgS2VlcCB0cnlpbmcgdG8gZ2V0IGFuIGlkbGUgd29ya2VyIGZyb20gdGhlIHF1ZXVlIHVudGlsIHdlIGZpbmQgb25lCiAgICAgICMgdGhhdCBhY2NlcHRzIHRoZSB3b3JrLgogICAgICB3aGlsZSBub3Qgc2VsZi5faWRsZV93b3JrZXJfcXVldWUuZ2V0KAogICAgICAgICAgYmxvY2s9RmFsc2UpLmFjY2VwdGVkX3dvcmsod29ya19pdGVtKToKICAgICAgICBwYXNzCiAgICAgIHJldHVybiBmdXR1cmUKICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgIGlmIHNlbGYuX3NodXRkb3duOgogICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICdDYW5ub3Qgc2NoZWR1bGUgbmV3IHRhc2tzIGFmdGVyIHRocmVhZCBwb29sICcKICAgICAgICAgICAgICAnaGFzIGJlZW4gc2h1dGRvd24uJykKCiAgICAgICAgd29ya2VyID0gX1dvcmtlcigKICAgICAgICAgICAgc2VsZi5faWRsZV93b3JrZXJfcXVldWUsCiAgICAgICAgICAgIHNlbGYuX3Blcm1pdHRlZF90aHJlYWRfYWdlX2luX3NlY29uZHMsCiAgICAgICAgICAgIHdvcmtfaXRlbSkKICAgICAgICB3b3JrZXIuZGFlbW9uID0gVHJ1ZQogICAgICAgIHdvcmtlci5zdGFydCgpCiAgICAgICAgc2VsZi5fd29ya2Vycy5hZGQod29ya2VyKQogICAgICAgIHJldHVybiBmdXR1cmUKCiAgZGVmIHNodXRkb3duKHNlbGYsIHdhaXQ9VHJ1ZSk6CiAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgIGlmIHNlbGYuX3NodXRkb3duOgogICAgICAgIHJldHVybgoKICAgICAgc2VsZi5fc2h1dGRvd24gPSBUcnVlCiAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2VyczoKICAgICAgICB3b3JrZXIuc2h1dGRvd24oKQoKICAgICAgaWYgd2FpdDoKICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYuX3dvcmtlcnM6CiAgICAgICAgICB3b3JrZXIuam9pbigpCpR9lCiMEl9Xb3JrSXRlbS5fX2luaXRfX5RqVjEBAEsiSyaHlIwNX1dvcmtJdGVtLnJ1bpRqVjEBAEsoSzaHlIwJX1dvcmtJdGVtlGpdMQEASyFLNoeUjBBfV29ya2VyLl9faW5pdF9flGpWMQEASzpLQoeUjAtfV29ya2VyLnJ1bpRqVjEBAEtES2WHlIwVX1dvcmtlci5hY2NlcHRlZF93b3JrlGpWMQEAS2dLcoeUjBBfV29ya2VyLnNodXRkb3dulGpWMQEAS3RLeoeUjAdfV29ya2VylGpdMQEASzlLeoeUjCRVbmJvdW5kZWRUaHJlYWRQb29sRXhlY3V0b3IuX19pbml0X1+UalYxAQBLfkuDh5SMIlVuYm91bmRlZFRocmVhZFBvb2xFeGVjdXRvci5zdWJtaXSUalYxAQBLhUuhh5SMJFVuYm91bmRlZFRocmVhZFBvb2xFeGVjdXRvci5zaHV0ZG93bpRqVjEBAEujS66HlIwbVW5ib3VuZGVkVGhyZWFkUG9vbEV4ZWN1dG9ylGpdMQEAS31LroeUdX2UKIwbVW5ib3VuZGVkVGhyZWFkUG9vbEV4ZWN1dG9ylGqmAwAAjCJVbmJvdW5kZWRUaHJlYWRQb29sRXhlY3V0b3Iuc3VibWl0lGqmAwAAjCRVbmJvdW5kZWRUaHJlYWRQb29sRXhlY3V0b3Iuc2h1dGRvd26UaqYDAAB1jCZhcGFjaGVfYmVhbS51dGlscy50aHJlYWRfcG9vbF9leGVjdXRvcpR0lHV1Yi4=